@dxos/react-ui 0.8.4-main.d05673bc65 → 0.8.4-main.d9fc60f731

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 (534) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/browser/chunk-5SPBSIWS.mjs +33 -0
  4. package/dist/lib/browser/chunk-5SPBSIWS.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-KVJDKHLF.mjs +1613 -0
  6. package/dist/lib/browser/chunk-KVJDKHLF.mjs.map +7 -0
  7. package/dist/lib/browser/index.mjs +2982 -1631
  8. package/dist/lib/browser/index.mjs.map +4 -4
  9. package/dist/lib/browser/meta.json +1 -1
  10. package/dist/lib/browser/testing/index.mjs +37 -28
  11. package/dist/lib/browser/testing/index.mjs.map +3 -3
  12. package/dist/lib/browser/translations.mjs +9 -0
  13. package/dist/lib/browser/translations.mjs.map +7 -0
  14. package/dist/lib/node-esm/chunk-5JYHWJDZ.mjs +1615 -0
  15. package/dist/lib/node-esm/chunk-5JYHWJDZ.mjs.map +7 -0
  16. package/dist/lib/node-esm/chunk-FPVTVXND.mjs +35 -0
  17. package/dist/lib/node-esm/chunk-FPVTVXND.mjs.map +7 -0
  18. package/dist/lib/node-esm/index.mjs +2982 -1631
  19. package/dist/lib/node-esm/index.mjs.map +4 -4
  20. package/dist/lib/node-esm/meta.json +1 -1
  21. package/dist/lib/node-esm/testing/index.mjs +37 -28
  22. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  23. package/dist/lib/node-esm/translations.mjs +10 -0
  24. package/dist/lib/node-esm/translations.mjs.map +7 -0
  25. package/dist/types/src/components/Avatars/Avatar.d.ts +1 -1
  26. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  27. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  28. package/dist/types/src/components/Avatars/Avatar.theme.d.ts +11 -0
  29. package/dist/types/src/components/Avatars/Avatar.theme.d.ts.map +1 -0
  30. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  31. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +5 -1
  32. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  33. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  34. package/dist/types/src/components/Breadcrumb/Breadcrumb.theme.d.ts +4 -0
  35. package/dist/types/src/components/Breadcrumb/Breadcrumb.theme.d.ts.map +1 -0
  36. package/dist/types/src/components/Button/Button.d.ts +3 -3
  37. package/dist/types/src/components/Button/Button.d.ts.map +1 -1
  38. package/dist/types/src/components/Button/Button.stories.d.ts +1 -1
  39. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -1
  40. package/dist/types/src/components/Button/Button.theme.d.ts +11 -0
  41. package/dist/types/src/components/Button/Button.theme.d.ts.map +1 -0
  42. package/dist/types/src/components/Button/IconButton.d.ts +1 -0
  43. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
  44. package/dist/types/src/components/Button/IconButton.stories.d.ts +4 -0
  45. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
  46. package/dist/types/src/components/Button/IconButton.theme.d.ts +8 -0
  47. package/dist/types/src/components/Button/IconButton.theme.d.ts.map +1 -0
  48. package/dist/types/src/components/Button/Toggle.d.ts +2 -2
  49. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -1
  50. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -1
  51. package/dist/types/src/components/Button/ToggleGroup.d.ts +6 -6
  52. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -1
  53. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +2 -2
  54. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -1
  55. package/dist/types/src/components/Calendar/Calendar.d.ts +33 -0
  56. package/dist/types/src/components/Calendar/Calendar.d.ts.map +1 -0
  57. package/dist/types/src/components/Calendar/Calendar.stories.d.ts +9 -0
  58. package/dist/types/src/components/Calendar/Calendar.stories.d.ts.map +1 -0
  59. package/dist/types/src/components/Calendar/Calendar.theme.d.ts +4 -0
  60. package/dist/types/src/components/Calendar/Calendar.theme.d.ts.map +1 -0
  61. package/dist/types/src/components/Calendar/index.d.ts +2 -0
  62. package/dist/types/src/components/Calendar/index.d.ts.map +1 -0
  63. package/dist/types/src/components/Card/Card.d.ts +92 -68
  64. package/dist/types/src/components/Card/Card.d.ts.map +1 -1
  65. package/dist/types/src/components/Card/Card.stories.d.ts +3 -2
  66. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -1
  67. package/dist/types/src/components/Card/Card.theme.d.ts +12 -0
  68. package/dist/types/src/components/Card/Card.theme.d.ts.map +1 -0
  69. package/dist/types/src/components/Carousel/Carousel.d.ts +102 -0
  70. package/dist/types/src/components/Carousel/Carousel.d.ts.map +1 -0
  71. package/dist/types/src/components/Carousel/index.d.ts +2 -0
  72. package/dist/types/src/components/Carousel/index.d.ts.map +1 -0
  73. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  74. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  75. package/dist/types/src/components/Clipboard/index.d.ts +10 -1
  76. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  77. package/dist/types/src/components/Column/Column.d.ts +33 -0
  78. package/dist/types/src/components/Column/Column.d.ts.map +1 -0
  79. package/dist/types/src/components/Column/Column.stories.d.ts +25 -0
  80. package/dist/types/src/components/Column/Column.stories.d.ts.map +1 -0
  81. package/dist/types/src/components/Column/Column.theme.d.ts +9 -0
  82. package/dist/types/src/components/Column/Column.theme.d.ts.map +1 -0
  83. package/dist/types/src/components/Column/index.d.ts +3 -0
  84. package/dist/types/src/components/Column/index.d.ts.map +1 -0
  85. package/dist/types/src/components/Column/withColumn.d.ts +21 -0
  86. package/dist/types/src/components/Column/withColumn.d.ts.map +1 -0
  87. package/dist/types/src/components/DatePicker/DatePicker.d.ts +72 -0
  88. package/dist/types/src/components/DatePicker/DatePicker.d.ts.map +1 -0
  89. package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts +10 -0
  90. package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts.map +1 -0
  91. package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts +6 -0
  92. package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts.map +1 -0
  93. package/dist/types/src/components/DatePicker/index.d.ts +2 -0
  94. package/dist/types/src/components/DatePicker/index.d.ts.map +1 -0
  95. package/dist/types/src/components/Dialog/AlertDialog.d.ts +43 -32
  96. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
  97. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -1
  98. package/dist/types/src/components/Dialog/Dialog.d.ts +51 -32
  99. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  100. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +3 -2
  101. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
  102. package/dist/types/src/components/Dialog/Dialog.theme.d.ts +10 -0
  103. package/dist/types/src/components/Dialog/Dialog.theme.d.ts.map +1 -0
  104. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -1
  105. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -1
  106. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +14 -3
  107. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -1
  108. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -1
  109. package/dist/types/src/components/Focus/Focus.d.ts +36 -0
  110. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -0
  111. package/dist/types/src/{primitives/Column/Column.stories.d.ts → components/Focus/Focus.stories.d.ts} +4 -1
  112. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -0
  113. package/dist/types/src/components/Focus/Focus.theme.d.ts +6 -0
  114. package/dist/types/src/components/Focus/Focus.theme.d.ts.map +1 -0
  115. package/dist/types/src/components/Focus/index.d.ts +2 -0
  116. package/dist/types/src/components/Focus/index.d.ts.map +1 -0
  117. package/dist/types/src/components/Icon/Icon.d.ts +4 -0
  118. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  119. package/dist/types/src/components/Icon/Icon.stories.d.ts +11 -3
  120. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -1
  121. package/dist/types/src/components/Icon/Icon.theme.d.ts +11 -0
  122. package/dist/types/src/components/Icon/Icon.theme.d.ts.map +1 -0
  123. package/dist/types/src/components/Icon/IconBlock.d.ts +15 -0
  124. package/dist/types/src/components/Icon/IconBlock.d.ts.map +1 -0
  125. package/dist/types/src/components/Icon/index.d.ts +1 -0
  126. package/dist/types/src/components/Icon/index.d.ts.map +1 -1
  127. package/dist/types/src/components/Image/Image.d.ts +2 -1
  128. package/dist/types/src/components/Image/Image.d.ts.map +1 -1
  129. package/dist/types/src/components/Image/Image.stories.d.ts +3 -2
  130. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -1
  131. package/dist/types/src/components/Input/Input.d.ts +90 -15
  132. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  133. package/dist/types/src/components/Input/Input.stories.d.ts +17 -6
  134. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  135. package/dist/types/src/components/Input/Input.theme.d.ts +115 -0
  136. package/dist/types/src/components/Input/Input.theme.d.ts.map +1 -0
  137. package/dist/types/src/components/Input/SegmentedInput.d.ts +79 -0
  138. package/dist/types/src/components/Input/SegmentedInput.d.ts.map +1 -0
  139. package/dist/types/src/components/Input/constants.d.ts +2 -0
  140. package/dist/types/src/components/Input/constants.d.ts.map +1 -0
  141. package/dist/types/src/components/Input/index.d.ts +2 -0
  142. package/dist/types/src/components/Input/index.d.ts.map +1 -1
  143. package/dist/types/src/components/Link/Link.d.ts.map +1 -1
  144. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  145. package/dist/types/src/components/Link/Link.theme.d.ts +6 -0
  146. package/dist/types/src/components/Link/Link.theme.d.ts.map +1 -0
  147. package/dist/types/src/components/List/List.d.ts +5 -3
  148. package/dist/types/src/components/List/List.d.ts.map +1 -1
  149. package/dist/types/src/components/List/List.stories.d.ts +3 -1
  150. package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
  151. package/dist/types/src/components/List/List.theme.d.ts +7 -0
  152. package/dist/types/src/components/List/List.theme.d.ts.map +1 -0
  153. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -1
  154. package/dist/types/src/components/List/Tree.d.ts +2 -2
  155. package/dist/types/src/components/List/Tree.d.ts.map +1 -1
  156. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -1
  157. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -1
  158. package/dist/types/src/components/List/Treegrid.d.ts +6 -10
  159. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
  160. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -1
  161. package/dist/types/src/components/List/Treegrid.theme.d.ts +7 -0
  162. package/dist/types/src/components/List/Treegrid.theme.d.ts.map +1 -0
  163. package/dist/types/src/components/Main/Main.d.ts +9 -5
  164. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  165. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  166. package/dist/types/src/components/Main/Main.theme.d.ts +20 -0
  167. package/dist/types/src/components/Main/Main.theme.d.ts.map +1 -0
  168. package/dist/types/src/components/Main/constants.d.ts +3 -0
  169. package/dist/types/src/components/Main/constants.d.ts.map +1 -0
  170. package/dist/types/src/components/Main/index.d.ts +1 -0
  171. package/dist/types/src/components/Main/index.d.ts.map +1 -1
  172. package/dist/types/src/components/Main/useSwipeToDismiss.d.ts.map +1 -1
  173. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts +43 -0
  174. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts.map +1 -0
  175. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts +16 -0
  176. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts.map +1 -0
  177. package/dist/types/src/components/MediaPlayer/index.d.ts +2 -0
  178. package/dist/types/src/components/MediaPlayer/index.d.ts.map +1 -0
  179. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
  180. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -1
  181. package/dist/types/src/components/Menu/DropdownMenu.d.ts +58 -49
  182. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
  183. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +14 -1
  184. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -1
  185. package/dist/types/src/components/Menu/Menu.theme.d.ts +7 -0
  186. package/dist/types/src/components/Menu/Menu.theme.d.ts.map +1 -0
  187. package/dist/types/src/components/Message/Message.d.ts +3 -3
  188. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  189. package/dist/types/src/components/Message/Message.stories.d.ts +6 -2
  190. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  191. package/dist/types/src/components/Message/Message.theme.d.ts +7 -0
  192. package/dist/types/src/components/Message/Message.theme.d.ts.map +1 -0
  193. package/dist/types/src/components/Panel/Panel.d.ts +35 -0
  194. package/dist/types/src/components/Panel/Panel.d.ts.map +1 -0
  195. package/dist/types/src/components/Panel/Panel.stories.d.ts.map +1 -0
  196. package/dist/types/src/components/Panel/Panel.theme.d.ts +13 -0
  197. package/dist/types/src/components/Panel/Panel.theme.d.ts.map +1 -0
  198. package/dist/types/src/components/Panel/index.d.ts.map +1 -0
  199. package/dist/types/src/components/Popover/Popover.d.ts +38 -22
  200. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  201. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  202. package/dist/types/src/components/Popover/Popover.theme.d.ts +8 -0
  203. package/dist/types/src/components/Popover/Popover.theme.d.ts.map +1 -0
  204. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +12 -9
  205. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  206. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +18 -5
  207. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  208. package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts +17 -0
  209. package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts.map +1 -0
  210. package/dist/types/src/components/ScrollArea/index.d.ts +1 -0
  211. package/dist/types/src/components/ScrollArea/index.d.ts.map +1 -1
  212. package/dist/types/src/components/ScrollArea/scrollbar.d.ts +18 -0
  213. package/dist/types/src/components/ScrollArea/scrollbar.d.ts.map +1 -0
  214. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +41 -18
  215. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  216. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +5 -6
  217. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
  218. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  219. package/dist/types/src/components/Select/Select.stories.d.ts +2 -2
  220. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  221. package/dist/types/src/components/Select/Select.theme.d.ts +6 -0
  222. package/dist/types/src/components/Select/Select.theme.d.ts.map +1 -0
  223. package/dist/types/src/components/Separator/Separator.d.ts +3 -3
  224. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  225. package/dist/types/src/components/Separator/Separator.theme.d.ts +7 -0
  226. package/dist/types/src/components/Separator/Separator.theme.d.ts.map +1 -0
  227. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -1
  228. package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts +6 -0
  229. package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts.map +1 -0
  230. package/dist/types/src/components/Splitter/Splitter.d.ts +18 -18
  231. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -1
  232. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -1
  233. package/dist/types/src/components/Splitter/Splitter.theme.d.ts +4 -0
  234. package/dist/types/src/components/Splitter/Splitter.theme.d.ts.map +1 -0
  235. package/dist/types/src/components/Status/Status.d.ts +3 -4
  236. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  237. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  238. package/dist/types/src/components/Status/Status.theme.d.ts +7 -0
  239. package/dist/types/src/components/Status/Status.theme.d.ts.map +1 -0
  240. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  241. package/dist/types/src/components/Tag/Tag.theme.d.ts +6 -0
  242. package/dist/types/src/components/Tag/Tag.theme.d.ts.map +1 -0
  243. package/dist/types/src/components/Toast/Toast.d.ts +23 -20
  244. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  245. package/dist/types/src/components/Toast/Toast.stories.d.ts +5 -2
  246. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  247. package/dist/types/src/components/Toast/Toast.theme.d.ts +4 -0
  248. package/dist/types/src/components/Toast/Toast.theme.d.ts.map +1 -0
  249. package/dist/types/src/components/Toolbar/Toolbar.d.ts +30 -26
  250. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  251. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  252. package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts +8 -0
  253. package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts.map +1 -0
  254. package/dist/types/src/components/Tooltip/Tooltip.d.ts +16 -16
  255. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  256. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +2 -2
  257. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  258. package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts +6 -0
  259. package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts.map +1 -0
  260. package/dist/types/src/components/Tooltip/index.d.ts +1 -0
  261. package/dist/types/src/components/Tooltip/index.d.ts.map +1 -1
  262. package/dist/types/src/components/Tooltip/tooltipContent.d.ts +4 -0
  263. package/dist/types/src/components/Tooltip/tooltipContent.d.ts.map +1 -0
  264. package/dist/types/src/components/index.d.ts +8 -4
  265. package/dist/types/src/components/index.d.ts.map +1 -1
  266. package/dist/types/src/exemplars/generics.stories.d.ts +6 -5
  267. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -1
  268. package/dist/types/src/exemplars/slot.stories.d.ts +1 -0
  269. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -1
  270. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -1
  271. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -1
  272. package/dist/types/src/hooks/index.d.ts +1 -0
  273. package/dist/types/src/hooks/index.d.ts.map +1 -1
  274. package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
  275. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  276. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  277. package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
  278. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  279. package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -1
  280. package/dist/types/src/hooks/useTranslationsContext.d.ts +1 -1
  281. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  282. package/dist/types/src/index.d.ts +1 -0
  283. package/dist/types/src/index.d.ts.map +1 -1
  284. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  285. package/dist/types/src/playground/Custom.stories.d.ts +1 -1
  286. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  287. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  288. package/dist/types/src/primitives/Container/Container.d.ts +4 -5
  289. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -1
  290. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -1
  291. package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts.map +1 -1
  292. package/dist/types/src/primitives/DensityProvider/index.d.ts.map +1 -0
  293. package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  294. package/dist/types/src/primitives/ElevationProvider/index.d.ts.map +1 -0
  295. package/dist/types/src/primitives/Flex/Flex.d.ts +5 -7
  296. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -1
  297. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -1
  298. package/dist/types/src/primitives/Grid/Grid.d.ts +3 -8
  299. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -1
  300. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -1
  301. package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts +1 -1
  302. package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  303. package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.d.ts +1 -1
  304. package/dist/types/src/primitives/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  305. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts +128 -0
  306. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts.map +1 -0
  307. package/dist/types/src/primitives/ThemeProvider/index.d.ts +4 -0
  308. package/dist/types/src/primitives/ThemeProvider/index.d.ts.map +1 -0
  309. package/dist/types/src/primitives/index.d.ts +3 -2
  310. package/dist/types/src/primitives/index.d.ts.map +1 -1
  311. package/dist/types/src/testing/Loading.d.ts.map +1 -1
  312. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
  313. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
  314. package/dist/types/src/testing/decorators/withTheme.d.ts +6 -2
  315. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  316. package/dist/types/src/theme/bindTheme.d.ts +3 -0
  317. package/dist/types/src/theme/bindTheme.d.ts.map +1 -0
  318. package/dist/types/src/theme/defaultTheme.d.ts +4 -0
  319. package/dist/types/src/theme/defaultTheme.d.ts.map +1 -0
  320. package/dist/types/src/theme/index.d.ts +31 -0
  321. package/dist/types/src/theme/index.d.ts.map +1 -0
  322. package/dist/types/src/translations.d.ts +17 -3
  323. package/dist/types/src/translations.d.ts.map +1 -1
  324. package/dist/types/src/util/index.d.ts +2 -1
  325. package/dist/types/src/util/index.d.ts.map +1 -1
  326. package/dist/types/src/util/mobile.d.ts +5 -0
  327. package/dist/types/src/util/mobile.d.ts.map +1 -0
  328. package/dist/types/src/util/slots.d.ts +57 -0
  329. package/dist/types/src/util/slots.d.ts.map +1 -0
  330. package/dist/types/src/util/usePx.d.ts.map +1 -1
  331. package/dist/types/tsconfig.tsbuildinfo +1 -1
  332. package/package.json +31 -26
  333. package/src/components/Avatars/Avatar.stories.tsx +2 -3
  334. package/src/components/Avatars/Avatar.theme.ts +93 -0
  335. package/src/components/Avatars/Avatar.tsx +1 -2
  336. package/src/components/Avatars/AvatarGroup.stories.tsx +0 -1
  337. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +1 -2
  338. package/src/components/Breadcrumb/Breadcrumb.theme.ts +26 -0
  339. package/src/components/Breadcrumb/Breadcrumb.tsx +14 -2
  340. package/src/components/Button/Button.stories.tsx +0 -1
  341. package/src/components/Button/Button.theme.ts +31 -0
  342. package/src/components/Button/Button.tsx +6 -14
  343. package/src/components/Button/IconButton.stories.tsx +56 -6
  344. package/src/components/Button/IconButton.theme.ts +21 -0
  345. package/src/components/Button/IconButton.tsx +3 -4
  346. package/src/components/Button/Toggle.stories.tsx +0 -1
  347. package/src/components/Button/Toggle.tsx +4 -4
  348. package/src/components/Button/ToggleGroup.stories.tsx +0 -1
  349. package/src/components/Button/ToggleGroup.tsx +12 -16
  350. package/src/components/Calendar/Calendar.stories.tsx +43 -0
  351. package/src/components/Calendar/Calendar.theme.ts +74 -0
  352. package/src/components/Calendar/Calendar.tsx +196 -0
  353. package/src/components/Calendar/index.ts +5 -0
  354. package/src/components/Card/Card.stories.tsx +55 -34
  355. package/src/components/Card/Card.theme.ts +93 -0
  356. package/src/components/Card/Card.tsx +297 -156
  357. package/src/components/Carousel/Carousel.tsx +371 -0
  358. package/src/components/Carousel/index.ts +5 -0
  359. package/src/components/Clipboard/CopyButton.tsx +6 -7
  360. package/src/components/Column/AUDIT.md +148 -0
  361. package/src/components/Column/Column.stories.tsx +181 -0
  362. package/src/components/Column/Column.theme.ts +48 -0
  363. package/src/components/Column/Column.tsx +166 -0
  364. package/src/{primitives → components}/Column/index.ts +1 -0
  365. package/src/components/Column/withColumn.ts +27 -0
  366. package/src/components/DatePicker/DatePicker.stories.tsx +102 -0
  367. package/src/components/DatePicker/DatePicker.theme.ts +35 -0
  368. package/src/components/DatePicker/DatePicker.tsx +279 -0
  369. package/src/components/DatePicker/index.ts +5 -0
  370. package/src/components/Dialog/AlertDialog.stories.tsx +5 -6
  371. package/src/components/Dialog/AlertDialog.tsx +72 -132
  372. package/src/components/Dialog/Dialog.stories.tsx +65 -10
  373. package/src/components/Dialog/Dialog.theme.ts +61 -0
  374. package/src/components/Dialog/Dialog.tsx +124 -99
  375. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +3 -8
  376. package/src/components/ErrorFallback/ErrorFallback.tsx +14 -8
  377. package/src/components/ErrorFallback/ErrorStack.tsx +48 -8
  378. package/src/components/Focus/AUDIT.md +43 -0
  379. package/src/components/Focus/Focus.stories.tsx +230 -0
  380. package/src/components/Focus/Focus.theme.ts +32 -0
  381. package/src/components/Focus/Focus.tsx +201 -0
  382. package/src/components/Focus/index.ts +5 -0
  383. package/src/components/Icon/Icon.stories.tsx +43 -13
  384. package/src/components/Icon/Icon.theme.ts +45 -0
  385. package/src/components/Icon/Icon.tsx +14 -3
  386. package/src/components/Icon/IconBlock.tsx +38 -0
  387. package/src/components/Icon/index.ts +1 -0
  388. package/src/components/Image/Image.stories.tsx +4 -4
  389. package/src/components/Image/Image.tsx +31 -8
  390. package/src/components/Input/Input.stories.tsx +135 -33
  391. package/src/components/Input/Input.theme.ts +191 -0
  392. package/src/components/Input/Input.tsx +214 -9
  393. package/src/components/Input/SegmentedInput.tsx +454 -0
  394. package/src/components/Input/constants.ts +5 -0
  395. package/src/components/Input/index.ts +2 -0
  396. package/src/components/Link/Link.stories.tsx +0 -1
  397. package/src/components/Link/Link.theme.ts +16 -0
  398. package/src/components/Link/Link.tsx +10 -2
  399. package/src/components/List/List.stories.tsx +1 -2
  400. package/src/components/List/List.theme.ts +47 -0
  401. package/src/components/List/List.tsx +8 -7
  402. package/src/components/List/ListDropIndicator.tsx +1 -2
  403. package/src/components/List/Tree.stories.tsx +2 -3
  404. package/src/components/List/Tree.tsx +0 -1
  405. package/src/components/List/TreeDropIndicator.tsx +3 -3
  406. package/src/components/List/Treegrid.stories.tsx +26 -27
  407. package/src/components/List/Treegrid.theme.ts +35 -0
  408. package/src/components/List/Treegrid.tsx +15 -16
  409. package/src/components/Main/Main.stories.tsx +0 -1
  410. package/src/components/Main/Main.theme.ts +29 -0
  411. package/src/components/Main/Main.tsx +10 -9
  412. package/src/components/Main/constants.ts +6 -0
  413. package/src/components/Main/index.ts +1 -0
  414. package/src/components/MediaPlayer/MediaPlayer.stories.tsx +50 -0
  415. package/src/components/MediaPlayer/MediaPlayer.tsx +178 -0
  416. package/src/components/MediaPlayer/index.ts +5 -0
  417. package/src/components/Menu/ContextMenu.stories.tsx +0 -4
  418. package/src/components/Menu/DropdownMenu.stories.tsx +0 -4
  419. package/src/components/Menu/DropdownMenu.tsx +63 -57
  420. package/src/components/Menu/Menu.theme.ts +48 -0
  421. package/src/components/Message/Message.stories.tsx +48 -11
  422. package/src/components/Message/Message.theme.ts +44 -0
  423. package/src/components/Message/Message.tsx +75 -19
  424. package/src/{primitives → components}/Panel/Panel.stories.tsx +9 -9
  425. package/src/components/Panel/Panel.theme.ts +42 -0
  426. package/src/components/Panel/Panel.tsx +121 -0
  427. package/src/components/Popover/Popover.stories.tsx +4 -5
  428. package/src/components/Popover/Popover.theme.ts +40 -0
  429. package/src/components/Popover/Popover.tsx +49 -49
  430. package/src/components/ScrollArea/ScrollArea.stories.tsx +89 -30
  431. package/src/components/ScrollArea/ScrollArea.theme.ts +107 -0
  432. package/src/components/ScrollArea/ScrollArea.tsx +40 -23
  433. package/src/components/ScrollArea/index.ts +1 -0
  434. package/src/components/ScrollArea/scrollbar.ts +21 -0
  435. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +21 -19
  436. package/src/components/ScrollContainer/ScrollContainer.tsx +215 -106
  437. package/src/components/Select/Select.stories.tsx +5 -6
  438. package/src/components/Select/Select.theme.ts +55 -0
  439. package/src/components/Select/Select.tsx +26 -10
  440. package/src/components/Separator/Separator.theme.ts +23 -0
  441. package/src/components/Separator/Separator.tsx +4 -7
  442. package/src/components/Skeleton/Skeleton.stories.tsx +0 -1
  443. package/src/components/Skeleton/Skeleton.theme.ts +22 -0
  444. package/src/components/Splitter/Splitter.stories.tsx +30 -30
  445. package/src/components/Splitter/Splitter.theme.ts +18 -0
  446. package/src/components/Splitter/Splitter.tsx +36 -40
  447. package/src/components/Status/Status.stories.tsx +0 -1
  448. package/src/components/Status/Status.theme.ts +31 -0
  449. package/src/components/Status/Status.tsx +7 -5
  450. package/src/components/Tag/Tag.stories.tsx +0 -1
  451. package/src/components/Tag/Tag.theme.ts +22 -0
  452. package/src/components/Toast/Toast.stories.tsx +41 -21
  453. package/src/components/Toast/Toast.theme.ts +56 -0
  454. package/src/components/Toast/Toast.tsx +105 -52
  455. package/src/components/Toolbar/Toolbar.stories.tsx +0 -1
  456. package/src/components/Toolbar/Toolbar.theme.ts +36 -0
  457. package/src/components/Toolbar/Toolbar.tsx +83 -46
  458. package/src/components/Tooltip/Tooltip.stories.tsx +7 -17
  459. package/src/components/Tooltip/Tooltip.theme.ts +19 -0
  460. package/src/components/Tooltip/Tooltip.tsx +33 -33
  461. package/src/components/Tooltip/index.ts +1 -0
  462. package/src/components/Tooltip/tooltipContent.ts +16 -0
  463. package/src/components/index.ts +8 -5
  464. package/src/exemplars/generics.stories.tsx +7 -16
  465. package/src/exemplars/slot.stories.tsx +66 -57
  466. package/src/exemplars/tabster.stories.tsx +1 -1
  467. package/src/exemplars/virtualizer.stories.tsx +4 -5
  468. package/src/hooks/index.ts +1 -0
  469. package/src/hooks/useDensityContext.ts +3 -3
  470. package/src/hooks/useElevationContext.ts +1 -1
  471. package/src/hooks/useThemeContext.ts +1 -1
  472. package/src/hooks/useTranslationsContext.ts +1 -1
  473. package/src/index.ts +1 -0
  474. package/src/playground/Custom.stories.tsx +13 -36
  475. package/src/primitives/Container/Container.stories.tsx +0 -1
  476. package/src/primitives/Container/Container.tsx +7 -8
  477. package/src/{components → primitives}/DensityProvider/DensityProvider.tsx +1 -1
  478. package/src/primitives/Flex/Flex.stories.tsx +0 -1
  479. package/src/primitives/Flex/Flex.tsx +12 -12
  480. package/src/primitives/Grid/Grid.stories.tsx +0 -1
  481. package/src/primitives/Grid/Grid.tsx +6 -9
  482. package/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.tsx +1 -2
  483. package/src/{components → primitives}/ThemeProvider/ThemeProvider.tsx +6 -5
  484. package/src/{components → primitives}/ThemeProvider/index.ts +2 -2
  485. package/src/primitives/index.ts +4 -2
  486. package/src/testing/Loading.tsx +25 -4
  487. package/src/testing/decorators/withLayout.tsx +7 -17
  488. package/src/testing/decorators/withLayoutVariants.tsx +1 -1
  489. package/src/testing/decorators/withTheme.tsx +23 -12
  490. package/src/theme/bindTheme.ts +13 -0
  491. package/src/theme/defaultTheme.ts +83 -0
  492. package/src/theme/index.ts +37 -0
  493. package/src/translations.ts +17 -3
  494. package/src/util/index.ts +2 -1
  495. package/src/util/mobile.ts +11 -0
  496. package/src/util/slots.ts +129 -0
  497. package/src/util/usePx.ts +5 -1
  498. package/dist/lib/browser/chunk-2FKSMWNY.mjs +0 -774
  499. package/dist/lib/browser/chunk-2FKSMWNY.mjs.map +0 -7
  500. package/dist/lib/node-esm/chunk-ZNBLTSHI.mjs +0 -776
  501. package/dist/lib/node-esm/chunk-ZNBLTSHI.mjs.map +0 -7
  502. package/dist/types/src/components/DensityProvider/index.d.ts.map +0 -1
  503. package/dist/types/src/components/ElevationProvider/index.d.ts.map +0 -1
  504. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +0 -1
  505. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +0 -129
  506. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +0 -1
  507. package/dist/types/src/components/ThemeProvider/index.d.ts +0 -4
  508. package/dist/types/src/components/ThemeProvider/index.d.ts.map +0 -1
  509. package/dist/types/src/primitives/Column/Column.d.ts +0 -26
  510. package/dist/types/src/primitives/Column/Column.d.ts.map +0 -1
  511. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +0 -1
  512. package/dist/types/src/primitives/Column/index.d.ts +0 -2
  513. package/dist/types/src/primitives/Column/index.d.ts.map +0 -1
  514. package/dist/types/src/primitives/Panel/Panel.d.ts +0 -26
  515. package/dist/types/src/primitives/Panel/Panel.d.ts.map +0 -1
  516. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +0 -1
  517. package/dist/types/src/primitives/Panel/index.d.ts.map +0 -1
  518. package/dist/types/src/util/hasIosKeyboard.d.ts +0 -2
  519. package/dist/types/src/util/hasIosKeyboard.d.ts.map +0 -1
  520. package/src/primitives/Column/Column.stories.tsx +0 -78
  521. package/src/primitives/Column/Column.tsx +0 -134
  522. package/src/primitives/Panel/Panel.tsx +0 -119
  523. package/src/util/hasIosKeyboard.ts +0 -8
  524. /package/dist/types/src/{primitives → components}/Panel/Panel.stories.d.ts +0 -0
  525. /package/dist/types/src/{primitives → components}/Panel/index.d.ts +0 -0
  526. /package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts +0 -0
  527. /package/dist/types/src/{components → primitives}/DensityProvider/index.d.ts +0 -0
  528. /package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts +0 -0
  529. /package/dist/types/src/{components → primitives}/ElevationProvider/index.d.ts +0 -0
  530. /package/src/{primitives → components}/Panel/index.ts +0 -0
  531. /package/src/{components → primitives}/DensityProvider/index.ts +0 -0
  532. /package/src/{components → primitives}/ElevationProvider/ElevationProvider.tsx +0 -0
  533. /package/src/{components → primitives}/ElevationProvider/index.ts +0 -0
  534. /package/src/{components → primitives}/ThemeProvider/TranslationsProvider.tsx +0 -0
