@dxos/react-ui 0.8.4-main.fd6878d → 0.8.4-staging.ac66bdf99f

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 (470) 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 -60
  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 -60
  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 -60
  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 -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.map +1 -1
  22. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts +8 -20
  23. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  24. package/dist/types/src/components/{Buttons → Button}/Button.d.ts +4 -4
  25. package/dist/types/src/components/Button/Button.d.ts.map +1 -0
  26. package/dist/types/src/components/Button/Button.stories.d.ts +17 -0
  27. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -0
  28. package/dist/types/src/components/{Buttons → Button}/IconButton.d.ts +3 -3
  29. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -0
  30. package/dist/types/src/components/Button/IconButton.stories.d.ts +16 -0
  31. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -0
  32. package/dist/types/src/components/{Buttons → Button}/Toggle.d.ts +2 -2
  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 +120 -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/CopyButton.d.ts +1 -1
  48. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  49. package/dist/types/src/components/Clipboard/index.d.ts +10 -1
  50. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  51. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts +1 -1
  52. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  53. package/dist/types/src/components/Dialog/AlertDialog.d.ts +51 -0
  54. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -0
  55. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts +11 -0
  56. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -0
  57. package/dist/types/src/components/Dialog/Dialog.d.ts +64 -0
  58. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -0
  59. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +25 -0
  60. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -0
  61. package/dist/types/src/components/Dialog/index.d.ts.map +1 -0
  62. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
  63. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  64. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts +11 -0
  65. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -0
  66. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts +7 -0
  67. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -0
  68. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +19 -0
  69. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -0
  70. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts +9 -0
  71. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -0
  72. package/dist/types/src/components/ErrorFallback/index.d.ts +5 -0
  73. package/dist/types/src/components/ErrorFallback/index.d.ts.map +1 -0
  74. package/dist/types/src/components/Focus/Focus.d.ts +36 -0
  75. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -0
  76. package/dist/types/src/components/Focus/Focus.stories.d.ts +9 -0
  77. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -0
  78. package/dist/types/src/components/Focus/index.d.ts +2 -0
  79. package/dist/types/src/components/Focus/index.d.ts.map +1 -0
  80. package/dist/types/src/components/Icon/Icon.d.ts +5 -2
  81. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  82. package/dist/types/src/components/Icon/Icon.stories.d.ts +25 -0
  83. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -0
  84. package/dist/types/src/components/Image/Image.d.ts +14 -0
  85. package/dist/types/src/components/Image/Image.d.ts.map +1 -0
  86. package/dist/types/src/components/Image/Image.stories.d.ts +33 -0
  87. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -0
  88. package/dist/types/src/components/Image/index.d.ts +2 -0
  89. package/dist/types/src/components/Image/index.d.ts.map +1 -0
  90. package/dist/types/src/components/Input/Input.d.ts +7 -9
  91. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  92. package/dist/types/src/components/Input/Input.stories.d.ts +16 -17
  93. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  94. package/dist/types/src/components/Link/Link.stories.d.ts +8 -8
  95. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  96. package/dist/types/src/components/{Lists → List}/List.d.ts +6 -4
  97. package/dist/types/src/components/List/List.d.ts.map +1 -0
  98. package/dist/types/src/components/List/List.stories.d.ts +16 -0
  99. package/dist/types/src/components/List/List.stories.d.ts.map +1 -0
  100. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -0
  101. package/dist/types/src/components/List/Tree.d.ts.map +1 -0
  102. package/dist/types/src/components/List/Tree.stories.d.ts +15 -0
  103. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -0
  104. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -0
  105. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts +5 -9
  106. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -0
  107. package/dist/types/src/components/List/Treegrid.stories.d.ts +12 -0
  108. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -0
  109. package/dist/types/src/components/List/index.d.ts.map +1 -0
  110. package/dist/types/src/components/Main/Main.d.ts +17 -27
  111. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  112. package/dist/types/src/components/Main/Main.stories.d.ts +6 -10
  113. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  114. package/dist/types/src/components/{Menus → Menu}/ContextMenu.d.ts +6 -6
  115. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -0
  116. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts +12 -0
  117. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -0
  118. package/dist/types/src/components/Menu/DropdownMenu.d.ts +113 -0
  119. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
  120. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +28 -0
  121. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
  122. package/dist/types/src/components/Menu/index.d.ts.map +1 -0
  123. package/dist/types/src/components/Message/Message.d.ts +1 -1
  124. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  125. package/dist/types/src/components/Message/Message.stories.d.ts +12 -22
  126. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  127. package/dist/types/src/components/Popover/Popover.d.ts +34 -25
  128. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  129. package/dist/types/src/components/Popover/Popover.stories.d.ts +6 -34
  130. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  131. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +27 -27
  132. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  133. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +50 -27
  134. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  135. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +60 -0
  136. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -0
  137. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +23 -0
  138. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -0
  139. package/dist/types/src/components/ScrollContainer/index.d.ts +2 -0
  140. package/dist/types/src/components/ScrollContainer/index.d.ts.map +1 -0
  141. package/dist/types/src/components/Select/Select.d.ts +10 -10
  142. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  143. package/dist/types/src/components/Select/Select.stories.d.ts +6 -11
  144. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  145. package/dist/types/src/components/Separator/Separator.d.ts +4 -4
  146. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  147. package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
  148. package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  149. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
  150. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  151. package/dist/types/src/components/Skeleton/index.d.ts +2 -0
  152. package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
  153. package/dist/types/src/components/Splitter/Splitter.d.ts +34 -0
  154. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
  155. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
  156. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
  157. package/dist/types/src/components/Splitter/index.d.ts +2 -0
  158. package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
  159. package/dist/types/src/components/Status/Status.d.ts +3 -4
  160. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  161. package/dist/types/src/components/Status/Status.stories.d.ts +6 -10
  162. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  163. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  164. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  165. package/dist/types/src/components/Tag/Tag.stories.d.ts +8 -13
  166. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  167. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +3 -3
  168. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  169. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts +12 -0
  170. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  171. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +1 -8
  172. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  173. package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
  174. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  175. package/dist/types/src/components/Toast/Toast.d.ts +19 -19
  176. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  177. package/dist/types/src/components/Toast/Toast.stories.d.ts +6 -44
  178. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  179. package/dist/types/src/components/Toolbar/Toolbar.d.ts +40 -22
  180. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  181. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +6 -50
  182. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  183. package/dist/types/src/components/Tooltip/Tooltip.d.ts +10 -12
  184. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  185. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +10 -63
  186. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  187. package/dist/types/src/components/index.d.ts +14 -8
  188. package/dist/types/src/components/index.d.ts.map +1 -1
  189. package/dist/types/src/exemplars/generics.stories.d.ts +19 -0
  190. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
  191. package/dist/types/src/exemplars/slot.stories.d.ts +15 -0
  192. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
  193. package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
  194. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
  195. package/dist/types/src/exemplars/virtualizer.stories.d.ts +11 -0
  196. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -0
  197. package/dist/types/src/hooks/index.d.ts +1 -0
  198. package/dist/types/src/hooks/index.d.ts.map +1 -1
  199. package/dist/types/src/hooks/useDensityContext.d.ts +2 -2
  200. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  201. package/dist/types/src/hooks/useElevationContext.d.ts +1 -1
  202. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  203. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  204. package/dist/types/src/hooks/useVisualViewport.d.ts +2 -2
  205. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  206. package/dist/types/src/index.d.ts +2 -1
  207. package/dist/types/src/index.d.ts.map +1 -1
  208. package/dist/types/src/playground/Controls.stories.d.ts +5 -9
  209. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  210. package/dist/types/src/playground/Custom.stories.d.ts +12 -4
  211. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  212. package/dist/types/src/playground/Typography.stories.d.ts +5 -11
  213. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  214. package/dist/types/src/primitives/Column/Column.d.ts +33 -0
  215. package/dist/types/src/primitives/Column/Column.d.ts.map +1 -0
  216. package/dist/types/src/primitives/Column/Column.stories.d.ts +25 -0
  217. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -0
  218. package/dist/types/src/primitives/Column/index.d.ts +2 -0
  219. package/dist/types/src/primitives/Column/index.d.ts.map +1 -0
  220. package/dist/types/src/primitives/Container/Container.d.ts +7 -0
  221. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
  222. package/dist/types/src/primitives/Container/Container.stories.d.ts +6 -0
  223. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
  224. package/dist/types/src/primitives/Container/index.d.ts +2 -0
  225. package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
  226. package/dist/types/src/primitives/Flex/Flex.d.ts +11 -0
  227. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
  228. package/dist/types/src/primitives/Flex/Flex.stories.d.ts +8 -0
  229. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -0
  230. package/dist/types/src/primitives/Flex/index.d.ts +2 -0
  231. package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
  232. package/dist/types/src/primitives/Grid/Grid.d.ts +10 -0
  233. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -0
  234. package/dist/types/src/primitives/Grid/Grid.stories.d.ts +8 -0
  235. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -0
  236. package/dist/types/src/primitives/Grid/index.d.ts +2 -0
  237. package/dist/types/src/primitives/Grid/index.d.ts.map +1 -0
  238. package/dist/types/src/primitives/Panel/Panel.d.ts +35 -0
  239. package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -0
  240. package/dist/types/src/primitives/Panel/Panel.stories.d.ts +6 -0
  241. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -0
  242. package/dist/types/src/primitives/Panel/index.d.ts +2 -0
  243. package/dist/types/src/primitives/Panel/index.d.ts.map +1 -0
  244. package/dist/types/src/primitives/index.d.ts +6 -0
  245. package/dist/types/src/primitives/index.d.ts.map +1 -0
  246. package/dist/types/src/testing/Loading.d.ts +9 -0
  247. package/dist/types/src/testing/Loading.d.ts.map +1 -0
  248. package/dist/types/src/testing/decorators/index.d.ts +2 -1
  249. package/dist/types/src/testing/decorators/index.d.ts.map +1 -1
  250. package/dist/types/src/testing/decorators/withLayout.d.ts +15 -0
  251. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -0
  252. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +12 -0
  253. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -0
  254. package/dist/types/src/testing/decorators/withTheme.d.ts +5 -1
  255. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  256. package/dist/types/src/testing/index.d.ts +1 -0
  257. package/dist/types/src/testing/index.d.ts.map +1 -1
  258. package/dist/types/src/translations.d.ts +11 -0
  259. package/dist/types/src/translations.d.ts.map +1 -0
  260. package/dist/types/src/util/index.d.ts +2 -1
  261. package/dist/types/src/util/index.d.ts.map +1 -1
  262. package/dist/types/src/util/usePx.d.ts +8 -0
  263. package/dist/types/src/util/usePx.d.ts.map +1 -0
  264. package/dist/types/tsconfig.tsbuildinfo +1 -1
  265. package/package.json +43 -32
  266. package/src/components/Avatars/Avatar.stories.tsx +22 -16
  267. package/src/components/Avatars/Avatar.tsx +7 -15
  268. package/src/components/Avatars/AvatarGroup.stories.tsx +10 -8
  269. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +19 -16
  270. package/src/components/Breadcrumb/Breadcrumb.tsx +11 -37
  271. package/src/components/{Buttons → Button}/Button.stories.tsx +7 -10
  272. package/src/components/{Buttons → Button}/Button.tsx +12 -26
  273. package/src/components/{Buttons → Button}/IconButton.stories.tsx +17 -13
  274. package/src/components/{Buttons → Button}/IconButton.tsx +20 -16
  275. package/src/components/Button/Toggle.stories.tsx +36 -0
  276. package/src/components/{Buttons → Button}/Toggle.tsx +4 -4
  277. package/src/components/{Buttons → Button}/ToggleGroup.stories.tsx +10 -9
  278. package/src/components/Button/ToggleGroup.tsx +50 -0
  279. package/src/components/Card/Card.stories.tsx +151 -0
  280. package/src/components/Card/Card.tsx +493 -0
  281. package/src/components/Card/index.ts +5 -0
  282. package/src/components/Clipboard/CopyButton.tsx +8 -9
  283. package/src/components/DensityProvider/DensityProvider.tsx +1 -1
  284. package/src/components/Dialog/AlertDialog.stories.tsx +68 -0
  285. package/src/components/{Dialogs → Dialog}/AlertDialog.tsx +123 -82
  286. package/src/components/Dialog/Dialog.stories.tsx +177 -0
  287. package/src/components/Dialog/Dialog.tsx +285 -0
  288. package/src/components/ElevationProvider/ElevationProvider.tsx +1 -1
  289. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +45 -0
  290. package/src/components/ErrorFallback/ErrorFallback.tsx +70 -0
  291. package/src/components/ErrorFallback/ErrorStack.tsx +114 -0
  292. package/src/components/ErrorFallback/ThrowError.tsx +37 -0
  293. package/src/components/ErrorFallback/index.ts +9 -0
  294. package/src/components/Focus/AUDIT.md +43 -0
  295. package/src/components/Focus/Focus.stories.tsx +230 -0
  296. package/src/components/Focus/Focus.tsx +201 -0
  297. package/src/components/Focus/index.ts +5 -0
  298. package/src/components/Icon/Icon.stories.tsx +143 -0
  299. package/src/components/Icon/Icon.tsx +6 -2
  300. package/src/components/Image/Image.stories.tsx +86 -0
  301. package/src/components/Image/Image.tsx +223 -0
  302. package/src/components/Image/index.ts +5 -0
  303. package/src/components/Input/Input.stories.tsx +25 -48
  304. package/src/components/Input/Input.tsx +40 -76
  305. package/src/components/Link/Link.stories.tsx +10 -8
  306. package/src/components/Link/Link.tsx +2 -2
  307. package/src/components/{Lists → List}/List.stories.tsx +41 -44
  308. package/src/components/{Lists → List}/List.tsx +21 -22
  309. package/src/components/{Lists → List}/ListDropIndicator.tsx +7 -7
  310. package/src/components/{Lists → List}/Tree.stories.tsx +14 -13
  311. package/src/components/{Lists → List}/Tree.tsx +0 -1
  312. package/src/components/{Lists → List}/TreeDropIndicator.tsx +6 -6
  313. package/src/components/{Lists → List}/Treegrid.stories.tsx +39 -35
  314. package/src/components/List/Treegrid.tsx +188 -0
  315. package/src/components/Main/Main.stories.tsx +52 -28
  316. package/src/components/Main/Main.tsx +170 -100
  317. package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +11 -10
  318. package/src/components/{Menus → Menu}/ContextMenu.tsx +10 -33
  319. package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +12 -11
  320. package/src/components/{Menus → Menu}/DropdownMenu.tsx +151 -114
  321. package/src/components/Message/Message.stories.tsx +35 -18
  322. package/src/components/Message/Message.tsx +43 -34
  323. package/src/components/Popover/Popover.stories.tsx +17 -16
  324. package/src/components/Popover/Popover.tsx +118 -96
  325. package/src/components/ScrollArea/ScrollArea.stories.tsx +223 -32
  326. package/src/components/ScrollArea/ScrollArea.tsx +97 -79
  327. package/src/components/ScrollArea/index.ts +1 -1
  328. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +91 -0
  329. package/src/components/ScrollContainer/ScrollContainer.tsx +347 -0
  330. package/src/components/ScrollContainer/index.ts +5 -0
  331. package/src/components/Select/Select.stories.tsx +19 -18
  332. package/src/components/Select/Select.tsx +16 -31
  333. package/src/components/Separator/Separator.tsx +5 -8
  334. package/src/components/Skeleton/Skeleton.stories.tsx +51 -0
  335. package/src/components/Skeleton/Skeleton.tsx +26 -0
  336. package/src/components/Skeleton/index.ts +5 -0
  337. package/src/components/Splitter/Splitter.stories.tsx +83 -0
  338. package/src/components/Splitter/Splitter.tsx +127 -0
  339. package/src/components/Splitter/index.ts +5 -0
  340. package/src/components/Status/Status.stories.tsx +28 -23
  341. package/src/components/Status/Status.tsx +10 -7
  342. package/src/components/Tag/Tag.stories.tsx +16 -14
  343. package/src/components/Tag/Tag.tsx +3 -8
  344. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +31 -0
  345. package/src/components/ThemeProvider/ThemeProvider.tsx +10 -10
  346. package/src/components/ThemeProvider/TranslationsProvider.tsx +1 -16
  347. package/src/components/ThemeProvider/index.ts +3 -3
  348. package/src/components/Toast/Toast.stories.tsx +12 -11
  349. package/src/components/Toast/Toast.tsx +22 -41
  350. package/src/components/Toolbar/Toolbar.stories.tsx +14 -14
  351. package/src/components/Toolbar/Toolbar.tsx +185 -11
  352. package/src/components/Tooltip/Tooltip.stories.tsx +34 -30
  353. package/src/components/Tooltip/Tooltip.tsx +42 -39
  354. package/src/components/index.ts +15 -9
  355. package/src/exemplars/generics.stories.tsx +41 -0
  356. package/src/exemplars/slot.stories.tsx +117 -0
  357. package/src/exemplars/tabster.stories.tsx +127 -0
  358. package/src/exemplars/virtualizer.stories.tsx +137 -0
  359. package/src/hooks/index.ts +1 -0
  360. package/src/hooks/useDensityContext.ts +3 -3
  361. package/src/hooks/useElevationContext.ts +1 -1
  362. package/src/hooks/useSafeArea.ts +3 -2
  363. package/src/hooks/useVisualViewport.ts +4 -4
  364. package/src/index.ts +2 -1
  365. package/src/playground/Controls.stories.tsx +12 -15
  366. package/src/playground/Custom.stories.tsx +18 -32
  367. package/src/playground/Typography.stories.tsx +11 -9
  368. package/src/primitives/Column/AUDIT.md +148 -0
  369. package/src/primitives/Column/Column.stories.tsx +181 -0
  370. package/src/primitives/Column/Column.tsx +165 -0
  371. package/src/primitives/Column/index.ts +5 -0
  372. package/src/primitives/Container/Container.stories.tsx +29 -0
  373. package/src/primitives/Container/Container.tsx +19 -0
  374. package/src/primitives/Container/index.ts +5 -0
  375. package/src/primitives/Flex/Flex.stories.tsx +57 -0
  376. package/src/primitives/Flex/Flex.tsx +27 -0
  377. package/src/primitives/Flex/index.ts +5 -0
  378. package/src/primitives/Grid/Grid.stories.tsx +56 -0
  379. package/src/primitives/Grid/Grid.tsx +30 -0
  380. package/src/primitives/Grid/index.ts +5 -0
  381. package/src/primitives/Panel/Panel.stories.tsx +68 -0
  382. package/src/primitives/Panel/Panel.tsx +120 -0
  383. package/src/primitives/Panel/index.ts +5 -0
  384. package/src/primitives/index.ts +9 -0
  385. package/src/testing/Loading.tsx +47 -0
  386. package/src/testing/decorators/index.ts +2 -1
  387. package/src/testing/decorators/withLayout.tsx +77 -0
  388. package/src/testing/decorators/withLayoutVariants.tsx +48 -0
  389. package/src/testing/decorators/withTheme.tsx +37 -0
  390. package/src/testing/index.ts +2 -0
  391. package/src/translations.ts +19 -0
  392. package/src/util/index.ts +3 -1
  393. package/src/util/usePx.ts +62 -0
  394. package/dist/lib/browser/chunk-BKNGMGOK.mjs +0 -4373
  395. package/dist/lib/browser/chunk-BKNGMGOK.mjs.map +0 -7
  396. package/dist/lib/node-esm/chunk-D2HZS6F4.mjs +0 -4375
  397. package/dist/lib/node-esm/chunk-D2HZS6F4.mjs.map +0 -7
  398. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +0 -15
  399. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +0 -1
  400. package/dist/types/src/components/AnchoredOverflow/index.d.ts +0 -2
  401. package/dist/types/src/components/AnchoredOverflow/index.d.ts.map +0 -1
  402. package/dist/types/src/components/Buttons/Button.d.ts.map +0 -1
  403. package/dist/types/src/components/Buttons/Button.stories.d.ts +0 -12
  404. package/dist/types/src/components/Buttons/Button.stories.d.ts.map +0 -1
  405. package/dist/types/src/components/Buttons/IconButton.d.ts.map +0 -1
  406. package/dist/types/src/components/Buttons/IconButton.stories.d.ts +0 -22
  407. package/dist/types/src/components/Buttons/IconButton.stories.d.ts.map +0 -1
  408. package/dist/types/src/components/Buttons/Toggle.d.ts.map +0 -1
  409. package/dist/types/src/components/Buttons/Toggle.stories.d.ts +0 -19
  410. package/dist/types/src/components/Buttons/Toggle.stories.d.ts.map +0 -1
  411. package/dist/types/src/components/Buttons/ToggleGroup.d.ts +0 -28
  412. package/dist/types/src/components/Buttons/ToggleGroup.d.ts.map +0 -1
  413. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts +0 -39
  414. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +0 -1
  415. package/dist/types/src/components/Buttons/index.d.ts.map +0 -1
  416. package/dist/types/src/components/Dialogs/AlertDialog.d.ts +0 -31
  417. package/dist/types/src/components/Dialogs/AlertDialog.d.ts.map +0 -1
  418. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts +0 -43
  419. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +0 -1
  420. package/dist/types/src/components/Dialogs/Dialog.d.ts +0 -31
  421. package/dist/types/src/components/Dialogs/Dialog.d.ts.map +0 -1
  422. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts +0 -48
  423. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +0 -1
  424. package/dist/types/src/components/Dialogs/index.d.ts.map +0 -1
  425. package/dist/types/src/components/Lists/List.d.ts.map +0 -1
  426. package/dist/types/src/components/Lists/List.stories.d.ts +0 -37
  427. package/dist/types/src/components/Lists/List.stories.d.ts.map +0 -1
  428. package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +0 -1
  429. package/dist/types/src/components/Lists/Tree.d.ts.map +0 -1
  430. package/dist/types/src/components/Lists/Tree.stories.d.ts +0 -41
  431. package/dist/types/src/components/Lists/Tree.stories.d.ts.map +0 -1
  432. package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +0 -1
  433. package/dist/types/src/components/Lists/Treegrid.d.ts.map +0 -1
  434. package/dist/types/src/components/Lists/Treegrid.stories.d.ts +0 -10
  435. package/dist/types/src/components/Lists/Treegrid.stories.d.ts.map +0 -1
  436. package/dist/types/src/components/Lists/index.d.ts.map +0 -1
  437. package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
  438. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts +0 -50
  439. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +0 -1
  440. package/dist/types/src/components/Menus/DropdownMenu.d.ts +0 -112
  441. package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
  442. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts +0 -50
  443. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
  444. package/dist/types/src/components/Menus/index.d.ts.map +0 -1
  445. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts +0 -12
  446. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts.map +0 -1
  447. package/dist/types/src/util/ThemedClassName.d.ts +0 -5
  448. package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
  449. package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +0 -59
  450. package/src/components/AnchoredOverflow/index.ts +0 -5
  451. package/src/components/Buttons/Toggle.stories.tsx +0 -34
  452. package/src/components/Buttons/ToggleGroup.tsx +0 -41
  453. package/src/components/Dialogs/AlertDialog.stories.tsx +0 -67
  454. package/src/components/Dialogs/Dialog.stories.tsx +0 -66
  455. package/src/components/Dialogs/Dialog.tsx +0 -159
  456. package/src/components/Lists/Treegrid.tsx +0 -152
  457. package/src/testing/decorators/withSurfaceVariantsLayout.tsx +0 -51
  458. package/src/testing/decorators/withTheme.ts +0 -25
  459. package/src/util/ThemedClassName.ts +0 -7
  460. /package/dist/types/src/components/{Buttons → Button}/index.d.ts +0 -0
  461. /package/dist/types/src/components/{Dialogs → Dialog}/index.d.ts +0 -0
  462. /package/dist/types/src/components/{Lists → List}/ListDropIndicator.d.ts +0 -0
  463. /package/dist/types/src/components/{Lists → List}/Tree.d.ts +0 -0
  464. /package/dist/types/src/components/{Lists → List}/TreeDropIndicator.d.ts +0 -0
  465. /package/dist/types/src/components/{Lists → List}/index.d.ts +0 -0
  466. /package/dist/types/src/components/{Menus → Menu}/index.d.ts +0 -0
  467. /package/src/components/{Buttons → Button}/index.ts +0 -0
  468. /package/src/components/{Dialogs → Dialog}/index.ts +0 -0
  469. /package/src/components/{Lists → List}/index.ts +0 -0
  470. /package/src/components/{Menus → Menu}/index.ts +0 -0
