@usableapp/cardds 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/README.md +9 -5
  2. package/css/actions.css +38 -27
  3. package/css/base.css +9 -9
  4. package/css/card.css +24 -23
  5. package/css/choice.css +50 -50
  6. package/css/forms.css +18 -18
  7. package/css/journey.css +16 -16
  8. package/css/layover.css +45 -45
  9. package/css/lists.css +43 -43
  10. package/css/media.css +33 -33
  11. package/css/numbers.css +25 -25
  12. package/css/people.css +11 -11
  13. package/css/sheet.css +21 -21
  14. package/css/theme.template.css +6 -3
  15. package/dist/actions/Btn.d.ts +109 -108
  16. package/dist/actions/BtnRow.d.ts +2 -2
  17. package/dist/actions/Chip.d.ts +102 -101
  18. package/dist/actions/Dot.d.ts +2 -2
  19. package/dist/actions/Dropdown.d.ts +4 -4
  20. package/dist/actions/Fab.d.ts +2 -2
  21. package/dist/actions/IconBtn.d.ts +107 -106
  22. package/dist/actions/Link.d.ts +105 -104
  23. package/dist/actions/Segment.d.ts +3 -3
  24. package/dist/cardds.css +333 -321
  25. package/dist/cards/Card.d.ts +99 -98
  26. package/dist/cards/CardFoot.d.ts +2 -2
  27. package/dist/cards/CardHead.d.ts +2 -2
  28. package/dist/cards/CardParts.d.ts +7 -7
  29. package/dist/cards/Placeholder.d.ts +2 -2
  30. package/dist/cards/Stat.d.ts +7 -5
  31. package/dist/cards/Stat.js +2 -2
  32. package/dist/choice/Calendar.d.ts +2 -2
  33. package/dist/choice/Check.d.ts +3 -3
  34. package/dist/choice/DayStrip.d.ts +3 -3
  35. package/dist/choice/Mood.d.ts +2 -2
  36. package/dist/choice/Slider.d.ts +2 -2
  37. package/dist/forms/AddRow.d.ts +2 -2
  38. package/dist/forms/Composer.d.ts +2 -2
  39. package/dist/forms/Field.d.ts +2 -2
  40. package/dist/forms/FileBtn.d.ts +2 -2
  41. package/dist/forms/Pin.d.ts +2 -2
  42. package/dist/journey/NoteRow.d.ts +2 -2
  43. package/dist/journey/Route.d.ts +2 -2
  44. package/dist/journey/TileBadge.d.ts +2 -2
  45. package/dist/layover/Banner.d.ts +2 -2
  46. package/dist/layover/Callout.d.ts +2 -2
  47. package/dist/layover/Deck.d.ts +3 -3
  48. package/dist/lists/Bubble.d.ts +3 -3
  49. package/dist/lists/Kv.d.ts +5 -5
  50. package/dist/lists/Legend.d.ts +3 -3
  51. package/dist/lists/Row.d.ts +5 -4
  52. package/dist/lists/Timeline.d.ts +3 -3
  53. package/dist/media/MapArea.d.ts +2 -2
  54. package/dist/media/Mosaic.d.ts +3 -3
  55. package/dist/media/Postcard.d.ts +2 -2
  56. package/dist/media/Quote.d.ts +2 -2
  57. package/dist/media/Tile.d.ts +5 -4
  58. package/dist/numbers/Badge.d.ts +2 -2
  59. package/dist/numbers/Band.d.ts +3 -3
  60. package/dist/numbers/Bars.d.ts +3 -3
  61. package/dist/numbers/DotGrid.d.ts +2 -2
  62. package/dist/numbers/Picker.d.ts +3 -3
  63. package/dist/numbers/Ring.d.ts +2 -2
  64. package/dist/numbers/Track.d.ts +3 -3
  65. package/dist/people/Avatar.d.ts +100 -99
  66. package/dist/people/AvatarPick.d.ts +3 -3
  67. package/dist/scaffold/ActionBar.d.ts +3 -3
  68. package/dist/scaffold/AppBar.d.ts +2 -2
  69. package/dist/scaffold/BaseContent.d.ts +3 -3
  70. package/dist/scaffold/Centre.d.ts +3 -3
  71. package/dist/scaffold/EmptyState.d.ts +2 -2
  72. package/dist/scaffold/FilterRow.d.ts +2 -2
  73. package/dist/scaffold/FloatBar.d.ts +105 -104
  74. package/dist/scaffold/PagerAt.d.ts +2 -2
  75. package/dist/scaffold/Screen.d.ts +100 -99
  76. package/dist/scaffold/TopBar.d.ts +2 -2
  77. package/dist/sheets/CardBack.d.ts +2 -2
  78. package/dist/sheets/Drawer.d.ts +5 -5
  79. package/dist/sheets/Sheet.d.ts +2 -2
  80. package/dist/sheets/SheetBody.d.ts +2 -2
  81. package/dist/sheets/SheetHead.d.ts +2 -2
  82. package/dist/sheets/SheetStack.d.ts +2 -2
  83. package/dist/sheets/SheetStage.d.ts +2 -2
  84. package/dist/sheets/Step.d.ts +2 -2
  85. package/dist/type/Icon.d.ts +22 -7
  86. package/dist/type/Icon.js +27 -4
  87. package/dist/type/Text.d.ts +7 -1
  88. package/dist/type/Text.js +2 -2
  89. package/package.json +3 -2
