@raintonic/formaui 0.3.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (238) hide show
  1. package/CHANGELOG.md +80 -35
  2. package/README.md +22 -26
  3. package/fesm2022/raintonic-formaui-cdk-drag-drop.mjs +39 -41
  4. package/fesm2022/raintonic-formaui-cdk-drag-drop.mjs.map +1 -1
  5. package/fesm2022/raintonic-formaui-cdk-form-field.mjs +207 -3
  6. package/fesm2022/raintonic-formaui-cdk-form-field.mjs.map +1 -1
  7. package/fesm2022/raintonic-formaui-cdk-overlay.mjs +27 -2
  8. package/fesm2022/raintonic-formaui-cdk-overlay.mjs.map +1 -1
  9. package/fesm2022/raintonic-formaui-cdk-virtual-scroll.mjs +5 -12
  10. package/fesm2022/raintonic-formaui-cdk-virtual-scroll.mjs.map +1 -1
  11. package/fesm2022/raintonic-formaui-components-accordion.mjs +8 -5
  12. package/fesm2022/raintonic-formaui-components-accordion.mjs.map +1 -1
  13. package/fesm2022/raintonic-formaui-components-alert.mjs +16 -2
  14. package/fesm2022/raintonic-formaui-components-alert.mjs.map +1 -1
  15. package/fesm2022/raintonic-formaui-components-autocomplete.mjs +255 -462
  16. package/fesm2022/raintonic-formaui-components-autocomplete.mjs.map +1 -1
  17. package/fesm2022/raintonic-formaui-components-avatar.mjs +34 -59
  18. package/fesm2022/raintonic-formaui-components-avatar.mjs.map +1 -1
  19. package/fesm2022/raintonic-formaui-components-badge.mjs +2 -2
  20. package/fesm2022/raintonic-formaui-components-badge.mjs.map +1 -1
  21. package/fesm2022/raintonic-formaui-components-breadcrumb.mjs +4 -4
  22. package/fesm2022/raintonic-formaui-components-breadcrumb.mjs.map +1 -1
  23. package/fesm2022/raintonic-formaui-components-button-group.mjs +2 -2
  24. package/fesm2022/raintonic-formaui-components-button-group.mjs.map +1 -1
  25. package/fesm2022/raintonic-formaui-components-button.mjs +15 -20
  26. package/fesm2022/raintonic-formaui-components-button.mjs.map +1 -1
  27. package/fesm2022/raintonic-formaui-components-card.mjs +2 -2
  28. package/fesm2022/raintonic-formaui-components-card.mjs.map +1 -1
  29. package/fesm2022/raintonic-formaui-components-checkbox.mjs +2 -2
  30. package/fesm2022/raintonic-formaui-components-checkbox.mjs.map +1 -1
  31. package/fesm2022/raintonic-formaui-components-chip.mjs +97 -0
  32. package/fesm2022/raintonic-formaui-components-chip.mjs.map +1 -0
  33. package/fesm2022/raintonic-formaui-components-data-table.mjs +69 -29
  34. package/fesm2022/raintonic-formaui-components-data-table.mjs.map +1 -1
  35. package/fesm2022/raintonic-formaui-components-date-picker.mjs +223 -144
  36. package/fesm2022/raintonic-formaui-components-date-picker.mjs.map +1 -1
  37. package/fesm2022/raintonic-formaui-components-divider.mjs +2 -2
  38. package/fesm2022/raintonic-formaui-components-divider.mjs.map +1 -1
  39. package/fesm2022/raintonic-formaui-components-drawer.mjs +2 -2
  40. package/fesm2022/raintonic-formaui-components-drawer.mjs.map +1 -1
  41. package/fesm2022/raintonic-formaui-components-dropdown-menu.mjs +888 -0
  42. package/fesm2022/raintonic-formaui-components-dropdown-menu.mjs.map +1 -0
  43. package/fesm2022/raintonic-formaui-components-dual-tier-navigation.mjs +774 -0
  44. package/fesm2022/raintonic-formaui-components-dual-tier-navigation.mjs.map +1 -0
  45. package/fesm2022/raintonic-formaui-components-empty-state.mjs +2 -2
  46. package/fesm2022/raintonic-formaui-components-empty-state.mjs.map +1 -1
  47. package/fesm2022/raintonic-formaui-components-file-upload.mjs +2 -2
  48. package/fesm2022/raintonic-formaui-components-file-upload.mjs.map +1 -1
  49. package/fesm2022/raintonic-formaui-components-form-field.mjs +81 -50
  50. package/fesm2022/raintonic-formaui-components-form-field.mjs.map +1 -1
  51. package/fesm2022/raintonic-formaui-components-icon.mjs +2 -2
  52. package/fesm2022/raintonic-formaui-components-icon.mjs.map +1 -1
  53. package/fesm2022/raintonic-formaui-components-input.mjs +47 -12
  54. package/fesm2022/raintonic-formaui-components-input.mjs.map +1 -1
  55. package/fesm2022/raintonic-formaui-components-list.mjs +4 -4
  56. package/fesm2022/raintonic-formaui-components-list.mjs.map +1 -1
  57. package/fesm2022/raintonic-formaui-components-number-input.mjs +20 -12
  58. package/fesm2022/raintonic-formaui-components-number-input.mjs.map +1 -1
  59. package/fesm2022/raintonic-formaui-components-paginator.mjs +2 -2
  60. package/fesm2022/raintonic-formaui-components-paginator.mjs.map +1 -1
  61. package/fesm2022/raintonic-formaui-components-password-input.mjs +35 -110
  62. package/fesm2022/raintonic-formaui-components-password-input.mjs.map +1 -1
  63. package/fesm2022/raintonic-formaui-components-popover.mjs +3 -2
  64. package/fesm2022/raintonic-formaui-components-popover.mjs.map +1 -1
  65. package/fesm2022/raintonic-formaui-components-progressbar.mjs +3 -2
  66. package/fesm2022/raintonic-formaui-components-progressbar.mjs.map +1 -1
  67. package/fesm2022/raintonic-formaui-components-radio.mjs +5 -6
  68. package/fesm2022/raintonic-formaui-components-radio.mjs.map +1 -1
  69. package/fesm2022/raintonic-formaui-components-select.mjs +257 -412
  70. package/fesm2022/raintonic-formaui-components-select.mjs.map +1 -1
  71. package/fesm2022/raintonic-formaui-components-side-panel.mjs +2 -2
  72. package/fesm2022/raintonic-formaui-components-side-panel.mjs.map +1 -1
  73. package/fesm2022/raintonic-formaui-components-sidebar-nav-menu.mjs +525 -0
  74. package/fesm2022/raintonic-formaui-components-sidebar-nav-menu.mjs.map +1 -0
  75. package/fesm2022/raintonic-formaui-components-skeleton.mjs +2 -2
  76. package/fesm2022/raintonic-formaui-components-skeleton.mjs.map +1 -1
  77. package/fesm2022/raintonic-formaui-components-slider.mjs +2 -2
  78. package/fesm2022/raintonic-formaui-components-slider.mjs.map +1 -1
  79. package/fesm2022/raintonic-formaui-components-spinner.mjs +2 -2
  80. package/fesm2022/raintonic-formaui-components-spinner.mjs.map +1 -1
  81. package/fesm2022/raintonic-formaui-components-stepper.mjs +50 -45
  82. package/fesm2022/raintonic-formaui-components-stepper.mjs.map +1 -1
  83. package/fesm2022/raintonic-formaui-components-strength-meter.mjs +149 -0
  84. package/fesm2022/raintonic-formaui-components-strength-meter.mjs.map +1 -0
  85. package/fesm2022/raintonic-formaui-components-tab.mjs +2 -2
  86. package/fesm2022/raintonic-formaui-components-tab.mjs.map +1 -1
  87. package/fesm2022/raintonic-formaui-components-time-picker.mjs +194 -154
  88. package/fesm2022/raintonic-formaui-components-time-picker.mjs.map +1 -1
  89. package/fesm2022/raintonic-formaui-components-toggle-group.mjs +302 -0
  90. package/fesm2022/raintonic-formaui-components-toggle-group.mjs.map +1 -0
  91. package/fesm2022/raintonic-formaui-components-toggle.mjs +2 -2
  92. package/fesm2022/raintonic-formaui-components-toggle.mjs.map +1 -1
  93. package/fesm2022/raintonic-formaui-components-toolbar.mjs +2 -2
  94. package/fesm2022/raintonic-formaui-components-toolbar.mjs.map +1 -1
  95. package/fesm2022/raintonic-formaui-components-tooltip.mjs +10 -4
  96. package/fesm2022/raintonic-formaui-components-tooltip.mjs.map +1 -1
  97. package/fesm2022/raintonic-formaui-components-topbar.mjs +60 -0
  98. package/fesm2022/raintonic-formaui-components-topbar.mjs.map +1 -0
  99. package/fesm2022/raintonic-formaui-components-tree-select.mjs +59 -69
  100. package/fesm2022/raintonic-formaui-components-tree-select.mjs.map +1 -1
  101. package/fesm2022/raintonic-formaui-components-tree-table.mjs +2 -2
  102. package/fesm2022/raintonic-formaui-components-tree-table.mjs.map +1 -1
  103. package/fesm2022/raintonic-formaui-components-tree.mjs +31 -5
  104. package/fesm2022/raintonic-formaui-components-tree.mjs.map +1 -1
  105. package/fesm2022/raintonic-formaui-core.mjs +279 -1
  106. package/fesm2022/raintonic-formaui-core.mjs.map +1 -1
  107. package/fesm2022/raintonic-formaui-services-breakpoint.mjs +93 -0
  108. package/fesm2022/raintonic-formaui-services-breakpoint.mjs.map +1 -0
  109. package/fesm2022/raintonic-formaui-services-dialog.mjs +314 -16
  110. package/fesm2022/raintonic-formaui-services-dialog.mjs.map +1 -1
  111. package/fesm2022/raintonic-formaui-services-notification.mjs +93 -29
  112. package/fesm2022/raintonic-formaui-services-notification.mjs.map +1 -1
  113. package/fesm2022/raintonic-formaui-services-theme.mjs +46 -196
  114. package/fesm2022/raintonic-formaui-services-theme.mjs.map +1 -1
  115. package/fesm2022/raintonic-formaui.mjs +1 -1
  116. package/fesm2022/raintonic-formaui.mjs.map +1 -1
  117. package/llms-full.txt +2329 -450
  118. package/llms.txt +36 -33
  119. package/package.json +42 -19
  120. package/styles/fonts/Geist-Bold.woff2 +0 -0
  121. package/styles/fonts/Geist-Italic.woff2 +0 -0
  122. package/styles/fonts/Geist-Light.woff2 +0 -0
  123. package/styles/fonts/Geist-Medium.woff2 +0 -0
  124. package/styles/fonts/Geist-Regular.woff2 +0 -0
  125. package/styles/fonts/Geist-SemiBold.woff2 +0 -0
  126. package/styles/fonts/GeistMono-Regular.woff2 +0 -0
  127. package/styles/generated/_tokens.scss +906 -0
  128. package/styles/index.scss +11 -10
  129. package/styles/partials/_brand.scss +46 -0
  130. package/styles/partials/_constants.scss +22 -20
  131. package/styles/partials/_fonts.scss +54 -10
  132. package/styles/partials/_grid.scss +29 -18
  133. package/styles/partials/_mixins.scss +69 -27
  134. package/styles/partials/_motion.scss +28 -33
  135. package/styles/partials/_theme.scss +28 -255
  136. package/styles/partials/_type.scss +117 -0
  137. package/styles/partials/_typography.scss +45 -45
  138. package/styles/partials/_utilities.scss +198 -98
  139. package/styles/partials/components/_button.scss +144 -75
  140. package/styles/partials/components/_dialog.scss +181 -180
  141. package/styles/partials/components/_overlay.scss +87 -87
  142. package/styles/partials/themes/_dark.scss +3 -268
  143. package/styles/partials/themes/_light.scss +4 -268
  144. package/styles/styles.css +7744 -0
  145. package/styles/styles.entry.scss +3 -0
  146. package/styles/utilities.css +4802 -0
  147. package/styles/utilities.entry.scss +3 -0
  148. package/types/raintonic-formaui-cdk-drag-drop.d.ts +0 -1
  149. package/types/raintonic-formaui-cdk-drag-drop.d.ts.map +1 -1
  150. package/types/raintonic-formaui-cdk-form-field.d.ts +118 -2
  151. package/types/raintonic-formaui-cdk-form-field.d.ts.map +1 -1
  152. package/types/raintonic-formaui-cdk-overlay.d.ts +2 -0
  153. package/types/raintonic-formaui-cdk-overlay.d.ts.map +1 -1
  154. package/types/raintonic-formaui-cdk-virtual-scroll.d.ts +0 -1
  155. package/types/raintonic-formaui-cdk-virtual-scroll.d.ts.map +1 -1
  156. package/types/raintonic-formaui-components-accordion.d.ts +1 -1
  157. package/types/raintonic-formaui-components-accordion.d.ts.map +1 -1
  158. package/types/raintonic-formaui-components-alert.d.ts +6 -1
  159. package/types/raintonic-formaui-components-alert.d.ts.map +1 -1
  160. package/types/raintonic-formaui-components-autocomplete.d.ts +73 -116
  161. package/types/raintonic-formaui-components-autocomplete.d.ts.map +1 -1
  162. package/types/raintonic-formaui-components-avatar.d.ts +13 -31
  163. package/types/raintonic-formaui-components-avatar.d.ts.map +1 -1
  164. package/types/raintonic-formaui-components-button.d.ts +4 -10
  165. package/types/raintonic-formaui-components-button.d.ts.map +1 -1
  166. package/types/raintonic-formaui-components-chip.d.ts +43 -0
  167. package/types/raintonic-formaui-components-chip.d.ts.map +1 -0
  168. package/types/raintonic-formaui-components-data-table.d.ts +48 -11
  169. package/types/raintonic-formaui-components-data-table.d.ts.map +1 -1
  170. package/types/raintonic-formaui-components-date-picker.d.ts +59 -23
  171. package/types/raintonic-formaui-components-date-picker.d.ts.map +1 -1
  172. package/types/raintonic-formaui-components-dropdown-menu.d.ts +394 -0
  173. package/types/raintonic-formaui-components-dropdown-menu.d.ts.map +1 -0
  174. package/types/raintonic-formaui-components-dual-tier-navigation.d.ts +87 -0
  175. package/types/raintonic-formaui-components-dual-tier-navigation.d.ts.map +1 -0
  176. package/types/raintonic-formaui-components-form-field.d.ts +51 -21
  177. package/types/raintonic-formaui-components-form-field.d.ts.map +1 -1
  178. package/types/raintonic-formaui-components-input.d.ts +20 -11
  179. package/types/raintonic-formaui-components-input.d.ts.map +1 -1
  180. package/types/raintonic-formaui-components-number-input.d.ts +5 -3
  181. package/types/raintonic-formaui-components-number-input.d.ts.map +1 -1
  182. package/types/raintonic-formaui-components-password-input.d.ts +18 -32
  183. package/types/raintonic-formaui-components-password-input.d.ts.map +1 -1
  184. package/types/raintonic-formaui-components-popover.d.ts.map +1 -1
  185. package/types/raintonic-formaui-components-progressbar.d.ts +1 -1
  186. package/types/raintonic-formaui-components-progressbar.d.ts.map +1 -1
  187. package/types/raintonic-formaui-components-radio.d.ts +1 -2
  188. package/types/raintonic-formaui-components-radio.d.ts.map +1 -1
  189. package/types/raintonic-formaui-components-select.d.ts +107 -76
  190. package/types/raintonic-formaui-components-select.d.ts.map +1 -1
  191. package/types/raintonic-formaui-components-sidebar-nav-menu.d.ts +223 -0
  192. package/types/raintonic-formaui-components-sidebar-nav-menu.d.ts.map +1 -0
  193. package/types/raintonic-formaui-components-stepper.d.ts +4 -2
  194. package/types/raintonic-formaui-components-stepper.d.ts.map +1 -1
  195. package/types/raintonic-formaui-components-strength-meter.d.ts +78 -0
  196. package/types/raintonic-formaui-components-strength-meter.d.ts.map +1 -0
  197. package/types/raintonic-formaui-components-time-picker.d.ts +44 -24
  198. package/types/raintonic-formaui-components-time-picker.d.ts.map +1 -1
  199. package/types/raintonic-formaui-components-toggle-group.d.ts +100 -0
  200. package/types/raintonic-formaui-components-toggle-group.d.ts.map +1 -0
  201. package/types/raintonic-formaui-components-tooltip.d.ts +2 -1
  202. package/types/raintonic-formaui-components-tooltip.d.ts.map +1 -1
  203. package/types/raintonic-formaui-components-topbar.d.ts +48 -0
  204. package/types/raintonic-formaui-components-topbar.d.ts.map +1 -0
  205. package/types/raintonic-formaui-components-tree-select.d.ts +25 -9
  206. package/types/raintonic-formaui-components-tree-select.d.ts.map +1 -1
  207. package/types/raintonic-formaui-components-tree.d.ts +12 -1
  208. package/types/raintonic-formaui-components-tree.d.ts.map +1 -1
  209. package/types/raintonic-formaui-core.d.ts +243 -5
  210. package/types/raintonic-formaui-core.d.ts.map +1 -1
  211. package/types/raintonic-formaui-services-breakpoint.d.ts +44 -0
  212. package/types/raintonic-formaui-services-breakpoint.d.ts.map +1 -0
  213. package/types/raintonic-formaui-services-dialog.d.ts +141 -2
  214. package/types/raintonic-formaui-services-dialog.d.ts.map +1 -1
  215. package/types/raintonic-formaui-services-notification.d.ts +24 -2
  216. package/types/raintonic-formaui-services-notification.d.ts.map +1 -1
  217. package/types/raintonic-formaui-services-theme.d.ts +13 -103
  218. package/types/raintonic-formaui-services-theme.d.ts.map +1 -1
  219. package/types/raintonic-formaui.d.ts +1 -1
  220. package/fesm2022/raintonic-formaui-components-big-menu.mjs +0 -86
  221. package/fesm2022/raintonic-formaui-components-big-menu.mjs.map +0 -1
  222. package/fesm2022/raintonic-formaui-components-menu.mjs +0 -896
  223. package/fesm2022/raintonic-formaui-components-menu.mjs.map +0 -1
  224. package/fesm2022/raintonic-formaui-components-sidebar.mjs +0 -275
  225. package/fesm2022/raintonic-formaui-components-sidebar.mjs.map +0 -1
  226. package/fesm2022/raintonic-formaui-components-tag.mjs +0 -95
  227. package/fesm2022/raintonic-formaui-components-tag.mjs.map +0 -1
  228. package/styles/_fonts-entry.scss +0 -3
  229. package/styles/fonts/inter-tight-latin-italic.woff2 +0 -0
  230. package/styles/fonts/inter-tight-latin.woff2 +0 -0
  231. package/types/raintonic-formaui-components-big-menu.d.ts +0 -73
  232. package/types/raintonic-formaui-components-big-menu.d.ts.map +0 -1
  233. package/types/raintonic-formaui-components-menu.d.ts +0 -403
  234. package/types/raintonic-formaui-components-menu.d.ts.map +0 -1
  235. package/types/raintonic-formaui-components-sidebar.d.ts +0 -185
  236. package/types/raintonic-formaui-components-sidebar.d.ts.map +0 -1
  237. package/types/raintonic-formaui-components-tag.d.ts +0 -43
  238. package/types/raintonic-formaui-components-tag.d.ts.map +0 -1
package/llms-full.txt CHANGED
@@ -56,8 +56,8 @@ A flexible alert component for displaying informational messages, warnings, erro
56
56
  | Name | Type | Default | Required |
57
57
  |------|------|---------|----------|
58
58
  | variant | FuiAlertVariant | 'info' | no |
59
- | description | string | null | null | no |
60
- | icon | string | null | null | no |
59
+ | description | string \| null | null | no |
60
+ | icon | string \| null | null | no |
61
61
  | title | string | - | yes |
62
62
 
63
63
  #### Outputs
@@ -70,7 +70,7 @@ A flexible alert component for displaying informational messages, warnings, erro
70
70
 
71
71
  ## autocomplete
72
72
 
73
- An autocomplete component designed to work seamlessly with fui-form-field. Similar to Angular Material's mat-autocomplete integration with mat-form-field. Provides full Reactive Forms support with validation, filtering, and optional add/refresh actions.
73
+ A typeahead input with a filterable dropdown of options. Designed to work inside `fui-form-field` with full Reactive Forms support, keyboard navigation, and built-in accessibility announcements.
74
74
 
75
75
  - **Import**: `import { FuiAutocompleteComponent } from 'formaui/components/autocomplete'`
76
76
  - **Selector**: `fui-autocomplete`
@@ -79,27 +79,58 @@ An autocomplete component designed to work seamlessly with fui-form-field. Simil
79
79
 
80
80
  | Name | Type | Default | Required |
81
81
  |------|------|---------|----------|
82
- | addButtonLabel | string | undefined | undefined | no |
83
- | refreshButtonLabel | string | undefined | undefined | no |
84
- | noOptionsText | string | undefined | undefined | no |
85
- | searchPlaceholder | string | undefined | undefined | no |
86
- | errorStateMatcher | ErrorStateMatcher | null | null | no |
82
+ | errorStateMatcher | ErrorStateMatcher \| null | null | no |
87
83
 
88
84
  #### Outputs
89
85
 
90
86
  | Name | Type |
91
87
  |------|------|
92
- | valueChange | unknown |
93
- | selectionChange | FuiAutocompleteChange |
88
+ | valueChange | T \| T[] \| null |
94
89
  | openedChange | boolean |
95
90
  | searchChange | string |
96
- | addNew | void |
97
- | refresh | void |
91
+
92
+ ### Usage
93
+
94
+ ```html
95
+ <!-- Basic autocomplete inside form-field -->
96
+ <fui-form-field>
97
+ <fui-label>Country</fui-label>
98
+ <fui-autocomplete placeholder="Search countries..." [formControl]="countryControl">
99
+ @for (country of countries(); track country.code) {
100
+ <fui-option [value]="country.code">{{ country.name }}</fui-option>
101
+ }
102
+ </fui-autocomplete>
103
+ <fui-error>Country is required</fui-error>
104
+ </fui-form-field>
105
+
106
+ <!-- Panel actions slot for custom action buttons -->
107
+ <fui-form-field>
108
+ <fui-label>Category</fui-label>
109
+ <fui-autocomplete [formControl]="categoryControl">
110
+ @for (c of categories(); track c.id) {
111
+ <fui-option [value]="c.id">{{ c.name }}</fui-option>
112
+ }
113
+ <button fuiButton fuiAutocompletePanelActions (click)="openCreateCategoryDialog()">+ Add new</button>
114
+ </fui-autocomplete>
115
+ </fui-form-field>
116
+ ```
117
+
118
+ ### Notes
119
+
120
+ - **Accessibility:** Live-region announcements for option navigation and selection. `aria-activedescendant` tracks the highlighted option, `aria-describedby` links to hint and error content from `fui-form-field`.
121
+ - **Integration:** Must be placed inside `fui-form-field` for label, error, and hint slots. Implements `FuiFormFieldControl` and provides `FUI_FORM_FIELD_CONTROL`. Options are projected `fui-option` children from `formaui/components/select`.
122
+ - **Keyboard:** Arrow Up/Down to move through filtered options, Home/End for first/last, PageUp/PageDown to jump 10 at a time, Enter to select, Escape or Tab to close.
123
+ - **Filtering:** Options are filtered client-side by their label text against the in-panel search field. For async data, update the `fui-option` list reactively on `(searchChange)` and keep the current value in sync externally.
124
+ - **Panel actions:** Project `[fuiAutocompletePanelActions]` content to add custom buttons at the bottom of the dropdown panel.
125
+ - Use `compareWith` input for custom object comparison.
126
+ - Emits `selectionChange: FuiAutocompleteChange`, `valueChange: T | T[] | null`, `openedChange: boolean`, `searchChange: string`.
98
127
 
99
128
  ---
100
129
 
101
130
  ## avatar
102
131
 
132
+ Displays a user avatar with initials-only fallback (no image tag). Shows computed initials from fullName with a tooltip on hover.
133
+
103
134
  - **Import**: `import { FuiAvatarComponent } from 'formaui/components/avatar'`
104
135
  - **Selector**: `fui-avatar`
105
136
 
@@ -107,22 +138,17 @@ An autocomplete component designed to work seamlessly with fui-form-field. Simil
107
138
 
108
139
  | Name | Type | Default | Required |
109
140
  |------|------|---------|----------|
110
- | size | FuiAvatarSize | number | 'md' | no |
111
- | shape | 'circle' | 'rounded' | 'square' | 'circle' | no |
112
- | src | string | null | null | no |
113
- | avatarUrl | string | null | null | no |
114
- | srcSet | string | null | null | no |
115
- | sizesAttr | string | null | null | no |
116
- | name | string | null | null | no |
117
- | surname | string | null | null | no |
118
- | fullName | string | null | null | no |
119
- | alt | string | null | null | no |
120
- | identityKey | string | null | null | no |
141
+ | size | FuiAvatarSize \| number | 'md' | no |
142
+ | initials | string \| undefined | - | no |
143
+ | alt | string \| null | null | no |
144
+ | fullName | string | - | yes |
121
145
 
122
146
  ---
123
147
 
124
148
  ## badge
125
149
 
