@dxos/react-ui 0.8.4-main.67995b8 → 0.8.4-main.6fa680abb7

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 (448) hide show
  1. package/dist/lib/browser/chunk-2FKSMWNY.mjs +774 -0
  2. package/dist/lib/browser/chunk-2FKSMWNY.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +3918 -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 +100 -60
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/chunk-ZNBLTSHI.mjs +776 -0
  9. package/dist/lib/node-esm/chunk-ZNBLTSHI.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +3918 -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 +100 -60
  14. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  15. package/dist/types/src/components/Avatars/Avatar.d.ts +1 -1
  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 +2 -2
  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 +13 -0
  32. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -0
  33. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -0
  34. package/dist/types/src/components/Button/Toggle.stories.d.ts +16 -0
  35. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -0
  36. package/dist/types/src/components/Button/ToggleGroup.d.ts +27 -0
  37. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -0
  38. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +27 -0
  39. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -0
  40. package/dist/types/src/components/Button/index.d.ts.map +1 -0
  41. package/dist/types/src/components/Card/Card.d.ts +107 -0
  42. package/dist/types/src/components/Card/Card.d.ts.map +1 -0
  43. package/dist/types/src/components/Card/Card.stories.d.ts +21 -0
  44. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -0
  45. package/dist/types/src/components/Card/index.d.ts +2 -0
  46. package/dist/types/src/components/Card/index.d.ts.map +1 -0
  47. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  48. package/dist/types/src/components/Clipboard/CopyButton.d.ts +1 -1
  49. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  50. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts +1 -1
  51. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  52. package/dist/types/src/components/{Dialogs → Dialog}/AlertDialog.d.ts +13 -4
  53. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -0
  54. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts +11 -0
  55. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -0
  56. package/dist/types/src/components/Dialog/Dialog.d.ts +47 -0
  57. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -0
  58. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +24 -0
  59. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -0
  60. package/dist/types/src/components/Dialog/index.d.ts.map +1 -0
  61. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
  62. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  63. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts +11 -0
  64. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -0
  65. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts +7 -0
  66. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -0
  67. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +8 -0
  68. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -0
  69. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts +9 -0
  70. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -0
  71. package/dist/types/src/components/ErrorFallback/index.d.ts +5 -0
  72. package/dist/types/src/components/ErrorFallback/index.d.ts.map +1 -0
  73. package/dist/types/src/components/Icon/Icon.d.ts +2 -2
  74. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  75. package/dist/types/src/components/Icon/Icon.stories.d.ts +17 -0
  76. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -0
  77. package/dist/types/src/components/Image/Image.d.ts +14 -0
  78. package/dist/types/src/components/Image/Image.d.ts.map +1 -0
  79. package/dist/types/src/components/Image/Image.stories.d.ts +33 -0
  80. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -0
  81. package/dist/types/src/components/Image/index.d.ts +2 -0
  82. package/dist/types/src/components/Image/index.d.ts.map +1 -0
  83. package/dist/types/src/components/Input/Input.d.ts +6 -8
  84. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  85. package/dist/types/src/components/Input/Input.stories.d.ts +17 -18
  86. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  87. package/dist/types/src/components/Link/Link.stories.d.ts +8 -8
  88. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  89. package/dist/types/src/components/{Lists → List}/List.d.ts +3 -3
  90. package/dist/types/src/components/List/List.d.ts.map +1 -0
  91. package/dist/types/src/components/List/List.stories.d.ts +14 -0
  92. package/dist/types/src/components/List/List.stories.d.ts.map +1 -0
  93. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -0
  94. package/dist/types/src/components/{Lists → List}/Tree.d.ts +1 -1
  95. package/dist/types/src/components/List/Tree.d.ts.map +1 -0
  96. package/dist/types/src/components/List/Tree.stories.d.ts +15 -0
  97. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -0
  98. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -0
  99. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts +1 -1
  100. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts.map +1 -1
  101. package/dist/types/src/components/List/Treegrid.stories.d.ts +12 -0
  102. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -0
  103. package/dist/types/src/components/List/index.d.ts.map +1 -0
  104. package/dist/types/src/components/Main/Main.d.ts +18 -28
  105. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  106. package/dist/types/src/components/Main/Main.stories.d.ts +6 -10
  107. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  108. package/dist/types/src/components/{Menus → Menu}/ContextMenu.d.ts +6 -6
  109. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -0
  110. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts +12 -0
  111. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -0
  112. package/dist/types/src/components/{Menus → Menu}/DropdownMenu.d.ts +8 -8
  113. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
  114. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +15 -0
  115. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
  116. package/dist/types/src/components/Menu/index.d.ts.map +1 -0
  117. package/dist/types/src/components/Message/Message.d.ts +1 -1
  118. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  119. package/dist/types/src/components/Message/Message.stories.d.ts +10 -20
  120. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  121. package/dist/types/src/components/Popover/Popover.d.ts +4 -3
  122. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  123. package/dist/types/src/components/Popover/Popover.stories.d.ts +6 -34
  124. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  125. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +23 -26
  126. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  127. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +35 -25
  128. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  129. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +39 -0
  130. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -0
  131. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +24 -0
  132. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -0
  133. package/dist/types/src/components/ScrollContainer/index.d.ts +2 -0
  134. package/dist/types/src/components/ScrollContainer/index.d.ts.map +1 -0
  135. package/dist/types/src/components/Select/Select.d.ts +10 -10
  136. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  137. package/dist/types/src/components/Select/Select.stories.d.ts +4 -9
  138. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  139. package/dist/types/src/components/Separator/Separator.d.ts +1 -1
  140. package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
  141. package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  142. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
  143. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  144. package/dist/types/src/components/Skeleton/index.d.ts +2 -0
  145. package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
  146. package/dist/types/src/components/Splitter/Splitter.d.ts +32 -0
  147. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
  148. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
  149. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
  150. package/dist/types/src/components/Splitter/index.d.ts +2 -0
  151. package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
  152. package/dist/types/src/components/Status/Status.stories.d.ts +6 -10
  153. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  154. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  155. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  156. package/dist/types/src/components/Tag/Tag.stories.d.ts +8 -13
  157. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  158. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +3 -3
  159. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  160. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts +12 -0
  161. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  162. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +1 -8
  163. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  164. package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
  165. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  166. package/dist/types/src/components/Toast/Toast.d.ts +5 -5
  167. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  168. package/dist/types/src/components/Toast/Toast.stories.d.ts +6 -44
  169. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  170. package/dist/types/src/components/Toolbar/Toolbar.d.ts +46 -20
  171. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  172. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +6 -50
  173. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  174. package/dist/types/src/components/Tooltip/Tooltip.d.ts +2 -4
  175. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  176. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +8 -61
  177. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  178. package/dist/types/src/components/index.d.ts +13 -8
  179. package/dist/types/src/components/index.d.ts.map +1 -1
  180. package/dist/types/src/exemplars/generics.stories.d.ts +18 -0
  181. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
  182. package/dist/types/src/exemplars/slot.stories.d.ts +14 -0
  183. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
  184. package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
  185. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
  186. package/dist/types/src/exemplars/virtualizer.stories.d.ts +11 -0
  187. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -0
  188. package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
  189. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  190. package/dist/types/src/hooks/useElevationContext.d.ts +1 -1
  191. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  192. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  193. package/dist/types/src/hooks/useVisualViewport.d.ts +2 -2
  194. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  195. package/dist/types/src/index.d.ts +2 -1
  196. package/dist/types/src/index.d.ts.map +1 -1
  197. package/dist/types/src/playground/Controls.stories.d.ts +5 -9
  198. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  199. package/dist/types/src/playground/Custom.stories.d.ts +12 -4
  200. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  201. package/dist/types/src/playground/Typography.stories.d.ts +5 -11
  202. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  203. package/dist/types/src/primitives/Column/Column.d.ts +26 -0
  204. package/dist/types/src/primitives/Column/Column.d.ts.map +1 -0
  205. package/dist/types/src/primitives/Column/Column.stories.d.ts +6 -0
  206. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -0
  207. package/dist/types/src/primitives/Column/index.d.ts +2 -0
  208. package/dist/types/src/primitives/Column/index.d.ts.map +1 -0
  209. package/dist/types/src/primitives/Container/Container.d.ts +8 -0
  210. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
  211. package/dist/types/src/primitives/Container/Container.stories.d.ts +6 -0
  212. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
  213. package/dist/types/src/primitives/Container/index.d.ts +2 -0
  214. package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
  215. package/dist/types/src/primitives/Flex/Flex.d.ts +13 -0
  216. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
  217. package/dist/types/src/primitives/Flex/Flex.stories.d.ts +8 -0
  218. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -0
  219. package/dist/types/src/primitives/Flex/index.d.ts +2 -0
  220. package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
  221. package/dist/types/src/primitives/Grid/Grid.d.ts +15 -0
  222. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -0
  223. package/dist/types/src/primitives/Grid/Grid.stories.d.ts +8 -0
  224. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -0
  225. package/dist/types/src/primitives/Grid/index.d.ts +2 -0
  226. package/dist/types/src/primitives/Grid/index.d.ts.map +1 -0
  227. package/dist/types/src/primitives/Panel/Panel.d.ts +26 -0
  228. package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -0
  229. package/dist/types/src/primitives/Panel/Panel.stories.d.ts +6 -0
  230. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -0
  231. package/dist/types/src/primitives/Panel/index.d.ts +2 -0
  232. package/dist/types/src/primitives/Panel/index.d.ts.map +1 -0
  233. package/dist/types/src/primitives/index.d.ts +6 -0
  234. package/dist/types/src/primitives/index.d.ts.map +1 -0
  235. package/dist/types/src/testing/Loading.d.ts +9 -0
  236. package/dist/types/src/testing/Loading.d.ts.map +1 -0
  237. package/dist/types/src/testing/decorators/index.d.ts +2 -1
  238. package/dist/types/src/testing/decorators/index.d.ts.map +1 -1
  239. package/dist/types/src/testing/decorators/withLayout.d.ts +15 -0
  240. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -0
  241. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +12 -0
  242. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -0
  243. package/dist/types/src/testing/decorators/withTheme.d.ts +5 -1
  244. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  245. package/dist/types/src/testing/index.d.ts +1 -0
  246. package/dist/types/src/testing/index.d.ts.map +1 -1
  247. package/dist/types/src/translations.d.ts +11 -0
  248. package/dist/types/src/translations.d.ts.map +1 -0
  249. package/dist/types/src/util/index.d.ts +2 -1
  250. package/dist/types/src/util/index.d.ts.map +1 -1
  251. package/dist/types/src/util/usePx.d.ts +8 -0
  252. package/dist/types/src/util/usePx.d.ts.map +1 -0
  253. package/dist/types/tsconfig.tsbuildinfo +1 -1
  254. package/package.json +41 -31
  255. package/src/components/Avatars/Avatar.stories.tsx +24 -16
  256. package/src/components/Avatars/Avatar.tsx +9 -16
  257. package/src/components/Avatars/AvatarGroup.stories.tsx +12 -8
  258. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +20 -15
  259. package/src/components/Breadcrumb/Breadcrumb.tsx +12 -38
  260. package/src/components/{Buttons → Button}/Button.stories.tsx +10 -11
  261. package/src/components/{Buttons → Button}/Button.tsx +7 -13
  262. package/src/components/{Buttons → Button}/IconButton.stories.tsx +15 -12
  263. package/src/components/{Buttons → Button}/IconButton.tsx +23 -16
  264. package/src/components/Button/Toggle.stories.tsx +37 -0
  265. package/src/components/{Buttons → Button}/ToggleGroup.stories.tsx +12 -9
  266. package/src/components/{Buttons → Button}/ToggleGroup.tsx +17 -4
  267. package/src/components/Card/Card.stories.tsx +151 -0
  268. package/src/components/Card/Card.tsx +347 -0
  269. package/src/components/Card/index.ts +5 -0
  270. package/src/components/Clipboard/ClipboardProvider.tsx +1 -1
  271. package/src/components/Clipboard/CopyButton.tsx +9 -8
  272. package/src/components/DensityProvider/DensityProvider.tsx +2 -2
  273. package/src/components/Dialog/AlertDialog.stories.tsx +69 -0
  274. package/src/components/{Dialogs → Dialog}/AlertDialog.tsx +128 -28
  275. package/src/components/Dialog/Dialog.stories.tsx +122 -0
  276. package/src/components/{Dialogs → Dialog}/Dialog.tsx +190 -60
  277. package/src/components/ElevationProvider/ElevationProvider.tsx +2 -2
  278. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +50 -0
  279. package/src/components/ErrorFallback/ErrorFallback.tsx +70 -0
  280. package/src/components/ErrorFallback/ErrorStack.tsx +80 -0
  281. package/src/components/ErrorFallback/ThrowError.tsx +37 -0
  282. package/src/components/ErrorFallback/index.ts +9 -0
  283. package/src/components/Icon/Icon.stories.tsx +113 -0
  284. package/src/components/Icon/Icon.tsx +3 -3
  285. package/src/components/Image/Image.stories.tsx +86 -0
  286. package/src/components/Image/Image.tsx +223 -0
  287. package/src/components/Image/index.ts +5 -0
  288. package/src/components/Input/Input.stories.tsx +28 -49
  289. package/src/components/Input/Input.tsx +46 -82
  290. package/src/components/Link/Link.stories.tsx +12 -8
  291. package/src/components/Link/Link.tsx +2 -2
  292. package/src/components/{Lists → List}/List.stories.tsx +44 -45
  293. package/src/components/{Lists → List}/List.tsx +27 -28
  294. package/src/components/{Lists → List}/ListDropIndicator.tsx +7 -7
  295. package/src/components/{Lists → List}/Tree.stories.tsx +15 -12
  296. package/src/components/{Lists → List}/Tree.tsx +4 -3
  297. package/src/components/{Lists → List}/TreeDropIndicator.tsx +7 -7
  298. package/src/components/{Lists → List}/Treegrid.stories.tsx +15 -9
  299. package/src/components/{Lists → List}/Treegrid.tsx +67 -31
  300. package/src/components/Main/Main.stories.tsx +53 -27
  301. package/src/components/Main/Main.tsx +176 -104
  302. package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +13 -10
  303. package/src/components/{Menus → Menu}/ContextMenu.tsx +10 -33
  304. package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +14 -11
  305. package/src/components/{Menus → Menu}/DropdownMenu.tsx +111 -80
  306. package/src/components/Message/Message.stories.tsx +35 -16
  307. package/src/components/Message/Message.tsx +46 -33
  308. package/src/components/Popover/Popover.stories.tsx +16 -13
  309. package/src/components/Popover/Popover.tsx +86 -64
  310. package/src/components/ScrollArea/ScrollArea.stories.tsx +163 -34
  311. package/src/components/ScrollArea/ScrollArea.tsx +84 -82
  312. package/src/components/ScrollArea/index.ts +1 -1
  313. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +89 -0
  314. package/src/components/ScrollContainer/ScrollContainer.tsx +238 -0
  315. package/src/components/ScrollContainer/index.ts +5 -0
  316. package/src/components/Select/Select.stories.tsx +15 -12
  317. package/src/components/Select/Select.tsx +16 -31
  318. package/src/components/Separator/Separator.tsx +1 -1
  319. package/src/components/Skeleton/Skeleton.stories.tsx +52 -0
  320. package/src/components/Skeleton/Skeleton.tsx +26 -0
  321. package/src/components/Skeleton/index.ts +5 -0
  322. package/src/components/Splitter/Splitter.stories.tsx +83 -0
  323. package/src/components/Splitter/Splitter.tsx +126 -0
  324. package/src/components/Splitter/index.ts +5 -0
  325. package/src/components/Status/Status.stories.tsx +30 -23
  326. package/src/components/Status/Status.tsx +2 -2
  327. package/src/components/Tag/Tag.stories.tsx +17 -13
  328. package/src/components/Tag/Tag.tsx +3 -8
  329. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +32 -0
  330. package/src/components/ThemeProvider/ThemeProvider.tsx +7 -7
  331. package/src/components/ThemeProvider/TranslationsProvider.tsx +3 -18
  332. package/src/components/ThemeProvider/index.ts +3 -3
  333. package/src/components/Toast/Toast.stories.tsx +14 -11
  334. package/src/components/Toast/Toast.tsx +19 -23
  335. package/src/components/Toolbar/Toolbar.stories.tsx +16 -14
  336. package/src/components/Toolbar/Toolbar.tsx +201 -12
  337. package/src/components/Tooltip/Tooltip.stories.tsx +31 -25
  338. package/src/components/Tooltip/Tooltip.tsx +30 -26
  339. package/src/components/index.ts +14 -9
  340. package/src/exemplars/generics.stories.tsx +49 -0
  341. package/src/exemplars/slot.stories.tsx +107 -0
  342. package/src/exemplars/tabster.stories.tsx +127 -0
  343. package/src/exemplars/virtualizer.stories.tsx +137 -0
  344. package/src/hooks/useDensityContext.ts +1 -1
  345. package/src/hooks/useElevationContext.ts +1 -1
  346. package/src/hooks/useSafeArea.ts +3 -2
  347. package/src/hooks/useVisualViewport.ts +4 -4
  348. package/src/index.ts +2 -1
  349. package/src/playground/Controls.stories.tsx +12 -15
  350. package/src/playground/Custom.stories.tsx +15 -26
  351. package/src/playground/Typography.stories.tsx +11 -9
  352. package/src/primitives/Column/Column.stories.tsx +78 -0
  353. package/src/primitives/Column/Column.tsx +134 -0
  354. package/src/primitives/Column/index.ts +5 -0
  355. package/src/primitives/Container/Container.stories.tsx +30 -0
  356. package/src/primitives/Container/Container.tsx +22 -0
  357. package/src/primitives/Container/index.ts +5 -0
  358. package/src/primitives/Flex/Flex.stories.tsx +58 -0
  359. package/src/primitives/Flex/Flex.tsx +29 -0
  360. package/src/primitives/Flex/index.ts +5 -0
  361. package/src/primitives/Grid/Grid.stories.tsx +57 -0
  362. package/src/primitives/Grid/Grid.tsx +35 -0
  363. package/src/primitives/Grid/index.ts +5 -0
  364. package/src/primitives/Panel/Panel.stories.tsx +67 -0
  365. package/src/primitives/Panel/Panel.tsx +119 -0
  366. package/src/primitives/Panel/index.ts +5 -0
  367. package/src/primitives/index.ts +9 -0
  368. package/src/testing/Loading.tsx +26 -0
  369. package/src/testing/decorators/index.ts +2 -1
  370. package/src/testing/decorators/withLayout.tsx +77 -0
  371. package/src/testing/decorators/withLayoutVariants.tsx +48 -0
  372. package/src/testing/decorators/withTheme.tsx +34 -0
  373. package/src/testing/index.ts +2 -0
  374. package/src/translations.ts +19 -0
  375. package/src/util/index.ts +3 -1
  376. package/src/util/usePx.ts +61 -0
  377. package/dist/lib/browser/chunk-2COVUP44.mjs +0 -4373
  378. package/dist/lib/browser/chunk-2COVUP44.mjs.map +0 -7
  379. package/dist/lib/node-esm/chunk-GHXHND5V.mjs +0 -4375
  380. package/dist/lib/node-esm/chunk-GHXHND5V.mjs.map +0 -7
  381. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +0 -15
  382. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +0 -1
  383. package/dist/types/src/components/AnchoredOverflow/index.d.ts +0 -2
  384. package/dist/types/src/components/AnchoredOverflow/index.d.ts.map +0 -1
  385. package/dist/types/src/components/Buttons/Button.d.ts.map +0 -1
  386. package/dist/types/src/components/Buttons/Button.stories.d.ts +0 -12
  387. package/dist/types/src/components/Buttons/Button.stories.d.ts.map +0 -1
  388. package/dist/types/src/components/Buttons/IconButton.d.ts.map +0 -1
  389. package/dist/types/src/components/Buttons/IconButton.stories.d.ts +0 -22
  390. package/dist/types/src/components/Buttons/IconButton.stories.d.ts.map +0 -1
  391. package/dist/types/src/components/Buttons/Toggle.d.ts.map +0 -1
  392. package/dist/types/src/components/Buttons/Toggle.stories.d.ts +0 -19
  393. package/dist/types/src/components/Buttons/Toggle.stories.d.ts.map +0 -1
  394. package/dist/types/src/components/Buttons/ToggleGroup.d.ts +0 -28
  395. package/dist/types/src/components/Buttons/ToggleGroup.d.ts.map +0 -1
  396. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts +0 -39
  397. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +0 -1
  398. package/dist/types/src/components/Buttons/index.d.ts.map +0 -1
  399. package/dist/types/src/components/Dialogs/AlertDialog.d.ts.map +0 -1
  400. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts +0 -43
  401. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +0 -1
  402. package/dist/types/src/components/Dialogs/Dialog.d.ts +0 -31
  403. package/dist/types/src/components/Dialogs/Dialog.d.ts.map +0 -1
  404. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts +0 -48
  405. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +0 -1
  406. package/dist/types/src/components/Dialogs/index.d.ts.map +0 -1
  407. package/dist/types/src/components/Lists/List.d.ts.map +0 -1
  408. package/dist/types/src/components/Lists/List.stories.d.ts +0 -37
  409. package/dist/types/src/components/Lists/List.stories.d.ts.map +0 -1
  410. package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +0 -1
  411. package/dist/types/src/components/Lists/Tree.d.ts.map +0 -1
  412. package/dist/types/src/components/Lists/Tree.stories.d.ts +0 -41
  413. package/dist/types/src/components/Lists/Tree.stories.d.ts.map +0 -1
  414. package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +0 -1
  415. package/dist/types/src/components/Lists/Treegrid.stories.d.ts +0 -10
  416. package/dist/types/src/components/Lists/Treegrid.stories.d.ts.map +0 -1
  417. package/dist/types/src/components/Lists/index.d.ts.map +0 -1
  418. package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
  419. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts +0 -50
  420. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +0 -1
  421. package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
  422. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts +0 -50
  423. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
  424. package/dist/types/src/components/Menus/index.d.ts.map +0 -1
  425. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts +0 -12
  426. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts.map +0 -1
  427. package/dist/types/src/util/ThemedClassName.d.ts +0 -5
  428. package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
  429. package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +0 -59
  430. package/src/components/AnchoredOverflow/index.ts +0 -5
  431. package/src/components/Buttons/Toggle.stories.tsx +0 -33
  432. package/src/components/Dialogs/AlertDialog.stories.tsx +0 -66
  433. package/src/components/Dialogs/Dialog.stories.tsx +0 -65
  434. package/src/testing/decorators/withSurfaceVariantsLayout.tsx +0 -51
  435. package/src/testing/decorators/withTheme.ts +0 -25
  436. package/src/util/ThemedClassName.ts +0 -7
  437. /package/dist/types/src/components/{Buttons → Button}/Toggle.d.ts +0 -0
  438. /package/dist/types/src/components/{Buttons → Button}/index.d.ts +0 -0
  439. /package/dist/types/src/components/{Dialogs → Dialog}/index.d.ts +0 -0
  440. /package/dist/types/src/components/{Lists → List}/ListDropIndicator.d.ts +0 -0
  441. /package/dist/types/src/components/{Lists → List}/TreeDropIndicator.d.ts +0 -0
  442. /package/dist/types/src/components/{Lists → List}/index.d.ts +0 -0
  443. /package/dist/types/src/components/{Menus → Menu}/index.d.ts +0 -0
  444. /package/src/components/{Buttons → Button}/Toggle.tsx +0 -0
  445. /package/src/components/{Buttons → Button}/index.ts +0 -0
  446. /package/src/components/{Dialogs → Dialog}/index.ts +0 -0
  447. /package/src/components/{Lists → List}/index.ts +0 -0
  448. /package/src/components/{Menus → Menu}/index.ts +0 -0
