@dxos/react-ui 0.8.4-main.bc674ce → 0.8.4-main.c351d160a8

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 (293) hide show
  1. package/dist/lib/browser/{chunk-CEKVHJ27.mjs → chunk-EJSGYGYH.mjs} +117 -117
  2. package/dist/lib/browser/chunk-EJSGYGYH.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +2747 -1997
  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 +56 -32
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/{chunk-2NHEX4AD.mjs → chunk-B7MXDDMJ.mjs} +117 -117
  9. package/dist/lib/node-esm/chunk-B7MXDDMJ.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +2747 -1997
  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 +56 -32
  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.map +1 -1
  17. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  18. package/dist/types/src/components/Button/Button.d.ts +2 -2
  19. package/dist/types/src/components/Button/Button.d.ts.map +1 -1
  20. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
  21. package/dist/types/src/components/Button/Toggle.d.ts +2 -2
  22. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -1
  23. package/dist/types/src/components/Button/ToggleGroup.d.ts +6 -6
  24. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -1
  25. package/dist/types/src/components/Card/Card.d.ts +107 -0
  26. package/dist/types/src/components/Card/Card.d.ts.map +1 -0
  27. package/dist/types/src/components/Card/Card.stories.d.ts +21 -0
  28. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -0
  29. package/dist/types/src/components/Card/index.d.ts +2 -0
  30. package/dist/types/src/components/Card/index.d.ts.map +1 -0
  31. package/dist/types/src/components/Clipboard/index.d.ts +10 -1
  32. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  33. package/dist/types/src/components/Dialog/AlertDialog.d.ts +26 -17
  34. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
  35. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -1
  36. package/dist/types/src/components/Dialog/Dialog.d.ts +25 -18
  37. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  38. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +3 -6
  39. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
  40. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts +11 -0
  41. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -0
  42. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts +7 -0
  43. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -0
  44. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +8 -0
  45. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -0
  46. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts +9 -0
  47. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -0
  48. package/dist/types/src/components/ErrorFallback/index.d.ts +5 -0
  49. package/dist/types/src/components/ErrorFallback/index.d.ts.map +1 -0
  50. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  51. package/dist/types/src/components/Image/Image.d.ts +14 -0
  52. package/dist/types/src/components/Image/Image.d.ts.map +1 -0
  53. package/dist/types/src/components/Image/Image.stories.d.ts +33 -0
  54. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -0
  55. package/dist/types/src/components/Image/index.d.ts +2 -0
  56. package/dist/types/src/components/Image/index.d.ts.map +1 -0
  57. package/dist/types/src/components/Input/Input.d.ts +4 -7
  58. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  59. package/dist/types/src/components/Input/Input.stories.d.ts +7 -7
  60. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  61. package/dist/types/src/components/List/List.d.ts.map +1 -1
  62. package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
  63. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
  64. package/dist/types/src/components/Main/Main.d.ts +6 -32
  65. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  66. package/dist/types/src/components/Main/Main.stories.d.ts +1 -5
  67. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  68. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
  69. package/dist/types/src/components/Menu/DropdownMenu.d.ts +51 -49
  70. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
  71. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +6 -1
  72. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -1
  73. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  74. package/dist/types/src/components/Message/Message.stories.d.ts +2 -3
  75. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  76. package/dist/types/src/components/Popover/Popover.d.ts +28 -22
  77. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  78. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +21 -26
  79. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  80. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +41 -9
  81. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  82. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  83. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +6 -1
  84. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
  85. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  86. package/dist/types/src/components/Separator/Separator.d.ts +3 -3
  87. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  88. package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
  89. package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  90. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
  91. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  92. package/dist/types/src/components/Skeleton/index.d.ts +2 -0
  93. package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
  94. package/dist/types/src/components/Splitter/Splitter.d.ts +32 -0
  95. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
  96. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
  97. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
  98. package/dist/types/src/components/Splitter/index.d.ts +2 -0
  99. package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
  100. package/dist/types/src/components/Status/Status.stories.d.ts +4 -2
  101. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  102. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  103. package/dist/types/src/components/Tag/Tag.stories.d.ts +0 -5
  104. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  105. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +1 -0
  106. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  107. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts +12 -0
  108. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  109. package/dist/types/src/components/Toast/Toast.d.ts +15 -15
  110. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  111. package/dist/types/src/components/Toolbar/Toolbar.d.ts +33 -11
  112. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  113. package/dist/types/src/components/Tooltip/Tooltip.d.ts +9 -9
  114. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  115. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  116. package/dist/types/src/components/index.d.ts +8 -4
  117. package/dist/types/src/components/index.d.ts.map +1 -1
  118. package/dist/types/src/exemplars/generics.stories.d.ts +18 -0
  119. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
  120. package/dist/types/src/exemplars/slot.stories.d.ts +14 -0
  121. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
  122. package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
  123. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
  124. package/dist/types/src/exemplars/virtualizer.stories.d.ts +11 -0
  125. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -0
  126. package/dist/types/src/hooks/index.d.ts +1 -0
  127. package/dist/types/src/hooks/index.d.ts.map +1 -1
  128. package/dist/types/src/index.d.ts +1 -0
  129. package/dist/types/src/index.d.ts.map +1 -1
  130. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  131. package/dist/types/src/primitives/Column/Column.d.ts +26 -0
  132. package/dist/types/src/primitives/Column/Column.d.ts.map +1 -0
  133. package/dist/types/src/primitives/Column/Column.stories.d.ts +6 -0
  134. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -0
  135. package/dist/types/src/primitives/Column/index.d.ts +2 -0
  136. package/dist/types/src/primitives/Column/index.d.ts.map +1 -0
  137. package/dist/types/src/primitives/Container/Container.d.ts +8 -0
  138. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
  139. package/dist/types/src/primitives/Container/Container.stories.d.ts +6 -0
  140. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
  141. package/dist/types/src/primitives/Container/index.d.ts +2 -0
  142. package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
  143. package/dist/types/src/primitives/Flex/Flex.d.ts +13 -0
  144. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
  145. package/dist/types/src/primitives/Flex/Flex.stories.d.ts +8 -0
  146. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -0
  147. package/dist/types/src/primitives/Flex/index.d.ts +2 -0
  148. package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
  149. package/dist/types/src/primitives/Grid/Grid.d.ts +15 -0
  150. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -0
  151. package/dist/types/src/primitives/Grid/Grid.stories.d.ts +8 -0
  152. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -0
  153. package/dist/types/src/primitives/Grid/index.d.ts +2 -0
  154. package/dist/types/src/primitives/Grid/index.d.ts.map +1 -0
  155. package/dist/types/src/primitives/Panel/Panel.d.ts +26 -0
  156. package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -0
  157. package/dist/types/src/primitives/Panel/Panel.stories.d.ts +6 -0
  158. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -0
  159. package/dist/types/src/primitives/Panel/index.d.ts +2 -0
  160. package/dist/types/src/primitives/Panel/index.d.ts.map +1 -0
  161. package/dist/types/src/primitives/index.d.ts +6 -0
  162. package/dist/types/src/primitives/index.d.ts.map +1 -0
  163. package/dist/types/src/testing/Loading.d.ts +9 -0
  164. package/dist/types/src/testing/Loading.d.ts.map +1 -0
  165. package/dist/types/src/testing/decorators/withLayout.d.ts +1 -1
  166. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
  167. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
  168. package/dist/types/src/testing/decorators/withTheme.d.ts +3 -2
  169. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  170. package/dist/types/src/testing/index.d.ts +1 -0
  171. package/dist/types/src/testing/index.d.ts.map +1 -1
  172. package/dist/types/src/translations.d.ts +11 -0
  173. package/dist/types/src/translations.d.ts.map +1 -0
  174. package/dist/types/tsconfig.tsbuildinfo +1 -1
  175. package/package.json +25 -21
  176. package/src/components/Avatars/Avatar.stories.tsx +5 -6
  177. package/src/components/Avatars/Avatar.tsx +5 -12
  178. package/src/components/Avatars/AvatarGroup.stories.tsx +2 -2
  179. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +3 -3
  180. package/src/components/Breadcrumb/Breadcrumb.tsx +11 -37
  181. package/src/components/Button/Button.stories.tsx +3 -3
  182. package/src/components/Button/Button.tsx +8 -14
  183. package/src/components/Button/IconButton.stories.tsx +4 -4
  184. package/src/components/Button/IconButton.tsx +2 -3
  185. package/src/components/Button/Toggle.stories.tsx +2 -2
  186. package/src/components/Button/Toggle.tsx +4 -4
  187. package/src/components/Button/ToggleGroup.stories.tsx +2 -2
  188. package/src/components/Button/ToggleGroup.tsx +12 -16
  189. package/src/components/Card/Card.stories.tsx +151 -0
  190. package/src/components/Card/Card.tsx +390 -0
  191. package/src/components/Card/index.ts +5 -0
  192. package/src/components/Clipboard/CopyButton.tsx +3 -3
  193. package/src/components/Dialog/AlertDialog.stories.tsx +15 -15
  194. package/src/components/Dialog/AlertDialog.tsx +137 -54
  195. package/src/components/Dialog/Dialog.stories.tsx +40 -15
  196. package/src/components/Dialog/Dialog.tsx +94 -78
  197. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +50 -0
  198. package/src/components/ErrorFallback/ErrorFallback.tsx +70 -0
  199. package/src/components/ErrorFallback/ErrorStack.tsx +80 -0
  200. package/src/components/ErrorFallback/ThrowError.tsx +37 -0
  201. package/src/components/ErrorFallback/index.ts +9 -0
  202. package/src/components/Icon/Icon.stories.tsx +2 -2
  203. package/src/components/Icon/Icon.tsx +3 -2
  204. package/src/components/Image/Image.stories.tsx +86 -0
  205. package/src/components/Image/Image.tsx +223 -0
  206. package/src/components/Image/index.ts +5 -0
  207. package/src/components/Input/Input.stories.tsx +20 -39
  208. package/src/components/Input/Input.tsx +24 -69
  209. package/src/components/Link/Link.stories.tsx +2 -2
  210. package/src/components/Link/Link.tsx +2 -2
  211. package/src/components/List/List.stories.tsx +15 -22
  212. package/src/components/List/List.tsx +11 -16
  213. package/src/components/List/ListDropIndicator.tsx +7 -7
  214. package/src/components/List/Tree.stories.tsx +4 -4
  215. package/src/components/List/TreeDropIndicator.tsx +6 -6
  216. package/src/components/List/Treegrid.stories.tsx +3 -3
  217. package/src/components/List/Treegrid.tsx +10 -15
  218. package/src/components/Main/Main.stories.tsx +6 -95
  219. package/src/components/Main/Main.tsx +61 -211
  220. package/src/components/Menu/ContextMenu.stories.tsx +2 -2
  221. package/src/components/Menu/ContextMenu.tsx +9 -33
  222. package/src/components/Menu/DropdownMenu.stories.tsx +2 -2
  223. package/src/components/Menu/DropdownMenu.tsx +56 -50
  224. package/src/components/Message/Message.stories.tsx +25 -10
  225. package/src/components/Message/Message.tsx +17 -29
  226. package/src/components/Popover/Popover.stories.tsx +4 -4
  227. package/src/components/Popover/Popover.tsx +61 -58
  228. package/src/components/ScrollArea/ScrollArea.stories.tsx +152 -76
  229. package/src/components/ScrollArea/ScrollArea.tsx +72 -116
  230. package/src/components/ScrollArea/index.ts +1 -1
  231. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +41 -22
  232. package/src/components/ScrollContainer/ScrollContainer.tsx +18 -13
  233. package/src/components/Select/Select.stories.tsx +2 -2
  234. package/src/components/Select/Select.tsx +11 -27
  235. package/src/components/Separator/Separator.tsx +5 -8
  236. package/src/components/Skeleton/Skeleton.stories.tsx +52 -0
  237. package/src/components/Skeleton/Skeleton.tsx +26 -0
  238. package/src/components/Skeleton/index.ts +5 -0
  239. package/src/components/Splitter/Splitter.stories.tsx +83 -0
  240. package/src/components/Splitter/Splitter.tsx +126 -0
  241. package/src/components/Splitter/index.ts +5 -0
  242. package/src/components/Status/Status.stories.tsx +21 -17
  243. package/src/components/Status/Status.tsx +2 -2
  244. package/src/components/Tag/Tag.stories.tsx +4 -9
  245. package/src/components/Tag/Tag.tsx +2 -7
  246. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +32 -0
  247. package/src/components/ThemeProvider/ThemeProvider.tsx +4 -3
  248. package/src/components/Toast/Toast.stories.tsx +2 -2
  249. package/src/components/Toast/Toast.tsx +22 -41
  250. package/src/components/Toolbar/Toolbar.stories.tsx +2 -2
  251. package/src/components/Toolbar/Toolbar.tsx +166 -21
  252. package/src/components/Tooltip/Tooltip.stories.tsx +15 -13
  253. package/src/components/Tooltip/Tooltip.tsx +18 -18
  254. package/src/components/index.ts +9 -5
  255. package/src/exemplars/generics.stories.tsx +49 -0
  256. package/src/exemplars/slot.stories.tsx +107 -0
  257. package/src/exemplars/tabster.stories.tsx +127 -0
  258. package/src/exemplars/virtualizer.stories.tsx +137 -0
  259. package/src/hooks/index.ts +1 -0
  260. package/src/index.ts +1 -0
  261. package/src/playground/Controls.stories.tsx +3 -10
  262. package/src/playground/Custom.stories.tsx +11 -11
  263. package/src/playground/Typography.stories.tsx +3 -3
  264. package/src/primitives/Column/Column.stories.tsx +78 -0
  265. package/src/primitives/Column/Column.tsx +133 -0
  266. package/src/primitives/Column/index.ts +5 -0
  267. package/src/primitives/Container/Container.stories.tsx +30 -0
  268. package/src/primitives/Container/Container.tsx +22 -0
  269. package/src/primitives/Container/index.ts +5 -0
  270. package/src/primitives/Flex/Flex.stories.tsx +58 -0
  271. package/src/primitives/Flex/Flex.tsx +29 -0
  272. package/src/primitives/Flex/index.ts +5 -0
  273. package/src/primitives/Grid/Grid.stories.tsx +57 -0
  274. package/src/primitives/Grid/Grid.tsx +35 -0
  275. package/src/primitives/Grid/index.ts +5 -0
  276. package/src/primitives/Panel/Panel.stories.tsx +67 -0
  277. package/src/primitives/Panel/Panel.tsx +119 -0
  278. package/src/primitives/Panel/index.ts +5 -0
  279. package/src/primitives/index.ts +9 -0
  280. package/src/testing/Loading.tsx +26 -0
  281. package/src/testing/decorators/withLayout.tsx +21 -7
  282. package/src/testing/decorators/withLayoutVariants.tsx +18 -21
  283. package/src/testing/decorators/withTheme.tsx +19 -17
  284. package/src/testing/index.ts +2 -0
  285. package/src/translations.ts +19 -0
  286. package/dist/lib/browser/chunk-CEKVHJ27.mjs.map +0 -7
  287. package/dist/lib/node-esm/chunk-2NHEX4AD.mjs.map +0 -7
  288. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +0 -15
  289. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +0 -1
  290. package/dist/types/src/components/AnchoredOverflow/index.d.ts +0 -2
  291. package/dist/types/src/components/AnchoredOverflow/index.d.ts.map +0 -1
  292. package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +0 -59
  293. package/src/components/AnchoredOverflow/index.ts +0 -5