150
+ Displays a small label badge with optional icon and color variants. Supports custom colors with automatic text contrast calculation.
151
+
126
152
  - **Import**: `import { FuiBadgeComponent } from 'formaui/components/badge'`
127
153
  - **Selector**: `fui-badge`
128
154
 
@@ -130,36 +156,19 @@ An autocomplete component designed to work seamlessly with fui-form-field. Simil
130
156
 
131
157
  | Name | Type | Default | Required |
132
158
  |------|------|---------|----------|
133
- | icon | string | null | null | no |
134
- | customColor | FuiBadgeCustomColor | null | null | no |
159
+ | icon | string \| null | null | no |
160
+ | customColor | FuiBadgeCustomColor \| null | null | no |
135
161
  | size | FuiBadgeSize | 'md' | no |
136
162
  | variant | FuiBadgeVariant | 'primary' | no |
137
- | ariaLabel | string | null | null | no |
163
+ | ariaLabel | string \| null | null | no |
138
164
  | label | string | - | yes |
139
165
 
140
166
  ---
141
167
 
142
- ## big-menu
143
-
144
- - **Import**: `import { FuiBigMenuComponent } from 'formaui/components/big-menu'`
145
- - **Selector**: `fui-big-menu`
146
-
147
- #### Inputs
148
-
149
- | Name | Type | Default | Required |
150
- |------|------|---------|----------|
151
- | menu | BigMenuItem[] | - | yes |
152
-
153
- #### Outputs
154
-
155
- | Name | Type |
156
- |------|------|
157
- | itemMenuClick | { item: BigMenuChild; event: MouseEvent } |
158
-
159
- ---
160
-
161
168
  ## breadcrumb
162
169
 
170
+ A navigation trail that shows the user's location within a hierarchy. Compose `fui-breadcrumb` with one or more `fui-breadcrumb-item` children; each item can be a router link, and the last item is rendered as the current page.
171
+
163
172
  - **Import**: `import { FuiBreadcrumbComponent } from 'formaui/components/breadcrumb'`
164
173
  - **Selector**: `fui-breadcrumb`
165
174
 
@@ -167,7 +176,33 @@ An autocomplete component designed to work seamlessly with fui-form-field. Simil
167
176
 
168
177
  | Name | Type | Default | Required |
169
178
  |------|------|---------|----------|
170
- | aria-label | string | undefined | undefined | no |
179
+ | aria-label | string \| undefined | undefined | no |
180
+
181
+ ### Usage
182
+
183
+ ```html
184
+ <!-- Basic breadcrumb with router links -->
185
+ <fui-breadcrumb aria-label="Breadcrumb">
186
+ <fui-breadcrumb-item [routerLink]="['/']">Home</fui-breadcrumb-item>
187
+ <fui-breadcrumb-item [routerLink]="['/products']">Products</fui-breadcrumb-item>
188
+ <fui-breadcrumb-item>Laptop</fui-breadcrumb-item>
189
+ </fui-breadcrumb>
190
+
191
+ <!-- Custom separator and a disabled item -->
192
+ <fui-breadcrumb separator="›">
193
+ <fui-breadcrumb-item [routerLink]="['/']">Home</fui-breadcrumb-item>
194
+ <fui-breadcrumb-item [routerLink]="['/settings']" disabled>Settings</fui-breadcrumb-item>
195
+ <fui-breadcrumb-item>Profile</fui-breadcrumb-item>
196
+ </fui-breadcrumb>
197
+ ```
198
+
199
+ ### Notes
200
+
201
+ - **Accessibility:** The last item gets `aria-current="page"` automatically and is rendered as plain text rather than a link. Separators are decorative (`aria-hidden="true"`). Provide `aria-label` on the group for context; the default `Breadcrumb` label text comes from `FuiBreadcrumbIntl`.
202
+ - **Routing:** `routerLink` accepts a string or a commands array (`string | unknown[]`). An item renders as a link only when `routerLink` is set and it is neither the last item nor `disabled`; otherwise it renders as text.
203
+ - **Separator:** Set `separator` on `fui-breadcrumb` (default `/`); the value is propagated to every item and shown between entries.
204
+ - **Composition:** The parent tracks its `fui-breadcrumb-item` content children and assigns last-item and separator state to each one automatically — order in the template defines the trail.
205
+ - **i18n:** Override `FuiBreadcrumbIntl` to localize the root `aria-label`; intl changes trigger re-render.
171
206
 
172
207
  ### Sub-components
173
208
 
@@ -179,14 +214,14 @@ An autocomplete component designed to work seamlessly with fui-form-field. Simil
179
214
 
180
215
  | Name | Type | Default | Required |
181
216
  |------|------|---------|----------|
182
- | routerLink | string | unknown[] | null | null | no |
217
+ | routerLink | string \| unknown[] \| null | null | no |
183
218
  | disabled | boolean | false | no |
184
219
 
185
220
  ---
186
221
 
187
222
  ## button
188
223
 
189
- A versatile button directive that can be applied to both `<button>` and `<a>` elements. Follows Carbon Design System patterns with full accessibility support.
224
+ A versatile button directive for triggering user actions. Supports multiple visual variants, sizes, loading states, and icon-only mode. Works on both `<button>` and `<a>` elements.
190
225
 
191
226
  - **Import**: `import { FuiButtonDirective } from 'formaui/components/button'`
192
227
  - **Selector**: `button[fuiButton], a[fuiButton]`
@@ -201,9 +236,46 @@ A versatile button directive that can be applied to both `<button>` and `<a>` el
201
236
  | fullWidth | boolean | false | no |
202
237
  | loading | boolean | false | no |
203
238
  | iconOnly | boolean | false | no |
204
- | aria-label | string | null | null | no |
239
+ | aria-label | string \| null | null | no |
205
240
  | type | ButtonType | 'button' | no |
206
241
 
242
+ ### Usage
243
+
244
+ ```html
245
+ <!-- Primary button -->
246
+ <button fuiButton>Click me</button>
247
+
248
+ <!-- Button with variant and size -->
249
+ <button fuiButton variant="secondary" size="lg">Large Secondary</button>
250
+
251
+ <!-- Destructive button for destructive actions -->
252
+ <button fuiButton variant="destructive">Delete</button>
253
+
254
+ <!-- Tertiary violet accent button -->
255
+ <button fuiButton variant="tertiary-violet">Learn more</button>
256
+
257
+ <!-- Loading state -->
258
+ <button fuiButton [loading]="isLoading">Save</button>
259
+
260
+ <!-- Icon-only button -->
261
+ <button fuiButton variant="tertiary" iconOnly aria-label="Settings">
262
+ <fui-icon name="settings" />
263
+ </button>
264
+
265
+ <!-- Link button -->
266
+ <a fuiButton variant="link" href="/dashboard">Go to Dashboard</a>
267
+
268
+ <!-- Full-width button -->
269
+ <button fuiButton fullWidth>Full Width Action</button>
270
+ ```
271
+
272
+ ### Notes
273
+
274
+ - Use `variant="destructive"` only for destructive actions (delete, remove, etc.)
275
+ - Always provide `aria-label` on icon-only buttons for accessibility
276
+ - The `loading` state automatically disables the button and shows a spinner
277
+ - On `<a>` elements, the `disabled` state removes the `href` attribute
278
+
207
279
  ---
208
280
 
209
281
  ## button-group
@@ -217,13 +289,13 @@ A container component that groups multiple buttons together, creating a unified
217
289
 
218
290
  | Name | Type | Default | Required |
219
291
  |------|------|---------|----------|
220
- | ariaLabel | string | undefined | undefined | no |
292
+ | ariaLabel | string \| undefined | undefined | no |
221
293
 
222
294
  ---
223
295
 
224
296
  ## card
225
297
 
226
- A flexible container component following Carbon Design System patterns. Provides a structured layout with optional header, content, and actions sections.
298
+ A container for grouping related content with an optional header and actions slot. Supports elevated, outlined, and flat variants plus an optional clickable state with hover lift and keyboard activation.
227
299
 
228
300
  - **Import**: `import { FuiCardComponent } from 'formaui/components/card'`
229
301
  - **Selector**: `fui-card`
@@ -235,6 +307,45 @@ A flexible container component following Carbon Design System patterns. Provides
235
307
  | variant | FuiCardVariant | 'outlined' | no |
236
308
  | padding | FuiCardPadding | 'lg' | no |
237
309
 
310
+ ### Usage
311
+
312
+ ```html
313
+ <!-- Basic card -->
314
+ <fui-card>
315
+ <p>Plain content in a card.</p>
316
+ </fui-card>
317
+
318
+ <!-- Card with header, content, and action buttons -->
319
+ <fui-card variant="outlined">
320
+ <fui-card-header title="Project status" subtitle="Updated 2 min ago">
321
+ <button fuiButton variant="tertiary" size="sm" iconOnly aria-label="More">
322
+ <fui-icon name="overflow-menu-vertical" />
323
+ </button>
324
+ </fui-card-header>
325
+
326
+ <p>Main card body — put anything here.</p>
327
+
328
+ <fui-card-actions align="end">
329
+ <button fuiButton variant="secondary">Cancel</button>
330
+ <button fuiButton>Save</button>
331
+ </fui-card-actions>
332
+ </fui-card>
333
+
334
+ <!-- Elevated and clickable -->
335
+ <fui-card variant="elevated" [clickable]="true" (click)="openDetails()">
336
+ <fui-card-header title="Open details" />
337
+ <p>The whole card is a button.</p>
338
+ </fui-card>
339
+ ```
340
+
341
+ ### Notes
342
+
343
+ - **Accessibility:** When `[clickable]="true"`, the card gets `role="button"`, is focusable (`tabindex="0"`), and activates on Enter/Space. Otherwise it renders as `role="region"`. If an `fui-card-header` with a title is projected, its id is wired to the card's `aria-labelledby` automatically.
344
+ - **Integration:** Composition-based — project `fui-card-header` and/or `fui-card-actions` alongside free-form content. Only one of each is supported per card.
345
+ - **Variants:** `elevated` (shadow), `outlined` (border — default), `flat` (no border/shadow). Padding options: `none | sm | md | lg | xl` (default `lg`).
346
+ - **Theming:** hover/lift animation, border, and shadow all use `--fui-*` CSS custom properties from the theme — override them at the host to restyle without changing the template.
347
+ - `disabled` suppresses the click handler, removes focus, and greys out the card (click and keyboard events are swallowed).
348
+
238
349
  ### Sub-components
239
350
 
240
351
  #### FuiCardActionsComponent
@@ -245,7 +356,7 @@ A flexible container component following Carbon Design System patterns. Provides
245
356
 
246
357
  | Name | Type | Default | Required |
247
358
  |------|------|---------|----------|
248
- | align | 'start' | 'center' | 'end' | 'end' | no |
359
+ | align | 'start' \| 'center' \| 'end' | 'end' | no |
249
360
 
250
361
  #### FuiCardHeaderComponent
251
362
 
@@ -262,7 +373,7 @@ A flexible container component following Carbon Design System patterns. Provides
262
373
 
263
374
  ## checkbox
264
375
 
265
- A checkbox component with full Angular Reactive Forms support. Compatible with Angular Material's mat-checkbox interface.
376
+ A boolean input with checked, unchecked, and indeterminate states. Full Reactive Forms support via `ControlValueAccessor`, compatible with the `mat-checkbox` API surface.
266
377
 
267
378
  - **Import**: `import { FuiCheckboxComponent } from 'formaui/components/checkbox'`
268
379
  - **Selector**: `fui-checkbox`
@@ -277,12 +388,12 @@ A checkbox component with full Angular Reactive Forms support. Compatible with A
277
388
  | indeterminate | boolean | false | no |
278
389
  | required | boolean | false | no |
279
390
  | labelPosition | FuiCheckboxLabelPosition | 'after' | no |
280
- | name | string | null | null | no |
281
- | aria-label | string | null | null | no |
282
- | aria-labelledby | string | null | null | no |
283
- | aria-describedby | string | null | null | no |
391
+ | name | string \| null | null | no |
392
+ | aria-label | string \| null | null | no |
393
+ | aria-labelledby | string \| null | null | no |
394
+ | aria-describedby | string \| null | null | no |
284
395
  | disableRipple | boolean | false | no |
285
- | errorStateMatcher | ErrorStateMatcher | null | null | no |
396
+ | errorStateMatcher | ErrorStateMatcher \| null | null | no |
286
397
 
287
398
  #### Outputs
288
399
 
@@ -291,10 +402,96 @@ A checkbox component with full Angular Reactive Forms support. Compatible with A
291
402
  | change | FuiCheckboxChange |
292
403
  | indeterminateChange | boolean |
293
404
 
405
+ ### Usage
406
+
407
+ ```html
408
+ <!-- Basic checkbox with projected label -->
409
+ <fui-checkbox>Accept terms and conditions</fui-checkbox>
410
+
411
+ <!-- Two-way binding with ngModel -->
412
+ <fui-checkbox [(ngModel)]="subscribed">Subscribe to newsletter</fui-checkbox>
413
+
414
+ <!-- Reactive forms -->
415
+ <fui-checkbox formControlName="acceptTerms">
416
+ I accept the <a href="/terms">terms</a>
417
+ </fui-checkbox>
418
+
419
+ <!-- Indeterminate (e.g. "select all" with partial selection) -->
420
+ <fui-checkbox
421
+ [checked]="allSelected()"
422
+ [indeterminate]="someSelected() && !allSelected()"
423
+ (change)="toggleAll($event.checked)">
424
+ Select all
425
+ </fui-checkbox>
426
+
427
+ <!-- Label position and disabled -->
428
+ <fui-checkbox labelPosition="before" disabled>Disabled option</fui-checkbox>
429
+ ```
430
+
431
+ ### Notes
432
+
433
+ - **Accessibility:** Renders a native `<input type="checkbox">` under the hood, so keyboard (Space to toggle) and screen-reader support come for free. `aria-invalid`, `aria-required`, `aria-label`, `aria-labelledby`, and `aria-describedby` are honored.
434
+ - **Integration:** Use standalone or inside a form. Does **not** need `fui-form-field` — the checkbox is self-labeling via projected content.
435
+ - **Indeterminate vs checked:** `indeterminate` is a visual third state — it does not change the form value. Toggling the checkbox clears `indeterminate` and emits a normal `change` event.
436
+ - **Readonly vs disabled:** `readonly` keeps the checkbox focusable and announced but blocks user changes. `disabled` removes it from the tab order and greys it out.
437
+ - Emits `change: FuiCheckboxChange` (`{ source, checked }`) and `indeterminateChange: boolean`.
438
+
439
+ ---
440
+
441
+ ## chip
442
+
443
+ A compact element for representing tags, filters, or selections, with optional leading icon. Chips can be made selectable (toggle) and/or removable, and come in several semantic color variants and two sizes.
444
+
445
+ - **Import**: `import { FuiChipComponent } from 'formaui/components/chip'`
446
+ - **Selector**: `fui-chip`
447
+
448
+ #### Inputs
449
+
450
+ | Name | Type | Default | Required |
451
+ |------|------|---------|----------|
452
+ | variant | FuiChipVariant | 'primary' | no |
453
+ | size | FuiChipSize | 'md' | no |
454
+ | icon | string \| null | null | no |
455
+ | disabled | boolean | false | no |
456
+ | label | string | - | yes |
457
+
458
+ #### Outputs
459
+
460
+ | Name | Type |
461
+ |------|------|
462
+ | removed | FuiChipRemoveEvent |
463
+ | selectedChange | boolean |
464
+
465
+ ### Usage
466
+
467
+ ```html
468
+ <!-- Basic chip -->
469
+ <fui-chip label="Default" />
470
+
471
+ <!-- With variant, size, and leading icon -->
472
+ <fui-chip label="Active" variant="success" size="sm" icon="check" />
473
+
474
+ <!-- Selectable (toggles on click/Enter/Space) -->
475
+ <fui-chip label="Filter" [selectable]="true" [selected]="isActive" (selectedChange)="isActive = $event" />
476
+
477
+ <!-- Removable -->
478
+ <fui-chip label="Tag" [removable]="true" (removed)="onRemove($event)" />
479
+ ```
480
+
481
+ ### Notes
482
+
483
+ - **Accessibility:** When `selectable`, the host gets `role="option"` with `aria-selected`/`aria-pressed` reflecting the toggle state. The host is focusable (`tabindex="0"`) when `selectable` or `removable`. The remove button carries an `aria-label` (default `Remove {label}`) and the decorative icons are `aria-hidden`.
484
+ - **Inputs:** `label` is required. `variant` is one of `primary | secondary | success | warning | danger | info` (invalid values fall back to `primary`); `size` is `sm | md` (default `md`); `icon` sets an optional leading `fui-icon` name.
485
+ - **Selection:** Clicking, Enter, or Space toggles a selectable chip and emits `selectedChange: boolean`. `selected` seeds the internal state. A `disabled` chip ignores all interaction.
486
+ - **Removal:** When `removable` and not `disabled`, a remove button is shown; activating it emits `removed: FuiChipRemoveEvent` (`{ chip }`) and stops click propagation so it doesn't also toggle selection.
487
+ - **i18n:** The remove button label comes from `FuiChipIntl.removeAriaLabel(label)`; override it to localize.
488
+
294
489
  ---
295
490
 
296
491
  ## data-table
297
492
 
493
+ A feature-rich data grid for tabular data: column configuration, sticky columns, sorting, filtering, row selection, row highlighting, and badge-based label rendering. Generic over the row type `T`.
494
+
298
495
  - **Import**: `import { FuiAdvancedDataTableComponent } from 'formaui/components/data-table'`
299
496
  - **Selector**: `fui-advanced-data-table`
300
497
 
@@ -303,9 +500,10 @@ A checkbox component with full Angular Reactive Forms support. Compatible with A
303
500
  | Name | Type | Default | Required |
304
501
  |------|------|---------|----------|
305
502
  | data | T[] | [] | no |
306
- | tableAriaLabel | string | undefined | undefined | no |
307
- | emptyMessage | string | undefined | undefined | no |
308
- | sort | { field: string; direction: 'ASC' | 'DESC' } | null | null | no |
503
+ | density | AdvancedDataTableDensity | 'standard' | no |
504
+ | tableAriaLabel | string \| undefined | undefined | no |
505
+ | emptyMessage | string \| undefined | undefined | no |
506
+ | sort | { field: string; direction: 'ASC' \| 'DESC' } \| null | null | no |
309
507
  | filters | ColumnFilter[] | [] | no |
310
508
  | config | AdvancedDataTableConfig | - | yes |
311
509
 
@@ -313,14 +511,64 @@ A checkbox component with full Angular Reactive Forms support. Compatible with A
313
511
 
314
512
  | Name | Type |
315
513
  |------|------|
316
- | sortChange | { field: string; direction: 'ASC' | 'DESC' } | null |
514
+ | sortChange | { field: string; direction: 'ASC' \| 'DESC' } \| null |
317
515
  | filtersChange | ColumnFilter[] |
318
516
  | rowDblClick | T |
319
517
 
518
+ ### Usage
519
+
520
+ ```html
521
+ <!-- Minimal table -->
522
+ <fui-advanced-data-table [config]="tableConfig" [data]="rows" />
523
+ ```
524
+
525
+ ```typescript
526
+ tableConfig: AdvancedDataTableConfig = {
527
+ headerSticky: true,
528
+ areRowsSelectable: false,
529
+ headers: [
530
+ { field: 'id', label: 'ID', type: 'number', hasSort: true },
531
+ { field: 'name', label: 'Name', type: 'string', hasSort: true, hasFilter: true },
532
+ { field: 'email', label: 'Email', type: 'string', hasFilter: true },
533
+ ],
534
+ };
535
+ rows: User[] = [ /* ... */ ];
536
+ ```
537
+
538
+ ```html
539
+ <!-- Full: sort, filters, double-click handler, custom trackBy -->
540
+ <fui-advanced-data-table
541
+ [config]="tableConfig"
542
+ [data]="rows()"
543
+ [sort]="currentSort()"
544
+ [filters]="activeFilters()"
545
+ [trackBy]="trackById"
546
+ [enableRowHighlight]="true"
547
+ (sortChange)="currentSort.set($event)"
548
+ (filtersChange)="activeFilters.set($event)"
549
+ (rowDblClick)="openDetails($event)" />
550
+ ```
551
+
552
+ ```typescript
553
+ // Track-by for performance with stable-keyed rows
554
+ trackById = (_: number, row: User) => row.id;
555
+ ```
556
+
557
+ ### Notes
558
+
559
+ - **Accessibility:** Renders a native `<table>` with `aria-label` from `[tableAriaLabel]` (default: `'Data table'`). Sort headers are button elements with ARIA sort state. A live region announces sort/filter changes.
560
+ - **Integration:** Pass `config: AdvancedDataTableConfig` (required) and `data: T[]`. Column types drive cell rendering — `'label'` columns render a `fui-badge` using the per-column `labels` config.
561
+ - **Sticky columns:** `stickyColumnStart: true` on consecutive leading columns pins them at the start; `stickyColumnEnd: true` on consecutive trailing columns pins them at the end. The first non-sticky column breaks the streak.
562
+ - **Sort/filter:** State is fully controlled — the component emits `sortChange` and `filtersChange` but does not mutate `data`. Apply sort and filter server-side or client-side in the parent.
563
+ - **Row selection:** Enable via `config.areRowsSelectable: true`. Selected indices are tracked internally; use `enableRowHighlight` separately for click-to-highlight without selection checkboxes.
564
+ - Performance: pass a stable `[trackBy]` for large datasets — the default tracks by index, which invalidates rows when the array is reordered.
565
+
320
566
  ---
321
567
 
322
568
  ## date-picker
323
569
 
570
+ A date input with calendar overlay. Supports single-date or date-range selection, min/max constraints, custom date filters, and localised formatting. Integrates with `fui-form-field` and Reactive Forms (including built-in `Validator` for min/max/filter errors).
571
+
324
572
  - **Import**: `import { FuiDatePickerComponent } from 'formaui/components/date-picker'`
325
573
  - **Selector**: `fui-date-picker`
326
574
 
@@ -328,11 +576,12 @@ A checkbox component with full Angular Reactive Forms support. Compatible with A
328
576
 
329
577
  | Name | Type | Default | Required |
330
578
  |------|------|---------|----------|
331
- | min | Date | null | null | no |
332
- | max | Date | null | null | no |
333
- | dateFilter | DateFilterFn | null | null | no |
334
- | startAt | Date | null | null | no |
335
- | errorStateMatcher | ErrorStateMatcher | null | null | no |
579
+ | min | Date \| null | null | no |
580
+ | max | Date \| null | null | no |
581
+ | dateFilter | DateFilterFn \| null | null | no |
582
+ | startAt | Date \| null | null | no |
583
+ | errorStateMatcher | ErrorStateMatcher \| null | null | no |
584
+ | presets | DatePickerPreset[] | [] | no |
336
585
 
337
586
  #### Outputs
338
587
 
@@ -342,10 +591,81 @@ A checkbox component with full Angular Reactive Forms support. Compatible with A
342
591
  | dateChange | DatePickerModelValue |
343
592
  | openedChange | boolean |
344
593
 
594
+ ### Usage
595
+
596
+ ```html
597
+ <!-- Single date inside form-field -->
598
+ <fui-form-field>
599
+ <fui-label>Birth date</fui-label>
600
+ <fui-date-picker placeholder="DD/MM/YYYY" [formControl]="birthDateControl" />
601
+ <fui-error>Birth date is required</fui-error>
602
+ </fui-form-field>
603
+
604
+ <!-- Min/max and custom filter (disable weekends) -->
605
+ <fui-form-field>
606
+ <fui-label>Appointment</fui-label>
607
+ <fui-date-picker
608
+ [formControl]="appointmentControl"
609
+ [min]="today"
610
+ [max]="maxBookingDate"
611
+ [dateFilter]="isWeekday" />
612
+ </fui-form-field>
613
+
614
+ <!-- Range mode -->
615
+ <fui-form-field>
616
+ <fui-label>Stay period</fui-label>
617
+ <fui-date-picker [range]="true" [formControl]="stayControl" />
618
+ </fui-form-field>
619
+ ```
620
+
621
+ ```typescript
622
+ // In the component class
623
+ readonly today = new Date();
624
+ readonly isWeekday = (d: Date): boolean => d.getDay() !== 0 && d.getDay() !== 6;
625
+ ```
626
+
627
+ ### Notes
628
+
629
+ - **Accessibility:** The calendar panel is keyboard-navigable (Arrow keys across days, PageUp/Down across months, Home/End), Escape closes the panel, and Enter selects. The input supports typing with an applied input mask based on `format`.
630
+ - **Integration:** Use inside `fui-form-field`. Implements `FuiFormFieldControl` and `Validator` — validation errors (`dateMin`, `dateMax`, `dateFilter`) are attached to the form control automatically and picked up by `ErrorStateMatcher`.
631
+ - **Value shape:** single mode emits `Date | null`; range mode emits `{ start: Date | null; end: Date | null } | null`. Range auto-swaps if the user picks the end date before the start.
632
+ - **Formatting:** `format` defaults to `'DD/MM/YYYY'`. The input mask matches the format; the panel is rendered by the internal `FuiCalendarComponent`. Change `firstDayOfWeek` to shift the week start (0 = Sunday, 1 = Monday — the default).
633
+ - Uses the overlay CDK for positioning; the panel flips above the input if there is no room below.
634
+ - Emits `dateChange`, `valueChange`, `openedChange`.
635
+
636
+ ### Sub-components
637
+
638
+ #### FuiCalendarComponent
639
+
640
+ - **Selector**: `fui-calendar`
641
+
642
+ ##### Inputs
643
+
644
+ | Name | Type | Default | Required |
645
+ |------|------|---------|----------|
646
+ | selected | Date \| null | null | no |
647
+ | rangeStart | Date \| null | null | no |
648
+ | rangeEnd | Date \| null | null | no |
649
+ | min | Date \| null | null | no |
650
+ | max | Date \| null | null | no |
651
+ | dateFilter | DateFilterFn \| null | null | no |
652
+ | startAt | Date \| null | null | no |
653
+ | hoveredDate | Date \| null | null | no |
654
+
655
+ ##### Outputs
656
+
657
+ | Name | Type |
658
+ |------|------|
659
+ | dateSelected | Date |
660
+ | dateHovered | Date \| null |
661
+ | monthChanged | Date |
662
+
345
663
  ---
