@dxos/react-ui 0.8.4-main.c4373fc → 0.8.4-main.c85a9c8dae

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 (396) hide show
  1. package/dist/lib/browser/chunk-2FKSMWNY.mjs +774 -0
  2. package/dist/lib/browser/chunk-2FKSMWNY.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +3929 -66
  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 +77 -55
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/chunk-ZNBLTSHI.mjs +776 -0
  9. package/dist/lib/node-esm/chunk-ZNBLTSHI.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +3929 -66
  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 +77 -55
  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/{Buttons → Button}/Button.d.ts +1 -1
  19. package/dist/types/src/components/Button/Button.d.ts.map +1 -0
  20. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -0
  21. package/dist/types/src/components/{Buttons → Button}/IconButton.d.ts +2 -2
  22. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -0
  23. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -0
  24. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -0
  25. package/dist/types/src/components/Button/Toggle.stories.d.ts +16 -0
  26. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -0
  27. package/dist/types/src/components/{Buttons → Button}/ToggleGroup.d.ts +4 -4
  28. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -0
  29. package/dist/types/src/components/{Buttons → Button}/ToggleGroup.stories.d.ts +4 -4
  30. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -0
  31. package/dist/types/src/components/Button/index.d.ts.map +1 -0
  32. package/dist/types/src/components/Card/Card.d.ts +121 -0
  33. package/dist/types/src/components/Card/Card.d.ts.map +1 -0
  34. package/dist/types/src/components/Card/Card.stories.d.ts +21 -0
  35. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -0
  36. package/dist/types/src/components/Card/index.d.ts +2 -0
  37. package/dist/types/src/components/Card/index.d.ts.map +1 -0
  38. package/dist/types/src/components/Clipboard/CopyButton.d.ts +1 -1
  39. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  40. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts +1 -1
  41. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  42. package/dist/types/src/components/{Dialogs → Dialog}/AlertDialog.d.ts +12 -3
  43. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -0
  44. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -0
  45. package/dist/types/src/components/Dialog/Dialog.d.ts +47 -0
  46. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -0
  47. package/dist/types/src/components/{Dialogs → Dialog}/Dialog.stories.d.ts +9 -10
  48. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -0
  49. package/dist/types/src/components/Dialog/index.d.ts.map +1 -0
  50. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
  51. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  52. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts +11 -0
  53. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -0
  54. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts +7 -0
  55. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -0
  56. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +8 -0
  57. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -0
  58. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts +9 -0
  59. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -0
  60. package/dist/types/src/components/ErrorFallback/index.d.ts +5 -0
  61. package/dist/types/src/components/ErrorFallback/index.d.ts.map +1 -0
  62. package/dist/types/src/components/Icon/Icon.d.ts +1 -1
  63. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  64. package/dist/types/src/components/Icon/Icon.stories.d.ts +17 -0
  65. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -0
  66. package/dist/types/src/components/Image/Image.d.ts +14 -0
  67. package/dist/types/src/components/Image/Image.d.ts.map +1 -0
  68. package/dist/types/src/components/Image/Image.stories.d.ts +33 -0
  69. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -0
  70. package/dist/types/src/components/Image/index.d.ts +2 -0
  71. package/dist/types/src/components/Image/index.d.ts.map +1 -0
  72. package/dist/types/src/components/Input/Input.d.ts +5 -5
  73. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  74. package/dist/types/src/components/Input/Input.stories.d.ts +8 -8
  75. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  76. package/dist/types/src/components/{Lists → List}/List.d.ts +1 -1
  77. package/dist/types/src/components/List/List.d.ts.map +1 -0
  78. package/dist/types/src/components/List/List.stories.d.ts.map +1 -0
  79. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -0
  80. package/dist/types/src/components/List/Tree.d.ts.map +1 -0
  81. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -0
  82. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -0
  83. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -0
  84. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -0
  85. package/dist/types/src/components/List/index.d.ts.map +1 -0
  86. package/dist/types/src/components/Main/Main.d.ts +17 -18
  87. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  88. package/dist/types/src/components/Main/Main.stories.d.ts +0 -3
  89. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  90. package/dist/types/src/components/{Menus → Menu}/ContextMenu.d.ts +6 -6
  91. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -0
  92. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -0
  93. package/dist/types/src/components/{Menus → Menu}/DropdownMenu.d.ts +3 -4
  94. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
  95. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
  96. package/dist/types/src/components/Menu/index.d.ts.map +1 -0
  97. package/dist/types/src/components/Message/Message.d.ts +1 -1
  98. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  99. package/dist/types/src/components/Message/Message.stories.d.ts +3 -4
  100. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  101. package/dist/types/src/components/Popover/Popover.d.ts +2 -1
  102. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  103. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +25 -26
  104. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  105. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +46 -8
  106. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  107. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +39 -0
  108. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -0
  109. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +24 -0
  110. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -0
  111. package/dist/types/src/components/ScrollContainer/index.d.ts +2 -0
  112. package/dist/types/src/components/ScrollContainer/index.d.ts.map +1 -0
  113. package/dist/types/src/components/Select/Select.d.ts +10 -10
  114. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  115. package/dist/types/src/components/Separator/Separator.d.ts +1 -1
  116. package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
  117. package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  118. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
  119. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  120. package/dist/types/src/components/Skeleton/index.d.ts +2 -0
  121. package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
  122. package/dist/types/src/components/Splitter/Splitter.d.ts +36 -0
  123. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
  124. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
  125. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
  126. package/dist/types/src/components/Splitter/index.d.ts +2 -0
  127. package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
  128. package/dist/types/src/components/Status/Status.stories.d.ts +4 -2
  129. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  130. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  131. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  132. package/dist/types/src/components/Tag/Tag.stories.d.ts +0 -5
  133. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  134. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +2 -2
  135. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  136. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts +12 -0
  137. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  138. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +1 -8
  139. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  140. package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
  141. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  142. package/dist/types/src/components/Toast/Toast.d.ts +4 -4
  143. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  144. package/dist/types/src/components/Toolbar/Toolbar.d.ts +45 -13
  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.map +1 -1
  148. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  149. package/dist/types/src/components/index.d.ts +13 -8
  150. package/dist/types/src/components/index.d.ts.map +1 -1
  151. package/dist/types/src/exemplars/generics.stories.d.ts +18 -0
  152. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
  153. package/dist/types/src/exemplars/slot.stories.d.ts +14 -0
  154. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
  155. package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
  156. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
  157. package/dist/types/src/exemplars/virtualizer.stories.d.ts +11 -0
  158. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -0
  159. package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
  160. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  161. package/dist/types/src/hooks/useElevationContext.d.ts +1 -1
  162. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  163. package/dist/types/src/hooks/useVisualViewport.d.ts +2 -2
  164. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  165. package/dist/types/src/index.d.ts +2 -1
  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 +32 -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 +6 -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/Flex/Flex.d.ts +8 -0
  176. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
  177. package/dist/types/src/primitives/Flex/Flex.stories.d.ts +8 -0
  178. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -0
  179. package/dist/types/src/primitives/Flex/index.d.ts +2 -0
  180. package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
  181. package/dist/types/src/primitives/Grid/Grid.d.ts +9 -0
  182. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -0
  183. package/dist/types/src/primitives/Grid/Grid.stories.d.ts +8 -0
  184. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -0
  185. package/dist/types/src/primitives/Grid/index.d.ts +2 -0
  186. package/dist/types/src/primitives/Grid/index.d.ts.map +1 -0
  187. package/dist/types/src/primitives/Panel/Panel.d.ts +34 -0
  188. package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -0
  189. package/dist/types/src/primitives/Panel/Panel.stories.d.ts +6 -0
  190. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -0
  191. package/dist/types/src/primitives/Panel/index.d.ts +2 -0
  192. package/dist/types/src/primitives/Panel/index.d.ts.map +1 -0
  193. package/dist/types/src/primitives/index.d.ts +5 -0
  194. package/dist/types/src/primitives/index.d.ts.map +1 -0
  195. package/dist/types/src/testing/decorators/index.d.ts +2 -1
  196. package/dist/types/src/testing/decorators/index.d.ts.map +1 -1
  197. package/dist/types/src/testing/decorators/withLayout.d.ts +15 -0
  198. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -0
  199. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +12 -0
  200. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -0
  201. package/dist/types/src/testing/decorators/withTheme.d.ts +3 -2
  202. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  203. package/dist/types/src/translations.d.ts +11 -0
  204. package/dist/types/src/translations.d.ts.map +1 -0
  205. package/dist/types/src/util/index.d.ts +1 -2
  206. package/dist/types/src/util/index.d.ts.map +1 -1
  207. package/dist/types/tsconfig.tsbuildinfo +1 -1
  208. package/package.json +41 -29
  209. package/src/components/Avatars/Avatar.stories.tsx +5 -6
  210. package/src/components/Avatars/Avatar.tsx +6 -13
  211. package/src/components/Avatars/AvatarGroup.stories.tsx +2 -2
  212. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +4 -4
  213. package/src/components/Breadcrumb/Breadcrumb.tsx +11 -37
  214. package/src/components/{Buttons → Button}/Button.stories.tsx +4 -4
  215. package/src/components/{Buttons → Button}/Button.tsx +7 -13
  216. package/src/components/{Buttons → Button}/IconButton.stories.tsx +4 -4
  217. package/src/components/{Buttons → Button}/IconButton.tsx +20 -14
  218. package/src/components/{Buttons → Button}/Toggle.stories.tsx +7 -6
  219. package/src/components/{Buttons → Button}/ToggleGroup.stories.tsx +2 -2
  220. package/src/components/Card/Card.stories.tsx +151 -0
  221. package/src/components/Card/Card.tsx +352 -0
  222. package/src/components/Card/index.ts +5 -0
  223. package/src/components/Clipboard/CopyButton.tsx +7 -7
  224. package/src/components/DensityProvider/DensityProvider.tsx +1 -1
  225. package/src/components/Dialog/AlertDialog.stories.tsx +69 -0
  226. package/src/components/{Dialogs → Dialog}/AlertDialog.tsx +116 -16
  227. package/src/components/Dialog/Dialog.stories.tsx +122 -0
  228. package/src/components/{Dialogs → Dialog}/Dialog.tsx +179 -49
  229. package/src/components/ElevationProvider/ElevationProvider.tsx +1 -1
  230. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +50 -0
  231. package/src/components/ErrorFallback/ErrorFallback.tsx +70 -0
  232. package/src/components/ErrorFallback/ErrorStack.tsx +80 -0
  233. package/src/components/ErrorFallback/ThrowError.tsx +37 -0
  234. package/src/components/ErrorFallback/index.ts +9 -0
  235. package/src/components/Icon/Icon.stories.tsx +113 -0
  236. package/src/components/Icon/Icon.tsx +3 -3
  237. package/src/components/Image/Image.stories.tsx +86 -0
  238. package/src/components/Image/Image.tsx +223 -0
  239. package/src/components/Image/index.ts +5 -0
  240. package/src/components/Input/Input.stories.tsx +21 -40
  241. package/src/components/Input/Input.tsx +32 -68
  242. package/src/components/Link/Link.stories.tsx +2 -2
  243. package/src/components/Link/Link.tsx +2 -2
  244. package/src/components/{Lists → List}/List.stories.tsx +30 -33
  245. package/src/components/{Lists → List}/List.tsx +12 -17
  246. package/src/components/{Lists → List}/ListDropIndicator.tsx +7 -7
  247. package/src/components/{Lists → List}/Tree.stories.tsx +4 -4
  248. package/src/components/{Lists → List}/TreeDropIndicator.tsx +6 -6
  249. package/src/components/{Lists → List}/Treegrid.stories.tsx +3 -3
  250. package/src/components/{Lists → List}/Treegrid.tsx +10 -15
  251. package/src/components/Main/Main.stories.tsx +41 -23
  252. package/src/components/Main/Main.tsx +149 -92
  253. package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +2 -2
  254. package/src/components/{Menus → Menu}/ContextMenu.tsx +9 -33
  255. package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +3 -3
  256. package/src/components/{Menus → Menu}/DropdownMenu.tsx +89 -68
  257. package/src/components/Message/Message.stories.tsx +26 -11
  258. package/src/components/Message/Message.tsx +46 -33
  259. package/src/components/Popover/Popover.stories.tsx +5 -5
  260. package/src/components/Popover/Popover.tsx +78 -56
  261. package/src/components/ScrollArea/ScrollArea.stories.tsx +166 -40
  262. package/src/components/ScrollArea/ScrollArea.tsx +84 -82
  263. package/src/components/ScrollArea/index.ts +1 -1
  264. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +89 -0
  265. package/src/components/ScrollContainer/ScrollContainer.tsx +238 -0
  266. package/src/components/ScrollContainer/index.ts +5 -0
  267. package/src/components/Select/Select.stories.tsx +3 -3
  268. package/src/components/Select/Select.tsx +11 -27
  269. package/src/components/Separator/Separator.tsx +1 -1
  270. package/src/components/Skeleton/Skeleton.stories.tsx +52 -0
  271. package/src/components/Skeleton/Skeleton.tsx +26 -0
  272. package/src/components/Skeleton/index.ts +5 -0
  273. package/src/components/Splitter/Splitter.stories.tsx +83 -0
  274. package/src/components/Splitter/Splitter.tsx +138 -0
  275. package/src/components/Splitter/index.ts +5 -0
  276. package/src/components/Status/Status.stories.tsx +21 -17
  277. package/src/components/Status/Status.tsx +2 -2
  278. package/src/components/Tag/Tag.stories.tsx +6 -11
  279. package/src/components/Tag/Tag.tsx +3 -8
  280. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +32 -0
  281. package/src/components/ThemeProvider/ThemeProvider.tsx +5 -6
  282. package/src/components/ThemeProvider/TranslationsProvider.tsx +1 -16
  283. package/src/components/ThemeProvider/index.ts +3 -3
  284. package/src/components/Toast/Toast.stories.tsx +3 -3
  285. package/src/components/Toast/Toast.tsx +10 -14
  286. package/src/components/Toolbar/Toolbar.stories.tsx +4 -6
  287. package/src/components/Toolbar/Toolbar.tsx +196 -9
  288. package/src/components/Tooltip/Tooltip.stories.tsx +16 -14
  289. package/src/components/Tooltip/Tooltip.tsx +25 -22
  290. package/src/components/index.ts +14 -9
  291. package/src/exemplars/generics.stories.tsx +49 -0
  292. package/src/exemplars/slot.stories.tsx +119 -0
  293. package/src/exemplars/tabster.stories.tsx +127 -0
  294. package/src/exemplars/virtualizer.stories.tsx +137 -0
  295. package/src/hooks/useDensityContext.ts +1 -1
  296. package/src/hooks/useElevationContext.ts +1 -1
  297. package/src/hooks/useSafeArea.ts +2 -2
  298. package/src/hooks/useVisualViewport.ts +3 -3
  299. package/src/index.ts +2 -1
  300. package/src/playground/Controls.stories.tsx +3 -10
  301. package/src/playground/Custom.stories.tsx +8 -10
  302. package/src/playground/Typography.stories.tsx +3 -3
  303. package/src/primitives/Column/Column.stories.tsx +72 -0
  304. package/src/primitives/Column/Column.tsx +156 -0
  305. package/src/primitives/Column/index.ts +5 -0
  306. package/src/primitives/Flex/Flex.stories.tsx +58 -0
  307. package/src/primitives/Flex/Flex.tsx +27 -0
  308. package/src/primitives/Flex/index.ts +5 -0
  309. package/src/primitives/Grid/Grid.stories.tsx +57 -0
  310. package/src/primitives/Grid/Grid.tsx +43 -0
  311. package/src/primitives/Grid/index.ts +5 -0
  312. package/src/primitives/Panel/Panel.stories.tsx +67 -0
  313. package/src/primitives/Panel/Panel.tsx +137 -0
  314. package/src/primitives/Panel/index.ts +5 -0
  315. package/src/primitives/index.ts +8 -0
  316. package/src/testing/decorators/index.ts +2 -1
  317. package/src/testing/decorators/withLayout.tsx +77 -0
  318. package/src/testing/decorators/withLayoutVariants.tsx +48 -0
  319. package/src/testing/decorators/withTheme.tsx +21 -18
  320. package/src/translations.ts +19 -0
  321. package/src/util/index.ts +2 -2
  322. package/dist/lib/browser/chunk-B7HPXBP2.mjs +0 -4514
  323. package/dist/lib/browser/chunk-B7HPXBP2.mjs.map +0 -7
  324. package/dist/lib/node-esm/chunk-6JCSY5Y7.mjs +0 -4516
  325. package/dist/lib/node-esm/chunk-6JCSY5Y7.mjs.map +0 -7
  326. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +0 -15
  327. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +0 -1
  328. package/dist/types/src/components/AnchoredOverflow/index.d.ts +0 -2
  329. package/dist/types/src/components/AnchoredOverflow/index.d.ts.map +0 -1
  330. package/dist/types/src/components/Buttons/Button.d.ts.map +0 -1
  331. package/dist/types/src/components/Buttons/Button.stories.d.ts.map +0 -1
  332. package/dist/types/src/components/Buttons/IconButton.d.ts.map +0 -1
  333. package/dist/types/src/components/Buttons/IconButton.stories.d.ts.map +0 -1
  334. package/dist/types/src/components/Buttons/Toggle.d.ts.map +0 -1
  335. package/dist/types/src/components/Buttons/Toggle.stories.d.ts +0 -13
  336. package/dist/types/src/components/Buttons/Toggle.stories.d.ts.map +0 -1
  337. package/dist/types/src/components/Buttons/ToggleGroup.d.ts.map +0 -1
  338. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +0 -1
  339. package/dist/types/src/components/Buttons/index.d.ts.map +0 -1
  340. package/dist/types/src/components/Dialogs/AlertDialog.d.ts.map +0 -1
  341. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +0 -1
  342. package/dist/types/src/components/Dialogs/Dialog.d.ts +0 -31
  343. package/dist/types/src/components/Dialogs/Dialog.d.ts.map +0 -1
  344. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +0 -1
  345. package/dist/types/src/components/Dialogs/index.d.ts.map +0 -1
  346. package/dist/types/src/components/Lists/List.d.ts.map +0 -1
  347. package/dist/types/src/components/Lists/List.stories.d.ts.map +0 -1
  348. package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +0 -1
  349. package/dist/types/src/components/Lists/Tree.d.ts.map +0 -1
  350. package/dist/types/src/components/Lists/Tree.stories.d.ts.map +0 -1
  351. package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +0 -1
  352. package/dist/types/src/components/Lists/Treegrid.d.ts.map +0 -1
  353. package/dist/types/src/components/Lists/Treegrid.stories.d.ts.map +0 -1
  354. package/dist/types/src/components/Lists/index.d.ts.map +0 -1
  355. package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
  356. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +0 -1
  357. package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
  358. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
  359. package/dist/types/src/components/Menus/index.d.ts.map +0 -1
  360. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts +0 -12
  361. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts.map +0 -1
  362. package/dist/types/src/util/ThemedClassName.d.ts +0 -5
  363. package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
  364. package/dist/types/src/util/domino.d.ts +0 -18
  365. package/dist/types/src/util/domino.d.ts.map +0 -1
  366. package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +0 -59
  367. package/src/components/AnchoredOverflow/index.ts +0 -5
  368. package/src/components/Dialogs/AlertDialog.stories.tsx +0 -69
  369. package/src/components/Dialogs/Dialog.stories.tsx +0 -67
  370. package/src/testing/decorators/withSurfaceVariantsLayout.tsx +0 -51
  371. package/src/util/ThemedClassName.ts +0 -7
  372. package/src/util/domino.ts +0 -51
  373. /package/dist/types/src/components/{Buttons → Button}/Button.stories.d.ts +0 -0
  374. /package/dist/types/src/components/{Buttons → Button}/IconButton.stories.d.ts +0 -0
  375. /package/dist/types/src/components/{Buttons → Button}/Toggle.d.ts +0 -0
  376. /package/dist/types/src/components/{Buttons → Button}/index.d.ts +0 -0
  377. /package/dist/types/src/components/{Dialogs → Dialog}/AlertDialog.stories.d.ts +0 -0
  378. /package/dist/types/src/components/{Dialogs → Dialog}/index.d.ts +0 -0
  379. /package/dist/types/src/components/{Lists → List}/List.stories.d.ts +0 -0
  380. /package/dist/types/src/components/{Lists → List}/ListDropIndicator.d.ts +0 -0
  381. /package/dist/types/src/components/{Lists → List}/Tree.d.ts +0 -0
  382. /package/dist/types/src/components/{Lists → List}/Tree.stories.d.ts +0 -0
  383. /package/dist/types/src/components/{Lists → List}/TreeDropIndicator.d.ts +0 -0
  384. /package/dist/types/src/components/{Lists → List}/Treegrid.d.ts +0 -0
  385. /package/dist/types/src/components/{Lists → List}/Treegrid.stories.d.ts +0 -0
  386. /package/dist/types/src/components/{Lists → List}/index.d.ts +0 -0
  387. /package/dist/types/src/components/{Menus → Menu}/ContextMenu.stories.d.ts +0 -0
  388. /package/dist/types/src/components/{Menus → Menu}/DropdownMenu.stories.d.ts +0 -0
  389. /package/dist/types/src/components/{Menus → Menu}/index.d.ts +0 -0
  390. /package/src/components/{Buttons → Button}/Toggle.tsx +0 -0
  391. /package/src/components/{Buttons → Button}/ToggleGroup.tsx +0 -0
  392. /package/src/components/{Buttons → Button}/index.ts +0 -0
  393. /package/src/components/{Dialogs → Dialog}/index.ts +0 -0
  394. /package/src/components/{Lists → List}/Tree.tsx +0 -0
  395. /package/src/components/{Lists → List}/index.ts +0 -0
  396. /package/src/components/{Menus → Menu}/index.ts +0 -0
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './Image';
@@ -5,10 +5,9 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React from 'react';
7
7
 
