@dxos/react-ui 0.8.4-main.ae835ea → 0.8.4-main.bc2380dfbc

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 (476) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/browser/chunk-A5QCIG5R.mjs +24 -0
  4. package/dist/lib/browser/chunk-A5QCIG5R.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-BDBC6H6V.mjs +848 -0
  6. package/dist/lib/browser/chunk-BDBC6H6V.mjs.map +7 -0
  7. package/dist/lib/browser/index.mjs +4409 -65
  8. package/dist/lib/browser/index.mjs.map +4 -4
  9. package/dist/lib/browser/meta.json +1 -1
  10. package/dist/lib/browser/testing/index.mjs +88 -70
  11. package/dist/lib/browser/testing/index.mjs.map +4 -4
  12. package/dist/lib/browser/translations.mjs +9 -0
  13. package/dist/lib/browser/translations.mjs.map +7 -0
  14. package/dist/lib/node-esm/chunk-3JSJK2ZY.mjs +850 -0
  15. package/dist/lib/node-esm/chunk-3JSJK2ZY.mjs.map +7 -0
  16. package/dist/lib/node-esm/chunk-XCFLA74M.mjs +26 -0
  17. package/dist/lib/node-esm/chunk-XCFLA74M.mjs.map +7 -0
  18. package/dist/lib/node-esm/index.mjs +4409 -65
  19. package/dist/lib/node-esm/index.mjs.map +4 -4
  20. package/dist/lib/node-esm/meta.json +1 -1
  21. package/dist/lib/node-esm/testing/index.mjs +88 -70
  22. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  23. package/dist/lib/node-esm/translations.mjs +10 -0
  24. package/dist/lib/node-esm/translations.mjs.map +7 -0
  25. package/dist/types/src/components/Avatars/Avatar.d.ts +1 -1
  26. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  27. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  28. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  29. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  30. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  31. package/dist/types/src/components/{Buttons → Button}/Button.d.ts +3 -3
  32. package/dist/types/src/components/Button/Button.d.ts.map +1 -0
  33. package/dist/types/src/components/{Buttons → Button}/Button.stories.d.ts +1 -1
  34. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -0
  35. package/dist/types/src/components/{Buttons → Button}/IconButton.d.ts +3 -2
  36. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -0
  37. package/dist/types/src/components/{Buttons → Button}/IconButton.stories.d.ts +3 -0
  38. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -0
  39. package/dist/types/src/components/{Buttons → Button}/Toggle.d.ts +2 -2
  40. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -0
  41. package/dist/types/src/components/Button/Toggle.stories.d.ts +16 -0
  42. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -0
  43. package/dist/types/src/components/Button/ToggleGroup.d.ts +27 -0
  44. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -0
  45. package/dist/types/src/components/{Buttons → Button}/ToggleGroup.stories.d.ts +6 -6
  46. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -0
  47. package/dist/types/src/components/Button/index.d.ts.map +1 -0
  48. package/dist/types/src/components/Card/Card.d.ts +124 -0
  49. package/dist/types/src/components/Card/Card.d.ts.map +1 -0
  50. package/dist/types/src/components/Card/Card.stories.d.ts +21 -0
  51. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -0
  52. package/dist/types/src/components/Card/index.d.ts +2 -0
  53. package/dist/types/src/components/Card/index.d.ts.map +1 -0
  54. package/dist/types/src/components/Carousel/Carousel.d.ts +90 -0
  55. package/dist/types/src/components/Carousel/Carousel.d.ts.map +1 -0
  56. package/dist/types/src/components/Carousel/index.d.ts +2 -0
  57. package/dist/types/src/components/Carousel/index.d.ts.map +1 -0
  58. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  59. package/dist/types/src/components/Clipboard/CopyButton.d.ts +1 -1
  60. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  61. package/dist/types/src/components/Clipboard/index.d.ts +10 -1
  62. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  63. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts +1 -1
  64. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  65. package/dist/types/src/components/Dialog/AlertDialog.d.ts +51 -0
  66. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -0
  67. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -0
  68. package/dist/types/src/components/Dialog/Dialog.d.ts +64 -0
  69. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -0
  70. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +25 -0
  71. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -0
  72. package/dist/types/src/components/Dialog/index.d.ts.map +1 -0
  73. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
  74. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  75. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts +11 -0
  76. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -0
  77. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts +7 -0
  78. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -0
  79. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +19 -0
  80. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -0
  81. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts +9 -0
  82. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -0
  83. package/dist/types/src/components/ErrorFallback/index.d.ts +5 -0
  84. package/dist/types/src/components/ErrorFallback/index.d.ts.map +1 -0
  85. package/dist/types/src/components/Focus/Focus.d.ts +36 -0
  86. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -0
  87. package/dist/types/src/components/Focus/Focus.stories.d.ts +9 -0
  88. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -0
  89. package/dist/types/src/components/Focus/index.d.ts +2 -0
  90. package/dist/types/src/components/Focus/index.d.ts.map +1 -0
  91. package/dist/types/src/components/Icon/Icon.d.ts +5 -1
  92. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  93. package/dist/types/src/components/Icon/Icon.stories.d.ts +11 -3
  94. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -1
  95. package/dist/types/src/components/Image/Image.d.ts +15 -0
  96. package/dist/types/src/components/Image/Image.d.ts.map +1 -0
  97. package/dist/types/src/components/Image/Image.stories.d.ts +34 -0
  98. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -0
  99. package/dist/types/src/components/Image/index.d.ts +2 -0
  100. package/dist/types/src/components/Image/index.d.ts.map +1 -0
  101. package/dist/types/src/components/Input/Input.d.ts +19 -22
  102. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  103. package/dist/types/src/components/Input/Input.stories.d.ts +8 -8
  104. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  105. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  106. package/dist/types/src/components/{Lists → List}/List.d.ts +6 -4
  107. package/dist/types/src/components/List/List.d.ts.map +1 -0
  108. package/dist/types/src/components/{Lists → List}/List.stories.d.ts +3 -1
  109. package/dist/types/src/components/List/List.stories.d.ts.map +1 -0
  110. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -0
  111. package/dist/types/src/components/{Lists → List}/Tree.d.ts +2 -2
  112. package/dist/types/src/components/List/Tree.d.ts.map +1 -0
  113. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -0
  114. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -0
  115. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts +5 -9
  116. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -0
  117. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -0
  118. package/dist/types/src/components/List/index.d.ts.map +1 -0
  119. package/dist/types/src/components/Main/Main.d.ts +24 -21
  120. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  121. package/dist/types/src/components/Main/Main.stories.d.ts +0 -3
  122. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  123. package/dist/types/src/components/Main/useSwipeToDismiss.d.ts.map +1 -1
  124. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts +46 -0
  125. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts.map +1 -0
  126. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts +16 -0
  127. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts.map +1 -0
  128. package/dist/types/src/components/MediaPlayer/index.d.ts +2 -0
  129. package/dist/types/src/components/MediaPlayer/index.d.ts.map +1 -0
  130. package/dist/types/src/components/{Menus → Menu}/ContextMenu.d.ts +6 -6
  131. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -0
  132. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -0
  133. package/dist/types/src/components/Menu/DropdownMenu.d.ts +121 -0
  134. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
  135. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +28 -0
  136. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
  137. package/dist/types/src/components/Menu/index.d.ts.map +1 -0
  138. package/dist/types/src/components/Message/Message.d.ts +2 -2
  139. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  140. package/dist/types/src/components/Message/Message.stories.d.ts +5 -6
  141. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  142. package/dist/types/src/components/Popover/Popover.d.ts +40 -23
  143. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  144. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  145. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +27 -27
  146. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  147. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +57 -8
  148. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  149. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +68 -0
  150. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -0
  151. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +23 -0
  152. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -0
  153. package/dist/types/src/components/ScrollContainer/index.d.ts +2 -0
  154. package/dist/types/src/components/ScrollContainer/index.d.ts.map +1 -0
  155. package/dist/types/src/components/Select/Select.d.ts +10 -10
  156. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  157. package/dist/types/src/components/Select/Select.stories.d.ts +2 -2
  158. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  159. package/dist/types/src/components/Separator/Separator.d.ts +4 -4
  160. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  161. package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
  162. package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  163. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
  164. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  165. package/dist/types/src/components/Skeleton/index.d.ts +2 -0
  166. package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
  167. package/dist/types/src/components/Splitter/Splitter.d.ts +34 -0
  168. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
  169. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
  170. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
  171. package/dist/types/src/components/Splitter/index.d.ts +2 -0
  172. package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
  173. package/dist/types/src/components/Status/Status.d.ts +3 -4
  174. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  175. package/dist/types/src/components/Status/Status.stories.d.ts +4 -2
  176. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  177. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  178. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  179. package/dist/types/src/components/Tag/Tag.stories.d.ts +0 -5
  180. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  181. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +3 -3
  182. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  183. package/dist/types/src/components/{Menus/DropdownMenu.stories.d.ts → ThemeProvider/ThemeProvider.stories.d.ts} +2 -5
  184. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  185. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +55 -63
  186. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  187. package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
  188. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  189. package/dist/types/src/components/Toast/Toast.d.ts +20 -20
  190. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  191. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  192. package/dist/types/src/components/Toolbar/Toolbar.d.ts +40 -22
  193. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  194. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  195. package/dist/types/src/components/Tooltip/Tooltip.d.ts +10 -10
  196. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  197. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +2 -2
  198. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  199. package/dist/types/src/components/index.d.ts +16 -8
  200. package/dist/types/src/components/index.d.ts.map +1 -1
  201. package/dist/types/src/exemplars/generics.stories.d.ts +19 -0
  202. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
  203. package/dist/types/src/exemplars/slot.stories.d.ts +15 -0
  204. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
  205. package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
  206. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
  207. package/dist/types/src/exemplars/virtualizer.stories.d.ts +11 -0
  208. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -0
  209. package/dist/types/src/hooks/index.d.ts +1 -0
  210. package/dist/types/src/hooks/index.d.ts.map +1 -1
  211. package/dist/types/src/hooks/useDensityContext.d.ts +2 -2
  212. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  213. package/dist/types/src/hooks/useElevationContext.d.ts +1 -1
  214. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  215. package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
  216. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  217. package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -1
  218. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  219. package/dist/types/src/index.d.ts +2 -1
  220. package/dist/types/src/index.d.ts.map +1 -1
  221. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  222. package/dist/types/src/playground/Custom.stories.d.ts +1 -1
  223. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  224. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  225. package/dist/types/src/primitives/Column/Column.d.ts +33 -0
  226. package/dist/types/src/primitives/Column/Column.d.ts.map +1 -0
  227. package/dist/types/src/primitives/Column/Column.stories.d.ts +25 -0
  228. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -0
  229. package/dist/types/src/primitives/Column/index.d.ts +2 -0
  230. package/dist/types/src/primitives/Column/index.d.ts.map +1 -0
  231. package/dist/types/src/primitives/Container/Container.d.ts +7 -0
  232. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
  233. package/dist/types/src/primitives/Container/Container.stories.d.ts +6 -0
  234. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
  235. package/dist/types/src/primitives/Container/index.d.ts +2 -0
  236. package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
  237. package/dist/types/src/primitives/Flex/Flex.d.ts +11 -0
  238. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
  239. package/dist/types/src/primitives/Flex/Flex.stories.d.ts +8 -0
  240. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -0
  241. package/dist/types/src/primitives/Flex/index.d.ts +2 -0
  242. package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
  243. package/dist/types/src/primitives/Grid/Grid.d.ts +10 -0
  244. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -0
  245. package/dist/types/src/primitives/Grid/Grid.stories.d.ts +8 -0
  246. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -0
  247. package/dist/types/src/primitives/Grid/index.d.ts +2 -0
  248. package/dist/types/src/primitives/Grid/index.d.ts.map +1 -0
  249. package/dist/types/src/primitives/Panel/Panel.d.ts +35 -0
  250. package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -0
  251. package/dist/types/src/primitives/Panel/Panel.stories.d.ts +6 -0
  252. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -0
  253. package/dist/types/src/primitives/Panel/index.d.ts +2 -0
  254. package/dist/types/src/primitives/Panel/index.d.ts.map +1 -0
  255. package/dist/types/src/primitives/index.d.ts +6 -0
  256. package/dist/types/src/primitives/index.d.ts.map +1 -0
  257. package/dist/types/src/testing/Loading.d.ts +9 -0
  258. package/dist/types/src/testing/Loading.d.ts.map +1 -0
  259. package/dist/types/src/testing/decorators/index.d.ts +1 -1
  260. package/dist/types/src/testing/decorators/index.d.ts.map +1 -1
  261. package/dist/types/src/testing/decorators/withLayout.d.ts +3 -3
  262. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
  263. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +12 -0
  264. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -0
  265. package/dist/types/src/testing/decorators/withTheme.d.ts +3 -2
  266. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  267. package/dist/types/src/testing/index.d.ts +1 -0
  268. package/dist/types/src/testing/index.d.ts.map +1 -1
  269. package/dist/types/src/translations.d.ts +16 -0
  270. package/dist/types/src/translations.d.ts.map +1 -0
  271. package/dist/types/src/util/index.d.ts +1 -2
  272. package/dist/types/src/util/index.d.ts.map +1 -1
  273. package/dist/types/src/util/usePx.d.ts.map +1 -1
  274. package/dist/types/tsconfig.tsbuildinfo +1 -1
  275. package/package.json +53 -39
  276. package/src/components/Avatars/Avatar.stories.tsx +7 -9
  277. package/src/components/Avatars/Avatar.tsx +7 -15
  278. package/src/components/Avatars/AvatarGroup.stories.tsx +2 -3
  279. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +4 -5
  280. package/src/components/Breadcrumb/Breadcrumb.tsx +11 -37
  281. package/src/components/{Buttons → Button}/Button.stories.tsx +4 -5
  282. package/src/components/{Buttons → Button}/Button.tsx +12 -26
  283. package/src/components/{Buttons → Button}/IconButton.stories.tsx +8 -6
  284. package/src/components/{Buttons → Button}/IconButton.tsx +20 -15
  285. package/src/components/{Buttons → Button}/Toggle.stories.tsx +7 -7
  286. package/src/components/{Buttons → Button}/Toggle.tsx +4 -4
  287. package/src/components/{Buttons → Button}/ToggleGroup.stories.tsx +2 -3
  288. package/src/components/{Buttons → Button}/ToggleGroup.tsx +12 -16
  289. package/src/components/Card/Card.stories.tsx +151 -0
  290. package/src/components/Card/Card.tsx +514 -0
  291. package/src/components/Card/index.ts +5 -0
  292. package/src/components/Carousel/Carousel.tsx +337 -0
  293. package/src/components/Carousel/index.ts +5 -0
  294. package/src/components/Clipboard/CopyButton.tsx +10 -11
  295. package/src/components/DensityProvider/DensityProvider.tsx +1 -1
  296. package/src/components/Dialog/AlertDialog.stories.tsx +68 -0
  297. package/src/components/{Dialogs → Dialog}/AlertDialog.tsx +123 -82
  298. package/src/components/Dialog/Dialog.stories.tsx +177 -0
  299. package/src/components/Dialog/Dialog.tsx +285 -0
  300. package/src/components/ElevationProvider/ElevationProvider.tsx +1 -1
  301. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +45 -0
  302. package/src/components/ErrorFallback/ErrorFallback.tsx +70 -0
  303. package/src/components/ErrorFallback/ErrorStack.tsx +114 -0
  304. package/src/components/ErrorFallback/ThrowError.tsx +37 -0
  305. package/src/components/ErrorFallback/index.ts +9 -0
  306. package/src/components/Focus/AUDIT.md +43 -0
  307. package/src/components/Focus/Focus.stories.tsx +230 -0
  308. package/src/components/Focus/Focus.tsx +201 -0
  309. package/src/components/Focus/index.ts +5 -0
  310. package/src/components/Icon/Icon.stories.tsx +45 -15
  311. package/src/components/Icon/Icon.tsx +15 -4
  312. package/src/components/Image/Image.stories.tsx +86 -0
  313. package/src/components/Image/Image.tsx +246 -0
  314. package/src/components/Image/index.ts +5 -0
  315. package/src/components/Input/Input.stories.tsx +21 -41
  316. package/src/components/Input/Input.tsx +38 -74
  317. package/src/components/Link/Link.stories.tsx +2 -3
  318. package/src/components/Link/Link.tsx +2 -2
  319. package/src/components/{Lists → List}/List.stories.tsx +31 -35
  320. package/src/components/{Lists → List}/List.tsx +17 -21
  321. package/src/components/{Lists → List}/ListDropIndicator.tsx +7 -8
  322. package/src/components/{Lists → List}/Tree.stories.tsx +6 -7
  323. package/src/components/{Lists → List}/Tree.tsx +0 -1
  324. package/src/components/{Lists → List}/TreeDropIndicator.tsx +6 -6
  325. package/src/components/{Lists → List}/Treegrid.stories.tsx +29 -30
  326. package/src/components/{Lists → List}/Treegrid.tsx +23 -28
  327. package/src/components/Main/Main.stories.tsx +41 -24
  328. package/src/components/Main/Main.tsx +150 -94
  329. package/src/components/MediaPlayer/MediaPlayer.stories.tsx +50 -0
  330. package/src/components/MediaPlayer/MediaPlayer.tsx +153 -0
  331. package/src/components/MediaPlayer/index.ts +5 -0
  332. package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +2 -3
  333. package/src/components/{Menus → Menu}/ContextMenu.tsx +9 -33
  334. package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +3 -4
  335. package/src/components/{Menus → Menu}/DropdownMenu.tsx +137 -110
  336. package/src/components/Message/Message.stories.tsx +27 -13
  337. package/src/components/Message/Message.tsx +59 -33
  338. package/src/components/Popover/Popover.stories.tsx +8 -9
  339. package/src/components/Popover/Popover.tsx +114 -92
  340. package/src/components/ScrollArea/ScrollArea.stories.tsx +221 -36
  341. package/src/components/ScrollArea/ScrollArea.tsx +97 -79
  342. package/src/components/ScrollArea/index.ts +1 -1
  343. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +91 -0
  344. package/src/components/ScrollContainer/ScrollContainer.tsx +345 -0
  345. package/src/components/ScrollContainer/index.ts +5 -0
  346. package/src/components/Select/Select.stories.tsx +8 -9
  347. package/src/components/Select/Select.tsx +11 -27
  348. package/src/components/Separator/Separator.tsx +5 -8
  349. package/src/components/Skeleton/Skeleton.stories.tsx +51 -0
  350. package/src/components/Skeleton/Skeleton.tsx +26 -0
  351. package/src/components/Skeleton/index.ts +5 -0
  352. package/src/components/Splitter/Splitter.stories.tsx +83 -0
  353. package/src/components/Splitter/Splitter.tsx +127 -0
  354. package/src/components/Splitter/index.ts +5 -0
  355. package/src/components/Status/Status.stories.tsx +21 -18
  356. package/src/components/Status/Status.tsx +10 -7
  357. package/src/components/Tag/Tag.stories.tsx +6 -12
  358. package/src/components/Tag/Tag.tsx +3 -8
  359. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +31 -0
  360. package/src/components/ThemeProvider/ThemeProvider.tsx +10 -10
  361. package/src/components/ThemeProvider/TranslationsProvider.tsx +1 -16
  362. package/src/components/ThemeProvider/index.ts +3 -3
  363. package/src/components/Toast/Toast.stories.tsx +3 -4
  364. package/src/components/Toast/Toast.tsx +22 -41
  365. package/src/components/Toolbar/Toolbar.stories.tsx +4 -7
  366. package/src/components/Toolbar/Toolbar.tsx +189 -25
  367. package/src/components/Tooltip/Tooltip.stories.tsx +21 -20
  368. package/src/components/Tooltip/Tooltip.tsx +40 -38
  369. package/src/components/index.ts +17 -9
  370. package/src/exemplars/generics.stories.tsx +41 -0
  371. package/src/exemplars/slot.stories.tsx +115 -0
  372. package/src/exemplars/tabster.stories.tsx +127 -0
  373. package/src/exemplars/virtualizer.stories.tsx +136 -0
  374. package/src/hooks/index.ts +1 -0
  375. package/src/hooks/useDensityContext.ts +3 -3
  376. package/src/hooks/useElevationContext.ts +1 -1
  377. package/src/index.ts +2 -1
  378. package/src/playground/Controls.stories.tsx +3 -10
  379. package/src/playground/Custom.stories.tsx +13 -18
  380. package/src/playground/Typography.stories.tsx +3 -3
  381. package/src/primitives/Column/AUDIT.md +148 -0
  382. package/src/primitives/Column/Column.stories.tsx +181 -0
  383. package/src/primitives/Column/Column.tsx +165 -0
  384. package/src/primitives/Column/index.ts +5 -0
  385. package/src/primitives/Container/Container.stories.tsx +29 -0
  386. package/src/primitives/Container/Container.tsx +19 -0
  387. package/src/primitives/Container/index.ts +5 -0
  388. package/src/primitives/Flex/Flex.stories.tsx +57 -0
  389. package/src/primitives/Flex/Flex.tsx +27 -0
  390. package/src/primitives/Flex/index.ts +5 -0
  391. package/src/primitives/Grid/Grid.stories.tsx +56 -0
  392. package/src/primitives/Grid/Grid.tsx +30 -0
  393. package/src/primitives/Grid/index.ts +5 -0
  394. package/src/primitives/Panel/Panel.stories.tsx +68 -0
  395. package/src/primitives/Panel/Panel.tsx +120 -0
  396. package/src/primitives/Panel/index.ts +5 -0
  397. package/src/primitives/index.ts +9 -0
  398. package/src/testing/Loading.tsx +47 -0
  399. package/src/testing/decorators/index.ts +1 -1
  400. package/src/testing/decorators/withLayout.tsx +32 -21
  401. package/src/testing/decorators/withLayoutVariants.tsx +48 -0
  402. package/src/testing/decorators/withTheme.tsx +26 -20
  403. package/src/testing/index.ts +2 -0
  404. package/src/translations.ts +24 -0
  405. package/src/util/index.ts +2 -2
  406. package/src/util/usePx.ts +1 -0
  407. package/dist/lib/browser/chunk-HUZZ56DW.mjs +0 -4509
  408. package/dist/lib/browser/chunk-HUZZ56DW.mjs.map +0 -7
  409. package/dist/lib/node-esm/chunk-OJLL6E2Z.mjs +0 -4511
  410. package/dist/lib/node-esm/chunk-OJLL6E2Z.mjs.map +0 -7
  411. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +0 -15
  412. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +0 -1
  413. package/dist/types/src/components/AnchoredOverflow/index.d.ts +0 -2
  414. package/dist/types/src/components/AnchoredOverflow/index.d.ts.map +0 -1
  415. package/dist/types/src/components/Buttons/Button.d.ts.map +0 -1
  416. package/dist/types/src/components/Buttons/Button.stories.d.ts.map +0 -1
  417. package/dist/types/src/components/Buttons/IconButton.d.ts.map +0 -1
  418. package/dist/types/src/components/Buttons/IconButton.stories.d.ts.map +0 -1
  419. package/dist/types/src/components/Buttons/Toggle.d.ts.map +0 -1
  420. package/dist/types/src/components/Buttons/Toggle.stories.d.ts +0 -13
  421. package/dist/types/src/components/Buttons/Toggle.stories.d.ts.map +0 -1
  422. package/dist/types/src/components/Buttons/ToggleGroup.d.ts +0 -27
  423. package/dist/types/src/components/Buttons/ToggleGroup.d.ts.map +0 -1
  424. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +0 -1
  425. package/dist/types/src/components/Buttons/index.d.ts.map +0 -1
  426. package/dist/types/src/components/Dialogs/AlertDialog.d.ts +0 -31
  427. package/dist/types/src/components/Dialogs/AlertDialog.d.ts.map +0 -1
  428. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +0 -1
  429. package/dist/types/src/components/Dialogs/Dialog.d.ts +0 -31
  430. package/dist/types/src/components/Dialogs/Dialog.d.ts.map +0 -1
  431. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts +0 -25
  432. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +0 -1
  433. package/dist/types/src/components/Dialogs/index.d.ts.map +0 -1
  434. package/dist/types/src/components/Lists/List.d.ts.map +0 -1
  435. package/dist/types/src/components/Lists/List.stories.d.ts.map +0 -1
  436. package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +0 -1
  437. package/dist/types/src/components/Lists/Tree.d.ts.map +0 -1
  438. package/dist/types/src/components/Lists/Tree.stories.d.ts.map +0 -1
  439. package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +0 -1
  440. package/dist/types/src/components/Lists/Treegrid.d.ts.map +0 -1
  441. package/dist/types/src/components/Lists/Treegrid.stories.d.ts.map +0 -1
  442. package/dist/types/src/components/Lists/index.d.ts.map +0 -1
  443. package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
  444. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +0 -1
  445. package/dist/types/src/components/Menus/DropdownMenu.d.ts +0 -113
  446. package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
  447. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
  448. package/dist/types/src/components/Menus/index.d.ts.map +0 -1
  449. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts +0 -12
  450. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts.map +0 -1
  451. package/dist/types/src/util/ThemedClassName.d.ts +0 -5
  452. package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
  453. package/dist/types/src/util/domino.d.ts +0 -18
  454. package/dist/types/src/util/domino.d.ts.map +0 -1
  455. package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +0 -59
  456. package/src/components/AnchoredOverflow/index.ts +0 -5
  457. package/src/components/Dialogs/AlertDialog.stories.tsx +0 -69
  458. package/src/components/Dialogs/Dialog.stories.tsx +0 -67
  459. package/src/components/Dialogs/Dialog.tsx +0 -159
  460. package/src/testing/decorators/withSurfaceVariantsLayout.tsx +0 -51
  461. package/src/util/ThemedClassName.ts +0 -7
  462. package/src/util/domino.ts +0 -53
  463. /package/dist/types/src/components/{Buttons → Button}/index.d.ts +0 -0
  464. /package/dist/types/src/components/{Dialogs → Dialog}/AlertDialog.stories.d.ts +0 -0
  465. /package/dist/types/src/components/{Dialogs → Dialog}/index.d.ts +0 -0
  466. /package/dist/types/src/components/{Lists → List}/ListDropIndicator.d.ts +0 -0
  467. /package/dist/types/src/components/{Lists → List}/Tree.stories.d.ts +0 -0
  468. /package/dist/types/src/components/{Lists → List}/TreeDropIndicator.d.ts +0 -0
  469. /package/dist/types/src/components/{Lists → List}/Treegrid.stories.d.ts +0 -0
  470. /package/dist/types/src/components/{Lists → List}/index.d.ts +0 -0
  471. /package/dist/types/src/components/{Menus → Menu}/ContextMenu.stories.d.ts +0 -0
  472. /package/dist/types/src/components/{Menus → Menu}/index.d.ts +0 -0
  473. /package/src/components/{Buttons → Button}/index.ts +0 -0
  474. /package/src/components/{Dialogs → Dialog}/index.ts +0 -0
  475. /package/src/components/{Lists → List}/index.ts +0 -0
  476. /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