package/css/numbers.css CHANGED
@@ -31,8 +31,8 @@
31
31
  mask: radial-gradient(farthest-side, transparent calc(100% - var(--_w) - 1px), currentColor calc(100% - var(--_w)));
32
32
  -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - var(--_w) - 1px), currentColor calc(100% - var(--_w)));
33
33
  }
34
- .ring__value { font: var(--type-stat); letter-spacing: var(--track-display); }
35
- .ring__label { font: var(--type-caption); color: var(--card-muted); }
34
+ .ring__value { font: var(--ring-value-font, var(--type-stat)); letter-spacing: var(--track-display); }
35
+ .ring__label { font: var(--ring-label-font, var(--type-caption)); color: var(--ring-label-ink, var(--card-muted)); }
36
36
  .card--3 .ring__label { color: inherit; opacity: 0.7; }
37
37
  .ring--sm { --_size: var(--avatar-xl); --_w: var(--sp-3); }
38
38
  .ring--sm .ring__value { font: 800 var(--fs-2xl)/1 var(--font-display); }
@@ -52,10 +52,10 @@
52
52
  --on-accent: var(--_bg);
53
53
  list-style: none;
54
54
  margin: 0;
55
- padding: var(--sp-2);
55
+ padding: var(--track-pad, var(--sp-2));
56
56
  display: flex;
57
57
  align-items: center;
58
- border-radius: var(--r-chip);
58
+ border-radius: var(--track-radius, var(--r-chip));
59
59
  background: var(--_bg);
60
60
  color: var(--_ink);
61
61
  }
@@ -96,9 +96,9 @@
96
96
  grid-template-areas: "label num" "foot num";
97
97
  align-items: end;
98
98
  gap: var(--sp-2) var(--sp-4);
99
- min-height: var(--tile-h);
99
+ min-height: var(--card-band-min-h, var(--tile-h));
100
100
  }
101
- .band__label { grid-area: label; align-self: start; font: var(--type-label); font-size: var(--fs-body); line-height: 1.2; }
101
+ .band__label { grid-area: label; align-self: start; font: var(--band-label-font, var(--type-label)); font-size: var(--band-label-font-size, var(--fs-body)); line-height: 1.2; }
102
102
  .band__num {
103
103
  grid-area: num;
104
104
  font: 800 var(--fs-giant) / 0.9 var(--font-display);
@@ -106,14 +106,14 @@
106
106
  font-variant-numeric: tabular-nums;
107
107
  }
108
108
  .band__num small { font-size: 0.5em; font-weight: 700; margin-right: 0.1em; } /* unit or % */
109
- .band__foot { grid-area: foot; font: var(--type-caption); color: var(--card-muted); }
109
+ .band__foot { grid-area: foot; font: var(--band-foot-font, var(--type-caption)); color: var(--band-foot-ink, var(--card-muted)); }
110
110
  .card--3 .band__foot { color: inherit; opacity: 0.7; }
111
111
  /* band stack: ONE card boundary; bands are frameless inside it, a hairline
112
112
  between each. Bands may still carry slot tints (card--2 / card--3). */
113
113
  .band-stack {
114
114
  display: grid;
115
- border: var(--border-w) solid var(--card-border);
116
- border-radius: var(--r-card);
115
+ border: var(--border-w) solid var(--band-stack-border, var(--card-border));
116
+ border-radius: var(--band-stack-radius, var(--r-card));
117
117
  overflow: hidden;
118
118
  }
119
119
  .band-stack > .card--band { border: 0; border-radius: 0; box-shadow: none; }
@@ -164,7 +164,7 @@
164
164
 
165
165
  /* ---- picker: horizontal snap picker, centre value big ----
166
166
  <div class="picker"><div class="picker__rail"><button class="picker__item">100</button>…</div><span class="picker__unit">ml</span></div> */
167
- .picker { display: grid; gap: var(--sp-1); justify-items: center; position: relative; }
167
+ .picker { display: grid; gap: var(--picker-gap, var(--sp-1)); justify-items: center; position: relative; }
168
168
  .picker__rail {
169
169
  width: 100%;
170
170
  display: grid;
@@ -172,7 +172,7 @@
172
172
  /* side padding = one third of the rail, so the first and last value can sit
173
173
  in the centre; the content box is then one third wide, and each column
174
174
  fills it (percent columns resolve against the content box) */
175
- padding-inline: calc(100% / 3);
175
+ padding-inline: var(--picker-rail-pad-x, calc(100% / 3));
176
176
  grid-auto-columns: 100%;
177
177
  overflow-x: auto;
178
178
  scroll-snap-type: x mandatory;
@@ -185,8 +185,8 @@
185
185
  border: 0;
186
186
  background: transparent;
187
187
  color: inherit;
188
- padding: var(--sp-2) 0;
189
- font: var(--type-stat);
188
+ padding: var(--picker-item-pad-y, var(--sp-2)) var(--picker-item-pad-x, 0);
189
+ font: var(--picker-item-font, var(--type-stat));
190
190
  letter-spacing: var(--track-display);
191
191
  font-variant-numeric: tabular-nums;
192
192
  opacity: 0.3;
@@ -205,7 +205,7 @@
205
205
  left: calc(100% / 3);
206
206
  }
