@dxos/react-ui 0.8.4-main.f9ba587 → 0.8.4-main.fcfe5033a5

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 (475) hide show
  1. package/dist/lib/browser/chunk-OCVRIJCH.mjs +848 -0
  2. package/dist/lib/browser/chunk-OCVRIJCH.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +4115 -61
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing/index.mjs +112 -61
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/chunk-QUD5P3RU.mjs +850 -0
  9. package/dist/lib/node-esm/chunk-QUD5P3RU.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +4115 -61
  11. package/dist/lib/node-esm/index.mjs.map +4 -4
  12. package/dist/lib/node-esm/meta.json +1 -1
  13. package/dist/lib/node-esm/testing/index.mjs +112 -61
  14. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  15. package/dist/types/src/components/Avatars/Avatar.d.ts +2 -2
  16. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  17. package/dist/types/src/components/Avatars/Avatar.stories.d.ts +5 -31
  18. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  19. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts +5 -11
  20. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  21. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +1 -1
  22. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  23. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts +8 -20
  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 +4 -4
  26. package/dist/types/src/components/Button/Button.d.ts.map +1 -0
  27. package/dist/types/src/components/Button/Button.stories.d.ts +17 -0
  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 +4 -4
  30. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -0
  31. package/dist/types/src/components/Button/IconButton.stories.d.ts +16 -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/Button/ToggleGroup.stories.d.ts +27 -0
  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 +120 -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 +11 -0
  58. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -0
  59. package/dist/types/src/components/Dialog/Dialog.d.ts +64 -0
  60. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -0
  61. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +25 -0
  62. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -0
  63. package/dist/types/src/components/Dialog/index.d.ts.map +1 -0
  64. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
  65. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  66. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts +11 -0
  67. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -0
  68. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts +7 -0
  69. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -0
  70. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +19 -0
  71. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -0
  72. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts +9 -0
  73. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -0
  74. package/dist/types/src/components/ErrorFallback/index.d.ts +5 -0
  75. package/dist/types/src/components/ErrorFallback/index.d.ts.map +1 -0
  76. package/dist/types/src/components/Focus/Focus.d.ts +36 -0
  77. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -0
  78. package/dist/types/src/components/Focus/Focus.stories.d.ts +9 -0
  79. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -0
  80. package/dist/types/src/components/Focus/index.d.ts +2 -0
  81. package/dist/types/src/components/Focus/index.d.ts.map +1 -0
  82. package/dist/types/src/components/Icon/Icon.d.ts +5 -2
  83. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  84. package/dist/types/src/components/Icon/Icon.stories.d.ts +25 -0
  85. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -0
  86. package/dist/types/src/components/Image/Image.d.ts +14 -0
  87. package/dist/types/src/components/Image/Image.d.ts.map +1 -0
  88. package/dist/types/src/components/Image/Image.stories.d.ts +33 -0
  89. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -0
  90. package/dist/types/src/components/Image/index.d.ts +2 -0
  91. package/dist/types/src/components/Image/index.d.ts.map +1 -0
  92. package/dist/types/src/components/Input/Input.d.ts +8 -10
  93. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  94. package/dist/types/src/components/Input/Input.stories.d.ts +17 -18
  95. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  96. package/dist/types/src/components/Link/Link.stories.d.ts +8 -8
  97. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  98. package/dist/types/src/components/{Lists → List}/List.d.ts +8 -6
  99. package/dist/types/src/components/List/List.d.ts.map +1 -0
  100. package/dist/types/src/components/List/List.stories.d.ts +16 -0
  101. package/dist/types/src/components/List/List.stories.d.ts.map +1 -0
  102. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -0
  103. package/dist/types/src/components/{Lists → List}/Tree.d.ts +1 -1
  104. package/dist/types/src/components/List/Tree.d.ts.map +1 -0
  105. package/dist/types/src/components/List/Tree.stories.d.ts +15 -0
  106. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -0
  107. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -0
  108. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts +6 -10
  109. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -0
  110. package/dist/types/src/components/List/Treegrid.stories.d.ts +12 -0
  111. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -0
  112. package/dist/types/src/components/List/index.d.ts.map +1 -0
  113. package/dist/types/src/components/Main/Main.d.ts +18 -28
  114. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  115. package/dist/types/src/components/Main/Main.stories.d.ts +6 -10
  116. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  117. package/dist/types/src/components/{Menus → Menu}/ContextMenu.d.ts +6 -6
  118. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -0
  119. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts +12 -0
  120. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -0
  121. package/dist/types/src/components/Menu/DropdownMenu.d.ts +113 -0
  122. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
  123. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +28 -0
  124. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
  125. package/dist/types/src/components/Menu/index.d.ts.map +1 -0
  126. package/dist/types/src/components/Message/Message.d.ts +1 -1
  127. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  128. package/dist/types/src/components/Message/Message.stories.d.ts +12 -22
  129. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  130. package/dist/types/src/components/Popover/Popover.d.ts +34 -25
  131. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  132. package/dist/types/src/components/Popover/Popover.stories.d.ts +6 -34
  133. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  134. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +27 -27
  135. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  136. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +50 -27
  137. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  138. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +60 -0
  139. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -0
  140. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +23 -0
  141. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -0
  142. package/dist/types/src/components/ScrollContainer/index.d.ts +2 -0
  143. package/dist/types/src/components/ScrollContainer/index.d.ts.map +1 -0
  144. package/dist/types/src/components/Select/Select.d.ts +10 -10
  145. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  146. package/dist/types/src/components/Select/Select.stories.d.ts +6 -11
  147. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  148. package/dist/types/src/components/Separator/Separator.d.ts +4 -4
  149. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  150. package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
  151. package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  152. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
  153. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  154. package/dist/types/src/components/Skeleton/index.d.ts +2 -0
  155. package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
  156. package/dist/types/src/components/Splitter/Splitter.d.ts +34 -0
  157. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
  158. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
  159. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
  160. package/dist/types/src/components/Splitter/index.d.ts +2 -0
  161. package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
  162. package/dist/types/src/components/Status/Status.d.ts +3 -4
  163. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  164. package/dist/types/src/components/Status/Status.stories.d.ts +6 -10
  165. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  166. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  167. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  168. package/dist/types/src/components/Tag/Tag.stories.d.ts +8 -13
  169. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  170. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +4 -4
  171. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  172. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts +12 -0
  173. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  174. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +1 -8
  175. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  176. package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
  177. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  178. package/dist/types/src/components/Toast/Toast.d.ts +19 -19
  179. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  180. package/dist/types/src/components/Toast/Toast.stories.d.ts +6 -44
  181. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  182. package/dist/types/src/components/Toolbar/Toolbar.d.ts +40 -22
  183. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  184. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +6 -50
  185. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  186. package/dist/types/src/components/Tooltip/Tooltip.d.ts +10 -12
  187. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  188. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +10 -63
  189. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  190. package/dist/types/src/components/index.d.ts +14 -8
  191. package/dist/types/src/components/index.d.ts.map +1 -1
  192. package/dist/types/src/exemplars/generics.stories.d.ts +19 -0
  193. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
  194. package/dist/types/src/exemplars/slot.stories.d.ts +15 -0
  195. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
  196. package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
  197. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
  198. package/dist/types/src/exemplars/virtualizer.stories.d.ts +11 -0
  199. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -0
  200. package/dist/types/src/hooks/index.d.ts +1 -0
  201. package/dist/types/src/hooks/index.d.ts.map +1 -1
  202. package/dist/types/src/hooks/useDensityContext.d.ts +2 -2
  203. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  204. package/dist/types/src/hooks/useElevationContext.d.ts +1 -1
  205. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  206. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  207. package/dist/types/src/hooks/useVisualViewport.d.ts +2 -2
  208. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  209. package/dist/types/src/index.d.ts +2 -1
  210. package/dist/types/src/index.d.ts.map +1 -1
  211. package/dist/types/src/playground/Controls.stories.d.ts +5 -9
  212. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  213. package/dist/types/src/playground/Custom.stories.d.ts +12 -4
  214. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  215. package/dist/types/src/playground/Typography.stories.d.ts +5 -11
  216. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  217. package/dist/types/src/primitives/Column/Column.d.ts +33 -0
  218. package/dist/types/src/primitives/Column/Column.d.ts.map +1 -0
  219. package/dist/types/src/primitives/Column/Column.stories.d.ts +25 -0
  220. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -0
  221. package/dist/types/src/primitives/Column/index.d.ts +2 -0
  222. package/dist/types/src/primitives/Column/index.d.ts.map +1 -0
  223. package/dist/types/src/primitives/Container/Container.d.ts +7 -0
  224. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
  225. package/dist/types/src/primitives/Container/Container.stories.d.ts +6 -0
  226. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
  227. package/dist/types/src/primitives/Container/index.d.ts +2 -0
  228. package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
  229. package/dist/types/src/primitives/Flex/Flex.d.ts +11 -0
  230. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
  231. package/dist/types/src/primitives/Flex/Flex.stories.d.ts +8 -0
  232. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -0
  233. package/dist/types/src/primitives/Flex/index.d.ts +2 -0
  234. package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
  235. package/dist/types/src/primitives/Grid/Grid.d.ts +10 -0
  236. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -0
  237. package/dist/types/src/primitives/Grid/Grid.stories.d.ts +8 -0
  238. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -0
  239. package/dist/types/src/primitives/Grid/index.d.ts +2 -0
  240. package/dist/types/src/primitives/Grid/index.d.ts.map +1 -0
  241. package/dist/types/src/primitives/Panel/Panel.d.ts +35 -0
  242. package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -0
  243. package/dist/types/src/primitives/Panel/Panel.stories.d.ts +6 -0
  244. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -0
  245. package/dist/types/src/primitives/Panel/index.d.ts +2 -0
  246. package/dist/types/src/primitives/Panel/index.d.ts.map +1 -0
  247. package/dist/types/src/primitives/index.d.ts +6 -0
  248. package/dist/types/src/primitives/index.d.ts.map +1 -0
  249. package/dist/types/src/testing/Loading.d.ts +9 -0
  250. package/dist/types/src/testing/Loading.d.ts.map +1 -0
  251. package/dist/types/src/testing/decorators/index.d.ts +2 -1
  252. package/dist/types/src/testing/decorators/index.d.ts.map +1 -1
  253. package/dist/types/src/testing/decorators/withLayout.d.ts +15 -0
  254. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -0
  255. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +12 -0
  256. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -0
  257. package/dist/types/src/testing/decorators/withTheme.d.ts +5 -1
  258. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  259. package/dist/types/src/testing/index.d.ts +1 -0
  260. package/dist/types/src/testing/index.d.ts.map +1 -1
  261. package/dist/types/src/translations.d.ts +11 -0
  262. package/dist/types/src/translations.d.ts.map +1 -0
  263. package/dist/types/src/util/index.d.ts +2 -1
  264. package/dist/types/src/util/index.d.ts.map +1 -1
  265. package/dist/types/src/util/usePx.d.ts +8 -0
  266. package/dist/types/src/util/usePx.d.ts.map +1 -0
  267. package/dist/types/tsconfig.tsbuildinfo +1 -1
  268. package/package.json +45 -32
  269. package/src/components/Avatars/Avatar.stories.tsx +23 -16
  270. package/src/components/Avatars/Avatar.tsx +10 -18
  271. package/src/components/Avatars/AvatarGroup.stories.tsx +11 -8
  272. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +19 -15
  273. package/src/components/Breadcrumb/Breadcrumb.tsx +14 -40
  274. package/src/components/{Buttons → Button}/Button.stories.tsx +11 -13
  275. package/src/components/{Buttons → Button}/Button.tsx +12 -26
  276. package/src/components/{Buttons → Button}/IconButton.stories.tsx +18 -13
  277. package/src/components/{Buttons → Button}/IconButton.tsx +21 -16
  278. package/src/components/Button/Toggle.stories.tsx +36 -0
  279. package/src/components/{Buttons → Button}/Toggle.tsx +4 -4
  280. package/src/components/{Buttons → Button}/ToggleGroup.stories.tsx +14 -12
  281. package/src/components/Button/ToggleGroup.tsx +50 -0
  282. package/src/components/Card/Card.stories.tsx +151 -0
  283. package/src/components/Card/Card.tsx +493 -0
  284. package/src/components/Card/index.ts +5 -0
  285. package/src/components/Clipboard/ClipboardProvider.tsx +1 -1
  286. package/src/components/Clipboard/CopyButton.tsx +9 -9
  287. package/src/components/DensityProvider/DensityProvider.tsx +2 -2
  288. package/src/components/Dialog/AlertDialog.stories.tsx +68 -0
  289. package/src/components/Dialog/AlertDialog.tsx +213 -0
  290. package/src/components/Dialog/Dialog.stories.tsx +177 -0
  291. package/src/components/Dialog/Dialog.tsx +285 -0
  292. package/src/components/ElevationProvider/ElevationProvider.tsx +2 -2
  293. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +45 -0
  294. package/src/components/ErrorFallback/ErrorFallback.tsx +70 -0
  295. package/src/components/ErrorFallback/ErrorStack.tsx +114 -0
  296. package/src/components/ErrorFallback/ThrowError.tsx +37 -0
  297. package/src/components/ErrorFallback/index.ts +9 -0
  298. package/src/components/Focus/AUDIT.md +43 -0
  299. package/src/components/Focus/Focus.stories.tsx +230 -0
  300. package/src/components/Focus/Focus.tsx +201 -0
  301. package/src/components/Focus/index.ts +5 -0
  302. package/src/components/Icon/Icon.stories.tsx +143 -0
  303. package/src/components/Icon/Icon.tsx +6 -2
  304. package/src/components/Image/Image.stories.tsx +86 -0
  305. package/src/components/Image/Image.tsx +223 -0
  306. package/src/components/Image/index.ts +5 -0
  307. package/src/components/Input/Input.stories.tsx +27 -49
  308. package/src/components/Input/Input.tsx +51 -87
  309. package/src/components/Link/Link.stories.tsx +11 -8
  310. package/src/components/Link/Link.tsx +2 -2
  311. package/src/components/{Lists → List}/List.stories.tsx +45 -47
  312. package/src/components/{Lists → List}/List.tsx +30 -35
  313. package/src/components/{Lists → List}/ListDropIndicator.tsx +7 -7
  314. package/src/components/{Lists → List}/Tree.stories.tsx +15 -13
  315. package/src/components/{Lists → List}/Tree.tsx +3 -3
  316. package/src/components/{Lists → List}/TreeDropIndicator.tsx +7 -7
  317. package/src/components/{Lists → List}/Treegrid.stories.tsx +39 -34
  318. package/src/components/List/Treegrid.tsx +188 -0
  319. package/src/components/Main/Main.stories.tsx +52 -27
  320. package/src/components/Main/Main.tsx +176 -105
  321. package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +12 -10
  322. package/src/components/{Menus → Menu}/ContextMenu.tsx +10 -33
  323. package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +13 -11
  324. package/src/components/{Menus → Menu}/DropdownMenu.tsx +157 -120
  325. package/src/components/Message/Message.stories.tsx +36 -18
  326. package/src/components/Message/Message.tsx +43 -34
  327. package/src/components/Popover/Popover.stories.tsx +18 -16
  328. package/src/components/Popover/Popover.tsx +124 -102
  329. package/src/components/ScrollArea/ScrollArea.stories.tsx +224 -32
  330. package/src/components/ScrollArea/ScrollArea.tsx +97 -79
  331. package/src/components/ScrollArea/index.ts +1 -1
  332. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +91 -0
  333. package/src/components/ScrollContainer/ScrollContainer.tsx +347 -0
  334. package/src/components/ScrollContainer/index.ts +5 -0
  335. package/src/components/Select/Select.stories.tsx +19 -17
  336. package/src/components/Select/Select.tsx +16 -32
  337. package/src/components/Separator/Separator.tsx +5 -8
  338. package/src/components/Skeleton/Skeleton.stories.tsx +51 -0
  339. package/src/components/Skeleton/Skeleton.tsx +26 -0
  340. package/src/components/Skeleton/index.ts +5 -0
  341. package/src/components/Splitter/Splitter.stories.tsx +83 -0
  342. package/src/components/Splitter/Splitter.tsx +127 -0
  343. package/src/components/Splitter/index.ts +5 -0
  344. package/src/components/Status/Status.stories.tsx +29 -23
  345. package/src/components/Status/Status.tsx +10 -7
  346. package/src/components/Tag/Tag.stories.tsx +16 -13
  347. package/src/components/Tag/Tag.tsx +3 -8
  348. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +31 -0
  349. package/src/components/ThemeProvider/ThemeProvider.tsx +12 -11
  350. package/src/components/ThemeProvider/TranslationsProvider.tsx +3 -18
  351. package/src/components/ThemeProvider/index.ts +3 -3
  352. package/src/components/Toast/Toast.stories.tsx +13 -11
  353. package/src/components/Toast/Toast.tsx +23 -42
  354. package/src/components/Toolbar/Toolbar.stories.tsx +22 -21
  355. package/src/components/Toolbar/Toolbar.tsx +187 -13
  356. package/src/components/Tooltip/Tooltip.stories.tsx +35 -30
  357. package/src/components/Tooltip/Tooltip.tsx +44 -41
  358. package/src/components/index.ts +15 -9
  359. package/src/exemplars/generics.stories.tsx +41 -0
  360. package/src/exemplars/slot.stories.tsx +117 -0
  361. package/src/exemplars/tabster.stories.tsx +127 -0
  362. package/src/exemplars/virtualizer.stories.tsx +137 -0
  363. package/src/hooks/index.ts +1 -0
  364. package/src/hooks/useDensityContext.ts +3 -3
  365. package/src/hooks/useElevationContext.ts +1 -1
  366. package/src/hooks/useSafeArea.ts +3 -2
  367. package/src/hooks/useSafeCollisionPadding.ts +1 -1
  368. package/src/hooks/useVisualViewport.ts +4 -4
  369. package/src/index.ts +2 -1
  370. package/src/playground/Controls.stories.tsx +20 -24
  371. package/src/playground/Custom.stories.tsx +20 -34
  372. package/src/playground/Typography.stories.tsx +11 -9
  373. package/src/primitives/Column/AUDIT.md +148 -0
  374. package/src/primitives/Column/Column.stories.tsx +181 -0
  375. package/src/primitives/Column/Column.tsx +165 -0
  376. package/src/primitives/Column/index.ts +5 -0
  377. package/src/primitives/Container/Container.stories.tsx +29 -0
  378. package/src/primitives/Container/Container.tsx +19 -0
  379. package/src/primitives/Container/index.ts +5 -0
  380. package/src/primitives/Flex/Flex.stories.tsx +57 -0
  381. package/src/primitives/Flex/Flex.tsx +27 -0
  382. package/src/primitives/Flex/index.ts +5 -0
  383. package/src/primitives/Grid/Grid.stories.tsx +56 -0
  384. package/src/primitives/Grid/Grid.tsx +30 -0
  385. package/src/primitives/Grid/index.ts +5 -0
  386. package/src/primitives/Panel/Panel.stories.tsx +68 -0
  387. package/src/primitives/Panel/Panel.tsx +120 -0
  388. package/src/primitives/Panel/index.ts +5 -0
  389. package/src/primitives/index.ts +9 -0
  390. package/src/testing/Loading.tsx +47 -0
  391. package/src/testing/decorators/index.ts +2 -1
  392. package/src/testing/decorators/withLayout.tsx +77 -0
  393. package/src/testing/decorators/withLayoutVariants.tsx +48 -0
  394. package/src/testing/decorators/withTheme.tsx +37 -0
  395. package/src/testing/index.ts +2 -0
  396. package/src/translations.ts +19 -0
  397. package/src/util/index.ts +3 -1
  398. package/src/util/usePx.ts +62 -0
  399. package/dist/lib/browser/chunk-T6YPS45E.mjs +0 -4376
  400. package/dist/lib/browser/chunk-T6YPS45E.mjs.map +0 -7
  401. package/dist/lib/node-esm/chunk-TYVQJ4KW.mjs +0 -4378
  402. package/dist/lib/node-esm/chunk-TYVQJ4KW.mjs.map +0 -7
  403. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +0 -15
  404. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +0 -1
  405. package/dist/types/src/components/AnchoredOverflow/index.d.ts +0 -2
  406. package/dist/types/src/components/AnchoredOverflow/index.d.ts.map +0 -1
  407. package/dist/types/src/components/Buttons/Button.d.ts.map +0 -1
  408. package/dist/types/src/components/Buttons/Button.stories.d.ts +0 -12
  409. package/dist/types/src/components/Buttons/Button.stories.d.ts.map +0 -1
  410. package/dist/types/src/components/Buttons/IconButton.d.ts.map +0 -1
  411. package/dist/types/src/components/Buttons/IconButton.stories.d.ts +0 -22
  412. package/dist/types/src/components/Buttons/IconButton.stories.d.ts.map +0 -1
  413. package/dist/types/src/components/Buttons/Toggle.d.ts.map +0 -1
  414. package/dist/types/src/components/Buttons/Toggle.stories.d.ts +0 -19
  415. package/dist/types/src/components/Buttons/Toggle.stories.d.ts.map +0 -1
  416. package/dist/types/src/components/Buttons/ToggleGroup.d.ts +0 -28
  417. package/dist/types/src/components/Buttons/ToggleGroup.d.ts.map +0 -1
  418. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts +0 -39
  419. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +0 -1
  420. package/dist/types/src/components/Buttons/index.d.ts.map +0 -1
  421. package/dist/types/src/components/Dialogs/AlertDialog.d.ts +0 -31
  422. package/dist/types/src/components/Dialogs/AlertDialog.d.ts.map +0 -1
  423. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts +0 -43
  424. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +0 -1
  425. package/dist/types/src/components/Dialogs/Dialog.d.ts +0 -31
  426. package/dist/types/src/components/Dialogs/Dialog.d.ts.map +0 -1
  427. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts +0 -48
  428. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +0 -1
  429. package/dist/types/src/components/Dialogs/index.d.ts.map +0 -1
  430. package/dist/types/src/components/Lists/List.d.ts.map +0 -1
  431. package/dist/types/src/components/Lists/List.stories.d.ts +0 -37
  432. package/dist/types/src/components/Lists/List.stories.d.ts.map +0 -1
  433. package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +0 -1
  434. package/dist/types/src/components/Lists/Tree.d.ts.map +0 -1
  435. package/dist/types/src/components/Lists/Tree.stories.d.ts +0 -41
  436. package/dist/types/src/components/Lists/Tree.stories.d.ts.map +0 -1
  437. package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +0 -1
  438. package/dist/types/src/components/Lists/Treegrid.d.ts.map +0 -1
  439. package/dist/types/src/components/Lists/Treegrid.stories.d.ts +0 -10
  440. package/dist/types/src/components/Lists/Treegrid.stories.d.ts.map +0 -1
  441. package/dist/types/src/components/Lists/index.d.ts.map +0 -1
  442. package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
  443. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts +0 -50
  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 -112
  446. package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
  447. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts +0 -50
  448. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
  449. package/dist/types/src/components/Menus/index.d.ts.map +0 -1
  450. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts +0 -12
  451. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts.map +0 -1
  452. package/dist/types/src/util/ThemedClassName.d.ts +0 -5
  453. package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
  454. package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +0 -59
  455. package/src/components/AnchoredOverflow/index.ts +0 -5
  456. package/src/components/Buttons/Toggle.stories.tsx +0 -33
  457. package/src/components/Buttons/ToggleGroup.tsx +0 -41
  458. package/src/components/Dialogs/AlertDialog.stories.tsx +0 -66
  459. package/src/components/Dialogs/AlertDialog.tsx +0 -172
  460. package/src/components/Dialogs/Dialog.stories.tsx +0 -65
  461. package/src/components/Dialogs/Dialog.tsx +0 -159
  462. package/src/components/Lists/Treegrid.tsx +0 -152
  463. package/src/testing/decorators/withSurfaceVariantsLayout.tsx +0 -51
  464. package/src/testing/decorators/withTheme.ts +0 -22
  465. package/src/util/ThemedClassName.ts +0 -7
  466. /package/dist/types/src/components/{Buttons → Button}/index.d.ts +0 -0
  467. /package/dist/types/src/components/{Dialogs → Dialog}/index.d.ts +0 -0
  468. /package/dist/types/src/components/{Lists → List}/ListDropIndicator.d.ts +0 -0
  469. /package/dist/types/src/components/{Lists → List}/TreeDropIndicator.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}/index.d.ts +0 -0
  472. /package/src/components/{Buttons → Button}/index.ts +0 -0
  473. /package/src/components/{Dialogs → Dialog}/index.ts +0 -0
  474. /package/src/components/{Lists → List}/index.ts +0 -0
  475. /package/src/components/{Menus → Menu}/index.ts +0 -0
