@dxos/react-ui 0.8.4-main.dedc0f3 → 0.8.4-main.e250131250

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-LUPEFGHJ.mjs +776 -0
  2. package/dist/lib/browser/chunk-LUPEFGHJ.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +4100 -62
  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 +99 -60
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/chunk-EQOBFLZC.mjs +778 -0
  9. package/dist/lib/node-esm/chunk-EQOBFLZC.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +4100 -62
  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 +99 -60
  14. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  15. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  16. package/dist/types/src/components/Avatars/Avatar.stories.d.ts +0 -6
  17. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  18. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts +0 -6
  19. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  20. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  21. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts +0 -6
  22. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  23. package/dist/types/src/components/{Buttons → Button}/Button.d.ts +4 -4
  24. package/dist/types/src/components/Button/Button.d.ts.map +1 -0
  25. package/dist/types/src/components/{Buttons → Button}/Button.stories.d.ts +1 -7
  26. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -0
  27. package/dist/types/src/components/{Buttons → Button}/IconButton.d.ts +2 -2
  28. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -0
  29. package/dist/types/src/components/{Buttons → Button}/IconButton.stories.d.ts +0 -6
  30. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -0
  31. package/dist/types/src/components/{Buttons → Button}/Toggle.d.ts +2 -2
  32. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -0
  33. package/dist/types/src/components/Button/Toggle.stories.d.ts +16 -0
  34. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -0
  35. package/dist/types/src/components/Button/ToggleGroup.d.ts +27 -0
  36. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -0
  37. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +27 -0
  38. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -0
  39. package/dist/types/src/components/Button/index.d.ts.map +1 -0
  40. package/dist/types/src/components/Card/Card.d.ts +145 -0
  41. package/dist/types/src/components/Card/Card.d.ts.map +1 -0
  42. package/dist/types/src/components/Card/Card.stories.d.ts +21 -0
  43. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -0
  44. package/dist/types/src/components/Card/index.d.ts +2 -0
  45. package/dist/types/src/components/Card/index.d.ts.map +1 -0
  46. package/dist/types/src/components/Clipboard/CopyButton.d.ts +1 -1
  47. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  48. package/dist/types/src/components/Clipboard/index.d.ts +10 -1
  49. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  50. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts +1 -1
  51. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  52. package/dist/types/src/components/Dialog/AlertDialog.d.ts +53 -0
  53. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -0
  54. package/dist/types/src/components/{Dialogs → Dialog}/AlertDialog.stories.d.ts +0 -6
  55. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -0
  56. package/dist/types/src/components/Dialog/Dialog.d.ts +66 -0
  57. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -0
  58. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +25 -0
  59. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -0
  60. package/dist/types/src/components/Dialog/index.d.ts.map +1 -0
  61. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
  62. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  63. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts +11 -0
  64. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -0
  65. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts +7 -0
  66. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -0
  67. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +8 -0
  68. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -0
  69. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts +9 -0
  70. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -0
  71. package/dist/types/src/components/ErrorFallback/index.d.ts +5 -0
  72. package/dist/types/src/components/ErrorFallback/index.d.ts.map +1 -0
  73. package/dist/types/src/components/Focus/Focus.d.ts +44 -0
  74. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -0
  75. package/dist/types/src/components/Focus/Focus.stories.d.ts +9 -0
  76. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -0
  77. package/dist/types/src/components/Focus/index.d.ts +2 -0
  78. package/dist/types/src/components/Focus/index.d.ts.map +1 -0
  79. package/dist/types/src/components/Icon/Icon.d.ts +5 -2
  80. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  81. package/dist/types/src/components/Icon/Icon.stories.d.ts +25 -0
  82. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -0
  83. package/dist/types/src/components/Image/Image.d.ts +14 -0
  84. package/dist/types/src/components/Image/Image.d.ts.map +1 -0
  85. package/dist/types/src/components/Image/Image.stories.d.ts +33 -0
  86. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -0
  87. package/dist/types/src/components/Image/index.d.ts +2 -0
  88. package/dist/types/src/components/Image/index.d.ts.map +1 -0
  89. package/dist/types/src/components/Input/Input.d.ts +7 -9
  90. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  91. package/dist/types/src/components/Input/Input.stories.d.ts +8 -14
  92. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  93. package/dist/types/src/components/Link/Link.stories.d.ts +0 -6
  94. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  95. package/dist/types/src/components/{Lists → List}/List.d.ts +10 -4
  96. package/dist/types/src/components/List/List.d.ts.map +1 -0
  97. package/dist/types/src/components/{Lists → List}/List.stories.d.ts +8 -8
  98. package/dist/types/src/components/List/List.stories.d.ts.map +1 -0
  99. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -0
  100. package/dist/types/src/components/List/Tree.d.ts.map +1 -0
  101. package/dist/types/src/components/{Lists → List}/Tree.stories.d.ts +0 -6
  102. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -0
  103. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -0
  104. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts.map +1 -1
  105. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -0
  106. package/dist/types/src/components/List/index.d.ts.map +1 -0
  107. package/dist/types/src/components/Main/Main.d.ts +17 -27
  108. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  109. package/dist/types/src/components/Main/Main.stories.d.ts +0 -4
  110. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  111. package/dist/types/src/components/{Menus → Menu}/ContextMenu.d.ts +6 -6
  112. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -0
  113. package/dist/types/src/components/{Menus → Menu}/ContextMenu.stories.d.ts +0 -6
  114. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -0
  115. package/dist/types/src/components/Menu/DropdownMenu.d.ts +113 -0
  116. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
  117. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +28 -0
  118. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
  119. package/dist/types/src/components/Menu/index.d.ts.map +1 -0
  120. package/dist/types/src/components/Message/Message.d.ts +1 -1
  121. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  122. package/dist/types/src/components/Message/Message.stories.d.ts +5 -7
  123. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  124. package/dist/types/src/components/Popover/Popover.d.ts +34 -25
  125. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  126. package/dist/types/src/components/Popover/Popover.stories.d.ts +0 -6
  127. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  128. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +32 -24
  129. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  130. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +63 -12
  131. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  132. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +55 -0
  133. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -0
  134. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +23 -0
  135. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -0
  136. package/dist/types/src/components/ScrollContainer/index.d.ts +2 -0
  137. package/dist/types/src/components/ScrollContainer/index.d.ts.map +1 -0
  138. package/dist/types/src/components/Select/Select.d.ts +10 -10
  139. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  140. package/dist/types/src/components/Select/Select.stories.d.ts +2 -8
  141. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  142. package/dist/types/src/components/Separator/Separator.d.ts +4 -4
  143. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  144. package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
  145. package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  146. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
  147. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  148. package/dist/types/src/components/Skeleton/index.d.ts +2 -0
  149. package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
  150. package/dist/types/src/components/Splitter/Splitter.d.ts +37 -0
  151. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
  152. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
  153. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
  154. package/dist/types/src/components/Splitter/index.d.ts +2 -0
  155. package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
  156. package/dist/types/src/components/Status/Status.d.ts +3 -4
  157. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  158. package/dist/types/src/components/Status/Status.stories.d.ts +4 -8
  159. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  160. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  161. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  162. package/dist/types/src/components/Tag/Tag.stories.d.ts +5 -10
  163. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  164. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +3 -3
  165. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  166. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts +12 -0
  167. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  168. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +1 -8
  169. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  170. package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
  171. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  172. package/dist/types/src/components/Toast/Toast.d.ts +19 -19
  173. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  174. package/dist/types/src/components/Toast/Toast.stories.d.ts +0 -6
  175. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  176. package/dist/types/src/components/Toolbar/Toolbar.d.ts +46 -20
  177. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  178. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +0 -6
  179. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  180. package/dist/types/src/components/Tooltip/Tooltip.d.ts +10 -12
  181. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  182. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +2 -8
  183. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  184. package/dist/types/src/components/index.d.ts +14 -8
  185. package/dist/types/src/components/index.d.ts.map +1 -1
  186. package/dist/types/src/exemplars/generics.stories.d.ts +23 -0
  187. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
  188. package/dist/types/src/exemplars/slot.stories.d.ts +15 -0
  189. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
  190. package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
  191. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
  192. package/dist/types/src/exemplars/virtualizer.stories.d.ts +11 -0
  193. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -0
  194. package/dist/types/src/hooks/index.d.ts +1 -0
  195. package/dist/types/src/hooks/index.d.ts.map +1 -1
  196. package/dist/types/src/hooks/useDensityContext.d.ts +2 -2
  197. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  198. package/dist/types/src/hooks/useElevationContext.d.ts +1 -1
  199. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  200. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  201. package/dist/types/src/hooks/useVisualViewport.d.ts +2 -2
  202. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  203. package/dist/types/src/index.d.ts +2 -1
  204. package/dist/types/src/index.d.ts.map +1 -1
  205. package/dist/types/src/playground/Controls.stories.d.ts +0 -6
  206. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  207. package/dist/types/src/playground/Custom.stories.d.ts +1 -2
  208. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  209. package/dist/types/src/playground/Typography.stories.d.ts +0 -6
  210. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  211. package/dist/types/src/primitives/Column/Column.d.ts +51 -0
  212. package/dist/types/src/primitives/Column/Column.d.ts.map +1 -0
  213. package/dist/types/src/primitives/Column/Column.stories.d.ts +25 -0
  214. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -0
  215. package/dist/types/src/primitives/Column/index.d.ts +2 -0
  216. package/dist/types/src/primitives/Column/index.d.ts.map +1 -0
  217. package/dist/types/src/primitives/Container/Container.d.ts +11 -0
  218. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
  219. package/dist/types/src/primitives/Container/Container.stories.d.ts +6 -0
  220. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
  221. package/dist/types/src/primitives/Container/index.d.ts +2 -0
  222. package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
  223. package/dist/types/src/primitives/Flex/Flex.d.ts +15 -0
  224. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
  225. package/dist/types/src/primitives/Flex/Flex.stories.d.ts +8 -0
  226. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -0
  227. package/dist/types/src/primitives/Flex/index.d.ts +2 -0
  228. package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
  229. package/dist/types/src/primitives/Grid/Grid.d.ts +14 -0
  230. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -0
  231. package/dist/types/src/primitives/Grid/Grid.stories.d.ts +8 -0
  232. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -0
  233. package/dist/types/src/primitives/Grid/index.d.ts +2 -0
  234. package/dist/types/src/primitives/Grid/index.d.ts.map +1 -0
  235. package/dist/types/src/primitives/Panel/Panel.d.ts +46 -0
  236. package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -0
  237. package/dist/types/src/primitives/Panel/Panel.stories.d.ts +6 -0
  238. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -0
  239. package/dist/types/src/primitives/Panel/index.d.ts +2 -0
  240. package/dist/types/src/primitives/Panel/index.d.ts.map +1 -0
  241. package/dist/types/src/primitives/index.d.ts +6 -0
  242. package/dist/types/src/primitives/index.d.ts.map +1 -0
  243. package/dist/types/src/testing/Loading.d.ts +9 -0
  244. package/dist/types/src/testing/Loading.d.ts.map +1 -0
  245. package/dist/types/src/testing/decorators/index.d.ts +2 -1
  246. package/dist/types/src/testing/decorators/index.d.ts.map +1 -1
  247. package/dist/types/src/testing/decorators/withLayout.d.ts +15 -0
  248. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -0
  249. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +12 -0
  250. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -0
  251. package/dist/types/src/testing/decorators/withTheme.d.ts +5 -1
  252. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  253. package/dist/types/src/testing/index.d.ts +1 -0
  254. package/dist/types/src/testing/index.d.ts.map +1 -1
  255. package/dist/types/src/translations.d.ts +11 -0
  256. package/dist/types/src/translations.d.ts.map +1 -0
  257. package/dist/types/src/util/index.d.ts +2 -1
  258. package/dist/types/src/util/index.d.ts.map +1 -1
  259. package/dist/types/src/util/usePx.d.ts +8 -0
  260. package/dist/types/src/util/usePx.d.ts.map +1 -0
  261. package/dist/types/tsconfig.tsbuildinfo +1 -1
  262. package/package.json +41 -31
  263. package/src/components/Avatars/Avatar.stories.tsx +7 -10
  264. package/src/components/Avatars/Avatar.tsx +6 -13
  265. package/src/components/Avatars/AvatarGroup.stories.tsx +2 -5
  266. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +4 -7
  267. package/src/components/Breadcrumb/Breadcrumb.tsx +11 -37
  268. package/src/components/{Buttons → Button}/Button.stories.tsx +5 -7
  269. package/src/components/{Buttons → Button}/Button.tsx +12 -26
  270. package/src/components/{Buttons → Button}/IconButton.stories.tsx +4 -7
  271. package/src/components/{Buttons → Button}/IconButton.tsx +19 -14
  272. package/src/components/{Buttons → Button}/Toggle.stories.tsx +7 -9
  273. package/src/components/{Buttons → Button}/Toggle.tsx +4 -4
  274. package/src/components/{Buttons → Button}/ToggleGroup.stories.tsx +2 -5
  275. package/src/components/{Buttons → Button}/ToggleGroup.tsx +12 -16
  276. package/src/components/Card/Card.stories.tsx +151 -0
  277. package/src/components/Card/Card.tsx +394 -0
  278. package/src/components/Card/index.ts +5 -0
  279. package/src/components/Clipboard/CopyButton.tsx +7 -7
  280. package/src/components/DensityProvider/DensityProvider.tsx +1 -1
  281. package/src/components/Dialog/AlertDialog.stories.tsx +69 -0
  282. package/src/components/{Dialogs → Dialog}/AlertDialog.tsx +121 -82
  283. package/src/components/Dialog/Dialog.stories.tsx +178 -0
  284. package/src/components/Dialog/Dialog.tsx +280 -0
  285. package/src/components/ElevationProvider/ElevationProvider.tsx +1 -1
  286. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +50 -0
  287. package/src/components/ErrorFallback/ErrorFallback.tsx +70 -0
  288. package/src/components/ErrorFallback/ErrorStack.tsx +80 -0
  289. package/src/components/ErrorFallback/ThrowError.tsx +37 -0
  290. package/src/components/ErrorFallback/index.ts +9 -0
  291. package/src/components/Focus/AUDIT.md +43 -0
  292. package/src/components/Focus/Focus.stories.tsx +230 -0
  293. package/src/components/Focus/Focus.tsx +201 -0
  294. package/src/components/Focus/index.ts +5 -0
  295. package/src/components/Icon/Icon.stories.tsx +144 -0
  296. package/src/components/Icon/Icon.tsx +6 -2
  297. package/src/components/Image/Image.stories.tsx +86 -0
  298. package/src/components/Image/Image.tsx +223 -0
  299. package/src/components/Image/index.ts +5 -0
  300. package/src/components/Input/Input.stories.tsx +21 -43
  301. package/src/components/Input/Input.tsx +38 -74
  302. package/src/components/Link/Link.stories.tsx +2 -5
  303. package/src/components/Link/Link.tsx +2 -2
  304. package/src/components/{Lists → List}/List.stories.tsx +30 -37
  305. package/src/components/{Lists → List}/List.tsx +16 -19
  306. package/src/components/{Lists → List}/ListDropIndicator.tsx +7 -7
  307. package/src/components/{Lists → List}/Tree.stories.tsx +5 -8
  308. package/src/components/{Lists → List}/TreeDropIndicator.tsx +6 -6
  309. package/src/components/{Lists → List}/Treegrid.stories.tsx +3 -3
  310. package/src/components/{Lists → List}/Treegrid.tsx +66 -30
  311. package/src/components/Main/Main.stories.tsx +41 -23
  312. package/src/components/Main/Main.tsx +163 -97
  313. package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +2 -5
  314. package/src/components/{Menus → Menu}/ContextMenu.tsx +9 -33
  315. package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +3 -6
  316. package/src/components/{Menus → Menu}/DropdownMenu.tsx +139 -112
  317. package/src/components/Message/Message.stories.tsx +28 -15
  318. package/src/components/Message/Message.tsx +43 -34
  319. package/src/components/Popover/Popover.stories.tsx +5 -8
  320. package/src/components/Popover/Popover.tsx +118 -96
  321. package/src/components/ScrollArea/ScrollArea.stories.tsx +222 -35
  322. package/src/components/ScrollArea/ScrollArea.tsx +97 -79
  323. package/src/components/ScrollArea/index.ts +1 -1
  324. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +90 -0
  325. package/src/components/ScrollContainer/ScrollContainer.tsx +320 -0
  326. package/src/components/ScrollContainer/index.ts +5 -0
  327. package/src/components/Select/Select.stories.tsx +6 -8
  328. package/src/components/Select/Select.tsx +11 -27
  329. package/src/components/Separator/Separator.tsx +5 -8
  330. package/src/components/Skeleton/Skeleton.stories.tsx +52 -0
  331. package/src/components/Skeleton/Skeleton.tsx +26 -0
  332. package/src/components/Skeleton/index.ts +5 -0
  333. package/src/components/Splitter/Splitter.stories.tsx +83 -0
  334. package/src/components/Splitter/Splitter.tsx +140 -0
  335. package/src/components/Splitter/index.ts +5 -0
  336. package/src/components/Status/Status.stories.tsx +21 -20
  337. package/src/components/Status/Status.tsx +10 -7
  338. package/src/components/Tag/Tag.stories.tsx +8 -12
  339. package/src/components/Tag/Tag.tsx +3 -8
  340. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +32 -0
  341. package/src/components/ThemeProvider/ThemeProvider.tsx +10 -9
  342. package/src/components/ThemeProvider/TranslationsProvider.tsx +1 -16
  343. package/src/components/ThemeProvider/index.ts +3 -3
  344. package/src/components/Toast/Toast.stories.tsx +3 -6
  345. package/src/components/Toast/Toast.tsx +22 -41
  346. package/src/components/Toolbar/Toolbar.stories.tsx +4 -9
  347. package/src/components/Toolbar/Toolbar.tsx +183 -11
  348. package/src/components/Tooltip/Tooltip.stories.tsx +17 -18
  349. package/src/components/Tooltip/Tooltip.tsx +42 -39
  350. package/src/components/index.ts +15 -9
  351. package/src/exemplars/generics.stories.tsx +41 -0
  352. package/src/exemplars/slot.stories.tsx +117 -0
  353. package/src/exemplars/tabster.stories.tsx +127 -0
  354. package/src/exemplars/virtualizer.stories.tsx +137 -0
  355. package/src/hooks/index.ts +1 -0
  356. package/src/hooks/useDensityContext.ts +3 -3
  357. package/src/hooks/useElevationContext.ts +1 -1
  358. package/src/hooks/useSafeArea.ts +3 -2
  359. package/src/hooks/useVisualViewport.ts +4 -4
  360. package/src/index.ts +2 -1
  361. package/src/playground/Controls.stories.tsx +3 -12
  362. package/src/playground/Custom.stories.tsx +13 -34
  363. package/src/playground/Typography.stories.tsx +3 -6
  364. package/src/primitives/Column/AUDIT.md +354 -0
  365. package/src/primitives/Column/Column.stories.tsx +183 -0
  366. package/src/primitives/Column/Column.tsx +169 -0
  367. package/src/primitives/Column/index.ts +5 -0
  368. package/src/primitives/Container/Container.stories.tsx +30 -0
  369. package/src/primitives/Container/Container.tsx +19 -0
  370. package/src/primitives/Container/index.ts +5 -0
  371. package/src/primitives/Flex/Flex.stories.tsx +58 -0
  372. package/src/primitives/Flex/Flex.tsx +24 -0
  373. package/src/primitives/Flex/index.ts +5 -0
  374. package/src/primitives/Grid/Grid.stories.tsx +57 -0
  375. package/src/primitives/Grid/Grid.tsx +30 -0
  376. package/src/primitives/Grid/index.ts +5 -0
  377. package/src/primitives/Panel/Panel.stories.tsx +67 -0
  378. package/src/primitives/Panel/Panel.tsx +114 -0
  379. package/src/primitives/Panel/index.ts +5 -0
  380. package/src/primitives/index.ts +9 -0
  381. package/src/testing/Loading.tsx +26 -0
  382. package/src/testing/decorators/index.ts +2 -1
  383. package/src/testing/decorators/withLayout.tsx +77 -0
  384. package/src/testing/decorators/withLayoutVariants.tsx +48 -0
  385. package/src/testing/decorators/withTheme.tsx +37 -0
  386. package/src/testing/index.ts +2 -0
  387. package/src/translations.ts +19 -0
  388. package/src/util/index.ts +3 -1
  389. package/src/util/usePx.ts +62 -0
  390. package/dist/lib/browser/chunk-Y4PW3CX2.mjs +0 -4402
  391. package/dist/lib/browser/chunk-Y4PW3CX2.mjs.map +0 -7
  392. package/dist/lib/node-esm/chunk-L6LIOSFT.mjs +0 -4404
  393. package/dist/lib/node-esm/chunk-L6LIOSFT.mjs.map +0 -7
  394. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +0 -15
  395. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +0 -1
  396. package/dist/types/src/components/AnchoredOverflow/index.d.ts +0 -2
  397. package/dist/types/src/components/AnchoredOverflow/index.d.ts.map +0 -1
  398. package/dist/types/src/components/Buttons/Button.d.ts.map +0 -1
  399. package/dist/types/src/components/Buttons/Button.stories.d.ts.map +0 -1
  400. package/dist/types/src/components/Buttons/IconButton.d.ts.map +0 -1
  401. package/dist/types/src/components/Buttons/IconButton.stories.d.ts.map +0 -1
  402. package/dist/types/src/components/Buttons/Toggle.d.ts.map +0 -1
  403. package/dist/types/src/components/Buttons/Toggle.stories.d.ts +0 -19
  404. package/dist/types/src/components/Buttons/Toggle.stories.d.ts.map +0 -1
  405. package/dist/types/src/components/Buttons/ToggleGroup.d.ts +0 -31
  406. package/dist/types/src/components/Buttons/ToggleGroup.d.ts.map +0 -1
  407. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts +0 -37
  408. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +0 -1
  409. package/dist/types/src/components/Buttons/index.d.ts.map +0 -1
  410. package/dist/types/src/components/Dialogs/AlertDialog.d.ts +0 -31
  411. package/dist/types/src/components/Dialogs/AlertDialog.d.ts.map +0 -1
  412. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +0 -1
  413. package/dist/types/src/components/Dialogs/Dialog.d.ts +0 -31
  414. package/dist/types/src/components/Dialogs/Dialog.d.ts.map +0 -1
  415. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts +0 -26
  416. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +0 -1
  417. package/dist/types/src/components/Dialogs/index.d.ts.map +0 -1
  418. package/dist/types/src/components/Lists/List.d.ts.map +0 -1
  419. package/dist/types/src/components/Lists/List.stories.d.ts.map +0 -1
  420. package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +0 -1
  421. package/dist/types/src/components/Lists/Tree.d.ts.map +0 -1
  422. package/dist/types/src/components/Lists/Tree.stories.d.ts.map +0 -1
  423. package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +0 -1
  424. package/dist/types/src/components/Lists/Treegrid.stories.d.ts.map +0 -1
  425. package/dist/types/src/components/Lists/index.d.ts.map +0 -1
  426. package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
  427. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +0 -1
  428. package/dist/types/src/components/Menus/DropdownMenu.d.ts +0 -113
  429. package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
  430. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts +0 -21
  431. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
  432. package/dist/types/src/components/Menus/index.d.ts.map +0 -1
  433. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts +0 -12
  434. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts.map +0 -1
  435. package/dist/types/src/util/ThemedClassName.d.ts +0 -5
  436. package/dist/types/src/util/ThemedClassName.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 -72
  440. package/src/components/Dialogs/Dialog.stories.tsx +0 -65
  441. package/src/components/Dialogs/Dialog.tsx +0 -159
  442. package/src/testing/decorators/withSurfaceVariantsLayout.tsx +0 -51
  443. package/src/testing/decorators/withTheme.ts +0 -25
  444. package/src/util/ThemedClassName.ts +0 -7
  445. /package/dist/types/src/components/{Buttons → Button}/index.d.ts +0 -0
  446. /package/dist/types/src/components/{Dialogs → Dialog}/index.d.ts +0 -0
  447. /package/dist/types/src/components/{Lists → List}/ListDropIndicator.d.ts +0 -0
  448. /package/dist/types/src/components/{Lists → List}/Tree.d.ts +0 -0
  449. /package/dist/types/src/components/{Lists → List}/TreeDropIndicator.d.ts +0 -0
  450. /package/dist/types/src/components/{Lists → List}/Treegrid.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}/index.d.ts +0 -0
  454. /package/src/components/{Buttons → Button}/index.ts +0 -0
  455. /package/src/components/{Dialogs → Dialog}/index.ts +0 -0
  456. /package/src/components/{Lists → List}/Tree.tsx +0 -0
  457. /package/src/components/{Lists → List}/index.ts +0 -0
  458. /package/src/components/{Menus → Menu}/index.ts +0 -0
