@dxos/react-ui 0.8.4-main.dedc0f3 → 0.8.4-main.e250131250

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