@dxos/react-ui 0.8.4-main.dedc0f3 → 0.8.4-main.e250131250

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