@@ -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,23 +2,14 @@
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
9
  import { type Meta, type StoryObj } from '@storybook/react-vite';
12
- import React, { type ReactNode, useState } from 'react';
10
+ import React, { type ReactNode, useCallback, useState } from 'react';
13
11
 
14
- import {
15
- getSize,
16
- ghostHover,
17
- ghostSelected,
18
- ghostSelectedTrackingInterFromNormal,
19
- mx,
20
- surfaceShadow,
21
- } from '@dxos/react-ui-theme';
12
+ import { getSize, ghostHover, mx, surfaceShadow } from '@dxos/ui-theme';
22
13
 
23
14
  import { withTheme } from '../../testing';
24
15
  import { Icon } from '../Icon';
@@ -26,10 +17,9 @@ import { Icon } from '../Icon';
26
17
  import { List, ListItem, type ListScopedProps } from './List';
27
18
 
28
19
  const meta = {
29
- title: 'ui/react-ui-core/List',
20
+ title: 'ui/react-ui-core/components/List',
30
21
  component: List,
31
- decorators: [withTheme],
32
- parameters: { chromatic: { disableSnapshot: false } },
22
+ decorators: [withTheme()],
33
23
  } satisfies Meta<typeof List>;
34
24
 
35
25
  export default meta;
@@ -47,11 +37,11 @@ const UniformListItem = ({ id, text }: { id: string; text: string }) => {
47
37
  style={{ transform: CSS.Transform.toString(transform) }}
48
38
  >
49
39
  <ListItem.Endcap>
50
- <Icon icon='ph--dots-six-vertical--regular' classNames={mx(getSize(5), 'mbs-2.5')} />
40
+ <Icon icon='ph--dots-six-vertical--regular' classNames={mx(getSize(5), 'mt-2.5')} />
51
41
  </ListItem.Endcap>
52
- <ListItem.Heading classNames='grow pbs-2'>{text}</ListItem.Heading>
42
+ <ListItem.Heading classNames='grow pt-2'>{text}</ListItem.Heading>
53
43
  <ListItem.Endcap>
54
- <Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), 'mbs-2.5')} />
44
+ <Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), 'mt-2.5')} />
55
45
  </ListItem.Endcap>
