@dxos/react-ui 0.8.4-main.ead640a → 0.8.4-main.f466a3d56e

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 (476) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/browser/chunk-A5QCIG5R.mjs +24 -0
  4. package/dist/lib/browser/chunk-A5QCIG5R.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-LY5XDQR5.mjs +846 -0
  6. package/dist/lib/browser/chunk-LY5XDQR5.mjs.map +7 -0
  7. package/dist/lib/browser/index.mjs +4409 -65
  8. package/dist/lib/browser/index.mjs.map +4 -4
  9. package/dist/lib/browser/meta.json +1 -1
  10. package/dist/lib/browser/testing/index.mjs +88 -70
  11. package/dist/lib/browser/testing/index.mjs.map +4 -4
  12. package/dist/lib/browser/translations.mjs +9 -0
  13. package/dist/lib/browser/translations.mjs.map +7 -0
  14. package/dist/lib/node-esm/chunk-NGKLIKP3.mjs +848 -0
  15. package/dist/lib/node-esm/chunk-NGKLIKP3.mjs.map +7 -0
  16. package/dist/lib/node-esm/chunk-XCFLA74M.mjs +26 -0
  17. package/dist/lib/node-esm/chunk-XCFLA74M.mjs.map +7 -0
  18. package/dist/lib/node-esm/index.mjs +4409 -65
  19. package/dist/lib/node-esm/index.mjs.map +4 -4
  20. package/dist/lib/node-esm/meta.json +1 -1
  21. package/dist/lib/node-esm/testing/index.mjs +88 -70
  22. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  23. package/dist/lib/node-esm/translations.mjs +10 -0
  24. package/dist/lib/node-esm/translations.mjs.map +7 -0
  25. package/dist/types/src/components/Avatars/Avatar.d.ts +1 -1
  26. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  27. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  28. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  29. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  30. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  31. package/dist/types/src/components/{Buttons → Button}/Button.d.ts +3 -3
  32. package/dist/types/src/components/Button/Button.d.ts.map +1 -0
  33. package/dist/types/src/components/{Buttons → Button}/Button.stories.d.ts +1 -1
  34. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -0
  35. package/dist/types/src/components/{Buttons → Button}/IconButton.d.ts +3 -2
  36. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -0
  37. package/dist/types/src/components/{Buttons → Button}/IconButton.stories.d.ts +3 -0
  38. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -0
  39. package/dist/types/src/components/{Buttons → Button}/Toggle.d.ts +2 -2
  40. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -0
  41. package/dist/types/src/components/Button/Toggle.stories.d.ts +16 -0
  42. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -0
  43. package/dist/types/src/components/Button/ToggleGroup.d.ts +27 -0
  44. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -0
  45. package/dist/types/src/components/{Buttons → Button}/ToggleGroup.stories.d.ts +6 -6
  46. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -0
  47. package/dist/types/src/components/Button/index.d.ts.map +1 -0
  48. package/dist/types/src/components/Card/Card.d.ts +124 -0
  49. package/dist/types/src/components/Card/Card.d.ts.map +1 -0
  50. package/dist/types/src/components/Card/Card.stories.d.ts +21 -0
  51. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -0
  52. package/dist/types/src/components/Card/index.d.ts +2 -0
  53. package/dist/types/src/components/Card/index.d.ts.map +1 -0
  54. package/dist/types/src/components/Carousel/Carousel.d.ts +90 -0
  55. package/dist/types/src/components/Carousel/Carousel.d.ts.map +1 -0
  56. package/dist/types/src/components/Carousel/index.d.ts +2 -0
  57. package/dist/types/src/components/Carousel/index.d.ts.map +1 -0
  58. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  59. package/dist/types/src/components/Clipboard/CopyButton.d.ts +1 -1
  60. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  61. package/dist/types/src/components/Clipboard/index.d.ts +10 -1
  62. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  63. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts +1 -1
  64. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  65. package/dist/types/src/components/Dialog/AlertDialog.d.ts +51 -0
  66. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -0
  67. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -0
  68. package/dist/types/src/components/Dialog/Dialog.d.ts +64 -0
  69. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -0
  70. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +25 -0
  71. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -0
  72. package/dist/types/src/components/Dialog/index.d.ts.map +1 -0
  73. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
  74. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  75. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts +11 -0
  76. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -0
  77. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts +7 -0
  78. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -0
  79. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +19 -0
  80. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -0
  81. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts +9 -0
  82. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -0
  83. package/dist/types/src/components/ErrorFallback/index.d.ts +5 -0
  84. package/dist/types/src/components/ErrorFallback/index.d.ts.map +1 -0
  85. package/dist/types/src/components/Focus/Focus.d.ts +36 -0
  86. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -0
  87. package/dist/types/src/components/Focus/Focus.stories.d.ts +9 -0
  88. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -0
  89. package/dist/types/src/components/Focus/index.d.ts +2 -0
  90. package/dist/types/src/components/Focus/index.d.ts.map +1 -0
  91. package/dist/types/src/components/Icon/Icon.d.ts +5 -1
  92. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  93. package/dist/types/src/components/Icon/Icon.stories.d.ts +25 -0
  94. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -0
  95. package/dist/types/src/components/Image/Image.d.ts +15 -0
  96. package/dist/types/src/components/Image/Image.d.ts.map +1 -0
  97. package/dist/types/src/components/Image/Image.stories.d.ts +34 -0
  98. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -0
  99. package/dist/types/src/components/Image/index.d.ts +2 -0
  100. package/dist/types/src/components/Image/index.d.ts.map +1 -0
  101. package/dist/types/src/components/Input/Input.d.ts +19 -22
  102. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  103. package/dist/types/src/components/Input/Input.stories.d.ts +8 -8
  104. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  105. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  106. package/dist/types/src/components/{Lists → List}/List.d.ts +6 -4
  107. package/dist/types/src/components/List/List.d.ts.map +1 -0
  108. package/dist/types/src/components/{Lists → List}/List.stories.d.ts +3 -1
  109. package/dist/types/src/components/List/List.stories.d.ts.map +1 -0
  110. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -0
  111. package/dist/types/src/components/{Lists → List}/Tree.d.ts +2 -2
  112. package/dist/types/src/components/List/Tree.d.ts.map +1 -0
  113. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -0
  114. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -0
  115. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts +5 -9
  116. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -0
  117. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -0
  118. package/dist/types/src/components/List/index.d.ts.map +1 -0
  119. package/dist/types/src/components/Main/Main.d.ts +24 -21
  120. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  121. package/dist/types/src/components/Main/Main.stories.d.ts +0 -3
  122. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  123. package/dist/types/src/components/Main/useSwipeToDismiss.d.ts.map +1 -1
  124. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts +46 -0
  125. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts.map +1 -0
  126. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts +16 -0
  127. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts.map +1 -0
  128. package/dist/types/src/components/MediaPlayer/index.d.ts +2 -0
  129. package/dist/types/src/components/MediaPlayer/index.d.ts.map +1 -0
  130. package/dist/types/src/components/{Menus → Menu}/ContextMenu.d.ts +6 -6
  131. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -0
  132. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -0
  133. package/dist/types/src/components/Menu/DropdownMenu.d.ts +121 -0
  134. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
  135. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +28 -0
  136. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
  137. package/dist/types/src/components/Menu/index.d.ts.map +1 -0
  138. package/dist/types/src/components/Message/Message.d.ts +2 -2
  139. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  140. package/dist/types/src/components/Message/Message.stories.d.ts +5 -6
  141. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  142. package/dist/types/src/components/Popover/Popover.d.ts +40 -23
  143. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  144. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  145. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +27 -27
  146. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  147. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +57 -8
  148. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  149. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +68 -0
  150. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -0
  151. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +23 -0
  152. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -0
  153. package/dist/types/src/components/ScrollContainer/index.d.ts +2 -0
  154. package/dist/types/src/components/ScrollContainer/index.d.ts.map +1 -0
  155. package/dist/types/src/components/Select/Select.d.ts +10 -10
  156. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  157. package/dist/types/src/components/Select/Select.stories.d.ts +2 -2
  158. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  159. package/dist/types/src/components/Separator/Separator.d.ts +4 -4
  160. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  161. package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
  162. package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  163. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
  164. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  165. package/dist/types/src/components/Skeleton/index.d.ts +2 -0
  166. package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
  167. package/dist/types/src/components/Splitter/Splitter.d.ts +34 -0
  168. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
  169. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
  170. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
  171. package/dist/types/src/components/Splitter/index.d.ts +2 -0
  172. package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
  173. package/dist/types/src/components/Status/Status.d.ts +3 -4
  174. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  175. package/dist/types/src/components/Status/Status.stories.d.ts +4 -2
  176. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  177. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  178. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  179. package/dist/types/src/components/Tag/Tag.stories.d.ts +0 -5
  180. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  181. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +3 -3
  182. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  183. package/dist/types/src/components/{Menus/DropdownMenu.stories.d.ts → ThemeProvider/ThemeProvider.stories.d.ts} +2 -5
  184. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  185. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +55 -63
  186. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  187. package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
  188. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  189. package/dist/types/src/components/Toast/Toast.d.ts +20 -20
  190. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  191. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  192. package/dist/types/src/components/Toolbar/Toolbar.d.ts +40 -20
  193. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  194. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  195. package/dist/types/src/components/Tooltip/Tooltip.d.ts +16 -16
  196. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  197. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +2 -2
  198. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  199. package/dist/types/src/components/index.d.ts +16 -8
  200. package/dist/types/src/components/index.d.ts.map +1 -1
  201. package/dist/types/src/exemplars/generics.stories.d.ts +19 -0
  202. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
  203. package/dist/types/src/exemplars/slot.stories.d.ts +15 -0
  204. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
  205. package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
  206. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
  207. package/dist/types/src/exemplars/virtualizer.stories.d.ts +11 -0
  208. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -0
  209. package/dist/types/src/hooks/index.d.ts +1 -0
  210. package/dist/types/src/hooks/index.d.ts.map +1 -1
  211. package/dist/types/src/hooks/useDensityContext.d.ts +2 -2
  212. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  213. package/dist/types/src/hooks/useElevationContext.d.ts +1 -1
  214. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  215. package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
  216. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  217. package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -1
  218. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  219. package/dist/types/src/index.d.ts +2 -1
  220. package/dist/types/src/index.d.ts.map +1 -1
  221. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  222. package/dist/types/src/playground/Custom.stories.d.ts +1 -1
  223. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  224. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  225. package/dist/types/src/primitives/Column/Column.d.ts +33 -0
  226. package/dist/types/src/primitives/Column/Column.d.ts.map +1 -0
  227. package/dist/types/src/primitives/Column/Column.stories.d.ts +25 -0
  228. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -0
  229. package/dist/types/src/primitives/Column/index.d.ts +2 -0
  230. package/dist/types/src/primitives/Column/index.d.ts.map +1 -0
  231. package/dist/types/src/primitives/Container/Container.d.ts +7 -0
  232. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
  233. package/dist/types/src/primitives/Container/Container.stories.d.ts +6 -0
  234. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
  235. package/dist/types/src/primitives/Container/index.d.ts +2 -0
  236. package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
  237. package/dist/types/src/primitives/Flex/Flex.d.ts +11 -0
  238. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
  239. package/dist/types/src/primitives/Flex/Flex.stories.d.ts +8 -0
  240. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -0
  241. package/dist/types/src/primitives/Flex/index.d.ts +2 -0
  242. package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
  243. package/dist/types/src/primitives/Grid/Grid.d.ts +10 -0
  244. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -0
  245. package/dist/types/src/primitives/Grid/Grid.stories.d.ts +8 -0
  246. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -0
  247. package/dist/types/src/primitives/Grid/index.d.ts +2 -0
  248. package/dist/types/src/primitives/Grid/index.d.ts.map +1 -0
  249. package/dist/types/src/primitives/Panel/Panel.d.ts +35 -0
  250. package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -0
  251. package/dist/types/src/primitives/Panel/Panel.stories.d.ts +6 -0
  252. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -0
  253. package/dist/types/src/primitives/Panel/index.d.ts +2 -0
  254. package/dist/types/src/primitives/Panel/index.d.ts.map +1 -0
  255. package/dist/types/src/primitives/index.d.ts +6 -0
  256. package/dist/types/src/primitives/index.d.ts.map +1 -0
  257. package/dist/types/src/testing/Loading.d.ts +9 -0
  258. package/dist/types/src/testing/Loading.d.ts.map +1 -0
  259. package/dist/types/src/testing/decorators/index.d.ts +1 -1
  260. package/dist/types/src/testing/decorators/index.d.ts.map +1 -1
  261. package/dist/types/src/testing/decorators/withLayout.d.ts +3 -3
  262. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
  263. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +12 -0
  264. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -0
  265. package/dist/types/src/testing/decorators/withTheme.d.ts +3 -2
  266. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  267. package/dist/types/src/testing/index.d.ts +1 -0
  268. package/dist/types/src/testing/index.d.ts.map +1 -1
  269. package/dist/types/src/translations.d.ts +16 -0
  270. package/dist/types/src/translations.d.ts.map +1 -0
  271. package/dist/types/src/util/index.d.ts +1 -2
  272. package/dist/types/src/util/index.d.ts.map +1 -1
  273. package/dist/types/src/util/usePx.d.ts.map +1 -1
  274. package/dist/types/tsconfig.tsbuildinfo +1 -1
  275. package/package.json +53 -38
  276. package/src/components/Avatars/Avatar.stories.tsx +7 -9
  277. package/src/components/Avatars/Avatar.tsx +7 -15
  278. package/src/components/Avatars/AvatarGroup.stories.tsx +2 -3
  279. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +4 -5
  280. package/src/components/Breadcrumb/Breadcrumb.tsx +11 -37
  281. package/src/components/{Buttons → Button}/Button.stories.tsx +4 -5
  282. package/src/components/{Buttons → Button}/Button.tsx +12 -26
  283. package/src/components/{Buttons → Button}/IconButton.stories.tsx +8 -6
  284. package/src/components/{Buttons → Button}/IconButton.tsx +20 -15
  285. package/src/components/{Buttons → Button}/Toggle.stories.tsx +7 -7
  286. package/src/components/{Buttons → Button}/Toggle.tsx +4 -4
  287. package/src/components/{Buttons → Button}/ToggleGroup.stories.tsx +2 -3
  288. package/src/components/{Buttons → Button}/ToggleGroup.tsx +12 -16
  289. package/src/components/Card/Card.stories.tsx +151 -0
  290. package/src/components/Card/Card.tsx +514 -0
  291. package/src/components/Card/index.ts +5 -0
  292. package/src/components/Carousel/Carousel.tsx +337 -0
  293. package/src/components/Carousel/index.ts +5 -0
  294. package/src/components/Clipboard/CopyButton.tsx +10 -11
  295. package/src/components/DensityProvider/DensityProvider.tsx +1 -1
  296. package/src/components/Dialog/AlertDialog.stories.tsx +68 -0
  297. package/src/components/{Dialogs → Dialog}/AlertDialog.tsx +123 -82
  298. package/src/components/Dialog/Dialog.stories.tsx +177 -0
  299. package/src/components/Dialog/Dialog.tsx +285 -0
  300. package/src/components/ElevationProvider/ElevationProvider.tsx +1 -1
  301. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +45 -0
  302. package/src/components/ErrorFallback/ErrorFallback.tsx +70 -0
  303. package/src/components/ErrorFallback/ErrorStack.tsx +114 -0
  304. package/src/components/ErrorFallback/ThrowError.tsx +37 -0
  305. package/src/components/ErrorFallback/index.ts +9 -0
  306. package/src/components/Focus/AUDIT.md +43 -0
  307. package/src/components/Focus/Focus.stories.tsx +230 -0
  308. package/src/components/Focus/Focus.tsx +201 -0
  309. package/src/components/Focus/index.ts +5 -0
  310. package/src/components/Icon/Icon.stories.tsx +143 -0
  311. package/src/components/Icon/Icon.tsx +15 -4
  312. package/src/components/Image/Image.stories.tsx +86 -0
  313. package/src/components/Image/Image.tsx +246 -0
  314. package/src/components/Image/index.ts +5 -0
  315. package/src/components/Input/Input.stories.tsx +21 -41
  316. package/src/components/Input/Input.tsx +38 -74
  317. package/src/components/Link/Link.stories.tsx +2 -3
  318. package/src/components/Link/Link.tsx +2 -2
  319. package/src/components/{Lists → List}/List.stories.tsx +31 -35
  320. package/src/components/{Lists → List}/List.tsx +17 -21
  321. package/src/components/{Lists → List}/ListDropIndicator.tsx +7 -8
  322. package/src/components/{Lists → List}/Tree.stories.tsx +6 -7
  323. package/src/components/{Lists → List}/Tree.tsx +0 -1
  324. package/src/components/{Lists → List}/TreeDropIndicator.tsx +6 -6
  325. package/src/components/{Lists → List}/Treegrid.stories.tsx +29 -30
  326. package/src/components/{Lists → List}/Treegrid.tsx +23 -28
  327. package/src/components/Main/Main.stories.tsx +41 -24
  328. package/src/components/Main/Main.tsx +150 -94
  329. package/src/components/MediaPlayer/MediaPlayer.stories.tsx +50 -0
  330. package/src/components/MediaPlayer/MediaPlayer.tsx +153 -0
  331. package/src/components/MediaPlayer/index.ts +5 -0
  332. package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +2 -3
  333. package/src/components/{Menus → Menu}/ContextMenu.tsx +9 -33
  334. package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +3 -4
  335. package/src/components/{Menus → Menu}/DropdownMenu.tsx +137 -110
  336. package/src/components/Message/Message.stories.tsx +27 -13
  337. package/src/components/Message/Message.tsx +59 -33
  338. package/src/components/Popover/Popover.stories.tsx +8 -9
  339. package/src/components/Popover/Popover.tsx +114 -92
  340. package/src/components/ScrollArea/ScrollArea.stories.tsx +221 -36
  341. package/src/components/ScrollArea/ScrollArea.tsx +97 -79
  342. package/src/components/ScrollArea/index.ts +1 -1
  343. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +91 -0
  344. package/src/components/ScrollContainer/ScrollContainer.tsx +345 -0
  345. package/src/components/ScrollContainer/index.ts +5 -0
  346. package/src/components/Select/Select.stories.tsx +8 -9
  347. package/src/components/Select/Select.tsx +11 -27
  348. package/src/components/Separator/Separator.tsx +5 -8
  349. package/src/components/Skeleton/Skeleton.stories.tsx +51 -0
  350. package/src/components/Skeleton/Skeleton.tsx +26 -0
  351. package/src/components/Skeleton/index.ts +5 -0
  352. package/src/components/Splitter/Splitter.stories.tsx +83 -0
  353. package/src/components/Splitter/Splitter.tsx +127 -0
  354. package/src/components/Splitter/index.ts +5 -0
  355. package/src/components/Status/Status.stories.tsx +21 -18
  356. package/src/components/Status/Status.tsx +10 -7
  357. package/src/components/Tag/Tag.stories.tsx +6 -12
  358. package/src/components/Tag/Tag.tsx +3 -8
  359. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +31 -0
  360. package/src/components/ThemeProvider/ThemeProvider.tsx +10 -10
  361. package/src/components/ThemeProvider/TranslationsProvider.tsx +1 -16
  362. package/src/components/ThemeProvider/index.ts +3 -3
  363. package/src/components/Toast/Toast.stories.tsx +3 -4
  364. package/src/components/Toast/Toast.tsx +22 -41
  365. package/src/components/Toolbar/Toolbar.stories.tsx +4 -7
  366. package/src/components/Toolbar/Toolbar.tsx +189 -24
  367. package/src/components/Tooltip/Tooltip.stories.tsx +21 -20
  368. package/src/components/Tooltip/Tooltip.tsx +54 -51
  369. package/src/components/index.ts +17 -9
  370. package/src/exemplars/generics.stories.tsx +41 -0
  371. package/src/exemplars/slot.stories.tsx +115 -0
  372. package/src/exemplars/tabster.stories.tsx +127 -0
  373. package/src/exemplars/virtualizer.stories.tsx +136 -0
  374. package/src/hooks/index.ts +1 -0
  375. package/src/hooks/useDensityContext.ts +3 -3
  376. package/src/hooks/useElevationContext.ts +1 -1
  377. package/src/index.ts +2 -1
  378. package/src/playground/Controls.stories.tsx +3 -10
  379. package/src/playground/Custom.stories.tsx +13 -18
  380. package/src/playground/Typography.stories.tsx +3 -3
  381. package/src/primitives/Column/AUDIT.md +148 -0
  382. package/src/primitives/Column/Column.stories.tsx +181 -0
  383. package/src/primitives/Column/Column.tsx +165 -0
  384. package/src/primitives/Column/index.ts +5 -0
  385. package/src/primitives/Container/Container.stories.tsx +29 -0
  386. package/src/primitives/Container/Container.tsx +19 -0
  387. package/src/primitives/Container/index.ts +5 -0
  388. package/src/primitives/Flex/Flex.stories.tsx +57 -0
  389. package/src/primitives/Flex/Flex.tsx +27 -0
  390. package/src/primitives/Flex/index.ts +5 -0
  391. package/src/primitives/Grid/Grid.stories.tsx +56 -0
  392. package/src/primitives/Grid/Grid.tsx +30 -0
  393. package/src/primitives/Grid/index.ts +5 -0
  394. package/src/primitives/Panel/Panel.stories.tsx +68 -0
  395. package/src/primitives/Panel/Panel.tsx +120 -0
  396. package/src/primitives/Panel/index.ts +5 -0
  397. package/src/primitives/index.ts +9 -0
  398. package/src/testing/Loading.tsx +47 -0
  399. package/src/testing/decorators/index.ts +1 -1
  400. package/src/testing/decorators/withLayout.tsx +32 -21
  401. package/src/testing/decorators/withLayoutVariants.tsx +48 -0
  402. package/src/testing/decorators/withTheme.tsx +26 -20
  403. package/src/testing/index.ts +2 -0
  404. package/src/translations.ts +24 -0
  405. package/src/util/index.ts +2 -2
  406. package/src/util/usePx.ts +1 -0
  407. package/dist/lib/browser/chunk-24AWTFTZ.mjs +0 -4521
  408. package/dist/lib/browser/chunk-24AWTFTZ.mjs.map +0 -7
  409. package/dist/lib/node-esm/chunk-MPRFBTTQ.mjs +0 -4523
  410. package/dist/lib/node-esm/chunk-MPRFBTTQ.mjs.map +0 -7
  411. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +0 -15
  412. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +0 -1
  413. package/dist/types/src/components/AnchoredOverflow/index.d.ts +0 -2
  414. package/dist/types/src/components/AnchoredOverflow/index.d.ts.map +0 -1
  415. package/dist/types/src/components/Buttons/Button.d.ts.map +0 -1
  416. package/dist/types/src/components/Buttons/Button.stories.d.ts.map +0 -1
  417. package/dist/types/src/components/Buttons/IconButton.d.ts.map +0 -1
  418. package/dist/types/src/components/Buttons/IconButton.stories.d.ts.map +0 -1
  419. package/dist/types/src/components/Buttons/Toggle.d.ts.map +0 -1
  420. package/dist/types/src/components/Buttons/Toggle.stories.d.ts +0 -13
  421. package/dist/types/src/components/Buttons/Toggle.stories.d.ts.map +0 -1
  422. package/dist/types/src/components/Buttons/ToggleGroup.d.ts +0 -27
  423. package/dist/types/src/components/Buttons/ToggleGroup.d.ts.map +0 -1
  424. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +0 -1
  425. package/dist/types/src/components/Buttons/index.d.ts.map +0 -1
  426. package/dist/types/src/components/Dialogs/AlertDialog.d.ts +0 -31
  427. package/dist/types/src/components/Dialogs/AlertDialog.d.ts.map +0 -1
  428. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +0 -1
  429. package/dist/types/src/components/Dialogs/Dialog.d.ts +0 -31
  430. package/dist/types/src/components/Dialogs/Dialog.d.ts.map +0 -1
  431. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts +0 -25
  432. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +0 -1
  433. package/dist/types/src/components/Dialogs/index.d.ts.map +0 -1
  434. package/dist/types/src/components/Lists/List.d.ts.map +0 -1
  435. package/dist/types/src/components/Lists/List.stories.d.ts.map +0 -1
  436. package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +0 -1
  437. package/dist/types/src/components/Lists/Tree.d.ts.map +0 -1
  438. package/dist/types/src/components/Lists/Tree.stories.d.ts.map +0 -1
  439. package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +0 -1
  440. package/dist/types/src/components/Lists/Treegrid.d.ts.map +0 -1
  441. package/dist/types/src/components/Lists/Treegrid.stories.d.ts.map +0 -1
  442. package/dist/types/src/components/Lists/index.d.ts.map +0 -1
  443. package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
  444. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +0 -1
  445. package/dist/types/src/components/Menus/DropdownMenu.d.ts +0 -113
  446. package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
  447. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
  448. package/dist/types/src/components/Menus/index.d.ts.map +0 -1
  449. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts +0 -12
  450. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts.map +0 -1
  451. package/dist/types/src/util/ThemedClassName.d.ts +0 -5
  452. package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
  453. package/dist/types/src/util/domino.d.ts +0 -18
  454. package/dist/types/src/util/domino.d.ts.map +0 -1
  455. package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +0 -59
  456. package/src/components/AnchoredOverflow/index.ts +0 -5
  457. package/src/components/Dialogs/AlertDialog.stories.tsx +0 -69
  458. package/src/components/Dialogs/Dialog.stories.tsx +0 -67
  459. package/src/components/Dialogs/Dialog.tsx +0 -159
  460. package/src/testing/decorators/withSurfaceVariantsLayout.tsx +0 -51
  461. package/src/util/ThemedClassName.ts +0 -7
  462. package/src/util/domino.ts +0 -53
  463. /package/dist/types/src/components/{Buttons → Button}/index.d.ts +0 -0
  464. /package/dist/types/src/components/{Dialogs → Dialog}/AlertDialog.stories.d.ts +0 -0
  465. /package/dist/types/src/components/{Dialogs → Dialog}/index.d.ts +0 -0
  466. /package/dist/types/src/components/{Lists → List}/ListDropIndicator.d.ts +0 -0
  467. /package/dist/types/src/components/{Lists → List}/Tree.stories.d.ts +0 -0
  468. /package/dist/types/src/components/{Lists → List}/TreeDropIndicator.d.ts +0 -0
  469. /package/dist/types/src/components/{Lists → List}/Treegrid.stories.d.ts +0 -0
  470. /package/dist/types/src/components/{Lists → List}/index.d.ts +0 -0
  471. /package/dist/types/src/components/{Menus → Menu}/ContextMenu.stories.d.ts +0 -0
  472. /package/dist/types/src/components/{Menus → Menu}/index.d.ts +0 -0
  473. /package/src/components/{Buttons → Button}/index.ts +0 -0
  474. /package/src/components/{Dialogs → Dialog}/index.ts +0 -0
  475. /package/src/components/{Lists → List}/index.ts +0 -0
  476. /package/src/components/{Menus → Menu}/index.ts +0 -0