207
207
  .picker::after { left: auto; right: calc(100% / 3); }
208
- .picker__unit { font: var(--type-caption); color: var(--card-muted); }
208
+ .picker__unit { font: var(--picker-unit-font, var(--type-caption)); color: var(--picker-unit-ink, var(--card-muted)); }
209
209
  .card--3 .picker__unit { color: inherit; opacity: 0.7; }
210
210
  /* the scrolled-to item lights up by position — no JS */
211
211
  @supports (animation-timeline: view(x)) {
@@ -221,30 +221,30 @@
221
221
  .badge {
222
222
  display: inline-grid;
223
223
  place-items: center;
224
- min-width: var(--badge);
225
- height: var(--badge);
226
- padding: 0 var(--sp-2);
227
- border-radius: var(--r-chip);
228
- background: var(--accent);
229
- color: var(--on-accent);
230
- font: var(--type-label);
224
+ min-width: var(--badge-min-w, var(--badge));
225
+ height: var(--badge-h, var(--badge));
226
+ padding: var(--badge-pad-y, 0) var(--badge-pad-x, var(--sp-2));
227
+ border-radius: var(--badge-radius, var(--r-chip));
228
+ background: var(--badge-bg, var(--accent));
229
+ color: var(--badge-ink, var(--on-accent));
230
+ font: var(--badge-font, var(--type-label));
231
231
  font-variant-numeric: tabular-nums;
232
232
  vertical-align: middle;
233
233
  }
234
- .badge--soft { background: var(--ink-tint); color: inherit; }
234
+ .badge--soft { background: var(--badge-soft-bg, var(--ink-tint)); color: inherit; }
235
235
 
236
236
  /* ---- bars: three or four bars with a count on top — the glance chart ----
237
237
  <div class="bars"><div class="bar" style="--v: 16"><span>+16</span></div>… --max on the parent */
238
- .bars { --max: 20; --_h: 5rem; display: flex; align-items: end; gap: var(--sp-2); height: calc(var(--_h) + var(--sp-8)); }
238
+ .bars { --max: 20; --_h: 5rem; display: flex; align-items: end; gap: var(--bars-gap, var(--sp-2)); height: calc(var(--_h) + var(--sp-8)); }
239
239
  .bar {
240
240
  flex: 1;
241
241
  min-width: 0;
242
242
  display: grid;
243
243
  align-content: end;
244
244
  justify-items: center;
245
- gap: var(--sp-1);
245
+ gap: var(--bar-gap, var(--sp-1));
246
246
  height: 100%;
247
- font: var(--type-caption);
247
+ font: var(--bar-font, var(--type-caption));
248
248
  font-weight: 700;
249
249
  }
250
250
  .bar::after {
package/css/people.css CHANGED
@@ -15,9 +15,9 @@
15
15
  border-radius: 50%;
16
16
  display: grid;
17
17
  place-items: center;
18
- background: var(--card-2-bg);
19
- color: var(--card-2-ink);
20
- font: var(--type-label);
18
+ background: var(--avatar-bg, var(--card-2-bg));
19
+ color: var(--avatar-ink, var(--card-2-ink));
20
+ font: var(--avatar-font, var(--type-label));
21
21
  font-size: calc(var(--_size) * 0.3);
22
22
  text-transform: uppercase;
23
23
  letter-spacing: 0.02em;
@@ -30,10 +30,10 @@
30
30
  .avatar--lg { --_size: var(--avatar-lg); }
31
31
  .avatar--xl { --_size: var(--avatar-xl); } /* sheet head icon ring */
32
32
  /* outline avatar: no fill, an edge — icons in a ring, "add" slots */
33
- .avatar--outline { background: transparent; color: inherit; border: var(--border-w) solid var(--outline); }
34
- .avatar--add { background: transparent; color: inherit; border: var(--border-w) dashed var(--outline); cursor: pointer; }
33
+ .avatar--outline { background: transparent; color: inherit; border: var(--border-w) solid var(--avatar-outline-border, var(--outline)); }
34
+ .avatar--add { background: transparent; color: inherit; border: var(--border-w) dashed var(--avatar-add-border, var(--outline)); cursor: pointer; }
35
35
  /* accent avatar: the "+7" tail, the selected person */
36
- .avatar--on { background: var(--accent); color: var(--on-accent); }
36
+ .avatar--on { background: var(--avatar-on-bg, var(--accent)); color: var(--avatar-on-ink, var(--on-accent)); }
37
37
  /* halo: faint concentric rings behind a hero avatar (decorative) */
38
38
  .avatar--halo::before {
39
39
  content: "";
@@ -55,7 +55,7 @@
55
55
  <div class="avatar-pick"><button class="avatar-pick__item"><span class="avatar avatar--lg avatar--add">+</span><span class="avatar-pick__name">Add</span><span class="avatar-pick__role">member</span></button>…</div> */
56
56
  .avatar-pick {
57
57
  display: flex;
58
- gap: var(--sp-4);
58
+ gap: var(--avatar-pick-gap, var(--sp-4));
59
59
  overflow-x: auto;
60
60
  scroll-snap-type: x proximity;
61
61
  scrollbar-width: none; /* starts at the card's padding edge, like every row */
@@ -64,16 +64,16 @@
64
64
  .avatar-pick__item {
65
65
  scroll-snap-align: start;
66
66
  flex: none;
67
- width: var(--avatar-lg);
67
+ width: var(--avatar-pick-item-w, var(--avatar-lg));
68
68
  display: grid;
69
69
  justify-items: center;
70
- gap: var(--sp-2);
70
+ gap: var(--avatar-pick-item-gap, var(--sp-2));
71
71
  border: 0;
72
72
  background: transparent;
73
73
  color: inherit;
74
74
  padding: 0;
75
75
  text-align: center;
76
76
  }
77
- .avatar-pick__name { font: var(--type-label); font-size: var(--fs-sm); }
78
- .avatar-pick__role { font: var(--type-caption); color: var(--card-muted); margin-top: calc(-1 * var(--sp-1)); }
77
+ .avatar-pick__name { font: var(--avatar-pick-name-font, var(--type-label)); font-size: var(--avatar-pick-name-font-size, var(--fs-sm)); }
78
+ .avatar-pick__role { font: var(--avatar-pick-role-font, var(--type-caption)); color: var(--avatar-pick-role-ink, var(--card-muted)); margin-top: calc(-1 * var(--sp-1)); }
79
79
  .card--3 .avatar-pick__role { color: inherit; opacity: 0.7; }
package/css/sheet.css CHANGED
@@ -80,7 +80,7 @@
80
80
  overflow: clip;
81
81
  border-radius: var(--r-card) var(--r-card) 0 0;
82
82
  border-bottom: 0;
83
- box-shadow: var(--shadow-sheet);
83
+ box-shadow: var(--sheet-shadow, var(--shadow-sheet));
84
84
  }
85
85
  .sheet--full { --_y: 0%; --_cover: 0rem; }
86
86
  .sheet--half { --_y: calc(var(--sheet-half) * 100%); --_cover: calc(var(--sheet-half) * var(--_box)); }
@@ -178,7 +178,7 @@
178
178
  opacity: 0.3;
179
179
  width: var(--tap-sm);
180
180
  height: var(--_handle);
181
- border-radius: var(--r-chip);
181
+ border-radius: var(--sheet-handle-radius, var(--r-chip));
182
182
  margin: 0 auto;
183
183
  padding: 0;
184
184
  touch-action: none;
@@ -210,8 +210,8 @@
210
210
  min-height: var(--tap);
211
211
  text-align: center;
212
212
  }
213
- .sheet__title { font: var(--type-h2); letter-spacing: var(--track-h2); margin: 0; }
214
- .sheet__sub { font: var(--type-caption); color: var(--card-muted); }
213
+ .sheet__title { font: var(--sheet-title-font, var(--type-h2)); letter-spacing: var(--track-h2); margin: 0; }
214
+ .sheet__sub { font: var(--sheet-sub-font, var(--type-caption)); color: var(--sheet-sub-ink, var(--card-muted)); }
215
215
 
216
216
  /* ============================================================
217
217
  .sheet-stage — the overlay stage: a page-height box the sheet
@@ -233,7 +233,7 @@
233
233
  margin-inline: auto;
234
234
  overflow: clip; /* not hidden: a clipped box is not a scroll container, so revealing a focused field never shifts the stage */
235
235
  container-type: size; /* the sheet's body reads this box's height as 100cqh (--_box above) */
236
- background: var(--surface);
236
+ background: var(--sheet-stage-bg, var(--surface));
237
237
  }
238
238
  /* on an app screen the stage is the page: it takes the screen's inset back (edge to
239
239
  edge, like a step) and, after a fixed .appbar, the room the screen reserved for
@@ -268,7 +268,7 @@
268
268
  position: absolute;
269
269
  inset: 0;
270
270
  isolation: isolate; /* the ring and the hint stack inside the map only — a sheet over the map covers them */
271
- color: var(--on-surface);
271
+ color: var(--map-ink, var(--on-surface));
272
272
  background:
273
273
  repeating-linear-gradient(75deg, transparent 0 5.5rem, var(--hairline) 5.5rem 6.25rem),
274
274
  repeating-linear-gradient(-18deg, transparent 0 8.75rem, var(--ink-tint) 8.75rem 9.25rem),
@@ -286,9 +286,9 @@
286
286
  height: var(--map-ring);
287
287
  translate: -50% -50%;
288
288
  border-radius: 50%;
289
- border: var(--border-w) solid var(--accent);
290
- background: color-mix(in srgb, var(--accent) 22%, transparent);
291
- box-shadow: var(--shadow-float);
289
+ border: var(--border-w) solid var(--map-ring-border, var(--accent));
290
+ background: var(--map-ring-bg, color-mix(in srgb, var(--accent) 22%, transparent));
291
+ box-shadow: var(--map-ring-shadow, var(--shadow-float));
292
292
  pointer-events: none;
293
293
  z-index: 1; /* above the engine's panes (Leaflet's tiles sit at 200, but inside their own stacking context) */
294
294
  }