@@ -24,8 +24,8 @@ import React, {
24
24
 
25
25
  import { addEventListener } from '@dxos/async';
26
26
  import { log } from '@dxos/log';
27
- import { useDynamicRef, useForwardedRef, useMediaQuery, useViewportResize } from '@dxos/react-hooks';
28
- import { type MainStyleProps } from '@dxos/ui-theme';
27
+ import { useForwardedRef, useMediaQuery } from '@dxos/react-hooks';
28
+ import { type MainStyleProps, osTranslations } from '@dxos/ui-theme';
29
29
 
30
30
  import { useThemeContext } from '../../hooks';
31
31
  import { type ThemedClassName } from '../../util';
@@ -35,12 +35,12 @@ import { useSwipeToDismiss } from './useSwipeToDismiss';
35
35
 
36
36
  const MAIN_NAME = 'Main';
37
37
  const MAIN_ROOT_NAME = 'MainRoot';
38
+ const MAIN_OVERLAY_NAME = 'MainOverlay';
38
39
  const NAVIGATION_SIDEBAR_NAME = 'NavigationSidebar';
39
40
  const COMPLEMENTARY_SIDEBAR_NAME = 'ComplementarySidebar';
40
- const DRAWER_NAME = 'Drawer';
41
41
 
42
42
  const handleOpenAutoFocus = (event: Event) => {
43
- !document.body.hasAttribute('data-is-keyboard') && event.preventDefault();
43
+ !document.body.hasAttribute('data-w-keyboard') && event.preventDefault();
44
44
  };
45
45
 
46
46
  //
@@ -84,47 +84,12 @@ const useLandmarkMover = (propsOnKeyDown: ComponentPropsWithoutRef<'div'>['onKey
84
84
  };
85
85
  };
86
86
 
87
- // TODO(burdon): Better way to detect software keyboard on mobile?
88
- const isFullscreen = () => {
89
- const isMobile = window.innerHeight <= 1000;
90
- return window.visualViewport && isMobile ? window.visualViewport.height < 700 : false;
91
- };
92
-
93
- /**
94
- * Detects if drawer should be in full mode based on:
95
- * - Device is mobile (width)
96
- * - Visual viewport is constrained (keyboard visible)
97
- */
98
- const useDynamicDrawer = (consumerName: string) => {
99
- const { drawerState, setDrawerState } = useSidebars(consumerName);
100
- const drawersStateRef = useDynamicRef(drawerState);
101
-
102
- const checkViewport = useCallback(() => {
103
- if (window.visualViewport) {
104
- document.documentElement.style.setProperty('--visual-viewport-height', `${window.visualViewport.height}px`);
105
- }
106
-
107
- if (drawersStateRef.current !== 'closed') {
108
- setDrawerState(isFullscreen() ? 'full' : 'expanded');
109
- }
110
- }, [setDrawerState]);
111
-
112
- // Check resize.
113
- useViewportResize(checkViewport, [], 100);
114
-
115
- // Check on window resize (for device orientation changes).
116
- useEffect(() => addEventListener(window, 'resize', checkViewport), [checkViewport]);
117
-
118
- return drawerState;
119
- };
120
-
121
87
  //
122
88
  // Context
123
89
  //
124
90
 
125
91
  // TODO(burdon): Define collapsed state.
126
92
  type SidebarState = 'expanded' | 'collapsed' | 'closed';
127
- type DrawerState = 'expanded' | 'full' | 'closed';
128
93
 
129
94
  type MainContextValue = {
130
95
  resizing: boolean;
@@ -136,10 +101,6 @@ type MainContextValue = {
136
101
  // Complementary
137
102
  complementarySidebarState: SidebarState;
138
103
  setComplementarySidebarState: Dispatch<SetStateAction<SidebarState | undefined>>;
139
-
140
- // Drawer
141
- drawerState: DrawerState;
142
- setDrawerState: Dispatch<SetStateAction<DrawerState | undefined>>;
143
104
  };
144
105
 
145
106
  const [MainProvider, useMainContext] = createContext<MainContextValue>(MAIN_NAME, {
@@ -154,21 +115,15 @@ const [MainProvider, useMainContext] = createContext<MainContextValue>(MAIN_NAME
154
115
  setComplementarySidebarState: (_nextState) => {
155
116
  log.warn('Not initialized');
156
117
  },
157
-
158
- drawerState: 'closed',
159
- setDrawerState: (_nextState) => {
160
- log.warn('Not initialized');
161
- },
162
118
  });
163
119
 
164
120
  const useSidebars = (consumerName: string) => {
165
121
  const {
166
122
  navigationSidebarState,
167
123
  setNavigationSidebarState,
124
+
168
125
  complementarySidebarState,
169
126
  setComplementarySidebarState,
170
- drawerState,
171
- setDrawerState,
172
127
  } = useMainContext(consumerName);
173
128
 
174
129
  return {
@@ -191,15 +146,6 @@ const useSidebars = (consumerName: string) => {
191
146
  openComplementarySidebar: useCallback(() => setComplementarySidebarState('expanded'), []),
192
147
  collapseComplementarySidebar: useCallback(() => setComplementarySidebarState('collapsed'), []),
193
148
  closeComplementarySidebar: useCallback(() => setComplementarySidebarState('closed'), []),
194
-
195
- drawerState,
196
- setDrawerState,
197
- toggleDrawer: useCallback(
198
- () => setDrawerState(drawerState === 'closed' ? (isFullscreen() ? 'full' : 'expanded') : 'closed'),
199
- [drawerState, setDrawerState],
200
- ),
201
- openDrawer: useCallback(() => setDrawerState('expanded'), []),
202
- closeDrawer: useCallback(() => setDrawerState('closed'), []),
203
149
  };
204
150
  };
205
151
 
@@ -215,10 +161,6 @@ type MainRootProps = PropsWithChildren<{
215
161
  complementarySidebarState?: SidebarState;
216
162
  defaultComplementarySidebarState?: SidebarState;
217
163
  onComplementarySidebarStateChange?: (nextState: SidebarState) => void;
218
-
219
- drawerState?: DrawerState;
220
- defaultDrawerState?: DrawerState;
221
- onDrawerStateChange?: (nextState: DrawerState) => void;
222
164
  }>;
223
165
 
224
166
  const MainRoot = ({
@@ -230,10 +172,6 @@ const MainRoot = ({
230
172
  defaultComplementarySidebarState = 'closed',
231
173
  onComplementarySidebarStateChange,
232
174
 
233
- drawerState: propsDrawerState,
234
- defaultDrawerState = 'closed',
235
- onDrawerStateChange,
236
-
237
175
  children,
238
176
  ...props
239
177
  }: MainRootProps) => {
@@ -250,11 +188,6 @@ const MainRoot = ({
250
188
  defaultProp: defaultComplementarySidebarState,
251
189
  onChange: onComplementarySidebarStateChange,
252
190
  });
253
- const [drawerState = 'closed', setDrawerState] = useControllableState<DrawerState>({
254
- prop: propsDrawerState,
255
- defaultProp: defaultDrawerState,
256
- onChange: onDrawerStateChange,
257
- });
258
191
 
259
192
  const [resizing, setResizing] = useState(false);
260
193
  const resizeInterval = useRef<ReturnType<typeof setTimeout> | null>(null);
@@ -282,8 +215,6 @@ const MainRoot = ({
282
215
  setNavigationSidebarState,
283
216
  complementarySidebarState,
284
217
  setComplementarySidebarState,
285
- drawerState,
286
- setDrawerState,
287
218
  }}
288
219
  resizing={resizing}
289
220
  >
@@ -294,6 +225,42 @@ const MainRoot = ({
294
225
 
295
226
  MainRoot.displayName = MAIN_ROOT_NAME;
296
227
 
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
+
297
264
  //
298
265
  // Sidebar
299
266
  //
@@ -303,7 +270,7 @@ type MainSidebarProps = ThemedClassName<ComponentPropsWithRef<typeof DialogConte
303
270
  state?: SidebarState;
304
271
  resizing?: boolean;
305
272
  onStateChange?: (nextState: SidebarState) => void;
306
- side: 'inline-start' | 'inline-end';
273
+ side: 'w-start' | 'w-end';
307
274
  label: Label;
308
275
  };
309
276
 
@@ -314,7 +281,7 @@ const MainSidebar = forwardRef<HTMLDivElement, MainSidebarProps>(
314
281
  ) => {
315
282
  const [isLg] = useMediaQuery('lg');
316
283
  const { tx } = useThemeContext();
317
- const { t } = useTranslation();
284
+ const { t } = useTranslation(osTranslations);
318
285
  const ref = useForwardedRef(forwardedRef);
319
286
  const noopRef = useRef(null);
320
287
 
@@ -346,10 +313,10 @@ const MainSidebar = forwardRef<HTMLDivElement, MainSidebarProps>(
346
313
  {...(!isLg && { forceMount: true, tabIndex: -1, onOpenAutoFocus: onOpenAutoFocus ?? handleOpenAutoFocus })}
347
314
  {...(state === 'closed' && { inert: true })}
348
315
  {...props}
349
- data-side={side === 'inline-end' ? 'ie' : 'is'}
316
+ data-side={side === 'w-end' ? 'ie' : 'is'}
350
317
  data-state={state}
351
318
  data-resizing={resizing ? 'true' : 'false'}
352
- className={tx('main.sidebar', 'main__sidebar', {}, classNames)}
319
+ className={tx('main.sidebar', {}, classNames)}
353
320
  onKeyDownCapture={handleKeyDown}
354
321
  ref={ref}
355
322
  >
@@ -377,7 +344,7 @@ const MainNavigationSidebar = forwardRef<HTMLDivElement, MainNavigationSidebarPr
377
344
  state={navigationSidebarState}
378
345
  onStateChange={setNavigationSidebarState}
379
346
  resizing={resizing}
380
- side='inline-start'
347
+ side='w-start'
381
348
  ref={forwardedRef}
382
349
  />
383
350
  );
@@ -403,7 +370,7 @@ const MainComplementarySidebar = forwardRef<HTMLDivElement, MainComplementarySid
403
370
  state={complementarySidebarState}
404
371
  onStateChange={setComplementarySidebarState}
405
372
  resizing={resizing}
406
- side='inline-end'
373
+ side='w-end'
407
374
  ref={forwardedRef}
408
375
  />
409
376
  );
@@ -411,86 +378,6 @@ const MainComplementarySidebar = forwardRef<HTMLDivElement, MainComplementarySid
411
378
 
412
379
  MainComplementarySidebar.displayName = COMPLEMENTARY_SIDEBAR_NAME;
413
380
 
414
- //
415
- // Drawer
416
- //
417
-
418
- type MainDrawerProps = ThemedClassName<ComponentPropsWithRef<typeof DialogContent>> & {
419
- swipeToDismiss?: boolean;
420
- state?: DrawerState;
421
- resizing?: boolean;
422
- onStateChange?: (nextState: DrawerState) => void;
423
- label: Label;
424
- };
425
-
426
- const MainDrawer = forwardRef<HTMLDivElement, MainDrawerProps>(
427
- (
428
- { classNames, children, swipeToDismiss, onOpenAutoFocus, state, resizing, onStateChange, label, ...props },
429
- forwardedRef,
430
- ) => {
431
- const [isLg] = useMediaQuery('lg');
432
- const { tx } = useThemeContext();
433
- const { t } = useTranslation();
434
- const ref = useForwardedRef(forwardedRef);
435
- const noopRef = useRef(null);
436
-
437
- // TODO(burdon): Implement vertical swipe-to-dismiss for drawer.
438
- useSwipeToDismiss(swipeToDismiss ? ref : noopRef, {
439
- onDismiss: () => onStateChange?.('closed'),
440
- });
441
-
442
- const handleKeyDown = useCallback(
443
- (event: KeyboardEvent<HTMLDivElement>) => {
444
- const focusGroupParent = (event.target as HTMLElement).closest('[data-tabster]');
445
- if (event.key === 'Escape' && focusGroupParent) {
446
- event.preventDefault();
447
- event.stopPropagation();
448
- (focusGroupParent as HTMLElement).focus();
449
- }
450
- props.onKeyDown?.(event);
451
- },
452
- [props.onKeyDown],
453
- );
454
-
455
- return (
456
- <Primitive.div
457
- {...(state === 'closed' && { inert: true })}
458
- {...(!isLg && { forceMount: true, tabIndex: -1, onOpenAutoFocus: onOpenAutoFocus ?? handleOpenAutoFocus })}
459
- {...props}
460
- role='region'
461
- aria-label={toLocalizedString(label, t)}
462
- data-state={state}
463
- data-resizing={resizing ? 'true' : 'false'}
464
- className={tx('main.drawer', 'main__drawer', {}, classNames)}
465
- onKeyDownCapture={handleKeyDown}
466
- ref={ref}
467
- >
468
- {children}
469
- </Primitive.div>
470
- );
471
- },
472
- );
473
-
474
- type MainDrawerRootProps = Omit<MainDrawerProps, 'state' | 'resizing' | 'onStateChange'>;
475
-
476
- const MainDrawerRoot = forwardRef<HTMLDivElement, MainDrawerRootProps>((props, forwardedRef) => {
477
- const { drawerState, setDrawerState, resizing } = useMainContext(DRAWER_NAME);
478
- const mover = useLandmarkMover(props.onKeyDown, '3');
479
-
480
- return (
481
- <MainDrawer
482
- {...mover}
483
- {...props}
484
- resizing={resizing}
485
- state={drawerState}
486
- onStateChange={setDrawerState}
487
- ref={forwardedRef}
488
- />
489
- );
490
- });
491
-
492
- MainDrawerRoot.displayName = DRAWER_NAME;
493
-
494
381
  //
495
382
  // Content
496
383
  //
@@ -504,79 +391,42 @@ type MainContentProps = ThemedClassName<
504
391
 
505
392
  const MainContent = forwardRef<HTMLDivElement, MainContentProps>(
506
393
  ({ asChild, classNames, bounce, handlesFocus, children, role, ...props }: MainContentProps, forwardedRef) => {
507
- const { navigationSidebarState, complementarySidebarState, drawerState } = useMainContext(MAIN_NAME);
394
+ const { navigationSidebarState, complementarySidebarState } = useMainContext(MAIN_NAME);
508
395
  const { tx } = useThemeContext();
509
- const Root = asChild ? Slot : role ? 'div' : 'main';
396
+ const Comp = asChild ? Slot : role ? Primitive.div : 'main';
510
397
  const mover = useLandmarkMover(props.onKeyDown, '1');
511
398
 
512
399
  return (
513
- <Root
514
- role={role}
400
+ <Comp
515
401
  {...(handlesFocus && { ...mover })}
516
402
  {...props}
517
- data-sidebar-inline-start-state={navigationSidebarState}
518
- data-sidebar-inline-end-state={complementarySidebarState}
519
- data-drawer-state={drawerState}
403
+ role={role}
404
+ data-sidebar-left-state={navigationSidebarState}
405
+ data-sidebar-right-state={complementarySidebarState}
520
406
  data-handles-focus={handlesFocus}
521
- className={tx('main.content', 'main', { bounce, handlesFocus }, classNames)}
407
+ className={tx('main.content', { bounce, handlesFocus }, classNames)}
522
408
  ref={forwardedRef}
523
409
  >
524
410
  {children}
525
- </Root>
411
+ </Comp>
526
412
  );
527
413
  },
528
414
  );
529
415
 
530
416
  MainContent.displayName = MAIN_NAME;
531
417
 
532
- type MainOverlayProps = ThemedClassName<Omit<ComponentPropsWithRef<typeof Primitive.div>, 'children' | 'onClick'>>;
533
-
534
- const MainOverlay = forwardRef<HTMLDivElement, MainOverlayProps>(({ classNames, ...props }, forwardedRef) => {
535
- const [isLg] = useMediaQuery('lg');
536
- const { navigationSidebarState, setNavigationSidebarState, complementarySidebarState, setComplementarySidebarState } =
537
- useMainContext(MAIN_NAME);
538
- const { tx } = useThemeContext();
539
- return (
540
- <div
541
- {...props}
542
- onClick={() => {
543
- setNavigationSidebarState('collapsed');
544
- setComplementarySidebarState('collapsed');
545
- }}
546
- className={tx(
547
- 'main.overlay',
548
- 'main__overlay',
549
- {
550
- isLg,
551
- inlineStartSidebarOpen: navigationSidebarState,
552
- inlineEndSidebarOpen: complementarySidebarState,
553
- },
554
- classNames,
555
- )}
556
- data-state={navigationSidebarState === 'expanded' || complementarySidebarState === 'expanded' ? 'open' : 'closed'}
557
- aria-hidden='true'
558
- ref={forwardedRef}
559
- />
560
- );
561
- });
418
+ //
419
+ // Main
420
+ //
562
421
 
563
422
  export const Main = {
564
423
  Root: MainRoot,
565
- Content: MainContent,
566
424
  Overlay: MainOverlay,
425
+ Content: MainContent,
567
426
  NavigationSidebar: MainNavigationSidebar,
568
427
  ComplementarySidebar: MainComplementarySidebar,
569
- Drawer: MainDrawerRoot,
570
428
  };
571
429
 
572
- export { useMainContext, useSidebars, useLandmarkMover, useDynamicDrawer };
430
+ export { useMainContext, useSidebars, useLandmarkMover };
573
431
 
574
- export type {
575
- MainRootProps,
576
- MainContentProps,
577
- MainOverlayProps,
578
- MainNavigationSidebarProps,
579
- MainDrawerRootProps,
580
- SidebarState,
581
- DrawerState,
582
- };
432
+ export type { MainRootProps, MainOverlayProps, MainContentProps, MainNavigationSidebarProps, SidebarState };
@@ -92,10 +92,10 @@ const DefaultStory = () => {
92
92
  };
93
93
 
94
94
  const meta = {
95
- title: 'ui/react-ui-core/ContextMenu',
95
+ title: 'ui/react-ui-core/components/ContextMenu',
96
96
  component: ContextMenu.Root as any,
97
97
  render: DefaultStory,
98
- decorators: [withTheme],
98
+ decorators: [withTheme()],
99
99
  } satisfies Meta<typeof DefaultStory>;
100
100
 
101
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
  );
@@ -92,10 +92,10 @@ const DefaultStory = () => {
92
92
  };
93
93
 
94
94
  const meta = {
95
- title: 'ui/react-ui-core/DropdownMenu',
95
+ title: 'ui/react-ui-core/components/DropdownMenu',
96
96
  component: DropdownMenu.Root,
97
97
  render: DefaultStory,
98
- decorators: [withTheme],
98
+ decorators: [withTheme()],
99
99
  } satisfies Meta<typeof DefaultStory>;
100
100
 
101
101
  export default meta;