@dxos/react-ui 0.8.4-main.a4bbb77 → 0.8.4-main.abd8ff62ef

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 (460) 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 +4112 -64
  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 +4112 -64
  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 -30
  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 +2 -2
  257. package/dist/types/src/util/index.d.ts.map +1 -1
  258. package/dist/types/src/util/usePx.d.ts +8 -0
  259. package/dist/types/src/util/usePx.d.ts.map +1 -0
  260. package/dist/types/tsconfig.tsbuildinfo +1 -1
  261. package/package.json +52 -37
  262. package/src/components/Avatars/Avatar.stories.tsx +7 -9
  263. package/src/components/Avatars/Avatar.tsx +7 -15
  264. package/src/components/Avatars/AvatarGroup.stories.tsx +2 -3
  265. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +4 -5
  266. package/src/components/Breadcrumb/Breadcrumb.tsx +11 -37
  267. package/src/components/{Buttons → Button}/Button.stories.tsx +4 -5
  268. package/src/components/{Buttons → Button}/Button.tsx +12 -26
  269. package/src/components/{Buttons → Button}/IconButton.stories.tsx +8 -6
  270. package/src/components/{Buttons → Button}/IconButton.tsx +20 -15
  271. package/src/components/{Buttons → Button}/Toggle.stories.tsx +7 -7
  272. package/src/components/{Buttons → Button}/Toggle.tsx +4 -4
  273. package/src/components/{Buttons → Button}/ToggleGroup.stories.tsx +2 -3
  274. package/src/components/{Buttons → Button}/ToggleGroup.tsx +12 -16
  275. package/src/components/Card/Card.stories.tsx +151 -0
  276. package/src/components/Card/Card.tsx +507 -0
  277. package/src/components/Card/index.ts +5 -0
  278. package/src/components/Clipboard/CopyButton.tsx +8 -9
  279. package/src/components/DensityProvider/DensityProvider.tsx +1 -1
  280. package/src/components/Dialog/AlertDialog.stories.tsx +68 -0
  281. package/src/components/{Dialogs → Dialog}/AlertDialog.tsx +123 -82
  282. package/src/components/Dialog/Dialog.stories.tsx +177 -0
  283. package/src/components/Dialog/Dialog.tsx +285 -0
  284. package/src/components/ElevationProvider/ElevationProvider.tsx +1 -1
  285. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +45 -0
  286. package/src/components/ErrorFallback/ErrorFallback.tsx +70 -0
  287. package/src/components/ErrorFallback/ErrorStack.tsx +114 -0
  288. package/src/components/ErrorFallback/ThrowError.tsx +37 -0
  289. package/src/components/ErrorFallback/index.ts +9 -0
  290. package/src/components/Focus/AUDIT.md +43 -0
  291. package/src/components/Focus/Focus.stories.tsx +230 -0
  292. package/src/components/Focus/Focus.tsx +201 -0
  293. package/src/components/Focus/index.ts +5 -0
  294. package/src/components/Icon/Icon.stories.tsx +143 -0
  295. package/src/components/Icon/Icon.tsx +6 -2
  296. package/src/components/Image/Image.stories.tsx +86 -0
  297. package/src/components/Image/Image.tsx +246 -0
  298. package/src/components/Image/index.ts +5 -0
  299. package/src/components/Input/Input.stories.tsx +21 -41
  300. package/src/components/Input/Input.tsx +38 -74
  301. package/src/components/Link/Link.stories.tsx +2 -3
  302. package/src/components/Link/Link.tsx +2 -2
  303. package/src/components/{Lists → List}/List.stories.tsx +30 -34
  304. package/src/components/{Lists → List}/List.tsx +17 -21
  305. package/src/components/{Lists → List}/ListDropIndicator.tsx +7 -7
  306. package/src/components/{Lists → List}/Tree.stories.tsx +5 -6
  307. package/src/components/{Lists → List}/Tree.tsx +0 -1
  308. package/src/components/{Lists → List}/TreeDropIndicator.tsx +6 -6
  309. package/src/components/{Lists → List}/Treegrid.stories.tsx +29 -30
  310. package/src/components/List/Treegrid.tsx +188 -0
  311. package/src/components/Main/Main.stories.tsx +41 -24
  312. package/src/components/Main/Main.tsx +163 -98
  313. package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +2 -3
  314. package/src/components/{Menus → Menu}/ContextMenu.tsx +9 -33
  315. package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +3 -4
  316. package/src/components/{Menus → Menu}/DropdownMenu.tsx +137 -110
  317. package/src/components/Message/Message.stories.tsx +27 -13
  318. package/src/components/Message/Message.tsx +59 -33
  319. package/src/components/Popover/Popover.stories.tsx +8 -9
  320. package/src/components/Popover/Popover.tsx +116 -94
  321. package/src/components/ScrollArea/ScrollArea.stories.tsx +223 -34
  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 +91 -0
  325. package/src/components/ScrollContainer/ScrollContainer.tsx +347 -0
  326. package/src/components/ScrollContainer/index.ts +5 -0
  327. package/src/components/Select/Select.stories.tsx +8 -9
  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 +51 -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 +127 -0
  335. package/src/components/Splitter/index.ts +5 -0
  336. package/src/components/Status/Status.stories.tsx +21 -18
  337. package/src/components/Status/Status.tsx +10 -7
  338. package/src/components/Tag/Tag.stories.tsx +6 -12
  339. package/src/components/Tag/Tag.tsx +3 -8
  340. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +31 -0
  341. package/src/components/ThemeProvider/ThemeProvider.tsx +10 -10
  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 -4
  345. package/src/components/Toast/Toast.tsx +22 -41
  346. package/src/components/Toolbar/Toolbar.stories.tsx +4 -7
  347. package/src/components/Toolbar/Toolbar.tsx +186 -12
  348. package/src/components/Tooltip/Tooltip.stories.tsx +21 -20
  349. package/src/components/Tooltip/Tooltip.tsx +40 -38
  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 +2 -2
  359. package/src/hooks/useVisualViewport.ts +3 -3
  360. package/src/index.ts +2 -1
  361. package/src/playground/Controls.stories.tsx +3 -10
  362. package/src/playground/Custom.stories.tsx +13 -18
  363. package/src/playground/Typography.stories.tsx +3 -3
  364. package/src/primitives/Column/AUDIT.md +148 -0
  365. package/src/primitives/Column/Column.stories.tsx +181 -0
  366. package/src/primitives/Column/Column.tsx +165 -0
  367. package/src/primitives/Column/index.ts +5 -0
  368. package/src/primitives/Container/Container.stories.tsx +29 -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 +57 -0
  372. package/src/primitives/Flex/Flex.tsx +27 -0
  373. package/src/primitives/Flex/index.ts +5 -0
  374. package/src/primitives/Grid/Grid.stories.tsx +56 -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 +68 -0
  378. package/src/primitives/Panel/Panel.tsx +120 -0
  379. package/src/primitives/Panel/index.ts +5 -0
  380. package/src/primitives/index.ts +9 -0
  381. package/src/testing/Loading.tsx +47 -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 +26 -20
  386. package/src/testing/index.ts +2 -0
  387. package/src/translations.ts +19 -0
  388. package/src/util/index.ts +3 -2
  389. package/src/util/usePx.ts +62 -0
  390. package/dist/lib/browser/chunk-LBCJC75U.mjs +0 -4459
  391. package/dist/lib/browser/chunk-LBCJC75U.mjs.map +0 -7
  392. package/dist/lib/node-esm/chunk-QTUGGUCB.mjs +0 -4461
  393. package/dist/lib/node-esm/chunk-QTUGGUCB.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 -13
  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 -27
  406. package/dist/types/src/components/Buttons/ToggleGroup.d.ts.map +0 -1
  407. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +0 -1
  408. package/dist/types/src/components/Buttons/index.d.ts.map +0 -1
  409. package/dist/types/src/components/Dialogs/AlertDialog.d.ts +0 -31
  410. package/dist/types/src/components/Dialogs/AlertDialog.d.ts.map +0 -1
  411. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +0 -1
  412. package/dist/types/src/components/Dialogs/Dialog.d.ts +0 -31
  413. package/dist/types/src/components/Dialogs/Dialog.d.ts.map +0 -1
  414. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts +0 -25
  415. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +0 -1
  416. package/dist/types/src/components/Dialogs/index.d.ts.map +0 -1
  417. package/dist/types/src/components/Lists/List.d.ts.map +0 -1
  418. package/dist/types/src/components/Lists/List.stories.d.ts.map +0 -1
  419. package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +0 -1
  420. package/dist/types/src/components/Lists/Tree.d.ts.map +0 -1
  421. package/dist/types/src/components/Lists/Tree.stories.d.ts.map +0 -1
  422. package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +0 -1
  423. package/dist/types/src/components/Lists/Treegrid.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.map +0 -1
  431. package/dist/types/src/components/Menus/index.d.ts.map +0 -1
  432. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts +0 -12
  433. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts.map +0 -1
  434. package/dist/types/src/util/ThemedClassName.d.ts +0 -5
  435. package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
  436. package/dist/types/src/util/domino.d.ts +0 -18
  437. package/dist/types/src/util/domino.d.ts.map +0 -1
  438. package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +0 -59
  439. package/src/components/AnchoredOverflow/index.ts +0 -5
  440. package/src/components/Dialogs/AlertDialog.stories.tsx +0 -69
  441. package/src/components/Dialogs/Dialog.stories.tsx +0 -67
  442. package/src/components/Dialogs/Dialog.tsx +0 -159
  443. package/src/components/Lists/Treegrid.tsx +0 -152
  444. package/src/testing/decorators/withSurfaceVariantsLayout.tsx +0 -51
  445. package/src/util/ThemedClassName.ts +0 -7
  446. package/src/util/domino.ts +0 -51
  447. /package/dist/types/src/components/{Buttons → Button}/index.d.ts +0 -0
  448. /package/dist/types/src/components/{Dialogs → Dialog}/AlertDialog.stories.d.ts +0 -0
  449. /package/dist/types/src/components/{Dialogs → Dialog}/index.d.ts +0 -0
  450. /package/dist/types/src/components/{Lists → List}/ListDropIndicator.d.ts +0 -0
  451. /package/dist/types/src/components/{Lists → List}/Tree.stories.d.ts +0 -0
  452. /package/dist/types/src/components/{Lists → List}/TreeDropIndicator.d.ts +0 -0
  453. /package/dist/types/src/components/{Lists → List}/Treegrid.stories.d.ts +0 -0
  454. /package/dist/types/src/components/{Lists → List}/index.d.ts +0 -0
  455. /package/dist/types/src/components/{Menus → Menu}/ContextMenu.stories.d.ts +0 -0
  456. /package/dist/types/src/components/{Menus → Menu}/index.d.ts +0 -0
  457. /package/src/components/{Buttons → Button}/index.ts +0 -0
  458. /package/src/components/{Dialogs → Dialog}/index.ts +0 -0
  459. /package/src/components/{Lists → List}/index.ts +0 -0
  460. /package/src/components/{Menus → Menu}/index.ts +0 -0
