@dxos/react-ui 0.8.4-main.f9ba587 → 0.8.4-main.fcc0d83b33

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