@cognite/aura 0.3.5 → 1.46105.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 (446) hide show
  1. package/CHANGELOG.md +264 -0
  2. package/DESIGN.md +638 -281
  3. package/LICENSE +21 -0
  4. package/README.md +21 -13
  5. package/dist/colors-deprecated.css +587 -0
  6. package/dist/colors.css +803 -830
  7. package/dist/components/index.d.ts +63 -57
  8. package/dist/components/index.js +62 -59
  9. package/dist/components/index.js.map +1 -0
  10. package/dist/components/ui/core/accordion/accordion.d.ts +19 -18
  11. package/dist/components/ui/core/accordion/accordion.js +99 -78
  12. package/dist/components/ui/core/accordion/accordion.js.map +1 -0
  13. package/dist/components/ui/core/action-toolbar/action-toolbar-motion.d.ts +8 -0
  14. package/dist/components/ui/core/action-toolbar/action-toolbar-motion.js +125 -0
  15. package/dist/components/ui/core/action-toolbar/action-toolbar-motion.js.map +1 -0
  16. package/dist/components/ui/core/action-toolbar/action-toolbar.d.ts +31 -31
  17. package/dist/components/ui/core/action-toolbar/action-toolbar.js +156 -106
  18. package/dist/components/ui/core/action-toolbar/action-toolbar.js.map +1 -0
  19. package/dist/components/ui/core/alert/alert.d.ts +25 -25
  20. package/dist/components/ui/core/alert/alert.js +181 -152
  21. package/dist/components/ui/core/alert/alert.js.map +1 -0
  22. package/dist/components/ui/core/avatar/avatar.d.ts +10 -9
  23. package/dist/components/ui/core/avatar/avatar.js +75 -65
  24. package/dist/components/ui/core/avatar/avatar.js.map +1 -0
  25. package/dist/components/ui/core/badge/badge.d.ts +13 -12
  26. package/dist/components/ui/core/badge/badge.js +88 -72
  27. package/dist/components/ui/core/badge/badge.js.map +1 -0
  28. package/dist/components/ui/core/banner/banner.d.ts +18 -18
  29. package/dist/components/ui/core/banner/banner.js +179 -142
  30. package/dist/components/ui/core/banner/banner.js.map +1 -0
  31. package/dist/components/ui/core/breadcrumb/breadcrumb.d.ts +12 -12
  32. package/dist/components/ui/core/breadcrumb/breadcrumb.js +139 -104
  33. package/dist/components/ui/core/breadcrumb/breadcrumb.js.map +1 -0
  34. package/dist/components/ui/core/button/button.d.ts +7 -7
  35. package/dist/components/ui/core/button/button.gallery.d.ts +2 -0
  36. package/dist/components/ui/core/button/button.gallery.js +76 -0
  37. package/dist/components/ui/core/button/button.gallery.js.map +1 -0
  38. package/dist/components/ui/core/button/button.js +57 -47
  39. package/dist/components/ui/core/button/button.js.map +1 -0
  40. package/dist/components/ui/core/button-group/button-group.d.ts +9 -9
  41. package/dist/components/ui/core/button-group/button-group.js +50 -40
  42. package/dist/components/ui/core/button-group/button-group.js.map +1 -0
  43. package/dist/components/ui/core/calendar/calendar-header.d.ts +7 -7
  44. package/dist/components/ui/core/calendar/calendar-header.js +102 -63
  45. package/dist/components/ui/core/calendar/calendar-header.js.map +1 -0
  46. package/dist/components/ui/core/calendar/calendar-utils.d.ts +30 -30
  47. package/dist/components/ui/core/calendar/calendar-utils.js +116 -39
  48. package/dist/components/ui/core/calendar/calendar-utils.js.map +1 -0
  49. package/dist/components/ui/core/calendar/calendar.d.ts +10 -10
  50. package/dist/components/ui/core/calendar/calendar.js +95 -66
  51. package/dist/components/ui/core/calendar/calendar.js.map +1 -0
  52. package/dist/components/ui/core/calendar/constants.js +3 -0
  53. package/dist/components/ui/core/calendar/constants.js.map +1 -0
  54. package/dist/components/ui/core/card/card.d.ts +20 -20
  55. package/dist/components/ui/core/card/card.js +133 -104
  56. package/dist/components/ui/core/card/card.js.map +1 -0
  57. package/dist/components/ui/core/chart/chart.d.ts +55 -53
  58. package/dist/components/ui/core/chart/chart.js +196 -116
  59. package/dist/components/ui/core/chart/chart.js.map +1 -0
  60. package/dist/components/ui/core/chart/index.d.ts +2 -2
  61. package/dist/components/ui/core/chart/index.js +3 -2
  62. package/dist/components/ui/core/chart/index.js.map +1 -0
  63. package/dist/components/ui/core/checkbox/checkbox.d.ts +9 -9
  64. package/dist/components/ui/core/checkbox/checkbox.js +88 -68
  65. package/dist/components/ui/core/checkbox/checkbox.js.map +1 -0
  66. package/dist/components/ui/core/checkbox/checkbox.metadata.d.ts +1 -1
  67. package/dist/components/ui/core/checkbox/checkbox.metadata.js +6 -7
  68. package/dist/components/ui/core/checkbox/checkbox.metadata.js.map +1 -0
  69. package/dist/components/ui/core/code-block/code-block.d.ts +19 -19
  70. package/dist/components/ui/core/code-block/code-block.js +259 -175
  71. package/dist/components/ui/core/code-block/code-block.js.map +1 -0
  72. package/dist/components/ui/core/collapsible/collapsible.d.ts +5 -5
  73. package/dist/components/ui/core/collapsible/collapsible.js +36 -30
  74. package/dist/components/ui/core/collapsible/collapsible.js.map +1 -0
  75. package/dist/components/ui/core/combobox/combobox.d.ts +13 -13
  76. package/dist/components/ui/core/combobox/combobox.js +89 -40
  77. package/dist/components/ui/core/combobox/combobox.js.map +1 -0
  78. package/dist/components/ui/core/command/command.d.ts +20 -18
  79. package/dist/components/ui/core/command/command.js +137 -85
  80. package/dist/components/ui/core/command/command.js.map +1 -0
  81. package/dist/components/ui/core/conversation/conversation.d.ts +14 -0
  82. package/dist/components/ui/core/conversation/conversation.js +51 -0
  83. package/dist/components/ui/core/conversation/conversation.js.map +1 -0
  84. package/dist/components/ui/core/count/count.d.ts +8 -6
  85. package/dist/components/ui/core/count/count.js +51 -21
  86. package/dist/components/ui/core/count/count.js.map +1 -0
  87. package/dist/components/ui/core/data-grid/data-grid-cell.d.ts +7 -7
  88. package/dist/components/ui/core/data-grid/data-grid-cell.js +22 -22
  89. package/dist/components/ui/core/data-grid/data-grid-cell.js.map +1 -0
  90. package/dist/components/ui/core/data-grid/data-grid-filter-clauses.d.ts +14 -0
  91. package/dist/components/ui/core/data-grid/data-grid-filter-clauses.js +36 -0
  92. package/dist/components/ui/core/data-grid/data-grid-filter-clauses.js.map +1 -0
  93. package/dist/components/ui/core/data-grid/data-grid-filter-panel.d.ts +41 -0
  94. package/dist/components/ui/core/data-grid/data-grid-filter-panel.js +273 -0
  95. package/dist/components/ui/core/data-grid/data-grid-filter-panel.js.map +1 -0
  96. package/dist/components/ui/core/data-grid/data-grid-footer.d.ts +6 -0
  97. package/dist/components/ui/core/data-grid/data-grid-footer.js +34 -0
  98. package/dist/components/ui/core/data-grid/data-grid-footer.js.map +1 -0
  99. package/dist/components/ui/core/data-grid/data-grid-header-row.d.ts +10 -10
  100. package/dist/components/ui/core/data-grid/data-grid-header-row.js +69 -55
  101. package/dist/components/ui/core/data-grid/data-grid-header-row.js.map +1 -0
  102. package/dist/components/ui/core/data-grid/data-grid-header.d.ts +11 -0
  103. package/dist/components/ui/core/data-grid/data-grid-header.js +67 -0
  104. package/dist/components/ui/core/data-grid/data-grid-header.js.map +1 -0
  105. package/dist/components/ui/core/data-grid/data-grid-row.d.ts +15 -15
  106. package/dist/components/ui/core/data-grid/data-grid-row.js +104 -76
  107. package/dist/components/ui/core/data-grid/data-grid-row.js.map +1 -0
  108. package/dist/components/ui/core/data-grid/data-grid.d.ts +85 -35
  109. package/dist/components/ui/core/data-grid/data-grid.fixtures.d.ts +7 -7
  110. package/dist/components/ui/core/data-grid/data-grid.fixtures.js +139 -0
  111. package/dist/components/ui/core/data-grid/data-grid.fixtures.js.map +1 -0
  112. package/dist/components/ui/core/data-grid/data-grid.js +402 -132
  113. package/dist/components/ui/core/data-grid/data-grid.js.map +1 -0
  114. package/dist/components/ui/core/data-grid/data-grid.utils.d.ts +3 -3
  115. package/dist/components/ui/core/data-grid/data-grid.utils.js +44 -33
  116. package/dist/components/ui/core/data-grid/data-grid.utils.js.map +1 -0
  117. package/dist/components/ui/core/data-grid/index.d.ts +4 -1
  118. package/dist/components/ui/core/data-grid/index.js +5 -2
  119. package/dist/components/ui/core/data-grid/index.js.map +1 -0
  120. package/dist/components/ui/core/date-time-pickers/date-picker/date-picker.d.ts +11 -13
  121. package/dist/components/ui/core/date-time-pickers/date-picker/date-picker.js +85 -61
  122. package/dist/components/ui/core/date-time-pickers/date-picker/date-picker.js.map +1 -0
  123. package/dist/components/ui/core/date-time-pickers/date-picker/index.d.ts +3 -3
  124. package/dist/components/ui/core/date-time-pickers/date-picker/index.js +3 -0
  125. package/dist/components/ui/core/date-time-pickers/date-picker/index.js.map +1 -0
  126. package/dist/components/ui/core/date-time-pickers/date-picker/types.d.ts +14 -14
  127. package/dist/components/ui/core/date-time-pickers/date-picker/types.js +3 -0
  128. package/dist/components/ui/core/date-time-pickers/date-picker/types.js.map +1 -0
  129. package/dist/components/ui/core/date-time-pickers/date-picker/use-date-picker.d.ts +2 -2
  130. package/dist/components/ui/core/date-time-pickers/date-picker/use-date-picker.js +51 -36
  131. package/dist/components/ui/core/date-time-pickers/date-picker/use-date-picker.js.map +1 -0
  132. package/dist/components/ui/core/date-time-pickers/date-range-picker/date-range-picker.d.ts +11 -13
  133. package/dist/components/ui/core/date-time-pickers/date-range-picker/date-range-picker.js +89 -64
  134. package/dist/components/ui/core/date-time-pickers/date-range-picker/date-range-picker.js.map +1 -0
  135. package/dist/components/ui/core/date-time-pickers/date-range-picker/index.d.ts +3 -3
  136. package/dist/components/ui/core/date-time-pickers/date-range-picker/index.js +3 -0
  137. package/dist/components/ui/core/date-time-pickers/date-range-picker/index.js.map +1 -0
  138. package/dist/components/ui/core/date-time-pickers/date-range-picker/types.d.ts +20 -20
  139. package/dist/components/ui/core/date-time-pickers/date-range-picker/types.js +3 -0
  140. package/dist/components/ui/core/date-time-pickers/date-range-picker/types.js.map +1 -0
  141. package/dist/components/ui/core/date-time-pickers/date-range-picker/use-date-range-picker.d.ts +4 -4
  142. package/dist/components/ui/core/date-time-pickers/date-range-picker/use-date-range-picker.js +95 -60
  143. package/dist/components/ui/core/date-time-pickers/date-range-picker/use-date-range-picker.js.map +1 -0
  144. package/dist/components/ui/core/date-time-pickers/date-time-picker/date-time-picker.d.ts +15 -0
  145. package/dist/components/ui/core/date-time-pickers/date-time-picker/date-time-picker.js +120 -0
  146. package/dist/components/ui/core/date-time-pickers/date-time-picker/date-time-picker.js.map +1 -0
  147. package/dist/components/ui/core/date-time-pickers/date-time-picker/index.d.ts +3 -1
  148. package/dist/components/ui/core/date-time-pickers/date-time-picker/index.js +3 -0
  149. package/dist/components/ui/core/date-time-pickers/date-time-picker/index.js.map +1 -0
  150. package/dist/components/ui/core/date-time-pickers/date-time-picker/types.d.ts +25 -32
  151. package/dist/components/ui/core/date-time-pickers/date-time-picker/types.js +3 -0
  152. package/dist/components/ui/core/date-time-pickers/date-time-picker/types.js.map +1 -0
  153. package/dist/components/ui/core/date-time-pickers/date-time-picker/use-date-time-picker.d.ts +2 -2
  154. package/dist/components/ui/core/date-time-pickers/date-time-picker/use-date-time-picker.js +78 -0
  155. package/dist/components/ui/core/date-time-pickers/date-time-picker/use-date-time-picker.js.map +1 -0
  156. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/date-time-range-picker.d.ts +13 -15
  157. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/date-time-range-picker.js +165 -119
  158. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/date-time-range-picker.js.map +1 -0
  159. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/index.d.ts +3 -3
  160. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/index.js +3 -0
  161. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/index.js.map +1 -0
  162. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/types.d.ts +37 -37
  163. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/types.js +3 -0
  164. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/types.js.map +1 -0
  165. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/use-date-time-range-picker.d.ts +3 -3
  166. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/use-date-time-range-picker.js +163 -104
  167. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/use-date-time-range-picker.js.map +1 -0
  168. package/dist/components/ui/core/date-time-pickers/index.d.ts +17 -12
  169. package/dist/components/ui/core/date-time-pickers/index.js +10 -6
  170. package/dist/components/ui/core/date-time-pickers/index.js.map +1 -0
  171. package/dist/components/ui/core/date-time-pickers/shared/am-pm-scroll/am-pm-scroll.d.ts +5 -5
  172. package/dist/components/ui/core/date-time-pickers/shared/am-pm-scroll/am-pm-scroll.js +52 -42
  173. package/dist/components/ui/core/date-time-pickers/shared/am-pm-scroll/am-pm-scroll.js.map +1 -0
  174. package/dist/components/ui/core/date-time-pickers/shared/constants.d.ts +6 -1
  175. package/dist/components/ui/core/date-time-pickers/shared/constants.js +23 -0
  176. package/dist/components/ui/core/date-time-pickers/shared/constants.js.map +1 -0
  177. package/dist/components/ui/core/date-time-pickers/shared/date-time-input/date-time-input.d.ts +16 -15
  178. package/dist/components/ui/core/date-time-pickers/shared/date-time-input/date-time-input.js +87 -64
  179. package/dist/components/ui/core/date-time-pickers/shared/date-time-input/date-time-input.js.map +1 -0
  180. package/dist/components/ui/core/date-time-pickers/shared/date-time-input/range-input-display.d.ts +10 -9
  181. package/dist/components/ui/core/date-time-pickers/shared/date-time-input/range-input-display.js +89 -38
  182. package/dist/components/ui/core/date-time-pickers/shared/date-time-input/range-input-display.js.map +1 -0
  183. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-popover-state.d.ts +5 -5
  184. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-popover-state.js +34 -23
  185. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-popover-state.js.map +1 -0
  186. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-date-state.d.ts +23 -23
  187. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-date-state.js +95 -52
  188. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-date-state.js.map +1 -0
  189. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-step-manager.d.ts +5 -5
  190. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-step-manager.js +22 -18
  191. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-step-manager.js.map +1 -0
  192. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-single-date-state.d.ts +19 -19
  193. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-single-date-state.js +41 -24
  194. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-single-date-state.js.map +1 -0
  195. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-time-state.d.ts +13 -13
  196. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-time-state.js +33 -24
  197. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-time-state.js.map +1 -0
  198. package/dist/components/ui/core/date-time-pickers/shared/scroll-cell-classes.d.ts +5 -5
  199. package/dist/components/ui/core/date-time-pickers/shared/scroll-cell-classes.js +9 -4
  200. package/dist/components/ui/core/date-time-pickers/shared/scroll-cell-classes.js.map +1 -0
  201. package/dist/components/ui/core/date-time-pickers/shared/shortcuts-panel/shortcuts-panel.d.ts +13 -9
  202. package/dist/components/ui/core/date-time-pickers/shared/shortcuts-panel/shortcuts-panel.js +22 -17
  203. package/dist/components/ui/core/date-time-pickers/shared/shortcuts-panel/shortcuts-panel.js.map +1 -0
  204. package/dist/components/ui/core/date-time-pickers/shared/time-picker-panel/index.d.ts +2 -2
  205. package/dist/components/ui/core/date-time-pickers/shared/time-picker-panel/index.js +3 -0
  206. package/dist/components/ui/core/date-time-pickers/shared/time-picker-panel/index.js.map +1 -0
  207. package/dist/components/ui/core/date-time-pickers/shared/time-picker-panel/time-picker-panel.d.ts +13 -13
  208. package/dist/components/ui/core/date-time-pickers/shared/time-picker-panel/time-picker-panel.js +49 -40
  209. package/dist/components/ui/core/date-time-pickers/shared/time-picker-panel/time-picker-panel.js.map +1 -0
  210. package/dist/components/ui/core/date-time-pickers/shared/time-picker-scroll/time-picker-scroll.d.ts +7 -7
  211. package/dist/components/ui/core/date-time-pickers/shared/time-picker-scroll/time-picker-scroll.js +41 -34
  212. package/dist/components/ui/core/date-time-pickers/shared/time-picker-scroll/time-picker-scroll.js.map +1 -0
  213. package/dist/components/ui/core/date-time-pickers/time-picker/index.d.ts +3 -3
  214. package/dist/components/ui/core/date-time-pickers/time-picker/index.js +3 -0
  215. package/dist/components/ui/core/date-time-pickers/time-picker/index.js.map +1 -0
  216. package/dist/components/ui/core/date-time-pickers/time-picker/time-picker.d.ts +12 -14
  217. package/dist/components/ui/core/date-time-pickers/time-picker/time-picker.js +99 -79
  218. package/dist/components/ui/core/date-time-pickers/time-picker/time-picker.js.map +1 -0
  219. package/dist/components/ui/core/date-time-pickers/time-picker/types.d.ts +20 -20
  220. package/dist/components/ui/core/date-time-pickers/time-picker/types.js +3 -0
  221. package/dist/components/ui/core/date-time-pickers/time-picker/types.js.map +1 -0
  222. package/dist/components/ui/core/date-time-pickers/time-picker/use-time-picker.d.ts +2 -2
  223. package/dist/components/ui/core/date-time-pickers/time-picker/use-time-picker.js +63 -41
  224. package/dist/components/ui/core/date-time-pickers/time-picker/use-time-picker.js.map +1 -0
  225. package/dist/components/ui/core/date-time-pickers/time-range-picker/index.d.ts +3 -1
  226. package/dist/components/ui/core/date-time-pickers/time-range-picker/index.js +3 -0
  227. package/dist/components/ui/core/date-time-pickers/time-range-picker/index.js.map +1 -0
  228. package/dist/components/ui/core/date-time-pickers/time-range-picker/time-range-picker.d.ts +14 -0
  229. package/dist/components/ui/core/date-time-pickers/time-range-picker/time-range-picker.js +115 -0
  230. package/dist/components/ui/core/date-time-pickers/time-range-picker/time-range-picker.js.map +1 -0
  231. package/dist/components/ui/core/date-time-pickers/time-range-picker/types.d.ts +30 -36
  232. package/dist/components/ui/core/date-time-pickers/time-range-picker/types.js +3 -0
  233. package/dist/components/ui/core/date-time-pickers/time-range-picker/types.js.map +1 -0
  234. package/dist/components/ui/core/date-time-pickers/time-range-picker/use-time-range-picker.d.ts +2 -2
  235. package/dist/components/ui/core/date-time-pickers/time-range-picker/use-time-range-picker.js +145 -0
  236. package/dist/components/ui/core/date-time-pickers/time-range-picker/use-time-range-picker.js.map +1 -0
  237. package/dist/components/ui/core/date-time-pickers/utils/date-input.d.ts +56 -0
  238. package/dist/components/ui/core/date-time-pickers/utils/date-input.js +67 -0
  239. package/dist/components/ui/core/date-time-pickers/utils/date-input.js.map +1 -0
  240. package/dist/components/ui/core/date-time-pickers/utils/date-range-utils.d.ts +18 -18
  241. package/dist/components/ui/core/date-time-pickers/utils/date-range-utils.js +42 -0
  242. package/dist/components/ui/core/date-time-pickers/utils/date-range-utils.js.map +1 -0
  243. package/dist/components/ui/core/date-time-pickers/utils/format-utils.d.ts +31 -29
  244. package/dist/components/ui/core/date-time-pickers/utils/format-utils.js +56 -0
  245. package/dist/components/ui/core/date-time-pickers/utils/format-utils.js.map +1 -0
  246. package/dist/components/ui/core/date-time-pickers/utils/segment-utils.d.ts +21 -21
  247. package/dist/components/ui/core/date-time-pickers/utils/segment-utils.js +170 -0
  248. package/dist/components/ui/core/date-time-pickers/utils/segment-utils.js.map +1 -0
  249. package/dist/components/ui/core/date-time-pickers/utils/time-utils.d.ts +28 -28
  250. package/dist/components/ui/core/date-time-pickers/utils/time-utils.js +88 -7
  251. package/dist/components/ui/core/date-time-pickers/utils/time-utils.js.map +1 -0
  252. package/dist/components/ui/core/date-time-pickers/utils/time-validation.d.ts +17 -17
  253. package/dist/components/ui/core/date-time-pickers/utils/time-validation.js +43 -0
  254. package/dist/components/ui/core/date-time-pickers/utils/time-validation.js.map +1 -0
  255. package/dist/components/ui/core/dialog/dialog.d.ts +12 -9
  256. package/dist/components/ui/core/dialog/dialog.js +90 -82
  257. package/dist/components/ui/core/dialog/dialog.js.map +1 -0
  258. package/dist/components/ui/core/dropdown-menu/dropdown-menu.d.ts +22 -19
  259. package/dist/components/ui/core/dropdown-menu/dropdown-menu.js +204 -149
  260. package/dist/components/ui/core/dropdown-menu/dropdown-menu.js.map +1 -0
  261. package/dist/components/ui/core/empty-state/empty-state.context.d.ts +4 -4
  262. package/dist/components/ui/core/empty-state/empty-state.context.js +8 -5
  263. package/dist/components/ui/core/empty-state/empty-state.context.js.map +1 -0
  264. package/dist/components/ui/core/empty-state/empty-state.d.ts +14 -14
  265. package/dist/components/ui/core/empty-state/empty-state.js +96 -82
  266. package/dist/components/ui/core/empty-state/empty-state.js.map +1 -0
  267. package/dist/components/ui/core/helper-text/helper-text.d.ts +7 -7
  268. package/dist/components/ui/core/helper-text/helper-text.js +55 -36
  269. package/dist/components/ui/core/helper-text/helper-text.js.map +1 -0
  270. package/dist/components/ui/core/hover-card/hover-card.d.ts +7 -6
  271. package/dist/components/ui/core/hover-card/hover-card.js +56 -52
  272. package/dist/components/ui/core/hover-card/hover-card.js.map +1 -0
  273. package/dist/components/ui/core/inline-citation/inline-citation.d.ts +26 -25
  274. package/dist/components/ui/core/inline-citation/inline-citation.js +121 -97
  275. package/dist/components/ui/core/inline-citation/inline-citation.js.map +1 -0
  276. package/dist/components/ui/core/input/input.d.ts +2 -2
  277. package/dist/components/ui/core/input/input.js +15 -13
  278. package/dist/components/ui/core/input/input.js.map +1 -0
  279. package/dist/components/ui/core/input-group/input-group.d.ts +25 -14
  280. package/dist/components/ui/core/input-group/input-group.js +149 -76
  281. package/dist/components/ui/core/input-group/input-group.js.map +1 -0
  282. package/dist/components/ui/core/item/item.d.ts +20 -0
  283. package/dist/components/ui/core/item/item.js +93 -0
  284. package/dist/components/ui/core/item/item.js.map +1 -0
  285. package/dist/components/ui/core/kbd/kbd.d.ts +3 -3
  286. package/dist/components/ui/core/kbd/kbd.js +24 -20
  287. package/dist/components/ui/core/kbd/kbd.js.map +1 -0
  288. package/dist/components/ui/core/label/label.d.ts +3 -3
  289. package/dist/components/ui/core/label/label.js +33 -26
  290. package/dist/components/ui/core/label/label.js.map +1 -0
  291. package/dist/components/ui/core/loader/loader.d.ts +6 -6
  292. package/dist/components/ui/core/loader/loader.js +97 -80
  293. package/dist/components/ui/core/loader/loader.js.map +1 -0
  294. package/dist/components/ui/core/message/message-response-default-streamdown-controls.d.ts +9 -9
  295. package/dist/components/ui/core/message/message-response-default-streamdown-controls.js +19 -12
  296. package/dist/components/ui/core/message/message-response-default-streamdown-controls.js.map +1 -0
  297. package/dist/components/ui/core/message/message-response-math-plugin.d.ts +3 -0
  298. package/dist/components/ui/core/message/message-response-math-plugin.js +6 -0
  299. package/dist/components/ui/core/message/message-response-math-plugin.js.map +1 -0
  300. package/dist/components/ui/core/message/message.d.ts +27 -23
  301. package/dist/components/ui/core/message/message.js +453 -316
  302. package/dist/components/ui/core/message/message.js.map +1 -0
  303. package/dist/components/ui/core/overflow-list/overflow-list.d.ts +21 -0
  304. package/dist/components/ui/core/overflow-list/overflow-list.js +197 -0
  305. package/dist/components/ui/core/overflow-list/overflow-list.js.map +1 -0
  306. package/dist/components/ui/core/overflow-list/overflow-list.utils.d.ts +37 -35
  307. package/dist/components/ui/core/overflow-list/overflow-list.utils.js +206 -0
  308. package/dist/components/ui/core/overflow-list/overflow-list.utils.js.map +1 -0
  309. package/dist/components/ui/core/pagination/pagination-size-context.d.ts +2 -2
  310. package/dist/components/ui/core/pagination/pagination-size-context.js +6 -5
  311. package/dist/components/ui/core/pagination/pagination-size-context.js.map +1 -0
  312. package/dist/components/ui/core/pagination/pagination-teleport.d.ts +9 -9
  313. package/dist/components/ui/core/pagination/pagination-teleport.js +127 -84
  314. package/dist/components/ui/core/pagination/pagination-teleport.js.map +1 -0
  315. package/dist/components/ui/core/pagination/pagination-teleport.utils.js +6 -6
  316. package/dist/components/ui/core/pagination/pagination-teleport.utils.js.map +1 -0
  317. package/dist/components/ui/core/pagination/pagination.d.ts +39 -39
  318. package/dist/components/ui/core/pagination/pagination.js +294 -234
  319. package/dist/components/ui/core/pagination/pagination.js.map +1 -0
  320. package/dist/components/ui/core/popover/popover.d.ts +12 -11
  321. package/dist/components/ui/core/popover/popover.js +104 -89
  322. package/dist/components/ui/core/popover/popover.js.map +1 -0
  323. package/dist/components/ui/core/progress/progress.d.ts +9 -8
  324. package/dist/components/ui/core/progress/progress.js +50 -35
  325. package/dist/components/ui/core/progress/progress.js.map +1 -0
  326. package/dist/components/ui/core/prompt-input/prompt-input.d.ts +27 -27
  327. package/dist/components/ui/core/prompt-input/prompt-input.js +342 -271
  328. package/dist/components/ui/core/prompt-input/prompt-input.js.map +1 -0
  329. package/dist/components/ui/core/radio-group/radio-group.d.ts +12 -12
  330. package/dist/components/ui/core/radio-group/radio-group.js +88 -58
  331. package/dist/components/ui/core/radio-group/radio-group.js.map +1 -0
  332. package/dist/components/ui/core/reasoning/reasoning.d.ts +7 -7
  333. package/dist/components/ui/core/reasoning/reasoning.js +68 -56
  334. package/dist/components/ui/core/reasoning/reasoning.js.map +1 -0
  335. package/dist/components/ui/core/scroll-area/scroll-area.d.ts +4 -4
  336. package/dist/components/ui/core/scroll-area/scroll-area.js +50 -40
  337. package/dist/components/ui/core/scroll-area/scroll-area.js.map +1 -0
  338. package/dist/components/ui/core/search/search.d.ts +8 -8
  339. package/dist/components/ui/core/search/search.js +122 -76
  340. package/dist/components/ui/core/search/search.js.map +1 -0
  341. package/dist/components/ui/core/segmented-control/segmented-control.d.ts +10 -10
  342. package/dist/components/ui/core/segmented-control/segmented-control.js +203 -149
  343. package/dist/components/ui/core/segmented-control/segmented-control.js.map +1 -0
  344. package/dist/components/ui/core/select/select.d.ts +27 -26
  345. package/dist/components/ui/core/select/select.js +213 -168
  346. package/dist/components/ui/core/select/select.js.map +1 -0
  347. package/dist/components/ui/core/separator/separator.d.ts +2 -2
  348. package/dist/components/ui/core/separator/separator.js +13 -13
  349. package/dist/components/ui/core/separator/separator.js.map +1 -0
  350. package/dist/components/ui/core/shimmer/shimmer.d.ts +8 -8
  351. package/dist/components/ui/core/shimmer/shimmer.js +64 -40
  352. package/dist/components/ui/core/shimmer/shimmer.js.map +1 -0
  353. package/dist/components/ui/core/skeleton/skeleton.d.ts +2 -2
  354. package/dist/components/ui/core/skeleton/skeleton.js +13 -13
  355. package/dist/components/ui/core/skeleton/skeleton.js.map +1 -0
  356. package/dist/components/ui/core/slider/slider.d.ts +7 -7
  357. package/dist/components/ui/core/slider/slider.js +51 -39
  358. package/dist/components/ui/core/slider/slider.js.map +1 -0
  359. package/dist/components/ui/core/sonner-toast/sonner-toast.d.ts +2 -2
  360. package/dist/components/ui/core/sonner-toast/sonner-toast.js +67 -54
  361. package/dist/components/ui/core/sonner-toast/sonner-toast.js.map +1 -0
  362. package/dist/components/ui/core/sources/sources.d.ts +12 -12
  363. package/dist/components/ui/core/sources/sources.js +87 -58
  364. package/dist/components/ui/core/sources/sources.js.map +1 -0
  365. package/dist/components/ui/core/switch/switch.d.ts +9 -9
  366. package/dist/components/ui/core/switch/switch.js +83 -61
  367. package/dist/components/ui/core/switch/switch.js.map +1 -0
  368. package/dist/components/ui/core/switch/switch.metadata.d.ts +1 -1
  369. package/dist/components/ui/core/switch/switch.metadata.js +8 -0
  370. package/dist/components/ui/core/switch/switch.metadata.js.map +1 -0
  371. package/dist/components/ui/core/tabs/tabs.d.ts +20 -18
  372. package/dist/components/ui/core/tabs/tabs.js +176 -147
  373. package/dist/components/ui/core/tabs/tabs.js.map +1 -0
  374. package/dist/components/ui/core/tabs/tabs.utils.d.ts +1 -1
  375. package/dist/components/ui/core/tabs/tabs.utils.js +10 -6
  376. package/dist/components/ui/core/tabs/tabs.utils.js.map +1 -0
  377. package/dist/components/ui/core/textarea/textarea.d.ts +2 -2
  378. package/dist/components/ui/core/textarea/textarea.js +13 -13
  379. package/dist/components/ui/core/textarea/textarea.js.map +1 -0
  380. package/dist/components/ui/core/toggle/toggle.d.ts +9 -9
  381. package/dist/components/ui/core/toggle/toggle.js +60 -54
  382. package/dist/components/ui/core/toggle/toggle.js.map +1 -0
  383. package/dist/components/ui/core/tool/tool.d.ts +18 -18
  384. package/dist/components/ui/core/tool/tool.js +167 -126
  385. package/dist/components/ui/core/tool/tool.js.map +1 -0
  386. package/dist/components/ui/core/toolbar/toolbar.d.ts +37 -0
  387. package/dist/components/ui/core/toolbar/toolbar.js +171 -0
  388. package/dist/components/ui/core/toolbar/toolbar.js.map +1 -0
  389. package/dist/components/ui/core/tooltip/tooltip.d.ts +8 -7
  390. package/dist/components/ui/core/tooltip/tooltip.js +53 -46
  391. package/dist/components/ui/core/tooltip/tooltip.js.map +1 -0
  392. package/dist/components/ui/core/topbar/topbar.d.ts +26 -26
  393. package/dist/components/ui/core/topbar/topbar.js +160 -105
  394. package/dist/components/ui/core/topbar/topbar.js.map +1 -0
  395. package/dist/components/ui/core/tree/tree.d.ts +20 -0
  396. package/dist/components/ui/core/tree/tree.js +100 -0
  397. package/dist/components/ui/core/tree/tree.js.map +1 -0
  398. package/dist/eslint/index.d.ts +5 -5
  399. package/dist/eslint/index.js +9 -5
  400. package/dist/eslint/index.js.map +1 -0
  401. package/dist/eslint/no-overriding-styles.d.ts +1 -1
  402. package/dist/eslint/no-overriding-styles.js +341 -201
  403. package/dist/eslint/no-overriding-styles.js.map +1 -0
  404. package/dist/icons/index.d.ts +1 -1
  405. package/dist/icons/index.js +2 -0
  406. package/dist/icons/index.js.map +1 -0
  407. package/dist/index.d.ts +1 -1
  408. package/dist/index.js +3 -0
  409. package/dist/index.js.map +1 -0
  410. package/dist/lib/ai/types.d.ts +43 -43
  411. package/dist/lib/ai/types.js +3 -0
  412. package/dist/lib/ai/types.js.map +1 -0
  413. package/dist/lib/decorative-variant-classes.d.ts +53 -0
  414. package/dist/lib/decorative-variant-classes.js +58 -0
  415. package/dist/lib/decorative-variant-classes.js.map +1 -0
  416. package/dist/lib/highlight-code.d.ts +11 -8
  417. package/dist/lib/highlight-code.js +58 -40
  418. package/dist/lib/highlight-code.js.map +1 -0
  419. package/dist/lib/portal-container-context.d.ts +1 -1
  420. package/dist/lib/portal-container-context.js +8 -8
  421. package/dist/lib/portal-container-context.js.map +1 -0
  422. package/dist/lib/shared-theme-from-url.d.ts +13 -0
  423. package/dist/lib/shared-theme-from-url.js +61 -0
  424. package/dist/lib/shared-theme-from-url.js.map +1 -0
  425. package/dist/lib/style-scope.d.ts +2 -2
  426. package/dist/lib/style-scope.js +6 -6
  427. package/dist/lib/style-scope.js.map +1 -0
  428. package/dist/lib/theme-share-url.d.ts +31 -0
  429. package/dist/lib/theme-share-url.js +116 -0
  430. package/dist/lib/theme-share-url.js.map +1 -0
  431. package/dist/lib/types.d.ts +39 -39
  432. package/dist/lib/types.js +3 -0
  433. package/dist/lib/types.js.map +1 -0
  434. package/dist/lib/use-controllable-state.d.ts +4 -7
  435. package/dist/lib/use-controllable-state.js +34 -21
  436. package/dist/lib/use-controllable-state.js.map +1 -0
  437. package/dist/lib/utils.d.ts +63 -34
  438. package/dist/lib/utils.js +134 -32
  439. package/dist/lib/utils.js.map +1 -0
  440. package/dist/styles.css +2 -1
  441. package/dist/styles.source.css +24 -12
  442. package/dist/utils/assign-ref.d.ts +3 -0
  443. package/dist/utils/assign-ref.js +13 -0
  444. package/dist/utils/assign-ref.js.map +1 -0
  445. package/package.json +46 -11
  446. package/src/components/ui/core/button/button.md +93 -0