346
664
 
347
665
  ## divider
348
666
 
667
+ A thin separator line for splitting content, either horizontally or vertically. Optional projected content renders as a centered (or aligned) label with the line drawn on either side.
668
+
349
669
  - **Import**: `import { FuiDividerComponent } from 'formaui/components/divider'`
350
670
  - **Selector**: `fui-divider`
351
671
 
@@ -356,10 +676,35 @@ A checkbox component with full Angular Reactive Forms support. Compatible with A
356
676
  | orientation | FuiDividerOrientation | 'horizontal' | no |
357
677
  | textAlign | FuiDividerTextAlign | 'center' | no |
358
678
 
679
+ ### Usage
680
+
681
+ ```html
682
+ <!-- Horizontal divider -->
683
+ <fui-divider />
684
+
685
+ <!-- Vertical divider -->
686
+ <fui-divider orientation="vertical" />
687
+
688
+ <!-- Inset (indented) divider -->
689
+ <fui-divider [inset]="true" />
690
+
691
+ <!-- With text label -->
692
+ <fui-divider textAlign="start">OR</fui-divider>
693
+ ```
694
+
695
+ ### Notes
696
+
697
+ - **Accessibility:** Always renders with `role="separator"` and `aria-orientation` set to the current orientation.
698
+ - **Orientation:** `orientation` is `horizontal` (default) or `vertical`. The text label is only rendered for horizontal dividers that have projected content.
699
+ - **Text label:** Project any content to add a label; `textAlign` (`start | center | end`, default `center`) positions it. Content presence is detected after render, so an empty divider stays a plain line.
700
+ - **Inset:** `[inset]="true"` adds indentation, useful for dividers inside lists or padded containers.
701
+
359
702
  ---
360
703
 
361
704
  ## drawer
362
705
 
706
+ A panel that slides in from an edge of the screen to present complementary content or actions. Supports left/right/top/bottom positions, overlay or push modes, an optional backdrop, and a built-in header with title and close button.
707
+
363
708
  - **Import**: `import { FuiDrawerComponent } from 'formaui/components/drawer'`
364
709
  - **Selector**: `fui-drawer`
365
710
 
@@ -374,8 +719,8 @@ A checkbox component with full Angular Reactive Forms support. Compatible with A
374
719
  | closeOnBackdropClick | boolean | true | no |
375
720
  | closeOnEsc | boolean | true | no |
376
721
  | showCloseButton | boolean | true | no |
377
- | ariaLabel | string | null | null | no |
378
- | ariaLabelledBy | string | null | null | no |
722
+ | ariaLabel | string \| null | null | no |
723
+ | ariaLabelledBy | string \| null | null | no |
379
724
 
380
725
  #### Outputs
381
726
 
@@ -384,10 +729,224 @@ A checkbox component with full Angular Reactive Forms support. Compatible with A
384
729
  | openedChange | boolean |
385
730
  | closed | void |
386
731
 
732
+ ### Usage
733
+
734
+ ```html
735
+ <!-- Backdrop-driven overlay drawer with two-way open binding -->
736
+ <fui-drawer [(opened)]="isOpen" position="right" mode="overlay" size="md" title="Filters" (closed)="onClosed()">
737
+ <p>Drawer body content goes here.</p>
738
+
739
+ <div drawerFooter>
740
+ <button fuiButton variant="secondary" (click)="isOpen = false">Cancel</button>
741
+ <button fuiButton (click)="apply()">Apply</button>
742
+ </div>
743
+ </fui-drawer>
744
+
745
+ <!-- Imperative control via template ref -->
746
+ <fui-drawer #drawer position="left" [hasBackdrop]="false" ariaLabel="Navigation">
747
+ <nav>...</nav>
748
+ </fui-drawer>
749
+ <button fuiButton (click)="drawer.toggle()">Toggle</button>
750
+ ```
751
+
752
+ ### Notes
753
+
754
+ - **Accessibility:** Renders as `role="dialog"` and sets `aria-modal="true"` while open. The visible `title` is exposed as `aria-label` unless `ariaLabel`/`ariaLabelledBy` are provided. Implements a focus trap (Tab/Shift+Tab cycle within the panel), focuses the first tabbable element on open, and restores focus to the previously focused element on close.
755
+ - **Open state:** `opened` is an input with matching `openedChange` output (two-way `[(opened)]`). The component also exposes imperative `open()`, `close()`, and `toggle()` methods, and emits `closed` when dismissed.
756
+ - **Content projection:** Default `<ng-content>` fills the body; project a footer via the `drawerFooter` attribute. The header (title + close button) renders automatically when `title` or `showCloseButton` is set.
757
+ - **Dismissal:** `closeOnBackdropClick` (default `true`) closes on backdrop click and `closeOnEsc` (default `true`) closes on Escape. `hasBackdrop` toggles the backdrop element.
758
+ - **Sizing:** `size` accepts named tokens `sm` (320px), `md` (480px, default), `lg` (640px), `full` (100%), or any custom CSS length string applied along the drawer's main axis.
759
+ - **i18n:** The close button label comes from `FuiDrawerIntl.closeAriaLabel` ("Close drawer"), overridable via the injectable intl service.
760
+
761
+ ---
762
+
763
+ ## dropdown-menu
764
+
765
+ A dropdown menu component that provides a list of options or actions. Designed to work with external triggers using the fuiDropdownMenuTrigger directive.
766
+
767
+ - **Import**: `import { FuiDropdownMenuComponent } from 'formaui/components/dropdown-menu'`
768
+ - **Selector**: `fui-dropdown-menu`
769
+
770
+ #### Inputs
771
+
772
+ | Name | Type | Default | Required |
773
+ |------|------|---------|----------|
774
+ | position | FuiDropdownMenuPosition | 'bottom-start' | no |
775
+ | size | FuiDropdownMenuSize | 'md' | no |
776
+ | closeOnClickOutside | boolean | true | no |
777
+ | disabled | boolean | false | no |
778
+ | attachToBody | boolean | true | no |
779
+
780
+ #### Outputs
781
+
782
+ | Name | Type |
783
+ |------|------|
784
+ | openChange | boolean |
785
+ | itemSelected | Event |
786
+
787
+ ### Sub-components
788
+
789
+ #### FuiDropdownMenuItemComponent
790
+
791
+ - **Selector**: `fui-dropdown-menu-item`
792
+
793
+ ##### Inputs
794
+
795
+ | Name | Type | Default | Required |
796
+ |------|------|---------|----------|
797
+ | variant | DropdownMenuItemVariant | 'default' | no |
798
+ | disabled | boolean | false | no |
799
+
800
+ ##### Outputs
801
+
802
+ | Name | Type |
803
+ |------|------|
804
+ | selected | Event |
805
+
806
+ #### FuiDropdownMenuTriggerDirective
807
+
808
+ - **Selector**: `[fuiDropdownMenuTrigger]`
809
+
810
+ ##### Inputs
811
+
812
+ | Name | Type | Default | Required |
813
+ |------|------|---------|----------|
814
+ | fuiDropdownMenuTriggerFor | FuiDropdownMenuComponent \| null | - | no |
815
+ | menuTriggerData | unknown | - | no |
816
+
817
+ ---
818
+
819
+ ## dual-tier-navigation
820
+
821
+ A two-tier sidebar navigation: a narrow vertical bar of top-level icon triggers, plus a flyout panel that reveals the selected item's nested submenu. Built from a single `MenuItem[]` data model and designed for app-level navigation with deep, expandable sub-trees.
822
+
823
+ - **Import**: `import { FuiDualTierNavigationComponent } from 'formaui/components/dual-tier-navigation'`
824
+ - **Selector**: `fui-dual-tier-navigation`
825
+
826
+ #### Inputs
827
+
828
+ | Name | Type | Default | Required |
829
+ |------|------|---------|----------|
830
+ | items | MenuItem[] | [] | no |
831
+
832
+ #### Outputs
833
+
834
+ | Name | Type |
835
+ |------|------|
836
+ | itemClick | MenuItem |
837
+
838
+ ### Usage
839
+
840
+ ```html
841
+ <fui-dual-tier-navigation [items]="navItems" ariaLabel="Main navigation" (itemClick)="onItemClick($event)" />
842
+ ```
843
+
844
+ ```typescript
845
+ import { MenuItem } from '@raintonic/formaui/core';
846
+
847
+ navItems: MenuItem[] = [
848
+ {
849
+ label: 'Products',
850
+ icon: 'package',
851
+ items: [
852
+ { label: 'List', routerLink: '/products' },
853
+ {
854
+ label: 'Categories',
855
+ items: [{ label: 'Active', routerLink: '/categories/active' }],
856
+ },
857
+ ],
858
+ },
859
+ { label: 'Dashboard', icon: 'house', routerLink: '/dashboard' },
860
+ { label: 'Settings', icon: 'gear', command: () => openSettings() },
861
+ ];
862
+ ```
863
+
864
+ ### Notes
865
+
866
+ - **Data-driven:** The whole structure is built from the `items: MenuItem[]` input — top-level entries become bar triggers and their `items` populate the flyout submenu. Items with `visible: false` are filtered out, and missing `id`s are auto-generated. The single public output is `itemClick`, which emits the activated `MenuItem`.
867
+ - **Composition:** The package exports the trigger (`fui-dual-tier-nav-trigger`), submenu (`fui-dual-tier-nav-submenu`), submenu header (`fui-dual-tier-nav-submenu-header`), and submenu item (`fui-dual-tier-nav-submenu-item`). These are internal building blocks rendered by `fui-dual-tier-navigation` from the data model; the typical consumer only uses the top-level component.
868
+ - **Accessibility:** Host is `role="navigation"` with a configurable `ariaLabel` (default "Dual tier navigation"). The bar and flyout use `role="menu"` / `role="menuitem"` semantics with `aria-haspopup`, `aria-expanded`, and `aria-controls` wiring between a trigger and its flyout.
869
+ - **Keyboard navigation:** Triggers support Enter/Space/ArrowRight to open the flyout (or activate leaf items), ArrowUp/ArrowDown to move between triggers, Home/End to jump, and ArrowLeft/Escape to close. Inside the flyout, ArrowUp/ArrowDown/Home/End move between items, ArrowRight/Enter/Space expand a parent, and ArrowLeft collapses or closes the panel. Focus moves into the flyout on open and returns to the trigger on close.
870
+ - **Item behavior:** Triggers and submenu items render as router links (`routerLink`, with `queryParams`/`fragment`/`target`), plain buttons that fire `command`, or expandable parents based on the `MenuItem` shape. `disabled` items are non-interactive, and submenu items reflect the active route via `routerLinkActive`. Nested submenus animate open/closed and can start expanded via `expanded: true`.
871
+
872
+ ### Sub-components
873
+
874
+ #### DualTierNavSubmenuHeaderComponent
875
+
876
+ - **Selector**: `fui-dual-tier-nav-submenu-header`
877
+
878
+ ##### Inputs
879
+
880
+ | Name | Type | Default | Required |
881
+ |------|------|---------|----------|
882
+ | title | string | - | yes |
883
+
884
+ ##### Outputs
885
+
886
+ | Name | Type |
887
+ |------|------|
888
+ | close | void |
889
+
890
+ #### DualTierNavSubmenuItemComponent
891
+
892
+ - **Selector**: `fui-dual-tier-nav-submenu-item`
893
+
894
+ ##### Inputs
895
+
896
+ | Name | Type | Default | Required |
897
+ |------|------|---------|----------|
898
+ | item | MenuItem | - | yes |
899
+
900
+ ##### Outputs
901
+
902
+ | Name | Type |
903
+ |------|------|
904
+ | clickItem | MenuItem |
905
+ | toggleExpand | { item: MenuItem; sourceEl?: HTMLElement } |
906
+ | keydown | KeyboardEvent |
907
+
908
+ #### DualTierNavSubmenuComponent
909
+
910
+ - **Selector**: `fui-dual-tier-nav-submenu`
911
+
912
+ ##### Inputs
913
+
914
+ | Name | Type | Default | Required |
915
+ |------|------|---------|----------|
916
+ | items | MenuItem[] | [] | no |
917
+ | title | string | - | yes |
918
+
919
+ ##### Outputs
920
+
921
+ | Name | Type |
922
+ |------|------|
923
+ | itemClick | MenuItem |
924
+ | closePanel | void |
925
+
926
+ #### DualTierNavTriggerComponent
927
+
928
+ - **Selector**: `fui-dual-tier-nav-trigger`
929
+
930
+ ##### Inputs
931
+
932
+ | Name | Type | Default | Required |
933
+ |------|------|---------|----------|
934
+ | item | MenuItem | - | yes |
935
+
936
+ ##### Outputs
937
+
938
+ | Name | Type |
939
+ |------|------|
940
+ | itemClick | MenuItem |
941
+ | toggle | Event |
942
+ | keydown | KeyboardEvent |
943
+
387
944
  ---
388
945
 
389
946
  ## empty-state
390
947
 
948
+ A placeholder shown when a region has no content yet, such as an empty list, no search results, or a first-run screen. Displays an optional icon, title, and description, with projected slots for extra content and actions.
949
+
391
950
  - **Import**: `import { FuiEmptyStateComponent } from 'formaui/components/empty-state'`
392
951
  - **Selector**: `fui-empty-state`
393
952
 
@@ -395,10 +954,31 @@ A checkbox component with full Angular Reactive Forms support. Compatible with A
395
954
 
396
955
  | Name | Type | Default | Required |
397
956
  |------|------|---------|----------|
398
- | icon | string | null | null | no |
399
- | title | string | null | null | no |
400
- | description | string | null | null | no |
401
- | size | 'sm' | 'md' | 'lg' | 'md' | no |
957
+ | icon | string \| null | null | no |
958
+ | title | string \| null | null | no |
959
+ | description | string \| null | null | no |
960
+ | size | 'sm' \| 'md' \| 'lg' | 'md' | no |
961
+
962
+ ### Usage
963
+
964
+ ```html
965
+ <!-- Icon, title, and description via inputs -->
966
+ <fui-empty-state
967
+ icon="inbox"
968
+ title="No messages"
969
+ description="When you receive messages they will show up here."
970
+ size="md"
971
+ >
972
+ <button fuiButton (click)="refresh()">Refresh</button>
973
+ </fui-empty-state>
974
+ ```
975
+
976
+ ### Notes
977
+
978
+ - **Accessibility:** The host has `role="status"`, so updates are announced politely by screen readers.
979
+ - **Inputs:** `icon` (fui-icon name), `title`, and `description` are all optional (`null` by default) — render only the parts you need. `size` is `sm | md | lg` (default `md`).
980
+ - **Icon sizing:** The icon size is derived from `size` — `sm` uses an `md` icon, while `md`/`lg` use an `lg` icon.
981
+ - **Content projection:** Projected content (e.g. action buttons) is supported alongside the icon/title/description.
402
982
 
403
983
  ---
404
984
 
@@ -430,7 +1010,7 @@ A file upload component with drag-and-drop support, file previews, and validatio
430
1010
 
431
1011
  ## form-field
432
1012
 
433
- A form field wrapper component that provides consistent styling and behavior for form controls. Follows Angular Material patterns with Carbon Design System styling.
1013
+ A wrapper component that provides consistent layout, labeling, validation, and accessibility for form controls. Works with any component implementing the `FuiFormFieldControl` interface (select, input, date-picker, etc.).
434
1014
 
435
1015
  - **Import**: `import { FuiFormFieldComponent } from 'formaui/components/form-field'`
436
1016
  - **Selector**: `fui-form-field`
@@ -441,6 +1021,33 @@ A form field wrapper component that provides consistent styling and behavior for
441
1021
  |------|------|---------|----------|
442
1022
  | appearance | FormFieldAppearance | 'outline' | no |
443
1023
 
1024
+ ### Usage
1025
+
1026
+ ```html
1027
+ <!-- Basic form field with input -->
1028
+ <fui-form-field>
1029
+ <fui-label>Email</fui-label>
1030
+ <input fuiInput type="email" [formControl]="emailControl" />
1031
+ <fui-hint>We'll never share your email</fui-hint>
1032
+ <fui-error>Please enter a valid email</fui-error>
1033
+ </fui-form-field>
1034
+
1035
+ <!-- Form field with prefix and suffix -->
1036
+ <fui-form-field>
1037
+ <fui-label>Price</fui-label>
1038
+ <span fuiPrefix>$</span>
1039
+ <input fuiInput type="number" [formControl]="priceControl" />
1040
+ <span fuiSuffix>.00</span>
1041
+ </fui-form-field>
1042
+ ```
1043
+
1044
+ ### Notes
1045
+
1046
+ - `fui-error` is shown only when the form control is in an error state
1047
+ - `fui-hint` is hidden when an error is displayed
1048
+ - Use `fuiPrefix` and `fuiSuffix` directives on any element for adornments
1049
+ - The form field automatically associates the label with the control for accessibility
1050
+
444
1051
  ### Sub-components
445
1052
 
446
1053
  #### FuiErrorComponent
@@ -500,7 +1107,7 @@ A wrapper component for Phosphor Icons with consistent sizing and styling. Provi
500
1107
 
501
1108
  ## input
502
1109
 
503
- An input directive that integrates seamlessly with fui-form-field and Angular Forms. Follows Angular Material patterns with Carbon Design System styling.
1110
+ A directive that turns a native `<input>` or `<textarea>` into a FormaUI form control. Integrates with `fui-form-field` for label/hint/error UI and supports Reactive Forms and template-driven forms out of the box.
504
1111
 
505
1112
  - **Import**: `import { FuiInputDirective } from 'formaui/components/input'`
506
1113
  - **Selector**: `input[fuiInput], textarea[fuiInput], select[fuiInput]`
@@ -510,21 +1117,61 @@ An input directive that integrates seamlessly with fui-form-field and Angular Fo
510
1117
  | Name | Type | Default | Required |
511
1118
  |------|------|---------|----------|
512
1119
  | type | FuiInputType | 'text' | no |
513
- | maxlength | number | null | null | no |
514
- | minlength | number | null | null | no |
515
- | pattern | string | null | null | no |
516
- | errorStateMatcher | ErrorStateMatcher | null | null | no |
1120
+ | maxlength | number \| null | null | no |
1121
+ | minlength | number \| null | null | no |
1122
+ | pattern | string \| null | null | no |
1123
+ | errorStateMatcher | ErrorStateMatcher \| null | null | no |
517
1124
 
518
1125
  #### Outputs
519
1126
 
520
1127
  | Name | Type |
521
1128
  |------|------|
522
- | valueChange | string |
1129
+ | valueChange | string \| number \| null |
1130
+
1131
+ ### Usage
1132
+
1133
+ ```html
1134
+ <!-- Basic input inside form-field -->
1135
+ <fui-form-field>
1136
+ <fui-label>Email</fui-label>
1137
+ <input fuiInput type="email" [formControl]="emailControl" />
1138
+ <fui-error>Please enter a valid email</fui-error>
1139
+ </fui-form-field>
1140
+
1141
+ <!-- Textarea variant -->
1142
+ <fui-form-field>
1143
+ <fui-label>Description</fui-label>
1144
+ <textarea fuiInput rows="4" [formControl]="descControl"></textarea>
1145
+ <fui-hint>Max 500 characters</fui-hint>
1146
+ </fui-form-field>
1147
+
1148
+ <!-- Password with toggle button -->
1149
+ <fui-form-field>
1150
+ <fui-label>Password</fui-label>
1151
+ <input fuiInput [type]="showPassword() ? 'text' : 'password'" [formControl]="pwdControl" />
1152
+ <button fuiSuffix fuiButton variant="tertiary" type="button" (click)="showPassword.set(!showPassword())">
1153
+ <fui-icon [name]="showPassword() ? 'eye-slash' : 'eye'" />
1154
+ </button>
1155
+ </fui-form-field>
1156
+
1157
+ <!-- Standalone input with template-driven forms -->
1158
+ <input fuiInput type="search" [(ngModel)]="query" placeholder="Search..." />
1159
+ ```
1160
+
1161
+ ### Notes
1162
+
1163
+ - **Accessibility:** `aria-invalid`, `aria-required`, `aria-disabled`, and `aria-readonly` are set automatically from state. `aria-describedby` is wired by `fui-form-field` to link hint and error messages.
1164
+ - **Integration:** Designed to be wrapped by `fui-form-field`. Implements `FuiFormFieldControl<string>` and provides `FUI_FORM_FIELD_CONTROL`, so the form-field picks up focus, empty, disabled, and error state automatically.
1165
+ - **Supported types:** `text`, `email`, `password`, `number`, `tel`, `url`, `search`, `date`, `time`, `datetime-local`. The directive also accepts `textarea[fuiInput]` and `select[fuiInput]`.
1166
+ - **Error state:** driven by `ErrorStateMatcher` — the default matcher flags errors when the control is invalid and touched or the parent form is submitted. Provide a custom matcher via `[errorStateMatcher]`.
1167
+ - **Native constraints:** `maxlength`, `minlength`, and `pattern` inputs pass through to native attributes for built-in browser validation.
523
1168
 
524
1169
  ---
525
1170
 
526
1171
  ## list
527
1172
 
1173
+ A vertical list container for displaying a collection of items. Supports plain (non-interactive) display, single- or multi-select listbox behaviour, optional row dividers, and full keyboard navigation. Items are projected as `fui-list-item` children.
1174
+
528
1175
  - **Import**: `import { FuiListComponent } from 'formaui/components/list'`
529
1176
  - **Selector**: `fui-list`
530
1177
 
@@ -540,6 +1187,38 @@ An input directive that integrates seamlessly with fui-form-field and Angular Fo
540
1187
  |------|------|
541
1188
  | selectionChange | FuiListSelectionChange |
542
1189
 
1190
+ ### Usage
1191
+
1192
+ ```html
1193
+ <!-- Plain list -->
1194
+ <fui-list>
1195
+ <fui-list-item>Inbox</fui-list-item>
1196
+ <fui-list-item>Drafts</fui-list-item>
1197
+ <fui-list-item>Sent</fui-list-item>
1198
+ </fui-list>
1199
+
1200
+ <!-- Single-select listbox with dividers -->
1201
+ <fui-list selectionMode="single" [dividers]="true" (selectionChange)="onChange($event)">
1202
+ <fui-list-item [value]="'a'">Option A</fui-list-item>
1203
+ <fui-list-item [value]="'b'">Option B</fui-list-item>
1204
+ <fui-list-item [value]="'c'" [disabled]="true">Option C</fui-list-item>
1205
+ </fui-list>
1206
+
1207
+ <!-- Multi-select -->
1208
+ <fui-list selectionMode="multi">
1209
+ <fui-list-item [value]="1">One</fui-list-item>
1210
+ <fui-list-item [value]="2">Two</fui-list-item>
1211
+ </fui-list>
1212
+ ```
1213
+
1214
+ ### Notes
1215
+
1216
+ - **Accessibility:** The container renders `role="listbox"` (with `aria-multiselectable` in `multi` mode) when `selectionMode` is not `none`, otherwise `role="list"`. Items render `role="option"` when selectable, otherwise `role="listitem"`, and expose `aria-selected`/`aria-disabled` accordingly.
1217
+ - **Keyboard:** Arrow Up/Down move focus across enabled items (wrapping), Home/End jump to first/last, and Enter/Space toggles selection. Disabled items are skipped.
1218
+ - **Selection:** Set `selectionMode` to `'none' | 'single' | 'multi'` (default `'none'`). `selectionChange` emits `{ source, value }` where `value` is the array of selected `value` inputs.
1219
+ - **Items:** Each `fui-list-item` takes a `value` (any type) and a `disabled` boolean input. Use `[interactive]="true"` on the list to make items focusable/hoverable without enabling selection.
1220
+ - **Theming:** `dividers` adds separators between items; interactive/selected/disabled states are styled via `fui-list--*` and `fui-list-item--*` classes driven by `--fui-*` custom properties.
1221
+
543
1222
  ### Sub-components
544
1223
 
545
1224
  #### FuiListItemComponent
@@ -555,63 +1234,6 @@ An input directive that integrates seamlessly with fui-form-field and Angular Fo
555
1234
 
556
1235
  ---
557
1236
 