@@ -297,10 +297,10 @@
297
297
  right: var(--sp-2);
298
298
  bottom: var(--sp-2);
299
299
  padding: var(--sp-0) var(--sp-2);
300
- border-radius: var(--r-chip);
301
- background: color-mix(in srgb, var(--surface) 80%, transparent);
302
- color: var(--on-surface-muted);
303
- font: var(--type-caption);
300
+ border-radius: var(--map-credit-radius, var(--r-chip));
301
+ background: var(--map-credit-bg, color-mix(in srgb, var(--surface) 80%, transparent));
302
+ color: var(--map-credit-ink, var(--on-surface-muted));
303
+ font: var(--map-credit-font, var(--type-caption));
304
304
  pointer-events: none;
305
305
  z-index: 1;
306
306
  }
@@ -311,12 +311,12 @@
311
311
  translate: -50% 0;
312
312
  max-width: calc(100% - 2 * var(--sp-4));
313
313
  padding: var(--sp-2) var(--sp-4);
314
- border-radius: var(--r-chip);
315
- background: var(--card-3-bg);
316
- color: var(--card-3-ink);
317
- font: var(--type-label);
314
+ border-radius: var(--map-hint-radius, var(--r-chip));
315
+ background: var(--map-hint-bg, var(--card-3-bg));
316
+ color: var(--map-hint-ink, var(--card-3-ink));
317
+ font: var(--map-hint-font, var(--type-label));
318
318
  text-align: center;
