@dxos/react-ui 0.8.4-main.7ace549 → 0.8.4-main.8360d9e660

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 (342) hide show
  1. package/dist/lib/browser/chunk-EJSGYGYH.mjs +774 -0
  2. package/dist/lib/browser/chunk-EJSGYGYH.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +3913 -68
  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 +73 -61
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/chunk-B7MXDDMJ.mjs +776 -0
  9. package/dist/lib/node-esm/chunk-B7MXDDMJ.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +3913 -68
  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 +73 -61
  14. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  15. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  16. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  17. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  18. package/dist/types/src/components/Button/Button.d.ts +3 -3
  19. package/dist/types/src/components/Button/Button.d.ts.map +1 -1
  20. package/dist/types/src/components/Button/IconButton.d.ts +2 -1
  21. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
  22. package/dist/types/src/components/Button/Toggle.d.ts +2 -2
  23. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -1
  24. package/dist/types/src/components/Button/ToggleGroup.d.ts +10 -10
  25. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -1
  26. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +4 -4
  27. package/dist/types/src/components/Card/Card.d.ts +107 -0
  28. package/dist/types/src/components/Card/Card.d.ts.map +1 -0
  29. package/dist/types/src/components/Card/Card.stories.d.ts +21 -0
  30. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -0
  31. package/dist/types/src/components/Card/index.d.ts +2 -0
  32. package/dist/types/src/components/Card/index.d.ts.map +1 -0
  33. package/dist/types/src/components/Clipboard/index.d.ts +10 -1
  34. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  35. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts +1 -1
  36. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  37. package/dist/types/src/components/Dialog/AlertDialog.d.ts +26 -17
  38. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
  39. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -1
  40. package/dist/types/src/components/Dialog/Dialog.d.ts +35 -19
  41. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  42. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +9 -10
  43. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
  44. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
  45. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  46. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts +11 -0
  47. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -0
  48. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts +7 -0
  49. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -0
  50. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +8 -0
  51. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -0
  52. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts +9 -0
  53. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -0
  54. package/dist/types/src/components/ErrorFallback/index.d.ts +5 -0
  55. package/dist/types/src/components/ErrorFallback/index.d.ts.map +1 -0
  56. package/dist/types/src/components/Icon/Icon.d.ts +1 -1
  57. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  58. package/dist/types/src/components/Image/Image.d.ts +14 -0
  59. package/dist/types/src/components/Image/Image.d.ts.map +1 -0
  60. package/dist/types/src/components/Image/Image.stories.d.ts +33 -0
  61. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -0
  62. package/dist/types/src/components/Image/index.d.ts +2 -0
  63. package/dist/types/src/components/Image/index.d.ts.map +1 -0
  64. package/dist/types/src/components/Input/Input.d.ts +7 -7
  65. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  66. package/dist/types/src/components/Input/Input.stories.d.ts +8 -8
  67. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  68. package/dist/types/src/components/List/List.d.ts +1 -1
  69. package/dist/types/src/components/List/List.d.ts.map +1 -1
  70. package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
  71. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
  72. package/dist/types/src/components/Main/Main.d.ts +9 -10
  73. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  74. package/dist/types/src/components/Main/Main.stories.d.ts +0 -3
  75. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  76. package/dist/types/src/components/{Menus → Menu}/ContextMenu.d.ts +6 -6
  77. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -0
  78. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -0
  79. package/dist/types/src/components/{Menus → Menu}/DropdownMenu.d.ts +52 -50
  80. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
  81. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +20 -0
  82. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
  83. package/dist/types/src/components/Menu/index.d.ts.map +1 -0
  84. package/dist/types/src/components/Message/Message.d.ts +1 -1
  85. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  86. package/dist/types/src/components/Message/Message.stories.d.ts +3 -4
  87. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  88. package/dist/types/src/components/Popover/Popover.d.ts +29 -23
  89. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  90. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +23 -26
  91. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  92. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +44 -8
  93. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  94. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +4 -2
  95. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  96. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +8 -2
  97. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
  98. package/dist/types/src/components/Select/Select.d.ts +9 -9
  99. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  100. package/dist/types/src/components/Separator/Separator.d.ts +4 -4
  101. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  102. package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
  103. package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  104. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
  105. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  106. package/dist/types/src/components/Skeleton/index.d.ts +2 -0
  107. package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
  108. package/dist/types/src/components/Splitter/Splitter.d.ts +32 -0
  109. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
  110. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
  111. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
  112. package/dist/types/src/components/Splitter/index.d.ts +2 -0
  113. package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
  114. package/dist/types/src/components/Status/Status.stories.d.ts +4 -2
  115. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  116. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  117. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  118. package/dist/types/src/components/Tag/Tag.stories.d.ts +0 -5
  119. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  120. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +2 -2
  121. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  122. package/dist/types/src/components/{Menus/DropdownMenu.stories.d.ts → ThemeProvider/ThemeProvider.stories.d.ts} +2 -5
  123. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  124. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +1 -8
  125. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  126. package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
  127. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  128. package/dist/types/src/components/Toast/Toast.d.ts +19 -19
  129. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  130. package/dist/types/src/components/Toolbar/Toolbar.d.ts +39 -17
  131. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  132. package/dist/types/src/components/Tooltip/Tooltip.d.ts +9 -9
  133. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  134. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  135. package/dist/types/src/components/index.d.ts +9 -5
  136. package/dist/types/src/components/index.d.ts.map +1 -1
  137. package/dist/types/src/exemplars/generics.stories.d.ts +18 -0
  138. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
  139. package/dist/types/src/exemplars/slot.stories.d.ts +14 -0
  140. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
  141. package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
  142. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
  143. package/dist/types/src/exemplars/virtualizer.stories.d.ts +11 -0
  144. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -0
  145. package/dist/types/src/hooks/index.d.ts +1 -0
  146. package/dist/types/src/hooks/index.d.ts.map +1 -1
  147. package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
  148. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  149. package/dist/types/src/hooks/useElevationContext.d.ts +1 -1
  150. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  151. package/dist/types/src/index.d.ts +2 -1
  152. package/dist/types/src/index.d.ts.map +1 -1
  153. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  154. package/dist/types/src/primitives/Column/Column.d.ts +26 -0
  155. package/dist/types/src/primitives/Column/Column.d.ts.map +1 -0
  156. package/dist/types/src/primitives/Column/Column.stories.d.ts +6 -0
  157. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -0
  158. package/dist/types/src/primitives/Column/index.d.ts +2 -0
  159. package/dist/types/src/primitives/Column/index.d.ts.map +1 -0
  160. package/dist/types/src/primitives/Container/Container.d.ts +8 -0
  161. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
  162. package/dist/types/src/primitives/Container/Container.stories.d.ts +6 -0
  163. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
  164. package/dist/types/src/primitives/Container/index.d.ts +2 -0
  165. package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
  166. package/dist/types/src/primitives/Flex/Flex.d.ts +13 -0
  167. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
  168. package/dist/types/src/primitives/Flex/Flex.stories.d.ts +8 -0
  169. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -0
  170. package/dist/types/src/primitives/Flex/index.d.ts +2 -0
  171. package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
  172. package/dist/types/src/primitives/Grid/Grid.d.ts +15 -0
  173. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -0
  174. package/dist/types/src/primitives/Grid/Grid.stories.d.ts +8 -0
  175. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -0
  176. package/dist/types/src/primitives/Grid/index.d.ts +2 -0
  177. package/dist/types/src/primitives/Grid/index.d.ts.map +1 -0
  178. package/dist/types/src/primitives/Panel/Panel.d.ts +26 -0
  179. package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -0
  180. package/dist/types/src/primitives/Panel/Panel.stories.d.ts +6 -0
  181. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -0
  182. package/dist/types/src/primitives/Panel/index.d.ts +2 -0
  183. package/dist/types/src/primitives/Panel/index.d.ts.map +1 -0
  184. package/dist/types/src/primitives/index.d.ts +6 -0
  185. package/dist/types/src/primitives/index.d.ts.map +1 -0
  186. package/dist/types/src/testing/Loading.d.ts +9 -0
  187. package/dist/types/src/testing/Loading.d.ts.map +1 -0
  188. package/dist/types/src/testing/decorators/withLayout.d.ts +3 -3
  189. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
  190. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +1 -1
  191. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
  192. package/dist/types/src/testing/decorators/withTheme.d.ts +3 -2
  193. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  194. package/dist/types/src/testing/index.d.ts +1 -0
  195. package/dist/types/src/testing/index.d.ts.map +1 -1
  196. package/dist/types/src/translations.d.ts +11 -0
  197. package/dist/types/src/translations.d.ts.map +1 -0
  198. package/dist/types/src/util/index.d.ts +1 -2
  199. package/dist/types/src/util/index.d.ts.map +1 -1
  200. package/dist/types/tsconfig.tsbuildinfo +1 -1
  201. package/package.json +40 -31
  202. package/src/components/Avatars/Avatar.stories.tsx +5 -6
  203. package/src/components/Avatars/Avatar.tsx +6 -13
  204. package/src/components/Avatars/AvatarGroup.stories.tsx +2 -2
  205. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +3 -3
  206. package/src/components/Breadcrumb/Breadcrumb.tsx +11 -37
  207. package/src/components/Button/Button.stories.tsx +3 -3
  208. package/src/components/Button/Button.tsx +9 -15
  209. package/src/components/Button/IconButton.stories.tsx +4 -4
  210. package/src/components/Button/IconButton.tsx +9 -5
  211. package/src/components/Button/Toggle.stories.tsx +2 -2
  212. package/src/components/Button/Toggle.tsx +4 -4
  213. package/src/components/Button/ToggleGroup.stories.tsx +2 -2
  214. package/src/components/Button/ToggleGroup.tsx +12 -16
  215. package/src/components/Card/Card.stories.tsx +151 -0
  216. package/src/components/Card/Card.tsx +390 -0
  217. package/src/components/Card/index.ts +5 -0
  218. package/src/components/Clipboard/CopyButton.tsx +6 -6
  219. package/src/components/DensityProvider/DensityProvider.tsx +1 -1
  220. package/src/components/Dialog/AlertDialog.stories.tsx +15 -15
  221. package/src/components/Dialog/AlertDialog.tsx +137 -54
  222. package/src/components/Dialog/Dialog.stories.tsx +83 -28
  223. package/src/components/Dialog/Dialog.tsx +191 -75
  224. package/src/components/ElevationProvider/ElevationProvider.tsx +1 -1
  225. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +50 -0
  226. package/src/components/ErrorFallback/ErrorFallback.tsx +70 -0
  227. package/src/components/ErrorFallback/ErrorStack.tsx +80 -0
  228. package/src/components/ErrorFallback/ThrowError.tsx +37 -0
  229. package/src/components/ErrorFallback/index.ts +9 -0
  230. package/src/components/Icon/Icon.stories.tsx +3 -3
  231. package/src/components/Icon/Icon.tsx +4 -3
  232. package/src/components/Image/Image.stories.tsx +86 -0
  233. package/src/components/Image/Image.tsx +223 -0
  234. package/src/components/Image/index.ts +5 -0
  235. package/src/components/Input/Input.stories.tsx +21 -40
  236. package/src/components/Input/Input.tsx +36 -72
  237. package/src/components/Link/Link.stories.tsx +2 -2
  238. package/src/components/Link/Link.tsx +2 -2
  239. package/src/components/List/List.stories.tsx +30 -33
  240. package/src/components/List/List.tsx +12 -17
  241. package/src/components/List/ListDropIndicator.tsx +7 -7
  242. package/src/components/List/Tree.stories.tsx +4 -4
  243. package/src/components/List/TreeDropIndicator.tsx +6 -6
  244. package/src/components/List/Treegrid.stories.tsx +3 -3
  245. package/src/components/List/Treegrid.tsx +10 -15
  246. package/src/components/Main/Main.stories.tsx +41 -23
  247. package/src/components/Main/Main.tsx +139 -82
  248. package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +2 -2
  249. package/src/components/{Menus → Menu}/ContextMenu.tsx +9 -33
  250. package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +2 -2
  251. package/src/components/{Menus → Menu}/DropdownMenu.tsx +113 -105
  252. package/src/components/Message/Message.stories.tsx +26 -11
  253. package/src/components/Message/Message.tsx +46 -33
  254. package/src/components/Popover/Popover.stories.tsx +4 -4
  255. package/src/components/Popover/Popover.tsx +96 -91
  256. package/src/components/ScrollArea/ScrollArea.stories.tsx +166 -40
  257. package/src/components/ScrollArea/ScrollArea.tsx +84 -82
  258. package/src/components/ScrollArea/index.ts +1 -1
  259. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +41 -21
  260. package/src/components/ScrollContainer/ScrollContainer.tsx +101 -94
  261. package/src/components/Select/Select.stories.tsx +2 -2
  262. package/src/components/Select/Select.tsx +11 -27
  263. package/src/components/Separator/Separator.tsx +5 -8
  264. package/src/components/Skeleton/Skeleton.stories.tsx +52 -0
  265. package/src/components/Skeleton/Skeleton.tsx +26 -0
  266. package/src/components/Skeleton/index.ts +5 -0
  267. package/src/components/Splitter/Splitter.stories.tsx +83 -0
  268. package/src/components/Splitter/Splitter.tsx +126 -0
  269. package/src/components/Splitter/index.ts +5 -0
  270. package/src/components/Status/Status.stories.tsx +21 -17
  271. package/src/components/Status/Status.tsx +2 -2
  272. package/src/components/Tag/Tag.stories.tsx +6 -11
  273. package/src/components/Tag/Tag.tsx +3 -8
  274. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +32 -0
  275. package/src/components/ThemeProvider/ThemeProvider.tsx +5 -6
  276. package/src/components/ThemeProvider/TranslationsProvider.tsx +1 -16
  277. package/src/components/ThemeProvider/index.ts +3 -3
  278. package/src/components/Toast/Toast.stories.tsx +2 -2
  279. package/src/components/Toast/Toast.tsx +22 -41
  280. package/src/components/Toolbar/Toolbar.stories.tsx +2 -2
  281. package/src/components/Toolbar/Toolbar.tsx +179 -19
  282. package/src/components/Tooltip/Tooltip.stories.tsx +15 -13
  283. package/src/components/Tooltip/Tooltip.tsx +40 -38
  284. package/src/components/index.ts +10 -6
  285. package/src/exemplars/generics.stories.tsx +49 -0
  286. package/src/exemplars/slot.stories.tsx +107 -0
  287. package/src/exemplars/tabster.stories.tsx +127 -0
  288. package/src/exemplars/virtualizer.stories.tsx +137 -0
  289. package/src/hooks/index.ts +1 -0
  290. package/src/hooks/useDensityContext.ts +1 -1
  291. package/src/hooks/useElevationContext.ts +1 -1
  292. package/src/index.ts +2 -1
  293. package/src/playground/Controls.stories.tsx +3 -10
  294. package/src/playground/Custom.stories.tsx +11 -11
  295. package/src/playground/Typography.stories.tsx +3 -3
  296. package/src/primitives/Column/Column.stories.tsx +78 -0
  297. package/src/primitives/Column/Column.tsx +133 -0
  298. package/src/primitives/Column/index.ts +5 -0
  299. package/src/primitives/Container/Container.stories.tsx +30 -0
  300. package/src/primitives/Container/Container.tsx +22 -0
  301. package/src/primitives/Container/index.ts +5 -0
  302. package/src/primitives/Flex/Flex.stories.tsx +58 -0
  303. package/src/primitives/Flex/Flex.tsx +29 -0
  304. package/src/primitives/Flex/index.ts +5 -0
  305. package/src/primitives/Grid/Grid.stories.tsx +57 -0
  306. package/src/primitives/Grid/Grid.tsx +35 -0
  307. package/src/primitives/Grid/index.ts +5 -0
  308. package/src/primitives/Panel/Panel.stories.tsx +67 -0
  309. package/src/primitives/Panel/Panel.tsx +119 -0
  310. package/src/primitives/Panel/index.ts +5 -0
  311. package/src/primitives/index.ts +9 -0
  312. package/src/testing/Loading.tsx +26 -0
  313. package/src/testing/decorators/withLayout.tsx +39 -18
  314. package/src/testing/decorators/withLayoutVariants.tsx +20 -23
  315. package/src/testing/decorators/withTheme.tsx +21 -18
  316. package/src/testing/index.ts +2 -0
  317. package/src/translations.ts +19 -0
  318. package/src/util/index.ts +2 -2
  319. package/dist/lib/browser/chunk-N5GDJTT2.mjs +0 -4707
  320. package/dist/lib/browser/chunk-N5GDJTT2.mjs.map +0 -7
  321. package/dist/lib/node-esm/chunk-SP7VQH72.mjs +0 -4709
  322. package/dist/lib/node-esm/chunk-SP7VQH72.mjs.map +0 -7
  323. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +0 -15
  324. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +0 -1
  325. package/dist/types/src/components/AnchoredOverflow/index.d.ts +0 -2
  326. package/dist/types/src/components/AnchoredOverflow/index.d.ts.map +0 -1
  327. package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
  328. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +0 -1
  329. package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
  330. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
  331. package/dist/types/src/components/Menus/index.d.ts.map +0 -1
  332. package/dist/types/src/util/ThemedClassName.d.ts +0 -5
  333. package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
  334. package/dist/types/src/util/domino.d.ts +0 -18
  335. package/dist/types/src/util/domino.d.ts.map +0 -1
  336. package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +0 -59
  337. package/src/components/AnchoredOverflow/index.ts +0 -5
  338. package/src/util/ThemedClassName.ts +0 -7
  339. package/src/util/domino.ts +0 -53
  340. /package/dist/types/src/components/{Menus → Menu}/ContextMenu.stories.d.ts +0 -0
  341. /package/dist/types/src/components/{Menus → Menu}/index.d.ts +0 -0
  342. /package/src/components/{Menus → Menu}/index.ts +0 -0