@@ -4,49 +4,32 @@
4
4
 
5
5
  import { Primitive } from '@radix-ui/react-primitive';
6
6
  import { Slot } from '@radix-ui/react-slot';
7
- import {
8
- ToastProvider as ToastProviderPrimitive,
9
- type ToastProviderProps as ToastProviderPrimitiveProps,
10
- ToastViewport as ToastViewportPrimitive,
11
- type ToastViewportProps as ToastViewportPrimitiveProps,
12
- Root as ToastRootPrimitive,
13
- type ToastProps as ToastRootPrimitiveProps,
14
- ToastTitle as ToastTitlePrimitive,
15
- type ToastTitleProps as ToastTitlePrimitiveProps,
16
- ToastDescription as ToastDescriptionPrimitive,
17
- type ToastDescriptionProps as ToastDescriptionPrimitiveProps,
18
- ToastAction as ToastActionPrimitive,
19
- type ToastActionProps as ToastActionPrimitiveProps,
20
- ToastClose as ToastClosePrimitive,
21
- type ToastCloseProps as ToastClosePrimitiveProps,
22
- } from '@radix-ui/react-toast';
23
- import React, { type ComponentPropsWithRef, forwardRef, type FunctionComponent } from 'react';
7
+ import * as ToastPrimitive from '@radix-ui/react-toast';
8
+ import React, { type ComponentPropsWithRef, type FunctionComponent, forwardRef } from 'react';
24
9
 
