@dxos/react-ui 0.8.4-main.67995b8 → 0.8.4-main.6fa680abb7

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 (448) hide show
  1. package/dist/lib/browser/chunk-2FKSMWNY.mjs +774 -0
  2. package/dist/lib/browser/chunk-2FKSMWNY.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +3918 -61
  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 +100 -60
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/chunk-ZNBLTSHI.mjs +776 -0
  9. package/dist/lib/node-esm/chunk-ZNBLTSHI.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +3918 -61
  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 +100 -60
  14. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  15. package/dist/types/src/components/Avatars/Avatar.d.ts +1 -1
  16. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  17. package/dist/types/src/components/Avatars/Avatar.stories.d.ts +5 -31
  18. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  19. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts +5 -11
  20. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  21. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +1 -1
  22. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  23. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts +8 -20
  24. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  25. package/dist/types/src/components/{Buttons → Button}/Button.d.ts +2 -2
  26. package/dist/types/src/components/Button/Button.d.ts.map +1 -0
  27. package/dist/types/src/components/Button/Button.stories.d.ts +17 -0
  28. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -0
  29. package/dist/types/src/components/{Buttons → Button}/IconButton.d.ts +4 -4
  30. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -0
  31. package/dist/types/src/components/Button/IconButton.stories.d.ts +13 -0
  32. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -0
  33. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -0
  34. package/dist/types/src/components/Button/Toggle.stories.d.ts +16 -0
  35. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -0
  36. package/dist/types/src/components/Button/ToggleGroup.d.ts +27 -0
  37. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -0
  38. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +27 -0
  39. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -0
  40. package/dist/types/src/components/Button/index.d.ts.map +1 -0
  41. package/dist/types/src/components/Card/Card.d.ts +107 -0
  42. package/dist/types/src/components/Card/Card.d.ts.map +1 -0
  43. package/dist/types/src/components/Card/Card.stories.d.ts +21 -0
  44. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -0
  45. package/dist/types/src/components/Card/index.d.ts +2 -0
  46. package/dist/types/src/components/Card/index.d.ts.map +1 -0
  47. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  48. package/dist/types/src/components/Clipboard/CopyButton.d.ts +1 -1
  49. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  50. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts +1 -1
  51. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  52. package/dist/types/src/components/{Dialogs → Dialog}/AlertDialog.d.ts +13 -4
  53. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -0
  54. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts +11 -0
  55. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -0
  56. package/dist/types/src/components/Dialog/Dialog.d.ts +47 -0
  57. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -0
  58. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +24 -0
  59. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -0
  60. package/dist/types/src/components/Dialog/index.d.ts.map +1 -0
  61. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
  62. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  63. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts +11 -0
  64. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -0
  65. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts +7 -0
  66. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -0
  67. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +8 -0
  68. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -0
  69. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts +9 -0
  70. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -0
  71. package/dist/types/src/components/ErrorFallback/index.d.ts +5 -0
  72. package/dist/types/src/components/ErrorFallback/index.d.ts.map +1 -0
  73. package/dist/types/src/components/Icon/Icon.d.ts +2 -2
  74. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  75. package/dist/types/src/components/Icon/Icon.stories.d.ts +17 -0
  76. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -0
  77. package/dist/types/src/components/Image/Image.d.ts +14 -0
  78. package/dist/types/src/components/Image/Image.d.ts.map +1 -0
  79. package/dist/types/src/components/Image/Image.stories.d.ts +33 -0
  80. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -0
  81. package/dist/types/src/components/Image/index.d.ts +2 -0
  82. package/dist/types/src/components/Image/index.d.ts.map +1 -0
  83. package/dist/types/src/components/Input/Input.d.ts +6 -8
  84. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  85. package/dist/types/src/components/Input/Input.stories.d.ts +17 -18
  86. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  87. package/dist/types/src/components/Link/Link.stories.d.ts +8 -8
  88. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  89. package/dist/types/src/components/{Lists → List}/List.d.ts +3 -3
  90. package/dist/types/src/components/List/List.d.ts.map +1 -0
  91. package/dist/types/src/components/List/List.stories.d.ts +14 -0
  92. package/dist/types/src/components/List/List.stories.d.ts.map +1 -0
  93. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -0
  94. package/dist/types/src/components/{Lists → List}/Tree.d.ts +1 -1
  95. package/dist/types/src/components/List/Tree.d.ts.map +1 -0
  96. package/dist/types/src/components/List/Tree.stories.d.ts +15 -0
  97. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -0
  98. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -0
  99. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts +1 -1
  100. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts.map +1 -1
  101. package/dist/types/src/components/List/Treegrid.stories.d.ts +12 -0
  102. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -0
  103. package/dist/types/src/components/List/index.d.ts.map +1 -0
  104. package/dist/types/src/components/Main/Main.d.ts +18 -28
  105. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  106. package/dist/types/src/components/Main/Main.stories.d.ts +6 -10
  107. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  108. package/dist/types/src/components/{Menus → Menu}/ContextMenu.d.ts +6 -6
  109. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -0
  110. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts +12 -0
  111. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -0
  112. package/dist/types/src/components/{Menus → Menu}/DropdownMenu.d.ts +8 -8
  113. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
  114. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +15 -0
  115. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
  116. package/dist/types/src/components/Menu/index.d.ts.map +1 -0
  117. package/dist/types/src/components/Message/Message.d.ts +1 -1
  118. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  119. package/dist/types/src/components/Message/Message.stories.d.ts +10 -20
  120. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  121. package/dist/types/src/components/Popover/Popover.d.ts +4 -3
  122. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  123. package/dist/types/src/components/Popover/Popover.stories.d.ts +6 -34
  124. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  125. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +23 -26
  126. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  127. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +35 -25
  128. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  129. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +39 -0
  130. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -0
  131. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +24 -0
  132. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -0
  133. package/dist/types/src/components/ScrollContainer/index.d.ts +2 -0
  134. package/dist/types/src/components/ScrollContainer/index.d.ts.map +1 -0
  135. package/dist/types/src/components/Select/Select.d.ts +10 -10
  136. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  137. package/dist/types/src/components/Select/Select.stories.d.ts +4 -9
  138. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  139. package/dist/types/src/components/Separator/Separator.d.ts +1 -1
  140. package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
  141. package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  142. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
  143. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  144. package/dist/types/src/components/Skeleton/index.d.ts +2 -0
  145. package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
  146. package/dist/types/src/components/Splitter/Splitter.d.ts +32 -0
  147. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
  148. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
  149. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
  150. package/dist/types/src/components/Splitter/index.d.ts +2 -0
  151. package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
  152. package/dist/types/src/components/Status/Status.stories.d.ts +6 -10
  153. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  154. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  155. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  156. package/dist/types/src/components/Tag/Tag.stories.d.ts +8 -13
  157. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  158. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +3 -3
  159. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  160. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts +12 -0
  161. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  162. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +1 -8
  163. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  164. package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
  165. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  166. package/dist/types/src/components/Toast/Toast.d.ts +5 -5
  167. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  168. package/dist/types/src/components/Toast/Toast.stories.d.ts +6 -44
  169. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  170. package/dist/types/src/components/Toolbar/Toolbar.d.ts +46 -20
  171. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  172. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +6 -50
  173. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  174. package/dist/types/src/components/Tooltip/Tooltip.d.ts +2 -4
  175. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  176. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +8 -61
  177. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  178. package/dist/types/src/components/index.d.ts +13 -8
  179. package/dist/types/src/components/index.d.ts.map +1 -1
  180. package/dist/types/src/exemplars/generics.stories.d.ts +18 -0
  181. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
  182. package/dist/types/src/exemplars/slot.stories.d.ts +14 -0
  183. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
  184. package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
  185. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
  186. package/dist/types/src/exemplars/virtualizer.stories.d.ts +11 -0
  187. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -0
  188. package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
  189. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  190. package/dist/types/src/hooks/useElevationContext.d.ts +1 -1
  191. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  192. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  193. package/dist/types/src/hooks/useVisualViewport.d.ts +2 -2
  194. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  195. package/dist/types/src/index.d.ts +2 -1
  196. package/dist/types/src/index.d.ts.map +1 -1
  197. package/dist/types/src/playground/Controls.stories.d.ts +5 -9
  198. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  199. package/dist/types/src/playground/Custom.stories.d.ts +12 -4
  200. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  201. package/dist/types/src/playground/Typography.stories.d.ts +5 -11
  202. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  203. package/dist/types/src/primitives/Column/Column.d.ts +26 -0
  204. package/dist/types/src/primitives/Column/Column.d.ts.map +1 -0
  205. package/dist/types/src/primitives/Column/Column.stories.d.ts +6 -0
  206. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -0
  207. package/dist/types/src/primitives/Column/index.d.ts +2 -0
  208. package/dist/types/src/primitives/Column/index.d.ts.map +1 -0
  209. package/dist/types/src/primitives/Container/Container.d.ts +8 -0
  210. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
  211. package/dist/types/src/primitives/Container/Container.stories.d.ts +6 -0
  212. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
  213. package/dist/types/src/primitives/Container/index.d.ts +2 -0
  214. package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
  215. package/dist/types/src/primitives/Flex/Flex.d.ts +13 -0
  216. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
  217. package/dist/types/src/primitives/Flex/Flex.stories.d.ts +8 -0
  218. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -0
  219. package/dist/types/src/primitives/Flex/index.d.ts +2 -0
  220. package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
  221. package/dist/types/src/primitives/Grid/Grid.d.ts +15 -0
  222. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -0
  223. package/dist/types/src/primitives/Grid/Grid.stories.d.ts +8 -0
  224. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -0
  225. package/dist/types/src/primitives/Grid/index.d.ts +2 -0
  226. package/dist/types/src/primitives/Grid/index.d.ts.map +1 -0
  227. package/dist/types/src/primitives/Panel/Panel.d.ts +26 -0
  228. package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -0
  229. package/dist/types/src/primitives/Panel/Panel.stories.d.ts +6 -0
  230. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -0
  231. package/dist/types/src/primitives/Panel/index.d.ts +2 -0
  232. package/dist/types/src/primitives/Panel/index.d.ts.map +1 -0
  233. package/dist/types/src/primitives/index.d.ts +6 -0
  234. package/dist/types/src/primitives/index.d.ts.map +1 -0
  235. package/dist/types/src/testing/Loading.d.ts +9 -0
  236. package/dist/types/src/testing/Loading.d.ts.map +1 -0
  237. package/dist/types/src/testing/decorators/index.d.ts +2 -1
  238. package/dist/types/src/testing/decorators/index.d.ts.map +1 -1
  239. package/dist/types/src/testing/decorators/withLayout.d.ts +15 -0
  240. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -0
  241. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +12 -0
  242. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -0
  243. package/dist/types/src/testing/decorators/withTheme.d.ts +5 -1
  244. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  245. package/dist/types/src/testing/index.d.ts +1 -0
  246. package/dist/types/src/testing/index.d.ts.map +1 -1
  247. package/dist/types/src/translations.d.ts +11 -0
  248. package/dist/types/src/translations.d.ts.map +1 -0
  249. package/dist/types/src/util/index.d.ts +2 -1
  250. package/dist/types/src/util/index.d.ts.map +1 -1
  251. package/dist/types/src/util/usePx.d.ts +8 -0
  252. package/dist/types/src/util/usePx.d.ts.map +1 -0
  253. package/dist/types/tsconfig.tsbuildinfo +1 -1
  254. package/package.json +41 -31
  255. package/src/components/Avatars/Avatar.stories.tsx +24 -16
  256. package/src/components/Avatars/Avatar.tsx +9 -16
  257. package/src/components/Avatars/AvatarGroup.stories.tsx +12 -8
  258. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +20 -15
  259. package/src/components/Breadcrumb/Breadcrumb.tsx +12 -38
  260. package/src/components/{Buttons → Button}/Button.stories.tsx +10 -11
  261. package/src/components/{Buttons → Button}/Button.tsx +7 -13
  262. package/src/components/{Buttons → Button}/IconButton.stories.tsx +15 -12
  263. package/src/components/{Buttons → Button}/IconButton.tsx +23 -16
  264. package/src/components/Button/Toggle.stories.tsx +37 -0
  265. package/src/components/{Buttons → Button}/ToggleGroup.stories.tsx +12 -9
  266. package/src/components/{Buttons → Button}/ToggleGroup.tsx +17 -4
  267. package/src/components/Card/Card.stories.tsx +151 -0
  268. package/src/components/Card/Card.tsx +347 -0
  269. package/src/components/Card/index.ts +5 -0
  270. package/src/components/Clipboard/ClipboardProvider.tsx +1 -1
  271. package/src/components/Clipboard/CopyButton.tsx +9 -8
  272. package/src/components/DensityProvider/DensityProvider.tsx +2 -2
  273. package/src/components/Dialog/AlertDialog.stories.tsx +69 -0
  274. package/src/components/{Dialogs → Dialog}/AlertDialog.tsx +128 -28
  275. package/src/components/Dialog/Dialog.stories.tsx +122 -0
  276. package/src/components/{Dialogs → Dialog}/Dialog.tsx +190 -60
  277. package/src/components/ElevationProvider/ElevationProvider.tsx +2 -2
  278. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +50 -0
  279. package/src/components/ErrorFallback/ErrorFallback.tsx +70 -0
  280. package/src/components/ErrorFallback/ErrorStack.tsx +80 -0
  281. package/src/components/ErrorFallback/ThrowError.tsx +37 -0
  282. package/src/components/ErrorFallback/index.ts +9 -0
  283. package/src/components/Icon/Icon.stories.tsx +113 -0
  284. package/src/components/Icon/Icon.tsx +3 -3
  285. package/src/components/Image/Image.stories.tsx +86 -0
  286. package/src/components/Image/Image.tsx +223 -0
  287. package/src/components/Image/index.ts +5 -0
  288. package/src/components/Input/Input.stories.tsx +28 -49
  289. package/src/components/Input/Input.tsx +46 -82
  290. package/src/components/Link/Link.stories.tsx +12 -8
  291. package/src/components/Link/Link.tsx +2 -2
  292. package/src/components/{Lists → List}/List.stories.tsx +44 -45
  293. package/src/components/{Lists → List}/List.tsx +27 -28
  294. package/src/components/{Lists → List}/ListDropIndicator.tsx +7 -7
  295. package/src/components/{Lists → List}/Tree.stories.tsx +15 -12
  296. package/src/components/{Lists → List}/Tree.tsx +4 -3
  297. package/src/components/{Lists → List}/TreeDropIndicator.tsx +7 -7
  298. package/src/components/{Lists → List}/Treegrid.stories.tsx +15 -9
  299. package/src/components/{Lists → List}/Treegrid.tsx +67 -31
  300. package/src/components/Main/Main.stories.tsx +53 -27
  301. package/src/components/Main/Main.tsx +176 -104
  302. package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +13 -10
  303. package/src/components/{Menus → Menu}/ContextMenu.tsx +10 -33
  304. package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +14 -11
  305. package/src/components/{Menus → Menu}/DropdownMenu.tsx +111 -80
  306. package/src/components/Message/Message.stories.tsx +35 -16
  307. package/src/components/Message/Message.tsx +46 -33
  308. package/src/components/Popover/Popover.stories.tsx +16 -13
  309. package/src/components/Popover/Popover.tsx +86 -64
  310. package/src/components/ScrollArea/ScrollArea.stories.tsx +163 -34
  311. package/src/components/ScrollArea/ScrollArea.tsx +84 -82
  312. package/src/components/ScrollArea/index.ts +1 -1
  313. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +89 -0
  314. package/src/components/ScrollContainer/ScrollContainer.tsx +238 -0
  315. package/src/components/ScrollContainer/index.ts +5 -0
  316. package/src/components/Select/Select.stories.tsx +15 -12
  317. package/src/components/Select/Select.tsx +16 -31
  318. package/src/components/Separator/Separator.tsx +1 -1
  319. package/src/components/Skeleton/Skeleton.stories.tsx +52 -0
  320. package/src/components/Skeleton/Skeleton.tsx +26 -0
  321. package/src/components/Skeleton/index.ts +5 -0
  322. package/src/components/Splitter/Splitter.stories.tsx +83 -0
  323. package/src/components/Splitter/Splitter.tsx +126 -0
  324. package/src/components/Splitter/index.ts +5 -0
  325. package/src/components/Status/Status.stories.tsx +30 -23
  326. package/src/components/Status/Status.tsx +2 -2
  327. package/src/components/Tag/Tag.stories.tsx +17 -13
  328. package/src/components/Tag/Tag.tsx +3 -8
  329. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +32 -0
  330. package/src/components/ThemeProvider/ThemeProvider.tsx +7 -7
  331. package/src/components/ThemeProvider/TranslationsProvider.tsx +3 -18
  332. package/src/components/ThemeProvider/index.ts +3 -3
  333. package/src/components/Toast/Toast.stories.tsx +14 -11
  334. package/src/components/Toast/Toast.tsx +19 -23
  335. package/src/components/Toolbar/Toolbar.stories.tsx +16 -14
  336. package/src/components/Toolbar/Toolbar.tsx +201 -12
  337. package/src/components/Tooltip/Tooltip.stories.tsx +31 -25
  338. package/src/components/Tooltip/Tooltip.tsx +30 -26
  339. package/src/components/index.ts +14 -9
  340. package/src/exemplars/generics.stories.tsx +49 -0
  341. package/src/exemplars/slot.stories.tsx +107 -0
  342. package/src/exemplars/tabster.stories.tsx +127 -0
  343. package/src/exemplars/virtualizer.stories.tsx +137 -0
  344. package/src/hooks/useDensityContext.ts +1 -1
  345. package/src/hooks/useElevationContext.ts +1 -1
  346. package/src/hooks/useSafeArea.ts +3 -2
  347. package/src/hooks/useVisualViewport.ts +4 -4
  348. package/src/index.ts +2 -1
  349. package/src/playground/Controls.stories.tsx +12 -15
  350. package/src/playground/Custom.stories.tsx +15 -26
  351. package/src/playground/Typography.stories.tsx +11 -9
  352. package/src/primitives/Column/Column.stories.tsx +78 -0
  353. package/src/primitives/Column/Column.tsx +134 -0
  354. package/src/primitives/Column/index.ts +5 -0
  355. package/src/primitives/Container/Container.stories.tsx +30 -0
  356. package/src/primitives/Container/Container.tsx +22 -0
  357. package/src/primitives/Container/index.ts +5 -0
  358. package/src/primitives/Flex/Flex.stories.tsx +58 -0
  359. package/src/primitives/Flex/Flex.tsx +29 -0
  360. package/src/primitives/Flex/index.ts +5 -0
  361. package/src/primitives/Grid/Grid.stories.tsx +57 -0
  362. package/src/primitives/Grid/Grid.tsx +35 -0
  363. package/src/primitives/Grid/index.ts +5 -0
  364. package/src/primitives/Panel/Panel.stories.tsx +67 -0
  365. package/src/primitives/Panel/Panel.tsx +119 -0
  366. package/src/primitives/Panel/index.ts +5 -0
  367. package/src/primitives/index.ts +9 -0
  368. package/src/testing/Loading.tsx +26 -0
  369. package/src/testing/decorators/index.ts +2 -1
  370. package/src/testing/decorators/withLayout.tsx +77 -0
  371. package/src/testing/decorators/withLayoutVariants.tsx +48 -0
  372. package/src/testing/decorators/withTheme.tsx +34 -0
  373. package/src/testing/index.ts +2 -0
  374. package/src/translations.ts +19 -0
  375. package/src/util/index.ts +3 -1
  376. package/src/util/usePx.ts +61 -0
  377. package/dist/lib/browser/chunk-2COVUP44.mjs +0 -4373
  378. package/dist/lib/browser/chunk-2COVUP44.mjs.map +0 -7
  379. package/dist/lib/node-esm/chunk-GHXHND5V.mjs +0 -4375
  380. package/dist/lib/node-esm/chunk-GHXHND5V.mjs.map +0 -7
  381. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +0 -15
  382. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +0 -1
  383. package/dist/types/src/components/AnchoredOverflow/index.d.ts +0 -2
  384. package/dist/types/src/components/AnchoredOverflow/index.d.ts.map +0 -1
  385. package/dist/types/src/components/Buttons/Button.d.ts.map +0 -1
  386. package/dist/types/src/components/Buttons/Button.stories.d.ts +0 -12
  387. package/dist/types/src/components/Buttons/Button.stories.d.ts.map +0 -1
  388. package/dist/types/src/components/Buttons/IconButton.d.ts.map +0 -1
  389. package/dist/types/src/components/Buttons/IconButton.stories.d.ts +0 -22
  390. package/dist/types/src/components/Buttons/IconButton.stories.d.ts.map +0 -1
  391. package/dist/types/src/components/Buttons/Toggle.d.ts.map +0 -1
  392. package/dist/types/src/components/Buttons/Toggle.stories.d.ts +0 -19
  393. package/dist/types/src/components/Buttons/Toggle.stories.d.ts.map +0 -1
  394. package/dist/types/src/components/Buttons/ToggleGroup.d.ts +0 -28
  395. package/dist/types/src/components/Buttons/ToggleGroup.d.ts.map +0 -1
  396. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts +0 -39
  397. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +0 -1
  398. package/dist/types/src/components/Buttons/index.d.ts.map +0 -1
  399. package/dist/types/src/components/Dialogs/AlertDialog.d.ts.map +0 -1
  400. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts +0 -43
  401. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +0 -1
  402. package/dist/types/src/components/Dialogs/Dialog.d.ts +0 -31
  403. package/dist/types/src/components/Dialogs/Dialog.d.ts.map +0 -1
  404. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts +0 -48
  405. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +0 -1
  406. package/dist/types/src/components/Dialogs/index.d.ts.map +0 -1
  407. package/dist/types/src/components/Lists/List.d.ts.map +0 -1
  408. package/dist/types/src/components/Lists/List.stories.d.ts +0 -37
  409. package/dist/types/src/components/Lists/List.stories.d.ts.map +0 -1
  410. package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +0 -1
  411. package/dist/types/src/components/Lists/Tree.d.ts.map +0 -1
  412. package/dist/types/src/components/Lists/Tree.stories.d.ts +0 -41
  413. package/dist/types/src/components/Lists/Tree.stories.d.ts.map +0 -1
  414. package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +0 -1
  415. package/dist/types/src/components/Lists/Treegrid.stories.d.ts +0 -10
  416. package/dist/types/src/components/Lists/Treegrid.stories.d.ts.map +0 -1
  417. package/dist/types/src/components/Lists/index.d.ts.map +0 -1
  418. package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
  419. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts +0 -50
  420. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +0 -1
  421. package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
  422. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts +0 -50
  423. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
  424. package/dist/types/src/components/Menus/index.d.ts.map +0 -1
  425. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts +0 -12
  426. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts.map +0 -1
  427. package/dist/types/src/util/ThemedClassName.d.ts +0 -5
  428. package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
  429. package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +0 -59
  430. package/src/components/AnchoredOverflow/index.ts +0 -5
  431. package/src/components/Buttons/Toggle.stories.tsx +0 -33
  432. package/src/components/Dialogs/AlertDialog.stories.tsx +0 -66
  433. package/src/components/Dialogs/Dialog.stories.tsx +0 -65
  434. package/src/testing/decorators/withSurfaceVariantsLayout.tsx +0 -51
  435. package/src/testing/decorators/withTheme.ts +0 -25
  436. package/src/util/ThemedClassName.ts +0 -7
  437. /package/dist/types/src/components/{Buttons → Button}/Toggle.d.ts +0 -0
  438. /package/dist/types/src/components/{Buttons → Button}/index.d.ts +0 -0
  439. /package/dist/types/src/components/{Dialogs → Dialog}/index.d.ts +0 -0
  440. /package/dist/types/src/components/{Lists → List}/ListDropIndicator.d.ts +0 -0
  441. /package/dist/types/src/components/{Lists → List}/TreeDropIndicator.d.ts +0 -0
  442. /package/dist/types/src/components/{Lists → List}/index.d.ts +0 -0
  443. /package/dist/types/src/components/{Menus → Menu}/index.d.ts +0 -0
  444. /package/src/components/{Buttons → Button}/Toggle.tsx +0 -0
  445. /package/src/components/{Buttons → Button}/index.ts +0 -0
  446. /package/src/components/{Dialogs → Dialog}/index.ts +0 -0
  447. /package/src/components/{Lists → List}/index.ts +0 -0
  448. /package/src/components/{Menus → Menu}/index.ts +0 -0
