@dxos/react-ui 0.8.4-main.f9ba587 → 0.8.4-main.fcfe5033a5

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 (475) hide show
  1. package/dist/lib/browser/chunk-OCVRIJCH.mjs +848 -0
  2. package/dist/lib/browser/chunk-OCVRIJCH.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +4115 -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 +112 -61
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/chunk-QUD5P3RU.mjs +850 -0
  9. package/dist/lib/node-esm/chunk-QUD5P3RU.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +4115 -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 +112 -61
  14. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  15. package/dist/types/src/components/Avatars/Avatar.d.ts +2 -2
  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 +4 -4
  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 +16 -0
  32. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -0
  33. package/dist/types/src/components/{Buttons → Button}/Toggle.d.ts +2 -2
  34. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -0
  35. package/dist/types/src/components/Button/Toggle.stories.d.ts +16 -0
  36. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -0
  37. package/dist/types/src/components/Button/ToggleGroup.d.ts +27 -0
  38. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -0
  39. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +27 -0
  40. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -0
  41. package/dist/types/src/components/Button/index.d.ts.map +1 -0
  42. package/dist/types/src/components/Card/Card.d.ts +120 -0
  43. package/dist/types/src/components/Card/Card.d.ts.map +1 -0
  44. package/dist/types/src/components/Card/Card.stories.d.ts +21 -0
  45. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -0
  46. package/dist/types/src/components/Card/index.d.ts +2 -0
  47. package/dist/types/src/components/Card/index.d.ts.map +1 -0
  48. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  49. package/dist/types/src/components/Clipboard/CopyButton.d.ts +1 -1
  50. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  51. package/dist/types/src/components/Clipboard/index.d.ts +10 -1
  52. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  53. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts +1 -1
  54. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  55. package/dist/types/src/components/Dialog/AlertDialog.d.ts +51 -0
  56. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -0
  57. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts +11 -0
  58. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -0
  59. package/dist/types/src/components/Dialog/Dialog.d.ts +64 -0
  60. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -0
  61. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +25 -0
  62. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -0
  63. package/dist/types/src/components/Dialog/index.d.ts.map +1 -0
  64. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
  65. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  66. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts +11 -0
  67. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -0
  68. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts +7 -0
  69. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -0
  70. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +19 -0
  71. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -0
  72. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts +9 -0
  73. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -0
  74. package/dist/types/src/components/ErrorFallback/index.d.ts +5 -0
  75. package/dist/types/src/components/ErrorFallback/index.d.ts.map +1 -0
  76. package/dist/types/src/components/Focus/Focus.d.ts +36 -0
  77. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -0
  78. package/dist/types/src/components/Focus/Focus.stories.d.ts +9 -0
  79. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -0
  80. package/dist/types/src/components/Focus/index.d.ts +2 -0
  81. package/dist/types/src/components/Focus/index.d.ts.map +1 -0
  82. package/dist/types/src/components/Icon/Icon.d.ts +5 -2
  83. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  84. package/dist/types/src/components/Icon/Icon.stories.d.ts +25 -0
  85. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -0
  86. package/dist/types/src/components/Image/Image.d.ts +14 -0
  87. package/dist/types/src/components/Image/Image.d.ts.map +1 -0
  88. package/dist/types/src/components/Image/Image.stories.d.ts +33 -0
  89. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -0
  90. package/dist/types/src/components/Image/index.d.ts +2 -0
  91. package/dist/types/src/components/Image/index.d.ts.map +1 -0
  92. package/dist/types/src/components/Input/Input.d.ts +8 -10
  93. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  94. package/dist/types/src/components/Input/Input.stories.d.ts +17 -18
  95. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  96. package/dist/types/src/components/Link/Link.stories.d.ts +8 -8
  97. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  98. package/dist/types/src/components/{Lists → List}/List.d.ts +8 -6
  99. package/dist/types/src/components/List/List.d.ts.map +1 -0
  100. package/dist/types/src/components/List/List.stories.d.ts +16 -0
  101. package/dist/types/src/components/List/List.stories.d.ts.map +1 -0
  102. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -0
  103. package/dist/types/src/components/{Lists → List}/Tree.d.ts +1 -1
  104. package/dist/types/src/components/List/Tree.d.ts.map +1 -0
  105. package/dist/types/src/components/List/Tree.stories.d.ts +15 -0
  106. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -0
  107. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -0
  108. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts +6 -10
  109. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -0
  110. package/dist/types/src/components/List/Treegrid.stories.d.ts +12 -0
  111. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -0
  112. package/dist/types/src/components/List/index.d.ts.map +1 -0
  113. package/dist/types/src/components/Main/Main.d.ts +18 -28
  114. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  115. package/dist/types/src/components/Main/Main.stories.d.ts +6 -10
  116. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  117. package/dist/types/src/components/{Menus → Menu}/ContextMenu.d.ts +6 -6
  118. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -0
  119. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts +12 -0
  120. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -0
  121. package/dist/types/src/components/Menu/DropdownMenu.d.ts +113 -0
  122. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
  123. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +28 -0
  124. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
  125. package/dist/types/src/components/Menu/index.d.ts.map +1 -0
  126. package/dist/types/src/components/Message/Message.d.ts +1 -1
  127. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  128. package/dist/types/src/components/Message/Message.stories.d.ts +12 -22
  129. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  130. package/dist/types/src/components/Popover/Popover.d.ts +34 -25
  131. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  132. package/dist/types/src/components/Popover/Popover.stories.d.ts +6 -34
  133. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  134. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +27 -27
  135. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  136. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +50 -27
  137. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  138. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +60 -0
  139. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -0
  140. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +23 -0
  141. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -0
  142. package/dist/types/src/components/ScrollContainer/index.d.ts +2 -0
  143. package/dist/types/src/components/ScrollContainer/index.d.ts.map +1 -0
  144. package/dist/types/src/components/Select/Select.d.ts +10 -10
  145. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  146. package/dist/types/src/components/Select/Select.stories.d.ts +6 -11
  147. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  148. package/dist/types/src/components/Separator/Separator.d.ts +4 -4
  149. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  150. package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
  151. package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  152. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
  153. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  154. package/dist/types/src/components/Skeleton/index.d.ts +2 -0
  155. package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
  156. package/dist/types/src/components/Splitter/Splitter.d.ts +34 -0
  157. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
  158. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
  159. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
  160. package/dist/types/src/components/Splitter/index.d.ts +2 -0
  161. package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
  162. package/dist/types/src/components/Status/Status.d.ts +3 -4
  163. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  164. package/dist/types/src/components/Status/Status.stories.d.ts +6 -10
  165. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  166. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  167. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  168. package/dist/types/src/components/Tag/Tag.stories.d.ts +8 -13
  169. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  170. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +4 -4
  171. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  172. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts +12 -0
  173. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  174. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +1 -8
  175. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  176. package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
  177. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  178. package/dist/types/src/components/Toast/Toast.d.ts +19 -19
  179. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  180. package/dist/types/src/components/Toast/Toast.stories.d.ts +6 -44
  181. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  182. package/dist/types/src/components/Toolbar/Toolbar.d.ts +40 -22
  183. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  184. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +6 -50
  185. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  186. package/dist/types/src/components/Tooltip/Tooltip.d.ts +10 -12
  187. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  188. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +10 -63
  189. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  190. package/dist/types/src/components/index.d.ts +14 -8
  191. package/dist/types/src/components/index.d.ts.map +1 -1
  192. package/dist/types/src/exemplars/generics.stories.d.ts +19 -0
  193. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
  194. package/dist/types/src/exemplars/slot.stories.d.ts +15 -0
  195. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
  196. package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
  197. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
  198. package/dist/types/src/exemplars/virtualizer.stories.d.ts +11 -0
  199. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -0
  200. package/dist/types/src/hooks/index.d.ts +1 -0
  201. package/dist/types/src/hooks/index.d.ts.map +1 -1
  202. package/dist/types/src/hooks/useDensityContext.d.ts +2 -2
  203. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  204. package/dist/types/src/hooks/useElevationContext.d.ts +1 -1
  205. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  206. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  207. package/dist/types/src/hooks/useVisualViewport.d.ts +2 -2
  208. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  209. package/dist/types/src/index.d.ts +2 -1
  210. package/dist/types/src/index.d.ts.map +1 -1
  211. package/dist/types/src/playground/Controls.stories.d.ts +5 -9
  212. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  213. package/dist/types/src/playground/Custom.stories.d.ts +12 -4
  214. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  215. package/dist/types/src/playground/Typography.stories.d.ts +5 -11
  216. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  217. package/dist/types/src/primitives/Column/Column.d.ts +33 -0
  218. package/dist/types/src/primitives/Column/Column.d.ts.map +1 -0
  219. package/dist/types/src/primitives/Column/Column.stories.d.ts +25 -0
  220. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -0
  221. package/dist/types/src/primitives/Column/index.d.ts +2 -0
  222. package/dist/types/src/primitives/Column/index.d.ts.map +1 -0
  223. package/dist/types/src/primitives/Container/Container.d.ts +7 -0
  224. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
  225. package/dist/types/src/primitives/Container/Container.stories.d.ts +6 -0
  226. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
  227. package/dist/types/src/primitives/Container/index.d.ts +2 -0
  228. package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
  229. package/dist/types/src/primitives/Flex/Flex.d.ts +11 -0
  230. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
  231. package/dist/types/src/primitives/Flex/Flex.stories.d.ts +8 -0
  232. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -0
  233. package/dist/types/src/primitives/Flex/index.d.ts +2 -0
  234. package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
  235. package/dist/types/src/primitives/Grid/Grid.d.ts +10 -0
  236. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -0
  237. package/dist/types/src/primitives/Grid/Grid.stories.d.ts +8 -0
  238. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -0
  239. package/dist/types/src/primitives/Grid/index.d.ts +2 -0
  240. package/dist/types/src/primitives/Grid/index.d.ts.map +1 -0
  241. package/dist/types/src/primitives/Panel/Panel.d.ts +35 -0
  242. package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -0
  243. package/dist/types/src/primitives/Panel/Panel.stories.d.ts +6 -0
  244. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -0
  245. package/dist/types/src/primitives/Panel/index.d.ts +2 -0
  246. package/dist/types/src/primitives/Panel/index.d.ts.map +1 -0
  247. package/dist/types/src/primitives/index.d.ts +6 -0
  248. package/dist/types/src/primitives/index.d.ts.map +1 -0
  249. package/dist/types/src/testing/Loading.d.ts +9 -0
  250. package/dist/types/src/testing/Loading.d.ts.map +1 -0
  251. package/dist/types/src/testing/decorators/index.d.ts +2 -1
  252. package/dist/types/src/testing/decorators/index.d.ts.map +1 -1
  253. package/dist/types/src/testing/decorators/withLayout.d.ts +15 -0
  254. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -0
  255. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +12 -0
  256. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -0
  257. package/dist/types/src/testing/decorators/withTheme.d.ts +5 -1
  258. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  259. package/dist/types/src/testing/index.d.ts +1 -0
  260. package/dist/types/src/testing/index.d.ts.map +1 -1
  261. package/dist/types/src/translations.d.ts +11 -0
  262. package/dist/types/src/translations.d.ts.map +1 -0
  263. package/dist/types/src/util/index.d.ts +2 -1
  264. package/dist/types/src/util/index.d.ts.map +1 -1
  265. package/dist/types/src/util/usePx.d.ts +8 -0
  266. package/dist/types/src/util/usePx.d.ts.map +1 -0
  267. package/dist/types/tsconfig.tsbuildinfo +1 -1
  268. package/package.json +45 -32
  269. package/src/components/Avatars/Avatar.stories.tsx +23 -16
  270. package/src/components/Avatars/Avatar.tsx +10 -18
  271. package/src/components/Avatars/AvatarGroup.stories.tsx +11 -8
  272. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +19 -15
  273. package/src/components/Breadcrumb/Breadcrumb.tsx +14 -40
  274. package/src/components/{Buttons → Button}/Button.stories.tsx +11 -13
  275. package/src/components/{Buttons → Button}/Button.tsx +12 -26
  276. package/src/components/{Buttons → Button}/IconButton.stories.tsx +18 -13
  277. package/src/components/{Buttons → Button}/IconButton.tsx +21 -16
  278. package/src/components/Button/Toggle.stories.tsx +36 -0
  279. package/src/components/{Buttons → Button}/Toggle.tsx +4 -4
  280. package/src/components/{Buttons → Button}/ToggleGroup.stories.tsx +14 -12
  281. package/src/components/Button/ToggleGroup.tsx +50 -0
  282. package/src/components/Card/Card.stories.tsx +151 -0
  283. package/src/components/Card/Card.tsx +493 -0
  284. package/src/components/Card/index.ts +5 -0
  285. package/src/components/Clipboard/ClipboardProvider.tsx +1 -1
  286. package/src/components/Clipboard/CopyButton.tsx +9 -9
  287. package/src/components/DensityProvider/DensityProvider.tsx +2 -2
  288. package/src/components/Dialog/AlertDialog.stories.tsx +68 -0
  289. package/src/components/Dialog/AlertDialog.tsx +213 -0
  290. package/src/components/Dialog/Dialog.stories.tsx +177 -0
  291. package/src/components/Dialog/Dialog.tsx +285 -0
  292. package/src/components/ElevationProvider/ElevationProvider.tsx +2 -2
  293. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +45 -0
  294. package/src/components/ErrorFallback/ErrorFallback.tsx +70 -0
  295. package/src/components/ErrorFallback/ErrorStack.tsx +114 -0
  296. package/src/components/ErrorFallback/ThrowError.tsx +37 -0
  297. package/src/components/ErrorFallback/index.ts +9 -0
  298. package/src/components/Focus/AUDIT.md +43 -0
  299. package/src/components/Focus/Focus.stories.tsx +230 -0
  300. package/src/components/Focus/Focus.tsx +201 -0
  301. package/src/components/Focus/index.ts +5 -0
  302. package/src/components/Icon/Icon.stories.tsx +143 -0
  303. package/src/components/Icon/Icon.tsx +6 -2
  304. package/src/components/Image/Image.stories.tsx +86 -0
  305. package/src/components/Image/Image.tsx +223 -0
  306. package/src/components/Image/index.ts +5 -0
  307. package/src/components/Input/Input.stories.tsx +27 -49
  308. package/src/components/Input/Input.tsx +51 -87
  309. package/src/components/Link/Link.stories.tsx +11 -8
  310. package/src/components/Link/Link.tsx +2 -2
  311. package/src/components/{Lists → List}/List.stories.tsx +45 -47
  312. package/src/components/{Lists → List}/List.tsx +30 -35
  313. package/src/components/{Lists → List}/ListDropIndicator.tsx +7 -7
  314. package/src/components/{Lists → List}/Tree.stories.tsx +15 -13
  315. package/src/components/{Lists → List}/Tree.tsx +3 -3
  316. package/src/components/{Lists → List}/TreeDropIndicator.tsx +7 -7
  317. package/src/components/{Lists → List}/Treegrid.stories.tsx +39 -34
  318. package/src/components/List/Treegrid.tsx +188 -0
  319. package/src/components/Main/Main.stories.tsx +52 -27
  320. package/src/components/Main/Main.tsx +176 -105
  321. package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +12 -10
  322. package/src/components/{Menus → Menu}/ContextMenu.tsx +10 -33
  323. package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +13 -11
  324. package/src/components/{Menus → Menu}/DropdownMenu.tsx +157 -120
  325. package/src/components/Message/Message.stories.tsx +36 -18
  326. package/src/components/Message/Message.tsx +43 -34
  327. package/src/components/Popover/Popover.stories.tsx +18 -16
  328. package/src/components/Popover/Popover.tsx +124 -102
  329. package/src/components/ScrollArea/ScrollArea.stories.tsx +224 -32
  330. package/src/components/ScrollArea/ScrollArea.tsx +97 -79
  331. package/src/components/ScrollArea/index.ts +1 -1
  332. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +91 -0
  333. package/src/components/ScrollContainer/ScrollContainer.tsx +347 -0
  334. package/src/components/ScrollContainer/index.ts +5 -0
  335. package/src/components/Select/Select.stories.tsx +19 -17
  336. package/src/components/Select/Select.tsx +16 -32
  337. package/src/components/Separator/Separator.tsx +5 -8
  338. package/src/components/Skeleton/Skeleton.stories.tsx +51 -0
  339. package/src/components/Skeleton/Skeleton.tsx +26 -0
  340. package/src/components/Skeleton/index.ts +5 -0
  341. package/src/components/Splitter/Splitter.stories.tsx +83 -0
  342. package/src/components/Splitter/Splitter.tsx +127 -0
  343. package/src/components/Splitter/index.ts +5 -0
  344. package/src/components/Status/Status.stories.tsx +29 -23
  345. package/src/components/Status/Status.tsx +10 -7
  346. package/src/components/Tag/Tag.stories.tsx +16 -13
  347. package/src/components/Tag/Tag.tsx +3 -8
  348. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +31 -0
  349. package/src/components/ThemeProvider/ThemeProvider.tsx +12 -11
  350. package/src/components/ThemeProvider/TranslationsProvider.tsx +3 -18
  351. package/src/components/ThemeProvider/index.ts +3 -3
  352. package/src/components/Toast/Toast.stories.tsx +13 -11
  353. package/src/components/Toast/Toast.tsx +23 -42
  354. package/src/components/Toolbar/Toolbar.stories.tsx +22 -21
  355. package/src/components/Toolbar/Toolbar.tsx +187 -13
  356. package/src/components/Tooltip/Tooltip.stories.tsx +35 -30
  357. package/src/components/Tooltip/Tooltip.tsx +44 -41
  358. package/src/components/index.ts +15 -9
  359. package/src/exemplars/generics.stories.tsx +41 -0
  360. package/src/exemplars/slot.stories.tsx +117 -0
  361. package/src/exemplars/tabster.stories.tsx +127 -0
  362. package/src/exemplars/virtualizer.stories.tsx +137 -0
  363. package/src/hooks/index.ts +1 -0
  364. package/src/hooks/useDensityContext.ts +3 -3
  365. package/src/hooks/useElevationContext.ts +1 -1
  366. package/src/hooks/useSafeArea.ts +3 -2
  367. package/src/hooks/useSafeCollisionPadding.ts +1 -1
  368. package/src/hooks/useVisualViewport.ts +4 -4
  369. package/src/index.ts +2 -1
  370. package/src/playground/Controls.stories.tsx +20 -24
  371. package/src/playground/Custom.stories.tsx +20 -34
  372. package/src/playground/Typography.stories.tsx +11 -9
  373. package/src/primitives/Column/AUDIT.md +148 -0
  374. package/src/primitives/Column/Column.stories.tsx +181 -0
  375. package/src/primitives/Column/Column.tsx +165 -0
  376. package/src/primitives/Column/index.ts +5 -0
  377. package/src/primitives/Container/Container.stories.tsx +29 -0
  378. package/src/primitives/Container/Container.tsx +19 -0
  379. package/src/primitives/Container/index.ts +5 -0
  380. package/src/primitives/Flex/Flex.stories.tsx +57 -0
  381. package/src/primitives/Flex/Flex.tsx +27 -0
  382. package/src/primitives/Flex/index.ts +5 -0
  383. package/src/primitives/Grid/Grid.stories.tsx +56 -0
  384. package/src/primitives/Grid/Grid.tsx +30 -0
  385. package/src/primitives/Grid/index.ts +5 -0
  386. package/src/primitives/Panel/Panel.stories.tsx +68 -0
  387. package/src/primitives/Panel/Panel.tsx +120 -0
  388. package/src/primitives/Panel/index.ts +5 -0
  389. package/src/primitives/index.ts +9 -0
  390. package/src/testing/Loading.tsx +47 -0
  391. package/src/testing/decorators/index.ts +2 -1
  392. package/src/testing/decorators/withLayout.tsx +77 -0
  393. package/src/testing/decorators/withLayoutVariants.tsx +48 -0
  394. package/src/testing/decorators/withTheme.tsx +37 -0
  395. package/src/testing/index.ts +2 -0
  396. package/src/translations.ts +19 -0
  397. package/src/util/index.ts +3 -1
  398. package/src/util/usePx.ts +62 -0
  399. package/dist/lib/browser/chunk-T6YPS45E.mjs +0 -4376
  400. package/dist/lib/browser/chunk-T6YPS45E.mjs.map +0 -7
  401. package/dist/lib/node-esm/chunk-TYVQJ4KW.mjs +0 -4378
  402. package/dist/lib/node-esm/chunk-TYVQJ4KW.mjs.map +0 -7
  403. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +0 -15
  404. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +0 -1
  405. package/dist/types/src/components/AnchoredOverflow/index.d.ts +0 -2
  406. package/dist/types/src/components/AnchoredOverflow/index.d.ts.map +0 -1
  407. package/dist/types/src/components/Buttons/Button.d.ts.map +0 -1
  408. package/dist/types/src/components/Buttons/Button.stories.d.ts +0 -12
  409. package/dist/types/src/components/Buttons/Button.stories.d.ts.map +0 -1
  410. package/dist/types/src/components/Buttons/IconButton.d.ts.map +0 -1
  411. package/dist/types/src/components/Buttons/IconButton.stories.d.ts +0 -22
  412. package/dist/types/src/components/Buttons/IconButton.stories.d.ts.map +0 -1
  413. package/dist/types/src/components/Buttons/Toggle.d.ts.map +0 -1
  414. package/dist/types/src/components/Buttons/Toggle.stories.d.ts +0 -19
  415. package/dist/types/src/components/Buttons/Toggle.stories.d.ts.map +0 -1
  416. package/dist/types/src/components/Buttons/ToggleGroup.d.ts +0 -28
  417. package/dist/types/src/components/Buttons/ToggleGroup.d.ts.map +0 -1
  418. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts +0 -39
  419. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +0 -1
  420. package/dist/types/src/components/Buttons/index.d.ts.map +0 -1
  421. package/dist/types/src/components/Dialogs/AlertDialog.d.ts +0 -31
  422. package/dist/types/src/components/Dialogs/AlertDialog.d.ts.map +0 -1
  423. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts +0 -43
  424. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +0 -1
  425. package/dist/types/src/components/Dialogs/Dialog.d.ts +0 -31
  426. package/dist/types/src/components/Dialogs/Dialog.d.ts.map +0 -1
  427. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts +0 -48
  428. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +0 -1
  429. package/dist/types/src/components/Dialogs/index.d.ts.map +0 -1
  430. package/dist/types/src/components/Lists/List.d.ts.map +0 -1
  431. package/dist/types/src/components/Lists/List.stories.d.ts +0 -37
  432. package/dist/types/src/components/Lists/List.stories.d.ts.map +0 -1
  433. package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +0 -1
  434. package/dist/types/src/components/Lists/Tree.d.ts.map +0 -1
  435. package/dist/types/src/components/Lists/Tree.stories.d.ts +0 -41
  436. package/dist/types/src/components/Lists/Tree.stories.d.ts.map +0 -1
  437. package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +0 -1
  438. package/dist/types/src/components/Lists/Treegrid.d.ts.map +0 -1
  439. package/dist/types/src/components/Lists/Treegrid.stories.d.ts +0 -10
  440. package/dist/types/src/components/Lists/Treegrid.stories.d.ts.map +0 -1
  441. package/dist/types/src/components/Lists/index.d.ts.map +0 -1
  442. package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
  443. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts +0 -50
  444. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +0 -1
  445. package/dist/types/src/components/Menus/DropdownMenu.d.ts +0 -112
  446. package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
  447. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts +0 -50
  448. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
  449. package/dist/types/src/components/Menus/index.d.ts.map +0 -1
  450. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts +0 -12
  451. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts.map +0 -1
  452. package/dist/types/src/util/ThemedClassName.d.ts +0 -5
  453. package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
  454. package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +0 -59
  455. package/src/components/AnchoredOverflow/index.ts +0 -5
  456. package/src/components/Buttons/Toggle.stories.tsx +0 -33
  457. package/src/components/Buttons/ToggleGroup.tsx +0 -41
  458. package/src/components/Dialogs/AlertDialog.stories.tsx +0 -66
  459. package/src/components/Dialogs/AlertDialog.tsx +0 -172
  460. package/src/components/Dialogs/Dialog.stories.tsx +0 -65
  461. package/src/components/Dialogs/Dialog.tsx +0 -159
  462. package/src/components/Lists/Treegrid.tsx +0 -152
  463. package/src/testing/decorators/withSurfaceVariantsLayout.tsx +0 -51
  464. package/src/testing/decorators/withTheme.ts +0 -22
  465. package/src/util/ThemedClassName.ts +0 -7
  466. /package/dist/types/src/components/{Buttons → Button}/index.d.ts +0 -0
  467. /package/dist/types/src/components/{Dialogs → Dialog}/index.d.ts +0 -0
  468. /package/dist/types/src/components/{Lists → List}/ListDropIndicator.d.ts +0 -0
  469. /package/dist/types/src/components/{Lists → List}/TreeDropIndicator.d.ts +0 -0
  470. /package/dist/types/src/components/{Lists → List}/index.d.ts +0 -0
  471. /package/dist/types/src/components/{Menus → Menu}/index.d.ts +0 -0
  472. /package/src/components/{Buttons → Button}/index.ts +0 -0
  473. /package/src/components/{Dialogs → Dialog}/index.ts +0 -0
  474. /package/src/components/{Lists → List}/index.ts +0 -0
  475. /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 { random } from '@dxos/random';