@@ -2,17 +2,19 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
 
7
7
  import { withTheme } from '../../testing';
8
-
9
8
  import { Link } from './Link';
10
9
 
11
- export default {
12
- title: 'ui/react-ui-core/Link',
10
+ const meta = {
11
+ title: 'ui/react-ui-core/components/Link',
13
12
  component: Link,
14
- decorators: [withTheme],
15
- parameters: { chromatic: { disableSnapshot: false } },
16
- } as any;
13
+ decorators: [withTheme()],
14
+ } satisfies Meta<typeof Link>;
15
+
16
+ export default meta;
17
+
18
+ type Story = StoryObj<typeof meta>;
17
19
 
18
- export const Default = { args: { children: 'Hello', href: '#' } };
20
+ export const Default: Story = { args: { children: 'Hello', href: '#' } };
@@ -18,7 +18,7 @@ export type LinkProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.a
18
18
  export const Link = forwardRef<HTMLAnchorElement, LinkProps>(
19
19
  ({ asChild, variant, classNames, ...props }, forwardedRef) => {
20
20
  const { tx } = useThemeContext();
21
- const Root = asChild ? Slot : Primitive.a;
22
- return <Root {...props} className={tx('link.root', 'link', { variant }, classNames)} ref={forwardedRef} />;
21
+ const Comp = asChild ? Slot : Primitive.a;
22
+ return <Comp {...props} className={tx('link.root', { variant }, classNames)} ref={forwardedRef} />;
23
23
  },
24
24
  );
