@dxos/react-ui 0.8.4-main.3eb6e50203 → 0.8.4-main.3fbcb4aa9b

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