@dxos/react-ui 0.8.3 → 0.8.4-main.1068cf700f

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 (382) hide show
  1. package/dist/lib/browser/chunk-6DTBPJE4.mjs +774 -0
  2. package/dist/lib/browser/chunk-6DTBPJE4.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +3203 -61
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing/index.mjs +66 -50
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/chunk-JKHQSGNU.mjs +776 -0
  9. package/dist/lib/node-esm/chunk-JKHQSGNU.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +3203 -61
  11. package/dist/lib/node-esm/index.mjs.map +4 -4
  12. package/dist/lib/node-esm/meta.json +1 -1
  13. package/dist/lib/node-esm/testing/index.mjs +66 -50
  14. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  15. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +7 -0
  16. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +1 -1
  17. package/dist/types/src/components/Avatars/Avatar.d.ts +1 -1
  18. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  19. package/dist/types/src/components/Avatars/Avatar.stories.d.ts +5 -31
  20. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  21. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts +5 -11
  22. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  23. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +1 -1
  24. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  25. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts +8 -20
  26. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  27. package/dist/types/src/components/{Buttons → Button}/Button.d.ts +2 -2
  28. package/dist/types/src/components/Button/Button.d.ts.map +1 -0
  29. package/dist/types/src/components/Button/Button.stories.d.ts +17 -0
  30. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -0
  31. package/dist/types/src/components/{Buttons → Button}/IconButton.d.ts +4 -4
  32. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -0
  33. package/dist/types/src/components/Button/IconButton.stories.d.ts +13 -0
  34. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -0
  35. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -0
  36. package/dist/types/src/components/Button/Toggle.stories.d.ts +16 -0
  37. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -0
  38. package/dist/types/src/components/Button/ToggleGroup.d.ts +27 -0
  39. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -0
  40. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +27 -0
  41. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -0
  42. package/dist/types/src/components/Button/index.d.ts.map +1 -0
  43. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  44. package/dist/types/src/components/Clipboard/CopyButton.d.ts +5 -6
  45. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  46. package/dist/types/src/components/Clipboard/index.d.ts +2 -3
  47. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  48. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts +1 -1
  49. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  50. package/dist/types/src/components/{Dialogs → Dialog}/AlertDialog.d.ts +1 -1
  51. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -0
  52. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts +11 -0
  53. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -0
  54. package/dist/types/src/components/Dialog/Dialog.d.ts +46 -0
  55. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -0
  56. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +27 -0
  57. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -0
  58. package/dist/types/src/components/Dialog/index.d.ts.map +1 -0
  59. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
  60. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  61. package/dist/types/src/components/Icon/Icon.d.ts +2 -2
  62. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  63. package/dist/types/src/components/Icon/Icon.stories.d.ts +17 -0
  64. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -0
  65. package/dist/types/src/components/Input/Input.d.ts +6 -5
  66. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  67. package/dist/types/src/components/Input/Input.stories.d.ts +12 -13
  68. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  69. package/dist/types/src/components/Link/Link.stories.d.ts +8 -8
  70. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  71. package/dist/types/src/components/{Lists → List}/List.d.ts +3 -3
  72. package/dist/types/src/components/List/List.d.ts.map +1 -0
  73. package/dist/types/src/components/List/List.stories.d.ts +14 -0
  74. package/dist/types/src/components/List/List.stories.d.ts.map +1 -0
  75. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -0
  76. package/dist/types/src/components/{Lists → List}/Tree.d.ts +1 -1
  77. package/dist/types/src/components/List/Tree.d.ts.map +1 -0
  78. package/dist/types/src/components/List/Tree.stories.d.ts +15 -0
  79. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -0
  80. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -0
  81. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts +1 -1
  82. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts.map +1 -1
  83. package/dist/types/src/components/List/Treegrid.stories.d.ts +12 -0
  84. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -0
  85. package/dist/types/src/components/List/index.d.ts.map +1 -0
  86. package/dist/types/src/components/Main/Main.d.ts +17 -27
  87. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  88. package/dist/types/src/components/Main/Main.stories.d.ts +6 -7
  89. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  90. package/dist/types/src/components/{Menus → Menu}/ContextMenu.d.ts +6 -6
  91. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -0
  92. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts +12 -0
  93. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -0
  94. package/dist/types/src/components/{Menus → Menu}/DropdownMenu.d.ts +8 -8
  95. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
  96. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +15 -0
  97. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
  98. package/dist/types/src/components/Menu/index.d.ts.map +1 -0
  99. package/dist/types/src/components/Message/Message.d.ts +1 -1
  100. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  101. package/dist/types/src/components/Message/Message.stories.d.ts +8 -17
  102. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  103. package/dist/types/src/components/Popover/Popover.d.ts +4 -4
  104. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  105. package/dist/types/src/components/Popover/Popover.stories.d.ts +6 -34
  106. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  107. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +25 -26
  108. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  109. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +37 -25
  110. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  111. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +39 -0
  112. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -0
  113. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +19 -0
  114. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -0
  115. package/dist/types/src/components/ScrollContainer/index.d.ts +2 -0
  116. package/dist/types/src/components/ScrollContainer/index.d.ts.map +1 -0
  117. package/dist/types/src/components/Select/Select.d.ts +10 -10
  118. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  119. package/dist/types/src/components/Select/Select.stories.d.ts +5 -10
  120. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  121. package/dist/types/src/components/Separator/Separator.d.ts +1 -1
  122. package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
  123. package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  124. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
  125. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  126. package/dist/types/src/components/Skeleton/index.d.ts +2 -0
  127. package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
  128. package/dist/types/src/components/Splitter/Splitter.d.ts +26 -0
  129. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
  130. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
  131. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
  132. package/dist/types/src/components/Splitter/index.d.ts +2 -0
  133. package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
  134. package/dist/types/src/components/Status/Status.stories.d.ts +2 -8
  135. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  136. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  137. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  138. package/dist/types/src/components/Tag/Tag.stories.d.ts +12 -12
  139. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  140. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +3 -3
  141. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  142. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +1 -8
  143. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  144. package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
  145. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  146. package/dist/types/src/components/Toast/Toast.d.ts +5 -5
  147. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  148. package/dist/types/src/components/Toast/Toast.stories.d.ts +6 -44
  149. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  150. package/dist/types/src/components/Toolbar/Toolbar.d.ts +20 -19
  151. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  152. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +6 -50
  153. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  154. package/dist/types/src/components/Tooltip/Tooltip.d.ts +2 -4
  155. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  156. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +8 -61
  157. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  158. package/dist/types/src/components/index.d.ts +7 -4
  159. package/dist/types/src/components/index.d.ts.map +1 -1
  160. package/dist/types/src/exemplars/generics.stories.d.ts +17 -0
  161. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
  162. package/dist/types/src/exemplars/slot.stories.d.ts +14 -0
  163. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
  164. package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
  165. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
  166. package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
  167. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  168. package/dist/types/src/hooks/useElevationContext.d.ts +1 -1
  169. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  170. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  171. package/dist/types/src/hooks/useVisualViewport.d.ts +2 -2
  172. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  173. package/dist/types/src/index.d.ts +3 -2
  174. package/dist/types/src/index.d.ts.map +1 -1
  175. package/dist/types/src/playground/Controls.stories.d.ts +5 -9
  176. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  177. package/dist/types/src/playground/Custom.stories.d.ts +12 -4
  178. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  179. package/dist/types/src/playground/Typography.stories.d.ts +5 -11
  180. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  181. package/dist/types/src/primitives/Container/Container.d.ts +23 -0
  182. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
  183. package/dist/types/src/primitives/Container/Container.stories.d.ts +11 -0
  184. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
  185. package/dist/types/src/primitives/Container/Layout.d.ts +18 -0
  186. package/dist/types/src/primitives/Container/Layout.d.ts.map +1 -0
  187. package/dist/types/src/primitives/Container/Layout.stories.d.ts +10 -0
  188. package/dist/types/src/primitives/Container/Layout.stories.d.ts.map +1 -0
  189. package/dist/types/src/primitives/Container/index.d.ts +3 -0
  190. package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
  191. package/dist/types/src/primitives/Flex/Flex.d.ts +8 -0
  192. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
  193. package/dist/types/src/primitives/Flex/index.d.ts +2 -0
  194. package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
  195. package/dist/types/src/primitives/index.d.ts +3 -0
  196. package/dist/types/src/primitives/index.d.ts.map +1 -0
  197. package/dist/types/src/testing/decorators/index.d.ts +2 -1
  198. package/dist/types/src/testing/decorators/index.d.ts.map +1 -1
  199. package/dist/types/src/testing/decorators/withLayout.d.ts +15 -0
  200. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -0
  201. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +12 -0
  202. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -0
  203. package/dist/types/src/testing/decorators/withTheme.d.ts +5 -1
  204. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  205. package/dist/types/src/util/index.d.ts +2 -1
  206. package/dist/types/src/util/index.d.ts.map +1 -1
  207. package/dist/types/src/util/usePx.d.ts +8 -0
  208. package/dist/types/src/util/usePx.d.ts.map +1 -0
  209. package/dist/types/tsconfig.tsbuildinfo +1 -1
  210. package/package.json +39 -31
  211. package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +10 -12
  212. package/src/components/Avatars/Avatar.stories.tsx +23 -14
  213. package/src/components/Avatars/Avatar.tsx +6 -13
  214. package/src/components/Avatars/AvatarGroup.stories.tsx +12 -8
  215. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +19 -14
  216. package/src/components/Breadcrumb/Breadcrumb.tsx +8 -34
  217. package/src/components/{Buttons → Button}/Button.stories.tsx +11 -12
  218. package/src/components/{Buttons → Button}/Button.tsx +3 -8
  219. package/src/components/{Buttons → Button}/IconButton.stories.tsx +13 -10
  220. package/src/components/{Buttons → Button}/IconButton.tsx +23 -16
  221. package/src/components/Button/Toggle.stories.tsx +37 -0
  222. package/src/components/{Buttons → Button}/ToggleGroup.stories.tsx +15 -12
  223. package/src/components/{Buttons → Button}/ToggleGroup.tsx +17 -4
  224. package/src/components/Clipboard/ClipboardProvider.tsx +1 -1
  225. package/src/components/Clipboard/CopyButton.tsx +17 -18
  226. package/src/components/DensityProvider/DensityProvider.tsx +2 -2
  227. package/src/components/{Dialogs → Dialog}/AlertDialog.stories.tsx +17 -14
  228. package/src/components/{Dialogs → Dialog}/AlertDialog.tsx +16 -21
  229. package/src/components/Dialog/Dialog.stories.tsx +101 -0
  230. package/src/components/{Dialogs → Dialog}/Dialog.tsx +182 -57
  231. package/src/components/ElevationProvider/ElevationProvider.tsx +2 -2
  232. package/src/components/Icon/Icon.stories.tsx +113 -0
  233. package/src/components/Icon/Icon.tsx +3 -3
  234. package/src/components/Input/Input.stories.tsx +22 -23
  235. package/src/components/Input/Input.tsx +38 -44
  236. package/src/components/Link/Link.stories.tsx +12 -8
  237. package/src/components/Link/Link.tsx +1 -1
  238. package/src/components/{Lists → List}/List.stories.tsx +40 -34
  239. package/src/components/{Lists → List}/List.tsx +22 -29
  240. package/src/components/{Lists → List}/ListDropIndicator.tsx +1 -1
  241. package/src/components/{Lists → List}/Tree.stories.tsx +13 -10
  242. package/src/components/{Lists → List}/Tree.tsx +4 -3
  243. package/src/components/{Lists → List}/TreeDropIndicator.tsx +1 -1
  244. package/src/components/{Lists → List}/Treegrid.stories.tsx +14 -8
  245. package/src/components/{Lists → List}/Treegrid.tsx +61 -25
  246. package/src/components/Main/Main.stories.tsx +56 -27
  247. package/src/components/Main/Main.tsx +166 -94
  248. package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +13 -10
  249. package/src/components/{Menus → Menu}/ContextMenu.tsx +8 -31
  250. package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +14 -11
  251. package/src/components/{Menus → Menu}/DropdownMenu.tsx +109 -78
  252. package/src/components/Message/Message.stories.tsx +14 -10
  253. package/src/components/Message/Message.tsx +34 -23
  254. package/src/components/Popover/Popover.stories.tsx +14 -11
  255. package/src/components/Popover/Popover.tsx +68 -49
  256. package/src/components/ScrollArea/ScrollArea.stories.tsx +163 -34
  257. package/src/components/ScrollArea/ScrollArea.tsx +80 -82
  258. package/src/components/ScrollArea/index.ts +1 -1
  259. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +70 -0
  260. package/src/components/ScrollContainer/ScrollContainer.tsx +238 -0
  261. package/src/components/ScrollContainer/index.ts +5 -0
  262. package/src/components/Select/Select.stories.tsx +15 -12
  263. package/src/components/Select/Select.tsx +18 -34
  264. package/src/components/Separator/Separator.tsx +1 -1
  265. package/src/components/Skeleton/Skeleton.stories.tsx +52 -0
  266. package/src/components/Skeleton/Skeleton.tsx +26 -0
  267. package/src/components/Skeleton/index.ts +5 -0
  268. package/src/components/Splitter/Splitter.stories.tsx +73 -0
  269. package/src/components/Splitter/Splitter.tsx +123 -0
  270. package/src/components/Splitter/index.ts +5 -0
  271. package/src/components/Status/Status.stories.tsx +11 -8
  272. package/src/components/Status/Status.tsx +2 -2
  273. package/src/components/Tag/Tag.stories.tsx +21 -12
  274. package/src/components/Tag/Tag.tsx +2 -7
  275. package/src/components/ThemeProvider/ThemeProvider.tsx +5 -6
  276. package/src/components/ThemeProvider/TranslationsProvider.tsx +4 -19
  277. package/src/components/ThemeProvider/index.ts +3 -1
  278. package/src/components/Toast/Toast.stories.tsx +14 -11
  279. package/src/components/Toast/Toast.tsx +15 -19
  280. package/src/components/Toolbar/Toolbar.stories.tsx +23 -21
  281. package/src/components/Toolbar/Toolbar.tsx +41 -10
  282. package/src/components/Tooltip/Tooltip.stories.tsx +18 -14
  283. package/src/components/Tooltip/Tooltip.tsx +29 -26
  284. package/src/components/index.ts +7 -4
  285. package/src/exemplars/generics.stories.tsx +44 -0
  286. package/src/exemplars/slot.stories.tsx +108 -0
  287. package/src/exemplars/tabster.stories.tsx +127 -0
  288. package/src/hooks/useDensityContext.ts +1 -1
  289. package/src/hooks/useElevationContext.ts +1 -1
  290. package/src/hooks/useSafeArea.ts +3 -2
  291. package/src/hooks/useSafeCollisionPadding.ts +1 -1
  292. package/src/hooks/useVisualViewport.ts +4 -4
  293. package/src/index.ts +3 -2
  294. package/src/playground/Controls.stories.tsx +20 -18
  295. package/src/playground/Custom.stories.tsx +15 -26
  296. package/src/playground/Typography.stories.tsx +10 -8
  297. package/src/primitives/Container/Container.stories.tsx +67 -0
  298. package/src/primitives/Container/Container.tsx +79 -0
  299. package/src/primitives/Container/Layout.stories.tsx +57 -0
  300. package/src/primitives/Container/Layout.tsx +61 -0
  301. package/src/primitives/Container/index.ts +6 -0
  302. package/src/primitives/Flex/Flex.tsx +26 -0
  303. package/src/primitives/Flex/index.ts +5 -0
  304. package/src/primitives/index.ts +6 -0
  305. package/src/testing/decorators/index.ts +2 -1
  306. package/src/testing/decorators/withLayout.tsx +63 -0
  307. package/src/testing/decorators/{withSurfaceVariantsLayout.tsx → withLayoutVariants.tsx} +4 -4
  308. package/src/testing/decorators/withTheme.tsx +34 -0
  309. package/src/util/index.ts +3 -1
  310. package/src/util/usePx.ts +61 -0
  311. package/README.yml +0 -1
  312. package/dist/lib/browser/chunk-WXW6KSRL.mjs +0 -4376
  313. package/dist/lib/browser/chunk-WXW6KSRL.mjs.map +0 -7
  314. package/dist/lib/node/chunk-3E3QKWX4.cjs +0 -4363
  315. package/dist/lib/node/chunk-3E3QKWX4.cjs.map +0 -7
  316. package/dist/lib/node/index.cjs +0 -175
  317. package/dist/lib/node/index.cjs.map +0 -7
  318. package/dist/lib/node/meta.json +0 -1
  319. package/dist/lib/node/testing/index.cjs +0 -114
  320. package/dist/lib/node/testing/index.cjs.map +0 -7
  321. package/dist/lib/node-esm/chunk-EQ7EG74H.mjs +0 -4378
  322. package/dist/lib/node-esm/chunk-EQ7EG74H.mjs.map +0 -7
  323. package/dist/types/src/components/Buttons/Button.d.ts.map +0 -1
  324. package/dist/types/src/components/Buttons/Button.stories.d.ts +0 -12
  325. package/dist/types/src/components/Buttons/Button.stories.d.ts.map +0 -1
  326. package/dist/types/src/components/Buttons/IconButton.d.ts.map +0 -1
  327. package/dist/types/src/components/Buttons/IconButton.stories.d.ts +0 -22
  328. package/dist/types/src/components/Buttons/IconButton.stories.d.ts.map +0 -1
  329. package/dist/types/src/components/Buttons/Toggle.d.ts.map +0 -1
  330. package/dist/types/src/components/Buttons/Toggle.stories.d.ts +0 -19
  331. package/dist/types/src/components/Buttons/Toggle.stories.d.ts.map +0 -1
  332. package/dist/types/src/components/Buttons/ToggleGroup.d.ts +0 -28
  333. package/dist/types/src/components/Buttons/ToggleGroup.d.ts.map +0 -1
  334. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts +0 -39
  335. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +0 -1
  336. package/dist/types/src/components/Buttons/index.d.ts.map +0 -1
  337. package/dist/types/src/components/Dialogs/AlertDialog.d.ts.map +0 -1
  338. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts +0 -43
  339. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +0 -1
  340. package/dist/types/src/components/Dialogs/Dialog.d.ts +0 -31
  341. package/dist/types/src/components/Dialogs/Dialog.d.ts.map +0 -1
  342. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts +0 -48
  343. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +0 -1
  344. package/dist/types/src/components/Dialogs/index.d.ts.map +0 -1
  345. package/dist/types/src/components/Lists/List.d.ts.map +0 -1
  346. package/dist/types/src/components/Lists/List.stories.d.ts +0 -37
  347. package/dist/types/src/components/Lists/List.stories.d.ts.map +0 -1
  348. package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +0 -1
  349. package/dist/types/src/components/Lists/Tree.d.ts.map +0 -1
  350. package/dist/types/src/components/Lists/Tree.stories.d.ts +0 -41
  351. package/dist/types/src/components/Lists/Tree.stories.d.ts.map +0 -1
  352. package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +0 -1
  353. package/dist/types/src/components/Lists/Treegrid.stories.d.ts +0 -10
  354. package/dist/types/src/components/Lists/Treegrid.stories.d.ts.map +0 -1
  355. package/dist/types/src/components/Lists/index.d.ts.map +0 -1
  356. package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
  357. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts +0 -50
  358. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +0 -1
  359. package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
  360. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts +0 -50
  361. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
  362. package/dist/types/src/components/Menus/index.d.ts.map +0 -1
  363. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts +0 -12
  364. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts.map +0 -1
  365. package/dist/types/src/util/ThemedClassName.d.ts +0 -5
  366. package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
  367. package/src/components/Buttons/Toggle.stories.tsx +0 -33
  368. package/src/components/Dialogs/Dialog.stories.tsx +0 -65
  369. package/src/testing/decorators/withTheme.ts +0 -22
  370. package/src/util/ThemedClassName.ts +0 -7
  371. /package/dist/types/src/components/{Buttons → Button}/Toggle.d.ts +0 -0
  372. /package/dist/types/src/components/{Buttons → Button}/index.d.ts +0 -0
  373. /package/dist/types/src/components/{Dialogs → Dialog}/index.d.ts +0 -0
  374. /package/dist/types/src/components/{Lists → List}/ListDropIndicator.d.ts +0 -0
  375. /package/dist/types/src/components/{Lists → List}/TreeDropIndicator.d.ts +0 -0
  376. /package/dist/types/src/components/{Lists → List}/index.d.ts +0 -0
  377. /package/dist/types/src/components/{Menus → Menu}/index.d.ts +0 -0
  378. /package/src/components/{Buttons → Button}/Toggle.tsx +0 -0
  379. /package/src/components/{Buttons → Button}/index.ts +0 -0
  380. /package/src/components/{Dialogs → Dialog}/index.ts +0 -0
  381. /package/src/components/{Lists → List}/index.ts +0 -0
  382. /package/src/components/{Menus → Menu}/index.ts +0 -0