25
10
  import { useThemeContext } from '../../hooks';
26
11
  import { type ThemedClassName } from '../../util';
27
12
  import { ElevationProvider } from '../ElevationProvider';
28
13
 
29
- type ToastProviderProps = ToastProviderPrimitiveProps;
14
+ type ToastProviderProps = ToastPrimitive.ToastProviderProps;
30
15
 
31
- const ToastProvider: FunctionComponent<ToastProviderProps> = ToastProviderPrimitive;
16
+ const ToastProvider: FunctionComponent<ToastProviderProps> = ToastPrimitive.Provider;
32
17
 
33
- type ToastViewportProps = ThemedClassName<ToastViewportPrimitiveProps>;
18
+ type ToastViewportProps = ThemedClassName<ToastPrimitive.ToastViewportProps>;
34
19
 
35
20
  const ToastViewport = forwardRef<HTMLOListElement, ToastViewportProps>(({ classNames, ...props }, forwardedRef) => {
36
21
  const { tx } = useThemeContext();
37
- return (
38
- <ToastViewportPrimitive className={tx('toast.viewport', 'toast-viewport', {}, classNames)} ref={forwardedRef} />
39
- );
22
+ return <ToastPrimitive.Viewport {...props} className={tx('toast.viewport', {}, classNames)} ref={forwardedRef} />;
40
23
  });