56
46
  </ListItem.Root>
57
47
  );
@@ -66,16 +56,20 @@ export const UniformSizeDraggable: Story = {
66
56
  })),
67
57
  );
68
58
 
69
- const handleDragEnd = (event: DragEndEvent) => {
70
- const { active, over } = event;
71
- if (active.id !== over?.id) {
72
- setItems((items) => {
73
- const oldIndex = items.findIndex((item) => item.id === active.id);
74
- const newIndex = items.findIndex((item) => item.id === over?.id);
75
- return arrayMove(items, oldIndex, newIndex);
76
- });
77
- }
78
- };
59
+ const handleDragEnd = useCallback(
60
+ (event: DragEndEvent) => {
61
+ const { active, over } = event;
62
+ if (active.id !== over?.id) {
63
+ setItems((items) => {
64
+ const oldIndex = items.findIndex((item) => item.id === active.id);
65
+ const newIndex = items.findIndex((item) => item.id === over?.id);
66
+ return arrayMove(items, oldIndex, newIndex);
67
+ });
68
+ }
69
+ },
70
+ [items],
71
+ );
72
+
79
73
  return (
80
74
  <DndContext onDragEnd={handleDragEnd}>
81
75
  <SortableContext items={items.map(({ id }) => id)} strategy={verticalListSortingStrategy}>
@@ -109,13 +103,13 @@ const ManySizesDraggableListItem = ({
109
103
  style={{ transform: CSS.Translate.toString(transform) }}
110
104
  >
111
105
  <ListItem.Endcap>
112
- <Icon icon='ph--dots-six-vertical--regular' classNames={mx(getSize(5), 'mbs-2.5')} />
106
+ <Icon icon='ph--dots-six-vertical--regular' classNames={mx(getSize(5), 'mt-2.5')} />
113
107
  </ListItem.Endcap>
114
- <ListItem.Heading classNames='grow pbs-2' asChild>
108
+ <ListItem.Heading classNames='grow pt-2' asChild>
115
109
  {text}
116
110
  </ListItem.Heading>
117
111
  <ListItem.Endcap>
118
- <Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), 'mbs-2.5')} />
112
+ <Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), 'mt-2.5')} />
119
113
  </ListItem.Endcap>