package/DESIGN.md CHANGED
@@ -228,7 +228,7 @@ Aura color behaves like instrumentation in a control room. Most of the interface
228
228
 
229
229
  Use **Base** color for the operating surface: page backgrounds, cards, text, borders, focus, and persistent chrome. This is ~80–90% of the UI.
230
230
 
231
- Use **Semantic** color only for status and feedback: info, success, warning, destructive, validation, and operational state. This is ~5–10% of the UI.
231
+ Use **Semantic** color only for status and feedback: info, success, warning, critical, validation, and operational state. This is ~5–10% of the UI.
232
232
 
233
233
  Use **Decorative** color only for non-status differentiation: accents, avatars, illustrations, and small visual markers that do not imply system health. This is ~5–10% of the UI.
234
234
 
@@ -236,179 +236,302 @@ Light-theme reference values for key roles are defined as `colors.*` tokens in t
236
236
 
237
237
  Do not hardcode hex, font sizes, or shadow strings in product UI when a token exists.
238
238
 
239
- Aura supports **light** (`:root`) and **dark** (`.dark` / `prefers-color-scheme: dark` per library setup). Semantic and base tokens **resolve to different ramps** per theme. **`background-fixed-dark`**, **`background-fixed-light`**, **`foreground-fixed-*`**, and related **fixed** tokens keep the same appearance in both themes (persistent chrome such as sidebars). Always verify contrast in both themes before shipping.
239
+ Aura supports **light** (`:root`) and **dark** (`.dark` / `prefers-color-scheme: dark` per library setup). Theme tokens **resolve to different ramp steps** per theme. **`*-fixed-dark`** tokens keep the same appearance in both themes (persistent dark chrome such as sidebars). Always verify contrast in both themes before shipping.
240
240
 
241
- Reference tokens by **full CSS name** or Tailwind token. Never use raw `hex` / `rgb` / `hsl` in product code. If no semantic token fits, use a documented **base** token; **step colors** on ramps (`mountain/*`, `fjord/*`, …) are only for custom, branding, or marketing surfaces where no semantic token exists yet.
241
+ Reference tokens by **full CSS name** or Tailwind utility (`bg-base-background`, `text-critical-foreground-strong`, `border-default`, …). Never use raw `hex` / `rgb` / `hsl` in product code. Use **step colors** on ramps (`mountain-*`, `fjord-*`, …) only for custom, branding, or marketing surfaces where no theme token exists yet.
242
242
 
243
243
  ### Common Tailwind mappings
244
244
 