41
24
 
42
- type ToastRootProps = ThemedClassName<ToastRootPrimitiveProps>;
25
+ type ToastRootProps = ThemedClassName<ToastPrimitive.ToastProps>;
43
26
 
44
27
  const ToastRoot = forwardRef<HTMLLIElement, ToastRootProps>(({ classNames, children, ...props }, forwardedRef) => {
45
28
  const { tx } = useThemeContext();
46
29
  return (
47
- <ToastRootPrimitive {...props} className={tx('toast.root', 'toast', {}, classNames)} ref={forwardedRef}>
30
+ <ToastPrimitive.Root {...props} className={tx('toast.root', {}, classNames)} ref={forwardedRef}>
48
31
  <ElevationProvider elevation='toast'>{children}</ElevationProvider>
49
- </ToastRootPrimitive>
32
+ </ToastPrimitive.Root>
50
33
  );
51
34
  });
52
35
 
@@ -54,29 +37,27 @@ type ToastBodyProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.div
54
37
 
55
38
  const ToastBody = forwardRef<HTMLDivElement, ToastBodyProps>(({ asChild, classNames, ...props }, forwardedRef) => {
56
39
  const { tx } = useThemeContext();
57
- const Root = asChild ? Slot : Primitive.div;
58
- return <Root {...props} className={tx('toast.body', 'toast__body', {}, classNames)} ref={forwardedRef} />;
40
+ const Comp = asChild ? Slot : Primitive.div;
41
+ return <Comp {...props} className={tx('toast.body', {}, classNames)} ref={forwardedRef} />;
59
42
  });