120
114
  </ListItem.Root>
121
115
  );
@@ -129,9 +123,9 @@ export const ManySizesDraggable: Story = {
129
123
  text: (
130
124
  <p
131
125
  className={mx(
132
- index % 3 === 0 ? 'bs-20' : index % 2 === 0 ? 'bs-12' : 'bs-8',
126
+ index % 3 === 0 ? 'h-20' : index % 2 === 0 ? 'h-12' : 'h-8',
133
127
  surfaceShadow({ elevation: 'positioned' }),
134
- 'mbe-2 p-2 bg-white dark:bg-neutral-800 rounded',
128
+ 'mb-2 p-2 bg-white dark:bg-neutral-800 rounded-sm',
135
129
  )}
136
130
  >{`List item ${index + 1}`}</p>
137
131
  ),
@@ -185,9 +179,9 @@ export const Collapsible: Story = {
185
179
  <ListItem.Root key={id} id={id} collapsible={index !== 2} defaultOpen={index % 2 === 0}>
186
180
  <div role='none' className='grow flex'>
187
181
  {index !== 2 ? <ListItem.OpenTrigger /> : <ListItem.MockOpenTrigger />}
188
- <ListItem.Heading classNames='grow pbs-2'>{text}</ListItem.Heading>
182
+ <ListItem.Heading classNames='grow pt-2'>{text}</ListItem.Heading>
189
183
  <ListItem.Endcap>
190
- <Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), 'mbs-2.5')} />
184
+ <Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), 'mt-2.5')} />
191
185
  </ListItem.Endcap>