@@ -0,0 +1,137 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type Meta } from '@storybook/react-vite';
6
+ import { useVirtualizer } from '@tanstack/react-virtual';
7
+ import React, { useEffect, useMemo, useRef, useState } from 'react';
8
+
9
+ import { faker } from '@dxos/random';
10
+ import { Panel, ScrollArea, Toolbar } from '@dxos/react-ui';
11
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
12
+
13
+ faker.seed(999);
14
+
15
+ type TestItem = {
16
+ name: string;
17
+ };
18
+
19
+ const meta: Meta = {
20
+ title: 'ui/react-ui-core/exemplars/virtualizer',
21
+ decorators: [withLayout({ layout: 'column' }), withTheme()],
22
+ parameters: {
23
+ layout: 'fullscreen',
24
+ },
25
+ };
26
+
27
+ export default meta;
28
+
29
+ const NUM_ITEMS = 500;
30
+
31
+ /**
32
+ * https://tanstack.com/virtual/latest/docs/introduction
33
+ */
34
+ export const Default = {
35
+ render: () => {
36
+ const [index, setIndex] = useState(0);
37
+ const items = useMemo<TestItem[]>(
38
+ () =>
39
+ Array.from({ length: NUM_ITEMS }, () => ({
40
+ name: faker.lorem.paragraph(),
41
+ })),
42
+ [],
43
+ );
44
+
45
+ const parentRef = useRef(null);
46
+ const [viewport, setViewport] = useState<HTMLElement | null>(null);
47
+ const virtualizer = useVirtualizer({
48
+ getScrollElement: () => viewport,
49
+ estimateSize: () => 40,
50
+ count: items.length,
51
+ gap: 8,
52
+ });
53
+
54
+ useEffect(() => {
55
+ virtualizer.scrollToIndex(index, { align: 'start' });
56
+ }, [virtualizer, index]);
57
+
58
+ const virtualItems = virtualizer.getVirtualItems();
59
+
60
+ return (
61
+ <Panel.Root>
62
+ <Panel.Toolbar asChild>
63
+ <ScrollToolbar items={items} index={index} setIndex={setIndex} />
64
+ </Panel.Toolbar>
65
+ <Panel.Content asChild>
66
+ <ScrollArea.Root orientation='vertical' margin>
67
+ <ScrollArea.Viewport classNames='p-2' ref={setViewport}>
68
+ <div
69
+ role='none'
70
+ style={{
71
+ position: 'relative',
72
+ height: virtualizer.getTotalSize(),
73
+ width: '100%',
74
+ }}
75
+ ref={parentRef}
76
+ >
77
+ {virtualItems.map((virtualItem) => (
78
+ <div
79
+ key={virtualItem.key}
80
+ role='list'
81
+ className='grid grid-cols-[3rem_1fr] overflow-hidden border border-separator rounded-xs'
82
+ style={{
83
+ position: 'absolute',
84
+ top: 0,
85
+ left: 0,
86
+ width: '100%',
87
+ transform: `translateY(${virtualItem.start}px)`,
88
+ }}
89
+ data-index={virtualItem.index}
90
+ ref={virtualizer.measureElement}
91
+ >
92
+ <div className='p-1'>{virtualItem.index + 1}</div>
93
+ <div className='p-1'>{items[virtualItem.index].name}</div>
94
+ </div>
95
+ ))}
96
+ </div>
97
+ </ScrollArea.Viewport>
98
+ </ScrollArea.Root>
99
+ </Panel.Content>
100
+ </Panel.Root>
101
+ );
102
+ },
103
+ };
104
+
105
+ const ScrollToolbar = ({
106
+ items,
107
+ index,
108
+ setIndex,
109
+ }: {
110
+ items: any[];
111
+ index: number;
112
+ setIndex: (index: number) => void;
113
+ }) => {
114
+ return (
115
+ <Toolbar.Root classNames='grid grid-cols-3'>
116
+ <div />
117
+ <div className='flex justify-center gap-1'>
118
+ <Toolbar.IconButton icon='ph--arrow-line-left--regular' iconOnly label='start' onClick={() => setIndex(0)} />
119
+ <Toolbar.IconButton
120
+ icon='ph--arrows-out-line-horizontal--regular'
121
+ iconOnly
122
+ label='random'
123
+ onClick={() => setIndex(Math.floor(Math.random() * items.length))}
124
+ />
125
+ <Toolbar.IconButton
126
+ icon='ph--arrow-line-right--regular'
127
+ iconOnly
128
+ label='end'
129
+ onClick={() => setIndex(items.length - 1)}
130
+ />
131
+ </div>
132
+ <div className='p-1 text-right'>
133
+ {index + 1}/{items.length}
134
+ </div>
135
+ </Toolbar.Root>
136
+ );
137
+ };
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { useContext } from 'react';
6
6
 