558
- ## menu
559
-
560
- A dropdown menu component that provides a list of options or actions. Designed to work with external triggers using the fuiMenuTrigger directive.
561
-
562
- - **Import**: `import { FuiMenuComponent } from 'formaui/components/menu'`
563
- - **Selector**: `fui-menu`
564
-
565
- #### Inputs
566
-
567
- | Name | Type | Default | Required |
568
- |------|------|---------|----------|
569
- | position | FuiMenuPosition | 'bottom-start' | no |
570
- | size | FuiMenuSize | 'md' | no |
571
- | closeOnClickOutside | boolean | true | no |
572
- | closeOnEscape | boolean | true | no |
573
- | disabled | boolean | false | no |
574
- | attachToBody | boolean | true | no |
575
-
576
- #### Outputs
577
-
578
- | Name | Type |
579
- |------|------|
580
- | openChange | boolean |
581
- | itemSelected | Event |
582
-
583
- ### Sub-components
584
-
585
- #### FuiMenuItemComponent
586
-
587
- - **Selector**: `fui-menu-item`
588
-
589
- ##### Inputs
590
-
591
- | Name | Type | Default | Required |
592
- |------|------|---------|----------|
593
- | variant | MenuItemVariant | 'default' | no |
594
- | disabled | boolean | false | no |
595
-
596
- ##### Outputs
597
-
598
- | Name | Type |
599
- |------|------|
600
- | selected | Event |
601
-
602
- #### FuiMenuTriggerDirective
603
-
604
- - **Selector**: `[fuiMenuTrigger]`
605
-
606
- ##### Inputs
607
-
608
- | Name | Type | Default | Required |
609
- |------|------|---------|----------|
610
- | menuTriggerFor | FuiMenuComponent | null | - | no |
611
- | menuTriggerData | unknown | - | no |
612
-
613
- ---
614
-
615
1237
  ## number-input
616
1238
 
617
1239
  A numeric input component with increment/decrement buttons, full Angular Reactive Forms support, and FormField integration.
@@ -623,20 +1245,20 @@ A numeric input component with increment/decrement buttons, full Angular Reactiv
623
1245
 
624
1246
  | Name | Type | Default | Required |
625
1247
  |------|------|---------|----------|
626
- | min | number | null | null | no |
627
- | max | number | null | null | no |
628
- | precision | number | null | null | no |
1248
+ | min | number \| null | null | no |
1249
+ | max | number \| null | null | no |
1250
+ | precision | number \| null | null | no |
629
1251
  | disabled | boolean | false | no |
630
1252
  | readonly | boolean | false | no |
631
1253
  | showButtons | boolean | true | no |
632
1254
  | buttonLayout | NumberInputButtonLayout | 'horizontal' | no |
633
- | errorStateMatcher | ErrorStateMatcher | null | null | no |
1255
+ | errorStateMatcher | ErrorStateMatcher \| null | null | no |
634
1256
 
635
1257
  #### Outputs
636
1258
 
637
1259
  | Name | Type |
638
1260
  |------|------|
639
- | valueChange | number | null |
1261
+ | valueChange | number \| null |
640
1262
 
641
1263
  ---
642
1264
 
@@ -664,7 +1286,7 @@ A pagination component that handles navigation through pages with: - Previous/Ne
664
1286
 
665
1287
  ## password-input
666
1288
 
667
- A password input component with visibility toggle and optional strength meter. Integrates with fui-form-field and Angular Forms.
1289
+ A password input component with visibility toggle. Integrates with fui-form-field and Angular Forms.
668
1290
 
669
1291
  - **Import**: `import { FuiPasswordInputComponent } from 'formaui/components/password-input'`
670
1292
  - **Selector**: `fui-password-input`
@@ -675,8 +1297,7 @@ A password input component with visibility toggle and optional strength meter. I
675
1297
  |------|------|---------|----------|
676
1298
  | disabled | boolean | false | no |
677
1299
  | readonly | boolean | false | no |
678
- | showStrengthMeter | boolean | false | no |
679
- | errorStateMatcher | ErrorStateMatcher | null | null | no |
1300
+ | errorStateMatcher | ErrorStateMatcher \| null | null | no |
680
1301
 
681
1302
  ---
682
1303
 
@@ -736,13 +1357,15 @@ A progress bar component compatible with Angular Material's mat-progress-bar int
736
1357
  | value | number | 0 | no |
737
1358
  | bufferValue | number | 0 | no |
738
1359
  | color | ProgressBarColor | 'primary' | no |
739
- | aria-label | string | null | null | no |
740
- | aria-labelledby | string | null | null | no |
1360
+ | aria-label | string \| null | null | no |
1361
+ | aria-labelledby | string \| null | null | no |
741
1362
 
742
1363
  ---
743
1364
 
744
1365
  ## radio
745
1366
 
1367
+ Single-choice selection from a small set of options. Use `fui-radio-group` as the Reactive Forms control and `fui-radio-button` for each option.
1368
+
746
1369
  - **Import**: `import { FuiRadioButtonComponent } from 'formaui/components/radio'`
747
1370
  - **Selector**: `fui-radio-button`
748
1371
 
@@ -751,11 +1374,35 @@ A progress bar component compatible with Angular Material's mat-progress-bar int
751
1374
  | Name | Type | Default | Required |
752
1375
  |------|------|---------|----------|
753
1376
  | disabled | boolean | false | no |
754
- | disableRipple | boolean | false | no |
755
- | aria-label | string | null | null | no |
756
- | aria-labelledby | string | null | null | no |
1377
+ | aria-label | string \| null | null | no |
1378
+ | aria-labelledby | string \| null | null | no |
757
1379
  | value | unknown | - | yes |
758
1380
 
1381
+ ### Usage
1382
+
1383
+ ```html
1384
+ <!-- Vertical group with ngModel -->
1385
+ <fui-radio-group [(ngModel)]="plan" name="plan">
1386
+ <fui-radio-button [value]="'free'">Free</fui-radio-button>
1387
+ <fui-radio-button [value]="'pro'">Pro</fui-radio-button>
1388
+ <fui-radio-button [value]="'enterprise'">Enterprise</fui-radio-button>
1389
+ </fui-radio-group>
1390
+
1391
+ <!-- Reactive forms, horizontal layout, disabled option -->
1392
+ <fui-radio-group formControlName="shipping" orientation="horizontal" aria-label="Shipping method">
1393
+ <fui-radio-button [value]="'standard'">Standard</fui-radio-button>
1394
+ <fui-radio-button [value]="'express'">Express</fui-radio-button>
1395
+ <fui-radio-button [value]="'overnight'" disabled>Overnight (unavailable)</fui-radio-button>
1396
+ </fui-radio-group>
1397
+ ```
1398
+
1399
+ ### Notes
1400
+
1401
+ - **Accessibility:** The group sets `role="radiogroup"` and provides keyboard navigation — Arrow Up/Left and Arrow Down/Right move selection between enabled radios and wrap around. Only the selected radio is in the tab order (roving tabindex), matching WAI-ARIA radio group semantics. Provide `aria-label` or `aria-labelledby` on the group for context.
1402
+ - **Integration:** `fui-radio-group` is the `ControlValueAccessor` — bind `formControl`, `formControlName`, or `ngModel` on the **group**, not on individual buttons. `name` is auto-generated if omitted and propagated to child radios.
1403
+ - **Value type:** `value` on each radio is typed `unknown` — use any primitive or object. Comparison is strict `===` by default.
1404
+ - Emits `change: FuiRadioChange` (`{ source, value }`) on the group.
1405
+
759
1406
  ### Sub-components
760
1407
 
761
1408
  #### FuiRadioGroupComponent
@@ -768,9 +1415,9 @@ A progress bar component compatible with Angular Material's mat-progress-bar int
768
1415
  |------|------|---------|----------|
769
1416
  | orientation | FuiRadioOrientation | 'vertical' | no |
770
1417
  | disabled | boolean | false | no |
771
- | aria-label | string | null | null | no |
772
- | aria-labelledby | string | null | null | no |
773
- | errorStateMatcher | ErrorStateMatcher | null | null | no |
1418
+ | aria-label | string \| null | null | no |
1419
+ | aria-labelledby | string \| null | null | no |
1420
+ | errorStateMatcher | ErrorStateMatcher \| null | null | no |
774
1421
 
775
1422
  ##### Outputs
776
1423
 
@@ -782,7 +1429,7 @@ A progress bar component compatible with Angular Material's mat-progress-bar int
782
1429
 
783
1430
  ## select
784
1431
 
785
- A select component designed to work seamlessly with fui-form-field. Similar to Angular Material's mat-select integration with mat-form-field. Provides full Reactive Forms support with validation and error handling.
1432
+ A dropdown select component for single or multiple selection. Designed to work inside `fui-form-field` with full Reactive Forms support, keyboard navigation, and type-ahead search.
786
1433
 
787
1434
  - **Import**: `import { FuiSelectComponent } from 'formaui/components/select'`
788
1435
  - **Selector**: `fui-select`
@@ -791,7 +1438,7 @@ A select component designed to work seamlessly with fui-form-field. Similar to A
791
1438
 
792
1439
  | Name | Type | Default | Required |
793
1440
  |------|------|---------|----------|
794
- | errorStateMatcher | ErrorStateMatcher | null | null | no |
1441
+ | errorStateMatcher | ErrorStateMatcher \| null | null | no |
795
1442
 
796
1443
  #### Outputs
797
1444
 
@@ -801,28 +1448,53 @@ A select component designed to work seamlessly with fui-form-field. Similar to A
801
1448
  | selectionChange | FuiSelectChange |
802
1449
  | openedChange | boolean |
803
1450
 
1451
+ ### Usage
1452
+
1453
+ ```html
1454
+ <!-- Basic select inside form-field -->
1455
+ <fui-form-field>
1456
+ <fui-label>Country</fui-label>
1457
+ <fui-select placeholder="Choose a country" [formControl]="countryControl">
1458
+ <fui-option value="us">United States</fui-option>
1459
+ <fui-option value="uk">United Kingdom</fui-option>
1460
+ <fui-option value="de">Germany</fui-option>
1461
+ </fui-select>
1462
+ <fui-error>Country is required</fui-error>
1463
+ </fui-form-field>
1464
+
1465
+ <!-- Multiple selection -->
1466
+ <fui-form-field>
1467
+ <fui-label>Tags</fui-label>
1468
+ <fui-select multiple [formControl]="tagsControl">
1469
+ <fui-option value="angular">Angular</fui-option>
1470
+ <fui-option value="react">React</fui-option>
1471
+ <fui-option value="vue">Vue</fui-option>
1472
+ </fui-select>
1473
+ </fui-form-field>
1474
+ ```
1475
+
1476
+ ### Notes
1477
+
1478
+ - Always wrap in `fui-form-field` for label, error, and hint support
1479
+ - Options are projected as `<fui-option>` child elements
1480
+ - Supports keyboard navigation: Arrow keys, Home/End, Enter/Space, Escape
1481
+ - Type-ahead search: start typing to jump to matching options
1482
+ - Use `compareWith` input for custom object comparison
1483
+
804
1484
  ### Sub-components
805
1485
 
806
1486
  #### FuiOptionComponent
807
1487
 
808
1488
  - **Selector**: `fui-option`
809
1489
 
810
- ##### Inputs
811
-
812
- | Name | Type | Default | Required |
813
- |------|------|---------|----------|
814
- | value | unknown | undefined | no |
815
-
816
- ##### Outputs
817
-
818
- | Name | Type |
819
- |------|------|
820
- | selectionChange | void |
1490
+ No public inputs or outputs.
821
1491
 
822
1492
  ---
823
1493
 
824
1494
  ## side-panel
825
1495
 
1496
+ A slide-in side panel overlay with optional backdrop, focus trapping, and keyboard dismiss. Renders from the right edge of the viewport with configurable width and top offset.
1497
+
826
1498
  - **Import**: `import { FuiSidePanelComponent } from 'formaui/components/side-panel'`
827
1499
  - **Selector**: `fui-side-panel`
828
1500
 
@@ -830,8 +1502,8 @@ A select component designed to work seamlessly with fui-form-field. Similar to A
830
1502
 
831
1503
  | Name | Type | Default | Required |
832
1504
  |------|------|---------|----------|
833
- | ariaLabel | string | null | null | no |
834
- | ariaLabelledBy | string | null | null | no |
1505
+ | ariaLabel | string \| null | null | no |
1506
+ | ariaLabelledBy | string \| null | null | no |
835
1507
 
836
1508
  #### Outputs
837
1509
 
@@ -841,33 +1513,53 @@ A select component designed to work seamlessly with fui-form-field. Similar to A
841
1513
 
842
1514
  ---
843
1515
 
844
- ## sidebar
1516
+ ## sidebar-nav-menu
845
1517
 
846
- A flexible sidebar component following Carbon Design System principles. Provides navigation with Angular Material-like APIs and responsive behavior.
1518
+ A standalone sidebar navigation menu component with recursive, multi-level submenus. Inspired by PrimeNG's TieredMenu model with a minimal, structural approach.
847
1519
 
848
- - **Import**: `import { FuiSidebarComponent } from 'formaui/components/sidebar'`
849
- - **Selector**: `fui-sidebar`
1520
+ - **Import**: `import { FuiSidebarNavMenuComponent } from 'formaui/components/sidebar-nav-menu'`
1521
+ - **Selector**: `fui-sidebar-nav-menu`
850
1522
 
851
1523
  #### Inputs
852
1524
 
853
1525
  | Name | Type | Default | Required |
854
1526
  |------|------|---------|----------|
855
- | mode | FuiSidebarMode | 'side' | no |
856
- | position | FuiSidebarPosition | 'start' | no |
857
- | navItems | FuiSidebarNavItem[] | [] | no |
1527
+ | items | MenuItem[] | [] | no |
858
1528
 
859
1529
  #### Outputs
860
1530
 
861
1531
  | Name | Type |
862
1532
  |------|------|
863
- | openedChange | boolean |
864
- | navItemClick | FuiSidebarNavItem |
865
- | backdropClick | void |
1533
+ | itemClick | MenuItem |
1534
+
1535
+ ### Sub-components
1536
+
1537
+ #### FuiSidebarNavSearchComponent
1538
+
1539
+ - **Selector**: `fui-sidebar-nav-search`
1540
+
1541
+ ##### Inputs
1542
+
1543
+ | Name | Type | Default | Required |
1544
+ |------|------|---------|----------|
1545
+ | placeholder | string \| undefined | - | no |
1546
+
1547
+ #### SidebarNavSubmenuComponent
1548
+
1549
+ - **Selector**: `fui-sidebar-nav-submenu`
1550
+
1551
+ ##### Outputs
1552
+
1553
+ | Name | Type |
1554
+ |------|------|
1555
+ | itemClick | MenuItem |
866
1556
 
867
1557
  ---
868
1558
 
869
1559
  ## skeleton
870
1560
 
1561
+ A placeholder element that mimics the shape of content while it loads. Renders as a text line (optionally multiple lines), a circle, or a rectangle, with an optional shimmer animation.
1562
+
871
1563
  - **Import**: `import { FuiSkeletonComponent } from 'formaui/components/skeleton'`
872
1564
  - **Selector**: `fui-skeleton`
873
1565
 
@@ -876,9 +1568,33 @@ A flexible sidebar component following Carbon Design System principles. Provides
876
1568
  | Name | Type | Default | Required |
877
1569
  |------|------|---------|----------|
878
1570
  | variant | FuiSkeletonVariant | 'text' | no |
879
- | width | string | null | null | no |
880
- | height | string | null | null | no |
881
- | borderRadius | string | null | null | no |
1571
+ | width | string \| null | null | no |
1572
+ | height | string \| null | null | no |
1573
+ | borderRadius | string \| null | null | no |
1574
+
1575
+ ### Usage
1576
+
1577
+ ```html
1578
+ <!-- Text placeholder (default) -->
1579
+ <fui-skeleton />
1580
+
1581
+ <!-- Multiple text lines -->
1582
+ <fui-skeleton [lines]="3" />
1583
+
1584
+ <!-- Avatar circle -->
1585
+ <fui-skeleton variant="circle" width="40px" height="40px" />
1586
+
1587
+ <!-- Custom rectangle without animation -->
1588
+ <fui-skeleton variant="rect" width="100%" height="120px" borderRadius="8px" [animated]="false" />
1589
+ ```
1590
+
1591
+ ### Notes
1592
+
1593
+ - **Accessibility:** The host always exposes `role="status"`, `aria-busy="true"`, and `aria-label="Loading"` so assistive technology announces the loading state.
1594
+ - **Variants:** `variant` accepts `'text' | 'circle' | 'rect'` (default `'text'`). Each maps to a `fui-skeleton--*` class.
1595
+ - **Sizing:** `width`, `height`, and `borderRadius` accept any CSS length string and are applied inline only when set; otherwise the variant's default size is used.
1596
+ - **Lines:** `lines` (default `1`) renders the given number of text rows — relevant for the `text` variant.
1597
+ - **Animation:** `animated` (default `true`) toggles the shimmer effect via the `fui-skeleton--animated` class.
882
1598
 
883
1599
  ---
884
1600
 
@@ -898,9 +1614,9 @@ A slider (range input) component with single and dual-thumb (range) support. Int
898
1614
  | showTooltip | boolean | true | no |
899
1615
  | formatLabel | SliderFormatLabelFn | (v: number) => String(v) | no |
900
1616
  | disabled | boolean | false | no |
901
- | aria-label | string | null | null | no |
902
- | ariaLabelLow | string | null | null | no |
903
- | ariaLabelHigh | string | null | null | no |
1617
+ | aria-label | string \| null | null | no |
1618
+ | ariaLabelLow | string \| null | null | no |
1619
+ | ariaLabelHigh | string \| null | null | no |
904
1620
 
905
1621
  #### Outputs
906
1622
 
@@ -914,6 +1630,8 @@ A slider (range input) component with single and dual-thumb (range) support. Int
914
1630
 
915
1631
  ## spinner
916
1632
 
1633
+ A circular loading spinner with determinate and indeterminate modes. Supports an overlay mode that covers its parent container.
1634
+
917
1635
  - **Import**: `import { FuiSpinnerComponent } from 'formaui/components/spinner'`
918
1636
  - **Selector**: `fui-spinner`
919
1637
 
@@ -924,8 +1642,8 @@ A slider (range input) component with single and dual-thumb (range) support. Int
924
1642
  | mode | FuiSpinnerMode | 'indeterminate' | no |
925
1643
  | value | number | 0 | no |
926
1644
  | size | FuiSpinnerSize | 'md' | no |
927
- | color | string | null | null | no |
928
- | aria-label | string | undefined | undefined | no |
1645
+ | color | string \| null | null | no |
1646
+ | aria-label | string \| undefined | undefined | no |
929
1647
 
930
1648
  ---
931
1649
 
@@ -962,14 +1680,28 @@ A stepper component that guides users through a sequence of steps. Supports hori
962
1680
  |------|------|---------|----------|
963
1681
  | completed | boolean | false | no |
964
1682
  | editable | boolean | true | no |
965
- | stepControl | AbstractControl | null | null | no |
1683
+ | stepControl | AbstractControl \| null | null | no |
966
1684
  | optional | boolean | false | no |
1685
+ | disabled | boolean | false | no |
967
1686
  | label | string | - | yes |
968
1687
 
969
1688
  ---
970
1689
 
1690
+ ## strength-meter
1691
+
1692
+ A password strength meter that displays per-rule satisfaction bars and a rule checklist. Computes strength from a `value` input (the password string) and a `config` input controlling which rules apply.
1693
+
1694
+ - **Import**: `import { FuiStrengthMeterComponent } from 'formaui/components/strength-meter'`
1695
+ - **Selector**: `fui-strength-meter`
1696
+
1697
+ No public inputs or outputs.
1698
+
1699
+ ---
1700
+
971
1701
  ## tab
972
1702
 
1703
+ Individual tab definition used inside `fui-tab-group`. Provides a label for the tab header and wraps its content in an `ng-template` for lazy rendering.
1704
+
973
1705
  - **Import**: `import { FuiTabComponent } from 'formaui/components/tab'`
974
1706
  - **Selector**: `fui-tab`
975
1707
 
@@ -993,32 +1725,10 @@ A stepper component that guides users through a sequence of steps. Supports hori
993
1725
 
994
1726
  ---
995
1727
 
996
- ## tag
997
-
998
- - **Import**: `import { FuiTagComponent } from 'formaui/components/tag'`
999
- - **Selector**: `fui-tag`
1000
-
1001
- #### Inputs
1002
-
1003
- | Name | Type | Default | Required |
1004
- |------|------|---------|----------|
1005
- | variant | FuiTagVariant | 'primary' | no |
1006
- | size | FuiTagSize | 'md' | no |
1007
- | icon | string | null | null | no |
1008
- | disabled | boolean | false | no |
1009
- | label | string | - | yes |
1010
-
1011
- #### Outputs
1012
-
1013
- | Name | Type |
1014
- |------|------|
1015
- | removed | FuiTagRemoveEvent |
1016
- | selectedChange | boolean |
1017
-
1018
- ---
1019
-
1020
1728
  ## time-picker
1021
1729
 
1730
+ A time input with a scrollable dropdown of selectable time options. Supports 12h/24h formats, optional seconds, a configurable minute step, and min/max constraints. Integrates with `fui-form-field` and Reactive Forms (including a built-in `Validator` for min/max errors). The dropdown is rendered by the internal `fui-time-list` component.
1731
+
1022
1732
  - **Import**: `import { FuiTimePickerComponent } from 'formaui/components/time-picker'`
1023
1733
  - **Selector**: `fui-time-picker`
1024
1734
 
@@ -1027,7 +1737,7 @@ A stepper component that guides users through a sequence of steps. Supports hori
1027
1737
  | Name | Type | Default | Required |
1028
1738
  |------|------|---------|----------|
1029
1739
  | format | TimeFormat | '24h' | no |
1030
- | errorStateMatcher | ErrorStateMatcher | null | null | no |
1740
+ | errorStateMatcher | ErrorStateMatcher \| null | null | no |
1031
1741
 
1032
1742
  #### Outputs
1033
1743
 
@@ -1035,6 +1745,37 @@ A stepper component that guides users through a sequence of steps. Supports hori
1035
1745
  |------|------|
1036
1746
  | timeChange | string |
1037
1747
 
1748
+ ### Usage
1749
+
1750
+ ```html
1751
+ <!-- Inside form-field with Reactive Forms -->
1752
+ <fui-form-field>
1753
+ <fui-label>Start time</fui-label>
1754
+ <fui-time-picker placeholder="HH:MM" [formControl]="startControl" />
1755
+ <fui-error>Start time is required</fui-error>
1756
+ </fui-form-field>
1757
+
1758
+ <!-- 12h format with seconds and a 5-minute step -->
1759
+ <fui-form-field>
1760
+ <fui-label>Reminder</fui-label>
1761
+ <fui-time-picker format="12h" [showSeconds]="true" [minuteStep]="5" [formControl]="reminderControl" />
1762
+ </fui-form-field>
1763
+
1764
+ <!-- Min/max constraints -->
1765
+ <fui-form-field>
1766
+ <fui-label>Appointment</fui-label>
1767
+ <fui-time-picker min="09:00" max="17:00" [formControl]="apptControl" (timeChange)="onTime($event)" />
1768
+ </fui-form-field>
1769
+ ```
1770
+
1771
+ ### Notes
1772
+
1773
+ - **Accessibility:** The dropdown is keyboard-navigable (Arrow Up/Down across options skipping disabled ones, Home/End, Enter to select). ArrowDown/Enter open the panel from the input, Escape closes it. Focus moves into the panel on open and is restored to the input on close, and an `aria-live` region announces the active option.
1774
+ - **Integration:** Use inside `fui-form-field`. Implements `FuiFormFieldControl`, `ControlValueAccessor`, and `Validator` — `minTime`/`maxTime`/`timeInvalid` errors are attached to the form control automatically and picked up by `ErrorStateMatcher`.
1775
+ - **Value shape:** the model value is an ISO-style time string (e.g. `'14:30'` or `'14:30:00'`) or `null`. `timeChange` emits the same string when the value changes.
1776
+ - **Options:** `format` (`'12h' | '24h'`, default `'24h'`), `showSeconds` (default `false`), and `minuteStep` (default `15`) drive the generated option list. `min`/`max` accept ISO time strings and disable out-of-range options.
1777
+ - **States:** `disabled`, `readonly` (both boolean), and `errorStateMatcher` are supported; the host reflects open/disabled/focused/error/readonly via `fui-time-picker--*` classes. Manual typing is parsed and validated on blur, reverting to the previous value if it cannot be parsed.
1778
+
1038
1779
  ### Sub-components
1039
1780
 
1040
1781
  #### FuiTimeListComponent
@@ -1045,7 +1786,7 @@ A stepper component that guides users through a sequence of steps. Supports hori
1045
1786
 
1046
1787
  | Name | Type | Default | Required |
1047
1788
  |------|------|---------|----------|
1048
- | selectedValue | TimeValue | null | null | no |
1789
+ | selectedValue | TimeValue \| null | null | no |
1049
1790
  | format | TimeFormat | '24h' | no |
1050
1791
  | options | TimeOption[] | - | yes |
1051
1792
 
@@ -1059,6 +1800,8 @@ A stepper component that guides users through a sequence of steps. Supports hori
1059
1800
 
1060
1801
  ## toggle
1061
1802
 
1803
+ A switch-style control for boolean settings. Semantically distinct from `fui-checkbox`: use toggle for immediate on/off settings (notifications, dark mode), use checkbox for form selection (accept terms, pick items).
1804
+
1062
1805
  - **Import**: `import { FuiToggleComponent } from 'formaui/components/toggle'`
1063
1806
  - **Selector**: `fui-toggle`
1064
1807
 
@@ -1071,11 +1814,11 @@ A stepper component that guides users through a sequence of steps. Supports hori
1071
1814
  | required | boolean | false | no |
1072
1815
  | labelPosition | FuiToggleLabelPosition | 'after' | no |
1073
1816
  | size | FuiToggleSize | 'md' | no |