@@ -6,10 +6,9 @@ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React from 'react';
7
7
 
8
8
  import { withTheme } from '../../testing';
9
- import { Toggle } from '../Buttons';
9
+ import { Toggle } from '../Button';
10
10
  import { Icon } from '../Icon';
11
11
  import { Select } from '../Select';
12
-
13
12
  import { Toolbar } from './Toolbar';
14
13
 
15
14
  type StorybookToolbarProps = {};
@@ -63,18 +62,16 @@ const DefaultStory = (props: StorybookToolbarProps) => {
63
62
  </Toolbar.Button>
64
63
  <Toolbar.Separator />
65
64
  <Toolbar.Button>Test</Toolbar.Button>
66
- <Toolbar.Button>
67
- <Icon icon='ph--arrow-clockwise--regular' />
68
- </Toolbar.Button>
65
+ <Toolbar.IconButton icon='ph--arrow-clockwise--regular' label='Refresh' iconOnly />
69
66
  </Toolbar.Root>
70
67
  );
71
68
  };
72
69
 
73
70
  const meta = {
74
- title: 'ui/react-ui-core/Toolbar',
71
+ title: 'ui/react-ui-core/components/Toolbar',
75
72
  component: Toolbar as any,
76
73
  render: DefaultStory,
77
- decorators: [withTheme],
74
+ decorators: [withTheme()],
78
75
  } satisfies Meta<typeof DefaultStory>;