7
- import { type Density } from '@dxos/react-ui-types';
7
+ import { type Density } from '@dxos/ui-types';
8
8
 
9
9
  import { DensityContext } from '../components';
10
10
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { useContext } from 'react';
6
6
 
7
- import { type Elevation } from '@dxos/react-ui-types';
7
+ import { type Elevation } from '@dxos/ui-types';
8
8
 
9
9
  import { ElevationContext } from '../components';
10
10
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { useCallback, useState } from 'react';
6
6
 
7
- import { useResize } from '@dxos/react-hooks';
7
+ import { useViewportResize } from '@dxos/react-hooks';
8
8
 
9
9
  export type SafeAreaPadding = Record<'top' | 'right' | 'bottom' | 'left', number>;
10
10
 
@@ -20,6 +20,7 @@ export const useSafeArea = (): SafeAreaPadding => {
20
20
  left: parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--safe-area-left')),
21
21
  });
22
22
  }, []);
23
- useResize(handleResize);
23
+
24
+ useViewportResize(handleResize);
24
25
  return padding;
25
26
  };
@@ -2,11 +2,11 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { useCallback, type useEffect, useState } from 'react';
5
+ import { useCallback, useState } from 'react';
6
6
 
7
- import { useResize } from '@dxos/react-hooks';
7
+ import { useViewportResize } from '@dxos/react-hooks';
8
8
 