319
- box-shadow: var(--shadow-float);
319
+ box-shadow: var(--map-hint-shadow, var(--shadow-float));
320
320
  pointer-events: none;
321
321
  z-index: 1;
322
322
  }
@@ -330,7 +330,7 @@
330
330
  the sheet gives it up itself, as --_lift — the same token a raised sheet floats on. */
331
331
  .sheet-stage > .sheet { --_lift: var(--kb, 0rem); bottom: var(--_lift); }
332
332
  .sheet-stage > .sheet--raised { --_lift: calc(var(--tap-lg) + var(--kb, 0rem)); }
333
- .sheet--raised { --_lift: var(--tap-lg); bottom: var(--_lift); border-radius: var(--r-card); border-bottom: var(--border-w) solid var(--card-border); }
333
+ .sheet--raised { --_lift: var(--tap-lg); bottom: var(--_lift); border-radius: var(--sheet-raised-radius, var(--r-card)); border-bottom: var(--border-w) solid var(--card-border); }
334
334
  .sheet-stage__foot {
335
335
  position: absolute;
336
336
  inset-inline: 0;
@@ -339,8 +339,8 @@
339
339
  margin: 0;
340
340
  display: grid;
341
341
  place-items: center;
342
- font: var(--type-caption);
343
- color: var(--card-3-ink);
342
+ font: var(--sheet-stage-foot-font, var(--type-caption));
343
+ color: var(--sheet-stage-foot-ink, var(--card-3-ink));
344
344
  z-index: 2;
345
345
  }
346
346
 
@@ -4,9 +4,12 @@
4
4
  Not part of the bundle: copy this file into the project as its own
5
5
  `theme.css` and load it AFTER cardds.css. It is the whole public
6
6
  surface of the system — the four size bases and the colour roles.
7
- Everything else in tokens.css is derived from these; a project never
8
- sets a derived token (--sp-4, --fs-h1, --r-card, --tap, --sheet-*…)
9
- and never a multiplier.
7
+ Widest first: a BASE moves a whole family; a role / root token one meaning
8
+ everywhere (--accent, --btn-h, --header-h…); a KNOB one component
9
+ (--btn-pad-x, --chip-bg… — docs/knobs.md lists them; also settable on any
10
+ element, for the components inside it). Never a step of the scale
11
+ (--sp-4, --fs-h1, --r-card), a multiplier, a private --_* or a published
12
+ value (--card-pad, --bar-reserve, --sheet-*).
10
13
 
11
14
  The values below are the defaults (the wireframe): as shipped, this
12
15
  file changes nothing (tests/tokens.spec.js holds it to that).
