@dxos/react-ui 0.8.4-main.c85a9c8dae → 0.8.4-main.cb12b3f963

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 (301) hide show
  1. package/dist/lib/browser/{chunk-2FKSMWNY.mjs → chunk-BDBC6H6V.mjs} +79 -5
  2. package/dist/lib/browser/chunk-BDBC6H6V.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +1203 -1020
  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 +44 -14
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/browser/translations.mjs +18 -0
  9. package/dist/lib/browser/translations.mjs.map +7 -0
  10. package/dist/lib/node-esm/{chunk-ZNBLTSHI.mjs → chunk-3JSJK2ZY.mjs} +79 -5
  11. package/dist/lib/node-esm/chunk-3JSJK2ZY.mjs.map +7 -0
  12. package/dist/lib/node-esm/index.mjs +1203 -1020
  13. package/dist/lib/node-esm/index.mjs.map +4 -4
  14. package/dist/lib/node-esm/meta.json +1 -1
  15. package/dist/lib/node-esm/testing/index.mjs +44 -14
  16. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  17. package/dist/lib/node-esm/translations.mjs +20 -0
  18. package/dist/lib/node-esm/translations.mjs.map +7 -0
  19. package/dist/types/src/components/Avatars/Avatar.d.ts +1 -1
  20. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  21. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  22. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  23. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  24. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  25. package/dist/types/src/components/Button/Button.d.ts +2 -2
  26. package/dist/types/src/components/Button/Button.d.ts.map +1 -1
  27. package/dist/types/src/components/Button/Button.stories.d.ts +1 -1
  28. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -1
  29. package/dist/types/src/components/Button/IconButton.d.ts +1 -0
  30. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
  31. package/dist/types/src/components/Button/IconButton.stories.d.ts +3 -0
  32. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
  33. package/dist/types/src/components/Button/Toggle.d.ts +2 -2
  34. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -1
  35. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -1
  36. package/dist/types/src/components/Button/ToggleGroup.d.ts +6 -6
  37. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -1
  38. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +2 -2
  39. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -1
  40. package/dist/types/src/components/Card/Card.d.ts +70 -64
  41. package/dist/types/src/components/Card/Card.d.ts.map +1 -1
  42. package/dist/types/src/components/Card/Card.stories.d.ts +2 -2
  43. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -1
  44. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  45. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  46. package/dist/types/src/components/Clipboard/index.d.ts +10 -1
  47. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  48. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  49. package/dist/types/src/components/Dialog/AlertDialog.d.ts +42 -31
  50. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
  51. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -1
  52. package/dist/types/src/components/Dialog/Dialog.d.ts +47 -30
  53. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  54. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +3 -2
  55. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
  56. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  57. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -1
  58. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -1
  59. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +14 -3
  60. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -1
  61. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -1
  62. package/dist/types/src/components/Focus/Focus.d.ts +36 -0
  63. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -0
  64. package/dist/types/src/components/Focus/Focus.stories.d.ts +9 -0
  65. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -0
  66. package/dist/types/src/components/Focus/index.d.ts +2 -0
  67. package/dist/types/src/components/Focus/index.d.ts.map +1 -0
  68. package/dist/types/src/components/Icon/Icon.d.ts +3 -0
  69. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  70. package/dist/types/src/components/Icon/Icon.stories.d.ts +11 -3
  71. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -1
  72. package/dist/types/src/components/Image/Image.d.ts +2 -1
  73. package/dist/types/src/components/Image/Image.d.ts.map +1 -1
  74. package/dist/types/src/components/Image/Image.stories.d.ts +3 -2
  75. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -1
  76. package/dist/types/src/components/Input/Input.d.ts +14 -17
  77. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  78. package/dist/types/src/components/Input/Input.stories.d.ts +3 -3
  79. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  80. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  81. package/dist/types/src/components/List/List.d.ts +5 -3
  82. package/dist/types/src/components/List/List.d.ts.map +1 -1
  83. package/dist/types/src/components/List/List.stories.d.ts +3 -1
  84. package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
  85. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -1
  86. package/dist/types/src/components/List/Tree.d.ts +2 -2
  87. package/dist/types/src/components/List/Tree.d.ts.map +1 -1
  88. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -1
  89. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -1
  90. package/dist/types/src/components/List/Treegrid.d.ts +5 -9
  91. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
  92. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -1
  93. package/dist/types/src/components/Main/Main.d.ts +7 -3
  94. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  95. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  96. package/dist/types/src/components/Main/useSwipeToDismiss.d.ts.map +1 -1
  97. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
  98. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -1
  99. package/dist/types/src/components/Menu/DropdownMenu.d.ts +58 -49
  100. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
  101. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +14 -1
  102. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -1
  103. package/dist/types/src/components/Message/Message.d.ts +1 -1
  104. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  105. package/dist/types/src/components/Message/Message.stories.d.ts +2 -2
  106. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  107. package/dist/types/src/components/Popover/Popover.d.ts +38 -22
  108. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  109. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  110. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +12 -11
  111. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  112. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +21 -10
  113. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  114. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +42 -13
  115. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  116. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +5 -6
  117. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
  118. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  119. package/dist/types/src/components/Select/Select.stories.d.ts +2 -2
  120. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  121. package/dist/types/src/components/Separator/Separator.d.ts +3 -3
  122. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  123. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -1
  124. package/dist/types/src/components/Splitter/Splitter.d.ts +19 -21
  125. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -1
  126. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -1
  127. package/dist/types/src/components/Status/Status.d.ts +3 -4
  128. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  129. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  130. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  131. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +1 -1
  132. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  133. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts +1 -1
  134. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -1
  135. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +54 -55
  136. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  137. package/dist/types/src/components/ThemeProvider/index.d.ts +1 -1
  138. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  139. package/dist/types/src/components/Toast/Toast.d.ts +16 -16
  140. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  141. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  142. package/dist/types/src/components/Toolbar/Toolbar.d.ts +10 -20
  143. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  144. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  145. package/dist/types/src/components/Tooltip/Tooltip.d.ts +10 -10
  146. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  147. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +2 -2
  148. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  149. package/dist/types/src/components/index.d.ts +1 -0
  150. package/dist/types/src/components/index.d.ts.map +1 -1
  151. package/dist/types/src/exemplars/generics.stories.d.ts +6 -5
  152. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -1
  153. package/dist/types/src/exemplars/slot.stories.d.ts +1 -0
  154. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -1
  155. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -1
  156. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -1
  157. package/dist/types/src/hooks/index.d.ts +1 -0
  158. package/dist/types/src/hooks/index.d.ts.map +1 -1
  159. package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
  160. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  161. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  162. package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
  163. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  164. package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -1
  165. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  166. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  167. package/dist/types/src/playground/Custom.stories.d.ts +1 -1
  168. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  169. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  170. package/dist/types/src/primitives/Column/Column.d.ts +20 -19
  171. package/dist/types/src/primitives/Column/Column.d.ts.map +1 -1
  172. package/dist/types/src/primitives/Column/Column.stories.d.ts +19 -0
  173. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -1
  174. package/dist/types/src/primitives/Container/Container.d.ts +7 -0
  175. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
  176. package/dist/types/src/primitives/Container/Container.stories.d.ts +6 -0
  177. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
  178. package/dist/types/src/primitives/Container/index.d.ts +2 -0
  179. package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
  180. package/dist/types/src/primitives/Flex/Flex.d.ts +8 -5
  181. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -1
  182. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -1
  183. package/dist/types/src/primitives/Grid/Grid.d.ts +6 -5
  184. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -1
  185. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -1
  186. package/dist/types/src/primitives/Panel/Panel.d.ts +23 -22
  187. package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -1
  188. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -1
  189. package/dist/types/src/primitives/index.d.ts +1 -0
  190. package/dist/types/src/primitives/index.d.ts.map +1 -1
  191. package/dist/types/src/testing/Loading.d.ts +9 -0
  192. package/dist/types/src/testing/Loading.d.ts.map +1 -0
  193. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
  194. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
  195. package/dist/types/src/testing/decorators/withTheme.d.ts +1 -1
  196. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  197. package/dist/types/src/testing/index.d.ts +1 -0
  198. package/dist/types/src/testing/index.d.ts.map +1 -1
  199. package/dist/types/src/translations.d.ts +3 -3
  200. package/dist/types/src/translations.d.ts.map +1 -1
  201. package/dist/types/src/util/usePx.d.ts.map +1 -1
  202. package/dist/types/tsconfig.tsbuildinfo +1 -1
  203. package/package.json +28 -25
  204. package/src/components/Avatars/Avatar.stories.tsx +2 -3
  205. package/src/components/Avatars/Avatar.tsx +1 -2
  206. package/src/components/Avatars/AvatarGroup.stories.tsx +0 -1
  207. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +1 -2
  208. package/src/components/Button/Button.stories.tsx +0 -1
  209. package/src/components/Button/Button.tsx +5 -13
  210. package/src/components/Button/IconButton.stories.tsx +6 -4
  211. package/src/components/Button/IconButton.tsx +3 -4
  212. package/src/components/Button/Toggle.stories.tsx +0 -1
  213. package/src/components/Button/Toggle.tsx +4 -4
  214. package/src/components/Button/ToggleGroup.stories.tsx +0 -1
  215. package/src/components/Button/ToggleGroup.tsx +12 -16
  216. package/src/components/Card/Card.stories.tsx +12 -12
  217. package/src/components/Card/Card.tsx +283 -128
  218. package/src/components/Clipboard/CopyButton.tsx +3 -4
  219. package/src/components/Dialog/AlertDialog.stories.tsx +5 -6
  220. package/src/components/Dialog/AlertDialog.tsx +67 -126
  221. package/src/components/Dialog/Dialog.stories.tsx +64 -9
  222. package/src/components/Dialog/Dialog.tsx +84 -88
  223. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +3 -8
  224. package/src/components/ErrorFallback/ErrorStack.tsx +36 -2
  225. package/src/components/Focus/AUDIT.md +43 -0
  226. package/src/components/Focus/Focus.stories.tsx +230 -0
  227. package/src/components/Focus/Focus.tsx +201 -0
  228. package/src/components/Focus/index.ts +5 -0
  229. package/src/components/Icon/Icon.stories.tsx +43 -13
  230. package/src/components/Icon/Icon.tsx +5 -1
  231. package/src/components/Image/Image.stories.tsx +3 -3
  232. package/src/components/Image/Image.tsx +31 -8
  233. package/src/components/Input/Input.stories.tsx +3 -4
  234. package/src/components/Input/Input.tsx +7 -7
  235. package/src/components/Link/Link.stories.tsx +0 -1
  236. package/src/components/List/List.stories.tsx +2 -3
  237. package/src/components/List/List.tsx +6 -5
  238. package/src/components/List/Tree.stories.tsx +1 -2
  239. package/src/components/List/Tree.tsx +0 -1
  240. package/src/components/List/TreeDropIndicator.tsx +1 -1
  241. package/src/components/List/Treegrid.stories.tsx +26 -27
  242. package/src/components/List/Treegrid.tsx +14 -14
  243. package/src/components/Main/Main.stories.tsx +0 -1
  244. package/src/components/Main/Main.tsx +1 -2
  245. package/src/components/Menu/ContextMenu.stories.tsx +0 -1
  246. package/src/components/Menu/DropdownMenu.stories.tsx +0 -1
  247. package/src/components/Menu/DropdownMenu.tsx +48 -42
  248. package/src/components/Message/Message.stories.tsx +7 -8
  249. package/src/components/Message/Message.tsx +23 -10
  250. package/src/components/Popover/Popover.stories.tsx +4 -5
  251. package/src/components/Popover/Popover.tsx +42 -42
  252. package/src/components/ScrollArea/ScrollArea.stories.tsx +93 -30
  253. package/src/components/ScrollArea/ScrollArea.tsx +41 -25
  254. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +20 -18
  255. package/src/components/ScrollContainer/ScrollContainer.tsx +200 -91
  256. package/src/components/Select/Select.stories.tsx +5 -6
  257. package/src/components/Separator/Separator.tsx +4 -7
  258. package/src/components/Skeleton/Skeleton.stories.tsx +0 -1
  259. package/src/components/Splitter/Splitter.stories.tsx +29 -29
  260. package/src/components/Splitter/Splitter.tsx +35 -46
  261. package/src/components/Status/Status.stories.tsx +0 -1
  262. package/src/components/Status/Status.tsx +8 -5
  263. package/src/components/Tag/Tag.stories.tsx +0 -1
  264. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +0 -1
  265. package/src/components/ThemeProvider/ThemeProvider.tsx +5 -4
  266. package/src/components/ThemeProvider/index.ts +1 -1
  267. package/src/components/Toast/Toast.stories.tsx +0 -1
  268. package/src/components/Toast/Toast.tsx +16 -31
  269. package/src/components/Toolbar/Toolbar.stories.tsx +0 -1
  270. package/src/components/Toolbar/Toolbar.tsx +34 -47
  271. package/src/components/Tooltip/Tooltip.stories.tsx +6 -7
  272. package/src/components/Tooltip/Tooltip.tsx +15 -16
  273. package/src/components/index.ts +1 -0
  274. package/src/exemplars/generics.stories.tsx +7 -15
  275. package/src/exemplars/slot.stories.tsx +66 -68
  276. package/src/exemplars/tabster.stories.tsx +1 -1
  277. package/src/exemplars/virtualizer.stories.tsx +4 -4
  278. package/src/hooks/index.ts +1 -0
  279. package/src/hooks/useDensityContext.ts +2 -2
  280. package/src/playground/Custom.stories.tsx +6 -9
  281. package/src/primitives/Column/AUDIT.md +148 -0
  282. package/src/primitives/Column/Column.stories.tsx +128 -19
  283. package/src/primitives/Column/Column.tsx +89 -80
  284. package/src/primitives/Container/Container.stories.tsx +29 -0
  285. package/src/primitives/Container/Container.tsx +19 -0
  286. package/src/primitives/Container/index.ts +5 -0
  287. package/src/primitives/Flex/Flex.stories.tsx +0 -1
  288. package/src/primitives/Flex/Flex.tsx +20 -20
  289. package/src/primitives/Grid/Grid.stories.tsx +0 -1
  290. package/src/primitives/Grid/Grid.tsx +23 -36
  291. package/src/primitives/Panel/Panel.stories.tsx +9 -8
  292. package/src/primitives/Panel/Panel.tsx +43 -60
  293. package/src/primitives/index.ts +1 -0
  294. package/src/testing/Loading.tsx +47 -0
  295. package/src/testing/decorators/withLayout.tsx +6 -6
  296. package/src/testing/decorators/withTheme.tsx +10 -7
  297. package/src/testing/index.ts +2 -0
  298. package/src/translations.ts +3 -3
  299. package/src/util/usePx.ts +1 -0
  300. package/dist/lib/browser/chunk-2FKSMWNY.mjs.map +0 -7
  301. package/dist/lib/node-esm/chunk-ZNBLTSHI.mjs.map +0 -7
