@tangible/ui 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/components/Card/Card.d.ts +1 -0
  2. package/components/Card/Card.js +17 -20
  3. package/components/Checkbox/Checkbox.d.ts +9 -0
  4. package/components/Checkbox/Checkbox.js +92 -0
  5. package/components/Checkbox/index.d.ts +2 -0
  6. package/components/Checkbox/index.js +1 -0
  7. package/components/Checkbox/types.d.ts +10 -0
  8. package/components/Checkbox/types.js +1 -0
  9. package/components/Chip/Chip.d.ts +4 -1
  10. package/components/Chip/Chip.js +32 -7
  11. package/components/ChipGroup/ChipGroup.d.ts +5 -0
  12. package/components/ChipGroup/ChipGroup.js +68 -0
  13. package/components/ChipGroup/ChipGroupContext.d.ts +3 -0
  14. package/components/ChipGroup/ChipGroupContext.js +5 -0
  15. package/components/ChipGroup/index.d.ts +3 -0
  16. package/components/ChipGroup/index.js +2 -0
  17. package/components/ChipGroup/types.d.ts +36 -0
  18. package/components/ChipGroup/types.js +1 -0
  19. package/components/Chips/Chips.d.ts +2 -0
  20. package/components/Chips/Chips.js +1 -1
  21. package/components/Combobox/Combobox.d.ts +33 -0
  22. package/components/Combobox/Combobox.js +466 -0
  23. package/components/Combobox/ComboboxContext.d.ts +8 -0
  24. package/components/Combobox/ComboboxContext.js +36 -0
  25. package/components/Combobox/index.d.ts +2 -0
  26. package/components/Combobox/index.js +1 -0
  27. package/components/Combobox/types.d.ts +204 -0
  28. package/components/Combobox/types.js +1 -0
  29. package/components/Dropdown/Dropdown.js +2 -1
  30. package/components/Field/Field.d.ts +39 -0
  31. package/components/Field/Field.js +92 -0
  32. package/components/Field/FieldContext.d.ts +16 -0
  33. package/components/Field/FieldContext.js +10 -0
  34. package/components/Field/index.d.ts +2 -0
  35. package/components/Field/index.js +1 -0
  36. package/components/Modal/Modal.d.ts +4 -4
  37. package/components/Modal/Modal.js +14 -12
  38. package/components/MoveHandle/MoveHandle.d.ts +2 -0
  39. package/components/MoveHandle/MoveHandle.js +84 -0
  40. package/components/MoveHandle/index.d.ts +2 -0
  41. package/components/MoveHandle/index.js +1 -0
  42. package/components/MoveHandle/types.d.ts +43 -0
  43. package/components/MoveHandle/types.js +1 -0
  44. package/components/MultiSelect/MultiSelect.d.ts +39 -0
  45. package/components/MultiSelect/MultiSelect.js +623 -0
  46. package/components/MultiSelect/MultiSelectContext.d.ts +20 -0
  47. package/components/MultiSelect/MultiSelectContext.js +56 -0
  48. package/components/MultiSelect/index.d.ts +2 -0
  49. package/components/MultiSelect/index.js +1 -0
  50. package/components/MultiSelect/types.d.ts +218 -0
  51. package/components/MultiSelect/types.js +3 -0
  52. package/components/Notice/Notice.d.ts +1 -1
  53. package/components/Notice/Notice.js +1 -1
  54. package/components/Progress/Progress.js +1 -1
  55. package/components/Progress/types.d.ts +7 -7
  56. package/components/Radio/Radio.d.ts +2 -0
  57. package/components/Radio/Radio.js +50 -0
  58. package/components/Radio/RadioGroup.d.ts +2 -0
  59. package/components/Radio/RadioGroup.js +54 -0
  60. package/components/Radio/RadioGroupContext.d.ts +3 -0
  61. package/components/Radio/RadioGroupContext.js +9 -0
  62. package/components/Radio/index.d.ts +8 -0
  63. package/components/Radio/index.js +6 -0
  64. package/components/Radio/types.d.ts +32 -0
  65. package/components/Radio/types.js +1 -0
  66. package/components/Rating/Rating.d.ts +5 -5
  67. package/components/Rating/Rating.js +2 -2
  68. package/components/SegmentedControl/SegmentedControl.js +20 -104
  69. package/components/SegmentedControl/types.d.ts +4 -8
  70. package/components/Select/Select.d.ts +39 -0
  71. package/components/Select/Select.js +497 -0
  72. package/components/Select/SelectContext.d.ts +20 -0
  73. package/components/Select/SelectContext.js +56 -0
  74. package/components/Select/index.d.ts +3 -0
  75. package/components/Select/index.js +1 -0
  76. package/components/Select/types.d.ts +216 -0
  77. package/components/Select/types.js +11 -0
  78. package/components/Sidebar/Sidebar.js +12 -12
  79. package/components/Sidebar/types.d.ts +5 -5
  80. package/components/StepIndicator/StepIndicator.js +1 -1
  81. package/components/StepList/StepList.js +2 -2
  82. package/components/StepList/types.d.ts +4 -4
  83. package/components/Switch/Switch.d.ts +9 -0
  84. package/components/Switch/Switch.js +91 -0
  85. package/components/Switch/index.d.ts +2 -0
  86. package/components/Switch/index.js +1 -0
  87. package/components/Switch/types.d.ts +11 -0
  88. package/components/Switch/types.js +1 -0
  89. package/components/TextInput/TextInput.d.ts +8 -0
  90. package/components/TextInput/TextInput.js +25 -0
  91. package/components/TextInput/index.d.ts +2 -0
  92. package/components/TextInput/index.js +1 -0
  93. package/components/TextInput/types.d.ts +32 -0
  94. package/components/TextInput/types.js +1 -0
  95. package/components/Textarea/Textarea.d.ts +6 -0
  96. package/components/Textarea/Textarea.js +49 -0
  97. package/components/Textarea/index.d.ts +2 -0
  98. package/components/Textarea/index.js +1 -0
  99. package/components/Textarea/types.d.ts +25 -0
  100. package/components/Textarea/types.js +1 -0
  101. package/components/index.d.ts +22 -0
  102. package/components/index.js +11 -0
  103. package/icons/icons.svg +2 -0
  104. package/icons/manifest.json +16 -0
  105. package/icons/registry.d.ts +4 -0
  106. package/icons/registry.js +2 -0
  107. package/icons/system/index.d.ts +4 -0
  108. package/icons/system/index.js +22 -0
  109. package/package.json +1 -1
  110. package/styles/all.css +1 -1
  111. package/styles/all.expanded.css +1838 -136
  112. package/styles/all.expanded.unlayered.css +1838 -136
  113. package/styles/all.unlayered.css +1 -1
  114. package/styles/components/_bundle.scss +22 -0
  115. package/styles/components/input/index.scss +5 -20
  116. package/styles/index.scss +21 -0
  117. package/styles/system/_control.scss +49 -0
  118. package/styles/system/_tokens.scss +124 -2
  119. package/styles/system/index.scss +2 -1
  120. package/styles/utilities/_index.scss +50 -0
  121. package/tui-manifest.json +907 -112
  122. package/utils/compose-events.d.ts +15 -0
  123. package/utils/compose-events.js +27 -0
  124. package/utils/hash.d.ts +15 -0
  125. package/utils/hash.js +32 -0
  126. package/utils/index.d.ts +3 -0
  127. package/utils/index.js +6 -0
  128. package/utils/is-dev.d.ts +5 -0
  129. package/utils/is-dev.js +7 -0
  130. package/utils/use-controllable-state.d.ts +19 -0
  131. package/utils/use-controllable-state.js +59 -0
  132. package/utils/use-roving-group.d.ts +33 -0
  133. package/utils/use-roving-group.js +123 -0
  134. package/utils/value-key.d.ts +16 -0
  135. package/utils/value-key.js +14 -0
