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

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