9
- export const useVisualViewport = (deps?: Parameters<typeof useEffect>[1]) => {
9
+ export const useVisualViewport = (deps?: Parameters<typeof useViewportResize>[1]) => {
10
10
  const [width, setWidth] = useState<number | null>(null);
11
11
  const [height, setHeight] = useState<number | null>(null);
12
12
 
@@ -17,7 +17,7 @@ export const useVisualViewport = (deps?: Parameters<typeof useEffect>[1]) => {
17
17
  }
18
18
  }, []);
19
19
 
20
- useResize(handleResize);
20
+ useViewportResize(handleResize, deps);
21
21
 
22
22
  return { width, height };
23
23
  };
package/src/index.ts CHANGED
@@ -6,8 +6,9 @@ export { type Resource, type TFunction } from 'i18next';
6
6
  export { Trans } from 'react-i18next';
7
7
 
8
8
  export * from '@dxos/react-hooks';
9
- export type * from '@dxos/react-ui-types';
9
+ export * from '@dxos/ui-types';
10
10
 
11
11
  export * from './components';
12
12
  export * from './hooks';
13
+ export * from './primitives';
13
14
  export * from './util';
@@ -2,12 +2,11 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
7
6
  import React, { useState } from 'react';
8
7
 
9
8
  import { Icon, Input, Select, Toggle, Toolbar } from '../components';