@@ -2,34 +2,28 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { DndContext, type DragEndEvent, type DragStartEvent } from '@dnd-kit/core';
8
6
  import { SortableContext, arrayMove, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable';
9
7
  import { CSS } from '@dnd-kit/utilities';
10
8
  import { useArrowNavigationGroup } from '@fluentui/react-tabster';
11
- import React, { type ReactNode, useState } from 'react';
9
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
10
+ import React, { type ReactNode, useCallback, useState } from 'react';
12
11
 
13
- import {
14
- getSize,
15
- ghostHover,
16
- ghostSelected,
17
- ghostSelectedTrackingInterFromNormal,
18
- mx,
19
- surfaceShadow,
20
- } from '@dxos/react-ui-theme';
12
+ import { getSize, ghostHover, mx, surfaceShadow } from '@dxos/ui-theme';
21
13
 
22
14
  import { withTheme } from '../../testing';
23
15
  import { Icon } from '../Icon';
24
-
25
16
  import { List, ListItem, type ListScopedProps } from './List';
26
17
 
27
- export default {
28
- title: 'ui/react-ui-core/List',
18
+ const meta = {
19
+ title: 'ui/react-ui-core/components/List',
29
20
  component: List,
30
- decorators: [withTheme],
31
- parameters: { chromatic: { disableSnapshot: false } },
32
- };
21
+ decorators: [withTheme()],
22
+ } satisfies Meta<typeof List>;
23
+
24
+ export default meta;
25
+
26
+ type Story = StoryObj<typeof meta>;
33
27
 
34
28
  const UniformListItem = ({ id, text }: { id: string; text: string }) => {
35
29
  const { attributes, listeners, setNodeRef, transform } = useSortable({ id });
@@ -42,17 +36,17 @@ const UniformListItem = ({ id, text }: { id: string; text: string }) => {
42
36
  style={{ transform: CSS.Transform.toString(transform) }}
43
37
  >
44
38
  <ListItem.Endcap>
45
- <Icon icon='ph--dots-six-vertical--regular' classNames={mx(getSize(5), 'mbs-2.5')} />
39
+ <Icon icon='ph--dots-six-vertical--regular' classNames={mx(getSize(5), 'mt-2.5')} />
46
40
  </ListItem.Endcap>
47
- <ListItem.Heading classNames='grow pbs-2'>{text}</ListItem.Heading>
41
+ <ListItem.Heading classNames='grow pt-2'>{text}</ListItem.Heading>
48
42
  <ListItem.Endcap>
49
- <Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), 'mbs-2.5')} />
43
+ <Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), 'mt-2.5')} />
50
44
  </ListItem.Endcap>