8
- import { baseSurface, modalSurface, mx, surfaceShadow } from '@dxos/react-ui-theme';
9
- import { type MessageValence } from '@dxos/react-ui-types';
8
+ import { type MessageValence } from '@dxos/ui-types';
10
9
 
11
- import { withTheme } from '../../testing';
10
+ import { withLayoutVariants, withTheme } from '../../testing';
12
11
 
13
12
  import {
14
13
  type CheckboxProps,
@@ -29,7 +28,7 @@ type VariantMap = {
29
28
 
30
29
  type Variant = { [K in keyof VariantMap]: { type: K } & VariantMap[K] }[keyof VariantMap];
31
30
 
32
- type BaseProps = Partial<{
31
+ type StoryProps = Partial<{
33
32
  kind: keyof VariantMap;
34
33
  label: string;
35
34
  labelVisuallyHidden: boolean;
@@ -39,7 +38,7 @@ type BaseProps = Partial<{
39
38
  validationMessage: string;
40
39
  }>;
41
40
 
42
- const Wrapper = ({
41
+ const DefaultStory = ({
43
42
  kind,
44
43
  label,
45
44
  description,
@@ -48,7 +47,7 @@ const Wrapper = ({
48
47
  validationValence,
49
48
  validationMessage,
50
49
  ...props
51
- }: BaseProps) => {
50
+ }: StoryProps) => {
52
51
  return (
53
52
  <Input.Root {...{ validationValence }}>
54
53
  <Input.Label srOnly={labelVisuallyHidden}>{label}</Input.Label>
@@ -60,48 +59,28 @@ const Wrapper = ({
60
59
  {kind === 'switch' && <Input.Switch {...props} />}
61
60
 
62
61
  <Input.DescriptionAndValidation srOnly={descriptionVisuallyHidden}>
63
- {validationMessage && (
64
- <>
65
- <Input.Validation>{validationMessage}</Input.Validation>{' '}
66
- </>
67
- )}
62
+ {validationMessage && <Input.Validation classNames='block'>{validationMessage}</Input.Validation>}
68
63
  <Input.Description>{description}</Input.Description>
69
64
  </Input.DescriptionAndValidation>
70
65
  </Input.Root>
71
66
  );
72
67
  };
73
68
 
74
- const DefaultStory = (props: BaseProps) => {
75
- return (
76
- <div className='space-b-4'>
77
- <div className={mx(baseSurface, 'p-4 rounded-md')}>
78
- <Wrapper {...props} />
79
- </div>
80
- <div className={mx('bg-cardSurface', 'p-4 rounded-md', surfaceShadow({ elevation: 'positioned' }))}>
81
- <Wrapper {...props} />
82
- </div>
83
- <div className={mx(modalSurface, 'p-4 rounded-md', surfaceShadow({ elevation: 'dialog' }))}>
84
- <Wrapper {...props} />
85
- </div>
86
- </div>
87
- );
88
- };
89
-
90
69
  const meta = {
91
- title: 'ui/react-ui-core/Input',
70
+ title: 'ui/react-ui-core/components/Input',
92
71
  component: Input.Root as any,
93
72
  render: DefaultStory,
94
- decorators: [withTheme],
73
+ decorators: [withTheme(), withLayoutVariants()],
95
74
  } satisfies Meta<typeof DefaultStory>;
96
75
 
97
76
  export default meta;
98
77
 
99
- type Story = StoryObj<BaseProps & Variant>;
78
+ type Story = StoryObj<StoryProps & Variant>;
100
79
 
101
- export const Default: Story = {
80
+ export const DensityCoarse: Story = {
102
81
  args: {
103
82
  kind: 'text',
104
- label: 'Hello',
83
+ label: 'Input value',
105
84
  placeholder: 'This is an input',
106
85
  disabled: false,
107
86
  description: undefined,
@@ -109,13 +88,14 @@ export const Default: Story = {
109
88
  descriptionVisuallyHidden: false,
110
89
  validationMessage: '',
111
90
  validationValence: undefined,
91
+ density: 'coarse',
112
92
  },
113
93
  };
114
94
 
115
95
  export const DensityFine: Story = {
116
96
  args: {
117
97
  kind: 'text',
118
- label: 'This is an Input with a density value of ‘fine’',
98
+ label: 'Input value',
119
99
  placeholder: 'This is a density:fine input',
120
100
  disabled: false,
121
101
  description: undefined,
@@ -130,7 +110,7 @@ export const DensityFine: Story = {
130
110
  export const Subdued: Story = {
131
111
  args: {
132
112
  kind: 'text',
133
- label: 'Hello',
113
+ label: 'Input value',
134
114
  placeholder: 'This is a subdued input',
135
115
  disabled: false,
136
116
  description: undefined,
@@ -160,7 +140,7 @@ export const LabelVisuallyHidden: Story = {
160
140
  },
161
141
  };
162
142
 
163
- export const InputWithDescription: Story = {
143
+ export const WithDescription: Story = {
164
144
  args: {
165
145
  kind: 'text',
166
146
  label: 'Described input',
@@ -169,7 +149,7 @@ export const InputWithDescription: Story = {
169
149
  },
170
150
  };
171
151
 
172
- export const InputWithErrorAndDescription: Story = {
152
+ export const WithErrorAndDescription: Story = {
173
153
  args: {
174
154
  kind: 'text',
175
155
  label: 'Described invalid input',
@@ -180,7 +160,7 @@ export const InputWithErrorAndDescription: Story = {
180
160
  },
181
161
  };
182
162
 
183
- export const InputWithValidationAndDescription: Story = {
163
+ export const WithValidationAndDescription: Story = {
184
164
  args: {
185
165
  kind: 'text',
186
166
  label: 'Described input with validation message',
@@ -206,7 +186,8 @@ export const PinInput: Story = {
206
186
  label: 'This input is a PIN-style input',
207
187
  length: 6,
208
188
  description: 'Type in secret you received',
209
- placeholder: '••••••',
189
+ pattern: '\\d*',
190
+ density: 'coarse',
210
191
  },
211
192
  };
212
193
 
@@ -214,7 +195,7 @@ export const Checkbox: Story = {
214
195
  args: {
215
196
  kind: 'checkbox',
216
197
  label: 'This is a checkbox',
217
- description: 'It’s checked, indeterminate, or unchecked',
198
+ description: 'Checked, indeterminate, or unchecked',
218
199
  size: 5,
219
200
  },
220
201
  };
@@ -223,6 +204,6 @@ export const Switch: Story = {
223
204
  args: {
224
205
  kind: 'switch',
225
206
  label: 'This is a switch',
226
- description: "It's either off... or on.",
207
+ description: 'On or off',
227
208
  },
228
209
  };
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { Root as CheckboxPrimitive, type CheckboxProps as CheckboxPrimitiveProps } from '@radix-ui/react-checkbox';
6
6
  import { useControllableState } from '@radix-ui/react-use-controllable-state';
7
- import React, { type ComponentPropsWithRef, type ForwardRefExoticComponent, forwardRef, useCallback } from 'react';
7
+ import React, { type ComponentPropsWithRef, type ForwardRefExoticComponent, forwardRef } from 'react';
8
8
 
9
9
  import {
10
10
  DescriptionAndValidation as DescriptionAndValidationPrimitive,
@@ -27,8 +27,8 @@ import {
27
27
  type ValidationProps as ValidationPrimitiveProps,
28
28
  useInputContext,
29
29
  } from '@dxos/react-input';
30
- import { mx } from '@dxos/react-ui-theme';
31
- import { type ClassNameValue, type Density, type Elevation, type Size } from '@dxos/react-ui-types';
30
+ import { mx } from '@dxos/ui-theme';
31
+ import { type Density, type Elevation, type Size } from '@dxos/ui-types';
32
32
 
33
33
  import { useDensityContext, useElevationContext, useThemeContext } from '../../hooks';
34
34
  import { type ThemedClassName } from '../../util';
@@ -40,10 +40,10 @@ type InputSharedProps = Partial<{ density: Density; elevation: Elevation; varian
40
40
 
41
41
  type LabelProps = ThemedClassName<LabelPrimitiveProps> & { srOnly?: boolean };
42
42
 
43
- const Label = forwardRef<HTMLLabelElement, LabelProps>(({ srOnly, classNames, children, ...props }, forwardedRef) => {
43
+ const Label = forwardRef<HTMLLabelElement, LabelProps>(({ classNames, children, srOnly, ...props }, forwardedRef) => {
44
44
  const { tx } = useThemeContext();
45
45
  return (
46
- <LabelPrimitive {...props} className={tx('input.label', 'input__label', { srOnly }, classNames)} ref={forwardedRef}>
46
+ <LabelPrimitive {...props} className={tx('input.label', { srOnly }, classNames)} ref={forwardedRef}>
47
47
  {children}
48
48
  </LabelPrimitive>
49
49
  );
@@ -52,14 +52,10 @@ const Label = forwardRef<HTMLLabelElement, LabelProps>(({ srOnly, classNames, ch
52
52
  type DescriptionProps = ThemedClassName<DescriptionPrimitiveProps> & { srOnly?: boolean };
53
53
 
54
54
  const Description = forwardRef<HTMLSpanElement, DescriptionProps>(
55
- ({ srOnly, classNames, children, ...props }, forwardedRef) => {
55
+ ({ classNames, children, srOnly, ...props }, forwardedRef) => {
56
56
  const { tx } = useThemeContext();
57
57
  return (
58
- <DescriptionPrimitive
59
- {...props}
60
- className={tx('input.description', 'input__description', { srOnly }, classNames)}
61
- ref={forwardedRef}
62
- >
58
+ <DescriptionPrimitive {...props} className={tx('input.description', { srOnly }, classNames)} ref={forwardedRef}>
63
59
  {children}
64
60
  </DescriptionPrimitive>
65
61
  );
@@ -69,18 +65,13 @@ const Description = forwardRef<HTMLSpanElement, DescriptionProps>(
69
65
  type ValidationProps = ThemedClassName<ValidationPrimitiveProps> & { srOnly?: boolean };
70
66
 
71
67
  const Validation = forwardRef<HTMLSpanElement, InputScopedProps<ValidationProps>>(
72
- ({ __inputScope, srOnly, classNames, children, ...props }, forwardedRef) => {
68
+ ({ __inputScope, classNames, children, srOnly, ...props }, forwardedRef) => {
73
69
  const { tx } = useThemeContext();
74
70
  const { validationValence } = useInputContext(INPUT_NAME, __inputScope);
75
71
  return (
76
72
  <ValidationPrimitive
77
73
  {...props}
78
- className={tx(
79
- 'input.validation',
80
- `input__validation-message input__validation-message--${validationValence}`,
81
- { srOnly, validationValence },
82
- classNames,
83
- )}
74
+ className={tx('input.validation', { srOnly, validationValence }, classNames)}
84
75
  ref={forwardedRef}
85
76
  >
86
77
  {children}
@@ -92,12 +83,12 @@ const Validation = forwardRef<HTMLSpanElement, InputScopedProps<ValidationProps>
92
83
  type DescriptionAndValidationProps = ThemedClassName<DescriptionAndValidationPrimitiveProps> & { srOnly?: boolean };
93
84
 
94
85
  const DescriptionAndValidation = forwardRef<HTMLParagraphElement, DescriptionAndValidationProps>(
95
- ({ srOnly, classNames, children, ...props }, forwardedRef) => {
86
+ ({ classNames, children, srOnly, ...props }, forwardedRef) => {
96
87
  const { tx } = useThemeContext();
97
88
  return (
98
89
  <DescriptionAndValidationPrimitive
99
90
  {...props}
100
- className={tx('input.descriptionAndValidation', 'input__description-and-validation', { srOnly }, classNames)}
91
+ className={tx('input.descriptionAndValidation', { srOnly }, classNames)}
101
92
  ref={forwardedRef}
102
93
  >
103
94
  {children}
@@ -106,54 +97,23 @@ const DescriptionAndValidation = forwardRef<HTMLParagraphElement, DescriptionAnd
106
97
  },
107
98
  );
108
99
 
109
- type PinInputProps = InputSharedProps &
110
- Omit<PinInputPrimitiveProps, 'segmentClassName' | 'inputClassName'> & {
111
- segmentClassName?: ClassNameValue;
112
- inputClassName?: ClassNameValue;
113
- };
100
+ type PinInputProps = ThemedClassName<InputSharedProps & Omit<PinInputPrimitiveProps, 'className' | 'segmentClassName'>>;
114
101
 
115
102
  const PinInput = forwardRef<HTMLInputElement, PinInputProps>(
116
- (
117
- {
118
- density: propsDensity,
119
- elevation: propsElevation,
120
- segmentClassName: propsSegmentClassName,
121
- inputClassName,
122
- variant,
123
- ...props
124
- },
125
- forwardedRef,
126
- ) => {
103
+ ({ classNames, density: propsDensity, elevation: propsElevation, ...props }, forwardedRef) => {
127
104
  const { hasIosKeyboard } = useThemeContext();
128
105
  const { tx } = useThemeContext();
129
106
  const density = useDensityContext(propsDensity);
130
107
  const elevation = useElevationContext(propsElevation);
131
108
 
132
- const segmentClassName = useCallback(
133
- ({ focused, validationValence }: Parameters<Exclude<PinInputPrimitiveProps['segmentClassName'], undefined>>[0]) =>
134
- tx(
135
- 'input.input',
136
- 'input--pin-segment',
137
- {
138
- variant: 'static',
139
- focused,
140
- disabled: props.disabled,
141
- density,
142
- elevation,
143
- validationValence,
144
- },
145
- propsSegmentClassName,
146
- ),
147
- [tx, props.disabled, elevation, propsElevation, density],
148
- );
149
109
  return (
150
110
  <PinInputPrimitive
151
111
  {...{
152
112
  ...props,
153
- segmentClassName,
154
113
  ...(props.autoFocus && !hasIosKeyboard && { autoFocus: true }),
155
114
  }}
156
- inputClassName={tx('input.inputWithSegments', 'input input--pin', { disabled: props.disabled }, inputClassName)}
115
+ className={tx('input.inputWithSegments', { disabled: props.disabled }, classNames) || ''}
116
+ segmentClassName={tx('input.segment', { disabled: props.disabled, density, elevation }) || ''}
157
117
  ref={forwardedRef}
158
118
  />
159
119
  );
@@ -162,24 +122,30 @@ const PinInput = forwardRef<HTMLInputElement, PinInputProps>(
162
122
 
163
123
  // TODO(burdon): Implement inline icon within button: e.g., https://www.radix-ui.com/themes/playground#text-field
164
124
 
165
- type TextInputProps = InputSharedProps & ThemedClassName<TextInputPrimitiveProps>;
125
+ type AutoFillProps = {
126
+ noAutoFill?: boolean;
127
+ };
128
+
129
+ type TextInputProps = InputSharedProps & ThemedClassName<TextInputPrimitiveProps> & AutoFillProps;
166
130
 
167
131
  const TextInput = forwardRef<HTMLInputElement, InputScopedProps<TextInputProps>>(
168
- ({ __inputScope, classNames, density: propsDensity, elevation: propsElevation, variant, ...props }, forwardedRef) => {
132
+ (
133
+ { __inputScope, classNames, density: propsDensity, elevation: propsElevation, variant, noAutoFill, ...props },
134
+ forwardedRef,
135
+ ) => {
169
136
  const { hasIosKeyboard } = useThemeContext();
170
- const themeContextValue = useThemeContext();
137
+ const { tx } = useThemeContext();
171
138
  const density = useDensityContext(propsDensity);
172
139
  const elevation = useElevationContext(propsElevation);
173
140
  const { validationValence } = useInputContext(INPUT_NAME, __inputScope);
174
141
 
175
- const { tx } = themeContextValue;
176
-
177
142
  return (
178
143
  <TextInputPrimitive
179
144
  {...props}
145
+ // TODO(wittjosiah): Factor out autofill properies.
146
+ {...{ 'data-1p-ignore': noAutoFill }}
180
147
  className={tx(
181
148
  'input.input',
182
- 'input',
183
149
  {
184
150
  variant,
185
151
  disabled: props.disabled,
@@ -210,8 +176,7 @@ const TextArea = forwardRef<HTMLTextAreaElement, InputScopedProps<TextAreaProps>
210
176
  <TextAreaPrimitive
211
177
  {...props}
212
178
  className={tx(
213
- 'input.input',
214
- 'input--text-area',
179
+ 'input.textArea',
215
180
  {
216
181
  variant,
217
182
  disabled: props.disabled,
@@ -219,7 +184,6 @@ const TextArea = forwardRef<HTMLTextAreaElement, InputScopedProps<TextAreaProps>
219
184
  elevation,
220
185
  validationValence,
221
186
  },
222
- '-mbe-labelSpacingBlock',
223
187
  classNames,
224
188
  )}
225
189
  {...(props.autoFocus && !hasIosKeyboard && { autoFocus: true })}
@@ -240,11 +204,11 @@ const Checkbox: ForwardRefExoticComponent<CheckboxProps> = forwardRef<
240
204
  (
241
205
  {
242
206
  __inputScope,
207
+ classNames,
243
208
  checked: propsChecked,
244
209
  defaultChecked: propsDefaultChecked,
245
210
  onCheckedChange: propsOnCheckedChange,
246
211
  size,
247
- classNames,
248
212
  ...props
249
213
  },
250
214
  forwardedRef,
@@ -269,13 +233,13 @@ const Checkbox: ForwardRefExoticComponent<CheckboxProps> = forwardRef<
269
233
  'aria-invalid': 'true' as const,
270
234
  'aria-errormessage': errorMessageId,
271
235
  }),
272
- className: tx('input.checkbox', 'input--checkbox', { size }, 'shrink-0', classNames),
236
+ className: tx('input.checkbox', { size }, 'shrink-0', classNames),
273
237
  }}
274
238
  ref={forwardedRef}
275
239
  >
276
240
  <Icon
277
241
  icon={checked === 'indeterminate' ? 'ph--minus--regular' : 'ph--check--regular'}
278
- classNames={tx('input.checkboxIndicator', 'input--checkbox__indicator', { size, checked })}
242
+ classNames={tx('input.checkboxIndicator', { size, checked })}
279
243
  />
280
244
  </CheckboxPrimitive>
281
245
  );
@@ -290,10 +254,10 @@ const Switch = forwardRef<HTMLInputElement, InputScopedProps<SwitchProps>>(
290
254
  (
291
255
  {
292
256
  __inputScope,
257
+ classNames,
293
258
  checked: propsChecked,
294
259
  defaultChecked: propsDefaultChecked,
295
260
  onCheckedChange: propsOnCheckedChange,
296
- classNames,
297
261
  ...props
298
262
  },
299
263
  forwardedRef,
@@ -9,9 +9,9 @@ import { withTheme } from '../../testing';
9
9
  import { Link } from './Link';
10
10
 
11
11
  const meta = {
12
- title: 'ui/react-ui-core/Link',
12
+ title: 'ui/react-ui-core/components/Link',
13
13
  component: Link,
14
- decorators: [withTheme],
14
+ decorators: [withTheme()],
15
15
  } satisfies Meta<typeof Link>;
16
16
 
17
17
  export default meta;
@@ -18,7 +18,7 @@ export type LinkProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.a
18
18
  export const Link = forwardRef<HTMLAnchorElement, LinkProps>(
19
19
  ({ asChild, variant, classNames, ...props }, forwardedRef) => {
20
20
  const { tx } = useThemeContext();
21
- const Root = asChild ? Slot : Primitive.a;
22
- return <Root {...props} className={tx('link.root', 'link', { variant }, classNames)} ref={forwardedRef} />;
21
+ const Comp = asChild ? Slot : Primitive.a;
22
+ return <Comp {...props} className={tx('link.root', { variant }, classNames)} ref={forwardedRef} />;
23
23
  },
24
24
  );
@@ -7,16 +7,9 @@ import { SortableContext, arrayMove, useSortable, verticalListSortingStrategy }
7
7
  import { CSS } from '@dnd-kit/utilities';
8
8
  import { useArrowNavigationGroup } from '@fluentui/react-tabster';
9
9
  import { type Meta, type StoryObj } from '@storybook/react-vite';
10
- import React, { type ReactNode, useState } from 'react';
10
+ import React, { type ReactNode, useCallback, useState } from 'react';
11
11
 
12
- import {
13
- getSize,
14
- ghostHover,
15
- ghostSelected,
16
- ghostSelectedTrackingInterFromNormal,
17
- mx,
18
- surfaceShadow,
19
- } from '@dxos/react-ui-theme';
12
+ import { getSize, ghostHover, ghostSelected, mx, surfaceShadow } from '@dxos/ui-theme';
20
13
 
21
14
  import { withTheme } from '../../testing';
22
15
  import { Icon } from '../Icon';
@@ -24,9 +17,9 @@ import { Icon } from '../Icon';
24
17
  import { List, ListItem, type ListScopedProps } from './List';
25
18
 
26
19
  const meta = {
27
- title: 'ui/react-ui-core/List',
20
+ title: 'ui/react-ui-core/components/List',
28
21
  component: List,
29
- decorators: [withTheme],
22
+ decorators: [withTheme()],
30
23
  } satisfies Meta<typeof List>;
31
24
 
32
25
  export default meta;
@@ -44,11 +37,11 @@ const UniformListItem = ({ id, text }: { id: string; text: string }) => {
44
37
  style={{ transform: CSS.Transform.toString(transform) }}
45
38
  >
46
39
  <ListItem.Endcap>
47
- <Icon icon='ph--dots-six-vertical--regular' classNames={mx(getSize(5), 'mbs-2.5')} />
40
+ <Icon icon='ph--dots-six-vertical--regular' classNames={mx(getSize(5), 'mt-2.5')} />
48
41
  </ListItem.Endcap>
49
- <ListItem.Heading classNames='grow pbs-2'>{text}</ListItem.Heading>
42
+ <ListItem.Heading classNames='grow pt-2'>{text}</ListItem.Heading>
50
43
  <ListItem.Endcap>
51
- <Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), 'mbs-2.5')} />
44
+ <Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), 'mt-2.5')} />
52
45
  </ListItem.Endcap>
53
46
  </ListItem.Root>
54
47
  );
@@ -63,16 +56,20 @@ export const UniformSizeDraggable: Story = {
63
56
  })),
64
57
  );
65
58
 
66
- const handleDragEnd = (event: DragEndEvent) => {
67
- const { active, over } = event;
68
- if (active.id !== over?.id) {
69
- setItems((items) => {
70
- const oldIndex = items.findIndex((item) => item.id === active.id);
71
- const newIndex = items.findIndex((item) => item.id === over?.id);
72
- return arrayMove(items, oldIndex, newIndex);
73
- });
74
- }
75
- };
59
+ const handleDragEnd = useCallback(
60
+ (event: DragEndEvent) => {
61
+ const { active, over } = event;
62
+ if (active.id !== over?.id) {
63
+ setItems((items) => {
64
+ const oldIndex = items.findIndex((item) => item.id === active.id);
65
+ const newIndex = items.findIndex((item) => item.id === over?.id);
66
+ return arrayMove(items, oldIndex, newIndex);
67
+ });
68
+ }
69
+ },
70
+ [items],
71
+ );
72
+
76
73
  return (
77
74
  <DndContext onDragEnd={handleDragEnd}>
78
75
  <SortableContext items={items.map(({ id }) => id)} strategy={verticalListSortingStrategy}>
@@ -106,13 +103,13 @@ const ManySizesDraggableListItem = ({
106
103
  style={{ transform: CSS.Translate.toString(transform) }}
107
104
  >
108
105
  <ListItem.Endcap>
109
- <Icon icon='ph--dots-six-vertical--regular' classNames={mx(getSize(5), 'mbs-2.5')} />
106
+ <Icon icon='ph--dots-six-vertical--regular' classNames={mx(getSize(5), 'mt-2.5')} />
110
107
  </ListItem.Endcap>
111
- <ListItem.Heading classNames='grow pbs-2' asChild>
108
+ <ListItem.Heading classNames='grow pt-2' asChild>
112
109
  {text}
113
110
  </ListItem.Heading>
114
111
  <ListItem.Endcap>
115
- <Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), 'mbs-2.5')} />
112
+ <Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), 'mt-2.5')} />
116
113
  </ListItem.Endcap>
117
114
  </ListItem.Root>
118
115
  );
@@ -126,9 +123,9 @@ export const ManySizesDraggable: Story = {
126
123
  text: (
127
124
  <p
128
125
  className={mx(
129
- index % 3 === 0 ? 'bs-20' : index % 2 === 0 ? 'bs-12' : 'bs-8',
126
+ index % 3 === 0 ? 'h-20' : index % 2 === 0 ? 'h-12' : 'h-8',
130
127
  surfaceShadow({ elevation: 'positioned' }),
131
- 'mbe-2 p-2 bg-white dark:bg-neutral-800 rounded',
128
+ 'mb-2 p-2 bg-white dark:bg-neutral-800 rounded-sm',
132
129
  )}
133
130
  >{`List item ${index + 1}`}</p>
134
131
  ),
@@ -182,9 +179,9 @@ export const Collapsible: Story = {
182
179
  <ListItem.Root key={id} id={id} collapsible={index !== 2} defaultOpen={index % 2 === 0}>
183
180
  <div role='none' className='grow flex'>
184
181
  {index !== 2 ? <ListItem.OpenTrigger /> : <ListItem.MockOpenTrigger />}
185
- <ListItem.Heading classNames='grow pbs-2'>{text}</ListItem.Heading>
182
+ <ListItem.Heading classNames='grow pt-2'>{text}</ListItem.Heading>
186
183
  <ListItem.Endcap>
187
- <Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), 'mbs-2.5')} />
184
+ <Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), 'mt-2.5')} />
188
185
  </ListItem.Endcap>
189
186
  </div>
190
187
  {index !== 2 && <ListItem.CollapsibleContent>{body}</ListItem.CollapsibleContent>}
@@ -225,11 +222,11 @@ export const SelectableListbox: Story = {
225
222
  key={id}
226
223
  tabIndex={0}
227
224
  selected={selectedId === id}
228
- classNames={mx(ghostHover, ghostSelected, ghostSelectedTrackingInterFromNormal)}
225
+ classNames={mx(ghostHover, ghostSelected)}
229
226
  onClick={() => setSelectedId(id)}
230
227
  onKeyUp={(event) => handleKeyUp(event, id)}
231
228
  >
232
- <ListItem.Heading classNames='flex pis-1 pie-1 items-center grow truncate'>{text}</ListItem.Heading>
229
+ <ListItem.Heading classNames='flex px-1 items-center grow truncate'>{text}</ListItem.Heading>
233
230
  </ListItem.Root>
234
231
  ))}
235
232
  </List>
@@ -2,6 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
+ import { Primitive } from '@radix-ui/react-primitive';
5
6
  import { Slot } from '@radix-ui/react-slot';
6
7
  import React, { type ComponentPropsWithoutRef, type FC, type ForwardRefExoticComponent, forwardRef } from 'react';
7
8
 
@@ -23,7 +24,7 @@ import {
23
24
  useListContext,
24
25
  useListItemContext,
25
26
  } from '@dxos/react-list';
26
- import { type Density } from '@dxos/react-ui-types';
27
+ import { type Density } from '@dxos/ui-types';
27
28
 
28
29
  import { useDensityContext, useThemeContext } from '../../hooks';
29
30
  import { type ThemedClassName } from '../../util';
@@ -40,7 +41,7 @@ const List = forwardRef<HTMLOListElement, ListProps>(({ classNames, children, ..
40
41
 
41
42
  return (
42
43
  <DensityProvider density={density}>
43
- <ListPrimitive {...props} className={tx('list.root', 'list', {}, classNames)} ref={forwardedRef}>
44
+ <ListPrimitive {...props} className={tx('list.root', {}, classNames)} ref={forwardedRef}>
44
45
  {children}
45
46
  </ListPrimitive>
46
47
  </DensityProvider>
@@ -51,18 +52,18 @@ type ListItemEndcapProps = ThemedClassName<ComponentPropsWithoutRef<'div'>> & {
51
52
 
52
53
  const ListItemEndcap = forwardRef<HTMLDivElement, ListItemEndcapProps>(
53
54
  ({ children, classNames, asChild, ...props }, forwardedRef) => {
54
- const Root = asChild ? Slot : 'div';
55
+ const Comp = asChild ? Slot : Primitive.div;
55
56
  const density = useDensityContext();
56
57
  const { tx } = useThemeContext();
57
58
  return (
58
- <Root
59
+ <Comp
59
60
  {...(!asChild && { role: 'none' })}
60
61
  {...props}
61
- className={tx('list.item.endcap', 'list__listItem__endcap', { density }, classNames)}
62
+ className={tx('list.item.endcap', { density }, classNames)}
62
63
  ref={forwardedRef}
63
64
  >
64
65
  {children}
65
- </Root>
66
+ </Comp>
66
67
  );
67
68
  },
68
69
  );
@@ -73,13 +74,7 @@ const MockListItemOpenTrigger = ({
73
74
  }: ThemedClassName<Omit<ComponentPropsWithoutRef<'div'>, 'children'>>) => {
74
75
  const density = useDensityContext();
75
76
  const { tx } = useThemeContext();
76
- return (
77
- <div
78
- role='none'
79
- {...props}
80
- className={tx('list.item.openTrigger', 'list__listItem__openTrigger--mock', { density }, classNames)}
81
- />
82
- );
77
+ return <div role='none' {...props} className={tx('list.item.openTrigger', { density }, classNames)} />;
83
78
  };
84
79
 
85
80
  type ListItemHeadingProps = ThemedClassName<ListPrimitiveItemHeadingProps>;
@@ -91,7 +86,7 @@ const ListItemHeading = forwardRef<HTMLParagraphElement, ListItemHeadingProps>(
91
86
  return (
92
87
  <ListPrimitiveItemHeading
93
88
  {...props}
94
- className={tx('list.item.heading', 'list__listItem__heading', { density }, classNames)}
89
+ className={tx('list.item.heading', { density }, classNames)}
95
90
  ref={forwardedRef}
96
91
  >
97
92
  {children}
@@ -110,14 +105,14 @@ const ListItemOpenTrigger = forwardRef<HTMLButtonElement, ListItemOpenTriggerPro
110
105
  return (
111
106
  <ListPrimitiveItemOpenTrigger
112
107
  {...props}
113
- className={tx('list.item.openTrigger', 'list__listItem__openTrigger', { density }, classNames)}
108
+ className={tx('list.item.openTrigger', { density }, classNames)}
114
109
  ref={forwardedRef}
115
110
  >
116
111
  {children || (
117
112
  <Icon
118
113
  size={3}
119
114
  icon={open ? 'ph--caret-down--bold' : 'ph--caret-right--bold'}
120
- classNames={tx('list.item.openTriggerIcon', 'list__listItem__openTrigger__icon', {})}
115
+ classNames={tx('list.item.openTriggerIcon', {})}
121
116
  />
122
117
  )}
123
118
  </ListPrimitiveItemOpenTrigger>
@@ -134,7 +129,7 @@ const ListItemRoot = forwardRef<HTMLLIElement, ListItemRootProps>(
134
129
  return (
135
130
  <ListPrimitiveItem
136
131
  {...props}
137
- className={tx('list.item.root', 'list__listItem', { density, collapsible: props.collapsible }, classNames)}
132
+ className={tx('list.item.root', { density, collapsible: props.collapsible }, classNames)}
138
133
  ref={forwardedRef}
139
134
  >
140
135
  {children}