@dxos/react-ui 0.8.4-main.937b3ca → 0.8.4-main.9be5663bfe

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 (340) hide show
  1. package/dist/lib/browser/{chunk-CEKVHJ27.mjs → chunk-OCVRIJCH.mjs} +184 -110
  2. package/dist/lib/browser/chunk-OCVRIJCH.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +3033 -1990
  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 -37
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/{chunk-2NHEX4AD.mjs → chunk-QUD5P3RU.mjs} +184 -110
  9. package/dist/lib/node-esm/chunk-QUD5P3RU.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +3033 -1990
  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 -37
  14. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  15. package/dist/types/src/components/Avatars/Avatar.d.ts +1 -1
  16. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  17. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  18. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  19. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  20. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  21. package/dist/types/src/components/Button/Button.d.ts +2 -2
  22. package/dist/types/src/components/Button/Button.d.ts.map +1 -1
  23. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -1
  24. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
  25. package/dist/types/src/components/Button/IconButton.stories.d.ts +3 -0
  26. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
  27. package/dist/types/src/components/Button/Toggle.d.ts +2 -2
  28. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -1
  29. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -1
  30. package/dist/types/src/components/Button/ToggleGroup.d.ts +6 -6
  31. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -1
  32. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -1
  33. package/dist/types/src/components/Card/Card.d.ts +118 -0
  34. package/dist/types/src/components/Card/Card.d.ts.map +1 -0
  35. package/dist/types/src/components/Card/Card.stories.d.ts +21 -0
  36. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -0
  37. package/dist/types/src/components/Card/index.d.ts +2 -0
  38. package/dist/types/src/components/Card/index.d.ts.map +1 -0
  39. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  40. package/dist/types/src/components/Clipboard/index.d.ts +10 -1
  41. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  42. package/dist/types/src/components/Dialog/AlertDialog.d.ts +37 -19
  43. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
  44. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -1
  45. package/dist/types/src/components/Dialog/Dialog.d.ts +44 -22
  46. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  47. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +6 -8
  48. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
  49. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts +11 -0
  50. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -0
  51. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts +7 -0
  52. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -0
  53. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +19 -0
  54. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -0
  55. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts +9 -0
  56. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -0
  57. package/dist/types/src/components/ErrorFallback/index.d.ts +5 -0
  58. package/dist/types/src/components/ErrorFallback/index.d.ts.map +1 -0
  59. package/dist/types/src/components/Focus/Focus.d.ts +36 -0
  60. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -0
  61. package/dist/types/src/components/Focus/Focus.stories.d.ts +9 -0
  62. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -0
  63. package/dist/types/src/components/Focus/index.d.ts +2 -0
  64. package/dist/types/src/components/Focus/index.d.ts.map +1 -0
  65. package/dist/types/src/components/Icon/Icon.d.ts +3 -0
  66. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  67. package/dist/types/src/components/Icon/Icon.stories.d.ts +11 -3
  68. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -1
  69. package/dist/types/src/components/Image/Image.d.ts +14 -0
  70. package/dist/types/src/components/Image/Image.d.ts.map +1 -0
  71. package/dist/types/src/components/Image/Image.stories.d.ts +33 -0
  72. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -0
  73. package/dist/types/src/components/Image/index.d.ts +2 -0
  74. package/dist/types/src/components/Image/index.d.ts.map +1 -0
  75. package/dist/types/src/components/Input/Input.d.ts +4 -7
  76. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  77. package/dist/types/src/components/Input/Input.stories.d.ts +7 -7
  78. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  79. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  80. package/dist/types/src/components/List/List.d.ts +5 -3
  81. package/dist/types/src/components/List/List.d.ts.map +1 -1
  82. package/dist/types/src/components/List/List.stories.d.ts +3 -1
  83. package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
  84. package/dist/types/src/components/List/Tree.d.ts.map +1 -1
  85. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -1
  86. package/dist/types/src/components/List/Treegrid.d.ts +5 -9
  87. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
  88. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -1
  89. package/dist/types/src/components/Main/Main.d.ts +9 -10
  90. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  91. package/dist/types/src/components/Main/Main.stories.d.ts +0 -3
  92. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  93. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
  94. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -1
  95. package/dist/types/src/components/Menu/DropdownMenu.d.ts +51 -50
  96. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
  97. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +14 -1
  98. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -1
  99. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  100. package/dist/types/src/components/Message/Message.stories.d.ts +4 -5
  101. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  102. package/dist/types/src/components/Popover/Popover.d.ts +32 -23
  103. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  104. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  105. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +26 -28
  106. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  107. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +54 -9
  108. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  109. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +34 -13
  110. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  111. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +9 -5
  112. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
  113. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  114. package/dist/types/src/components/Select/Select.stories.d.ts +2 -2
  115. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  116. package/dist/types/src/components/Separator/Separator.d.ts +3 -3
  117. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  118. package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
  119. package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  120. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
  121. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  122. package/dist/types/src/components/Skeleton/index.d.ts +2 -0
  123. package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
  124. package/dist/types/src/components/Splitter/Splitter.d.ts +34 -0
  125. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
  126. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
  127. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
  128. package/dist/types/src/components/Splitter/index.d.ts +2 -0
  129. package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
  130. package/dist/types/src/components/Status/Status.d.ts +3 -4
  131. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  132. package/dist/types/src/components/Status/Status.stories.d.ts +4 -2
  133. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  134. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  135. package/dist/types/src/components/Tag/Tag.stories.d.ts +0 -5
  136. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  137. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +2 -1
  138. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  139. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts +12 -0
  140. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  141. package/dist/types/src/components/Toast/Toast.d.ts +15 -15
  142. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  143. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  144. package/dist/types/src/components/Toolbar/Toolbar.d.ts +30 -12
  145. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  146. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  147. package/dist/types/src/components/Tooltip/Tooltip.d.ts +9 -9
  148. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  149. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +2 -2
  150. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  151. package/dist/types/src/components/index.d.ts +9 -4
  152. package/dist/types/src/components/index.d.ts.map +1 -1
  153. package/dist/types/src/exemplars/generics.stories.d.ts +19 -0
  154. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
  155. package/dist/types/src/exemplars/slot.stories.d.ts +15 -0
  156. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
  157. package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
  158. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
  159. package/dist/types/src/exemplars/virtualizer.stories.d.ts +11 -0
  160. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -0
  161. package/dist/types/src/hooks/index.d.ts +1 -0
  162. package/dist/types/src/hooks/index.d.ts.map +1 -1
  163. package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
  164. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  165. package/dist/types/src/index.d.ts +1 -0
  166. package/dist/types/src/index.d.ts.map +1 -1
  167. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  168. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  169. package/dist/types/src/primitives/Column/Column.d.ts +35 -0
  170. package/dist/types/src/primitives/Column/Column.d.ts.map +1 -0
  171. package/dist/types/src/primitives/Column/Column.stories.d.ts +25 -0
  172. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -0
  173. package/dist/types/src/primitives/Column/index.d.ts +2 -0
  174. package/dist/types/src/primitives/Column/index.d.ts.map +1 -0
  175. package/dist/types/src/primitives/Container/Container.d.ts +7 -0
  176. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
  177. package/dist/types/src/primitives/Container/Container.stories.d.ts +6 -0
  178. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
  179. package/dist/types/src/primitives/Container/index.d.ts +2 -0
  180. package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
  181. package/dist/types/src/primitives/Flex/Flex.d.ts +11 -0
  182. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
  183. package/dist/types/src/primitives/Flex/Flex.stories.d.ts +8 -0
  184. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -0
  185. package/dist/types/src/primitives/Flex/index.d.ts +2 -0
  186. package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
  187. package/dist/types/src/primitives/Grid/Grid.d.ts +10 -0
  188. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -0
  189. package/dist/types/src/primitives/Grid/Grid.stories.d.ts +8 -0
  190. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -0
  191. package/dist/types/src/primitives/Grid/index.d.ts +2 -0
  192. package/dist/types/src/primitives/Grid/index.d.ts.map +1 -0
  193. package/dist/types/src/primitives/Panel/Panel.d.ts +35 -0
  194. package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -0
  195. package/dist/types/src/primitives/Panel/Panel.stories.d.ts +6 -0
  196. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -0
  197. package/dist/types/src/primitives/Panel/index.d.ts +2 -0
  198. package/dist/types/src/primitives/Panel/index.d.ts.map +1 -0
  199. package/dist/types/src/primitives/index.d.ts +6 -0
  200. package/dist/types/src/primitives/index.d.ts.map +1 -0
  201. package/dist/types/src/testing/Loading.d.ts +9 -0
  202. package/dist/types/src/testing/Loading.d.ts.map +1 -0
  203. package/dist/types/src/testing/decorators/withLayout.d.ts +1 -1
  204. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
  205. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
  206. package/dist/types/src/testing/decorators/withTheme.d.ts +3 -2
  207. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  208. package/dist/types/src/testing/index.d.ts +1 -0
  209. package/dist/types/src/testing/index.d.ts.map +1 -1
  210. package/dist/types/src/translations.d.ts +11 -0
  211. package/dist/types/src/translations.d.ts.map +1 -0
  212. package/dist/types/src/util/usePx.d.ts.map +1 -1
  213. package/dist/types/tsconfig.tsbuildinfo +1 -1
  214. package/package.json +27 -22
  215. package/src/components/Avatars/Avatar.stories.tsx +7 -9
  216. package/src/components/Avatars/Avatar.tsx +6 -14
  217. package/src/components/Avatars/AvatarGroup.stories.tsx +2 -3
  218. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +3 -4
  219. package/src/components/Breadcrumb/Breadcrumb.tsx +11 -37
  220. package/src/components/Button/Button.stories.tsx +3 -4
  221. package/src/components/Button/Button.tsx +11 -25
  222. package/src/components/Button/IconButton.stories.tsx +8 -6
  223. package/src/components/Button/IconButton.tsx +2 -4
  224. package/src/components/Button/Toggle.stories.tsx +2 -3
  225. package/src/components/Button/Toggle.tsx +4 -4
  226. package/src/components/Button/ToggleGroup.stories.tsx +2 -3
  227. package/src/components/Button/ToggleGroup.tsx +12 -16
  228. package/src/components/Card/Card.stories.tsx +151 -0
  229. package/src/components/Card/Card.tsx +492 -0
  230. package/src/components/Card/index.ts +5 -0
  231. package/src/components/Clipboard/CopyButton.tsx +4 -5
  232. package/src/components/Dialog/AlertDialog.stories.tsx +16 -17
  233. package/src/components/Dialog/AlertDialog.tsx +123 -82
  234. package/src/components/Dialog/Dialog.stories.tsx +100 -20
  235. package/src/components/Dialog/Dialog.tsx +113 -87
  236. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +45 -0
  237. package/src/components/ErrorFallback/ErrorFallback.tsx +70 -0
  238. package/src/components/ErrorFallback/ErrorStack.tsx +114 -0
  239. package/src/components/ErrorFallback/ThrowError.tsx +37 -0
  240. package/src/components/ErrorFallback/index.ts +9 -0
  241. package/src/components/Focus/AUDIT.md +43 -0
  242. package/src/components/Focus/Focus.stories.tsx +230 -0
  243. package/src/components/Focus/Focus.tsx +201 -0
  244. package/src/components/Focus/index.ts +5 -0
  245. package/src/components/Icon/Icon.stories.tsx +45 -15
  246. package/src/components/Icon/Icon.tsx +6 -2
  247. package/src/components/Image/Image.stories.tsx +86 -0
  248. package/src/components/Image/Image.tsx +223 -0
  249. package/src/components/Image/index.ts +5 -0
  250. package/src/components/Input/Input.stories.tsx +20 -40
  251. package/src/components/Input/Input.tsx +24 -69
  252. package/src/components/Link/Link.stories.tsx +2 -3
  253. package/src/components/Link/Link.tsx +2 -2
  254. package/src/components/List/List.stories.tsx +15 -23
  255. package/src/components/List/List.tsx +16 -20
  256. package/src/components/List/ListDropIndicator.tsx +7 -7
  257. package/src/components/List/Tree.stories.tsx +5 -6
  258. package/src/components/List/Tree.tsx +0 -1
  259. package/src/components/List/TreeDropIndicator.tsx +6 -6
  260. package/src/components/List/Treegrid.stories.tsx +29 -30
  261. package/src/components/List/Treegrid.tsx +23 -28
  262. package/src/components/Main/Main.stories.tsx +41 -24
  263. package/src/components/Main/Main.tsx +139 -83
  264. package/src/components/Menu/ContextMenu.stories.tsx +2 -3
  265. package/src/components/Menu/ContextMenu.tsx +9 -33
  266. package/src/components/Menu/DropdownMenu.stories.tsx +2 -3
  267. package/src/components/Menu/DropdownMenu.tsx +58 -52
  268. package/src/components/Message/Message.stories.tsx +26 -12
  269. package/src/components/Message/Message.tsx +14 -30
  270. package/src/components/Popover/Popover.stories.tsx +7 -8
  271. package/src/components/Popover/Popover.tsx +62 -59
  272. package/src/components/ScrollArea/ScrollArea.stories.tsx +214 -75
  273. package/src/components/ScrollArea/ScrollArea.tsx +85 -113
  274. package/src/components/ScrollArea/index.ts +1 -1
  275. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +47 -26
  276. package/src/components/ScrollContainer/ScrollContainer.tsx +206 -92
  277. package/src/components/Select/Select.stories.tsx +7 -8
  278. package/src/components/Select/Select.tsx +11 -27
  279. package/src/components/Separator/Separator.tsx +5 -8
  280. package/src/components/Skeleton/Skeleton.stories.tsx +51 -0
  281. package/src/components/Skeleton/Skeleton.tsx +26 -0
  282. package/src/components/Skeleton/index.ts +5 -0
  283. package/src/components/Splitter/Splitter.stories.tsx +83 -0
  284. package/src/components/Splitter/Splitter.tsx +127 -0
  285. package/src/components/Splitter/index.ts +5 -0
  286. package/src/components/Status/Status.stories.tsx +21 -18
  287. package/src/components/Status/Status.tsx +10 -7
  288. package/src/components/Tag/Tag.stories.tsx +4 -10
  289. package/src/components/Tag/Tag.tsx +2 -7
  290. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +31 -0
  291. package/src/components/ThemeProvider/ThemeProvider.tsx +9 -7
  292. package/src/components/Toast/Toast.stories.tsx +2 -3
  293. package/src/components/Toast/Toast.tsx +22 -41
  294. package/src/components/Toolbar/Toolbar.stories.tsx +2 -3
  295. package/src/components/Toolbar/Toolbar.tsx +173 -26
  296. package/src/components/Tooltip/Tooltip.stories.tsx +20 -19
  297. package/src/components/Tooltip/Tooltip.tsx +18 -18
  298. package/src/components/index.ts +10 -5
  299. package/src/exemplars/generics.stories.tsx +41 -0
  300. package/src/exemplars/slot.stories.tsx +117 -0
  301. package/src/exemplars/tabster.stories.tsx +127 -0
  302. package/src/exemplars/virtualizer.stories.tsx +137 -0
  303. package/src/hooks/index.ts +1 -0
  304. package/src/hooks/useDensityContext.ts +2 -2
  305. package/src/index.ts +1 -0
  306. package/src/playground/Controls.stories.tsx +3 -10
  307. package/src/playground/Custom.stories.tsx +15 -18
  308. package/src/playground/Typography.stories.tsx +3 -3
  309. package/src/primitives/Column/AUDIT.md +354 -0
  310. package/src/primitives/Column/Column.stories.tsx +183 -0
  311. package/src/primitives/Column/Column.tsx +169 -0
  312. package/src/primitives/Column/index.ts +5 -0
  313. package/src/primitives/Container/Container.stories.tsx +29 -0
  314. package/src/primitives/Container/Container.tsx +19 -0
  315. package/src/primitives/Container/index.ts +5 -0
  316. package/src/primitives/Flex/Flex.stories.tsx +57 -0
  317. package/src/primitives/Flex/Flex.tsx +27 -0
  318. package/src/primitives/Flex/index.ts +5 -0
  319. package/src/primitives/Grid/Grid.stories.tsx +56 -0
  320. package/src/primitives/Grid/Grid.tsx +30 -0
  321. package/src/primitives/Grid/index.ts +5 -0
  322. package/src/primitives/Panel/Panel.stories.tsx +68 -0
  323. package/src/primitives/Panel/Panel.tsx +120 -0
  324. package/src/primitives/Panel/index.ts +5 -0
  325. package/src/primitives/index.ts +9 -0
  326. package/src/testing/Loading.tsx +47 -0
  327. package/src/testing/decorators/withLayout.tsx +21 -7
  328. package/src/testing/decorators/withLayoutVariants.tsx +18 -21
  329. package/src/testing/decorators/withTheme.tsx +24 -19
  330. package/src/testing/index.ts +2 -0
  331. package/src/translations.ts +19 -0
  332. package/src/util/usePx.ts +1 -0
  333. package/dist/lib/browser/chunk-CEKVHJ27.mjs.map +0 -7
  334. package/dist/lib/node-esm/chunk-2NHEX4AD.mjs.map +0 -7
  335. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +0 -15
  336. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +0 -1
  337. package/dist/types/src/components/AnchoredOverflow/index.d.ts +0 -2
  338. package/dist/types/src/components/AnchoredOverflow/index.d.ts.map +0 -1
  339. package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +0 -59
  340. package/src/components/AnchoredOverflow/index.ts +0 -5