60
43
 
61
- type ToastTitleProps = ThemedClassName<ToastTitlePrimitiveProps>;
44
+ type ToastTitleProps = ThemedClassName<ToastPrimitive.ToastTitleProps>;
62
45
 
63
46
  const ToastTitle = forwardRef<HTMLHeadingElement, ToastTitleProps>(
64
47
  ({ asChild, classNames, ...props }, forwardedRef) => {
65
48
  const { tx } = useThemeContext();
66
- const Root = asChild ? Slot : ToastTitlePrimitive;
67
- return <Root {...props} className={tx('toast.title', 'toast__title', {}, classNames)} ref={forwardedRef} />;
49
+ const Comp = asChild ? Slot : ToastPrimitive.Title;
50
+ return <Comp {...props} className={tx('toast.title', {}, classNames)} ref={forwardedRef} />;
68
51
  },
69
52
  );
70
53
 
71
- type ToastDescriptionProps = ThemedClassName<ToastDescriptionPrimitiveProps>;
54
+ type ToastDescriptionProps = ThemedClassName<ToastPrimitive.ToastDescriptionProps>;
72
55
 
73
56
  const ToastDescription = forwardRef<HTMLParagraphElement, ToastDescriptionProps>(
74
57
  ({ asChild, classNames, ...props }, forwardedRef) => {
75
58
  const { tx } = useThemeContext();
76
- const Root = asChild ? Slot : ToastDescriptionPrimitive;
77
- return (
78
- <Root {...props} className={tx('toast.description', 'toast__description', {}, classNames)} ref={forwardedRef} />
79
- );
59
+ const Comp = asChild ? Slot : ToastPrimitive.Description;
60
+ return <Comp {...props} className={tx('toast.description', {}, classNames)} ref={forwardedRef} />;
80
61
  },
81
62
  );
82
63
 
@@ -85,18 +66,18 @@ type ToastActionsProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.
85
66
  const ToastActions = forwardRef<HTMLDivElement, ToastActionsProps>(
86
67
  ({ asChild, classNames, ...props }, forwardedRef) => {
87
68
  const { tx } = useThemeContext();
88
- const Root = asChild ? Slot : Primitive.div;
89
- return <Root {...props} className={tx('toast.actions', 'toast__actions', {}, classNames)} ref={forwardedRef} />;
69
+ const Comp = asChild ? Slot : Primitive.div;
70
+ return <Comp {...props} className={tx('toast.actions', {}, classNames)} ref={forwardedRef} />;
90
71
  },
91
72
  );
92
73
 
93
- type ToastActionProps = ToastActionPrimitiveProps;
74
+ type ToastActionProps = ToastPrimitive.ToastActionProps;
94
75
 