10
+ import { Panel, ScrollArea, Toolbar } from '@dxos/react-ui';
11
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
12
+
13
+ random.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: random.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' centered>
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
+ };
@@ -6,6 +6,7 @@ export * from './useDensityContext';
6
6
  export * from './useElevationContext';
7
7
  export * from './useIconHref';
8
8
  export * from './useSafeArea';
9
+ export * from './useSafeCollisionPadding';
9
10
  export * from './useTranslationsContext';
10
11
  export * from './useThemeContext';
11
12
  export * from './useVisualViewport';
@@ -4,11 +4,11 @@
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
 
11
- export const useDensityContext = (propsDensity?: Density) => {
11
+ export const useDensityContext = (densityProp?: Density): Density | undefined => {
12
12
  const { density } = useContext(DensityContext);
13
- return propsDensity ?? density;
13
+ return densityProp ?? density;
14
14
  };
@@ -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
  };
@@ -21,7 +21,7 @@ const safePadding = (
21
21
  ) => {
22
22
  return (
23
23
  (propIsNumber(safePadding[side]) ? safePadding[side] : 0) +
24
- (propIsNumber(propsPadding) ? propsPadding : propsIsRecord(propsPadding) ? propsPadding[side] ?? 0 : 0)
24
+ (propIsNumber(propsPadding) ? propsPadding : propsIsRecord(propsPadding) ? (propsPadding[side] ?? 0) : 0)
25
25
  );
26
26
  };