245
- Tables in this section use **CSS role names** (e.g. `link-foreground`, `card-background`). Each role maps to a `--color-{role}` custom property and Tailwind v4 utilities (`text-{role}`, `bg-{role}`, `border-{role}`, and `ring-{role}` where applicable). Prefer these utilities over raw `var(--…)` when the theme wire-up matches.
246
-
247
- | Role (suffix after `text-` / `bg-` / `border-`) | Typical utilities | Notes |
248
- | ----------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------- |
249
- | `background` | `bg-background` | Page base |
250
- | `foreground` | `text-foreground` | Primary text |
251
- | `muted-foreground` | `text-muted-foreground` | Tertiary copy |
252
- | `card-background` | `bg-card-background` | Cards (see **Card** component) |
253
- | `muted-background` | `bg-muted-background` | Static fills, inputs, secondary chrome |
254
- | `border` | `border-border` | Default strokes |
255
- | `link-foreground` (`{colors.link-foreground}`) | `text-link-foreground` | Text links — same value as `{colors.tertiary}` |
256
- | `primary-background` | `bg-primary-background`, `text-foreground-on-primary` | Default **Button** (`variant="default"`) pattern |
257
- | `destructive-background` | `bg-destructive-background`, `text-destructive-foreground-on-critical` (on surface) | Destructive actions — pairings in **Semantic colors** |
258
- | `info-background`, `success-background`, … | `bg-info-background`, `text-info-foreground`, … | Full names match **Semantic colors** token columns |
259
-
260
- Semantic utilities use the **full token name** as the Tailwind segment (e.g. `bg-info-background`, not `bg-info`). For **charts**, utilities follow the **Chart tokens** names (`bg-chart-fjord-color-1`, `bg-chart-gridlines`, …).
261
-
262
- Tables below list **light-theme** values as `{colors.<name>}` token references in the YAML front matter and **dark-theme** resolved values in the second column; the published `colors.css` is the runtime source of truth (some entries are `rgba()`).
263
-
264
- ### Base — Background
265
-
266
- | Token | Light (reference) | Dark (reference) | Use |
267
- | ------------------------------- | ------------------------------------- | ---------------- | ------------------------------------------------------------------ |
268
- | `background` | `{colors.background}` | `#191B1D` | Primary surface — lowest layer |
269
- | `alternate-background` | `{colors.alternate-background}` | `#111213` | Distinct layer or block separate from `background` |
270
- | `card-background` | `{colors.card-background}` | `#212426` | Cards without drop shadow on `background` / `alternate-background` |
271
- | `muted-background` | `{colors.muted-background}` | `#2D3134` | Static fills for controls, rows, segmented controls |
272
- | `primary-background` | `{colors.primary}` | `#F9FAFA` | Primary actions (default button); use sparingly |
273
- | `primary-background-hover` | `{colors.primary-background-hover}` | `#E4E6E8` | Hover on `primary-background` |
274
- | `secondary-background` | `#E4E6E8` | `#40464A` | Secondary actions, switch track |
275
- | `secondary-background-hover` | `{colors.secondary-background-hover}` | `#5E666D` | Hover on `secondary-background` |
276
- | `accent-background` | `#F1F2F3` | `#2D3134` | Neutral hover on `background` / `card-background` (e.g. tabs) |
277
- | `accent-background-strong` | `#E4E6E8` | `#40464A` | Neutral hover on `muted-background` / `active-muted-background` |
278
- | `highlight-background` | `#F1F2F3` | `#2D3134` | Focused / active fields (inputs, selects, comboboxes) |
279
- | `highlight-background-strong` | `#E4E6E8` | `#40464A` | Stronger focused / active field fill |
280
- | `active-background` | `#191B1D` | `#F9FAFA` | High-contrast “on” (switch, checkbox, radio) |
281
- | `active-background-hover` | `#2D3134` | `#F1F2F3` | Hover on `active-background` |
282
- | `active-muted-background` | `#F1F2F3` | `#2D3134` | Lower-contrast selected (e.g. tabs) |
283
- | `active-muted-background-hover` | `#E4E6E8` | `#40464A` | Hover on `active-muted-background` |
284
- | `popover-background` | `#FFFFFF` | `#212426` | Top-layer surfaces with shadow (dialogs, popovers) |
285
- | `raised-background` | `#2D3134` | `#40464A` | Tooltips, Sonner toasts — floats above page |
286
- | `disabled-background` | `#F1F2F3` | `#2D3134` | Disabled inputs and controls |
287
- | `overlay-background` | `{colors.overlay-background}` | `#7C868E80` | Scrim behind modals |
288
- | `background-fixed-dark` | `#212426` | `#212426` | Must stay **dark** in both themes |
289
- | `background-fixed-light` | `#FFFFFF` | `#FFFFFF` | Must stay **light** in both themes |
290
- | `accent-background-fixed-dark` | `#2D3134` | `#2D3134` | Persistent dark accent chrome (e.g. sidebar) |
291
-
292
- ### Base — Foreground
293
-
294
- | Token | Light (reference) | Dark (reference) | Use |
295
- | ---------------------------------- | -------------------------------- | ---------------- | ------------------------------ |
296
- | `foreground` | `{colors.foreground}` | `#F1F2F3` | Primary text and icons |
297
- | `secondary-foreground` | `{colors.secondary-foreground}` | `#D4D7D9` | Supporting text and icons |
298
- | `muted-foreground` | `{colors.muted-foreground}` | `#A5ABB1` | Tertiary / low emphasis |
299
- | `disabled-foreground` | `#D4D7D9` | `#5E666D` | Disabled text and icons |
300
- | `link-foreground` | `{colors.link-foreground}` | `#1742E7` | Text links |
301
- | `foreground-on-primary` | `{colors.foreground-on-primary}` | `#191B1D` | On `primary-background` |
302
- | `foreground-on-active` | `#F1F2F3` | `#191B1D` | On `active-background` |
303
- | `active-foreground` | `#191B1D` | `#F1F2F3` | On `active-muted-background` |
304
- | `foreground-fixed-dark` | `#191B1D` | `#191B1D` | Must stay dark in both themes |
305
- | `foreground-fixed-light` | `#FFFFFF` | `#FFFFFF` | Must stay light in both themes |
306
- | `foreground-secondary-fixed-dark` | `#40464A` | `#40464A` | Secondary copy, always dark |
307
- | `secondary-foreground-fixed-light` | `#D4D7D9` | `#D4D7D9` | Secondary copy, always light |
308
- | `muted-foreground-fixed-light` | `#BBC0C4` | `#BBC0C4` | Muted copy, always light |
309
-
310
- ### Base — Borders and focus
311
-
312
- | Token | Light (reference) | Dark (reference) | Use |
313
- | ------------------- | ---------------------------- | ---------------- | ------------------------------------------------ |
314
- | `border` | `{colors.border}` | `#2D3134` | Default strokes |
315
- | `border-emphasized` | `{colors.border-emphasized}` | `#40464A` | Stronger separation |
316
- | `border-on-dark` | `#2D3134` | `#2D3134` | Strokes on dark chrome (both themes) |
317
- | `border-active` | `#191B1D` | `#F9FAFA` | Active / toggled outlines |
318
- | `ring` | `{colors.ring}` | `#7081C7` | Focus ring outer (maps to `--shadow-focus-ring`) |
319
- | `ring-muted` | `{colors.ring-muted}` | `#B5BEE2` | Focus ring inner companion |
320
-
321
- Also generated: `ring-destructive`, `ring-destructive-muted` for destructive / invalid focus (see **Effects — Focus rings**).
322
-
323
- ### Semantic colors
324
-
325
- Semantic tokens are **only** for status and system feedback (Alert, Banner, Sonner, badge status variants, validation). Do not use them as generic fills or decoration.
326
-
327
- Each family has **default** pairings (theme-switching surfaces) and **muted** pairings (blocks on **persistent dark chrome**). On muted surfaces, use the same `*-foreground-on-*` token names with the muted background; verify contrast in context.
328
-
329
- **Info**
330
-
331
- | Token | Light (reference) | Dark (reference) | Use |
332
- | ------------------------- | ---------------------------------- | ---------------- | ----------------------------------------------------------------------------- |
333
- | `info-background` | `{colors.info-background}` | `#B5BEE2` | Info surface |
334
- | `info-background-hover` | `#B5BEE2` | `#D0D6ED` | Hover on `info-background` |
335
- | `info-foreground` | `#4A5FB8` | `#9DA9D9` | Text near info context on standard surfaces |
336
- | `info-foreground-on-info` | `{colors.info-foreground-on-info}` | `#1A2242` | Text **on** `info-background` |
337
- | `info-muted-background` | `#F0F2F9` | `#2D3134` | Info tint on dark chrome |
338
- | _(pairing)_ | — | — | On `info-muted-background`, use `info-foreground-on-info` for on-surface copy |
339
-
340
- **Success**
341
-
342
- | Token | Light (reference) | Dark (reference) | Use |
343
- | ------------------------------- | ---------------------------------------- | ---------------- | ------------------------------------------------------------------ |
344
- | `success-background` | `{colors.success-background}` | `#8BDEAE` | Success surface |
345
- | `success-background-hover` | `#8BDEAE` | `#BBF3D0` | Hover on `success-background` |
346
- | `success-foreground` | `#1C984A` | `#24C45E` | Text near success on standard surfaces |
347
- | `success-foreground-on-success` | `{colors.success-foreground-on-success}` | `#0A381C` | Text **on** `success-background` |
348
- | `success-muted-background` | `#DDF9E7` | `#2D3134` | Success on dark chrome |
349
- | _(pairing)_ | — | — | On `success-muted-background`, use `success-foreground-on-success` |
350
-
351
- **Warning**
352
-
353
- | Token | Light (reference) | Dark (reference) | Use |
354
- | ------------------------------- | ---------------------------------------- | ---------------- | -------------------------------------- |
355
- | `warning-background` | `{colors.warning-background}` | `#FFE3A2` | Warning surface |
356
- | `warning-background-hover` | `#FFD062` | `#FFF1D0` | Hover on `warning-background` |
357
- | `warning-foreground` | `#C18800` | `#D8BF00` | Text near warning on standard surfaces |
358
- | `warning-foreground-on-warning` | `{colors.warning-foreground-on-warning}` | `#5B4000` | Text **on** `warning-background` |
359
- | `warning-muted-background` | `#FFF1D0` | `#2D3134` | Warning on dark chrome |
360
-
361
- **Destructive**
362
-
363
- | Token | Light (reference) | Dark (reference) | Use |
364
- | ------------------------------------ | --------------------------------------------- | ---------------- | -------------------------------------------------- |
365
- | `destructive-background` | `{colors.destructive-background}` | `#FAA9B7` | Error / destructive surface |
366
- | `destructive-background-hover` | `#FAA9B7` | `#FCCAD2` | Hover on `destructive-background` |
367
- | `destructive-foreground` | `#CB0B2C` | `#F65E78` | Text near destructive context on standard surfaces |
368
- | `destructive-foreground-on-critical` | `{colors.destructive-foreground-on-critical}` | `#8D081F` | Text **on** `destructive-background` |
369
- | `destructive-muted-background` | `#FDDEE4` | `#2D3134` | Destructive on dark chrome |
370
- | `destructive-muted-background-hover` | `#FCCAD2` | `#40464A` | Hover on `destructive-muted-background` |
371
-
372
- **Neutral** (status: draft, archived — not “semantic calm” in the same sense as info/success)
373
-
374
- | Token | Light (reference) | Dark (reference) | Use |
375
- | ------------------------------- | ----------------- | ---------------- | -------------------------------- |
376
- | `neutral-background` | `#E4E6E8` | `#D4D7D9` | Neutral status surface |
377
- | `neutral-background-hover` | `#D4D7D9` | `#E4E6E8` | Hover on `neutral-background` |
378
- | `neutral-foreground` | `#52595F` | `#A5ABB1` | Text near neutral status |
379
- | `neutral-foreground-on-neutral` | `#40464A` | `#2D3134` | Text **on** `neutral-background` |
380
- | `neutral-muted-background` | `#F1F2F3` | `#2D3134` | Neutral on dark chrome |
381
-
382
- **Naming:** CSS uses full role names (`info-foreground-on-info`, `neutral-foreground-on-neutral`, `destructive-foreground-on-critical`). There is no shortened alias in the theme.
245
+ Theme tables below use **CSS token names** from Figma Reflect. Each maps to `--color-{name}` and Tailwind v4 utilities (`text-{name}`, `bg-{name}`, `border-{name}`, `ring-{name}`). Prefer utilities over raw `var(--…)`.
246
+
247
+ | Pattern | Example utilities | Notes |
248
+ | --------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------- |
249
+ | `base-*` | `bg-base-background`, `text-base-foreground` | Page surface and primary text |
250
+ | `medium-*` | `bg-medium-background`, `text-medium-foreground` | Inputs, fields, subtle elevation |
251
+ | `muted-*` | `bg-muted-background`, `text-muted-foreground` | Secondary chrome, segmented tracks |
252
+ | `primary-*` / `secondary-*` | `bg-primary-background`, `text-primary-foreground` | Brand actions |
253
+ | `popover-*` / `card-*` | `bg-popover-background`, `bg-card-background` | Elevated surfaces |
254
+ | `critical-*` | `bg-critical-background` + `text-critical-foreground`; flat status text: `text-critical-foreground-strong` | Errors / critical status (not `destructive-*`) |
255
+ | `border-*` | `border-default`, `border-emphasized`, `border-disabled` | Strokes (`default` → `--default` in CSS) |
256
+ | `ring-*` | `ring-ring-default`, shadow focus utilities | Focus rings |
257
+ | `decorative-{n}-*` | `bg-decorative-1-background` | Non-status accents (slot `n` = ramp in table) |
258
+ | `chart-*` | `bg-chart-1-200`, `bg-chart-gridlines` | Plotted data only |
259
+
260
+ Light and dark columns in the tables show the **ramp step** each token resolves to in `colors.css` (e.g. `mountain-50`, `fjord-500`).
261
+
262
+ ### Base
263
+
264
+ | Token | Light (ramp) | Dark (ramp) | Use |
265
+ | ------------------------------------- | --------------------------- | -------------- | ------------------------------- |
266
+ | `base-background` | `mountain-white` | `mountain-950` | Primary page surface |
267
+ | `base-background-hover` | `mountain-50` | `mountain-800` | Hover on base surface |
268
+ | `base-background-hover-fixed-dark` | `mountain-700` | `mountain-700` | Hover on persistent dark chrome |
269
+ | `base-background-disabled` | `mountain-50` | `mountain-800` | Disabled control fill |
270
+ | `base-background-disabled-fixed-dark` | `mountain-700` | `mountain-700` | Disabled on dark chrome |
271
+ | `base-background-overlay` | `rgba(124, 134, 142, 0.55)` | same | Modal scrim |
272
+ | `base-foreground` | `mountain-950` | `mountain-10` | Primary text and icons |
273
+ | `base-foreground-disabled` | `mountain-300` | `mountain-600` | Disabled text |
274
+ | `base-foreground-disabled-fixed-dark` | `mountain-600` | `mountain-600` | Disabled text on dark chrome |
275
+
276
+ ### Medium
277
+
278
+ | Token | Light (ramp) | Dark (ramp) | Use |
279
+ | ------------------------------ | -------------- | -------------- | -------------------------------- |
280
+ | `medium-background` | `mountain-50` | `mountain-800` | Inputs, comboboxes, subtle fills |
281
+ | `medium-background-hover` | `mountain-100` | `mountain-700` | Hover on medium surfaces |
282
+ | `medium-foreground` | `mountain-700` | `mountain-300` | Text on medium surfaces |
283
+ | `medium-foreground-hover` | `mountain-500` | `mountain-500` | Hover text on medium |
284
+ | `medium-foreground-fixed-dark` | `mountain-300` | `mountain-300` | Medium text on dark chrome |
285
+
286
+ ### Muted
287
+
288
+ | Token | Light (ramp) | Dark (ramp) | Use |
289
+ | ----------------------------- | -------------- | -------------- | ------------------------------- |
290
+ | `muted-background` | `mountain-10` | `mountain-900` | Secondary chrome, switch tracks |
291
+ | `muted-background-hover` | `mountain-50` | `mountain-800` | Hover on muted surfaces |
292
+ | `muted-foreground` | `mountain-550` | `mountain-400` | Tertiary text |
293
+ | `muted-foreground-hover` | `mountain-700` | `mountain-100` | Hover tertiary text |
294
+ | `muted-foreground-fixed-dark` | `mountain-400` | `mountain-400` | Muted text on dark chrome |
295
+
296
+ ### Primary (brand)
297
+
298
+ | Token | Light (ramp) | Dark (ramp) | Use |
299
+ | ------------------------------------- | -------------- | -------------- | -------------------------------- |
300
+ | `primary-background` | `mountain-900` | `mountain-10` | Primary actions (default button) |
301
+ | `primary-background-hover` | `mountain-650` | `mountain-100` | Hover on primary |
302
+ | `primary-background-fixed-dark` | `mountain-10` | `mountain-10` | Primary fill on dark chrome |
303
+ | `primary-background-hover-fixed-dark` | `mountain-100` | `mountain-100` | Hover primary on dark chrome |
304
+ | `primary-foreground` | `mountain-50` | `mountain-950` | Text on `primary-background` |
305
+ | `primary-foreground-fixed-dark` | `mountain-950` | `mountain-950` | Text on primary on dark chrome |
306
+
307
+ ### Secondary (brand)
308
+
309
+ | Token | Light (ramp) | Dark (ramp) | Use |
310
+ | --------------------------------------- | -------------- | -------------- | ------------------------------ |
311
+ | `secondary-background` | `mountain-100` | `mountain-700` | Secondary actions, quiet fills |
312
+ | `secondary-background-hover` | `mountain-50` | `mountain-600` | Hover on secondary |
313
+ | `secondary-background-fixed-dark` | `mountain-700` | `mountain-700` | Secondary on dark chrome |
314
+ | `secondary-background-hover-fixed-dark` | `mountain-600` | `mountain-600` | Hover secondary on dark chrome |
315
+ | `secondary-foreground` | `mountain-700` | `mountain-200` | Text on secondary |
316
+ | `secondary-foreground-fixed-dark` | `mountain-200` | `mountain-200` | Secondary text on dark chrome |
317
+
318
+ ### Popover
319
+
320
+ | Token | Light (ramp) | Dark (ramp) | Use |
321
+ | ------------------------------- | ---------------- | ---------------- | --------------------------------- |
322
+ | `popover-background` | `mountain-white` | `mountain-900` | Dialogs, menus, shadowed surfaces |
323
+ | `popover-background-hover` | `mountain-50` | `mountain-800` | Hover on popover surface |
324
+ | `popover-background-fixed-dark` | `mountain-800` | `mountain-800` | Popover on dark chrome |
325
+ | `popover-foreground` | `mountain-950` | `mountain-50` | Text on popover |
326
+ | `popover-foreground-fixed-dark` | `mountain-white` | `mountain-white` | Text on popover on dark chrome |
327
+
328
+ ### Card
329
+
330
+ | Token | Light (ramp) | Dark (ramp) | Use |
331
+ | ----------------------- | -------------- | -------------- | -------------------- |
332
+ | `card-background` | `mountain-10` | `mountain-800` | Card surface on base |
333
+ | `card-background-hover` | `mountain-50` | `mountain-700` | Hover on card |
334
+ | `card-foreground` | `mountain-950` | `mountain-50` | Card text |
335
+
336
+ ### Link
337
+
338
+ | Token | Light (ramp) | Dark (ramp) | Use |
339
+ | ----------------------- | ------------ | ----------- | ---------- |
340
+ | `link-foreground` | `fjord-600` | `fjord-450` | Text links |
341
+ | `link-foreground-hover` | `fjord-700` | `fjord-200` | Link hover |
342
+
343
+ ### Border
344
+
345
+ | Token | Light (ramp) | Dark (ramp) | Use |
346
+ | ------------ | -------------- | -------------- | ----------------------------------------- |
347
+ | `default` | `mountain-100` | `mountain-700` | Default strokes (`border-default`) |
348
+ | `emphasized` | `mountain-200` | `mountain-600` | Stronger separation (`border-emphasized`) |
349
+ | `disabled` | `mountain-50` | `mountain-800` | Disabled outlines (`border-disabled`) |
350
+
351
+ ### Ring (focus)
352
+
353
+ | Token | Light (ramp) | Dark (ramp) | Use |
354
+ | --------------------- | ------------ | ----------- | --------------------------- |
355
+ | `ring-default` | `fjord-500` | `fjord-400` | Default focus ring |
356
+ | `ring-muted` | `gray-200` | `gray-800` | Focus ring inner / muted |
357
+ | `ring-critical` | `red-600` | `red-450` | Invalid / destructive focus |
358
+ | `ring-critical-muted` | `red-100` | `red-900` | Destructive focus companion |
359
+
360
+ Each **status family** (success, warning, critical, info, neutral) shares the same foreground pairing pattern:
361
+
362
+ | Suffix | Use |
363
+ | --------------------- | ----------------------------------------------------------------------------------------------------------------------- |
364
+ | `*-foreground` | Text and icons **on** `*-background` (Alert fills, filled Badge, status chips with a tint) |
365
+ | `*-foreground-strong` | Status text and icons **without** a tinted background — on `base-background`, `card-background`, or inline in body copy |
366
+
367
+ Example: `bg-critical-background` + `text-critical-foreground` for a filled error badge; `text-critical-foreground-strong` for a red error label on a plain card.
368
+
369
+ ### Success
370
+
371
+ | Token | Light (ramp) | Dark (ramp) | Use |
372
+ | --------------------------- | ------------ | ----------- | ---------------------------------------------------------- |
373
+ | `success-background` | `green-100` | `green-900` | Success surface |
374
+ | `success-background-hover` | `green-200` | `green-800` | Hover on success |
375
+ | `success-foreground` | `green-650` | `green-400` | Text and icons **on** `success-background` |
376
+ | `success-foreground-strong` | `green-500` | `green-400` | Success status text/icons **without** `success-background` |
377
+
378
+ ### Warning
379
+
380
+ | Token | Light (ramp) | Dark (ramp) | Use |
381
+ | --------------------------- | ------------ | ------------ | ---------------------------------------------------------- |
382
+ | `warning-background` | `orange-100` | `orange-900` | Warning surface |
383
+ | `warning-background-hover` | `orange-200` | `orange-800` | Hover on warning |
384
+ | `warning-foreground` | `orange-650` | `orange-400` | Text and icons **on** `warning-background` |
385
+ | `warning-foreground-strong` | `orange-500` | `orange-400` | Warning status text/icons **without** `warning-background` |
386
+
387
+ ### Critical
388
+
389
+ | Token | Light (ramp) | Dark (ramp) | Use |
390
+ | ---------------------------- | ------------ | ----------- | ------------------------------------------------------------ |
391
+ | `critical-background` | `red-100` | `red-900` | Error / critical surface |
392
+ | `critical-background-hover` | `red-200` | `red-800` | Hover on critical |
393
+ | `critical-foreground` | `red-650` | `red-400` | Text and icons **on** `critical-background` |
394
+ | `critical-foreground-strong` | `red-500` | `red-400` | Critical status text/icons **without** `critical-background` |
395
+
396
+ ### Info
397
+
398
+ | Token | Light (ramp) | Dark (ramp) | Use |
399
+ | ------------------------ | ------------ | ----------- | ---------------------------------------------------- |
400
+ | `info-background` | `blue-100` | `blue-900` | Info surface |
401
+ | `info-background-hover` | `blue-200` | `blue-800` | Hover on info |
402
+ | `info-foreground` | `blue-650` | `blue-400` | Text and icons **on** `info-background` |
403
+ | `info-foreground-strong` | `blue-500` | `blue-400` | Info status text/icons **without** `info-background` |
404
+
405
+ ### Neutral (status)
383
406
 
384
- ### Decorative colors
407
+ | Token | Light (ramp) | Dark (ramp) | Use |
408
+ | --------------------------- | -------------- | -------------- | ---------------------------------------------------------- |
409
+ | `neutral-background` | `mountain-100` | `mountain-900` | Draft / archived status |
410
+ | `neutral-background-hover` | `mountain-200` | `mountain-800` | Hover on neutral status |
411
+ | `neutral-foreground` | `mountain-650` | `mountain-400` | Text and icons **on** `neutral-background` |
412
+ | `neutral-foreground-strong` | `mountain-550` | `mountain-400` | Neutral status text/icons **without** `neutral-background` |
413
+
414
+ **Naming:** `*-foreground` replaces legacy `*-foreground-on-*` (copy on tinted status surfaces). `*-foreground-strong` is the flat-surface status color (replaces legacy bare `*-foreground` / `destructive-foreground` used near status on standard surfaces). Critical replaces legacy `destructive-*` in theme tokens.
385
415
 
386
- For **small accents** (badges, avatars, empty states) where color differentiates but does **not** signal status — use **Chart tokens** for plot colors, not this ramp, unless a design explicitly maps a tile to a series color. Pattern: `decorative-background-{ramp}`, `decorative-background-{ramp}-hover`, `decorative-foreground-{ramp}`.
416
+ ### Decorative colors
387
417
 
388
- **Preference order for new work:**
418
+ For **small accents** (badges, avatars, empty states) where color differentiates but does **not** signal status — use **decorative-{1..7}-\*** semantic slots, not chart series colors, unless a design explicitly maps a tile to a plot series. Pattern: `decorative-{n}-background`, `decorative-{n}-background-hover`, `decorative-{n}-foreground` (slot `n` matches the ramp in the table below).
389
419
 
