@dxos/react-ui 0.8.4-main.c4373fc → 0.8.4-main.cb12b3f963

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 (458) hide show
  1. package/dist/lib/browser/chunk-BDBC6H6V.mjs +848 -0
  2. package/dist/lib/browser/chunk-BDBC6H6V.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +4111 -65
  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 +108 -56
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/browser/translations.mjs +18 -0
  9. package/dist/lib/browser/translations.mjs.map +7 -0
  10. package/dist/lib/node-esm/chunk-3JSJK2ZY.mjs +850 -0
  11. package/dist/lib/node-esm/chunk-3JSJK2ZY.mjs.map +7 -0
  12. package/dist/lib/node-esm/index.mjs +4111 -65
  13. package/dist/lib/node-esm/index.mjs.map +4 -4
  14. package/dist/lib/node-esm/meta.json +1 -1
  15. package/dist/lib/node-esm/testing/index.mjs +108 -56
  16. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  17. package/dist/lib/node-esm/translations.mjs +20 -0
  18. package/dist/lib/node-esm/translations.mjs.map +7 -0
  19. package/dist/types/src/components/Avatars/Avatar.d.ts +1 -1
  20. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  21. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  22. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  23. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  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 +3 -3
  26. package/dist/types/src/components/Button/Button.d.ts.map +1 -0
  27. package/dist/types/src/components/{Buttons → Button}/Button.stories.d.ts +1 -1
  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 +3 -2
  30. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -0
  31. package/dist/types/src/components/{Buttons → Button}/IconButton.stories.d.ts +3 -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/{Buttons → Button}/ToggleGroup.stories.d.ts +6 -6
  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 +127 -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.map +1 -0
  58. package/dist/types/src/components/Dialog/Dialog.d.ts +64 -0
  59. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -0
  60. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +25 -0
  61. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -0
  62. package/dist/types/src/components/Dialog/index.d.ts.map +1 -0
  63. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
  64. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  65. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts +11 -0
  66. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -0
  67. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts +7 -0
  68. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -0
  69. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +19 -0
  70. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -0
  71. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts +9 -0
  72. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -0
  73. package/dist/types/src/components/ErrorFallback/index.d.ts +5 -0
  74. package/dist/types/src/components/ErrorFallback/index.d.ts.map +1 -0
  75. package/dist/types/src/components/Focus/Focus.d.ts +36 -0
  76. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -0
  77. package/dist/types/src/components/Focus/Focus.stories.d.ts +9 -0
  78. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -0
  79. package/dist/types/src/components/Focus/index.d.ts +2 -0
  80. package/dist/types/src/components/Focus/index.d.ts.map +1 -0
  81. package/dist/types/src/components/Icon/Icon.d.ts +4 -1
  82. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  83. package/dist/types/src/components/Icon/Icon.stories.d.ts +25 -0
  84. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -0
  85. package/dist/types/src/components/Image/Image.d.ts +15 -0
  86. package/dist/types/src/components/Image/Image.d.ts.map +1 -0
  87. package/dist/types/src/components/Image/Image.stories.d.ts +34 -0
  88. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -0
  89. package/dist/types/src/components/Image/index.d.ts +2 -0
  90. package/dist/types/src/components/Image/index.d.ts.map +1 -0
  91. package/dist/types/src/components/Input/Input.d.ts +19 -22
  92. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  93. package/dist/types/src/components/Input/Input.stories.d.ts +8 -8
  94. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  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/{Lists → List}/List.stories.d.ts +3 -1
  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/{Lists → List}/Tree.d.ts +2 -2
  102. package/dist/types/src/components/List/Tree.d.ts.map +1 -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.map +1 -0
  108. package/dist/types/src/components/List/index.d.ts.map +1 -0
  109. package/dist/types/src/components/Main/Main.d.ts +24 -21
  110. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  111. package/dist/types/src/components/Main/Main.stories.d.ts +0 -3
  112. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  113. package/dist/types/src/components/Main/useSwipeToDismiss.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.map +1 -0
  117. package/dist/types/src/components/Menu/DropdownMenu.d.ts +121 -0
  118. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
  119. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +28 -0
  120. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
  121. package/dist/types/src/components/Menu/index.d.ts.map +1 -0
  122. package/dist/types/src/components/Message/Message.d.ts +2 -2
  123. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  124. package/dist/types/src/components/Message/Message.stories.d.ts +5 -6
  125. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  126. package/dist/types/src/components/Popover/Popover.d.ts +40 -23
  127. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  128. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  129. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +27 -27
  130. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  131. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +57 -8
  132. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  133. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +68 -0
  134. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -0
  135. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +23 -0
  136. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -0
  137. package/dist/types/src/components/ScrollContainer/index.d.ts +2 -0
  138. package/dist/types/src/components/ScrollContainer/index.d.ts.map +1 -0
  139. package/dist/types/src/components/Select/Select.d.ts +10 -10
  140. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  141. package/dist/types/src/components/Select/Select.stories.d.ts +2 -2
  142. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  143. package/dist/types/src/components/Separator/Separator.d.ts +4 -4
  144. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  145. package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
  146. package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  147. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
  148. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  149. package/dist/types/src/components/Skeleton/index.d.ts +2 -0
  150. package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
  151. package/dist/types/src/components/Splitter/Splitter.d.ts +34 -0
  152. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
  153. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
  154. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
  155. package/dist/types/src/components/Splitter/index.d.ts +2 -0
  156. package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
  157. package/dist/types/src/components/Status/Status.d.ts +3 -4
  158. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  159. package/dist/types/src/components/Status/Status.stories.d.ts +4 -2
  160. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  161. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  162. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  163. package/dist/types/src/components/Tag/Tag.stories.d.ts +0 -5
  164. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  165. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +3 -3
  166. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  167. package/dist/types/src/components/{Menus/DropdownMenu.stories.d.ts → ThemeProvider/ThemeProvider.stories.d.ts} +2 -5
  168. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  169. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +55 -63
  170. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  171. package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
  172. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  173. package/dist/types/src/components/Toast/Toast.d.ts +20 -20
  174. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  175. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  176. package/dist/types/src/components/Toolbar/Toolbar.d.ts +41 -19
  177. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  178. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  179. package/dist/types/src/components/Tooltip/Tooltip.d.ts +10 -10
  180. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  181. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +2 -2
  182. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  183. package/dist/types/src/components/index.d.ts +14 -8
  184. package/dist/types/src/components/index.d.ts.map +1 -1
  185. package/dist/types/src/exemplars/generics.stories.d.ts +19 -0
  186. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
  187. package/dist/types/src/exemplars/slot.stories.d.ts +15 -0
  188. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
  189. package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
  190. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
  191. package/dist/types/src/exemplars/virtualizer.stories.d.ts +11 -0
  192. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -0
  193. package/dist/types/src/hooks/index.d.ts +1 -0
  194. package/dist/types/src/hooks/index.d.ts.map +1 -1
  195. package/dist/types/src/hooks/useDensityContext.d.ts +2 -2
  196. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  197. package/dist/types/src/hooks/useElevationContext.d.ts +1 -1
  198. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  199. package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
  200. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  201. package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -1
  202. package/dist/types/src/hooks/useVisualViewport.d.ts +2 -2
  203. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  204. package/dist/types/src/index.d.ts +2 -1
  205. package/dist/types/src/index.d.ts.map +1 -1
  206. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  207. package/dist/types/src/playground/Custom.stories.d.ts +1 -1
  208. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  209. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  210. package/dist/types/src/primitives/Column/Column.d.ts +33 -0
  211. package/dist/types/src/primitives/Column/Column.d.ts.map +1 -0
  212. package/dist/types/src/primitives/Column/Column.stories.d.ts +25 -0
  213. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -0
  214. package/dist/types/src/primitives/Column/index.d.ts +2 -0
  215. package/dist/types/src/primitives/Column/index.d.ts.map +1 -0
  216. package/dist/types/src/primitives/Container/Container.d.ts +7 -0
  217. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
  218. package/dist/types/src/primitives/Container/Container.stories.d.ts +6 -0
  219. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
  220. package/dist/types/src/primitives/Container/index.d.ts +2 -0
  221. package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
  222. package/dist/types/src/primitives/Flex/Flex.d.ts +11 -0
  223. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
  224. package/dist/types/src/primitives/Flex/Flex.stories.d.ts +8 -0
  225. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -0
  226. package/dist/types/src/primitives/Flex/index.d.ts +2 -0
  227. package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
  228. package/dist/types/src/primitives/Grid/Grid.d.ts +10 -0
  229. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -0
  230. package/dist/types/src/primitives/Grid/Grid.stories.d.ts +8 -0
  231. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -0
  232. package/dist/types/src/primitives/Grid/index.d.ts +2 -0
  233. package/dist/types/src/primitives/Grid/index.d.ts.map +1 -0
  234. package/dist/types/src/primitives/Panel/Panel.d.ts +35 -0
  235. package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -0
  236. package/dist/types/src/primitives/Panel/Panel.stories.d.ts +6 -0
  237. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -0
  238. package/dist/types/src/primitives/Panel/index.d.ts +2 -0
  239. package/dist/types/src/primitives/Panel/index.d.ts.map +1 -0
  240. package/dist/types/src/primitives/index.d.ts +6 -0
  241. package/dist/types/src/primitives/index.d.ts.map +1 -0
  242. package/dist/types/src/testing/Loading.d.ts +9 -0
  243. package/dist/types/src/testing/Loading.d.ts.map +1 -0
  244. package/dist/types/src/testing/decorators/index.d.ts +2 -1
  245. package/dist/types/src/testing/decorators/index.d.ts.map +1 -1
  246. package/dist/types/src/testing/decorators/withLayout.d.ts +15 -0
  247. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -0
  248. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +12 -0
  249. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -0
  250. package/dist/types/src/testing/decorators/withTheme.d.ts +3 -2
  251. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  252. package/dist/types/src/testing/index.d.ts +1 -0
  253. package/dist/types/src/testing/index.d.ts.map +1 -1
  254. package/dist/types/src/translations.d.ts +11 -0
  255. package/dist/types/src/translations.d.ts.map +1 -0
  256. package/dist/types/src/util/index.d.ts +1 -2
  257. package/dist/types/src/util/index.d.ts.map +1 -1
  258. package/dist/types/src/util/usePx.d.ts.map +1 -1
  259. package/dist/types/tsconfig.tsbuildinfo +1 -1
  260. package/package.json +52 -37
  261. package/src/components/Avatars/Avatar.stories.tsx +7 -9
  262. package/src/components/Avatars/Avatar.tsx +7 -15
  263. package/src/components/Avatars/AvatarGroup.stories.tsx +2 -3
  264. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +4 -5
  265. package/src/components/Breadcrumb/Breadcrumb.tsx +11 -37
  266. package/src/components/{Buttons → Button}/Button.stories.tsx +4 -5
  267. package/src/components/{Buttons → Button}/Button.tsx +12 -26
  268. package/src/components/{Buttons → Button}/IconButton.stories.tsx +8 -6
  269. package/src/components/{Buttons → Button}/IconButton.tsx +20 -15
  270. package/src/components/{Buttons → Button}/Toggle.stories.tsx +7 -7
  271. package/src/components/{Buttons → Button}/Toggle.tsx +4 -4
  272. package/src/components/{Buttons → Button}/ToggleGroup.stories.tsx +2 -3
  273. package/src/components/{Buttons → Button}/ToggleGroup.tsx +12 -16
  274. package/src/components/Card/Card.stories.tsx +151 -0
  275. package/src/components/Card/Card.tsx +507 -0
  276. package/src/components/Card/index.ts +5 -0
  277. package/src/components/Clipboard/CopyButton.tsx +8 -9
  278. package/src/components/DensityProvider/DensityProvider.tsx +1 -1
  279. package/src/components/Dialog/AlertDialog.stories.tsx +68 -0
  280. package/src/components/{Dialogs → Dialog}/AlertDialog.tsx +123 -82
  281. package/src/components/Dialog/Dialog.stories.tsx +177 -0
  282. package/src/components/Dialog/Dialog.tsx +285 -0
  283. package/src/components/ElevationProvider/ElevationProvider.tsx +1 -1
  284. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +45 -0
  285. package/src/components/ErrorFallback/ErrorFallback.tsx +70 -0
  286. package/src/components/ErrorFallback/ErrorStack.tsx +114 -0
  287. package/src/components/ErrorFallback/ThrowError.tsx +37 -0
  288. package/src/components/ErrorFallback/index.ts +9 -0
  289. package/src/components/Focus/AUDIT.md +43 -0
  290. package/src/components/Focus/Focus.stories.tsx +230 -0
  291. package/src/components/Focus/Focus.tsx +201 -0
  292. package/src/components/Focus/index.ts +5 -0
  293. package/src/components/Icon/Icon.stories.tsx +143 -0
  294. package/src/components/Icon/Icon.tsx +6 -2
  295. package/src/components/Image/Image.stories.tsx +86 -0
  296. package/src/components/Image/Image.tsx +246 -0
  297. package/src/components/Image/index.ts +5 -0
  298. package/src/components/Input/Input.stories.tsx +21 -41
  299. package/src/components/Input/Input.tsx +38 -74
  300. package/src/components/Link/Link.stories.tsx +2 -3
  301. package/src/components/Link/Link.tsx +2 -2
  302. package/src/components/{Lists → List}/List.stories.tsx +30 -34
  303. package/src/components/{Lists → List}/List.tsx +17 -21
  304. package/src/components/{Lists → List}/ListDropIndicator.tsx +7 -7
  305. package/src/components/{Lists → List}/Tree.stories.tsx +5 -6
  306. package/src/components/{Lists → List}/Tree.tsx +0 -1
  307. package/src/components/{Lists → List}/TreeDropIndicator.tsx +6 -6
  308. package/src/components/{Lists → List}/Treegrid.stories.tsx +29 -30
  309. package/src/components/{Lists → List}/Treegrid.tsx +23 -28
  310. package/src/components/Main/Main.stories.tsx +41 -24
  311. package/src/components/Main/Main.tsx +150 -94
  312. package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +2 -3
  313. package/src/components/{Menus → Menu}/ContextMenu.tsx +9 -33
  314. package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +3 -4
  315. package/src/components/{Menus → Menu}/DropdownMenu.tsx +137 -110
  316. package/src/components/Message/Message.stories.tsx +27 -13
  317. package/src/components/Message/Message.tsx +59 -33
  318. package/src/components/Popover/Popover.stories.tsx +8 -9
  319. package/src/components/Popover/Popover.tsx +116 -94
  320. package/src/components/ScrollArea/ScrollArea.stories.tsx +223 -34
  321. package/src/components/ScrollArea/ScrollArea.tsx +97 -79
  322. package/src/components/ScrollArea/index.ts +1 -1
  323. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +91 -0
  324. package/src/components/ScrollContainer/ScrollContainer.tsx +347 -0
  325. package/src/components/ScrollContainer/index.ts +5 -0
  326. package/src/components/Select/Select.stories.tsx +8 -9
  327. package/src/components/Select/Select.tsx +11 -27
  328. package/src/components/Separator/Separator.tsx +5 -8
  329. package/src/components/Skeleton/Skeleton.stories.tsx +51 -0
  330. package/src/components/Skeleton/Skeleton.tsx +26 -0
  331. package/src/components/Skeleton/index.ts +5 -0
  332. package/src/components/Splitter/Splitter.stories.tsx +83 -0
  333. package/src/components/Splitter/Splitter.tsx +127 -0
  334. package/src/components/Splitter/index.ts +5 -0
  335. package/src/components/Status/Status.stories.tsx +21 -18
  336. package/src/components/Status/Status.tsx +10 -7
  337. package/src/components/Tag/Tag.stories.tsx +6 -12
  338. package/src/components/Tag/Tag.tsx +3 -8
  339. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +31 -0
  340. package/src/components/ThemeProvider/ThemeProvider.tsx +10 -10
  341. package/src/components/ThemeProvider/TranslationsProvider.tsx +1 -16
  342. package/src/components/ThemeProvider/index.ts +3 -3
  343. package/src/components/Toast/Toast.stories.tsx +3 -4
  344. package/src/components/Toast/Toast.tsx +22 -41
  345. package/src/components/Toolbar/Toolbar.stories.tsx +4 -7
  346. package/src/components/Toolbar/Toolbar.tsx +186 -12
  347. package/src/components/Tooltip/Tooltip.stories.tsx +21 -20
  348. package/src/components/Tooltip/Tooltip.tsx +40 -38
  349. package/src/components/index.ts +15 -9
  350. package/src/exemplars/generics.stories.tsx +41 -0
  351. package/src/exemplars/slot.stories.tsx +117 -0
  352. package/src/exemplars/tabster.stories.tsx +127 -0
  353. package/src/exemplars/virtualizer.stories.tsx +137 -0
  354. package/src/hooks/index.ts +1 -0
  355. package/src/hooks/useDensityContext.ts +3 -3
  356. package/src/hooks/useElevationContext.ts +1 -1
  357. package/src/hooks/useSafeArea.ts +2 -2
  358. package/src/hooks/useVisualViewport.ts +3 -3
  359. package/src/index.ts +2 -1
  360. package/src/playground/Controls.stories.tsx +3 -10
  361. package/src/playground/Custom.stories.tsx +13 -18
  362. package/src/playground/Typography.stories.tsx +3 -3
  363. package/src/primitives/Column/AUDIT.md +148 -0
  364. package/src/primitives/Column/Column.stories.tsx +181 -0
  365. package/src/primitives/Column/Column.tsx +165 -0
  366. package/src/primitives/Column/index.ts +5 -0
  367. package/src/primitives/Container/Container.stories.tsx +29 -0
  368. package/src/primitives/Container/Container.tsx +19 -0
  369. package/src/primitives/Container/index.ts +5 -0
  370. package/src/primitives/Flex/Flex.stories.tsx +57 -0
  371. package/src/primitives/Flex/Flex.tsx +27 -0
  372. package/src/primitives/Flex/index.ts +5 -0
  373. package/src/primitives/Grid/Grid.stories.tsx +56 -0
  374. package/src/primitives/Grid/Grid.tsx +30 -0
  375. package/src/primitives/Grid/index.ts +5 -0
  376. package/src/primitives/Panel/Panel.stories.tsx +68 -0
  377. package/src/primitives/Panel/Panel.tsx +120 -0
  378. package/src/primitives/Panel/index.ts +5 -0
  379. package/src/primitives/index.ts +9 -0
  380. package/src/testing/Loading.tsx +47 -0
  381. package/src/testing/decorators/index.ts +2 -1
  382. package/src/testing/decorators/withLayout.tsx +77 -0
  383. package/src/testing/decorators/withLayoutVariants.tsx +48 -0
  384. package/src/testing/decorators/withTheme.tsx +26 -20
  385. package/src/testing/index.ts +2 -0
  386. package/src/translations.ts +19 -0
  387. package/src/util/index.ts +2 -2
  388. package/src/util/usePx.ts +1 -0
  389. package/dist/lib/browser/chunk-B7HPXBP2.mjs +0 -4514
  390. package/dist/lib/browser/chunk-B7HPXBP2.mjs.map +0 -7
  391. package/dist/lib/node-esm/chunk-6JCSY5Y7.mjs +0 -4516
  392. package/dist/lib/node-esm/chunk-6JCSY5Y7.mjs.map +0 -7
  393. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +0 -15
  394. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +0 -1
  395. package/dist/types/src/components/AnchoredOverflow/index.d.ts +0 -2
  396. package/dist/types/src/components/AnchoredOverflow/index.d.ts.map +0 -1
  397. package/dist/types/src/components/Buttons/Button.d.ts.map +0 -1
  398. package/dist/types/src/components/Buttons/Button.stories.d.ts.map +0 -1
  399. package/dist/types/src/components/Buttons/IconButton.d.ts.map +0 -1
  400. package/dist/types/src/components/Buttons/IconButton.stories.d.ts.map +0 -1
  401. package/dist/types/src/components/Buttons/Toggle.d.ts.map +0 -1
  402. package/dist/types/src/components/Buttons/Toggle.stories.d.ts +0 -13
  403. package/dist/types/src/components/Buttons/Toggle.stories.d.ts.map +0 -1
  404. package/dist/types/src/components/Buttons/ToggleGroup.d.ts +0 -27
  405. package/dist/types/src/components/Buttons/ToggleGroup.d.ts.map +0 -1
  406. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +0 -1
  407. package/dist/types/src/components/Buttons/index.d.ts.map +0 -1
  408. package/dist/types/src/components/Dialogs/AlertDialog.d.ts +0 -31
  409. package/dist/types/src/components/Dialogs/AlertDialog.d.ts.map +0 -1
  410. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +0 -1
  411. package/dist/types/src/components/Dialogs/Dialog.d.ts +0 -31
  412. package/dist/types/src/components/Dialogs/Dialog.d.ts.map +0 -1
  413. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts +0 -25
  414. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +0 -1
  415. package/dist/types/src/components/Dialogs/index.d.ts.map +0 -1
  416. package/dist/types/src/components/Lists/List.d.ts.map +0 -1
  417. package/dist/types/src/components/Lists/List.stories.d.ts.map +0 -1
  418. package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +0 -1
  419. package/dist/types/src/components/Lists/Tree.d.ts.map +0 -1
  420. package/dist/types/src/components/Lists/Tree.stories.d.ts.map +0 -1
  421. package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +0 -1
  422. package/dist/types/src/components/Lists/Treegrid.d.ts.map +0 -1
  423. package/dist/types/src/components/Lists/Treegrid.stories.d.ts.map +0 -1
  424. package/dist/types/src/components/Lists/index.d.ts.map +0 -1
  425. package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
  426. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +0 -1
  427. package/dist/types/src/components/Menus/DropdownMenu.d.ts +0 -113
  428. package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
  429. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
  430. package/dist/types/src/components/Menus/index.d.ts.map +0 -1
  431. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts +0 -12
  432. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts.map +0 -1
  433. package/dist/types/src/util/ThemedClassName.d.ts +0 -5
  434. package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
  435. package/dist/types/src/util/domino.d.ts +0 -18
  436. package/dist/types/src/util/domino.d.ts.map +0 -1
  437. package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +0 -59
  438. package/src/components/AnchoredOverflow/index.ts +0 -5
  439. package/src/components/Dialogs/AlertDialog.stories.tsx +0 -69
  440. package/src/components/Dialogs/Dialog.stories.tsx +0 -67
  441. package/src/components/Dialogs/Dialog.tsx +0 -159
  442. package/src/testing/decorators/withSurfaceVariantsLayout.tsx +0 -51
  443. package/src/util/ThemedClassName.ts +0 -7
  444. package/src/util/domino.ts +0 -51
  445. /package/dist/types/src/components/{Buttons → Button}/index.d.ts +0 -0
  446. /package/dist/types/src/components/{Dialogs → Dialog}/AlertDialog.stories.d.ts +0 -0
  447. /package/dist/types/src/components/{Dialogs → Dialog}/index.d.ts +0 -0
  448. /package/dist/types/src/components/{Lists → List}/ListDropIndicator.d.ts +0 -0
  449. /package/dist/types/src/components/{Lists → List}/Tree.stories.d.ts +0 -0
  450. /package/dist/types/src/components/{Lists → List}/TreeDropIndicator.d.ts +0 -0
  451. /package/dist/types/src/components/{Lists → List}/Treegrid.stories.d.ts +0 -0
  452. /package/dist/types/src/components/{Lists → List}/index.d.ts +0 -0
  453. /package/dist/types/src/components/{Menus → Menu}/ContextMenu.stories.d.ts +0 -0
  454. /package/dist/types/src/components/{Menus → Menu}/index.d.ts +0 -0
  455. /package/src/components/{Buttons → Button}/index.ts +0 -0
  456. /package/src/components/{Dialogs → Dialog}/index.ts +0 -0
  457. /package/src/components/{Lists → List}/index.ts +0 -0
  458. /package/src/components/{Menus → Menu}/index.ts +0 -0