@@ -5,21 +5,21 @@
5
5
  import { createContextScope } from '@radix-ui/react-context';
6
6
  import { Primitive } from '@radix-ui/react-primitive';
7
7
  import { Slot } from '@radix-ui/react-slot';
8
- import React, { forwardRef } from 'react';
8
+ import React from 'react';
9
9
 
10
- import { type SlottableProps } from '@dxos/ui-types';
10
+ import { composableProps, slottable } from '@dxos/ui-theme';
11
11
 
12
12
  import { useThemeContext } from '../../hooks';
13
+ import { ThemedClassName } from '../../util';
13
14
 
14
15
  type ScopedProps<P> = P & { __scopeSplitter?: any };
15
16
 
16
- // TODO(burdon): Enable resize.
17
17
  // TODO(burdon): Generalize horizontal/vertical and change to start/end.
18
- type Mode = 'upper' | 'lower' | 'both';
18
+ type Mode = 'top' | 'bottom' | 'split';
19
19
 
20
20
  type SplitterContextValue = {
21
21
  mode: Mode;
22
- ratio: number;
22
+ ratio?: number;
23
23
  transition: number;
24
24
  };
25
25
 
@@ -35,33 +35,20 @@ const [SplitterProvider, useSplitterContext] = createSplitterContext<SplitterCon
35
35
 