390
- | Priority | Ramp | Background | Foreground |
391
- | -------- | -------- | -------------------------------- | -------------------------------- |
392
- | 1 | Fjord | `decorative-background-fjord` | `decorative-foreground-fjord` |
393
- | 2 | Nordic | `decorative-background-nordic` | `decorative-foreground-nordic` |
394
- | 3 | Aurora | `decorative-background-aurora` | `decorative-foreground-aurora` |
395
- | 4 | Dusk | `decorative-background-dusk` | `decorative-foreground-dusk` |
396
- | 5 | Orange | `decorative-background-orange` | `decorative-foreground-orange` |
397
- | 6 | Sky | `decorative-background-sky` | `decorative-foreground-sky` |
398
- | 7 | Mountain | `decorative-background-mountain` | `decorative-foreground-mountain` |
420
+ **CSS token slots** (Figma Reflect naming):
399
421
 
400
- Example (fjord ramp): light `decorative-background-fjord` → `#CCD5FA` (fjord-200), `decorative-foreground-fjord` → `#1234B6` (fjord-700); dark → `#AEBDF7` / `#0D2582` (fjord-300 / fjord-800).
422
+ | Slot | Ramp | Background | Foreground |
423
+ | ---- | -------- | ---------------------------------------------------------- | ------------------------- |
424
+ | 1 | Mountain | `decorative-1-background`, `decorative-1-background-hover` | `decorative-1-foreground` |
425
+ | 2 | Fjord | `decorative-2-background`, `decorative-2-background-hover` | `decorative-2-foreground` |
426
+ | 3 | Nordic | `decorative-3-background`, `decorative-3-background-hover` | `decorative-3-foreground` |
427
+ | 4 | Aurora | `decorative-4-background`, `decorative-4-background-hover` | `decorative-4-foreground` |
428
+ | 5 | Dusk | `decorative-5-background`, `decorative-5-background-hover` | `decorative-5-foreground` |
429
+ | 6 | Amber | `decorative-6-background`, `decorative-6-background-hover` | `decorative-6-foreground` |
430
+ | 7 | Pink | `decorative-7-background`, `decorative-7-background-hover` | `decorative-7-foreground` |
401
431
 
402
- ### Chart tokens
432
+ **Avatar and Badge** expose a unified `decorative-1` … `decorative-7` **variant prop** (labels “Decorative 1” … “Decorative 7” in Storybook). Default is `decorative-1` (Mountain). Each prop maps to the matching CSS slot (e.g. prop `decorative-2` → `decorative-2-*` tokens / Fjord).
403
433
 
404
- **Priority rule:** use `chart-*` for any data plotted on axes or series; use `decorative-*` for non-data visual differentiation (tiles, avatars, accents); use semantic tokens (`info-*`, `success-*`, `warning-*`, `destructive-*`) for operational status and feedback only. Never swap between these groups.
434
+ Example (Fjord slot 2): light `decorative-2-background` → `fjord-200`, hover → `fjord-300`, `decorative-2-foreground` → `fjord-800`; dark → `fjord-300` / `fjord-200` / `fjord-900`.
405
435
 
406
- | Token | Use |
407
- | ----------------------------------------------- | ----------------------------------------------------------- |
408
- | `chart-{ramp}-color-1` … `chart-{ramp}-color-6` | Alpha-based series / area-fill steps (strongest → lightest) |
409
- | `chart-gridlines` | Grid lines |
436
+ ### Chart tokens
410
437
 