@@ -0,0 +1,133 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Primitive } from '@radix-ui/react-primitive';
6
+ import { Slot } from '@radix-ui/react-slot';
7
+ import React, { type CSSProperties, forwardRef } from 'react';
8
+
9
+ import { composableProps } from '@dxos/ui-theme';
10
+ import { type SlottableProps } from '@dxos/ui-types';
11
+
12
+ import { useThemeContext } from '../../hooks';
13
+
14
+ //
15
+ // Root
16
+ //
17
+
18
+ const COLUMN_ROOT_NAME = 'Column.Root';
19
+
20
+ type GutterSize = 'sm' | 'md' | 'lg';
21
+
22
+ const gutterSizes: Record<GutterSize, string> = {
23
+ sm: 'var(--dx-gutter-sm)',
24
+ md: 'var(--dx-gutter-md)',
25
+ lg: 'var(--dx-gutter-lg)',
26
+ };
27
+
28
+ type ColumnRootProps = SlottableProps<HTMLDivElement, { gutter?: GutterSize }>;
29
+
30
+ /**
31
+ * Creates a vertical channel with left/right gutter columns.
32
+ * The `--gutter` CSS variable is set for nested components (Dialog, ScrollArea, Form.Viewport, etc.).
33
+ * Use `gutter='sm'` for compact layouts; `gutter='md'` (default) for whitespace layouts (Dialog); `gutter='lg'` for wider spacing.
34
+ * Direct children must use Column.Row (spans all 3 cols) or Column.Segment (center col only).
35
+ *
36
+ * NOTE: The theme applies a `dx-column` marker class to this element.
37
+ * ScrollArea.Root detects this via `[.dx-column_&]:col-span-full` to span all 3 grid columns,
38
+ * ensuring scroll content extends under the gutters rather than being confined to the center column.
39
+ * The `--gutter` CSS variable is also consumed by ScrollArea's `margin` option to align scrollbar spacing.
40
+ */
41
+ const Root = forwardRef<HTMLDivElement, ColumnRootProps>(
42
+ ({ children, asChild, role, gutter = 'md', ...props }, forwardedRef) => {
43
+ const { className, ...rest } = composableProps(props);
44
+ const Comp = asChild ? Slot : Primitive.div;
45
+ const { tx } = useThemeContext();
46
+ const gutterSize = gutterSizes[gutter];
47
+ return (
48
+ <Comp
49
+ {...rest}
50
+ role={role ?? 'none'}
51
+ style={
52
+ {
53
+ '--gutter': gutterSize,
54
+ gridTemplateColumns: [gutterSize, 'minmax(0,1fr)', gutterSize].join(' '),
55
+ } as CSSProperties
56
+ }
57
+ className={tx('column.root', { gutter }, className)}
58
+ ref={forwardedRef}
59
+ >
60
+ {children}
61
+ </Comp>
62
+ );
63
+ },
64
+ );
65
+
66
+ Root.displayName = COLUMN_ROOT_NAME;
67
+
68
+ //
69
+ // Row
70
+ //
71
+
72
+ const COLUMN_ROW_NAME = 'Column.Row';
73
+
74
+ type ColumnRowProps = SlottableProps<HTMLDivElement>;
75
+
76
+ /**
77
+ * Spans all 3 columns of the parent Column.Root and uses CSS subgrid to inherit their sizing.
78
+ * Children map to: [col-1: icon/slot] [col-2: content] [col-3: icon/action].
79
+ * Must be a direct child of Column.Root.
80
+ */
81
+ const Row = forwardRef<HTMLDivElement, ColumnRowProps>(({ children, asChild, role, ...props }, forwardedRef) => {
82
+ const { className, ...rest } = composableProps(props);
83
+ const Comp = asChild ? Slot : Primitive.div;
84
+ const { tx } = useThemeContext();
85
+ return (
86
+ <Comp {...rest} role={role ?? 'none'} className={tx('column.row', {}, className)} ref={forwardedRef}>
87
+ {children}
88
+ </Comp>
89
+ );
90
+ });
91
+
92
+ Row.displayName = COLUMN_ROW_NAME;
93
+
94
+ //
95
+ // Segment
96
+ //
97
+
98
+ const COLUMN_SEGMENT_NAME = 'Column.Segment';
99
+
100
+ type ColumnSegmentProps = SlottableProps<HTMLDivElement>;
101
+
102
+ /**
103
+ * Occupies only the center column (col-2) of the parent Column.Root grid.
104
+ * Use `asChild` to merge grid positioning onto the child element, eliminating the wrapper div.
105
+ * NOTE: Must not use overflow-hidden here since it will clip input focus rings.
106
+ */
107
+ const Segment = forwardRef<HTMLDivElement, ColumnSegmentProps>(
108
+ ({ children, asChild, role, ...props }, forwardedRef) => {
109
+ const { className, ...rest } = composableProps(props);
110
+ const Comp = asChild ? Slot : Primitive.div;
111
+ const { tx } = useThemeContext();
112
+ // With asChild, merge col-start-2 directly onto the child — no contents wrapper needed.
113
+ return (
114
+ <Comp {...rest} role={role ?? 'none'} className={tx('column.segment', {}, className)} ref={forwardedRef}>
115
+ {asChild ? children : <div className='contents'>{children}</div>}
116
+ </Comp>
117
+ );
118
+ },
119
+ );
120
+
121
+ Segment.displayName = COLUMN_SEGMENT_NAME;
122
+
123
+ //
124
+ // Column
125
+ //
126
+
127
+ export const Column = {
128
+ Root,
129
+ Row,
130
+ Segment,
131
+ };
132
+
133
+ export type { ColumnRootProps, ColumnRowProps, ColumnSegmentProps };
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './Column';
@@ -0,0 +1,30 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React from 'react';
7
+
8
+ import { withLayout, withTheme } from '../../testing';
9
+
10
+ import { Container } from './Container';
11
+
12
+ const DefaultStory = () => (
13
+ <Container asChild>
14
+ <div className='grid place-items-center border border-red-500'>Hello</div>
15
+ </Container>
16
+ );
17
+
18
+ const meta: Meta = {
19
+ title: 'ui/react-ui-core/primitives/Container',
20
+ component: Container,
21
+ render: DefaultStory,
22
+ decorators: [withTheme(), withLayout({ layout: 'column' })],
23
+ parameters: { layout: 'fullscreen' },
24
+ };
25
+
26
+ export default meta;
27
+
28
+ type Story = StoryObj<typeof meta>;
29
+
30
+ export const Default: Story = {};
@@ -0,0 +1,22 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import React, { forwardRef } from 'react';
6
+
7
+ import { composableProps, mx } from '@dxos/ui-theme';
8
+ import { Slot } from '@radix-ui/react-slot';
9
+ import { SlottableProps } from '@dxos/ui-types';
10
+ import { Primitive } from '@radix-ui/react-primitive';
11
+
12
+ export type ContainerProps = SlottableProps<HTMLDivElement>;
13
+
14
+ export const Container = forwardRef<HTMLDivElement, ContainerProps>(({ children, asChild, ...props }, forwardedRef) => {
15
+ const { className, ...rest } = composableProps<HTMLDivElement>(props, { role: 'none' });
16
+ const Comp = asChild ? Slot : Primitive.div;
17
+ return (
18
+ <Comp {...rest} className={mx('dx-container', className)} ref={forwardedRef}>
19
+ {children}
20
+ </Comp>
21
+ );
22
+ });
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ export * from './Container';
@@ -0,0 +1,58 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React from 'react';
7
+
8
+ import { type ChromaticPalette } from '@dxos/ui-types';
9
+
10
+ import { withLayout, withTheme } from '../../testing';
11
+
12
+ import { Flex } from './Flex';
13
+
14
+ const Cell = ({ label, hue }: { label: string; hue: ChromaticPalette }) => (
15
+ <div data-hue={hue} className='flex w-full dx-panel p-2 text-sm font-mono border rounded-sm'>
16
+ {label}
17
+ </div>
18
+ );
19
+
20
+ const RowStory = () => (
21
+ <Flex classNames='gap-2 p-2'>
22
+ <Cell label='A' hue='red' />
23
+ <Cell label='B' hue='green' />
24
+ <Cell label='C' hue='blue' />
25
+ </Flex>
26
+ );
27
+
28
+ const ColumnStory = () => (
29
+ <Flex column classNames='gap-2 p-2'>
30
+ <Cell label='A' hue='red' />
31
+ <Cell label='B' hue='green' />
32
+ <Cell label='C' hue='blue' />
33
+ </Flex>
34
+ );
35
+
36
+ const GrowStory = () => (
37
+ <Flex column grow classNames='gap-2 p-2'>
38
+ <Cell label='Header' hue='yellow' />
39
+ <Flex grow>
40
+ <Cell label='Content (grows)' hue='blue' />
41
+ </Flex>
42
+ <Cell label='Footer' hue='orange' />
43
+ </Flex>
44
+ );
45
+
46
+ const meta: Meta = {
47
+ title: 'ui/react-ui-core/primitives/Flex',
48
+ decorators: [withTheme(), withLayout({ layout: 'column' })],
49
+ parameters: { layout: 'fullscreen' },
50
+ };
51
+
52
+ export default meta;
53
+
54
+ type Story = StoryObj<typeof meta>;
55
+
56
+ export const Row: Story = { render: RowStory };
57
+ export const Column: Story = { render: ColumnStory };
58
+ export const Grow: Story = { render: GrowStory };
@@ -0,0 +1,29 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import React, { forwardRef } from 'react';
6
+
7
+ import { composableProps, mx } from '@dxos/ui-theme';
8
+ import { type ComposableProps } from '@dxos/ui-types';
9
+
10
+ export type FlexProps = ComposableProps<HTMLDivElement> & {
11
+ column?: boolean;
12
+ grow?: boolean;
13
+ };
14
+
15
+ export const Flex = forwardRef<HTMLDivElement, FlexProps>(
16
+ ({ children, role, column, grow, ...props }, forwardedRef) => {
17
+ const { className, ...rest } = composableProps(props);
18
+ return (
19
+ <div
20
+ ref={forwardedRef}
21
+ {...rest}
22
+ role={role ?? 'none'}
23
+ className={mx('flex', column && 'flex-col', grow && 'flex-1 overflow-hidden', className)}
24
+ >
25
+ {children}
26
+ </div>
27
+ );
28
+ },
29
+ );
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ export * from './Flex';
@@ -0,0 +1,57 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React from 'react';
7
+
8
+ import { type ChromaticPalette } from '@dxos/ui-types';
9
+
10
+ import { withLayout, withTheme } from '../../testing';
11
+
12
+ import { Grid } from './Grid';
13
+
14
+ const Cell = ({ label, hue }: { label: string; hue: ChromaticPalette }) => (
15
+ <div data-hue={hue} className='dx-panel p-2 text-sm font-mono border rounded-sm'>
16
+ {label}
17
+ </div>
18
+ );
19
+
20
+ const ColsStory = () => (
21
+ <Grid cols={3} classNames='gap-2 p-2'>
22
+ <Cell label='Row 1' hue='red' />
23
+ <Cell label='Row 2' hue='green' />
24
+ <Cell label='Row 3' hue='blue' />
25
+ </Grid>
26
+ );
27
+
28
+ const RowsStory = () => (
29
+ <Grid rows={3} classNames='gap-2 p-2'>
30
+ <Cell label='Row 1' hue='red' />
31
+ <Cell label='Row 2' hue='green' />
32
+ <Cell label='Row 3' hue='blue' />
33
+ </Grid>
34
+ );
35
+
36
+ const MixedStory = () => (
37
+ <Grid cols={2} rows={2} classNames='gap-2 p-2'>
38
+ <Cell label='A' hue='red' />
39
+ <Cell label='B' hue='green' />
40
+ <Cell label='C' hue='blue' />
41
+ <Cell label='D' hue='yellow' />
42
+ </Grid>
43
+ );
44
+
45
+ const meta: Meta = {
46
+ title: 'ui/react-ui-core/primitives/Grid',
47
+ decorators: [withTheme(), withLayout({ layout: 'column' })],
48
+ parameters: { layout: 'fullscreen' },
49
+ };
50
+
51
+ export default meta;
52
+
53
+ type Story = StoryObj<typeof meta>;
54
+
55
+ export const Cols: Story = { render: ColsStory };
56
+ export const Rows: Story = { render: RowsStory };
57
+ export const Mixed: Story = { render: MixedStory };
@@ -0,0 +1,35 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import React, { forwardRef } from 'react';
6
+
7
+ import { composableProps, mx } from '@dxos/ui-theme';
8
+ import { type ComposableProps } from '@dxos/ui-types';
9
+
10
+ export type GridProps = ComposableProps<HTMLDivElement> & {
11
+ cols?: number;
12
+ rows?: number;
13
+ grow?: boolean;
14
+ };
15
+
16
+ export const Grid = forwardRef<HTMLDivElement, GridProps>(
17
+ ({ children, style, role, cols, rows, grow = true, ...props }, forwardedRef) => {
18
+ const { className, ...rest } = composableProps(props);
19
+ return (
20
+ <div
21
+ ref={forwardedRef}
22
+ {...rest}
23
+ role={role ?? 'none'}
24
+ className={mx('grid overflow-hidden', grow && 'dx-container', className)}
25
+ style={{
26
+ gridTemplateColumns: cols ? `repeat(${cols}, 1fr)` : undefined,
27
+ gridTemplateRows: rows ? `repeat(${rows}, 1fr)` : undefined,
28
+ ...style,
29
+ }}
30
+ >
31
+ {children}
32
+ </div>
33
+ );
34
+ },
35
+ );
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ export * from './Grid';
@@ -0,0 +1,67 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React from 'react';
7
+
8
+ import { Input, ScrollArea, Toolbar } from '../../components';
9
+ import { withLayout, withTheme } from '../../testing';
10
+
11
+ import { Panel } from './Panel';
12
+
13
+ const List = () => {
14
+ return (
15
+ <ScrollArea.Root margin role='list'>
16
+ <ScrollArea.Viewport>
17
+ {Array.from({ length: 100 }).map((_, i) => (
18
+ <div key={i} role='listitem' className='p-1 hover:bg-hover-surface'>
19
+ Item {i}
20
+ </div>
21
+ ))}
22
+ </ScrollArea.Viewport>
23
+ </ScrollArea.Root>
24
+ );
25
+ };
26
+
27
+ const DefaultStory = () => {
28
+ return (
29
+ <Panel.Root className='dx-document'>
30
+ <Panel.Toolbar asChild>
31
+ <Toolbar.Root classNames='gap-2'>
32
+ <Toolbar.IconButton icon='ph--plus--regular' variant='primary' label='Add' />
33
+ <Input.Root>
34
+ <Input.TextInput placeholder='Search' />
35
+ </Input.Root>
36
+ <Toolbar.IconButton icon='ph--dots-three-vertical--regular' iconOnly label='Menu' />
37
+ </Toolbar.Root>
38
+ </Panel.Toolbar>
39
+
40
+ <Panel.Content asChild>
41
+ <List />
42
+ </Panel.Content>
43
+
44
+ <Panel.Statusbar asChild>
45
+ <Toolbar.Root classNames='justify-between'>
46
+ <Toolbar.IconButton variant='ghost' icon='ph--house--regular' iconOnly label='Add' size={4} />
47
+ <Toolbar.IconButton variant='ghost' icon='ph--alarm--regular' iconOnly label='Status' size={4} />
48
+ </Toolbar.Root>
49
+ </Panel.Statusbar>
50
+ </Panel.Root>
51
+ );
52
+ };
53
+
54
+ const meta: Meta = {
55
+ title: 'ui/react-ui-core/primitives/Panel',
56
+ render: DefaultStory,
57
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
58
+ parameters: {
59
+ layout: 'fullscreen',
60
+ },
61
+ };
62
+
63
+ export default meta;
64
+
65
+ type Story = StoryObj<typeof meta>;
66
+
67
+ export const Default: Story = {};
@@ -0,0 +1,119 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { Primitive } from '@radix-ui/react-primitive';
6
+ import { Slot } from '@radix-ui/react-slot';
7
+ import React, { forwardRef } from 'react';
8
+
9
+ import { composableProps } from '@dxos/ui-theme';
10
+ import { type SlottableProps } from '@dxos/ui-types';
11
+
12
+ import { useThemeContext } from '../../hooks';
13
+
14
+ //
15
+ // Root
16
+ //
17
+
18
+ const GRID_TEMPLATE_ROWS = 'auto 1fr auto';
19
+ const GRID_TEMPLATE_AREAS = '"toolbar" "content" "statusbar"';
20
+
21
+ type RootProps = SlottableProps<HTMLDivElement>;
22
+
23
+ const Root = forwardRef<HTMLDivElement, RootProps>(({ children, asChild, role, style, ...props }, forwardedRef) => {
24
+ const { className, ...rest } = composableProps(props);
25
+ const Comp = asChild ? Slot : Primitive.div;
26
+ const { tx } = useThemeContext();
27
+ return (
28
+ <Comp
29
+ {...rest}
30
+ role={role ?? 'none'}
31
+ style={{
32
+ gridTemplateRows: GRID_TEMPLATE_ROWS,
33
+ gridTemplateAreas: GRID_TEMPLATE_AREAS,
34
+ ...style,
35
+ }}
36
+ className={tx('panel.root', {}, className)}
37
+ ref={forwardedRef}
38
+ >
39
+ {children}
40
+ </Comp>
41
+ );
42
+ });
43
+
44
+ Root.displayName = 'Panel.Root';
45
+
46
+ //
47
+ // Toolbar
48
+ //
49
+
50
+ type ToolbarProps = SlottableProps<HTMLDivElement>;
51
+
52
+ const Toolbar = forwardRef<HTMLDivElement, ToolbarProps>(({ children, asChild, ...props }, forwardedRef) => {
53
+ const { className, ...rest } = composableProps(props);
54
+ const Comp = asChild ? Slot : Primitive.div;
55
+ const { tx } = useThemeContext();
56
+ return (
57
+ <Comp {...rest} data-slot='toolbar' className={tx('panel.toolbar', {}, className)} ref={forwardedRef}>
58
+ {children}
59
+ </Comp>
60
+ );
61
+ });
62
+
63
+ Toolbar.displayName = 'Panel.Toolbar';
64
+
65
+ //
66
+ // Content
67
+ //
68
+
69
+ type ContentProps = SlottableProps<HTMLDivElement>;
70
+
71
+ const Content = forwardRef<HTMLDivElement, ContentProps>(({ children, asChild, ...props }, forwardedRef) => {
72
+ const { className, ...rest } = composableProps(props);
73
+ const Comp = asChild ? Slot : Primitive.div;
74
+ const { tx } = useThemeContext();
75
+ return (
76
+ <Comp {...rest} data-slot='content' className={tx('panel.content', {}, className)} ref={forwardedRef}>
77
+ {children}
78
+ </Comp>
79
+ );
80
+ });
81
+
82
+ Content.displayName = 'Panel.Content';
83
+
84
+ //
85
+ // Statusbar
86
+ //
87
+
88
+ type StatusbarProps = SlottableProps<HTMLDivElement>;
89
+
90
+ const Statusbar = forwardRef<HTMLDivElement, StatusbarProps>(({ children, asChild, ...props }, forwardedRef) => {
91
+ const { className, ...rest } = composableProps(props);
92
+ const Comp = asChild ? Slot : Primitive.div;
93
+ const { tx } = useThemeContext();
94
+ return (
95
+ <Comp {...rest} data-slot='statusbar' className={tx('panel.statusbar', {}, className)} ref={forwardedRef}>
96
+ {children}
97
+ </Comp>
98
+ );
99
+ });
100
+
101
+ Statusbar.displayName = 'Panel.Statusbar';
102
+
103
+ //
104
+ // Panel
105
+ //
106
+
107
+ export const Panel = {
108
+ Root,
109
+ Toolbar,
110
+ Content,
111
+ Statusbar,
112
+ };
113
+
114
+ export type {
115
+ RootProps as PanelRootProps,
116
+ ToolbarProps as PanelToolbarProps,
117
+ ContentProps as PanelContentProps,
118
+ StatusbarProps as PanelStatusbarProps,
119
+ };
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ export * from './Panel';
@@ -0,0 +1,9 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ export * from './Column';
6
+ export * from './Container';
7
+ export * from './Flex';
8
+ export * from './Grid';
9
+ export * from './Panel';
@@ -0,0 +1,26 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { mx } from '@dxos/ui-theme';
6
+ import { safeStringify } from '@dxos/util';
7
+ import React, { useEffect, useState } from 'react';
8
+
9
+ export type LoadingProps = { data?: any };
10
+
11
+ /**
12
+ * Storybook loading component.
13
+ */
14
+ export const Loading = ({ data }: LoadingProps) => {
15
+ const [visible, setVisible] = useState(false);
16
+ useEffect(() => {
17
+ const t = setTimeout(() => setVisible(true), 500);
18
+ return () => clearTimeout(t);
19
+ }, []);
20
+ return (
21
+ <div className={mx('flex flex-col opacity-0 transition delay-1000 duration-1000', visible && 'opacity-100')}>
22
+ <h2 className='uppercase'>Loading</h2>
23
+ <pre>{safeStringify(data, undefined, 2)}</pre>
24
+ </div>
25
+ );
26
+ };