10
- import { withTheme, withSurfaceVariantsLayout } from '../testing';
9
+ import { withLayoutVariants, withTheme } from '../testing';
11
10
 
12
11
  const DefaultStory = () => {
13
12
  const [checked, setChecked] = useState<boolean>(false);
@@ -28,12 +27,10 @@ const DefaultStory = () => {
28
27
  <Select.Option value={'b'}>B</Select.Option>
29
28
  <Select.Option value={'c'}>C</Select.Option>
30
29
  </Select.Viewport>
30
+ <Select.Arrow />
31
31
  </Select.Content>
32
32
  </Select.Portal>
33
33
  </Select.Root>
34
- {/* TODO(burdon): Highlight is cyan. */}
35
- {/* TODO(burdon): Show vertical divider by default. */}
36
- {/* TODO(burdon): Icon sizes should adapt to density. */}
37
34
  <Toolbar.ToggleGroup type='multiple'>
38
35
  <Toolbar.ToggleGroupItem value='a'>
39
36
  <Icon icon='ph--text-b--regular' />
@@ -45,7 +42,6 @@ const DefaultStory = () => {
45
42
  <Icon icon='ph--text-underline--regular' />
46
43
  </Toolbar.ToggleGroupItem>
47
44
  </Toolbar.ToggleGroup>
48
- {/* TODO(burdon): Highlight isn't shown. */}
49
45
  <Toolbar.ToggleGroup type='single' defaultValue='a'>
50
46
  <Toolbar.ToggleGroupItem value='a'>
51
47
  <Icon icon='ph--file-ts--regular' />
@@ -59,11 +55,9 @@ const DefaultStory = () => {
59
55
  <Icon icon='ph--bug--regular' />
60
56
  </Toggle>
61
57
  </Toolbar.Button>
62
- {/* TODO(burdon): Should not be 'is-full' by default. */}
63
58
  <Input.Root>
64
59
  <Input.TextInput placeholder='Enter text...' />
65
60
  </Input.Root>
66
- {/* TODO(burdon): Checkbox collapsed. */}
67
61
  <Input.Root>
68
62
  <Input.Checkbox checked={checked} onCheckedChange={(value) => setChecked(!!value)} />
69
63
  <Input.Label>Checkbox</Input.Label>
@@ -80,11 +74,14 @@ const DefaultStory = () => {
80
74
  );
81
75
  };
82
76
 
83
- export default {
84
- title: 'ui/react-ui-core/Playground/Controls',
77
+ const meta = {
78
+ title: 'ui/react-ui-core/playground/Controls',
85
79
  render: DefaultStory,
86
- decorators: [withSurfaceVariantsLayout(), withTheme],
87
- parameters: { chromatic: { disableSnapshot: false } },
88
- };
80
+ decorators: [withTheme(), withLayoutVariants()],
81
+ } satisfies Meta<typeof Icon>;
82
+
83
+ export default meta;
84
+
85
+ type Story = StoryObj<typeof meta>;
89
86
 
90
- export const Default = {};
87
+ export const Default: Story = {};
@@ -2,23 +2,12 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
- import { type StoryObj, type Meta } from '@storybook/react-vite';
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
  import React from 'react';
9
7
 
10
- import { Button, IconButton, type ButtonProps, Tooltip } from '../components';
8
+ import { Button, type ButtonProps, IconButton, Tooltip } from '../components';
11
9
  import { withTheme } from '../testing';
12
10
 
13
- // TODO(burdon): Change density to 3 or 4 sizes: (large, medium, small; or 22, 28, 32, 40)
14
- // TODO(burdon): IconButton should be square if no text.
15
- // TODO(burdon): IconButton icon should be auto-sized based on density.
16
-
17
- // TODO(burdon): Remove custom padding from all Buttons.
18
-
19
- // TODO(burdon): Forms w/ labels.
20
- // TODO(burdon): Card preview with sections.
21
-
22
11
  const DefaultStory = ({ children, ...args }: Omit<ButtonProps, 'ref'>) => {
23
12
  return (
24
13
  <Tooltip.Provider>
@@ -54,7 +43,7 @@ const DefaultStory = ({ children, ...args }: Omit<ButtonProps, 'ref'>) => {
54
43
  </Button>
55
44
  </div>
56
45
  <div className='flex justify-center'>
57
- <IconButton {...args} label='Test' icon='ph--atom--regular' size={5} density='fine' classNames='px-2' />
46
+ <IconButton {...args} label='Test' icon='ph--atom--regular' density='fine' classNames='px-2' />
58
47
  </div>
59
48
  <div className='flex justify-center'>
60
49
  <IconButton
@@ -62,7 +51,6 @@ const DefaultStory = ({ children, ...args }: Omit<ButtonProps, 'ref'>) => {
62
51
  label='Test'
63
52
  icon='ph--atom--regular'
64
53
  iconOnly
65
- size={5}
66
54
  density='fine'
67
55
  classNames='py-1 px-1.5'
68
56
  />
@@ -72,7 +60,7 @@ const DefaultStory = ({ children, ...args }: Omit<ButtonProps, 'ref'>) => {
72
60
  {/* Small */}
73
61
  <div className='grid grid-cols-3 gap-4'>
74
62
  <div className='flex justify-center'>
75
- <Button {...args} density='fine' classNames={'!h-[24px] !text-[14px] p-0 px-1.5 min-bs-0'}>
63
+ <Button {...args} density='fine' classNames={'!h-[24px] !text-[14px] p-0 px-1.5 min-h-0'}>
76
64
  {children}
77
65
  </Button>
78
66
  </div>
@@ -83,7 +71,7 @@ const DefaultStory = ({ children, ...args }: Omit<ButtonProps, 'ref'>) => {
83
71
  icon='ph--atom--regular'
84
72
  density='fine'
85
73
  size={4}
86
- classNames={'!h-[24px] !text-[14px] p-1 min-bs-0 gap-0.5'}
74
+ classNames={'!h-[24px] !text-[14px] p-1 min-h-0 gap-0.5'}
87
75
  />
88
76
  </div>
89
77
  <div className='flex justify-center'>
@@ -94,25 +82,24 @@ const DefaultStory = ({ children, ...args }: Omit<ButtonProps, 'ref'>) => {
94
82
  iconOnly
95
83
  density='fine'
96
84
  size={4}
97
- classNames={'!h-[24px] !text-[14px] p-1 min-bs-0'}
85
+ classNames={'!h-[24px] !text-[14px] p-1 min-h-0'}
98
86
  />
99
87
  </div>
100
88
  </div>
101
89
 
102
90
  {/* TODO(burdon): Full variant with max width. */}
103
91
  <div className='flex justify-center'>
104
- <Button classNames='w-full max-w-[15rem] rounded' variant='default'>
92
+ <Button classNames='w-full max-w-[15rem] rounded-sm' variant='default'>
105
93
  Test
106
94
  </Button>
107
95
  </div>
108
96
  <div className='flex justify-center'>
109
97
  {/* TODO(burdon): Option to have button on RHS. Default size for icon should be 5 for this (medium) density. */}
110
98
  <IconButton
111
- classNames='w-full max-w-[15rem] rounded'
99
+ classNames='w-full max-w-[15rem] rounded-sm'
112
100
  variant='primary'
113
101
  icon='ph--arrows-clockwise--regular'
114
102
  label='Test'
115
- size={5}
116
103
  />
117
104
  </div>
118
105
  </div>
@@ -120,13 +107,15 @@ const DefaultStory = ({ children, ...args }: Omit<ButtonProps, 'ref'>) => {
120
107
  );
121
108
  };
122
109
 
123
- const meta: Meta<typeof Button> = {
124
- title: 'ui/react-ui-core/Playground/Custom',
110
+ const meta = {
111
+ title: 'ui/react-ui-core/playground/Custom',
125
112
  component: Button,
126
113
  render: DefaultStory,
127
- decorators: [withTheme],
128
- parameters: { layout: 'centered' },
129
- };
114
+ decorators: [withTheme()],
115
+ parameters: {
116
+ layout: 'centered',
117
+ },
118
+ } satisfies Meta<typeof Button>;
130
119
 
131
120
  export default meta;
132
121
 
@@ -2,15 +2,14 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
7
6
  import React from 'react';
8
7
 
9
8
  import { withTheme } from '../testing';
10
9
 
11
10
  const DefaultStory = () => {
12
11
  return (
13
- <div className='mli-auto p-8 max-is-[60rem] space-b-4'>
12
+ <div className='mx-auto p-8 max-w-[60rem] space-b-4'>
14
13
  <h1 className='text-4xl font-medium'>
15
14
  Việc <span className='italic'>thừa</span> nhận{' '}
16
15
  <span className='font-mono bg-neutral-500/10'>
@@ -43,13 +42,16 @@ const DefaultStory = () => {
43
42
  );
44
43
  };
45
44
 
46
- export default {
47
- title: 'ui/react-ui-core/Playground/Typography',
45
+ const meta = {
46
+ title: 'ui/react-ui-core/playground/Typography',
48
47
  render: DefaultStory,
49
- decorators: [withTheme],
50
- parameters: { chromatic: { disableSnapshot: false } },
51
- };
48
+ decorators: [withTheme()],
49
+ } satisfies Meta<typeof DefaultStory>;
50
+
51
+ export default meta;
52
+
53
+ type Story = StoryObj<typeof meta>;
52
54
 
53
- export const Default = {
55
+ export const Default: Story = {
54
56
  args: {},
55
57
  };
@@ -0,0 +1,78 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React from 'react';
7
+
8
+ import { Input, ScrollArea } from '../../components';
9
+ import { withLayout, withTheme } from '../../testing';
10
+ import { Flex } from '../Flex';
11
+
12
+ import { Column } from './Column';
13
+
14
+ const List = () => {
15
+ return (
16
+ <ScrollArea.Root margin role='list'>
17
+ <ScrollArea.Viewport>
18
+ {Array.from({ length: 100 }).map((_, i) => (
19
+ <div key={i} role='listitem' className='p-1 hover:bg-hover-surface'>
20
+ Item {i}
21
+ </div>
22
+ ))}
23
+ </ScrollArea.Viewport>
24
+ </ScrollArea.Root>
25
+ );
26
+ };
27
+
28
+ const DefaultStory = () => {
29
+ return (
30
+ <Column.Root className='h-full overflow-hidden' gutter='md'>
31
+ <Column.Segment asChild>
32
+ <h1 className='p-1 bg-blue-500 text-black'>Header</h1>
33
+ </Column.Segment>
34
+
35
+ <Column.Row>
36
+ <div className='p-1 bg-blue-500'>A</div>
37
+ <div className='p-1 bg-red-500'>B</div>
38
+ <div className='p-1 bg-blue-500'>C</div>
39
+ </Column.Row>
40
+
41
+ <Column.Segment asChild>
42
+ <div className='py-2'>
43
+ <Input.Root>
44
+ <Input.TextInput placeholder='Search' />
45
+ </Input.Root>
46
+ </div>
47
+ </Column.Segment>
48
+
49
+ <List />
50
+
51
+ <Column.Segment asChild>
52
+ <Flex column>
53
+ <h1 className='p-1 bg-red-500 text-black'>Section with overflow</h1>
54
+ <pre className='p-1 text-xs text-subdued overflow-auto'>{new Error().stack}</pre>
55
+ </Flex>
56
+ </Column.Segment>
57
+
58
+ <Column.Segment asChild>
59
+ <div className='p-1 bg-green-500 text-black'>Footer</div>
60
+ </Column.Segment>
61
+ </Column.Root>
62
+ );
63
+ };
64
+
65
+ const meta: Meta = {
66
+ title: 'ui/react-ui-core/primitives/Column',
67
+ render: DefaultStory,
68
+ decorators: [withTheme(), withLayout({ layout: 'column', classNames: 'w-[25rem]' })],
69
+ parameters: {
70
+ layout: 'fullscreen',
71
+ },
72
+ };
73
+
74
+ export default meta;
75
+
76
+ type Story = StoryObj<typeof meta>;
77
+
78
+ export const Default: Story = {};
@@ -0,0 +1,134 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Primitive } from '@radix-ui/react-primitive';
6
+ import { Slot } from '@radix-ui/react-slot';
7
+ import React, { type CSSProperties, forwardRef } from 'react';
8
+
9
+ import { composableProps } from '@dxos/ui-theme';
10
+ import { type SlottableProps } from '@dxos/ui-types';
11
+
12
+ import { useThemeContext } from '../../hooks';
13
+
14
+ //
15
+ // Root
16
+ //
17
+
18
+ const COLUMN_ROOT_NAME = 'Column.Root';
19
+
20
+ type GutterSize = 'sm' | 'md' | 'lg' | 'rail';
21
+
22
+ const gutterSizes: Record<GutterSize, string> = {
23
+ sm: 'var(--dx-gutter-sm)',
24
+ md: 'var(--dx-gutter-md)',
25
+ lg: 'var(--dx-gutter-lg)',
26
+ rail: 'var(--dx-rail-item)',
27
+ };
28
+
29
+ type ColumnRootProps = SlottableProps<HTMLDivElement, { gutter?: GutterSize }>;
30
+
31
+ /**
32
+ * Creates a vertical channel with left/right gutter columns.
33
+ * The `--gutter` CSS variable is set for nested components (Dialog, ScrollArea, Form.Viewport, etc.).
34
+ * Use `gutter='rail'` for icon-slot row layouts (Card); `gutter='md'` for whitespace layouts (Dialog).
35
+ * Direct children must use Column.Row (spans all 3 cols) or Column.Segment (center col only).
36
+ *
37
+ * NOTE: The theme applies a `dx-column` marker class to this element.
38
+ * ScrollArea.Root detects this via `[.dx-column_&]:col-span-full` to span all 3 grid columns,
39
+ * ensuring scroll content extends under the gutters rather than being confined to the center column.
40
+ * The `--gutter` CSS variable is also consumed by ScrollArea's `margin` option to align scrollbar spacing.
41
+ */
42
+ const Root = forwardRef<HTMLDivElement, ColumnRootProps>(
43
+ ({ children, asChild, role, gutter = 'md', ...props }, forwardedRef) => {
44
+ const { className, ...rest } = composableProps(props);
45
+ const Comp = asChild ? Slot : Primitive.div;
46
+ const { tx } = useThemeContext();
47
+ const gutterSize = gutterSizes[gutter];
48
+ return (
49
+ <Comp
50
+ {...rest}
51
+ role={role ?? 'none'}
52
+ style={
53
+ {
54
+ '--gutter': gutterSize,
55
+ gridTemplateColumns: [gutterSize, 'minmax(0,1fr)', gutterSize].join(' '),
56
+ } as CSSProperties
57
+ }
58
+ className={tx('column.root', { gutter }, className)}
59
+ ref={forwardedRef}
60
+ >
61
+ {children}
62
+ </Comp>
63
+ );
64
+ },
65
+ );
66
+
67
+ Root.displayName = COLUMN_ROOT_NAME;
68
+
69
+ //
70
+ // Row
71
+ //
72
+
73
+ const COLUMN_ROW_NAME = 'Column.Row';
74
+
75
+ type ColumnRowProps = SlottableProps<HTMLDivElement>;
76
+
77
+ /**
78
+ * Spans all 3 columns of the parent Column.Root and uses CSS subgrid to inherit their sizing.
79
+ * Children map to: [col-1: icon/slot] [col-2: content] [col-3: icon/action].
80
+ * Must be a direct child of Column.Root.
81
+ */
82
+ const Row = forwardRef<HTMLDivElement, ColumnRowProps>(({ children, asChild, role, ...props }, forwardedRef) => {
83
+ const { className, ...rest } = composableProps(props);
84
+ const Comp = asChild ? Slot : Primitive.div;
85
+ const { tx } = useThemeContext();
86
+ return (
87
+ <Comp {...rest} role={role ?? 'none'} className={tx('column.row', {}, className)} ref={forwardedRef}>
88
+ {children}
89
+ </Comp>
90
+ );
91
+ });
92
+
93
+ Row.displayName = COLUMN_ROW_NAME;
94
+
95
+ //
96
+ // Segment
97
+ //
98
+
99
+ const COLUMN_SEGMENT_NAME = 'Column.Segment';
100
+
101
+ type ColumnSegmentProps = SlottableProps<HTMLDivElement>;
102
+
103
+ /**
104
+ * Occupies only the center column (col-2) of the parent Column.Root grid.
105
+ * Use `asChild` to merge grid positioning onto the child element, eliminating the wrapper div.
106
+ * NOTE: Must not use overflow-hidden here since it will clip input focus rings.
107
+ */
108
+ const Segment = forwardRef<HTMLDivElement, ColumnSegmentProps>(
109
+ ({ children, asChild, role, ...props }, forwardedRef) => {
110
+ const { className, ...rest } = composableProps(props);
111
+ const Comp = asChild ? Slot : Primitive.div;
112
+ const { tx } = useThemeContext();
113
+ // With asChild, merge col-start-2 directly onto the child — no contents wrapper needed.
114
+ return (
115
+ <Comp {...rest} role={role ?? 'none'} className={tx('column.segment', {}, className)} ref={forwardedRef}>
116
+ {asChild ? children : <div className='contents'>{children}</div>}
117
+ </Comp>
118
+ );
119
+ },
120
+ );
121
+
122
+ Segment.displayName = COLUMN_SEGMENT_NAME;
123
+
124
+ //
125
+ // Column
126
+ //
127
+
128
+ export const Column = {
129
+ Root,
130
+ Row,
131
+ Segment,
132
+ };
133
+
134
+ export type { ColumnRootProps, ColumnRowProps, ColumnSegmentProps };
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './Column';
@@ -0,0 +1,30 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React from 'react';
7
+
8
+ import { withLayout, withTheme } from '../../testing';
9
+
10
+ import { Container } from './Container';
11
+
12
+ const DefaultStory = () => (
13
+ <Container asChild>
14
+ <div className='grid place-items-center border border-red-500'>Hello</div>
15
+ </Container>
16
+ );
17
+
18
+ const meta: Meta = {
19
+ title: 'ui/react-ui-core/primitives/Container',
20
+ component: Container,
21
+ render: DefaultStory,
22
+ decorators: [withTheme(), withLayout({ layout: 'column' })],
23
+ parameters: { layout: 'fullscreen' },
24
+ };
25
+
26
+ export default meta;
27
+
28
+ type Story = StoryObj<typeof meta>;
29
+
30
+ export const Default: Story = {};