1074
- | name | string | null | null | no |
1075
- | aria-label | string | null | null | no |
1076
- | aria-labelledby | string | null | null | no |
1077
- | aria-describedby | string | null | null | no |
1078
- | errorStateMatcher | ErrorStateMatcher | null | null | no |
1817
+ | name | string \| null | null | no |
1818
+ | aria-label | string \| null | null | no |
1819
+ | aria-labelledby | string \| null | null | no |
1820
+ | aria-describedby | string \| null | null | no |
1821
+ | errorStateMatcher | ErrorStateMatcher \| null | null | no |
1079
1822
 
1080
1823
  #### Outputs
1081
1824
 
@@ -1083,6 +1826,113 @@ A stepper component that guides users through a sequence of steps. Supports hori
1083
1826
  |------|------|
1084
1827
  | change | FuiToggleChange |
1085
1828
 
1829
+ ### Usage
1830
+
1831
+ ```html
1832
+ <!-- Basic toggle -->
1833
+ <fui-toggle [(ngModel)]="notifications">Email notifications</fui-toggle>
1834
+
1835
+ <!-- Reactive forms with label before -->
1836
+ <fui-toggle formControlName="darkMode" labelPosition="before">
1837
+ Dark mode
1838
+ </fui-toggle>
1839
+
1840
+ <!-- Size variant and disabled -->
1841
+ <fui-toggle size="sm" disabled>Feature unavailable</fui-toggle>
1842
+
1843
+ <!-- Listen to change events -->
1844
+ <fui-toggle
1845
+ [checked]="autoSaveEnabled()"
1846
+ (change)="onAutoSaveToggle($event.checked)">
1847
+ Auto-save
1848
+ </fui-toggle>
1849
+ ```
1850
+
1851
+ ### Notes
1852
+
1853
+ - **Accessibility:** Native `<input type="checkbox">` under the hood with `role` styling — keyboard (Space to toggle), focus outlines, and `aria-invalid` / `aria-required` all honored. Provide an explicit `aria-label` when the toggle has no visible label.
1854
+ - **Integration:** Standalone; does not require `fui-form-field`. Use `[(ngModel)]`, `[formControl]`, or `formControlName` for two-way binding.
1855
+ - **vs Checkbox:** functionally similar (both boolean CVAs), but use toggle for "settings applied immediately on change" and checkbox for "part of a form the user submits". Toggle has no indeterminate state.
1856
+ - Emits `change: FuiToggleChange` (`{ source, checked }`) on user-driven toggles. Size options: `'sm' | 'md'`.
1857
+
1858
+ ---
1859
+
1860
+ ## toggle-group
1861
+
1862
+ A selection control that renders as a row of connected toggle buttons. Like radio buttons but styled as a horizontal button group. Use `fui-toggle-group` as the Reactive Forms control and `fui-toggle-item` for each option.
1863
+
1864
+ - **Import**: `import { FuiToggleGroupComponent } from 'formaui/components/toggle-group'`
1865
+ - **Selector**: `fui-toggle-group`
1866
+
1867
+ #### Inputs
1868
+
1869
+ | Name | Type | Default | Required |
1870
+ |------|------|---------|----------|
1871
+ | disabled | boolean | false | no |
1872
+ | aria-label | string \| null | null | no |
1873
+ | aria-labelledby | string \| null | null | no |
1874
+ | errorStateMatcher | ErrorStateMatcher \| null | null | no |
1875
+ | size | FuiToggleGroupSize | 'md' | no |
1876
+
1877
+ #### Outputs
1878
+
1879
+ | Name | Type |
1880
+ |------|------|
1881
+ | change | void |
1882
+
1883
+ ### Usage
1884
+
1885
+ ```html
1886
+ <!-- Basic usage with FormControl -->
1887
+ <fui-toggle-group [formControl]="status" aria-label="Filter by status">
1888
+ <fui-toggle-item [value]="'all'">All</fui-toggle-item>
1889
+ <fui-toggle-item [value]="'read'">Read</fui-toggle-item>
1890
+ <fui-toggle-item [value]="'unread'">Unread</fui-toggle-item>
1891
+ </fui-toggle-group>
1892
+
1893
+ <!-- With individual disabled items -->
1894
+ <fui-toggle-group [formControl]="plan" aria-label="Choose plan">
1895
+ <fui-toggle-item [value]="'free'">Free</fui-toggle-item>
1896
+ <fui-toggle-item [value]="'pro'">Pro</fui-toggle-item>
1897
+ <fui-toggle-item [value]="'enterprise'" disabled>Enterprise</fui-toggle-item>
1898
+ </fui-toggle-group>
1899
+
1900
+ <!-- With icons and badges inside items -->
1901
+ <fui-toggle-group [formControl]="view" aria-label="View">
1902
+ <fui-toggle-item [value]="'grid'">
1903
+ <fui-icon name="grid"></fui-icon>
1904
+ Grid
1905
+ </fui-toggle-item>
1906
+ <fui-toggle-item [value]="'list'">
1907
+ <fui-icon name="list"></fui-icon>
1908
+ List
1909
+ </fui-toggle-item>
1910
+ </fui-toggle-group>
1911
+ ```
1912
+
1913
+ ### Notes
1914
+
1915
+ - **Accessibility:** The group uses `role="radiogroup"` with each item using `role="radio"` + `aria-checked`. This matches the single-selection semantics: screen readers announce items as "1 of N" and the selection-follows-focus navigation is correct for a radio pattern. Keyboard navigation: Arrow Left/Right, Home, End, Enter, and Space. Only the selected item (or first if none) is in the tab order (roving tabindex). Provide `aria-label` or `aria-labelledby` on the group for context.
1916
+ - **Integration:** `fui-toggle-group` is the `ControlValueAccessor` — bind `formControl`, `formControlName`, or `ngModel` on the **group**, not on individual items. `name` is auto-generated if omitted and propagated to child items.
1917
+ - **Value type:** `value` on each item is typed `unknown` — use any primitive or object. Comparison is strict `===`.
1918
+ - **Single selection only:** Exactly one item is selected at a time. Cannot deselect all — the current value always stays selected (like radio).
1919
+ - Emits `change: FuiToggleGroupChange` (`{ source, value }`) on the group.
1920
+
1921
+ ### Sub-components
1922
+
1923
+ #### FuiToggleItemComponent
1924
+
1925
+ - **Selector**: `fui-toggle-item`
1926
+
1927
+ ##### Inputs
1928
+
1929
+ | Name | Type | Default | Required |
1930
+ |------|------|---------|----------|
1931
+ | disabled | boolean | false | no |
1932
+ | aria-label | string \| null | null | no |
1933
+ | aria-labelledby | string \| null | null | no |
1934
+ | value | unknown | - | yes |
1935
+
1086
1936
  ---
1087
1937
 
1088
1938
  ## toolbar
@@ -1097,16 +1947,16 @@ A top navigation toolbar following Carbon Design System principles. Provides spa
1097
1947
  | Name | Type | Default | Required |
1098
1948
  |------|------|---------|----------|
1099
1949
  | menuItems | FuiToolbarMenuItem[] | [] | no |
1100
- | userProfile | FuiToolbarUserProfile | null | null | no |
1101
- | activeMenuItemId | string | number | '' | no |
1102
- | ariaLabel | string | undefined | undefined | no |
1103
- | userAriaLabel | string | undefined | undefined | no |
1950
+ | userProfile | FuiToolbarUserProfile \| null | null | no |
1951
+ | activeMenuItemId | string \| number | '' | no |
1952
+ | ariaLabel | string \| undefined | undefined | no |
1953
+ | userAriaLabel | string \| undefined | undefined | no |
1104
1954
 
1105
1955
  #### Outputs
1106
1956
 
1107
1957
  | Name | Type |
1108
1958
  |------|------|
1109
- | menuItemClick | string | number |
1959
+ | menuItemClick | string \| number |
1110
1960
  | userProfileClick | void |
1111
1961
  | sidebarToggle | void |
1112
1962
 
@@ -1114,6 +1964,8 @@ A top navigation toolbar following Carbon Design System principles. Provides spa
1114
1964
 
1115
1965
  ## tooltip
1116
1966
 
1967
+ A contextual label attached to any element. Shows on hover, focus, click, or manual control. Built on the overlay CDK with collision detection and 12 position variants.
1968
+
1117
1969
  - **Import**: `import { FuiTooltipComponent } from 'formaui/components/tooltip'`
1118
1970
  - **Selector**: `fui-tooltip`
1119
1971
 
@@ -1128,6 +1980,49 @@ A top navigation toolbar following Carbon Design System principles. Provides spa
1128
1980
  | arrow | boolean | - | yes |
1129
1981
  | tooltipId | string | - | yes |
1130
1982
 
1983
+ ### Usage
1984
+
1985
+ ```html
1986
+ <!-- Basic tooltip on hover/focus -->
1987
+ <button fuiButton fuiTooltip="Delete user">
1988
+ <fui-icon name="trash" />
1989
+ </button>
1990
+
1991
+ <!-- Position, size, and show delay -->
1992
+ <button
1993
+ fuiButton
1994
+ fuiTooltip="Permanently removes the item"
1995
+ fuiTooltipPosition="top-end"
1996
+ fuiTooltipSize="lg"
1997
+ [fuiTooltipShowDelay]="300">
1998
+ Delete
1999
+ </button>
2000
+
2001
+ <!-- Click trigger -->
2002
+ <span
2003
+ fuiTooltip="Copied!"
2004
+ fuiTooltipTrigger="click"
2005
+ fuiTooltipPosition="bottom">
2006
+ Click to copy
2007
+ </span>
2008
+
2009
+ <!-- Manual control via a boolean input -->
2010
+ <div
2011
+ fuiTooltip="Saved"
2012
+ fuiTooltipTrigger="manual"
2013
+ [fuiTooltipShow]="justSaved()">
2014
+ Save button
2015
+ </div>
2016
+ ```
2017
+
2018
+ ### Notes
2019
+
2020
+ - **Accessibility:** The host element receives `aria-describedby` pointing at the tooltip id while visible. Hover trigger also fires on focus, so keyboard users see the same information. Escape hides the tooltip when focused on the trigger.
2021
+ - **Integration:** Pure attribute directive — no wrapper or parent required. Renders a `FuiTooltipComponent` via the CDK overlay, so it breaks out of clipping ancestors (`overflow: hidden`, transforms, etc.).
2022
+ - **Triggers:** `hover` (default, includes focus), `focus`, `click` (toggle), `manual` (bind `[fuiTooltipShow]`). Hover over the tooltip itself keeps it open while pointer is inside.
2023
+ - **Positions:** 12 variants — `top`, `top-start`, `top-end`, `bottom`, `bottom-start`, `bottom-end`, `left`, `left-start`, `left-end`, `right`, `right-start`, `right-end`. The overlay auto-flips if the preferred position overflows the viewport.
2024
+ - Delays: `fuiTooltipShowDelay` defaults to 500ms; `fuiTooltipHideDelay` to 0. Set to 0/small values for snappier hover.
2025
+
1131
2026
  ### Sub-components
1132
2027
 
1133
2028
  #### FuiTooltipDirective
@@ -1151,8 +2046,31 @@ A top navigation toolbar following Carbon Design System principles. Provides spa
1151
2046
 
1152
2047
  ---
1153
2048
 
2049
+ ## topbar
2050
+
2051
+ A responsive topbar navigation component with a two-row layout: the top row contains brand/actions and menu items; the bottom row is a content projection slot (`[fuiTopbarBottomRow]`) for tabs, search bars, or other secondary content.
2052
+
2053
+ - **Import**: `import { FuiTopbarComponent } from 'formaui/components/topbar'`
2054
+ - **Selector**: `fui-topbar`
2055
+
2056
+ #### Inputs
2057
+
2058
+ | Name | Type | Default | Required |
2059
+ |------|------|---------|----------|
2060
+ | items | MenuItem[] | [] | no |
2061
+
2062
+ #### Outputs
2063
+
2064
+ | Name | Type |
2065
+ |------|------|
2066
+ | itemClick | MenuItem |
2067
+
2068
+ ---
2069
+
1154
2070
  ## tree
1155
2071
 
2072
+ A hierarchical tree view that renders nested `FuiTreeNode<T>` data with expand/collapse, optional lazy child loading, keyboard navigation, and selection. Selection can be disabled, single, multi, or checkbox-based (with parent/child propagation and indeterminate states).
2073
+
1156
2074
  - **Import**: `import { FuiTreeNodeComponent } from 'formaui/components/tree'`
1157
2075
  - **Selector**: `fui-tree-node`
1158
2076
 
@@ -1161,7 +2079,7 @@ A top navigation toolbar following Carbon Design System principles. Provides spa
1161
2079
  | Name | Type | Default | Required |
1162
2080
  |------|------|---------|----------|
1163
2081
  | selectionMode | FuiTreeSelectionMode | 'none' | no |
1164
- | checkboxState | 'checked' | 'unchecked' | 'indeterminate' | 'unchecked' | no |
2082
+ | checkboxState | 'checked' \| 'unchecked' \| 'indeterminate' | 'unchecked' | no |
1165
2083
  | flatNode | FuiFlatTreeNode | - | yes |
1166
2084
 
1167
2085
  #### Outputs
@@ -1172,6 +2090,48 @@ A top navigation toolbar following Carbon Design System principles. Provides spa
1172
2090
  | select | void |
1173
2091
  | checkboxChange | void |
1174
2092
 
2093
+ ### Usage
2094
+
2095
+ ```html
2096
+ <!-- Basic single-selection tree -->
2097
+ <fui-tree [nodes]="nodes" selectionMode="single" (nodeSelect)="onSelect($event)" />
2098
+
2099
+ <!-- Checkbox selection with lazy loading and virtual scroll -->
2100
+ <fui-tree
2101
+ [nodes]="nodes"
2102
+ selectionMode="checkbox"
2103
+ [loadChildren]="loadChildren"
2104
+ [draggable]="true"
2105
+ [virtualScroll]="true"
2106
+ [virtualItemSize]="32"
2107
+ [filter]="searchTerm()"
2108
+ (nodeExpand)="onExpand($event)"
2109
+ (nodeDrop)="onDrop($event)"
2110
+ />
2111
+ ```
2112
+
2113
+ ```typescript
2114
+ nodes: FuiTreeNode<MyData>[] = [
2115
+ { data: { name: 'Root' }, expanded: true, children: [
2116
+ { data: { name: 'Child A' } },
2117
+ { data: { name: 'Child B' }, disabled: true },
2118
+ ] },
2119
+ ];
2120
+
2121
+ // Lazy loading: called the first time an expandable node without children is opened
2122
+ loadChildren = (node: FuiTreeNode<MyData>) => this.api.getChildren(node);
2123
+ ```
2124
+
2125
+ ### Notes
2126
+
2127
+ - **Accessibility:** The host carries `role="tree"` and is focusable (`tabindex="0"`); each `fui-tree-node` carries `role="treeitem"` with `aria-level`, `aria-expanded`, and `aria-selected`. Keyboard navigation supports Arrow keys (up/down to move, right/left to expand/collapse or move to child/parent), Home/End, Enter/Space to select, and `*` to expand siblings at the current level.
2128
+ - **Selection:** Set `selectionMode` to `'none'` (default), `'single'`, `'multi'`, or `'checkbox'`. Checkbox mode propagates selection to descendants and computes `checked` / `unchecked` / `indeterminate` parent states. Selection state lives on the node objects (`node.selected`).
2129
+ - **Lazy loading:** Provide `loadChildren` returning an `Observable<FuiTreeNode<T>[]>`; children are fetched once on first expand and cached onto the node.
2130
+ - **Outputs:** `nodeSelect`, `nodeUnselect`, `nodeExpand`, `nodeCollapse`, `nodeDrop`, and `filterChange` emit `FuiTreeNodeEvent<T>` (or drag/filter payloads) carrying both the origin node and its flat representation.
2131
+ - **Filtering:** The `filter` input narrows visible nodes by matching node data (string, or its `name` / `label` field), auto-expanding ancestors of matches.
2132
+ - **Public methods:** `expandAll()`, `collapseAll()`, `selectNode(node)`, and `getSelectedNodes()` are available via a template reference or `ViewChild`.
2133
+ - **Custom rendering:** Pass a `nodeTemplate` `TemplateRef` to override the default node content. Provide `nodeIdPrefix` when a parent combobox (e.g. tree-select) needs stable node DOM ids for `aria-activedescendant`.
2134
+
1175
2135
  ### Sub-components
1176
2136
 
1177
2137
  #### FuiTreeComponent
@@ -1183,17 +2143,21 @@ A top navigation toolbar following Carbon Design System principles. Provides spa
1183
2143
  | Name | Type | Default | Required |
1184
2144
  |------|------|---------|----------|
1185
2145
  | selectionMode | FuiTreeSelectionMode | 'none' | no |
2146
+ | nodeIdPrefix | string \| null | null | no |
1186
2147
 
1187
2148
  ##### Outputs
1188
2149
 
1189
2150
  | Name | Type |
1190
2151
  |------|------|
1191
2152
  | filterChange | string |
2153
+ | focusChange | string \| null |
1192
2154
 
1193
2155
  ---
1194
2156
 
1195
2157
  ## tree-select
1196
2158
 
2159
+ A combobox that opens a `fui-tree` in an overlay panel so users can pick one or more values from hierarchical data. Implements `ControlValueAccessor` and `FuiFormFieldControl`, so it integrates with Reactive Forms and `fui-form-field`.
2160
+
1197
2161
  - **Import**: `import { FuiTreeSelectComponent } from 'formaui/components/tree-select'`
1198
2162
  - **Selector**: `fui-tree-select`
1199
2163
 
@@ -1201,12 +2165,41 @@ A top navigation toolbar following Carbon Design System principles. Provides spa
1201
2165
 
1202
2166
  | Name | Type | Default | Required |
1203
2167
  |------|------|---------|----------|
1204
- | selectionMode | 'single' | 'multi' | 'checkbox' | 'single' | no |
2168
+ | selectionMode | 'single' \| 'multi' \| 'checkbox' | 'single' | no |
2169
+
2170
+ ### Usage
2171
+
2172
+ ```html
2173
+ <!-- Single selection -->
2174
+ <fui-tree-select [nodes]="nodes" selectionMode="single" placeholder="Pick a category" [formControl]="categoryControl" />
2175
+
2176
+ <!-- Multi selection with search and a display field -->
2177
+ <fui-tree-select
2178
+ [nodes]="nodes"
2179
+ selectionMode="multi"
2180
+ [showSearch]="true"
2181
+ [displayField]="'name'"
2182
+ placeholder="Pick categories"
2183
+ [formControl]="categoriesControl"
2184
+ (selectionChange)="onChange($event)"
2185
+ />
2186
+ ```
2187
+
2188
+ ### Notes
2189
+
2190
+ - **Accessibility:** The host carries `role="combobox"` with `aria-expanded`, `aria-haspopup="tree"`, `aria-owns`, and `aria-activedescendant`, the last kept in sync with keyboard focus inside the embedded tree. Enter/Space opens the panel; Escape closes it.
2191
+ - **Forms integration:** Provides `NG_VALUE_ACCESSOR` and `FUI_FORM_FIELD_CONTROL`. In single mode the value is the selected node's `data`; in multi/checkbox mode it is an array of `data`. Wrap in `fui-form-field` for label, hint, and error support.
2192
+ - **Selection modes:** `selectionMode` accepts `'single'` (default), `'multi'`, or `'checkbox'`. Selecting in single mode closes the panel.
2193
+ - **Inputs:** `nodes` (required), `placeholder`, `showSearch`, `loadChildren` (lazy children), `nodeTemplate`, `displayField` (string key or function controlling the displayed label), plus `disabled` and `readonly`.
2194
+ - **Outputs:** `selectionChange` emits `FuiTreeSelectChange<T>` containing the selected node(s) and the component as `source`.
2195
+ - **Overlay:** Panel positioning, classes, scroll strategy, and trigger-matched min width come from the host `FuiPopupOverlayDirective` inputs (`positions`, `panelClass`, `backdropClass`, `scrollStrategy`, `minWidthFromTrigger`).
1205
2196
 
1206
2197
  ---
1207
2198
 
1208
2199
  ## tree-table
1209
2200
 
2201
+ A tabular component that renders hierarchical `FuiTreeTableNode<T>` data as rows, with one designated tree column showing indentation and expand/collapse toggles. Supports per-column sorting and filtering, optional lazy child loading, and row interaction events. Generic over the row type `T`.
2202
+
1210
2203
  - **Import**: `import { FuiTreeTableComponent } from 'formaui/components/tree-table'`
1211
2204
  - **Selector**: `fui-tree-table`
1212
2205
 
@@ -1214,329 +2207,1215 @@ A top navigation toolbar following Carbon Design System principles. Provides spa
1214
2207
 
1215
2208
  | Name | Type | Default | Required |
1216
2209
  |------|------|---------|----------|
1217
- | sort | { field: string; direction: 'ASC' | 'DESC' } | null | null | no |
2210
+ | sort | { field: string; direction: 'ASC' \| 'DESC' } \| null | null | no |
1218
2211
  | filters | FuiTreeTableColumnFilter[] | [] | no |
1219
- | emptyMessage | string | undefined | undefined | no |
2212
+ | emptyMessage | string \| undefined | undefined | no |
1220
2213
  | config | FuiTreeTableConfig | - | yes |
1221
2214
 
1222
2215
  #### Outputs
1223
2216
 
1224
2217
  | Name | Type |
1225
2218
  |------|------|
1226
- | sortChange | { field: string; direction: 'ASC' | 'DESC' } | null |
2219
+ | sortChange | { field: string; direction: 'ASC' \| 'DESC' } \| null |
1227
2220
  | filtersChange | FuiTreeTableColumnFilter[] |
1228
2221
  | rowDblClick | T |
1229
2222
 
2223
+ ### Usage
2224
+
2225
+ ```html
2226
+ <!-- Minimal tree table -->
2227
+ <fui-tree-table [config]="tableConfig" [nodes]="nodes" />
2228
+ ```
2229
+
2230
+ ```typescript
2231
+ tableConfig: FuiTreeTableConfig = {
2232
+ headerSticky: true,
2233
+ treeColumn: 'name',
2234
+ indentPx: 24,
2235
+ headers: [
2236
+ { field: 'name', label: 'Name', type: 'string', hasSort: true },
2237
+ { field: 'size', label: 'Size', type: 'number', hasSort: true, hasFilter: true },
2238
+ { field: 'modified', label: 'Modified', type: 'date' },
2239
+ ],
2240
+ };
2241
+
2242
+ nodes: FuiTreeTableNode<FileRow>[] = [
2243
+ { data: { name: 'src', size: 0 }, expanded: true, children: [
2244
+ { data: { name: 'index.ts', size: 1200 }, leaf: true },
2245
+ ] },
2246
+ ];
2247
+ ```
2248
+
2249
+ ```html
2250
+ <!-- Controlled sort/filter, row highlight, and interaction handlers -->
2251
+ <fui-tree-table
2252
+ [config]="tableConfig"
2253
+ [nodes]="nodes"
2254
+ [sort]="currentSort()"
2255
+ [filters]="activeFilters()"
2256
+ [enableRowHighlight]="true"
2257
+ (sortChange)="currentSort.set($event)"
2258
+ (filtersChange)="activeFilters.set($event)"
2259
+ (rowExpand)="onExpand($event)"
2260
+ (rowDblClick)="openRow($event)"
2261
+ />
2262
+ ```
2263
+
2264
+ ### Notes
2265
+
2266
+ - **Tree column:** `config.treeColumn` selects which column renders the indentation and expand/collapse toggle; it defaults to the first header's field. Indentation per level is controlled by `config.indentPx` (default 24).
2267
+ - **Configuration:** `config: FuiTreeTableConfig` (required) supplies `headers`, plus optional `headerSticky`, `areRowsSelectable`, `treeColumn`, and `indentPx`. Column `type` (`'string' | 'number' | 'boolean' | 'date' | 'label'`) describes cell data; cell values support dot-notation fields like `'address.city'`.
2268
+ - **Sort/filter:** State is fully controlled — `sortChange` cycles a column through ASC → DESC → none and emits the new sort; `filtersChange` emits `FuiTreeTableColumnFilter[]`. The component does not mutate `nodes`; apply ordering/filtering in the parent.
2269
+ - **Expansion:** `rowExpand` and `rowCollapse` emit `FuiTreeTableRowEvent<T>` (origin node plus flat row); expansion state is read from `node.expanded`. Provide `loadChildren` for lazy child loading.
2270
+ - **Empty state:** When `nodes` is empty, `emptyMessage` is shown (defaults to the `FuiTreeTableIntl.emptyMessage` value, `'No data available'`).
2271
+ - **Row interaction:** `rowDblClick` emits the row data `T`; set `enableRowHighlight` to enable click-to-highlight.
2272
+
1230
2273
  ---
1231
2274
 
1232
2275
  ## Design Tokens
1233
2276
 
1234
- ### Primary
2277
+ ### Radius
1235
2278
 
1236
2279
  | Token | Value |
1237
2280
  |-------|-------|
