@dxos/react-ui 0.8.4-main.72ec0f3 → 0.8.4-main.7996785055

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 (365) hide show
  1. package/dist/lib/browser/chunk-LUPEFGHJ.mjs +776 -0
  2. package/dist/lib/browser/chunk-LUPEFGHJ.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +4097 -68
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing/index.mjs +74 -63
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/chunk-EQOBFLZC.mjs +778 -0
  9. package/dist/lib/node-esm/chunk-EQOBFLZC.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +4097 -68
  11. package/dist/lib/node-esm/index.mjs.map +4 -4
  12. package/dist/lib/node-esm/meta.json +1 -1
  13. package/dist/lib/node-esm/testing/index.mjs +74 -63
  14. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  15. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  16. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  17. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  18. package/dist/types/src/components/Button/Button.d.ts +3 -3
  19. package/dist/types/src/components/Button/Button.d.ts.map +1 -1
  20. package/dist/types/src/components/Button/IconButton.d.ts +2 -1
  21. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
  22. package/dist/types/src/components/Button/Toggle.d.ts +2 -2
  23. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -1
  24. package/dist/types/src/components/Button/ToggleGroup.d.ts +10 -10
  25. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -1
  26. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +4 -4
  27. package/dist/types/src/components/Card/Card.d.ts +145 -0
  28. package/dist/types/src/components/Card/Card.d.ts.map +1 -0
  29. package/dist/types/src/components/Card/Card.stories.d.ts +21 -0
  30. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -0
  31. package/dist/types/src/components/Card/index.d.ts +2 -0
  32. package/dist/types/src/components/Card/index.d.ts.map +1 -0
  33. package/dist/types/src/components/Clipboard/index.d.ts +10 -1
  34. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  35. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts +1 -1
  36. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  37. package/dist/types/src/components/Dialog/AlertDialog.d.ts +41 -19
  38. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
  39. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -1
  40. package/dist/types/src/components/Dialog/Dialog.d.ts +56 -21
  41. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  42. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +10 -10
  43. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
  44. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
  45. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  46. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts +11 -0
  47. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -0
  48. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts +7 -0
  49. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -0
  50. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +8 -0
  51. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -0
  52. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts +9 -0
  53. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -0
  54. package/dist/types/src/components/ErrorFallback/index.d.ts +5 -0
  55. package/dist/types/src/components/ErrorFallback/index.d.ts.map +1 -0
  56. package/dist/types/src/components/Focus/Focus.d.ts +44 -0
  57. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -0
  58. package/dist/types/src/components/Focus/Focus.stories.d.ts +9 -0
  59. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -0
  60. package/dist/types/src/components/Focus/index.d.ts +2 -0
  61. package/dist/types/src/components/Focus/index.d.ts.map +1 -0
  62. package/dist/types/src/components/Icon/Icon.d.ts +4 -1
  63. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  64. package/dist/types/src/components/Icon/Icon.stories.d.ts +11 -3
  65. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -1
  66. package/dist/types/src/components/Image/Image.d.ts +14 -0
  67. package/dist/types/src/components/Image/Image.d.ts.map +1 -0
  68. package/dist/types/src/components/Image/Image.stories.d.ts +33 -0
  69. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -0
  70. package/dist/types/src/components/Image/index.d.ts +2 -0
  71. package/dist/types/src/components/Image/index.d.ts.map +1 -0
  72. package/dist/types/src/components/Input/Input.d.ts +7 -7
  73. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  74. package/dist/types/src/components/Input/Input.stories.d.ts +8 -8
  75. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  76. package/dist/types/src/components/List/List.d.ts +10 -4
  77. package/dist/types/src/components/List/List.d.ts.map +1 -1
  78. package/dist/types/src/components/List/List.stories.d.ts +8 -2
  79. package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
  80. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
  81. package/dist/types/src/components/Main/Main.d.ts +9 -10
  82. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  83. package/dist/types/src/components/Main/Main.stories.d.ts +0 -3
  84. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  85. package/dist/types/src/components/{Menus → Menu}/ContextMenu.d.ts +6 -6
  86. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -0
  87. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -0
  88. package/dist/types/src/components/Menu/DropdownMenu.d.ts +113 -0
  89. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
  90. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +28 -0
  91. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
  92. package/dist/types/src/components/Menu/index.d.ts.map +1 -0
  93. package/dist/types/src/components/Message/Message.d.ts +1 -1
  94. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  95. package/dist/types/src/components/Message/Message.stories.d.ts +5 -6
  96. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  97. package/dist/types/src/components/Popover/Popover.d.ts +33 -24
  98. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  99. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +32 -24
  100. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  101. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +65 -8
  102. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  103. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +27 -9
  104. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  105. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +8 -3
  106. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
  107. package/dist/types/src/components/Select/Select.d.ts +9 -9
  108. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  109. package/dist/types/src/components/Select/Select.stories.d.ts +2 -2
  110. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  111. package/dist/types/src/components/Separator/Separator.d.ts +4 -4
  112. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  113. package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
  114. package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  115. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
  116. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  117. package/dist/types/src/components/Skeleton/index.d.ts +2 -0
  118. package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
  119. package/dist/types/src/components/Splitter/Splitter.d.ts +37 -0
  120. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
  121. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
  122. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
  123. package/dist/types/src/components/Splitter/index.d.ts +2 -0
  124. package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
  125. package/dist/types/src/components/Status/Status.d.ts +3 -4
  126. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  127. package/dist/types/src/components/Status/Status.stories.d.ts +4 -2
  128. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  129. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  130. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  131. package/dist/types/src/components/Tag/Tag.stories.d.ts +0 -5
  132. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  133. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +3 -3
  134. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  135. package/dist/types/src/components/{Menus/DropdownMenu.stories.d.ts → ThemeProvider/ThemeProvider.stories.d.ts} +2 -5
  136. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  137. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +1 -8
  138. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  139. package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
  140. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  141. package/dist/types/src/components/Toast/Toast.d.ts +19 -19
  142. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  143. package/dist/types/src/components/Toolbar/Toolbar.d.ts +43 -17
  144. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  145. package/dist/types/src/components/Tooltip/Tooltip.d.ts +9 -9
  146. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  147. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +2 -2
  148. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  149. package/dist/types/src/components/index.d.ts +10 -5
  150. package/dist/types/src/components/index.d.ts.map +1 -1
  151. package/dist/types/src/exemplars/generics.stories.d.ts +23 -0
  152. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
  153. package/dist/types/src/exemplars/slot.stories.d.ts +15 -0
  154. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
  155. package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
  156. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
  157. package/dist/types/src/exemplars/virtualizer.stories.d.ts +11 -0
  158. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -0
  159. package/dist/types/src/hooks/index.d.ts +1 -0
  160. package/dist/types/src/hooks/index.d.ts.map +1 -1
  161. package/dist/types/src/hooks/useDensityContext.d.ts +2 -2
  162. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  163. package/dist/types/src/hooks/useElevationContext.d.ts +1 -1
  164. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  165. package/dist/types/src/index.d.ts +2 -1
  166. package/dist/types/src/index.d.ts.map +1 -1
  167. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  168. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  169. package/dist/types/src/primitives/Column/Column.d.ts +51 -0
  170. package/dist/types/src/primitives/Column/Column.d.ts.map +1 -0
  171. package/dist/types/src/primitives/Column/Column.stories.d.ts +25 -0
  172. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -0
  173. package/dist/types/src/primitives/Column/index.d.ts +2 -0
  174. package/dist/types/src/primitives/Column/index.d.ts.map +1 -0
  175. package/dist/types/src/primitives/Container/Container.d.ts +11 -0
  176. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
  177. package/dist/types/src/primitives/Container/Container.stories.d.ts +6 -0
  178. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
  179. package/dist/types/src/primitives/Container/index.d.ts +2 -0
  180. package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
  181. package/dist/types/src/primitives/Flex/Flex.d.ts +15 -0
  182. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
  183. package/dist/types/src/primitives/Flex/Flex.stories.d.ts +8 -0
  184. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -0
  185. package/dist/types/src/primitives/Flex/index.d.ts +2 -0
  186. package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
  187. package/dist/types/src/primitives/Grid/Grid.d.ts +14 -0
  188. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -0
  189. package/dist/types/src/primitives/Grid/Grid.stories.d.ts +8 -0
  190. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -0
  191. package/dist/types/src/primitives/Grid/index.d.ts +2 -0
  192. package/dist/types/src/primitives/Grid/index.d.ts.map +1 -0
  193. package/dist/types/src/primitives/Panel/Panel.d.ts +46 -0
  194. package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -0
  195. package/dist/types/src/primitives/Panel/Panel.stories.d.ts +6 -0
  196. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -0
  197. package/dist/types/src/primitives/Panel/index.d.ts +2 -0
  198. package/dist/types/src/primitives/Panel/index.d.ts.map +1 -0
  199. package/dist/types/src/primitives/index.d.ts +6 -0
  200. package/dist/types/src/primitives/index.d.ts.map +1 -0
  201. package/dist/types/src/testing/Loading.d.ts +9 -0
  202. package/dist/types/src/testing/Loading.d.ts.map +1 -0
  203. package/dist/types/src/testing/decorators/withLayout.d.ts +3 -3
  204. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
  205. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +1 -1
  206. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
  207. package/dist/types/src/testing/decorators/withTheme.d.ts +3 -2
  208. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  209. package/dist/types/src/testing/index.d.ts +1 -0
  210. package/dist/types/src/testing/index.d.ts.map +1 -1
  211. package/dist/types/src/translations.d.ts +11 -0
  212. package/dist/types/src/translations.d.ts.map +1 -0
  213. package/dist/types/src/util/index.d.ts +1 -2
  214. package/dist/types/src/util/index.d.ts.map +1 -1
  215. package/dist/types/src/util/usePx.d.ts.map +1 -1
  216. package/dist/types/tsconfig.tsbuildinfo +1 -1
  217. package/package.json +40 -31
  218. package/src/components/Avatars/Avatar.stories.tsx +7 -8
  219. package/src/components/Avatars/Avatar.tsx +6 -13
  220. package/src/components/Avatars/AvatarGroup.stories.tsx +2 -2
  221. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +3 -3
  222. package/src/components/Breadcrumb/Breadcrumb.tsx +11 -37
  223. package/src/components/Button/Button.stories.tsx +3 -3
  224. package/src/components/Button/Button.tsx +12 -26
  225. package/src/components/Button/IconButton.stories.tsx +4 -4
  226. package/src/components/Button/IconButton.tsx +9 -5
  227. package/src/components/Button/Toggle.stories.tsx +2 -2
  228. package/src/components/Button/Toggle.tsx +4 -4
  229. package/src/components/Button/ToggleGroup.stories.tsx +2 -2
  230. package/src/components/Button/ToggleGroup.tsx +12 -16
  231. package/src/components/Card/Card.stories.tsx +151 -0
  232. package/src/components/Card/Card.tsx +394 -0
  233. package/src/components/Card/index.ts +5 -0
  234. package/src/components/Clipboard/CopyButton.tsx +6 -6
  235. package/src/components/DensityProvider/DensityProvider.tsx +1 -1
  236. package/src/components/Dialog/AlertDialog.stories.tsx +16 -16
  237. package/src/components/Dialog/AlertDialog.tsx +121 -82
  238. package/src/components/Dialog/Dialog.stories.tsx +139 -28
  239. package/src/components/Dialog/Dialog.tsx +192 -71
  240. package/src/components/ElevationProvider/ElevationProvider.tsx +1 -1
  241. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +50 -0
  242. package/src/components/ErrorFallback/ErrorFallback.tsx +70 -0
  243. package/src/components/ErrorFallback/ErrorStack.tsx +80 -0
  244. package/src/components/ErrorFallback/ThrowError.tsx +37 -0
  245. package/src/components/ErrorFallback/index.ts +9 -0
  246. package/src/components/Focus/AUDIT.md +43 -0
  247. package/src/components/Focus/Focus.stories.tsx +230 -0
  248. package/src/components/Focus/Focus.tsx +201 -0
  249. package/src/components/Focus/index.ts +5 -0
  250. package/src/components/Icon/Icon.stories.tsx +45 -14
  251. package/src/components/Icon/Icon.tsx +7 -3
  252. package/src/components/Image/Image.stories.tsx +86 -0
  253. package/src/components/Image/Image.tsx +223 -0
  254. package/src/components/Image/index.ts +5 -0
  255. package/src/components/Input/Input.stories.tsx +21 -40
  256. package/src/components/Input/Input.tsx +36 -72
  257. package/src/components/Link/Link.stories.tsx +2 -2
  258. package/src/components/Link/Link.tsx +2 -2
  259. package/src/components/List/List.stories.tsx +30 -33
  260. package/src/components/List/List.tsx +16 -19
  261. package/src/components/List/ListDropIndicator.tsx +7 -7
  262. package/src/components/List/Tree.stories.tsx +5 -5
  263. package/src/components/List/TreeDropIndicator.tsx +6 -6
  264. package/src/components/List/Treegrid.stories.tsx +3 -3
  265. package/src/components/List/Treegrid.tsx +10 -15
  266. package/src/components/Main/Main.stories.tsx +41 -23
  267. package/src/components/Main/Main.tsx +139 -82
  268. package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +2 -2
  269. package/src/components/{Menus → Menu}/ContextMenu.tsx +9 -33
  270. package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +2 -2
  271. package/src/components/{Menus → Menu}/DropdownMenu.tsx +119 -109
  272. package/src/components/Message/Message.stories.tsx +28 -13
  273. package/src/components/Message/Message.tsx +43 -34
  274. package/src/components/Popover/Popover.stories.tsx +4 -4
  275. package/src/components/Popover/Popover.tsx +97 -92
  276. package/src/components/ScrollArea/ScrollArea.stories.tsx +222 -32
  277. package/src/components/ScrollArea/ScrollArea.tsx +97 -79
  278. package/src/components/ScrollArea/index.ts +1 -1
  279. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +43 -22
  280. package/src/components/ScrollContainer/ScrollContainer.tsx +193 -104
  281. package/src/components/Select/Select.stories.tsx +4 -4
  282. package/src/components/Select/Select.tsx +11 -27
  283. package/src/components/Separator/Separator.tsx +5 -8
  284. package/src/components/Skeleton/Skeleton.stories.tsx +52 -0
  285. package/src/components/Skeleton/Skeleton.tsx +26 -0
  286. package/src/components/Skeleton/index.ts +5 -0
  287. package/src/components/Splitter/Splitter.stories.tsx +83 -0
  288. package/src/components/Splitter/Splitter.tsx +140 -0
  289. package/src/components/Splitter/index.ts +5 -0
  290. package/src/components/Status/Status.stories.tsx +21 -17
  291. package/src/components/Status/Status.tsx +10 -7
  292. package/src/components/Tag/Tag.stories.tsx +6 -11
  293. package/src/components/Tag/Tag.tsx +3 -8
  294. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +32 -0
  295. package/src/components/ThemeProvider/ThemeProvider.tsx +10 -9
  296. package/src/components/ThemeProvider/TranslationsProvider.tsx +1 -16
  297. package/src/components/ThemeProvider/index.ts +3 -3
  298. package/src/components/Toast/Toast.stories.tsx +2 -2
  299. package/src/components/Toast/Toast.tsx +22 -41
  300. package/src/components/Toolbar/Toolbar.stories.tsx +2 -2
  301. package/src/components/Toolbar/Toolbar.tsx +183 -22
  302. package/src/components/Tooltip/Tooltip.stories.tsx +16 -14
  303. package/src/components/Tooltip/Tooltip.tsx +40 -38
  304. package/src/components/index.ts +11 -6
  305. package/src/exemplars/generics.stories.tsx +41 -0
  306. package/src/exemplars/slot.stories.tsx +117 -0
  307. package/src/exemplars/tabster.stories.tsx +127 -0
  308. package/src/exemplars/virtualizer.stories.tsx +137 -0
  309. package/src/hooks/index.ts +1 -0
  310. package/src/hooks/useDensityContext.ts +3 -3
  311. package/src/hooks/useElevationContext.ts +1 -1
  312. package/src/index.ts +2 -1
  313. package/src/playground/Controls.stories.tsx +3 -10
  314. package/src/playground/Custom.stories.tsx +11 -21
  315. package/src/playground/Typography.stories.tsx +3 -3
  316. package/src/primitives/Column/AUDIT.md +354 -0
  317. package/src/primitives/Column/Column.stories.tsx +183 -0
  318. package/src/primitives/Column/Column.tsx +169 -0
  319. package/src/primitives/Column/index.ts +5 -0
  320. package/src/primitives/Container/Container.stories.tsx +30 -0
  321. package/src/primitives/Container/Container.tsx +19 -0
  322. package/src/primitives/Container/index.ts +5 -0
  323. package/src/primitives/Flex/Flex.stories.tsx +58 -0
  324. package/src/primitives/Flex/Flex.tsx +24 -0
  325. package/src/primitives/Flex/index.ts +5 -0
  326. package/src/primitives/Grid/Grid.stories.tsx +57 -0
  327. package/src/primitives/Grid/Grid.tsx +30 -0
  328. package/src/primitives/Grid/index.ts +5 -0
  329. package/src/primitives/Panel/Panel.stories.tsx +67 -0
  330. package/src/primitives/Panel/Panel.tsx +114 -0
  331. package/src/primitives/Panel/index.ts +5 -0
  332. package/src/primitives/index.ts +9 -0
  333. package/src/testing/Loading.tsx +26 -0
  334. package/src/testing/decorators/withLayout.tsx +39 -18
  335. package/src/testing/decorators/withLayoutVariants.tsx +20 -23
  336. package/src/testing/decorators/withTheme.tsx +26 -20
  337. package/src/testing/index.ts +2 -0
  338. package/src/translations.ts +19 -0
  339. package/src/util/index.ts +2 -2
  340. package/src/util/usePx.ts +1 -0
  341. package/dist/lib/browser/chunk-53MI2QCM.mjs +0 -4707
  342. package/dist/lib/browser/chunk-53MI2QCM.mjs.map +0 -7
  343. package/dist/lib/node-esm/chunk-ID67AFFF.mjs +0 -4709
  344. package/dist/lib/node-esm/chunk-ID67AFFF.mjs.map +0 -7
  345. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +0 -15
  346. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +0 -1
  347. package/dist/types/src/components/AnchoredOverflow/index.d.ts +0 -2
  348. package/dist/types/src/components/AnchoredOverflow/index.d.ts.map +0 -1
  349. package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
  350. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +0 -1
  351. package/dist/types/src/components/Menus/DropdownMenu.d.ts +0 -113
  352. package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
  353. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
  354. package/dist/types/src/components/Menus/index.d.ts.map +0 -1
  355. package/dist/types/src/util/ThemedClassName.d.ts +0 -5
  356. package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
  357. package/dist/types/src/util/domino.d.ts +0 -18
  358. package/dist/types/src/util/domino.d.ts.map +0 -1
  359. package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +0 -59
  360. package/src/components/AnchoredOverflow/index.ts +0 -5
  361. package/src/util/ThemedClassName.ts +0 -7
  362. package/src/util/domino.ts +0 -53
  363. /package/dist/types/src/components/{Menus → Menu}/ContextMenu.stories.d.ts +0 -0
  364. /package/dist/types/src/components/{Menus → Menu}/index.d.ts +0 -0
  365. /package/src/components/{Menus → Menu}/index.ts +0 -0
