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

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 (371) hide show
  1. package/dist/lib/browser/chunk-6DTBPJE4.mjs +774 -0
  2. package/dist/lib/browser/chunk-6DTBPJE4.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +3202 -59
  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 +66 -49
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/chunk-JKHQSGNU.mjs +776 -0
  9. package/dist/lib/node-esm/chunk-JKHQSGNU.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +3202 -59
  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 +66 -49
  14. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  15. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +7 -0
  16. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +1 -1
  17. package/dist/types/src/components/Avatars/Avatar.d.ts +1 -1
  18. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  19. package/dist/types/src/components/Avatars/Avatar.stories.d.ts +5 -31
  20. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  21. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts +5 -11
  22. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  23. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +1 -1
  24. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  25. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts +8 -20
  26. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  27. package/dist/types/src/components/{Buttons → Button}/Button.d.ts +2 -2
  28. package/dist/types/src/components/Button/Button.d.ts.map +1 -0
  29. package/dist/types/src/components/Button/Button.stories.d.ts +17 -0
  30. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -0
  31. package/dist/types/src/components/{Buttons → Button}/IconButton.d.ts +4 -4
  32. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -0
  33. package/dist/types/src/components/Button/IconButton.stories.d.ts +13 -0
  34. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -0
  35. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -0
  36. package/dist/types/src/components/Button/Toggle.stories.d.ts +16 -0
  37. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -0
  38. package/dist/types/src/components/Button/ToggleGroup.d.ts +27 -0
  39. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -0
  40. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +27 -0
  41. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -0
  42. package/dist/types/src/components/Button/index.d.ts.map +1 -0
  43. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  44. package/dist/types/src/components/Clipboard/CopyButton.d.ts +1 -1
  45. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  46. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts +1 -1
  47. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  48. package/dist/types/src/components/{Dialogs → Dialog}/AlertDialog.d.ts +1 -1
  49. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -0
  50. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts +11 -0
  51. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -0
  52. package/dist/types/src/components/Dialog/Dialog.d.ts +46 -0
  53. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -0
  54. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +27 -0
  55. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -0
  56. package/dist/types/src/components/Dialog/index.d.ts.map +1 -0
  57. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
  58. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  59. package/dist/types/src/components/Icon/Icon.d.ts +2 -2
  60. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  61. package/dist/types/src/components/Icon/Icon.stories.d.ts +17 -0
  62. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -0
  63. package/dist/types/src/components/Input/Input.d.ts +6 -5
  64. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  65. package/dist/types/src/components/Input/Input.stories.d.ts +12 -13
  66. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  67. package/dist/types/src/components/Link/Link.stories.d.ts +8 -8
  68. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  69. package/dist/types/src/components/{Lists → List}/List.d.ts +3 -3
  70. package/dist/types/src/components/List/List.d.ts.map +1 -0
  71. package/dist/types/src/components/List/List.stories.d.ts +14 -0
  72. package/dist/types/src/components/List/List.stories.d.ts.map +1 -0
  73. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -0
  74. package/dist/types/src/components/{Lists → List}/Tree.d.ts +1 -1
  75. package/dist/types/src/components/List/Tree.d.ts.map +1 -0
  76. package/dist/types/src/components/List/Tree.stories.d.ts +15 -0
  77. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -0
  78. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -0
  79. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts +1 -1
  80. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts.map +1 -1
  81. package/dist/types/src/components/List/Treegrid.stories.d.ts +12 -0
  82. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -0
  83. package/dist/types/src/components/List/index.d.ts.map +1 -0
  84. package/dist/types/src/components/Main/Main.d.ts +17 -27
  85. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  86. package/dist/types/src/components/Main/Main.stories.d.ts +6 -7
  87. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  88. package/dist/types/src/components/{Menus → Menu}/ContextMenu.d.ts +6 -6
  89. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -0
  90. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts +12 -0
  91. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -0
  92. package/dist/types/src/components/{Menus → Menu}/DropdownMenu.d.ts +8 -8
  93. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
  94. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +15 -0
  95. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
  96. package/dist/types/src/components/Menu/index.d.ts.map +1 -0
  97. package/dist/types/src/components/Message/Message.d.ts +1 -1
  98. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  99. package/dist/types/src/components/Message/Message.stories.d.ts +8 -17
  100. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  101. package/dist/types/src/components/Popover/Popover.d.ts +3 -3
  102. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  103. package/dist/types/src/components/Popover/Popover.stories.d.ts +6 -34
  104. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  105. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +25 -26
  106. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  107. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +37 -25
  108. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  109. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +39 -0
  110. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -0
  111. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +19 -0
  112. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -0
  113. package/dist/types/src/components/ScrollContainer/index.d.ts +2 -0
  114. package/dist/types/src/components/ScrollContainer/index.d.ts.map +1 -0
  115. package/dist/types/src/components/Select/Select.d.ts +10 -10
  116. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  117. package/dist/types/src/components/Select/Select.stories.d.ts +4 -9
  118. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  119. package/dist/types/src/components/Separator/Separator.d.ts +1 -1
  120. package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
  121. package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  122. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
  123. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  124. package/dist/types/src/components/Skeleton/index.d.ts +2 -0
  125. package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
  126. package/dist/types/src/components/Splitter/Splitter.d.ts +26 -0
  127. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
  128. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
  129. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
  130. package/dist/types/src/components/Splitter/index.d.ts +2 -0
  131. package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
  132. package/dist/types/src/components/Status/Status.stories.d.ts +2 -8
  133. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  134. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  135. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  136. package/dist/types/src/components/Tag/Tag.stories.d.ts +12 -12
  137. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  138. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +3 -3
  139. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  140. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +1 -8
  141. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  142. package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
  143. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  144. package/dist/types/src/components/Toast/Toast.d.ts +5 -5
  145. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  146. package/dist/types/src/components/Toast/Toast.stories.d.ts +6 -44
  147. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  148. package/dist/types/src/components/Toolbar/Toolbar.d.ts +20 -19
  149. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  150. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +6 -50
  151. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  152. package/dist/types/src/components/Tooltip/Tooltip.d.ts +2 -4
  153. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  154. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +8 -61
  155. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  156. package/dist/types/src/components/index.d.ts +7 -4
  157. package/dist/types/src/components/index.d.ts.map +1 -1
  158. package/dist/types/src/exemplars/generics.stories.d.ts +17 -0
  159. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
  160. package/dist/types/src/exemplars/slot.stories.d.ts +14 -0
  161. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
  162. package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
  163. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
  164. package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
  165. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  166. package/dist/types/src/hooks/useElevationContext.d.ts +1 -1
  167. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  168. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  169. package/dist/types/src/hooks/useVisualViewport.d.ts +2 -2
  170. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  171. package/dist/types/src/index.d.ts +2 -1
  172. package/dist/types/src/index.d.ts.map +1 -1
  173. package/dist/types/src/playground/Controls.stories.d.ts +5 -9
  174. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  175. package/dist/types/src/playground/Custom.stories.d.ts +12 -4
  176. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  177. package/dist/types/src/playground/Typography.stories.d.ts +5 -11
  178. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  179. package/dist/types/src/primitives/Container/Container.d.ts +23 -0
  180. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
  181. package/dist/types/src/primitives/Container/Container.stories.d.ts +11 -0
  182. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
  183. package/dist/types/src/primitives/Container/Layout.d.ts +18 -0
  184. package/dist/types/src/primitives/Container/Layout.d.ts.map +1 -0
  185. package/dist/types/src/primitives/Container/Layout.stories.d.ts +10 -0
  186. package/dist/types/src/primitives/Container/Layout.stories.d.ts.map +1 -0
  187. package/dist/types/src/primitives/Container/index.d.ts +3 -0
  188. package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
  189. package/dist/types/src/primitives/Flex/Flex.d.ts +8 -0
  190. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
  191. package/dist/types/src/primitives/Flex/index.d.ts +2 -0
  192. package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
  193. package/dist/types/src/primitives/index.d.ts +3 -0
  194. package/dist/types/src/primitives/index.d.ts.map +1 -0
  195. package/dist/types/src/testing/decorators/index.d.ts +2 -1
  196. package/dist/types/src/testing/decorators/index.d.ts.map +1 -1
  197. package/dist/types/src/testing/decorators/withLayout.d.ts +15 -0
  198. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -0
  199. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +12 -0
  200. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -0
  201. package/dist/types/src/testing/decorators/withTheme.d.ts +5 -1
  202. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  203. package/dist/types/src/util/index.d.ts +2 -1
  204. package/dist/types/src/util/index.d.ts.map +1 -1
  205. package/dist/types/src/util/usePx.d.ts +8 -0
  206. package/dist/types/src/util/usePx.d.ts.map +1 -0
  207. package/dist/types/tsconfig.tsbuildinfo +1 -1
  208. package/package.json +39 -31
  209. package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +10 -12
  210. package/src/components/Avatars/Avatar.stories.tsx +23 -14
  211. package/src/components/Avatars/Avatar.tsx +6 -13
  212. package/src/components/Avatars/AvatarGroup.stories.tsx +12 -8
  213. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +19 -14
  214. package/src/components/Breadcrumb/Breadcrumb.tsx +6 -32
  215. package/src/components/{Buttons → Button}/Button.stories.tsx +9 -10
  216. package/src/components/{Buttons → Button}/Button.tsx +2 -8
  217. package/src/components/{Buttons → Button}/IconButton.stories.tsx +13 -10
  218. package/src/components/{Buttons → Button}/IconButton.tsx +23 -16
  219. package/src/components/Button/Toggle.stories.tsx +37 -0
  220. package/src/components/{Buttons → Button}/ToggleGroup.stories.tsx +12 -9
  221. package/src/components/{Buttons → Button}/ToggleGroup.tsx +17 -4
  222. package/src/components/Clipboard/ClipboardProvider.tsx +1 -1
  223. package/src/components/Clipboard/CopyButton.tsx +6 -5
  224. package/src/components/DensityProvider/DensityProvider.tsx +2 -2
  225. package/src/components/{Dialogs → Dialog}/AlertDialog.stories.tsx +17 -14
  226. package/src/components/{Dialogs → Dialog}/AlertDialog.tsx +16 -21
  227. package/src/components/Dialog/Dialog.stories.tsx +101 -0
  228. package/src/components/{Dialogs → Dialog}/Dialog.tsx +182 -57
  229. package/src/components/ElevationProvider/ElevationProvider.tsx +2 -2
  230. package/src/components/Icon/Icon.stories.tsx +113 -0
  231. package/src/components/Icon/Icon.tsx +3 -3
  232. package/src/components/Input/Input.stories.tsx +22 -23
  233. package/src/components/Input/Input.tsx +38 -44
  234. package/src/components/Link/Link.stories.tsx +12 -8
  235. package/src/components/Link/Link.tsx +1 -1
  236. package/src/components/{Lists → List}/List.stories.tsx +34 -28
  237. package/src/components/{Lists → List}/List.tsx +23 -25
  238. package/src/components/{Lists → List}/ListDropIndicator.tsx +1 -1
  239. package/src/components/{Lists → List}/Tree.stories.tsx +13 -10
  240. package/src/components/{Lists → List}/Tree.tsx +4 -3
  241. package/src/components/{Lists → List}/TreeDropIndicator.tsx +1 -1
  242. package/src/components/{Lists → List}/Treegrid.stories.tsx +14 -8
  243. package/src/components/{Lists → List}/Treegrid.tsx +61 -25
  244. package/src/components/Main/Main.stories.tsx +56 -27
  245. package/src/components/Main/Main.tsx +166 -94
  246. package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +13 -10
  247. package/src/components/{Menus → Menu}/ContextMenu.tsx +8 -31
  248. package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +14 -11
  249. package/src/components/{Menus → Menu}/DropdownMenu.tsx +109 -78
  250. package/src/components/Message/Message.stories.tsx +14 -10
  251. package/src/components/Message/Message.tsx +34 -23
  252. package/src/components/Popover/Popover.stories.tsx +14 -11
  253. package/src/components/Popover/Popover.tsx +67 -48
  254. package/src/components/ScrollArea/ScrollArea.stories.tsx +163 -34
  255. package/src/components/ScrollArea/ScrollArea.tsx +80 -82
  256. package/src/components/ScrollArea/index.ts +1 -1
  257. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +70 -0
  258. package/src/components/ScrollContainer/ScrollContainer.tsx +238 -0
  259. package/src/components/ScrollContainer/index.ts +5 -0
  260. package/src/components/Select/Select.stories.tsx +15 -12
  261. package/src/components/Select/Select.tsx +18 -33
  262. package/src/components/Separator/Separator.tsx +1 -1
  263. package/src/components/Skeleton/Skeleton.stories.tsx +52 -0
  264. package/src/components/Skeleton/Skeleton.tsx +26 -0
  265. package/src/components/Skeleton/index.ts +5 -0
  266. package/src/components/Splitter/Splitter.stories.tsx +73 -0
  267. package/src/components/Splitter/Splitter.tsx +123 -0
  268. package/src/components/Splitter/index.ts +5 -0
  269. package/src/components/Status/Status.stories.tsx +11 -8
  270. package/src/components/Status/Status.tsx +2 -2
  271. package/src/components/Tag/Tag.stories.tsx +21 -12
  272. package/src/components/Tag/Tag.tsx +2 -7
  273. package/src/components/ThemeProvider/ThemeProvider.tsx +5 -5
  274. package/src/components/ThemeProvider/TranslationsProvider.tsx +3 -18
  275. package/src/components/ThemeProvider/index.ts +3 -3
  276. package/src/components/Toast/Toast.stories.tsx +14 -11
  277. package/src/components/Toast/Toast.tsx +15 -19
  278. package/src/components/Toolbar/Toolbar.stories.tsx +16 -14
  279. package/src/components/Toolbar/Toolbar.tsx +41 -10
  280. package/src/components/Tooltip/Tooltip.stories.tsx +18 -14
  281. package/src/components/Tooltip/Tooltip.tsx +29 -26
  282. package/src/components/index.ts +7 -4
  283. package/src/exemplars/generics.stories.tsx +44 -0
  284. package/src/exemplars/slot.stories.tsx +108 -0
  285. package/src/exemplars/tabster.stories.tsx +127 -0
  286. package/src/hooks/useDensityContext.ts +1 -1
  287. package/src/hooks/useElevationContext.ts +1 -1
  288. package/src/hooks/useSafeArea.ts +3 -2
  289. package/src/hooks/useVisualViewport.ts +4 -4
  290. package/src/index.ts +2 -1
  291. package/src/playground/Controls.stories.tsx +12 -9
  292. package/src/playground/Custom.stories.tsx +15 -26
  293. package/src/playground/Typography.stories.tsx +10 -8
  294. package/src/primitives/Container/Container.stories.tsx +67 -0
  295. package/src/primitives/Container/Container.tsx +79 -0
  296. package/src/primitives/Container/Layout.stories.tsx +57 -0
  297. package/src/primitives/Container/Layout.tsx +61 -0
  298. package/src/primitives/Container/index.ts +6 -0
  299. package/src/primitives/Flex/Flex.tsx +26 -0
  300. package/src/primitives/Flex/index.ts +5 -0
  301. package/src/primitives/index.ts +6 -0
  302. package/src/testing/decorators/index.ts +2 -1
  303. package/src/testing/decorators/withLayout.tsx +63 -0
  304. package/src/testing/decorators/{withSurfaceVariantsLayout.tsx → withLayoutVariants.tsx} +5 -5
  305. package/src/testing/decorators/withTheme.tsx +34 -0
  306. package/src/util/index.ts +3 -1
  307. package/src/util/usePx.ts +61 -0
  308. package/dist/lib/browser/chunk-2COVUP44.mjs +0 -4373
  309. package/dist/lib/browser/chunk-2COVUP44.mjs.map +0 -7
  310. package/dist/lib/node-esm/chunk-GHXHND5V.mjs +0 -4375
  311. package/dist/lib/node-esm/chunk-GHXHND5V.mjs.map +0 -7
  312. package/dist/types/src/components/Buttons/Button.d.ts.map +0 -1
  313. package/dist/types/src/components/Buttons/Button.stories.d.ts +0 -12
  314. package/dist/types/src/components/Buttons/Button.stories.d.ts.map +0 -1
  315. package/dist/types/src/components/Buttons/IconButton.d.ts.map +0 -1
  316. package/dist/types/src/components/Buttons/IconButton.stories.d.ts +0 -22
  317. package/dist/types/src/components/Buttons/IconButton.stories.d.ts.map +0 -1
  318. package/dist/types/src/components/Buttons/Toggle.d.ts.map +0 -1
  319. package/dist/types/src/components/Buttons/Toggle.stories.d.ts +0 -19
  320. package/dist/types/src/components/Buttons/Toggle.stories.d.ts.map +0 -1
  321. package/dist/types/src/components/Buttons/ToggleGroup.d.ts +0 -28
  322. package/dist/types/src/components/Buttons/ToggleGroup.d.ts.map +0 -1
  323. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts +0 -39
  324. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +0 -1
  325. package/dist/types/src/components/Buttons/index.d.ts.map +0 -1
  326. package/dist/types/src/components/Dialogs/AlertDialog.d.ts.map +0 -1
  327. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts +0 -43
  328. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +0 -1
  329. package/dist/types/src/components/Dialogs/Dialog.d.ts +0 -31
  330. package/dist/types/src/components/Dialogs/Dialog.d.ts.map +0 -1
  331. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts +0 -48
  332. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +0 -1
  333. package/dist/types/src/components/Dialogs/index.d.ts.map +0 -1
  334. package/dist/types/src/components/Lists/List.d.ts.map +0 -1
  335. package/dist/types/src/components/Lists/List.stories.d.ts +0 -37
  336. package/dist/types/src/components/Lists/List.stories.d.ts.map +0 -1
  337. package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +0 -1
  338. package/dist/types/src/components/Lists/Tree.d.ts.map +0 -1
  339. package/dist/types/src/components/Lists/Tree.stories.d.ts +0 -41
  340. package/dist/types/src/components/Lists/Tree.stories.d.ts.map +0 -1
  341. package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +0 -1
  342. package/dist/types/src/components/Lists/Treegrid.stories.d.ts +0 -10
  343. package/dist/types/src/components/Lists/Treegrid.stories.d.ts.map +0 -1
  344. package/dist/types/src/components/Lists/index.d.ts.map +0 -1
  345. package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
  346. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts +0 -50
  347. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +0 -1
  348. package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
  349. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts +0 -50
  350. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
  351. package/dist/types/src/components/Menus/index.d.ts.map +0 -1
  352. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts +0 -12
  353. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts.map +0 -1
  354. package/dist/types/src/util/ThemedClassName.d.ts +0 -5
  355. package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
  356. package/src/components/Buttons/Toggle.stories.tsx +0 -33
  357. package/src/components/Dialogs/Dialog.stories.tsx +0 -65
  358. package/src/testing/decorators/withTheme.ts +0 -25
  359. package/src/util/ThemedClassName.ts +0 -7
  360. /package/dist/types/src/components/{Buttons → Button}/Toggle.d.ts +0 -0
  361. /package/dist/types/src/components/{Buttons → Button}/index.d.ts +0 -0
  362. /package/dist/types/src/components/{Dialogs → Dialog}/index.d.ts +0 -0
  363. /package/dist/types/src/components/{Lists → List}/ListDropIndicator.d.ts +0 -0
  364. /package/dist/types/src/components/{Lists → List}/TreeDropIndicator.d.ts +0 -0
  365. /package/dist/types/src/components/{Lists → List}/index.d.ts +0 -0
  366. /package/dist/types/src/components/{Menus → Menu}/index.d.ts +0 -0
  367. /package/src/components/{Buttons → Button}/Toggle.tsx +0 -0
  368. /package/src/components/{Buttons → Button}/index.ts +0 -0
  369. /package/src/components/{Dialogs → Dialog}/index.ts +0 -0
  370. /package/src/components/{Lists → List}/index.ts +0 -0
  371. /package/src/components/{Menus → Menu}/index.ts +0 -0