1238
- | --fui-primary-10 | #fdfaff |
1239
- | --fui-primary-20 | #f9f5ff |
1240
- | --fui-primary-30 | #f1ebff |
1241
- | --fui-primary-40 | #e4d4ff |
1242
- | --fui-primary-50 | #7c4be0 |
1243
- | --fui-primary-60 | #6833c8 |
1244
- | --fui-primary-70 | #5522af |
1245
- | --fui-primary-80 | #421a8c |
1246
- | --fui-primary-90 | #2e1266 |
1247
- | --fui-primary-100 | #1a0b3d |
1248
- | --fui-primary-110 | #120923 |
1249
- | --fui-primary | var(--fui-primary-50) |
1250
- | --fui-primary-rgb | 124, 75, 224 |
1251
- | --fui-primary-text-color | white |
1252
- | --fui-primary-text | white |
1253
- | --fui-primary-default | var(--fui-primary-50) |
1254
- | --fui-primary-disable | var(--fui-primary-40) |
1255
- | --fui-primary-bg | var(--fui-primary-20) |
1256
- | --fui-primary-hover | var(--fui-primary-60) |
1257
- | --fui-primary-highlights | var(--fui-primary-30) |
1258
-
1259
- ### Secondary
2281
+ | --fui-radius-none | 0 |
2282
+ | --fui-radius-xs | 4px |
2283
+ | --fui-radius-sm | 8px |
2284
+ | --fui-radius-md | 10px |
2285
+ | --fui-radius-lg | 16px |
2286
+ | --fui-radius-xl | 24px |
2287
+ | --fui-radius-pill | 9999px |
2288
+
2289
+ ### Border
1260
2290
 
1261
2291
  | Token | Value |
1262
2292
  |-------|-------|
1263
- | --fui-secondary-10 | #fbfcfe |
1264
- | --fui-secondary-20 | #f8f9fd |
1265
- | --fui-secondary-30 | #eeeff5 |
1266
- | --fui-secondary-40 | #e6e7ed |
1267
- | --fui-secondary-50 | #dfe0e6 |
1268
- | --fui-secondary-60 | #d7d8de |
1269
- | --fui-secondary-70 | #ccced3 |
1270
- | --fui-secondary-80 | #b9bbc0 |
1271
- | --fui-secondary-90 | #8c8d92 |
1272
- | --fui-secondary-100 | #818288 |
1273
- | --fui-secondary-110 | #636469 |
1274
- | --fui-secondary-120 | #1f2024 |
1275
- | --fui-secondary | var(--fui-secondary-60) |
1276
- | --fui-secondary-default | var(--fui-secondary-60) |
1277
- | --fui-secondary-hover | var(--fui-secondary-90) |
1278
- | --fui-secondary-disable | var(--fui-secondary-30) |
1279
- | --fui-secondary-bg | var(--fui-secondary-20) |
1280
- | --fui-secondary-highlights | var(--fui-secondary-20) |
1281
-
1282
- ### Danger
2293
+ | --fui-border-width-none | 0 |
2294
+ | --fui-border-width-sm | 1px |
2295
+ | --fui-border-width-md | 2px |
2296
+ | --fui-border-width-lg | 4px |
2297
+ | --fui-border-default | var(--fui-neutral-40) |
2298
+ | --fui-border-strong | var(--fui-neutral-60) |
2299
+ | --fui-border-primary | var(--fui-primary-60) |
2300
+ | --fui-border-subtle | var(--fui-neutral-30) |
2301
+ | --fui-border-disabled | var(--fui-neutral-30) |
2302
+ | --fui-border-accent | var(--fui-accent-60) |
2303
+ | --fui-border-error | var(--fui-error-40) |
2304
+ | --fui-border-success | var(--fui-success-40) |
2305
+ | --fui-border-warning | var(--fui-warning-40) |
2306
+ | --fui-border-info | var(--fui-info-40) |
2307
+ | --fui-border-default | var(--fui-neutral-40) |
2308
+ | --fui-border-strong | var(--fui-neutral-60) |
2309
+ | --fui-border-primary | var(--fui-primary-60) |
2310
+ | --fui-border-subtle | var(--fui-neutral-30) |
2311
+ | --fui-border-disabled | var(--fui-neutral-30) |
2312
+ | --fui-border-accent | var(--fui-accent-60) |
2313
+ | --fui-border-error | var(--fui-error-40) |
2314
+ | --fui-border-success | var(--fui-success-40) |
2315
+ | --fui-border-warning | var(--fui-warning-40) |
2316
+ | --fui-border-info | var(--fui-info-40) |
2317
+
2318
+ ### Z
1283
2319
 
1284
2320
  | Token | Value |
1285
2321
  |-------|-------|
1286
- | --fui-danger-10 | #fffcfc |
1287
- | --fui-danger-20 | #fff7f7 |
1288
- | --fui-danger-30 | #feebec |
1289
- | --fui-danger-40 | #ffdbdc |
1290
- | --fui-danger-50 | #ffcdce |
1291
- | --fui-danger-60 | #fdbdbe |
1292
- | --fui-danger-70 | #f4a9aa |
1293
- | --fui-danger-80 | #eb8e90 |
1294
- | --fui-danger-90 | #e5484d |
1295
- | --fui-danger-100 | #ce2c31 |
1296
- | --fui-danger-110 | #821e2e |
1297
- | --fui-danger | var(--fui-danger-60) |
2322
+ | --fui-z-base | 0 |
2323
+ | --fui-z-dropdown | 100 |
2324
+ | --fui-z-sticky | 200 |
2325
+ | --fui-z-fixed | 300 |
2326
+ | --fui-z-backdrop | 400 |
2327
+ | --fui-z-modal | 500 |
2328
+ | --fui-z-popover | 600 |
2329
+ | --fui-z-toast | 700 |
2330
+ | --fui-z-tooltip | 800 |
2331
+
2332
+ ### Bp
1298
2333
 
1299
- ### Success
2334
+ | Token | Value |
2335
+ |-------|-------|
2336
+ | --fui-bp-xs | 480px |
2337
+ | --fui-bp-sm | 640px |
2338
+ | --fui-bp-md | 768px |
2339
+ | --fui-bp-lg | 1024px |
2340
+ | --fui-bp-xl | 1280px |
2341
+ | --fui-bp-2xl | 1536px |
2342
+
2343
+ ### Grid
1300
2344
 
1301
2345
  | Token | Value |
1302
2346
  |-------|-------|
1303
- | --fui-success-10 | #fbfefd |
1304
- | --fui-success-20 | #f4fbf7 |
1305
- | --fui-success-30 | #e6f7ed |
1306
- | --fui-success-40 | #d6f1e3 |
1307
- | --fui-success-50 | #c3e9d7 |
1308
- | --fui-success-60 | #acdec8 |
1309
- | --fui-success-70 | #8bceb6 |
1310
- | --fui-success-80 | #56ba9f |
1311
- | --fui-success-90 | #29a383 |
1312
- | --fui-success-100 | #208368 |
1313
- | --fui-success-110 | #1d3b31 |
1314
- | --fui-success | var(--fui-success-60) |
2347
+ | --fui-grid-columns | 12 |
2348
+ | --fui-grid-gutter | var(--fui-spacing-7) |
1315
2349
 
1316
- ### Warning
2350
+ ### Container
1317
2351
 
1318
2352
  | Token | Value |
1319
2353
  |-------|-------|
1320
- | --fui-warning-10 | #fefdfb |
1321
- | --fui-warning-20 | #fefbe9 |
1322
- | --fui-warning-30 | #fff7c2 |
1323
- | --fui-warning-40 | #ffee9c |
1324
- | --fui-warning-50 | #fbe577 |
1325
- | --fui-warning-60 | #f3d673 |
1326
- | --fui-warning-70 | #e9c162 |
1327
- | --fui-warning-80 | #ffc53d |
1328
- | --fui-warning-90 | #e2a336 |
1329
- | --fui-warning-100 | #ab6400 |
1330
- | --fui-warning-110 | #4f3422 |
1331
- | --fui-warning | var(--fui-warning-60) |
2354
+ | --fui-container-sm | 640px |
2355
+ | --fui-container-md | 768px |
2356
+ | --fui-container-lg | 1024px |
2357
+ | --fui-container-xl | 1280px |
2358
+ | --fui-container-2xl | 1536px |
1332
2359
 
1333
- ### Info
2360
+ ### Tooltip
1334
2361
 
1335
2362
  | Token | Value |
1336
2363
  |-------|-------|
1337
- | --fui-info-10 | #fbfdff |
1338
- | --fui-info-20 | #f4faff |
1339
- | --fui-info-30 | #e6f4fe |
1340
- | --fui-info-40 | #d5efff |
1341
- | --fui-info-50 | #c2e5ff |
1342
- | --fui-info-60 | #acd8fc |
1343
- | --fui-info-70 | #8ec8f6 |
1344
- | --fui-info-80 | #5eb1ef |
1345
- | --fui-info-90 | #0090ff |
1346
- | --fui-info-100 | #0d74ce |
1347
- | --fui-info-110 | #113264 |
1348
- | --fui-info | var(--fui-info-60) |
2364
+ | --fui-tooltip-background | #334155 |
2365
+ | --fui-tooltip-text | #f8fafc |
1349
2366
 
1350
- ### Pink
2367
+ ### Duration
1351
2368
 
1352
2369
  | Token | Value |
1353
2370
  |-------|-------|
1354
- | --fui-pink-10 | #fffcfe |
1355
- | --fui-pink-20 | #fef7fb |
1356
- | --fui-pink-30 | #fee9f5 |
1357
- | --fui-pink-40 | #fbdcef |
1358
- | --fui-pink-50 | #f6cee7 |
1359
- | --fui-pink-60 | #efbfdd |
1360
- | --fui-pink-70 | #e7acd0 |
1361
- | --fui-pink-80 | #dd93c2 |
1362
- | --fui-pink-90 | #d6409f |
1363
- | --fui-pink-100 | #c2298a |
1364
- | --fui-pink-110 | #651249 |
2371
+ | --fui-duration-instant | 0ms |
2372
+ | --fui-duration-fast | 100ms |
2373
+ | --fui-duration-base | 200ms |
2374
+ | --fui-duration-moderate | 300ms |
2375
+ | --fui-duration-slow | 500ms |
2376
+ | --fui-duration-deliberate | 750ms |
1365
2377
 
1366
- ### Orange
2378
+ ### Ease
1367
2379
 
1368
2380
  | Token | Value |
1369
2381
  |-------|-------|
1370
- | --fui-orange-10 | #fefcfb |
1371
- | --fui-orange-20 | #fff7ed |
1372
- | --fui-orange-30 | #ffefd6 |
1373
- | --fui-orange-40 | #ffdfb5 |
1374
- | --fui-orange-50 | #ffd19a |
1375
- | --fui-orange-60 | #ffc182 |
1376
- | --fui-orange-70 | #f5ae73 |
1377
- | --fui-orange-80 | #ec9455 |
1378
- | --fui-orange-90 | #f76b15 |
1379
- | --fui-orange-100 | #cc4e00 |
1380
- | --fui-orange-110 | #582d1d |
1381
-
1382
- ### Tomato
2382
+ | --fui-ease-linear | linear |
2383
+ | --fui-ease-in | cubic-bezier(0.4, 0, 1, 1) |
2384
+ | --fui-ease-out | cubic-bezier(0, 0, 0.2, 1) |
2385
+ | --fui-ease-in-out | cubic-bezier(0.4, 0, 0.2, 1) |
2386
+ | --fui-ease-emphasized | cubic-bezier(0.2, 0, 0, 1) |
2387
+ | --fui-ease-bounce | cubic-bezier(0.34, 1.56, 0.64, 1) |
2388
+
2389
+ ### Icon
1383
2390
 
1384
2391
  | Token | Value |
1385
2392
  |-------|-------|
1386
- | --fui-tomato-10 | #fffcfc |
1387
- | --fui-tomato-20 | #fff8f7 |
1388
- | --fui-tomato-30 | #feebe7 |
1389
- | --fui-tomato-40 | #ffdcd3 |
1390
- | --fui-tomato-50 | #ffcdc2 |
1391
- | --fui-tomato-60 | #fdbdaf |
1392
- | --fui-tomato-70 | #f5a898 |
1393
- | --fui-tomato-80 | #ec8e7b |
1394
- | --fui-tomato-90 | #e54d2e |
1395
- | --fui-tomato-100 | #dd4425 |
1396
- | --fui-tomato-110 | #d13415 |
1397
- | --fui-tomato-120 | #5c271f |
1398
-
1399
- ### White
2393
+ | --fui-icon-spin-duration | var(--fui-duration-base) |
2394
+ | --fui-icon-spin-timing | linear |
2395
+ | --fui-icon-pulse-duration | var(--fui-duration-slow) |
2396
+ | --fui-icon-pulse-timing | var(--fui-ease-emphasized) |
2397
+ | --fui-icon-xs | 0.75rem |
2398
+ | --fui-icon-sm | 1rem |
2399
+ | --fui-icon-md | 1.25rem |
2400
+ | --fui-icon-lg | 1.5rem |
2401
+ | --fui-icon-xl | 2rem |
2402
+ | --fui-icon-2xl | 3rem |
2403
+
2404
+ ### Transition
1400
2405
 
1401
2406
  | Token | Value |
1402
2407
  |-------|-------|
1403
- | --fui-white | #ffffff |
1404
- | --fui-white-5 | rgba(255, 255, 255, 0.05) |
1405
- | --fui-white-10 | rgba(255, 255, 255, 0.1) |
1406
- | --fui-white-15 | rgba(255, 255, 255, 0.15) |
1407
- | --fui-white-20 | rgba(255, 255, 255, 0.2) |
1408
- | --fui-white-30 | rgba(255, 255, 255, 0.3) |
1409
- | --fui-white-40 | rgba(255, 255, 255, 0.4) |
1410
- | --fui-white-50 | rgba(255, 255, 255, 0.5) |
1411
- | --fui-white-60 | rgba(255, 255, 255, 0.6) |
1412
- | --fui-white-70 | rgba(255, 255, 255, 0.7) |
1413
- | --fui-white-80 | rgba(255, 255, 255, 0.8) |
1414
- | --fui-white-90 | rgba(255, 255, 255, 0.9) |
1415
-
1416
- ### Black
2408
+ | --fui-transition-color | color var(--fui-duration-fast) var(--fui-ease-out) |
2409
+ | --fui-transition-bg | background-color var(--fui-duration-fast) var(--fui-ease-out) |
2410
+ | --fui-transition-transform | transform var(--fui-duration-base) var(--fui-ease-out) |
2411
+ | --fui-transition-opacity | opacity var(--fui-duration-base) var(--fui-ease-out) |
2412
+ | --fui-transition-shadow | box-shadow var(--fui-duration-base) var(--fui-ease-out) |
2413
+
2414
+ ### Button
1417
2415
 
1418
2416
  | Token | Value |
1419
2417
  |-------|-------|
1420
- | --fui-black | #000000 |
1421
- | --fui-black-5 | rgba(0, 0, 0, 0.05) |
1422
- | --fui-black-10 | rgba(0, 0, 0, 0.1) |
1423
- | --fui-black-15 | rgba(0, 0, 0, 0.15) |
1424
- | --fui-black-20 | rgba(0, 0, 0, 0.2) |
1425
- | --fui-black-30 | rgba(0, 0, 0, 0.3) |
1426
- | --fui-black-40 | rgba(0, 0, 0, 0.4) |
1427
- | --fui-black-50 | rgba(0, 0, 0, 0.5) |
1428
- | --fui-black-60 | rgba(0, 0, 0, 0.6) |
1429
- | --fui-black-70 | rgba(0, 0, 0, 0.7) |
1430
- | --fui-black-80 | rgba(0, 0, 0, 0.8) |
1431
- | --fui-black-90 | rgba(0, 0, 0, 0.9) |
2418
+ | --fui-button-height-sm | 1.75rem |
2419
+ | --fui-button-height-md | 2.25rem |
2420
+ | --fui-button-height-lg | 2.75rem |
2421
+ | --fui-button-height-xl | 3.25rem |
2422
+ | --fui-button-height-2xl | 4rem |
1432
2423
 
1433
- ### Text
2424
+ ### Input
1434
2425
 
1435
2426
  | Token | Value |
1436
2427
  |-------|-------|
1437
- | --fui-text-disabled | var(--fui-secondary-100) |
1438
- | --fui-text-primary | var(--fui-secondary-120) |
1439
- | --fui-text-secondary | var(--fui-secondary-110) |
1440
- | --fui-text-primary-disabled | var(--fui-text-disabled) |
2428
+ | --fui-input-height | 2.25rem |
1441
2429
 
1442
- ### Border
2430
+ ### Density
1443
2431
 
1444
2432
  | Token | Value |
1445
2433
  |-------|-------|
1446
- | --fui-border-color | var(--fui-secondary-50) |
1447
- | --fui-border-color-strong | var(--fui-secondary-70) |
1448
- | --fui-border-color-active | var(--fui-primary-default) |
2434
+ | --fui-density-scale | 1 |
1449
2435
 
1450
- ### Surface
2436
+ ### Control
1451
2437
 
1452
2438
  | Token | Value |
1453
2439
  |-------|-------|
1454
- | --fui-surface-bg | var(--fui-secondary-20) |
1455
- | --fui-surface-card | var(--fui-white) |
1456
- | --fui-surface-01 | var(--fui-secondary-10) |
1457
- | --fui-surface-02 | var(--fui-secondary-20) |
1458
- | --fui-surface-03 | var(--fui-secondary-30) |
1459
- | --fui-surface-04 | var(--fui-secondary-40) |
1460
- | --fui-surface-00 | var(--fui-surface-card) |
1461
- | --fui-surface-05 | var(--fui-secondary-50) |
2440
+ | --fui-control-h-xs | 1.5rem |
2441
+ | --fui-control-h-sm | 2rem |
2442
+ | --fui-control-h-md | 2.5rem |
2443
+ | --fui-control-h-lg | 3rem |
2444
+ | --fui-control-h-xl | 3.5rem |
2445
+ | --fui-control-padding-sm | calc(var(--fui-spacing-2) * var(--fui-density-scale)) |
2446
+ | --fui-control-padding-md | calc(var(--fui-spacing-4) * var(--fui-density-scale)) |
2447
+ | --fui-control-padding-lg | calc(var(--fui-spacing-6) * var(--fui-density-scale)) |
1462
2448
 
1463
- ### Bg
2449
+ ### Cell
1464
2450
 
1465
2451
  | Token | Value |
1466
2452
  |-------|-------|
1467
- | --fui-bg | var(--fui-surface-bg) |
2453
+ | --fui-cell-padding-y | calc(var(--fui-spacing-4) * var(--fui-density-scale)) |
2454
+ | --fui-cell-padding-x | calc(var(--fui-spacing-6) * var(--fui-density-scale)) |
1468
2455
 
1469
- ### State
2456
+ ### Spacing
1470
2457
 
1471
2458
  | Token | Value |
1472
2459
  |-------|-------|
1473
- | --fui-state-error | var(--fui-danger-90) |
1474
- | --fui-state-error-bg | var(--fui-danger-30) |
1475
- | --fui-state-error-hover | var(--fui-danger-110) |
1476
- | --fui-state-success | var(--fui-success-110) |
1477
- | --fui-state-success-bg | var(--fui-success-30) |
1478
- | --fui-state-success-hover | var(--fui-success-110) |
1479
- | --fui-state-warning | var(--fui-warning-110) |
1480
- | --fui-state-warning-bg | var(--fui-warning-30) |
1481
- | --fui-state-warning-hover | var(--fui-warning-110) |
1482
- | --fui-state-info | var(--fui-info-110) |
1483
- | --fui-state-info-bg | var(--fui-info-30) |
1484
- | --fui-state-info-hover | var(--fui-info-110) |
1485
-
1486
- ### Destructive
2460
+ | --fui-spacing-0 | 0 |
2461
+ | --fui-spacing-1 | 0.125rem |
2462
+ | --fui-spacing-2 | 0.25rem |
2463
+ | --fui-spacing-3 | 0.375rem |
2464
+ | --fui-spacing-4 | 0.5rem |
2465
+ | --fui-spacing-5 | 0.625rem |
2466
+ | --fui-spacing-6 | 0.75rem |
2467
+ | --fui-spacing-7 | 1rem |
2468
+ | --fui-spacing-8 | 1.25rem |
2469
+ | --fui-spacing-9 | 1.5rem |
2470
+ | --fui-spacing-10 | 1.75rem |
2471
+ | --fui-spacing-11 | 2rem |
2472
+ | --fui-spacing-12 | 2.5rem |
2473
+ | --fui-spacing-13 | 3rem |
2474
+
2475
+ ### Font
1487
2476
 
1488
2477
  | Token | Value |
1489
2478
  |-------|-------|
1490
- | --fui-destructive-default | var(--fui-danger-90) |
1491
- | --fui-destructive-hover | var(--fui-danger-100) |
1492
- | --fui-destructive-text | white |
2479
+ | --fui-font-sans | 'Geist', sans-serif |
2480
+ | --fui-font-mono | 'DM Mono', monospace |
1493
2481
 
1494
- ### Tertiary
2482
+ ### Text
1495
2483
 
1496
2484
  | Token | Value |
1497
2485
  |-------|-------|
1498
- | --fui-tertiary-text | var(--fui-text-primary) |
1499
- | --fui-tertiary-hover-bg | var(--fui-surface-03) |
1500
- | --fui-tertiary-violet-text | var(--fui-primary) |
1501
- | --fui-tertiary-violet-hover-bg | var(--fui-primary-bg) |
2486
+ | --fui-text-xs | 0.6875rem |
2487
+ | --fui-text-sm | 0.75rem |
2488
+ | --fui-text-base | 0.875rem |
2489
+ | --fui-text-md | 1rem |
2490
+ | --fui-text-lg | 1.125rem |
2491
+ | --fui-text-xl | 1.25rem |
2492
+ | --fui-text-2xl | 1.5rem |
2493
+ | --fui-text-3xl | 1.875rem |
2494
+ | --fui-text-4xl | 2.25rem |
2495
+ | --fui-text-5xl | 3rem |
2496
+ | --fui-text-6xl | 3.75rem |
2497
+ | --fui-text-7xl | 4.5rem |
2498
+ | --fui-text-primary | var(--fui-neutral-110) |
2499
+ | --fui-text-secondary | var(--fui-neutral-80) |
2500
+ | --fui-text-disabled | var(--fui-neutral-60) |
2501
+ | --fui-text-tertiary | var(--fui-neutral-70) |
2502
+ | --fui-text-inverse | var(--fui-neutral-10) |
2503
+ | --fui-text-link | var(--fui-primary-70) |
2504
+ | --fui-text-link-hover | var(--fui-primary-80) |
2505
+ | --fui-text-error | var(--fui-error-90) |
2506
+ | --fui-text-success | var(--fui-success-90) |
2507
+ | --fui-text-warning | var(--fui-warning-90) |
2508
+ | --fui-text-info | var(--fui-info-90) |
2509
+ | --fui-text-on-fill | #ffffff |
2510
+ | --fui-text-primary | var(--fui-neutral-110) |
2511
+ | --fui-text-secondary | var(--fui-neutral-80) |
2512
+ | --fui-text-disabled | var(--fui-neutral-60) |
2513
+ | --fui-text-tertiary | var(--fui-neutral-70) |
2514
+ | --fui-text-inverse | var(--fui-neutral-10) |
2515
+ | --fui-text-link | var(--fui-primary-70) |
2516
+ | --fui-text-link-hover | var(--fui-primary-80) |
2517
+ | --fui-text-error | var(--fui-error-90) |
2518
+ | --fui-text-success | var(--fui-success-90) |
2519
+ | --fui-text-warning | var(--fui-warning-90) |
2520
+ | --fui-text-info | var(--fui-info-90) |
2521
+ | --fui-text-on-fill | #ffffff |
2522
+
2523
+ ### Weight
1502
2524
 
1503
- ### Field
2525
+ | Token | Value |
2526
+ |-------|-------|
2527
+ | --fui-weight-light | 300 |
2528
+ | --fui-weight-regular | 400 |
2529
+ | --fui-weight-medium | 500 |
2530
+ | --fui-weight-semibold | 600 |
2531
+ | --fui-weight-bold | 700 |
2532
+
2533
+ ### Leading
1504
2534
 
1505
2535
  | Token | Value |
1506
2536
  |-------|-------|
1507
- | --fui-field-background | var(--fui-surface-00) |
1508
- | --fui-field-background-hover | var(--fui-surface-01) |
1509
- | --fui-field-background-disabled | var(--fui-surface-02) |
1510
- | --fui-field-border-focus | var(--fui-primary-50) |
1511
- | --fui-field-border-error | var(--fui-state-error) |
2537
+ | --fui-leading-tight | 1.2 |
2538
+ | --fui-leading-snug | 1.35 |
2539
+ | --fui-leading-normal | 1.5 |
2540
+ | --fui-leading-relaxed | 1.65 |
2541
+ | --fui-leading-loose | 2 |
1512
2542
 
1513
- ### Icon
2543
+ ### Tracking
2544
+
2545
+ | Token | Value |
2546
+ |-------|-------|
2547
+ | --fui-tracking-tight | -0.02em |
2548
+ | --fui-tracking-normal | 0 |
2549
+ | --fui-tracking-wide | 0.02em |
2550
+
2551
+ ### Primary
1514
2552
 
1515
2553
  | Token | Value |
1516
2554
  |-------|-------|