package/tui-manifest.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "0.0.1",
3
- "generated": "2026-01-31T03:28:47.490Z",
2
+ "version": "0.0.3",
3
+ "generated": "2026-02-24T00:56:13.287Z",
4
4
  "components": {
5
5
  "Accordion": {
6
6
  "props": {
@@ -128,7 +128,21 @@
128
128
  "description": "Additional CSS class"
129
129
  }
130
130
  },
131
- "cssTokens": [],
131
+ "cssTokens": [
132
+ "--tui-avatar-size",
133
+ "--tui-avatar-radius",
134
+ "--tui-avatar-bg",
135
+ "--tui-avatar-fg",
136
+ "--tui-avatar-border",
137
+ "--tui-avatar-indicator-bg",
138
+ "--tui-avatar-indicator-fg",
139
+ "--tui-avatar-overflow-bg",
140
+ "--tui-avatar-overflow-fg",
141
+ "--tui-avatar-group-overlap",
142
+ "--tui-avatar-group-gap",
143
+ "--tui-avatar-group-border-width",
144
+ "--tui-avatar-group-border-color"
145
+ ],
132
146
  "story": {
133
147
  "title": "Primitives/Avatar",
134
148
  "tags": [
@@ -270,7 +284,10 @@
270
284
  "--tui-button-radius",
271
285
  "--tui-button-bg-interact",
272
286
  "--tui-button-fg-interact",
273
- "--tui-button-border-interact"
287
+ "--tui-button-border-interact",
288
+ "--tui-control-height-sm",
289
+ "--tui-control-height-md",
290
+ "--tui-control-height-lg"
274
291
  ],
275
292
  "story": {
276
293
  "title": "Primitives/Button",
@@ -354,7 +371,8 @@
354
371
  },
355
372
  "onClick": {
356
373
  "type": "MouseEventHandler<HTMLElement>",
357
- "required": false
374
+ "required": false,
375
+ "description": "@deprecated Use Card.Link for interactive cards. onClick without Card.Link has no keyboard/screen-reader semantics."
358
376
  },
359
377
  "title": {
360
378
  "type": "string",
@@ -434,6 +452,61 @@
434
452
  "Notice"
435
453
  ]
436
454
  },
455
+ "Checkbox": {
456
+ "props": {
457
+ "disabled": {
458
+ "type": "boolean",
459
+ "required": false
460
+ },
461
+ "size": {
462
+ "type": "number",
463
+ "required": false
464
+ },
465
+ "className": {
466
+ "type": "string",
467
+ "required": false
468
+ },
469
+ "id": {
470
+ "type": "string",
471
+ "required": false
472
+ },
473
+ "style": {
474
+ "type": "CSSProperties",
475
+ "required": false
476
+ },
477
+ "title": {
478
+ "type": "string",
479
+ "required": false
480
+ },
481
+ "rel": {
482
+ "type": "string",
483
+ "required": false
484
+ },
485
+ "onClick": {
486
+ "type": "MouseEventHandler<HTMLInputElement>",
487
+ "required": false
488
+ },
489
+ "label": {
490
+ "type": "ReactNode",
491
+ "required": false
492
+ }
493
+ },
494
+ "cssTokens": [
495
+ "--tui-input-accent"
496
+ ],
497
+ "story": {
498
+ "title": "Forms/Checkbox",
499
+ "tags": [
500
+ "autodocs",
501
+ "lms"
502
+ ]
503
+ },
504
+ "subcomponents": null,
505
+ "description": null,
506
+ "gotchas": null,
507
+ "examples": null,
508
+ "related": null
509
+ },
437
510
  "Chip": {
438
511
  "props": {
439
512
  "as": {
@@ -496,6 +569,11 @@
496
569
  "type": "MouseEventHandler<HTMLElement>",
497
570
  "required": false
498
571
  },
572
+ "value": {
573
+ "type": "OptionValue",
574
+ "required": false,
575
+ "description": "When inside ChipGroup, identifies this chip for selection tracking"
576
+ },
499
577
  "id": {
500
578
  "type": "string",
501
579
  "required": false
@@ -517,7 +595,13 @@
517
595
  "required": false
518
596
  }
519
597
  },
520
- "cssTokens": [],
598
+ "cssTokens": [
599
+ "--tui-chip-bg",
600
+ "--tui-chip-fg",
601
+ "--tui-chip-border",
602
+ "--tui-chip-icon",
603
+ "--tui-chip-radius"
604
+ ],
521
605
  "story": {
522
606
  "title": "Primitives/Chip",
523
607
  "tags": [
@@ -531,6 +615,52 @@
531
615
  "examples": null,
532
616
  "related": null
533
617
  },
618
+ "ChipGroup": {
619
+ "props": {
620
+ "disabled": {
621
+ "type": "boolean",
622
+ "required": false
623
+ },
624
+ "density": {
625
+ "type": "\"xs\" | \"sm\" | \"md\"",
626
+ "required": false,
627
+ "description": "Gap between chips. Default 'sm'."
628
+ },
629
+ "direction": {
630
+ "type": "\"inline\" | \"stack\"",
631
+ "required": false,
632
+ "description": "Layout direction. Default 'inline' (row wrap)."
633
+ },
634
+ "alignment": {
635
+ "type": "\"start\" | \"center\" | \"end\"",
636
+ "required": false,
637
+ "description": "Alignment along main axis."
638
+ },
639
+ "className": {
640
+ "type": "string",
641
+ "required": false
642
+ },
643
+ "onValueChange": {
644
+ "type": "((value: OptionValue) => void) | ((value: OptionValue[]) => void)",
645
+ "required": false
646
+ }
647
+ },
648
+ "cssTokens": [
649
+ "--tui-chip-group-gap"
650
+ ],
651
+ "story": {
652
+ "title": "Primitives/ChipGroup",
653
+ "tags": [
654
+ "autodocs",
655
+ "stable"
656
+ ]
657
+ },
658
+ "subcomponents": null,
659
+ "description": null,
660
+ "gotchas": null,
661
+ "examples": null,
662
+ "related": null
663
+ },
534
664
  "Chips": {
535
665
  "props": {
536
666
  "density": {
@@ -563,6 +693,89 @@
563
693
  "examples": null,
564
694
  "related": null
565
695
  },
696
+ "Combobox": {
697
+ "props": {
698
+ "size": {
699
+ "type": "\"sm\" | \"md\" | \"lg\"",
700
+ "required": false,
701
+ "defaultValue": "'md'",
702
+ "description": "Control size."
703
+ },
704
+ "value": {
705
+ "type": "OptionValue",
706
+ "required": false,
707
+ "description": "Controlled selected value."
708
+ },
709
+ "onValueChange": {
710
+ "type": "(value: OptionValue) => void",
711
+ "required": false,
712
+ "description": "Callback when selection changes.\nCalled with the option's value when user selects, or undefined when cleared.\nDoes NOT mutate inputValue — consumer should update inputValue in handler if desired."
713
+ },
714
+ "inputValue": {
715
+ "type": "string",
716
+ "required": false,
717
+ "description": "Controlled input value for search/filter."
718
+ },
719
+ "filterMode": {
720
+ "type": "\"always\" | \"when-searching\"",
721
+ "required": false,
722
+ "defaultValue": "'always'",
723
+ "description": "Controls filtering behavior.\n- 'always': Filter on inputValue at all times (default)\n- 'when-searching': Query is empty when not actively typing,\n so consumers can show all options when user is browsing a selection"
724
+ },
725
+ "open": {
726
+ "type": "boolean",
727
+ "required": false,
728
+ "description": "Controlled open state."
729
+ },
730
+ "defaultOpen": {
731
+ "type": "boolean",
732
+ "required": false,
733
+ "defaultValue": "false",
734
+ "description": "Default open state for uncontrolled usage."
735
+ },
736
+ "disabled": {
737
+ "type": "boolean",
738
+ "required": false,
739
+ "defaultValue": "false",
740
+ "description": "Whether the combobox is disabled."
741
+ },
742
+ "openOnFocus": {
743
+ "type": "boolean",
744
+ "required": false,
745
+ "defaultValue": "true",
746
+ "description": "Whether to open the listbox when the input receives focus."
747
+ },
748
+ "inputClassName": {
749
+ "type": "string",
750
+ "required": false,
751
+ "description": "Class name applied directly to the `<input>` element.\nUse for utilities like `tui-input-reset` that must target the input itself."
752
+ }
753
+ },
754
+ "cssTokens": [
755
+ "--tui-combobox-input-bg",
756
+ "--tui-combobox-input-fg",
757
+ "--tui-combobox-input-border",
758
+ "--tui-combobox-input-border-focus",
759
+ "--tui-combobox-input-radius",
760
+ "--tui-combobox-content-bg",
761
+ "--tui-combobox-content-border",
762
+ "--tui-combobox-content-shadow",
763
+ "--tui-combobox-content-radius",
764
+ "--tui-combobox-option-bg-hover",
765
+ "--tui-combobox-option-bg-selected"
766
+ ],
767
+ "story": {
768
+ "title": "Forms/Combobox",
769
+ "tags": [
770
+ "lms"
771
+ ]
772
+ },
773
+ "subcomponents": null,
774
+ "description": null,
775
+ "gotchas": null,
776
+ "examples": null,
777
+ "related": null
778
+ },
566
779
  "ContentIndicator": {
567
780
  "props": {
568
781
  "icon": {
@@ -599,7 +812,11 @@
599
812
  "description": "Additional CSS class names."
600
813
  }
601
814
  },
602
- "cssTokens": [],
815
+ "cssTokens": [
816
+ "--tui-content-indicator-bg",
817
+ "--tui-content-indicator-border",
818
+ "--tui-content-indicator-fg"
819
+ ],
603
820
  "story": {
604
821
  "title": "Primitives/ContentIndicator",
605
822
  "tags": [
@@ -628,7 +845,17 @@
628
845
  "description": "Default open state for uncontrolled usage."
629
846
  }
630
847
  },
631
- "cssTokens": [],
848
+ "cssTokens": [
849
+ "--tui-dropdown-bg",
850
+ "--tui-dropdown-fg",
851
+ "--tui-dropdown-radius",
852
+ "--tui-dropdown-shadow",
853
+ "--tui-dropdown-border",
854
+ "--tui-dropdown-z",
855
+ "--tui-dropdown-min-width",
856
+ "--tui-dropdown-item-bg-hover",
857
+ "--tui-dropdown-item-bg-active"
858
+ ],
632
859
  "story": {
633
860
  "title": "Primitives/Dropdown",
634
861
  "tags": [
@@ -642,6 +869,53 @@
642
869
  "examples": null,
643
870
  "related": null
644
871
  },
872
+ "Field": {
873
+ "props": {
874
+ "error": {
875
+ "type": "boolean",
876
+ "required": false,
877
+ "description": "Whether the field has an error state"
878
+ },
879
+ "required": {
880
+ "type": "boolean",
881
+ "required": false,
882
+ "description": "Whether the field is required"
883
+ },
884
+ "disabled": {
885
+ "type": "boolean",
886
+ "required": false,
887
+ "description": "Whether the field is disabled"
888
+ },
889
+ "inline": {
890
+ "type": "boolean",
891
+ "required": false,
892
+ "description": "Inline layout: label and control on same row"
893
+ },
894
+ "className": {
895
+ "type": "string",
896
+ "required": false,
897
+ "description": "Additional class name for the field wrapper"
898
+ }
899
+ },
900
+ "cssTokens": [
901
+ "--tui-field-gap",
902
+ "--tui-field-label-fg",
903
+ "--tui-field-helper-fg",
904
+ "--tui-field-error-fg"
905
+ ],
906
+ "story": {
907
+ "title": "Forms/Field",
908
+ "tags": [
909
+ "stable",
910
+ "lms"
911
+ ]
912
+ },
913
+ "subcomponents": null,
914
+ "description": null,
915
+ "gotchas": null,
916
+ "examples": null,
917
+ "related": null
918
+ },
645
919
  "Icon": {
646
920
  "props": {
647
921
  "name": {
@@ -669,7 +943,14 @@
669
943
  "required": false
670
944
  }
671
945
  },
672
- "cssTokens": [],
946
+ "cssTokens": [
947
+ "--tui-icon-size-xs",
948
+ "--tui-icon-size-sm",
949
+ "--tui-icon-size-md",
950
+ "--tui-icon-size-lg",
951
+ "--tui-icon-size-xl",
952
+ "--tui-icon-size-xxl"
953
+ ],
673
954
  "story": {
674
955
  "title": "Primitives/Icon",
675
956
  "tags": [
@@ -782,7 +1063,14 @@
782
1063
  "required": false
783
1064
  }
784
1065
  },
785
- "cssTokens": [],
1066
+ "cssTokens": [
1067
+ "--tui-icon-button-bg",
1068
+ "--tui-icon-button-fg",
1069
+ "--tui-icon-button-border",
1070
+ "--tui-icon-button-radius",
1071
+ "--tui-icon-button-bg-interact",
1072
+ "--tui-icon-button-fg-interact"
1073
+ ],
786
1074
  "story": {
787
1075
  "title": "Primitives/IconButton",
788
1076
  "tags": [
@@ -833,7 +1121,7 @@
833
1121
  "description": "Accessible dialog with focus trap, backdrop, and portal rendering",
834
1122
  "gotchas": [
835
1123
  {
836
- "note": "Always provide labelledBy pointing to a heading id for accessibility"
1124
+ "note": "Always provide aria-labelledby pointing to a heading id for accessibility"
837
1125
  },
838
1126
  {
839
1127
  "note": "Body uses two-layer wrapper for scroll + :has() composition"
@@ -851,89 +1139,239 @@
851
1139
  "examples": [
852
1140
  {
853
1141
  "name": "Basic",
854
- "code": "<Modal isOpen={open} onClose={close} labelledBy=\"modal-title\">\n <Modal.Head><h2 id=\"modal-title\">Title</h2></Modal.Head>\n <Modal.Body>Content</Modal.Body>\n <Modal.Foot><Button label=\"Close\" onClick={close} /></Modal.Foot>\n</Modal>"
1142
+ "code": "<Modal open={open} onClose={close} aria-labelledby=\"modal-title\">\n <Modal.Head><h2 id=\"modal-title\">Title</h2></Modal.Head>\n <Modal.Body>Content</Modal.Body>\n <Modal.Foot><Button label=\"Close\" onClick={close} /></Modal.Foot>\n</Modal>"
855
1143
  },
856
1144
  {
857
1145
  "name": "With close button",
858
- "code": "<Modal isOpen={open} onClose={close} showCloseButton labelledBy=\"title\">\n <Modal.Head><h2 id=\"title\">Confirm</h2></Modal.Head>\n <Modal.Body>Are you sure?</Modal.Body>\n</Modal>"
1146
+ "code": "<Modal open={open} onClose={close} showCloseButton aria-labelledby=\"title\">\n <Modal.Head><h2 id=\"title\">Confirm</h2></Modal.Head>\n <Modal.Body>Are you sure?</Modal.Body>\n</Modal>"
859
1147
  }
860
1148
  ],
861
1149
  "related": [
862
1150
  "Notice"
863
1151
  ]
864
1152
  },
865
- "Notice": {
1153
+ "MoveHandle": {
866
1154
  "props": {
867
- "inline": {
868
- "type": "boolean",
1155
+ "mode": {
1156
+ "type": "\"full\" | \"handle\"",
869
1157
  "required": false,
870
- "description": "Inline layout: icon/title on left, content center, actions right"
1158
+ "defaultValue": "full",
1159
+ "description": "Structural mode. 'full' (default) shows background panel with arrows/index. 'handle' shows only the bare drag icon button."
871
1160
  },
872
- "elevated": {
873
- "type": "boolean",
1161
+ "size": {
1162
+ "type": "\"sm\" | \"md\"",
874
1163
  "required": false,
875
- "description": "Add box shadow"
1164
+ "defaultValue": "md",
1165
+ "description": "Component scale. sm = 32px, md = 40px. Ignored when mode is 'handle'."
876
1166
  },
877
- "interactive": {
878
- "type": "boolean",
1167
+ "index": {
1168
+ "type": "number",
879
1169
  "required": false,
880
- "description": "Enable hover/focus visual states. If combined with onClick,\nadds role=\"button\" and keyboard handling (Enter/Space)."
1170
+ "description": "Position index. When provided, shows number at rest, drag handle on hover."
881
1171
  },
882
- "disabled": {
1172
+ "locked": {
883
1173
  "type": "boolean",
884
1174
  "required": false,
885
- "description": "Disable interactions"
1175
+ "defaultValue": "false",
1176
+ "description": "When true, shows lock icon and disables all interaction."
886
1177
  },
887
- "stripe": {
1178
+ "canMoveUp": {
888
1179
  "type": "boolean",
889
1180
  "required": false,
890
- "description": "Show left accent stripe in theme color"
891
- },
892
- "className": {
893
- "type": "string",
894
- "required": false
895
- },
896
- "style": {
897
- "type": "CSSProperties",
898
- "required": false
899
- },
900
- "as": {
901
- "type": "\"section\" | \"div\"",
902
- "required": false
903
- },
904
- "theme": {
905
- "type": "\"info\" | \"success\" | \"warning\" | \"danger\"",
906
- "required": false,
907
- "description": "Visual intent"
908
- },
909
- "announce": {
910
- "type": "\"off\" | \"assertive\" | \"polite\"",
911
- "required": false,
912
- "description": "Controls screen-reader announcement behavior.\n- off: no live region\n- polite: role=status\n- assertive: role=alert"
913
- },
914
- "ariaLabel": {
915
- "type": "string",
916
- "required": false,
917
- "description": "Accessible name when there is no visible title in Notice.Head.\nOnly use when Notice.Head has no title prop - if both exist, the visible title takes precedence."
1181
+ "defaultValue": "true",
1182
+ "description": "When false, disables the move-up button without hiding it. Default: true."
918
1183
  },
919
- "dismissible": {
1184
+ "canMoveDown": {
920
1185
  "type": "boolean",
921
1186
  "required": false,
922
- "description": "Renders a dismiss button"
923
- },
924
- "onDismiss": {
925
- "type": "() => void",
926
- "required": false
1187
+ "defaultValue": "true",
1188
+ "description": "When false, disables the move-down button without hiding it. Default: true."
927
1189
  },
928
- "exitAnimation": {
929
- "type": "\"none\" | \"collapse\" | \"fade\"",
1190
+ "labels": {
1191
+ "type": "MoveHandleLabels",
930
1192
  "required": false,
931
- "description": "Exit animation to play when dismissed.\n- none: onDismiss called immediately (default)\n- collapse: fade + height collapse (for inline/block notices)\n- fade: fade out with slight scale (for overlays/toasts)"
1193
+ "description": "Override internal button labels for i18n."
932
1194
  },
933
- "focusable": {
934
- "type": "boolean",
1195
+ "dragHandleProps": {
1196
+ "type": "HTMLAttributes<HTMLButtonElement>",
935
1197
  "required": false,
936
- "description": "If true, the notice container will be focusable (tabIndex=-1).\nUseful for programmatic focus management in toast/notification systems.\nNot for keyboard navigation - use interactive + onClick for clickable notices."
1198
+ "description": "Props to spread on the drag handle button (e.g., from dnd-kit useSortable)."
1199
+ },
1200
+ "className": {
1201
+ "type": "string",
1202
+ "required": false
1203
+ }
1204
+ },
1205
+ "cssTokens": [
1206
+ "--tui-move-handle-size",
1207
+ "--tui-move-handle-icon-size"
1208
+ ],
1209
+ "story": {
1210
+ "title": "Components/MoveHandle",
1211
+ "tags": [
1212
+ "autodocs",
1213
+ "lms"
1214
+ ]
1215
+ },
1216
+ "subcomponents": null,
1217
+ "description": null,
1218
+ "gotchas": null,
1219
+ "examples": null,
1220
+ "related": null
1221
+ },
1222
+ "MultiSelect": {
1223
+ "props": {
1224
+ "size": {
1225
+ "type": "\"sm\" | \"md\" | \"lg\"",
1226
+ "required": false,
1227
+ "defaultValue": "'md'",
1228
+ "description": "Control size."
1229
+ },
1230
+ "value": {
1231
+ "type": "MultiSelectValue",
1232
+ "required": false,
1233
+ "description": "Controlled selected values."
1234
+ },
1235
+ "onValueChange": {
1236
+ "type": "(value: MultiSelectValue) => void",
1237
+ "required": false,
1238
+ "description": "Callback when selection changes."
1239
+ },
1240
+ "open": {
1241
+ "type": "boolean",
1242
+ "required": false,
1243
+ "description": "Controlled open state."
1244
+ },
1245
+ "defaultOpen": {
1246
+ "type": "boolean",
1247
+ "required": false,
1248
+ "defaultValue": "false",
1249
+ "description": "Default open state for uncontrolled usage."
1250
+ },
1251
+ "disabled": {
1252
+ "type": "boolean",
1253
+ "required": false,
1254
+ "defaultValue": "false",
1255
+ "description": "Whether the entire select is disabled."
1256
+ },
1257
+ "display": {
1258
+ "type": "\"count\" | \"chips\"",
1259
+ "required": false,
1260
+ "defaultValue": "'count'",
1261
+ "description": "Display mode for the trigger.\n- 'count': Shows \"N selected\"\n- 'chips': Shows visual chips for selected items"
1262
+ },
1263
+ "maxChips": {
1264
+ "type": "number",
1265
+ "required": false,
1266
+ "defaultValue": "3",
1267
+ "description": "Maximum number of chips to show before \"+N more\" badge.\nOnly applies when display='chips'."
1268
+ },
1269
+ "max": {
1270
+ "type": "number",
1271
+ "required": false,
1272
+ "description": "Maximum number of selections allowed.\nWhen reached, unselected options become disabled."
1273
+ },
1274
+ "id": {
1275
+ "type": "string",
1276
+ "required": false,
1277
+ "description": "Optional trigger ID override.\nUseful for Field integration via htmlFor."
1278
+ }
1279
+ },
1280
+ "cssTokens": [
1281
+ "--tui-multiselect-trigger-bg",
1282
+ "--tui-multiselect-trigger-fg",
1283
+ "--tui-multiselect-trigger-border",
1284
+ "--tui-multiselect-trigger-border-focus",
1285
+ "--tui-multiselect-trigger-radius",
1286
+ "--tui-multiselect-content-bg",
1287
+ "--tui-multiselect-content-border",
1288
+ "--tui-multiselect-content-shadow",
1289
+ "--tui-multiselect-content-radius",
1290
+ "--tui-multiselect-option-bg-hover",
1291
+ "--tui-multiselect-option-bg-selected",
1292
+ "--tui-multiselect-chip-bg",
1293
+ "--tui-multiselect-chip-fg"
1294
+ ],
1295
+ "story": {
1296
+ "title": "Forms/MultiSelect",
1297
+ "tags": [
1298
+ "autodocs",
1299
+ "lms"
1300
+ ]
1301
+ },
1302
+ "subcomponents": null,
1303
+ "description": null,
1304
+ "gotchas": null,
1305
+ "examples": null,
1306
+ "related": null
1307
+ },
1308
+ "Notice": {
1309
+ "props": {
1310
+ "inline": {
1311
+ "type": "boolean",
1312
+ "required": false,
1313
+ "description": "Inline layout: icon/title on left, content center, actions right"
1314
+ },
1315
+ "elevated": {
1316
+ "type": "boolean",
1317
+ "required": false,
1318
+ "description": "Add box shadow"
1319
+ },
1320
+ "interactive": {
1321
+ "type": "boolean",
1322
+ "required": false,
1323
+ "description": "Enable hover/focus visual states. If combined with onClick,\nadds role=\"button\" and keyboard handling (Enter/Space)."
1324
+ },
1325
+ "disabled": {
1326
+ "type": "boolean",
1327
+ "required": false,
1328
+ "description": "Disable interactions"
1329
+ },
1330
+ "stripe": {
1331
+ "type": "boolean",
1332
+ "required": false,
1333
+ "description": "Show left accent stripe in theme color"
1334
+ },
1335
+ "className": {
1336
+ "type": "string",
1337
+ "required": false
1338
+ },
1339
+ "style": {
1340
+ "type": "CSSProperties",
1341
+ "required": false
1342
+ },
1343
+ "as": {
1344
+ "type": "\"section\" | \"div\"",
1345
+ "required": false
1346
+ },
1347
+ "theme": {
1348
+ "type": "\"info\" | \"success\" | \"warning\" | \"danger\"",
1349
+ "required": false,
1350
+ "description": "Visual intent"
1351
+ },
1352
+ "announce": {
1353
+ "type": "\"off\" | \"assertive\" | \"polite\"",
1354
+ "required": false,
1355
+ "description": "Controls screen-reader announcement behavior.\n- off: no live region\n- polite: role=status\n- assertive: role=alert"
1356
+ },
1357
+ "dismissible": {
1358
+ "type": "boolean",
1359
+ "required": false,
1360
+ "description": "Renders a dismiss button"
1361
+ },
1362
+ "onDismiss": {
1363
+ "type": "() => void",
1364
+ "required": false
1365
+ },
1366
+ "exitAnimation": {
1367
+ "type": "\"none\" | \"collapse\" | \"fade\"",
1368
+ "required": false,
1369
+ "description": "Exit animation to play when dismissed.\n- none: onDismiss called immediately (default)\n- collapse: fade + height collapse (for inline/block notices)\n- fade: fade out with slight scale (for overlays/toasts)"
1370
+ },
1371
+ "focusable": {
1372
+ "type": "boolean",
1373
+ "required": false,
1374
+ "description": "If true, the notice container will be focusable (tabIndex=-1).\nUseful for programmatic focus management in toast/notification systems.\nNot for keyboard navigation - use interactive + onClick for clickable notices."
937
1375
  },
938
1376
  "onClick": {
939
1377
  "type": "MouseEventHandler<HTMLElement>",
@@ -1062,7 +1500,14 @@
1062
1500
  "description": "Inline styles"
1063
1501
  }
1064
1502
  },
1065
- "cssTokens": [],
1503
+ "cssTokens": [
1504
+ "--tui-overlap-stack-overlap",
1505
+ "--tui-overlap-stack-overflow-bg",
1506
+ "--tui-overlap-stack-overflow-fg",
1507
+ "--tui-overlap-stack-item-radius",
1508
+ "--tui-overlap-stack-border-width",
1509
+ "--tui-overlap-stack-border-color"
1510
+ ],
1066
1511
  "story": {
1067
1512
  "title": "Components/OverlapStack",
1068
1513
  "tags": [
@@ -1122,7 +1567,9 @@
1122
1567
  "description": "Additional class name"
1123
1568
  }
1124
1569
  },
1125
- "cssTokens": [],
1570
+ "cssTokens": [
1571
+ "--tui-pager-gap"
1572
+ ],
1126
1573
  "story": {
1127
1574
  "title": "Primitives/Pager",
1128
1575
  "tags": [
@@ -1161,20 +1608,10 @@
1161
1608
  "defaultValue": "true",
1162
1609
  "description": "Whether to display labels.\nWhen false, hides all label content regardless of other props."
1163
1610
  },
1164
- "labelledBy": {
1165
- "type": "string",
1166
- "required": false,
1167
- "description": "ARIA: ID of an element that labels this progress bar.\nTakes precedence over `ariaLabel` and `defaultLabel`."
1168
- },
1169
- "ariaLabel": {
1170
- "type": "string",
1171
- "required": false,
1172
- "description": "ARIA: Accessible name for the progress bar.\nUse when no visible label exists. Takes precedence over `defaultLabel`."
1173
- },
1174
1611
  "defaultLabel": {
1175
1612
  "type": "string",
1176
1613
  "required": false,
1177
- "description": "Fallback accessible name, rendered as visually-hidden text.\nOnly used if neither `labelledBy` nor `ariaLabel` is provided."
1614
+ "description": "Fallback accessible name, rendered as visually-hidden text.\nOnly used if neither `aria-labelledby` nor `aria-label` is provided."
1178
1615
  },
1179
1616
  "className": {
1180
1617
  "type": "string",
@@ -1227,7 +1664,17 @@
1227
1664
  "description": "Visual variant for circle mode.\n- `'ring'`: Hollow centre (default) — shows progress as a ring/donut\n- `'solid'`: Filled centre — shows as a solid filled circle\n\nOnly applies when `mode=\"circle\"`. Ignored in line mode."
1228
1665
  }
1229
1666
  },
1230
- "cssTokens": [],
1667
+ "cssTokens": [
1668
+ "--tui-progress-track",
1669
+ "--tui-progress-fill",
1670
+ "--tui-progress-label",
1671
+ "--tui-progress-radius",
1672
+ "--tui-progress-z1-fill",
1673
+ "--tui-progress-z2-fill",
1674
+ "--tui-progress-z3-fill",
1675
+ "--tui-progress-z4-fill",
1676
+ "--tui-progress-z5-fill"
1677
+ ],
1231
1678
  "story": {
1232
1679
  "title": "Primitives/Progress",
1233
1680
  "tags": [
@@ -1241,12 +1688,44 @@
1241
1688
  "examples": null,
1242
1689
  "related": null
1243
1690
  },
1691
+ "Radio": {
1692
+ "props": {
1693
+ "label": {
1694
+ "type": "ReactNode",
1695
+ "required": false
1696
+ },
1697
+ "disabled": {
1698
+ "type": "boolean",
1699
+ "required": false,
1700
+ "defaultValue": "false"
1701
+ },
1702
+ "className": {
1703
+ "type": "string",
1704
+ "required": false
1705
+ }
1706
+ },
1707
+ "cssTokens": [
1708
+ "--tui-radio-accent"
1709
+ ],
1710
+ "story": {
1711
+ "title": "Forms/RadioGroup",
1712
+ "tags": [
1713
+ "autodocs",
1714
+ "lms"
1715
+ ]
1716
+ },
1717
+ "subcomponents": null,
1718
+ "description": null,
1719
+ "gotchas": null,
1720
+ "examples": null,
1721
+ "related": null
1722
+ },
1244
1723
  "Rating": {
1245
1724
  "props": {
1246
1725
  "value": {
1247
1726
  "type": "number",
1248
1727
  "required": false,
1249
- "description": "Controlled value (1..max). Use with onChange"
1728
+ "description": "Controlled value (1..max). Use with onValueChange"
1250
1729
  },
1251
1730
  "max": {
1252
1731
  "type": "number",
@@ -1281,10 +1760,10 @@
1281
1760
  "defaultValue": "secondary",
1282
1761
  "description": "Theme feeds foreground color tokens"
1283
1762
  },
1284
- "onChange": {
1763
+ "onValueChange": {
1285
1764
  "type": "(value: number) => void",
1286
1765
  "required": false,
1287
- "description": "Called on change (controlled or uncontrolled)"
1766
+ "description": "Called when the value changes"
1288
1767
  },
1289
1768
  "allowClear": {
1290
1769
  "type": "boolean",
@@ -1299,14 +1778,13 @@
1299
1778
  "type": "string",
1300
1779
  "required": false,
1301
1780
  "description": "Gap override (e.g. '0.25rem') – otherwise uses density utilities"
1302
- },
1303
- "ariaLabel": {
1304
- "type": "string",
1305
- "required": false,
1306
- "description": "Accessible label for the rating group. Defaults to \"Rating: X of Y\""
1307
1781
  }
1308
1782
  },
1309
- "cssTokens": [],
1783
+ "cssTokens": [
1784
+ "--tui-rating-active",
1785
+ "--tui-rating-inactive",
1786
+ "--tui-rating-scale"
1787
+ ],
1310
1788
  "story": {
1311
1789
  "title": "Primitives/Rating",
1312
1790
  "tags": [
@@ -1363,7 +1841,18 @@
1363
1841
  "description": "Additional classes"
1364
1842
  }
1365
1843
  },
1366
- "cssTokens": [],
1844
+ "cssTokens": [
1845
+ "--tui-segmented-gap",
1846
+ "--tui-segmented-padding",
1847
+ "--tui-segmented-radius",
1848
+ "--tui-segmented-bg",
1849
+ "--tui-segmented-border",
1850
+ "--tui-segmented-item-padding",
1851
+ "--tui-segmented-item-radius",
1852
+ "--tui-segmented-item-fg",
1853
+ "--tui-segmented-item-bg-active",
1854
+ "--tui-segmented-item-fg-active"
1855
+ ],
1367
1856
  "story": {
1368
1857
  "title": "Components/SegmentedControl",
1369
1858
  "tags": [
@@ -1377,6 +1866,97 @@
1377
1866
  "examples": null,
1378
1867
  "related": null
1379
1868
  },
1869
+ "Select": {
1870
+ "props": {
1871
+ "size": {
1872
+ "type": "\"sm\" | \"md\" | \"lg\"",
1873
+ "required": false,
1874
+ "defaultValue": "'md'",
1875
+ "description": "Control size."
1876
+ },
1877
+ "value": {
1878
+ "type": "OptionValue",
1879
+ "required": false,
1880
+ "description": "Controlled selected value."
1881
+ },
1882
+ "onValueChange": {
1883
+ "type": "(value: OptionValue) => void",
1884
+ "required": false,
1885
+ "description": "Callback when selection changes.\nCalled with undefined when selection is cleared."
1886
+ },
1887
+ "open": {
1888
+ "type": "boolean",
1889
+ "required": false,
1890
+ "description": "Controlled open state."
1891
+ },
1892
+ "defaultOpen": {
1893
+ "type": "boolean",
1894
+ "required": false,
1895
+ "defaultValue": "false",
1896
+ "description": "Default open state for uncontrolled usage."
1897
+ },
1898
+ "disabled": {
1899
+ "type": "boolean",
1900
+ "required": false,
1901
+ "defaultValue": "false",
1902
+ "description": "Whether the entire select is disabled."
1903
+ },
1904
+ "side": {
1905
+ "type": "\"top\" | \"bottom\"",
1906
+ "required": false,
1907
+ "defaultValue": "'bottom'",
1908
+ "description": "Preferred side of the trigger to place the listbox."
1909
+ },
1910
+ "align": {
1911
+ "type": "\"start\" | \"center\" | \"end\"",
1912
+ "required": false,
1913
+ "defaultValue": "'start'",
1914
+ "description": "Alignment along the side."
1915
+ },
1916
+ "sideOffset": {
1917
+ "type": "number",
1918
+ "required": false,
1919
+ "defaultValue": "4",
1920
+ "description": "Distance from the trigger in pixels."
1921
+ },
1922
+ "clearable": {
1923
+ "type": "boolean",
1924
+ "required": false,
1925
+ "defaultValue": "false",
1926
+ "description": "Whether the selection can be cleared with a clear button."
1927
+ },
1928
+ "id": {
1929
+ "type": "string",
1930
+ "required": false,
1931
+ "description": "Optional trigger ID override.\nUseful for Field integration via htmlFor."
1932
+ }
1933
+ },
1934
+ "cssTokens": [
1935
+ "--tui-select-trigger-bg",
1936
+ "--tui-select-trigger-fg",
1937
+ "--tui-select-trigger-border",
1938
+ "--tui-select-trigger-border-focus",
1939
+ "--tui-select-trigger-radius",
1940
+ "--tui-select-content-bg",
1941
+ "--tui-select-content-border",
1942
+ "--tui-select-content-shadow",
1943
+ "--tui-select-content-radius",
1944
+ "--tui-select-option-bg-hover",
1945
+ "--tui-select-option-bg-selected"
1946
+ ],
1947
+ "story": {
1948
+ "title": "Forms/Select",
1949
+ "tags": [
1950
+ "autodocs",
1951
+ "lms"
1952
+ ]
1953
+ },
1954
+ "subcomponents": null,
1955
+ "description": null,
1956
+ "gotchas": null,
1957
+ "examples": null,
1958
+ "related": null
1959
+ },
1380
1960
  "Sidebar": {
1381
1961
  "props": {
1382
1962
  "position": {
@@ -1391,7 +1971,7 @@
1391
1971
  "defaultValue": "false",
1392
1972
  "description": "Enable drawer mode (mobile overlay).\nWhen true, sidebar renders via portal with backdrop and focus trap."
1393
1973
  },
1394
- "isOpen": {
1974
+ "open": {
1395
1975
  "type": "boolean",
1396
1976
  "required": false,
1397
1977
  "description": "Drawer open state. Required when `drawer={true}`."
@@ -1401,11 +1981,6 @@
1401
1981
  "required": false,
1402
1982
  "description": "Callback to close the drawer.\nCalled when ESC is pressed or backdrop is clicked."
1403
1983
  },
1404
- "ariaLabel": {
1405
- "type": "string",
1406
- "required": false,
1407
- "description": "Accessible label for the aside landmark.\nTypically omit this if using `ariaLabel` on `Sidebar.Nav` instead."
1408
- },
1409
1984
  "children": {
1410
1985
  "type": "ReactNode",
1411
1986
  "required": true,
@@ -1417,7 +1992,13 @@
1417
1992
  "description": "Additional CSS class names."
1418
1993
  }
1419
1994
  },
1420
- "cssTokens": [],
1995
+ "cssTokens": [
1996
+ "--tui-sidebar-width",
1997
+ "--tui-sidebar-bg",
1998
+ "--tui-sidebar-border",
1999
+ "--tui-sidebar-padding",
2000
+ "--tui-sidebar-z"
2001
+ ],
1421
2002
  "story": {
1422
2003
  "title": "Components/Sidebar",
1423
2004
  "tags": [
@@ -1490,16 +2071,6 @@
1490
2071
  },
1491
2072
  "StepList": {
1492
2073
  "props": {
1493
- "ariaLabel": {
1494
- "type": "string",
1495
- "required": false,
1496
- "description": "Accessible label for the navigation landmark.\nUse either `ariaLabel` or `ariaLabelledBy`, not both."
1497
- },
1498
- "ariaLabelledBy": {
1499
- "type": "string",
1500
- "required": false,
1501
- "description": "ID of a visible heading that labels the navigation.\nUse either `ariaLabel` or `ariaLabelledBy`, not both."
1502
- },
1503
2074
  "ariaCurrent": {
1504
2075
  "type": "\"step\" | \"page\"",
1505
2076
  "required": false,
@@ -1522,7 +2093,14 @@
1522
2093
  "description": "Additional CSS class names."
1523
2094
  }
1524
2095
  },
1525
- "cssTokens": [],
2096
+ "cssTokens": [
2097
+ "--tui-steplist-gap",
2098
+ "--tui-steplist-padding",
2099
+ "--tui-steplist-radius",
2100
+ "--tui-steplist-current-bg",
2101
+ "--tui-steplist-current-border",
2102
+ "--tui-steplist-hover-bg"
2103
+ ],
1526
2104
  "story": {
1527
2105
  "title": "Components/StepList",
1528
2106
  "tags": [
@@ -1537,6 +2115,63 @@
1537
2115
  "examples": null,
1538
2116
  "related": null
1539
2117
  },
2118
+ "Switch": {
2119
+ "props": {
2120
+ "disabled": {
2121
+ "type": "boolean",
2122
+ "required": false
2123
+ },
2124
+ "className": {
2125
+ "type": "string",
2126
+ "required": false
2127
+ },
2128
+ "id": {
2129
+ "type": "string",
2130
+ "required": false
2131
+ },
2132
+ "style": {
2133
+ "type": "CSSProperties",
2134
+ "required": false
2135
+ },
2136
+ "title": {
2137
+ "type": "string",
2138
+ "required": false
2139
+ },
2140
+ "rel": {
2141
+ "type": "string",
2142
+ "required": false
2143
+ },
2144
+ "onClick": {
2145
+ "type": "MouseEventHandler<HTMLButtonElement>",
2146
+ "required": false
2147
+ },
2148
+ "size": {
2149
+ "type": "\"sm\" | \"md\" | \"lg\"",
2150
+ "required": false,
2151
+ "defaultValue": "md"
2152
+ },
2153
+ "label": {
2154
+ "type": "ReactNode",
2155
+ "required": false
2156
+ }
2157
+ },
2158
+ "cssTokens": [
2159
+ "--tui-switch-accent",
2160
+ "--tui-switch-track-off"
2161
+ ],
2162
+ "story": {
2163
+ "title": "Forms/Switch",
2164
+ "tags": [
2165
+ "autodocs",
2166
+ "lms"
2167
+ ]
2168
+ },
2169
+ "subcomponents": null,
2170
+ "description": null,
2171
+ "gotchas": null,
2172
+ "examples": null,
2173
+ "related": null
2174
+ },
1540
2175
  "Tabs": {
1541
2176
  "props": {
1542
2177
  "variant": {
@@ -1634,6 +2269,158 @@
1634
2269
  "SegmentedControl"
1635
2270
  ]
1636
2271
  },
2272
+ "Textarea": {
2273
+ "props": {
2274
+ "disabled": {
2275
+ "type": "boolean",
2276
+ "required": false
2277
+ },
2278
+ "onChange": {
2279
+ "type": "ChangeEventHandler<HTMLTextAreaElement>",
2280
+ "required": false
2281
+ },
2282
+ "className": {
2283
+ "type": "string",
2284
+ "required": false,
2285
+ "description": "Class name applied to the textarea element."
2286
+ },
2287
+ "id": {
2288
+ "type": "string",
2289
+ "required": false
2290
+ },
2291
+ "style": {
2292
+ "type": "CSSProperties",
2293
+ "required": false
2294
+ },
2295
+ "title": {
2296
+ "type": "string",
2297
+ "required": false
2298
+ },
2299
+ "role": {
2300
+ "type": "AriaRole",
2301
+ "required": false
2302
+ },
2303
+ "rel": {
2304
+ "type": "string",
2305
+ "required": false
2306
+ },
2307
+ "onClick": {
2308
+ "type": "MouseEventHandler<HTMLTextAreaElement>",
2309
+ "required": false
2310
+ },
2311
+ "size": {
2312
+ "type": "\"sm\" | \"md\" | \"lg\"",
2313
+ "required": false,
2314
+ "defaultValue": "md",
2315
+ "description": "Control size."
2316
+ },
2317
+ "resize": {
2318
+ "type": "\"none\" | \"vertical\" | \"horizontal\" | \"both\"",
2319
+ "required": false,
2320
+ "defaultValue": "vertical",
2321
+ "description": "Resize behaviour.\nIgnored when `autoResize` is true (resize is disabled to avoid conflict)."
2322
+ },
2323
+ "autoResize": {
2324
+ "type": "boolean",
2325
+ "required": false,
2326
+ "defaultValue": "false",
2327
+ "description": "Automatically grow height to fit content.\nDisables manual resize and scrollbar."
2328
+ }
2329
+ },
2330
+ "cssTokens": [],
2331
+ "story": {
2332
+ "title": "Forms/Textarea",
2333
+ "tags": [
2334
+ "autodocs",
2335
+ "stable",
2336
+ "lms"
2337
+ ]
2338
+ },
2339
+ "subcomponents": null,
2340
+ "description": null,
2341
+ "gotchas": null,
2342
+ "examples": null,
2343
+ "related": null
2344
+ },
2345
+ "TextInput": {
2346
+ "props": {
2347
+ "disabled": {
2348
+ "type": "boolean",
2349
+ "required": false
2350
+ },
2351
+ "onChange": {
2352
+ "type": "ChangeEventHandler<HTMLInputElement>",
2353
+ "required": false
2354
+ },
2355
+ "className": {
2356
+ "type": "string",
2357
+ "required": false,
2358
+ "description": "Additional class name applied to the root wrapper element."
2359
+ },
2360
+ "id": {
2361
+ "type": "string",
2362
+ "required": false
2363
+ },
2364
+ "style": {
2365
+ "type": "CSSProperties",
2366
+ "required": false
2367
+ },
2368
+ "title": {
2369
+ "type": "string",
2370
+ "required": false
2371
+ },
2372
+ "role": {
2373
+ "type": "AriaRole",
2374
+ "required": false
2375
+ },
2376
+ "rel": {
2377
+ "type": "string",
2378
+ "required": false
2379
+ },
2380
+ "onClick": {
2381
+ "type": "MouseEventHandler<HTMLInputElement>",
2382
+ "required": false
2383
+ },
2384
+ "type": {
2385
+ "type": "\"number\" | \"text\" | \"email\" | \"password\" | \"url\" | \"tel\" | \"search\"",
2386
+ "required": false,
2387
+ "defaultValue": "text",
2388
+ "description": "Input type."
2389
+ },
2390
+ "size": {
2391
+ "type": "\"sm\" | \"md\" | \"lg\"",
2392
+ "required": false,
2393
+ "defaultValue": "md",
2394
+ "description": "Control size."
2395
+ },
2396
+ "suffix": {
2397
+ "type": "ReactNode",
2398
+ "required": false,
2399
+ "description": "Content to render after the input (icon, button)."
2400
+ },
2401
+ "inputClassName": {
2402
+ "type": "string",
2403
+ "required": false,
2404
+ "description": "Class name applied directly to the `<input>` element.\nUse for utilities like `tui-input-reset` that must target the input itself."
2405
+ }
2406
+ },
2407
+ "cssTokens": [
2408
+ "--tui-input-group-gap"
2409
+ ],
2410
+ "story": {
2411
+ "title": "Forms/TextInput",
2412
+ "tags": [
2413
+ "autodocs",
2414
+ "stable",
2415
+ "lms"
2416
+ ]
2417
+ },
2418
+ "subcomponents": null,
2419
+ "description": null,
2420
+ "gotchas": null,
2421
+ "examples": null,
2422
+ "related": null
2423
+ },
1637
2424
  "Toolbar": {
1638
2425
  "props": {
1639
2426
  "orientation": {
@@ -1656,7 +2443,10 @@
1656
2443
  "description": "Inline styles for layout integration"
1657
2444
  }
1658
2445
  },
1659
- "cssTokens": [],
2446
+ "cssTokens": [
2447
+ "--tui-toolbar-gap",
2448
+ "--tui-toolbar-padding"
2449
+ ],
1660
2450
  "story": {
1661
2451
  "title": "Components/Toolbar",
1662
2452
  "tags": [
@@ -1689,7 +2479,12 @@
1689
2479
  "description": "Override provider's delay for this tooltip."
1690
2480
  }
1691
2481
  },
1692
- "cssTokens": [],
2482
+ "cssTokens": [
2483
+ "--tui-tooltip-bg",
2484
+ "--tui-tooltip-fg",
2485
+ "--tui-tooltip-radius",
2486
+ "--tui-tooltip-z"
2487
+ ],
1693
2488
  "story": {
1694
2489
  "title": "Primitives/Tooltip",
1695
2490
  "tags": [
@@ -1850,9 +2645,9 @@
1850
2645
  "lms": 7,
1851
2646
  "player": 24,
1852
2647
  "reaction": 36,
1853
- "system": 74
2648
+ "system": 76
1854
2649
  },
1855
- "total": 153,
2650
+ "total": 155,
1856
2651
  "manifest": "./icons/manifest.json"
1857
2652
  }
1858
2653
  }