@dxos/react-ui 0.8.4-main.fd6878d → 0.8.4-staging.ac66bdf99f

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 (470) hide show
  1. package/dist/lib/browser/chunk-OCVRIJCH.mjs +848 -0
  2. package/dist/lib/browser/chunk-OCVRIJCH.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +4115 -60
  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 +112 -60
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/chunk-QUD5P3RU.mjs +850 -0
  9. package/dist/lib/node-esm/chunk-QUD5P3RU.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +4115 -60
  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 +112 -60
  14. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  15. package/dist/types/src/components/Avatars/Avatar.d.ts +1 -1
  16. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  17. package/dist/types/src/components/Avatars/Avatar.stories.d.ts +5 -31
  18. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  19. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts +5 -11
  20. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  21. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  22. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts +8 -20
  23. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  24. package/dist/types/src/components/{Buttons → Button}/Button.d.ts +4 -4
  25. package/dist/types/src/components/Button/Button.d.ts.map +1 -0
  26. package/dist/types/src/components/Button/Button.stories.d.ts +17 -0
  27. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -0
  28. package/dist/types/src/components/{Buttons → Button}/IconButton.d.ts +3 -3
  29. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -0
  30. package/dist/types/src/components/Button/IconButton.stories.d.ts +16 -0
  31. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -0
  32. package/dist/types/src/components/{Buttons → Button}/Toggle.d.ts +2 -2
  33. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -0
  34. package/dist/types/src/components/Button/Toggle.stories.d.ts +16 -0
  35. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -0
  36. package/dist/types/src/components/Button/ToggleGroup.d.ts +27 -0
  37. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -0
  38. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +27 -0
  39. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -0
  40. package/dist/types/src/components/Button/index.d.ts.map +1 -0
  41. package/dist/types/src/components/Card/Card.d.ts +120 -0
  42. package/dist/types/src/components/Card/Card.d.ts.map +1 -0
  43. package/dist/types/src/components/Card/Card.stories.d.ts +21 -0
  44. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -0
  45. package/dist/types/src/components/Card/index.d.ts +2 -0
  46. package/dist/types/src/components/Card/index.d.ts.map +1 -0
  47. package/dist/types/src/components/Clipboard/CopyButton.d.ts +1 -1
  48. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  49. package/dist/types/src/components/Clipboard/index.d.ts +10 -1
  50. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  51. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts +1 -1
  52. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  53. package/dist/types/src/components/Dialog/AlertDialog.d.ts +51 -0
  54. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -0
  55. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts +11 -0
  56. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -0
  57. package/dist/types/src/components/Dialog/Dialog.d.ts +64 -0
  58. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -0
  59. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +25 -0
  60. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -0
  61. package/dist/types/src/components/Dialog/index.d.ts.map +1 -0
  62. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
  63. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  64. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts +11 -0
  65. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -0
  66. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts +7 -0
  67. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -0
  68. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +19 -0
  69. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -0
  70. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts +9 -0
  71. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -0
  72. package/dist/types/src/components/ErrorFallback/index.d.ts +5 -0
  73. package/dist/types/src/components/ErrorFallback/index.d.ts.map +1 -0
  74. package/dist/types/src/components/Focus/Focus.d.ts +36 -0
  75. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -0
  76. package/dist/types/src/components/Focus/Focus.stories.d.ts +9 -0
  77. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -0
  78. package/dist/types/src/components/Focus/index.d.ts +2 -0
  79. package/dist/types/src/components/Focus/index.d.ts.map +1 -0
  80. package/dist/types/src/components/Icon/Icon.d.ts +5 -2
  81. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  82. package/dist/types/src/components/Icon/Icon.stories.d.ts +25 -0
  83. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -0
  84. package/dist/types/src/components/Image/Image.d.ts +14 -0
  85. package/dist/types/src/components/Image/Image.d.ts.map +1 -0
  86. package/dist/types/src/components/Image/Image.stories.d.ts +33 -0
  87. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -0
  88. package/dist/types/src/components/Image/index.d.ts +2 -0
  89. package/dist/types/src/components/Image/index.d.ts.map +1 -0
  90. package/dist/types/src/components/Input/Input.d.ts +7 -9
  91. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  92. package/dist/types/src/components/Input/Input.stories.d.ts +16 -17
  93. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  94. package/dist/types/src/components/Link/Link.stories.d.ts +8 -8
  95. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  96. package/dist/types/src/components/{Lists → List}/List.d.ts +6 -4
  97. package/dist/types/src/components/List/List.d.ts.map +1 -0
  98. package/dist/types/src/components/List/List.stories.d.ts +16 -0
  99. package/dist/types/src/components/List/List.stories.d.ts.map +1 -0
  100. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -0
  101. package/dist/types/src/components/List/Tree.d.ts.map +1 -0
  102. package/dist/types/src/components/List/Tree.stories.d.ts +15 -0
  103. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -0
  104. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -0
  105. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts +5 -9
  106. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -0
  107. package/dist/types/src/components/List/Treegrid.stories.d.ts +12 -0
  108. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -0
  109. package/dist/types/src/components/List/index.d.ts.map +1 -0
  110. package/dist/types/src/components/Main/Main.d.ts +17 -27
  111. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  112. package/dist/types/src/components/Main/Main.stories.d.ts +6 -10
  113. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  114. package/dist/types/src/components/{Menus → Menu}/ContextMenu.d.ts +6 -6
  115. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -0
  116. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts +12 -0
  117. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -0
  118. package/dist/types/src/components/Menu/DropdownMenu.d.ts +113 -0
  119. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
  120. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +28 -0
  121. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
  122. package/dist/types/src/components/Menu/index.d.ts.map +1 -0
  123. package/dist/types/src/components/Message/Message.d.ts +1 -1
  124. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  125. package/dist/types/src/components/Message/Message.stories.d.ts +12 -22
  126. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  127. package/dist/types/src/components/Popover/Popover.d.ts +34 -25
  128. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  129. package/dist/types/src/components/Popover/Popover.stories.d.ts +6 -34
  130. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  131. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +27 -27
  132. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  133. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +50 -27
  134. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  135. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +60 -0
  136. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -0
  137. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +23 -0
  138. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -0
  139. package/dist/types/src/components/ScrollContainer/index.d.ts +2 -0
  140. package/dist/types/src/components/ScrollContainer/index.d.ts.map +1 -0
  141. package/dist/types/src/components/Select/Select.d.ts +10 -10
  142. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  143. package/dist/types/src/components/Select/Select.stories.d.ts +6 -11
  144. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  145. package/dist/types/src/components/Separator/Separator.d.ts +4 -4
  146. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  147. package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
  148. package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  149. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
  150. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  151. package/dist/types/src/components/Skeleton/index.d.ts +2 -0
  152. package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
  153. package/dist/types/src/components/Splitter/Splitter.d.ts +34 -0
  154. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
  155. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
  156. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
  157. package/dist/types/src/components/Splitter/index.d.ts +2 -0
  158. package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
  159. package/dist/types/src/components/Status/Status.d.ts +3 -4
  160. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  161. package/dist/types/src/components/Status/Status.stories.d.ts +6 -10
  162. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  163. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  164. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  165. package/dist/types/src/components/Tag/Tag.stories.d.ts +8 -13
  166. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  167. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +3 -3
  168. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  169. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts +12 -0
  170. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  171. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +1 -8
  172. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  173. package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
  174. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  175. package/dist/types/src/components/Toast/Toast.d.ts +19 -19
  176. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  177. package/dist/types/src/components/Toast/Toast.stories.d.ts +6 -44
  178. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  179. package/dist/types/src/components/Toolbar/Toolbar.d.ts +40 -22
  180. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  181. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +6 -50
  182. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  183. package/dist/types/src/components/Tooltip/Tooltip.d.ts +10 -12
  184. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  185. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +10 -63
  186. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  187. package/dist/types/src/components/index.d.ts +14 -8
  188. package/dist/types/src/components/index.d.ts.map +1 -1
  189. package/dist/types/src/exemplars/generics.stories.d.ts +19 -0
  190. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
  191. package/dist/types/src/exemplars/slot.stories.d.ts +15 -0
  192. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
  193. package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
  194. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
  195. package/dist/types/src/exemplars/virtualizer.stories.d.ts +11 -0
  196. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -0
  197. package/dist/types/src/hooks/index.d.ts +1 -0
  198. package/dist/types/src/hooks/index.d.ts.map +1 -1
  199. package/dist/types/src/hooks/useDensityContext.d.ts +2 -2
  200. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  201. package/dist/types/src/hooks/useElevationContext.d.ts +1 -1
  202. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  203. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  204. package/dist/types/src/hooks/useVisualViewport.d.ts +2 -2
  205. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  206. package/dist/types/src/index.d.ts +2 -1
  207. package/dist/types/src/index.d.ts.map +1 -1
  208. package/dist/types/src/playground/Controls.stories.d.ts +5 -9
  209. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  210. package/dist/types/src/playground/Custom.stories.d.ts +12 -4
  211. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  212. package/dist/types/src/playground/Typography.stories.d.ts +5 -11
  213. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  214. package/dist/types/src/primitives/Column/Column.d.ts +33 -0
  215. package/dist/types/src/primitives/Column/Column.d.ts.map +1 -0
  216. package/dist/types/src/primitives/Column/Column.stories.d.ts +25 -0
  217. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -0
  218. package/dist/types/src/primitives/Column/index.d.ts +2 -0
  219. package/dist/types/src/primitives/Column/index.d.ts.map +1 -0
  220. package/dist/types/src/primitives/Container/Container.d.ts +7 -0
  221. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
  222. package/dist/types/src/primitives/Container/Container.stories.d.ts +6 -0
  223. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
  224. package/dist/types/src/primitives/Container/index.d.ts +2 -0
  225. package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
  226. package/dist/types/src/primitives/Flex/Flex.d.ts +11 -0
  227. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
  228. package/dist/types/src/primitives/Flex/Flex.stories.d.ts +8 -0
  229. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -0
  230. package/dist/types/src/primitives/Flex/index.d.ts +2 -0
  231. package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
  232. package/dist/types/src/primitives/Grid/Grid.d.ts +10 -0
  233. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -0
  234. package/dist/types/src/primitives/Grid/Grid.stories.d.ts +8 -0
  235. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -0
  236. package/dist/types/src/primitives/Grid/index.d.ts +2 -0
  237. package/dist/types/src/primitives/Grid/index.d.ts.map +1 -0
  238. package/dist/types/src/primitives/Panel/Panel.d.ts +35 -0
  239. package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -0
  240. package/dist/types/src/primitives/Panel/Panel.stories.d.ts +6 -0
  241. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -0
  242. package/dist/types/src/primitives/Panel/index.d.ts +2 -0
  243. package/dist/types/src/primitives/Panel/index.d.ts.map +1 -0
  244. package/dist/types/src/primitives/index.d.ts +6 -0
  245. package/dist/types/src/primitives/index.d.ts.map +1 -0
  246. package/dist/types/src/testing/Loading.d.ts +9 -0
  247. package/dist/types/src/testing/Loading.d.ts.map +1 -0
  248. package/dist/types/src/testing/decorators/index.d.ts +2 -1
  249. package/dist/types/src/testing/decorators/index.d.ts.map +1 -1
  250. package/dist/types/src/testing/decorators/withLayout.d.ts +15 -0
  251. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -0
  252. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +12 -0
  253. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -0
  254. package/dist/types/src/testing/decorators/withTheme.d.ts +5 -1
  255. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  256. package/dist/types/src/testing/index.d.ts +1 -0
  257. package/dist/types/src/testing/index.d.ts.map +1 -1
  258. package/dist/types/src/translations.d.ts +11 -0
  259. package/dist/types/src/translations.d.ts.map +1 -0
  260. package/dist/types/src/util/index.d.ts +2 -1
  261. package/dist/types/src/util/index.d.ts.map +1 -1
  262. package/dist/types/src/util/usePx.d.ts +8 -0
  263. package/dist/types/src/util/usePx.d.ts.map +1 -0
  264. package/dist/types/tsconfig.tsbuildinfo +1 -1
  265. package/package.json +43 -32
  266. package/src/components/Avatars/Avatar.stories.tsx +22 -16
  267. package/src/components/Avatars/Avatar.tsx +7 -15
  268. package/src/components/Avatars/AvatarGroup.stories.tsx +10 -8
  269. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +19 -16
  270. package/src/components/Breadcrumb/Breadcrumb.tsx +11 -37
  271. package/src/components/{Buttons → Button}/Button.stories.tsx +7 -10
  272. package/src/components/{Buttons → Button}/Button.tsx +12 -26
  273. package/src/components/{Buttons → Button}/IconButton.stories.tsx +17 -13
  274. package/src/components/{Buttons → Button}/IconButton.tsx +20 -16
  275. package/src/components/Button/Toggle.stories.tsx +36 -0
  276. package/src/components/{Buttons → Button}/Toggle.tsx +4 -4
  277. package/src/components/{Buttons → Button}/ToggleGroup.stories.tsx +10 -9
  278. package/src/components/Button/ToggleGroup.tsx +50 -0
  279. package/src/components/Card/Card.stories.tsx +151 -0
  280. package/src/components/Card/Card.tsx +493 -0
  281. package/src/components/Card/index.ts +5 -0
  282. package/src/components/Clipboard/CopyButton.tsx +8 -9
  283. package/src/components/DensityProvider/DensityProvider.tsx +1 -1
  284. package/src/components/Dialog/AlertDialog.stories.tsx +68 -0
  285. package/src/components/{Dialogs → Dialog}/AlertDialog.tsx +123 -82
  286. package/src/components/Dialog/Dialog.stories.tsx +177 -0
  287. package/src/components/Dialog/Dialog.tsx +285 -0
  288. package/src/components/ElevationProvider/ElevationProvider.tsx +1 -1
  289. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +45 -0
  290. package/src/components/ErrorFallback/ErrorFallback.tsx +70 -0
  291. package/src/components/ErrorFallback/ErrorStack.tsx +114 -0
  292. package/src/components/ErrorFallback/ThrowError.tsx +37 -0
  293. package/src/components/ErrorFallback/index.ts +9 -0
  294. package/src/components/Focus/AUDIT.md +43 -0
  295. package/src/components/Focus/Focus.stories.tsx +230 -0
  296. package/src/components/Focus/Focus.tsx +201 -0
  297. package/src/components/Focus/index.ts +5 -0
  298. package/src/components/Icon/Icon.stories.tsx +143 -0
  299. package/src/components/Icon/Icon.tsx +6 -2
  300. package/src/components/Image/Image.stories.tsx +86 -0
  301. package/src/components/Image/Image.tsx +223 -0
  302. package/src/components/Image/index.ts +5 -0
  303. package/src/components/Input/Input.stories.tsx +25 -48
  304. package/src/components/Input/Input.tsx +40 -76
  305. package/src/components/Link/Link.stories.tsx +10 -8
  306. package/src/components/Link/Link.tsx +2 -2
  307. package/src/components/{Lists → List}/List.stories.tsx +41 -44
  308. package/src/components/{Lists → List}/List.tsx +21 -22
  309. package/src/components/{Lists → List}/ListDropIndicator.tsx +7 -7
  310. package/src/components/{Lists → List}/Tree.stories.tsx +14 -13
  311. package/src/components/{Lists → List}/Tree.tsx +0 -1
  312. package/src/components/{Lists → List}/TreeDropIndicator.tsx +6 -6
  313. package/src/components/{Lists → List}/Treegrid.stories.tsx +39 -35
  314. package/src/components/List/Treegrid.tsx +188 -0
  315. package/src/components/Main/Main.stories.tsx +52 -28
  316. package/src/components/Main/Main.tsx +170 -100
  317. package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +11 -10
  318. package/src/components/{Menus → Menu}/ContextMenu.tsx +10 -33
  319. package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +12 -11
  320. package/src/components/{Menus → Menu}/DropdownMenu.tsx +151 -114
  321. package/src/components/Message/Message.stories.tsx +35 -18
  322. package/src/components/Message/Message.tsx +43 -34
  323. package/src/components/Popover/Popover.stories.tsx +17 -16
  324. package/src/components/Popover/Popover.tsx +118 -96
  325. package/src/components/ScrollArea/ScrollArea.stories.tsx +223 -32
  326. package/src/components/ScrollArea/ScrollArea.tsx +97 -79
  327. package/src/components/ScrollArea/index.ts +1 -1
  328. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +91 -0
  329. package/src/components/ScrollContainer/ScrollContainer.tsx +347 -0
  330. package/src/components/ScrollContainer/index.ts +5 -0
  331. package/src/components/Select/Select.stories.tsx +19 -18
  332. package/src/components/Select/Select.tsx +16 -31
  333. package/src/components/Separator/Separator.tsx +5 -8
  334. package/src/components/Skeleton/Skeleton.stories.tsx +51 -0
  335. package/src/components/Skeleton/Skeleton.tsx +26 -0
  336. package/src/components/Skeleton/index.ts +5 -0
  337. package/src/components/Splitter/Splitter.stories.tsx +83 -0
  338. package/src/components/Splitter/Splitter.tsx +127 -0
  339. package/src/components/Splitter/index.ts +5 -0
  340. package/src/components/Status/Status.stories.tsx +28 -23
  341. package/src/components/Status/Status.tsx +10 -7
  342. package/src/components/Tag/Tag.stories.tsx +16 -14
  343. package/src/components/Tag/Tag.tsx +3 -8
  344. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +31 -0
  345. package/src/components/ThemeProvider/ThemeProvider.tsx +10 -10
  346. package/src/components/ThemeProvider/TranslationsProvider.tsx +1 -16
  347. package/src/components/ThemeProvider/index.ts +3 -3
  348. package/src/components/Toast/Toast.stories.tsx +12 -11
  349. package/src/components/Toast/Toast.tsx +22 -41
  350. package/src/components/Toolbar/Toolbar.stories.tsx +14 -14
  351. package/src/components/Toolbar/Toolbar.tsx +185 -11
  352. package/src/components/Tooltip/Tooltip.stories.tsx +34 -30
  353. package/src/components/Tooltip/Tooltip.tsx +42 -39
  354. package/src/components/index.ts +15 -9
  355. package/src/exemplars/generics.stories.tsx +41 -0
  356. package/src/exemplars/slot.stories.tsx +117 -0
  357. package/src/exemplars/tabster.stories.tsx +127 -0
  358. package/src/exemplars/virtualizer.stories.tsx +137 -0
  359. package/src/hooks/index.ts +1 -0
  360. package/src/hooks/useDensityContext.ts +3 -3
  361. package/src/hooks/useElevationContext.ts +1 -1
  362. package/src/hooks/useSafeArea.ts +3 -2
  363. package/src/hooks/useVisualViewport.ts +4 -4
  364. package/src/index.ts +2 -1
  365. package/src/playground/Controls.stories.tsx +12 -15
  366. package/src/playground/Custom.stories.tsx +18 -32
  367. package/src/playground/Typography.stories.tsx +11 -9
  368. package/src/primitives/Column/AUDIT.md +148 -0
  369. package/src/primitives/Column/Column.stories.tsx +181 -0
  370. package/src/primitives/Column/Column.tsx +165 -0
  371. package/src/primitives/Column/index.ts +5 -0
  372. package/src/primitives/Container/Container.stories.tsx +29 -0
  373. package/src/primitives/Container/Container.tsx +19 -0
  374. package/src/primitives/Container/index.ts +5 -0
  375. package/src/primitives/Flex/Flex.stories.tsx +57 -0
  376. package/src/primitives/Flex/Flex.tsx +27 -0
  377. package/src/primitives/Flex/index.ts +5 -0
  378. package/src/primitives/Grid/Grid.stories.tsx +56 -0
  379. package/src/primitives/Grid/Grid.tsx +30 -0
  380. package/src/primitives/Grid/index.ts +5 -0
  381. package/src/primitives/Panel/Panel.stories.tsx +68 -0
  382. package/src/primitives/Panel/Panel.tsx +120 -0
  383. package/src/primitives/Panel/index.ts +5 -0
  384. package/src/primitives/index.ts +9 -0
  385. package/src/testing/Loading.tsx +47 -0
  386. package/src/testing/decorators/index.ts +2 -1
  387. package/src/testing/decorators/withLayout.tsx +77 -0
  388. package/src/testing/decorators/withLayoutVariants.tsx +48 -0
  389. package/src/testing/decorators/withTheme.tsx +37 -0
  390. package/src/testing/index.ts +2 -0
  391. package/src/translations.ts +19 -0
  392. package/src/util/index.ts +3 -1
  393. package/src/util/usePx.ts +62 -0
  394. package/dist/lib/browser/chunk-BKNGMGOK.mjs +0 -4373
  395. package/dist/lib/browser/chunk-BKNGMGOK.mjs.map +0 -7
  396. package/dist/lib/node-esm/chunk-D2HZS6F4.mjs +0 -4375
  397. package/dist/lib/node-esm/chunk-D2HZS6F4.mjs.map +0 -7
  398. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +0 -15
  399. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +0 -1
  400. package/dist/types/src/components/AnchoredOverflow/index.d.ts +0 -2
  401. package/dist/types/src/components/AnchoredOverflow/index.d.ts.map +0 -1
  402. package/dist/types/src/components/Buttons/Button.d.ts.map +0 -1
  403. package/dist/types/src/components/Buttons/Button.stories.d.ts +0 -12
  404. package/dist/types/src/components/Buttons/Button.stories.d.ts.map +0 -1
  405. package/dist/types/src/components/Buttons/IconButton.d.ts.map +0 -1
  406. package/dist/types/src/components/Buttons/IconButton.stories.d.ts +0 -22
  407. package/dist/types/src/components/Buttons/IconButton.stories.d.ts.map +0 -1
  408. package/dist/types/src/components/Buttons/Toggle.d.ts.map +0 -1
  409. package/dist/types/src/components/Buttons/Toggle.stories.d.ts +0 -19
  410. package/dist/types/src/components/Buttons/Toggle.stories.d.ts.map +0 -1
  411. package/dist/types/src/components/Buttons/ToggleGroup.d.ts +0 -28
  412. package/dist/types/src/components/Buttons/ToggleGroup.d.ts.map +0 -1
  413. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts +0 -39
  414. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +0 -1
  415. package/dist/types/src/components/Buttons/index.d.ts.map +0 -1
  416. package/dist/types/src/components/Dialogs/AlertDialog.d.ts +0 -31
  417. package/dist/types/src/components/Dialogs/AlertDialog.d.ts.map +0 -1
  418. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts +0 -43
  419. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +0 -1
  420. package/dist/types/src/components/Dialogs/Dialog.d.ts +0 -31
  421. package/dist/types/src/components/Dialogs/Dialog.d.ts.map +0 -1
  422. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts +0 -48
  423. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +0 -1
  424. package/dist/types/src/components/Dialogs/index.d.ts.map +0 -1
  425. package/dist/types/src/components/Lists/List.d.ts.map +0 -1
  426. package/dist/types/src/components/Lists/List.stories.d.ts +0 -37
  427. package/dist/types/src/components/Lists/List.stories.d.ts.map +0 -1
  428. package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +0 -1
  429. package/dist/types/src/components/Lists/Tree.d.ts.map +0 -1
  430. package/dist/types/src/components/Lists/Tree.stories.d.ts +0 -41
  431. package/dist/types/src/components/Lists/Tree.stories.d.ts.map +0 -1
  432. package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +0 -1
  433. package/dist/types/src/components/Lists/Treegrid.d.ts.map +0 -1
  434. package/dist/types/src/components/Lists/Treegrid.stories.d.ts +0 -10
  435. package/dist/types/src/components/Lists/Treegrid.stories.d.ts.map +0 -1
  436. package/dist/types/src/components/Lists/index.d.ts.map +0 -1
  437. package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
  438. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts +0 -50
  439. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +0 -1
  440. package/dist/types/src/components/Menus/DropdownMenu.d.ts +0 -112
  441. package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
  442. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts +0 -50
  443. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
  444. package/dist/types/src/components/Menus/index.d.ts.map +0 -1
  445. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts +0 -12
  446. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts.map +0 -1
  447. package/dist/types/src/util/ThemedClassName.d.ts +0 -5
  448. package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
  449. package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +0 -59
  450. package/src/components/AnchoredOverflow/index.ts +0 -5
  451. package/src/components/Buttons/Toggle.stories.tsx +0 -34
  452. package/src/components/Buttons/ToggleGroup.tsx +0 -41
  453. package/src/components/Dialogs/AlertDialog.stories.tsx +0 -67
  454. package/src/components/Dialogs/Dialog.stories.tsx +0 -66
  455. package/src/components/Dialogs/Dialog.tsx +0 -159
  456. package/src/components/Lists/Treegrid.tsx +0 -152
  457. package/src/testing/decorators/withSurfaceVariantsLayout.tsx +0 -51
  458. package/src/testing/decorators/withTheme.ts +0 -25
  459. package/src/util/ThemedClassName.ts +0 -7
  460. /package/dist/types/src/components/{Buttons → Button}/index.d.ts +0 -0
  461. /package/dist/types/src/components/{Dialogs → Dialog}/index.d.ts +0 -0
  462. /package/dist/types/src/components/{Lists → List}/ListDropIndicator.d.ts +0 -0
  463. /package/dist/types/src/components/{Lists → List}/Tree.d.ts +0 -0
  464. /package/dist/types/src/components/{Lists → List}/TreeDropIndicator.d.ts +0 -0
  465. /package/dist/types/src/components/{Lists → List}/index.d.ts +0 -0
  466. /package/dist/types/src/components/{Menus → Menu}/index.d.ts +0 -0
  467. /package/src/components/{Buttons → Button}/index.ts +0 -0
  468. /package/src/components/{Dialogs → Dialog}/index.ts +0 -0
  469. /package/src/components/{Lists → List}/index.ts +0 -0
  470. /package/src/components/{Menus → Menu}/index.ts +0 -0