@@ -1,51 +1,241 @@
1
1
  //
2
- // Copyright 2023 DXOS.org
2
+ // Copyright 2026 DXOS.org
3
3
  //
4
4
 
5
- import { type Meta, type StoryObj } from '@storybook/react-vite';
6
- import React, { type PropsWithChildren } from 'react';
5
+ import React, { PropsWithChildren, useMemo } from 'react';
7
6
 
8
7
  import { faker } from '@dxos/random';
9
- import { activeSurface, surfaceShadow } from '@dxos/react-ui-theme';
8
+ import { mx } from '@dxos/ui-theme';
10
9
 
11
- import { withTheme } from '../../testing';
10
+ import { withLayout, withTheme } from '../../testing';
12
11
 
13
12
  import { ScrollArea } from './ScrollArea';
13
+ import { Column } from '../../primitives';
14
+ import { Input } from '../Input';
15
+ import { ThemedClassName } from '@dxos/ui-types';
14
16
 
15
- faker.seed(1234);
17
+ faker.seed(123);
16
18
 
17
- const DefaultStory = ({ children }: PropsWithChildren<{}>) => {
19
+ export default {
20
+ title: 'ui/react-ui-core/components/ScrollArea',
21
+ component: ScrollArea,
22
+ decorators: [withTheme()],
23
+ parameters: {
24
+ layout: 'centered',
25
+ },
26
+ };
27
+
28
+ const List = ({ items = 50 }: { items?: number }) => (
29
+ <div>
30
+ {Array.from({ length: items }).map((_, index) => (
31
+ <div key={index} className='px-1 cursor-pointer hover:bg-hover-surface'>
32
+ Item {index + 1}
33
+ </div>
34
+ ))}
35
+ </div>
36
+ );
37
+
38
+ const Row = ({ items = 50 }: { items?: number }) => (
39
+ <div className='flex gap-2 w-max'>
40
+ {Array.from({ length: items }).map((_, index) => (
41
+ <div
42
+ key={index}
43
+ className='shrink-0 h-20 w-20 cursor-pointer border border-separator rounded-md flex items-center justify-center hover:bg-hover-surface'
44
+ >
45
+ {index + 1}
46
+ </div>
47
+ ))}
48
+ </div>
49
+ );
50
+
51
+ const Container = ({ classNames, children }: ThemedClassName<PropsWithChildren>) => {
18
52
  return (
19
- <ScrollArea.Root
20
- classNames={['is-[300px] bs-[400px] rounded', activeSurface, surfaceShadow({ elevation: 'positioned' })]}
21
- >
22
- <ScrollArea.Viewport classNames='rounded p-4'>
23
- <p>{children}</p>
24
- </ScrollArea.Viewport>
25
- <ScrollArea.Scrollbar orientation='horizontal'>
26
- <ScrollArea.Thumb />
27
- </ScrollArea.Scrollbar>
28
- <ScrollArea.Scrollbar orientation='vertical'>
29
- <ScrollArea.Thumb />
30
- </ScrollArea.Scrollbar>
31
- <ScrollArea.Corner />
32
- </ScrollArea.Root>
53
+ <div role='none' className={mx('border border-separator rounded-md overflow-hidden', classNames)}>
54
+ {children}
55
+ </div>
33
56
  );
34
57
  };
35
58
 
36
- const meta = {
37
- title: 'ui/react-ui-core/ScrollArea',
38
- component: ScrollArea as any,
39
- render: DefaultStory,
40
- decorators: [withTheme],
41
- } satisfies Meta<typeof DefaultStory>;
59
+ export const Vertical = {
60
+ render: () => (
61
+ <Container classNames='h-72 w-48'>
62
+ <ScrollArea.Root orientation='vertical'>
63
+ <ScrollArea.Viewport>
64
+ <List />
65
+ </ScrollArea.Viewport>
66
+ </ScrollArea.Root>
67
+ </Container>
68
+ ),
69
+ };
70
+
71
+ export const VerticalThin = {
72
+ render: () => (
73
+ <Container classNames='h-72 w-48'>
74
+ <ScrollArea.Root orientation='vertical' thin>
75
+ <ScrollArea.Viewport>
76
+ <List />
77
+ </ScrollArea.Viewport>
78
+ </ScrollArea.Root>
79
+ </Container>
80
+ ),
81
+ };
42
82
 
43
- export default meta;
83
+ export const VerticalPadded = {
84
+ render: () => (
85
+ <Container classNames='h-72 w-48'>
86
+ <ScrollArea.Root orientation='vertical' centered padding thin>
87
+ <ScrollArea.Viewport>
88
+ <List />
89
+ </ScrollArea.Viewport>
90
+ </ScrollArea.Root>
91
+ </Container>
92
+ ),
93
+ };
44
94
 
45
- type Story = StoryObj<typeof meta>;
95
+ export const VerticalColumn = {
96
+ render: () => (
97
+ <Container classNames='h-72 w-48'>
98
+ <Column.Root gutter='sm' classNames='h-full overflow-hidden'>
99
+ <ScrollArea.Root orientation='vertical' padding thin>
100
+ <ScrollArea.Viewport classNames='py-2'>
101
+ <Input.Root>
102
+ <Input.TextInput classNames='p-1' />
103
+ </Input.Root>
104
+ <List />
105
+ </ScrollArea.Viewport>
106
+ </ScrollArea.Root>
107
+ </Column.Root>
108
+ </Container>
109
+ ),
110
+ };
46
111
 
47
- export const Default: Story = {
48
- args: {
49
- children: faker.lorem.paragraphs(5),
112
+ export const Horizontal = {
113
+ render: () => (
114
+ <Container classNames='w-96'>
115
+ <ScrollArea.Root orientation='horizontal'>
116
+ <ScrollArea.Viewport>
117
+ <Row />
118
+ </ScrollArea.Viewport>
119
+ </ScrollArea.Root>
120
+ </Container>
121
+ ),
122
+ };
123
+
124
+ export const HorizontalThin = {
125
+ render: () => (
126
+ <Container classNames='w-96'>
127
+ <ScrollArea.Root orientation='horizontal' thin>
128
+ <ScrollArea.Viewport>
129
+ <Row />
130
+ </ScrollArea.Viewport>
131
+ </ScrollArea.Root>
132
+ </Container>
133
+ ),
134
+ };
135
+
136
+ export const Both = {
137
+ render: () => (
138
+ <Container classNames='w-96 h-96'>
139
+ <ScrollArea.Root orientation='all'>
140
+ <ScrollArea.Viewport>
141
+ <div className='flex flex-col gap-2'>
142
+ {Array.from({ length: 50 }).map((_, rowIndex) => (
143
+ <div key={rowIndex} className='flex gap-2'>
144
+ {Array.from({ length: 50 }).map((_, colIndex) => (
145
+ <div
146
+ key={colIndex}
147
+ className='shrink-0 h-20 w-20 flex items-center justify-center text-sm border border-separator font-mono'
148
+ >
149
+ [{colIndex}:{rowIndex}]
150
+ </div>
151
+ ))}
152
+ </div>
153
+ ))}
154
+ </div>
155
+ </ScrollArea.Viewport>
156
+ </ScrollArea.Root>
157
+ </Container>
158
+ ),
159
+ };
160
+
161
+ export const Fullscreen = {
162
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
163
+ render: () => (
164
+ <ScrollArea.Root orientation='all' thin>
165
+ <ScrollArea.Viewport>
166
+ <div className='flex flex-col gap-2'>
167
+ {Array.from({ length: 50 }).map((_, rowIndex) => (
168
+ <div key={rowIndex} className='flex gap-2'>
169
+ {Array.from({ length: 50 }).map((_, colIndex) => (
170
+ <div
171
+ key={colIndex}
172
+ className='shrink-0 h-20 w-20 flex items-center justify-center text-sm border border-separator font-mono'
173
+ >
174
+ [{colIndex}:{rowIndex}]
175
+ </div>
176
+ ))}
177
+ </div>
178
+ ))}
179
+ </div>
180
+ </ScrollArea.Viewport>
181
+ </ScrollArea.Root>
182
+ ),
183
+ };
184
+
185
+ export const NestedScrollAreas = {
186
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
187
+ render: () => {
188
+ const columns = useMemo(
189
+ () =>
190
+ Array.from({ length: 8 }).map((_, index) => ({
191
+ id: String(index),
192
+ count: faker.number.int({ min: 5, max: 20 }),
193
+ })),
194
+ [],
195
+ );
196
+
197
+ return (
198
+ <ScrollArea.Root orientation='horizontal' thin padding>
199
+ <ScrollArea.Viewport classNames='gap-4'>
200
+ {columns.map((column) => (
201
+ <section
202
+ key={column.id}
203
+ className='shrink-0 h-full w-[16rem] grid grid-rows-[min-content_1fr_min-content] border border-separator'
204
+ >
205
+ <header className='flex shrink-0 p-2 border-b border-separator'>Column {column.id}</header>
206
+ <ScrollArea.Root thin orientation='vertical'>
207
+ <ScrollArea.Viewport classNames='py-2 px-2 gap-2'>
208
+ {Array.from({ length: column.count }, (_, i) => (
209
+ <div key={i} role='listitem' className={`shrink-0 p-2 text-sm border border-separator rounded-xs`}>
210
+ Item {i + 1}
211
+ </div>
212
+ ))}
213
+ </ScrollArea.Viewport>
214
+ </ScrollArea.Root>
215
+ <footer className={`p-2 text-subdued border-t border-separator`}>{column.count}</footer>
216
+ </section>
217
+ ))}
218
+ </ScrollArea.Viewport>
219
+ </ScrollArea.Root>
220
+ );
50
221
  },
51
222
  };
223
+
224
+ export const NativeScroll = {
225
+ render: () => (
226
+ <div className='group h-48 w-48 border border-separator'>
227
+ <div
228
+ className={mx(
229
+ 'group h-full w-full overflow-y-scroll',
230
+ '[&::-webkit-scrollbar]:w-3',
231
+ '[&::-webkit-scrollbar-thumb]:rounded-none',
232
+ '[&::-webkit-scrollbar-track]:bg-scrollbar-track',
233
+ '[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumbSubdued',
234
+ 'group-hover:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb',
235
+ )}
236
+ >
237
+ <List />
238
+ </div>
239
+ </div>
240
+ ),
241
+ };
@@ -1,111 +1,129 @@
1
1
  //
2
- // Copyright 2023 DXOS.org
2
+ // Copyright 2026 DXOS.org
3
3
  //
4
4
 
5
- import {
6
- Corner as ScrollAreaPrimitiveCorner,
7
- type ScrollAreaCornerProps as ScrollAreaPrimitiveCornerProps,
8
- Root as ScrollAreaPrimitiveRoot,
9
- type ScrollAreaProps as ScrollAreaPrimitiveRootProps,
10
- Scrollbar as ScrollAreaPrimitiveScrollbar,
11
- type ScrollAreaScrollbarProps as ScrollAreaPrimitiveScrollbarProps,
12
- Thumb as ScrollAreaPrimitiveThumb,
13
- type ScrollAreaThumbProps as ScrollAreaPrimitiveThumbProps,
14
- Viewport as ScrollAreaPrimitiveViewport,
15
- type ScrollAreaViewportProps as ScrollAreaPrimitiveViewportProps,
16
- } from '@radix-ui/react-scroll-area';
17
- import React, { forwardRef } from 'react';
5
+ import { createContext } from '@radix-ui/react-context';
6
+ import { Primitive } from '@radix-ui/react-primitive';
7
+ import { Slot } from '@radix-ui/react-slot';
8
+ import React, { CSSProperties, useMemo } from 'react';
9
+
10
+ import { composableProps, scrollbar, slottable } from '@dxos/ui-theme';
11
+ import { type AllowedAxis, type SlottableProps } from '@dxos/ui-types';
18
12
 
19
13
  import { useThemeContext } from '../../hooks';
20
- import { type ThemedClassName } from '../../util';
21
14
 
22
- type ScrollAreaVariant = 'coarse' | 'fine';
15
+ //
16
+ // Context
17
+ //
23
18
 
24
- type ScrollAreaRootProps = ThemedClassName<ScrollAreaPrimitiveRootProps>;
19
+ const SCROLLAREA_NAME = 'ScrollArea';
25
20
 
26
- /**
27
- * @deprecated
28
- */
29
- const ScrollAreaRoot = forwardRef<HTMLDivElement, ScrollAreaRootProps>(({ classNames, ...props }, forwardedRef) => {
30
- const { tx } = useThemeContext();
31
- return (
32
- <ScrollAreaPrimitiveRoot
33
- {...props}
34
- className={tx('scrollArea.root', 'scroll-area', {}, classNames)}
35
- ref={forwardedRef}
36
- />
37
- );
38
- });
21
+ type ScrollAreaContextType = {
22
+ /** Orientation of scrollbars. */
23
+ orientation: AllowedAxis;
24
+ /** Hide scrollbars when not scrolling. */
25
+ autoHide: boolean;
26
+ /** Apply padding to opposite side of scrollbar. */
27
+ centered?: boolean;
28
+ /** Apply padding. */
29
+ padding: boolean;
30
+ /** Use thin scrollbars. */
31
+ thin: boolean;
32
+ /** Enable snap scrolling. */
33
+ snap: boolean;
34
+ };
39
35
 
40
- type ScrollAreaViewportProps = ThemedClassName<ScrollAreaPrimitiveViewportProps>;
36
+ const [ScrollAreaProvider, useScrollAreaContext] = createContext<ScrollAreaContextType>(SCROLLAREA_NAME);
41
37
 
42
- const ScrollAreaViewport = forwardRef<HTMLDivElement, ScrollAreaViewportProps>(
43
- ({ classNames, ...props }, forwardedRef) => {
44
- const { tx } = useThemeContext();
45
- return (
46
- <ScrollAreaPrimitiveViewport
47
- {...props}
48
- className={tx('scrollArea.viewport', 'scroll-area', {}, classNames)}
49
- ref={forwardedRef}
50
- />
51
- );
52
- },
53
- );
38
+ //
39
+ // Root
40
+ //
41
+
42
+ const SCROLLAREA_ROOT_NAME = 'ScrollArea.Root';
54
43
 
55
- type ScrollAreaScrollbarProps = ThemedClassName<ScrollAreaPrimitiveScrollbarProps> & { variant?: ScrollAreaVariant };
44
+ type ScrollAreaRootProps = Partial<ScrollAreaContextType>;
56
45
 
57
- const ScrollAreaScrollbar = forwardRef<HTMLDivElement, ScrollAreaScrollbarProps>(
58
- ({ classNames, variant = 'fine', ...props }, forwardedRef) => {
46
+ /**
47
+ * ScrollArea provides native scrollbars with custom styling.
48
+ */
49
+ const ScrollAreaRoot = slottable<HTMLDivElement, ScrollAreaRootProps>(
50
+ (
51
+ {
52
+ children,
53
+ asChild,
54
+ orientation = 'vertical',
55
+ autoHide = true,
56
+ centered = false,
57
+ padding = false,
58
+ thin = false,
59
+ snap = false,
60
+ ...props
61
+ },
62
+ forwardedRef,
63
+ ) => {
59
64
  const { tx } = useThemeContext();
65
+ const { className, ...rest } = composableProps(props);
66
+ const Comp = asChild ? Slot : Primitive.div;
67
+ const options = useMemo(
68
+ () => ({ orientation, autoHide, centered, padding, thin, snap }),
69
+ [orientation, autoHide, centered, padding, thin, snap],
70
+ );
71
+
60
72
  return (
61
- <ScrollAreaPrimitiveScrollbar
62
- data-variant={variant}
63
- {...props}
64
- className={tx('scrollArea.scrollbar', 'scroll-area__scrollbar', {}, classNames)}
65
- ref={forwardedRef}
66
- />
73
+ <ScrollAreaProvider {...options}>
74
+ <Comp {...rest} className={tx('scrollArea.root', options, className)} ref={forwardedRef}>
75
+ {children}
76
+ </Comp>
77
+ </ScrollAreaProvider>
67
78
  );
68
79
  },
69
80
  );
70
81
 
71
- type ScrollAreaThumbProps = ThemedClassName<ScrollAreaPrimitiveThumbProps>;
82
+ ScrollAreaRoot.displayName = SCROLLAREA_ROOT_NAME;
72
83
 
73
- const ScrollAreaThumb = forwardRef<HTMLDivElement, ScrollAreaThumbProps>(({ classNames, ...props }, forwardedRef) => {
74
- const { tx } = useThemeContext();
75
- return (
76
- <ScrollAreaPrimitiveThumb
77
- {...props}
78
- className={tx('scrollArea.thumb', 'scroll-area__thumb', {}, classNames)}
79
- ref={forwardedRef}
80
- />
81
- );
82
- });
84
+ //
85
+ // Viewport
86
+ //
87
+
88
+ const SCROLLAREA_VIEWPORT_NAME = 'ScrollArea.Viewport';
83
89
 
84
- type ScrollAreaCornerProps = ThemedClassName<ScrollAreaPrimitiveCornerProps>;
90
+ type ScrollAreaViewportProps = SlottableProps;
85
91
 
86
- const ScrollAreaCorner = forwardRef<HTMLDivElement, ScrollAreaCornerProps>(({ classNames, ...props }, forwardedRef) => {
92
+ const ScrollAreaViewport = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
87
93
  const { tx } = useThemeContext();
94
+ const options = useScrollAreaContext(SCROLLAREA_VIEWPORT_NAME);
95
+ const density = options.thin ? scrollbar.thin : scrollbar.coarse;
96
+ const { className, ...rest } = composableProps(props);
97
+ const { style, ...restWithoutStyle } = rest as { style?: CSSProperties; [key: string]: any };
98
+ const Comp = asChild ? Slot : Primitive.div;
99
+
88
100
  return (
89
- <ScrollAreaPrimitiveCorner
90
- {...props}
91
- className={tx('scrollArea.corner', 'scroll-area__corner', {}, classNames)}
101
+ <Comp
102
+ {...restWithoutStyle}
103
+ style={
104
+ {
105
+ '--scroll-width': `${density.size}px`,
106
+ '--scroll-padding': `${density.padding}px`,
107
+ ...style,
108
+ } as CSSProperties
109
+ }
110
+ className={tx('scrollArea.viewport', options, className)}
92
111
  ref={forwardedRef}
93
- />
112
+ >
113
+ {children}
114
+ </Comp>
94
115
  );
95
116
  });
96
117
 
118
+ ScrollAreaViewport.displayName = SCROLLAREA_VIEWPORT_NAME;
119
+
120
+ //
121
+ // ScrollArea
122
+ //
123
+
97
124
  export const ScrollArea = {
98
125
  Root: ScrollAreaRoot,
99
126
  Viewport: ScrollAreaViewport,
100
- Scrollbar: ScrollAreaScrollbar,
101
- Thumb: ScrollAreaThumb,
102
- Corner: ScrollAreaCorner,
103
127
  };
104
128
 
105
- export type {
106
- ScrollAreaRootProps,
107
- ScrollAreaViewportProps,
108
- ScrollAreaScrollbarProps,
109
- ScrollAreaThumbProps,
110
- ScrollAreaCornerProps,
111
- };
129
+ export type { ScrollAreaRootProps, ScrollAreaViewportProps };
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright 2023 DXOS.org
2
+ // Copyright 2026 DXOS.org
3
3
  //
4
4
 
5
5
  export * from './ScrollArea';
@@ -7,16 +7,22 @@ import React, { useEffect, useRef, useState } from 'react';
7
7
 
8
8
  import { faker } from '@dxos/random';
9
9
 
10
+ import { Panel } from '../../primitives';
10
11
  import { withLayout, withTheme } from '../../testing';
11
12
  import { Button } from '../Button';
12
13
  import { Toolbar } from '../Toolbar';
13
14
 
14
15
  import { ScrollContainer, type ScrollContainerRootProps, type ScrollController } from './ScrollContainer';
15
16
 
16
- const DefaultStory = (props: ScrollContainerRootProps) => {
17
+ type DefaultStoryProps = ScrollContainerRootProps & { running?: boolean; initialLines?: number };
18
+
19
+ const DefaultStory = ({ initialLines = 0, running: runningProp, ...props }: DefaultStoryProps) => {
17
20
  const [lines, setLines] = useState<string[]>([]);
18
- const [running, setRunning] = useState(true);
21
+ const [running, setRunning] = useState(runningProp);
19
22
  const scroller = useRef<ScrollController>(null);
23
+ useEffect(() => {
24
+ setLines(Array.from({ length: initialLines }, () => faker.lorem.paragraph()));
25
+ }, [initialLines]);
20
26
  useEffect(() => {
21
27
  if (!running) {
22
28
  return;
@@ -30,31 +36,37 @@ const DefaultStory = (props: ScrollContainerRootProps) => {
30
36
  }, [running]);
31
37
 
32
38
  return (
33
- <div className='flex flex-col bs-full overflow-hidden'>
34
- <Toolbar.Root>
35
- <Button onClick={() => setRunning((running) => !running)}>{running ? 'Stop' : 'Start'}</Button>
36
- <Button onClick={() => scroller.current?.scrollToBottom()}>Scroll to bottom</Button>
37
- <div className='flex-1' />
38
- <div>{lines.length}</div>
39
- </Toolbar.Root>
40
- <ScrollContainer.Root {...props} ref={scroller}>
41
- <ScrollContainer.Viewport>
42
- {lines.map((line, index) => (
43
- <div key={index} className='p-2'>
44
- {line}
45
- </div>
46
- ))}
47
- </ScrollContainer.Viewport>
48
- </ScrollContainer.Root>
49
- </div>
39
+ <Panel.Root className='dx-document'>
40
+ <Panel.Toolbar asChild>
41
+ <Toolbar.Root>
42
+ <Button onClick={() => setRunning((running) => !running)}>{running ? 'Stop' : 'Start'}</Button>
43
+ <Button onClick={() => scroller.current?.scrollToBottom()}>Scroll to bottom</Button>
44
+ <Toolbar.Separator />
45
+ <div className='px-1'>{lines.length}</div>
46
+ </Toolbar.Root>
47
+ </Panel.Toolbar>
48
+ <Panel.Content>
49
+ <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 />
58
+ <ScrollContainer.Fade />
59
+ </ScrollContainer.Root>
60
+ </Panel.Content>
61
+ </Panel.Root>
50
62
  );
51
63
  };
52
64
 
53
65
  const meta = {
54
- title: 'ui/react-ui-core/ScrollContainer',
66
+ title: 'ui/react-ui-core/components/ScrollContainer',
55
67
  component: ScrollContainer.Root,
56
68
  render: DefaultStory,
57
- decorators: [withTheme, withLayout({ container: 'column', classNames: 'is-[30rem]' })],
69
+ decorators: [withTheme(), withLayout({ layout: 'column', classNames: 'w-[30rem]' })],
58
70
  } satisfies Meta<typeof DefaultStory>;
59
71
 
60
72
  export default meta;
@@ -64,6 +76,15 @@ type Story = StoryObj<typeof meta>;
64
76
  export const Default: Story = {
65
77
  args: {
66
78
  pin: true,
67
- fade: true,
79
+
80
+ running: true,
81
+ },
82
+ };
83
+
84
+ export const Large: Story = {
85
+ args: {
86
+ pin: true,
87
+
88
+ initialLines: 100,
68
89
  },
69
90
  };