@@ -5,13 +5,12 @@
5
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
10
  const meta = {
12
- title: 'ui/react-ui-core/Link',
11
+ title: 'ui/react-ui-core/components/Link',
13
12
  component: Link,
14
- decorators: [withTheme],
13
+ decorators: [withTheme()],
15
14
  } satisfies Meta<typeof Link>;
16
15
 
17
16
  export default meta;
@@ -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
  );
@@ -7,26 +7,18 @@ import { SortableContext, arrayMove, useSortable, verticalListSortingStrategy }
7
7
  import { CSS } from '@dnd-kit/utilities';
8
8
  import { useArrowNavigationGroup } from '@fluentui/react-tabster';
9
9
  import { type Meta, type StoryObj } from '@storybook/react-vite';
10
- import React, { type ReactNode, useState } from 'react';
10
+ import React, { type ReactNode, useCallback, useState } from 'react';
11
11
 
12
- import {
13
- getSize,
14
- ghostHover,
15
- ghostSelected,
16
- ghostSelectedTrackingInterFromNormal,
17
- mx,
18
- surfaceShadow,
19
- } from '@dxos/react-ui-theme';
12
+ import { getSize, ghostHover, mx, surfaceShadow } from '@dxos/ui-theme';
20
13
 
21
14
  import { withTheme } from '../../testing';