@@ -3,17 +3,16 @@
3
3
  //
4
4
 
5
5
  import { createKeyborg } from 'keyborg';
6
- import React, { createContext, type PropsWithChildren, useEffect, useMemo } from 'react';
6
+ import React, { type PropsWithChildren, createContext, useEffect, useMemo } from 'react';
7
7
 
8
- import { type Density, type Elevation, type ThemeFunction } from '@dxos/react-ui-types';
8
+ import { type Density, type Elevation, type ThemeFunction, type ThemeMode } from '@dxos/ui-types';
9
9
 
10
- import { TranslationsProvider, type TranslationsProviderProps } from './TranslationsProvider';
11
10
  import { type SafeAreaPadding, useSafeArea } from '../../hooks';
12
11
  import { hasIosKeyboard } from '../../util';
13
12
  import { DensityProvider } from '../DensityProvider';
14
13
  import { ElevationProvider } from '../ElevationProvider';
15
14
 
16
- export type ThemeMode = 'dark' | 'light';
15
+ import { TranslationsProvider, type TranslationsProviderProps } from './TranslationsProvider';
17
16
 
18
17
  export type ThemeContextValue = {
19
18
  tx: ThemeFunction<any>;
@@ -21,6 +20,7 @@ export type ThemeContextValue = {
21
20
  hasIosKeyboard: boolean;
22
21
  safeAreaPadding?: SafeAreaPadding;
23
22
  noCache?: boolean;
23
+ platform?: 'mobile' | 'desktop';
24
24
  };
25
25
 
26
26
  /**
@@ -40,7 +40,7 @@ export const ThemeProvider = ({
40
40
  fallback = null,
41
41
  resourceExtensions,
42
42
  appNs,
43
- tx = (_path, defaultClassName, _styleProps, ..._options) => defaultClassName,
43
+ tx = (_path, _styleProps, ..._options) => undefined,
44
44
  themeMode = 'dark',
45
45
  rootDensity = 'fine',
46
46
  ...rest
@@ -78,8 +78,8 @@ export const ThemeProvider = ({
78
78
 
79
79
  const handleInputModalityChange = (isUsingKeyboard: boolean) => {
80
80
  if (isUsingKeyboard) {
81
- document.body.setAttribute('data-is-keyboard', 'true');
81
+ document.body.setAttribute('data-w-keyboard', 'true');
82
82
  } else {
83
- document.body.removeAttribute('data-is-keyboard');
83
+ document.body.removeAttribute('data-w-keyboard');
84
84
  }
85
85
  };
@@ -2,30 +2,15 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import { enUS as dtLocaleEnUs, type Locale } from 'date-fns/locale';
6
- import i18Next, { type TFunction, type Resource } from 'i18next';
7
- import React, { type ReactNode, useEffect, createContext, useState, Suspense, useContext } from 'react';
5
+ import { type Locale, enUS as dtLocaleEnUs } from 'date-fns/locale';
6
+ import i18Next, { type Resource } from 'i18next';
7
+ import React, { type ReactNode, Suspense, createContext, useContext, useEffect, useState } from 'react';
8
8
  import { initReactI18next, useTranslation as useI18NextTranslation } from 'react-i18next';
9
9
 
10
10
  const initialLng = 'en-US';
11
11
  const initialNs = 'dxos-common';
12
12
  const initialDtLocale = dtLocaleEnUs;
13
13
 
14
- // TODO(thure): `Parameters<TFunction>` causes typechecking issues because `TFunction` has so many signatures.
15
- export type Label = string | [string, { ns: string; count?: number; defaultValue?: string }];
16
-
17
- export const isLabel = (o: any): o is Label =>
18
- typeof o === 'string' ||
19
- (Array.isArray(o) &&
20
- o.length === 2 &&
21
- typeof o[0] === 'string' &&
22
- !!o[1] &&
23
- typeof o[1] === 'object' &&
24
- 'ns' in o[1] &&
25
- typeof o[1].ns === 'string');
26
-
27
- export const toLocalizedString = (label: Label, t: TFunction) => (Array.isArray(label) ? t(...label) : label);
28
-
29
14
  export const resources = {
30
15
  [initialLng]: {
31
16
  [initialNs]: {
@@ -2,7 +2,7 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- export * from './ThemeProvider';
6
- export { type Label, isLabel, toLocalizedString, useTranslation } from './TranslationsProvider';
5
+ export { type Label, isLabel, toLocalizedString } from '@dxos/ui-types';
7
6
 
8
- // TODO(burdon): Use `@internal` with barrel exports (rather than picking individual exports?)
7
+ export * from './ThemeProvider';
8
+ export { useTranslation } from './TranslationsProvider';
@@ -2,13 +2,13 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
7
6
  import React, { type ReactNode, useState } from 'react';
8
7
 
9
- import { Toast } from './Toast';
10
8
  import { withTheme } from '../../testing';
11
- import { Button } from '../Buttons';
9
+ import { Button } from '../Button';
10
+
11
+ import { Toast } from './Toast';
12
12
 
13
13
  type ActionTriggerProps = { altText: string; trigger: ReactNode };
14
14
 
@@ -44,15 +44,18 @@ const DefaultStory = ({ title, description, actionTriggers, openTrigger, closeTr
44
44
  );
45
45
  };
46
46
 
47
- export default {
48
- title: 'ui/react-ui-core/Toast',
49
- component: Toast,
47
+ const meta = {
48
+ title: 'ui/react-ui-core/components/Toast',
49
+ component: Toast as any,
50
50
  render: DefaultStory,
51
- decorators: [withTheme],
52
- parameters: { chromatic: { disableSnapshot: false } },
53
- };
51
+ decorators: [withTheme()],
52
+ } satisfies Meta<typeof DefaultStory>;
53
+
54
+ export default meta;
55
+
56
+ type Story = StoryObj<typeof meta>;
54
57
 
55
- export const Default = {
58
+ export const Default: Story = {
56
59
  args: {
57
60
  openTrigger: 'Open toast',
58
61
  title: 'This is a toast',
@@ -5,22 +5,22 @@
5
5
  import { Primitive } from '@radix-ui/react-primitive';
6
6
  import { Slot } from '@radix-ui/react-slot';
7
7
  import {
8
+ ToastAction as ToastActionPrimitive,
9
+ type ToastActionProps as ToastActionPrimitiveProps,
10
+ ToastClose as ToastClosePrimitive,
11
+ type ToastCloseProps as ToastClosePrimitiveProps,
12
+ ToastDescription as ToastDescriptionPrimitive,
13
+ type ToastDescriptionProps as ToastDescriptionPrimitiveProps,
8
14
  ToastProvider as ToastProviderPrimitive,
9
15
  type ToastProviderProps as ToastProviderPrimitiveProps,
10
- ToastViewport as ToastViewportPrimitive,
11
- type ToastViewportProps as ToastViewportPrimitiveProps,
12
16
  Root as ToastRootPrimitive,
13
17
  type ToastProps as ToastRootPrimitiveProps,
14
18
  ToastTitle as ToastTitlePrimitive,
15
19
  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,
20
+ ToastViewport as ToastViewportPrimitive,
21
+ type ToastViewportProps as ToastViewportPrimitiveProps,
22
22
  } from '@radix-ui/react-toast';
23
- import React, { type ComponentPropsWithRef, forwardRef, type FunctionComponent } from 'react';
23
+ import React, { type ComponentPropsWithRef, type FunctionComponent, forwardRef } from 'react';
24
24
 
25
25
  import { useThemeContext } from '../../hooks';
26
26
  import { type ThemedClassName } from '../../util';
@@ -34,9 +34,7 @@ type ToastViewportProps = ThemedClassName<ToastViewportPrimitiveProps>;
34
34
 
35
35
  const ToastViewport = forwardRef<HTMLOListElement, ToastViewportProps>(({ classNames, ...props }, forwardedRef) => {
36
36
  const { tx } = useThemeContext();
37
- return (
38
- <ToastViewportPrimitive className={tx('toast.viewport', 'toast-viewport', {}, classNames)} ref={forwardedRef} />
39
- );
37
+ return <ToastViewportPrimitive className={tx('toast.viewport', {}, classNames)} ref={forwardedRef} />;
40
38
  });
41
39
 
42
40
  type ToastRootProps = ThemedClassName<ToastRootPrimitiveProps>;
@@ -44,7 +42,7 @@ type ToastRootProps = ThemedClassName<ToastRootPrimitiveProps>;
44
42
  const ToastRoot = forwardRef<HTMLLIElement, ToastRootProps>(({ classNames, children, ...props }, forwardedRef) => {
45
43
  const { tx } = useThemeContext();
46
44
  return (
47
- <ToastRootPrimitive {...props} className={tx('toast.root', 'toast', {}, classNames)} ref={forwardedRef}>
45
+ <ToastRootPrimitive {...props} className={tx('toast.root', {}, classNames)} ref={forwardedRef}>
48
46
  <ElevationProvider elevation='toast'>{children}</ElevationProvider>
49
47
  </ToastRootPrimitive>
50
48
  );
@@ -54,8 +52,8 @@ type ToastBodyProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.div
54
52
 
55
53
  const ToastBody = forwardRef<HTMLDivElement, ToastBodyProps>(({ asChild, classNames, ...props }, forwardedRef) => {
56
54
  const { tx } = useThemeContext();
57
- const Root = asChild ? Slot : Primitive.div;
58
- return <Root {...props} className={tx('toast.body', 'toast__body', {}, classNames)} ref={forwardedRef} />;
55
+ const Comp = asChild ? Slot : Primitive.div;
56
+ return <Comp {...props} className={tx('toast.body', {}, classNames)} ref={forwardedRef} />;
59
57
  });
60
58
 
61
59
  type ToastTitleProps = ThemedClassName<ToastTitlePrimitiveProps>;
@@ -63,8 +61,8 @@ type ToastTitleProps = ThemedClassName<ToastTitlePrimitiveProps>;
63
61
  const ToastTitle = forwardRef<HTMLHeadingElement, ToastTitleProps>(
64
62
  ({ asChild, classNames, ...props }, forwardedRef) => {
65
63
  const { tx } = useThemeContext();
66
- const Root = asChild ? Slot : ToastTitlePrimitive;
67
- return <Root {...props} className={tx('toast.title', 'toast__title', {}, classNames)} ref={forwardedRef} />;
64
+ const Comp = asChild ? Slot : ToastTitlePrimitive;
65
+ return <Comp {...props} className={tx('toast.title', {}, classNames)} ref={forwardedRef} />;
68
66
  },
69
67
  );
70
68
 
@@ -73,10 +71,8 @@ type ToastDescriptionProps = ThemedClassName<ToastDescriptionPrimitiveProps>;
73
71
  const ToastDescription = forwardRef<HTMLParagraphElement, ToastDescriptionProps>(
74
72
  ({ asChild, classNames, ...props }, forwardedRef) => {
75
73
  const { tx } = useThemeContext();
76
- const Root = asChild ? Slot : ToastDescriptionPrimitive;
77
- return (
78
- <Root {...props} className={tx('toast.description', 'toast__description', {}, classNames)} ref={forwardedRef} />
79
- );
74
+ const Comp = asChild ? Slot : ToastDescriptionPrimitive;
75
+ return <Comp {...props} className={tx('toast.description', {}, classNames)} ref={forwardedRef} />;
80
76
  },
81
77
  );
82
78
 
@@ -85,8 +81,8 @@ type ToastActionsProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.
85
81
  const ToastActions = forwardRef<HTMLDivElement, ToastActionsProps>(
86
82
  ({ asChild, classNames, ...props }, forwardedRef) => {
87
83
  const { tx } = useThemeContext();
88
- const Root = asChild ? Slot : Primitive.div;
89
- return <Root {...props} className={tx('toast.actions', 'toast__actions', {}, classNames)} ref={forwardedRef} />;
84
+ const Comp = asChild ? Slot : Primitive.div;
85
+ return <Comp {...props} className={tx('toast.actions', {}, classNames)} ref={forwardedRef} />;
90
86
  },
91
87
  );
92
88
 
@@ -2,16 +2,16 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
7
6
  import React from 'react';
8
7
 
9
- import { Toolbar } from './Toolbar';
10
8
  import { withTheme } from '../../testing';
11
- import { Toggle } from '../Buttons';
9
+ import { Toggle } from '../Button';
12
10
  import { Icon } from '../Icon';
13
11
  import { Select } from '../Select';
14
12
 
13
+ import { Toolbar } from './Toolbar';
14
+
15
15
  type StorybookToolbarProps = {};
16
16
 
17
17
  const DefaultStory = (props: StorybookToolbarProps) => {
@@ -29,6 +29,7 @@ const DefaultStory = (props: StorybookToolbarProps) => {
29
29
  <Select.Option value={'b'}>B</Select.Option>
30
30
  <Select.Option value={'c'}>C</Select.Option>
31
31
  </Select.Viewport>
32
+ <Select.Arrow />
32
33
  </Select.Content>
33
34
  </Select.Portal>
34
35
  </Select.Root>
@@ -62,21 +63,22 @@ const DefaultStory = (props: StorybookToolbarProps) => {
62
63
  </Toolbar.Button>
63
64
  <Toolbar.Separator />
64
65
  <Toolbar.Button>Test</Toolbar.Button>
65
- <Toolbar.Button>
66
- <Icon icon='ph--arrow-clockwise--regular' />
67
- </Toolbar.Button>
66
+ <Toolbar.IconButton icon='ph--arrow-clockwise--regular' label='Refresh' iconOnly />
68
67
  </Toolbar.Root>
69
68
  );
70
69
  };
71
70
 
72
- export default {
73
- title: 'ui/react-ui-core/Toolbar',
74
- component: Toolbar,
71
+ const meta = {
72
+ title: 'ui/react-ui-core/components/Toolbar',
73
+ component: Toolbar as any,
75
74
  render: DefaultStory,
76
- decorators: [withTheme],
77
- parameters: { chromatic: { disableSnapshot: false } },
78
- };
75
+ decorators: [withTheme()],
76
+ } satisfies Meta<typeof DefaultStory>;
77
+
78
+ export default meta;
79
+
80
+ type Story = StoryObj<typeof meta>;
79
81
 
80
- export const Default = {
82
+ export const Default: Story = {
81
83
  args: {},
82
84
  };
@@ -2,43 +2,96 @@
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, { forwardRef } from 'react';
9
+ import React, { Fragment, forwardRef } from 'react';
10
+ import { useTranslation } from 'react-i18next';
11
+
12
+ import { composableProps, type ToolbarStyleProps } from '@dxos/ui-theme';
13
+ import { type SlottableProps } from '@dxos/ui-types';
8
14
 
9
15
  import { useThemeContext } from '../../hooks';
16
+ import { translationKey } from '../../translations';
10
17
  import { type ThemedClassName } from '../../util';
11
18
  import {
12
19
  Button,
13
20
  ButtonGroup,
14
21
  type ButtonGroupProps,
15
22
  type ButtonProps,
23
+ IconButton,
24
+ type IconButtonProps,
16
25
  Toggle,
17
26
  type ToggleGroupItemProps,
18
27
  type ToggleProps,
19
- IconButton,
20
- type IconButtonProps,
21
- } from '../Buttons';
28
+ } from '../Button';
22
29
  import { Link, type LinkProps } from '../Link';
30
+ import { DropdownMenu } from '../Menu';
23
31
  import { Separator, type SeparatorProps } from '../Separator';
24
32
 
25
- type ToolbarRootProps = ThemedClassName<ToolbarPrimitive.ToolbarProps> & { layoutManaged?: boolean };
33
+ //
34
+ // Root
35
+ //
26
36
 
37
+ type ToolbarRootProps = ThemedClassName<
38
+ ToolbarPrimitive.ToolbarProps &
39
+ ToolbarStyleProps & {
40
+ textBlockWidth?: boolean;
41
+ }
42
+ >;
43
+
44
+ // TODO(burdon): Implement asChild property.
27
45
  const ToolbarRoot = forwardRef<HTMLDivElement, ToolbarRootProps>(
28
- ({ classNames, children, layoutManaged, ...props }, forwardedRef) => {
46
+ (
47
+ { children, density, disabled, layoutManaged, textBlockWidth: textBlockWidthProp, orientation, ...props },
48
+ forwardedRef,
49
+ ) => {
50
+ const { className, dir: _, ...rest } = composableProps(props);
29
51
  const { tx } = useThemeContext();
52
+ const InnerRoot = textBlockWidthProp ? 'div' : Fragment;
53
+ const innerRootProps = textBlockWidthProp
54
+ ? {
55
+ role: 'none',
56
+ className: tx('toolbar.inner', { layoutManaged }, className),
57
+ }
58
+ : {};
59
+
30
60
  return (
31
61
  <ToolbarPrimitive.Root
32
- {...props}
33
- className={tx('toolbar.root', 'toolbar', { layoutManaged }, classNames)}
62
+ {...rest}
63
+ orientation={orientation}
64
+ data-arrow-keys={orientation === 'vertical' ? 'up down' : 'left right'}
65
+ className={tx('toolbar.root', { density, disabled, layoutManaged }, className)}
34
66
  ref={forwardedRef}
35
67
  >
36
- {children}
68
+ <InnerRoot {...innerRootProps}>{children}</InnerRoot>
37
69
  </ToolbarPrimitive.Root>
38
70
  );
39
71
  },
40
72
  );
41
73
 
74
+ //
75
+ // Text
76
+ //
77
+
78
+ type ToolbarTextProps = SlottableProps<HTMLDivElement>;
79
+
80
+ const ToolbarText = forwardRef<HTMLDivElement, ToolbarTextProps>(({ children, asChild, ...props }, forwardedRef) => {
81
+ const { className, ...rest } = composableProps(props);
82
+ const Comp = asChild ? Slot : Primitive.div;
83
+ const { tx } = useThemeContext();
84
+ return (
85
+ <Comp {...rest} className={tx('toolbar.text', {}, className)} ref={forwardedRef}>
86
+ {children}
87
+ </Comp>
88
+ );
89
+ });
90
+
91
+ //
92
+ // Button
93
+ //
94
+
42
95
  type ToolbarButtonProps = ButtonProps;
43
96
 
44
97
  const ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>((props, forwardedRef) => {
@@ -49,12 +102,16 @@ const ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>((props,
49
102
  );
50
103
  });
51
104
 
105
+ //
106
+ // IconButton
107
+ //
108
+
52
109
  type ToolbarIconButtonProps = IconButtonProps;
53
110
 
54
111
  const ToolbarIconButton = forwardRef<HTMLButtonElement, ToolbarIconButtonProps>((props, forwardedRef) => {
55
112
  return (
56
113
  <ToolbarPrimitive.Button asChild>
57
- <IconButton {...props} ref={forwardedRef} />
114
+ <IconButton {...props} noTooltip ref={forwardedRef} />
58
115
  </ToolbarPrimitive.Button>
59
116
  );
60
117
  });
@@ -69,6 +126,10 @@ const ToolbarToggle = forwardRef<HTMLButtonElement, ToolbarToggleProps>((props,
69
126
  );
70
127
  });
71
128
 
129
+ //
130
+ // Link
131
+ //
132
+
72
133
  type ToolbarLinkProps = LinkProps;
73
134
 
74
135
  const ToolbarLink = forwardRef<HTMLAnchorElement, ToolbarLinkProps>((props, forwardedRef) => {
@@ -85,6 +146,10 @@ type ToolbarToggleGroupProps = (
85
146
  ) &
86
147
  ButtonGroupProps;
87
148
 
149
+ //
150
+ // ToggleGroup
151
+ //
152
+
88
153
  const ToolbarToggleGroup = forwardRef<HTMLDivElement, ToolbarToggleGroupProps>(
89
154
  ({ classNames, children, elevation, ...props }, forwardedRef) => {
90
155
  return (
@@ -113,16 +178,31 @@ const ToolbarToggleGroupIconItem = forwardRef<HTMLButtonElement, ToolbarToggleGr
113
178
  ({ variant, density, elevation, classNames, icon, label, iconOnly, ...props }, forwardedRef) => {
114
179
  return (
115
180
  <ToolbarPrimitive.ToolbarToggleItem {...props} asChild>
116
- <IconButton {...{ variant, density, elevation, classNames, icon, label, iconOnly }} ref={forwardedRef} />
181
+ <IconButton
182
+ {...{
183
+ variant,
184
+ density,
185
+ elevation,
186
+ classNames,
187
+ icon,
188
+ label,
189
+ iconOnly,
190
+ }}
191
+ ref={forwardedRef}
192
+ />
117
193
  </ToolbarPrimitive.ToolbarToggleItem>
118
194
  );
119
195
  },
120
196
  );
121
197
 
198
+ //
199
+ // Separator
200
+ //
201
+
122
202
  type ToolbarSeparatorProps = SeparatorProps & { variant?: 'gap' | 'line' };
123
203
 
124
204
  const ToolbarSeparator = forwardRef<HTMLDivElement, ToolbarSeparatorProps>(
125
- ({ variant = 'line', ...props }, forwardedRef) => {
205
+ ({ variant = 'gap', ...props }, forwardedRef) => {
126
206
  return variant === 'line' ? (
127
207
  <ToolbarPrimitive.Separator asChild>
128
208
  <Separator {...props} ref={forwardedRef} />
@@ -133,8 +213,109 @@ const ToolbarSeparator = forwardRef<HTMLDivElement, ToolbarSeparatorProps>(
133
213
  },
134
214
  );
135
215
 
216
+ //
217
+ // DragHandle
218
+ //
219
+
220
+ type ToolbarDragHandleProps = { testId?: string; label?: string };
221
+
222
+ const ToolbarDragHandle = forwardRef<HTMLButtonElement, ToolbarDragHandleProps>(
223
+ ({ testId = 'drag-handle', label }, forwardedRef) => {
224
+ const { t } = useTranslation(translationKey);
225
+ return (
226
+ <ToolbarIconButton
227
+ data-testid={testId}
228
+ noTooltip
229
+ iconOnly
230
+ icon='ph--dots-six-vertical--regular'
231
+ variant='ghost'
232
+ label={label ?? t('toolbar drag handle label')}
233
+ classNames='cursor-pointer'
234
+ size={5}
235
+ disabled={!forwardedRef}
236
+ ref={forwardedRef}
237
+ />
238
+ );
239
+ },
240
+ );
241
+
242
+ //
243
+ // CloseIconButton
244
+ //
245
+
246
+ type ToolbarCloseIconButtonProps = { onClick?: () => void; label?: string };
247
+
248
+ const ToolbarCloseIconButton = forwardRef<HTMLButtonElement, ToolbarCloseIconButtonProps>(
249
+ ({ onClick, label }, forwardedRef) => {
250
+ const { t } = useTranslation(translationKey);
251
+ return (
252
+ <ToolbarIconButton
253
+ iconOnly
254
+ icon='ph--x--regular'
255
+ variant='ghost'
256
+ label={label ?? t('toolbar close label')}
257
+ classNames='cursor-pointer'
258
+ size={5}
259
+ onClick={onClick}
260
+ ref={forwardedRef}
261
+ />
262
+ );
263
+ },
264
+ );
265
+
266
+ //
267
+ // Menu
268
+ //
269
+
270
+ type ToolbarMenuItem<T extends any | void = void> = {
271
+ label: string;
272
+ onClick: (context: T) => void;
273
+ };
274
+
275
+ type ToolbarMenuProps<T extends any | void = void> = {
276
+ context?: T;
277
+ items?: ToolbarMenuItem<T>[];
278
+ };
279
+
280
+ // TODO(burdon): Make slottable.
281
+ const ToolbarMenu = <T extends any | void = void>({ context, items }: ToolbarMenuProps<T>) => {
282
+ const { t } = useTranslation(translationKey);
283
+
284
+ return (
285
+ <DropdownMenu.Root>
286
+ <DropdownMenu.Trigger disabled={!items?.length} asChild>
287
+ <ToolbarIconButton
288
+ iconOnly
289
+ variant='ghost'
290
+ icon='ph--dots-three-vertical--regular'
291
+ label={t('toolbar menu label')}
292
+ />
293
+ </DropdownMenu.Trigger>
294
+ {(items?.length ?? 0) > 0 && (
295
+ <DropdownMenu.Portal>
296
+ <DropdownMenu.Content>
297
+ <DropdownMenu.Viewport>
298
+ {items?.map(({ label, onClick: onSelect }, index) => (
299
+ <DropdownMenu.Item key={index} onSelect={() => onSelect(context as T)}>
300
+ {label}
301
+ </DropdownMenu.Item>
302
+ ))}
303
+ </DropdownMenu.Viewport>
304
+ <DropdownMenu.Arrow />
305
+ </DropdownMenu.Content>
306
+ </DropdownMenu.Portal>
307
+ )}
308
+ </DropdownMenu.Root>
309
+ );
310
+ };
311
+
312
+ //
313
+ // Toolbar
314
+ //
315
+
136
316
  export const Toolbar = {
137
317
  Root: ToolbarRoot,
318
+ Text: ToolbarText,
138
319
  Button: ToolbarButton,
139
320
  IconButton: ToolbarIconButton,
140
321
  Link: ToolbarLink,
@@ -143,10 +324,14 @@ export const Toolbar = {
143
324
  ToggleGroupItem: ToolbarToggleGroupItem,
144
325
  ToggleGroupIconItem: ToolbarToggleGroupIconItem,
145
326
  Separator: ToolbarSeparator,
327
+ DragHandle: ToolbarDragHandle,
328
+ CloseIconButton: ToolbarCloseIconButton,
329
+ Menu: ToolbarMenu,
146
330
  };
147
331
 
148
332
  export type {
149
333
  ToolbarRootProps,
334
+ ToolbarTextProps,
150
335
  ToolbarButtonProps,
151
336
  ToolbarIconButtonProps,
152
337
  ToolbarLinkProps,
@@ -155,4 +340,8 @@ export type {
155
340
  ToolbarToggleGroupItemProps,
156
341
  ToolbarToggleGroupIconItemProps,
157
342
  ToolbarSeparatorProps,
343
+ ToolbarDragHandleProps,
344
+ ToolbarCloseIconButtonProps,
345
+ ToolbarMenuItem,
346
+ ToolbarMenuProps,
158
347
  };