192
186
  </div>
193
187
  {index !== 2 && <ListItem.CollapsibleContent>{body}</ListItem.CollapsibleContent>}
@@ -198,7 +192,6 @@ export const Collapsible: Story = {
198
192
  },
199
193
  args: {
200
194
  variant: 'unordered',
201
- // toggleOpenLabel: 'Open/close storybook list item', // TODO(burdon): ???
202
195
  },
203
196
  };
204
197
 
@@ -229,11 +222,11 @@ export const SelectableListbox: Story = {
229
222
  key={id}
230
223
  tabIndex={0}
231
224
  selected={selectedId === id}
232
- classNames={mx('items-center', ghostHover, ghostSelected, ghostSelectedTrackingInterFromNormal)}
225
+ classNames={mx(ghostHover, 'dx-selected')}
233
226
  onClick={() => setSelectedId(id)}
234
227
  onKeyUp={(event) => handleKeyUp(event, id)}
235
228
  >
236
- <ListItem.Heading classNames='grow'>Lorem ipsum dolor sit amet</ListItem.Heading>
229
+ <ListItem.Heading classNames='flex px-1 items-center grow truncate'>{text}</ListItem.Heading>
237
230
  </ListItem.Root>
238
231
  ))}
239
232
  </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,7 +24,8 @@ 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';