@@ -3,6 +3,7 @@
3
3
  //
4
4
 
5
5
  // This is based upon `@radix-ui/react-tooltip` fetched 17 March 2025 at https://github.com/radix-ui/primitives at commit 6e75e11.
6
+ // TODO(burdon): Replace with https://ui.shadcn.com/docs/components/radix/tooltip
6
7
 
7
8
  import { composeEventHandlers } from '@radix-ui/primitive';
8
9
  import { useComposedRefs } from '@radix-ui/react-compose-refs';
@@ -21,9 +22,8 @@ import { useControllableState } from '@radix-ui/react-use-controllable-state';
21
22
  import * as VisuallyHiddenPrimitive from '@radix-ui/react-visually-hidden';
22
23
  import React, {
23
24
  type ComponentPropsWithoutRef,
24
- type ElementRef,
25
+ type ComponentRef,
25
26
  type FC,
26
- type MutableRefObject,
27
27
  type ReactNode,
28
28
  type RefObject,
29
29
  type SyntheticEvent,
@@ -41,9 +41,9 @@ type TooltipScopedProps<P = {}> = P & { __scopeTooltip?: Scope };
41
41
  const [createTooltipContext, createTooltipScope] = createContextScope('Tooltip', [createPopperScope]);
42
42
  const usePopperScope = createPopperScope();
43
43
 
44
- /* -------------------------------------------------------------------------------------------------
45
- * Tooltip
46
- * ----------------------------------------------------------------------------------------------- */
44
+ //
45
+ // Tooltip
46
+ //
47
47
 
48
48
  const DEFAULT_DELAY_DURATION = 700;
49
49
  const TOOLTIP_OPEN = 'tooltip.open';
@@ -54,19 +54,19 @@ type TooltipContextValue = {
54
54
  open: boolean;
55
55
  stateAttribute: 'closed' | 'delayed-open' | 'instant-open';
56
56
  trigger: TooltipTriggerElement | null;
57
- onTriggerChange(trigger: TooltipTriggerElement | null): void;
57
+ onTriggerChange(trigger: TooltipTriggerElement | null, content?: ReactNode, side?: TooltipSide): void;
58
58
  onTriggerEnter(): void;
59
59
  onTriggerLeave(): void;
60
60
  onOpen(): void;
61
61
  onClose(): void;
62
62
  onPointerInTransitChange(inTransit: boolean): void;
63
- isPointerInTransitRef: MutableRefObject<boolean>;
63
+ isPointerInTransitRef: RefObject<boolean>;
64
64
  disableHoverableContent: boolean;
65
65
  };
66
66
 
67
67
  const [TooltipContextProvider, useTooltipContext] = createTooltipContext<TooltipContextValue>(TOOLTIP_NAME);
68
68
 
69
- interface TooltipProviderProps {
69
+ type TooltipProviderProps = {
70
70
  children?: ReactNode;
71
71
  open?: boolean;
72
72
  defaultOpen?: boolean;
@@ -87,7 +87,7 @@ interface TooltipProviderProps {
87
87
  * @defaultValue 300
88
88
  */
89
89
  skipDelayDuration?: number;
90
- }
90
+ };
91
91
 
92
92
  const TooltipProvider: FC<TooltipProviderProps> = (props: TooltipScopedProps<TooltipProviderProps>) => {
93
93
  const {
@@ -111,15 +111,18 @@ const TooltipProvider: FC<TooltipProviderProps> = (props: TooltipScopedProps<Too
111
111
 
112
112
  const popperScope = usePopperScope(__scopeTooltip);
113
113
  const [trigger, setTrigger] = useState<HTMLButtonElement | null>(null);
114
- const [content, setContent] = useState<string>('');
114
+ const [content, setContent] = useState<ReactNode>(null);
115
115
  const [side, setSide] = useState<TooltipSide | undefined>(undefined);
116
116
  const triggerRef = useRef<HTMLButtonElement | null>(trigger);
117
- const handleTriggerChange = useCallback((nextTrigger: HTMLButtonElement | null) => {
118
- setTrigger(nextTrigger);
119
- triggerRef.current = nextTrigger;
120
- setContent(nextTrigger?.getAttribute('data-tooltip-content') ?? '');
121
- setSide((nextTrigger?.getAttribute('data-tooltip-side') as TooltipSide | null) ?? undefined);
122
- }, []);
117
+ const handleTriggerChange = useCallback(
118
+ (nextTrigger: HTMLButtonElement | null, nextContent?: ReactNode, nextSide?: TooltipSide) => {
119
+ setTrigger(nextTrigger);
120
+ triggerRef.current = nextTrigger;
121
+ setContent(nextContent ?? null);
122
+ setSide(nextSide);
123
+ },
124
+ [],
125
+ );
123
126
  const contentId = useId();
124
127
  const openTimerRef = useRef(0);
125
128
  const wasOpenDelayedRef = useRef(false);
@@ -215,9 +218,9 @@ const TooltipProvider: FC<TooltipProviderProps> = (props: TooltipScopedProps<Too
215
218
  isPointerInTransitRef.current = inTransit;
216
219
  }, [])}
217
220
  >
218
- <TooltipContent side={side} className={tx('tooltip.content', 'tooltip', { elevation })}>
221
+ <TooltipContent side={side} className={tx('tooltip.content', { elevation })}>
219
222
  {content}
220
- <TooltipArrow className={tx('tooltip.arrow', 'tooltip__arrow')} />
223
+ <TooltipArrow className={tx('tooltip.arrow')} />
221
224
  </TooltipContent>
222
225
  <TooltipVirtualTrigger virtualRef={triggerRef as RefObject<HTMLButtonElement>} />
223
226
  {children}
@@ -228,9 +231,9 @@ const TooltipProvider: FC<TooltipProviderProps> = (props: TooltipScopedProps<Too
228
231
 
229
232
  TooltipProvider.displayName = TOOLTIP_NAME;
230
233
 
231
- /* -------------------------------------------------------------------------------------------------
232
- * TooltipVirtualTrigger
233
- * ----------------------------------------------------------------------------------------------- */
234
+ //
235
+ // TooltipVirtualTrigger
236
+ //
234
237
 
235
238
  const TooltipVirtualTrigger = ({
236
239
  virtualRef,
@@ -240,17 +243,17 @@ const TooltipVirtualTrigger = ({
240
243
  return <PopperPrimitive.Anchor asChild {...popperScope} virtualRef={virtualRef} />;
241
244
  };
242
245
 
243
- /* -------------------------------------------------------------------------------------------------
244
- * TooltipTrigger
245
- * ----------------------------------------------------------------------------------------------- */
246
+ //
247
+ // TooltipTrigger
248
+ //
246
249
 
247
250
  const TRIGGER_NAME = 'TooltipTrigger';
248
251
 
249
- type TooltipTriggerElement = ElementRef<typeof Primitive.button>;
252
+ type TooltipTriggerElement = ComponentRef<typeof Primitive.button>;
250
253
  type PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;
251
- type TooltipTriggerProps = PrimitiveButtonProps &
254
+ type TooltipTriggerProps = Omit<PrimitiveButtonProps, 'content'> &
252
255
  Pick<TooltipProps, 'delayDuration'> & {
253
- content?: string;
256
+ content?: ReactNode;
254
257
  side?: TooltipSide;
255
258
  onInteract?: (event: SyntheticEvent) => void;
256
259
  };
@@ -283,8 +286,6 @@ const TooltipTrigger = forwardRef<TooltipTriggerElement, TooltipTriggerProps>(
283
286
  // commonly anchors and the anchor `type` attribute signifies MIME type.
284
287
  aria-describedby={context.open ? context.contentId : undefined}
285
288
  data-state={context.stateAttribute}
286
- data-tooltip-content={content}
287
- data-tooltip-side={side}
288
289
  {...triggerProps}
289
290
  ref={composedRefs}
290
291
  onPointerMove={composeEventHandlers(props.onPointerMove, (event) => {
@@ -296,7 +297,7 @@ const TooltipTrigger = forwardRef<TooltipTriggerElement, TooltipTriggerProps>(
296
297
  if (event.defaultPrevented) {
297
298
  return;
298
299
  }
299
- context.onTriggerChange(ref.current);
300
+ context.onTriggerChange(ref.current, content, side);
300
301
  context.onTriggerEnter();
301
302
  hasPointerMoveOpenedRef.current = true;
302
303
  }
@@ -322,9 +323,9 @@ const TooltipTrigger = forwardRef<TooltipTriggerElement, TooltipTriggerProps>(
322
323
 
323
324
  TooltipTrigger.displayName = TRIGGER_NAME;
324
325
 
325
- /* -------------------------------------------------------------------------------------------------
326
- * TooltipPortal
327
- * ----------------------------------------------------------------------------------------------- */
326
+ //
327
+ // TooltipPortal
328
+ //
328
329
 
329
330
  const PORTAL_NAME = 'TooltipPortal';
330
331
 
@@ -334,7 +335,7 @@ const [PortalProvider, usePortalContext] = createTooltipContext<PortalContextVal
334
335
  });
335
336
 
336
337
  type PortalProps = ComponentPropsWithoutRef<typeof PortalPrimitive>;
337
- interface TooltipPortalProps {
338
+ type TooltipPortalProps = {
338
339
  children?: ReactNode;
339
340
  /**
340
341
  * Specify a container element to portal the content into.
@@ -345,7 +346,7 @@ interface TooltipPortalProps {
345
346
  * controlling animation with React animation libraries.
346
347
  */
347
348
  forceMount?: true;
348
- }
349
+ };
349
350
 
350
351
  const TooltipPortal: FC<TooltipPortalProps> = (props: TooltipScopedProps<TooltipPortalProps>) => {
351
352
  const { __scopeTooltip, forceMount, children, container } = props;
@@ -363,20 +364,20 @@ const TooltipPortal: FC<TooltipPortalProps> = (props: TooltipScopedProps<Tooltip
363
364
 
364
365
  TooltipPortal.displayName = PORTAL_NAME;
365
366
 
366
- /* -------------------------------------------------------------------------------------------------
367
- * TooltipContent
368
- * ----------------------------------------------------------------------------------------------- */
367
+ //
368
+ // TooltipContent
369
+ //
369
370
 
370
371
  const CONTENT_NAME = 'TooltipContent';
371
372
 
372
373
  type TooltipContentElement = TooltipContentImplElement;
373
- interface TooltipContentProps extends TooltipContentImplProps {
374
+ type TooltipContentProps = TooltipContentImplProps & {
374
375
  /**
375
376
  * Used to force mounting when more control is needed. Useful when
376
377
  * controlling animation with React animation libraries.
377
378
  */
378
379
  forceMount?: true;
379
- }
380
+ };
380
381
 
381
382
  const TooltipContent = forwardRef<TooltipContentElement, TooltipContentProps>(
382
383
  (props: TooltipScopedProps<TooltipContentProps>, forwardedRef) => {
@@ -400,7 +401,7 @@ type Point = { x: number; y: number };
400
401
  type Polygon = Point[];
401
402
 
402
403
  type TooltipContentHoverableElement = TooltipContentImplElement;
403
- interface TooltipContentHoverableProps extends TooltipContentImplProps {}
404
+ type TooltipContentHoverableProps = TooltipContentImplProps;
404
405
 
405
406
  const TooltipContentHoverable = forwardRef<TooltipContentHoverableElement, TooltipContentHoverableProps>(
406
407
  (props: TooltipScopedProps<TooltipContentHoverableProps>, forwardedRef) => {
@@ -479,10 +480,10 @@ const [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] =
479
480
  isInside: false,
480
481
  });
481
482
 
482
- type TooltipContentImplElement = ElementRef<typeof PopperPrimitive.Content>;
483
+ type TooltipContentImplElement = ComponentRef<typeof PopperPrimitive.Content>;
483
484
  type DismissableLayerProps = ComponentPropsWithoutRef<typeof DismissableLayer>;
484
485
  type PopperContentProps = ComponentPropsWithoutRef<typeof PopperPrimitive.Content>;
485
- interface TooltipContentImplProps extends Omit<PopperContentProps, 'onPlaced'> {
486
+ type TooltipContentImplProps = Omit<PopperContentProps, 'onPlaced'> & {
486
487
  /**
487
488
  * A more descriptive label for accessibility purpose
488
489
  */
@@ -498,7 +499,7 @@ interface TooltipContentImplProps extends Omit<PopperContentProps, 'onPlaced'> {
498
499
  * Can be prevented.
499
500
  */
500
501
  onPointerDownOutside?: DismissableLayerProps['onPointerDownOutside'];
501
- }
502
+ };
502
503
 
503
504
  const TooltipContentImpl = forwardRef<TooltipContentImplElement, TooltipContentImplProps>(
504
505
  (props: TooltipScopedProps<TooltipContentImplProps>, forwardedRef) => {
@@ -574,15 +575,15 @@ const TooltipContentImpl = forwardRef<TooltipContentImplElement, TooltipContentI
574
575
 
575
576
  TooltipContent.displayName = CONTENT_NAME;
576
577
 
577
- /* -------------------------------------------------------------------------------------------------
578
- * TooltipArrow
579
- * ----------------------------------------------------------------------------------------------- */
578
+ //
579
+ // TooltipArrow
580
+ //
580
581
 
581
582
  const ARROW_NAME = 'TooltipArrow';
582
583
 
583
- type TooltipArrowElement = ElementRef<typeof PopperPrimitive.Arrow>;
584
+ type TooltipArrowElement = ComponentRef<typeof PopperPrimitive.Arrow>;
584
585
  type PopperArrowProps = ComponentPropsWithoutRef<typeof PopperPrimitive.Arrow>;
585
- interface TooltipArrowProps extends PopperArrowProps {}
586
+ type TooltipArrowProps = PopperArrowProps;
586
587
 
587
588
  const TooltipArrow = forwardRef<TooltipArrowElement, TooltipArrowProps>(
588
589
  (props: TooltipScopedProps<TooltipArrowProps>, forwardedRef) => {
@@ -599,8 +600,6 @@ const TooltipArrow = forwardRef<TooltipArrowElement, TooltipArrowProps>(
599
600
 
600
601
  TooltipArrow.displayName = ARROW_NAME;
601
602
 
602
- /* ----------------------------------------------------------------------------------------------- */
603
-
604
603
  type TooltipSide = NonNullable<TooltipContentProps['side']>;
605
604
 
606
605
  const getExitSideFromRect = (point: Point, rect: DOMRect): TooltipSide => {
@@ -755,6 +754,10 @@ const getHullPresorted = <P extends Point>(points: Readonly<Array<P>>): Array<P>
755
754
  }
756
755
  };
757
756
 
757
+ //
758
+ // Tooltip
759
+ //
760
+
758
761
  export const Tooltip = {
759
762
  Provider: TooltipProvider,
760
763
  Trigger: TooltipTrigger,
@@ -2,29 +2,37 @@
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';
13
+ export * from './Carousel';
9
14
  export * from './Clipboard';
10
- export * from './Dialogs';
15
+ export * from './Dialog';
16
+ export * from './ErrorFallback';
17
+ export * from './Focus';
11
18
  export * from './Icon';
19
+ export * from './Image';
12
20
  export * from './Input';
13
21
  export * from './Link';
14
- export * from './Lists';
22
+ export * from './List';
15
23
  export * from './Main';
16
- export * from './Menus';
24
+ export * from './MediaPlayer';
25
+ export * from './Menu';
17
26
  export * from './Message';
18
27
  export * from './Popover';
19
28
  export * from './Status';
20
29
  export * from './ScrollArea';
30
+ export * from './ScrollContainer';
21
31
  export * from './Select';
22
32
  export * from './Separator';
33
+ export * from './Skeleton';
34
+ export * from './Splitter';
23
35
  export * from './Tag';
24
36
  export * from './Toast';
25
37
  export * from './Toolbar';
26
38
  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
+ };
@@ -0,0 +1,115 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { Primitive } from '@radix-ui/react-primitive';
6
+ import { Slot } from '@radix-ui/react-slot';
7
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
8
+ import React, { PropsWithChildren } from 'react';
9
+
10
+ import { composable, composableProps, mx, slottable } from '@dxos/ui-theme';
11
+
12
+ import { withTheme } from '../testing';
13
+ import { ThemedClassName } from '../util';
14
+
15
+ /**
16
+ * Radix-style composition.
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,
19
+ * instead cloning the part's child and passing it the props and behavior required to make it functional.
20
+ * https://www.radix-ui.com/primitives/docs/guides/composition
21
+ */
22
+
23
+ const Outer = slottable<HTMLDivElement, { priority?: number }>(
24
+ ({ children, asChild, priority, ...props }, forwardedRef) => {
25
+ const Comp = asChild ? Slot : Primitive.div;
26
+ return (
27
+ <Comp
28
+ {...composableProps<HTMLDivElement>(props, { classNames: 'p-2 border border-red-500 rounded' })}
29
+ ref={forwardedRef}
30
+ >
31
+ {children}
32
+ </Comp>
33
+ );
34
+ },
35
+ );
36
+
37
+ const Middle = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
38
+ const Comp = asChild ? Slot : Primitive.div;
39
+ return (
40
+ <Comp
41
+ {...composableProps<HTMLDivElement>(props, { classNames: 'p-2 border border-red-500 rounded' })}
42
+ ref={forwardedRef}
43
+ >
44
+ {children}
45
+ </Comp>
46
+ );
47
+ });
48
+
49
+ const Leaf = composable<HTMLButtonElement>(({ children, ...props }, forwardedRef) => {
50
+ return (
51
+ <button
52
+ {...composableProps<HTMLButtonElement>(props, { classNames: 'p-2 border border-red-500 rounded' })}
53
+ ref={forwardedRef}
54
+ >
55
+ {children}
56
+ </button>
57
+ );
58
+ });
59
+
60
+ /** This isn't a valid child for a `slottable` component. */
61
+ const Simple = ({ children, classNames }: ThemedClassName<PropsWithChildren>) => (
62
+ <div className={mx(classNames)}>{children}</div>
63
+ );
64
+
65
+ const meta = {
66
+ title: 'ui/react-ui-core/exemplars/slot',
67
+ decorators: [withTheme()],
68
+ parameters: {
69
+ layout: 'centered',
70
+ },
71
+ } satisfies Meta;
72
+
73
+ export default meta;
74
+
75
+ type Story = StoryObj<typeof meta>;
76
+
77
+ export const Single: Story = {
78
+ render: () => (
79
+ <Outer asChild role='article' classNames='border-green-500' priority={1}>
80
+ <Leaf>Single asChild (non-compliant — see console)</Leaf>
81
+ </Outer>
82
+ ),
83
+ };
84
+
85
+ export const Nested: Story = {
86
+ render: () => (
87
+ <Outer asChild role='article' classNames='border-blue-500'>
88
+ <Middle asChild>
89
+ <Leaf>Nested asChild</Leaf>
90
+ </Middle>
91
+ </Outer>
92
+ ),
93
+ };
94
+
95
+ export const Inner: Story = {
96
+ render: () => (
97
+ <Outer asChild role='article' classNames='border-orange-500'>
98
+ <Middle asChild>
99
+ <Leaf>
100
+ <div>Leaf</div>
101
+ </Leaf>
102
+ </Middle>
103
+ </Outer>
104
+ ),
105
+ };
106
+
107
+ export const Error: Story = {
108
+ render: () => (
109
+ <Outer asChild role='none' classNames='p-2 border border-green-500 rounded'>
110
+ <Middle asChild>
111
+ <Simple>Simple</Simple>
112
+ </Middle>
113
+ </Outer>
114
+ ),
115
+ };
@@ -0,0 +1,127 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import {
6
+ useArrowNavigationGroup,
7
+ useFocusFinders,
8
+ useFocusableGroup,
9
+ useMergedTabsterAttributes_unstable,
10
+ } from '@fluentui/react-tabster';
11
+ import { type Decorator, type Meta, type StoryObj } from '@storybook/react-vite';
12
+ import React, { forwardRef, useEffect, useMemo, useRef } from 'react';
13
+ import { createTabster, disposeTabster } from 'tabster';
14
+
15
+ import { Input, ScrollArea } from '@dxos/react-ui';
16
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
17
+ import { mx } from '@dxos/ui-theme';
18
+
19
+ // TODO(burdon): Factor out styles (incl. tabster debugging).
20
+ // TODO(burdon): Implement horizontal movement between columns when column is selected.
21
+ // TODO(burdon): Prevent tab out of app.
22
+
23
+ const border =
24
+ 'rounded-xs outline-hidden border border-subdued-separator focus:border-primary-500 focus-within:border-rose-500';
25
+
26
+ const Board = forwardRef<HTMLDivElement, { columns: string[][] }>(({ columns }, ref) => {
27
+ const arrowNavigationAttrs = useArrowNavigationGroup({ axis: 'horizontal', memorizeCurrent: true, tabbable: true });
28
+
29
+ return (
30
+ <div ref={ref} tabIndex={0} {...arrowNavigationAttrs} className='flex h-full w-full overflow-hidden'>
31
+ <div className={mx('flex h-full overflow-x-auto p-4 gap-4')}>
32
+ {columns.map((column) => (
33
+ <Column key={column[0]} items={column} />
34
+ ))}
35
+ </div>
36
+ </div>
37
+ );
38
+ });
39
+
40
+ const Column = forwardRef<HTMLDivElement, { items: string[] }>(({ items }, ref) => {
41
+ const focusableGroupAttrs = useFocusableGroup({ tabBehavior: 'limited' });
42
+ const arrowNavigationAttrs = useArrowNavigationGroup({ axis: 'vertical', memorizeCurrent: true });
43
+ const tabsterAttrs = useMergedTabsterAttributes_unstable(focusableGroupAttrs, arrowNavigationAttrs);
44
+
45
+ return (
46
+ <ScrollArea.Root orientation='vertical' classNames={mx('w-[25rem]', border)}>
47
+ <ScrollArea.Viewport {...tabsterAttrs} classNames='p-4 gap-4' ref={ref}>
48
+ {items.map((item) => (
49
+ <Item key={item} value={item} />
50
+ ))}
51
+ </ScrollArea.Viewport>
52
+ </ScrollArea.Root>
53
+ );
54
+ });
55
+
56
+ const Item = forwardRef<HTMLDivElement, { value: string }>(({ value }, ref) => {
57
+ const focusableGroupAttrs = useFocusableGroup();
58
+
59
+ return (
60
+ <div
61
+ ref={ref}
62
+ tabIndex={0}
63
+ {...focusableGroupAttrs}
64
+ className={mx('flex shrink-0 w-full gap-4 p-4 items-center', border)}
65
+ >
66
+ <Input.Root>
67
+ <Input.Checkbox />
68
+ </Input.Root>
69
+ <Input.Root>
70
+ <Input.TextInput defaultValue={value} />
71
+ </Input.Root>
72
+ </div>
73
+ );
74
+ });
75
+
76
+ const DefaultStory = () => {
77
+ const columns = useMemo(() => {
78
+ return [['A1', 'A2', 'A3'], ['B1'], ['C1', 'C2', 'C3', 'C4', 'C5', 'C6'], ['D1', 'D2']];
79
+ }, []);
80
+
81
+ const ref = useRef<HTMLDivElement>(null);
82
+ const { findFirstFocusable } = useFocusFinders();
83
+ useEffect(() => {
84
+ if (ref.current) {
85
+ findFirstFocusable(ref.current)?.focus();
86
+ }
87
+ }, []);
88
+
89
+ return <Board columns={columns} ref={ref} />;
90
+ };
91
+
92
+ // TODO(burdon): This doesn't seem to be necessary or recongized; memoization doesn't work.
93
+ const withTabster: Decorator = (Story) => {
94
+ useEffect(() => {
95
+ const tabster = createTabster(window, {
96
+ autoRoot: {},
97
+ // TODO(burdon): Not called.
98
+ // checkUncontrolledCompletely: (el) => {
99
+ // console.log(el);
100
+ // return true;
101
+ // },
102
+ });
103
+
104
+ return () => {
105
+ disposeTabster(tabster);
106
+ };
107
+ }, []);
108
+
109
+ return <Story />;
110
+ };
111
+
112
+ const meta: Meta<typeof DefaultStory> = {
113
+ title: 'ui/react-ui-core/exemplars/tabster',
114
+ component: DefaultStory,
115
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' }), withTabster],
116
+ parameters: {
117
+ layout: 'fullscreen',
118
+ },
119
+ };
120
+
121
+ export default meta;
122
+
123
+ type Story = StoryObj<typeof meta>;
124
+
125
+ export const Default: Story = {
126
+ args: {},
127
+ };