95
- const ToastAction: FunctionComponent<ToastActionProps> = ToastActionPrimitive;
76
+ const ToastAction: FunctionComponent<ToastActionProps> = ToastPrimitive.Action;
96
77
 
97
- type ToastCloseProps = ToastClosePrimitiveProps;
78
+ type ToastCloseProps = ToastPrimitive.ToastCloseProps;
98
79
 
99
- const ToastClose: FunctionComponent<ToastCloseProps> = ToastClosePrimitive;
80
+ const ToastClose: FunctionComponent<ToastCloseProps> = ToastPrimitive.Close;
100
81
 
101
82
  export const Toast = {
102
83
  Provider: ToastProvider,
@@ -2,15 +2,14 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
- import { ArrowClockwise, Bug, FileJs, FileTs, TextB, TextItalic, TextUnderline } from '@phosphor-icons/react';
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
  import React from 'react';
9
7
 
10
- import { Toolbar } from './Toolbar';
11
8
  import { withTheme } from '../../testing';
12
- import { Toggle } from '../Buttons';
9
+ import { Toggle } from '../Button';
10
+ import { Icon } from '../Icon';
13
11
  import { Select } from '../Select';
12
+ import { Toolbar } from './Toolbar';
14
13
 
15
14
  type StorybookToolbarProps = {};
16
15
 
@@ -29,6 +28,7 @@ const DefaultStory = (props: StorybookToolbarProps) => {
29
28
  <Select.Option value={'b'}>B</Select.Option>
30
29
  <Select.Option value={'c'}>C</Select.Option>
31
30
  </Select.Viewport>
31
+ <Select.Arrow />
32
32
  </Select.Content>
33
33
  </Select.Portal>
34
34
  </Select.Root>
@@ -37,46 +37,47 @@ const DefaultStory = (props: StorybookToolbarProps) => {
37
37
  {/* TODO(burdon): Icon sizes should adapt to density. */}
38
38
  <Toolbar.ToggleGroup type='multiple'>
39
39
  <Toolbar.ToggleGroupItem value='a'>
40
- <TextB />
40
+ <Icon icon='ph--text-b--regular' />
41
41
  </Toolbar.ToggleGroupItem>
42
42
  <Toolbar.ToggleGroupItem value='b'>
43
- <TextItalic />
43
+ <Icon icon='ph--text-italic--regular' />
44
44
  </Toolbar.ToggleGroupItem>
45
45
  <Toolbar.ToggleGroupItem value='c'>
46
- <TextUnderline />
46
+ <Icon icon='ph--text-underline--regular' />
47
47
  </Toolbar.ToggleGroupItem>
48
48
  </Toolbar.ToggleGroup>
49
49
  {/* TODO(burdon): Highlight isn't shown. */}
50
50
  <Toolbar.ToggleGroup type='single' defaultValue='a'>
51
51
  <Toolbar.ToggleGroupItem value='a'>
52
- <FileTs />
52
+ <Icon icon='ph--file-ts--regular' />
53
53
  </Toolbar.ToggleGroupItem>
54
54
  <Toolbar.ToggleGroupItem value='b'>
55
- <FileJs />
55
+ <Icon icon='ph--file-js--regular' />
56
56
  </Toolbar.ToggleGroupItem>
57
57
  </Toolbar.ToggleGroup>
58
58
  <Toolbar.Button asChild>
59
59
  <Toggle>
60
- <Bug />
60
+ <Icon icon='ph--bug--regular' />
61
61
  </Toggle>
62
62
  </Toolbar.Button>
63
63
  <Toolbar.Separator />
64
64
  <Toolbar.Button>Test</Toolbar.Button>
65
- <Toolbar.Button>
66
- <ArrowClockwise />
67
- </Toolbar.Button>
65
+ <Toolbar.IconButton icon='ph--arrow-clockwise--regular' label='Refresh' iconOnly />
68
66
  </Toolbar.Root>
69
67
  );
70
68
  };
71
69
 
72
- export default {
73
- title: 'ui/react-ui-core/Toolbar',
74
- component: Toolbar,
70
+ const meta = {
71
+ title: 'ui/react-ui-core/components/Toolbar',
72
+ component: Toolbar as any,
75
73
  render: DefaultStory,
76
- decorators: [withTheme],
77
- parameters: { chromatic: { disableSnapshot: false } },
78
- };
74
+ decorators: [withTheme()],
75
+ } satisfies Meta<typeof DefaultStory>;
76
+
77
+ export default meta;
78
+
79
+ type Story = StoryObj<typeof meta>;
79
80
 
80
- export const Default = {
81
+ export const Default: Story = {
81
82
  args: {},
82
83
  };
@@ -2,35 +2,52 @@
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';
8
14
 
9
15
  import { useThemeContext } from '../../hooks';
10
- import { type ThemedClassName } from '../../util';
16
+ import { translationKey } from '../../translations';
11
17
  import {
12
18
  Button,
13
19
  ButtonGroup,
14
20
  type ButtonGroupProps,
15
21
  type ButtonProps,
22
+ IconButton,
23
+ type IconButtonProps,
16
24
  Toggle,
17
25
  type ToggleGroupItemProps,
18
26
  type ToggleProps,
19
- IconButton,
20
- type IconButtonProps,
21
- } from '../Buttons';
27
+ } from '../Button';
22
28
  import { Link, type LinkProps } from '../Link';
29
+ import { DropdownMenu } from '../Menu';
23
30
  import { Separator, type SeparatorProps } from '../Separator';
24
31
 
25
- type ToolbarRootProps = ThemedClassName<ToolbarPrimitive.ToolbarProps> & { layoutManaged?: boolean };
32
+ //
33
+ // Root
34
+ //
26
35
 
27
- const ToolbarRoot = forwardRef<HTMLDivElement, ToolbarRootProps>(
28
- ({ classNames, children, layoutManaged, ...props }, forwardedRef) => {
36
+ type ToolbarRootProps = ToolbarPrimitive.ToolbarProps & ToolbarStyleProps;
37
+
38
+ const ToolbarRoot = composable<HTMLDivElement, ToolbarRootProps>(
39
+ ({ children, density, disabled, layoutManaged, orientation, ...props }, forwardedRef) => {
40
+ const { className, role, ...rest } = composableProps(props);
29
41
  const { tx } = useThemeContext();
42
+
30
43
  return (
31
44
  <ToolbarPrimitive.Root
32
- {...props}
33
- className={tx('toolbar.root', 'toolbar', { layoutManaged }, classNames)}
45
+ {...rest}
46
+ // Only pass role when explicitly set; radix provides role="toolbar" by default.
47
+ {...(role !== 'none' && { role })}
48
+ orientation={orientation}
49
+ data-arrow-keys={orientation === 'vertical' ? 'up down' : 'left right'}
50
+ className={tx('toolbar.root', { density, disabled, layoutManaged }, className)}
34
51
  ref={forwardedRef}
35
52
  >
36
53
  {children}
@@ -39,6 +56,27 @@ const ToolbarRoot = forwardRef<HTMLDivElement, ToolbarRootProps>(
39
56
  },
40
57
  );
41
58
 
59
+ //
60
+ // Text
61
+ //
62
+
63
+ type ToolbarTextProps = SlottableProps;
64
+
65
+ const ToolbarText = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
66
+ const { className, ...rest } = composableProps(props);
67
+ const Comp = asChild ? Slot : Primitive.div;
68
+ const { tx } = useThemeContext();
69
+ return (
70
+ <Comp {...rest} className={tx('toolbar.text', {}, className)} ref={forwardedRef}>
71
+ {children}
72
+ </Comp>
73
+ );
74
+ });
75
+
76
+ //
77
+ // Button
78
+ //
79
+
42
80
  type ToolbarButtonProps = ButtonProps;
43
81
 
44
82
  const ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>((props, forwardedRef) => {
@@ -49,12 +87,16 @@ const ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>((props,
49
87
  );
50
88
  });
51
89
 
90
+ //
91
+ // IconButton
92
+ //
93
+
52
94
  type ToolbarIconButtonProps = IconButtonProps;
53
95
 
54
96
  const ToolbarIconButton = forwardRef<HTMLButtonElement, ToolbarIconButtonProps>((props, forwardedRef) => {
55
97
  return (
56
98
  <ToolbarPrimitive.Button asChild>
57
- <IconButton {...props} ref={forwardedRef} />
99
+ <IconButton {...props} noTooltip ref={forwardedRef} />
58
100
  </ToolbarPrimitive.Button>
59
101
  );
60
102
  });
@@ -69,6 +111,10 @@ const ToolbarToggle = forwardRef<HTMLButtonElement, ToolbarToggleProps>((props,
69
111
  );
70
112
  });
71
113
 
114
+ //
115
+ // Link
116
+ //
117
+
72
118
  type ToolbarLinkProps = LinkProps;
73
119
 
74
120
  const ToolbarLink = forwardRef<HTMLAnchorElement, ToolbarLinkProps>((props, forwardedRef) => {
@@ -85,6 +131,10 @@ type ToolbarToggleGroupProps = (
85
131
  ) &
86
132
  ButtonGroupProps;
87
133
 
134
+ //
135
+ // ToggleGroup
136
+ //
137
+
88
138
  const ToolbarToggleGroup = forwardRef<HTMLDivElement, ToolbarToggleGroupProps>(
89
139
  ({ classNames, children, elevation, ...props }, forwardedRef) => {
90
140
  return (
@@ -113,19 +163,34 @@ const ToolbarToggleGroupIconItem = forwardRef<HTMLButtonElement, ToolbarToggleGr
113
163
  ({ variant, density, elevation, classNames, icon, label, iconOnly, ...props }, forwardedRef) => {
114
164
  return (
115
165
  <ToolbarPrimitive.ToolbarToggleItem {...props} asChild>
116
- <IconButton {...{ variant, density, elevation, classNames, icon, label, iconOnly }} ref={forwardedRef} />
166
+ <IconButton
167
+ {...{
168
+ variant,
169
+ density,
170
+ elevation,
171
+ classNames,
172
+ icon,
173
+ label,
174
+ iconOnly,
175
+ }}
176
+ ref={forwardedRef}
177
+ />
117
178
  </ToolbarPrimitive.ToolbarToggleItem>
118
179
  );
119
180
  },
120
181
  );
121
182
 
183
+ //
184
+ // Separator
185
+ //
186
+
122
187
  type ToolbarSeparatorProps = SeparatorProps & { variant?: 'gap' | 'line' };
123
188
 
124
189
  const ToolbarSeparator = forwardRef<HTMLDivElement, ToolbarSeparatorProps>(
125
- ({ variant = 'line', ...props }, forwardedRef) => {
190
+ ({ variant = 'gap', ...props }, forwardedRef) => {
126
191
  return variant === 'line' ? (
127
192
  <ToolbarPrimitive.Separator asChild>
128
- <Separator {...props} ref={forwardedRef} />
193
+ <Separator orientation='vertical' {...props} ref={forwardedRef} />
129
194
  </ToolbarPrimitive.Separator>
130
195
  ) : (
131
196
  <ToolbarPrimitive.Separator className='grow' ref={forwardedRef} />
@@ -133,8 +198,109 @@ const ToolbarSeparator = forwardRef<HTMLDivElement, ToolbarSeparatorProps>(
133
198
  },
134
199
  );
135
200
 
201
+ //
202
+ // DragHandle
203
+ //
204
+
205
+ type ToolbarDragHandleProps = { testId?: string; label?: string };
206
+
207
+ const ToolbarDragHandle = forwardRef<HTMLButtonElement, ToolbarDragHandleProps>(
208
+ ({ testId = 'drag-handle', label }, forwardedRef) => {
209
+ const { t } = useTranslation(translationKey);
210
+ return (
211
+ <ToolbarIconButton
212
+ data-testid={testId}
213
+ tabIndex={-1}
214
+ noTooltip
215
+ iconOnly
216
+ icon='ph--dots-six-vertical--regular'
217
+ variant='ghost'
218
+ label={label ?? t('toolbar-drag-handle.label')}
219
+ classNames='dx-focus-ring-none cursor-pointer'
220
+ disabled={!forwardedRef}
221
+ ref={forwardedRef}
222
+ />
223
+ );
224
+ },
225
+ );
226
+
227
+ //
228
+ // CloseIconButton
229
+ //
230
+
231
+ type ToolbarCloseIconButtonProps = { onClick?: () => void; label?: string };
232
+
233
+ const ToolbarCloseIconButton = forwardRef<HTMLButtonElement, ToolbarCloseIconButtonProps>(
234
+ ({ onClick, label }, forwardedRef) => {
235
+ const { t } = useTranslation(translationKey);
236
+
237
+ return (
238
+ <ToolbarIconButton
239
+ iconOnly
240
+ icon='ph--x--regular'
241
+ variant='ghost'
242
+ label={label ?? t('toolbar-close.label')}
243
+ classNames='cursor-pointer'
244
+ onClick={onClick}
245
+ ref={forwardedRef}
246
+ />
247
+ );
248
+ },
249
+ );
250
+
251
+ //
252
+ // Menu
253
+ //
254
+
255
+ type ToolbarMenuItem<T extends any | void = void> = {
256
+ label: string;
257
+ onClick: (context: T) => void;
258
+ };
259
+
260
+ type ToolbarMenuProps<T extends any | void = void> = {
261
+ context?: T;
262
+ items?: ToolbarMenuItem<T>[];
263
+ };
264
+
265
+ // TODO(burdon): Make slottable.
266
+ const ToolbarMenu = <T extends any | void = void>({ context, items }: ToolbarMenuProps<T>) => {
267
+ const { t } = useTranslation(translationKey);
268
+
269
+ return (
270
+ <DropdownMenu.Root>
271
+ <DropdownMenu.Trigger disabled={!items?.length} asChild>
272
+ <ToolbarIconButton
273
+ iconOnly
274
+ variant='ghost'
275
+ icon='ph--dots-three-vertical--regular'
276
+ label={t('toolbar-menu.label')}
277
+ />
278
+ </DropdownMenu.Trigger>
279
+ {(items?.length ?? 0) > 0 && (
280
+ <DropdownMenu.Portal>
281
+ <DropdownMenu.Content>
282
+ <DropdownMenu.Viewport>
283
+ {items?.map(({ label, onClick: onSelect }, index) => (
284
+ <DropdownMenu.Item key={index} onSelect={() => onSelect(context as T)}>
285
+ {label}
286
+ </DropdownMenu.Item>
287
+ ))}
288
+ </DropdownMenu.Viewport>
289
+ <DropdownMenu.Arrow />
290
+ </DropdownMenu.Content>
291
+ </DropdownMenu.Portal>
292
+ )}
293
+ </DropdownMenu.Root>
294
+ );
295
+ };
296
+
297
+ //
298
+ // Toolbar
299
+ //
300
+
136
301
  export const Toolbar = {
137
302
  Root: ToolbarRoot,
303
+ Text: ToolbarText,
138
304
  Button: ToolbarButton,
139
305
  IconButton: ToolbarIconButton,
140
306
  Link: ToolbarLink,
@@ -143,10 +309,14 @@ export const Toolbar = {
143
309
  ToggleGroupItem: ToolbarToggleGroupItem,
144
310
  ToggleGroupIconItem: ToolbarToggleGroupIconItem,
145
311
  Separator: ToolbarSeparator,
312
+ DragHandle: ToolbarDragHandle,
313
+ CloseIconButton: ToolbarCloseIconButton,
314
+ Menu: ToolbarMenu,
146
315
  };
147
316
 
148
317
  export type {
149
318
  ToolbarRootProps,
319
+ ToolbarTextProps,
150
320
  ToolbarButtonProps,
151
321
  ToolbarIconButtonProps,
152
322
  ToolbarLinkProps,
@@ -155,4 +325,8 @@ export type {
155
325
  ToolbarToggleGroupItemProps,
156
326
  ToolbarToggleGroupIconItemProps,
157
327
  ToolbarSeparatorProps,
328
+ ToolbarDragHandleProps,
329
+ ToolbarCloseIconButtonProps,
330
+ ToolbarMenuItem,
331
+ ToolbarMenuProps,
158
332
  };
@@ -2,41 +2,46 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React from 'react';
7
7
 
8
- import { faker } from '@dxos/random';
8
+ import { random } from '@dxos/random';
9
9
 
10
- import { Tooltip } from './Tooltip';
11
10
  import { withTheme } from '../../testing';
12
- import { Button } from '../Buttons';
11
+ import { Button } from '../Button';
12
+ import { Tooltip } from './Tooltip';
13
13
 
14
- type StoryProps = {
14
+ type DefaultStoryProps = {
15
15
  tooltips: { label: string; content: string }[];
16
16
  defaultOpen?: boolean;
17
17
  };
18
18
 
19
- const DefaultStory = ({ tooltips, defaultOpen }: StoryProps) => (
20
- <Tooltip.Provider defaultOpen={defaultOpen}>
21
- <div role='none' className='is-32'>
22
- {tooltips.map(({ label, content }, i) => (
23
- <Tooltip.Trigger asChild key={i} content={content} side='right'>
24
- <Button classNames='block is-full'>{label}</Button>
25
- </Tooltip.Trigger>
26
- ))}
27
- </div>
28
- </Tooltip.Provider>
29
- );
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
+ };
30
32
 
31
- export default {
32
- title: 'ui/react-ui-core/Tooltip',
33
- component: Tooltip,
33
+ const meta = {
34
+ title: 'ui/react-ui-core/components/Tooltip',
35
+ component: Tooltip as any,
34
36
  render: DefaultStory,
35
- decorators: [withTheme],
36
- parameters: { chromatic: { disableSnapshot: false } },
37
- };
37
+ decorators: [withTheme()],
38
+ } satisfies Meta<typeof DefaultStory>;
39
+
40
+ export default meta;
41
+
42
+ type Story = StoryObj<typeof meta>;
38
43
 
39
- export const Default = {
44
+ export const Default: Story = {
40
45
  args: {
41
46
  tooltips: [
42
47
  {
@@ -50,9 +55,9 @@ export const Default = {
50
55
  },
51
56
  };
52
57
 
53
- export const DefaultOpen = {
58
+ export const DefaultOpen: Story = {
54
59
  args: {
55
- defaultOption: true,
60
+ defaultOpen: true,
56
61
  tooltips: [
57
62
  {
58
63
  label: 'Tooltip trigger',
@@ -65,13 +70,13 @@ export const DefaultOpen = {
65
70
  },
66
71
  };
67
72
 
68
- export const StressTest = {
73
+ export const StressTest: Story = {
69
74
  args: {
70
- defaultOption: true,
71
- tooltips: faker.helpers.multiple(
75
+ defaultOpen: true,
76
+ tooltips: random.helpers.multiple(
72
77
  () => ({
73
- label: faker.lorem.words(2),
74
- content: faker.lorem.words(5),
78
+ label: random.lorem.words(2),
79
+ content: random.lorem.words(5),
75
80
  }),
76
81
  { count: 32 },
77
82
  ),