- import React, { Fragment, forwardRef } from 'react';
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,39 +25,59 @@ 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<
26
- ToolbarPrimitive.ToolbarProps & {
27
- textBlockWidth?: boolean;
28
- layoutManaged?: boolean;
29
- disabled?: boolean;
30
- }
31
- >;
33
+ //
34
+ // Root
35
+ //
36
+
37
+ type ToolbarRootProps = ToolbarPrimitive.ToolbarProps & ToolbarStyleProps;
32
38
 
33
- const ToolbarRoot = forwardRef<HTMLDivElement, ToolbarRootProps>(
34
- ({ classNames, children, layoutManaged, textBlockWidth: textBlockWidthParam, disabled, ...props }, forwardedRef) => {
39
+ const ToolbarRoot = composable<HTMLDivElement, ToolbarRootProps>(
40
+ ({ children, density, disabled, layoutManaged, orientation, ...props }, forwardedRef) => {
41
+ const { className, role, ...rest } = composableProps(props);
35
42
  const { tx } = useThemeContext();
36
- const InnerRoot = textBlockWidthParam ? 'div' : Fragment;
37
- const innerRootProps = textBlockWidthParam
38
- ? { role: 'none', className: tx('toolbar.inner', 'toolbar', { layoutManaged }, classNames) }
39
- : {};
40
43
 
41
44
  return (
42
45
  <ToolbarPrimitive.Root
43
- {...props}
44
- data-arrow-keys={props.orientation === 'vertical' ? 'up down' : 'left right'}
45
- className={tx('toolbar.root', 'toolbar', { layoutManaged, disabled }, 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)}
46
52
  ref={forwardedRef}
47
53
  >
48
- <InnerRoot {...innerRootProps}>{children}</InnerRoot>
54
+ {children}
49
55
  </ToolbarPrimitive.Root>
50
56
  );
51
57
  },
52
58
  );
53
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
+
54
81
  type ToolbarButtonProps = ButtonProps;
55
82
 
56
83
  const ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>((props, forwardedRef) => {
@@ -61,12 +88,16 @@ const ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>((props,
61
88
  );
62
89
  });
63
90
 
91
+ //
92
+ // IconButton
93
+ //
94
+
64
95
  type ToolbarIconButtonProps = IconButtonProps;
65
96
 
66
97
  const ToolbarIconButton = forwardRef<HTMLButtonElement, ToolbarIconButtonProps>((props, forwardedRef) => {
67
98
  return (
68
99
  <ToolbarPrimitive.Button asChild>
69
- <IconButton {...props} ref={forwardedRef} />
100
+ <IconButton {...props} noTooltip ref={forwardedRef} />
70
101
  </ToolbarPrimitive.Button>
71
102
  );
72
103
  });
@@ -81,6 +112,10 @@ const ToolbarToggle = forwardRef<HTMLButtonElement, ToolbarToggleProps>((props,
81
112
  );
82
113
  });
83
114
 
115
+ //
116
+ // Link
117
+ //
118
+
84
119
  type ToolbarLinkProps = LinkProps;
85
120
 
86
121
  const ToolbarLink = forwardRef<HTMLAnchorElement, ToolbarLinkProps>((props, forwardedRef) => {
@@ -97,6 +132,10 @@ type ToolbarToggleGroupProps = (
97
132
  ) &
98
133
  ButtonGroupProps;
99
134
 
135
+ //
136
+ // ToggleGroup
137
+ //
138
+
100
139
  const ToolbarToggleGroup = forwardRef<HTMLDivElement, ToolbarToggleGroupProps>(
101
140
  ({ classNames, children, elevation, ...props }, forwardedRef) => {
102
141
  return (
@@ -122,22 +161,38 @@ const ToolbarToggleGroupItem = forwardRef<HTMLButtonElement, ToolbarToggleGroupI
122
161
  type ToolbarToggleGroupIconItemProps = Omit<ToggleGroupItemPrimitiveProps, 'className'> & IconButtonProps;
123
162
 
124
163
  const ToolbarToggleGroupIconItem = forwardRef<HTMLButtonElement, ToolbarToggleGroupIconItemProps>(
125
- ({ variant, density, elevation, classNames, icon, label, iconOnly, ...props }, forwardedRef) => {
164
+ ({ variant, density, elevation, classNames, icon, label, iconOnly, iconClassNames, ...props }, forwardedRef) => {
126
165
  return (
127
166
  <ToolbarPrimitive.ToolbarToggleItem {...props} asChild>
128
- <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
+ iconClassNames,
177
+ }}
178
+ ref={forwardedRef}
179
+ />
129
180
  </ToolbarPrimitive.ToolbarToggleItem>
130
181
  );
131
182
  },
132
183
  );
133
184
 
185
+ //
186
+ // Separator
187
+ //
188
+
134
189
  type ToolbarSeparatorProps = SeparatorProps & { variant?: 'gap' | 'line' };
135
190
 
136
191
  const ToolbarSeparator = forwardRef<HTMLDivElement, ToolbarSeparatorProps>(
137
- ({ variant = 'line', ...props }, forwardedRef) => {
192
+ ({ variant = 'gap', ...props }, forwardedRef) => {
138
193
  return variant === 'line' ? (
139
194
  <ToolbarPrimitive.Separator asChild>
140
- <Separator {...props} ref={forwardedRef} />
195
+ <Separator orientation='vertical' {...props} ref={forwardedRef} />
141
196
  </ToolbarPrimitive.Separator>
142
197
  ) : (
143
198
  <ToolbarPrimitive.Separator className='grow' ref={forwardedRef} />
@@ -145,8 +200,109 @@ const ToolbarSeparator = forwardRef<HTMLDivElement, ToolbarSeparatorProps>(
145
200
  },
146
201
  );
147
202
 
203
+ //
204
+ // DragHandle
205
+ //
206
+
207
+ type ToolbarDragHandleProps = { testId?: string; label?: string };
208
+
209
+ const ToolbarDragHandle = forwardRef<HTMLButtonElement, ToolbarDragHandleProps>(
210
+ ({ testId = 'drag-handle', label }, forwardedRef) => {
211
+ const { t } = useTranslation(translationKey);
212
+ return (
213
+ <ToolbarIconButton
214
+ data-testid={testId}
215
+ tabIndex={-1}
216
+ noTooltip
217
+ iconOnly
218
+ icon='ph--dots-six-vertical--regular'
219
+ variant='ghost'
220
+ label={label ?? t('toolbar-drag-handle.label')}
221
+ classNames='dx-focus-ring-none cursor-pointer'
222
+ disabled={!forwardedRef}
223
+ ref={forwardedRef}
224
+ />
225
+ );
226
+ },
227
+ );
228
+
229
+ //
230
+ // CloseIconButton
231
+ //
232
+
233
+ type ToolbarCloseIconButtonProps = { onClick?: () => void; label?: string };
234
+
235
+ const ToolbarCloseIconButton = forwardRef<HTMLButtonElement, ToolbarCloseIconButtonProps>(
236
+ ({ onClick, label }, forwardedRef) => {
237
+ const { t } = useTranslation(translationKey);
238
+
239
+ return (
240
+ <ToolbarIconButton
241
+ iconOnly
242
+ icon='ph--x--regular'
243
+ variant='ghost'
244
+ label={label ?? t('toolbar-close.label')}
245
+ classNames='cursor-pointer'
246
+ onClick={onClick}
247
+ ref={forwardedRef}
248
+ />
249
+ );
250
+ },
251
+ );
252
+
253
+ //
254
+ // Menu
255
+ //
256
+
257
+ type ToolbarMenuItem<T extends any | void = void> = {
258
+ label: string;
259
+ onClick: (context: T) => void;
260
+ };
261
+
262
+ type ToolbarMenuProps<T extends any | void = void> = {
263
+ context?: T;
264
+ items?: ToolbarMenuItem<T>[];
265
+ };
266
+
267
+ // TODO(burdon): Make slottable.
268
+ const ToolbarMenu = <T extends any | void = void>({ context, items }: ToolbarMenuProps<T>) => {
269
+ const { t } = useTranslation(translationKey);
270
+
271
+ return (
272
+ <DropdownMenu.Root>
273
+ <DropdownMenu.Trigger disabled={!items?.length} asChild>
274
+ <ToolbarIconButton
275
+ iconOnly
276
+ variant='ghost'
277
+ icon='ph--dots-three-vertical--regular'
278
+ label={t('toolbar-menu.label')}
279
+ />
280
+ </DropdownMenu.Trigger>
281
+ {(items?.length ?? 0) > 0 && (
282
+ <DropdownMenu.Portal>
283
+ <DropdownMenu.Content>
284
+ <DropdownMenu.Viewport>
285
+ {items?.map(({ label, onClick: onSelect }, index) => (
286
+ <DropdownMenu.Item key={index} onSelect={() => onSelect(context as T)}>
287
+ {label}
288
+ </DropdownMenu.Item>
289
+ ))}
290
+ </DropdownMenu.Viewport>
291
+ <DropdownMenu.Arrow />
292
+ </DropdownMenu.Content>
293
+ </DropdownMenu.Portal>
294
+ )}
295
+ </DropdownMenu.Root>
296
+ );
297
+ };
298
+
299
+ //
300
+ // Toolbar
301
+ //
302
+
148
303
  export const Toolbar = {
149
304
  Root: ToolbarRoot,
305
+ Text: ToolbarText,
150
306
  Button: ToolbarButton,
151
307
  IconButton: ToolbarIconButton,
152
308
  Link: ToolbarLink,
@@ -155,10 +311,14 @@ export const Toolbar = {
155
311
  ToggleGroupItem: ToolbarToggleGroupItem,
156
312
  ToggleGroupIconItem: ToolbarToggleGroupIconItem,
157
313
  Separator: ToolbarSeparator,
314
+ DragHandle: ToolbarDragHandle,
315
+ CloseIconButton: ToolbarCloseIconButton,
316
+ Menu: ToolbarMenu,
158
317
  };
159
318
 
160
319
  export type {
161
320
  ToolbarRootProps,
321
+ ToolbarTextProps,
162
322
  ToolbarButtonProps,
163
323
  ToolbarIconButtonProps,
164
324
  ToolbarLinkProps,
@@ -167,4 +327,8 @@ export type {
167
327
  ToolbarToggleGroupItemProps,
168
328
  ToolbarToggleGroupIconItemProps,
169
329
  ToolbarSeparatorProps,
330
+ ToolbarDragHandleProps,
331
+ ToolbarCloseIconButtonProps,
332
+ ToolbarMenuItem,
333
+ ToolbarMenuProps,
170
334
  };
@@ -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 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,37 @@
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';
13
+ export * from './Carousel';
9
14
  export * from './Clipboard';
10
- export * from './Dialogs';
15
+ export * from './Dialog';
16
+ export * from './ErrorFallback';
17
+ export * from './Focus';
11
18
  export * from './Icon';
19
+ export * from './Image';
12
20
  export * from './Input';
13
21
  export * from './Link';
14
- export * from './Lists';
22
+ export * from './List';
15
23
  export * from './Main';
16
- export * from './Menus';
24
+ export * from './MediaPlayer';
25
+ export * from './Menu';
17
26
  export * from './Message';
18
27
  export * from './Popover';
19
28
  export * from './Status';
20
29
  export * from './ScrollArea';
30
+ export * from './ScrollContainer';
21
31
  export * from './Select';
22
32
  export * from './Separator';
33
+ export * from './Skeleton';
34
+ export * from './Splitter';
23
35
  export * from './Tag';
24
36
  export * from './Toast';
25
37
  export * from './Toolbar';
26
38
  export * from './Tooltip';
27
-
28
- export * from './DensityProvider';
29
- export * from './ElevationProvider';
30
- export * from './ThemeProvider';