79
76
 
80
77
  export default meta;
@@ -2,12 +2,19 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
+ import { Primitive } from '@radix-ui/react-primitive';
6
+ import { Slot } from '@radix-ui/react-slot';
5
7
  import type { ToggleGroupItemProps as ToggleGroupItemPrimitiveProps } from '@radix-ui/react-toggle-group';
6
8
  import * as ToolbarPrimitive from '@radix-ui/react-toolbar';
7
9
  import React, { forwardRef } from 'react';
10
+ import { useTranslation } from 'react-i18next';
11
+
12
+ import { composable, composableProps, slottable, type ToolbarStyleProps } from '@dxos/ui-theme';
13
+ import { type SlottableProps } from '@dxos/ui-types';
14
+
15
+ import { translationKey } from '#translations';
8
16
 
9
17
  import { useThemeContext } from '../../hooks';
10
- import { type ThemedClassName } from '../../util';
11
18
  import {
12
19
  Button,
13
20
  ButtonGroup,
@@ -18,20 +25,30 @@ import {
18
25
  Toggle,
19
26
  type ToggleGroupItemProps,
20
27
  type ToggleProps,
21
- } from '../Buttons';
28
+ } from '../Button';
22
29
  import { Link, type LinkProps } from '../Link';
30
+ import { DropdownMenu } from '../Menu';
23
31
  import { Separator, type SeparatorProps } from '../Separator';
24
32
 
25
- type ToolbarRootProps = ThemedClassName<ToolbarPrimitive.ToolbarProps> & { layoutManaged?: boolean };
33
+ //
34
+ // Root
35
+ //
36
+
37
+ type ToolbarRootProps = ToolbarPrimitive.ToolbarProps & ToolbarStyleProps;
26
38
 