@@ -2,6 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
+ import { useFocusableGroup } from '@fluentui/react-tabster';
5
6
  import { createContext } from '@radix-ui/react-context';
6
7
  import { DialogContent, Root as DialogRoot, DialogTitle } from '@radix-ui/react-dialog';
7
8
  import { Primitive } from '@radix-ui/react-primitive';
@@ -21,31 +22,30 @@ import React, {
21
22
  useState,
22
23
  } from 'react';
23
24
 
25
+ import { addEventListener } from '@dxos/async';
24
26
  import { log } from '@dxos/log';
25
27
  import { useForwardedRef, useMediaQuery } from '@dxos/react-hooks';
28
+ import { type MainStyleProps, osTranslations } from '@dxos/ui-theme';
26
29
 
27
30
  import { useThemeContext } from '../../hooks';
28
31
  import { type ThemedClassName } from '../../util';
29
32
  import { type Label, toLocalizedString, useTranslation } from '../ThemeProvider';
30
-
31
33
  import { useSwipeToDismiss } from './useSwipeToDismiss';
32
34
 
35
+ const MAIN_NAME = 'Main';
33
36
  const MAIN_ROOT_NAME = 'MainRoot';
37
+ const MAIN_OVERLAY_NAME = 'MainOverlay';
34
38
  const NAVIGATION_SIDEBAR_NAME = 'NavigationSidebar';