1517
- | --fui-icon-primary | var(--fui-text-primary) |
1518
- | --fui-icon-secondary | var(--fui-text-secondary) |
1519
- | --fui-icon-tertiary | var(--fui-secondary-90) |
1520
- | --fui-icon-on-color-disabled | var(--fui-text-disabled) |
2555
+ | --fui-primary-10 | #E7E0F7 |
2556
+ | --fui-primary-20 | #CEC2ED |
2557
+ | --fui-primary-30 | #B4A5E2 |
2558
+ | --fui-primary-40 | #9A89D6 |
2559
+ | --fui-primary-50 | #806FC8 |
2560
+ | --fui-primary-60 | #6657B8 |
2561
+ | --fui-primary-70 | #524898 |
2562
+ | --fui-primary-80 | #433E74 |
2563
+ | --fui-primary-90 | #333152 |
2564
+ | --fui-primary-100 | #222233 |
2565
+ | --fui-primary-110 | #101016 |
2566
+ | --fui-primary-bg | var(--fui-primary-60) |
2567
+ | --fui-primary-muted | var(--fui-primary-10) |
2568
+ | --fui-primary-bg-hover | var(--fui-primary-70) |
2569
+ | --fui-primary-bg-pressed | var(--fui-primary-80) |
2570
+ | --fui-primary-bg-disabled | var(--fui-primary-30) |
2571
+ | --fui-primary-bg-subtle | var(--fui-primary-20) |
2572
+ | --fui-primary-fg | var(--fui-primary-70) |
2573
+ | --fui-primary-fg-subtle | var(--fui-primary-80) |
2574
+ | --fui-primary-10 | #100F17 |
2575
+ | --fui-primary-20 | #25223A |
2576
+ | --fui-primary-30 | #383160 |
2577
+ | --fui-primary-40 | #4A3E89 |
2578
+ | --fui-primary-50 | #5B48B5 |
2579
+ | --fui-primary-60 | #7A68CB |
2580
+ | --fui-primary-70 | #8876D4 |
2581
+ | --fui-primary-80 | #9685DC |
2582
+ | --fui-primary-90 | #A494E3 |
2583
+ | --fui-primary-100 | #B3A4E9 |
2584
+ | --fui-primary-110 | #C2B5EF |
2585
+ | --fui-primary-bg | var(--fui-primary-60) |
2586
+ | --fui-primary-muted | var(--fui-primary-10) |
2587
+ | --fui-primary-bg-hover | var(--fui-primary-70) |
2588
+ | --fui-primary-bg-pressed | var(--fui-primary-80) |
2589
+ | --fui-primary-bg-disabled | var(--fui-primary-30) |
2590
+ | --fui-primary-bg-subtle | var(--fui-primary-20) |
2591
+ | --fui-primary-fg | var(--fui-primary-70) |
2592
+ | --fui-primary-fg-subtle | var(--fui-primary-80) |
2593
+
2594
+ ### Accent
1521
2595
 
1522
- ### Background
2596
+ | Token | Value |
2597
+ |-------|-------|
2598
+ | --fui-accent-10 | #F8F6F9 |
2599
+ | --fui-accent-20 | #F1ECF3 |
2600
+ | --fui-accent-30 | #E9DEED |
2601
+ | --fui-accent-40 | #E0CFE7 |
2602
+ | --fui-accent-50 | #D8C0E2 |
2603
+ | --fui-accent-60 | #D1B0DD |
2604
+ | --fui-accent-70 | #B883CE |
2605
+ | --fui-accent-80 | #9D4CBD |
2606
+ | --fui-accent-90 | #75328F |
2607
+ | --fui-accent-100 | #492258 |
2608
+ | --fui-accent-110 | #23142A |
2609
+ | --fui-accent-bg | var(--fui-accent-60) |
2610
+ | --fui-accent-hover | var(--fui-accent-80) |
2611
+ | --fui-accent-pressed | var(--fui-accent-80) |
2612
+ | --fui-accent-disabled | var(--fui-accent-30) |
2613
+ | --fui-accent-subtle | var(--fui-accent-20) |
2614
+ | --fui-accent-fg | var(--fui-accent-70) |
2615
+ | --fui-accent-fg-subtle | var(--fui-accent-80) |
2616
+ | --fui-accent-10 | #161018 |
2617
+ | --fui-accent-20 | #221726 |
2618
+ | --fui-accent-30 | #34213B |
2619
+ | --fui-accent-40 | #4C2B59 |
2620
+ | --fui-accent-50 | #6C3582 |
2621
+ | --fui-accent-60 | #A34FC4 |
2622
+ | --fui-accent-70 | #B982CE |
2623
+ | --fui-accent-80 | #CCAAD9 |
2624
+ | --fui-accent-90 | #DBCAE2 |
2625
+ | --fui-accent-100 | #E8E0EB |
2626
+ | --fui-accent-110 | #F3F0F4 |
2627
+ | --fui-accent-bg | var(--fui-accent-60) |
2628
+ | --fui-accent-hover | var(--fui-accent-80) |
2629
+ | --fui-accent-pressed | var(--fui-accent-80) |
2630
+ | --fui-accent-disabled | var(--fui-accent-30) |
2631
+ | --fui-accent-subtle | var(--fui-accent-20) |
2632
+ | --fui-accent-fg | var(--fui-accent-70) |
2633
+ | --fui-accent-fg-subtle | var(--fui-accent-80) |
2634
+
2635
+ ### Neutral
1523
2636
 
1524
2637
  | Token | Value |
1525
2638
  |-------|-------|
1526
- | --fui-background-primary | var(--fui-surface-00) |
1527
- | --fui-background-hover | var(--fui-surface-02) |
2639
+ | --fui-neutral-10 | #FCFCFD |
2640
+ | --fui-neutral-20 | #F5F7FB |
2641
+ | --fui-neutral-30 | #ECEFF5 |
2642
+ | --fui-neutral-40 | #DDE3EC |
2643
+ | --fui-neutral-50 | #C8D0DD |
2644
+ | --fui-neutral-60 | #A6B1C2 |
2645
+ | --fui-neutral-70 | #7F8B9E |
2646
+ | --fui-neutral-80 | #5F697C |
2647
+ | --fui-neutral-90 | #444C5D |
2648
+ | --fui-neutral-100 | #2A303B |
2649
+ | --fui-neutral-110 | #11151B |
2650
+ | --fui-neutral-10 | #0C0F14 |
2651
+ | --fui-neutral-20 | #131923 |
2652
+ | --fui-neutral-30 | #1B2330 |
2653
+ | --fui-neutral-40 | #263041 |
2654
+ | --fui-neutral-50 | #364255 |
2655
+ | --fui-neutral-60 | #4D5B72 |
2656
+ | --fui-neutral-70 | #687891 |
2657
+ | --fui-neutral-80 | #8B9AB1 |
2658
+ | --fui-neutral-90 | #B0BCD0 |
2659
+ | --fui-neutral-100 | #D8DFEA |
2660
+ | --fui-neutral-110 | #F4F7FB |
1528
2661
 
1529
2662
  ### Error
1530
2663
 
1531
2664
  | Token | Value |
1532
2665
  |-------|-------|