@@ -2,13 +2,13 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
7
6
  import React, { type ReactNode, useState } from 'react';
8
7
 
9
- import { Toast } from './Toast';
10
8
  import { withTheme } from '../../testing';
11
- import { Button } from '../Buttons';
9
+ import { Button } from '../Button';
10
+
11
+ import { Toast } from './Toast';
12
12
 
13
13
  type ActionTriggerProps = { altText: string; trigger: ReactNode };
14
14
 
@@ -44,15 +44,18 @@ const DefaultStory = ({ title, description, actionTriggers, openTrigger, closeTr
44
44
  );
45
45
  };
46
46
 
47
- export default {
48
- title: 'ui/react-ui-core/Toast',
49
- component: Toast,
47
+ const meta = {
48
+ title: 'ui/react-ui-core/components/Toast',
49
+ component: Toast as any,
50
50
  render: DefaultStory,
51
- decorators: [withTheme],
52
- parameters: { chromatic: { disableSnapshot: false } },
53
- };
51
+ decorators: [withTheme()],
52
+ } satisfies Meta<typeof DefaultStory>;
53
+
54
+ export default meta;
55
+
56
+ type Story = StoryObj<typeof meta>;
54
57
 
55
- export const Default = {
58
+ export const Default: Story = {
56
59
  args: {
57
60
  openTrigger: 'Open toast',
58
61
  title: 'This is a toast',
@@ -5,22 +5,22 @@
5
5
  import { Primitive } from '@radix-ui/react-primitive';
6
6
  import { Slot } from '@radix-ui/react-slot';
7
7
  import {
8
+ ToastAction as ToastActionPrimitive,
9
+ type ToastActionProps as ToastActionPrimitiveProps,
10
+ ToastClose as ToastClosePrimitive,
11
+ type ToastCloseProps as ToastClosePrimitiveProps,
12
+ ToastDescription as ToastDescriptionPrimitive,
13
+ type ToastDescriptionProps as ToastDescriptionPrimitiveProps,
8
14
  ToastProvider as ToastProviderPrimitive,
9
15
  type ToastProviderProps as ToastProviderPrimitiveProps,
10
- ToastViewport as ToastViewportPrimitive,
11
- type ToastViewportProps as ToastViewportPrimitiveProps,
12
16
  Root as ToastRootPrimitive,
13
17
  type ToastProps as ToastRootPrimitiveProps,
14
18
  ToastTitle as ToastTitlePrimitive,
15
19
  type ToastTitleProps as ToastTitlePrimitiveProps,
16
- ToastDescription as ToastDescriptionPrimitive,
17
- type ToastDescriptionProps as ToastDescriptionPrimitiveProps,
18
- ToastAction as ToastActionPrimitive,
19
- type ToastActionProps as ToastActionPrimitiveProps,
20
- ToastClose as ToastClosePrimitive,
21
- type ToastCloseProps as ToastClosePrimitiveProps,
20
+ ToastViewport as ToastViewportPrimitive,
21
+ type ToastViewportProps as ToastViewportPrimitiveProps,
22
22
  } from '@radix-ui/react-toast';
23
- import React, { type ComponentPropsWithRef, forwardRef, type FunctionComponent } from 'react';
23
+ import React, { type ComponentPropsWithRef, type FunctionComponent, forwardRef } from 'react';
24
24
 
25
25
  import { useThemeContext } from '../../hooks';
26
26
  import { type ThemedClassName } from '../../util';
@@ -34,9 +34,7 @@ type ToastViewportProps = ThemedClassName<ToastViewportPrimitiveProps>;
34
34
 
35
35
  const ToastViewport = forwardRef<HTMLOListElement, ToastViewportProps>(({ classNames, ...props }, forwardedRef) => {
36
36
  const { tx } = useThemeContext();
37
- return (
38
- <ToastViewportPrimitive className={tx('toast.viewport', 'toast-viewport', {}, classNames)} ref={forwardedRef} />
39
- );
37
+ return <ToastViewportPrimitive className={tx('toast.viewport', {}, classNames)} ref={forwardedRef} />;
40
38
  });
41
39
 
42
40
  type ToastRootProps = ThemedClassName<ToastRootPrimitiveProps>;
@@ -44,7 +42,7 @@ type ToastRootProps = ThemedClassName<ToastRootPrimitiveProps>;
44
42
  const ToastRoot = forwardRef<HTMLLIElement, ToastRootProps>(({ classNames, children, ...props }, forwardedRef) => {
45
43
  const { tx } = useThemeContext();
46
44
  return (
47
- <ToastRootPrimitive {...props} className={tx('toast.root', 'toast', {}, classNames)} ref={forwardedRef}>
45
+ <ToastRootPrimitive {...props} className={tx('toast.root', {}, classNames)} ref={forwardedRef}>
48
46
  <ElevationProvider elevation='toast'>{children}</ElevationProvider>
49
47
  </ToastRootPrimitive>
50
48
  );
@@ -55,7 +53,7 @@ type ToastBodyProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.div
55
53
  const ToastBody = forwardRef<HTMLDivElement, ToastBodyProps>(({ asChild, classNames, ...props }, forwardedRef) => {
56
54
  const { tx } = useThemeContext();
57
55
  const Root = asChild ? Slot : Primitive.div;
58
- return <Root {...props} className={tx('toast.body', 'toast__body', {}, classNames)} ref={forwardedRef} />;
56
+ return <Root {...props} className={tx('toast.body', {}, classNames)} ref={forwardedRef} />;
59
57
  });
60
58
 
61
59
  type ToastTitleProps = ThemedClassName<ToastTitlePrimitiveProps>;
@@ -64,7 +62,7 @@ const ToastTitle = forwardRef<HTMLHeadingElement, ToastTitleProps>(
64
62
  ({ asChild, classNames, ...props }, forwardedRef) => {
65
63
  const { tx } = useThemeContext();
66
64
  const Root = asChild ? Slot : ToastTitlePrimitive;
67
- return <Root {...props} className={tx('toast.title', 'toast__title', {}, classNames)} ref={forwardedRef} />;
65
+ return <Root {...props} className={tx('toast.title', {}, classNames)} ref={forwardedRef} />;
68
66
  },
69
67
  );
70
68
 
@@ -74,9 +72,7 @@ const ToastDescription = forwardRef<HTMLParagraphElement, ToastDescriptionProps>
74
72
  ({ asChild, classNames, ...props }, forwardedRef) => {
75
73
  const { tx } = useThemeContext();
76
74
  const Root = asChild ? Slot : ToastDescriptionPrimitive;
77
- return (
78
- <Root {...props} className={tx('toast.description', 'toast__description', {}, classNames)} ref={forwardedRef} />
79
- );
75
+ return <Root {...props} className={tx('toast.description', {}, classNames)} ref={forwardedRef} />;
80
76
  },
81
77
  );
82
78
 
@@ -86,7 +82,7 @@ const ToastActions = forwardRef<HTMLDivElement, ToastActionsProps>(
86
82
  ({ asChild, classNames, ...props }, forwardedRef) => {
87
83
  const { tx } = useThemeContext();
88
84
  const Root = asChild ? Slot : Primitive.div;
89
- return <Root {...props} className={tx('toast.actions', 'toast__actions', {}, classNames)} ref={forwardedRef} />;
85
+ return <Root {...props} className={tx('toast.actions', {}, classNames)} ref={forwardedRef} />;
90
86
  },
91
87
  );
92
88
 
@@ -2,16 +2,16 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
7
6
  import React from 'react';
8
7
 
9
- import { Toolbar } from './Toolbar';
10
8
  import { withTheme } from '../../testing';
11
- import { Toggle } from '../Buttons';
9
+ import { Toggle } from '../Button';
12
10
  import { Icon } from '../Icon';
13
11
  import { Select } from '../Select';
14
12
 
13
+ import { Toolbar } from './Toolbar';
14
+
15
15
  type StorybookToolbarProps = {};
16
16
 
17
17
  const DefaultStory = (props: StorybookToolbarProps) => {
@@ -29,6 +29,7 @@ const DefaultStory = (props: StorybookToolbarProps) => {
29
29
  <Select.Option value={'b'}>B</Select.Option>
30
30
  <Select.Option value={'c'}>C</Select.Option>
31
31
  </Select.Viewport>
32
+ <Select.Arrow />
32
33
  </Select.Content>
33
34
  </Select.Portal>
34
35
  </Select.Root>
@@ -62,21 +63,22 @@ const DefaultStory = (props: StorybookToolbarProps) => {
62
63
  </Toolbar.Button>
63
64
  <Toolbar.Separator />
64
65
  <Toolbar.Button>Test</Toolbar.Button>
65
- <Toolbar.Button>
66
- <Icon icon='ph--arrow-clockwise--regular' />
67
- </Toolbar.Button>
66
+ <Toolbar.IconButton icon='ph--arrow-clockwise--regular' label='Refresh' iconOnly />
68
67
  </Toolbar.Root>
69
68
  );
70
69
  };
71
70
 
72
- export default {
73
- title: 'ui/react-ui-core/Toolbar',
74
- component: Toolbar,
71
+ const meta = {
72
+ title: 'ui/react-ui-core/components/Toolbar',
73
+ component: Toolbar as any,
75
74
  render: DefaultStory,
76
- decorators: [withTheme],
77
- parameters: { chromatic: { disableSnapshot: false } },
78
- };
75
+ decorators: [withTheme()],
76
+ } satisfies Meta<typeof DefaultStory>;
77
+
78
+ export default meta;
79
+
80
+ type Story = StoryObj<typeof meta>;
79
81
 
80
- export const Default = {
82
+ export const Default: Story = {
81
83
  args: {},
82
84
  };
@@ -4,7 +4,9 @@
4
4
 
5
5
  import type { ToggleGroupItemProps as ToggleGroupItemPrimitiveProps } from '@radix-ui/react-toggle-group';
6
6
  import * as ToolbarPrimitive from '@radix-ui/react-toolbar';
7
- import React, { forwardRef } from 'react';
7
+ import React, { Fragment, forwardRef } from 'react';
8
+
9
+ import { type ToolbarStyleProps } from '@dxos/ui-theme';
8
10
 
9
11
  import { useThemeContext } from '../../hooks';
10
12
  import { type ThemedClassName } from '../../util';
@@ -13,27 +15,45 @@ import {
13
15
  ButtonGroup,
14
16
  type ButtonGroupProps,
15
17
  type ButtonProps,
18
+ IconButton,
19
+ type IconButtonProps,
16
20
  Toggle,
17
21
  type ToggleGroupItemProps,
18
22
  type ToggleProps,
19
- IconButton,
20
- type IconButtonProps,
21
- } from '../Buttons';
23
+ } from '../Button';
22
24
  import { Link, type LinkProps } from '../Link';
23
25
  import { Separator, type SeparatorProps } from '../Separator';
24
26
 
25
- type ToolbarRootProps = ThemedClassName<ToolbarPrimitive.ToolbarProps> & { layoutManaged?: boolean };
27
+ type ToolbarRootProps = ThemedClassName<
28
+ ToolbarPrimitive.ToolbarProps &
29
+ ToolbarStyleProps & {
30
+ textBlockWidth?: boolean;
31
+ }
32
+ >;
26
33
 
34
+ // TODO(burdon): Implement asChild property.
27
35
  const ToolbarRoot = forwardRef<HTMLDivElement, ToolbarRootProps>(
28
- ({ classNames, children, layoutManaged, ...props }, forwardedRef) => {
36
+ (
37
+ { classNames, children, density, disabled, layoutManaged, textBlockWidth: textBlockWidthProp, ...props },
38
+ forwardedRef,
39
+ ) => {
29
40
  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
+
30
49
  return (
31
50
  <ToolbarPrimitive.Root
32
51
  {...props}
33
- className={tx('toolbar.root', 'toolbar', { layoutManaged }, classNames)}
52
+ data-arrow-keys={props.orientation === 'vertical' ? 'up down' : 'left right'}
53
+ className={tx('toolbar.root', { density, disabled, layoutManaged }, classNames)}
34
54
  ref={forwardedRef}
35
55
  >
36
- {children}
56
+ <InnerRoot {...innerRootProps}>{children}</InnerRoot>
37
57
  </ToolbarPrimitive.Root>
38
58
  );
39
59
  },
@@ -54,7 +74,7 @@ type ToolbarIconButtonProps = IconButtonProps;
54
74
  const ToolbarIconButton = forwardRef<HTMLButtonElement, ToolbarIconButtonProps>((props, forwardedRef) => {
55
75
  return (
56
76
  <ToolbarPrimitive.Button asChild>
57
- <IconButton {...props} ref={forwardedRef} />
77
+ <IconButton {...props} noTooltip ref={forwardedRef} />
58
78
  </ToolbarPrimitive.Button>
59
79
  );
60
80
  });
@@ -113,7 +133,18 @@ const ToolbarToggleGroupIconItem = forwardRef<HTMLButtonElement, ToolbarToggleGr
113
133
  ({ variant, density, elevation, classNames, icon, label, iconOnly, ...props }, forwardedRef) => {
114
134
  return (
115
135
  <ToolbarPrimitive.ToolbarToggleItem {...props} asChild>
116
- <IconButton {...{ variant, density, elevation, classNames, icon, label, iconOnly }} ref={forwardedRef} />
136
+ <IconButton
137
+ {...{
138
+ variant,
139
+ density,
140
+ elevation,
141
+ classNames,
142
+ icon,
143
+ label,
144
+ iconOnly,
145
+ }}
146
+ ref={forwardedRef}
147
+ />
117
148
  </ToolbarPrimitive.ToolbarToggleItem>
118
149
  );
119
150
  },
@@ -2,14 +2,15 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React from 'react';
7
7
 
8
8
  import { faker } from '@dxos/random';
9
9
 
10
- import { Tooltip } from './Tooltip';
11
10
  import { withTheme } from '../../testing';
12
- import { Button } from '../Buttons';
11
+ import { Button } from '../Button';
12
+
13
+ import { Tooltip } from './Tooltip';
13
14
 
14
15
  type StoryProps = {
15
16
  tooltips: { label: string; content: string }[];
@@ -28,15 +29,18 @@ const DefaultStory = ({ tooltips, defaultOpen }: StoryProps) => (
28
29
  </Tooltip.Provider>
29
30
  );
30
31
 
31
- export default {
32
- title: 'ui/react-ui-core/Tooltip',
33
- component: Tooltip,
32
+ const meta = {
33
+ title: 'ui/react-ui-core/components/Tooltip',
34
+ component: Tooltip as any,
34
35
  render: DefaultStory,
35
- decorators: [withTheme],
36
- parameters: { chromatic: { disableSnapshot: false } },
37
- };
36
+ decorators: [withTheme()],
37
+ } satisfies Meta<typeof DefaultStory>;
38
+
39
+ export default meta;
40
+
41
+ type Story = StoryObj<typeof meta>;
38
42
 
39
- export const Default = {
43
+ export const Default: Story = {
40
44
  args: {
41
45
  tooltips: [
42
46
  {
@@ -50,9 +54,9 @@ export const Default = {
50
54
  },
51
55
  };
52
56
 
53
- export const DefaultOpen = {
57
+ export const DefaultOpen: Story = {
54
58
  args: {
55
- defaultOption: true,
59
+ defaultOpen: true,
56
60
  tooltips: [
57
61
  {
58
62
  label: 'Tooltip trigger',
@@ -65,9 +69,9 @@ export const DefaultOpen = {
65
69
  },
66
70
  };
67
71
 
68
- export const StressTest = {
72
+ export const StressTest: Story = {
69
73
  args: {
70
- defaultOption: true,
74
+ defaultOpen: true,
71
75
  tooltips: faker.helpers.multiple(
72
76
  () => ({
73
77
  label: faker.lorem.words(2),
@@ -11,7 +11,7 @@ import type { Scope } from '@radix-ui/react-context';
11
11
  import { DismissableLayer } from '@radix-ui/react-dismissable-layer';
12
12
  import { useId } from '@radix-ui/react-id';
13
13
  import * as PopperPrimitive from '@radix-ui/react-popper';
14
- import { createPopperScope, type PopperAnchorProps } from '@radix-ui/react-popper';
14
+ import { type PopperAnchorProps, createPopperScope } from '@radix-ui/react-popper';
15
15
  import { Portal as PortalPrimitive } from '@radix-ui/react-portal';
16
16
  import { Presence } from '@radix-ui/react-presence';
17
17
  import { Primitive } from '@radix-ui/react-primitive';
@@ -23,10 +23,11 @@ import React, {
23
23
  type ComponentPropsWithoutRef,
24
24
  type ElementRef,
25
25
  type FC,
26
- type SyntheticEvent,
27
- forwardRef,
28
26
  type MutableRefObject,
29
27
  type ReactNode,
28
+ type RefObject,
29
+ type SyntheticEvent,
30
+ forwardRef,
30
31
  useCallback,
31
32
  useEffect,
32
33
  useMemo,
@@ -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';
@@ -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,9 +240,9 @@ 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
 
@@ -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
 
@@ -362,9 +363,9 @@ 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
 
@@ -573,9 +574,9 @@ 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
 
@@ -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,
@@ -5,21 +5,24 @@
5
5
  export * from './AnchoredOverflow';
6
6
  export * from './Avatars';
7
7
  export * from './Breadcrumb';
8
- export * from './Buttons';
8
+ export * from './Button';
9
9
  export * from './Clipboard';
10
- export * from './Dialogs';
10
+ export * from './Dialog';
11
11
  export * from './Icon';
12
12
  export * from './Input';
13
13
  export * from './Link';
14
- export * from './Lists';
14
+ export * from './List';
15
15
  export * from './Main';
16
- export * from './Menus';
16
+ export * from './Menu';
17
17
  export * from './Message';
18
18
  export * from './Popover';
19
19
  export * from './Status';
20
20
  export * from './ScrollArea';
21
+ export * from './ScrollContainer';
21
22
  export * from './Select';
22
23
  export * from './Separator';
24
+ export * from './Skeleton';
25
+ export * from './Splitter';
23
26
  export * from './Tag';
24
27
  export * from './Toast';
25
28
  export * from './Toolbar';
@@ -0,0 +1,44 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React, { type ReactElement, type Ref, forwardRef } from 'react';
7
+
8
+ import { type SlottableProps } from '@dxos/ui-types';
9
+
10
+ import { withTheme } from '../testing';
11
+
12
+ const ComponentInner = forwardRef<HTMLDivElement, ComponentProps>(({ children, ...props }, forwardedRef) => {
13
+ return (
14
+ <div {...props} ref={forwardedRef}>
15
+ {children}
16
+ </div>
17
+ );
18
+ });
19
+
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
+ const meta = {
32
+ title: 'ui/react-ui-core/exemplars/generics',
33
+ component: Component,
34
+ decorators: [withTheme()],
35
+ parameters: {
36
+ layout: 'centered',
37
+ },
38
+ } satisfies Meta;
39
+
40
+ export default meta;
41
+
42
+ type Story = StoryObj<typeof meta>;
43
+
44
+ export const Single: Story = {};
@@ -0,0 +1,108 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { Slot } from '@radix-ui/react-slot';
6
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
7
+ import React, { type PropsWithChildren, forwardRef } from 'react';
8
+
9
+ import { mx } from '@dxos/ui-theme';
10
+ import { type SlottableClassName, type SlottableProps, type ThemedClassName } from '@dxos/ui-types';
11
+
12
+ import { withTheme } from '../testing';
13
+
14
+ /**
15
+ * Composition
16
+ *
17
+ * All Radix primitive parts that render a DOM element accept an asChild prop.
18
+ * When asChild is set to true, Radix will not render a default DOM element, instead cloning the part's child and passing it the props and behavior required to make it functional.
19
+ * https://www.radix-ui.com/primitives/docs/guides/composition
20
+ */
21
+
22
+ // Outer primitive (like Tooltip.Trigger or Focus.Group).
23
+ const Outer = forwardRef<HTMLDivElement, SlottableProps<HTMLDivElement>>(
24
+ ({ children, className, classNames, asChild, ...props }, forwardedRef) => {
25
+ const Root = asChild ? Slot : 'div';
26
+ return (
27
+ <Root {...props} className={mx(className, classNames)} data-outer='true' ref={forwardedRef}>
28
+ {children}
29
+ </Root>
30
+ );
31
+ },
32
+ );
33
+
34
+ // Middle primitive (like Dialog.Trigger or Mosaic.Cell).
35
+ const Middle = forwardRef<HTMLDivElement, SlottableProps<HTMLDivElement>>(
36
+ ({ children, className, classNames, asChild, ...props }, forwardedRef) => {
37
+ const Root = asChild ? Slot : 'div';
38
+ return (
39
+ <Root {...props} className={mx(className, classNames)} data-middle='true' ref={forwardedRef}>
40
+ {children}
41
+ </Root>
42
+ );
43
+ },
44
+ );
45
+
46
+ // Leaf component (like Card.Root).
47
+ const Leaf = forwardRef<HTMLButtonElement, SlottableClassName<PropsWithChildren>>(
48
+ ({ className, classNames, children, ...props }, forwardedRef) => {
49
+ return (
50
+ <button {...props} className={mx('p-2 outline-none border rounded', className, classNames)} ref={forwardedRef}>
51
+ {children}
52
+ </button>
53
+ );
54
+ },
55
+ );
56
+
57
+ // Test 1: Single asChild.
58
+ const TestSingle = ({ classNames, ...props }: ThemedClassName<{ role?: string }>) => (
59
+ <Outer asChild {...props} className={mx('p-2', classNames)}>
60
+ <Leaf>Single asChild</Leaf>
61
+ </Outer>
62
+ );
63
+
64
+ // Test 2: Nested asChild.
65
+ const TestNested = ({ classNames, ...props }: ThemedClassName<{ role?: string }>) => {
66
+ return (
67
+ <Outer asChild {...props} className={mx('p-2', classNames)}>
68
+ <Middle asChild>
69
+ <Leaf>Nested asChild</Leaf>
70
+ </Middle>
71
+ </Outer>
72
+ );
73
+ };
74
+
75
+ // Test 3: Complex.
76
+ const TestInner = ({ classNames, ...props }: ThemedClassName<{ role?: string }>) => (
77
+ <Outer asChild {...props} className={mx('p-2', classNames)}>
78
+ <Middle asChild>
79
+ <Leaf>
80
+ <div role='none'>Leaf</div>
81
+ </Leaf>
82
+ </Middle>
83
+ </Outer>
84
+ );
85
+
86
+ const meta = {
87
+ title: 'ui/react-ui-core/exemplars/slot',
88
+ decorators: [withTheme()],
89
+ parameters: {
90
+ layout: 'centered',
91
+ },
92
+ } satisfies Meta;
93
+
94
+ export default meta;
95
+
96
+ type Story = StoryObj<typeof meta>;
97
+
98
+ export const Single: Story = {
99
+ render: () => <TestSingle role='listitem' classNames='border-red-500' />,
100
+ };
101
+
102
+ export const Nested: Story = {
103
+ render: () => <TestNested role='listitem' classNames='border-green-500' />,
104
+ };
105
+
106
+ export const Inner: Story = {
107
+ render: () => <TestInner role='listitem' classNames='border-blue-500' />,
108
+ };