35
39
  const COMPLEMENTARY_SIDEBAR_NAME = 'ComplementarySidebar';
36
- const MAIN_NAME = 'Main';
37
- const GENERIC_CONSUMER_NAME = 'GenericConsumer';
38
-
39
- type SidebarState = 'expanded' | 'collapsed' | 'closed';
40
40
 
41
- type MainContextValue = {
42
- resizing: boolean;
43
- navigationSidebarState: SidebarState;
44
- setNavigationSidebarState: Dispatch<SetStateAction<SidebarState | undefined>>;
45
- complementarySidebarState: SidebarState;
46
- setComplementarySidebarState: Dispatch<SetStateAction<SidebarState | undefined>>;
41
+ const handleOpenAutoFocus = (event: Event) => {
42
+ !document.body.hasAttribute('data-w-keyboard') && event.preventDefault();
47
43
  };
48
44
 
45
+ //
46
+ // Landmark
47
+ //
48
+
49
49
  const landmarkAttr = 'data-main-landmark';
50
50
 
51
51
  /**
@@ -70,28 +70,60 @@ const useLandmarkMover = (propsOnKeyDown: ComponentPropsWithoutRef<'div'>['onKey
70
70
  },
71
71
  [propsOnKeyDown],
72
72
  );
73
- const focusableGroupAttrs = window ? {} : { tabBehavior: 'limited', ignoreDefaultKeydown: { Tab: true } };
74
73
 
75
- return { onKeyDown: handleKeyDown, [landmarkAttr]: landmark, tabIndex: 0, ...focusableGroupAttrs };
74
+ // TODO(thure): This was disconnected once before in #8818;
75
+ // if this should change again to support the browser extension, please ensure the change doesn’t break web, desktop and mobile.
76
+ const focusableGroupAttrs = useFocusableGroup({ tabBehavior: 'limited', ignoreDefaultKeydown: { Tab: true } });
77
+
78
+ return {
79
+ [landmarkAttr]: landmark,
80
+ tabIndex: 0,
81
+ onKeyDown: handleKeyDown,
82
+ ...focusableGroupAttrs,
83
+ };
84
+ };
85
+
86
+ //
87
+ // Context
88
+ //
89
+
90
+ // TODO(burdon): Define collapsed state.
91
+ type SidebarState = 'expanded' | 'collapsed' | 'closed';
92
+
93
+ type MainContextValue = {
94
+ resizing: boolean;
95
+
96
+ // Navigation
97
+ navigationSidebarState: SidebarState;
98
+ setNavigationSidebarState: Dispatch<SetStateAction<SidebarState | undefined>>;
99
+
100
+ // Complementary
101
+ complementarySidebarState: SidebarState;
102
+ setComplementarySidebarState: Dispatch<SetStateAction<SidebarState | undefined>>;
76
103
  };
77
104
 
78
105
  const [MainProvider, useMainContext] = createContext<MainContextValue>(MAIN_NAME, {
79
106
  resizing: false,
107
+
80
108
  navigationSidebarState: 'closed',
81
- setNavigationSidebarState: (nextState) => {
82
- // TODO(burdon): Standardize with other context missing errors using raise.
83
- log.warn('Attempt to set sidebar state without initializing `MainRoot`');
109
+ setNavigationSidebarState: (_nextState) => {
110
+ log.warn('Not initialized');
84
111
  },
112
+
85
113
  complementarySidebarState: 'closed',
86
- setComplementarySidebarState: (nextState) => {
87
- // TODO(burdon): Standardize with other context missing errors using raise.
88
- log.warn('Attempt to set sidebar state without initializing `MainRoot`');
114
+ setComplementarySidebarState: (_nextState) => {
115
+ log.warn('Not initialized');
89
116
  },
90
117
  });
91
118
 
92
- const useSidebars = (consumerName = GENERIC_CONSUMER_NAME) => {
93
- const { setNavigationSidebarState, navigationSidebarState, setComplementarySidebarState, complementarySidebarState } =
94
- useMainContext(consumerName);
119
+ const useSidebars = (consumerName: string) => {
120
+ const {
121
+ navigationSidebarState,
122
+ setNavigationSidebarState,
123
+
124
+ complementarySidebarState,
125
+ setComplementarySidebarState,
126
+ } = useMainContext(consumerName);
95
127
 
96
128
  return {
97
129
  navigationSidebarState,
@@ -103,6 +135,7 @@ const useSidebars = (consumerName = GENERIC_CONSUMER_NAME) => {
103
135
  openNavigationSidebar: useCallback(() => setNavigationSidebarState('expanded'), []),
104
136
  collapseNavigationSidebar: useCallback(() => setNavigationSidebarState('collapsed'), []),
105
137
  closeNavigationSidebar: useCallback(() => setNavigationSidebarState('closed'), []),
138
+
106
139
  complementarySidebarState,
107
140
  setComplementarySidebarState,
108
141
  toggleComplementarySidebar: useCallback(
@@ -115,28 +148,33 @@ const useSidebars = (consumerName = GENERIC_CONSUMER_NAME) => {
115
148
  };
116
149
  };
117
150
 
151
+ //
152
+ // Root
153
+ //
154
+
118
155
  type MainRootProps = PropsWithChildren<{
119
156
  navigationSidebarState?: SidebarState;
120
157
  defaultNavigationSidebarState?: SidebarState;
121
158
  onNavigationSidebarStateChange?: (nextState: SidebarState) => void;
159
+
122
160
  complementarySidebarState?: SidebarState;
123
161
  defaultComplementarySidebarState?: SidebarState;
124
162
  onComplementarySidebarStateChange?: (nextState: SidebarState) => void;
125
163
  }>;
126
164
 
127
- const resizeDebounce = 3000;
128
-
129
165
  const MainRoot = ({
130
166
  navigationSidebarState: propsNavigationSidebarState,
131
- defaultNavigationSidebarState,
167
+ defaultNavigationSidebarState = 'closed',
132
168
  onNavigationSidebarStateChange,
169
+
133
170
  complementarySidebarState: propsComplementarySidebarState,
134
- defaultComplementarySidebarState,
171
+ defaultComplementarySidebarState = 'closed',
135
172
  onComplementarySidebarStateChange,
173
+
136
174
  children,
137
175
  ...props
138
176
  }: MainRootProps) => {
139
- const [isLg] = useMediaQuery('lg', { ssr: false });
177
+ const [isLg] = useMediaQuery('lg');
140
178
  const [navigationSidebarState = isLg ? 'expanded' : 'collapsed', setNavigationSidebarState] =
141
179
  useControllableState<SidebarState>({
142
180
  prop: propsNavigationSidebarState,
@@ -152,22 +190,21 @@ const MainRoot = ({
152
190
 
153
191
  const [resizing, setResizing] = useState(false);
154
192
  const resizeInterval = useRef<ReturnType<typeof setTimeout> | null>(null);
193
+ useEffect(
194
+ () =>
195
+ addEventListener(window, 'resize', () => {
196
+ setResizing(true);
197
+ if (resizeInterval.current) {
198
+ clearTimeout(resizeInterval.current);
199
+ }
155
200
 
156
- const handleResize = useCallback(() => {
157
- setResizing(true);
158
- if (resizeInterval.current) {
159
- clearTimeout(resizeInterval.current);
160
- }
161
- resizeInterval.current = setTimeout(() => {
162
- setResizing(false);
163
- resizeInterval.current = null;
164
- }, resizeDebounce);
165
- }, []);
166
-
167
- useEffect(() => {
168
- window.addEventListener('resize', handleResize);
169
- return () => window.removeEventListener('resize', handleResize);
170
- }, [handleResize]);
201
+ resizeInterval.current = setTimeout(() => {
202
+ setResizing(false);
203
+ resizeInterval.current = null;
204
+ }, 3_000);
205
+ }),
206
+ [],
207
+ );
171
208
 
172
209
  return (
173
210
  <MainProvider
@@ -187,16 +224,52 @@ const MainRoot = ({
187
224
 
188
225
  MainRoot.displayName = MAIN_ROOT_NAME;
189
226
 
190
- const handleOpenAutoFocus = (event: Event) => {
191
- !document.body.hasAttribute('data-is-keyboard') && event.preventDefault();
192
- };
227
+ //
228
+ // Overlay
229
+ //
230
+
231
+ type MainOverlayProps = ThemedClassName<Omit<ComponentPropsWithRef<typeof Primitive.div>, 'children' | 'onClick'>>;
232
+
233
+ const MainOverlay = forwardRef<HTMLDivElement, MainOverlayProps>(({ classNames, ...props }, forwardedRef) => {
234
+ const [isLg] = useMediaQuery('lg');
235
+ const { navigationSidebarState, setNavigationSidebarState, complementarySidebarState, setComplementarySidebarState } =
236
+ useMainContext(MAIN_OVERLAY_NAME);
237
+ const { tx } = useThemeContext();
238
+ return (
239
+ <div
240
+ {...props}
241
+ onClick={() => {
242
+ setNavigationSidebarState('collapsed');
243
+ setComplementarySidebarState('collapsed');
244
+ }}
245
+ className={tx(
246
+ 'main.overlay',
247
+ {
248
+ isLg,
249
+ inlineStartSidebarOpen: navigationSidebarState,
250
+ inlineEndSidebarOpen: complementarySidebarState,
251
+ },
252
+ classNames,
253
+ )}
254
+ data-state={navigationSidebarState === 'expanded' || complementarySidebarState === 'expanded' ? 'open' : 'closed'}
255
+ aria-hidden='true'
256
+ ref={forwardedRef}
257
+ />
258
+ );
259
+ });
260
+
261
+ MainOverlay.displayName = MAIN_OVERLAY_NAME;
262
+
263
+ //
264
+ // Sidebar
265
+ //
193
266
 
194
267
  type MainSidebarProps = ThemedClassName<ComponentPropsWithRef<typeof DialogContent>> & {
195
268
  swipeToDismiss?: boolean;
196
269
  state?: SidebarState;
197
270
  resizing?: boolean;
198
271
  onStateChange?: (nextState: SidebarState) => void;
199
- side: 'inline-start' | 'inline-end';
272
+ side: 'w-start' | 'w-end';
200
273
  label: Label;
201
274
  };
202
275
 
@@ -205,23 +278,31 @@ const MainSidebar = forwardRef<HTMLDivElement, MainSidebarProps>(
205
278
  { classNames, children, swipeToDismiss, onOpenAutoFocus, state, resizing, onStateChange, side, label, ...props },
206
279
  forwardedRef,
207
280
  ) => {
208
- const [isLg] = useMediaQuery('lg', { ssr: false });
281
+ const [isLg] = useMediaQuery('lg');
209
282
  const { tx } = useThemeContext();
210
- const { t } = useTranslation();
283
+ const { t } = useTranslation(osTranslations);
211
284
  const ref = useForwardedRef(forwardedRef);
212
285
  const noopRef = useRef(null);
286
+
213
287
  useSwipeToDismiss(swipeToDismiss ? ref : noopRef, {
214
288
  onDismiss: () => onStateChange?.('closed'),
215
289
  });
290
+
291
+ // NOTE(thure): This is a workaround for something further down the tree grabbing focus on Escape. Adding this
292
+ // intervention to `Tabs.Root` or `Tabs.Tabpenel` instances is somehow ineffectual.
216
293
  const handleKeyDown = useCallback(
217
294
  (event: KeyboardEvent<HTMLDivElement>) => {
218
- if (event.key === 'Escape') {
219
- ((event.target as HTMLDivElement).closest('[data-tabster]') as HTMLDivElement)?.focus();
295
+ const focusGroupParent = (event.target as HTMLElement).closest('[data-tabster]');
296
+ if (event.key === 'Escape' && focusGroupParent) {
297
+ event.preventDefault();
298
+ event.stopPropagation();
299
+ (focusGroupParent as HTMLElement).focus();
220
300
  }
221
301
  props.onKeyDown?.(event);
222
302
  },
223
303
  [props.onKeyDown],
224
304
  );
305
+
225
306
  const Root = isLg ? Primitive.div : DialogContent;
226
307
 
227
308
  return (
@@ -229,13 +310,13 @@ const MainSidebar = forwardRef<HTMLDivElement, MainSidebarProps>(
229
310
  {!isLg && <DialogTitle className='sr-only'>{toLocalizedString(label, t)}</DialogTitle>}
230
311
  <Root
231
312
  {...(!isLg && { forceMount: true, tabIndex: -1, onOpenAutoFocus: onOpenAutoFocus ?? handleOpenAutoFocus })}
313
+ {...(state === 'closed' && { inert: true })}
232
314
  {...props}
233
- data-side={side === 'inline-end' ? 'ie' : 'is'}
315
+ data-side={side === 'w-end' ? 'ie' : 'is'}
234
316
  data-state={state}
235
317
  data-resizing={resizing ? 'true' : 'false'}
236
- className={tx('main.sidebar', 'main__sidebar', {}, classNames)}
237
- onKeyDown={handleKeyDown}
238
- {...(state === 'closed' && { inert: 'true' })}
318
+ className={tx('main.sidebar', {}, classNames)}
319
+ onKeyDownCapture={handleKeyDown}
239
320
  ref={ref}
240
321
  >
241
322
  {children}
@@ -245,6 +326,10 @@ const MainSidebar = forwardRef<HTMLDivElement, MainSidebarProps>(
245
326
  },
246
327
  );
247
328
 
329
+ //
330
+ // Navigation Sidebar
331
+ //
332
+
248
333
  type MainNavigationSidebarProps = Omit<MainSidebarProps, 'expanded' | 'side'>;
249
334
 
250
335
  const MainNavigationSidebar = forwardRef<HTMLDivElement, MainNavigationSidebarProps>((props, forwardedRef) => {
@@ -258,7 +343,7 @@ const MainNavigationSidebar = forwardRef<HTMLDivElement, MainNavigationSidebarPr
258
343
  state={navigationSidebarState}
259
344
  onStateChange={setNavigationSidebarState}
260
345
  resizing={resizing}
261
- side='inline-start'
346
+ side='w-start'
262
347
  ref={forwardedRef}
263
348
  />
264
349
  );
@@ -266,6 +351,10 @@ const MainNavigationSidebar = forwardRef<HTMLDivElement, MainNavigationSidebarPr
266
351
 
267
352
  MainNavigationSidebar.displayName = NAVIGATION_SIDEBAR_NAME;
268
353
 
354
+ //
355
+ // Complementary Sidebar
356
+ //
357
+
269
358
  type MainComplementarySidebarProps = Omit<MainSidebarProps, 'expanded' | 'side'>;
270
359
 
271
360
  const MainComplementarySidebar = forwardRef<HTMLDivElement, MainComplementarySidebarProps>((props, forwardedRef) => {
@@ -280,82 +369,63 @@ const MainComplementarySidebar = forwardRef<HTMLDivElement, MainComplementarySid
280
369
  state={complementarySidebarState}
281
370
  onStateChange={setComplementarySidebarState}
282
371
  resizing={resizing}
283
- side='inline-end'
372
+ side='w-end'
284
373
  ref={forwardedRef}
285
374
  />
286
375
  );
287
376
  });
288
377
 
289
- MainNavigationSidebar.displayName = NAVIGATION_SIDEBAR_NAME;
378
+ MainComplementarySidebar.displayName = COMPLEMENTARY_SIDEBAR_NAME;
290
379
 
291
- type MainProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.div>> & {
292
- asChild?: boolean;
293
- bounce?: boolean;
294
- handlesFocus?: boolean;
295
- };
380
+ //
381
+ // Content
382
+ //
383
+
384
+ type MainContentProps = ThemedClassName<
385
+ ComponentPropsWithRef<typeof Primitive.div> &
386
+ MainStyleProps & {
387
+ asChild?: boolean;
388
+ }
389
+ >;
296
390
 
297
- const MainContent = forwardRef<HTMLDivElement, MainProps>(
298
- ({ asChild, classNames, bounce, handlesFocus, children, role, ...props }: MainProps, forwardedRef) => {
391
+ const MainContent = forwardRef<HTMLDivElement, MainContentProps>(
392
+ ({ asChild, classNames, bounce, handlesFocus, children, role, ...props }: MainContentProps, forwardedRef) => {
299
393
  const { navigationSidebarState, complementarySidebarState } = useMainContext(MAIN_NAME);
300
394
  const { tx } = useThemeContext();
301
- const Root = asChild ? Slot : role ? 'div' : 'main';
302
-
395
+ const Comp = asChild ? Slot : role ? Primitive.div : 'main';
303
396
  const mover = useLandmarkMover(props.onKeyDown, '1');
304
397
 
305
398
  return (
306
- <Root
307
- role={role}
399
+ <Comp
308
400
  {...(handlesFocus && { ...mover })}
309
401
  {...props}
310
- data-sidebar-inline-start-state={navigationSidebarState}
311
- data-sidebar-inline-end-state={complementarySidebarState}
402
+ role={role}
403
+ data-sidebar-left-state={navigationSidebarState}
404
+ data-sidebar-right-state={complementarySidebarState}
312
405
  data-handles-focus={handlesFocus}
313
- className={tx('main.content', 'main', { bounce, handlesFocus }, classNames)}
406
+ className={tx('main.content', { bounce, handlesFocus }, classNames)}
314
407
  ref={forwardedRef}
315
408
  >
316
409
  {children}
317
- </Root>
410
+ </Comp>
318
411
  );
319
412
  },
320
413
  );
321
414
 
322
415
  MainContent.displayName = MAIN_NAME;
323
416
 
324
- type MainOverlayProps = ThemedClassName<Omit<ComponentPropsWithRef<typeof Primitive.div>, 'children'>>;
325
-
326
- const MainOverlay = forwardRef<HTMLDivElement, MainOverlayProps>(({ classNames, ...props }, forwardedRef) => {
327
- const [isLg] = useMediaQuery('lg', { ssr: false });
328
- const { navigationSidebarState, setNavigationSidebarState, complementarySidebarState, setComplementarySidebarState } =
329
- useMainContext(MAIN_NAME);
330
- const { tx } = useThemeContext();
331
- return (
332
- <div
333
- onClick={() => {
334
- setNavigationSidebarState('collapsed');
335
- setComplementarySidebarState('collapsed');
336
- }}
337
- {...props}
338
- className={tx(
339
- 'main.overlay',
340
- 'main__overlay',
341
- { isLg, inlineStartSidebarOpen: navigationSidebarState, inlineEndSidebarOpen: complementarySidebarState },
342
- classNames,
343
- )}
344
- data-state={navigationSidebarState === 'expanded' || complementarySidebarState === 'expanded' ? 'open' : 'closed'}
345
- aria-hidden='true'
346
- ref={forwardedRef}
347
- />
348
- );
349
- });
417
+ //
418
+ // Main
419
+ //
350
420
 
351
421
  export const Main = {
352
422
  Root: MainRoot,
353
- Content: MainContent,
354
423
  Overlay: MainOverlay,
424
+ Content: MainContent,
355
425
  NavigationSidebar: MainNavigationSidebar,
356
426
  ComplementarySidebar: MainComplementarySidebar,
357
427
  };
358
428
 
359
429
  export { useMainContext, useSidebars, useLandmarkMover };
360
430
 
361
- export type { MainRootProps, MainProps, MainOverlayProps, MainNavigationSidebarProps, SidebarState };
431
+ export type { MainRootProps, MainOverlayProps, MainContentProps, MainNavigationSidebarProps, SidebarState };
@@ -2,12 +2,10 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
7
6
  import React from 'react';
8
7
 
9
8
  import { withTheme } from '../../testing';
10
-
11
9
  import { ContextMenu } from './ContextMenu';
12
10
 
13
11
  const DefaultStory = () => {
@@ -92,15 +90,18 @@ const DefaultStory = () => {
92
90
  );
93
91
  };
94
92
 
95
- export default {
96
- title: 'ui/react-ui-core/ContextMenu',
97
- component: ContextMenu,
93
+ const meta = {
94
+ title: 'ui/react-ui-core/components/ContextMenu',
95
+ component: ContextMenu.Root as any,
98
96
  render: DefaultStory,
99
- decorators: [withTheme],
100
- parameters: { chromatic: { disableSnapshot: false } },
101
- };
97
+ decorators: [withTheme()],
98
+ } satisfies Meta<typeof DefaultStory>;
99
+
100
+ export default meta;
101
+
102
+ type Story = StoryObj<typeof meta>;
102
103
 
103
- export const Default = {
104
+ export const Default: Story = {
104
105
  args: {},
105
106
  parameters: {
106
107
  chromatic: { delay: 1600 },
@@ -34,8 +34,9 @@ const ContextMenuContent = forwardRef<HTMLDivElement, ContextMenuContentProps>(
34
34
  return (
35
35
  <ContextMenuPrimitive.Content
36
36
  {...props}
37
+ data-arrow-keys='up down'
37
38
  collisionPadding={safeCollisionPadding}
38
- className={tx('menu.content', 'menu', { elevation }, classNames)}
39
+ className={tx('menu.content', { elevation }, classNames)}
39
40
  ref={forwardedRef}
40
41
  >
41
42
  {children}
@@ -51,11 +52,11 @@ type ContextMenuViewportProps = ThemedClassName<ComponentPropsWithRef<typeof Pri
51
52
  const ContextMenuViewport = forwardRef<HTMLDivElement, ContextMenuViewportProps>(
52
53
  ({ classNames, asChild, children, ...props }, forwardedRef) => {
53
54
  const { tx } = useThemeContext();
54
- const Root = asChild ? Slot : Primitive.div;
55
+ const Comp = asChild ? Slot : Primitive.div;
55
56
  return (
56
- <Root {...props} className={tx('menu.viewport', 'menu__viewport', {}, classNames)} ref={forwardedRef}>
57
+ <Comp {...props} className={tx('menu.viewport', {}, classNames)} ref={forwardedRef}>
57
58
  {children}
58
- </Root>
59
+ </Comp>
59
60
  );
60
61
  },
61
62
  );
@@ -64,13 +65,7 @@ type ContextMenuArrowProps = ThemedClassName<ContextMenuPrimitive.ContextMenuArr
64
65
 
65
66
  const ContextMenuArrow = forwardRef<SVGSVGElement, ContextMenuArrowProps>(({ classNames, ...props }, forwardedRef) => {
66
67
  const { tx } = useThemeContext();
67
- return (
68
- <ContextMenuPrimitive.Arrow
69
- {...props}
70
- className={tx('menu.arrow', 'menu__arrow', {}, classNames)}
71
- ref={forwardedRef}
72
- />
73
- );
68
+ return <ContextMenuPrimitive.Arrow {...props} className={tx('menu.arrow', {}, classNames)} ref={forwardedRef} />;
74
69
  });
75
70
 
76
71
  type ContextMenuGroupProps = ContextMenuPrimitive.ContextMenuGroupProps;
@@ -86,13 +81,7 @@ type ContextMenuItemProps = ThemedClassName<ContextMenuPrimitive.ContextMenuItem
86
81
  const ContextMenuItem = forwardRef<HTMLDivElement, ContextMenuItemProps>(
87
82
  ({ classNames, ...props }: ContextMenuItemProps, forwardedRef) => {
88
83
  const { tx } = useThemeContext();
89
- return (
90
- <ContextMenuPrimitive.Item
91
- {...props}
92
- className={tx('menu.item', 'menu__item', {}, classNames)}
93
- ref={forwardedRef}
94
- />
95
- );
84
+ return <ContextMenuPrimitive.Item {...props} className={tx('menu.item', {}, classNames)} ref={forwardedRef} />;
96
85
  },
97
86
  );
98
87
 
@@ -102,11 +91,7 @@ const ContextMenuCheckboxItem = forwardRef<HTMLDivElement, ContextMenuCheckboxIt
102
91
  ({ classNames, ...props }: ContextMenuItemProps, forwardedRef) => {
103
92
  const { tx } = useThemeContext();
104
93
  return (
105
- <ContextMenuPrimitive.CheckboxItem
106
- {...props}
107
- className={tx('menu.item', 'menu__item--checkbox', {}, classNames)}
108
- ref={forwardedRef}
109
- />
94
+ <ContextMenuPrimitive.CheckboxItem {...props} className={tx('menu.item', {}, classNames)} ref={forwardedRef} />
110
95
  );
111
96
  },
112
97
  );
@@ -117,11 +102,7 @@ const ContextMenuSeparator = forwardRef<HTMLDivElement, ContextMenuSeparatorProp
117
102
  ({ classNames, ...props }, forwardedRef) => {
118
103
  const { tx } = useThemeContext();
119
104
  return (
120
- <ContextMenuPrimitive.Separator
121
- {...props}
122
- className={tx('menu.separator', 'menu__item', {}, classNames)}
123
- ref={forwardedRef}
124
- />
105
+ <ContextMenuPrimitive.Separator {...props} className={tx('menu.separator', {}, classNames)} ref={forwardedRef} />
125
106
  );
126
107
  },
127
108
  );
@@ -132,11 +113,7 @@ const ContextMenuGroupLabel = forwardRef<HTMLDivElement, ContextMenuGroupLabelPr
132
113
  ({ classNames, ...props }, forwardedRef) => {
133
114
  const { tx } = useThemeContext();
134
115
  return (
135
- <ContextMenuPrimitive.Label
136
- {...props}
137
- className={tx('menu.groupLabel', 'menu__group__label', {}, classNames)}
138
- ref={forwardedRef}
139
- />
116
+ <ContextMenuPrimitive.Label {...props} className={tx('menu.groupLabel', {}, classNames)} ref={forwardedRef} />
140
117
  );
141
118
  },
142
119
  );
@@ -2,13 +2,11 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
7
6
  import React, { useRef, useState } from 'react';
8
7
 
9
8
  import { withTheme } from '../../testing';
10
- import { Button } from '../Buttons';
11
-
9
+ import { Button } from '../Button';
12
10
  import { DropdownMenu } from './DropdownMenu';
13
11
 
14
12
  const DefaultStory = () => {
@@ -92,15 +90,18 @@ const DefaultStory = () => {
92
90
  );
93
91
  };
94
92
 
95
- export default {
96
- title: 'ui/react-ui-core/DropdownMenu',
97
- component: DropdownMenu,
93
+ const meta = {
94
+ title: 'ui/react-ui-core/components/DropdownMenu',
95
+ component: DropdownMenu.Root,
98
96
  render: DefaultStory,
99
- decorators: [withTheme],
100
- parameters: { chromatic: { disableSnapshot: false } },
101
- };
97
+ decorators: [withTheme()],
98
+ } satisfies Meta<typeof DefaultStory>;
99
+
100
+ export default meta;
101
+
102
+ type Story = StoryObj<typeof meta>;
102
103
 
103
- export const Default = {
104
+ export const Default: Story = {
104
105
  args: {},
105
106
  parameters: {
106
107
  chromatic: { delay: 1600 },