@@ -32,15 +34,16 @@ import { Icon } from '../Icon';
32
34
 
33
35
  import { ListDropIndicator } from './ListDropIndicator';
34
36
 
35
- type ListProps = ThemedClassName<ListPrimitiveProps> & { density?: Density };
37
+ type ListProps = ThemedClassName<ListPrimitiveProps & { density?: Density }>;
36
38
 
37
- const List = forwardRef<HTMLOListElement, ListProps>(({ classNames, children, ...props }, forwardedRef) => {
39
+ const List = composable<HTMLOListElement, ListProps>(({ children, ...props }, forwardedRef) => {
38
40
  const { tx } = useThemeContext();
39
41
  const density = useDensityContext(props.density);
42
+ const { className, ...rest } = composableProps(props);
40
43
 
41
44
  return (
42
45
  <DensityProvider density={density}>
43
- <ListPrimitive {...props} className={tx('list.root', 'list', {}, classNames)} ref={forwardedRef}>
46
+ <ListPrimitive {...rest} className={tx('list.root', {}, className)} ref={forwardedRef}>
44
47
  {children}
45
48
  </ListPrimitive>
46
49
  </DensityProvider>
@@ -51,18 +54,18 @@ type ListItemEndcapProps = ThemedClassName<ComponentPropsWithoutRef<'div'>> & {
51
54
 
52
55
  const ListItemEndcap = forwardRef<HTMLDivElement, ListItemEndcapProps>(
53
56
  ({ children, classNames, asChild, ...props }, forwardedRef) => {
54
- const Root = asChild ? Slot : 'div';
57
+ const Comp = asChild ? Slot : Primitive.div;
55
58
  const density = useDensityContext();
56
59
  const { tx } = useThemeContext();
57
60
  return (
58
- <Root
61
+ <Comp
59
62
  {...(!asChild && { role: 'none' })}
60
63
  {...props}
61
- className={tx('list.item.endcap', 'list__listItem__endcap', { density }, classNames)}
64
+ className={tx('list.item.endcap', { density }, classNames)}
62
65
  ref={forwardedRef}
63
66
  >
64
67
  {children}
65
- </Root>
68
+ </Comp>
66
69
  );
67
70
  },
68
71
  );
@@ -73,13 +76,7 @@ const MockListItemOpenTrigger = ({
73
76
  }: ThemedClassName<Omit<ComponentPropsWithoutRef<'div'>, 'children'>>) => {
74
77
  const density = useDensityContext();
75
78
  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
- );
79
+ return <div role='none' {...props} className={tx('list.item.openTrigger', { density }, classNames)} />;
83
80
  };
84
81
 
85
82
  type ListItemHeadingProps = ThemedClassName<ListPrimitiveItemHeadingProps>;
@@ -91,7 +88,7 @@ const ListItemHeading = forwardRef<HTMLParagraphElement, ListItemHeadingProps>(
91
88
  return (
92
89
  <ListPrimitiveItemHeading
93
90
  {...props}
94
- className={tx('list.item.heading', 'list__listItem__heading', { density }, classNames)}
91
+ className={tx('list.item.heading', { density }, classNames)}
95
92
  ref={forwardedRef}
96
93
  >
97
94
  {children}
@@ -110,14 +107,14 @@ const ListItemOpenTrigger = forwardRef<HTMLButtonElement, ListItemOpenTriggerPro
110
107
  return (
111
108
  <ListPrimitiveItemOpenTrigger
112
109
  {...props}
113
- className={tx('list.item.openTrigger', 'list__listItem__openTrigger', { density }, classNames)}
110
+ className={tx('list.item.openTrigger', { density }, classNames)}
114
111
  ref={forwardedRef}
115
112
  >
116
113
  {children || (
117
114
  <Icon
118
115
  size={3}
119
116
  icon={open ? 'ph--caret-down--bold' : 'ph--caret-right--bold'}
120
- classNames={tx('list.item.openTriggerIcon', 'list__listItem__openTrigger__icon', {})}
117
+ classNames={tx('list.item.openTriggerIcon', {})}
121
118
  />
122
119
  )}
123
120
  </ListPrimitiveItemOpenTrigger>
@@ -134,7 +131,7 @@ const ListItemRoot = forwardRef<HTMLLIElement, ListItemRootProps>(
134
131
  return (
135
132
  <ListPrimitiveItem
136
133
  {...props}
137
- className={tx('list.item.root', 'list__listItem', { density, collapsible: props.collapsible }, classNames)}
134
+ className={tx('list.item.root', { density, collapsible: props.collapsible }, classNames)}
138
135
  ref={forwardedRef}
139
136
  >
140
137
  {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,8 +2,6 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
  import React from 'react';
9
7
 
@@ -27,7 +25,7 @@ const createKey = (key: string, prefix?: string) => (prefix === undefined ? key
27
25
  const StorybookTreeItem = ({ data, prefix }: StorybookTreeItemProps) => {
28
26
  const keys = Array.isArray(data) ? Array.from(data.keys()) : Object.keys(data);
29
27
  return (
30
- <Tree.Root density='fine'>
28
+ <Tree.Root>
31
29
  {keys.map((key) => {
32
30
  const id = createKey(String(key), prefix);
33
31
  const value = data[key as keyof typeof data];
@@ -37,10 +35,10 @@ const StorybookTreeItem = ({ data, prefix }: StorybookTreeItemProps) => {
37
35
  <TreeItem.Root key={id} id={id} collapsible={!valueIsScalar} defaultOpen>
38
36
  <div role='none' className='grow flex'>
39
37
  {valueIsScalar ? <TreeItem.MockOpenTrigger /> : <TreeItem.OpenTrigger />}
40
- <TreeItem.Heading classNames='grow pbs-1'>{valueIsScalar ? String(value) : key}</TreeItem.Heading>
38
+ <TreeItem.Heading classNames='grow pt-1'>{valueIsScalar ? String(value) : key}</TreeItem.Heading>
41
39
  </div>
42
40
  {!valueIsScalar && (
43
- <TreeItem.Body className='pis-2'>
41
+ <TreeItem.Body className='ps-2'>
44
42
  <Tree.Branch>
45
43
  <StorybookTreeItem data={value} prefix={id} />
46
44
  </Tree.Branch>
@@ -58,11 +56,10 @@ const DefaultStory = ({ data }: StorybookTreeProps) => {
58
56
  };
59
57
 
60
58
  const meta = {
61
- title: 'ui/react-ui-core/Tree',
59
+ title: 'ui/react-ui-core/components/Tree',
62
60
  component: Tree as any,
63
61
  render: DefaultStory,
64
- decorators: [withTheme],
65
- parameters: { chromatic: { disableSnapshot: false } },
62
+ decorators: [withTheme()],
66
63
  } satisfies Meta<typeof DefaultStory>;
67
64
 
68
65
  export default meta;
@@ -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
  };
@@ -133,7 +133,7 @@ const DefaultStory = () => {
133
133
  {...(parentOf && { parentOf: parentOf.join(Treegrid.PARENT_OF_SEPARATOR) })}
134
134
  >
135
135
  <Treegrid.Cell indent classNames='flex items-center'>
136
- {node.icon && <Icon icon={node.icon} classNames='is-[1em] bs-[1em] mlb-1' />}
136
+ {node.icon && <Icon icon={node.icon} classNames='w-[1em] h-[1em] my-1' />}
137
137
  {node.title}
138
138
  </Treegrid.Cell>
139
139
  </Treegrid.Row>
@@ -144,10 +144,10 @@ const DefaultStory = () => {
144
144
  };
145
145
 
146
146
  const meta = {
147
- title: 'ui/react-ui-core/Treegrid',
147
+ title: 'ui/react-ui-core/components/Treegrid',
148
148
  component: Treegrid.Root as any,
149
149
  render: DefaultStory,
150
- decorators: [withTheme],
150
+ decorators: [withTheme()],
151
151
  } satisfies Meta<typeof DefaultStory>;
152
152
 
153
153
  export default meta;
@@ -2,12 +2,18 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { useArrowNavigationGroup, useFocusableGroup } from '@fluentui/react-tabster';
5
+ import { useFocusFinders } from '@fluentui/react-tabster';
6
6
  import { type Scope, createContextScope } from '@radix-ui/react-context';
7
7
  import { Primitive } from '@radix-ui/react-primitive';
8
8
  import { Slot } from '@radix-ui/react-slot';
9
9
  import { useControllableState } from '@radix-ui/react-use-controllable-state';
10
- import React, { type CSSProperties, type ComponentPropsWithRef, forwardRef } from 'react';
10
+ import React, {
11
+ type CSSProperties,
12
+ type ComponentPropsWithRef,
13
+ type KeyboardEvent,
14
+ forwardRef,
15
+ useCallback,
16
+ } from 'react';
11
17
 
12
18
  import { useThemeContext } from '../../hooks';
13
19
  import { type ThemedClassName } from '../../util';
@@ -39,20 +45,66 @@ type TreegridRootProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.
39
45
  const TreegridRoot = forwardRef<HTMLDivElement, TreegridRootProps>(
40
46
  ({ asChild, classNames, children, style, gridTemplateColumns, ...props }, forwardedRef) => {
41
47
  const { tx } = useThemeContext();
42
- const Root = asChild ? Slot : Primitive.div;
43
- const arrowNavigationAttrs = useArrowNavigationGroup({ axis: 'vertical', tabbable: false, circular: true });
48
+ const Comp = asChild ? Slot : Primitive.div;
49
+ const { findFirstFocusable } = useFocusFinders();
50
+
51
+ const handleKeyDown = useCallback(
52
+ (event: KeyboardEvent<HTMLDivElement>) => {
53
+ switch (event.key) {
54
+ case 'ArrowDown':
55
+ case 'ArrowUp': {
56
+ const direction = event.key === 'ArrowDown' ? 'down' : 'up';
57
+ const target = event.target as HTMLElement;
58
+
59
+ // Find ancestor with data-arrow-keys containing the relevant direction.
60
+ const ancestorWithArrowKeys = target.closest(`[data-arrow-keys*="${direction}"], [data-arrow-keys="all"]`);
61
+
62
+ // If no ancestor with data-arrow-keys found, proceed with row navigation.
63
+ if (!ancestorWithArrowKeys) {
64
+ // Find the closest row
65
+ const currentRow = target.closest('[role="row"]');
66
+ if (currentRow) {
67
+ // Find the treegrid container.
68
+ const treegrid = currentRow.closest('[role="treegrid"]');
69
+ if (treegrid) {
70
+ // Get all rows in the treegrid.
71
+ const rows = Array.from(treegrid.querySelectorAll('[role="row"]'));
72
+ const currentIndex = rows.indexOf(currentRow as Element);
73
+
74
+ // Find next or previous row.
75
+ const nextIndex = direction === 'down' ? currentIndex + 1 : currentIndex - 1;
76
+ const targetRow = rows[nextIndex];
77
+
78
+ if (targetRow) {
79
+ // Focus the first focusable element in the target row.
80
+ const firstFocusable = findFirstFocusable(targetRow as HTMLElement);
81
+ if (firstFocusable) {
82
+ event.preventDefault();
83
+ firstFocusable.focus();
84
+ }
85
+ }
86
+ }
87
+ }
88
+ }
89
+ break;
90
+ }
91
+ }
92
+ props.onKeyDown?.(event);
93
+ },
94
+ [findFirstFocusable],
95
+ );
44
96
 
45
97
  return (
46
- <Root
98
+ <Comp
47
99
  role='treegrid'
48
- {...arrowNavigationAttrs}
49
100
  {...props}
50
- className={tx('treegrid.root', 'treegrid', {}, classNames)}
101
+ className={tx('treegrid.root', {}, classNames)}
51
102
  style={{ ...style, gridTemplateColumns }}
103
+ onKeyDown={handleKeyDown}
52
104
  ref={forwardedRef}
53
105
  >
54
106
  {children}
55
- </Root>
107
+ </Comp>
56
108
  );
57
109
  },
58
110
  );
@@ -83,7 +135,7 @@ const TreegridRow = forwardRef<HTMLDivElement, TreegridRowScopedProps<TreegridRo
83
135
  forwardedRef,
84
136
  ) => {
85
137
  const { tx } = useThemeContext();
86
- const Root = asChild ? Slot : Primitive.div;
138
+ const Comp = asChild ? Slot : Primitive.div;
87
139
  const pathParts = id.split(PATH_SEPARATOR);
88
140
  const level = pathParts.length - 1;
89
141
  const [open, onOpenChange] = useControllableState({
@@ -91,31 +143,20 @@ const TreegridRow = forwardRef<HTMLDivElement, TreegridRowScopedProps<TreegridRo
91
143
  onChange: propsOnOpenChange,
92
144
  defaultProp: defaultOpen,
93
145
  });
94
- const focusableGroupAttrs = useFocusableGroup({ tabBehavior: 'limited' });
95
- const arrowGroupAttrs = useArrowNavigationGroup({
96
- axis: 'horizontal',
97
- tabbable: false,
98
- circular: false,
99
- memorizeCurrent: false,
100
- });
101
146
 
102
147
  return (
103
148
  <TreegridRowProvider open={open} onOpenChange={onOpenChange} scope={__treegridRowScope}>
104
- <Root
149
+ <Comp
105
150
  role='row'
106
151
  aria-level={level}
107
- className={tx('treegrid.row', 'treegrid__row', { level }, classNames)}
152
+ className={tx('treegrid.row', { level }, classNames)}
108
153
  {...(parentOf && { 'aria-expanded': open, 'aria-owns': parentOf })}
109
- tabIndex={0}
110
- {...focusableGroupAttrs}
111
154
  {...props}
112
155
  id={id}
113
156
  ref={forwardedRef}
114
157
  >
115
- <div role='none' className='contents' {...arrowGroupAttrs}>
116
- {children}
117
- </div>
118
- </Root>
158
+ {children}
159
+ </Comp>
119
160
  </TreegridRowProvider>
120
161
  );
121
162
  },
@@ -127,12 +168,7 @@ const TreegridCell = forwardRef<HTMLDivElement, TreegridCellProps>(
127
168
  ({ classNames, children, indent, ...props }, forwardedRef) => {
128
169
  const { tx } = useThemeContext();
129
170
  return (
130
- <div
131
- role='gridcell'
132
- className={tx('treegrid.cell', 'treegrid__cell', { indent }, classNames)}
133
- {...props}
134
- ref={forwardedRef}
135
- >
171
+ <div role='gridcell' className={tx('treegrid.cell', { indent }, classNames)} {...props} ref={forwardedRef}>
136
172
  {children}
137
173
  </div>
138
174
  );
@@ -2,58 +2,76 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
  import React from 'react';
9
7
 
10
- import { withTheme } from '../../testing';
11
- import { Button } from '../Buttons';
8
+ import { withLayout, withTheme } from '../../testing';
9
+ import { IconButton } from '../Button';
10
+ import { Toolbar } from '../Toolbar';
12
11
 
13
12
  import { Main, useSidebars } from './Main';
14
13
 
15
14
  type StoryMainArgs = {};
16
15
 
17
- const NavigationSidebarToggle = () => {
16
+ const NavigationSidebarToggle = ({ close }: { close?: boolean }) => {
18
17
  const { toggleNavigationSidebar } = useSidebars('StoryMain__SidebarToggle');
19
- return <Button onClick={toggleNavigationSidebar}>Toggle navigation sidebar</Button>;
18
+ return (
19
+ <IconButton
20
+ icon={close ? 'ph--caret-left--regular' : 'ph--caret-right--regular'}
21
+ iconOnly
22
+ label='Toggle navigation sidebar'
23
+ onClick={toggleNavigationSidebar}
24
+ />
25
+ );
20
26
  };
21
27
 
22
- const ComplementarySidebarToggle = () => {
28
+ const ComplementarySidebarToggle = ({ close }: { close?: boolean }) => {
23
29
  const { toggleComplementarySidebar } = useSidebars('StoryMain__SidebarToggle');
24
- return <Button onClick={toggleComplementarySidebar}>Toggle complementary sidebar</Button>;
30
+ return (
31
+ <IconButton
32
+ icon={close ? 'ph--caret-right--regular' : 'ph--caret-left--regular'}
33
+ iconOnly
34
+ label='Toggle complementary sidebar'
35
+ onClick={toggleComplementarySidebar}
36
+ />
37
+ );
25
38
  };
26
39
 
27
40
  const DefaultStory = (_args: StoryMainArgs) => {
28
41
  return (
29
- <Main.Root>
42
+ <Main.Root defaultComplementarySidebarState='closed' defaultNavigationSidebarState='closed'>
30
43
  <Main.Overlay />
31
- <Main.NavigationSidebar label='Navigation' classNames='p-4'>
32
- <p>Navigation sidebar content, hi!</p>
33
- <NavigationSidebarToggle />
44
+ <Main.NavigationSidebar label='Navigation'>
45
+ <Toolbar.Root>
46
+ <h1>Navigation</h1>
47
+ <Toolbar.Separator />
48
+ <NavigationSidebarToggle close />
49
+ </Toolbar.Root>
34
50
  </Main.NavigationSidebar>
35
- <Main.Content>
36
- <div role='group' className='m-2 p-4 bg-neutral-50 dark:bg-neutral-950 rounded space-y-2'>
37
- <ComplementarySidebarToggle />
38
- <p>Main content, hello!</p>
51
+ <Main.Content classNames='w-full'>
52
+ <Toolbar.Root>
39
53
  <NavigationSidebarToggle />
40
- </div>
54
+ <div className='flex items-center grow justify-center'>Main</div>
55
+ <ComplementarySidebarToggle />
56
+ </Toolbar.Root>
41
57
  </Main.Content>
42
- <Main.ComplementarySidebar label='Complementary content' classNames='p-4'>
43
- <p>Complementary sidebar content, hello!</p>
44
- <ComplementarySidebarToggle />
58
+ <Main.ComplementarySidebar label='Complementary'>
59
+ <Toolbar.Root>
60
+ <ComplementarySidebarToggle close />
61
+ <Toolbar.Separator />
62
+ <h1>Complementary</h1>
63
+ </Toolbar.Root>
45
64
  </Main.ComplementarySidebar>
46
65
  </Main.Root>
47
66
  );
48
67
  };
49
68
 
50
69
  const meta = {
51
- title: 'ui/react-ui-core/Main',
70
+ title: 'ui/react-ui-core/components/Main',
52
71
  component: Main.Root,
53
72
  render: DefaultStory,
54
- decorators: [withTheme],
73
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
55
74
  parameters: {
56
- chromatic: { disableSnapshot: false },
57
75
  layout: 'fullscreen',
58
76
  },
59
77
  } satisfies Meta<typeof DefaultStory>;