411
- Default series order: **fjord → nordic → aurora → dusk → orange**.
438
+ **Priority rule:** use `chart-*` for any data plotted on axes or series; use `decorative-*` for non-data visual differentiation (tiles, avatars, accents); use semantic tokens (`info-*`, `success-*`, `warning-*`, `critical-*`) for operational status and feedback only. Never swap between these groups.
439
+
440
+ | Token | Underlying ramp (light) | Use |
441
+ | ---------------------------------- | ------------------------------------ | ---------------------------------------------------------------------- |
442
+ | `chart-gridlines` | `mountain-100` (`mountain-800` dark) | Axis grid lines |
443
+ | `chart-1-{50,100,200,300,400,450}` | `fjord-alpha-*` | Default series 1 — line/area alpha steps (50 lightest → 450 strongest) |
444
+ | `chart-2-{50…450}` | `nordic-alpha-*` | Series 2 |
445
+ | `chart-3-{50…450}` | `aurora-alpha-*` | Series 3 |
446
+ | `chart-4-{50…450}` | `dusk-alpha-*` | Series 4 |
447
+ | `chart-5-{50…450}` | `amber-alpha-*` | Series 5 |
448
+ | `chart-success-{50…450}` | `green-alpha-*` | Status-colored series (success) |
449
+ | `chart-warning-{50…450}` | `orange-alpha-*` | Status-colored series (warning) |
450
+ | `chart-critical-{50…450}` | `red-alpha-*` | Status-colored series (critical) |
451
+ | `chart-info-{50…450}` | `blue-alpha-*` | Status-colored series (info) |
452
+ | `chart-neutral-{50…450}` | `mountain-alpha-*` | Neutral / baseline series |
453
+
454
+ Default multi-series order: **chart-1 (Fjord) → chart-2 (Nordic) → chart-3 (Aurora) → chart-4 (Dusk) → chart-5 (Amber)**.
455
+
456
+ Utilities: `bg-chart-1-200`, `fill-chart-3-450`, `stroke-chart-gridlines`, etc.
457
+
458
+ ### Heat map
459
+
460
+ | Token | Light (ramp) | Dark (ramp) | Use |
461
+ | ------------------- | ------------ | ----------- | --------------- |
462
+ | `heat-map-intense` | `fjord-600` | `fjord-300` | Highest density |
463
+ | `heat-map-strong` | `fjord-450` | `fjord-450` | Strong density |
464
+ | `heat-map-moderate` | `fjord-300` | `fjord-650` | Mid density |
465
+ | `heat-map-mild` | `fjord-100` | `fjord-800` | Lowest density |
466
+
467
+ ### Shadow (elevation overlays)
468
+
469
+ | Token | Light | Dark | Use |
470
+ | ----------- | ------------------ | ------------------ | ----------------- |
471
+ | `shadow-sm` | `rgba(0,0,0,0.04)` | `rgba(0,0,0,0.2)` | Subtle elevation |
472
+ | `shadow-md` | `rgba(0,0,0,0.05)` | `rgba(0,0,0,0.3)` | Cards, popovers |
473
+ | `shadow-lg` | `rgba(0,0,0,0.06)` | `opacity-black-40` | Modals |
474
+ | `shadow-xl` | `rgba(0,0,0,0.1)` | `opacity-black-60` | Highest elevation |
475
+
476
+ Focus rings compose `ring-default` + `ring-muted` (or `ring-critical` + `ring-critical-muted` for invalid fields). See [Focus rings](#focus-rings).
477
+
478
+ ### Color ramps (step tokens)
479
+
480
+ Raw ramp steps live in `colors.css` and appear in Storybook **Color ramps**. Figma uses slash paths (`mountain/500`); CSS/Tailwind use hyphen steps (`mountain-500`, `bg-fjord-200`).
481
+
482
+ | Ramp | Role | Typical steps |
483
+ | ------------------- | ------------------------------------------------------ | ---------------------------------------------------------------------------------------- |
484
+ | **Mountain** | Primary neutral (base, card, neutral status) | `10`, `50`–`950`, `550` (mid-gray), `white`, `black`, `alpha-10`, `alpha-50`–`alpha-450` |
485
+ | **Fjord** | Brand blue; chart series 1; links; heat map | `50`–`950`, `alpha-50`–`alpha-450` |
486
+ | **Nordic** | Brand teal; chart series 2; decorative slot 3 | same |
487
+ | **Aurora** | Brand green; chart series 3; decorative slot 4 | same |
488
+ | **Dusk** | Brand purple; chart series 4; decorative slot 5 | same |
489
+ | **Amber** | Brand yellow-orange; chart series 5; decorative slot 6 | same |
490
+ | **Pink** | Brand pink; decorative slot 7 | same |
491
+ | **Blue** | Info status + `chart-info-*` | same |
492
+ | **Green** | Success status + `chart-success-*` | same |
493
+ | **Red** | Critical status + `chart-critical-*` | same |
494
+ | **Orange** | Warning status + `chart-warning-*` | same |
495
+ | **Gray** | Ring muted, secondary neutrals | same |
496
+ | **Sky**, **Yellow** | Extended palette (rare in theme tokens) | same |
497
+ | **Opacity** | `opacity-black-*`, `opacity-white-*` | Overlay and shadow building blocks |
498
+
499
+ Use ramp steps only when no theme token covers the surface. Prefer theme tokens for all product UI.
500
+
501
+ ### Figma ↔ implementation discrepancies
502
+
503
+ Compared to [Figma Reflect theme tokens](https://www.figma.com/design/pMnMQvfErZDJzWgrcWCIwZ/Aura-Design-System?node-id=18097-28085) and `colors.css` (runtime source of truth):
504
+
505
+ | Item | Figma | `colors.css` / Storybook | Notes |
506
+ | -------------------------------------------------------------------- | -------------------------------------------- | ------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
507
+ | `base-foreground-contrast` | Present (`base/foreground-contrast`) | **Missing** | Not wired in CSS or `colors.stories.tsx` `THEME_TOKEN_ORDER` |
508
+ | `*-muted-background` (semantic) | Removed in Reflect | **Removed** | Legacy `info-muted-background`, `destructive-muted-background`, etc. — use `*-background` on dark chrome or `medium-*` / `popover-*-fixed-dark` |
509
+ | `destructive-*` theme names | Renamed to `critical-*` | `critical-*` | Deprecated aliases may remain in `colors-deprecated.css` until 1.0.0 |
510
+ | `*-foreground-on-*` | `*-foreground` | e.g. `info-foreground-on-info` → `info-foreground` (on `info-background`) |
511
+ | `destructive-foreground`, `info-foreground`, … (flat status on base) | `*-foreground-strong` | e.g. `destructive-foreground` → `critical-foreground-strong` |
512
+ | Path vs name | Slash paths (`border/default`, `chart/1/50`) | Hyphen tokens (`border-default`, `chart-1-50`) | Same tokens; naming convention only |
513
+ | Chart series 5 ramp | Amber in Figma/CSS | Amber (not orange) | Default series 5 maps to `amber-alpha-*`, not `orange-*` |
514
+
515
+ If you need a token that exists in Figma but not in CSS, treat it as a **design–engineering gap** until added to `colors.css`.
516
+
517
+ ### Deprecated color tokens (removed in 1.0.0)
518
+
519
+ Legacy names remain in `colors-deprecated.css` until Aura **1.0.0**. Migrate direct Tailwind usage to Reflect names:
520
+
521
+ | Pattern (deprecated) | Migrate to |
522
+ | ------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
523
+ | `text-foreground`, `bg-background`, `border-border` | `text-base-foreground`, `bg-base-background`, `border-default` |
524
+ | `destructive-background`, `destructive-foreground-on-critical` | `critical-background`, `critical-foreground` |
525
+ | `ring-destructive`, `ring-destructive-muted` | `ring-critical`, `ring-critical-muted` |
526
+ | `bg-accent-background`, `bg-highlight-background`, `bg-active-background` | `bg-base-background-hover`, `bg-medium-background`, `bg-primary-background` (context-dependent) |
527
+ | `bg-muted-background` (legacy page fill) | `bg-muted-background` (Reflect) or `bg-medium-background` |
528
+ | `text-disabled-foreground`, `bg-disabled-background` | `text-base-foreground-disabled`, transparent + `border-disabled` |
529
+ | `bg-background-fixed-dark`, `text-foreground-fixed-dark` | `bg-popover-background-fixed-dark`, `text-popover-foreground-fixed-dark` (or category-specific `*-fixed-dark`) |
530
+ | `decorative-background-{ramp}`, `decorative-foreground-{ramp}` | `decorative-{1..7}-background`, `decorative-{1..7}-foreground` (see slot table above) |
531
+ | `chart-{ramp}-color-{n}` | `chart-{series}-{step}` (e.g. `chart-fjord-color-1` → `chart-1-50` … `chart-1-450`) |
532
+ | `opacity-{10,20,…}` utilities | Use semantic surfaces or ramp alpha steps |
533
+
534
+ Full per-token list: `colors-deprecated.css`. Badge/Avatar variant props `mountain`, `fjord`, `gray` are removed — use `decorative-1` … `decorative-7`.
412
535
 
413
536
  ---
414
537
 
@@ -444,7 +567,7 @@ Aura uses **Inter** for product UI, **Space Grotesk** for marketing display, and
444
567
 
445
568
  For pages with data-heavy layouts — cards, charts, metric tiles — work through these steps before writing component code.
446
569
 
447
- - [ ] **Tokens** — confirm all colors use semantic or chart tokens, no raw hex. Metric tiles: `decorative-*`. Data series: `chart-*`. Status: `info-*`, `success-*`, `warning-*`, `destructive-*`. See [Colors](#colors).
570
+ - [ ] **Tokens** — confirm all colors use semantic or chart tokens, no raw hex. Metric tiles: `decorative-*`. Data series: `chart-*`. Status: `info-*`, `success-*`, `warning-*`, `critical-*`. See [Colors](#colors).
448
571
  - [ ] **Layout** — use a 12-column grid with `gap-4` or `gap-6`. Tile widths: `col-span-12 sm:col-span-6 lg:col-span-3`. Cap the page frame with `max-w-[min(100%,var(--container-8xl))]`.
449
572
  - [ ] **Cards** — use the `Card` component with title, description, and a primary action. Do not stack unrelated actions in the same card. See [Layout and hierarchy](#6-layout-and-hierarchy).
450
573
  - [ ] **Loading states** — every data region must show `Shimmer` (known layout) or `Loader` (unknown layout) while fetching. See [Feedback and system status](#1-feedback-and-system-status).
@@ -465,23 +588,27 @@ Width and spacing values in this subsection follow the **`{spacing.base}`-based*
465
588
  Standard layout primitives used across all patterns:
466
589
 
467
590
  **Content max widths**
591
+
468
592
  - max-w-7xl — dashboards, full-width layouts
469
593
  - max-w-4xl — detail pages
470
594
  - max-w-2xl — forms, wizard step content
471
595
  - max-w-sm — search inputs, narrow controls
472
596
 
473
597
  **Section spacing**
598
+
474
599
  - space-y-8 — between major page sections (e.g. form groups)
475
600
  - space-y-6 — between sections within a page
476
601
  - space-y-4 — between items within a section
477
602
  - space-y-2 — between label and field, tight groupings
478
603
 
479
604
  **Grid gaps**
605
+
480
606
  - gap-6 — dashboard grids, chart grids, panel gaps
481
607
  - gap-4 — card grids, metric grids
482
608
  - gap-3 — toolbar items, button groups
483
609
 
484
610
  **Page padding**
611
+
485
612
  - px-6 py-8 — standard content area (desktop)
486
613
  - px-4 py-6 — mobile content area
487
614
  - p-4 — card/panel internal padding
@@ -490,6 +617,7 @@ Standard layout primitives used across all patterns:
490
617
  ### Layout patterns
491
618
 
492
619
  #### Sidebar content
620
+
493
621
  3+ top-level sections. Persistent navigation needed.
494
622
  Most common for multi-page apps.
495
623
 
@@ -510,9 +638,10 @@ Most common for multi-page apps.
510
638
  Desktop (1440px+): Sidebar 240px, content fills rest.
511
639
  Tablet (768px-1439px): Sidebar collapsible via hamburger.
512
640
  Mobile (below 768px): Sidebar hidden. Hamburger menu.
513
- Consider bottom nav for 3-5 primary sections.
641
+ Consider bottom nav for 3-5 primary sections.
514
642
 
515
643
  #### Full-width dashboard
644
+
516
645
  Data visualizations, metrics, monitoring. Maximum horizontal space needed.
517
646
 
518
647
  **Structure**
@@ -539,6 +668,7 @@ Tablet: 2-column grid. Charts stack.
539
668
  Mobile: Single column. Metrics as horizontal scroll.
540
669
 
541
670
  #### Form page
671
+
542
672
  Data entry, creation flows, configuration, settings with form fields.
543
673
 
544
674
  **Structure**
@@ -588,8 +718,8 @@ Desktop: Two-column (grid-cols-3, main span-2, sidebar span-1).
588
718
  Tablet: Sidebar below main content.
589
719
  Mobile: Single column. Sidebar collapses.
590
720
 
591
-
592
721
  #### Settings page
722
+
593
723
  App preferences, account settings, notification config.
594
724
 
595
725
  **Structure**
@@ -609,6 +739,7 @@ Tablet: Top tabs replacing left nav.
609
739
  Mobile: Category list → tap opens section full-screen.
610
740
 
611
741
  #### Split screen
742
+
612
743
  Comparison views, editor + preview, master-detail with equal emphasis on both sides.
613
744
 
614
745
  **Structure**
@@ -627,8 +758,8 @@ Desktop: grid-cols-2, equal columns.
627
758
  Tablet: grid-cols-2 with narrower gap.
628
759
  Mobile: Stack vertically (grid-cols-1), or use Segmented Control to switch between panels.
629
760
 
630
-
631
761
  #### Three panel
762
+
632
763
  Navigation + content + properties panel. IDE-style layouts. Complex editing workflows with context panels.
633
764
 
634
765
  **Structure**
@@ -649,8 +780,8 @@ Tablet (768-1439px): Hide right panel, toggle via button.
649
780
  Mobile (below 768px): Single panel with navigation as Drawer, right panel as bottom sheet or separate route.
650
781
 
651
782
  #### List page
652
- Browsing collections — reports, users, assets, items. The most common page type in data-heavy applications.
653
783
 
784
+ Browsing collections — reports, users, assets, items. The most common page type in data-heavy applications.
654
785
 
655
786
  **Structure**
656
787
 
@@ -673,8 +804,8 @@ Tablet: Hide non-essential columns, allow horizontal scroll.
673
804
  Mobile: Switch to card/list view with stackable filters.
674
805
 
675
806
  #### Wizard
676
- Multi-step creation flows, onboarding, configuration wizards, setup processes.
677
807
 
808
+ Multi-step creation flows, onboarding, configuration wizards, setup processes.
678
809
 
679
810
  **Structure**
680
811
 
@@ -716,10 +847,10 @@ Layout helpers in theme: `--container-2xl` (`{spacing.container-2xl}`), `--conta
716
847
 
717
848
  Aura adjusts Tailwind **container** breakpoints where the default scale is too wide or too narrow for data-dense product surfaces:
718
849
 
719
- | Token | Value | Role |
720
- | ----------------- | ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
721
- | `--container-2xl` | `{spacing.container-2xl}` | Narrower than Tailwind’s default `2xl` container — useful outer bound for regions; **body copy** inside can still follow the **`{spacing.prose-max}`** reading rule above |
722
- | `--container-8xl` | `{spacing.container-8xl}` | Wide upper bound for dashboards and full-bleed marketing rows |
850
+ | Token | Value | Role |
851
+ | ----------------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
852
+ | `--container-2xl` | `{spacing.container-2xl}` | Narrower than Tailwind’s default `2xl` container — useful outer bound for regions; **body copy** inside can still follow the **`{spacing.prose-max}`** reading rule above |
853
+ | `--container-8xl` | `{spacing.container-8xl}` | Wide upper bound for dashboards and full-bleed marketing rows |
723
854
 
724
855
  Prefer **`max-w-*`** (and other width utilities) tied to the theme over ad-hoc pixel `max-width` on wrappers. **Global frame** width (host chrome) is defined by the **host application**; **inside** the frame, combine these tokens with responsive utilities so regions reflow predictably.
725
856
 
@@ -840,8 +971,6 @@ Heights are **not** always single CSS variables; primitives use Tailwind height
840
971
 
841
972
  **Topbar** height is **application-defined** (not a single Aura token). **Table / list row** density varies by product; menu and command patterns often use **`{components.button-primary.height}`** (`h-9`) rows.
842
973
 
843
-
844
-
845
974
  ### Global primitive rules
846
975
 
847
976
  1. Prefer primitives over custom components.
@@ -855,9 +984,11 @@ Heights are **not** always single CSS variables; primitives use Tailwind height
855
984
  Sections are in alphabetical order. For each component, the Storybook link is the primary reference for variants and props; the docs link is the primary reference for usage and design guidance.
856
985
 
857
986
  #### Storybook reference
987
+
858
988
  Anytime you need to reference a component in Storybook, use the following URL and replace the slug with the component's Storybook slug: https://master--695bb4b1b8041ae09768950a.chromatic.com/?path=/docs/primitives-{storybook-slug}--docs
859
989
 
860
- #### Docs reference
990
+ #### Docs reference
991
+
861
992
  Anytime you need to reference a component in docs, use the following URL and replace the slug with the component's doc slug: https://docs.cognite.com/aura-design-system/primitives/{docs-slug}
862
993
 
863
994
  #### Accordion
@@ -869,28 +1000,33 @@ Anytime you need to reference a component in docs, use the following URL and rep
869
1000
  Accordion reveals and hides grouped content sections to reduce cognitive load and page density.
870
1001
 
871
1002
  **Use when**
1003
+
872
1004
  - Grouping settings in side/config panels.
873
1005
  - Breaking long forms into manageable sections.
874
1006
  - Organizing docs/FAQ/help content.
875
1007
  - Showing nested information hierarchies.
876
1008
 
877
1009
  **Use something else when**
1010
+
878
1011
  - All content must stay visible for comparison/scanning.
879
1012
  - Content is short and easy to read without progressive disclosure.
880
1013
  - Users are making high-stakes or multi-step decisions where hidden content can cause errors.
881
1014
 
882
1015
  **Dos and don'ts**
1016
+
883
1017
  - Do use clear, specific section titles.
884
1018
  - Do keep icon and heading behavior consistent.
885
1019
  - Do not use for very short/simple content.
886
1020
  - Do not nest accordions.
887
1021
 
888
1022
  **Behavior**
1023
+
889
1024
  - Header controls expand/collapse via click/tap/Enter/Space.
890
1025
  - Support multi-expand unless product pattern requires single-expand.
891
1026
  - Keep expanded content available to assistive tech.
892
1027
 
893
1028
  **Often used with**
1029
+
894
1030
  - `Separator`, section headings, and form controls inside panel content.
895
1031
 
896
1032
  #### Action Toolbar
@@ -902,25 +1038,30 @@ Accordion reveals and hides grouped content sections to reduce cognitive load an
902
1038
  Action toolbar is a transient bottom-aligned action row that appears when users select items (for example in data-heavy views).
903
1039
 
904
1040
  **Use when**
1041
+
905
1042
  - Actions apply only to selected items.
906
1043
  - You need to reduce persistent toolbar clutter in tables/lists/cards.
907
1044
  - The workflow depends on selected state before next actions are valid.
908
1045
 
909
1046
  **Use something else when**
1047
+
910
1048
  - Actions are page-level and do not require selection first (use a standard toolbar/page actions).
911
1049
 
912
1050
  **Dos and don'ts**
1051
+
913
1052
  - Do keep actions contextual to the current selection.
914
1053
  - Do keep the set focused (use overflow when needed).
915
1054
  - Do center it in the container/page scope.
916
1055
  - Do not make it draggable.
917
1056
 
918
1057
  **Behavior**
1058
+
919
1059
  - Hidden by default; appears after selection.
920
1060
  - Anchored to bottom area; remains until selection clears, action completes, or user navigates away.
921
1061
  - If no reload occurs, it exits after action completion.
922
1062
 
923
1063
  **Often used with**
1064
+
924
1065
  - Selection patterns in data views, `Checkbox`, `Button`, `Menu`, and `Tooltip` for icon-only actions.
925
1066
 
926
1067
  #### Alert
@@ -932,26 +1073,31 @@ Action toolbar is a transient bottom-aligned action row that appears when users
932
1073
  Alert communicates contextual, medium-emphasis information inside page/task flow. It is not a blocking modal.
933
1074
 
934
1075
  **Use when**
1076
+
935
1077
  - Providing inline guidance/recommendations in the current task.
936
1078
  - Calling attention to warnings/issues that need awareness but are not blocking.
937
1079
  - Offering direct actions that resolve the issue in context.
938
1080
 
939
1081
  **Dos and don'ts**
1082
+
940
1083
  - Do include action buttons only when actions are directly related to resolving/dismissing the alert.
941
1084
  - Do evaluate simpler feedback methods first (for example field-level validation).
942
1085
  - Do not attach unrelated actions.
943
1086
 
944
1087
  **Placement**
1088
+
945
1089
  - Align with surrounding content; do not pin flush against dividers.
946
1090
  - Use card style for wrapped content in constrained areas.
947
1091
  - Use strip style for short messages in wider areas.
948
1092
 
949
1093
  **Behavior**
1094
+
950
1095
  - Inline with page flow (not full-screen blocking).
951
1096
  - Dismissal removes/hides alert per variant.
952
1097
  - Action path should be clear and minimal.
953
1098
 
954
1099
  **Often used with**
1100
+
955
1101
  - `Button` for direct resolution actions.
956
1102
 
957
1103
  #### Alert Dialog
@@ -962,15 +1108,18 @@ Alert communicates contextual, medium-emphasis information inside page/task flow
962
1108
  Short, focused confirmation or acknowledgment that interrupts the user for a clear binary or limited choice.
963
1109
 
964
1110
  **Use when**
1111
+
965
1112
  - Confirming destructive or irreversible actions.
966
1113
  - Blocking until the user chooses from a small set of options.
967
1114
 
968
1115
  **Use something else when**
1116
+
969
1117
  - Inline persistence is enough (`Alert`).
970
1118
  - The flow requires a form or multi-field input (`Dialog`).
971
1119
  - A quick acknowledgment is sufficient (`Sonner Toast`).
972
1120
 
973
1121
  **Often used with**
1122
+
974
1123
  - `Button` (destructive variant) as the trigger.
975
1124
 
976
1125
  #### Avatar
@@ -982,17 +1131,20 @@ Short, focused confirmation or acknowledgment that interrupts the user for a cle
982
1131
  Avatar visually represents a user, team, or concept and helps recognition in collaborative UI.
983
1132
 
984
1133
  **Use when**
1134
+
985
1135
  - Showing people in comments, chat, sharing, or collaborators.
986
1136
  - Representing accounts, teams, or organizations.
987
1137
  - Displaying AI/agent identities in conversational interfaces.
988
1138
 
989
1139
  **Behavior**
1140
+
990
1141
  - Choose size based on context density.
991
1142
  - Use overflow patterns for constrained spaces (for example +N with menu).
992
1143
  - Can be informational or interactive based on context.
993
1144
  - Can include status badges/dots.
994
1145
 
995
1146
  **Often used with**
1147
+
996
1148
  - `Badge`, `Tooltip`, `Menu`.
997
1149
 
998
1150
  #### Badge
@@ -1004,14 +1156,17 @@ Avatar visually represents a user, team, or concept and helps recognition in col
1004
1156
  Compact label for status, category, or metadata.
1005
1157
 
1006
1158
  **Use when**
1159
+
1007
1160
  - Surfacing state at a glance (for example active, draft, error).
1008
1161
  - Tagging items without taking primary focus from the page.
1009
1162
 
1010
1163
  **Use something else when**
1164
+
1011
1165
  - The message needs explanation or recovery steps (consider `Alert` or inline text).
1012
1166
  - You need a primary action (use `Button`).
1013
1167
 
1014
1168
  **Often used with**
1169
+
1015
1170
  - `Avatar`, tables and lists, filter chips.
1016
1171
 
1017
1172
  #### Banner
@@ -1023,10 +1178,12 @@ Compact label for status, category, or metadata.
1023
1178
  Persistent or dismissible message scoped at page or section level — stronger than inline helper text, broader than a single-field `Alert` in some layouts.
1024
1179
 
1025
1180
  **Use when**
1181
+
1026
1182
  - Announcing environment or product state (maintenance, trial, feature preview).
1027
1183
  - Page-wide outcomes that should stay visible while the user continues.
1028
1184
 
1029
1185
  **Use something else when**
1186
+
1030
1187
  - Task-specific guidance inside a flow (`Alert`).
1031
1188
  - Brief confirmation after an action (`Sonner Toast`).
1032
1189
 
@@ -1039,26 +1196,31 @@ Persistent or dismissible message scoped at page or section level — stronger t
1039
1196
  Hierarchical navigation aid that shows users their current location within the product's structure. Location-based, not path-based.
1040
1197
 
1041
1198
  **Use when**
1199
+
1042
1200
  - Users need to return to a parent page.
1043
1201
  - Users need clarity on their current position in the product hierarchy.
1044
1202
  - Quick access to ancestor pages is useful.
1045
1203
 
1046
1204
  **Use something else when**
1205
+
1047
1206
  - The page structure is flat — there is no hierarchy to show.
1048
1207
  - Users are switching between same-level content (use `Tabs` or `Segmented Control`).
1049
1208
 
1050
1209
  **Dos and don'ts**
1210
+
1051
1211
  - Do not make the current breadcrumb clickable.
1052
1212
  - Do not pair with a back button.
1053
1213
  - Do not wrap breadcrumb labels to multiple lines; truncate and use `Tooltip` for full text.
1054
1214
  - Show only one breadcrumb trail per page.
1055
1215
 
1056
1216
  **Behavior**
1217
+
1057
1218
  - All links except the current page are interactive (Tab, Shift+Tab, Enter).
1058
1219
  - When space is limited, condense middle items into an overflow menu showing the first and last two links.
1059
1220
  - The active page link always remains visible.
1060
1221
 
1061
1222
  **Often used with**
1223
+
1062
1224
  - `Tooltip` for truncated labels, `Menu` for overflow segments, `Topbar`.
1063
1225
 
1064
1226
  #### Button
@@ -1070,15 +1232,18 @@ Hierarchical navigation aid that shows users their current location within the p
1070
1232
  Primary control for discrete actions.
1071
1233
 
1072
1234
  **Use when**
1235
+
1073
1236
  - Committing, navigating a clear next step, or triggering destructive work (with confirmation pattern).
1074
1237
 
1075
1238
  **Dos and don'ts**
1239
+
1076
1240
  - One primary action per logical section when possible.
1077
1241
  - Match variant to risk: destructive actions use destructive variant and confirmation.
1078
1242
  - Label with verb + object (see Content guidelines in `./DESIGN.md`).
1079
1243
  - Icon-only actions need an accessible name (`aria-label`).
1080
1244
 
1081
1245
  **Often used with**
1246
+
1082
1247
  - `Button Group`, `Dialog`, forms.
1083
1248
 
1084
1249
  #### Button Group
@@ -1089,14 +1254,17 @@ Primary control for discrete actions.
1089
1254
  Visually joins related buttons into a connected row, clarifying that the actions belong to the same context.
1090
1255
 
1091
1256
  **Use when**
1257
+
1092
1258
  - Two or more actions are closely related and operate on the same target (for example, a split-button or segmented action row).
1093
1259
  - Conserving horizontal space compared to individually spaced buttons.
1094
1260
 
1095
1261
  **Use something else when**
1262
+
1096
1263
  - Actions are unrelated and should not appear grouped.
1097
1264
  - You need more than a small set of actions (consider `Toolbar` or `Dropdown Menu`).
1098
1265
 
1099
1266
  **Often used with**
1267
+
1100
1268
  - `Button`, `Tooltip` for icon-only variants.
1101
1269
 
1102
1270
  #### Card
@@ -1108,19 +1276,23 @@ Visually joins related buttons into a connected row, clarifying that the actions
1108
1276
  A structural container with optional header, body, and footer slots for displaying data artifacts, widgets, or media. The Card with Count variant adds a numeric indicator to the header.
1109
1277
 
1110
1278
  **Use when**
1279
+
1111
1280
  - Presenting charts, visualizations, or data widgets.
1112
1281
  - Building grids of comparable items where list/grid view toggling is needed.
1113
1282
  - Displaying media content (images, videos).
1114
1283
 
1115
1284
  **Use something else when**
1285
+
1116
1286
  - You just need visual separation between sections — use `Separator` and spacing instead.
1117
1287
  - You are comparing dense metadata across rows — use `Table` or a data grid instead.
1118
1288
 
1119
1289
  **Dos and don'ts**
1290
+
1120
1291
  - Cards are structural containers only; interactive elements (`Button`, `Checkbox`) go inside the body or actions area.
1121
1292
  - Exception: the entire card can serve as a single focusable target when it acts as a link or selection item.
1122
1293
 
1123
1294
  **Often used with**
1295
+
1124
1296
  - `Button`, `Badge`, `Avatar`, `Separator`, charts, lists, or form fields in the body.
1125
1297
 
1126
1298
  #### Checkbox
@@ -1132,16 +1304,19 @@ A structural container with optional header, body, and footer slots for displayi
1132
1304
  Enables users to independently select one or multiple options. Can appear standalone or within menus, tree views, tables, or cards.
1133
1305
 
1134
1306
  **Use when**
1307
+
1135
1308
  - Multiple independent selections are required (for example, column visibility in a table).
1136
1309
  - Enabling or disabling settings where changes do not take immediate effect.
1137
1310
  - Confirming agreement before an action (for example, delete verification).
1138
1311
 
1139
1312
  **Use something else when**
1313
+
1140
1314
  - Only one option can be selected at a time (use `Radio`).
1141
1315
  - Options are not displayed simultaneously (use `Select`).
1142
1316
  - You need an immediate on/off toggle (use `Switch`).
1143
1317
 
1144
1318
  **Dos and don'ts**
1319
+
1145
1320
  - Do provide a label for every checkbox.
1146
1321
  - Do implement indeterminate states for partial group selection.
1147
1322
  - Do not pre-select checkboxes automatically.
@@ -1149,11 +1324,13 @@ Enables users to independently select one or multiple options. Can appear standa
1149
1324
  - Do not use card variants for long option lists.
1150
1325
 
1151
1326
  **Behavior**
1327
+
1152
1328
  - Space key toggles focused checkboxes.
1153
1329
  - Indeterminate state is set programmatically, not by user interaction.
1154
1330
  - Parent-child relationships follow selection cascading rules.
1155
1331
 
1156
1332
  **Often used with**
1333
+
1157
1334
  - `Label`, helper text for groups, `Card` variant for options needing descriptions.
1158
1335
 
1159
1336
  #### Collapsible
@@ -1165,25 +1342,30 @@ Enables users to independently select one or multiple options. Can appear standa
1165
1342
  A single inline expandable block that toggles content visibility. Designed for one independent optional section, not multiple stacked areas.
1166
1343
 
1167
1344
  **Use when**
1345
+
1168
1346
  - Showing one optional or secondary block of content (for example, AI reasoning, advanced settings, a preview).
1169
1347
  - Content is useful but not essential to the primary task.
1170
1348
 
1171
1349
  **Use something else when**
1350
+
1172
1351
  - You have multiple expandable sections (use `Accordion`).
1173
1352
  - Content is essential — show it by default.
1174
1353
  - Users are navigating or filtering (use `Tabs` or filter controls).
1175
1354
 
1176
1355
  **Dos and don'ts**
1356
+
1177
1357
  - Do default to collapsed unless the collapsible content is the main purpose of the view.
1178
1358
  - Do keep the trigger label descriptive — it should communicate what's inside.
1179
1359
  - Do not nest collapsibles; use `Accordion` for layered disclosure.
1180
1360
  - Do not hide errors or required information.
1181
1361
 
1182
1362
  **Behavior**
1363
+
1183
1364
  - One trigger controls one associated region with optional animation.
1184
1365
  - State changes must be exposed to assistive technology.
1185
1366
 
1186
1367
  **Often used with**
1368
+
1187
1369
  - `Separator` when stacking multiple collapsible regions on a page.
1188
1370
 
1189
1371
  #### Combobox
@@ -1195,27 +1377,32 @@ A single inline expandable block that toggles content visibility. Designed for o
1195
1377
  A searchable select input that filters options as users type. Supports single and multi-select modes with optional ability to add new items.
1196
1378
 
1197
1379
  **Use when**
1380
+
1198
1381
  - More than approximately 12 options where search efficiency beats scrolling.
1199
1382
  - Users have a general sense of what they're looking for (country, asset name, tag).
1200
1383
  - Users need to add new options not in the predefined list.
1201
1384
 
1202
1385
  **Use something else when**
1386
+
1203
1387
  - Fewer than ~12 options: prefer `Select`, `Radio`, or `Checkbox`.
1204
1388
  - Users are unfamiliar with available options and need a visible list.
1205
1389
  - Very large datasets risk performance lag: use a data grid with filtering.
1206
1390
  - Pure text entry without selection (use `Input` or `Textarea`).
1207
1391
 
1208
1392
  **Dos and don'ts**
1393
+
1209
1394
  - Do group related options into categories.
1210
1395
  - Do position checkmarks right-aligned in menus.
1211
1396
  - Do not use for simple binary choices or small option sets.
1212
1397
  - Do not place icons or badges on the left side of menu items.
1213
1398
 
1214
1399
  **Behavior**
1400
+
1215
1401
  - Single-select closes immediately on selection.
1216
1402
  - Multi-select stays open until the user clicks outside, presses Escape, or Enter.
1217
1403
 
1218
1404
  **Often used with**
1405
+
1219
1406
  - `Label`, helper text, `Badge`.
1220
1407
 
1221
1408
  #### Command
@@ -1227,16 +1414,19 @@ A searchable select input that filters options as users type. Supports single an
1227
1414
  A keyboard-first search interface for discovering and executing actions, navigating pages, or looking up content application-wide. Typically activated via ⌘K / Ctrl+K and displayed inside a `Dialog` or `Popover`.
1228
1415
 
1229
1416
  **Use when**
1417
+
1230
1418
  - Enabling keyboard-driven workflows across an entire application.
1231
1419
  - Providing power-user shortcuts to actions and destinations.
1232
1420
  - The application has too many actions or pages to surface in a standard nav.
1233
1421
 
1234
1422
  **Use something else when**
1423
+
1235
1424
  - Filtering a specific list or dataset (use `Search`).
1236
1425
  - Selecting from known form options (use `Combobox` or `Select`).
1237
1426
  - Navigating between a small number of pages (use `Tabs` or nav links).
1238
1427
 
1239
1428
  **Dos and don'ts**
1429
+
1240
1430
  - Do organize results into logical categories.
1241
1431
  - Do use action-oriented labels ("Create asset," "Switch to dark mode").
1242
1432
  - Do display the keyboard shortcut on triggering elements.
@@ -1245,10 +1435,12 @@ A keyboard-first search interface for discovering and executing actions, navigat
1245
1435
  - Do require confirmation steps for destructive actions.
1246
1436
 
1247
1437
  **Behavior**
1438
+
1248
1439
  - Keyboard-first interface presenting categorized, scannable action lists.
1249
1440
  - Shows loading indicators for async results and meaningful empty states.
1250
1441
 
1251
1442
  **Often used with**
1443
+
1252
1444
  - `Dialog`, `Popover`, `Search`, `Empty State`.
1253
1445
 
1254
1446
  #### Count
@@ -1259,13 +1451,16 @@ A keyboard-first search interface for discovering and executing actions, navigat
1259
1451
  A compact numeric indicator used to surface quantities inline — for example, unread messages, selected items, or totals attached to labels or tabs.
1260
1452
 
1261
1453
  **Use when**
1454
+
1262
1455
  - Showing a quantity associated with a label, tab, or list item.
1263
1456
  - Surfacing unread counts or selection totals without taking primary focus.
1264
1457
 
1265
1458
  **Use something else when**
1459
+
1266
1460
  - The value represents status or category rather than a quantity (use `Badge`).
1267
1461
 
1268
1462
  **Often used with**
1463
+
1269
1464
  - `Tabs`, `Badge`, `Label`, list items.
1270
1465
 
1271
1466
  #### Date Picker
@@ -1277,20 +1472,24 @@ A compact numeric indicator used to surface quantities inline — for example, u
1277
1472
  Allows users to select a single date through a calendar interface, ensuring proper formatting and avoiding input errors.
1278
1473
 
1279
1474
  **Use when**
1475
+
1280
1476
  - Users need to select an exact date.
1281
1477
  - Preventing manual date-formatting errors is important.
1282
1478
 
1283
1479
  **Use something else when**
1480
+
1284
1481
  - Relative dates are more appropriate ("Last week") — add shortcut options instead.
1285
1482
  - The date is fixed or recurring (consider a cron expression or plain `Input`).
1286
1483
  - Exact timing is not critical (use basic `Input`).
1287
1484
 
1288
1485
  **Behavior**
1486
+
1289
1487
  - Opens a calendar anchored to the input field.
1290
1488
  - Keyboard users can type valid values directly without using the picker.
1291
1489
  - Values commit in the configured locale format.
1292
1490
 
1293
1491
  **Often used with**
1492
+
1294
1493
  - `Label`, helper text, `Date Range Picker`.
1295
1494
 
1296
1495
  #### Date Range Picker
@@ -1302,18 +1501,22 @@ Allows users to select a single date through a calendar interface, ensuring prop
1302
1501
  Allows users to select a start and end date from a calendar interface. Used for filtering by date ranges, comparing periods, or scheduling.
1303
1502
 
1304
1503
  **Use when**
1504
+
1305
1505
  - Users need to specify a date range for filtering or reporting.
1306
1506
  - Comparing data across a period.
1307
1507
 
1308
1508
  **Use something else when**
1509
+
1309
1510
  - Only a single date is needed (use `Date Picker`).
1310
1511
  - Relative ranges like "Last 7 days" cover most use cases — add shortcut options.
1311
1512
 
1312
1513
  **Behavior**
1514
+
1313
1515
  - Enforces start/end ordering with validation messages.
1314
1516
  - Keyboard users can type valid values directly.
1315
1517
 
1316
1518
  **Often used with**
1519
+
1317
1520
  - `Label`, helper text, `Date Picker`.
1318
1521
 
1319
1522
  #### Date Time Range Picker
@@ -1325,17 +1528,21 @@ Allows users to select a start and end date from a calendar interface. Used for
1325
1528
  Allows users to select start and end date and time values. Used when precise time boundaries matter, for example scheduling or time-series filtering.
1326
1529
 
1327
1530
  **Use when**
1531
+
1328
1532
  - Users must specify both a date and time for a range (scheduling, time-series queries).
1329
1533
 
1330
1534
  **Use something else when**
1535
+
1331
1536
  - Time precision is not required (use `Date Range Picker`).
1332
1537
  - Only a single point in time is needed (use `Date Picker` or `Time Picker`).
1333
1538
 
1334
1539
  **Behavior**
1540
+
1335
1541
  - Enforces start/end ordering; validates that end is after start.
1336
1542
  - Keyboard users can type valid values directly.
1337
1543
 
1338
1544
  **Often used with**
1545
+
1339
1546
  - `Label`, helper text, `Date Range Picker`.
1340
1547
 
1341
1548
  #### Dialog
@@ -1347,14 +1554,17 @@ Allows users to select start and end date and time values. Used when precise tim
1347
1554
  Richer content surface: forms, multi-field flows, or explanations that do not fit a strip or inline pattern.
1348
1555
 
1349
1556
  **Use when**
1557
+
1350
1558
  - Collecting input or showing structured content that needs focus without leaving the page.
1351
1559
 
1352
1560
  **Use something else when**
1561
+
1353
1562
  - Inline persistence is enough (`Alert`).
1354
1563
  - Only a quick acknowledgement is needed (`Sonner Toast`).
1355
1564
  - The action is binary and destructive (use `Alert Dialog`).
1356
1565
 
1357
1566
  **Often used with**
1567
+
1358
1568
  - `Button`, `Form`, `Alert Dialog` for confirmation steps.
1359
1569
 
1360
1570
  #### Drawer
@@ -1365,9 +1575,11 @@ Richer content surface: forms, multi-field flows, or explanations that do not fi
1365
1575
  Secondary surface that slides in for filters, detail, or medium-length tasks without a full page change.
1366
1576
 
1367
1577
  **Use when**
1578
+
1368
1579
  - Supporting the main view (filters, record details, auxiliary forms).
1369
1580
 
1370
1581
  **Use something else when**
1582
+
1371
1583
  - The task needs full attention or multi-step wizard treatment (full page or `Dialog`).
1372
1584
  - Content is very short (consider `Popover` or inline).
1373
1585
 
@@ -1379,20 +1591,24 @@ Secondary surface that slides in for filters, detail, or medium-length tasks wit
1379
1591
  A button-triggered overlay listing a set of related actions or options. One of the two menu variants (the other being a context menu, which is right-click triggered). See also: `Menu`.
1380
1592
 
1381
1593
  **Use when**
1594
+
1382
1595
  - A button needs to reveal secondary or overflow actions without persistent UI.
1383
1596
  - Grouping related actions behind a single trigger to reduce visual clutter.
1384
1597
 
1385
1598
  **Use something else when**
1599
+
1386
1600
  - Options require complex selection or rich descriptions (use `Select Panel`).
1387
1601
  - Actions need user confirmation (use `Dialog` or `Alert Dialog`).
1388
1602
  - The action set is always visible and primary (use `Toolbar`).
1389
1603
 
1390
1604
  **Behavior**
1605
+
1391
1606
  - Closes after selection by default.
1392
1607
  - Positions above, below, or beside the trigger depending on viewport space.
1393
1608
  - Submenus open on hover.
1394
1609
 
1395
1610
  **Often used with**
1611
+
1396
1612
  - `Button`, `Separator`, `Badge`, checkbox toggles.
1397
1613
 
1398
1614
  #### Empty State
@@ -1404,9 +1620,11 @@ A button-triggered overlay listing a set of related actions or options. One of t
1404
1620
  Placeholder when there is no data yet or results are empty.
1405
1621
 
1406
1622
  **Use when**
1623
+
1407
1624
  - Lists, tables, charts, or artifacts have zero rows/points.
1408
1625
 
1409
1626
  **Dos and don'ts**
1627
+
1410
1628
  - Explain what will appear and how to get started.
1411
1629
  - Include a single clear CTA when creation/import applies.
1412
1630
 
@@ -1418,15 +1636,18 @@ Placeholder when there is no data yet or results are empty.
1418
1636
  A structural wrapper for form fields that manages layout, spacing, validation state propagation, and submission handling.
1419
1637
 
1420
1638
  **Use when**
1639
+
1421
1640
  - Collecting structured user input across one or more fields.
1422
1641
  - Grouping related fields with shared validation and submission logic.
1423
1642
 
1424
1643
  **Dos and don'ts**
1644
+
1425
1645
  - Do group semantically related fields together.
1426
1646
  - Do associate every field with a `Label`.
1427
1647
  - Do not use `Form` as a generic container when no submission or validation is needed.
1428
1648
 
1429
1649
  **Often used with**
1650
+
1430
1651
  - `Input`, `Select`, `Combobox`, `Checkbox`, `Radio`, `Label`, `Button` (submit), `Dialog`.
1431
1652
 
1432
1653
  #### Input
@@ -1438,28 +1659,72 @@ A structural wrapper for form fields that manages layout, spacing, validation st
1438
1659
  Single-line text field for capturing short text-based information in forms and toolbars.
1439
1660
 
1440
1661
  **Use when**
1662
+
1441
1663
  - Collecting specific text data (names, credentials, asset identifiers).
1442
1664
  - A form field requires free text that doesn't fit a structured picker.
1443
1665
 
1444
1666
  **Use something else when**
1667
+
1445
1668
  - Selecting from predefined options (use `Select`, `Combobox`, `Checkbox`, or `Radio`).
1446
1669
  - Suggestions as the user types are needed (use `Combobox`).
1447
1670
  - Selecting dates or times (use `Date Picker` / `Time Picker`).
1448
1671
  - Multi-line text is expected (use `Textarea`).
1449
1672
 
1450
1673
  **Dos and don'ts**
1674
+
1451
1675
  - Do not use long placeholder text that duplicates the label.
1452
1676
  - Do not mimic pre-filled content with placeholder text.
1453
1677
  - Do not wrap text in an input; truncate or switch to `Textarea`.
1454
1678
 
1455
1679
  **Behavior**
1680
+
1456
1681
  - Single-line only; updates as the user types.
1457
1682
  - Validation messages associate with the field for accessibility.
1458
1683
  - Supports leading (icon, prefix) and trailing (button, suffix, stepper) slots.
1459
1684
 
1460
1685
  **Often used with**
1686
+
1461
1687
  - `Label`, helper text, `Button`, `Tooltip`.
1462
1688
 
1689
+ #### Item
1690
+
1691
+ **Storybook-slug:** item
1692
+ **Docs-slug:** item
1693
+
1694
+ **Definition**
1695
+ A flexible list-row primitive for displaying a title, optional description, leading media, and trailing actions. Composes into groups for lists, trees, cards, and popovers.
1696
+
1697
+ **Use when**
1698
+
1699
+ - Building selectable or navigable rows in lists and tree views.
1700
+ - Showing a compact row with icon or avatar, title, and optional description.
1701
+ - Revealing row actions on hover or keyboard focus.
1702
+
1703
+ **Use something else when**
1704
+
1705
+ - Selecting from predefined options in a dropdown (use `Select` or `Dropdown Menu`).
1706
+ - Displaying form inputs inline (use `Field` patterns with `Checkbox`, `Radio`, or `Switch`).
1707
+ - Presenting dense tabular data across many columns (use `Table` or `DataGrid`).
1708
+
1709
+ **Dos and don'ts**
1710
+
1711
+ - Compose rows with `ItemGroup`, `Item`, `ItemMedia`, `ItemContent`, `ItemTitle`, and `ItemDescription`.
1712
+ - Use `ItemActions` for hover-revealed icon buttons.
1713
+ - Place `ItemSectionHeader` as a sibling of `ItemGroup`, not inside it — `ItemGroup` renders a `<ul>`, which only accepts `<li>` children.
1714
+ - Do not use `Item` as a generic card container (use `Card`).
1715
+
1716
+ **Behavior**
1717
+
1718
+ - `ItemGroup` renders a `<ul>` and `Item` a `<li>`; place interactive elements (links, buttons) inside the row rather than replacing it.
1719
+ - Hover and keyboard focus-within apply `accent-background` unless the row is disabled; selected rows use the stronger `secondary-background`.
1720
+ - Disabled rows use `base-foreground-disabled` without opacity reduction. `disabled` is presentational — disable interactive children (buttons, links, checkboxes) yourself when the row is unavailable.
1721
+ - Row actions appear on hover and when the row receives keyboard focus.
1722
+ - Set `Avatar` `sizes` on the `Avatar` itself; `Item` and `ItemMedia` do not size media from description presence.
1723
+
1724
+ **Often used with**
1725
+
1726
+ - `Button`, `Avatar`, `Checkbox`, `Separator`, `List`, `Tree`.
1727
+
1463
1728
  #### Label
1464
1729
 
1465
1730
  **Storybook-slug:** label
@@ -1469,20 +1734,24 @@ Single-line text field for capturing short text-based information in forms and t
1469
1734
  A form label that identifies and is programmatically associated with an input field. Not intended as general-purpose text.
1470
1735
 
1471
1736
  **Use when**
1737
+
1472
1738
  - Every `Input`, `Select`, `Combobox`, `Textarea`, `Checkbox` group, `Radio` group, `Switch`, `Slider`, or `Date Picker` needs one.
1473
1739
 
1474
1740
  **Use something else when**
1741
+
1475
1742
  - You need a heading or section title (use appropriate heading levels).
1476
1743
  - You need descriptive text below a field (use helper text).
1477
1744
  - You are labeling a non-interactive element like a status indicator (use plain text or `Badge`).
1478
1745
 
1479
1746
  **Dos and don'ts**
1747
+
1480
1748
  - Do associate labels with fields via `htmlFor`/`id` for accessibility.
1481
1749
  - Do mark required fields consistently (asterisk or explicit text).
1482
1750
  - Do not replace labels with placeholder text — placeholders disappear and are inaccessible.
1483
1751
  - Do not hide labels for visual cleanliness; use `Tooltip` to supplement shortened labels.
1484
1752
 
1485
1753
  **Often used with**
1754
+
1486
1755
  - `Input`, `Select`, `Combobox`, `Checkbox`, `Radio`, `Switch`, `Slider`, `Textarea`, `Date Picker`.
1487
1756
 
1488
1757
  #### Menu
@@ -1494,24 +1763,29 @@ A form label that identifies and is programmatically associated with an input fi
1494
1763
  Presents a list of actions, options, or states for the current selection or context. Two variants: context menu (right-click/long-press trigger) and dropdown menu (button trigger). See also: `Dropdown Menu`.
1495
1764
 
1496
1765
  **Use when**
1766
+
1497
1767
  - Offering action choices from a button, select, or combobox when space is constrained.
1498
1768
  - Exposing contextual actions via right-click without dedicated trigger UI.
1499
1769
 
1500
1770
  **Use something else when**
1771
+
1501
1772
  - Options require reordering or rich descriptions (use `Select Panel`).
1502
1773
  - Actions need user confirmation before executing (use `Dialog`, `Alert Dialog`, or `Popover`).
1503
1774
 
1504
1775
  **Dos and don'ts**
1776
+
1505
1777
  - Do keep items left-aligned and styled consistently within sections.
1506
1778
  - Do separate actions into labeled sections using `Separator`.
1507
1779
  - Do not mix items with and without leading content (icons/toggles) in the same section.
1508
1780
 
1509
1781
  **Behavior**
1782
+
1510
1783
  - Closes after selection unless multi-select is enabled.
1511
1784
  - Positions above, below, left, or right of the trigger with a 4px gap, adapting to viewport space.
1512
1785
  - Submenus open on hover.
1513
1786
 
1514
1787
  **Often used with**
1788
+
1515
1789
  - `Button`, `Select`, `Combobox`, `Separator`, `Badge`, checkbox toggles.
1516
1790
 
1517
1791
  #### Pagination
@@ -1523,28 +1797,33 @@ Presents a list of actions, options, or states for the current selection or cont
1523
1797
  Divides large datasets into pages, giving users control over navigation and improving load performance.
1524
1798
 
1525
1799
  **Use when**
1800
+
1526
1801
  - Datasets are large (tables, search results, galleries).
1527
1802
  - Performance concerns rule out infinite scroll.
1528
1803
  - Users need to bookmark or return to a specific page position.
1529
1804
 
1530
1805
  **Use something else when**
1806
+
1531
1807
  - The context is a discovery feed (use infinite scroll or "Load more").
1532
1808
  - Users are completing a sequential task (use a wizard/stepper).
1533
1809
  - You need to switch between unrelated modes (use `Segmented Control` or `Tabs`).
1534
1810
 
1535
1811
  **Dos and don'ts**
1812
+
1536
1813
  - Do place pagination below content, left-aligned.
1537
1814
  - Do provide "Next" and "Previous" buttons, disabled when irrelevant.
1538
1815
  - Do include "Results per page" options for large datasets.
1539
1816
  - Do not use pagination when fewer than ~20 items per page exist.
1540
1817
 
1541
1818
  **Behavior**
1819
+
1542
1820
  - Each page should have its own shareable URL.
1543
1821
  - Content loads without full page reloads; use loaders and skeletons while data fetches.
1544
1822
  - Teleport variant allows direct page number entry.
1545
1823
  - Filters, searches, and selections persist across pages.
1546
1824
 
1547
1825
  **Often used with**
1826
+
1548
1827
  - `Table`, data grids, `Search`, `Skeleton`.
1549
1828
 
1550
1829
  #### Popover
@@ -1556,13 +1835,16 @@ Divides large datasets into pages, giving users control over navigation and impr
1556
1835
  A click-triggered panel for interactive or structured supplemental content. Stays open until dismissed.
1557
1836
 
1558
1837
  **Use when**
1838
+
1559
1839
  - User needs to pick options, fill short fields, or read formatted content on demand without leaving the page.
1560
1840
 
1561
1841
  **Use something else when**
1842
+
1562
1843
  - Content is essential to the task — surface it inline or in `Dialog` / `Drawer`.
1563
1844
  - A brief, non-interactive hint is needed (use `Tooltip`).
1564
1845
 
1565
1846
  **Often used with**
1847
+
1566
1848
  - `Button` or icon as trigger, `Command`, form controls inside the panel.
1567
1849
 
1568
1850
  #### Radio
@@ -1574,23 +1856,28 @@ A click-triggered panel for interactive or structured supplemental content. Stay
1574
1856
  Allows users to select exactly one option from a small set of mutually exclusive choices.
1575
1857
 
1576
1858
  **Use when**
1859
+
1577
1860
  - Single selection from a small, visible set of predefined options.
1578
1861
  - All options should be visible side by side for comparison.
1579
1862
 
1580
1863
  **Use something else when**
1864
+
1581
1865
  - Multiple selections are needed (use `Checkbox`).
1582
1866
  - There are more than ~5 options or space is limited (use `Select` or `Combobox`).
1583
1867
  - The choice is binary and takes immediate effect (use `Switch`).
1584
1868
 
1585
1869
  **Dos and don'ts**
1870
+
1586
1871
  - Do pair each radio with a descriptive label.
1587
1872
  - Do not group unrelated options.
1588
1873
  - Do not exceed 5 options.
1589
1874
 
1590
1875
  **Behavior**
1876
+
1591
1877
  - Clicking or pressing Space selects the focused option and deselects others in the group.
1592
1878
 
1593
1879
  **Often used with**
1880
+
1594
1881
  - `Label`, helper text, `Card` variant for options needing supporting descriptions.
1595
1882
 
1596
1883
  #### Search
@@ -1602,16 +1889,19 @@ Allows users to select exactly one option from a small set of mutually exclusive
1602
1889
  A specialized input for locating and filtering content, with built-in search and clear affordances.
1603
1890
 
1604
1891
  **Use when**
1892
+
1605
1893
  - Lists, tables, or datasets need quick item location.
1606
1894
  - Content-heavy pages where scrolling is impractical.
1607
1895
  - Application-wide search (in conjunction with `Command`).
1608
1896
 
1609
1897
  **Use something else when**
1898
+
1610
1899
  - Selecting from predefined options (use `Combobox` or `Select`).
1611
1900
  - Multi-attribute filtering requires dedicated filter controls.
1612
1901
  - General text input unrelated to content discovery (use `Input`).
1613
1902
 
1614
1903
  **Dos and don'ts**
1904
+
1615
1905
  - Do make it clear whether search covers the current list, the page, or the whole app.
1616
1906
  - Do display a no-results state when queries return nothing.
1617
1907
  - Do debounce live search to avoid excessive requests.
@@ -1619,6 +1909,7 @@ A specialized input for locating and filtering content, with built-in search and
1619
1909
  - Do not leave empty results without explanation.
1620
1910
 
1621
1911
  **Often used with**
1912
+
1622
1913
  - `Table`, data grids, `Command`, adjacent filter controls (`Select`, `Combobox`).
1623
1914
 
1624
1915
  #### Segmented Control
@@ -1630,13 +1921,16 @@ A specialized input for locating and filtering content, with built-in search and
1630
1921
  Switches between a small number of peer views or modes on the same page.
1631
1922
 
1632
1923
  **Use when**
1924
+
1633
1925
  - Two to several comparable sections (for example overview vs details vs activity).
1634
1926
 
1635
1927
  **Use something else when**
1928
+
1636
1929
  - Content is hierarchical or lengthy and users must open multiple sections at once (consider `Accordion` or visible sections).
1637
1930
  - Navigating separate routes (tabs/sidebar patterns — see `building-pages.md`).
1638
1931
 
1639
1932
  **Relationship to Accordion**
1933
+
1640
1934
  - Segmented control swaps visibility of peer panels; accordion stacks expandable sections. Prefer segmented control when users switch modes frequently; accordion when progressive disclosure matters.
1641
1935
 
1642
1936
  #### Select
@@ -1648,11 +1942,13 @@ Switches between a small number of peer views or modes on the same page.
1648
1942
  Enables users to choose one or more predefined options from a dropdown list. Used in forms and filtering when space is constrained.
1649
1943
 
1650
1944
  **Use when**
1945
+
1651
1946
  - Multiple predefined options exist and space prevents showing them all at once.
1652
1947
  - Options are familiar and don't require explanation.
1653
1948
  - A single or multi-select form input is needed.
1654
1949
 
1655
1950
  **Use something else when**
1951
+
1656
1952
  - 12+ options or search is needed (use `Combobox`).
1657
1953
  - Few options or a binary choice (use `Checkbox`, `Radio`, or `Switch`).
1658
1954
  - User-created values are needed (use `Combobox`).
@@ -1660,15 +1956,18 @@ Enables users to choose one or more predefined options from a dropdown list. Use
1660
1956
  - Selection triggers immediate mode-switch (use `Segmented Control` or `Tabs`).
1661
1957
 
1662
1958
  **Dos and don'ts**
1959
+
1663
1960
  - Do provide a clear label and placeholder.
1664
1961
  - Do use helper text when clarification is needed.
1665
1962
  - Exercise caution with default selections — users may overlook them.
1666
1963
 
1667
1964
  **Behavior**
1965
+
1668
1966
  - Single-select closes after selection; multi-select may remain open.
1669
1967
  - Checkmarks appear right-aligned in the list.
1670
1968
 
1671
1969
  **Often used with**
1970
+
1672
1971
  - `Label`, helper text, `Button`.
1673
1972
 
1674
1973
  #### Separator
@@ -1680,20 +1979,24 @@ Enables users to choose one or more predefined options from a dropdown list. Use
1680
1979
  A 1px visual divider between distinct content sections. Improves readability while remaining visually subtle.
1681
1980
 
1682
1981
  **Use when**
1982
+
1683
1983
  - Creating visual relief between related groups of content.
1684
1984
  - Dividing sections within toolbars, menus, cards, or forms.
1685
1985
 
1686
1986
  **Use something else when**
1987
+
1687
1988
  - The layout is sparse — whitespace alone is sufficient.
1688
1989
  - Sections need semantic grouping (use headings, `Card`, or background regions instead).
1689
1990
 
1690
1991
  **Dos and don'ts**
1992
+
1691
1993
  - Do use 16px vertical separators for button or horizontal form element separation.
1692
1994
  - Do not place separators between every element.
1693
1995
  - Do not use bold or colorful separators — keep them subtle.
1694
1996
  - Do not replace semantic headings or landmarks with separators.
1695
1997
 
1696
1998
  **Often used with**
1999
+
1697
2000
  - `Toolbar`, `Card` headers/footers, `Accordion`, menus, dense form sections.
1698
2001
 
1699
2002
  #### Skeleton
@@ -1704,18 +2007,22 @@ A 1px visual divider between distinct content sections. Improves readability whi
1704
2007
  A loading placeholder that mimics the shape of incoming content, reducing perceived wait time and preventing layout shift.
1705
2008
 
1706
2009
  **Use when**
2010
+
1707
2011
  - Content is loading and the shape of the result is predictable (cards, lists, table rows).
1708
2012
  - Reducing layout shift while data fetches in the background.
1709
2013
 
1710
2014
  **Use something else when**
2015
+
1711
2016
  - The loading duration is very short (<300ms) — no loader is needed.
1712
2017
  - The content shape is unpredictable (use a spinner or progress indicator).
1713
2018
 
1714
2019
  **Dos and don'ts**
2020
+
1715
2021
  - Do match skeleton shapes to the actual content layout.
1716
2022
  - Do not animate excessively — subtle pulse is sufficient.
1717
2023
 
1718
2024
  **Often used with**
2025
+
1719
2026
  - `Card`, `Table`, `Pagination`, lists.
1720
2027
 
1721
2028
  #### Slider
@@ -1727,19 +2034,23 @@ A loading placeholder that mimics the shape of incoming content, reducing percei
1727
2034
  An interactive control for selecting a single value or a range from a continuous scale. Provides visual feedback and quick approximate value selection.
1728
2035
 
1729
2036
  **Use when**
2037
+
1730
2038
  - Adjusting continuous values where precision is less important than visual feedback (volume, brightness, pricing filter).
1731
2039
  - Providing immediate visual feedback (media scrubbing, live previews).
1732
2040
  - Selecting a minimum and maximum range.
1733
2041
 
1734
2042
  **Use something else when**
2043
+
1735
2044
  - Precise numeric entry is required (use `Input` or `Select`).
1736
2045
  - The choice is categorical, not continuous (use `Radio` or `Select`).
1737
2046
 
1738
2047
  **Behavior**
2048
+
1739
2049
  - Supports immediate feedback (changes apply as the user drags) and deferred feedback (changes apply on submit).
1740
2050
  - Use deferred feedback when slider adjustments trigger screen reloads or visual disruptions; pair with helper text explaining that the user must submit to apply.
1741
2051
 
1742
2052
  **Often used with**
2053
+
1743
2054
  - `Label`, helper text, optional adjacent `Input` for precise numeric entry.
1744
2055
 
1745
2056
  #### Sonner Toast
@@ -1751,10 +2062,12 @@ An interactive control for selecting a single value or a range from a continuous
1751
2062
  Lightweight, auto-dismiss feedback for outcomes that do not need a blocking surface.
1752
2063
 
1753
2064
  **Use when**
2065
+
1754
2066
  - Confirming save, delete, or background completion.
1755
2067
  - Non-critical notices the user can miss without breaking a workflow.
1756
2068
 
1757
2069
  **Use something else when**
2070
+
1758
2071
  - User must read and act before continuing (`Alert Dialog`, `Dialog`, or persistent `Alert` / `Banner`).
1759
2072
 
1760
2073
  #### Switch
@@ -1766,22 +2079,27 @@ Lightweight, auto-dismiss feedback for outcomes that do not need a blocking surf
1766
2079
  A binary toggle control that turns a setting on or off, with changes taking effect immediately.
1767
2080
 
1768
2081
  **Use when**
2082
+
1769
2083
  - Toggling a setting that takes immediate effect (for example, dark mode, notifications).
1770
2084
 
1771
2085
  **Use something else when**
2086
+
1772
2087
  - The change is form-dependent and deferred (use `Checkbox` or `Button`).
1773
2088
  - The action is one-time or destructive (use `Button`).
1774
2089
  - Multiple related toggles need grouping (use `Toggle Group`, `Checkbox`, or `Select`).
1775
2090
 
1776
2091
  **Dos and don'ts**
2092
+
1777
2093
  - Do apply a clear, descriptive label explaining the switch's function.
1778
2094
  - Do not embed switches inside `Menu` components — use menu checkmarks instead.
1779
2095
  - Do not use for destructive actions.
1780
2096
 
1781
2097
  **Behavior**
2098
+
1782
2099
  - Responds instantly to user interaction without requiring separate form submission.
1783
2100
 
1784
2101
  **Often used with**
2102
+
1785
2103
  - `Label`, helper text.
1786
2104
 
1787
2105
  #### Table
@@ -1792,13 +2110,16 @@ A binary toggle control that turns a setting on or off, with changes taking effe
1792
2110
  Dense, scannable display of rows and columns with optional selection and actions.
1793
2111
 
1794
2112
  **Use when**
2113
+
1795
2114
  - Comparing rows, scanning many attributes, or operating on multiple items.
1796
2115
 
1797
2116
  **Use something else when**
2117
+
1798
2118
  - A simple fixed list of links or single-column items (`List`).
1799
2119
  - A primary chart or narrative view (`Card`, charts — see Storybook).
1800
2120
 
1801
2121
  **Often used with**
2122
+
1802
2123
  - Selection + `Action Toolbar` (when selection-gated actions apply), `Pagination`, `Empty State`, row `Checkbox`, `Dropdown Menu` for row actions.
1803
2124
 
1804
2125
  #### Tabs
@@ -1810,16 +2131,19 @@ Dense, scannable display of rows and columns with optional selection and actions
1810
2131
  Organizes related content into switchable sections, allowing users to navigate between different views without leaving the page.
1811
2132
 
1812
2133
  **Use when**
2134
+
1813
2135
  - Organizing content into sections users switch between frequently.
1814
2136
  - Displaying related, mutually exclusive content.
1815
2137
  - Navigation within pages, dashboards, settings, or data views.
1816
2138
 
1817
2139
  **Use something else when**
2140
+
1818
2141
  - Filtering a list or dataset (use `Segmented Control`, `Button`, or `Menu`).
1819
2142
  - Multiple sections must be visible simultaneously (use `Accordion` or filters).
1820
2143
  - The choice is a binary toggle (use `Switch`).
1821
2144
 
1822
2145
  **Dos and don'ts**
2146
+
1823
2147
  - Do use a minimum of two tabs.
1824
2148
  - Do keep content above tabs stable across all tab states.
1825
2149
  - Do use leading icons consistently across all tabs or not at all.
@@ -1827,11 +2151,13 @@ Organizes related content into switchable sections, allowing users to navigate b
1827
2151
  - Do not apply to binary options.
1828
2152
 
1829
2153
  **Behavior**
2154
+
1830
2155
  - Exactly one tab panel is visible at a time.
1831
2156
  - Tab buttons manage selection state and keyboard focus.
1832
2157
  - Supports default, vertical, and full-width alignment options.
1833
2158
 
1834
2159
  **Often used with**
2160
+
1835
2161
  - `Table`, `Form`, `Card`, `Empty State`. Keep global page actions outside tab panels.
1836
2162
 
1837
2163
  #### Textarea
@@ -1843,25 +2169,30 @@ Organizes related content into switchable sections, allowing users to navigate b
1843
2169
  A multi-line text field for extended free-form input such as comments, feedback, messages, descriptions, or notes.
1844
2170
 
1845
2171
  **Use when**
2172
+
1846
2173
  - Multi-line text is expected (comments, notes, bios, explanations).
1847
2174
  - Editing large chunks of existing text.
1848
2175
 
1849
2176
  **Use something else when**
2177
+
1850
2178
  - A single line of text is all that is needed (use `Input`).
1851
2179
  - Structured data is expected (use masked `Input`, `Date Picker`, `Select`, or `Combobox`).
1852
2180
  - Rich formatting is needed (use a rich-text editor).
1853
2181
 
1854
2182
  **Dos and don'ts**
2183
+
1855
2184
  - Do use concise labels and placeholder text.
1856
2185
  - Do allow scroll when content exceeds the maximum height.
1857
2186
  - Do not set a small fixed height for expected lengthy input.
1858
2187
  - Do not pre-fill with default text users might overlook.
1859
2188
 
1860
2189
  **Behavior**
2190
+
1861
2191
  - Supports optional user resizing via a drag handle.
1862
2192
  - Restrict resizing when layout integrity is critical (forms in modals or sidebars) or when the textarea auto-expands programmatically.
1863
2193
 
1864
2194
  **Often used with**
2195
+
1865
2196
  - `Label`, helper text (optionally with character count).
1866
2197
 
1867
2198
  #### Time Picker
@@ -1873,18 +2204,22 @@ A multi-line text field for extended free-form input such as comments, feedback,
1873
2204
  Allows users to select a time value through a clock interface.
1874
2205
 
1875
2206
  **Use when**
2207
+
1876
2208
  - Users need to select a precise time without a date.
1877
2209
  - Scheduling tasks, alarms, or time-of-day settings.
1878
2210
 
1879
2211
  **Use something else when**
2212
+
1880
2213
  - Both date and time are required (use `Date Picker` or `Date Time Range Picker`).
1881
2214
  - Exact timing is not important (use basic `Input`).
1882
2215
 
1883
2216
  **Behavior**
2217
+
1884
2218
  - Keyboard users can type valid values directly.
1885
2219
  - Values commit in the configured locale format.
1886
2220
 
1887
2221
  **Often used with**
2222
+
1888
2223
  - `Label`, helper text, `Date Picker`.
1889
2224
 
1890
2225
  #### Toggle
@@ -1895,14 +2230,17 @@ Allows users to select a time value through a clock interface.
1895
2230
  A single pressable button with active/inactive state, used to toggle one option or formatting command on or off.
1896
2231
 
1897
2232
  **Use when**
2233
+
1898
2234
  - A single binary option needs a visible pressed/unpressed state (for example, bold text, mute).
1899
2235
 
1900
2236
  **Use something else when**
2237
+
1901
2238
  - Two or more related toggles should be grouped (use `Toggle Group`).
1902
2239
  - The change takes immediate app-level effect (use `Switch`).
1903
2240
  - The action is a one-time command (use `Button`).
1904
2241
 
1905
2242
  **Often used with**
2243
+
1906
2244
  - `Toolbar`, `Tooltip` for icon-only variants, `Toggle Group`.
1907
2245
 
1908
2246
  #### Toggle Group
@@ -1913,10 +2251,12 @@ A single pressable button with active/inactive state, used to toggle one option
1913
2251
  A set of 2–4 related toggle options for mutually exclusive or multi-select settings that are always visible.
1914
2252
 
1915
2253
  **Use when**
2254
+
1916
2255
  - Toggling between 2–4 always-visible, mutually exclusive modes (for example, grid lines, text alignment, ruler visibility).
1917
2256
  - The current selection must always be immediately clear.
1918
2257
 
1919
2258
  **Use something else when**
2259
+
1920
2260
  - More than ~4–5 options exist (use `Select` or `Menu`).
1921
2261
  - Options execute one-time commands (use `Button`).
1922
2262
  - Multi-select filtering across a larger set (use `Checkbox` or filter chips).
@@ -1924,14 +2264,17 @@ A set of 2–4 related toggle options for mutually exclusive or multi-select set
1924
2264
  - The context is page navigation (use `Tabs` or routing).
1925
2265
 
1926
2266
  **Dos and don'ts**
2267
+
1927
2268
  - Do keep labels concise — one or two words or icons only.
1928
2269
  - Do not mix icons and text labels within the same group.
1929
2270
 
1930
2271
  **Behavior**
2272
+
1931
2273
  - Selection updates instantly.
1932
2274
  - Supports single-select and multi-select configurations.
1933
2275
 
1934
2276
  **Often used with**
2277
+
1935
2278
  - `Toolbar`, `Tooltip` for icon-only variants.
1936
2279
 
1937
2280
  #### Toolbar
@@ -1942,10 +2285,12 @@ A set of 2–4 related toggle options for mutually exclusive or multi-select set
1942
2285
  Persistent strip of primary tools or filters for a page or region — available without selecting rows first.
1943
2286
 
1944
2287
  **Use when**
2288
+
1945
2289
  - Page-level create/filter/export actions.
1946
2290
  - Tools that apply to the whole view or the current query.
1947
2291
 
1948
2292
  **Use something else when**
2293
+
1949
2294
  - Actions apply only after row/item selection (use `Action Toolbar`).
1950
2295
 
1951
2296
  #### Topbar
@@ -1957,15 +2302,18 @@ Persistent strip of primary tools or filters for a page or region — available
1957
2302
  The single, persistent navigation bar at the top of every authenticated CDF and Flows custom app. Provides the primary orientation layer across three fixed regions: left (identity/breadcrumbs), middle (optional global navigation), and right (system controls).
1958
2303
 
1959
2304
  **Use when**
2305
+
1960
2306
  - Every authenticated screen in a CDF or Flows app — this component is mandatory.
1961
2307
  - The app has two or more top-level views requiring global switching.
1962
2308
  - Actions apply consistently across all app pages (for example, a persistent "Add data" button).
1963
2309
 
1964
2310
  **Use something else when**
2311
+
1965
2312
  - Login or authentication-only screens.
1966
2313
  - Full-screen flows or modals that intentionally hide global chrome.
1967
2314
 
1968
2315
  **Dos and don'ts**
2316
+
1969
2317
  - Do use the middle section for primary global app navigation.
1970
2318
  - Do use `Tabs` for distinct pages, `Segmented Control` for mode switching in the middle section.
1971
2319
  - Do not place page-specific actions in the action slot.
@@ -1973,11 +2321,13 @@ The single, persistent navigation bar at the top of every authenticated CDF and
1973
2321
  - Do not use multiple topbars per page.
1974
2322
 
1975
2323
  **Behavior**
2324
+
1976
2325
  - Left: app mark (small `Avatar`), breadcrumbs, optional inline metadata.
1977
2326
  - Middle: optional; omit for single-view apps.
1978
2327
  - Right (fixed order): Share → Notifications → Theme → Atlas.
1979
2328
 
1980
2329
  **Often used with**
2330
+
1981
2331
  - `Breadcrumb`, `Tabs`, `Segmented Control`, `Avatar`.
1982
2332
 
1983
2333
  #### Tooltip
@@ -1989,14 +2339,17 @@ The single, persistent navigation bar at the top of every authenticated CDF and
1989
2339
  A short hint that appears on hover or focus. No heavy interaction inside.
1990
2340
 
1991
2341
  **Use when**
2342
+
1992
2343
  - Clarifying a control or icon in one line or sentence.
1993
2344
  - Providing the full text of a truncated label (for example in `Breadcrumb`).
1994
2345
 
1995
2346
  **Use something else when**
2347
+
1996
2348
  - Content is essential to the task — surface it inline or in `Dialog` / `Drawer`.
1997
2349
  - Users need to interact with the content (use `Popover`).
1998
2350
 
1999
2351
  **Often used with**
2352
+
2000
2353
  - Icon-only `Button`, `Toggle`, `Breadcrumb`, `Label`.
2001
2354
 
2002
2355
  #### Tree
@@ -2005,30 +2358,34 @@ A short hint that appears on hover or focus. No heavy interaction inside.
2005
2358
  **Docs-slug:** tree-view
2006
2359
 
2007
2360
  **Definition**
2008
- Displays hierarchical data in a nested structure with expandable/collapsible rows. Supports optional selection and drag-and-drop.
2361
+ Displays hierarchical data in a nested structure with expandable/collapsible rows. Supports optional cascading checkboxes.
2009
2362
 
2010
2363
  **Use when**
2364
+
2011
2365
  - Presenting large structures with multiple nesting levels (folders, files, organizational hierarchies).
2012
2366
  - Progressive disclosure of complex hierarchical relationships.
2013
2367
 
2014
2368
  **Use something else when**
2369
+
2015
2370
  - Data is not hierarchical (use lists or `Table`).
2016
2371
  - A sortable, tabular layout with multiple columns is needed (use `Table`).
2017
2372
  - Non-hierarchical filtering is the goal (use `Tabs` or `Segmented Control`).
2018
2373
  - Showing location in site hierarchy (use `Breadcrumb`).
2019
2374
 
2020
2375
  **Behavior**
2021
- - Nodes expand and collapse independently.
2376
+
2377
+ - Nodes expand and collapse independently via chevron; row click focuses only.
2022
2378
  - Keyboard navigation follows tree semantics (arrow keys, Home/End).
2023
- - Supports single and multi-selection.
2024
- - Optional drag-and-drop reordering (must maintain accessibility).
2379
+ - Optional checkboxes cascade to descendants; checked and indeterminate rows receive row fill.
2025
2380
 
2026
2381
  **Often used with**
2027
- - Row checkboxes, row menus, `Badge` for status, drag handles, selection highlights connecting to a side panel or `Table` in split-view layouts.
2382
+
2383
+ - Row checkboxes, row menus, `Badge` for status, checkbox highlights connecting to a side panel or `Table` in split-view layouts.
2028
2384
 
2029
2385
  ## Escalation guidance
2030
2386
 
2031
2387
  If a primitive does not fit:
2388
+
2032
2389
  1. Check Storybook variants/props first.
2033
2390
  2. Compose with existing primitives.
2034
2391
  3. If still blocked, note the gap and keep implementation consistent with Aura foundations.
@@ -2154,53 +2511,53 @@ System icons are **functional** shorthand for actions, state, and navigation. Au
2154
2511
 
2155
2512
  Action icons represent operations a user can perform that trigger a change in state, content, or system behavior. They typically appear in interactive, contextual components like buttons, toolbars, context menus, dropdown menus, and inline controls.
2156
2513
 
2157
- | Concept | Icon name | Source | Keywords / aliases | Accepted labels |
2158
- |---|---|---|---|---|
2159
- | Add / New | `plus` | [Tabler](https://tabler.io/icons?icon=plus) | create, add, new, insert | Add, Create |
2160
- | Cancel | `cancel` | [Tabler](https://tabler.io/icons?icon=cancel) | abort, stop | Cancel |
2161
- | Collapse (window) | `arrows-diagonal-minimize-2` | [Tabler](https://tabler.io/icons?icon=arrows-diagonal-minimize-2) | exit fullscreen, collapse, minimize | Collapse |
2162
- | Copy | `copy` | [Tabler](https://tabler.io/icons?icon=copy) | duplicate, clone | Copy |
2163
- | Delete | `trash` | [Tabler](https://tabler.io/icons?icon=trash) | delete, destroy | Delete |
2164
- | Download | `download` | [Tabler](https://tabler.io/icons?icon=download) | save to file, export file | Download |
2165
- | Edit | `pencil` | [Tabler](https://tabler.io/icons?icon=pencil) | modify, rename, update | Edit |
2166
- | Expand (window) | `arrows-diagonal` | [Tabler](https://tabler.io/icons?icon=arrows-diagonal) | fullscreen, expand, maximize | Expand |
2167
- | Filter | `filter` | [Tabler](https://tabler.io/icons?icon=filter) | narrow, refine, search filters | Filter |
2168
- | Hide | `eye-off` | [Tabler](https://tabler.io/icons?icon=eye-off) | hide; conceal, invisible, toggle visibility | Hide |
2169
- | Link | `link` | [Tabler](https://tabler.io/icons?icon=link) | hyperlink, relationship, connected | — |
2170
- | More options (menu opens above or below) | `dots-vertical` | [Tabler](https://tabler.io/icons?icon=dots-vertical) | overflow, actions, kebab menu | — |
2171
- | Notifications | `bell` | [Tabler](https://tabler.io/icons?icon=bell) | alerts, notification center | Notifications |
2172
- | Open external link | `external-link` | [Tabler](https://tabler.io/icons?icon=external-link) | open in new tab, link out | Open |
2173
- | Publish | `rocket` | [Tabler](https://tabler.io/icons?icon=rocket) | deploy, release, go live, launch | Publish |
2174
- | Redo | `arrow-forward-up` | [Tabler](https://tabler.io/icons?icon=arrow-forward-up) | step forward, redo | Redo |
2175
- | Refresh | `reload` | [Tabler](https://tabler.io/icons?icon=reload) | reload page, refresh view | Refresh |
2176
- | Remove / Close | `x` | [Tabler](https://tabler.io/icons?icon=x) | close, dismiss, remove, exit | Close, Remove |
2177
- | Save | `check` | [Tabler](https://tabler.io/icons?icon=check) | save changes, confirm, persist, write | Save |
2178
- | Search | `search` | [Tabler](https://tabler.io/icons?icon=search) | find, look up, query | Search |
2179
- | Settings | `settings` | [Tabler](https://tabler.io/icons?icon=settings) | configure, preferences, gear | Settings |
2180
- | Share | `share` | [Tabler](https://tabler.io/icons?icon=share) | send, distribute, invite | Share |
2181
- | Show | `eye` | [Tabler](https://tabler.io/icons?icon=eye) | show; reveal, visible, unhide | Show |
2182
- | Sync | `refresh` | [Tabler](https://tabler.io/icons?icon=refresh) | synchronize, pull latest, update data | Sync |
2183
- | Undo | `arrow-back-up` | [Tabler](https://tabler.io/icons?icon=arrow-back-up) | revert, undo, step back | Undo |
2184
- | Upload | `upload` | [Tabler](https://tabler.io/icons?icon=upload) | import from file, attach | Upload |
2514
+ | Concept | Icon name | Source | Keywords / aliases | Accepted labels |
2515
+ | ---------------------------------------- | ---------------------------- | ----------------------------------------------------------------- | ------------------------------------------- | --------------- |
2516
+ | Add / New | `plus` | [Tabler](https://tabler.io/icons?icon=plus) | create, add, new, insert | Add, Create |
2517
+ | Cancel | `cancel` | [Tabler](https://tabler.io/icons?icon=cancel) | abort, stop | Cancel |
2518
+ | Collapse (window) | `arrows-diagonal-minimize-2` | [Tabler](https://tabler.io/icons?icon=arrows-diagonal-minimize-2) | exit fullscreen, collapse, minimize | Collapse |
2519
+ | Copy | `copy` | [Tabler](https://tabler.io/icons?icon=copy) | duplicate, clone | Copy |
2520
+ | Delete | `trash` | [Tabler](https://tabler.io/icons?icon=trash) | delete, destroy | Delete |
2521
+ | Download | `download` | [Tabler](https://tabler.io/icons?icon=download) | save to file, export file | Download |
2522
+ | Edit | `pencil` | [Tabler](https://tabler.io/icons?icon=pencil) | modify, rename, update | Edit |
2523
+ | Expand (window) | `arrows-diagonal` | [Tabler](https://tabler.io/icons?icon=arrows-diagonal) | fullscreen, expand, maximize | Expand |
2524
+ | Filter | `filter` | [Tabler](https://tabler.io/icons?icon=filter) | narrow, refine, search filters | Filter |
2525
+ | Hide | `eye-off` | [Tabler](https://tabler.io/icons?icon=eye-off) | hide; conceal, invisible, toggle visibility | Hide |
2526
+ | Link | `link` | [Tabler](https://tabler.io/icons?icon=link) | hyperlink, relationship, connected | — |
2527
+ | More options (menu opens above or below) | `dots-vertical` | [Tabler](https://tabler.io/icons?icon=dots-vertical) | overflow, actions, kebab menu | — |
2528
+ | Notifications | `bell` | [Tabler](https://tabler.io/icons?icon=bell) | alerts, notification center | Notifications |
2529
+ | Open external link | `external-link` | [Tabler](https://tabler.io/icons?icon=external-link) | open in new tab, link out | Open |
2530
+ | Publish | `rocket` | [Tabler](https://tabler.io/icons?icon=rocket) | deploy, release, go live, launch | Publish |
2531
+ | Redo | `arrow-forward-up` | [Tabler](https://tabler.io/icons?icon=arrow-forward-up) | step forward, redo | Redo |
2532
+ | Refresh | `reload` | [Tabler](https://tabler.io/icons?icon=reload) | reload page, refresh view | Refresh |
2533
+ | Remove / Close | `x` | [Tabler](https://tabler.io/icons?icon=x) | close, dismiss, remove, exit | Close, Remove |
2534
+ | Save | `check` | [Tabler](https://tabler.io/icons?icon=check) | save changes, confirm, persist, write | Save |
2535
+ | Search | `search` | [Tabler](https://tabler.io/icons?icon=search) | find, look up, query | Search |
2536
+ | Settings | `settings` | [Tabler](https://tabler.io/icons?icon=settings) | configure, preferences, gear | Settings |
2537
+ | Share | `share` | [Tabler](https://tabler.io/icons?icon=share) | send, distribute, invite | Share |
2538
+ | Show | `eye` | [Tabler](https://tabler.io/icons?icon=eye) | show; reveal, visible, unhide | Show |
2539
+ | Sync | `refresh` | [Tabler](https://tabler.io/icons?icon=refresh) | synchronize, pull latest, update data | Sync |
2540
+ | Undo | `arrow-back-up` | [Tabler](https://tabler.io/icons?icon=arrow-back-up) | revert, undo, step back | Undo |
2541
+ | Upload | `upload` | [Tabler](https://tabler.io/icons?icon=upload) | import from file, attach | Upload |
2185
2542
 
2186
2543
  **Navigation icons**
2187
2544
 
2188
2545
  Navigation icons represent spatial or positional concepts that help users understand where they are, where they can go, or how to move through an interface. They typically appear in structural, persistent components like sidebars, top bars, breadcrumbs, tabs, and pagination controls.
2189
2546
 
2190
- | Concept | Icon name | Source | Keywords / aliases | Accepted labels |
2191
- |---|---|---|---|---|
2192
- | App switcher | `grid-dots` | [Tabler](https://tabler.io/icons?icon=grid-dots) | apps, modules, switcher, launcher | — |
2193
- | Back | `arrow-left` | [Tabler](https://tabler.io/icons?icon=arrow-left) | back, go back, previous, navigate back | Back |
2194
- | Home | `home` | [Tabler](https://tabler.io/icons?icon=home) | root, dashboard, start, homepage | Home |
2195
- | Open | `chevron-down` | [Tabler](https://tabler.io/icons?icon=chevron-down) | expand, open, closed or opened state | — |
2196
- | Close | `chevron-up` | [Tabler](https://tabler.io/icons?icon=chevron-up) | collapse, close, opened state | — |
2197
- | Open, Next page | `chevron-right` | [Tabler](https://tabler.io/icons?icon=chevron-right) | expand, open, closed state, next, right | — |
2198
- | Last page, skip | `chevrons-right` | [Tabler](https://tabler.io/icons?icon=chevrons-right) | last page, pagination, skip to end | — |
2199
- | Previous page | `chevron-left` | [Tabler](https://tabler.io/icons?icon=chevron-left) | previous, left | — |
2200
- | First page, skip | `chevrons-left` | [Tabler](https://tabler.io/icons?icon=chevrons-left) | first page, pagination, skip to start | — |
2201
- | Location | `map-pin` | [Tabler](https://tabler.io/icons?icon=map-pin) | place, geographic, anchor, location, plant, site, rig, factory, warehouse | — |
2202
- | Sign in | `login-2` | [Tabler](https://tabler.io/icons?icon=login-2) | log in, authenticate, sign in | Sign in |
2203
- | Sign out | `login` | [Tabler](https://tabler.io/icons?icon=login) | log out, sign out, exit session | Sign out |
2547
+ | Concept | Icon name | Source | Keywords / aliases | Accepted labels |
2548
+ | ---------------- | ---------------- | ----------------------------------------------------- | ------------------------------------------------------------------------- | --------------- |
2549
+ | App switcher | `grid-dots` | [Tabler](https://tabler.io/icons?icon=grid-dots) | apps, modules, switcher, launcher | — |
2550
+ | Back | `arrow-left` | [Tabler](https://tabler.io/icons?icon=arrow-left) | back, go back, previous, navigate back | Back |
2551
+ | Home | `home` | [Tabler](https://tabler.io/icons?icon=home) | root, dashboard, start, homepage | Home |
2552
+ | Open | `chevron-down` | [Tabler](https://tabler.io/icons?icon=chevron-down) | expand, open, closed or opened state | — |
2553
+ | Close | `chevron-up` | [Tabler](https://tabler.io/icons?icon=chevron-up) | collapse, close, opened state | — |
2554
+ | Open, Next page | `chevron-right` | [Tabler](https://tabler.io/icons?icon=chevron-right) | expand, open, closed state, next, right | — |
2555
+ | Last page, skip | `chevrons-right` | [Tabler](https://tabler.io/icons?icon=chevrons-right) | last page, pagination, skip to end | — |
2556
+ | Previous page | `chevron-left` | [Tabler](https://tabler.io/icons?icon=chevron-left) | previous, left | — |
2557
+ | First page, skip | `chevrons-left` | [Tabler](https://tabler.io/icons?icon=chevrons-left) | first page, pagination, skip to start | — |
2558
+ | Location | `map-pin` | [Tabler](https://tabler.io/icons?icon=map-pin) | place, geographic, anchor, location, plant, site, rig, factory, warehouse | — |
2559
+ | Sign in | `login-2` | [Tabler](https://tabler.io/icons?icon=login-2) | log in, authenticate, sign in | Sign in |
2560
+ | Sign out | `login` | [Tabler](https://tabler.io/icons?icon=login) | log out, sign out, exit session | Sign out |
2204
2561
 
2205
2562
  **Branded icons**
2206
2563
 
@@ -2210,14 +2567,14 @@ Rare exceptions (third-party or Cognite logos inside a cell) use **provided SVGs
2210
2567
 
2211
2568
  - **Must** meet **4.5:1** contrast against the icon’s background (same bar as body text when the icon communicates meaning).
2212
2569
  - **Must** give icon-only controls an accessible name (`aria-label` / `aria-labelledby`) **and** a
2213
- **Tooltip** on hover/focus where the design hides the text label.
2570
+ **Tooltip** on hover/focus where the design hides the text label.
2214
2571
  - Icons that only repeat the meaning of adjacent visible text **should** be `aria-hidden="true"`.
2215
2572
 
2216
2573
  ### Motion (reference)
2217
2574
 
2218
2575
  #### Motion
2219
2576
 
2220
- **What this is:** the rules for **when**, **how fast**, and **how** something should move in Aura-based UIs — durations, easing curves, and which properties to animate — so engineers and agents pick consistent motion instead of inventing values per component.
2577
+ **What this is:** the rules for **when**, **how fast**, and **how** something should move in Aura-based UIs — durations, easing curves, and which properties to animate — so engineers and agents pick consistent motion instead of inventing values per component.
2221
2578
 
2222
2579
  **Motion roles**
2223
2580
 
@@ -2239,12 +2596,12 @@ Every animation plays one of two roles. Role determines how visible, fast, and e
2239
2596
 
2240
2597
  Easing is the rate of speed change — it makes motion feel physical rather than mechanical. Use `cubic-bezier` curves, not linear or default browser easing.
2241
2598
 
2242
- | Curve | cubic-bezier | Use |
2243
- | :--- | :--- | :--- |
2244
- | Standard | `(0.40, 0.00, 0.15, 1.00)` | Motion between two states — most repositioning and in-view transitions |
2245
- | Entrance | `(0.00, 0.00, 0.15, 1.00)` | Elements appearing — decelerates into place, arrives with momentum and lands softly |
2246
- | Exit | `(0.67, 0.00, 0.83, 0.83)` | Elements leaving — accelerates away, lifts off and clears the view decisively |
2247
- | Sine | `(0.33, 0.00, 0.67, 1.00)` | Near-linear; opacity fades and subtle color shifts where a strong ease would distract |
2599
+ | Curve | cubic-bezier | Use |
2600
+ | :------- | :------------------------- | :------------------------------------------------------------------------------------ |
2601
+ | Standard | `(0.40, 0.00, 0.15, 1.00)` | Motion between two states — most repositioning and in-view transitions |
2602
+ | Entrance | `(0.00, 0.00, 0.15, 1.00)` | Elements appearing — decelerates into place, arrives with momentum and lands softly |
2603
+ | Exit | `(0.67, 0.00, 0.83, 0.83)` | Elements leaving — accelerates away, lifts off and clears the view decisively |
2604
+ | Sine | `(0.33, 0.00, 0.67, 1.00)` | Near-linear; opacity fades and subtle color shifts where a strong ease would distract |
2248
2605
 
2249
2606
  - **Should** treat heavier or larger elements as slower to start and more settled on arrival; lighter, smaller elements can respond and land more quickly.
2250
2607
  - **Must not** let easings overshoot or bounce — restraint is part of the Aura feel (see **Animation anchors**, Calm).
@@ -2253,25 +2610,25 @@ Easing is the rate of speed change — it makes motion feel physical rather than
2253
2610
 
2254
2611
  Aura has no custom `duration-*`/`ease-*` theme tokens — use [Tailwind's transition utilities](https://tailwindcss.com/docs/transition-duration) directly, matching existing components (`accordion.tsx`, `tabs.tsx`, `segmented-control.tsx`):
2255
2612
 
2256
- | Concept | Tailwind utility |
2257
- | :--- | :--- |
2258
- | Duration | `duration-150` / `duration-200` / `duration-300`, or an arbitrary value like `duration-[233ms]` for values off the default scale |
2259
- | Standard / Entrance / Exit / Sine easing | Tailwind's built-in `ease-*` keywords don't match Aura's curves — use an arbitrary value, e.g. `ease-[cubic-bezier(0.40,0.00,0.15,1.00)]` |
2260
- | Which properties animate | `transition-[property-list]`, e.g. `transition-[top,left,width,height]` (see `tabs.tsx`), rather than the broader `transition-all` |
2261
- | Stagger | `delay-[Nms]` per item (arbitrary value, since Tailwind has no stagger primitive), or `[animation-delay:Nms]` when using `@keyframes` |
2262
- | Respect reduced motion | Prefix with `motion-safe:` (already used in `tabs.tsx`, `segmented-control.tsx`) so the transition is skipped for users with reduced-motion enabled |
2613
+ | Concept | Tailwind utility |
2614
+ | :--------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------- |
2615
+ | Duration | `duration-150` / `duration-200` / `duration-300`, or an arbitrary value like `duration-[233ms]` for values off the default scale |
2616
+ | Standard / Entrance / Exit / Sine easing | Tailwind's built-in `ease-*` keywords don't match Aura's curves — use an arbitrary value, e.g. `ease-[cubic-bezier(0.40,0.00,0.15,1.00)]` |
2617
+ | Which properties animate | `transition-[property-list]`, e.g. `transition-[top,left,width,height]` (see `tabs.tsx`), rather than the broader `transition-all` |
2618
+ | Stagger | `delay-[Nms]` per item (arbitrary value, since Tailwind has no stagger primitive), or `[animation-delay:Nms]` when using `@keyframes` |
2619
+ | Respect reduced motion | Prefix with `motion-safe:` (already used in `tabs.tsx`, `segmented-control.tsx`) so the transition is skipped for users with reduced-motion enabled |
2263
2620
 
2264
2621
  **What to animate**
2265
2622
 
2266
2623
  Every animation is built from a combination of these properties:
2267
2624
 
2268
- | Property | Use |
2269
- | :--- | :--- |
2270
- | Position | Moving elements on screen — the most common property for entrances, exits, and layout transitions |
2271
- | Scale | Growing or shrinking — drawing attention or showing hierarchy |
2272
- | Rotation | Less common in UI; adds dynamism when used with restraint |
2273
- | Opacity | Fading in/out — often paired with position or scale for softer transitions |
2274
- | Color | Shifting an element's color — state changes, hover feedback, the aurora accent language |
2625
+ | Property | Use |
2626
+ | :----------- | :----------------------------------------------------------------------------------------------------------- |
2627
+ | Position | Moving elements on screen — the most common property for entrances, exits, and layout transitions |
2628
+ | Scale | Growing or shrinking — drawing attention or showing hierarchy |
2629
+ | Rotation | Less common in UI; adds dynamism when used with restraint |
2630
+ | Opacity | Fading in/out — often paired with position or scale for softer transitions |
2631
+ | Color | Shifting an element's color — state changes, hover feedback, the aurora accent language |
2275
2632
  | Mask / morph | Revealing through a mask or transforming one shape into another — expressive moments, progressive disclosure |
2276
2633
 
2277
2634
  - **Should** combine 2–3 properties per transition (e.g. position + opacity) rather than relying on one alone.
@@ -2281,9 +2638,9 @@ Every animation is built from a combination of these properties:
2281
2638
 
2282
2639
  Three qualities every Aura animation should reinforce. Use them to test a motion design, not as literal component names.
2283
2640
 
2284
- - **Flow** — continuity. Elements arrive and leave with direction and connection; nothing jumps or teleports. Groups reveal with a natural stagger. *Test: can I follow the motion with my eyes without losing my place?*
2285
- - **Calm** — confidence in restraint. Motion never competes with the industrial data it's presenting. Easings don't overshoot, staggers don't drag, nothing bounces when it should settle. Calm does not mean slow — most motion is quiet **and** fast. *Test: does this still feel good after 8 hours of use?*
2286
- - **Tactile** — motion builds intuition. Buttons snap, panels slide from the edge they belong to, cards lift when selected — the way something moves signals what's possible before the user thinks about it. *Test: can I tell what's interactive just by how it moves?*
2641
+ - **Flow** — continuity. Elements arrive and leave with direction and connection; nothing jumps or teleports. Groups reveal with a natural stagger. _Test: can I follow the motion with my eyes without losing my place?_
2642
+ - **Calm** — confidence in restraint. Motion never competes with the industrial data it's presenting. Easings don't overshoot, staggers don't drag, nothing bounces when it should settle. Calm does not mean slow — most motion is quiet **and** fast. _Test: does this still feel good after 8 hours of use?_
2643
+ - **Tactile** — motion builds intuition. Buttons snap, panels slide from the edge they belong to, cards lift when selected — the way something moves signals what's possible before the user thinks about it. _Test: can I tell what's interactive just by how it moves?_
2287
2644
 
2288
2645
  **Reference example — anatomy of a transition**
2289
2646
 
@@ -2307,15 +2664,15 @@ These rules apply to Aura primitives, host-shell components themed with Aura tok
2307
2664
 
2308
2665
  Aura components handle many accessibility concerns automatically. Composition, copy, focus management, and page structure remain the implementer's job.
2309
2666
 
2310
- | Concern | Aura handles | You verify |
2311
- | --------------------- | --------------------------------------------------- | --------------------------------------------- |
2312
- | Focus indicators | `shadow-focus-ring` on interactive elements | Not hidden by `overflow` or `z-index` |
2313
- | Keyboard activation | Button: Enter/Space. Input: standard keys | Custom elements also respond |
2314
- | ARIA roles | Correct roles on Dialog, SegmentedControl, etc. | Custom components declare correct roles |
2315
- | Color contrast | Token pairs designed for AA compliance | Page backgrounds don't reduce contrast |
2316
- | Dark mode | Semantic tokens adapt automatically | Custom colors also work in dark mode |
2317
- | Disabled states | Communicated via `aria-disabled` | Reason for disabled is accessible |
2318
- | Focus trapping | Dialog traps focus while open | Focus returns to the trigger element on close |
2667
+ | Concern | Aura handles | You verify |
2668
+ | ------------------- | ----------------------------------------------- | --------------------------------------------- |
2669
+ | Focus indicators | `shadow-focus-ring` on interactive elements | Not hidden by `overflow` or `z-index` |
2670
+ | Keyboard activation | Button: Enter/Space. Input: standard keys | Custom elements also respond |
2671
+ | ARIA roles | Correct roles on Dialog, SegmentedControl, etc. | Custom components declare correct roles |
2672
+ | Color contrast | Token pairs designed for AA compliance | Page backgrounds don't reduce contrast |
2673
+ | Dark mode | Semantic tokens adapt automatically | Custom colors also work in dark mode |
2674
+ | Disabled states | Communicated via `aria-disabled` | Reason for disabled is accessible |
2675
+ | Focus trapping | Dialog traps focus while open | Focus returns to the trigger element on close |
2319
2676
 
2320
2677
  ---
2321
2678
 
@@ -2396,18 +2753,18 @@ Prevent errors where possible. When errors happen, users must understand what fa
2396
2753
 
2397
2754
  Not every field type needs every validation kind. Use this to scope what to implement:
2398
2755
 
2399
- | Field type | Required | Format | Length | Range | Uniqueness |
2400
- | ------------- | -------- | ------ | -------- | ------------ | ---------- |
2401
- | Text input | Yes | — | Optional | — | Optional |
2402
- | Email input | Yes | Yes | — | — | Optional |
2403
- | Password | Yes | Yes | Yes | — | — |
2404
- | Number input | Yes | — | — | Yes | — |
2405
- | Date picker | Yes | — | — | Yes | — |
2406
- | Textarea | Yes | — | Yes | — | — |
2407
- | Select | Yes | — | — | — | — |
2408
- | Combobox | Yes | — | — | — | — |
2409
- | Checkbox | — | — | — | — | — |
2410
- | File upload | Yes | Yes | — | Yes (size) | — |
2756
+ | Field type | Required | Format | Length | Range | Uniqueness |
2757
+ | ------------ | -------- | ------ | -------- | ---------- | ---------- |
2758
+ | Text input | Yes | — | Optional | — | Optional |
2759
+ | Email input | Yes | Yes | — | — | Optional |
2760
+ | Password | Yes | Yes | Yes | — | — |
2761
+ | Number input | Yes | — | — | Yes | — |
2762
+ | Date picker | Yes | — | — | Yes | — |
2763
+ | Textarea | Yes | — | Yes | — | — |
2764
+ | Select | Yes | — | — | — | — |
2765
+ | Combobox | Yes | — | — | — | — |
2766
+ | Checkbox | — | — | — | — | — |
2767
+ | File upload | Yes | Yes | — | Yes (size) | — |
2411
2768
 
2412
2769
  **Edge cases**
2413
2770
 
@@ -2460,22 +2817,22 @@ Aura targets **WCAG AA** for primitives — usage must preserve that.
2460
2817
 
2461
2818
  **Alt text and icon naming**
2462
2819
 
2463
- | Type | Approach | Example |
2464
- | ------------------------ | ---------------------------- | ------------------------------------- |
2465
- | Informational image | Describe the content | `alt="Chart: output up 20%"` |
2466
- | Decorative image | Empty | `alt=""` |
2467
- | Icon-only control | `aria-label` on the control | `aria-label="Delete report"` |
2468
- | Icon paired with a label | Hide the icon | `aria-hidden="true"` on the icon |
2820
+ | Type | Approach | Example |
2821
+ | ------------------------ | --------------------------- | -------------------------------- |
2822
+ | Informational image | Describe the content | `alt="Chart: output up 20%"` |
2823
+ | Decorative image | Empty | `alt=""` |
2824
+ | Icon-only control | `aria-label` on the control | `aria-label="Delete report"` |
2825
+ | Icon paired with a label | Hide the icon | `aria-hidden="true"` on the icon |
2469
2826
 
2470
2827
  **Announcing dynamic content**
2471
2828
 
2472
- | Scenario | Method |
2473
- | ---------------------- | --------------------------------------------- |
2474
- | Search/list results update | `aria-live="polite"` |
2475
- | Form error | `aria-live="assertive"` |
2476
- | Toast | Handled by the toast component |
2477
- | Dialog opens | Focus moves into the dialog (Aura handles) |
2478
- | Dialog closes | Return focus to the trigger element |
2829
+ | Scenario | Method |
2830
+ | -------------------------- | ------------------------------------------ |
2831
+ | Search/list results update | `aria-live="polite"` |
2832
+ | Form error | `aria-live="assertive"` |
2833
+ | Toast | Handled by the toast component |
2834
+ | Dialog opens | Focus moves into the dialog (Aura handles) |
2835
+ | Dialog closes | Return focus to the trigger element |
2479
2836
 
2480
2837
  ### Common pitfalls (agent guidance)
2481
2838
 
@@ -2583,7 +2940,7 @@ Persistent **on/off**, **selected**, **active filter**, or **applied setting** u
2583
2940
 
2584
2941
  **Guidance**
2585
2942
 
2586
- - **Must** use **`active-background`** / **`active-background-hover`** or **`active-muted-background`** / **`active-muted-background-hover`** (and matching foreground tokens such as **`foreground-on-active`**, **`active-foreground`**) — **not** semantic status colors (`info-`*, `success-`*, …) for generic toggles.
2943
+ - **Must** use **`active-background`** / **`active-background-hover`** or **`active-muted-background`** / **`active-muted-background-hover`** (and matching foreground tokens such as **`foreground-on-active`**, **`active-foreground`**) — **not** semantic status colors (`info-`_, `success-`_, …) for generic toggles.
2587
2944
  - **Must not** rely on **color alone** — combine fill with icon, checkmark, label, or border treatment where the pattern is ambiguous.
2588
2945
  - **Must** implement **hover**, **pressed**, and **focus** for the **selected** variant as well as the default variant when both exist.
2589
2946
  - **Must not** show “selected” visuals for controls that are not actually in a selected state.