@@ -0,0 +1,151 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React, { useRef } from 'react';
7
+
8
+ import { random } from '@dxos/random';
9
+ import { Icon } from '@dxos/react-ui';
10
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
11
+
12
+ import { Card } from './Card';
13
+
14
+ random.seed(0);
15
+
16
+ type DefaultStoryProps = {
17
+ title: string;
18
+ description?: string;
19
+ image?: string;
20
+ fullWidth?: boolean;
21
+ };
22
+
23
+ const DefaultStory = ({ title, description, image, fullWidth }: DefaultStoryProps) => {
24
+ const handleRef = useRef<HTMLButtonElement>(null);
25
+ console.log(title);
26
+ return (
27
+ <Card.Root fullWidth={fullWidth}>
28
+ <Card.Toolbar>
29
+ <Card.DragHandle ref={handleRef} />
30
+ <Card.Title>{title}</Card.Title>
31
+ <Card.CloseIconButton onClick={() => console.log('close')} />
32
+ </Card.Toolbar>
33
+ <Card.Content>
34
+ <Card.Poster alt='Card.Poster' image={image} />
35
+ <Card.Row icon='ph--dot-outline--regular'>
36
+ <Card.Heading>Card.Heading</Card.Heading>
37
+ </Card.Row>
38
+ <Card.Row icon='ph--dot-outline--regular'>
39
+ <Card.Text>Card.Text (default)</Card.Text>
40
+ </Card.Row>
41
+ <Card.Row icon='ph--dot-outline--regular'>
42
+ <Card.Text variant='description'>
43
+ Card.Text (description)
44
+ <br />
45
+ {description}
46
+ </Card.Text>
47
+ </Card.Row>
48
+ <Card.Row icon='ph--dot-outline--regular'>
49
+ <Card.Heading variant='subtitle'>Card.Heading (subtitle)</Card.Heading>
50
+ </Card.Row>
51
+ <Card.Action label='Card.Action' onClick={() => console.log('action')} />
52
+ <Card.Link label='Card.Link' href='https://dxos.org' />
53
+ </Card.Content>
54
+ </Card.Root>
55
+ );
56
+ };
57
+
58
+ const meta = {
59
+ title: 'ui/react-ui-core/components/Card',
60
+ render: DefaultStory,
61
+ decorators: [withTheme(), withLayout({ layout: 'centered', classNames: 'grid w-[30rem] place-items-center' })],
62
+ } satisfies Meta<typeof DefaultStory>;
63
+
64
+ export default meta;
65
+
66
+ type Story = StoryObj<typeof meta>;
67
+
68
+ const image = random.image.url();
69
+
70
+ export const Default: Story = {
71
+ args: {
72
+ title: random.commerce.productName(),
73
+ description: random.lorem.paragraph(3),
74
+ image,
75
+ },
76
+ };
77
+
78
+ export const FullWidth: Story = {
79
+ args: {
80
+ title: random.commerce.productName(),
81
+ description: random.lorem.paragraph(3),
82
+ image,
83
+ fullWidth: true,
84
+ },
85
+ };
86
+
87
+ export const Simple: Story = {
88
+ args: {
89
+ title: random.commerce.productName(),
90
+ },
91
+ render: ({ title }) => {
92
+ const handleRef = useRef<HTMLButtonElement>(null);
93
+ return (
94
+ <Card.Root>
95
+ <Card.Toolbar>
96
+ <Card.DragHandle ref={handleRef} />
97
+ <Card.Title>{title}</Card.Title>
98
+ <Card.CloseIconButton onClick={() => console.log('close')} />
99
+ </Card.Toolbar>
100
+ </Card.Root>
101
+ );
102
+ },
103
+ };
104
+
105
+ export const Description: Story = {
106
+ args: {
107
+ title: random.commerce.productName(),
108
+ description: random.lorem.paragraph(3),
109
+ },
110
+ render: ({ title, description }) => {
111
+ const handleRef = useRef<HTMLButtonElement>(null);
112
+ return (
113
+ <Card.Root>
114
+ <Card.Toolbar>
115
+ <Card.DragHandle ref={handleRef} />
116
+ <Card.Title>{title}</Card.Title>
117
+ <Card.CloseIconButton onClick={() => console.log('close')} />
118
+ </Card.Toolbar>
119
+ <Card.Content>
120
+ <Card.Row>
121
+ <Card.Text variant='description'>{description}</Card.Text>
122
+ </Card.Row>
123
+ </Card.Content>
124
+ </Card.Root>
125
+ );
126
+ },
127
+ };
128
+
129
+ export const Mock = () => (
130
+ <div className='grid grid-cols-[2rem_1fr_2rem] w-full dx-card-min-width dx-card-max-width border border-separator rounded-xs'>
131
+ <div className='grid grid-cols-subgrid col-span-full'>
132
+ <div role='none' className='grid h-[var(--dx-rail-item)] w-[var(--dx-rail-item)] place-items-center'>
133
+ <Icon icon='ph--dots-six-vertical--regular' />
134
+ </div>
135
+ <div className='p-1 whitespace-normal break-words text-description items-center'>
136
+ This line is very very long and it should wrap.
137
+ </div>
138
+ <div role='none' className='grid h-[var(--dx-rail-item)] w-[var(--dx-rail-item)] place-items-center'>
139
+ <Icon icon='ph--x--regular' />
140
+ </div>
141
+ </div>
142
+ <div className='grid grid-cols-subgrid col-span-3'>
143
+ <div role='none' className='grid h-[var(--dx-rail-item)] w-[var(--dx-rail-item)] place-items-center'>
144
+ <Icon icon='ph--dots-six-vertical--regular' />
145
+ </div>
146
+ <div className='p-1 text-description items-center col-span-2'>
147
+ This line is very very long and it should wrap.
148
+ </div>
149
+ </div>
150
+ </div>
151
+ );
@@ -0,0 +1,492 @@
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 DOMPurify from 'dompurify';
8
+ import React, {
9
+ CSSProperties,
10
+ MouseEventHandler,
11
+ type PropsWithChildren,
12
+ createContext,
13
+ forwardRef,
14
+ useContext,
15
+ useMemo,
16
+ } from 'react';
17
+
18
+ import { composable, composableProps, iconSize, mx, slottable } from '@dxos/ui-theme';
19
+ import { type Density } from '@dxos/ui-types';
20
+
21
+ import { useThemeContext } from '../../hooks';
22
+ import { Column } from '../../primitives';
23
+ import { type ThemedClassName } from '../../util';
24
+ import { Button } from '../Button';
25
+ import { Icon, type IconProps } from '../Icon';
26
+ import { Image } from '../Image';
27
+ import {
28
+ Toolbar,
29
+ ToolbarCloseIconButtonProps,
30
+ ToolbarDragHandleProps,
31
+ type ToolbarMenuItem,
32
+ type ToolbarMenuProps,
33
+ type ToolbarRootProps,
34
+ } from '../Toolbar';
35
+
36
+ //
37
+ // Context
38
+ //
39
+
40
+ const CARD_NAME = 'Card';
41
+
42
+ type CardContextValue = {
43
+ menuItems?: CardMenuItem<any>[];
44
+ };
45
+
46
+ /** @deprecated Use context for menus. */
47
+ const CardContext = createContext<CardContextValue>({});
48
+
49
+ //
50
+ // Root
51
+ //
52
+
53
+ const CARD_ROOT_NAME = 'Card.Root';
54
+
55
+ type CardRootOwnProps = {
56
+ id?: string;
57
+ border?: boolean;
58
+ fullWidth?: boolean;
59
+ density?: Density;
60
+ style?: CSSProperties;
61
+ tabIndex?: number;
62
+ onClick?: MouseEventHandler<HTMLDivElement>;
63
+ 'data-selected'?: boolean;
64
+ 'data-testid'?: string;
65
+ };
66
+
67
+ type CardRootProps = CardRootOwnProps;
68
+
69
+ const CardRoot = slottable<HTMLDivElement, CardRootOwnProps>(
70
+ ({ children, id, asChild, role, border = true, fullWidth, density, ...props }, forwardedRef) => {
71
+ const { className, ...rest } = composableProps(props);
72
+ const Comp = asChild ? Slot : Primitive.div;
73
+ const { tx } = useThemeContext();
74
+
75
+ return (
76
+ <Comp
77
+ {...rest}
78
+ {...(id && { 'data-object-id': id })}
79
+ role={role ?? 'group'}
80
+ className={tx('card.root', { border, fullWidth }, className)}
81
+ ref={forwardedRef}
82
+ >
83
+ <Column.Root gutter={density === 'coarse' ? 'lg' : 'md'}>{children}</Column.Root>
84
+ </Comp>
85
+ );
86
+ },
87
+ );
88
+
89
+ CardRoot.displayName = CARD_ROOT_NAME;
90
+
91
+ //
92
+ // Toolbar
93
+ //
94
+
95
+ const CARD_TOOLBAR_NAME = 'Card.Toolbar';
96
+
97
+ type CardToolbarProps = ToolbarRootProps;
98
+
99
+ const CardToolbar = composable<HTMLDivElement, CardToolbarProps>(({ children, classNames, ...props }, forwardedRef) => {
100
+ const { tx } = useThemeContext();
101
+
102
+ return (
103
+ <Toolbar.Root {...props} style={iconSize(5)} classNames={[tx('card.toolbar', {}), classNames]} ref={forwardedRef}>
104
+ {children}
105
+ </Toolbar.Root>
106
+ );
107
+ });
108
+
109
+ CardToolbar.displayName = CARD_TOOLBAR_NAME;
110
+
111
+ //
112
+ // DragHandle
113
+ //
114
+
115
+ const CARD_DRAG_HANDLE_NAME = 'Card.DragHandle';
116
+
117
+ type CardDragHandleProps = ToolbarDragHandleProps;
118
+
119
+ const CardDragHandle = forwardRef<HTMLButtonElement, CardDragHandleProps>((props, forwardedRef) => {
120
+ return (
121
+ <CardIconBlock padding>
122
+ <Toolbar.DragHandle {...props} ref={forwardedRef} />
123
+ </CardIconBlock>
124
+ );
125
+ });
126
+
127
+ CardDragHandle.displayName = CARD_DRAG_HANDLE_NAME;
128
+
129
+ //
130
+ // CloseIconButton
131
+ //
132
+
133
+ const CARD_CLOSE_ICON_BUTTON_NAME = 'Card.CloseIconButton';
134
+
135
+ type CloseIconButtonProps = ToolbarCloseIconButtonProps;
136
+
137
+ const CloseIconButton = forwardRef<HTMLButtonElement, CloseIconButtonProps>((props, forwardedRef) => {
138
+ return (
139
+ <CardIconBlock padding>
140
+ <Toolbar.CloseIconButton {...props} ref={forwardedRef} />
141
+ </CardIconBlock>
142
+ );
143
+ });
144
+
145
+ CloseIconButton.displayName = CARD_CLOSE_ICON_BUTTON_NAME;
146
+
147
+ //
148
+ // Menu
149
+ //
150
+
151
+ const CARD_MENU_NAME = 'Card.Menu';
152
+
153
+ type CardMenuItem<T extends any | void = void> = ToolbarMenuItem<T>;
154
+
155
+ type CardMenuProps<T extends any | void = void> = ToolbarMenuProps<T>;
156
+
157
+ const CardMenu = <T extends any | void = void>({ context, items, ...props }: CardMenuProps<T>) => {
158
+ const { menuItems } = useContext(CardContext) ?? {};
159
+ const combinedItems = [...(items ?? []), ...((menuItems as CardMenuItem<T>[]) ?? [])];
160
+
161
+ return (
162
+ <CardIconBlock padding>
163
+ <Toolbar.Menu {...props} context={context} items={combinedItems} />
164
+ </CardIconBlock>
165
+ );
166
+ };
167
+
168
+ (CardMenu as any).displayName = CARD_MENU_NAME;
169
+
170
+ //
171
+ // Icon
172
+ //
173
+
174
+ const CARD_ICON_NAME = 'Card.Icon';
175
+
176
+ const CardIcon = (props: IconProps) => {
177
+ return (
178
+ <CardIconBlock>
179
+ <Icon {...props} />
180
+ </CardIconBlock>
181
+ );
182
+ };
183
+
184
+ (CardIcon as any).displayName = CARD_ICON_NAME;
185
+
186
+ //
187
+ // IconBlock
188
+ //
189
+
190
+ const CARD_ICON_BLOCK_NAME = 'Card.IconBlock';
191
+
192
+ const CardIconBlock = forwardRef<HTMLDivElement, ThemedClassName<PropsWithChildren<{ padding?: boolean }>>>(
193
+ ({ classNames, children, padding, ...props }, forwardedRef) => {
194
+ const { tx } = useThemeContext();
195
+
196
+ return (
197
+ <div {...props} role='none' className={tx('card.icon-block', { padding }, classNames)} ref={forwardedRef}>
198
+ {children}
199
+ </div>
200
+ );
201
+ },
202
+ );
203
+
204
+ CardIconBlock.displayName = CARD_ICON_BLOCK_NAME;
205
+
206
+ //
207
+ // Title
208
+ //
209
+
210
+ const CARD_TITLE_NAME = 'Card.Title';
211
+
212
+ const CardTitle = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
213
+ const { tx } = useThemeContext();
214
+ const { className, ...rest } = composableProps(props, { role: 'heading' });
215
+ const Comp = asChild ? Slot : Primitive.div;
216
+
217
+ return (
218
+ <Comp {...rest} className={tx('card.title', {}, className)} ref={forwardedRef}>
219
+ {children}
220
+ </Comp>
221
+ );
222
+ });
223
+
224
+ CardTitle.displayName = CARD_TITLE_NAME;
225
+
226
+ //
227
+ // Content
228
+ //
229
+
230
+ const CARD_CONTENT_NAME = 'Card.Content';
231
+
232
+ const CardContent = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
233
+ const { className, ...rest } = composableProps(props);
234
+ const Comp = asChild ? Slot : Primitive.div;
235
+ const { tx } = useThemeContext();
236
+
237
+ return (
238
+ <Comp {...rest} className={tx('card.content', {}, className)} ref={forwardedRef}>
239
+ {children}
240
+ </Comp>
241
+ );
242
+ });
243
+
244
+ CardContent.displayName = CARD_CONTENT_NAME;
245
+
246
+ //
247
+ // Row
248
+ //
249
+
250
+ const CARD_ROW_NAME = 'Card.Row';
251
+
252
+ type CardRowProps = { icon?: string; fullWidth?: boolean };
253
+
254
+ const CardRow = composable<HTMLDivElement, CardRowProps>(({ children, icon, ...props }, forwardedRef) => {
255
+ const { className, ...rest } = composableProps(props);
256
+ const { tx } = useThemeContext();
257
+
258
+ return (
259
+ <Column.Row {...rest} className={tx('card.row', {}, className)} ref={forwardedRef}>
260
+ {(icon && <CardIcon classNames='text-subdued' icon={icon} size={4} />) || <div />}
261
+ {children}
262
+ </Column.Row>
263
+ );
264
+ });
265
+
266
+ CardRow.displayName = CARD_ROW_NAME;
267
+
268
+ //
269
+ // Section
270
+ //
271
+
272
+ const CARD_SECTION_NAME = 'Card.Section';
273
+
274
+ /**
275
+ * @deprecated Merge with Card.Row fullWidth
276
+ */
277
+ const CardSection = slottable<HTMLDivElement>(({ children, asChild, role, ...props }, forwardedRef) => {
278
+ const { className, ...rest } = composableProps(props);
279
+ const Comp = asChild ? Slot : Primitive.div;
280
+
281
+ return (
282
+ <Comp {...rest} role={role ?? 'none'} className={mx('col-span-full', className)} ref={forwardedRef}>
283
+ {children}
284
+ </Comp>
285
+ );
286
+ });
287
+
288
+ CardSection.displayName = CARD_SECTION_NAME;
289
+
290
+ //
291
+ // Heading
292
+ //
293
+
294
+ const CARD_HEADING_NAME = 'Card.Heading';
295
+
296
+ type CardHeadingProps = { variant?: 'default' | 'subtitle' };
297
+
298
+ /**
299
+ * @deprecated Use typography.
300
+ */
301
+ const CardHeading = slottable<HTMLDivElement, CardHeadingProps>(
302
+ ({ children, asChild, role, variant = 'default', ...props }, forwardedRef) => {
303
+ const { className, ...rest } = composableProps(props);
304
+ const Comp = asChild ? Slot : Primitive.div;
305
+ const { tx } = useThemeContext();
306
+
307
+ return (
308
+ <Comp
309
+ {...rest}
310
+ role={role ?? 'heading'}
311
+ className={tx('card.heading', { variant }, className)}
312
+ ref={forwardedRef}
313
+ >
314
+ {children}
315
+ </Comp>
316
+ );
317
+ },
318
+ );
319
+
320
+ CardHeading.displayName = CARD_HEADING_NAME;
321
+
322
+ //
323
+ // Text
324
+ //
325
+
326
+ const CARD_TEXT_NAME = 'Card.Text';
327
+
328
+ type CardTextProps = { truncate?: boolean; variant?: 'default' | 'description' };
329
+
330
+ const CardText = slottable<HTMLDivElement, CardTextProps>(
331
+ ({ children, asChild, role, truncate, variant = 'default', ...props }, forwardedRef) => {
332
+ const { className, ...rest } = composableProps(props);
333
+ const Comp = asChild ? Slot : Primitive.div;
334
+ const { tx } = useThemeContext();
335
+
336
+ return (
337
+ <Comp {...rest} role={role ?? 'none'} className={tx('card.text', { variant }, className)} ref={forwardedRef}>
338
+ <span className={tx('card.text-span', { variant, truncate })}>{children}</span>
339
+ </Comp>
340
+ );
341
+ },
342
+ );
343
+
344
+ CardText.displayName = CARD_TEXT_NAME;
345
+
346
+ //
347
+ // Html
348
+ //
349
+
350
+ const CARD_HTML_NAME = 'Card.Html';
351
+
352
+ type CardHtmlProps = { html: string; variant?: 'default' | 'description' };
353
+
354
+ /**
355
+ * Renders sanitized HTML content inside a card text slot.
356
+ * Uses DOMPurify to prevent XSS from untrusted markup (e.g. RSS feed content).
357
+ */
358
+ const CardHtml = ({ html, variant = 'default', ...props }: CardHtmlProps & ThemedClassName<object>) => {
359
+ const { tx } = useThemeContext();
360
+ const sanitized = useMemo(() => DOMPurify.sanitize(html), [html]);
361
+
362
+ return (
363
+ <div
364
+ {...props}
365
+ role='none'
366
+ className={tx('card.text', { variant })}
367
+ // eslint-disable-next-line react/no-danger
368
+ dangerouslySetInnerHTML={{ __html: sanitized }}
369
+ />
370
+ );
371
+ };
372
+
373
+ (CardHtml as any).displayName = CARD_HTML_NAME;
374
+
375
+ //
376
+ // Poster
377
+ //
378
+
379
+ const CARD_POSTER_NAME = 'Card.Poster';
380
+
381
+ type CardPosterProps = ThemedClassName<
382
+ {
383
+ alt: string;
384
+ aspect?: 'video' | 'auto';
385
+ } & Partial<{ image: string; icon: string }>
386
+ >;
387
+
388
+ const CardPoster = (props: CardPosterProps) => {
389
+ const { tx } = useThemeContext();
390
+ const aspect = props.aspect === 'auto' ? 'aspect-auto' : 'aspect-video';
391
+
392
+ if (props.image) {
393
+ return (
394
+ <div role='none' className='col-span-full'>
395
+ <Image classNames={[tx('card.poster', {}), aspect, props.classNames]} src={props.image} alt={props.alt} />
396
+ </div>
397
+ );
398
+ }
399
+
400
+ if (props.icon) {
401
+ return (
402
+ <div role='image' className={tx('card.poster-icon', {}, [aspect, props.classNames])} aria-label={props.alt}>
403
+ <Icon icon={props.icon} size={10} />
404
+ </div>
405
+ );
406
+ }
407
+ };
408
+
409
+ (CardPoster as any).displayName = CARD_POSTER_NAME;
410
+
411
+ //
412
+ // Action
413
+ //
414
+
415
+ const CARD_ACTION_NAME = 'Card.Action';
416
+
417
+ type CardActionProps = { icon?: string; label: string; actionIcon?: string; onClick?: () => void };
418
+
419
+ const CardAction = ({ icon, actionIcon = 'ph--arrow-right--regular', label, onClick }: CardActionProps) => {
420
+ const { tx } = useThemeContext();
421
+ return (
422
+ <Button variant='ghost' classNames={tx('card.action', {})} onClick={onClick}>
423
+ {icon ? <CardIcon classNames='text-subdued' icon={icon} size={4} /> : <div />}
424
+ <span className={tx('card.action-label', {}, !actionIcon ? 'col-span-2' : undefined)}>{label}</span>
425
+ {actionIcon && <CardIcon icon={actionIcon} size={4} />}
426
+ </Button>
427
+ );
428
+ };
429
+
430
+ (CardAction as any).displayName = CARD_ACTION_NAME;
431
+
432
+ //
433
+ // Link
434
+ //
435
+
436
+ const CARD_LINK_NAME = 'Card.Link';
437
+
438
+ type CardLinkProps = { label: string; href: string };
439
+
440
+ const CardLink = ({ label, href }: CardLinkProps) => {
441
+ const { tx } = useThemeContext();
442
+ return (
443
+ <a className={tx('card.link', {})} data-variant='ghost' href={href} target='_blank' rel='noreferrer'>
444
+ <CardIcon classNames='text-subdued' icon='ph--link--regular' />
445
+ <span className={tx('card.link-label', {})}>{label}</span>
446
+ <CardIcon classNames='invisible group-hover:visible' icon='ph--arrow-square-out--regular' />
447
+ </a>
448
+ );
449
+ };
450
+
451
+ (CardLink as any).displayName = CARD_LINK_NAME;
452
+
453
+ //
454
+ // Card
455
+ //
456
+
457
+ export const Card = {
458
+ Root: CardRoot,
459
+
460
+ // Toolbar
461
+ Toolbar: CardToolbar,
462
+ ToolbarIconButton: Toolbar.IconButton,
463
+ ToolbarSeparator: Toolbar.Separator,
464
+
465
+ // Toolbar blocks
466
+ IconBlock: CardIconBlock,
467
+ DragHandle: CardDragHandle,
468
+ CloseIconButton: CloseIconButton,
469
+ Menu: CardMenu,
470
+ Icon: CardIcon,
471
+ Title: CardTitle,
472
+
473
+ // Content
474
+ Content: CardContent,
475
+ Row: CardRow,
476
+ Section: CardSection,
477
+ Heading: CardHeading,
478
+ Text: CardText,
479
+ Html: CardHtml,
480
+ Poster: CardPoster,
481
+ Action: CardAction,
482
+ Link: CardLink,
483
+ };
484
+
485
+ export type {
486
+ CardContextValue,
487
+ CardRootProps,
488
+ CardToolbarProps,
489
+ CardDragHandleProps,
490
+ CloseIconButtonProps,
491
+ CardMenuProps,
492
+ };
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ export * from './Card';
@@ -10,7 +10,6 @@ import { Button, type ButtonProps, IconButton } from '../Button';
10
10
  import { Icon, type IconProps } from '../Icon';