27
- const ToolbarRoot = forwardRef<HTMLDivElement, ToolbarRootProps>(
28
- ({ classNames, children, layoutManaged, ...props }, forwardedRef) => {
39
+ const ToolbarRoot = composable<HTMLDivElement, ToolbarRootProps>(
40
+ ({ children, density, disabled, layoutManaged, orientation, ...props }, forwardedRef) => {
41
+ const { className, role, ...rest } = composableProps(props);
29
42
  const { tx } = useThemeContext();
43
+
30
44
  return (
31
45
  <ToolbarPrimitive.Root
32
- {...props}
33
- data-arrow-keys={props.orientation === 'vertical' ? 'up down' : 'left right'}
34
- className={tx('toolbar.root', 'toolbar', { layoutManaged }, classNames)}
46
+ {...rest}
47
+ // Only pass role when explicitly set; radix provides role="toolbar" by default.
48
+ {...(role !== 'none' && { role })}
49
+ orientation={orientation}
50
+ data-arrow-keys={orientation === 'vertical' ? 'up down' : 'left right'}
51
+ className={tx('toolbar.root', { density, disabled, layoutManaged }, className)}
35
52
  ref={forwardedRef}
36
53
  >
37
54
  {children}
@@ -40,6 +57,27 @@ const ToolbarRoot = forwardRef<HTMLDivElement, ToolbarRootProps>(
40
57
  },
41
58
  );
42
59
 
60
+ //
61
+ // Text
62
+ //
63
+
64
+ type ToolbarTextProps = SlottableProps;
65
+
66
+ const ToolbarText = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
67
+ const { className, ...rest } = composableProps(props);
68
+ const Comp = asChild ? Slot : Primitive.div;
69
+ const { tx } = useThemeContext();
70
+ return (
71
+ <Comp {...rest} className={tx('toolbar.text', {}, className)} ref={forwardedRef}>
72
+ {children}
73
+ </Comp>
74
+ );
75
+ });
76
+
77
+ //
78
+ // Button
79
+ //
80
+
43
81
  type ToolbarButtonProps = ButtonProps;
44
82
 
45
83
  const ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>((props, forwardedRef) => {
@@ -50,12 +88,16 @@ const ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>((props,
50
88
  );
51
89
  });
52
90
 
91
+ //
92
+ // IconButton
93
+ //
94
+
53
95
  type ToolbarIconButtonProps = IconButtonProps;
54
96
 
55
97
  const ToolbarIconButton = forwardRef<HTMLButtonElement, ToolbarIconButtonProps>((props, forwardedRef) => {
56
98
  return (
57
99
  <ToolbarPrimitive.Button asChild>
58
- <IconButton {...props} ref={forwardedRef} />
100
+ <IconButton {...props} noTooltip ref={forwardedRef} />
59
101
  </ToolbarPrimitive.Button>
60
102
  );
61
103
  });
@@ -70,6 +112,10 @@ const ToolbarToggle = forwardRef<HTMLButtonElement, ToolbarToggleProps>((props,
70
112
  );
71
113
  });
72
114
 
115
+ //
116
+ // Link
117
+ //
118
+
73
119
  type ToolbarLinkProps = LinkProps;
74
120
 
75
121
  const ToolbarLink = forwardRef<HTMLAnchorElement, ToolbarLinkProps>((props, forwardedRef) => {
@@ -86,6 +132,10 @@ type ToolbarToggleGroupProps = (
86
132
  ) &
87
133
  ButtonGroupProps;
88
134
 
135
+ //
136
+ // ToggleGroup
137
+ //
138
+
89
139
  const ToolbarToggleGroup = forwardRef<HTMLDivElement, ToolbarToggleGroupProps>(
90
140
  ({ classNames, children, elevation, ...props }, forwardedRef) => {
91
141
  return (
@@ -114,19 +164,34 @@ const ToolbarToggleGroupIconItem = forwardRef<HTMLButtonElement, ToolbarToggleGr
114
164
  ({ variant, density, elevation, classNames, icon, label, iconOnly, ...props }, forwardedRef) => {
115
165
  return (
116
166
  <ToolbarPrimitive.ToolbarToggleItem {...props} asChild>
117
- <IconButton {...{ variant, density, elevation, classNames, icon, label, iconOnly }} ref={forwardedRef} />
167
+ <IconButton
168
+ {...{
169
+ variant,
170
+ density,
171
+ elevation,
172
+ classNames,
173
+ icon,
174
+ label,
175
+ iconOnly,
176
+ }}
177
+ ref={forwardedRef}
178
+ />
118
179
  </ToolbarPrimitive.ToolbarToggleItem>
119
180
  );
120
181
  },
121
182
  );
122
183
 
184
+ //
185
+ // Separator
186
+ //
187
+
123
188
  type ToolbarSeparatorProps = SeparatorProps & { variant?: 'gap' | 'line' };
124
189
 
125
190
  const ToolbarSeparator = forwardRef<HTMLDivElement, ToolbarSeparatorProps>(
126
- ({ variant = 'line', ...props }, forwardedRef) => {
191
+ ({ variant = 'gap', ...props }, forwardedRef) => {
127
192
  return variant === 'line' ? (
128
193
  <ToolbarPrimitive.Separator asChild>
129
- <Separator {...props} ref={forwardedRef} />
194
+ <Separator orientation='vertical' {...props} ref={forwardedRef} />
130
195
  </ToolbarPrimitive.Separator>
131
196
  ) : (
132
197
  <ToolbarPrimitive.Separator className='grow' ref={forwardedRef} />
@@ -134,8 +199,109 @@ const ToolbarSeparator = forwardRef<HTMLDivElement, ToolbarSeparatorProps>(
134
199
  },
135
200
  );
136
201
 
202
+ //
203
+ // DragHandle
204
+ //
205
+
206
+ type ToolbarDragHandleProps = { testId?: string; label?: string };
207
+
208
+ const ToolbarDragHandle = forwardRef<HTMLButtonElement, ToolbarDragHandleProps>(
209
+ ({ testId = 'drag-handle', label }, forwardedRef) => {
210
+ const { t } = useTranslation(translationKey);
211
+ return (
212
+ <ToolbarIconButton
213
+ data-testid={testId}
214
+ tabIndex={-1}
215
+ noTooltip
216
+ iconOnly
217
+ icon='ph--dots-six-vertical--regular'
218
+ variant='ghost'
219
+ label={label ?? t('toolbar-drag-handle.label')}
220
+ classNames='dx-focus-ring-none cursor-pointer'
221
+ disabled={!forwardedRef}
222
+ ref={forwardedRef}
223
+ />
224
+ );
225
+ },
226
+ );
227
+
228
+ //
229
+ // CloseIconButton
230
+ //
231
+
232
+ type ToolbarCloseIconButtonProps = { onClick?: () => void; label?: string };
233
+
234
+ const ToolbarCloseIconButton = forwardRef<HTMLButtonElement, ToolbarCloseIconButtonProps>(
235
+ ({ onClick, label }, forwardedRef) => {
236
+ const { t } = useTranslation(translationKey);
237
+
238
+ return (
239
+ <ToolbarIconButton
240
+ iconOnly
241
+ icon='ph--x--regular'
242
+ variant='ghost'
243
+ label={label ?? t('toolbar-close.label')}
244
+ classNames='cursor-pointer'
245
+ onClick={onClick}
246
+ ref={forwardedRef}
247
+ />
248
+ );
249
+ },
250
+ );
251
+
252
+ //
253
+ // Menu
254
+ //
255
+
256
+ type ToolbarMenuItem<T extends any | void = void> = {
257
+ label: string;
258
+ onClick: (context: T) => void;
259
+ };
260
+
261
+ type ToolbarMenuProps<T extends any | void = void> = {
262
+ context?: T;
263
+ items?: ToolbarMenuItem<T>[];
264
+ };
265
+
266
+ // TODO(burdon): Make slottable.
267
+ const ToolbarMenu = <T extends any | void = void>({ context, items }: ToolbarMenuProps<T>) => {
268
+ const { t } = useTranslation(translationKey);
269
+
270
+ return (
271
+ <DropdownMenu.Root>
272
+ <DropdownMenu.Trigger disabled={!items?.length} asChild>
273
+ <ToolbarIconButton
274
+ iconOnly
275
+ variant='ghost'
276
+ icon='ph--dots-three-vertical--regular'
277
+ label={t('toolbar-menu.label')}
278
+ />
279
+ </DropdownMenu.Trigger>
280
+ {(items?.length ?? 0) > 0 && (
281
+ <DropdownMenu.Portal>
282
+ <DropdownMenu.Content>
283
+ <DropdownMenu.Viewport>
284
+ {items?.map(({ label, onClick: onSelect }, index) => (
285
+ <DropdownMenu.Item key={index} onSelect={() => onSelect(context as T)}>
286
+ {label}
287
+ </DropdownMenu.Item>
288
+ ))}
289
+ </DropdownMenu.Viewport>
290
+ <DropdownMenu.Arrow />
291
+ </DropdownMenu.Content>
292
+ </DropdownMenu.Portal>
293
+ )}
294
+ </DropdownMenu.Root>
295
+ );
296
+ };
297
+
298
+ //
299
+ // Toolbar
300
+ //
301
+
137
302
  export const Toolbar = {
138
303
  Root: ToolbarRoot,
304
+ Text: ToolbarText,
139
305
  Button: ToolbarButton,
140
306
  IconButton: ToolbarIconButton,
141
307
  Link: ToolbarLink,
@@ -144,10 +310,14 @@ export const Toolbar = {
144
310
  ToggleGroupItem: ToolbarToggleGroupItem,
145
311
  ToggleGroupIconItem: ToolbarToggleGroupIconItem,
146
312
  Separator: ToolbarSeparator,
313
+ DragHandle: ToolbarDragHandle,
314
+ CloseIconButton: ToolbarCloseIconButton,
315
+ Menu: ToolbarMenu,
147
316
  };
148
317
 
149
318
  export type {
150
319
  ToolbarRootProps,
320
+ ToolbarTextProps,
151
321
  ToolbarButtonProps,
152
322
  ToolbarIconButtonProps,
153
323
  ToolbarLinkProps,
@@ -156,4 +326,8 @@ export type {
156
326
  ToolbarToggleGroupItemProps,
157
327
  ToolbarToggleGroupIconItemProps,
158
328
  ToolbarSeparatorProps,
329
+ ToolbarDragHandleProps,
330
+ ToolbarCloseIconButtonProps,
331
+ ToolbarMenuItem,
332
+ ToolbarMenuProps,
159
333
  };
@@ -5,35 +5,36 @@
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
- import { Button } from '../Buttons';
12
-
11
+ import { Button } from '../Button';
13
12
  import { Tooltip } from './Tooltip';
14
13
 
15
- type StoryProps = {
14
+ type DefaultStoryProps = {
16
15
  tooltips: { label: string; content: string }[];
17
16
  defaultOpen?: boolean;
18
17
  };
19
18
 
20
- const DefaultStory = ({ tooltips, defaultOpen }: StoryProps) => (
21
- <Tooltip.Provider defaultOpen={defaultOpen}>
22
- <div role='none' className='is-32'>
23
- {tooltips.map(({ label, content }, i) => (
24
- <Tooltip.Trigger asChild key={i} content={content} side='right'>
25
- <Button classNames='block is-full'>{label}</Button>
26
- </Tooltip.Trigger>
27
- ))}
28
- </div>
29
- </Tooltip.Provider>
30
- );
19
+ const DefaultStory = ({ tooltips, defaultOpen }: DefaultStoryProps) => {
20
+ return (
21
+ <Tooltip.Provider defaultOpen={defaultOpen}>
22
+ <div role='none' className='w-32'>
23
+ {tooltips.map(({ label, content }, i) => (
24
+ <Tooltip.Trigger asChild key={i} content={content} side='right'>
25
+ <Button classNames='block w-full'>{label}</Button>
26
+ </Tooltip.Trigger>
27
+ ))}
28
+ </div>
29
+ </Tooltip.Provider>
30
+ );
31
+ };
31
32
 
32
33
  const meta = {
33
- title: 'ui/react-ui-core/Tooltip',
34
+ title: 'ui/react-ui-core/components/Tooltip',
34
35
  component: Tooltip as any,
35
36
  render: DefaultStory,
36
- decorators: [withTheme],
37
+ decorators: [withTheme()],
37
38
  } satisfies Meta<typeof DefaultStory>;
38
39
 
39
40
  export default meta;
@@ -72,10 +73,10 @@ export const DefaultOpen: Story = {
72
73
  export const StressTest: Story = {
73
74
  args: {
74
75
  defaultOpen: true,
75
- tooltips: faker.helpers.multiple(
76
+ tooltips: random.helpers.multiple(
76
77
  () => ({
77
- label: faker.lorem.words(2),
78
- content: faker.lorem.words(5),
78
+ label: random.lorem.words(2),
79
+ content: random.lorem.words(5),
79
80
  }),
80
81
  { count: 32 },
81
82
  ),
@@ -3,6 +3,7 @@
3
3
  //
4
4
 
5
5
  // This is based upon `@radix-ui/react-tooltip` fetched 17 March 2025 at https://github.com/radix-ui/primitives at commit 6e75e11.
6
+ // TODO(burdon): Replace with https://ui.shadcn.com/docs/components/radix/tooltip
6
7
 
7
8
  import { composeEventHandlers } from '@radix-ui/primitive';
8
9
  import { useComposedRefs } from '@radix-ui/react-compose-refs';
@@ -21,9 +22,8 @@ import { useControllableState } from '@radix-ui/react-use-controllable-state';
21
22
  import * as VisuallyHiddenPrimitive from '@radix-ui/react-visually-hidden';
22
23
  import React, {
23
24
  type ComponentPropsWithoutRef,
24
- type ElementRef,
25
+ type ComponentRef,
25
26
  type FC,
26
- type MutableRefObject,
27
27
  type ReactNode,
28
28
  type RefObject,
29
29
  type SyntheticEvent,
@@ -41,9 +41,9 @@ type TooltipScopedProps<P = {}> = P & { __scopeTooltip?: Scope };
41
41
  const [createTooltipContext, createTooltipScope] = createContextScope('Tooltip', [createPopperScope]);
42
42
  const usePopperScope = createPopperScope();
43
43
 
44
- /* -------------------------------------------------------------------------------------------------
45
- * Tooltip
46
- * ----------------------------------------------------------------------------------------------- */
44
+ //
45
+ // Tooltip
46
+ //
47
47
 
48
48
  const DEFAULT_DELAY_DURATION = 700;
49
49
  const TOOLTIP_OPEN = 'tooltip.open';
@@ -60,13 +60,13 @@ type TooltipContextValue = {
60
60
  onOpen(): void;
61
61
  onClose(): void;
62
62
  onPointerInTransitChange(inTransit: boolean): void;
63
- isPointerInTransitRef: MutableRefObject<boolean>;
63
+ isPointerInTransitRef: RefObject<boolean>;
64
64
  disableHoverableContent: boolean;
65
65
  };
66
66
 
67
67
  const [TooltipContextProvider, useTooltipContext] = createTooltipContext<TooltipContextValue>(TOOLTIP_NAME);
68
68
 
69
- interface TooltipProviderProps {
69
+ type TooltipProviderProps = {
70
70
  children?: ReactNode;
71
71
  open?: boolean;
72
72
  defaultOpen?: boolean;
@@ -87,7 +87,7 @@ interface TooltipProviderProps {
87
87
  * @defaultValue 300
88
88
  */
89
89
  skipDelayDuration?: number;
90
- }
90
+ };
91
91
 
92
92
  const TooltipProvider: FC<TooltipProviderProps> = (props: TooltipScopedProps<TooltipProviderProps>) => {
93
93
  const {
@@ -215,9 +215,9 @@ const TooltipProvider: FC<TooltipProviderProps> = (props: TooltipScopedProps<Too
215
215
  isPointerInTransitRef.current = inTransit;
216
216
  }, [])}
217
217
  >
218
- <TooltipContent side={side} className={tx('tooltip.content', 'tooltip', { elevation })}>
218
+ <TooltipContent side={side} className={tx('tooltip.content', { elevation })}>
219
219
  {content}
220
- <TooltipArrow className={tx('tooltip.arrow', 'tooltip__arrow')} />
220
+ <TooltipArrow className={tx('tooltip.arrow')} />
221
221
  </TooltipContent>
222
222
  <TooltipVirtualTrigger virtualRef={triggerRef as RefObject<HTMLButtonElement>} />
223
223
  {children}
@@ -228,9 +228,9 @@ const TooltipProvider: FC<TooltipProviderProps> = (props: TooltipScopedProps<Too
228
228
 
229
229
  TooltipProvider.displayName = TOOLTIP_NAME;
230
230
 
231
- /* -------------------------------------------------------------------------------------------------
232
- * TooltipVirtualTrigger
233
- * ----------------------------------------------------------------------------------------------- */
231
+ //
232
+ // TooltipVirtualTrigger
233
+ //
234
234
 
235
235
  const TooltipVirtualTrigger = ({
236
236
  virtualRef,
@@ -240,13 +240,13 @@ const TooltipVirtualTrigger = ({
240
240
  return <PopperPrimitive.Anchor asChild {...popperScope} virtualRef={virtualRef} />;
241
241
  };
242
242
 
243
- /* -------------------------------------------------------------------------------------------------
244
- * TooltipTrigger
245
- * ----------------------------------------------------------------------------------------------- */
243
+ //
244
+ // TooltipTrigger
245
+ //
246
246
 
247
247
  const TRIGGER_NAME = 'TooltipTrigger';
248
248
 
249
- type TooltipTriggerElement = ElementRef<typeof Primitive.button>;
249
+ type TooltipTriggerElement = ComponentRef<typeof Primitive.button>;
250
250
  type PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;
251
251
  type TooltipTriggerProps = PrimitiveButtonProps &
252
252
  Pick<TooltipProps, 'delayDuration'> & {
@@ -322,9 +322,9 @@ const TooltipTrigger = forwardRef<TooltipTriggerElement, TooltipTriggerProps>(
322
322
 
323
323
  TooltipTrigger.displayName = TRIGGER_NAME;
324
324
 
325
- /* -------------------------------------------------------------------------------------------------
326
- * TooltipPortal
327
- * ----------------------------------------------------------------------------------------------- */
325
+ //
326
+ // TooltipPortal
327
+ //
328
328
 
329
329
  const PORTAL_NAME = 'TooltipPortal';
330
330
 
@@ -334,7 +334,7 @@ const [PortalProvider, usePortalContext] = createTooltipContext<PortalContextVal
334
334
  });
335
335
 
336
336
  type PortalProps = ComponentPropsWithoutRef<typeof PortalPrimitive>;
337
- interface TooltipPortalProps {
337
+ type TooltipPortalProps = {
338
338
  children?: ReactNode;
339
339
  /**
340
340
  * Specify a container element to portal the content into.
@@ -345,7 +345,7 @@ interface TooltipPortalProps {
345
345
  * controlling animation with React animation libraries.
346
346
  */
347
347
  forceMount?: true;
348
- }
348
+ };
349
349
 
350
350
  const TooltipPortal: FC<TooltipPortalProps> = (props: TooltipScopedProps<TooltipPortalProps>) => {
351
351
  const { __scopeTooltip, forceMount, children, container } = props;
@@ -363,20 +363,20 @@ const TooltipPortal: FC<TooltipPortalProps> = (props: TooltipScopedProps<Tooltip
363
363
 
364
364
  TooltipPortal.displayName = PORTAL_NAME;
365
365
 
366
- /* -------------------------------------------------------------------------------------------------
367
- * TooltipContent
368
- * ----------------------------------------------------------------------------------------------- */
366
+ //
367
+ // TooltipContent
368
+ //
369
369
 
370
370
  const CONTENT_NAME = 'TooltipContent';
371
371
 
372
372
  type TooltipContentElement = TooltipContentImplElement;
373
- interface TooltipContentProps extends TooltipContentImplProps {
373
+ type TooltipContentProps = TooltipContentImplProps & {
374
374
  /**
375
375
  * Used to force mounting when more control is needed. Useful when
376
376
  * controlling animation with React animation libraries.
377
377
  */
378
378
  forceMount?: true;
379
- }
379
+ };
380
380
 
381
381
  const TooltipContent = forwardRef<TooltipContentElement, TooltipContentProps>(
382
382
  (props: TooltipScopedProps<TooltipContentProps>, forwardedRef) => {
@@ -400,7 +400,7 @@ type Point = { x: number; y: number };
400
400
  type Polygon = Point[];
401
401
 
402
402
  type TooltipContentHoverableElement = TooltipContentImplElement;
403
- interface TooltipContentHoverableProps extends TooltipContentImplProps {}
403
+ type TooltipContentHoverableProps = TooltipContentImplProps;
404
404
 
405
405
  const TooltipContentHoverable = forwardRef<TooltipContentHoverableElement, TooltipContentHoverableProps>(
406
406
  (props: TooltipScopedProps<TooltipContentHoverableProps>, forwardedRef) => {
@@ -479,10 +479,10 @@ const [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] =
479
479
  isInside: false,
480
480
  });
481
481
 
482
- type TooltipContentImplElement = ElementRef<typeof PopperPrimitive.Content>;
482
+ type TooltipContentImplElement = ComponentRef<typeof PopperPrimitive.Content>;
483
483
  type DismissableLayerProps = ComponentPropsWithoutRef<typeof DismissableLayer>;
484
484
  type PopperContentProps = ComponentPropsWithoutRef<typeof PopperPrimitive.Content>;
485
- interface TooltipContentImplProps extends Omit<PopperContentProps, 'onPlaced'> {
485
+ type TooltipContentImplProps = Omit<PopperContentProps, 'onPlaced'> & {
486
486
  /**
487
487
  * A more descriptive label for accessibility purpose
488
488
  */
@@ -498,7 +498,7 @@ interface TooltipContentImplProps extends Omit<PopperContentProps, 'onPlaced'> {
498
498
  * Can be prevented.
499
499
  */
500
500
  onPointerDownOutside?: DismissableLayerProps['onPointerDownOutside'];
501
- }
501
+ };
502
502
 
503
503
  const TooltipContentImpl = forwardRef<TooltipContentImplElement, TooltipContentImplProps>(
504
504
  (props: TooltipScopedProps<TooltipContentImplProps>, forwardedRef) => {
@@ -574,15 +574,15 @@ const TooltipContentImpl = forwardRef<TooltipContentImplElement, TooltipContentI
574
574
 
575
575
  TooltipContent.displayName = CONTENT_NAME;
576
576
 
577
- /* -------------------------------------------------------------------------------------------------
578
- * TooltipArrow
579
- * ----------------------------------------------------------------------------------------------- */
577
+ //
578
+ // TooltipArrow
579
+ //
580
580
 
581
581
  const ARROW_NAME = 'TooltipArrow';
582
582
 
583
- type TooltipArrowElement = ElementRef<typeof PopperPrimitive.Arrow>;
583
+ type TooltipArrowElement = ComponentRef<typeof PopperPrimitive.Arrow>;
584
584
  type PopperArrowProps = ComponentPropsWithoutRef<typeof PopperPrimitive.Arrow>;
585
- interface TooltipArrowProps extends PopperArrowProps {}
585
+ type TooltipArrowProps = PopperArrowProps;
586
586
 
587
587
  const TooltipArrow = forwardRef<TooltipArrowElement, TooltipArrowProps>(
588
588
  (props: TooltipScopedProps<TooltipArrowProps>, forwardedRef) => {
@@ -599,8 +599,6 @@ const TooltipArrow = forwardRef<TooltipArrowElement, TooltipArrowProps>(
599
599
 
600
600
  TooltipArrow.displayName = ARROW_NAME;
601
601
 
602
- /* ----------------------------------------------------------------------------------------------- */
603
-
604
602
  type TooltipSide = NonNullable<TooltipContentProps['side']>;
605
603
 
606
604
  const getExitSideFromRect = (point: Point, rect: DOMRect): TooltipSide => {
@@ -755,6 +753,10 @@ const getHullPresorted = <P extends Point>(points: Readonly<Array<P>>): Array<P>
755
753
  }
756
754
  };
757
755
 
756
+ //
757
+ // Tooltip
758
+ //
759
+
758
760
  export const Tooltip = {
759
761
  Provider: TooltipProvider,
760
762
  Trigger: TooltipTrigger,
@@ -2,29 +2,35 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- export * from './AnchoredOverflow';
5
+ export * from './DensityProvider';
6
+ export * from './ElevationProvider';
7
+ export * from './ThemeProvider';
8
+
6
9
  export * from './Avatars';
7
10
  export * from './Breadcrumb';
8
- export * from './Buttons';
11
+ export * from './Button';
12
+ export * from './Card';
9
13
  export * from './Clipboard';
10
- export * from './Dialogs';
14
+ export * from './Dialog';
15
+ export * from './ErrorFallback';
16
+ export * from './Focus';
11
17
  export * from './Icon';
18
+ export * from './Image';
12
19
  export * from './Input';
13
20
  export * from './Link';
14
- export * from './Lists';
21
+ export * from './List';
15
22
  export * from './Main';
16
- export * from './Menus';
23
+ export * from './Menu';
17
24
  export * from './Message';
18
25
  export * from './Popover';
19
26
  export * from './Status';
20
27
  export * from './ScrollArea';
28
+ export * from './ScrollContainer';
21
29
  export * from './Select';
22
30
  export * from './Separator';
31
+ export * from './Skeleton';
32
+ export * from './Splitter';
23
33
  export * from './Tag';
24
34
  export * from './Toast';
25
35
  export * from './Toolbar';
26
36
  export * from './Tooltip';
27
-
28
- export * from './DensityProvider';
29
- export * from './ElevationProvider';
30
- export * from './ThemeProvider';