51
45
  </ListItem.Root>
52
46
  );
53
47
  };
54
48
 
55
- export const UniformSizeDraggable = {
49
+ export const UniformSizeDraggable: Story = {
56
50
  render: ({ ...args }) => {
57
51
  const [items, setItems] = useState(
58
52
  [...Array(12)].map((_, index) => ({
@@ -61,16 +55,20 @@ export const UniformSizeDraggable = {
61
55
  })),
62
56
  );
63
57
 
64
- const handleDragEnd = (event: DragEndEvent) => {
65
- const { active, over } = event;
66
- if (active.id !== over?.id) {
67
- setItems((items) => {
68
- const oldIndex = items.findIndex((item) => item.id === active.id);
69
- const newIndex = items.findIndex((item) => item.id === over?.id);
70
- return arrayMove(items, oldIndex, newIndex);
71
- });
72
- }
73
- };
58
+ const handleDragEnd = useCallback(
59
+ (event: DragEndEvent) => {
60
+ const { active, over } = event;
61
+ if (active.id !== over?.id) {
62
+ setItems((items) => {
63
+ const oldIndex = items.findIndex((item) => item.id === active.id);
64
+ const newIndex = items.findIndex((item) => item.id === over?.id);
65
+ return arrayMove(items, oldIndex, newIndex);
66
+ });
67
+ }
68
+ },
69
+ [items],
70
+ );
71
+
74
72
  return (
75
73
  <DndContext onDragEnd={handleDragEnd}>
76
74
  <SortableContext items={items.map(({ id }) => id)} strategy={verticalListSortingStrategy}>
@@ -104,19 +102,19 @@ const ManySizesDraggableListItem = ({
104
102
  style={{ transform: CSS.Translate.toString(transform) }}
105
103
  >
106
104
  <ListItem.Endcap>
107
- <Icon icon='ph--dots-six-vertical--regular' classNames={mx(getSize(5), 'mbs-2.5')} />
105
+ <Icon icon='ph--dots-six-vertical--regular' classNames={mx(getSize(5), 'mt-2.5')} />
108
106
  </ListItem.Endcap>
109
- <ListItem.Heading classNames='grow pbs-2' asChild>
107
+ <ListItem.Heading classNames='grow pt-2' asChild>
110
108
  {text}
111
109
  </ListItem.Heading>
112
110
  <ListItem.Endcap>
113
- <Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), 'mbs-2.5')} />
111
+ <Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), 'mt-2.5')} />
114
112
  </ListItem.Endcap>
115
113
  </ListItem.Root>
116
114
  );