@@ -2,16 +2,18 @@
2
2
  // Copyright 2026 DXOS.org
3
3
  //
4
4
 
5
- import React, { useMemo } from 'react';
5
+ import React, { PropsWithChildren, useMemo } from 'react';
6
6
 
7
- import { faker } from '@dxos/random';
7
+ import { random } from '@dxos/random';
8
8
  import { mx } from '@dxos/ui-theme';
9
+ import { ThemedClassName } from '@dxos/ui-types';
9
10
 
10
11
  import { withLayout, withTheme } from '../../testing';
11
-
12
+ import { Column } from '../Column';
13
+ import { Input } from '../Input';
12
14
  import { ScrollArea } from './ScrollArea';
13
15
 
14
- faker.seed(123);
16
+ random.seed(123);
15
17
 
16
18
  export default {
17
19
  title: 'ui/react-ui-core/components/ScrollArea',
@@ -22,22 +24,22 @@ export default {
22
24
  },
23
25
  };
24
26
 
25
- const Column = () => (
27
+ const List = ({ items = 50 }: { items?: number }) => (
26
28
  <div>
27
- {Array.from({ length: 50 }).map((_, index) => (
28
- <div key={index} className='px-1 text-sm cursor-pointer hover:bg-hover-surface'>
29
+ {Array.from({ length: items }).map((_, index) => (
30
+ <div key={index} className='px-1 cursor-pointer hover:bg-hover-surface'>
29
31
  Item {index + 1}
30
32
  </div>
31
33
  ))}
32
34
  </div>
33
35
  );
34
36
 
35
- const Row = () => (
37
+ const Row = ({ items = 50 }: { items?: number }) => (
36
38
  <div className='flex gap-2 w-max'>
37
- {Array.from({ length: 50 }).map((_, index) => (
39
+ {Array.from({ length: items }).map((_, index) => (
38
40
  <div
39
41
  key={index}
40
- className='shrink-0 h-20 w-20 cursor-pointer border border-separator rounded-md flex items-center justify-center text-sm hover:bg-hover-surface'
42
+ className='shrink-0 h-20 w-20 cursor-pointer border border-separator rounded-md flex items-center justify-center hover:bg-hover-surface'
41
43
  >
42
44
  {index + 1}
43
45
  </div>
@@ -45,58 +47,91 @@ const Row = () => (
45
47
  </div>
46
48
  );
47
49
 
50
+ const Container = ({ classNames, children }: ThemedClassName<PropsWithChildren>) => {
51
+ return <div className={mx('border border-separator rounded-md overflow-hidden', classNames)}>{children}</div>;
52
+ };
53
+
48
54
  export const Vertical = {
49
55
  render: () => (
50
- <div className='h-72 w-48 p-2 border border-separator rounded-md'>
51
- <ScrollArea.Root orientation='vertical' padding>
56
+ <Container classNames='h-72 w-48'>
57
+ <ScrollArea.Root orientation='vertical'>
52
58
  <ScrollArea.Viewport>
53
- <Column />
59
+ <List />
54
60
  </ScrollArea.Viewport>
55
61
  </ScrollArea.Root>
56
- </div>
62
+ </Container>
57
63
  ),
58
64
  };
59
65
 
60
66
  export const VerticalThin = {
61
67
  render: () => (
62
- <div className='h-72 w-48 p-2 border border-separator rounded-md'>
63
- <ScrollArea.Root orientation='vertical' padding thin>
68
+ <Container classNames='h-72 w-48'>
69
+ <ScrollArea.Root orientation='vertical' thin>
64
70
  <ScrollArea.Viewport>
65
- <Column />
71
+ <List />
66
72
  </ScrollArea.Viewport>
67
73
  </ScrollArea.Root>
68
- </div>
74
+ </Container>
75
+ ),
76
+ };
77
+
78
+ export const VerticalPadded = {
79
+ render: () => (
80
+ <Container classNames='h-72 w-48'>
81
+ <ScrollArea.Root orientation='vertical' centered padding thin>
82
+ <ScrollArea.Viewport>
83
+ <List />
84
+ </ScrollArea.Viewport>
85
+ </ScrollArea.Root>
86
+ </Container>
87
+ ),
88
+ };
89
+
90
+ export const VerticalColumn = {
91
+ render: () => (
92
+ <Container classNames='h-72 w-48'>
93
+ <Column.Root gutter='sm' classNames='h-full overflow-hidden'>
94
+ <ScrollArea.Root orientation='vertical' padding thin>
95
+ <ScrollArea.Viewport classNames='py-2'>
96
+ <Input.Root>
97
+ <Input.TextInput classNames='p-1' />
98
+ </Input.Root>
99
+ <List />
100
+ </ScrollArea.Viewport>
101
+ </ScrollArea.Root>
102
+ </Column.Root>
103
+ </Container>
69
104
  ),
70
105
  };
71
106
 
72
107
  export const Horizontal = {
73
108
  render: () => (
74
- <div className='w-96 p-2 border border-separator rounded-md'>
75
- <ScrollArea.Root orientation='horizontal' padding>
109
+ <Container classNames='w-96'>
110
+ <ScrollArea.Root orientation='horizontal'>
76
111
  <ScrollArea.Viewport>
77
112
  <Row />
78
113
  </ScrollArea.Viewport>
79
114
  </ScrollArea.Root>
80
- </div>
115
+ </Container>
81
116
  ),
82
117
  };
83
118
 
84
119
  export const HorizontalThin = {
85
120
  render: () => (
86
- <div className='w-96 p-2 border border-separator rounded-md'>
87
- <ScrollArea.Root orientation='horizontal' padding thin>
121
+ <Container classNames='w-96'>
122
+ <ScrollArea.Root orientation='horizontal' thin>
88
123
  <ScrollArea.Viewport>
89
124
  <Row />
90
125
  </ScrollArea.Viewport>
91
126
  </ScrollArea.Root>
92
- </div>
127
+ </Container>
93
128
  ),
94
129
  };
95
130
 
96
131
  export const Both = {
97
132
  render: () => (
98
- <div className='h-96 w-96 p-2 border border-separator rounded-md'>
99
- <ScrollArea.Root orientation='all' padding>
133
+ <Container classNames='w-96 h-96'>
134
+ <ScrollArea.Root orientation='all'>
100
135
  <ScrollArea.Viewport>
101
136
  <div className='flex flex-col gap-2'>
102
137
  {Array.from({ length: 50 }).map((_, rowIndex) => (
@@ -114,7 +149,31 @@ export const Both = {
114
149
  </div>
115
150
  </ScrollArea.Viewport>
116
151
  </ScrollArea.Root>
117
- </div>
152
+ </Container>
153
+ ),
154
+ };
155
+
156
+ export const Fullscreen = {
157
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
158
+ render: () => (
159
+ <ScrollArea.Root orientation='all' thin>
160
+ <ScrollArea.Viewport>
161
+ <div className='flex flex-col gap-2'>
162
+ {Array.from({ length: 50 }).map((_, rowIndex) => (
163
+ <div key={rowIndex} className='flex gap-2'>
164
+ {Array.from({ length: 50 }).map((_, colIndex) => (
165
+ <div
166
+ key={colIndex}
167
+ className='shrink-0 h-20 w-20 flex items-center justify-center text-sm border border-separator font-mono'
168
+ >
169
+ [{colIndex}:{rowIndex}]
170
+ </div>
171
+ ))}
172
+ </div>
173
+ ))}
174
+ </div>
175
+ </ScrollArea.Viewport>
176
+ </ScrollArea.Root>
118
177
  ),
119
178
  };
120
179
 
@@ -125,13 +184,13 @@ export const NestedScrollAreas = {
125
184
  () =>
126
185
  Array.from({ length: 8 }).map((_, index) => ({
127
186
  id: String(index),
128
- count: faker.number.int({ min: 5, max: 20 }),
187
+ count: random.number.int({ min: 5, max: 20 }),
129
188
  })),
130
189
  [],
131
190
  );
132
191
 
133
192
  return (
134
- <ScrollArea.Root thin orientation='horizontal'>
193
+ <ScrollArea.Root orientation='horizontal' thin padding>
135
194
  <ScrollArea.Viewport classNames='gap-4'>
136
195
  {columns.map((column) => (
137
196
  <section
@@ -170,7 +229,7 @@ export const NativeScroll = {
170
229
  'group-hover:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb',
171
230
  )}
172
231
  >
173
- <Column />
232
+ <List />
174
233
  </div>
175
234
  </div>
176
235
  ),
@@ -0,0 +1,107 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { mx } from '@dxos/ui-theme';
6
+ import { type AllowedAxis, type ComponentFunction, type Theme } from '@dxos/ui-types';
7
+
8
+ import { withColumn } from '../Column/withColumn';
9
+
10
+ export type ScrollAreaStyleProps = {
11
+ orientation?: AllowedAxis;
12
+ autoHide?: boolean;
13
+ /** Balance left/right, top/bottom offset with scrollbar. */
14
+ centered?: boolean;
15
+ /** Add default padding. */
16
+ /** TODO(burdon): Integrate with Column.Root padding. */
17
+ padding?: boolean;
18
+ /** Use thin scrollbars. */
19
+ /** TODO(burdon): Density fine/course. */
20
+ thin?: boolean;
21
+ /** Enable snap scrolling. */
22
+ snap?: boolean;
23
+ };
24
+
25
+ const root: ComponentFunction<ScrollAreaStyleProps> = ({ orientation }, ...etc) =>
26
+ mx(
27
+ // Expand
28
+ 'dx-container',
29
+
30
+ orientation === 'vertical' && 'group/scroll-v flex flex-col',
31
+ orientation === 'horizontal' && 'group/scroll-h flex',
32
+ // `flex flex-col` is required (as in `vertical`) so the viewport's `flex-1 min-h-0` can
33
+ // bound its height; without it the viewport grows to content height and only scrolls
34
+ // horizontally (the root clips the vertical overflow instead of scrolling it).
35
+ orientation === 'all' && 'group/scroll-all flex flex-col',
36
+
37
+ // Apply col-span-full only when inside a Column.Root grid (detected via dx-column-root marker).
38
+ '[.dx-column-root_&]:col-span-full',
39
+
40
+ ...etc,
41
+ );
42
+
43
+ /**
44
+ * NOTE: The browser reserves space for scrollbars.
45
+ */
46
+ const viewport: ComponentFunction<ScrollAreaStyleProps> = (
47
+ { orientation, centered, padding, snap, autoHide },
48
+ ...etc
49
+ ) => {
50
+ return mx(
51
+ 'flex-1 min-h-0 w-full',
52
+
53
+ // Reset --dx-col so nested components don't try to grid-position themselves.
54
+ // ScrollArea has already consumed --gutter for padding.
55
+ withColumn.consumed(),
56
+
57
+ orientation === 'vertical' && 'overflow-y-scroll',
58
+ orientation === 'horizontal' && 'flex overflow-x-scroll overscroll-x-contain',
59
+ orientation === 'all' && 'overflow-scroll',
60
+
61
+ '[&::-webkit-scrollbar-corner]:bg-transparent',
62
+ '[&::-webkit-scrollbar-track]:bg-transparent',
63
+ '[&::-webkit-scrollbar-thumb]:rounded-none',
64
+
65
+ '[&::-webkit-scrollbar]:w-[var(--scroll-width)] [&::-webkit-scrollbar]:h-[var(--scroll-width)]',
66
+
67
+ // If contained within Column.Root grid the gutter is set by that component (--gutter CSS variable).
68
+ // If centered, left padding compensates for scrollbar width so content is visually centered.
69
+ (orientation === 'vertical' || orientation === 'all') &&
70
+ (padding
71
+ ? [
72
+ centered ? 'pl-[var(--gutter,calc(var(--scroll-width)+var(--scroll-padding)))]' : 'pl-[var(--gutter,0)]',
73
+ 'pr-[calc(var(--gutter,calc(var(--scroll-width)+var(--scroll-padding)))-var(--scroll-width))]',
74
+ ]
75
+ : centered && 'pl-[var(--scroll-width)]'),
76
+
77
+ (orientation === 'horizontal' || orientation === 'all') &&
78
+ (padding
79
+ ? [centered && 'pt-[calc(var(--scroll-width)+var(--scroll-padding))]', 'pb-[var(--scroll-padding)]']
80
+ : centered && 'pt-[var(--scroll-width)]'),
81
+
82
+ snap && [
83
+ orientation === 'vertical' && 'snap-y snap-mandatory',
84
+ orientation === 'horizontal' && 'snap-x snap-mandatory',
85
+ orientation === 'all' && 'snap-both snap-mandatory',
86
+ ],
87
+
88
+ autoHide
89
+ ? [
90
+ orientation === 'vertical' && 'group-hover/scroll-v:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb',
91
+ orientation === 'horizontal' && 'group-hover/scroll-h:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb',
92
+ orientation === 'all' && 'group-hover/scroll-all:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb',
93
+ ]
94
+ : [
95
+ orientation === 'vertical' && '[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb',
96
+ orientation === 'horizontal' && '[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb',
97
+ orientation === 'all' && '[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb',
98
+ ],
99
+
100
+ ...etc,
101
+ );
102
+ };
103
+
104
+ export const scrollAreaTheme: Theme<ScrollAreaStyleProps> = {
105
+ root,
106
+ viewport,
107
+ };
@@ -5,12 +5,13 @@
5
5
  import { createContext } from '@radix-ui/react-context';
6
6
  import { Primitive } from '@radix-ui/react-primitive';
7
7
  import { Slot } from '@radix-ui/react-slot';
8
- import React, { type HTMLAttributes, forwardRef } from 'react';
8
+ import React, { CSSProperties, useMemo } from 'react';
9
9
 
10
- import { composableProps } from '@dxos/ui-theme';
11
- import { type AllowedAxis, type SlottableProps, type ThemedClassName } from '@dxos/ui-types';
10
+ import { type AllowedAxis, type SlottableProps } from '@dxos/ui-types';
12
11
 
13
12
  import { useThemeContext } from '../../hooks';
13
+ import { composableProps, slottable } from '../../util';
14
+ import { scrollbar } from './scrollbar';
14
15
 
15
16
  //
16
17
  // Context
@@ -24,7 +25,7 @@ type ScrollAreaContextType = {
24
25
  /** Hide scrollbars when not scrolling. */
25
26
  autoHide: boolean;
26
27
  /** Apply padding to opposite side of scrollbar. */
27
- margin?: boolean;
28
+ centered?: boolean;
28
29
  /** Apply padding. */
29
30
  padding: boolean;
30
31
  /** Use thin scrollbars. */
@@ -41,19 +42,19 @@ const [ScrollAreaProvider, useScrollAreaContext] = createContext<ScrollAreaConte
41
42
 
42
43
  const SCROLLAREA_ROOT_NAME = 'ScrollArea.Root';
43
44
 
44
- type ScrollAreaRootProps = SlottableProps<HTMLDivElement, Partial<ScrollAreaContextType>>;
45
+ type ScrollAreaRootProps = Partial<ScrollAreaContextType>;
45
46
 
46
47
  /**
47
48
  * ScrollArea provides native scrollbars with custom styling.
48
49
  */
49
- const ScrollAreaRoot = forwardRef<HTMLDivElement, ScrollAreaRootProps>(
50
+ const ScrollAreaRoot = slottable<HTMLDivElement, ScrollAreaRootProps>(
50
51
  (
51
52
  {
52
53
  children,
53
54
  asChild,
54
55
  orientation = 'vertical',
55
56
  autoHide = true,
56
- margin = false,
57
+ centered = false,
57
58
  padding = false,
58
59
  thin = false,
59
60
  snap = false,
@@ -61,10 +62,13 @@ const ScrollAreaRoot = forwardRef<HTMLDivElement, ScrollAreaRootProps>(
61
62
  },
62
63
  forwardedRef,
63
64
  ) => {
65
+ const { tx } = useThemeContext();
64
66
  const { className, ...rest } = composableProps(props);
65
67
  const Comp = asChild ? Slot : Primitive.div;
66
- const { tx } = useThemeContext();
67
- const options = { orientation, autoHide, margin, padding, thin, snap };
68
+ const options = useMemo(
69
+ () => ({ orientation, autoHide, centered, padding, thin, snap }),
70
+ [orientation, autoHide, centered, padding, thin, snap],
71
+ );
68
72
 
69
73
  return (
70
74
  <ScrollAreaProvider {...options}>
@@ -84,20 +88,33 @@ ScrollAreaRoot.displayName = SCROLLAREA_ROOT_NAME;
84
88
 
85
89
  const SCROLLAREA_VIEWPORT_NAME = 'ScrollArea.Viewport';
86
90
 
87
- type ScrollAreaViewportProps = ThemedClassName<HTMLAttributes<HTMLDivElement>>;
88
-
89
- const ScrollAreaViewport = forwardRef<HTMLDivElement, ScrollAreaViewportProps>(
90
- ({ classNames, children, ...props }, forwardedRef) => {
91
- const { tx } = useThemeContext();
92
- const options = useScrollAreaContext(SCROLLAREA_VIEWPORT_NAME);
93
-
94
- return (
95
- <div {...props} className={tx('scrollArea.viewport', options, classNames)} ref={forwardedRef}>
96
- {children}
97
- </div>
98
- );
99
- },
100
- );
91
+ type ScrollAreaViewportProps = SlottableProps;
92
+
93
+ const ScrollAreaViewport = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
94
+ const { tx } = useThemeContext();
95
+ const options = useScrollAreaContext(SCROLLAREA_VIEWPORT_NAME);
96
+ const density = options.thin ? scrollbar.md : scrollbar.lg;
97
+ const { className, ...rest } = composableProps(props);
98
+ const { style, ...restWithoutStyle } = rest as { style?: CSSProperties; [key: string]: any };
99
+ const Comp = asChild ? Slot : Primitive.div;
100
+
101
+ return (
102
+ <Comp
103
+ {...restWithoutStyle}
104
+ style={
105
+ {
106
+ '--scroll-width': `${density.size}px`,
107
+ '--scroll-padding': `${density.padding}px`,
108
+ ...style,
109
+ } as CSSProperties
110
+ }
111
+ className={tx('scrollArea.viewport', options, className)}
112
+ ref={forwardedRef}
113
+ >
114
+ {children}
115
+ </Comp>
116
+ );
117
+ });
101
118
 
102
119
  ScrollAreaViewport.displayName = SCROLLAREA_VIEWPORT_NAME;
103
120
 
@@ -3,3 +3,4 @@
3
3
  //
4
4
 
5
5
  export * from './ScrollArea';
6
+ export * from './scrollbar';
@@ -0,0 +1,21 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ /**
6
+ * Scrollbar sizing presets keyed by density tier.
7
+ */
8
+ export const scrollbar = {
9
+ sm: {
10
+ size: 2,
11
+ padding: 2,
12
+ },
13
+ md: {
14
+ size: 4,
15
+ padding: 4,
16
+ },
17
+ lg: {
18
+ size: 8,
19
+ padding: 8,
20
+ },
21
+ };
@@ -5,23 +5,22 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React, { useEffect, useRef, useState } from 'react';
7
7
 
8
- import { faker } from '@dxos/random';
8
+ import { random } from '@dxos/random';
9
9
 
10
- import { Panel } from '../../primitives';
11
10
  import { withLayout, withTheme } from '../../testing';
12
11
  import { Button } from '../Button';
12
+ import { Panel } from '../Panel';
13
13
  import { Toolbar } from '../Toolbar';
14
-
15
14
  import { ScrollContainer, type ScrollContainerRootProps, type ScrollController } from './ScrollContainer';
16
15
 
17
- type StoryProps = ScrollContainerRootProps & { running?: boolean; initialLines?: number };
16
+ type DefaultStoryProps = ScrollContainerRootProps & { running?: boolean; initialLines?: number };
18
17
 
19
- const DefaultStory = ({ initialLines = 0, running: runningProp, ...props }: StoryProps) => {
18
+ const DefaultStory = ({ initialLines = 0, running: runningProp, ...props }: DefaultStoryProps) => {
20
19
  const [lines, setLines] = useState<string[]>([]);
21
20
  const [running, setRunning] = useState(runningProp);
22
21
  const scroller = useRef<ScrollController>(null);
23
22
  useEffect(() => {
24
- setLines(Array.from({ length: initialLines }, () => faker.lorem.paragraph()));
23
+ setLines(Array.from({ length: initialLines }, () => random.lorem.paragraph()));
25
24
  }, [initialLines]);
26
25
  useEffect(() => {
27
26
  if (!running) {
@@ -29,14 +28,14 @@ const DefaultStory = ({ initialLines = 0, running: runningProp, ...props }: Stor
29
28
  }
30
29
 
31
30
  const i = setInterval(() => {
32
- setLines((lines) => [...lines, faker.lorem.paragraph()]);
31
+ setLines((lines) => [...lines, random.lorem.paragraph()]);
33
32
  }, 500);
34
33
 
35
34
  return () => clearInterval(i);
36
35
  }, [running]);
37
36
 
38
37
  return (
39
- <Panel.Root className='dx-article'>
38
+ <Panel.Root className='dx-document'>
40
39
  <Panel.Toolbar asChild>
41
40
  <Toolbar.Root>
42
41
  <Button onClick={() => setRunning((running) => !running)}>{running ? 'Stop' : 'Start'}</Button>
@@ -45,16 +44,19 @@ const DefaultStory = ({ initialLines = 0, running: runningProp, ...props }: Stor
45
44
  <div className='px-1'>{lines.length}</div>
46
45
  </Toolbar.Root>
47
46
  </Panel.Toolbar>
48
- <Panel.Content asChild>
47
+ <Panel.Content>
49
48
  <ScrollContainer.Root {...props} ref={scroller}>
50
- <ScrollContainer.Viewport>
51
- {lines.map((line, index) => (
52
- <div key={index} className='p-2 text-description'>
53
- {line}
54
- </div>
55
- ))}
56
- </ScrollContainer.Viewport>
57
- <ScrollContainer.ScrollDownButton />
49
+ <ScrollContainer.Content>
50
+ <ScrollContainer.Viewport>
51
+ {lines.map((line, index) => (
52
+ <div key={index} className='p-2 text-description'>
53
+ {line}
54
+ </div>
55
+ ))}
56
+ </ScrollContainer.Viewport>
57
+ <ScrollContainer.ScrollDownButton />
58
+ <ScrollContainer.Fade />
59
+ </ScrollContainer.Content>
58
60
  </ScrollContainer.Root>
59
61
  </Panel.Content>
60
62
  </Panel.Root>
@@ -75,7 +77,7 @@ type Story = StoryObj<typeof meta>;
75
77
  export const Default: Story = {
76
78
  args: {
77
79
  pin: true,
78
- fade: true,
80
+
79
81
  running: true,
80
82
  },
81
83
  };
@@ -83,7 +85,7 @@ export const Default: Story = {
83
85
  export const Large: Story = {
84
86
  args: {
85
87
  pin: true,
86
- fade: true,
88
+
87
89
  initialLines: 100,
88
90
  },
89
91
  };