@@ -2,14 +2,15 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React from 'react';
7
7
 
8
8
  import { faker } from '@dxos/random';
9
9
 
10
- import { Tooltip } from './Tooltip';
11
10
  import { withTheme } from '../../testing';
12
- import { Button } from '../Buttons';
11
+ import { Button } from '../Button';
12
+
13
+ import { Tooltip } from './Tooltip';
13
14
 
14
15
  type StoryProps = {
15
16
  tooltips: { label: string; content: string }[];
@@ -28,15 +29,18 @@ const DefaultStory = ({ tooltips, defaultOpen }: StoryProps) => (
28
29
  </Tooltip.Provider>
29
30
  );
30
31
 
31
- export default {
32
- title: 'ui/react-ui-core/Tooltip',
33
- component: Tooltip,
32
+ const meta = {
33
+ title: 'ui/react-ui-core/components/Tooltip',
34
+ component: Tooltip as any,
34
35
  render: DefaultStory,
35
- decorators: [withTheme],
36
- parameters: { chromatic: { disableSnapshot: false } },
37
- };
36
+ decorators: [withTheme()],
37
+ } satisfies Meta<typeof DefaultStory>;
38
+
39
+ export default meta;
40
+
41
+ type Story = StoryObj<typeof meta>;
38
42
 
39
- export const Default = {
43
+ export const Default: Story = {
40
44
  args: {
41
45
  tooltips: [
42
46
  {
@@ -50,9 +54,9 @@ export const Default = {
50
54
  },
51
55
  };
52
56
 
53
- export const DefaultOpen = {
57
+ export const DefaultOpen: Story = {
54
58
  args: {
55
- defaultOption: true,
59
+ defaultOpen: true,
56
60
  tooltips: [
57
61
  {
58
62
  label: 'Tooltip trigger',
@@ -65,9 +69,9 @@ export const DefaultOpen = {
65
69
  },
66
70
  };
67
71
 
68
- export const StressTest = {
72
+ export const StressTest: Story = {
69
73
  args: {
70
- defaultOption: true,
74
+ defaultOpen: true,
71
75
  tooltips: faker.helpers.multiple(
72
76
  () => ({
73
77
  label: faker.lorem.words(2),
@@ -11,7 +11,7 @@ import type { Scope } from '@radix-ui/react-context';
11
11
  import { DismissableLayer } from '@radix-ui/react-dismissable-layer';
12
12
  import { useId } from '@radix-ui/react-id';
13
13
  import * as PopperPrimitive from '@radix-ui/react-popper';
14
- import { createPopperScope, type PopperAnchorProps } from '@radix-ui/react-popper';
14
+ import { type PopperAnchorProps, createPopperScope } from '@radix-ui/react-popper';
15
15
  import { Portal as PortalPrimitive } from '@radix-ui/react-portal';
16
16
  import { Presence } from '@radix-ui/react-presence';
17
17
  import { Primitive } from '@radix-ui/react-primitive';
@@ -23,10 +23,11 @@ import React, {
23
23
  type ComponentPropsWithoutRef,
24
24
  type ElementRef,
25
25
  type FC,
26
- type SyntheticEvent,
27
- forwardRef,
28
26
  type MutableRefObject,
29
27
  type ReactNode,
28
+ type RefObject,
29
+ type SyntheticEvent,
30
+ forwardRef,
30
31
  useCallback,
31
32
  useEffect,
32
33
  useMemo,
@@ -40,9 +41,9 @@ type TooltipScopedProps<P = {}> = P & { __scopeTooltip?: Scope };
40
41
  const [createTooltipContext, createTooltipScope] = createContextScope('Tooltip', [createPopperScope]);
41
42
  const usePopperScope = createPopperScope();
42
43
 
43
- /* -------------------------------------------------------------------------------------------------
44
- * Tooltip
45
- * ----------------------------------------------------------------------------------------------- */
44
+ //
45
+ // Tooltip
46
+ //
46
47
 
47
48
  const DEFAULT_DELAY_DURATION = 700;
48
49
  const TOOLTIP_OPEN = 'tooltip.open';
@@ -214,11 +215,11 @@ const TooltipProvider: FC<TooltipProviderProps> = (props: TooltipScopedProps<Too
214
215
  isPointerInTransitRef.current = inTransit;
215
216
  }, [])}
216
217
  >
217
- <TooltipContent side={side} className={tx('tooltip.content', 'tooltip', { elevation })}>
218
+ <TooltipContent side={side} className={tx('tooltip.content', { elevation })}>
218
219
  {content}
219
- <TooltipArrow className={tx('tooltip.arrow', 'tooltip__arrow')} />
220
+ <TooltipArrow className={tx('tooltip.arrow')} />
220
221
  </TooltipContent>
221
- <TooltipVirtualTrigger virtualRef={triggerRef} />
222
+ <TooltipVirtualTrigger virtualRef={triggerRef as RefObject<HTMLButtonElement>} />
222
223
  {children}
223
224
  </TooltipContextProvider>
224
225
  </PopperPrimitive.Root>
@@ -227,9 +228,9 @@ const TooltipProvider: FC<TooltipProviderProps> = (props: TooltipScopedProps<Too
227
228
 
228
229
  TooltipProvider.displayName = TOOLTIP_NAME;
229
230
 
230
- /* -------------------------------------------------------------------------------------------------
231
- * TooltipVirtualTrigger
232
- * ----------------------------------------------------------------------------------------------- */
231
+ //
232
+ // TooltipVirtualTrigger
233
+ //
233
234
 
234
235
  const TooltipVirtualTrigger = ({
235
236
  virtualRef,
@@ -239,9 +240,9 @@ const TooltipVirtualTrigger = ({
239
240
  return <PopperPrimitive.Anchor asChild {...popperScope} virtualRef={virtualRef} />;
240
241
  };
241
242
 
242
- /* -------------------------------------------------------------------------------------------------
243
- * TooltipTrigger
244
- * ----------------------------------------------------------------------------------------------- */
243
+ //
244
+ // TooltipTrigger
245
+ //
245
246
 
246
247
  const TRIGGER_NAME = 'TooltipTrigger';
247
248
 
@@ -321,9 +322,9 @@ const TooltipTrigger = forwardRef<TooltipTriggerElement, TooltipTriggerProps>(
321
322
 
322
323
  TooltipTrigger.displayName = TRIGGER_NAME;
323
324
 
324
- /* -------------------------------------------------------------------------------------------------
325
- * TooltipPortal
326
- * ----------------------------------------------------------------------------------------------- */
325
+ //
326
+ // TooltipPortal
327
+ //
327
328
 
328
329
  const PORTAL_NAME = 'TooltipPortal';
329
330
 
@@ -362,9 +363,9 @@ const TooltipPortal: FC<TooltipPortalProps> = (props: TooltipScopedProps<Tooltip
362
363
 
363
364
  TooltipPortal.displayName = PORTAL_NAME;
364
365
 
365
- /* -------------------------------------------------------------------------------------------------
366
- * TooltipContent
367
- * ----------------------------------------------------------------------------------------------- */
366
+ //
367
+ // TooltipContent
368
+ //
368
369
 
369
370
  const CONTENT_NAME = 'TooltipContent';
370
371
 
@@ -573,9 +574,9 @@ const TooltipContentImpl = forwardRef<TooltipContentImplElement, TooltipContentI
573
574
 
574
575
  TooltipContent.displayName = CONTENT_NAME;
575
576
 
576
- /* -------------------------------------------------------------------------------------------------
577
- * TooltipArrow
578
- * ----------------------------------------------------------------------------------------------- */
577
+ //
578
+ // TooltipArrow
579
+ //
579
580
 
580
581
  const ARROW_NAME = 'TooltipArrow';
581
582
 
@@ -598,8 +599,6 @@ const TooltipArrow = forwardRef<TooltipArrowElement, TooltipArrowProps>(
598
599
 
599
600
  TooltipArrow.displayName = ARROW_NAME;
600
601
 
601
- /* ----------------------------------------------------------------------------------------------- */
602
-
603
602
  type TooltipSide = NonNullable<TooltipContentProps['side']>;
604
603
 
605
604
  const getExitSideFromRect = (point: Point, rect: DOMRect): TooltipSide => {
@@ -754,6 +753,10 @@ const getHullPresorted = <P extends Point>(points: Readonly<Array<P>>): Array<P>
754
753
  }
755
754
  };
756
755
 
756
+ //
757
+ // Tooltip
758
+ //
759
+
757
760
  export const Tooltip = {
758
761
  Provider: TooltipProvider,
759
762
  Trigger: TooltipTrigger,
@@ -5,21 +5,24 @@
5
5
  export * from './AnchoredOverflow';
6
6
  export * from './Avatars';
7
7
  export * from './Breadcrumb';
8
- export * from './Buttons';
8
+ export * from './Button';
9
9
  export * from './Clipboard';
10
- export * from './Dialogs';
10
+ export * from './Dialog';
11
11
  export * from './Icon';
12
12
  export * from './Input';
13
13
  export * from './Link';
14
- export * from './Lists';
14
+ export * from './List';
15
15
  export * from './Main';
16
- export * from './Menus';
16
+ export * from './Menu';
17
17
  export * from './Message';
18
18
  export * from './Popover';
19
19
  export * from './Status';
20
20
  export * from './ScrollArea';
21
+ export * from './ScrollContainer';
21
22
  export * from './Select';
22
23
  export * from './Separator';
24
+ export * from './Skeleton';
25
+ export * from './Splitter';
23
26
  export * from './Tag';
24
27
  export * from './Toast';
25
28
  export * from './Toolbar';
@@ -0,0 +1,44 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React, { type ReactElement, type Ref, forwardRef } from 'react';
7
+
8
+ import { type SlottableProps } from '@dxos/ui-types';
9
+
10
+ import { withTheme } from '../testing';
11
+
12
+ const ComponentInner = forwardRef<HTMLDivElement, ComponentProps>(({ children, ...props }, forwardedRef) => {
13
+ return (
14
+ <div {...props} ref={forwardedRef}>
15
+ {children}
16
+ </div>
17
+ );
18
+ });
19
+
20
+ ComponentInner.displayName = 'Component';
21
+
22
+ /**
23
+ * Generic component pattern.
24
+ */
25
+ type ComponentProps<P extends HTMLElement = any> = SlottableProps<P>;
26
+
27
+ const Component = ComponentInner as <P extends HTMLElement>(
28
+ props: SlottableProps<P> & { ref?: Ref<P> },
29
+ ) => ReactElement;
30
+
31
+ const meta = {
32
+ title: 'ui/react-ui-core/exemplars/generics',
33
+ component: Component,
34
+ decorators: [withTheme()],
35
+ parameters: {
36
+ layout: 'centered',
37
+ },
38
+ } satisfies Meta;
39
+
40
+ export default meta;
41
+
42
+ type Story = StoryObj<typeof meta>;
43
+
44
+ export const Single: Story = {};
@@ -0,0 +1,108 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { Slot } from '@radix-ui/react-slot';
6
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
7
+ import React, { type PropsWithChildren, forwardRef } from 'react';
8
+
9
+ import { mx } from '@dxos/ui-theme';
10
+ import { type SlottableClassName, type SlottableProps, type ThemedClassName } from '@dxos/ui-types';
11
+
12
+ import { withTheme } from '../testing';
13
+
14
+ /**
15
+ * Composition
16
+ *
17
+ * All Radix primitive parts that render a DOM element accept an asChild prop.
18
+ * When asChild is set to true, Radix will not render a default DOM element, instead cloning the part's child and passing it the props and behavior required to make it functional.
19
+ * https://www.radix-ui.com/primitives/docs/guides/composition
20
+ */
21
+
22
+ // Outer primitive (like Tooltip.Trigger or Focus.Group).
23
+ const Outer = forwardRef<HTMLDivElement, SlottableProps<HTMLDivElement>>(
24
+ ({ children, className, classNames, asChild, ...props }, forwardedRef) => {
25
+ const Root = asChild ? Slot : 'div';
26
+ return (
27
+ <Root {...props} className={mx(className, classNames)} data-outer='true' ref={forwardedRef}>
28
+ {children}
29
+ </Root>
30
+ );
31
+ },
32
+ );
33
+
34
+ // Middle primitive (like Dialog.Trigger or Mosaic.Cell).
35
+ const Middle = forwardRef<HTMLDivElement, SlottableProps<HTMLDivElement>>(
36
+ ({ children, className, classNames, asChild, ...props }, forwardedRef) => {
37
+ const Root = asChild ? Slot : 'div';
38
+ return (
39
+ <Root {...props} className={mx(className, classNames)} data-middle='true' ref={forwardedRef}>
40
+ {children}
41
+ </Root>
42
+ );
43
+ },
44
+ );
45
+
46
+ // Leaf component (like Card.Root).
47
+ const Leaf = forwardRef<HTMLButtonElement, SlottableClassName<PropsWithChildren>>(
48
+ ({ className, classNames, children, ...props }, forwardedRef) => {
49
+ return (
50
+ <button {...props} className={mx('p-2 outline-none border rounded', className, classNames)} ref={forwardedRef}>
51
+ {children}
52
+ </button>
53
+ );
54
+ },
55
+ );
56
+
57
+ // Test 1: Single asChild.
58
+ const TestSingle = ({ classNames, ...props }: ThemedClassName<{ role?: string }>) => (
59
+ <Outer asChild {...props} className={mx('p-2', classNames)}>
60
+ <Leaf>Single asChild</Leaf>
61
+ </Outer>
62
+ );
63
+
64
+ // Test 2: Nested asChild.
65
+ const TestNested = ({ classNames, ...props }: ThemedClassName<{ role?: string }>) => {
66
+ return (
67
+ <Outer asChild {...props} className={mx('p-2', classNames)}>
68
+ <Middle asChild>
69
+ <Leaf>Nested asChild</Leaf>
70
+ </Middle>
71
+ </Outer>
72
+ );
73
+ };
74
+
75
+ // Test 3: Complex.
76
+ const TestInner = ({ classNames, ...props }: ThemedClassName<{ role?: string }>) => (
77
+ <Outer asChild {...props} className={mx('p-2', classNames)}>
78
+ <Middle asChild>
79
+ <Leaf>
80
+ <div role='none'>Leaf</div>
81
+ </Leaf>
82
+ </Middle>
83
+ </Outer>
84
+ );
85
+
86
+ const meta = {
87
+ title: 'ui/react-ui-core/exemplars/slot',
88
+ decorators: [withTheme()],
89
+ parameters: {
90
+ layout: 'centered',
91
+ },
92
+ } satisfies Meta;
93
+
94
+ export default meta;
95
+
96
+ type Story = StoryObj<typeof meta>;
97
+
98
+ export const Single: Story = {
99
+ render: () => <TestSingle role='listitem' classNames='border-red-500' />,
100
+ };
101
+
102
+ export const Nested: Story = {
103
+ render: () => <TestNested role='listitem' classNames='border-green-500' />,
104
+ };
105
+
106
+ export const Inner: Story = {
107
+ render: () => <TestInner role='listitem' classNames='border-blue-500' />,
108
+ };
@@ -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-sm outline-none border border-subduedSeparator 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 bs-full is-full overflow-hidden'>
31
+ <div className={mx('flex bs-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 tabIndex={0} orientation='vertical' classNames={mx('shrink-0 bs-full is-[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 is-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
+ };
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { useContext } from 'react';
6
6
 
7
- import { type Density } from '@dxos/react-ui-types';
7
+ import { type Density } from '@dxos/ui-types';
8
8
 
9
9
  import { DensityContext } from '../components';
10
10
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { useContext } from 'react';
6
6
 
7
- import { type Elevation } from '@dxos/react-ui-types';
7
+ import { type Elevation } from '@dxos/ui-types';
8
8
 
9
9
  import { ElevationContext } from '../components';
10
10
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { useCallback, useState } from 'react';
6
6
 
7
- import { useResize } from '@dxos/react-hooks';
7
+ import { useViewportResize } from '@dxos/react-hooks';
8
8
 
9
9
  export type SafeAreaPadding = Record<'top' | 'right' | 'bottom' | 'left', number>;
10
10
 
@@ -20,6 +20,7 @@ export const useSafeArea = (): SafeAreaPadding => {
20
20
  left: parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--safe-area-left')),
21
21
  });
22
22
  }, []);
23
- useResize(handleResize);
23
+
24
+ useViewportResize(handleResize);
24
25
  return padding;
25
26
  };
@@ -21,7 +21,7 @@ const safePadding = (
21
21
  ) => {
22
22
  return (
23
23
  (propIsNumber(safePadding[side]) ? safePadding[side] : 0) +
24
- (propIsNumber(propsPadding) ? propsPadding : propsIsRecord(propsPadding) ? propsPadding[side] ?? 0 : 0)
24
+ (propIsNumber(propsPadding) ? propsPadding : propsIsRecord(propsPadding) ? (propsPadding[side] ?? 0) : 0)
25
25
  );
26
26
  };
27
27
 
@@ -2,11 +2,11 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { useCallback, type useEffect, useState } from 'react';
5
+ import { useCallback, useState } from 'react';
6
6
 
7
- import { useResize } from '@dxos/react-hooks';
7
+ import { useViewportResize } from '@dxos/react-hooks';
8
8
 
9
- export const useVisualViewport = (deps?: Parameters<typeof useEffect>[1]) => {
9
+ export const useVisualViewport = (deps?: Parameters<typeof useViewportResize>[1]) => {
10
10
  const [width, setWidth] = useState<number | null>(null);
11
11
  const [height, setHeight] = useState<number | null>(null);
12
12
 
@@ -17,7 +17,7 @@ export const useVisualViewport = (deps?: Parameters<typeof useEffect>[1]) => {
17
17
  }
18
18
  }, []);
19
19
 
20
- useResize(handleResize);
20
+ useViewportResize(handleResize, deps);
21
21
 
22
22
  return { width, height };
23
23
  };
package/src/index.ts CHANGED
@@ -2,12 +2,13 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- export { type TFunction } from 'i18next';
5
+ export { type Resource, type TFunction } from 'i18next';
6
6
  export { Trans } from 'react-i18next';
7
7
 
8
8
  export * from '@dxos/react-hooks';
9
- export * from '@dxos/react-ui-types';
9
+ export * from '@dxos/ui-types';
10
10
 
11
11
  export * from './components';
12
12
  export * from './hooks';
13
+ export * from './primitives';
13
14
  export * from './util';