@molecule/app-ui 1.3.5 → 1.3.7

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.
package/README.md CHANGED
@@ -3,21 +3,21 @@ AUTO-GENERATED — DO NOT EDIT THIS FILE.
3
3
  Generated by `mlcl sync-docs` from the package's src/index.ts JSDoc + mlcl/registry.json.
4
4
  Edits here are overwritten on the next commit (molecule's pre-commit hook regenerates).
5
5
  To change this document, edit the module-level JSDoc in src/index.ts.
6
- Generated: 2026-10-15T14:23:01.966Z
6
+ Generated: 2026-10-18T09:34:41.440Z
7
7
  -->
8
8
 
9
9
  # @molecule/app-ui
10
10
 
11
- > **Auto-generated, AI-first package reference** for the [molecule.dev](https://molecule.dev) ecosystem.
12
- > It is written to be read by coding agents as much as by people, and is generated from this
13
- > package's source — edit `src/index.ts` JSDoc, not this file.
14
-
15
11
  UI component interfaces for molecule.dev.
16
12
 
17
13
  Provides standardized prop interfaces for common UI components
18
14
  that can be implemented by different UI libraries (styled-components,
19
15
  Tailwind, Ionic, etc.).
20
16
 
17
+ > **Auto-generated, AI-first package reference** for the [molecule.dev](https://molecule.dev) ecosystem.
18
+ > It is written to be read by coding agents as much as by people, and is generated from this
19
+ > package's source — edit `src/index.ts` JSDoc, not this file.
20
+
21
21
  ## Quick Start
22
22
 
23
23
  ```tsx
@@ -44,230 +44,86 @@ npm install @molecule/app-ui @molecule/app-bond @molecule/app-i18n
44
44
 
45
45
  ### Interfaces
46
46
 
47
- #### `AccordionClassOptions`
48
-
49
- Options for resolving accordion CSS classes via UIClassMap.
50
-
51
- ```typescript
52
- interface AccordionClassOptions {
53
- variant?: string
54
- }
55
- ```
56
-
57
- #### `AccordionItem`
58
-
59
- A single item in an Accordion component.
60
-
61
- ```typescript
62
- interface AccordionItem<T = string> {
63
- /**
64
- * Item value/id.
65
- */
66
- value: T
67
-
68
- /**
69
- * Item header/trigger.
70
- */
71
- header: Children
72
-
73
- /**
74
- * Item content.
75
- */
76
- content: Children
77
-
78
- /**
79
- * Whether the item is disabled.
80
- */
81
- disabled?: boolean
82
- }
83
- ```
84
-
85
- #### `AccordionProps`
47
+ #### `UIProvider`
86
48
 
87
- Props for the Accordion component.
49
+ Identifies the bonded UI styling library. Providers set `name`
50
+ to indicate which library is active (e.g. `"tailwind"`, `"bootstrap"`).
88
51
 
89
52
  ```typescript
90
- interface AccordionProps<T = string> extends BaseProps {
91
- /**
92
- * Accordion items.
93
- */
94
- items: AccordionItem<T>[]
95
-
96
- /**
97
- * Expanded item(s).
98
- */
99
- value?: T | T[]
100
-
101
- /**
102
- * Default expanded item(s).
103
- */
104
- defaultValue?: T | T[]
105
-
106
- /**
107
- * Change handler.
108
- */
109
- onChange?: (value: T | T[]) => void
110
-
111
- /**
112
- * Whether multiple items can be expanded.
113
- */
114
- multiple?: boolean
115
-
53
+ interface UIProvider {
116
54
  /**
117
- * Whether items can be collapsed.
55
+ * Identifier for the styling library (e.g. `"tailwind"`, `"ionic"`).
118
56
  */
119
- collapsible?: boolean
120
- }
121
- ```
122
-
123
- #### `AlertClassOptions`
124
-
125
- Options for resolving alert CSS classes via UIClassMap.
126
-
127
- ```typescript
128
- interface AlertClassOptions {
129
- variant?: 'default' | 'info' | 'success' | 'warning' | 'error'
57
+ name: string
130
58
  }
131
59
  ```
132
60
 
133
- #### `AlertProps`
61
+ #### `MoleculeSpinnerTimings`
134
62
 
135
- Props for the Alert component.
63
+ The mark's timings, in CSS duration strings. Swap cycle → glint cycle.
136
64
 
137
65
  ```typescript
138
- interface AlertProps extends HTMLElementProps {
139
- /**
140
- * Alert content.
141
- */
142
- children?: Children
143
-
144
- /**
145
- * Alert title.
146
- */
147
- title?: string
148
-
149
- /**
150
- * Alert status/type.
151
- */
152
- status?: ColorVariant
153
-
154
- /**
155
- * Alert variant.
156
- */
157
- variant?: 'solid' | 'subtle' | 'outline' | 'left-accent'
158
-
159
- /**
160
- * Whether the alert is dismissible.
161
- */
162
- dismissible?: boolean
163
-
164
- /**
165
- * Called when dismissed.
166
- */
167
- onDismiss?: () => void
168
-
169
- /**
170
- * Icon to display.
171
- */
172
- icon?: Children
173
-
174
- /**
175
- * Accessible label for the dismiss button.
176
- * @default 'Dismiss'
177
- */
178
- dismissLabel?: string
66
+ interface MoleculeSpinnerTimings {
67
+ /** One full 3-phase atom-swap cycle (also drives bond fades + glints). */
68
+ dur: string
69
+ /** Whole-figure rotation. Keep at two swap cycles for the intended feel. */
70
+ spin: string
71
+ /** Bond gradient flow period (one full translate across the figure). */
72
+ flow: string
179
73
  }
180
74
  ```
181
75
 
182
- #### `AvatarClassOptions`
76
+ #### `MoleculeSpinnerColors`
183
77
 
184
- Options for resolving avatar CSS classes via UIClassMap.
78
+ Gradient-mode colors. Any CSS color string, including `var()` forms.
185
79
 
186
80
  ```typescript
187
- interface AvatarClassOptions {
188
- size?: Size
81
+ interface MoleculeSpinnerColors {
82
+ /** Bond base / glint tail color. */
83
+ blue?: string
84
+ /** Flow highlight / glint head color at rest. */
85
+ light?: string
86
+ /** Glint ignition color while an atom is in flight. */
87
+ peach?: string
189
88
  }
190
89
  ```
191
90
 
192
- #### `AvatarProps`
91
+ #### `MoleculeSpinnerMarkOptions`
193
92
 
194
- Props for the Avatar component.
93
+ Options for {@link moleculeSpinnerMarkSvg}.
195
94
 
196
95
  ```typescript
197
- interface AvatarProps extends HTMLElementProps {
198
- /**
199
- * Image source URL.
200
- */
201
- src?: string
202
-
203
- /**
204
- * Alt text for the image.
205
- */
206
- alt?: string
207
-
208
- /**
209
- * Name for fallback initials.
210
- */
211
- name?: string
212
-
213
- /**
214
- * Avatar size.
215
- */
216
- size?: Size | number
217
-
218
- /**
219
- * Whether the avatar is rounded.
220
- */
221
- rounded?: boolean
222
-
96
+ interface MoleculeSpinnerMarkOptions {
97
+ /** Motion timings; defaults to the shipped design (2.5s / 5s / 3s). */
98
+ timings?: Partial<MoleculeSpinnerTimings>
99
+ /** `gradient` (default) or `mono` — plain `currentColor` outline, no defs. */
100
+ paint?: 'gradient' | 'mono'
101
+ /** Gradient-mode colors; default the `var(--mol-spin-*, fallback)` set. */
102
+ colors?: MoleculeSpinnerColors
223
103
  /**
224
- * Fallback element when no image.
104
+ * Gradient id for url() references. Must be unique per rendered instance
105
+ * on a page. Defaults to `mol-spinner-gradient`.
225
106
  */
226
- fallback?: Children
227
- }
228
- ```
229
-
230
- #### `BadgeClassOptions`
231
-
232
- Options for resolving badge CSS classes via UIClassMap.
233
-
234
- ```typescript
235
- interface BadgeClassOptions {
236
- variant?: ColorVariant
237
- size?: Size
107
+ gradientId?: string
108
+ /** Pixel size baked into width/height; omit when CSS sizes the svg. */
109
+ size?: number
110
+ /** Class attribute for the svg element. */
111
+ className?: string
112
+ /** Inline style attribute (already serialized, e.g. `color:re$d`). */
113
+ style?: string
114
+ /** Announce as `role="status"` with this label; omit for `aria-hidden`. */
115
+ ariaLabel?: string
238
116
  }
239
117
  ```
240
118
 
241
- #### `BadgeProps`
119
+ #### `CSSProperties`
242
120
 
243
- Props for the Badge component (status labels, counts, tags).
121
+ Framework-agnostic CSS properties.
122
+ Mirrors React.CSSProperties but without React dependency.
244
123
 
245
124
  ```typescript
246
- interface BadgeProps extends HTMLElementProps {
247
- /**
248
- * Badge content.
249
- */
250
- children?: Children
251
-
252
- /**
253
- * Badge color.
254
- */
255
- color?: ColorVariant
256
-
257
- /**
258
- * Badge variant.
259
- */
260
- variant?: 'solid' | 'outline' | 'subtle'
261
-
262
- /**
263
- * Badge size.
264
- */
265
- size?: Size
266
-
267
- /**
268
- * Whether the badge is rounded.
269
- */
270
- rounded?: boolean
125
+ interface CSSProperties {
126
+ [key: string]: string | number | undefined
271
127
  }
272
128
  ```
273
129
 
@@ -307,16 +163,62 @@ interface BaseProps {
307
163
  }
308
164
  ```
309
165
 
310
- #### `ButtonClassOptions`
166
+ #### `HTMLElementProps`
311
167
 
312
- Options for resolving button CSS classes via UIClassMap.
168
+ Base props for HTML elements.
169
+ Framework bindings should extend this with framework-specific attributes.
313
170
 
314
171
  ```typescript
315
- interface ButtonClassOptions {
316
- variant?: ButtonVariant
317
- color?: ColorVariant
318
- size?: ButtonSize
319
- fullWidth?: boolean
172
+ interface HTMLElementProps extends BaseProps {
173
+ id?: string
174
+ title?: string
175
+ tabIndex?: number
176
+ role?: string
177
+ 'aria-label'?: string
178
+ 'aria-labelledby'?: string
179
+ 'aria-describedby'?: string
180
+ 'aria-hidden'?: boolean
181
+ 'aria-disabled'?: boolean
182
+ 'aria-expanded'?: boolean
183
+ 'aria-selected'?: boolean
184
+ 'aria-checked'?: boolean | 'mixed'
185
+ 'aria-pressed'?: boolean | 'mixed'
186
+ 'aria-invalid'?: boolean
187
+ 'aria-required'?: boolean
188
+ 'aria-readonly'?: boolean
189
+ 'aria-busy'?: boolean
190
+ 'aria-live'?: 'off' | 'polite' | 'assertive'
191
+ onClick?: MouseEventHandler
192
+ onDoubleClick?: MouseEventHandler
193
+ onMouseEnter?: MouseEventHandler
194
+ onMouseLeave?: MouseEventHandler
195
+ onFocus?: FocusEventHandler
196
+ onBlur?: FocusEventHandler
197
+ onKeyDown?: KeyboardEventHandler
198
+ onKeyUp?: KeyboardEventHandler
199
+ onKeyPress?: KeyboardEventHandler
200
+ }
201
+ ```
202
+
203
+ #### `InputElementProps`
204
+
205
+ Base props for input elements.
206
+
207
+ ```typescript
208
+ interface InputElementProps extends HTMLElementProps {
209
+ name?: string
210
+ value?: string | number | readonly string[]
211
+ defaultValue?: string | number | readonly string[]
212
+ placeholder?: string
213
+ required?: boolean
214
+ readOnly?: boolean
215
+ autoFocus?: boolean
216
+ autoComplete?: string
217
+ maxLength?: number
218
+ minLength?: number
219
+ pattern?: string
220
+ onChange?: ChangeEventHandler
221
+ onInput?: FormEventHandler
320
222
  }
321
223
  ```
322
224
 
@@ -338,6 +240,60 @@ interface ButtonElementProps extends HTMLElementProps {
338
240
  }
339
241
  ```
340
242
 
243
+ #### `TextareaElementProps`
244
+
245
+ Base props for textarea elements.
246
+
247
+ ```typescript
248
+ interface TextareaElementProps extends HTMLElementProps {
249
+ name?: string
250
+ value?: string
251
+ defaultValue?: string
252
+ placeholder?: string
253
+ required?: boolean
254
+ readOnly?: boolean
255
+ autoFocus?: boolean
256
+ rows?: number
257
+ cols?: number
258
+ maxLength?: number
259
+ minLength?: number
260
+ wrap?: 'hard' | 'soft' | 'off'
261
+ onChange?: ChangeEventHandler
262
+ onInput?: FormEventHandler
263
+ }
264
+ ```
265
+
266
+ #### `SelectElementProps`
267
+
268
+ Base props for select elements.
269
+
270
+ ```typescript
271
+ interface SelectElementProps extends HTMLElementProps {
272
+ name?: string
273
+ required?: boolean
274
+ autoFocus?: boolean
275
+ multiple?: boolean
276
+ onChange?: ChangeEventHandler
277
+ }
278
+ ```
279
+
280
+ #### `FormElementProps`
281
+
282
+ Base props for form elements.
283
+
284
+ ```typescript
285
+ interface FormElementProps extends HTMLElementProps {
286
+ action?: string
287
+ method?: 'get' | 'post'
288
+ encType?: string
289
+ target?: string
290
+ noValidate?: boolean
291
+ autoComplete?: 'on' | 'off'
292
+ onSubmit?: FormEventHandler
293
+ onReset?: FormEventHandler
294
+ }
295
+ ```
296
+
341
297
  #### `ButtonProps`
342
298
 
343
299
  Props for the Button component.
@@ -391,1232 +347,1005 @@ interface ButtonProps extends ButtonElementProps {
391
347
  }
392
348
  ```
393
349
 
394
- #### `CardClassOptions`
395
-
396
- Options for resolving card CSS classes via UIClassMap.
397
-
398
- ```typescript
399
- interface CardClassOptions {
400
- variant?: 'default' | 'elevated' | 'outline' | 'ghost'
401
- }
402
- ```
403
-
404
- #### `CardProps`
350
+ #### `InputProps`
405
351
 
406
- Props for the Card container component (elevated, outlined, or filled surface).
352
+ Props for the Input component (text field, email, password, etc.).
407
353
 
408
354
  ```typescript
409
- interface CardProps extends HTMLElementProps {
355
+ interface InputProps extends InputElementProps {
410
356
  /**
411
- * Card content.
357
+ * Input type.
412
358
  */
413
- children?: Children
359
+ type?: InputType
414
360
 
415
361
  /**
416
- * Card variant.
362
+ * Input size.
417
363
  */
418
- variant?: 'elevated' | 'outlined' | 'filled'
364
+ size?: Size
419
365
 
420
366
  /**
421
- * Whether the card is interactive (clickable).
367
+ * Horizontal text alignment inside the input (see
368
+ * {@link InputClassOptions.align}). Defaults to the bond's own style.
422
369
  */
423
- interactive?: boolean
370
+ align?: 'left' | 'center'
424
371
 
425
372
  /**
426
- * Padding size.
373
+ * Label text.
427
374
  */
428
- padding?: Size | 'none'
429
- }
430
- ```
431
-
432
- #### `CheckboxClassOptions`
433
-
434
- Options for resolving checkbox CSS classes via UIClassMap.
435
-
436
- ```typescript
437
- interface CheckboxClassOptions {
438
- error?: boolean
439
- }
440
- ```
441
-
442
- #### `CheckboxProps`
443
-
444
- Props for the Checkbox component.
375
+ label?: string
445
376
 
446
- ```typescript
447
- interface CheckboxProps extends InputElementProps {
448
377
  /**
449
- * Checkbox label.
378
+ * Error message.
450
379
  */
451
- label?: Children
380
+ error?: string
452
381
 
453
382
  /**
454
- * Whether the checkbox is checked.
383
+ * Hint/help text.
455
384
  */
456
- checked?: boolean
385
+ hint?: string
457
386
 
458
387
  /**
459
- * Whether the checkbox is in an indeterminate state.
388
+ * Element to display on the left.
460
389
  */
461
- indeterminate?: boolean
390
+ leftElement?: Children
462
391
 
463
392
  /**
464
- * Checkbox size.
393
+ * Element to display on the right.
465
394
  */
466
- size?: Size
395
+ rightElement?: Children
467
396
 
468
397
  /**
469
- * Error message.
398
+ * Whether to show a clear button.
470
399
  */
471
- error?: string
472
- }
473
- ```
474
-
475
- #### `ContainerClassOptions`
400
+ clearable?: boolean
476
401
 
477
- Options for container class resolution.
402
+ /**
403
+ * Called when the clear button is clicked.
404
+ */
405
+ onClear?: () => void
478
406
 
479
- ```typescript
480
- interface ContainerClassOptions {
481
- size?: Size | '2xl' | 'full'
407
+ /**
408
+ * Accessible label for the clear button.
409
+ * @default 'Clear'
410
+ */
411
+ clearLabel?: string
482
412
  }
483
413
  ```
484
414
 
485
- #### `ContainerProps`
415
+ #### `TextareaProps`
486
416
 
487
- Props for the Container layout component.
417
+ Props for the Textarea component.
488
418
 
489
419
  ```typescript
490
- interface ContainerProps extends HTMLElementProps {
420
+ interface TextareaProps extends TextareaElementProps {
491
421
  /**
492
- * Container content.
422
+ * Text size tier (see {@link TextareaClassOptions.size}) — pass the same
423
+ * `size` as a neighboring Input for identical font sizes.
493
424
  */
494
- children?: Children
425
+ size?: Size
495
426
 
496
427
  /**
497
- * Maximum width.
428
+ * Label text.
498
429
  */
499
- maxWidth?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full' | string
430
+ label?: string
500
431
 
501
432
  /**
502
- * Whether to center the container.
433
+ * Error message.
503
434
  */
504
- centered?: boolean
435
+ error?: string
505
436
 
506
437
  /**
507
- * Horizontal padding.
438
+ * Hint/help text.
508
439
  */
509
- paddingX?: Size | string
510
- }
511
- ```
440
+ hint?: string
512
441
 
513
- #### `CSSProperties`
442
+ /**
443
+ * Whether the textarea auto-resizes.
444
+ */
445
+ autoResize?: boolean
514
446
 
515
- Framework-agnostic CSS properties.
516
- Mirrors React.CSSProperties but without React dependency.
447
+ /**
448
+ * Minimum number of rows.
449
+ */
450
+ minRows?: number
517
451
 
518
- ```typescript
519
- interface CSSProperties {
520
- [key: string]: string | number | undefined
452
+ /**
453
+ * Maximum number of rows.
454
+ */
455
+ maxRows?: number
521
456
  }
522
457
  ```
523
458
 
524
- #### `DropdownItem`
459
+ #### `SelectOption`
525
460
 
526
- Dropdown menu item.
461
+ A single option in a Select dropdown.
527
462
 
528
463
  ```typescript
529
- interface DropdownItem<T = string> {
464
+ interface SelectOption<T = string> {
530
465
  /**
531
- * Item value/id.
466
+ * Option value.
532
467
  */
533
468
  value: T
534
469
 
535
470
  /**
536
471
  * Display label.
537
472
  */
538
- label: Children
473
+ label: string
539
474
 
540
475
  /**
541
- * Whether the item is disabled.
476
+ * Whether the option is disabled.
542
477
  */
543
478
  disabled?: boolean
544
479
 
545
480
  /**
546
- * Icon to display.
481
+ * Option group (for grouped selects).
547
482
  */
548
- icon?: Children
549
-
550
- /**
551
- * Keyboard shortcut display.
552
- */
553
- shortcut?: string
554
-
555
- /**
556
- * Whether this is a separator.
557
- */
558
- separator?: boolean
559
-
560
- /**
561
- * Nested items (for submenus).
562
- */
563
- items?: DropdownItem<T>[]
483
+ group?: string
564
484
  }
565
485
  ```
566
486
 
567
- #### `DropdownProps`
487
+ #### `SelectProps`
568
488
 
569
- Props for the Dropdown menu component.
489
+ Props for the Select dropdown component (single or multi-select).
570
490
 
571
491
  ```typescript
572
- interface DropdownProps<T = string> extends BaseProps {
492
+ interface SelectProps<T = string> extends SelectElementProps {
573
493
  /**
574
- * Dropdown trigger element.
494
+ * Select options.
575
495
  */
576
- trigger: Children
496
+ options: SelectOption<T>[]
577
497
 
578
498
  /**
579
- * Dropdown items.
499
+ * Current value.
580
500
  */
581
- items: DropdownItem<T>[]
501
+ value?: T
582
502
 
583
503
  /**
584
- * Called when an item is selected.
504
+ * Change handler (with typed value).
585
505
  */
586
- onSelect?: (value: T) => void
506
+ onValueChange?: (value: T) => void
587
507
 
588
508
  /**
589
- * Dropdown placement.
509
+ * Select size.
590
510
  */
591
- placement?:
592
- 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'right'
511
+ size?: Size
593
512
 
594
513
  /**
595
- * Whether the dropdown is open (controlled).
514
+ * Label text.
596
515
  */
597
- open?: boolean
516
+ label?: string
598
517
 
599
518
  /**
600
- * Called when open state changes.
519
+ * Placeholder text.
601
520
  */
602
- onOpenChange?: (open: boolean) => void
521
+ placeholder?: string
603
522
 
604
523
  /**
605
- * Menu alignment.
524
+ * Error message.
606
525
  */
607
- align?: 'start' | 'center' | 'end'
526
+ error?: string
608
527
 
609
528
  /**
610
- * Menu width.
529
+ * Hint/help text.
611
530
  */
612
- width?: 'trigger' | 'auto' | number | string
613
- }
614
- ```
615
-
616
- #### `EmptyStateProps`
617
-
618
- Props for the EmptyState component — shown when a list or section has no data.
531
+ hint?: string
619
532
 
620
- ```typescript
621
- interface EmptyStateProps extends BaseProps {
622
- /** Icon or illustration to display. */
623
- icon?: Children
624
- /** Main heading text. */
625
- title: string
626
- /** Description text. */
627
- description?: string
628
- /** Primary action button (e.g., "Create first item"). */
629
- action?: Children
533
+ /**
534
+ * Whether to allow clearing the selection.
535
+ */
536
+ clearable?: boolean
630
537
  }
631
538
  ```
632
539
 
633
- #### `FlexClassOptions`
540
+ #### `CheckboxProps`
634
541
 
635
- Options for flex class resolution.
542
+ Props for the Checkbox component.
636
543
 
637
544
  ```typescript
638
- interface FlexClassOptions {
639
- direction?: 'row' | 'col' | 'row-reverse' | 'col-reverse'
640
- align?: 'start' | 'center' | 'end' | 'stretch' | 'baseline'
641
- justify?: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly'
642
- wrap?: 'wrap' | 'nowrap' | 'wrap-reverse'
643
- /** Named tokens or Tailwind spacing scale index (e.g. `3` → `gap-3`). */
644
- gap?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | number
645
- }
646
- ```
647
-
648
- #### `FlexProps`
545
+ interface CheckboxProps extends InputElementProps {
546
+ /**
547
+ * Checkbox label.
548
+ */
549
+ label?: Children
649
550
 
650
- Flex container props.
551
+ /**
552
+ * Whether the checkbox is checked.
553
+ */
554
+ checked?: boolean
651
555
 
652
- ```typescript
653
- interface FlexProps extends HTMLElementProps {
654
556
  /**
655
- * Flex content.
557
+ * Whether the checkbox is in an indeterminate state.
656
558
  */
657
- children?: Children
559
+ indeterminate?: boolean
658
560
 
659
561
  /**
660
- * Flex direction.
562
+ * Checkbox size.
661
563
  */
662
- direction?: 'row' | 'column' | 'row-reverse' | 'column-reverse'
564
+ size?: Size
663
565
 
664
566
  /**
665
- * Justify content.
567
+ * Error message.
666
568
  */
667
- justify?: 'start' | 'end' | 'center' | 'between' | 'around' | 'evenly'
569
+ error?: string
570
+ }
571
+ ```
572
+
573
+ #### `RadioOption`
668
574
 
575
+ A single option in a RadioGroup.
576
+
577
+ ```typescript
578
+ interface RadioOption<T = string> {
669
579
  /**
670
- * Align items.
580
+ * Option value.
671
581
  */
672
- align?: 'start' | 'end' | 'center' | 'baseline' | 'stretch'
582
+ value: T
673
583
 
674
584
  /**
675
- * Flex wrap.
585
+ * Display label.
676
586
  */
677
- wrap?: 'wrap' | 'nowrap' | 'wrap-reverse'
587
+ label: Children
678
588
 
679
589
  /**
680
- * Gap between items.
590
+ * Whether the option is disabled.
681
591
  */
682
- gap?: Size | string | number
592
+ disabled?: boolean
683
593
  }
684
594
  ```
685
595
 
686
- #### `FormElementProps`
596
+ #### `RadioGroupProps`
687
597
 
688
- Base props for form elements.
598
+ Props for the RadioGroup component.
689
599
 
690
600
  ```typescript
691
- interface FormElementProps extends HTMLElementProps {
692
- action?: string
693
- method?: 'get' | 'post'
694
- encType?: string
695
- target?: string
696
- noValidate?: boolean
697
- autoComplete?: 'on' | 'off'
698
- onSubmit?: FormEventHandler
699
- onReset?: FormEventHandler
700
- }
701
- ```
702
-
703
- #### `FormFieldProps`
601
+ interface RadioGroupProps<T = string> extends BaseProps {
602
+ /**
603
+ * Radio options.
604
+ */
605
+ options: RadioOption<T>[]
704
606
 
705
- Form field wrapper props.
607
+ /**
608
+ * Current value.
609
+ */
610
+ value?: T
706
611
 
707
- ```typescript
708
- interface FormFieldProps extends HTMLElementProps {
709
612
  /**
710
- * Field content.
613
+ * Change handler.
711
614
  */
712
- children?: Children
615
+ onChange?: (value: T) => void
713
616
 
714
617
  /**
715
- * Field label.
618
+ * Radio size.
716
619
  */
717
- label?: string
620
+ size?: Size
718
621
 
719
622
  /**
720
- * Field name.
623
+ * Group label.
721
624
  */
722
- name?: string
625
+ label?: string
723
626
 
724
627
  /**
725
- * Error message.
628
+ * Shared `name` attribute for the group's radio inputs (used for native
629
+ * form submission). When omitted, a unique per-instance name is generated
630
+ * so separate groups never merge — the visible `label` is deliberately
631
+ * NOT used as the name, because two groups with the same label (e.g. two
632
+ * "Size" pickers) would otherwise form ONE native radio group and
633
+ * deselect each other.
726
634
  */
727
- error?: string
635
+ name?: string
728
636
 
729
637
  /**
730
- * Hint/help text.
638
+ * Layout direction.
731
639
  */
732
- hint?: string
640
+ direction?: 'horizontal' | 'vertical'
733
641
 
734
642
  /**
735
- * Whether the field is required.
643
+ * Error message.
736
644
  */
737
- required?: boolean
645
+ error?: string
738
646
  }
739
647
  ```
740
648
 
741
- #### `FormProps`
649
+ #### `SwitchProps`
742
650
 
743
- Props for the Form component (wraps inputs with submission handling and validation).
651
+ Props for the Switch/Toggle component.
744
652
 
745
653
  ```typescript
746
- interface FormProps extends FormElementProps {
654
+ interface SwitchProps extends InputElementProps {
747
655
  /**
748
- * Form content.
656
+ * Switch label.
749
657
  */
750
- children?: Children
658
+ label?: Children
751
659
 
752
660
  /**
753
- * Submit handler with form data.
661
+ * Whether the switch is on.
754
662
  */
755
- onFormSubmit?: (data: Record<string, unknown>) => void | Promise<void>
663
+ checked?: boolean
756
664
 
757
665
  /**
758
- * Whether the form is submitting.
666
+ * Switch size.
759
667
  */
760
- submitting?: boolean
761
- }
762
- ```
763
-
764
- #### `GridClassOptions`
765
-
766
- Options for grid class resolution.
668
+ size?: Size
767
669
 
768
- ```typescript
769
- interface GridClassOptions {
770
- cols?: number
771
- /** Named tokens or Tailwind spacing scale index (e.g. `10` → `gap-10`). */
772
- gap?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | number
773
670
  /**
774
- * Mobile-first responsive collapse. When omitted (the default), a grid of
775
- * `cols >= 2` starts at a single column on small screens and steps up to
776
- * `cols` at larger breakpoints, so cards don't overflow on mobile. Pass
777
- * `false` for a FIXED `cols`-column grid at every viewport width. Ignored
778
- * for `cols <= 1` (always single-column) and by ClassMap bonds without a
779
- * breakpoint system (e.g. NativeWind).
671
+ * Color when on.
780
672
  */
781
- responsive?: boolean
673
+ color?: ColorVariant
782
674
  }
783
675
  ```
784
676
 
785
- #### `GridProps`
677
+ #### `ModalProps`
786
678
 
787
- Grid container props.
679
+ Props for the Modal/Dialog component.
788
680
 
789
681
  ```typescript
790
- interface GridProps extends HTMLElementProps {
682
+ interface ModalProps extends HTMLElementProps {
791
683
  /**
792
- * Grid content.
684
+ * Whether the modal is open.
793
685
  */
794
- children?: Children
686
+ open: boolean
795
687
 
796
688
  /**
797
- * Number of columns.
689
+ * Called when the modal should close.
798
690
  */
799
- columns?: number | string
691
+ onClose: () => void
800
692
 
801
693
  /**
802
- * Number of rows.
694
+ * Modal title.
803
695
  */
804
- rows?: number | string
696
+ title?: string
805
697
 
806
698
  /**
807
- * Gap between items.
699
+ * Modal content.
808
700
  */
809
- gap?: Size | string | number
701
+ children?: Children
810
702
 
811
703
  /**
812
- * Column gap.
704
+ * Modal size.
813
705
  */
814
- columnGap?: Size | string | number
706
+ size?: ModalSize
815
707
 
816
708
  /**
817
- * Row gap.
709
+ * Whether to show a close button.
818
710
  */
819
- rowGap?: Size | string | number
820
- }
821
- ```
822
-
823
- #### `HTMLElementProps`
824
-
825
- Base props for HTML elements.
826
- Framework bindings should extend this with framework-specific attributes.
827
-
828
- ```typescript
829
- interface HTMLElementProps extends BaseProps {
830
- id?: string
831
- title?: string
832
- tabIndex?: number
833
- role?: string
834
- 'aria-label'?: string
835
- 'aria-labelledby'?: string
836
- 'aria-describedby'?: string
837
- 'aria-hidden'?: boolean
838
- 'aria-disabled'?: boolean
839
- 'aria-expanded'?: boolean
840
- 'aria-selected'?: boolean
841
- 'aria-checked'?: boolean | 'mixed'
842
- 'aria-pressed'?: boolean | 'mixed'
843
- 'aria-invalid'?: boolean
844
- 'aria-required'?: boolean
845
- 'aria-readonly'?: boolean
846
- 'aria-busy'?: boolean
847
- 'aria-live'?: 'off' | 'polite' | 'assertive'
848
- onClick?: MouseEventHandler
849
- onDoubleClick?: MouseEventHandler
850
- onMouseEnter?: MouseEventHandler
851
- onMouseLeave?: MouseEventHandler
852
- onFocus?: FocusEventHandler
853
- onBlur?: FocusEventHandler
854
- onKeyDown?: KeyboardEventHandler
855
- onKeyUp?: KeyboardEventHandler
856
- onKeyPress?: KeyboardEventHandler
857
- }
858
- ```
711
+ showCloseButton?: boolean
859
712
 
860
- #### `InputClassOptions`
713
+ /**
714
+ * Whether clicking the overlay closes the modal.
715
+ */
716
+ closeOnOverlayClick?: boolean
861
717
 
862
- Options for resolving input CSS classes via UIClassMap.
718
+ /**
719
+ * Whether pressing Escape closes the modal.
720
+ */
721
+ closeOnEscape?: boolean
863
722
 
864
- ```typescript
865
- interface InputClassOptions {
866
- error?: boolean
867
- size?: Size
868
723
  /**
869
- * Horizontal text alignment inside the input. Bonds may default to a
870
- * centered aesthetic (e.g. the Tailwind bond's floating-label style);
871
- * `'left'` opts a specific field out — e.g. a form field sitting next to
872
- * left-aligned textareas.
724
+ * Footer content (typically action buttons).
873
725
  */
874
- align?: 'left' | 'center'
875
- }
876
- ```
726
+ footer?: Children
877
727
 
878
- #### `InputElementProps`
728
+ /**
729
+ * Whether the modal is centered vertically.
730
+ */
731
+ centered?: boolean
879
732
 
880
- Base props for input elements.
733
+ /**
734
+ * Whether to prevent body scroll when open.
735
+ */
736
+ preventScroll?: boolean
881
737
 
882
- ```typescript
883
- interface InputElementProps extends HTMLElementProps {
884
- name?: string
885
- value?: string | number | readonly string[]
886
- defaultValue?: string | number | readonly string[]
887
- placeholder?: string
888
- required?: boolean
889
- readOnly?: boolean
890
- autoFocus?: boolean
891
- autoComplete?: string
892
- maxLength?: number
893
- minLength?: number
894
- pattern?: string
895
- onChange?: ChangeEventHandler
896
- onInput?: FormEventHandler
738
+ /**
739
+ * Accessible label for the close button.
740
+ * @default 'Close'
741
+ */
742
+ closeLabel?: string
897
743
  }
898
744
  ```
899
745
 
900
- #### `InputProps`
746
+ #### `SpinnerProps`
901
747
 
902
- Props for the Input component (text field, email, password, etc.).
748
+ Props for the Spinner/loading indicator component.
903
749
 
904
750
  ```typescript
905
- interface InputProps extends InputElementProps {
906
- /**
907
- * Input type.
908
- */
909
- type?: InputType
910
-
751
+ interface SpinnerProps extends BaseProps {
911
752
  /**
912
- * Input size.
753
+ * Spinner size.
913
754
  */
914
755
  size?: Size
915
756
 
916
757
  /**
917
- * Horizontal text alignment inside the input (see
918
- * {@link InputClassOptions.align}). Defaults to the bond's own style.
758
+ * Spinner color.
919
759
  */
920
- align?: 'left' | 'center'
760
+ color?: ColorVariant | string
921
761
 
922
762
  /**
923
- * Label text.
763
+ * Loading label (for accessibility).
924
764
  */
925
765
  label?: string
926
766
 
927
767
  /**
928
- * Error message.
768
+ * Spinner thickness.
929
769
  */
930
- error?: string
770
+ thickness?: number
771
+ }
772
+ ```
931
773
 
774
+ #### `AvatarProps`
775
+
776
+ Props for the Avatar component.
777
+
778
+ ```typescript
779
+ interface AvatarProps extends HTMLElementProps {
932
780
  /**
933
- * Hint/help text.
781
+ * Image source URL.
934
782
  */
935
- hint?: string
783
+ src?: string
936
784
 
937
785
  /**
938
- * Element to display on the left.
786
+ * Alt text for the image.
939
787
  */
940
- leftElement?: Children
788
+ alt?: string
941
789
 
942
790
  /**
943
- * Element to display on the right.
791
+ * Name for fallback initials.
944
792
  */
945
- rightElement?: Children
793
+ name?: string
946
794
 
947
795
  /**
948
- * Whether to show a clear button.
796
+ * Avatar size.
949
797
  */
950
- clearable?: boolean
798
+ size?: Size | number
951
799
 
952
800
  /**
953
- * Called when the clear button is clicked.
801
+ * Whether the avatar is rounded.
954
802
  */
955
- onClear?: () => void
803
+ rounded?: boolean
956
804
 
957
805
  /**
958
- * Accessible label for the clear button.
959
- * @default 'Clear'
806
+ * Fallback element when no image.
960
807
  */
961
- clearLabel?: string
808
+ fallback?: Children
962
809
  }
963
810
  ```
964
811
 
965
- #### `LabelClassOptions`
812
+ #### `BadgeProps`
966
813
 
967
- Options for label class resolution.
814
+ Props for the Badge component (status labels, counts, tags).
968
815
 
969
816
  ```typescript
970
- interface LabelClassOptions {
971
- required?: boolean
972
- }
973
- ```
817
+ interface BadgeProps extends HTMLElementProps {
818
+ /**
819
+ * Badge content.
820
+ */
821
+ children?: Children
974
822
 
975
- #### `ModalClassOptions`
823
+ /**
824
+ * Badge color.
825
+ */
826
+ color?: ColorVariant
976
827
 
977
- Options for resolving modal/dialog CSS classes via UIClassMap.
828
+ /**
829
+ * Badge variant.
830
+ */
831
+ variant?: 'solid' | 'outline' | 'subtle'
978
832
 
979
- ```typescript
980
- interface ModalClassOptions {
981
- size?: ModalSize
833
+ /**
834
+ * Badge size.
835
+ */
836
+ size?: Size
837
+
838
+ /**
839
+ * Whether the badge is rounded.
840
+ */
841
+ rounded?: boolean
982
842
  }
983
843
  ```
984
844
 
985
- #### `ModalProps`
845
+ #### `TooltipProps`
986
846
 
987
- Props for the Modal/Dialog component.
847
+ Props for the Tooltip component (hover/focus popover with informational text).
988
848
 
989
849
  ```typescript
990
- interface ModalProps extends HTMLElementProps {
850
+ interface TooltipProps extends HTMLElementProps {
991
851
  /**
992
- * Whether the modal is open.
852
+ * Tooltip content.
993
853
  */
994
- open: boolean
854
+ content: Children
995
855
 
996
856
  /**
997
- * Called when the modal should close.
857
+ * Element that triggers the tooltip.
998
858
  */
999
- onClose: () => void
859
+ children: Children
1000
860
 
1001
861
  /**
1002
- * Modal title.
862
+ * Tooltip placement.
1003
863
  */
1004
- title?: string
864
+ placement?: TooltipPlacement
1005
865
 
1006
866
  /**
1007
- * Modal content.
867
+ * Delay before showing (ms).
1008
868
  */
1009
- children?: Children
869
+ delay?: number
1010
870
 
1011
871
  /**
1012
- * Modal size.
872
+ * Whether the tooltip has an arrow.
1013
873
  */
1014
- size?: ModalSize
874
+ hasArrow?: boolean
875
+ }
876
+ ```
877
+
878
+ #### `CardProps`
1015
879
 
880
+ Props for the Card container component (elevated, outlined, or filled surface).
881
+
882
+ ```typescript
883
+ interface CardProps extends HTMLElementProps {
1016
884
  /**
1017
- * Whether to show a close button.
885
+ * Card content.
1018
886
  */
1019
- showCloseButton?: boolean
887
+ children?: Children
1020
888
 
1021
889
  /**
1022
- * Whether clicking the overlay closes the modal.
890
+ * Card variant.
1023
891
  */
1024
- closeOnOverlayClick?: boolean
892
+ variant?: 'elevated' | 'outlined' | 'filled'
1025
893
 
1026
894
  /**
1027
- * Whether pressing Escape closes the modal.
895
+ * Whether the card is interactive (clickable).
1028
896
  */
1029
- closeOnEscape?: boolean
897
+ interactive?: boolean
1030
898
 
1031
899
  /**
1032
- * Footer content (typically action buttons).
900
+ * Padding size.
1033
901
  */
1034
- footer?: Children
902
+ padding?: Size | 'none'
903
+ }
904
+ ```
905
+
906
+ #### `ContainerProps`
1035
907
 
908
+ Props for the Container layout component.
909
+
910
+ ```typescript
911
+ interface ContainerProps extends HTMLElementProps {
1036
912
  /**
1037
- * Whether the modal is centered vertically.
913
+ * Container content.
1038
914
  */
1039
- centered?: boolean
915
+ children?: Children
1040
916
 
1041
917
  /**
1042
- * Whether to prevent body scroll when open.
918
+ * Maximum width.
1043
919
  */
1044
- preventScroll?: boolean
920
+ maxWidth?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full' | string
1045
921
 
1046
922
  /**
1047
- * Accessible label for the close button.
1048
- * @default 'Close'
923
+ * Whether to center the container.
1049
924
  */
1050
- closeLabel?: string
1051
- }
1052
- ```
1053
-
1054
- #### `MoleculeSpinnerColors`
1055
-
1056
- Gradient-mode colors. Any CSS color string, including `var()` forms.
1057
-
1058
- ```typescript
1059
- interface MoleculeSpinnerColors {
1060
- /** Bond base / glint tail color. */
1061
- blue?: string
1062
- /** Flow highlight / glint head color at rest. */
1063
- light?: string
1064
- /** Glint ignition color while an atom is in flight. */
1065
- peach?: string
1066
- }
1067
- ```
1068
-
1069
- #### `MoleculeSpinnerMarkOptions`
1070
-
1071
- Options for {@link moleculeSpinnerMarkSvg}.
925
+ centered?: boolean
1072
926
 
1073
- ```typescript
1074
- interface MoleculeSpinnerMarkOptions {
1075
- /** Motion timings; defaults to the shipped design (2.5s / 5s / 3s). */
1076
- timings?: Partial<MoleculeSpinnerTimings>
1077
- /** `gradient` (default) or `mono` — plain `currentColor` outline, no defs. */
1078
- paint?: 'gradient' | 'mono'
1079
- /** Gradient-mode colors; default the `var(--mol-spin-*, fallback)` set. */
1080
- colors?: MoleculeSpinnerColors
1081
927
  /**
1082
- * Gradient id for url() references. Must be unique per rendered instance
1083
- * on a page. Defaults to `mol-spinner-gradient`.
928
+ * Horizontal padding.
1084
929
  */
1085
- gradientId?: string
1086
- /** Pixel size baked into width/height; omit when CSS sizes the svg. */
1087
- size?: number
1088
- /** Class attribute for the svg element. */
1089
- className?: string
1090
- /** Inline style attribute (already serialized, e.g. `color:re$d`). */
1091
- style?: string
1092
- /** Announce as `role="status"` with this label; omit for `aria-hidden`. */
1093
- ariaLabel?: string
1094
- }
1095
- ```
1096
-
1097
- #### `MoleculeSpinnerTimings`
1098
-
1099
- The mark's timings, in CSS duration strings. Swap cycle → glint cycle.
1100
-
1101
- ```typescript
1102
- interface MoleculeSpinnerTimings {
1103
- /** One full 3-phase atom-swap cycle (also drives bond fades + glints). */
1104
- dur: string
1105
- /** Whole-figure rotation. Keep at two swap cycles for the intended feel. */
1106
- spin: string
1107
- /** Bond gradient flow period (one full translate across the figure). */
1108
- flow: string
1109
- }
1110
- ```
1111
-
1112
- #### `PageHeaderProps`
1113
-
1114
- Props for the PageHeader component — consistent page title area.
1115
-
1116
- ```typescript
1117
- interface PageHeaderProps extends BaseProps {
1118
- /** Page title. */
1119
- title: string
1120
- /** Page description. */
1121
- description?: string
1122
- /** Action buttons (e.g., "Create", "Export"). */
1123
- actions?: Children
1124
- /** Breadcrumb trail. */
1125
- breadcrumbs?: Array<{ label: string; href?: string }>
930
+ paddingX?: Size | string
1126
931
  }
1127
932
  ```
1128
933
 
1129
- #### `PageShellProps`
934
+ #### `FlexProps`
1130
935
 
1131
- Props for the PageShell component — authenticated page wrapper with navigation.
936
+ Flex container props.
1132
937
 
1133
938
  ```typescript
1134
- interface PageShellProps extends BaseProps {
1135
- /** Sidebar content (navigation links). */
1136
- sidebar?: Children
1137
- /** Top bar content (breadcrumbs, user menu). */
1138
- topbar?: Children
1139
- /** Whether the sidebar is collapsed. */
1140
- sidebarCollapsed?: boolean
1141
- /** Callback when sidebar toggle is clicked. */
1142
- onSidebarToggle?: () => void
1143
- /** Main content. */
939
+ interface FlexProps extends HTMLElementProps {
940
+ /**
941
+ * Flex content.
942
+ */
1144
943
  children?: Children
1145
- }
1146
- ```
1147
-
1148
- #### `PaginationClassOptions`
1149
-
1150
- Options for pagination item class resolution.
1151
-
1152
- ```typescript
1153
- interface PaginationClassOptions {
1154
- active?: boolean
1155
- size?: Size
1156
- }
1157
- ```
1158
944
 
1159
- #### `PaginationProps`
945
+ /**
946
+ * Flex direction.
947
+ */
948
+ direction?: 'row' | 'column' | 'row-reverse' | 'column-reverse'
1160
949
 
1161
- Props for the Pagination component (page navigation with current page, total, page size, and change callbacks).
950
+ /**
951
+ * Justify content.
952
+ */
953
+ justify?: 'start' | 'end' | 'center' | 'between' | 'around' | 'evenly'
1162
954
 
1163
- ```typescript
1164
- interface PaginationProps extends BaseProps {
1165
955
  /**
1166
- * Current page (1-indexed).
956
+ * Align items.
1167
957
  */
1168
- page: number
958
+ align?: 'start' | 'end' | 'center' | 'baseline' | 'stretch'
1169
959
 
1170
960
  /**
1171
- * Total number of pages.
961
+ * Flex wrap.
1172
962
  */
1173
- totalPages: number
963
+ wrap?: 'wrap' | 'nowrap' | 'wrap-reverse'
1174
964
 
1175
965
  /**
1176
- * Page change handler.
966
+ * Gap between items.
1177
967
  */
1178
- onChange: (page: number) => void
968
+ gap?: Size | string | number
969
+ }
970
+ ```
971
+
972
+ #### `GridProps`
973
+
974
+ Grid container props.
1179
975
 
976
+ ```typescript
977
+ interface GridProps extends HTMLElementProps {
1180
978
  /**
1181
- * Number of sibling pages to show.
979
+ * Grid content.
1182
980
  */
1183
- siblings?: number
981
+ children?: Children
1184
982
 
1185
983
  /**
1186
- * Number of boundary pages to show.
984
+ * Number of columns.
1187
985
  */
1188
- boundaries?: number
986
+ columns?: number | string
1189
987
 
1190
988
  /**
1191
- * Pagination size.
989
+ * Number of rows.
1192
990
  */
1193
- size?: Size
991
+ rows?: number | string
1194
992
 
1195
993
  /**
1196
- * Whether to show first/last buttons.
994
+ * Gap between items.
1197
995
  */
1198
- showFirstLast?: boolean
996
+ gap?: Size | string | number
1199
997
 
1200
998
  /**
1201
- * Whether to show previous/next buttons.
999
+ * Column gap.
1202
1000
  */
1203
- showPrevNext?: boolean
1001
+ columnGap?: Size | string | number
1204
1002
 
1205
1003
  /**
1206
- * Accessible labels for pagination controls.
1004
+ * Row gap.
1207
1005
  */
1208
- labels?: {
1209
- nav?: string
1210
- first?: string
1211
- previous?: string
1212
- next?: string
1213
- last?: string
1214
- goToPage?: (page: number) => string
1215
- }
1006
+ rowGap?: Size | string | number
1216
1007
  }
1217
1008
  ```
1218
1009
 
1219
- #### `RadioClassOptions`
1010
+ #### `SpacerProps`
1220
1011
 
1221
- Options for resolving radio CSS classes via UIClassMap.
1012
+ Props for the Spacer layout component (adds whitespace between elements).
1222
1013
 
1223
1014
  ```typescript
1224
- interface RadioClassOptions {
1225
- error?: boolean
1015
+ interface SpacerProps extends BaseProps {
1016
+ /**
1017
+ * Space size.
1018
+ */
1019
+ size?: Size | string | number
1020
+
1021
+ /**
1022
+ * Whether the spacer is horizontal.
1023
+ */
1024
+ horizontal?: boolean
1226
1025
  }
1227
1026
  ```
1228
1027
 
1229
- #### `RadioGroupProps`
1028
+ #### `FormProps`
1230
1029
 
1231
- Props for the RadioGroup component.
1030
+ Props for the Form component (wraps inputs with submission handling and validation).
1232
1031
 
1233
1032
  ```typescript
1234
- interface RadioGroupProps<T = string> extends BaseProps {
1033
+ interface FormProps extends FormElementProps {
1235
1034
  /**
1236
- * Radio options.
1035
+ * Form content.
1237
1036
  */
1238
- options: RadioOption<T>[]
1037
+ children?: Children
1239
1038
 
1240
1039
  /**
1241
- * Current value.
1040
+ * Submit handler with form data.
1242
1041
  */
1243
- value?: T
1042
+ onFormSubmit?: (data: Record<string, unknown>) => void | Promise<void>
1244
1043
 
1245
1044
  /**
1246
- * Change handler.
1045
+ * Whether the form is submitting.
1247
1046
  */
1248
- onChange?: (value: T) => void
1047
+ submitting?: boolean
1048
+ }
1049
+ ```
1050
+
1051
+ #### `FormFieldProps`
1052
+
1053
+ Form field wrapper props.
1249
1054
 
1055
+ ```typescript
1056
+ interface FormFieldProps extends HTMLElementProps {
1250
1057
  /**
1251
- * Radio size.
1058
+ * Field content.
1252
1059
  */
1253
- size?: Size
1060
+ children?: Children
1254
1061
 
1255
1062
  /**
1256
- * Group label.
1063
+ * Field label.
1257
1064
  */
1258
1065
  label?: string
1259
1066
 
1260
1067
  /**
1261
- * Shared `name` attribute for the group's radio inputs (used for native
1262
- * form submission). When omitted, a unique per-instance name is generated
1263
- * so separate groups never merge — the visible `label` is deliberately
1264
- * NOT used as the name, because two groups with the same label (e.g. two
1265
- * "Size" pickers) would otherwise form ONE native radio group and
1266
- * deselect each other.
1068
+ * Field name.
1267
1069
  */
1268
1070
  name?: string
1269
1071
 
1270
1072
  /**
1271
- * Layout direction.
1073
+ * Error message.
1272
1074
  */
1273
- direction?: 'horizontal' | 'vertical'
1075
+ error?: string
1274
1076
 
1275
1077
  /**
1276
- * Error message.
1078
+ * Hint/help text.
1277
1079
  */
1278
- error?: string
1080
+ hint?: string
1081
+
1082
+ /**
1083
+ * Whether the field is required.
1084
+ */
1085
+ required?: boolean
1279
1086
  }
1280
1087
  ```
1281
1088
 
1282
- #### `RadioOption`
1089
+ #### `AlertProps`
1283
1090
 
1284
- A single option in a RadioGroup.
1091
+ Props for the Alert component.
1285
1092
 
1286
1093
  ```typescript
1287
- interface RadioOption<T = string> {
1094
+ interface AlertProps extends HTMLElementProps {
1288
1095
  /**
1289
- * Option value.
1096
+ * Alert content.
1290
1097
  */
1291
- value: T
1098
+ children?: Children
1292
1099
 
1293
1100
  /**
1294
- * Display label.
1101
+ * Alert title.
1295
1102
  */
1296
- label: Children
1103
+ title?: string
1297
1104
 
1298
1105
  /**
1299
- * Whether the option is disabled.
1106
+ * Alert status/type.
1300
1107
  */
1301
- disabled?: boolean
1302
- }
1303
- ```
1304
-
1305
- #### `SelectClassOptions`
1306
-
1307
- Options for resolving select CSS classes via UIClassMap.
1308
-
1309
- ```typescript
1310
- interface SelectClassOptions {
1311
- error?: boolean
1312
- size?: Size
1313
- }
1314
- ```
1315
-
1316
- #### `SelectElementProps`
1317
-
1318
- Base props for select elements.
1319
-
1320
- ```typescript
1321
- interface SelectElementProps extends HTMLElementProps {
1322
- name?: string
1323
- required?: boolean
1324
- autoFocus?: boolean
1325
- multiple?: boolean
1326
- onChange?: ChangeEventHandler
1327
- }
1328
- ```
1329
-
1330
- #### `SelectOption`
1108
+ status?: ColorVariant
1331
1109
 
1332
- A single option in a Select dropdown.
1110
+ /**
1111
+ * Alert variant.
1112
+ */
1113
+ variant?: 'solid' | 'subtle' | 'outline' | 'left-accent'
1333
1114
 
1334
- ```typescript
1335
- interface SelectOption<T = string> {
1336
1115
  /**
1337
- * Option value.
1116
+ * Whether the alert is dismissible.
1338
1117
  */
1339
- value: T
1118
+ dismissible?: boolean
1340
1119
 
1341
1120
  /**
1342
- * Display label.
1121
+ * Called when dismissed.
1343
1122
  */
1344
- label: string
1123
+ onDismiss?: () => void
1345
1124
 
1346
1125
  /**
1347
- * Whether the option is disabled.
1126
+ * Icon to display.
1348
1127
  */
1349
- disabled?: boolean
1128
+ icon?: Children
1350
1129
 
1351
1130
  /**
1352
- * Option group (for grouped selects).
1131
+ * Accessible label for the dismiss button.
1132
+ * @default 'Dismiss'
1353
1133
  */
1354
- group?: string
1134
+ dismissLabel?: string
1355
1135
  }
1356
1136
  ```
1357
1137
 
1358
- #### `SelectProps`
1138
+ #### `ToastProps`
1359
1139
 
1360
- Props for the Select dropdown component (single or multi-select).
1140
+ Props for the Toast/notification component.
1361
1141
 
1362
1142
  ```typescript
1363
- interface SelectProps<T = string> extends SelectElementProps {
1143
+ interface ToastProps extends HTMLElementProps {
1364
1144
  /**
1365
- * Select options.
1145
+ * Toast content.
1366
1146
  */
1367
- options: SelectOption<T>[]
1147
+ children?: Children
1368
1148
 
1369
1149
  /**
1370
- * Current value.
1150
+ * Toast title.
1371
1151
  */
1372
- value?: T
1152
+ title?: string
1373
1153
 
1374
1154
  /**
1375
- * Change handler (with typed value).
1155
+ * Toast description.
1376
1156
  */
1377
- onValueChange?: (value: T) => void
1157
+ description?: string
1378
1158
 
1379
1159
  /**
1380
- * Select size.
1160
+ * Toast status/type.
1381
1161
  */
1382
- size?: Size
1162
+ status?: ColorVariant
1383
1163
 
1384
1164
  /**
1385
- * Label text.
1165
+ * Duration in milliseconds (0 for persistent).
1386
1166
  */
1387
- label?: string
1167
+ duration?: number
1388
1168
 
1389
1169
  /**
1390
- * Placeholder text.
1170
+ * Whether the toast is dismissible.
1391
1171
  */
1392
- placeholder?: string
1172
+ dismissible?: boolean
1393
1173
 
1394
1174
  /**
1395
- * Error message.
1175
+ * Called when dismissed.
1396
1176
  */
1397
- error?: string
1177
+ onDismiss?: () => void
1398
1178
 
1399
1179
  /**
1400
- * Hint/help text.
1180
+ * Toast position.
1401
1181
  */
1402
- hint?: string
1182
+ position?: 'top' | 'top-right' | 'top-left' | 'bottom' | 'bottom-right' | 'bottom-left'
1403
1183
 
1404
1184
  /**
1405
- * Whether to allow clearing the selection.
1185
+ * Accessible label for the close button.
1186
+ * @default 'Close'
1406
1187
  */
1407
- clearable?: boolean
1188
+ closeLabel?: string
1408
1189
  }
1409
1190
  ```
1410
1191
 
1411
- #### `SeparatorClassOptions`
1192
+ #### `TabItem`
1412
1193
 
1413
- Options for resolving separator CSS classes via UIClassMap.
1194
+ A single tab in a Tabs component.
1414
1195
 
1415
1196
  ```typescript
1416
- interface SeparatorClassOptions {
1417
- orientation?: 'horizontal' | 'vertical'
1418
- }
1419
- ```
1197
+ interface TabItem<T = string> {
1198
+ /**
1199
+ * Tab value/id.
1200
+ */
1201
+ value: T
1420
1202
 
1421
- #### `SeparatorProps`
1203
+ /**
1204
+ * Tab label.
1205
+ */
1206
+ label: Children
1422
1207
 
1423
- Props for the Separator/Divider component.
1208
+ /**
1209
+ * Tab content.
1210
+ */
1211
+ content?: Children
1424
1212
 
1425
- ```typescript
1426
- interface SeparatorProps extends BaseProps {
1427
1213
  /**
1428
- * Separator orientation.
1214
+ * Whether the tab is disabled.
1429
1215
  */
1430
- orientation?: 'horizontal' | 'vertical'
1216
+ disabled?: boolean
1431
1217
 
1432
1218
  /**
1433
- * Whether the separator is decorative only.
1219
+ * Icon to display.
1434
1220
  */
1435
- decorative?: boolean
1221
+ icon?: Children
1436
1222
  }
1437
1223
  ```
1438
1224
 
1439
- #### `SkeletonProps`
1225
+ #### `TabsProps`
1440
1226
 
1441
- Props for the Skeleton loading placeholder component.
1227
+ Props for the Tabs component (switchable tabbed content panels).
1442
1228
 
1443
1229
  ```typescript
1444
- interface SkeletonProps extends BaseProps {
1230
+ interface TabsProps<T = string> extends BaseProps {
1445
1231
  /**
1446
- * Skeleton width.
1232
+ * Tab items.
1447
1233
  */
1448
- width?: string | number
1234
+ items: TabItem<T>[]
1449
1235
 
1450
1236
  /**
1451
- * Skeleton height.
1237
+ * Current active tab.
1452
1238
  */
1453
- height?: string | number
1239
+ value?: T
1454
1240
 
1455
1241
  /**
1456
- * Whether the skeleton is circular.
1242
+ * Default active tab.
1457
1243
  */
1458
- circle?: boolean
1244
+ defaultValue?: T
1459
1245
 
1460
1246
  /**
1461
- * Border radius.
1247
+ * Change handler.
1462
1248
  */
1463
- borderRadius?: string | number
1249
+ onChange?: (value: T) => void
1464
1250
 
1465
1251
  /**
1466
- * Animation type.
1252
+ * Tab variant.
1467
1253
  */
1468
- animation?: 'pulse' | 'wave' | 'none'
1469
- }
1470
- ```
1471
-
1472
- #### `SpacerProps`
1473
-
1474
- Props for the Spacer layout component (adds whitespace between elements).
1254
+ variant?: 'line' | 'enclosed' | 'soft-rounded' | 'solid-rounded'
1475
1255
 
1476
- ```typescript
1477
- interface SpacerProps extends BaseProps {
1478
1256
  /**
1479
- * Space size.
1257
+ * Tab size.
1480
1258
  */
1481
- size?: Size | string | number
1259
+ size?: Size
1482
1260
 
1483
1261
  /**
1484
- * Whether the spacer is horizontal.
1262
+ * Whether tabs are fitted (take full width).
1485
1263
  */
1486
- horizontal?: boolean
1487
- }
1488
- ```
1489
-
1490
- #### `SpinnerClassOptions`
1491
-
1492
- Options for resolving spinner CSS classes via UIClassMap.
1493
-
1494
- ```typescript
1495
- interface SpinnerClassOptions {
1496
- size?: Size
1264
+ fitted?: boolean
1497
1265
  }
1498
1266
  ```
1499
1267
 
1500
- #### `SpinnerProps`
1268
+ #### `AccordionItem`
1501
1269
 
1502
- Props for the Spinner/loading indicator component.
1270
+ A single item in an Accordion component.
1503
1271
 
1504
1272
  ```typescript
1505
- interface SpinnerProps extends BaseProps {
1273
+ interface AccordionItem<T = string> {
1506
1274
  /**
1507
- * Spinner size.
1275
+ * Item value/id.
1508
1276
  */
1509
- size?: Size
1277
+ value: T
1510
1278
 
1511
1279
  /**
1512
- * Spinner color.
1280
+ * Item header/trigger.
1513
1281
  */
1514
- color?: ColorVariant | string
1282
+ header: Children
1515
1283
 
1516
1284
  /**
1517
- * Loading label (for accessibility).
1285
+ * Item content.
1518
1286
  */
1519
- label?: string
1287
+ content: Children
1520
1288
 
1521
1289
  /**
1522
- * Spinner thickness.
1290
+ * Whether the item is disabled.
1523
1291
  */
1524
- thickness?: number
1292
+ disabled?: boolean
1525
1293
  }
1526
1294
  ```
1527
1295
 
1528
- #### `SwitchClassOptions`
1296
+ #### `AccordionProps`
1529
1297
 
1530
- Options for switch class resolution.
1298
+ Props for the Accordion component.
1531
1299
 
1532
1300
  ```typescript
1533
- interface SwitchClassOptions {
1534
- size?: Size
1301
+ interface AccordionProps<T = string> extends BaseProps {
1535
1302
  /**
1536
- * Color used for the checked/on track. Reuses the same semantic color
1537
- * scale as `ButtonClassOptions.color`/`BadgeClassOptions.variant`.
1538
- * @default 'primary'
1303
+ * Accordion items.
1539
1304
  */
1540
- color?: ColorVariant
1541
- }
1542
- ```
1543
-
1544
- #### `SwitchProps`
1305
+ items: AccordionItem<T>[]
1545
1306
 
1546
- Props for the Switch/Toggle component.
1307
+ /**
1308
+ * Expanded item(s).
1309
+ */
1310
+ value?: T | T[]
1547
1311
 
1548
- ```typescript
1549
- interface SwitchProps extends InputElementProps {
1550
1312
  /**
1551
- * Switch label.
1313
+ * Default expanded item(s).
1552
1314
  */
1553
- label?: Children
1315
+ defaultValue?: T | T[]
1554
1316
 
1555
1317
  /**
1556
- * Whether the switch is on.
1318
+ * Change handler.
1557
1319
  */
1558
- checked?: boolean
1320
+ onChange?: (value: T | T[]) => void
1559
1321
 
1560
1322
  /**
1561
- * Switch size.
1323
+ * Whether multiple items can be expanded.
1562
1324
  */
1563
- size?: Size
1325
+ multiple?: boolean
1564
1326
 
1565
1327
  /**
1566
- * Color when on.
1328
+ * Whether items can be collapsed.
1567
1329
  */
1568
- color?: ColorVariant
1330
+ collapsible?: boolean
1569
1331
  }
1570
1332
  ```
1571
1333
 
1572
- #### `TabItem`
1334
+ #### `TableColumn`
1573
1335
 
1574
- A single tab in a Tabs component.
1336
+ Table column definition.
1575
1337
 
1576
1338
  ```typescript
1577
- interface TabItem<T = string> {
1339
+ interface TableColumn<T> {
1578
1340
  /**
1579
- * Tab value/id.
1341
+ * Column key (data property).
1580
1342
  */
1581
- value: T
1343
+ key: keyof T | string
1582
1344
 
1583
1345
  /**
1584
- * Tab label.
1346
+ * Column header.
1585
1347
  */
1586
- label: Children
1587
-
1588
- /**
1589
- * Tab content.
1590
- */
1591
- content?: Children
1592
-
1593
- /**
1594
- * Whether the tab is disabled.
1595
- */
1596
- disabled?: boolean
1597
-
1598
- /**
1599
- * Icon to display.
1600
- */
1601
- icon?: Children
1602
- }
1603
- ```
1604
-
1605
- #### `TableColumn`
1606
-
1607
- Table column definition.
1608
-
1609
- ```typescript
1610
- interface TableColumn<T> {
1611
- /**
1612
- * Column key (data property).
1613
- */
1614
- key: keyof T | string
1615
-
1616
- /**
1617
- * Column header.
1618
- */
1619
- header: Children
1348
+ header: Children
1620
1349
 
1621
1350
  /**
1622
1351
  * Custom cell renderer.
@@ -1708,246 +1437,531 @@ interface TableProps<T> extends HTMLElementProps {
1708
1437
  }
1709
1438
  ```
1710
1439
 
1711
- #### `TabsClassOptions`
1440
+ #### `PaginationProps`
1712
1441
 
1713
- Options for resolving tabs (`tabsList`/`tabsTrigger`/`tabsContent`) CSS
1714
- classes via UIClassMap. Active vs inactive trigger styling is NOT one of
1715
- these options — it is expressed as `data-[state=active]` CSS attribute
1716
- selectors baked into the returned class string, driven by the
1717
- `data-state="active"|"inactive"` attribute the framework binding already
1718
- sets on the trigger element (see `@molecule/app-ui-react`'s `Tabs`).
1442
+ Props for the Pagination component (page navigation with current page, total, page size, and change callbacks).
1719
1443
 
1720
1444
  ```typescript
1721
- interface TabsClassOptions {
1445
+ interface PaginationProps extends BaseProps {
1722
1446
  /**
1723
- * Visual style: underline indicator, bordered/filled boxes, a soft-bg
1724
- * pill, or a solid-bg pill.
1447
+ * Current page (1-indexed).
1725
1448
  */
1726
- variant?: 'line' | 'enclosed' | 'soft-rounded' | 'solid-rounded'
1727
- size?: Size
1728
- }
1729
- ```
1730
-
1731
- #### `TabsProps`
1449
+ page: number
1732
1450
 
1733
- Props for the Tabs component (switchable tabbed content panels).
1451
+ /**
1452
+ * Total number of pages.
1453
+ */
1454
+ totalPages: number
1734
1455
 
1735
- ```typescript
1736
- interface TabsProps<T = string> extends BaseProps {
1737
1456
  /**
1738
- * Tab items.
1457
+ * Page change handler.
1739
1458
  */
1740
- items: TabItem<T>[]
1459
+ onChange: (page: number) => void
1741
1460
 
1742
1461
  /**
1743
- * Current active tab.
1462
+ * Number of sibling pages to show.
1744
1463
  */
1745
- value?: T
1464
+ siblings?: number
1746
1465
 
1747
1466
  /**
1748
- * Default active tab.
1467
+ * Number of boundary pages to show.
1749
1468
  */
1750
- defaultValue?: T
1469
+ boundaries?: number
1751
1470
 
1752
1471
  /**
1753
- * Change handler.
1472
+ * Pagination size.
1754
1473
  */
1755
- onChange?: (value: T) => void
1474
+ size?: Size
1756
1475
 
1757
1476
  /**
1758
- * Tab variant.
1477
+ * Whether to show first/last buttons.
1759
1478
  */
1760
- variant?: 'line' | 'enclosed' | 'soft-rounded' | 'solid-rounded'
1479
+ showFirstLast?: boolean
1761
1480
 
1762
1481
  /**
1763
- * Tab size.
1482
+ * Whether to show previous/next buttons.
1764
1483
  */
1765
- size?: Size
1484
+ showPrevNext?: boolean
1766
1485
 
1767
1486
  /**
1768
- * Whether tabs are fitted (take full width).
1487
+ * Accessible labels for pagination controls.
1769
1488
  */
1770
- fitted?: boolean
1489
+ labels?: {
1490
+ nav?: string
1491
+ first?: string
1492
+ previous?: string
1493
+ next?: string
1494
+ last?: string
1495
+ goToPage?: (page: number) => string
1496
+ }
1771
1497
  }
1772
1498
  ```
1773
1499
 
1774
- #### `TextareaClassOptions`
1500
+ #### `SkeletonProps`
1775
1501
 
1776
- Options for textarea class resolution.
1502
+ Props for the Skeleton loading placeholder component.
1777
1503
 
1778
1504
  ```typescript
1779
- interface TextareaClassOptions {
1780
- error?: boolean
1505
+ interface SkeletonProps extends BaseProps {
1781
1506
  /**
1782
- * Text size tier, matching {@link InputClassOptions.size} — a same-`size`
1783
- * input + textarea pair renders identical font sizes. Bonds default to
1784
- * their historic textarea size when omitted.
1507
+ * Skeleton width.
1785
1508
  */
1786
- size?: Size
1509
+ width?: string | number
1510
+
1511
+ /**
1512
+ * Skeleton height.
1513
+ */
1514
+ height?: string | number
1515
+
1516
+ /**
1517
+ * Whether the skeleton is circular.
1518
+ */
1519
+ circle?: boolean
1520
+
1521
+ /**
1522
+ * Border radius.
1523
+ */
1524
+ borderRadius?: string | number
1525
+
1526
+ /**
1527
+ * Animation type.
1528
+ */
1529
+ animation?: 'pulse' | 'wave' | 'none'
1787
1530
  }
1788
1531
  ```
1789
1532
 
1790
- #### `TextareaElementProps`
1533
+ #### `SeparatorProps`
1791
1534
 
1792
- Base props for textarea elements.
1535
+ Props for the Separator/Divider component.
1793
1536
 
1794
1537
  ```typescript
1795
- interface TextareaElementProps extends HTMLElementProps {
1796
- name?: string
1797
- value?: string
1798
- defaultValue?: string
1799
- placeholder?: string
1800
- required?: boolean
1801
- readOnly?: boolean
1802
- autoFocus?: boolean
1803
- rows?: number
1804
- cols?: number
1805
- maxLength?: number
1806
- minLength?: number
1807
- wrap?: 'hard' | 'soft' | 'off'
1808
- onChange?: ChangeEventHandler
1809
- onInput?: FormEventHandler
1538
+ interface SeparatorProps extends BaseProps {
1539
+ /**
1540
+ * Separator orientation.
1541
+ */
1542
+ orientation?: 'horizontal' | 'vertical'
1543
+
1544
+ /**
1545
+ * Whether the separator is decorative only.
1546
+ */
1547
+ decorative?: boolean
1810
1548
  }
1811
1549
  ```
1812
1550
 
1813
- #### `TextareaProps`
1551
+ #### `DropdownItem`
1814
1552
 
1815
- Props for the Textarea component.
1553
+ Dropdown menu item.
1816
1554
 
1817
1555
  ```typescript
1818
- interface TextareaProps extends TextareaElementProps {
1556
+ interface DropdownItem<T = string> {
1819
1557
  /**
1820
- * Text size tier (see {@link TextareaClassOptions.size}) — pass the same
1821
- * `size` as a neighboring Input for identical font sizes.
1558
+ * Item value/id.
1822
1559
  */
1823
- size?: Size
1560
+ value: T
1824
1561
 
1825
1562
  /**
1826
- * Label text.
1563
+ * Display label.
1827
1564
  */
1828
- label?: string
1565
+ label: Children
1829
1566
 
1830
1567
  /**
1831
- * Error message.
1568
+ * Whether the item is disabled.
1832
1569
  */
1833
- error?: string
1570
+ disabled?: boolean
1834
1571
 
1835
1572
  /**
1836
- * Hint/help text.
1573
+ * Icon to display.
1837
1574
  */
1838
- hint?: string
1575
+ icon?: Children
1839
1576
 
1840
1577
  /**
1841
- * Whether the textarea auto-resizes.
1578
+ * Keyboard shortcut display.
1842
1579
  */
1843
- autoResize?: boolean
1580
+ shortcut?: string
1844
1581
 
1845
1582
  /**
1846
- * Minimum number of rows.
1583
+ * Whether this is a separator.
1847
1584
  */
1848
- minRows?: number
1585
+ separator?: boolean
1849
1586
 
1850
1587
  /**
1851
- * Maximum number of rows.
1588
+ * Nested items (for submenus).
1852
1589
  */
1853
- maxRows?: number
1854
- }
1855
- ```
1856
-
1857
- #### `ToastClassOptions`
1858
-
1859
- Options for toast class resolution.
1860
-
1861
- ```typescript
1862
- interface ToastClassOptions {
1863
- variant?: 'default' | 'success' | 'warning' | 'error' | 'info'
1590
+ items?: DropdownItem<T>[]
1864
1591
  }
1865
1592
  ```
1866
1593
 
1867
- #### `ToastProps`
1594
+ #### `DropdownProps`
1868
1595
 
1869
- Props for the Toast/notification component.
1596
+ Props for the Dropdown menu component.
1870
1597
 
1871
1598
  ```typescript
1872
- interface ToastProps extends HTMLElementProps {
1599
+ interface DropdownProps<T = string> extends BaseProps {
1873
1600
  /**
1874
- * Toast content.
1601
+ * Dropdown trigger element.
1875
1602
  */
1876
- children?: Children
1603
+ trigger: Children
1877
1604
 
1878
1605
  /**
1879
- * Toast title.
1606
+ * Dropdown items.
1880
1607
  */
1881
- title?: string
1608
+ items: DropdownItem<T>[]
1882
1609
 
1883
1610
  /**
1884
- * Toast description.
1611
+ * Called when an item is selected.
1885
1612
  */
1886
- description?: string
1613
+ onSelect?: (value: T) => void
1887
1614
 
1888
1615
  /**
1889
- * Toast status/type.
1616
+ * Dropdown placement.
1890
1617
  */
1891
- status?: ColorVariant
1618
+ placement?:
1619
+ 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'right'
1892
1620
 
1893
1621
  /**
1894
- * Duration in milliseconds (0 for persistent).
1622
+ * Whether the dropdown is open (controlled).
1895
1623
  */
1896
- duration?: number
1624
+ open?: boolean
1897
1625
 
1898
1626
  /**
1899
- * Whether the toast is dismissible.
1627
+ * Called when open state changes.
1900
1628
  */
1901
- dismissible?: boolean
1629
+ onOpenChange?: (open: boolean) => void
1902
1630
 
1903
1631
  /**
1904
- * Called when dismissed.
1632
+ * Menu alignment.
1905
1633
  */
1906
- onDismiss?: () => void
1634
+ align?: 'start' | 'center' | 'end'
1907
1635
 
1908
1636
  /**
1909
- * Toast position.
1637
+ * Menu width.
1910
1638
  */
1911
- position?: 'top' | 'top-right' | 'top-left' | 'bottom' | 'bottom-right' | 'bottom-left'
1639
+ width?: 'trigger' | 'auto' | number | string
1640
+ }
1641
+ ```
1912
1642
 
1913
- /**
1914
- * Accessible label for the close button.
1915
- * @default 'Close'
1916
- */
1917
- closeLabel?: string
1643
+ #### `PageShellProps`
1644
+
1645
+ Props for the PageShell component — authenticated page wrapper with navigation.
1646
+
1647
+ ```typescript
1648
+ interface PageShellProps extends BaseProps {
1649
+ /** Sidebar content (navigation links). */
1650
+ sidebar?: Children
1651
+ /** Top bar content (breadcrumbs, user menu). */
1652
+ topbar?: Children
1653
+ /** Whether the sidebar is collapsed. */
1654
+ sidebarCollapsed?: boolean
1655
+ /** Callback when sidebar toggle is clicked. */
1656
+ onSidebarToggle?: () => void
1657
+ /** Main content. */
1658
+ children?: Children
1659
+ }
1660
+ ```
1661
+
1662
+ #### `EmptyStateProps`
1663
+
1664
+ Props for the EmptyState component — shown when a list or section has no data.
1665
+
1666
+ ```typescript
1667
+ interface EmptyStateProps extends BaseProps {
1668
+ /** Icon or illustration to display. */
1669
+ icon?: Children
1670
+ /** Main heading text. */
1671
+ title: string
1672
+ /** Description text. */
1673
+ description?: string
1674
+ /** Primary action button (e.g., "Create first item"). */
1675
+ action?: Children
1676
+ }
1677
+ ```
1678
+
1679
+ #### `PageHeaderProps`
1680
+
1681
+ Props for the PageHeader component — consistent page title area.
1682
+
1683
+ ```typescript
1684
+ interface PageHeaderProps extends BaseProps {
1685
+ /** Page title. */
1686
+ title: string
1687
+ /** Page description. */
1688
+ description?: string
1689
+ /** Action buttons (e.g., "Create", "Export"). */
1690
+ actions?: Children
1691
+ /** Breadcrumb trail. */
1692
+ breadcrumbs?: Array<{ label: string; href?: string }>
1693
+ }
1694
+ ```
1695
+
1696
+ #### `ButtonClassOptions`
1697
+
1698
+ Options for resolving button CSS classes via UIClassMap.
1699
+
1700
+ ```typescript
1701
+ interface ButtonClassOptions {
1702
+ variant?: ButtonVariant
1703
+ color?: ColorVariant
1704
+ size?: ButtonSize
1705
+ fullWidth?: boolean
1706
+ }
1707
+ ```
1708
+
1709
+ #### `InputClassOptions`
1710
+
1711
+ Options for resolving input CSS classes via UIClassMap.
1712
+
1713
+ ```typescript
1714
+ interface InputClassOptions {
1715
+ error?: boolean
1716
+ size?: Size
1717
+ /**
1718
+ * Horizontal text alignment inside the input. Bonds may default to a
1719
+ * centered aesthetic (e.g. the Tailwind bond's floating-label style);
1720
+ * `'left'` opts a specific field out — e.g. a form field sitting next to
1721
+ * left-aligned textareas.
1722
+ */
1723
+ align?: 'left' | 'center'
1724
+ }
1725
+ ```
1726
+
1727
+ #### `TextareaClassOptions`
1728
+
1729
+ Options for textarea class resolution.
1730
+
1731
+ ```typescript
1732
+ interface TextareaClassOptions {
1733
+ error?: boolean
1734
+ /**
1735
+ * Text size tier, matching {@link InputClassOptions.size} — a same-`size`
1736
+ * input + textarea pair renders identical font sizes. Bonds default to
1737
+ * their historic textarea size when omitted.
1738
+ */
1739
+ size?: Size
1740
+ }
1741
+ ```
1742
+
1743
+ #### `SelectClassOptions`
1744
+
1745
+ Options for resolving select CSS classes via UIClassMap.
1746
+
1747
+ ```typescript
1748
+ interface SelectClassOptions {
1749
+ error?: boolean
1750
+ size?: Size
1751
+ }
1752
+ ```
1753
+
1754
+ #### `CheckboxClassOptions`
1755
+
1756
+ Options for resolving checkbox CSS classes via UIClassMap.
1757
+
1758
+ ```typescript
1759
+ interface CheckboxClassOptions {
1760
+ error?: boolean
1761
+ }
1762
+ ```
1763
+
1764
+ #### `RadioClassOptions`
1765
+
1766
+ Options for resolving radio CSS classes via UIClassMap.
1767
+
1768
+ ```typescript
1769
+ interface RadioClassOptions {
1770
+ error?: boolean
1771
+ }
1772
+ ```
1773
+
1774
+ #### `SwitchClassOptions`
1775
+
1776
+ Options for switch class resolution.
1777
+
1778
+ ```typescript
1779
+ interface SwitchClassOptions {
1780
+ size?: Size
1781
+ /**
1782
+ * Color used for the checked/on track. Reuses the same semantic color
1783
+ * scale as `ButtonClassOptions.color`/`BadgeClassOptions.variant`.
1784
+ * @default 'primary'
1785
+ */
1786
+ color?: ColorVariant
1787
+ }
1788
+ ```
1789
+
1790
+ #### `LabelClassOptions`
1791
+
1792
+ Options for label class resolution.
1793
+
1794
+ ```typescript
1795
+ interface LabelClassOptions {
1796
+ required?: boolean
1797
+ }
1798
+ ```
1799
+
1800
+ #### `CardClassOptions`
1801
+
1802
+ Options for resolving card CSS classes via UIClassMap.
1803
+
1804
+ ```typescript
1805
+ interface CardClassOptions {
1806
+ variant?: 'default' | 'elevated' | 'outline' | 'ghost'
1807
+ }
1808
+ ```
1809
+
1810
+ #### `BadgeClassOptions`
1811
+
1812
+ Options for resolving badge CSS classes via UIClassMap.
1813
+
1814
+ ```typescript
1815
+ interface BadgeClassOptions {
1816
+ variant?: ColorVariant
1817
+ size?: Size
1818
+ }
1819
+ ```
1820
+
1821
+ #### `AlertClassOptions`
1822
+
1823
+ Options for resolving alert CSS classes via UIClassMap.
1824
+
1825
+ ```typescript
1826
+ interface AlertClassOptions {
1827
+ variant?: 'default' | 'info' | 'success' | 'warning' | 'error'
1828
+ }
1829
+ ```
1830
+
1831
+ #### `AvatarClassOptions`
1832
+
1833
+ Options for resolving avatar CSS classes via UIClassMap.
1834
+
1835
+ ```typescript
1836
+ interface AvatarClassOptions {
1837
+ size?: Size
1838
+ }
1839
+ ```
1840
+
1841
+ #### `ModalClassOptions`
1842
+
1843
+ Options for resolving modal/dialog CSS classes via UIClassMap.
1844
+
1845
+ ```typescript
1846
+ interface ModalClassOptions {
1847
+ size?: ModalSize
1848
+ }
1849
+ ```
1850
+
1851
+ #### `SpinnerClassOptions`
1852
+
1853
+ Options for resolving spinner CSS classes via UIClassMap.
1854
+
1855
+ ```typescript
1856
+ interface SpinnerClassOptions {
1857
+ size?: Size
1858
+ }
1859
+ ```
1860
+
1861
+ #### `ToastClassOptions`
1862
+
1863
+ Options for toast class resolution.
1864
+
1865
+ ```typescript
1866
+ interface ToastClassOptions {
1867
+ variant?: 'default' | 'success' | 'warning' | 'error' | 'info'
1868
+ }
1869
+ ```
1870
+
1871
+ #### `SeparatorClassOptions`
1872
+
1873
+ Options for resolving separator CSS classes via UIClassMap.
1874
+
1875
+ ```typescript
1876
+ interface SeparatorClassOptions {
1877
+ orientation?: 'horizontal' | 'vertical'
1878
+ }
1879
+ ```
1880
+
1881
+ #### `AccordionClassOptions`
1882
+
1883
+ Options for resolving accordion CSS classes via UIClassMap.
1884
+
1885
+ ```typescript
1886
+ interface AccordionClassOptions {
1887
+ variant?: string
1888
+ }
1889
+ ```
1890
+
1891
+ #### `TabsClassOptions`
1892
+
1893
+ Options for resolving tabs (`tabsList`/`tabsTrigger`/`tabsContent`) CSS
1894
+ classes via UIClassMap. Active vs inactive trigger styling is NOT one of
1895
+ these options — it is expressed as `data-[state=active]` CSS attribute
1896
+ selectors baked into the returned class string, driven by the
1897
+ `data-state="active"|"inactive"` attribute the framework binding already
1898
+ sets on the trigger element (see `@molecule/app-ui-react`'s `Tabs`).
1899
+
1900
+ ```typescript
1901
+ interface TabsClassOptions {
1902
+ /**
1903
+ * Visual style: underline indicator, bordered/filled boxes, a soft-bg
1904
+ * pill, or a solid-bg pill.
1905
+ */
1906
+ variant?: 'line' | 'enclosed' | 'soft-rounded' | 'solid-rounded'
1907
+ size?: Size
1908
+ }
1909
+ ```
1910
+
1911
+ #### `PaginationClassOptions`
1912
+
1913
+ Options for pagination item class resolution.
1914
+
1915
+ ```typescript
1916
+ interface PaginationClassOptions {
1917
+ active?: boolean
1918
+ size?: Size
1919
+ }
1920
+ ```
1921
+
1922
+ #### `ContainerClassOptions`
1923
+
1924
+ Options for container class resolution.
1925
+
1926
+ ```typescript
1927
+ interface ContainerClassOptions {
1928
+ size?: Size | '2xl' | 'full'
1918
1929
  }
1919
1930
  ```
1920
1931
 
1921
- #### `TooltipProps`
1932
+ #### `FlexClassOptions`
1922
1933
 
1923
- Props for the Tooltip component (hover/focus popover with informational text).
1934
+ Options for flex class resolution.
1924
1935
 
1925
1936
  ```typescript
1926
- interface TooltipProps extends HTMLElementProps {
1927
- /**
1928
- * Tooltip content.
1929
- */
1930
- content: Children
1931
-
1932
- /**
1933
- * Element that triggers the tooltip.
1934
- */
1935
- children: Children
1937
+ interface FlexClassOptions {
1938
+ direction?: 'row' | 'col' | 'row-reverse' | 'col-reverse'
1939
+ align?: 'start' | 'center' | 'end' | 'stretch' | 'baseline'
1940
+ justify?: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly'
1941
+ wrap?: 'wrap' | 'nowrap' | 'wrap-reverse'
1942
+ /** Named tokens or Tailwind spacing scale index (e.g. `3` → `gap-3`). */
1943
+ gap?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | number
1944
+ }
1945
+ ```
1936
1946
 
1937
- /**
1938
- * Tooltip placement.
1939
- */
1940
- placement?: TooltipPlacement
1947
+ #### `GridClassOptions`
1941
1948
 
1942
- /**
1943
- * Delay before showing (ms).
1944
- */
1945
- delay?: number
1949
+ Options for grid class resolution.
1946
1950
 
1951
+ ```typescript
1952
+ interface GridClassOptions {
1953
+ cols?: number
1954
+ /** Named tokens or Tailwind spacing scale index (e.g. `10` → `gap-10`). */
1955
+ gap?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | number
1947
1956
  /**
1948
- * Whether the tooltip has an arrow.
1957
+ * Mobile-first responsive collapse. When omitted (the default), a grid of
1958
+ * `cols >= 2` starts at a single column on small screens and steps up to
1959
+ * `cols` at larger breakpoints, so cards don't overflow on mobile. Pass
1960
+ * `false` for a FIXED `cols`-column grid at every viewport width. Ignored
1961
+ * for `cols <= 1` (always single-column) and by ClassMap bonds without a
1962
+ * breakpoint system (e.g. NativeWind).
1949
1963
  */
1950
- hasArrow?: boolean
1964
+ responsive?: boolean
1951
1965
  }
1952
1966
  ```
1953
1967
 
@@ -2205,590 +2219,11 @@ interface UIClassMap {
2205
2219
 
2206
2220
  /** Native select arrow area. */
2207
2221
  selectNative: string
2208
-
2209
- // ---- Label/Form sub-element tokens ----
2210
-
2211
- /** Block label with bottom margin (for use above inputs). */
2212
- labelBlock: string
2213
- /** Form fieldset wrapper. */
2214
- formFieldset: string
2215
- /** Fieldset with display:contents — invisible wrapper for disabled state. */
2216
- formFieldsetContents: string
2217
- /** Form field group wrapper. */
2218
- formField: string
2219
- /** Flex column wrapper around control + error message. */
2220
- formFieldWrapper: string
2221
-
2222
- // ---- Control (Checkbox/Switch/Radio) shared tokens ----
2223
-
2224
- /** Control wrapper label (flex + gap + cursor). */
2225
- controlLabel: string
2226
- /** Inner control container (for checkbox/radio indicator). */
2227
- controlContainer: string
2228
- /** Control label text styling (font size, color, etc.). */
2229
- controlText: string
2230
- /** Disabled state for control wrappers. */
2231
- controlDisabled: string
2232
-
2233
- // ---- Radio group tokens ----
2234
-
2235
- /** Radio group label/legend. */
2236
- radioGroupLabel: string
2237
-
2238
- // ---- Accordion sub-element tokens ----
2239
-
2240
- /** Accordion trigger chevron icon (animated rotation). */
2241
- accordionChevron: string
2242
- /** Accordion trigger base (full-width, left-aligned). */
2243
- accordionTriggerBase: string
2244
-
2245
- // ---- Tabs sub-element tokens ----
2246
-
2247
- /** Tabs list fitted variant (full-width). */
2248
- tabsFitted: string
2249
- /** Tab trigger fitted variant (flex-1). */
2250
- tabTriggerFitted: string
2251
- /** Tab trigger icon spacing. */
2252
- tabTriggerIcon: string
2253
-
2254
- // ---- Pagination tokens ----
2255
-
2256
- /** Pagination button interactive classes (cursor). */
2257
- paginationInteractive: string
2258
-
2259
- // ---- Progress sub-element tokens ----
2260
-
2261
- /** Progress outer wrapper (full-width). */
2262
- progressWrapper: string
2263
- /** Progress label container (flex between). */
2264
- progressLabelContainer: string
2265
- /** Progress label text styling. */
2266
- progressLabelText: string
2267
- /** Progress indeterminate animation. */
2268
- progressIndeterminate: string
2269
-
2270
- // ---- Table sub-element tokens ----
2271
-
2272
- /** Table scrollable wrapper. */
2273
- tableWrapper: string
2274
- /** Table loading overlay. */
2275
- tableLoadingOverlay: string
2276
- /** Table empty state cell. */
2277
- tableEmptyCell: string
2278
- /** Table sort indicator wrapper. */
2279
- tableSortWrapper: string
2280
- /** Table sort icon spacing. */
2281
- tableSortIcon: string
2282
- /** Table striped row. */
2283
- tableRowStriped: string
2284
- /** Table hoverable row. */
2285
- tableRowHoverable: string
2286
- /** Table clickable row. */
2287
- tableRowClickable: string
2288
- /** Table sortable header. */
2289
- tableHeadSortable: string
2290
- /** Table bordered variant. */
2291
- tableBordered: string
2292
-
2293
- // ---- Toast sub-element tokens ----
2294
-
2295
- /** Toast icon wrapper (prevents shrinking). */
2296
- toastIconWrapper: string
2297
- /** Toast content wrapper (fills remaining space). */
2298
- toastContentWrapper: string
2299
-
2300
- // ---- Dropdown sub-element tokens ----
2301
-
2302
- /** Dropdown trigger wrapper. */
2303
- dropdownTrigger: string
2304
- /** Dropdown item icon spacing. */
2305
- dropdownItemIcon: string
2306
- /** Dropdown item label (fills remaining space). */
2307
- dropdownItemLabel: string
2308
- /** Dropdown item shortcut text. */
2309
- dropdownItemShortcut: string
2310
- /** Dropdown item disabled state. */
2311
- dropdownItemDisabled: string
2312
-
2313
- // ---- Tooltip tokens ----
2314
-
2315
- /** Tooltip trigger wrapper. */
2316
- tooltipTrigger: string
2317
-
2318
- // ---- Avatar sub-element tokens ----
2319
-
2320
- /** Avatar initials text styling. */
2321
- avatarInitials: string
2322
- /** Avatar fallback icon sizing. */
2323
- avatarFallbackIcon: string
2324
- /** Avatar square (non-rounded) variant. */
2325
- avatarSquare: string
2326
-
2327
- // ---- Badge tokens ----
2328
-
2329
- /** Badge square (non-rounded) variant. */
2330
- badgeSquare: string
2331
-
2332
- // ---- Skeleton sub-element tokens ----
2333
-
2334
- /** Skeleton text line container. */
2335
- skeletonTextContainer: string
2336
- /** Skeleton circle shape. */
2337
- skeletonCircle: string
2338
- /** Skeleton wave animation variant. */
2339
- skeletonWave: string
2340
- /** Skeleton no-animation variant. */
2341
- skeletonNone: string
2342
-
2343
- // ---- Typography utility tokens ----
2344
-
2345
- /** Right-aligned text. */
2346
- textRight: string
2347
-
2348
- // ---- Theme surface tokens ----
2349
-
2350
- /** Full-page background with default text color (light/dark aware). */
2351
- page: string
2352
- /** Card/panel surface background (light/dark aware). */
2353
- surface: string
2354
- /** Recessed/secondary surface background (e.g. tab bars, inputs, sidebars). */
2355
- surfaceSecondary: string
2356
- /** App header bar: surface + bottom border + subtle shadow. */
2357
- headerBar: string
2358
- /** Right-side drawer panel: fixed, full-height, scrollable. */
2359
- drawer: string
2360
-
2361
- // ---- Text color tokens ----
2362
-
2363
- /** De-emphasized text (e.g. labels, secondary info). */
2364
- textMuted: string
2365
- /** Very subtle text (e.g. footer, icon color). */
2366
- textSubtle: string
2367
- /** Primary brand color text (e.g. links, active labels). */
2368
- textPrimary: string
2369
- /**
2370
- * Readable text colour for content sitting on {@link bgPrimaryContainer}.
2371
- *
2372
- * The counterpart the theme guarantees contrast against — see the note on
2373
- * `bgPrimaryContainer`. Note it is NOT interchangeable with `textPrimary`:
2374
- * some themes build a dark primary container and give this a light value, so
2375
- * pairing it with a light tint inverts the problem (measured at 1.07:1 in one
2376
- * flagship). Always use the two together.
2377
- */
2378
- textOnPrimaryContainer: string
2379
- /** Success state text color. */
2380
- textSuccess: string
2381
- /** Warning state text color. */
2382
- textWarning: string
2383
- /** Error-state text color. */
2384
- textError: string
2385
-
2386
- // ---- Border tokens ----
2387
-
2388
- /** Bottom border in theme border color. */
2389
- borderB: string
2390
- /** Top border in theme border color. */
2391
- borderT: string
2392
- /** Right border in theme border color. */
2393
- borderR: string
2394
- /** Left border in theme border color. */
2395
- borderL: string
2396
- /** All-sides border in theme border color. */
2397
- borderAll: string
2398
- /** Primary-colored bottom border (e.g. active tab indicator). */
2399
- borderBPrimary: string
2400
- /** Primary-colored top border accent (e.g. highlighted pricing card). */
2401
- borderTPrimary: string
2402
-
2403
- // ---- Background utility tokens ----
2404
-
2405
- /** Subtle error background for banners/notifications. */
2406
- bgErrorSubtle: string
2407
- /** Border color used as element background (e.g. resize handles, separators). */
2408
- bgBorder: string
2409
- /** Subtle primary-tinted background (e.g. icon halo, callout banner). */
2410
- bgPrimarySubtle: string
2411
- /**
2412
- * Primary-tinted container background, paired with {@link textOnPrimaryContainer}.
2413
- *
2414
- * Use this pair — never `bgPrimarySubtle` + `textPrimary` — whenever TEXT sits
2415
- * on a primary tint. The brand colour as text on a 10% tint of itself is only
2416
- * legible when the brand is already dark: measured across the flagship themes,
2417
- * an amber brand scores 1.98:1 there and no shade of the hue fixes it, because
2418
- * darkening enough for the tint breaks the button fill it also has to serve.
2419
- * The container pair is defined per theme precisely so both sides move
2420
- * together, and it clears 4.5:1 in 130 of 133 flagship themes.
2421
- */
2422
- bgPrimaryContainer: string
2423
- /** Solid primary background (e.g. CTA fill). */
2424
- bgPrimary: string
2425
- /** Pure white background (uses `--color-surface-container-lowest` if defined). */
2426
- bgWhite: string
2427
-
2428
- // ---- Premium typography utilities ----
2429
-
2430
- /** Italic style for emphasized headlines (e.g. tier name in pricing card). */
2431
- italic: string
2432
- /** ALL CAPS letter transform for eyebrow labels. */
2433
- uppercase: string
2434
- /** Wide letter-spacing for caps eyebrow / button labels. */
2435
- trackingWide: string
2436
-
2437
- // ---- Premium decoration tokens ----
2438
-
2439
- /** Linear gradient using the app's primary color (e.g. hero CTAs). */
2440
- gradientPrimary: string
2441
- /** Soft elevation suitable for "lifted" cards (e.g. popular pricing tier). */
2442
- shadowLifted: string
2443
-
2444
- // ---- Composite style tokens ----
2445
-
2446
- /** Settings section heading (small, muted). */
2447
- sectionHeading: string
2448
- /** Standard form label (block, small, medium weight, bottom margin). */
2449
- formLabel: string
2450
- /** Small form label variant (extra-small, muted). */
2451
- formLabelSmall: string
2452
- /** Inline text link appearance (hover effect). */
2453
- link: string
2454
- /** Rich text / long-form prose content. */
2455
- prose: string
2456
- /** Thin horizontal divider line. */
2457
- dividerLine: string
2458
- /** Modal overlay backdrop. */
2459
- overlay: string
2460
- /** Fixed bottom footer bar. */
2461
- footerBar: string
2462
- /** Footer link styling (muted, hover highlight). */
2463
- footerLink: string
2464
- /** Footer button styling (borderless, muted, hover highlight). */
2465
- footerButton: string
2466
-
2467
- // ---- Language selector tokens ----
2468
-
2469
- /** Language selector grid container (responsive columns, scrollable). */
2470
- languageGrid: string
2471
- /** Language option item (default/inactive state). */
2472
- languageOption: string
2473
- /** Language option item (active/selected state). */
2474
- languageActive: string
2475
- /** Trigger button for `<LanguagePicker />` (globe icon + current locale name). */
2476
- languagePickerTrigger: string
2477
-
2478
- // ---- Spacing utilities ----
2479
-
2480
- /**
2481
- * Returns a spacing class for the given property and scale.
2482
- */
2483
- sp(property: SpacingProperty, scale: SpacingScale): string
2484
- /**
2485
- * Returns a style object resolved from a compound spacing spec.
2486
- * Use on the `style` prop — avoids CSS class ordering conflicts entirely.
2487
- * More specific properties override less specific ones (e.g. `pr` overrides `px` overrides `p`).
2488
- */
2489
- sp(overrides: SpacingOverrides): Record<string, string>
2490
- /**
2491
- * Returns vertical space-between class (e.g. `space-y-*` in Tailwind).
2492
- */
2493
- stack(scale: SpacingScale): string
2494
-
2495
- // ---- Typography utilities ----
2496
-
2497
- /**
2498
- * Returns font size class for the given scale.
2499
- */
2500
- textSize(size: TextScale): string
2501
- /**
2502
- * Returns font weight class for the given weight.
2503
- */
2504
- fontWeight(weight: FontWeightScale): string
2505
- /** Center-aligned text. */
2506
- textCenter: string
2507
-
2508
- // ---- Sizing utilities ----
2509
-
2510
- /**
2511
- * Returns width class — fractional (`'1/2'`), keyword (`'full'`), or numeric.
2512
- */
2513
- w(value: WidthValue | number): string
2514
- /**
2515
- * Returns height class — keyword (`'full'`, `'screen'`) or numeric.
2516
- */
2517
- h(value: HeightValue | number): string
2518
- /**
2519
- * Returns minimum height class.
2520
- */
2521
- minH(value: HeightValue): string
2522
- /**
2523
- * Returns maximum width constraint class.
2524
- */
2525
- maxW(value: MaxWidthScale): string
2526
- /** Prevent flex shrinking. */
2527
- shrink0: string
2528
-
2529
- // ---- Touch / pointer utilities ----
2530
-
2531
- /**
2532
- * Minimum interactive hit-area for touch (coarse-pointer) devices — WCAG 2.5.5
2533
- * "Target Size". Resolves to a `>=44x44px` minimum that applies ONLY on
2534
- * coarse-pointer devices, so fine-pointer (mouse) layouts keep their compact
2535
- * control sizing. Compose onto small icon buttons/controls that would otherwise
2536
- * be too small to tap reliably on phones/tablets (e.g. the preview toolbar's
2537
- * back/forward/refresh/open and device-frame buttons). On React Native (touch
2538
- * by definition) the bond applies the minimum unconditionally.
2539
- */
2540
- touchTarget: string
2541
-
2542
- /**
2543
- * Compact coarse-pointer hit-area floor (`>=36x36px`) for inline CTAs inside
2544
- * dense surfaces — banner/notice-card action buttons, chat-card actions —
2545
- * where the full 44px {@link touchTarget} visibly overwhelms the strip or
2546
- * card that hosts them. 36px is still comfortably tappable; reserve the full
2547
- * 44px floor for standalone controls. Like {@link touchTarget} it applies
2548
- * only on coarse-pointer devices (unconditionally on React Native).
2549
- */
2550
- touchTargetCompact: string
2551
-
2552
- // ---- Position utilities ----
2553
-
2554
- // ---- Display utilities ----
2555
-
2556
- /** Block display. */
2557
- displayBlock: string
2558
- /** Inline-block display. */
2559
- displayInlineBlock: string
2560
- /** Contents display (invisible wrapper). */
2561
- displayContents: string
2562
- /**
2563
- * Hidden on viewports NARROWER than the breakpoint; the element keeps its
2564
- * own display from the breakpoint up. Pair with {@link UIClassMap.hiddenFrom}
2565
- * to swap a desktop surface (a side column) for a phone one (a bottom bar)
2566
- * in CSS alone — correct in server-rendered HTML before any JavaScript runs.
2567
- */
2568
- hiddenBelow(breakpoint: ResponsiveBreakpoint): string
2569
- /** Hidden on viewports AT OR WIDER than the breakpoint (the phone-only half of the pair). */
2570
- hiddenFrom(breakpoint: ResponsiveBreakpoint): string
2571
-
2572
- // ---- Layout utilities ----
2573
-
2574
- /** Horizontal auto margin (centering). */
2575
- mxAuto: string
2576
- /** Pointer cursor. */
2577
- cursorPointer: string
2578
- /** Full border radius (circle). */
2579
- roundedFull: string
2580
-
2581
- // ---- Grid utilities ----
2582
-
2583
- /**
2584
- * Returns grid-template-rows class for the given row count.
2585
- */
2586
- gridRows(rows: number): string
2587
-
2588
- // ---- Position utilities ----
2589
-
2590
- /**
2591
- * Returns CSS position class for the given value.
2592
- */
2593
- position(value: 'relative' | 'absolute' | 'fixed' | 'sticky'): string
2594
- /** Full inset (inset: 0). */
2595
- inset0: string
2596
-
2597
- // ---- Logo / brand identity tokens ----
2598
-
2599
- /** Logo wordmark text styling (size, tracking, case). */
2600
- logoText: string
2601
- /** Logo icon color (primary brand color). */
2602
- logoIcon: string
2603
-
2604
- // ---- Header layout tokens ----
2605
-
2606
- /** Fixed header positioning (fixed, full-width, high z-index). */
2607
- headerFixed: string
2608
- /** Main header inner container (max-width, height, padding). */
2609
- headerInner: string
2610
-
2611
- // ---- Auth page layout tokens ----
2612
-
2613
- /** Auth page header inner container (full-width, no max-width). */
2614
- authHeaderInner: string
2615
- /** Auth page body: centered content area. */
2616
- authPageBody: string
2617
- /** Auth form narrow container (max-width, centered). */
2618
- authFormWrapper: string
2619
- /** Auth form field spacing (bottom margin). */
2620
- authField: string
2621
- /** Spacing after auth submit area (top margin). */
2622
- authAfterSubmit: string
2623
-
2624
- // ---- Auth button layout tokens ----
2625
-
2626
- /** Flex row container for auth form buttons. */
2627
- authButtonRow: string
2628
- /** Back button sizing in auth forms. */
2629
- authBackButton: string
2630
- /** Submit button sizing next to back button. */
2631
- authSubmitButton: string
2632
- /** Login page signup button (half-width, left). */
2633
- authLoginSignup: string
2634
- /** Login page submit button (half-width, right). */
2635
- authLoginSubmit: string
2636
- /** Login submit full-width (when logging in). */
2637
- authLoginSubmitFull: string
2638
- /** Hidden state for login signup button. */
2639
- authHidden: string
2640
- /** Forward arrow icon spacing. */
2641
- authArrowIcon: string
2642
-
2643
- // ---- App layout tokens ----
2644
-
2645
- /** Main app content padding (header/footer offsets). */
2646
- appLayout: string
2647
-
2648
- /** Flex grow to fill available space (`flex: 1`). */
2649
- flex1: string
2650
-
2651
- // ---- OAuth tokens ----
2652
-
2653
- /** OAuth provider name label (fallback when no icon). */
2654
- oauthProviderLabel: string
2655
-
2656
- // ---- Layout pattern tokens ----
2657
-
2658
- /** PageShell root container (flex, full screen). */
2659
- pageShell: string
2660
- /** PageShell sidebar panel. */
2661
- pageShellSidebar: string
2662
- /** PageShell sidebar collapsed state (narrow width). */
2663
- pageShellSidebarCollapsed: string
2664
- /** PageShell top bar strip. */
2665
- pageShellTopbar: string
2666
- /** PageShell main content area (scrollable). */
2667
- pageShellContent: string
2668
- /** PageShell sidebar toggle button. */
2669
- pageShellSidebarToggle: string
2670
- /** EmptyState root container (centered column). */
2671
- emptyState: string
2672
- /** EmptyState icon/illustration wrapper. */
2673
- emptyStateIcon: string
2674
- /** EmptyState heading text. */
2675
- emptyStateTitle: string
2676
- /** EmptyState description text. */
2677
- emptyStateDescription: string
2678
- /** EmptyState action slot. */
2679
- emptyStateAction: string
2680
- /** PageHeader root container. */
2681
- pageHeader: string
2682
- /** PageHeader title text. */
2683
- pageHeaderTitle: string
2684
- /** PageHeader description text. */
2685
- pageHeaderDescription: string
2686
- /** PageHeader action buttons container. */
2687
- pageHeaderActions: string
2688
- /** PageHeader breadcrumb trail container. */
2689
- pageHeaderBreadcrumbs: string
2690
- /** PageHeader breadcrumb item link/text. */
2691
- pageHeaderBreadcrumbItem: string
2692
- /** PageHeader breadcrumb separator character. */
2693
- pageHeaderBreadcrumbSeparator: string
2694
-
2695
- // ---- Search UI tokens (SearchBox, SearchResults, QuickSearch) ----
2696
-
2697
- /** SearchBox field: the bordered bar holding the icon, the input and its actions; focus ring via focus-within. */
2698
- searchField: string
2699
- /** SearchBox leading icon slot. */
2700
- searchFieldIcon: string
2701
- /** SearchBox text input: borderless, fills the bar, left-aligned, visible placeholder. */
2702
- searchFieldInput: string
2703
- /** SearchBox trailing slot: the clear button and the shortcut hint. */
2704
- searchFieldActions: string
2705
- /** SearchBox icon-only clear button. */
2706
- searchFieldClear: string
2707
- /** SearchBox status row under the field: filter chips at the left, the count and tips at the right. */
2708
- searchStatusRow: string
2709
- /** SearchBox syntax tips line. */
2710
- searchTips: string
2711
- /** A key cap (`/`, `↵`). */
2712
- kbd: string
2713
- /** A removable filter chip (`category: auth ×`). */
2714
- filterChip: string
2715
- /** Added to a filter chip that EXCLUDES its value. */
2716
- filterChipNegated: string
2717
- /** The × inside a filter chip. */
2718
- filterChipRemove: string
2719
- /** SearchResults list container: bordered, rows divided. */
2720
- resultList: string
2721
- /** One result row. */
2722
- resultItem: string
2723
- /** Added to the keyboard- or pointer-active result row. */
2724
- resultItemActive: string
2725
- /** A result row's body: the link that fills the row. */
2726
- resultBody: string
2727
- /** A result row's title. */
2728
- resultTitle: string
2729
- /** Added to a result title that is code (a package name). */
2730
- resultTitleMono: string
2731
- /** A result row's meta line (type · category · related). */
2732
- resultMeta: string
2733
- /** A result row's description, clamped to two lines. */
2734
- resultDescription: string
2735
- /** A matched term inside a result. */
2736
- resultMark: string
2737
- /** A result row's trailing action slot. */
2738
- resultAction: string
2739
- /** A results empty state. */
2740
- resultEmpty: string
2741
- }
2742
- ```
2743
-
2744
- #### `UIProvider`
2745
-
2746
- Identifies the bonded UI styling library. Providers set `name`
2747
- to indicate which library is active (e.g. `"tailwind"`, `"bootstrap"`).
2748
-
2749
- ```typescript
2750
- interface UIProvider {
2751
- /**
2752
- * Identifier for the styling library (e.g. `"tailwind"`, `"ionic"`).
2753
- */
2754
- name: string
2755
- }
2222
+ // … truncated — the full declaration is in node_modules/@molecule/app-ui/dist/types.d.ts
2756
2223
  ```
2757
2224
 
2758
2225
  ### Types
2759
2226
 
2760
- #### `AccentTone`
2761
-
2762
- Tones of an accent bar: the semantic colors, the brand primary, or `custom` (the `--mol-accent` variable).
2763
-
2764
- ```typescript
2765
- type AccentTone = 'default' | 'primary' | 'info' | 'success' | 'warning' | 'error' | 'custom'
2766
- ```
2767
-
2768
- #### `ButtonSize`
2769
-
2770
- Button size variants (extends Size with 'icon' for square icon-only buttons).
2771
-
2772
- ```typescript
2773
- type ButtonSize = Size | 'icon'
2774
- ```
2775
-
2776
- #### `ButtonVariant`
2777
-
2778
- Button visual variant styles.
2779
-
2780
- ```typescript
2781
- type ButtonVariant = 'solid' | 'outline' | 'ghost' | 'link'
2782
- ```
2783
-
2784
- #### `ChangeEventHandler`
2785
-
2786
- Framework-agnostic change event handler.
2787
-
2788
- ```typescript
2789
- type ChangeEventHandler = EventHandler<Event>
2790
- ```
2791
-
2792
2227
  #### `Children`
2793
2228
 
2794
2229
  Framework-agnostic child content.
@@ -2798,48 +2233,30 @@ Use `unknown` to allow any framework's node type (ReactNode, VNode, etc.).
2798
2233
  type Children = unknown
2799
2234
  ```
2800
2235
 
2801
- #### `ClassMapOverrides`
2802
-
2803
- Overrides for extending a UIClassMap.
2236
+ #### `EventHandler`
2804
2237
 
2805
- Can be a partial map of token replacements, or a function that receives
2806
- the base ClassMap and returns overrides (useful for extending resolver
2807
- functions while preserving the base behavior).
2238
+ Framework-agnostic event handler.
2808
2239
 
2809
2240
  ```typescript
2810
- type ClassMapOverrides = Partial<UIClassMap> | ((base: UIClassMap) => Partial<UIClassMap>)
2241
+ type EventHandler<E = Event> = (event: E) => void
2811
2242
  ```
2812
2243
 
2813
- #### `ClassMapValue`
2814
-
2815
- Class value types accepted by the UIClassMap `cn()` function.
2816
- Supports strings, booleans, arrays, and conditional objects.
2817
-
2818
- ```typescript
2819
- type ClassMapValue =
2820
- | string
2821
- | number
2822
- | boolean
2823
- | undefined
2824
- | null
2825
- | ClassMapValue[]
2826
- | Record<string, boolean | undefined | null>
2827
- ```
2244
+ - `event` — The DOM event object.
2828
2245
 
2829
- #### `ColorVariant`
2246
+ #### `MouseEventHandler`
2830
2247
 
2831
- Semantic color variants used across components for status indication.
2248
+ Framework-agnostic mouse event handler.
2832
2249
 
2833
2250
  ```typescript
2834
- type ColorVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info'
2251
+ type MouseEventHandler = EventHandler<MouseEvent>
2835
2252
  ```
2836
2253
 
2837
- #### `EventHandler`
2254
+ #### `KeyboardEventHandler`
2838
2255
 
2839
- Framework-agnostic event handler.
2256
+ Framework-agnostic keyboard event handler.
2840
2257
 
2841
2258
  ```typescript
2842
- type EventHandler<E = Event> = (event: E) => void
2259
+ type KeyboardEventHandler = EventHandler<KeyboardEvent>
2843
2260
  ```
2844
2261
 
2845
2262
  #### `FocusEventHandler`
@@ -2850,12 +2267,12 @@ Framework-agnostic focus event handler.
2850
2267
  type FocusEventHandler = EventHandler<FocusEvent>
2851
2268
  ```
2852
2269
 
2853
- #### `FontWeightScale`
2270
+ #### `ChangeEventHandler`
2854
2271
 
2855
- Font weight scale.
2272
+ Framework-agnostic change event handler.
2856
2273
 
2857
2274
  ```typescript
2858
- type FontWeightScale = 'normal' | 'medium' | 'semibold' | 'bold' | 'extrabold'
2275
+ type ChangeEventHandler = EventHandler<Event>
2859
2276
  ```
2860
2277
 
2861
2278
  #### `FormEventHandler`
@@ -2866,62 +2283,54 @@ Framework-agnostic form event handler.
2866
2283
  type FormEventHandler = EventHandler<Event>
2867
2284
  ```
2868
2285
 
2869
- #### `HeightValue`
2286
+ #### `Size`
2870
2287
 
2871
- Height value — fractional, keyword, or numeric (mapped to spacing scale).
2288
+ Standard size scale used across all molecule UI components (buttons, inputs, badges, etc.).
2872
2289
 
2873
2290
  ```typescript
2874
- type HeightValue =
2875
- 'full' | 'screen' | 'auto' | '1/2' | '1/3' | '2/3' | '1/4' | '3/4' | TailwindArbitraryBracket
2291
+ type Size = 'xs' | 'sm' | 'md' | 'lg' | 'xl'
2876
2292
  ```
2877
2293
 
2878
- #### `InputType`
2294
+ #### `ButtonSize`
2879
2295
 
2880
- Allowed HTML input type attribute values for the Input component.
2296
+ Button size variants (extends Size with 'icon' for square icon-only buttons).
2881
2297
 
2882
2298
  ```typescript
2883
- type InputType =
2884
- | 'text'
2885
- | 'email'
2886
- | 'password'
2887
- | 'number'
2888
- | 'tel'
2889
- | 'url'
2890
- | 'search'
2891
- | 'date'
2892
- | 'time'
2893
- | 'datetime-local'
2299
+ type ButtonSize = Size | 'icon'
2894
2300
  ```
2895
2301
 
2896
- #### `KeyboardEventHandler`
2302
+ #### `ColorVariant`
2897
2303
 
2898
- Framework-agnostic keyboard event handler.
2304
+ Semantic color variants used across components for status indication.
2899
2305
 
2900
2306
  ```typescript
2901
- type KeyboardEventHandler = EventHandler<KeyboardEvent>
2307
+ type ColorVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info'
2902
2308
  ```
2903
2309
 
2904
- #### `MaxWidthScale`
2310
+ #### `ButtonVariant`
2905
2311
 
2906
- Max-width scale for constraining content.
2312
+ Button visual variant styles.
2907
2313
 
2908
2314
  ```typescript
2909
- type MaxWidthScale =
2910
- | 'none'
2911
- | 'xs'
2912
- | 'sm'
2913
- | 'md'
2914
- | 'lg'
2915
- | 'xl'
2916
- | '2xl'
2917
- | '3xl'
2918
- | '4xl'
2919
- | '5xl'
2920
- | '6xl'
2921
- | '7xl'
2922
- | 'full'
2923
- | 'screen-2xl'
2924
- | TailwindArbitraryBracket
2315
+ type ButtonVariant = 'solid' | 'outline' | 'ghost' | 'link'
2316
+ ```
2317
+
2318
+ #### `InputType`
2319
+
2320
+ Allowed HTML input type attribute values for the Input component.
2321
+
2322
+ ```typescript
2323
+ type InputType =
2324
+ | 'text'
2325
+ | 'email'
2326
+ | 'password'
2327
+ | 'number'
2328
+ | 'tel'
2329
+ | 'url'
2330
+ | 'search'
2331
+ | 'date'
2332
+ | 'time'
2333
+ | 'datetime-local'
2925
2334
  ```
2926
2335
 
2927
2336
  #### `ModalSize`
@@ -2932,45 +2341,46 @@ Modal size variants including full-screen.
2932
2341
  type ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'full'
2933
2342
  ```
2934
2343
 
2935
- #### `MouseEventHandler`
2344
+ #### `TooltipPlacement`
2936
2345
 
2937
- Framework-agnostic mouse event handler.
2346
+ Position where a tooltip renders relative to its trigger element (top, bottom, left, right, and corner variants).
2938
2347
 
2939
2348
  ```typescript
2940
- type MouseEventHandler = EventHandler<MouseEvent>
2349
+ type TooltipPlacement =
2350
+ 'top' | 'bottom' | 'left' | 'right' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end'
2941
2351
  ```
2942
2352
 
2943
- #### `ResponsiveBreakpoint`
2353
+ #### `ClassMapValue`
2944
2354
 
2945
- Viewport breakpoints for responsive visibility (`hiddenBelow`/`hiddenFrom`):
2946
- `sm` ≈ 640px, `md` ≈ 768px, `lg` ≈ 1024px, `xl` ≈ 1280px (each ClassMap
2947
- bond maps them to its own breakpoints).
2355
+ Class value types accepted by the UIClassMap `cn()` function.
2356
+ Supports strings, booleans, arrays, and conditional objects.
2948
2357
 
2949
2358
  ```typescript
2950
- type ResponsiveBreakpoint = 'sm' | 'md' | 'lg' | 'xl'
2359
+ type ClassMapValue =
2360
+ | string
2361
+ | number
2362
+ | boolean
2363
+ | undefined
2364
+ | null
2365
+ | ClassMapValue[]
2366
+ | Record<string, boolean | undefined | null>
2951
2367
  ```
2952
2368
 
2953
- #### `Size`
2369
+ #### `SpacingScale`
2954
2370
 
2955
- Standard size scale used across all molecule UI components (buttons, inputs, badges, etc.).
2371
+ Abstract spacing scale. Each styling library maps these to its own units.
2372
+ For Tailwind: 0 → 0, 1 → 0.25rem, 4 → 1rem, 8 → 2rem, etc.
2956
2373
 
2957
2374
  ```typescript
2958
- type Size = 'xs' | 'sm' | 'md' | 'lg' | 'xl'
2375
+ type SpacingScale = 0 | 0.5 | 1 | 1.5 | 2 | 2.5 | 3 | 4 | 5 | 6 | 8 | 10 | 12 | 16 | 20 | 24
2959
2376
  ```
2960
2377
 
2961
- #### `SpacingOverrides`
2962
-
2963
- Compound spacing specification for conflict-free overrides.
2964
-
2965
- Pass to `sp()` to get a style object (for use on the `style` prop).
2966
- More specific properties override less specific ones:
2967
- `pr` overrides `px` overrides `p` (same cascade as CSS shorthand).
2378
+ #### `TailwindArbitraryBracket`
2968
2379
 
2969
- Returns `Record<string, string>` so it is compatible with any framework's
2970
- inline style API without requiring a React-specific import.
2380
+ Tailwind arbitrary value in bracket notation (e.g. `[440px]`, `[65%]`).
2971
2381
 
2972
2382
  ```typescript
2973
- type SpacingOverrides = Partial<Record<SpacingProperty, SpacingScale>>
2383
+ type TailwindArbitraryBracket = `[${string}]`
2974
2384
  ```
2975
2385
 
2976
2386
  #### `SpacingProperty`
@@ -2982,21 +2392,29 @@ type SpacingProperty =
2982
2392
  'p' | 'px' | 'py' | 'pt' | 'pb' | 'pl' | 'pr' | 'm' | 'mx' | 'my' | 'mt' | 'mb' | 'ml' | 'mr'
2983
2393
  ```
2984
2394
 
2985
- #### `SpacingScale`
2395
+ #### `SpacingOverrides`
2986
2396
 
2987
- Abstract spacing scale. Each styling library maps these to its own units.
2988
- For Tailwind: 0 → 0, 1 → 0.25rem, 4 → 1rem, 8 → 2rem, etc.
2397
+ Compound spacing specification for conflict-free overrides.
2398
+
2399
+ Pass to `sp()` to get a style object (for use on the `style` prop).
2400
+ More specific properties override less specific ones:
2401
+ `pr` overrides `px` overrides `p` (same cascade as CSS shorthand).
2402
+
2403
+ Returns `Record<string, string>` so it is compatible with any framework's
2404
+ inline style API without requiring a React-specific import.
2989
2405
 
2990
2406
  ```typescript
2991
- type SpacingScale = 0 | 0.5 | 1 | 1.5 | 2 | 2.5 | 3 | 4 | 5 | 6 | 8 | 10 | 12 | 16 | 20 | 24
2407
+ type SpacingOverrides = Partial<Record<SpacingProperty, SpacingScale>>
2992
2408
  ```
2993
2409
 
2994
- #### `TailwindArbitraryBracket`
2410
+ #### `ResponsiveBreakpoint`
2995
2411
 
2996
- Tailwind arbitrary value in bracket notation (e.g. `[440px]`, `[65%]`).
2412
+ Viewport breakpoints for responsive visibility (`hiddenBelow`/`hiddenFrom`):
2413
+ `sm` ≈ 640px, `md` ≈ 768px, `lg` ≈ 1024px, `xl` ≈ 1280px (each ClassMap
2414
+ bond maps them to its own breakpoints).
2997
2415
 
2998
2416
  ```typescript
2999
- type TailwindArbitraryBracket = `[${string}]`
2417
+ type ResponsiveBreakpoint = 'sm' | 'md' | 'lg' | 'xl'
3000
2418
  ```
3001
2419
 
3002
2420
  #### `TextScale`
@@ -3007,21 +2425,35 @@ Text size scale from extra-small to 4xl.
3007
2425
  type TextScale = 'xs' | 'sm' | 'base' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl'
3008
2426
  ```
3009
2427
 
3010
- #### `ToastPosition`
2428
+ #### `FontWeightScale`
3011
2429
 
3012
- Toast position values for screen placement.
2430
+ Font weight scale.
3013
2431
 
3014
2432
  ```typescript
3015
- type ToastPosition = 'top' | 'top-right' | 'top-left' | 'bottom' | 'bottom-right' | 'bottom-left'
2433
+ type FontWeightScale = 'normal' | 'medium' | 'semibold' | 'bold' | 'extrabold'
3016
2434
  ```
3017
2435
 
3018
- #### `TooltipPlacement`
2436
+ #### `MaxWidthScale`
3019
2437
 
3020
- Position where a tooltip renders relative to its trigger element (top, bottom, left, right, and corner variants).
2438
+ Max-width scale for constraining content.
3021
2439
 
3022
2440
  ```typescript
3023
- type TooltipPlacement =
3024
- 'top' | 'bottom' | 'left' | 'right' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end'
2441
+ type MaxWidthScale =
2442
+ | 'none'
2443
+ | 'xs'
2444
+ | 'sm'
2445
+ | 'md'
2446
+ | 'lg'
2447
+ | 'xl'
2448
+ | '2xl'
2449
+ | '3xl'
2450
+ | '4xl'
2451
+ | '5xl'
2452
+ | '6xl'
2453
+ | '7xl'
2454
+ | 'full'
2455
+ | 'screen-2xl'
2456
+ | TailwindArbitraryBracket
3025
2457
  ```
3026
2458
 
3027
2459
  #### `WidthValue`
@@ -3042,78 +2474,44 @@ type WidthValue =
3042
2474
  | TailwindArbitraryBracket
3043
2475
  ```
3044
2476
 
3045
- ### Functions
3046
-
3047
- #### `extendClassMap(base, overrides)`
3048
-
3049
- Creates a new UIClassMap by extending a base ClassMap with overrides.
3050
-
3051
- Overrides can be a plain object (for replacing specific tokens/resolvers)
3052
- or a function that receives the base map (for extending resolvers while
3053
- preserving base behavior).
3054
-
3055
- ```typescript
3056
- function extendClassMap(base: UIClassMap, overrides: ClassMapOverrides): UIClassMap
3057
- ```
3058
-
3059
- - `base` — The base UIClassMap to extend
3060
- - `overrides` — Token overrides (object or function returning object)
3061
-
3062
- **Returns:** A new UIClassMap with overrides applied
3063
-
3064
- #### `getClassMap()`
3065
-
3066
- Retrieves the bonded UIClassMap, throwing if none is configured.
3067
- Use this to resolve styling-agnostic class names in components.
3068
-
3069
- ```typescript
3070
- function getClassMap(): UIClassMap
3071
- ```
3072
-
3073
- **Returns:** The bonded UIClassMap implementation.
3074
-
3075
- #### `getProvider()`
2477
+ #### `HeightValue`
3076
2478
 
3077
- Retrieves the bonded UI provider, or `undefined` if none is configured.
2479
+ Height value — fractional, keyword, or numeric (mapped to spacing scale).
3078
2480
 
3079
2481
  ```typescript
3080
- function getProvider(): UIProvider | undefined
2482
+ type HeightValue =
2483
+ 'full' | 'screen' | 'auto' | '1/2' | '1/3' | '2/3' | '1/4' | '3/4' | TailwindArbitraryBracket
3081
2484
  ```
3082
2485
 
3083
- **Returns:** The bonded UI provider, or `undefined`.
3084
-
3085
- #### `hasClassMap()`
2486
+ #### `ToastPosition`
3086
2487
 
3087
- Checks whether a UIClassMap is currently bonded.
2488
+ Toast position values for screen placement.
3088
2489
 
3089
2490
  ```typescript
3090
- function hasClassMap(): boolean
2491
+ type ToastPosition = 'top' | 'top-right' | 'top-left' | 'bottom' | 'bottom-right' | 'bottom-left'
3091
2492
  ```
3092
2493
 
3093
- **Returns:** `true` if a UIClassMap is bonded.
3094
-
3095
- #### `hasProvider()`
2494
+ #### `AccentTone`
3096
2495
 
3097
- Checks whether a UI provider is currently bonded.
2496
+ Tones of an accent bar: the semantic colors, the brand primary, or `custom` (the `--mol-accent` variable).
3098
2497
 
3099
2498
  ```typescript
3100
- function hasProvider(): boolean
2499
+ type AccentTone = 'default' | 'primary' | 'info' | 'success' | 'warning' | 'error' | 'custom'
3101
2500
  ```
3102
2501
 
3103
- **Returns:** `true` if a UI provider is bonded.
2502
+ #### `ClassMapOverrides`
3104
2503
 
3105
- #### `moleculeSpinnerMarkSvg(options)`
2504
+ Overrides for extending a UIClassMap.
3106
2505
 
3107
- The molecule spinner mark as a complete SVG element string (SMIL-animated,
3108
- framework-agnostic). See the module docblock for usage and gotchas.
2506
+ Can be a partial map of token replacements, or a function that receives
2507
+ the base ClassMap and returns overrides (useful for extending resolver
2508
+ functions while preserving the base behavior).
3109
2509
 
3110
2510
  ```typescript
3111
- function moleculeSpinnerMarkSvg(options?: MoleculeSpinnerMarkOptions): string
2511
+ type ClassMapOverrides = Partial<UIClassMap> | ((base: UIClassMap) => Partial<UIClassMap>)
3112
2512
  ```
3113
2513
 
3114
- - `options` — Paint, timings, size, gradient id and a11y shape.
3115
-
3116
- **Returns:** A `<svg>…</svg>` markup string.
2514
+ ### Functions
3117
2515
 
3118
2516
  #### `molId(component, context, qualifier)`
3119
2517
 
@@ -3166,6 +2564,36 @@ function molSelectorPrefix(prefix: string): string
3166
2564
 
3167
2565
  **Returns:** A CSS attribute prefix selector string.
3168
2566
 
2567
+ #### `setProvider(provider)`
2568
+
2569
+ Registers a UI provider as the active singleton.
2570
+
2571
+ ```typescript
2572
+ function setProvider(provider: UIProvider): void
2573
+ ```
2574
+
2575
+ - `provider` — The UI provider implementation to bond.
2576
+
2577
+ #### `getProvider()`
2578
+
2579
+ Retrieves the bonded UI provider, or `undefined` if none is configured.
2580
+
2581
+ ```typescript
2582
+ function getProvider(): UIProvider | undefined
2583
+ ```
2584
+
2585
+ **Returns:** The bonded UI provider, or `undefined`.
2586
+
2587
+ #### `hasProvider()`
2588
+
2589
+ Checks whether a UI provider is currently bonded.
2590
+
2591
+ ```typescript
2592
+ function hasProvider(): boolean
2593
+ ```
2594
+
2595
+ **Returns:** `true` if a UI provider is bonded.
2596
+
3169
2597
  #### `setClassMap(classMap)`
3170
2598
 
3171
2599
  Registers a UIClassMap as the active styling resolver. Called at
@@ -3177,15 +2605,56 @@ function setClassMap(classMap: UIClassMap): void
3177
2605
 
3178
2606
  - `classMap` — The UIClassMap implementation to bond.
3179
2607
 
3180
- #### `setProvider(provider)`
2608
+ #### `getClassMap()`
3181
2609
 
3182
- Registers a UI provider as the active singleton.
2610
+ Retrieves the bonded UIClassMap, throwing if none is configured.
2611
+ Use this to resolve styling-agnostic class names in components.
3183
2612
 
3184
2613
  ```typescript
3185
- function setProvider(provider: UIProvider): void
2614
+ function getClassMap(): UIClassMap
3186
2615
  ```
3187
2616
 
3188
- - `provider` — The UI provider implementation to bond.
2617
+ **Returns:** The bonded UIClassMap implementation.
2618
+
2619
+ #### `hasClassMap()`
2620
+
2621
+ Checks whether a UIClassMap is currently bonded.
2622
+
2623
+ ```typescript
2624
+ function hasClassMap(): boolean
2625
+ ```
2626
+
2627
+ **Returns:** `true` if a UIClassMap is bonded.
2628
+
2629
+ #### `moleculeSpinnerMarkSvg(options)`
2630
+
2631
+ The molecule spinner mark as a complete SVG element string (SMIL-animated,
2632
+ framework-agnostic). See the module docblock for usage and gotchas.
2633
+
2634
+ ```typescript
2635
+ function moleculeSpinnerMarkSvg(options?: MoleculeSpinnerMarkOptions): string
2636
+ ```
2637
+
2638
+ - `options` — Paint, timings, size, gradient id and a11y shape.
2639
+
2640
+ **Returns:** A `<svg>…</svg>` markup string.
2641
+
2642
+ #### `extendClassMap(base, overrides)`
2643
+
2644
+ Creates a new UIClassMap by extending a base ClassMap with overrides.
2645
+
2646
+ Overrides can be a plain object (for replacing specific tokens/resolvers)
2647
+ or a function that receives the base map (for extending resolvers while
2648
+ preserving base behavior).
2649
+
2650
+ ```typescript
2651
+ function extendClassMap(base: UIClassMap, overrides: ClassMapOverrides): UIClassMap
2652
+ ```
2653
+
2654
+ - `base` — The base UIClassMap to extend
2655
+ - `overrides` — Token overrides (object or function returning object)
2656
+
2657
+ **Returns:** A new UIClassMap with overrides applied
3189
2658
 
3190
2659
  ### Constants
3191
2660
 
@@ -3233,6 +2702,11 @@ the ClassMap bond (`@molecule/app-ui-tailwind`), so swapping the styling library
3233
2702
  only the bond — a literal `"flex p-4"` in a component defeats that and is the #1 styling
3234
2703
  mistake.
3235
2704
 
2705
+ A stylesheet the request supplies (a theme CSS, a CSS framework, a design export with its
2706
+ own class names) is used by those class names written directly in `className` — ClassMap
2707
+ governs molecule's own utilities, not a supplied stylesheet's contract; never wrap,
2708
+ re-generate or rename its classes.
2709
+
3236
2710
  - **`Button` defaults to `type="button"`.** A form's primary action needs
3237
2711
  `type="submit"`, or Enter does nothing and tests that select `button[type="submit"]`
3238
2712
  miss it (X1 RealWorld runs failed 15 browser tests on one Settings button).