1533
- | --fui-error | var(--fui-state-error) |
2666
+ | --fui-error-10 | #FFFBFA |
2667
+ | --fui-error-20 | #FED9D1 |
2668
+ | --fui-error-30 | #FDB5A9 |
2669
+ | --fui-error-40 | #FA9082 |
2670
+ | --fui-error-50 | #F56B5C |
2671
+ | --fui-error-60 | #F04438 |
2672
+ | --fui-error-70 | #EA2716 |
2673
+ | --fui-error-80 | #C52414 |
2674
+ | --fui-error-90 | #9F2112 |
2675
+ | --fui-error-100 | #791C0F |
2676
+ | --fui-error-110 | #55160C |
2677
+ | --fui-error-10 | #55160C |
2678
+ | --fui-error-20 | #841E10 |
2679
+ | --fui-error-30 | #B52412 |
2680
+ | --fui-error-40 | #E72612 |
2681
+ | --fui-error-50 | #F34839 |
2682
+ | --fui-error-60 | #F97066 |
2683
+ | --fui-error-70 | #FB8E83 |
2684
+ | --fui-error-80 | #FDABA0 |
2685
+ | --fui-error-90 | #FEC7BD |
2686
+ | --fui-error-100 | #FFE2DB |
2687
+ | --fui-error-110 | #FFFBFA |
2688
+
2689
+ ### Success
2690
+
2691
+ | Token | Value |
2692
+ |-------|-------|
2693
+ | --fui-success-10 | #F6FEF9 |
2694
+ | --fui-success-20 | #C0F8D7 |
2695
+ | --fui-success-30 | #8BF1B8 |
2696
+ | --fui-success-40 | #56EA9C |
2697
+ | --fui-success-50 | #22E383 |
2698
+ | --fui-success-60 | #17B26A |
2699
+ | --fui-success-70 | #13995D |
2700
+ | --fui-success-80 | #0F804F |
2701
+ | --fui-success-90 | #0B6740 |
2702
+ | --fui-success-100 | #084D31 |
2703
+ | --fui-success-110 | #053321 |
2704
+ | --fui-success-10 | #053321 |
2705
+ | --fui-success-20 | #0B5939 |
2706
+ | --fui-success-30 | #147C4E |
2707
+ | --fui-success-40 | #1F9D63 |
2708
+ | --fui-success-50 | #2CBC76 |
2709
+ | --fui-success-60 | #47CD89 |
2710
+ | --fui-success-70 | #66DB9D |
2711
+ | --fui-success-80 | #87E7B2 |
2712
+ | --fui-success-90 | #AAF1C8 |
2713
+ | --fui-success-100 | #CFF8DF |
2714
+ | --fui-success-110 | #F6FEF9 |
2715
+
2716
+ ### Warning
2717
+
2718
+ | Token | Value |
2719
+ |-------|-------|
2720
+ | --fui-warning-10 | #FFFCF5 |
2721
+ | --fui-warning-20 | #FFECC5 |
2722
+ | --fui-warning-30 | #FED995 |
2723
+ | --fui-warning-40 | #FCC366 |
2724
+ | --fui-warning-50 | #FAAB37 |
2725
+ | --fui-warning-60 | #F79009 |
2726
+ | --fui-warning-70 | #D4710A |
2727
+ | --fui-warning-80 | #B1570B |
2728
+ | --fui-warning-90 | #8F400C |
2729
+ | --fui-warning-100 | #6E2D0B |
2730
+ | --fui-warning-110 | #4E1D09 |
2731
+ | --fui-warning-10 | #4E1D09 |
2732
+ | --fui-warning-20 | #74310B |
2733
+ | --fui-warning-30 | #9C4A0B |
2734
+ | --fui-warning-40 | #C5680A |
2735
+ | --fui-warning-50 | #F08D07 |
2736
+ | --fui-warning-60 | #FDB022 |
2737
+ | --fui-warning-70 | #FEC14C |
2738
+ | --fui-warning-80 | #FED176 |
2739
+ | --fui-warning-90 | #FFE0A0 |
2740
+ | --fui-warning-100 | #FFEFCA |
2741
+ | --fui-warning-110 | #FFFCF5 |
2742
+
2743
+ ### Info
2744
+
2745
+ | Token | Value |
2746
+ |-------|-------|
2747
+ | --fui-info-10 | #F5F9FF |
2748
+ | --fui-info-20 | #CCE1FF |
2749
+ | --fui-info-30 | #A4CBFE |
2750
+ | --fui-info-40 | #7CB6FD |
2751
+ | --fui-info-50 | #55A2FC |
2752
+ | --fui-info-60 | #2E90FA |
2753
+ | --fui-info-70 | #1077F3 |
2754
+ | --fui-info-80 | #1062CF |
2755
+ | --fui-info-90 | #124EA8 |
2756
+ | --fui-info-100 | #123C83 |
2757
+ | --fui-info-110 | #102C60 |
2758
+ | --fui-info-10 | #102C60 |
2759
+ | --fui-info-20 | #12418B |
2760
+ | --fui-info-30 | #1259B7 |
2761
+ | --fui-info-40 | #1075E7 |
2762
+ | --fui-info-50 | #2C94F7 |
2763
+ | --fui-info-60 | #53B1FD |
2764
+ | --fui-info-70 | #73BBFE |
2765
+ | --fui-info-80 | #93C8FE |
2766
+ | --fui-info-90 | #B4D6FF |
2767
+ | --fui-info-100 | #D4E7FF |
2768
+ | --fui-info-110 | #F5F9FF |
2769
+
2770
+ ### Pluvia
2771
+
2772
+ | Token | Value |
2773
+ |-------|-------|
2774
+ | --fui-pluvia-teal-10 | #F9FCFC |
2775
+ | --fui-pluvia-teal-20 | #D1E8E9 |
2776
+ | --fui-pluvia-teal-30 | #A8D5D6 |
2777
+ | --fui-pluvia-teal-40 | #7FC2C5 |
2778
+ | --fui-pluvia-teal-50 | #54AFB4 |
2779
+ | --fui-pluvia-teal-60 | #3D8A90 |
2780
+ | --fui-pluvia-teal-70 | #37757B |
2781
+ | --fui-pluvia-teal-80 | #2F6066 |
2782
+ | --fui-pluvia-teal-90 | #284D52 |
2783
+ | --fui-pluvia-teal-100 | #203A3E |
2784
+ | --fui-pluvia-teal-110 | #17282B |
2785
+ | --fui-pluvia-teal-10 | #0A3733 |
2786
+ | --fui-pluvia-teal-20 | #105750 |
2787
+ | --fui-pluvia-teal-30 | #17776B |
2788
+ | --fui-pluvia-teal-40 | #1E9686 |
2789
+ | --fui-pluvia-teal-50 | #25B59F |
2790
+ | --fui-pluvia-teal-60 | #2ED3B7 |
2791
+ | --fui-pluvia-teal-70 | #53DEC5 |
2792
+ | --fui-pluvia-teal-80 | #7AE9D2 |
2793
+ | --fui-pluvia-teal-90 | #A2F1E0 |
2794
+ | --fui-pluvia-teal-100 | #CBF8EE |
2795
+ | --fui-pluvia-teal-110 | #F6FEFC |
2796
+
2797
+ ### Nimbus
2798
+
2799
+ | Token | Value |
2800
+ |-------|-------|
2801
+ | --fui-nimbus-blue-10 | #F9FBFC |
2802
+ | --fui-nimbus-blue-20 | #D1E0E9 |
2803
+ | --fui-nimbus-blue-30 | #A8C3D6 |
2804
+ | --fui-nimbus-blue-40 | #7FA4C5 |
2805
+ | --fui-nimbus-blue-50 | #5482B4 |
2806
+ | --fui-nimbus-blue-60 | #3D6190 |
2807
+ | --fui-nimbus-blue-70 | #37537B |
2808
+ | --fui-nimbus-blue-80 | #2F4566 |
2809
+ | --fui-nimbus-blue-90 | #283852 |
2810
+ | --fui-nimbus-blue-100 | #202B3E |
2811
+ | --fui-nimbus-blue-110 | #171E2B |
2812
+ | --fui-nimbus-blue-10 | #040609 |
2813
+ | --fui-nimbus-blue-20 | #101824 |
2814
+ | --fui-nimbus-blue-30 | #1B2A3F |
2815
+ | --fui-nimbus-blue-40 | #273C5A |
2816
+ | --fui-nimbus-blue-50 | #324E75 |
2817
+ | --fui-nimbus-blue-60 | #3D6190 |
2818
+ | --fui-nimbus-blue-70 | #4879B6 |
2819
+ | --fui-nimbus-blue-80 | #6793C7 |
2820
+ | --fui-nimbus-blue-90 | #88ADD6 |
2821
+ | --fui-nimbus-blue-100 | #ABC7E4 |
2822
+ | --fui-nimbus-blue-110 | #CFE0F1 |
2823
+
2824
+ ### Gray
2825
+
2826
+ | Token | Value |
2827
+ |-------|-------|
2828
+ | --fui-gray-cool-10 | #FCFCFD |
2829
+ | --fui-gray-cool-20 | #DCDDE8 |
2830
+ | --fui-gray-cool-30 | #BDBFD4 |
2831
+ | --fui-gray-cool-40 | #9CA1C0 |
2832
+ | --fui-gray-cool-50 | #7B84AD |
2833
+ | --fui-gray-cool-60 | #5D6A97 |
2834
+ | --fui-gray-cool-70 | #495682 |
2835
+ | --fui-gray-cool-80 | #37426C |
2836
+ | --fui-gray-cool-90 | #263054 |
2837
+ | --fui-gray-cool-100 | #181F3A |
2838
+ | --fui-gray-cool-110 | #0B0F1E |
2839
+ | --fui-gray-neutral-10 | #FCFCFD |
2840
+ | --fui-gray-neutral-20 | #DCDDE7 |
2841
+ | --fui-gray-neutral-30 | #BEC0CF |
2842
+ | --fui-gray-neutral-40 | #A1A5B6 |
2843
+ | --fui-gray-neutral-50 | #858B9C |
2844
+ | --fui-gray-neutral-60 | #6C727F |
2845
+ | --fui-gray-neutral-70 | #535C70 |
2846
+ | --fui-gray-neutral-80 | #3D485F |
2847
+ | --fui-gray-neutral-90 | #2A344B |
2848
+ | --fui-gray-neutral-100 | #192234 |
2849
+ | --fui-gray-neutral-110 | #0B101B |
2850
+ | --fui-gray-iron-10 | #FCFCFC |
2851
+ | --fui-gray-iron-20 | #E1E1E1 |
2852
+ | --fui-gray-iron-30 | #C5C5C7 |
2853
+ | --fui-gray-iron-40 | #A9A9AE |
2854
+ | --fui-gray-iron-50 | #8D8D95 |
2855
+ | --fui-gray-iron-60 | #71717B |
2856
+ | --fui-gray-iron-70 | #5E5E67 |
2857
+ | --fui-gray-iron-80 | #4B4B53 |
2858
+ | --fui-gray-iron-90 | #38383F |
2859
+ | --fui-gray-iron-100 | #25252B |
2860
+ | --fui-gray-iron-110 | #131316 |
2861
+ | --fui-gray-true-10 | #FCFCFC |
2862
+ | --fui-gray-true-20 | #E1E1E1 |
2863
+ | --fui-gray-true-30 | #C5C5C5 |
2864
+ | --fui-gray-true-40 | #AAAAAA |
2865
+ | --fui-gray-true-50 | #8E8E8E |
2866
+ | --fui-gray-true-60 | #737373 |
2867
+ | --fui-gray-true-70 | #5F5F5F |
2868
+ | --fui-gray-true-80 | #4B4B4B |
2869
+ | --fui-gray-true-90 | #373737 |
2870
+ | --fui-gray-true-100 | #232323 |
2871
+ | --fui-gray-true-110 | #0F0F0F |
2872
+ | --fui-gray-cool-10 | #0B0F1E |
2873
+ | --fui-gray-cool-20 | #1B2342 |
2874
+ | --fui-gray-cool-30 | #2D3963 |
2875
+ | --fui-gray-cool-40 | #425182 |
2876
+ | --fui-gray-cool-50 | #59699F |
2877
+ | --fui-gray-cool-60 | #7D89AF |
2878
+ | --fui-gray-cool-70 | #979FBE |
2879
+ | --fui-gray-cool-80 | #B1B5CD |
2880
+ | --fui-gray-cool-90 | #CACCDD |
2881
+ | --fui-gray-cool-100 | #E3E4ED |
2882
+ | --fui-gray-cool-110 | #FCFCFD |
2883
+ | --fui-gray-neutral-10 | #0B101B |
2884
+ | --fui-gray-neutral-20 | #1F2B41 |
2885
+ | --fui-gray-neutral-30 | #374764 |
2886
+ | --fui-gray-neutral-40 | #536583 |
2887
+ | --fui-gray-neutral-50 | #75849B |
2888
+ | --fui-gray-neutral-60 | #9DA4AE |
2889
+ | --fui-gray-neutral-70 | #AFB4BF |
2890
+ | --fui-gray-neutral-80 | #C1C5D0 |
2891
+ | --fui-gray-neutral-90 | #D4D6E0 |
2892
+ | --fui-gray-neutral-100 | #E8E8EF |
2893
+ | --fui-gray-neutral-110 | #FCFCFD |
2894
+ | --fui-gray-iron-10 | #131316 |
2895
+ | --fui-gray-iron-20 | #2E2E35 |
2896
+ | --fui-gray-iron-30 | #494954 |
2897
+ | --fui-gray-iron-40 | #646473 |
2898
+ | --fui-gray-iron-50 | #818190 |
2899
+ | --fui-gray-iron-60 | #A0A0AB |
2900
+ | --fui-gray-iron-70 | #B3B3BA |
2901
+ | --fui-gray-iron-80 | #C6C6CA |
2902
+ | --fui-gray-iron-90 | #D8D8DA |
2903
+ | --fui-gray-iron-100 | #EAEAEB |
2904
+ | --fui-gray-iron-110 | #FCFCFC |
2905
+ | --fui-gray-true-10 | #0F0F0F |
2906
+ | --fui-gray-true-20 | #2D2D2D |
2907
+ | --fui-gray-true-30 | #4A4A4A |
2908
+ | --fui-gray-true-40 | #686868 |
2909
+ | --fui-gray-true-50 | #858585 |
2910
+ | --fui-gray-true-60 | #A3A3A3 |
2911
+ | --fui-gray-true-70 | #B5B5B5 |
2912
+ | --fui-gray-true-80 | #C7C7C7 |
2913
+ | --fui-gray-true-90 | #D8D8D8 |
2914
+ | --fui-gray-true-100 | #EAEAEA |
2915
+ | --fui-gray-true-110 | #FCFCFC |
2916
+
2917
+ ### Moss
2918
+
2919
+ | Token | Value |
2920
+ |-------|-------|
2921
+ | --fui-moss-10 | #FAFDF7 |
2922
+ | --fui-moss-20 | #DCF1C7 |
2923
+ | --fui-moss-30 | #BFE598 |
2924
+ | --fui-moss-40 | #A1D868 |
2925
+ | --fui-moss-50 | #84CB39 |
2926
+ | --fui-moss-60 | #669F2A |
2927
+ | --fui-moss-70 | #578724 |
2928
+ | --fui-moss-80 | #486F1E |
2929
+ | --fui-moss-90 | #385718 |
2930
+ | --fui-moss-100 | #294011 |
2931
+ | --fui-moss-110 | #1A280B |
2932
+ | --fui-moss-10 | #1A280B |
2933
+ | --fui-moss-20 | #304914 |
2934
+ | --fui-moss-30 | #456B1D |
2935
+ | --fui-moss-40 | #5B8C26 |
2936
+ | --fui-moss-50 | #71AE2F |
2937
+ | --fui-moss-60 | #86CB3C |
2938
+ | --fui-moss-70 | #9DD561 |
2939
+ | --fui-moss-80 | #B4E086 |
2940
+ | --fui-moss-90 | #CBEAAC |
2941
+ | --fui-moss-100 | #E2F3D1 |
2942
+ | --fui-moss-110 | #FAFDF7 |
2943
+
2944
+ ### Green
2945
+
2946
+ | Token | Value |
2947
+ |-------|-------|
2948
+ | --fui-green-light-10 | #FAFEF5 |
2949
+ | --fui-green-light-20 | #E0F9C4 |
2950
+ | --fui-green-light-30 | #C4F294 |
2951
+ | --fui-green-light-40 | #A5EB64 |
2952
+ | --fui-green-light-50 | #85E336 |
2953
+ | --fui-green-light-60 | #66C61D |
2954
+ | --fui-green-light-70 | #54A51B |
2955
+ | --fui-green-light-80 | #448418 |
2956
+ | --fui-green-light-90 | #346514 |
2957
+ | --fui-green-light-100 | #244610 |
2958
+ | --fui-green-light-110 | #15290A |
2959
+ | --fui-green-10 | #F6FEF9 |
2960
+ | --fui-green-20 | #C0F8D7 |
2961
+ | --fui-green-30 | #8AF3B8 |
2962
+ | --fui-green-40 | #53ED9C |
2963
+ | --fui-green-50 | #1DE883 |
2964
+ | --fui-green-60 | #12B76A |
2965
+ | --fui-green-70 | #0F9D5D |
2966
+ | --fui-green-80 | #0D824F |
2967
+ | --fui-green-90 | #0A6840 |
2968
+ | --fui-green-100 | #084D31 |
2969
+ | --fui-green-110 | #053321 |
2970
+ | --fui-green-light-10 | #15290A |
2971
+ | --fui-green-light-20 | #295012 |
2972
+ | --fui-green-light-30 | #3E7719 |
2973
+ | --fui-green-light-40 | #54A01E |
2974
+ | --fui-green-light-50 | #6BCA22 |
2975
+ | --fui-green-light-60 | #85E13A |
2976
+ | --fui-green-light-70 | #9FE85E |
2977
+ | --fui-green-light-80 | #B8EF83 |
2978
+ | --fui-green-light-90 | #CFF5A8 |
2979
+ | --fui-green-light-100 | #E5FACE |
2980
+ | --fui-green-light-110 | #FAFEF5 |
2981
+ | --fui-green-10 | #053321 |
2982
+ | --fui-green-20 | #0A5737 |
2983
+ | --fui-green-30 | #117A4C |
2984
+ | --fui-green-40 | #199B60 |
2985
+ | --fui-green-50 | #22BB72 |
2986
+ | --fui-green-60 | #32D583 |
2987
+ | --fui-green-70 | #57E097 |
2988
+ | --fui-green-80 | #7CE9AD |
2989
+ | --fui-green-90 | #A4F2C5 |
2990
+ | --fui-green-100 | #CCF8DE |
2991
+ | --fui-green-110 | #F6FEF9 |
2992
+
2993
+ ### Cyan
2994
+
2995
+ | Token | Value |
2996
+ |-------|-------|
2997
+ | --fui-cyan-10 | #F5FEFF |
2998
+ | --fui-cyan-20 | #BDF7FF |
2999
+ | --fui-cyan-30 | #86EEFE |
3000
+ | --fui-cyan-40 | #4FE2FC |
3001
+ | --fui-cyan-50 | #19D4FA |
3002
+ | --fui-cyan-60 | #06AED4 |
3003
+ | --fui-cyan-70 | #0992B5 |
3004
+ | --fui-cyan-80 | #0C7797 |
3005
+ | --fui-cyan-90 | #0D5F7B |
3006
+ | --fui-cyan-100 | #0C495F |
3007
+ | --fui-cyan-110 | #0B3445 |
3008
+ | --fui-cyan-10 | #0B3445 |
3009
+ | --fui-cyan-20 | #0F5068 |
3010
+ | --fui-cyan-30 | #116E8B |
3011
+ | --fui-cyan-40 | #138EB0 |
3012
+ | --fui-cyan-50 | #14B1D6 |
3013
+ | --fui-cyan-60 | #22CCEE |
3014
+ | --fui-cyan-70 | #4ADAF4 |
3015
+ | --fui-cyan-80 | #72E6F9 |
3016
+ | --fui-cyan-90 | #9DF0FC |
3017
+ | --fui-cyan-100 | #C8F8FE |
3018
+ | --fui-cyan-110 | #F5FEFF |
3019
+
3020
+ ### Blue
3021
+
3022
+ | Token | Value |
3023
+ |-------|-------|
3024
+ | --fui-blue-10 | #F5FAFF |
3025
+ | --fui-blue-20 | #CCE5FF |
3026
+ | --fui-blue-30 | #A4D0FE |
3027
+ | --fui-blue-40 | #7CBBFD |
3028
+ | --fui-blue-50 | #55A6FC |
3029
+ | --fui-blue-60 | #2E90FA |
3030
+ | --fui-blue-70 | #1077F3 |
3031
+ | --fui-blue-80 | #1062CF |
3032
+ | --fui-blue-90 | #124EA8 |
3033
+ | --fui-blue-100 | #123C83 |
3034
+ | --fui-blue-110 | #102C60 |
3035
+ | --fui-blue-dark-10 | #F5F8FF |
3036
+ | --fui-blue-dark-20 | #CCDCFF |
3037
+ | --fui-blue-dark-30 | #A3C0FF |
3038
+ | --fui-blue-dark-40 | #7BA5FF |
3039
+ | --fui-blue-dark-50 | #528AFF |
3040
+ | --fui-blue-dark-60 | #2970FF |
3041
+ | --fui-blue-dark-70 | #0256FF |
3042
+ | --fui-blue-dark-80 | #0049DA |
3043
+ | --fui-blue-dark-90 | #003CB4 |
3044
+ | --fui-blue-dark-100 | #002F8D |
3045
+ | --fui-blue-dark-110 | #002266 |
3046
+ | --fui-blue-10 | #102C60 |
3047
+ | --fui-blue-20 | #12418B |
3048
+ | --fui-blue-30 | #1259B7 |
3049
+ | --fui-blue-40 | #1075E7 |
3050
+ | --fui-blue-50 | #2C94F7 |
3051
+ | --fui-blue-60 | #53B1FD |
3052
+ | --fui-blue-70 | #73BEFE |
3053
+ | --fui-blue-80 | #93CCFE |
3054
+ | --fui-blue-90 | #B4DBFF |
3055
+ | --fui-blue-100 | #D4EAFF |
3056
+ | --fui-blue-110 | #F5FAFF |
3057
+ | --fui-blue-dark-10 | #002266 |
3058
+ | --fui-blue-dark-20 | #003295 |
3059
+ | --fui-blue-dark-30 | #0041C4 |
3060
+ | --fui-blue-dark-40 | #0050F3 |
3061
+ | --fui-blue-dark-50 | #236CFF |
3062
+ | --fui-blue-dark-60 | #528BFF |
3063
+ | --fui-blue-dark-70 | #73A0FF |
3064
+ | --fui-blue-dark-80 | #93B5FF |
3065
+ | --fui-blue-dark-90 | #B4CBFF |
3066
+ | --fui-blue-dark-100 | #D4E1FF |
3067
+ | --fui-blue-dark-110 | #F5F8FF |
3068
+
3069
+ ### Indigo
3070
+
3071
+ | Token | Value |
3072
+ |-------|-------|
3073
+ | --fui-indigo-10 | #F5F8FF |
3074
+ | --fui-indigo-20 | #D6E0FE |
3075
+ | --fui-indigo-30 | #B7C7FD |
3076
+ | --fui-indigo-40 | #99ACFB |
3077
+ | --fui-indigo-50 | #7D90F7 |
3078
+ | --fui-indigo-60 | #6172F3 |
3079
+ | --fui-indigo-70 | #4052E8 |
3080
+ | --fui-indigo-80 | #2436D8 |
3081
+ | --fui-indigo-90 | #2631AB |
3082
+ | --fui-indigo-100 | #242B82 |
3083
+ | --fui-indigo-110 | #1F235B |
3084
+ | --fui-indigo-10 | #1F235B |
3085
+ | --fui-indigo-20 | #252E88 |
3086
+ | --fui-indigo-30 | #2638BA |
3087
+ | --fui-indigo-40 | #324CE1 |
3088
+ | --fui-indigo-50 | #5771EF |
3089
+ | --fui-indigo-60 | #8098F9 |
3090
+ | --fui-indigo-70 | #97ADFB |
3091
+ | --fui-indigo-80 | #ADC0FD |
3092
+ | --fui-indigo-90 | #C5D4FE |
3093
+ | --fui-indigo-100 | #DDE6FF |
3094
+ | --fui-indigo-110 | #F5F8FF |
3095
+
3096
+ ### Purple
3097
+
3098
+ | Token | Value |
3099
+ |-------|-------|
3100
+ | --fui-purple-10 | #FAFAFF |
3101
+ | --fui-purple-20 | #DAD9FF |
3102
+ | --fui-purple-30 | #BEB8FE |
3103
+ | --fui-purple-40 | #A598FC |
3104
+ | --fui-purple-50 | #8E79FA |
3105
+ | --fui-purple-60 | #7A5AF8 |
3106
+ | --fui-purple-70 | #5D33F0 |
3107
+ | --fui-purple-80 | #4717DF |
3108
+ | --fui-purple-90 | #3F17AF |
3109
+ | --fui-purple-100 | #341682 |
3110
+ | --fui-purple-110 | #271258 |
3111
+ | --fui-purple-10 | #271258 |
3112
+ | --fui-purple-20 | #37178B |
3113
+ | --fui-purple-30 | #4219C2 |
3114
+ | --fui-purple-40 | #5229EA |
3115
+ | --fui-purple-50 | #7458F4 |
3116
+ | --fui-purple-60 | #9B8AFB |
3117
+ | --fui-purple-70 | #ABA0FC |
3118
+ | --fui-purple-80 | #BCB6FE |
3119
+ | --fui-purple-90 | #CFCCFE |
3120
+ | --fui-purple-100 | #E4E3FF |
3121
+ | --fui-purple-110 | #FAFAFF |
3122
+
3123
+ ### Fuchsia
3124
+
3125
+ | Token | Value |
3126
+ |-------|-------|
3127
+ | --fui-fuchsia-10 | #FEFAFF |
3128
+ | --fui-fuchsia-20 | #F6D3FE |
3129
+ | --fui-fuchsia-30 | #EEAEFD |
3130
+ | --fui-fuchsia-40 | #E68AFA |
3131
+ | --fui-fuchsia-50 | #DD66F6 |
3132
+ | --fui-fuchsia-60 | #D444F1 |
3133
+ | --fui-fuchsia-70 | #CB21E9 |
3134
+ | --fui-fuchsia-80 | #AE19C5 |
3135
+ | --fui-fuchsia-90 | #8C189B |
3136
+ | --fui-fuchsia-100 | #691573 |
3137
+ | --fui-fuchsia-110 | #47104C |
3138
+ | --fui-fuchsia-10 | #47104C |
3139
+ | --fui-fuchsia-20 | #74167E |
3140
+ | --fui-fuchsia-30 | #A118B3 |
3141
+ | --fui-fuchsia-40 | #CC1BE8 |
3142
+ | --fui-fuchsia-50 | #D948F3 |
3143
+ | --fui-fuchsia-60 | #E478FA |
3144
+ | --fui-fuchsia-70 | #E991FC |
3145
+ | --fui-fuchsia-80 | #EEABFD |
3146
+ | --fui-fuchsia-90 | #F3C5FE |
3147
+ | --fui-fuchsia-100 | #F9DFFF |
3148
+ | --fui-fuchsia-110 | #FEFAFF |
3149
+
3150
+ ### Pink
3151
+
3152
+ | Token | Value |
3153
+ |-------|-------|
3154
+ | --fui-pink-10 | #FEF6FB |
3155
+ | --fui-pink-20 | #FAD3EC |
3156
+ | --fui-pink-30 | #F7B0DF |
3157
+ | --fui-pink-40 | #F48DD2 |
3158
+ | --fui-pink-50 | #F16AC6 |
3159
+ | --fui-pink-60 | #EE46BC |
3160
+ | --fui-pink-70 | #E721A6 |
3161
+ | --fui-pink-80 | #C41886 |
3162
+ | --fui-pink-90 | #9B1566 |
3163
+ | --fui-pink-100 | #731249 |
3164
+ | --fui-pink-110 | #4C0D2F |
3165
+ | --fui-pink-10 | #4C0D2F |
3166
+ | --fui-pink-20 | #7C124E |
3167
+ | --fui-pink-30 | #AF166F |
3168
+ | --fui-pink-40 | #E31893 |
3169
+ | --fui-pink-50 | #EF41AE |
3170
+ | --fui-pink-60 | #F670C7 |
3171
+ | --fui-pink-70 | #F78CD1 |
3172
+ | --fui-pink-80 | #F8A7DB |
3173
+ | --fui-pink-90 | #F9C2E5 |
3174
+ | --fui-pink-100 | #FBDCF0 |
3175
+ | --fui-pink-110 | #FEF6FB |
3176
+
3177
+ ### Rose
3178
+
3179
+ | Token | Value |
3180
+ |-------|-------|
3181
+ | --fui-rose-10 | #FFF5F6 |
3182
+ | --fui-rose-20 | #FFCFD5 |
3183
+ | --fui-rose-30 | #FDA9B6 |
3184
+ | --fui-rose-40 | #FC859A |
3185
+ | --fui-rose-50 | #F96080 |
3186
+ | --fui-rose-60 | #F63D68 |
3187
+ | --fui-rose-70 | #F0184F |
3188
+ | --fui-rose-80 | #CD1046 |
3189
+ | --fui-rose-90 | #A2103D |
3190
+ | --fui-rose-100 | #790E32 |
3191
+ | --fui-rose-110 | #510B24 |
3192
+ | --fui-rose-10 | #510B24 |
3193
+ | --fui-rose-20 | #840E35 |
3194
+ | --fui-rose-30 | #B91043 |
3195
+ | --fui-rose-40 | #F10E4C |
3196
+ | --fui-rose-50 | #F83E6B |
3197
+ | --fui-rose-60 | #FD6F8E |
3198
+ | --fui-rose-70 | #FE8AA0 |
3199
+ | --fui-rose-80 | #FEA4B4 |
3200
+ | --fui-rose-90 | #FFBFC8 |
3201
+ | --fui-rose-100 | #FFDADE |
3202
+ | --fui-rose-110 | #FFF5F6 |
3203
+
3204
+ ### Orange
3205
+
3206
+ | Token | Value |
3207
+ |-------|-------|
3208
+ | --fui-orange-dark-10 | #FFF9F5 |
3209
+ | --fui-orange-dark-20 | #FFDAC5 |
3210
+ | --fui-orange-dark-30 | #FFB995 |
3211
+ | --fui-orange-dark-40 | #FF9565 |
3212
+ | --fui-orange-dark-50 | #FF6E35 |
3213
+ | --fui-orange-dark-60 | #FF4405 |
3214
+ | --fui-orange-dark-70 | #DE3605 |
3215
+ | --fui-orange-dark-80 | #BA2C08 |
3216
+ | --fui-orange-dark-90 | #97220A |
3217
+ | --fui-orange-dark-100 | #751A0B |
3218
+ | --fui-orange-dark-110 | #55130A |
3219
+ | --fui-orange-10 | #FEFAF5 |
3220
+ | --fui-orange-20 | #FAE3CB |
3221
+ | --fui-orange-30 | #F7CAA1 |
3222
+ | --fui-orange-40 | #F4AC77 |
3223
+ | --fui-orange-50 | #F18C4B |
3224
+ | --fui-orange-60 | #EF6820 |
3225
+ | --fui-orange-70 | #D85314 |
3226
+ | --fui-orange-80 | #B54315 |
3227
+ | --fui-orange-90 | #923515 |
3228
+ | --fui-orange-100 | #722913 |
3229
+ | --fui-orange-110 | #521D10 |
3230
+ | --fui-orange-dark-10 | #55130A |
3231
+ | --fui-orange-dark-20 | #7D1D0B |
3232
+ | --fui-orange-dark-30 | #A6280B |
3233
+ | --fui-orange-dark-40 | #D13509 |
3234
+ | --fui-orange-dark-50 | #FA460A |
3235
+ | --fui-orange-dark-60 | #FF692E |
3236
+ | --fui-orange-dark-70 | #FF8A56 |
3237
+ | --fui-orange-dark-80 | #FFA87E |
3238
+ | --fui-orange-dark-90 | #FFC5A5 |
3239
+ | --fui-orange-dark-100 | #FFE0CD |
3240
+ | --fui-orange-dark-110 | #FFF9F5 |
3241
+ | --fui-orange-10 | #521D10 |
3242
+ | --fui-orange-20 | #792C14 |
3243
+ | --fui-orange-30 | #A13C16 |
3244
+ | --fui-orange-40 | #CB4E17 |
3245
+ | --fui-orange-50 | #EB6721 |
3246
+ | --fui-orange-60 | #F38744 |
3247
+ | --fui-orange-70 | #F4A368 |
3248
+ | --fui-orange-80 | #F6BC8C |
3249
+ | --fui-orange-90 | #F8D3B0 |
3250
+ | --fui-orange-100 | #FBE8D3 |
3251
+ | --fui-orange-110 | #FEFAF5 |
3252
+
3253
+ ### Yellow
3254
+
3255
+ | Token | Value |
3256
+ |-------|-------|
3257
+ | --fui-yellow-10 | #FEFDF0 |
3258
+ | --fui-yellow-20 | #FBF5C0 |
3259
+ | --fui-yellow-30 | #F9E990 |
3260
+ | --fui-yellow-40 | #F8D95F |
3261
+ | --fui-yellow-50 | #F7C62E |
3262
+ | --fui-yellow-60 | #EAAA08 |
3263
+ | --fui-yellow-70 | #C9840A |
3264
+ | --fui-yellow-80 | #A9640B |
3265
+ | --fui-yellow-90 | #89490B |
3266
+ | --fui-yellow-100 | #6B320B |
3267
+ | --fui-yellow-110 | #4D2009 |
3268
+ | --fui-yellow-10 | #4D2009 |
3269
+ | --fui-yellow-20 | #70360B |
3270
+ | --fui-yellow-30 | #95510B |
3271
+ | --fui-yellow-40 | #BA730B |
3272
+ | --fui-yellow-50 | #E19C09 |
3273
+ | --fui-yellow-60 | #FAC515 |
3274
+ | --fui-yellow-70 | #F9D542 |
3275
+ | --fui-yellow-80 | #F9E26F |
3276
+ | --fui-yellow-90 | #FAED9B |
3277
+ | --fui-yellow-100 | #FCF6C6 |
3278
+ | --fui-yellow-110 | #FEFDF0 |
3279
+
3280
+ ### Alpha
3281
+
3282
+ | Token | Value |
3283
+ |-------|-------|
3284
+ | --fui-alpha-0 | #1A1A1A00 |
3285
+ | --fui-alpha-20 | #1A1A1A0F |
3286
+ | --fui-alpha-30 | #1A1A1A1A |
3287
+ | --fui-alpha-40 | #1A1A1A33 |
3288
+ | --fui-alpha-50 | #1A1A1A4D |
3289
+ | --fui-alpha-60 | #1A1A1A66 |
3290
+ | --fui-alpha-70 | #1A1A1A80 |
3291
+ | --fui-alpha-80 | #1A1A1A99 |
3292
+ | --fui-alpha-90 | #1A1A1AB3 |
3293
+ | --fui-alpha-100 | #1A1A1AFF |
3294
+ | --fui-alpha-0 | #FFFFFF00 |
3295
+ | --fui-alpha-20 | #FFFFFF0F |
3296
+ | --fui-alpha-30 | #FFFFFF1A |
3297
+ | --fui-alpha-40 | #FFFFFF33 |
3298
+ | --fui-alpha-50 | #FFFFFF4D |
3299
+ | --fui-alpha-60 | #FFFFFF66 |
3300
+ | --fui-alpha-70 | #FFFFFF80 |
3301
+ | --fui-alpha-80 | #FFFFFF99 |
3302
+ | --fui-alpha-90 | #FFFFFFB3 |
3303
+ | --fui-alpha-100 | #FFFFFFFF |
3304
+
3305
+ ### Shadow
3306
+
3307
+ | Token | Value |
3308
+ |-------|-------|
3309
+ | --fui-shadow-xs | 0 1px 2px rgba(0, 0, 0, 0.05) |
3310
+ | --fui-shadow-sm | 0 1px 3px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.04) |
3311
+ | --fui-shadow-md | 0 4px 6px rgba(0, 0, 0, 0.07), 0 2px 4px rgba(0, 0, 0, 0.05) |
3312
+ | --fui-shadow-lg | 0 10px 15px rgba(0, 0, 0, 0.08), 0 4px 6px rgba(0, 0, 0, 0.05) |
3313
+ | --fui-shadow-xl | 0 20px 25px rgba(0, 0, 0, 0.1), 0 10px 10px rgba(0, 0, 0, 0.04) |
3314
+ | --fui-shadow-2xl | 0 25px 50px rgba(0, 0, 0, 0.15) |
3315
+ | --fui-shadow-inner | inset 0 2px 4px rgba(0, 0, 0, 0.05) |
3316
+ | --fui-shadow-xs | 0 1px 2px rgba(0, 0, 0, 0.4) |
3317
+ | --fui-shadow-sm | 0 1px 3px rgba(0, 0, 0, 0.5), 0 1px 2px rgba(0, 0, 0, 0.3) |
3318
+ | --fui-shadow-md | 0 4px 6px rgba(0, 0, 0, 0.5), 0 2px 4px rgba(0, 0, 0, 0.3) |
3319
+ | --fui-shadow-lg | 0 10px 15px rgba(0, 0, 0, 0.55), 0 4px 6px rgba(0, 0, 0, 0.35) |
3320
+ | --fui-shadow-xl | 0 20px 25px rgba(0, 0, 0, 0.6), 0 10px 10px rgba(0, 0, 0, 0.35) |
3321
+ | --fui-shadow-2xl | 0 25px 50px rgba(0, 0, 0, 0.7) |
3322
+ | --fui-shadow-inner | inset 0 2px 4px rgba(0, 0, 0, 0.3) |
3323
+
3324
+ ### Bg
3325
+
3326
+ | Token | Value |
3327
+ |-------|-------|
3328
+ | --fui-bg-default | var(--fui-neutral-10) |
3329
+ | --fui-bg-subtle | var(--fui-neutral-20) |
3330
+ | --fui-bg-muted | var(--fui-neutral-30) |
3331
+ | --fui-bg-inverse | var(--fui-neutral-110) |
3332
+ | --fui-bg-primary | var(--fui-primary-10) |
3333
+ | --fui-bg-error | var(--fui-error-20) |
3334
+ | --fui-bg-success | var(--fui-success-20) |
3335
+ | --fui-bg-warning | var(--fui-warning-20) |
3336
+ | --fui-bg-info | var(--fui-info-20) |
3337
+ | --fui-bg-disable | var(--fui-neutral-40) |
3338
+ | --fui-bg-default | var(--fui-neutral-10) |
3339
+ | --fui-bg-subtle | var(--fui-neutral-20) |
3340
+ | --fui-bg-muted | var(--fui-neutral-30) |
3341
+ | --fui-bg-inverse | var(--fui-neutral-110) |
3342
+ | --fui-bg-primary | var(--fui-primary-10) |
3343
+ | --fui-bg-error | var(--fui-error-20) |
3344
+ | --fui-bg-success | var(--fui-success-20) |
3345
+ | --fui-bg-warning | var(--fui-warning-20) |
3346
+ | --fui-bg-info | var(--fui-info-20) |
3347
+ | --fui-bg-disable | var(--fui-neutral-40) |
3348
+
3349
+ ### Fill
3350
+
3351
+ | Token | Value |
3352
+ |-------|-------|
3353
+ | --fui-fill-error | var(--fui-error-60) |
3354
+ | --fui-fill-success | var(--fui-success-60) |
3355
+ | --fui-fill-warning | var(--fui-warning-60) |
3356
+ | --fui-fill-info | var(--fui-info-60) |
3357
+ | --fui-fill-error-hover | var(--fui-error-110) |
3358
+ | --fui-fill-success-hover | var(--fui-success-110) |
3359
+ | --fui-fill-warning-hover | var(--fui-warning-110) |
3360
+ | --fui-fill-info-hover | var(--fui-info-110) |
3361
+ | --fui-fill-error | var(--fui-error-60) |
3362
+ | --fui-fill-success | var(--fui-success-60) |
3363
+ | --fui-fill-warning | var(--fui-warning-60) |
3364
+ | --fui-fill-info | var(--fui-info-60) |
3365
+ | --fui-fill-error-hover | var(--fui-error-110) |
3366
+ | --fui-fill-success-hover | var(--fui-success-110) |
3367
+ | --fui-fill-warning-hover | var(--fui-warning-110) |
3368
+ | --fui-fill-info-hover | var(--fui-info-110) |
3369
+
3370
+ ### State
3371
+
3372
+ | Token | Value |
3373
+ |-------|-------|
3374
+ | --fui-state-focus-ring | var(--fui-primary-50) |
3375
+ | --fui-state-selected-bg | var(--fui-primary-20) |
3376
+ | --fui-state-selected-fg | var(--fui-primary-80) |
3377
+ | --fui-state-overlay-hover | rgba(17, 21, 27, 0.06) |
3378
+ | --fui-state-overlay-pressed | rgba(17, 21, 27, 0.12) |
3379
+ | --fui-state-focus-ring-width | 2px |
3380
+ | --fui-state-focus-ring-offset | 2px |
3381
+ | --fui-state-disabled-opacity | 0.5 |
3382
+ | --fui-state-focus-ring | var(--fui-primary-50) |
3383
+ | --fui-state-selected-bg | var(--fui-primary-20) |
3384
+ | --fui-state-selected-fg | var(--fui-primary-80) |
3385
+ | --fui-state-overlay-hover | rgba(244, 247, 251, 0.08) |
3386
+ | --fui-state-overlay-pressed | rgba(244, 247, 251, 0.16) |
3387
+ | --fui-state-focus-ring-width | 2px |
3388
+ | --fui-state-focus-ring-offset | 2px |
3389
+ | --fui-state-disabled-opacity | 0.5 |
3390
+
3391
+ ### Field
3392
+
3393
+ | Token | Value |
3394
+ |-------|-------|
3395
+ | --fui-field-bg | var(--fui-neutral-10) |
3396
+ | --fui-field-bg-disabled | var(--fui-neutral-20) |
3397
+ | --fui-field-border | var(--fui-neutral-40) |
3398
+ | --fui-field-border-hover | var(--fui-neutral-60) |
3399
+ | --fui-field-border-focus | var(--fui-primary-50) |
3400
+ | --fui-field-border-error | var(--fui-error-60) |
3401
+ | --fui-field-placeholder | var(--fui-neutral-70) |
3402
+ | --fui-field-bg | var(--fui-neutral-10) |
3403
+ | --fui-field-bg-disabled | var(--fui-neutral-20) |
3404
+ | --fui-field-border | var(--fui-neutral-40) |
3405
+ | --fui-field-border-hover | var(--fui-neutral-60) |
3406
+ | --fui-field-border-focus | var(--fui-primary-60) |
3407
+ | --fui-field-border-error | var(--fui-error-60) |
3408
+ | --fui-field-placeholder | var(--fui-neutral-70) |
1534
3409
 
1535
3410
  ### Card
1536
3411
 
1537
3412
  | Token | Value |
1538
3413
  |-------|-------|
1539
- | --fui-card-padding | var(--fui-spacing-06) |
1540
- | --fui-card-shadow | 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24) |
1541
- | --fui-card-shadow-hover | 0 3px 6px rgba(0, 0, 0, 0.15), 0 2px 4px rgba(0, 0, 0, 0.12) |
1542
- | --fui-card-border-radius | var(--fui-border-radius-md) |
3414
+ | --fui-card-padding | var(--fui-spacing-7) |
3415
+ | --fui-card-shadow | var(--fui-shadow-sm) |
3416
+ | --fui-card-shadow-hover | var(--fui-shadow-lg) |
3417
+ | --fui-card-border-radius | var(--fui-radius-xl) |
3418
+ | --fui-card-padding | var(--fui-spacing-9) |
3419
+ | --fui-card-shadow | var(--fui-shadow-sm) |
3420
+ | --fui-card-shadow-hover | var(--fui-shadow-lg) |
3421
+ | --fui-card-border-radius | var(--fui-radius-md) |