27
27
 
@@ -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 * 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,13 +2,11 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
- import { FileTs, FileJs, ArrowClockwise, Bug, TextUnderline, TextB, TextItalic } from '@phosphor-icons/react';
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
  import React, { useState } from 'react';
9
7
 
10
- import { Input, Select, Toggle, Toolbar } from '../components';
11
- import { withTheme, withSurfaceVariantsLayout } from '../testing';
8
+ import { Icon, Input, Select, Toggle, Toolbar } from '../components';
9
+ import { withLayoutVariants, withTheme } from '../testing';
12
10
 
13
11
  const DefaultStory = () => {
14
12
  const [checked, setChecked] = useState<boolean>(false);
@@ -29,49 +27,44 @@ const DefaultStory = () => {
29
27
  <Select.Option value={'b'}>B</Select.Option>
30
28
  <Select.Option value={'c'}>C</Select.Option>
31
29
  </Select.Viewport>
30
+ <Select.Arrow />
32
31
  </Select.Content>
33
32
  </Select.Portal>
34
33
  </Select.Root>
35
- {/* TODO(burdon): Highlight is cyan. */}
36
- {/* TODO(burdon): Show vertical divider by default. */}
37
- {/* TODO(burdon): Icon sizes should adapt to density. */}
38
34
  <Toolbar.ToggleGroup type='multiple'>
39
35
  <Toolbar.ToggleGroupItem value='a'>
40
- <TextB />
36
+ <Icon icon='ph--text-b--regular' />
41
37
  </Toolbar.ToggleGroupItem>
42
38
  <Toolbar.ToggleGroupItem value='b'>
43
- <TextItalic />
39
+ <Icon icon='ph--text-italic--regular' />
44
40
  </Toolbar.ToggleGroupItem>
45
41
  <Toolbar.ToggleGroupItem value='c'>
46
- <TextUnderline />
42
+ <Icon icon='ph--text-underline--regular' />
47
43
  </Toolbar.ToggleGroupItem>
48
44
  </Toolbar.ToggleGroup>
49
- {/* TODO(burdon): Highlight isn't shown. */}
50
45
  <Toolbar.ToggleGroup type='single' defaultValue='a'>
51
46
  <Toolbar.ToggleGroupItem value='a'>
52
- <FileTs />
47
+ <Icon icon='ph--file-ts--regular' />
53
48
  </Toolbar.ToggleGroupItem>
54
49
  <Toolbar.ToggleGroupItem value='b'>
55
- <FileJs />
50
+ <Icon icon='ph--file-js--regular' />
56
51
  </Toolbar.ToggleGroupItem>
57
52
  </Toolbar.ToggleGroup>
58
53
  <Toolbar.Button asChild>
59
54
  <Toggle>
60
- <Bug />
55
+ <Icon icon='ph--bug--regular' />
61
56
  </Toggle>
62
57
  </Toolbar.Button>
63
- {/* TODO(burdon): Should not be 'is-full' by default. */}
64
58
  <Input.Root>
65
59
  <Input.TextInput placeholder='Enter text...' />
66
60
  </Input.Root>
67
- {/* TODO(burdon): Checkbox collapsed. */}
68
61
  <Input.Root>
69
62
  <Input.Checkbox checked={checked} onCheckedChange={(value) => setChecked(!!value)} />
70
63
  <Input.Label>Checkbox</Input.Label>
71
64
  </Input.Root>
72
65
  <Toolbar.Button>Test</Toolbar.Button>
73
66
  <Toolbar.Button>
74
- <ArrowClockwise />
67
+ <Icon icon='ph--arrow-clockwise--regular' />
75
68
  </Toolbar.Button>
76
69
  </Toolbar.Root>
77
70
  <Input.Root>
@@ -81,11 +74,14 @@ const DefaultStory = () => {
81
74
  );
82
75
  };
83
76
 
84
- export default {
85
- title: 'ui/react-ui-core/Playground/Controls',
77
+ const meta = {
78
+ title: 'ui/react-ui-core/playground/Controls',
86
79
  render: DefaultStory,
87
- decorators: [withSurfaceVariantsLayout(), withTheme],
88
- parameters: { chromatic: { disableSnapshot: false } },
89
- };
80
+ decorators: [withTheme(), withLayoutVariants()],
81
+ } satisfies Meta<typeof Icon>;
82
+
83
+ export default meta;
84
+
85
+ type Story = StoryObj<typeof meta>;
90
86
 
91
- 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>
@@ -31,15 +20,14 @@ const DefaultStory = ({ children, ...args }: Omit<ButtonProps, 'ref'>) => {
31
20
  </Button>
32
21
  </div>
33
22
  <div className='flex justify-center'>
34
- <IconButton {...args} label='Test' icon='ph--atom--regular' size={7} density='coarse' />
23
+ <IconButton {...args} label='Test' icon='ph--circle--regular' density='coarse' />
35
24
  </div>
36
25
  <div className='flex justify-center'>
37
26
  <IconButton
38
27
  {...args}
39
28
  label='Test'
40
- icon='ph--atom--regular'
29
+ icon='ph--circle--regular'
41
30
  iconOnly
42
- size={7}
43
31
  density='coarse'
44
32
  classNames='px-1.5'
45
33
  />
@@ -54,15 +42,14 @@ const DefaultStory = ({ children, ...args }: Omit<ButtonProps, 'ref'>) => {
54
42
  </Button>
55
43
  </div>
56
44
  <div className='flex justify-center'>
57
- <IconButton {...args} label='Test' icon='ph--atom--regular' size={5} density='fine' classNames='px-2' />
45
+ <IconButton {...args} label='Test' icon='ph--circle--regular' density='fine' classNames='px-2' />
58
46
  </div>
59
47
  <div className='flex justify-center'>
60
48
  <IconButton
61
49
  {...args}
62
50
  label='Test'
63
- icon='ph--atom--regular'
51
+ icon='ph--circle--regular'
64
52
  iconOnly
65
- size={5}
66
53
  density='fine'
67
54
  classNames='py-1 px-1.5'
68
55
  />
@@ -72,7 +59,7 @@ const DefaultStory = ({ children, ...args }: Omit<ButtonProps, 'ref'>) => {
72
59
  {/* Small */}
73
60
  <div className='grid grid-cols-3 gap-4'>
74
61
  <div className='flex justify-center'>
75
- <Button {...args} density='fine' classNames={'!h-[24px] !text-[14px] p-0 px-1.5 min-bs-0'}>
62
+ <Button {...args} density='fine' classNames={'!h-[24px] !text-[14px] p-0 px-1.5 min-h-0'}>
76
63
  {children}
77
64
  </Button>
78
65
  </div>
@@ -80,39 +67,36 @@ const DefaultStory = ({ children, ...args }: Omit<ButtonProps, 'ref'>) => {
80
67
  <IconButton
81
68
  {...args}
82
69
  label='Test'
83
- icon='ph--atom--regular'
70
+ icon='ph--circle--regular'
84
71
  density='fine'
85
- size={4}
86
- classNames={'!h-[24px] !text-[14px] p-1 min-bs-0 gap-0.5'}
72
+ classNames={'!h-[24px] !text-[14px] p-1 min-h-0 gap-0.5'}
87
73
  />
88
74
  </div>
89
75
  <div className='flex justify-center'>
90
76
  <IconButton
91
77
  {...args}
92
78
  label='Test'
93
- icon='ph--atom--regular'
79
+ icon='ph--circle--regular'
94
80
  iconOnly
95
81
  density='fine'
96
- size={4}
97
- classNames={'!h-[24px] !text-[14px] p-1 min-bs-0'}
82
+ classNames={'!h-[24px] !text-[14px] p-1 min-h-0'}
98
83
  />
99
84
  </div>
100
85
  </div>
101
86
 
102
87
  {/* TODO(burdon): Full variant with max width. */}
103
88
  <div className='flex justify-center'>
104
- <Button classNames='w-full max-w-[15rem] rounded' variant='default'>
89
+ <Button classNames='w-full max-w-[15rem] rounded-sm' variant='default'>
105
90
  Test
106
91
  </Button>
107
92
  </div>
108
93
  <div className='flex justify-center'>
109
94
  {/* TODO(burdon): Option to have button on RHS. Default size for icon should be 5 for this (medium) density. */}
110
95
  <IconButton
111
- classNames='w-full max-w-[15rem] rounded'
96
+ classNames='w-full max-w-[15rem] rounded-sm'
112
97
  variant='primary'
113
98
  icon='ph--arrows-clockwise--regular'
114
99
  label='Test'
115
- size={5}
116
100
  />
117
101
  </div>
118
102
  </div>
@@ -120,13 +104,15 @@ const DefaultStory = ({ children, ...args }: Omit<ButtonProps, 'ref'>) => {
120
104
  );
121
105
  };
122
106
 
123
- const meta: Meta<typeof Button> = {
124
- title: 'ui/react-ui-core/Playground/Custom',
107
+ const meta = {
108
+ title: 'ui/react-ui-core/playground/Custom',
125
109
  component: Button,
126
110
  render: DefaultStory,
127
- decorators: [withTheme],
128
- parameters: { layout: 'centered' },
129
- };
111
+ decorators: [withTheme()],
112
+ parameters: {
113
+ layout: 'centered',
114
+ },
115
+ } satisfies Meta<typeof Button>;
130
116
 
131
117
  export default meta;
132
118
 
@@ -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,148 @@
1
+ # Column architecture reference
2
+
3
+ ## Background
4
+
5
+ `Column` establishes a 3-column CSS grid with left/right gutter columns and a center content
6
+ channel. Two CSS custom properties drive the system:
7
+
8
+ - `--gutter` — the gutter track width (e.g. `var(--dx-gutter-md)`); consumed by `ScrollArea.Viewport` for padding.
9
+ - `--dx-col` — the grid-column placement token; set by `Column.Root` and consumed by `withColumn` utilities.
10
+
11
+ ## Column primitives
12
+
13
+ ### Column.Root
14
+
15
+ ```css
16
+ /* column.ts — columnRoot */
17
+ dx-column grid
18
+ /* inline style */
19
+ --gutter: <gutterSize>
20
+ --dx-col: 2 / span 1
21
+ grid-template-columns: <gutter> minmax(0,1fr) <gutter>
22
+ ```
23
+
24
+ Sets the 3-column grid and both CSS variables. All `withColumn` utilities are no-ops outside this context.
25
+
26
+ ### Column.Center
27
+
28
+ ```css
29
+ /* column.ts — columnCenter */
30
+ [grid-column:var(--dx-col,auto)] min-h-0
31
+ ```
32
+
33
+ Places a single element in col 2 (the center track). Does not use subgrid — placement is explicit
34
+ on this element only, so arbitrary compound components (including `display: contents` wrappers) can
35
+ be nested safely.
36
+
37
+ ### Column.Bleed
38
+
39
+ ```css
40
+ /* column.ts — columnBleed */
41
+ col-span-full grid grid-cols-subgrid min-h-0
42
+ ```
43
+
44
+ Spans all 3 columns and propagates the subgrid. Use for `ScrollArea`, full-width dividers, and
45
+ any content that should ignore the gutters.
46
+
47
+ ### Column.Row
48
+
49
+ ```css
50
+ /* column.ts — columnRow */
51
+ col-span-3 grid grid-cols-subgrid
52
+ ```
53
+
54
+ Three-slot icon row. Children map to: `[col-1: icon/slot] [col-2: content] [col-3: icon/action]`.
55
+ Must be a direct child of `Column.Root`.
56
+
57
+ ## withColumn theme utilities
58
+
59
+ Exported from `@dxos/ui-theme`. Components import and call these in their theme functions to
60
+ participate in the Column grid without importing Column React components.
61
+
62
+ ```ts
63
+ withColumn.center();
64
+ // → '[grid-column:var(--dx-col,auto)]'
65
+
66
+ withColumn.propagate();
67
+ // → '[.dx-column_&]:col-span-full [.dx-column_&]:grid [.dx-column_&]:grid-cols-subgrid'
68
+
69
+ withColumn.consumed();
70
+ // → '[--dx-col:auto]'
71
+ ```
72
+
73
+ | Utility | Purpose | Where used |
74
+ | :------------ | :-------------------------------------------------------------------------------- | :---------------------------------------------------------------------------- |
75
+ | `center()` | Place element in col 2 via `--dx-col`. No-op outside Column or inside ScrollArea. | Dialog.Header, Dialog.ActionBar, Form.Content, Form.Actions, SearchList.Input |
76
+ | `propagate()` | Extend Column subgrid to children. No-op outside Column. | Dialog.Body, SearchList.Content |
77
+ | `consumed()` | Reset `--dx-col` after `--gutter` is consumed. | ScrollArea.Viewport |
78
+
79
+ ## CSS custom property cascade
80
+
81
+ ```text
82
+ Column.Root
83
+ sets --gutter = var(--dx-gutter-<size>)
84
+ sets --dx-col = 2 / span 1
85
+
86
+ ├─ Column.Center → grid-column: var(--dx-col) ← consumes --dx-col
87
+ ├─ Column.Bleed → col-span-full, subgrid
88
+ ├─ Column.Row → col-span-3, subgrid
89
+
90
+ └─ withColumn.center() → grid-column: var(--dx-col) ← consumes --dx-col
91
+ withColumn.propagate() → col-span-full, grid, subgrid (inside .dx-column only)
92
+
93
+ └─ ScrollArea.Root → col-span-full (inside .dx-column only)
94
+ ScrollArea.Viewport
95
+ applies pl/pr using --gutter
96
+ withColumn.consumed() → sets --dx-col: auto
97
+
98
+ └─ (nested components no longer auto-position)
99
+ ```
100
+
101
+ ## Component integration
102
+
103
+ ### Dialog
104
+
105
+ | Sub-component | withColumn applied | Effect |
106
+ | :----------------- | :---------------------------- | :---------------------------- |
107
+ | `Dialog.Content` | `Column.Root` (gutter `'sm'`) | Establishes the 3-col grid. |
108
+ | `Dialog.Header` | `withColumn.center()` | Placed in col 2. |
109
+ | `Dialog.Body` | `withColumn.propagate()` | Children inherit the subgrid. |
110
+ | `Dialog.ActionBar` | `withColumn.center()` | Placed in col 2. |
111
+
112
+ ### Form
113
+
114
+ | Sub-component | withColumn applied | Effect |
115
+ | :------------- | :-------------------- | :---------------------------------- |
116
+ | `Form.Content` | `withColumn.center()` | Placed in col 2 when inside Column. |
117
+ | `Form.Actions` | `withColumn.center()` | Placed in col 2 when inside Column. |
118
+
119
+ ### SearchList
120
+
121
+ | Sub-component | withColumn applied | Effect |
122
+ | :------------------------- | :----------------------- | :---------------------------------------------- |
123
+ | `SearchList.Content` | `withColumn.propagate()` | Extends subgrid to children when inside Column. |
124
+ | `SearchList.Input` wrapper | `withColumn.center()` | Input row placed in col 2. |
125
+
126
+ ### Card
127
+
128
+ `Card.Row` uses its own inline subgrid CSS (`col-span-3 grid grid-cols-subgrid`) and does not
129
+ participate in an outer Column grid. `Card.Root` establishes a separate 3-column grid for its
130
+ own icon-slot layout.
131
+
132
+ ## Subgrid chain integrity
133
+
134
+ Every intermediate container between `Column.Root` and a `ScrollArea.Root` must propagate the
135
+ subgrid, otherwise `ScrollArea.Root`'s `[.dx-column_&]:col-span-full` selector will not match
136
+ and the scrollbar will not extend to the gutter.
137
+
138
+ Required chain:
139
+
140
+ ```
141
+ Column.Root (.dx-column)
142
+ → withColumn.propagate() container (col-span-full, grid, grid-cols-subgrid)
143
+ → ScrollArea.Root (.dx-container, [.dx-column_&]:col-span-full)
144
+ → ScrollArea.Viewport (applies --gutter padding, resets --dx-col)
145
+ ```
146
+
147
+ If any intermediate element wraps the ScrollArea without propagating, use `Column.Bleed` or
148
+ apply `withColumn.propagate()` to that wrapper.