22
15
  import { Icon } from '../Icon';
23
-
24
16
  import { List, ListItem, type ListScopedProps } from './List';
25
17
 
26
18
  const meta = {
27
- title: 'ui/react-ui-core/List',
19
+ title: 'ui/react-ui-core/components/List',
28
20
  component: List,
29
- decorators: [withTheme],
21
+ decorators: [withTheme()],
30
22
  } satisfies Meta<typeof List>;
31
23
 
32
24
  export default meta;
@@ -44,11 +36,11 @@ const UniformListItem = ({ id, text }: { id: string; text: string }) => {
44
36
  style={{ transform: CSS.Transform.toString(transform) }}
45
37
  >
46
38
  <ListItem.Endcap>
47
- <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')} />
48
40
  </ListItem.Endcap>
49
- <ListItem.Heading classNames='grow pbs-2'>{text}</ListItem.Heading>
41
+ <ListItem.Heading classNames='grow pt-2'>{text}</ListItem.Heading>
50
42
  <ListItem.Endcap>
51
- <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')} />
52
44
  </ListItem.Endcap>
53
45
  </ListItem.Root>
54
46
  );
@@ -63,16 +55,20 @@ export const UniformSizeDraggable: Story = {
63
55
  })),
64
56
  );
65
57
 
66
- const handleDragEnd = (event: DragEndEvent) => {
67
- const { active, over } = event;
68
- if (active.id !== over?.id) {
69
- setItems((items) => {
70
- const oldIndex = items.findIndex((item) => item.id === active.id);
71
- const newIndex = items.findIndex((item) => item.id === over?.id);
72
- return arrayMove(items, oldIndex, newIndex);
73
- });
74
- }
75
- };
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
+
76
72
  return (
77
73
  <DndContext onDragEnd={handleDragEnd}>
78
74
  <SortableContext items={items.map(({ id }) => id)} strategy={verticalListSortingStrategy}>
@@ -106,13 +102,13 @@ const ManySizesDraggableListItem = ({
106
102
  style={{ transform: CSS.Translate.toString(transform) }}
107
103
  >
108
104
  <ListItem.Endcap>
109
- <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')} />
110
106
  </ListItem.Endcap>
111
- <ListItem.Heading classNames='grow pbs-2' asChild>
107
+ <ListItem.Heading classNames='grow pt-2' asChild>
112
108
  {text}
113
109
  </ListItem.Heading>
114
110
  <ListItem.Endcap>
115
- <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')} />
116
112
  </ListItem.Endcap>
117
113
  </ListItem.Root>
118
114
  );
@@ -126,9 +122,9 @@ export const ManySizesDraggable: Story = {
126
122
  text: (
127
123
  <p
128
124
  className={mx(
129
- 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',
130
126
  surfaceShadow({ elevation: 'positioned' }),
131
- 'mbe-2 p-2 bg-white dark:bg-neutral-800 rounded',
127
+ 'mb-2 p-2 bg-white dark:bg-neutral-800 rounded-sm',
132
128
  )}
133
129
  >{`List item ${index + 1}`}</p>
134
130
  ),
@@ -182,9 +178,9 @@ export const Collapsible: Story = {
182
178
  <ListItem.Root key={id} id={id} collapsible={index !== 2} defaultOpen={index % 2 === 0}>
183
179
  <div role='none' className='grow flex'>
184
180
  {index !== 2 ? <ListItem.OpenTrigger /> : <ListItem.MockOpenTrigger />}
185
- <ListItem.Heading classNames='grow pbs-2'>{text}</ListItem.Heading>
181
+ <ListItem.Heading classNames='grow pt-2'>{text}</ListItem.Heading>
186
182
  <ListItem.Endcap>
187
- <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')} />
188
184
  </ListItem.Endcap>
189
185
  </div>
190
186
  {index !== 2 && <ListItem.CollapsibleContent>{body}</ListItem.CollapsibleContent>}
@@ -225,11 +221,11 @@ export const SelectableListbox: Story = {
225
221
  key={id}
226
222
  tabIndex={0}
227
223
  selected={selectedId === id}
228
- classNames={mx(ghostHover, ghostSelected, ghostSelectedTrackingInterFromNormal)}
224
+ classNames={mx(ghostHover, 'dx-selected')}
229
225
  onClick={() => setSelectedId(id)}
230
226
  onKeyUp={(event) => handleKeyUp(event, id)}
231
227
  >
232
- <ListItem.Heading classNames='flex pis-1 pie-1 items-center grow truncate'>{text}</ListItem.Heading>
228
+ <ListItem.Heading classNames='flex px-1 items-center grow truncate'>{text}</ListItem.Heading>
233
229
  </ListItem.Root>
234
230
  ))}
235
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
  },
@@ -110,14 +106,14 @@ const ListItemOpenTrigger = forwardRef<HTMLButtonElement, ListItemOpenTriggerPro
110
106
  return (
111
107
  <ListPrimitiveItemOpenTrigger
112
108
  {...props}
113
- className={tx('list.item.openTrigger', 'list__listItem__openTrigger', { density }, classNames)}
109
+ className={tx('list.item.openTrigger', { density }, classNames)}
114
110
  ref={forwardedRef}
115
111
  >
116
112
  {children || (
117
113
  <Icon
118
114
  size={3}
119
115
  icon={open ? 'ph--caret-down--bold' : 'ph--caret-right--bold'}
120
- classNames={tx('list.item.openTriggerIcon', 'list__listItem__openTrigger__icon', {})}
116
+ classNames={tx('list.item.openTriggerIcon', {})}
121
117
  />
122
118
  )}
123
119
  </ListPrimitiveItemOpenTrigger>
@@ -134,7 +130,7 @@ const ListItemRoot = forwardRef<HTMLLIElement, ListItemRootProps>(
134
130
  return (
135
131
  <ListPrimitiveItem
136
132
  {...props}
137
- className={tx('list.item.root', 'list__listItem', { density, collapsible: props.collapsible }, classNames)}
133
+ className={tx('list.item.root', { density, collapsible: props.collapsible }, classNames)}
138
134
  ref={forwardedRef}
139
135
  >
140
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
  };
@@ -6,7 +6,6 @@ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React from 'react';
7
7
 
8
8
  import { withTheme } from '../../testing';
9
-
10
9
  import { Tree, TreeItem } from './Tree';
11
10
 
12
11
  type StorybookTreeProps = {
@@ -25,7 +24,7 @@ const createKey = (key: string, prefix?: string) => (prefix === undefined ? key
25
24
  const StorybookTreeItem = ({ data, prefix }: StorybookTreeItemProps) => {
26
25
  const keys = Array.isArray(data) ? Array.from(data.keys()) : Object.keys(data);
27
26
  return (
28
- <Tree.Root density='fine'>
27
+ <Tree.Root>
29
28
  {keys.map((key) => {
30
29
  const id = createKey(String(key), prefix);
31
30
  const value = data[key as keyof typeof data];
@@ -35,10 +34,10 @@ const StorybookTreeItem = ({ data, prefix }: StorybookTreeItemProps) => {
35
34
  <TreeItem.Root key={id} id={id} collapsible={!valueIsScalar} defaultOpen>
36
35
  <div role='none' className='grow flex'>
37
36
  {valueIsScalar ? <TreeItem.MockOpenTrigger /> : <TreeItem.OpenTrigger />}
38
- <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>
39
38
  </div>
40
39
  {!valueIsScalar && (
41
- <TreeItem.Body className='pis-2'>
40
+ <TreeItem.Body className='ps-2'>
42
41
  <Tree.Branch>
43
42
  <StorybookTreeItem data={value} prefix={id} />
44
43
  </Tree.Branch>
@@ -56,10 +55,10 @@ const DefaultStory = ({ data }: StorybookTreeProps) => {
56
55
  };
57
56
 
58
57
  const meta = {
59
- title: 'ui/react-ui-core/Tree',
58
+ title: 'ui/react-ui-core/components/Tree',
60
59
  component: Tree as any,
61
60
  render: DefaultStory,
62
- decorators: [withTheme],
61
+ decorators: [withTheme()],
63
62
  } satisfies Meta<typeof DefaultStory>;
64
63
 
65
64
  export default meta;
@@ -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
  };
@@ -5,14 +5,13 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React from 'react';
7
7
 
8
- import { faker } from '@dxos/random';
8
+ import { random } from '@dxos/random';
9
9
 
10
10
  import { withTheme } from '../../testing';
11
11
  import { Icon } from '../Icon';
12
+ import { Treegrid, TREEGRID_PARENT_OF_SEPARATOR, TREEGRID_PATH_SEPARATOR } from './Treegrid';
12
13
 
13
- import { Treegrid } from './Treegrid';
14
-
15
- faker.seed(1234);
14
+ random.seed(1234);
16
15
 
17
16
  type StorybookNode = {
18
17
  id: string;
@@ -32,33 +31,33 @@ const content = {
32
31
  title: 'Root',
33
32
  nodes: [
34
33
  {
35
- id: faker.string.uuid(),
34
+ id: random.string.uuid(),
36
35
  title: 'Personal Space',
37
36
  icon: 'ph--house--regular',
38
37
  nodes: [
39
38
  {
40
- id: faker.string.uuid(),
41
- title: faker.commerce.productName(),
39
+ id: random.string.uuid(),
40
+ title: random.commerce.productName(),
42
41
  },
43
42
  {
44
- id: faker.string.uuid(),
45
- title: faker.commerce.productName(),
43
+ id: random.string.uuid(),
44
+ title: random.commerce.productName(),
46
45
  },
47
46
  {
48
- id: faker.string.uuid(),
49
- title: faker.commerce.productName(),
47
+ id: random.string.uuid(),
48
+ title: random.commerce.productName(),
50
49
  nodes: [
51
50
  {
52
- id: faker.string.uuid(),
53
- title: faker.commerce.productName(),
51
+ id: random.string.uuid(),
52
+ title: random.commerce.productName(),
54
53
  nodes: [
55
54
  {
56
- id: faker.string.uuid(),
57
- title: faker.commerce.productName(),
55
+ id: random.string.uuid(),
56
+ title: random.commerce.productName(),
58
57
  },
59
58
  {
60
- id: faker.string.uuid(),
61
- title: faker.commerce.productName(),
59
+ id: random.string.uuid(),
60
+ title: random.commerce.productName(),
62
61
  },
63
62
  ],
64
63
  },
@@ -67,24 +66,24 @@ const content = {
67
66
  ],
68
67
  },
69
68
  {
70
- id: faker.string.uuid(),
71
- title: faker.commerce.productName(),
69
+ id: random.string.uuid(),
70
+ title: random.commerce.productName(),
72
71
  icon: 'ph--planet--regular',
73
72
  nodes: [
74
73
  {
75
- id: faker.string.uuid(),
76
- title: faker.commerce.productName(),
74
+ id: random.string.uuid(),
75
+ title: random.commerce.productName(),
77
76
  },
78
77
  ],
79
78
  },
80
79
  {
81
- id: faker.string.uuid(),
82
- title: faker.commerce.productName(),
80
+ id: random.string.uuid(),
81
+ title: random.commerce.productName(),
83
82
  icon: 'ph--sailboat--regular',
84
83
  },
85
84
  {
86
- id: faker.string.uuid(),
87
- title: faker.commerce.productName(),
85
+ id: random.string.uuid(),
86
+ title: random.commerce.productName(),
88
87
  icon: 'ph--planet--regular',
89
88
  },
90
89
  ],
@@ -129,11 +128,11 @@ const DefaultStory = () => {
129
128
  return (
130
129
  <Treegrid.Row
131
130
  key={node.id}
132
- id={path.join(Treegrid.PATH_SEPARATOR)}
133
- {...(parentOf && { parentOf: parentOf.join(Treegrid.PARENT_OF_SEPARATOR) })}
131
+ id={path.join(TREEGRID_PATH_SEPARATOR)}
132
+ {...(parentOf && { parentOf: parentOf.join(TREEGRID_PARENT_OF_SEPARATOR) })}
134
133
  >
135
134
  <Treegrid.Cell indent classNames='flex items-center'>
136
- {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' />}
137
136
  {node.title}
138
137
  </Treegrid.Cell>
139
138
  </Treegrid.Row>
@@ -144,10 +143,10 @@ const DefaultStory = () => {
144
143
  };
145
144
 
146
145
  const meta = {
147
- title: 'ui/react-ui-core/Treegrid',
146
+ title: 'ui/react-ui-core/components/Treegrid',
148
147
  component: Treegrid.Root as any,
149
148
  render: DefaultStory,
150
- decorators: [withTheme],
149
+ decorators: [withTheme()],
151
150
  } satisfies Meta<typeof DefaultStory>;
152
151
 
153
152
  export default meta;
@@ -15,10 +15,12 @@ import React, {
15
15
  useCallback,
16
16
  } from 'react';
17
17
 
18
+ import { composable, composableProps } from '@dxos/ui-theme';
19
+
18
20
  import { useThemeContext } from '../../hooks';
19
21
  import { type ThemedClassName } from '../../util';
20
22
 
21
- // TODO(thure): A lot of the accessible affordances for this kind of thing need to be implemented per https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/treegrid_role
23
+ // TODO(thure): https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/treegrid_role
22
24
 
23
25
  const TREEGRID_ROW_NAME = 'TreegridRow';
24
26
 
@@ -34,18 +36,20 @@ type TreegridRowContextValue = {
34
36
  const [TreegridRowProvider, useTreegridRowContext] =
35
37
  createTreegridRowContext<TreegridRowContextValue>(TREEGRID_ROW_NAME);
36
38
 
37
- const PATH_SEPARATOR = '~';
38
- const PARENT_OF_SEPARATOR = ' ';
39
+ // TODO(burdon): Replace with functions.
40
+ export const TREEGRID_PATH_SEPARATOR = '~';
41
+ export const TREEGRID_PARENT_OF_SEPARATOR = ' ';
39
42
 
40
43
  type TreegridRootProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.div>> & {
41
44
  gridTemplateColumns: CSSProperties['gridTemplateColumns'];
42
45
  asChild?: boolean;
43
46
  };
44
47
 
45
- const TreegridRoot = forwardRef<HTMLDivElement, TreegridRootProps>(
46
- ({ asChild, classNames, children, style, gridTemplateColumns, ...props }, forwardedRef) => {
48
+ const TreegridRoot = composable<HTMLDivElement, TreegridRootProps>(
49
+ ({ asChild, classNames, children, style, gridTemplateColumns, onKeyDown: onKeyDownProp, ...props }, forwardedRef) => {
47
50
  const { tx } = useThemeContext();
48
- const Root = asChild ? Slot : Primitive.div;
51
+ const { className, role: _role, ...rest } = composableProps<HTMLDivElement>(props, { classNames });
52
+ const Comp = asChild ? Slot : Primitive.div;
49
53
  const { findFirstFocusable } = useFocusFinders();
50
54
 
51
55
  const handleKeyDown = useCallback(
@@ -89,22 +93,22 @@ const TreegridRoot = forwardRef<HTMLDivElement, TreegridRootProps>(
89
93
  break;
90
94
  }
91
95
  }
92
- props.onKeyDown?.(event);
96
+ onKeyDownProp?.(event);
93
97
  },
94
- [findFirstFocusable],
98
+ [findFirstFocusable, onKeyDownProp],
95
99
  );
96
100
 
97
101
  return (
98
- <Root
102
+ <Comp
99
103
  role='treegrid'
100
- onKeyDown={handleKeyDown}
101
- {...props}
102
- className={tx('treegrid.root', 'treegrid', {}, classNames)}
104
+ {...rest}
105
+ className={tx('treegrid.root', {}, className)}
103
106
  style={{ ...style, gridTemplateColumns }}
107
+ onKeyDown={handleKeyDown}
104
108
  ref={forwardedRef}
105
109
  >
106
110
  {children}
107
- </Root>
111
+ </Comp>
108
112
  );
109
113
  },
110
114
  );
@@ -135,8 +139,8 @@ const TreegridRow = forwardRef<HTMLDivElement, TreegridRowScopedProps<TreegridRo
135
139
  forwardedRef,
136
140
  ) => {
137
141
  const { tx } = useThemeContext();
138
- const Root = asChild ? Slot : Primitive.div;
139
- const pathParts = id.split(PATH_SEPARATOR);
142
+ const Comp = asChild ? Slot : Primitive.div;
143
+ const pathParts = id.split(TREEGRID_PATH_SEPARATOR);
140
144
  const level = pathParts.length - 1;
141
145
  const [open, onOpenChange] = useControllableState({
142
146
  prop: propsOpen,
@@ -146,17 +150,17 @@ const TreegridRow = forwardRef<HTMLDivElement, TreegridRowScopedProps<TreegridRo
146
150
 
147
151
  return (
148
152
  <TreegridRowProvider open={open} onOpenChange={onOpenChange} scope={__treegridRowScope}>
149
- <Root
153
+ <Comp
150
154
  role='row'
151
155
  aria-level={level}
152
- className={tx('treegrid.row', 'treegrid__row', { level }, classNames)}
156
+ className={tx('treegrid.row', { level }, classNames)}
153
157
  {...(parentOf && { 'aria-expanded': open, 'aria-owns': parentOf })}
154
158
  {...props}
155
159
  id={id}
156
160
  ref={forwardedRef}
157
161
  >
158
162
  {children}
159
- </Root>
163
+ </Comp>
160
164
  </TreegridRowProvider>
161
165
  );
162
166
  },
@@ -168,12 +172,7 @@ const TreegridCell = forwardRef<HTMLDivElement, TreegridCellProps>(
168
172
  ({ classNames, children, indent, ...props }, forwardedRef) => {
169
173
  const { tx } = useThemeContext();
170
174
  return (
171
- <div
172
- role='gridcell'
173
- className={tx('treegrid.cell', 'treegrid__cell', { indent }, classNames)}
174
- {...props}
175
- ref={forwardedRef}
176
- >
175
+ <div role='gridcell' className={tx('treegrid.cell', { indent }, classNames)} {...props} ref={forwardedRef}>
177
176
  {children}
178
177
  </div>
179
178
  );
@@ -186,8 +185,4 @@ export const Treegrid = {
186
185
  Root: TreegridRoot,
187
186
  Row: TreegridRow,
188
187
  Cell: TreegridCell,
189
- PARENT_OF_SEPARATOR,
190
- PATH_SEPARATOR,
191
- createTreegridRowScope,
192
- useTreegridRowContext,
193
188
  };