36
36
  const ROOT_NAME = 'Splitter.Root';
37
37
 
38
- type RootProps = SlottableProps<HTMLDivElement> & Partial<SplitterContextValue>;
39
-
40
- const Root = forwardRef<HTMLDivElement, ScopedProps<RootProps>>(
41
- (
42
- {
43
- __scopeSplitter,
44
- classNames,
45
- className,
46
- asChild,
47
- mode = 'upper',
48
- ratio = 0.5,
49
- transition = 250,
50
- children,
51
- ...rootProps
52
- },
53
- forwardedRef,
54
- ) => {
38
+ type RootOwnProps = Partial<SplitterContextValue>;
39
+
40
+ type RootProps = RootOwnProps;
41
+
42
+ const Root = slottable<HTMLDivElement, RootOwnProps>(
43
+ ({ asChild, mode = 'top', ratio = 0.5, transition = 250, children, ...props }, forwardedRef) => {
55
44
  const { tx } = useThemeContext();
45
+ const { __scopeSplitter, ...rest } = props as ScopedProps<typeof props>;
46
+ const { className, ...restProps } = composableProps(rest);
56
47
  const Comp = asChild ? Slot : Primitive.div;
48
+
57
49
  return (
58
50
  <SplitterProvider scope={__scopeSplitter} mode={mode} ratio={ratio} transition={transition}>
59
- <Comp
60
- role='none'
61
- {...rootProps}
62
- ref={forwardedRef}
63
- className={tx('splitter.root', {}, [className, classNames])}
64
- >
51
+ <Comp {...restProps} ref={forwardedRef} className={tx('splitter.root', {}, className)}>
65
52
  {children}
66
53
  </Comp>
67
54
  </SplitterProvider>
@@ -77,40 +64,42 @@ Root.displayName = ROOT_NAME;
77
64
 
78
65
  const PANEL_NAME = 'Splitter.Panel';
79
66
 
80
- type PanelProps = SlottableProps<HTMLDivElement> & {
81
- position: 'upper' | 'lower';
82
- };
67
+ type PanelOwnProps = ThemedClassName<{
68
+ position: 'top' | 'bottom';
69
+ }>;
70
+
71
+ type PanelProps = PanelOwnProps;
83
72
 
84
- const Panel = forwardRef<HTMLDivElement, ScopedProps<PanelProps>>(
85
- ({ __scopeSplitter, classNames, className, asChild, children, position, style, ...props }, forwardedRef) => {
86
- const { mode, ratio, transition } = useSplitterContext(PANEL_NAME, __scopeSplitter);
73
+ const Panel = slottable<HTMLDivElement, PanelOwnProps>(
74
+ ({ classNames, asChild, children, position, style, ...props }, forwardedRef) => {
87
75
  const { tx } = useThemeContext();
76
+ const { __scopeSplitter, ...rest } = props as ScopedProps<typeof props>;
88
77
  const Comp = asChild ? Slot : Primitive.div;
78
+ const { mode, ratio = 0.5, transition } = useSplitterContext(PANEL_NAME, __scopeSplitter);
79
+ const { className, ...restProps } = composableProps(rest);
89
80
 
90
81
  // Calculate position and height based on mode and ratio.
91
- const isUpper = position === 'upper';
92
- const top = isUpper ? '0%' : mode === 'upper' ? '100%' : mode === 'lower' ? '0%' : `${ratio * 100}%`;
93
-
94
- const height = isUpper
95
- ? mode === 'upper'
82
+ const isTopPanel = position === 'top';
83
+ const topOffset = isTopPanel ? '0%' : mode === 'top' ? '100%' : mode === 'bottom' ? '0%' : `${ratio * 100}%`;
84
+ const height = isTopPanel
85
+ ? mode === 'top'
96
86
  ? '100%'
97
- : mode === 'lower'
87
+ : mode === 'bottom'
98
88
  ? '0%'
99
89
  : `${ratio * 100}%`
100
- : mode === 'lower'
90
+ : mode === 'bottom'
101
91
  ? '100%'
102
- : mode === 'upper'
92
+ : mode === 'top'
103
93
  ? '0%'
104
94
  : `${(1 - ratio) * 100}%`;
105
95
 
106
96
  return (
107
97
  <Comp
108
- role='none'
109
- {...props}
98
+ {...restProps}
110
99
  ref={forwardedRef}
111
- className={tx('splitter.panel', {}, [className, classNames])}
100
+ className={tx('splitter.panel', {}, className)}
112
101
  style={{
113
- top,
102
+ top: topOffset,
114
103
  height,
115
104
  transition: `top ${transition}ms, height ${transition}ms ease-out`,
116
105
  ...style,
@@ -6,7 +6,6 @@ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React from 'react';
7
7
 
8
8
  import { withTheme } from '../../testing';
9
-
10
9
  import { Status } from './Status';
11
10
 
12
11
  const meta = {
@@ -4,14 +4,17 @@
4
4
 
5
5
  import React, { type ComponentPropsWithRef, forwardRef } from 'react';
6
6
 
7
+ import { type StatusStyleProps } from '@dxos/ui-theme';
8
+
7
9
  import { useThemeContext } from '../../hooks';
8
10
  import { type ThemedClassName } from '../../util';
9
11
 
10
- type StatusProps = ThemedClassName<ComponentPropsWithRef<'span'>> & {
11
- indeterminate?: boolean;
12
- variant?: 'default' | 'main-bottom';
13
- progress?: number;
14
- };
12
+ type StatusProps = ThemedClassName<
13
+ ComponentPropsWithRef<'span'> &
14
+ StatusStyleProps & {
15
+ progress?: number;
16
+ }
17
+ >;
15
18
 
16
19
  const Status = forwardRef<HTMLSpanElement, StatusProps>(
17
20
  ({ classNames, children, progress = 0, indeterminate, variant, ...props }, forwardedRef) => {
@@ -9,7 +9,6 @@ import { hues } from '@dxos/ui-theme';
9
9
  import { type ChromaticPalette, type MessageValence } from '@dxos/ui-types';
10
10
 
11
11
  import { withLayout, withTheme } from '../../testing';
12
-
13
12
  import { Tag } from './Tag';
14
13
 
15
14
  const palettes = ['neutral', 'success', 'info', 'warning', 'error', ...hues] as (ChromaticPalette | MessageValence)[];
@@ -7,7 +7,6 @@ import React from 'react';
7
7
 
8
8
  import { useThemeContext } from '../../hooks';
9
9
  import { withLayout, withTheme } from '../../testing';
10
-
11
10
  import { ThemeProvider } from './ThemeProvider';
12
11
 
13
12
  const meta = {
@@ -11,7 +11,6 @@ import { type SafeAreaPadding, useSafeArea } from '../../hooks';
11
11
  import { hasIosKeyboard } from '../../util';
12
12
  import { DensityProvider } from '../DensityProvider';
13
13
  import { ElevationProvider } from '../ElevationProvider';
14
-
15
14
  import { TranslationsProvider, type TranslationsProviderProps } from './TranslationsProvider';
16
15
 
17
16
  export type ThemeContextValue = {
@@ -43,7 +42,8 @@ export const ThemeProvider = ({
43
42
  tx = (_path, _styleProps, ..._options) => undefined,
44
43
  themeMode = 'dark',
45
44
  rootDensity = 'fine',
46
- ...rest
45
+ noCache,
46
+ platform,
47
47
  }: ThemeProviderProps) => {
48
48
  useEffect(() => {
49
49
  if (document.defaultView) {
@@ -54,9 +54,10 @@ export const ThemeProvider = ({
54
54
  }, []);
55
55
 
56
56
  const safeAreaPadding = useSafeArea();
57
+ // Destructure all props explicitly so useMemo deps are stable primitives, not a new `rest` object every render.
57
58
  const contextValue = useMemo(
58
- () => ({ tx, themeMode, hasIosKeyboard: hasIosKeyboard(), safeAreaPadding, ...rest }),
59
- [tx, themeMode, safeAreaPadding, rest],
59
+ () => ({ tx, themeMode, hasIosKeyboard: hasIosKeyboard(), safeAreaPadding, noCache, platform }),
60
+ [tx, themeMode, safeAreaPadding, noCache, platform],
60
61
  );
61
62
 
62
63
  return (
@@ -2,7 +2,7 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- export { type Label, isLabel, toLocalizedString } from '@dxos/ui-types';
5
+ export { type Label, isLabel, toLocalizedString } from '@dxos/ui-types/translations';
6
6
 
7
7
  export * from './ThemeProvider';
8
8
  export { useTranslation } from './TranslationsProvider';
@@ -7,7 +7,6 @@ import React, { type ReactNode, useState } from 'react';
7
7
 
8
8
  import { withTheme } from '../../testing';
9
9
  import { Button } from '../Button';
10
-
11
10
  import { Toast } from './Toast';
12
11
 
13
12
  type ActionTriggerProps = { altText: string; trigger: ReactNode };
@@ -4,47 +4,32 @@
4
4
 
5
5
  import { Primitive } from '@radix-ui/react-primitive';
6
6
  import { Slot } from '@radix-ui/react-slot';
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,
14
- ToastProvider as ToastProviderPrimitive,
15
- type ToastProviderProps as ToastProviderPrimitiveProps,
16
- Root as ToastRootPrimitive,
17
- type ToastProps as ToastRootPrimitiveProps,
18
- ToastTitle as ToastTitlePrimitive,
19
- type ToastTitleProps as ToastTitlePrimitiveProps,
20
- ToastViewport as ToastViewportPrimitive,
21
- type ToastViewportProps as ToastViewportPrimitiveProps,
22
- } from '@radix-ui/react-toast';
7
+ import * as ToastPrimitive from '@radix-ui/react-toast';
23
8
  import React, { type ComponentPropsWithRef, type FunctionComponent, forwardRef } from 'react';
24
9
 
25
10
  import { useThemeContext } from '../../hooks';
26
11
  import { type ThemedClassName } from '../../util';
27
12
  import { ElevationProvider } from '../ElevationProvider';
28
13
 
29
- type ToastProviderProps = ToastProviderPrimitiveProps;
14
+ type ToastProviderProps = ToastPrimitive.ToastProviderProps;
30
15
 
31
- const ToastProvider: FunctionComponent<ToastProviderProps> = ToastProviderPrimitive;
16
+ const ToastProvider: FunctionComponent<ToastProviderProps> = ToastPrimitive.Provider;
32
17
 
33
- type ToastViewportProps = ThemedClassName<ToastViewportPrimitiveProps>;
18
+ type ToastViewportProps = ThemedClassName<ToastPrimitive.ToastViewportProps>;
34
19
 
35
20
  const ToastViewport = forwardRef<HTMLOListElement, ToastViewportProps>(({ classNames, ...props }, forwardedRef) => {
36
21
  const { tx } = useThemeContext();
37
- return <ToastViewportPrimitive className={tx('toast.viewport', {}, classNames)} ref={forwardedRef} />;
22
+ return <ToastPrimitive.Viewport {...props} className={tx('toast.viewport', {}, classNames)} ref={forwardedRef} />;
38
23
  });
39
24
 
40
- type ToastRootProps = ThemedClassName<ToastRootPrimitiveProps>;
25
+ type ToastRootProps = ThemedClassName<ToastPrimitive.ToastProps>;
41
26
 
42
27
  const ToastRoot = forwardRef<HTMLLIElement, ToastRootProps>(({ classNames, children, ...props }, forwardedRef) => {
43
28
  const { tx } = useThemeContext();
44
29
  return (
45
- <ToastRootPrimitive {...props} className={tx('toast.root', {}, classNames)} ref={forwardedRef}>
30
+ <ToastPrimitive.Root {...props} className={tx('toast.root', {}, classNames)} ref={forwardedRef}>
46
31
  <ElevationProvider elevation='toast'>{children}</ElevationProvider>
47
- </ToastRootPrimitive>
32
+ </ToastPrimitive.Root>
48
33
  );
49
34
  });
50
35
 
@@ -56,22 +41,22 @@ const ToastBody = forwardRef<HTMLDivElement, ToastBodyProps>(({ asChild, classNa
56
41
  return <Comp {...props} className={tx('toast.body', {}, classNames)} ref={forwardedRef} />;
57
42
  });
58
43
 
59
- type ToastTitleProps = ThemedClassName<ToastTitlePrimitiveProps>;
44
+ type ToastTitleProps = ThemedClassName<ToastPrimitive.ToastTitleProps>;
60
45
 
61
46
  const ToastTitle = forwardRef<HTMLHeadingElement, ToastTitleProps>(
62
47
  ({ asChild, classNames, ...props }, forwardedRef) => {
63
48
  const { tx } = useThemeContext();
64
- const Comp = asChild ? Slot : ToastTitlePrimitive;
49
+ const Comp = asChild ? Slot : ToastPrimitive.Title;
65
50
  return <Comp {...props} className={tx('toast.title', {}, classNames)} ref={forwardedRef} />;
66
51
  },
67
52
  );
68
53
 
69
- type ToastDescriptionProps = ThemedClassName<ToastDescriptionPrimitiveProps>;
54
+ type ToastDescriptionProps = ThemedClassName<ToastPrimitive.ToastDescriptionProps>;
70
55
 
71
56
  const ToastDescription = forwardRef<HTMLParagraphElement, ToastDescriptionProps>(
72
57
  ({ asChild, classNames, ...props }, forwardedRef) => {
73
58
  const { tx } = useThemeContext();
74
- const Comp = asChild ? Slot : ToastDescriptionPrimitive;
59
+ const Comp = asChild ? Slot : ToastPrimitive.Description;
75
60
  return <Comp {...props} className={tx('toast.description', {}, classNames)} ref={forwardedRef} />;
76
61
  },
77
62
  );
@@ -86,13 +71,13 @@ const ToastActions = forwardRef<HTMLDivElement, ToastActionsProps>(
86
71
  },
87
72
  );
88
73
 
89
- type ToastActionProps = ToastActionPrimitiveProps;
74
+ type ToastActionProps = ToastPrimitive.ToastActionProps;
90
75
 
91
- const ToastAction: FunctionComponent<ToastActionProps> = ToastActionPrimitive;
76
+ const ToastAction: FunctionComponent<ToastActionProps> = ToastPrimitive.Action;
92
77
 
93
- type ToastCloseProps = ToastClosePrimitiveProps;
78
+ type ToastCloseProps = ToastPrimitive.ToastCloseProps;
94
79
 
95
- const ToastClose: FunctionComponent<ToastCloseProps> = ToastClosePrimitive;
80
+ const ToastClose: FunctionComponent<ToastCloseProps> = ToastPrimitive.Close;
96
81
 
97
82
  export const Toast = {
98
83
  Provider: ToastProvider,
@@ -9,7 +9,6 @@ import { withTheme } from '../../testing';
9
9
  import { Toggle } from '../Button';
10
10
  import { Icon } from '../Icon';
11
11
  import { Select } from '../Select';
12
-
13
12
  import { Toolbar } from './Toolbar';
14
13
 
15
14
  type StorybookToolbarProps = {};
@@ -6,15 +6,15 @@ import { Primitive } from '@radix-ui/react-primitive';
6
6
  import { Slot } from '@radix-ui/react-slot';
7
7
  import type { ToggleGroupItemProps as ToggleGroupItemPrimitiveProps } from '@radix-ui/react-toggle-group';
8
8
  import * as ToolbarPrimitive from '@radix-ui/react-toolbar';
9
- import React, { Fragment, forwardRef } from 'react';
9
+ import React, { forwardRef } from 'react';
10
10
  import { useTranslation } from 'react-i18next';
11
11
 
12
- import { type ToolbarStyleProps } from '@dxos/ui-theme';
12
+ import { composable, composableProps, slottable, type ToolbarStyleProps } from '@dxos/ui-theme';
13
13
  import { type SlottableProps } from '@dxos/ui-types';
14
14
 
15
+ import { translationKey } from '#translations';
16
+
15
17
  import { useThemeContext } from '../../hooks';
16
- import { translationKey } from '../../translations';
17
- import { type ThemedClassName } from '../../util';
18
18
  import {
19
19
  Button,
20
20
  ButtonGroup,
@@ -34,36 +34,24 @@ import { Separator, type SeparatorProps } from '../Separator';
34
34
  // Root
35
35
  //
36
36
 
37
- type ToolbarRootProps = ThemedClassName<
38
- ToolbarPrimitive.ToolbarProps &
39
- ToolbarStyleProps & {
40
- textBlockWidth?: boolean;
41
- }
42
- >;
43
-
44
- // TODO(burdon): Implement asChild property.
45
- const ToolbarRoot = forwardRef<HTMLDivElement, ToolbarRootProps>(
46
- (
47
- { classNames, children, density, disabled, layoutManaged, textBlockWidth: textBlockWidthProp, ...props },
48
- forwardedRef,
49
- ) => {
37
+ type ToolbarRootProps = ToolbarPrimitive.ToolbarProps & ToolbarStyleProps;
38
+
39
+ const ToolbarRoot = composable<HTMLDivElement, ToolbarRootProps>(
40
+ ({ children, density, disabled, layoutManaged, orientation, ...props }, forwardedRef) => {
41
+ const { className, role, ...rest } = composableProps(props);
50
42
  const { tx } = useThemeContext();
51
- const InnerRoot = textBlockWidthProp ? 'div' : Fragment;
52
- const innerRootProps = textBlockWidthProp
53
- ? {
54
- role: 'none',
55
- className: tx('toolbar.inner', { layoutManaged }, classNames),
56
- }
57
- : {};
58
43
 
59
44
  return (
60
45
  <ToolbarPrimitive.Root
61
- {...props}
62
- data-arrow-keys={props.orientation === 'vertical' ? 'up down' : 'left right'}
63
- className={tx('toolbar.root', { density, disabled, layoutManaged }, classNames)}
46
+ {...rest}
47
+ // Only pass role when explicitly set; radix provides role="toolbar" by default.
48
+ {...(role !== 'none' && { role })}
49
+ orientation={orientation}
50
+ data-arrow-keys={orientation === 'vertical' ? 'up down' : 'left right'}
51
+ className={tx('toolbar.root', { density, disabled, layoutManaged }, className)}
64
52
  ref={forwardedRef}
65
53
  >
66
- <InnerRoot {...innerRootProps}>{children}</InnerRoot>
54
+ {children}
67
55
  </ToolbarPrimitive.Root>
68
56
  );
69
57
  },
@@ -73,19 +61,18 @@ const ToolbarRoot = forwardRef<HTMLDivElement, ToolbarRootProps>(
73
61
  // Text
74
62
  //
75
63
 
76
- type ToolbarTextProps = SlottableProps<HTMLDivElement>;
64
+ type ToolbarTextProps = SlottableProps;
77
65
 
78
- const ToolbarText = forwardRef<HTMLDivElement, ToolbarTextProps>(
79
- ({ classNames, className, asChild, children, ...props }, forwardedRef) => {
80
- const { tx } = useThemeContext();
81
- const Comp = asChild ? Slot : Primitive.div;
82
- return (
83
- <Comp {...props} className={tx('toolbar.text', {}, [className, classNames])} ref={forwardedRef}>
84
- {children}
85
- </Comp>
86
- );
87
- },
88
- );
66
+ const ToolbarText = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
67
+ const { className, ...rest } = composableProps(props);
68
+ const Comp = asChild ? Slot : Primitive.div;
69
+ const { tx } = useThemeContext();
70
+ return (
71
+ <Comp {...rest} className={tx('toolbar.text', {}, className)} ref={forwardedRef}>
72
+ {children}
73
+ </Comp>
74
+ );
75
+ });
89
76
 
90
77
  //
91
78
  // Button
@@ -204,7 +191,7 @@ const ToolbarSeparator = forwardRef<HTMLDivElement, ToolbarSeparatorProps>(
204
191
  ({ variant = 'gap', ...props }, forwardedRef) => {
205
192
  return variant === 'line' ? (
206
193
  <ToolbarPrimitive.Separator asChild>
207
- <Separator {...props} ref={forwardedRef} />
194
+ <Separator orientation='vertical' {...props} ref={forwardedRef} />
208
195
  </ToolbarPrimitive.Separator>
209
196
  ) : (
210
197
  <ToolbarPrimitive.Separator className='grow' ref={forwardedRef} />
@@ -224,13 +211,13 @@ const ToolbarDragHandle = forwardRef<HTMLButtonElement, ToolbarDragHandleProps>(
224
211
  return (
225
212
  <ToolbarIconButton
226
213
  data-testid={testId}
214
+ tabIndex={-1}
227
215
  noTooltip
228
216
  iconOnly
229
217
  icon='ph--dots-six-vertical--regular'
230
218
  variant='ghost'
231
- label={label ?? t('toolbar drag handle label')}
232
- classNames='cursor-pointer'
233
- size={5}
219
+ label={label ?? t('toolbar-drag-handle.label')}
220
+ classNames='dx-focus-ring-none cursor-pointer'
234
221
  disabled={!forwardedRef}
235
222
  ref={forwardedRef}
236
223
  />
@@ -247,14 +234,14 @@ type ToolbarCloseIconButtonProps = { onClick?: () => void; label?: string };
247
234
  const ToolbarCloseIconButton = forwardRef<HTMLButtonElement, ToolbarCloseIconButtonProps>(
248
235
  ({ onClick, label }, forwardedRef) => {
249
236
  const { t } = useTranslation(translationKey);
237
+
250
238
  return (
251
239
  <ToolbarIconButton
252
240
  iconOnly
253
241
  icon='ph--x--regular'
254
242
  variant='ghost'
255
- label={label ?? t('toolbar close label')}
243
+ label={label ?? t('toolbar-close.label')}
256
244
  classNames='cursor-pointer'
257
- size={5}
258
245
  onClick={onClick}
259
246
  ref={forwardedRef}
260
247
  />
@@ -287,7 +274,7 @@ const ToolbarMenu = <T extends any | void = void>({ context, items }: ToolbarMen
287
274
  iconOnly
288
275
  variant='ghost'
289
276
  icon='ph--dots-three-vertical--regular'
290
- label={t('toolbar menu label')}
277
+ label={t('toolbar-menu.label')}
291
278
  />
292
279
  </DropdownMenu.Trigger>
293
280
  {(items?.length ?? 0) > 0 && (
@@ -5,19 +5,18 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React from 'react';
7
7
 
8
- import { faker } from '@dxos/random';
8
+ import { random } from '@dxos/random';
9
9
 
10
10
  import { withTheme } from '../../testing';
11
11
  import { Button } from '../Button';
12
-
13
12
  import { Tooltip } from './Tooltip';
14
13
 
15
- type StoryProps = {
14
+ type DefaultStoryProps = {
16
15
  tooltips: { label: string; content: string }[];
17
16
  defaultOpen?: boolean;
18
17
  };
19
18
 
20
- const DefaultStory = ({ tooltips, defaultOpen }: StoryProps) => {
19
+ const DefaultStory = ({ tooltips, defaultOpen }: DefaultStoryProps) => {
21
20
  return (
22
21
  <Tooltip.Provider defaultOpen={defaultOpen}>
23
22
  <div role='none' className='w-32'>
@@ -74,10 +73,10 @@ export const DefaultOpen: Story = {
74
73
  export const StressTest: Story = {
75
74
  args: {
76
75
  defaultOpen: true,
77
- tooltips: faker.helpers.multiple(
76
+ tooltips: random.helpers.multiple(
78
77
  () => ({
79
- label: faker.lorem.words(2),
80
- content: faker.lorem.words(5),
78
+ label: random.lorem.words(2),
79
+ content: random.lorem.words(5),
81
80
  }),
82
81
  { count: 32 },
83
82
  ),
@@ -22,9 +22,8 @@ import { useControllableState } from '@radix-ui/react-use-controllable-state';
22
22
  import * as VisuallyHiddenPrimitive from '@radix-ui/react-visually-hidden';
23
23
  import React, {
24
24
  type ComponentPropsWithoutRef,
25
- type ElementRef,
25
+ type ComponentRef,
26
26
  type FC,
27
- type MutableRefObject,
28
27
  type ReactNode,
29
28
  type RefObject,
30
29
  type SyntheticEvent,
@@ -61,13 +60,13 @@ type TooltipContextValue = {
61
60
  onOpen(): void;
62
61
  onClose(): void;
63
62
  onPointerInTransitChange(inTransit: boolean): void;
64
- isPointerInTransitRef: MutableRefObject<boolean>;
63
+ isPointerInTransitRef: RefObject<boolean>;
65
64
  disableHoverableContent: boolean;
66
65
  };
67
66
 
68
67
  const [TooltipContextProvider, useTooltipContext] = createTooltipContext<TooltipContextValue>(TOOLTIP_NAME);
69
68
 
70
- interface TooltipProviderProps {
69
+ type TooltipProviderProps = {
71
70
  children?: ReactNode;
72
71
  open?: boolean;
73
72
  defaultOpen?: boolean;
@@ -88,7 +87,7 @@ interface TooltipProviderProps {
88
87
  * @defaultValue 300
89
88
  */
90
89
  skipDelayDuration?: number;
91
- }
90
+ };
92
91
 
93
92
  const TooltipProvider: FC<TooltipProviderProps> = (props: TooltipScopedProps<TooltipProviderProps>) => {
94
93
  const {
@@ -247,7 +246,7 @@ const TooltipVirtualTrigger = ({
247
246
 
248
247
  const TRIGGER_NAME = 'TooltipTrigger';
249
248
 
250
- type TooltipTriggerElement = ElementRef<typeof Primitive.button>;
249
+ type TooltipTriggerElement = ComponentRef<typeof Primitive.button>;
251
250
  type PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;
252
251
  type TooltipTriggerProps = PrimitiveButtonProps &
253
252
  Pick<TooltipProps, 'delayDuration'> & {
@@ -335,7 +334,7 @@ const [PortalProvider, usePortalContext] = createTooltipContext<PortalContextVal
335
334
  });
336
335
 
337
336
  type PortalProps = ComponentPropsWithoutRef<typeof PortalPrimitive>;
338
- interface TooltipPortalProps {
337
+ type TooltipPortalProps = {
339
338
  children?: ReactNode;
340
339
  /**
341
340
  * Specify a container element to portal the content into.
@@ -346,7 +345,7 @@ interface TooltipPortalProps {
346
345
  * controlling animation with React animation libraries.
347
346
  */
348
347
  forceMount?: true;
349
- }
348
+ };
350
349
 
351
350
  const TooltipPortal: FC<TooltipPortalProps> = (props: TooltipScopedProps<TooltipPortalProps>) => {
352
351
  const { __scopeTooltip, forceMount, children, container } = props;
@@ -371,13 +370,13 @@ TooltipPortal.displayName = PORTAL_NAME;
371
370
  const CONTENT_NAME = 'TooltipContent';
372
371
 
373
372
  type TooltipContentElement = TooltipContentImplElement;
374
- interface TooltipContentProps extends TooltipContentImplProps {
373
+ type TooltipContentProps = TooltipContentImplProps & {
375
374
  /**
376
375
  * Used to force mounting when more control is needed. Useful when
377
376
  * controlling animation with React animation libraries.
378
377
  */
379
378
  forceMount?: true;
380
- }
379
+ };
381
380
 
382
381
  const TooltipContent = forwardRef<TooltipContentElement, TooltipContentProps>(
383
382
  (props: TooltipScopedProps<TooltipContentProps>, forwardedRef) => {
@@ -401,7 +400,7 @@ type Point = { x: number; y: number };
401
400
  type Polygon = Point[];
402
401
 
403
402
  type TooltipContentHoverableElement = TooltipContentImplElement;
404
- interface TooltipContentHoverableProps extends TooltipContentImplProps {}
403
+ type TooltipContentHoverableProps = TooltipContentImplProps;
405
404
 
406
405
  const TooltipContentHoverable = forwardRef<TooltipContentHoverableElement, TooltipContentHoverableProps>(
407
406
  (props: TooltipScopedProps<TooltipContentHoverableProps>, forwardedRef) => {
@@ -480,10 +479,10 @@ const [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] =
480
479
  isInside: false,
481
480
  });
482
481
 
483
- type TooltipContentImplElement = ElementRef<typeof PopperPrimitive.Content>;
482
+ type TooltipContentImplElement = ComponentRef<typeof PopperPrimitive.Content>;
484
483
  type DismissableLayerProps = ComponentPropsWithoutRef<typeof DismissableLayer>;
485
484
  type PopperContentProps = ComponentPropsWithoutRef<typeof PopperPrimitive.Content>;
486
- interface TooltipContentImplProps extends Omit<PopperContentProps, 'onPlaced'> {
485
+ type TooltipContentImplProps = Omit<PopperContentProps, 'onPlaced'> & {
487
486
  /**
488
487
  * A more descriptive label for accessibility purpose
489
488
  */
@@ -499,7 +498,7 @@ interface TooltipContentImplProps extends Omit<PopperContentProps, 'onPlaced'> {
499
498
  * Can be prevented.
500
499
  */
501
500
  onPointerDownOutside?: DismissableLayerProps['onPointerDownOutside'];
502
- }
501
+ };
503
502
 
504
503
  const TooltipContentImpl = forwardRef<TooltipContentImplElement, TooltipContentImplProps>(
505
504
  (props: TooltipScopedProps<TooltipContentImplProps>, forwardedRef) => {
@@ -581,9 +580,9 @@ TooltipContent.displayName = CONTENT_NAME;
581
580
 
582
581
  const ARROW_NAME = 'TooltipArrow';
583
582
 
584
- type TooltipArrowElement = ElementRef<typeof PopperPrimitive.Arrow>;
583
+ type TooltipArrowElement = ComponentRef<typeof PopperPrimitive.Arrow>;
585
584
  type PopperArrowProps = ComponentPropsWithoutRef<typeof PopperPrimitive.Arrow>;
586
- interface TooltipArrowProps extends PopperArrowProps {}
585
+ type TooltipArrowProps = PopperArrowProps;
587
586
 
588
587
  const TooltipArrow = forwardRef<TooltipArrowElement, TooltipArrowProps>(
589
588
  (props: TooltipScopedProps<TooltipArrowProps>, forwardedRef) => {
@@ -13,6 +13,7 @@ export * from './Card';
13
13
  export * from './Clipboard';
14
14
  export * from './Dialog';
15
15
  export * from './ErrorFallback';
16
+ export * from './Focus';
16
17
  export * from './Icon';
17
18
  export * from './Image';
18
19
  export * from './Input';