11
11
  import { useTranslation } from '../ThemeProvider';
12
12
  import { type TooltipScopedProps, useTooltipContext } from '../Tooltip';
13
-
14
13
  import { useClipboard } from './ClipboardProvider';
15
14
 
16
15
  export type CopyButtonProps = ButtonProps &
@@ -18,7 +17,7 @@ export type CopyButtonProps = ButtonProps &
18
17
  value: string;
19
18
  };
20
19
 
21
- const inactiveLabelStyles = 'invisible bs-px -mbe-px overflow-hidden';
20
+ const inactiveLabelStyles = 'invisible h-px -mb-px overflow-hidden';
22
21
 
23
22
  export const CopyButton = ({ classNames, value, size = 5, ...props }: CopyButtonProps) => {
24
23
  const { t } = useTranslation(osTranslations);
@@ -32,11 +31,11 @@ export const CopyButton = ({ classNames, value, size = 5, ...props }: CopyButton
32
31
  data-testid='copy-invitation'
33
32
  >
34
33
  <div role='none' className={mx('flex gap-1 items-center', isCopied && inactiveLabelStyles)}>
35
- <span className='pli-1'>{t('copy label')}</span>
34
+ <span className='px-1'>{t('copy.label')}</span>
36
35
  <Icon icon='ph--copy--regular' size={size} />
37
36
  </div>
38
37
  <div role='none' className={mx('flex gap-1 items-center', !isCopied && inactiveLabelStyles)}>
39
- <span className='pli-1'>{t('copy success label')}</span>
38
+ <span className='px-1'>{t('copy-success.label')}</span>
40
39
  <Icon icon='ph--check--regular' size={size} />
41
40
  </div>
42
41
  </Button>
@@ -58,7 +57,7 @@ export const CopyButtonIconOnly = ({
58
57
  const { t } = useTranslation(osTranslations);
59
58
  const { textValue, setTextValue } = useClipboard();
60
59
  const isCopied = textValue === value;
61
- const label = isCopied ? t('copy success label') : (props.label ?? t('copy label'));
60
+ const label = isCopied ? t('copy-success.label') : (props.label ?? t('copy.label'));
62
61
  const { onOpen } = useTooltipContext('CopyButton', __scopeTooltip);
63
62
  return (
64
63
  <IconButton