117
115
  };
118
116
 
119
- export const ManySizesDraggable = {
117
+ export const ManySizesDraggable: Story = {
120
118
  render: ({ ...args }) => {
121
119
  const [items, setItems] = useState(
122
120
  [...Array(12)].map((_, index) => ({
@@ -124,9 +122,9 @@ export const ManySizesDraggable = {
124
122
  text: (
125
123
  <p
126
124
  className={mx(
127
- index % 3 === 0 ? 'bs-20' : index % 2 === 0 ? 'bs-12' : 'bs-8',
125
+ index % 3 === 0 ? 'h-20' : index % 2 === 0 ? 'h-12' : 'h-8',
128
126
  surfaceShadow({ elevation: 'positioned' }),
129
- 'mbe-2 p-2 bg-white dark:bg-neutral-800 rounded',
127
+ 'mb-2 p-2 bg-white dark:bg-neutral-800 rounded-sm',
130
128
  )}
131
129
  >{`List item ${index + 1}`}</p>
132
130
  ),
@@ -164,7 +162,7 @@ export const ManySizesDraggable = {
164
162
  args: {},
165
163
  };
166
164
 
167
- export const Collapsible = {
165
+ export const Collapsible: Story = {
168
166
  render: ({ ...args }) => {
169
167
  const [items, _setItems] = useState(
170
168
  [...Array(12)].map((_, index) => ({
@@ -180,9 +178,9 @@ export const Collapsible = {
180
178
  <ListItem.Root key={id} id={id} collapsible={index !== 2} defaultOpen={index % 2 === 0}>
181
179
  <div role='none' className='grow flex'>
182
180
  {index !== 2 ? <ListItem.OpenTrigger /> : <ListItem.MockOpenTrigger />}
183
- <ListItem.Heading classNames='grow pbs-2'>{text}</ListItem.Heading>
181
+ <ListItem.Heading classNames='grow pt-2'>{text}</ListItem.Heading>
184
182
  <ListItem.Endcap>
185
- <Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), 'mbs-2.5')} />
183
+ <Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), 'mt-2.5')} />
186
184
  </ListItem.Endcap>
187
185
  </div>
188
186
  {index !== 2 && <ListItem.CollapsibleContent>{body}</ListItem.CollapsibleContent>}
@@ -193,11 +191,10 @@ export const Collapsible = {
193
191
  },
194
192
  args: {
195
193
  variant: 'unordered',
196
- // toggleOpenLabel: 'Open/close storybook list item', // TODO(burdon): ???
197
194
  },
198
195
  };
199
196
 
200
- export const SelectableListbox = {
197
+ export const SelectableListbox: Story = {
201
198
  render: () => {
202
199
  const [selectedId, setSelectedId] = useState<string>();
203
200
  const arrowNavigationAttrs = useArrowNavigationGroup({ axis: 'vertical' });
@@ -224,11 +221,11 @@ export const SelectableListbox = {
224
221
  key={id}
225
222
  tabIndex={0}
226
223
  selected={selectedId === id}
227
- classNames={mx('items-center', ghostHover, ghostSelected, ghostSelectedTrackingInterFromNormal)}
224
+ classNames={mx(ghostHover, 'dx-selected')}
228
225
  onClick={() => setSelectedId(id)}
229
226
  onKeyUp={(event) => handleKeyUp(event, id)}
230
227
  >
231
- <ListItem.Heading classNames='grow'>Lorem ipsum dolor sit amet</ListItem.Heading>
228
+ <ListItem.Heading classNames='flex px-1 items-center grow truncate'>{text}</ListItem.Heading>
232
229
  </ListItem.Root>
233
230
  ))}
234
231
  </List>
@@ -2,6 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
+ import { Primitive } from '@radix-ui/react-primitive';
5
6
  import { Slot } from '@radix-ui/react-slot';
6
7
  import React, { type ComponentPropsWithoutRef, type FC, type ForwardRefExoticComponent, forwardRef } from 'react';
7
8
 
@@ -23,24 +24,25 @@ import {
23
24
  useListContext,
24
25
  useListItemContext,
25
26
  } from '@dxos/react-list';
26
- import { type Density } from '@dxos/react-ui-types';
27
+ import { composable, composableProps } from '@dxos/ui-theme';
28
+ import { type Density } from '@dxos/ui-types';
27
29
 
28
30
  import { useDensityContext, useThemeContext } from '../../hooks';
29
31
  import { type ThemedClassName } from '../../util';
30
32
  import { DensityProvider } from '../DensityProvider';
31
33
  import { Icon } from '../Icon';
32
-
33
34
  import { ListDropIndicator } from './ListDropIndicator';
34
35
 
35
- type ListProps = ThemedClassName<ListPrimitiveProps> & { density?: Density };
36
+ type ListProps = ThemedClassName<ListPrimitiveProps & { density?: Density }>;
36
37
 
37
- const List = forwardRef<HTMLOListElement, ListProps>(({ classNames, children, ...props }, forwardedRef) => {
38
+ const List = composable<HTMLOListElement, ListProps>(({ children, ...props }, forwardedRef) => {
38
39
  const { tx } = useThemeContext();
39
40
  const density = useDensityContext(props.density);
41
+ const { className, ...rest } = composableProps(props);
40
42
 
41
43
  return (
42
44
  <DensityProvider density={density}>
43
- <ListPrimitive {...props} className={tx('list.root', 'list', {}, classNames)} ref={forwardedRef}>
45
+ <ListPrimitive {...rest} className={tx('list.root', {}, className)} ref={forwardedRef}>
44
46
  {children}
45
47
  </ListPrimitive>
46
48
  </DensityProvider>
@@ -51,18 +53,18 @@ type ListItemEndcapProps = ThemedClassName<ComponentPropsWithoutRef<'div'>> & {
51
53
 
52
54
  const ListItemEndcap = forwardRef<HTMLDivElement, ListItemEndcapProps>(
53
55
  ({ children, classNames, asChild, ...props }, forwardedRef) => {
54
- const Root = asChild ? Slot : 'div';
56
+ const Comp = asChild ? Slot : Primitive.div;
55
57
  const density = useDensityContext();
56
58
  const { tx } = useThemeContext();
57
59
  return (
58
- <Root
60
+ <Comp
59
61
  {...(!asChild && { role: 'none' })}
60
62
  {...props}
61
- className={tx('list.item.endcap', 'list__listItem__endcap', { density }, classNames)}
63
+ className={tx('list.item.endcap', { density }, classNames)}
62
64
  ref={forwardedRef}
63
65
  >
64
66
  {children}
65
- </Root>
67
+ </Comp>
66
68
  );
67
69
  },
68
70
  );
@@ -73,13 +75,7 @@ const MockListItemOpenTrigger = ({
73
75
  }: ThemedClassName<Omit<ComponentPropsWithoutRef<'div'>, 'children'>>) => {
74
76
  const density = useDensityContext();
75
77
  const { tx } = useThemeContext();
76
- return (
77
- <div
78
- role='none'
79
- {...props}
80
- className={tx('list.item.openTrigger', 'list__listItem__openTrigger--mock', { density }, classNames)}
81
- />
82
- );
78
+ return <div role='none' {...props} className={tx('list.item.openTrigger', { density }, classNames)} />;
83
79
  };
84
80
 
85
81
  type ListItemHeadingProps = ThemedClassName<ListPrimitiveItemHeadingProps>;
@@ -91,10 +87,10 @@ const ListItemHeading = forwardRef<HTMLParagraphElement, ListItemHeadingProps>(
91
87
  return (
92
88
  <ListPrimitiveItemHeading
93
89
  {...props}
94
- className={tx('list.item.heading', 'list__listItem__heading', { density }, classNames)}
90
+ className={tx('list.item.heading', { density }, classNames)}
95
91
  ref={forwardedRef}
96
92
  >
97
- {children}
93
+ <span>{children}</span>
98
94
  </ListPrimitiveItemHeading>
99
95
  );
100
96
  },
@@ -107,15 +103,18 @@ const ListItemOpenTrigger = forwardRef<HTMLButtonElement, ListItemOpenTriggerPro
107
103
  const { tx } = useThemeContext();
108
104
  const density = useDensityContext();
109
105
  const { open } = useListItemContext(LIST_ITEM_NAME, __listItemScope);
110
- const iconName = open ? 'ph--caret-down--bold' : 'ph--caret-right--bold';
111
106
  return (
112
107
  <ListPrimitiveItemOpenTrigger
113
108
  {...props}
114
- className={tx('list.item.openTrigger', 'list__listItem__openTrigger', { density }, classNames)}
109
+ className={tx('list.item.openTrigger', { density }, classNames)}
115
110
  ref={forwardedRef}
116
111
  >
117
112
  {children || (
118
- <Icon icon={iconName} classNames={tx('list.item.openTriggerIcon', 'list__listItem__openTrigger__icon', {})} />
113
+ <Icon
114
+ size={3}
115
+ icon={open ? 'ph--caret-down--bold' : 'ph--caret-right--bold'}
116
+ classNames={tx('list.item.openTriggerIcon', {})}
117
+ />
119
118
  )}
120
119
  </ListPrimitiveItemOpenTrigger>
121
120
  );
@@ -131,7 +130,7 @@ const ListItemRoot = forwardRef<HTMLLIElement, ListItemRootProps>(
131
130
  return (
132
131
  <ListPrimitiveItem
133
132
  {...props}
134
- className={tx('list.item.root', 'list__listItem', { density, collapsible: props.collapsible }, classNames)}
133
+ className={tx('list.item.root', { density, collapsible: props.collapsible }, classNames)}
135
134
  ref={forwardedRef}
136
135
  >
137
136
  {children}
@@ -16,16 +16,16 @@ const edgeToOrientationMap: Record<Edge, Orientation> = {
16
16
 
17
17
  const orientationStyles: Record<Orientation, HTMLAttributes<HTMLElement>['className']> = {
18
18
  horizontal:
19
- 'h-[--line-thickness] left-[calc(var(--line-inset)+var(--terminal-radius))] right-[--line-inset] before:left-[--terminal-inset]',
19
+ 'h-(--line-thickness) left-[calc(var(--line-inset)+var(--terminal-radius))] right-(--line-inset) before:left-(--terminal-inset)',
20
20
  vertical:
21
- 'w-[--line-thickness] top-[calc(var(--line-inset)+var(--terminal-radius))] bottom-[--line-inset] before:top-[--terminal-inset]',
21
+ 'w-(--line-thickness) top-[calc(var(--line-inset)+var(--terminal-radius))] bottom-(--line-inset) before:top-(--terminal-inset)',
22
22
  };
23
23
 
24
24
  const edgeStyles: Record<Edge, HTMLAttributes<HTMLElement>['className']> = {
25
- top: 'top-[--line-offset] before:top-[--offset-terminal]',
26
- right: 'right-[--line-offset] before:right-[--offset-terminal]',
27
- bottom: 'bottom-[--line-offset] before:bottom-[--offset-terminal]',
28
- left: 'left-[--line-offset] before:left-[--offset-terminal]',
25
+ top: 'top-(--line-offset) before:top-(--offset-terminal)',
26
+ right: 'right-(--line-offset) before:right-(--offset-terminal)',
27
+ bottom: 'bottom-(--line-offset) before:bottom-(--offset-terminal)',
28
+ left: 'left-(--line-offset) before:left-(--offset-terminal)',
29
29
  };
30
30
 
31
31
  const strokeSize = 2;
@@ -64,7 +64,7 @@ export const ListDropIndicator = ({
64
64
  '--offset-terminal': `${offsetToAlignTerminalWithLine}px`,
65
65
  } as CSSProperties
66
66
  }
67
- className={`absolute z-10 pointer-events-none bg-accentSurface before:content-[''] before:w-[--terminal-size] before:h-[--terminal-size] box-border before:absolute before:border-[length:--line-thickness] before:border-solid before:border-accentSurface before:rounded-full ${orientationStyles[orientation]} ${edgeStyles[edge]}`}
67
+ className={`absolute z-10 pointer-events-none bg-accent-surface before:content-[''] before:w-(--terminal-size) before:h-(--terminal-size) box-border before:absolute before:border-[length:--line-thickness] before:border-solid before:border-accent-surface before:rounded-full ${orientationStyles[orientation]} ${edgeStyles[edge]}`}
68
68
  />
69
69
  );
70
70
  };
@@ -2,12 +2,10 @@
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
-
11
9
  import { Tree, TreeItem } from './Tree';
12
10
 
13
11
  type StorybookTreeProps = {
@@ -26,7 +24,7 @@ const createKey = (key: string, prefix?: string) => (prefix === undefined ? key
26
24
  const StorybookTreeItem = ({ data, prefix }: StorybookTreeItemProps) => {
27
25
  const keys = Array.isArray(data) ? Array.from(data.keys()) : Object.keys(data);
28
26
  return (
29
- <Tree.Root density='fine'>
27
+ <Tree.Root>
30
28
  {keys.map((key) => {
31
29
  const id = createKey(String(key), prefix);
32
30
  const value = data[key as keyof typeof data];
@@ -36,10 +34,10 @@ const StorybookTreeItem = ({ data, prefix }: StorybookTreeItemProps) => {
36
34
  <TreeItem.Root key={id} id={id} collapsible={!valueIsScalar} defaultOpen>
37
35
  <div role='none' className='grow flex'>
38
36
  {valueIsScalar ? <TreeItem.MockOpenTrigger /> : <TreeItem.OpenTrigger />}
39
- <TreeItem.Heading classNames='grow pbs-1'>{valueIsScalar ? String(value) : key}</TreeItem.Heading>
37
+ <TreeItem.Heading classNames='grow pt-1'>{valueIsScalar ? String(value) : key}</TreeItem.Heading>
40
38
  </div>
41
39
  {!valueIsScalar && (
42
- <TreeItem.Body className='pis-2'>
40
+ <TreeItem.Body className='ps-2'>
43
41
  <Tree.Branch>
44
42
  <StorybookTreeItem data={value} prefix={id} />
45
43
  </Tree.Branch>
@@ -56,15 +54,18 @@ const DefaultStory = ({ data }: StorybookTreeProps) => {
56
54
  return <StorybookTreeItem data={data} />;
57
55
  };
58
56
 
59
- export default {
60
- title: 'ui/react-ui-core/Tree',
61
- component: Tree,
57
+ const meta = {
58
+ title: 'ui/react-ui-core/components/Tree',
59
+ component: Tree as any,
62
60
  render: DefaultStory,
63
- decorators: [withTheme],
64
- parameters: { chromatic: { disableSnapshot: false } },
65
- };
61
+ decorators: [withTheme()],
62
+ } satisfies Meta<typeof DefaultStory>;
63
+
64
+ export default meta;
65
+
66
+ type Story = StoryObj<typeof meta>;
66
67
 
67
- export const Default = {
68
+ export const Default: Story = {
68
69
  args: {
69
70
  data: {
70
71
  foo: 100,
@@ -5,7 +5,6 @@
5
5
  import React, { type ComponentPropsWithoutRef, type FC, type ForwardRefExoticComponent, forwardRef } from 'react';
6
6
 
7
7
  import { type ThemedClassName } from '../../util';
8
-
9
8
  import {
10
9
  LIST_ITEM_NAME,
11
10
  List,
@@ -21,14 +21,14 @@ const edgeToOrientationMap: Record<InstructionType, Orientation> = {
21
21
  const orientationStyles: Record<Orientation, HTMLAttributes<HTMLElement>['className']> = {
22
22
  // TODO(wittjosiah): Stop using left/right here.
23
23
  sibling:
24
- 'bs-[--line-thickness] left-[--horizontal-indent] right-0 bg-accentSurface before:left-[--negative-terminal-size]',
25
- child: 'is-full block-start-0 block-end-0 border-[length:--line-thickness] before:invisible',
24
+ 'h-(--line-thickness) left-(--horizontal-indent) right-0 bg-accent-surface before:left-(--negative-terminal-size)',
25
+ child: 'inset-0 border-[length:var(--line-thickness)] before:invisible',
26
26
  };
27
27
 
28
28
  const instructionStyles: Record<InstructionType, HTMLAttributes<HTMLElement>['className']> = {
29
- 'reorder-above': 'block-start-[--line-offset] before:block-start-[--offset-terminal]',
30
- 'reorder-below': 'block-end-[--line-offset] before:block-end-[--offset-terminal]',
31
- 'make-child': 'border-accentSurface',
29
+ 'reorder-above': 'top-(--line-offset) before:top-(--offset-terminal)',
30
+ 'reorder-below': 'bottom-(--line-offset) before:bottom-(--offset-terminal)',
31
+ 'make-child': 'border-accent-surface',
32
32
  // TODO(wittjosiah): This is not occurring in the current implementation.
33
33
  reparent: '',
34
34
  };
@@ -64,7 +64,7 @@ export const TreeDropIndicator = ({ instruction, gap = 0 }: DropIndicatorProps)
64
64
  '--horizontal-indent': `${desiredInstruction.currentLevel * desiredInstruction.indentPerLevel + 4}px`,
65
65
  } as CSSProperties
66
66
  }
67
- className={`absolute z-10 pointer-events-none before:is-[--terminal-size] before:bs-[--terminal-size] box-border before:absolute before:border-[length:--line-thickness] before:border-solid before:border-accentSurface before:rounded-full ${orientationStyles[orientation]} ${instructionStyles[desiredInstruction.type]}`}
67
+ className={`absolute z-10 pointer-events-none before:w-(--terminal-size) before:h-(--terminal-size) box-border before:absolute before:border-[length:--line-thickness] before:border-solid before:border-accent-surface before:rounded-full ${orientationStyles[orientation]} ${instructionStyles[desiredInstruction.type]}`}
68
68
  ></div>
69
69
  );
70
70
  };
@@ -2,16 +2,16 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
5
6
  import React from 'react';
6
7
 
7
- import { faker } from '@dxos/random';
8
+ import { random } from '@dxos/random';
8
9
 
9
10
  import { withTheme } from '../../testing';
10
11
  import { Icon } from '../Icon';
12
+ import { Treegrid, TREEGRID_PARENT_OF_SEPARATOR, TREEGRID_PATH_SEPARATOR } from './Treegrid';
11
13
 
12
- import { Treegrid } from './Treegrid';
13
-
14
- faker.seed(1234);
14
+ random.seed(1234);
15
15
 
16
16
  type StorybookNode = {
17
17
  id: string;
@@ -31,33 +31,33 @@ const content = {
31
31
  title: 'Root',
32
32
  nodes: [
33
33
  {
34
- id: faker.string.uuid(),
34
+ id: random.string.uuid(),
35
35
  title: 'Personal Space',
36
36
  icon: 'ph--house--regular',
37
37
  nodes: [
38
38
  {
39
- id: faker.string.uuid(),
40
- title: faker.commerce.productName(),
39
+ id: random.string.uuid(),
40
+ title: random.commerce.productName(),
41
41
  },
42
42
  {
43
- id: faker.string.uuid(),
44
- title: faker.commerce.productName(),
43
+ id: random.string.uuid(),
44
+ title: random.commerce.productName(),
45
45
  },
46
46
  {
47
- id: faker.string.uuid(),
48
- title: faker.commerce.productName(),
47
+ id: random.string.uuid(),
48
+ title: random.commerce.productName(),
49
49
  nodes: [
50
50
  {
51
- id: faker.string.uuid(),
52
- title: faker.commerce.productName(),
51
+ id: random.string.uuid(),
52
+ title: random.commerce.productName(),
53
53
  nodes: [
54
54
  {
55
- id: faker.string.uuid(),
56
- title: faker.commerce.productName(),
55
+ id: random.string.uuid(),
56
+ title: random.commerce.productName(),
57
57
  },
58
58
  {
59
- id: faker.string.uuid(),
60
- title: faker.commerce.productName(),
59
+ id: random.string.uuid(),
60
+ title: random.commerce.productName(),
61
61
  },
62
62
  ],
63
63
  },
@@ -66,28 +66,28 @@ const content = {
66
66
  ],
67
67
  },
68
68
  {
69
- id: faker.string.uuid(),
70
- title: faker.commerce.productName(),
69
+ id: random.string.uuid(),
70
+ title: random.commerce.productName(),
71
71
  icon: 'ph--planet--regular',
72
72
  nodes: [
73
73
  {
74
- id: faker.string.uuid(),
75
- title: faker.commerce.productName(),
74
+ id: random.string.uuid(),
75
+ title: random.commerce.productName(),
76
76
  },
77
77
  ],
78
78
  },
79
79
  {
80
- id: faker.string.uuid(),
81
- title: faker.commerce.productName(),
80
+ id: random.string.uuid(),
81
+ title: random.commerce.productName(),
82
82
  icon: 'ph--sailboat--regular',
83
83
  },
84
84
  {
85
- id: faker.string.uuid(),
86
- title: faker.commerce.productName(),
85
+ id: random.string.uuid(),
86
+ title: random.commerce.productName(),
87
87
  icon: 'ph--planet--regular',
88
88
  },
89
89
  ],
90
- } satisfies StorybookNode;
90
+ } as StorybookNode;
91
91
 
92
92
  function* visitor(node: StorybookNode, isOpen?: (node: StorybookNode) => boolean): Generator<StorybookIteratorNode> {
93
93
  const stack: StorybookIteratorNode[] = [
@@ -128,11 +128,11 @@ const DefaultStory = () => {
128
128
  return (
129
129
  <Treegrid.Row
130
130
  key={node.id}
131
- id={path.join(Treegrid.PATH_SEPARATOR)}
132
- {...(parentOf && { parentOf: parentOf.join(Treegrid.PARENT_OF_SEPARATOR) })}
131
+ id={path.join(TREEGRID_PATH_SEPARATOR)}
132
+ {...(parentOf && { parentOf: parentOf.join(TREEGRID_PARENT_OF_SEPARATOR) })}
133
133
  >
134
134
  <Treegrid.Cell indent classNames='flex items-center'>
135
- {node.icon && <Icon icon={node.icon} classNames='is-[1em] bs-[1em] mlb-1' />}
135
+ {node.icon && <Icon icon={node.icon} classNames='w-[1em] h-[1em] my-1' />}
136
136
  {node.title}
137
137
  </Treegrid.Cell>
138
138
  </Treegrid.Row>
@@ -142,11 +142,15 @@ const DefaultStory = () => {
142
142
  );
143
143
  };
144
144
 
145
- export default {
146
- title: 'ui/react-ui-core/Treegrid',
147
- component: Treegrid.Root,
145
+ const meta = {
146
+ title: 'ui/react-ui-core/components/Treegrid',
147
+ component: Treegrid.Root as any,
148
148
  render: DefaultStory,
149
- decorators: [withTheme],
150
- };
149
+ decorators: [withTheme()],
150
+ } satisfies Meta<typeof DefaultStory>;
151
+
152
+ export default meta;
153
+
154
+ type Story = StoryObj<typeof meta>;
151
155
 
152
- export const Default = {};
156
+ export const Default: Story = {};