@@ -1,5 +1,5 @@
1
- import { type ComponentPropsWithoutRef } from 'react';
2
- export interface BtnProps extends ComponentPropsWithoutRef<'button'> {
1
+ import { type ComponentProps } from 'react';
2
+ export interface BtnProps extends ComponentProps<'button'> {
3
3
  /** the filled accent button — the one forward move */
4
4
  primary?: boolean;
5
5
  /** ink on whatever it sits on, a faint outline */
@@ -16,76 +16,128 @@ export interface BtnProps extends ComponentPropsWithoutRef<'button'> {
16
16
  * In a CardFoot up to four share the line; in an ActionBar it takes the width. An Icon xs may lead or trail the label.
17
17
  */
18
18
  export declare function Btn({ primary, quiet, block, xl, href, className, type, ...rest }: BtnProps): import("react").DetailedReactHTMLElement<{
19
- form?: string | undefined | undefined;
20
- slot?: string | undefined | undefined;
19
+ ref?: import("react").Ref<HTMLButtonElement> | undefined;
20
+ key?: import("react").Key | null | undefined;
21
+ disabled?: boolean | undefined;
22
+ form?: string | undefined;
23
+ formAction?: string | ((formData: FormData) => void | Promise<void>) | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS] | undefined;
24
+ formEncType?: string | undefined;
25
+ formMethod?: string | undefined;
26
+ formNoValidate?: boolean | undefined;
27
+ formTarget?: string | undefined;
28
+ name?: string | undefined;
29
+ value?: string | readonly string[] | number | undefined;
30
+ defaultChecked?: boolean | undefined;
31
+ defaultValue?: string | number | readonly string[] | undefined;
32
+ suppressContentEditableWarning?: boolean | undefined;
33
+ suppressHydrationWarning?: boolean | undefined;
34
+ accessKey?: string | undefined;
35
+ autoCapitalize?: "off" | "none" | "on" | "sentences" | "words" | "characters" | undefined | (string & {});
36
+ autoFocus?: boolean | undefined;
37
+ contentEditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
38
+ contextMenu?: string | undefined;
39
+ dir?: string | undefined;
40
+ draggable?: (boolean | "true" | "false") | undefined;
41
+ enterKeyHint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
42
+ hidden?: boolean | undefined;
43
+ id?: string | undefined;
44
+ lang?: string | undefined;
45
+ nonce?: string | undefined;
46
+ slot?: string | undefined;
47
+ spellCheck?: (boolean | "true" | "false") | undefined;
21
48
  style?: import("react").CSSProperties | undefined;
22
- title?: string | undefined | undefined;
23
- suppressHydrationWarning?: boolean | undefined | undefined;
24
- color?: string | undefined | undefined;
25
- id?: string | undefined | undefined;
26
- lang?: string | undefined | undefined;
27
- name?: string | undefined | undefined;
28
- nonce?: string | undefined | undefined;
29
- part?: string | undefined | undefined;
49
+ tabIndex?: number | undefined;
50
+ title?: string | undefined;
51
+ translate?: "yes" | "no" | undefined;
52
+ radioGroup?: string | undefined;
30
53
  role?: import("react").AriaRole | undefined;
31
- tabIndex?: number | undefined | undefined;
32
- "aria-activedescendant"?: string | undefined | undefined;
54
+ about?: string | undefined;
55
+ content?: string | undefined;
56
+ datatype?: string | undefined;
57
+ inlist?: any;
58
+ prefix?: string | undefined;
59
+ property?: string | undefined;
60
+ rel?: string | undefined;
61
+ resource?: string | undefined;
62
+ rev?: string | undefined;
63
+ typeof?: string | undefined;
64
+ vocab?: string | undefined;
65
+ autoCorrect?: string | undefined;
66
+ autoSave?: string | undefined;
67
+ color?: string | undefined;
68
+ itemProp?: string | undefined;
69
+ itemScope?: boolean | undefined;
70
+ itemType?: string | undefined;
71
+ itemID?: string | undefined;
72
+ itemRef?: string | undefined;
73
+ results?: number | undefined;
74
+ security?: string | undefined;
75
+ unselectable?: "on" | "off" | undefined;
76
+ popover?: "" | "auto" | "manual" | "hint" | undefined;
77
+ popoverTargetAction?: "toggle" | "show" | "hide" | undefined;
78
+ popoverTarget?: string | undefined;
79
+ inert?: boolean | undefined;
80
+ inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined;
81
+ is?: string | undefined;
82
+ exportparts?: string | undefined;
83
+ part?: string | undefined;
84
+ "aria-activedescendant"?: string | undefined;
33
85
  "aria-atomic"?: (boolean | "true" | "false") | undefined;
34
- "aria-autocomplete"?: "none" | "inline" | "list" | "both" | undefined | undefined;
35
- "aria-braillelabel"?: string | undefined | undefined;
36
- "aria-brailleroledescription"?: string | undefined | undefined;
86
+ "aria-autocomplete"?: "none" | "inline" | "list" | "both" | undefined;
87
+ "aria-braillelabel"?: string | undefined;
88
+ "aria-brailleroledescription"?: string | undefined;
37
89
  "aria-busy"?: (boolean | "true" | "false") | undefined;
38
- "aria-checked"?: boolean | "false" | "mixed" | "true" | undefined | undefined;
39
- "aria-colcount"?: number | undefined | undefined;
40
- "aria-colindex"?: number | undefined | undefined;
41
- "aria-colindextext"?: string | undefined | undefined;
42
- "aria-colspan"?: number | undefined | undefined;
43
- "aria-controls"?: string | undefined | undefined;
44
- "aria-current"?: boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined | undefined;
45
- "aria-describedby"?: string | undefined | undefined;
46
- "aria-description"?: string | undefined | undefined;
47
- "aria-details"?: string | undefined | undefined;
90
+ "aria-checked"?: boolean | "false" | "mixed" | "true" | undefined;
91
+ "aria-colcount"?: number | undefined;
92
+ "aria-colindex"?: number | undefined;
93
+ "aria-colindextext"?: string | undefined;
94
+ "aria-colspan"?: number | undefined;
95
+ "aria-controls"?: string | undefined;
96
+ "aria-current"?: boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined;
97
+ "aria-describedby"?: string | undefined;
98
+ "aria-description"?: string | undefined;
99
+ "aria-details"?: string | undefined;
48
100
  "aria-disabled"?: (boolean | "true" | "false") | undefined;
49
- "aria-dropeffect"?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined | undefined;
50
- "aria-errormessage"?: string | undefined | undefined;
101
+ "aria-dropeffect"?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined;
102
+ "aria-errormessage"?: string | undefined;
51
103
  "aria-expanded"?: (boolean | "true" | "false") | undefined;
52
- "aria-flowto"?: string | undefined | undefined;
104
+ "aria-flowto"?: string | undefined;
53
105
  "aria-grabbed"?: (boolean | "true" | "false") | undefined;
54
- "aria-haspopup"?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined | undefined;
106
+ "aria-haspopup"?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined;
55
107
  "aria-hidden"?: (boolean | "true" | "false") | undefined;
56
- "aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined | undefined;
57
- "aria-keyshortcuts"?: string | undefined | undefined;
58
- "aria-label"?: string | undefined | undefined;
59
- "aria-labelledby"?: string | undefined | undefined;
60
- "aria-level"?: number | undefined | undefined;
61
- "aria-live"?: "off" | "assertive" | "polite" | undefined | undefined;
108
+ "aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined;
109
+ "aria-keyshortcuts"?: string | undefined;
110
+ "aria-label"?: string | undefined;
111
+ "aria-labelledby"?: string | undefined;
112
+ "aria-level"?: number | undefined;
113
+ "aria-live"?: "off" | "assertive" | "polite" | undefined;
62
114
  "aria-modal"?: (boolean | "true" | "false") | undefined;
63
115
  "aria-multiline"?: (boolean | "true" | "false") | undefined;
64
116
  "aria-multiselectable"?: (boolean | "true" | "false") | undefined;
65
- "aria-orientation"?: "horizontal" | "vertical" | undefined | undefined;
66
- "aria-owns"?: string | undefined | undefined;
67
- "aria-placeholder"?: string | undefined | undefined;
68
- "aria-posinset"?: number | undefined | undefined;
69
- "aria-pressed"?: boolean | "false" | "mixed" | "true" | undefined | undefined;
117
+ "aria-orientation"?: "horizontal" | "vertical" | undefined;
118
+ "aria-owns"?: string | undefined;
119
+ "aria-placeholder"?: string | undefined;
120
+ "aria-posinset"?: number | undefined;
121
+ "aria-pressed"?: boolean | "false" | "mixed" | "true" | undefined;
70
122
  "aria-readonly"?: (boolean | "true" | "false") | undefined;
71
- "aria-relevant"?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | undefined | undefined;
123
+ "aria-relevant"?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | undefined;
72
124
  "aria-required"?: (boolean | "true" | "false") | undefined;
73
- "aria-roledescription"?: string | undefined | undefined;
74
- "aria-rowcount"?: number | undefined | undefined;
75
- "aria-rowindex"?: number | undefined | undefined;
76
- "aria-rowindextext"?: string | undefined | undefined;
77
- "aria-rowspan"?: number | undefined | undefined;
125
+ "aria-roledescription"?: string | undefined;
126
+ "aria-rowcount"?: number | undefined;
127
+ "aria-rowindex"?: number | undefined;
128
+ "aria-rowindextext"?: string | undefined;
129
+ "aria-rowspan"?: number | undefined;
78
130
  "aria-selected"?: (boolean | "true" | "false") | undefined;
79
- "aria-setsize"?: number | undefined | undefined;
80
- "aria-sort"?: "none" | "ascending" | "descending" | "other" | undefined | undefined;
81
- "aria-valuemax"?: number | undefined | undefined;
82
- "aria-valuemin"?: number | undefined | undefined;
83
- "aria-valuenow"?: number | undefined | undefined;
84
- "aria-valuetext"?: string | undefined | undefined;
85
- children?: import("react").ReactNode;
131
+ "aria-setsize"?: number | undefined;
132
+ "aria-sort"?: "none" | "ascending" | "descending" | "other" | undefined;
133
+ "aria-valuemax"?: number | undefined;
134
+ "aria-valuemin"?: number | undefined;
135
+ "aria-valuenow"?: number | undefined;
136
+ "aria-valuetext"?: string | undefined;
137
+ children?: import("react").ReactNode | undefined;
86
138
  dangerouslySetInnerHTML?: {
87
139
  __html: string | TrustedHTML;
88
- } | undefined | undefined;
140
+ } | undefined;
89
141
  onCopy?: import("react").ClipboardEventHandler<HTMLButtonElement> | undefined;
90
142
  onCopyCapture?: import("react").ClipboardEventHandler<HTMLButtonElement> | undefined;
91
143
  onCut?: import("react").ClipboardEventHandler<HTMLButtonElement> | undefined;
@@ -254,58 +306,7 @@ export declare function Btn({ primary, quiet, block, xl, href, className, type,
254
306
  onTransitionRunCapture?: import("react").TransitionEventHandler<HTMLButtonElement> | undefined;
255
307
  onTransitionStart?: import("react").TransitionEventHandler<HTMLButtonElement> | undefined;
256
308
  onTransitionStartCapture?: import("react").TransitionEventHandler<HTMLButtonElement> | undefined;
257
- key?: import("react").Key | null | undefined;
258
- defaultChecked?: boolean | undefined | undefined;
259
- defaultValue?: string | number | readonly string[] | undefined;
260
- suppressContentEditableWarning?: boolean | undefined | undefined;
261
- accessKey?: string | undefined | undefined;
262
- autoCapitalize?: "off" | "none" | "on" | "sentences" | "words" | "characters" | undefined | (string & {}) | undefined;
263
- autoFocus?: boolean | undefined | undefined;
264
- contentEditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
265
- contextMenu?: string | undefined | undefined;
266
- dir?: string | undefined | undefined;
267
- draggable?: (boolean | "true" | "false") | undefined;
268
- enterKeyHint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
269
- hidden?: boolean | undefined | undefined;
270
- spellCheck?: (boolean | "true" | "false") | undefined;
271
- translate?: "yes" | "no" | undefined | undefined;
272
- radioGroup?: string | undefined | undefined;
273
- about?: string | undefined | undefined;
274
- content?: string | undefined | undefined;
275
- datatype?: string | undefined | undefined;
276
- inlist?: any;
277
- prefix?: string | undefined | undefined;
278
- property?: string | undefined | undefined;
279
- rel?: string | undefined | undefined;
280
- resource?: string | undefined | undefined;
281
- rev?: string | undefined | undefined;
282
- typeof?: string | undefined | undefined;
283
- vocab?: string | undefined | undefined;
284
- autoCorrect?: string | undefined | undefined;
285
- autoSave?: string | undefined | undefined;
286
- itemProp?: string | undefined | undefined;
287
- itemScope?: boolean | undefined | undefined;
288
- itemType?: string | undefined | undefined;
289
- itemID?: string | undefined | undefined;
290
- itemRef?: string | undefined | undefined;
291
- results?: number | undefined | undefined;
292
- security?: string | undefined | undefined;
293
- unselectable?: "on" | "off" | undefined | undefined;
294
- popover?: "" | "auto" | "manual" | "hint" | undefined | undefined;
295
- popoverTargetAction?: "toggle" | "show" | "hide" | undefined | undefined;
296
- popoverTarget?: string | undefined | undefined;
297
- inert?: boolean | undefined | undefined;
298
- inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined | undefined;
299
- is?: string | undefined | undefined;
300
- exportparts?: string | undefined | undefined;
301
- disabled?: boolean | undefined | undefined;
302
- formAction?: string | ((formData: FormData) => void | Promise<void>) | undefined;
303
- formEncType?: string | undefined | undefined;
304
- formMethod?: string | undefined | undefined;
305
- formNoValidate?: boolean | undefined | undefined;
306
- formTarget?: string | undefined | undefined;
307
- value?: string | number | readonly string[] | undefined;
308
309
  href: string | undefined;
309
310
  type: "button" | "reset" | "submit" | undefined;
310
311
  className: string;
311
- }, HTMLElement>;
312
+ }, HTMLButtonElement>;
@@ -1,5 +1,5 @@
1
- import type { ComponentPropsWithoutRef } from 'react';
2
- export interface BtnRowProps extends ComponentPropsWithoutRef<'div'> {
1
+ import type { ComponentProps } from 'react';
2
+ export interface BtnRowProps extends ComponentProps<'div'> {
3
3
  }
4
4
  /** BtnRow — twin CTAs inside a card's content sharing the width (Log time · Offer). In a foot use CardFoot instead. */
5
5
  export declare function BtnRow({ className, ...rest }: BtnRowProps): import("react").JSX.Element;