@dxos/react-ui 0.8.4-main.c1de068 → 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 (433) 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 +3931 -61
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing/index.mjs +82 -60
  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 +3931 -61
  11. package/dist/lib/node-esm/index.mjs.map +4 -4
  12. package/dist/lib/node-esm/meta.json +1 -1
  13. package/dist/lib/node-esm/testing/index.mjs +82 -60
  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 +5 -31
  18. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  19. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts +5 -11
  20. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  21. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +1 -1
  22. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  23. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts +8 -20
  24. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  25. package/dist/types/src/components/{Buttons → Button}/Button.d.ts +2 -2
  26. package/dist/types/src/components/Button/Button.d.ts.map +1 -0
  27. package/dist/types/src/components/Button/Button.stories.d.ts +17 -0
  28. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -0
  29. package/dist/types/src/components/{Buttons → Button}/IconButton.d.ts +4 -4
  30. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -0
  31. package/dist/types/src/components/Button/IconButton.stories.d.ts +13 -0
  32. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -0
  33. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -0
  34. package/dist/types/src/components/Button/Toggle.stories.d.ts +16 -0
  35. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -0
  36. package/dist/types/src/components/Button/ToggleGroup.d.ts +27 -0
  37. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -0
  38. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +27 -0
  39. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -0
  40. package/dist/types/src/components/Button/index.d.ts.map +1 -0
  41. package/dist/types/src/components/Card/Card.d.ts +121 -0
  42. package/dist/types/src/components/Card/Card.d.ts.map +1 -0
  43. package/dist/types/src/components/Card/Card.stories.d.ts +21 -0
  44. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -0
  45. package/dist/types/src/components/Card/index.d.ts +2 -0
  46. package/dist/types/src/components/Card/index.d.ts.map +1 -0
  47. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  48. package/dist/types/src/components/Clipboard/CopyButton.d.ts +1 -1
  49. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  50. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts +1 -1
  51. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  52. package/dist/types/src/components/{Dialogs → Dialog}/AlertDialog.d.ts +13 -4
  53. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -0
  54. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts +11 -0
  55. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -0
  56. package/dist/types/src/components/Dialog/Dialog.d.ts +47 -0
  57. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -0
  58. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +24 -0
  59. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -0
  60. package/dist/types/src/components/Dialog/index.d.ts.map +1 -0
  61. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
  62. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  63. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts +11 -0
  64. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -0
  65. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts +7 -0
  66. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -0
  67. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +8 -0
  68. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -0
  69. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts +9 -0
  70. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -0
  71. package/dist/types/src/components/ErrorFallback/index.d.ts +5 -0
  72. package/dist/types/src/components/ErrorFallback/index.d.ts.map +1 -0
  73. package/dist/types/src/components/Icon/Icon.d.ts +2 -2
  74. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  75. package/dist/types/src/components/Icon/Icon.stories.d.ts +17 -0
  76. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -0
  77. package/dist/types/src/components/Image/Image.d.ts +14 -0
  78. package/dist/types/src/components/Image/Image.d.ts.map +1 -0
  79. package/dist/types/src/components/Image/Image.stories.d.ts +33 -0
  80. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -0
  81. package/dist/types/src/components/Image/index.d.ts +2 -0
  82. package/dist/types/src/components/Image/index.d.ts.map +1 -0
  83. package/dist/types/src/components/Input/Input.d.ts +6 -8
  84. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  85. package/dist/types/src/components/Input/Input.stories.d.ts +17 -18
  86. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  87. package/dist/types/src/components/Link/Link.stories.d.ts +8 -8
  88. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  89. package/dist/types/src/components/{Lists → List}/List.d.ts +3 -3
  90. package/dist/types/src/components/List/List.d.ts.map +1 -0
  91. package/dist/types/src/components/List/List.stories.d.ts +14 -0
  92. package/dist/types/src/components/List/List.stories.d.ts.map +1 -0
  93. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -0
  94. package/dist/types/src/components/{Lists → List}/Tree.d.ts +1 -1
  95. package/dist/types/src/components/List/Tree.d.ts.map +1 -0
  96. package/dist/types/src/components/List/Tree.stories.d.ts +15 -0
  97. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -0
  98. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -0
  99. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts +1 -1
  100. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts.map +1 -1
  101. package/dist/types/src/components/List/Treegrid.stories.d.ts +12 -0
  102. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -0
  103. package/dist/types/src/components/List/index.d.ts.map +1 -0
  104. package/dist/types/src/components/Main/Main.d.ts +18 -28
  105. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  106. package/dist/types/src/components/Main/Main.stories.d.ts +6 -10
  107. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  108. package/dist/types/src/components/{Menus → Menu}/ContextMenu.d.ts +6 -6
  109. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -0
  110. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts +12 -0
  111. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -0
  112. package/dist/types/src/components/{Menus → Menu}/DropdownMenu.d.ts +8 -8
  113. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
  114. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +15 -0
  115. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
  116. package/dist/types/src/components/Menu/index.d.ts.map +1 -0
  117. package/dist/types/src/components/Message/Message.d.ts +1 -1
  118. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  119. package/dist/types/src/components/Message/Message.stories.d.ts +10 -20
  120. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  121. package/dist/types/src/components/Popover/Popover.d.ts +4 -3
  122. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  123. package/dist/types/src/components/Popover/Popover.stories.d.ts +6 -34
  124. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  125. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +25 -26
  126. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  127. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +37 -25
  128. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  129. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +39 -0
  130. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -0
  131. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +24 -0
  132. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -0
  133. package/dist/types/src/components/ScrollContainer/index.d.ts +2 -0
  134. package/dist/types/src/components/ScrollContainer/index.d.ts.map +1 -0
  135. package/dist/types/src/components/Select/Select.d.ts +10 -10
  136. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  137. package/dist/types/src/components/Select/Select.stories.d.ts +4 -9
  138. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  139. package/dist/types/src/components/Separator/Separator.d.ts +1 -1
  140. package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
  141. package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  142. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
  143. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  144. package/dist/types/src/components/Skeleton/index.d.ts +2 -0
  145. package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
  146. package/dist/types/src/components/Splitter/Splitter.d.ts +36 -0
  147. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
  148. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
  149. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
  150. package/dist/types/src/components/Splitter/index.d.ts +2 -0
  151. package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
  152. package/dist/types/src/components/Status/Status.stories.d.ts +6 -10
  153. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  154. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  155. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  156. package/dist/types/src/components/Tag/Tag.stories.d.ts +8 -13
  157. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  158. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +3 -3
  159. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  160. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts +12 -0
  161. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  162. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +1 -8
  163. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  164. package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
  165. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  166. package/dist/types/src/components/Toast/Toast.d.ts +5 -5
  167. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  168. package/dist/types/src/components/Toast/Toast.stories.d.ts +6 -44
  169. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  170. package/dist/types/src/components/Toolbar/Toolbar.d.ts +47 -19
  171. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  172. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +6 -50
  173. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  174. package/dist/types/src/components/Tooltip/Tooltip.d.ts +2 -4
  175. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  176. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +8 -61
  177. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  178. package/dist/types/src/components/index.d.ts +13 -8
  179. package/dist/types/src/components/index.d.ts.map +1 -1
  180. package/dist/types/src/exemplars/generics.stories.d.ts +18 -0
  181. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
  182. package/dist/types/src/exemplars/slot.stories.d.ts +14 -0
  183. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
  184. package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
  185. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
  186. package/dist/types/src/exemplars/virtualizer.stories.d.ts +11 -0
  187. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -0
  188. package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
  189. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  190. package/dist/types/src/hooks/useElevationContext.d.ts +1 -1
  191. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  192. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  193. package/dist/types/src/hooks/useVisualViewport.d.ts +2 -2
  194. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  195. package/dist/types/src/index.d.ts +2 -1
  196. package/dist/types/src/index.d.ts.map +1 -1
  197. package/dist/types/src/playground/Controls.stories.d.ts +5 -9
  198. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  199. package/dist/types/src/playground/Custom.stories.d.ts +12 -4
  200. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  201. package/dist/types/src/playground/Typography.stories.d.ts +5 -11
  202. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  203. package/dist/types/src/primitives/Column/Column.d.ts +32 -0
  204. package/dist/types/src/primitives/Column/Column.d.ts.map +1 -0
  205. package/dist/types/src/primitives/Column/Column.stories.d.ts +6 -0
  206. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -0
  207. package/dist/types/src/primitives/Column/index.d.ts +2 -0
  208. package/dist/types/src/primitives/Column/index.d.ts.map +1 -0
  209. package/dist/types/src/primitives/Flex/Flex.d.ts +8 -0
  210. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
  211. package/dist/types/src/primitives/Flex/Flex.stories.d.ts +8 -0
  212. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -0
  213. package/dist/types/src/primitives/Flex/index.d.ts +2 -0
  214. package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
  215. package/dist/types/src/primitives/Grid/Grid.d.ts +9 -0
  216. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -0
  217. package/dist/types/src/primitives/Grid/Grid.stories.d.ts +8 -0
  218. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -0
  219. package/dist/types/src/primitives/Grid/index.d.ts +2 -0
  220. package/dist/types/src/primitives/Grid/index.d.ts.map +1 -0
  221. package/dist/types/src/primitives/Panel/Panel.d.ts +34 -0
  222. package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -0
  223. package/dist/types/src/primitives/Panel/Panel.stories.d.ts +6 -0
  224. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -0
  225. package/dist/types/src/primitives/Panel/index.d.ts +2 -0
  226. package/dist/types/src/primitives/Panel/index.d.ts.map +1 -0
  227. package/dist/types/src/primitives/index.d.ts +5 -0
  228. package/dist/types/src/primitives/index.d.ts.map +1 -0
  229. package/dist/types/src/testing/decorators/index.d.ts +2 -1
  230. package/dist/types/src/testing/decorators/index.d.ts.map +1 -1
  231. package/dist/types/src/testing/decorators/withLayout.d.ts +15 -0
  232. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -0
  233. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +12 -0
  234. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -0
  235. package/dist/types/src/testing/decorators/withTheme.d.ts +5 -1
  236. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  237. package/dist/types/src/translations.d.ts +11 -0
  238. package/dist/types/src/translations.d.ts.map +1 -0
  239. package/dist/types/src/util/index.d.ts +2 -1
  240. package/dist/types/src/util/index.d.ts.map +1 -1
  241. package/dist/types/src/util/usePx.d.ts +8 -0
  242. package/dist/types/src/util/usePx.d.ts.map +1 -0
  243. package/dist/types/tsconfig.tsbuildinfo +1 -1
  244. package/package.json +43 -31
  245. package/src/components/Avatars/Avatar.stories.tsx +24 -16
  246. package/src/components/Avatars/Avatar.tsx +9 -16
  247. package/src/components/Avatars/AvatarGroup.stories.tsx +12 -8
  248. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +20 -15
  249. package/src/components/Breadcrumb/Breadcrumb.tsx +12 -38
  250. package/src/components/{Buttons → Button}/Button.stories.tsx +10 -11
  251. package/src/components/{Buttons → Button}/Button.tsx +7 -13
  252. package/src/components/{Buttons → Button}/IconButton.stories.tsx +15 -12
  253. package/src/components/{Buttons → Button}/IconButton.tsx +23 -16
  254. package/src/components/Button/Toggle.stories.tsx +37 -0
  255. package/src/components/{Buttons → Button}/ToggleGroup.stories.tsx +12 -9
  256. package/src/components/{Buttons → Button}/ToggleGroup.tsx +17 -4
  257. package/src/components/Card/Card.stories.tsx +151 -0
  258. package/src/components/Card/Card.tsx +352 -0
  259. package/src/components/Card/index.ts +5 -0
  260. package/src/components/Clipboard/ClipboardProvider.tsx +1 -1
  261. package/src/components/Clipboard/CopyButton.tsx +9 -8
  262. package/src/components/DensityProvider/DensityProvider.tsx +2 -2
  263. package/src/components/Dialog/AlertDialog.stories.tsx +69 -0
  264. package/src/components/{Dialogs → Dialog}/AlertDialog.tsx +128 -28
  265. package/src/components/Dialog/Dialog.stories.tsx +122 -0
  266. package/src/components/{Dialogs → Dialog}/Dialog.tsx +190 -60
  267. package/src/components/ElevationProvider/ElevationProvider.tsx +2 -2
  268. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +50 -0
  269. package/src/components/ErrorFallback/ErrorFallback.tsx +70 -0
  270. package/src/components/ErrorFallback/ErrorStack.tsx +80 -0
  271. package/src/components/ErrorFallback/ThrowError.tsx +37 -0
  272. package/src/components/ErrorFallback/index.ts +9 -0
  273. package/src/components/Icon/Icon.stories.tsx +113 -0
  274. package/src/components/Icon/Icon.tsx +3 -3
  275. package/src/components/Image/Image.stories.tsx +86 -0
  276. package/src/components/Image/Image.tsx +223 -0
  277. package/src/components/Image/index.ts +5 -0
  278. package/src/components/Input/Input.stories.tsx +28 -49
  279. package/src/components/Input/Input.tsx +46 -82
  280. package/src/components/Link/Link.stories.tsx +12 -8
  281. package/src/components/Link/Link.tsx +2 -2
  282. package/src/components/{Lists → List}/List.stories.tsx +44 -45
  283. package/src/components/{Lists → List}/List.tsx +27 -28
  284. package/src/components/{Lists → List}/ListDropIndicator.tsx +7 -7
  285. package/src/components/{Lists → List}/Tree.stories.tsx +15 -12
  286. package/src/components/{Lists → List}/Tree.tsx +4 -3
  287. package/src/components/{Lists → List}/TreeDropIndicator.tsx +7 -7
  288. package/src/components/{Lists → List}/Treegrid.stories.tsx +15 -9
  289. package/src/components/{Lists → List}/Treegrid.tsx +67 -31
  290. package/src/components/Main/Main.stories.tsx +53 -27
  291. package/src/components/Main/Main.tsx +176 -104
  292. package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +13 -10
  293. package/src/components/{Menus → Menu}/ContextMenu.tsx +10 -33
  294. package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +14 -11
  295. package/src/components/{Menus → Menu}/DropdownMenu.tsx +111 -80
  296. package/src/components/Message/Message.stories.tsx +35 -16
  297. package/src/components/Message/Message.tsx +46 -33
  298. package/src/components/Popover/Popover.stories.tsx +16 -13
  299. package/src/components/Popover/Popover.tsx +86 -64
  300. package/src/components/ScrollArea/ScrollArea.stories.tsx +163 -34
  301. package/src/components/ScrollArea/ScrollArea.tsx +84 -82
  302. package/src/components/ScrollArea/index.ts +1 -1
  303. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +89 -0
  304. package/src/components/ScrollContainer/ScrollContainer.tsx +238 -0
  305. package/src/components/ScrollContainer/index.ts +5 -0
  306. package/src/components/Select/Select.stories.tsx +15 -12
  307. package/src/components/Select/Select.tsx +16 -31
  308. package/src/components/Separator/Separator.tsx +1 -1
  309. package/src/components/Skeleton/Skeleton.stories.tsx +52 -0
  310. package/src/components/Skeleton/Skeleton.tsx +26 -0
  311. package/src/components/Skeleton/index.ts +5 -0
  312. package/src/components/Splitter/Splitter.stories.tsx +83 -0
  313. package/src/components/Splitter/Splitter.tsx +138 -0
  314. package/src/components/Splitter/index.ts +5 -0
  315. package/src/components/Status/Status.stories.tsx +30 -23
  316. package/src/components/Status/Status.tsx +2 -2
  317. package/src/components/Tag/Tag.stories.tsx +17 -13
  318. package/src/components/Tag/Tag.tsx +3 -8
  319. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +32 -0
  320. package/src/components/ThemeProvider/ThemeProvider.tsx +7 -7
  321. package/src/components/ThemeProvider/TranslationsProvider.tsx +3 -18
  322. package/src/components/ThemeProvider/index.ts +3 -3
  323. package/src/components/Toast/Toast.stories.tsx +14 -11
  324. package/src/components/Toast/Toast.tsx +19 -23
  325. package/src/components/Toolbar/Toolbar.stories.tsx +16 -14
  326. package/src/components/Toolbar/Toolbar.tsx +199 -11
  327. package/src/components/Tooltip/Tooltip.stories.tsx +31 -25
  328. package/src/components/Tooltip/Tooltip.tsx +30 -26
  329. package/src/components/index.ts +14 -9
  330. package/src/exemplars/generics.stories.tsx +49 -0
  331. package/src/exemplars/slot.stories.tsx +119 -0
  332. package/src/exemplars/tabster.stories.tsx +127 -0
  333. package/src/exemplars/virtualizer.stories.tsx +137 -0
  334. package/src/hooks/useDensityContext.ts +1 -1
  335. package/src/hooks/useElevationContext.ts +1 -1
  336. package/src/hooks/useSafeArea.ts +3 -2
  337. package/src/hooks/useVisualViewport.ts +4 -4
  338. package/src/index.ts +2 -1
  339. package/src/playground/Controls.stories.tsx +12 -15
  340. package/src/playground/Custom.stories.tsx +15 -26
  341. package/src/playground/Typography.stories.tsx +11 -9
  342. package/src/primitives/Column/Column.stories.tsx +72 -0
  343. package/src/primitives/Column/Column.tsx +156 -0
  344. package/src/primitives/Column/index.ts +5 -0
  345. package/src/primitives/Flex/Flex.stories.tsx +58 -0
  346. package/src/primitives/Flex/Flex.tsx +27 -0
  347. package/src/primitives/Flex/index.ts +5 -0
  348. package/src/primitives/Grid/Grid.stories.tsx +57 -0
  349. package/src/primitives/Grid/Grid.tsx +43 -0
  350. package/src/primitives/Grid/index.ts +5 -0
  351. package/src/primitives/Panel/Panel.stories.tsx +67 -0
  352. package/src/primitives/Panel/Panel.tsx +137 -0
  353. package/src/primitives/Panel/index.ts +5 -0
  354. package/src/primitives/index.ts +8 -0
  355. package/src/testing/decorators/index.ts +2 -1
  356. package/src/testing/decorators/withLayout.tsx +77 -0
  357. package/src/testing/decorators/withLayoutVariants.tsx +48 -0
  358. package/src/testing/decorators/withTheme.tsx +34 -0
  359. package/src/translations.ts +19 -0
  360. package/src/util/index.ts +3 -1
  361. package/src/util/usePx.ts +61 -0
  362. package/dist/lib/browser/chunk-2COVUP44.mjs +0 -4373
  363. package/dist/lib/browser/chunk-2COVUP44.mjs.map +0 -7
  364. package/dist/lib/node-esm/chunk-GHXHND5V.mjs +0 -4375
  365. package/dist/lib/node-esm/chunk-GHXHND5V.mjs.map +0 -7
  366. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +0 -15
  367. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +0 -1
  368. package/dist/types/src/components/AnchoredOverflow/index.d.ts +0 -2
  369. package/dist/types/src/components/AnchoredOverflow/index.d.ts.map +0 -1
  370. package/dist/types/src/components/Buttons/Button.d.ts.map +0 -1
  371. package/dist/types/src/components/Buttons/Button.stories.d.ts +0 -12
  372. package/dist/types/src/components/Buttons/Button.stories.d.ts.map +0 -1
  373. package/dist/types/src/components/Buttons/IconButton.d.ts.map +0 -1
  374. package/dist/types/src/components/Buttons/IconButton.stories.d.ts +0 -22
  375. package/dist/types/src/components/Buttons/IconButton.stories.d.ts.map +0 -1
  376. package/dist/types/src/components/Buttons/Toggle.d.ts.map +0 -1
  377. package/dist/types/src/components/Buttons/Toggle.stories.d.ts +0 -19
  378. package/dist/types/src/components/Buttons/Toggle.stories.d.ts.map +0 -1
  379. package/dist/types/src/components/Buttons/ToggleGroup.d.ts +0 -28
  380. package/dist/types/src/components/Buttons/ToggleGroup.d.ts.map +0 -1
  381. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts +0 -39
  382. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +0 -1
  383. package/dist/types/src/components/Buttons/index.d.ts.map +0 -1
  384. package/dist/types/src/components/Dialogs/AlertDialog.d.ts.map +0 -1
  385. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts +0 -43
  386. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +0 -1
  387. package/dist/types/src/components/Dialogs/Dialog.d.ts +0 -31
  388. package/dist/types/src/components/Dialogs/Dialog.d.ts.map +0 -1
  389. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts +0 -48
  390. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +0 -1
  391. package/dist/types/src/components/Dialogs/index.d.ts.map +0 -1
  392. package/dist/types/src/components/Lists/List.d.ts.map +0 -1
  393. package/dist/types/src/components/Lists/List.stories.d.ts +0 -37
  394. package/dist/types/src/components/Lists/List.stories.d.ts.map +0 -1
  395. package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +0 -1
  396. package/dist/types/src/components/Lists/Tree.d.ts.map +0 -1
  397. package/dist/types/src/components/Lists/Tree.stories.d.ts +0 -41
  398. package/dist/types/src/components/Lists/Tree.stories.d.ts.map +0 -1
  399. package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +0 -1
  400. package/dist/types/src/components/Lists/Treegrid.stories.d.ts +0 -10
  401. package/dist/types/src/components/Lists/Treegrid.stories.d.ts.map +0 -1
  402. package/dist/types/src/components/Lists/index.d.ts.map +0 -1
  403. package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
  404. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts +0 -50
  405. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +0 -1
  406. package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
  407. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts +0 -50
  408. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
  409. package/dist/types/src/components/Menus/index.d.ts.map +0 -1
  410. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts +0 -12
  411. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts.map +0 -1
  412. package/dist/types/src/util/ThemedClassName.d.ts +0 -5
  413. package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
  414. package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +0 -59
  415. package/src/components/AnchoredOverflow/index.ts +0 -5
  416. package/src/components/Buttons/Toggle.stories.tsx +0 -33
  417. package/src/components/Dialogs/AlertDialog.stories.tsx +0 -66
  418. package/src/components/Dialogs/Dialog.stories.tsx +0 -65
  419. package/src/testing/decorators/withSurfaceVariantsLayout.tsx +0 -51
  420. package/src/testing/decorators/withTheme.ts +0 -25
  421. package/src/util/ThemedClassName.ts +0 -7
  422. /package/dist/types/src/components/{Buttons → Button}/Toggle.d.ts +0 -0
  423. /package/dist/types/src/components/{Buttons → Button}/index.d.ts +0 -0
  424. /package/dist/types/src/components/{Dialogs → Dialog}/index.d.ts +0 -0
  425. /package/dist/types/src/components/{Lists → List}/ListDropIndicator.d.ts +0 -0
  426. /package/dist/types/src/components/{Lists → List}/TreeDropIndicator.d.ts +0 -0
  427. /package/dist/types/src/components/{Lists → List}/index.d.ts +0 -0
  428. /package/dist/types/src/components/{Menus → Menu}/index.d.ts +0 -0
  429. /package/src/components/{Buttons → Button}/Toggle.tsx +0 -0
  430. /package/src/components/{Buttons → Button}/index.ts +0 -0
  431. /package/src/components/{Dialogs → Dialog}/index.ts +0 -0
  432. /package/src/components/{Lists → List}/index.ts +0 -0
  433. /package/src/components/{Menus → Menu}/index.ts +0 -0
@@ -2,34 +2,33 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { type IconWeight } from '@phosphor-icons/react';
6
5
  import { Root as CheckboxPrimitive, type CheckboxProps as CheckboxPrimitiveProps } from '@radix-ui/react-checkbox';
7
6
  import { useControllableState } from '@radix-ui/react-use-controllable-state';
8
- import React, { type ComponentPropsWithRef, forwardRef, type ForwardRefExoticComponent, useCallback } from 'react';
7
+ import React, { type ComponentPropsWithRef, type ForwardRefExoticComponent, forwardRef } from 'react';
9
8
 
10
9
  import {
10
+ DescriptionAndValidation as DescriptionAndValidationPrimitive,
11
+ type DescriptionAndValidationProps as DescriptionAndValidationPrimitiveProps,
12
+ Description as DescriptionPrimitive,
13
+ type DescriptionProps as DescriptionPrimitiveProps,
14
+ INPUT_NAME,
11
15
  InputRoot,
12
16
  type InputRootProps,
17
+ type InputScopedProps,
18
+ Label as LabelPrimitive,
19
+ type LabelProps as LabelPrimitiveProps,
13
20
  PinInput as PinInputPrimitive,
14
21
  type PinInputProps as PinInputPrimitiveProps,
15
- TextInput as TextInputPrimitive,
16
- type TextInputProps as TextInputPrimitiveProps,
17
22
  TextArea as TextAreaPrimitive,
18
23
  type TextAreaProps as TextAreaPrimitiveProps,
19
- useInputContext,
20
- INPUT_NAME,
21
- type InputScopedProps,
22
- Description as DescriptionPrimitive,
23
- DescriptionAndValidation as DescriptionAndValidationPrimitive,
24
- type DescriptionAndValidationProps as DescriptionAndValidationPrimitiveProps,
25
- type DescriptionProps as DescriptionPrimitiveProps,
26
- Label as LabelPrimitive,
27
- type LabelProps as LabelPrimitiveProps,
24
+ TextInput as TextInputPrimitive,
25
+ type TextInputProps as TextInputPrimitiveProps,
28
26
  Validation as ValidationPrimitive,
29
27
  type ValidationProps as ValidationPrimitiveProps,
28
+ useInputContext,
30
29
  } from '@dxos/react-input';
31
- import { mx } from '@dxos/react-ui-theme';
32
- import { type Density, type Elevation, type ClassNameValue, 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';
33
32
 
34
33
  import { useDensityContext, useElevationContext, useThemeContext } from '../../hooks';
35
34
  import { type ThemedClassName } from '../../util';
@@ -41,10 +40,10 @@ type InputSharedProps = Partial<{ density: Density; elevation: Elevation; varian
41
40
 
42
41
  type LabelProps = ThemedClassName<LabelPrimitiveProps> & { srOnly?: boolean };
43
42
 
44
- const Label = forwardRef<HTMLLabelElement, LabelProps>(({ srOnly, classNames, children, ...props }, forwardedRef) => {
43
+ const Label = forwardRef<HTMLLabelElement, LabelProps>(({ classNames, children, srOnly, ...props }, forwardedRef) => {
45
44
  const { tx } = useThemeContext();
46
45
  return (
47
- <LabelPrimitive {...props} className={tx('input.label', 'input__label', { srOnly }, classNames)} ref={forwardedRef}>
46
+ <LabelPrimitive {...props} className={tx('input.label', { srOnly }, classNames)} ref={forwardedRef}>
48
47
  {children}
49
48
  </LabelPrimitive>
50
49
  );
@@ -53,14 +52,10 @@ const Label = forwardRef<HTMLLabelElement, LabelProps>(({ srOnly, classNames, ch
53
52
  type DescriptionProps = ThemedClassName<DescriptionPrimitiveProps> & { srOnly?: boolean };
54
53
 
55
54
  const Description = forwardRef<HTMLSpanElement, DescriptionProps>(
56
- ({ srOnly, classNames, children, ...props }, forwardedRef) => {
55
+ ({ classNames, children, srOnly, ...props }, forwardedRef) => {
57
56
  const { tx } = useThemeContext();
58
57
  return (
59
- <DescriptionPrimitive
60
- {...props}
61
- className={tx('input.description', 'input__description', { srOnly }, classNames)}
62
- ref={forwardedRef}
63
- >
58
+ <DescriptionPrimitive {...props} className={tx('input.description', { srOnly }, classNames)} ref={forwardedRef}>
64
59
  {children}
65
60
  </DescriptionPrimitive>
66
61
  );
@@ -70,18 +65,13 @@ const Description = forwardRef<HTMLSpanElement, DescriptionProps>(
70
65
  type ValidationProps = ThemedClassName<ValidationPrimitiveProps> & { srOnly?: boolean };
71
66
 
72
67
  const Validation = forwardRef<HTMLSpanElement, InputScopedProps<ValidationProps>>(
73
- ({ __inputScope, srOnly, classNames, children, ...props }, forwardedRef) => {
68
+ ({ __inputScope, classNames, children, srOnly, ...props }, forwardedRef) => {
74
69
  const { tx } = useThemeContext();
75
70
  const { validationValence } = useInputContext(INPUT_NAME, __inputScope);
76
71
  return (
77
72
  <ValidationPrimitive
78
73
  {...props}
79
- className={tx(
80
- 'input.validation',
81
- `input__validation-message input__validation-message--${validationValence}`,
82
- { srOnly, validationValence },
83
- classNames,
84
- )}
74
+ className={tx('input.validation', { srOnly, validationValence }, classNames)}
85
75
  ref={forwardedRef}
86
76
  >
87
77
  {children}
@@ -93,12 +83,12 @@ const Validation = forwardRef<HTMLSpanElement, InputScopedProps<ValidationProps>
93
83
  type DescriptionAndValidationProps = ThemedClassName<DescriptionAndValidationPrimitiveProps> & { srOnly?: boolean };
94
84
 
95
85
  const DescriptionAndValidation = forwardRef<HTMLParagraphElement, DescriptionAndValidationProps>(
96
- ({ srOnly, classNames, children, ...props }, forwardedRef) => {
86
+ ({ classNames, children, srOnly, ...props }, forwardedRef) => {
97
87
  const { tx } = useThemeContext();
98
88
  return (
99
89
  <DescriptionAndValidationPrimitive
100
90
  {...props}
101
- className={tx('input.descriptionAndValidation', 'input__description-and-validation', { srOnly }, classNames)}
91
+ className={tx('input.descriptionAndValidation', { srOnly }, classNames)}
102
92
  ref={forwardedRef}
103
93
  >
104
94
  {children}
@@ -107,54 +97,23 @@ const DescriptionAndValidation = forwardRef<HTMLParagraphElement, DescriptionAnd
107
97
  },
108
98
  );
109
99
 
110
- type PinInputProps = InputSharedProps &
111
- Omit<PinInputPrimitiveProps, 'segmentClassName' | 'inputClassName'> & {
112
- segmentClassName?: ClassNameValue;
113
- inputClassName?: ClassNameValue;
114
- };
100
+ type PinInputProps = ThemedClassName<InputSharedProps & Omit<PinInputPrimitiveProps, 'className' | 'segmentClassName'>>;
115
101
 
116
102
  const PinInput = forwardRef<HTMLInputElement, PinInputProps>(
117
- (
118
- {
119
- density: propsDensity,
120
- elevation: propsElevation,
121
- segmentClassName: propsSegmentClassName,
122
- inputClassName,
123
- variant,
124
- ...props
125
- },
126
- forwardedRef,
127
- ) => {
103
+ ({ classNames, density: propsDensity, elevation: propsElevation, ...props }, forwardedRef) => {
128
104
  const { hasIosKeyboard } = useThemeContext();
129
105
  const { tx } = useThemeContext();
130
106
  const density = useDensityContext(propsDensity);
131
107
  const elevation = useElevationContext(propsElevation);
132
108
 
133
- const segmentClassName = useCallback(
134
- ({ focused, validationValence }: Parameters<Exclude<PinInputPrimitiveProps['segmentClassName'], undefined>>[0]) =>
135
- tx(
136
- 'input.input',
137
- 'input--pin-segment',
138
- {
139
- variant: 'static',
140
- focused,
141
- disabled: props.disabled,
142
- density,
143
- elevation,
144
- validationValence,
145
- },
146
- propsSegmentClassName,
147
- ),
148
- [tx, props.disabled, elevation, propsElevation, density],
149
- );
150
109
  return (
151
110
  <PinInputPrimitive
152
111
  {...{
153
112
  ...props,
154
- segmentClassName,
155
113
  ...(props.autoFocus && !hasIosKeyboard && { autoFocus: true }),
156
114
  }}
157
- 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 }) || ''}
158
117
  ref={forwardedRef}
159
118
  />
160
119
  );
@@ -163,24 +122,30 @@ const PinInput = forwardRef<HTMLInputElement, PinInputProps>(
163
122
 
164
123
  // TODO(burdon): Implement inline icon within button: e.g., https://www.radix-ui.com/themes/playground#text-field
165
124
 
166
- type TextInputProps = InputSharedProps & ThemedClassName<TextInputPrimitiveProps>;
125
+ type AutoFillProps = {
126
+ noAutoFill?: boolean;
127
+ };
128
+
129
+ type TextInputProps = InputSharedProps & ThemedClassName<TextInputPrimitiveProps> & AutoFillProps;
167
130
 
168
131
  const TextInput = forwardRef<HTMLInputElement, InputScopedProps<TextInputProps>>(
169
- ({ __inputScope, classNames, density: propsDensity, elevation: propsElevation, variant, ...props }, forwardedRef) => {
132
+ (
133
+ { __inputScope, classNames, density: propsDensity, elevation: propsElevation, variant, noAutoFill, ...props },
134
+ forwardedRef,
135
+ ) => {
170
136
  const { hasIosKeyboard } = useThemeContext();
171
- const themeContextValue = useThemeContext();
137
+ const { tx } = useThemeContext();
172
138
  const density = useDensityContext(propsDensity);
173
139
  const elevation = useElevationContext(propsElevation);
174
140
  const { validationValence } = useInputContext(INPUT_NAME, __inputScope);
175
141
 
176
- const { tx } = themeContextValue;
177
-
178
142
  return (
179
143
  <TextInputPrimitive
180
144
  {...props}
145
+ // TODO(wittjosiah): Factor out autofill properies.
146
+ {...{ 'data-1p-ignore': noAutoFill }}
181
147
  className={tx(
182
148
  'input.input',
183
- 'input',
184
149
  {
185
150
  variant,
186
151
  disabled: props.disabled,
@@ -211,8 +176,7 @@ const TextArea = forwardRef<HTMLTextAreaElement, InputScopedProps<TextAreaProps>
211
176
  <TextAreaPrimitive
212
177
  {...props}
213
178
  className={tx(
214
- 'input.input',
215
- 'input--text-area',
179
+ 'input.textArea',
216
180
  {
217
181
  variant,
218
182
  disabled: props.disabled,
@@ -220,7 +184,6 @@ const TextArea = forwardRef<HTMLTextAreaElement, InputScopedProps<TextAreaProps>
220
184
  elevation,
221
185
  validationValence,
222
186
  },
223
- '-mbe-labelSpacingBlock',
224
187
  classNames,
225
188
  )}
226
189
  {...(props.autoFocus && !hasIosKeyboard && { autoFocus: true })}
@@ -230,7 +193,9 @@ const TextArea = forwardRef<HTMLTextAreaElement, InputScopedProps<TextAreaProps>
230
193
  },
231
194
  );
232
195
 
233
- type CheckboxProps = ThemedClassName<Omit<CheckboxPrimitiveProps, 'children'>> & { size?: Size; weight?: IconWeight };
196
+ type CheckboxProps = ThemedClassName<Omit<CheckboxPrimitiveProps, 'children'>> & {
197
+ size?: Size;
198
+ };
234
199
 
235
200
  const Checkbox: ForwardRefExoticComponent<CheckboxProps> = forwardRef<
236
201
  HTMLButtonElement,
@@ -239,12 +204,11 @@ const Checkbox: ForwardRefExoticComponent<CheckboxProps> = forwardRef<
239
204
  (
240
205
  {
241
206
  __inputScope,
207
+ classNames,
242
208
  checked: propsChecked,
243
209
  defaultChecked: propsDefaultChecked,
244
210
  onCheckedChange: propsOnCheckedChange,
245
211
  size,
246
- weight = 'bold',
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,
@@ -2,16 +2,20 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
 
7
- import { Link } from './Link';
8
7
  import { withTheme } from '../../testing';
9
8
 
10
- export default {
11
- title: 'ui/react-ui-core/Link',
9
+ import { Link } from './Link';
10
+
11
+ const meta = {
12
+ title: 'ui/react-ui-core/components/Link',
12
13
  component: Link,
13
- decorators: [withTheme],
14
- parameters: { chromatic: { disableSnapshot: false } },
15
- } as any;
14
+ decorators: [withTheme()],
15
+ } satisfies Meta<typeof Link>;
16
+
17
+ export default meta;
18
+
19
+ type Story = StoryObj<typeof meta>;
16
20
 
17
- export const Default = { args: { children: 'Hello', href: '#' } };
21
+ export const Default: Story = { args: { children: 'Hello', href: '#' } };
@@ -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
  );
@@ -2,33 +2,29 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { DndContext, type DragEndEvent, type DragStartEvent } from '@dnd-kit/core';
8
- import { arrayMove, SortableContext, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable';
6
+ import { SortableContext, arrayMove, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable';
9
7
  import { CSS } from '@dnd-kit/utilities';
10
8
  import { useArrowNavigationGroup } from '@fluentui/react-tabster';
11
- import React, { type ReactNode, useState } from 'react';
9
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
10
+ import React, { type ReactNode, useCallback, useState } from 'react';
12
11
 
13
- import {
14
- getSize,
15
- ghostHover,
16
- ghostSelected,
17
- ghostSelectedTrackingInterFromNormal,
18
- mx,
19
- surfaceShadow,
20
- } from '@dxos/react-ui-theme';
12
+ import { getSize, ghostHover, ghostSelected, mx, surfaceShadow } from '@dxos/ui-theme';
21
13
 
22
- import { List, ListItem, type ListScopedProps } from './List';
23
14
  import { withTheme } from '../../testing';
24
15
  import { Icon } from '../Icon';
25
16
 
26
- export default {
27
- title: 'ui/react-ui-core/List',
17
+ import { List, ListItem, type ListScopedProps } from './List';
18
+
19
+ const meta = {
20
+ title: 'ui/react-ui-core/components/List',
28
21
  component: List,
29
- decorators: [withTheme],
30
- parameters: { chromatic: { disableSnapshot: false } },
31
- };
22
+ decorators: [withTheme()],
23
+ } satisfies Meta<typeof List>;
24
+
25
+ export default meta;
26
+
27
+ type Story = StoryObj<typeof meta>;
32
28
 
33
29
  const UniformListItem = ({ id, text }: { id: string; text: string }) => {
34
30
  const { attributes, listeners, setNodeRef, transform } = useSortable({ id });
@@ -41,17 +37,17 @@ const UniformListItem = ({ id, text }: { id: string; text: string }) => {
41
37
  style={{ transform: CSS.Transform.toString(transform) }}
42
38
  >
43
39
  <ListItem.Endcap>
44
- <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')} />
45
41
  </ListItem.Endcap>
46
- <ListItem.Heading classNames='grow pbs-2'>{text}</ListItem.Heading>
42
+ <ListItem.Heading classNames='grow pt-2'>{text}</ListItem.Heading>
47
43
  <ListItem.Endcap>
48
- <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')} />
49
45
  </ListItem.Endcap>
50
46
  </ListItem.Root>
51
47
  );
52
48
  };
53
49
 
54
- export const UniformSizeDraggable = {
50
+ export const UniformSizeDraggable: Story = {
55
51
  render: ({ ...args }) => {
56
52
  const [items, setItems] = useState(
57
53
  [...Array(12)].map((_, index) => ({
@@ -60,16 +56,20 @@ export const UniformSizeDraggable = {
60
56
  })),
61
57
  );
62
58
 
63
- const handleDragEnd = (event: DragEndEvent) => {
64
- const { active, over } = event;
65
- if (active.id !== over?.id) {
66
- setItems((items) => {
67
- const oldIndex = items.findIndex((item) => item.id === active.id);
68
- const newIndex = items.findIndex((item) => item.id === over?.id);
69
- return arrayMove(items, oldIndex, newIndex);
70
- });
71
- }
72
- };
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
+
73
73
  return (
74
74
  <DndContext onDragEnd={handleDragEnd}>
75
75
  <SortableContext items={items.map(({ id }) => id)} strategy={verticalListSortingStrategy}>
@@ -103,19 +103,19 @@ const ManySizesDraggableListItem = ({
103
103
  style={{ transform: CSS.Translate.toString(transform) }}
104
104
  >
105
105
  <ListItem.Endcap>
106
- <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')} />
107
107
  </ListItem.Endcap>
108
- <ListItem.Heading classNames='grow pbs-2' asChild>
108
+ <ListItem.Heading classNames='grow pt-2' asChild>
109
109
  {text}
110
110
  </ListItem.Heading>
111
111
  <ListItem.Endcap>
112
- <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')} />
113
113
  </ListItem.Endcap>
114
114
  </ListItem.Root>
115
115
  );
116
116
  };
117
117
 
118
- export const ManySizesDraggable = {
118
+ export const ManySizesDraggable: Story = {
119
119
  render: ({ ...args }) => {
120
120
  const [items, setItems] = useState(
121
121
  [...Array(12)].map((_, index) => ({
@@ -123,9 +123,9 @@ export const ManySizesDraggable = {
123
123
  text: (
124
124
  <p
125
125
  className={mx(
126
- 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',
127
127
  surfaceShadow({ elevation: 'positioned' }),
128
- 'mbe-2 p-2 bg-white dark:bg-neutral-800 rounded',
128
+ 'mb-2 p-2 bg-white dark:bg-neutral-800 rounded-sm',
129
129
  )}
130
130
  >{`List item ${index + 1}`}</p>
131
131
  ),
@@ -163,7 +163,7 @@ export const ManySizesDraggable = {
163
163
  args: {},
164
164
  };
165
165
 
166
- export const Collapsible = {
166
+ export const Collapsible: Story = {
167
167
  render: ({ ...args }) => {
168
168
  const [items, _setItems] = useState(
169
169
  [...Array(12)].map((_, index) => ({
@@ -179,9 +179,9 @@ export const Collapsible = {
179
179
  <ListItem.Root key={id} id={id} collapsible={index !== 2} defaultOpen={index % 2 === 0}>
180
180
  <div role='none' className='grow flex'>
181
181
  {index !== 2 ? <ListItem.OpenTrigger /> : <ListItem.MockOpenTrigger />}
182
- <ListItem.Heading classNames='grow pbs-2'>{text}</ListItem.Heading>
182
+ <ListItem.Heading classNames='grow pt-2'>{text}</ListItem.Heading>
183
183
  <ListItem.Endcap>
184
- <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')} />
185
185
  </ListItem.Endcap>
186
186
  </div>
187
187
  {index !== 2 && <ListItem.CollapsibleContent>{body}</ListItem.CollapsibleContent>}
@@ -192,11 +192,10 @@ export const Collapsible = {
192
192
  },
193
193
  args: {
194
194
  variant: 'unordered',
195
- // toggleOpenLabel: 'Open/close storybook list item', // TODO(burdon): ???
196
195
  },
197
196
  };
198
197
 
199
- export const SelectableListbox = {
198
+ export const SelectableListbox: Story = {
200
199
  render: () => {
201
200
  const [selectedId, setSelectedId] = useState<string>();
202
201
  const arrowNavigationAttrs = useArrowNavigationGroup({ axis: 'vertical' });
@@ -223,11 +222,11 @@ export const SelectableListbox = {
223
222
  key={id}
224
223
  tabIndex={0}
225
224
  selected={selectedId === id}
226
- classNames={mx('items-center', ghostHover, ghostSelected, ghostSelectedTrackingInterFromNormal)}
225
+ classNames={mx(ghostHover, ghostSelected)}
227
226
  onClick={() => setSelectedId(id)}
228
227
  onKeyUp={(event) => handleKeyUp(event, id)}
229
228
  >
230
- <ListItem.Heading classNames='grow'>Lorem ipsum dolor sit amet</ListItem.Heading>
229
+ <ListItem.Heading classNames='flex px-1 items-center grow truncate'>{text}</ListItem.Heading>
231
230
  </ListItem.Root>
232
231
  ))}
233
232
  </List>
@@ -2,35 +2,37 @@
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
- import React, { type ComponentPropsWithoutRef, type FC, forwardRef, type ForwardRefExoticComponent } from 'react';
7
+ import React, { type ComponentPropsWithoutRef, type FC, type ForwardRefExoticComponent, forwardRef } from 'react';
7
8
 
8
9
  import {
10
+ LIST_ITEM_NAME,
11
+ LIST_NAME,
12
+ ListItemCollapsibleContent,
13
+ type ListItemCollapsibleContentProps,
14
+ type ListItemScopedProps,
9
15
  List as ListPrimitive,
10
- type ListProps as ListPrimitiveProps,
11
- type ListScopedProps,
16
+ ListItem as ListPrimitiveItem,
12
17
  ListItemHeading as ListPrimitiveItemHeading,
13
18
  type ListItemHeadingProps as ListPrimitiveItemHeadingProps,
14
19
  ListItemOpenTrigger as ListPrimitiveItemOpenTrigger,
15
20
  type ListItemOpenTriggerProps as ListPrimitiveItemOpenTriggerProps,
16
- ListItemCollapsibleContent,
17
- type ListItemCollapsibleContentProps,
18
- ListItem as ListPrimitiveItem,
19
21
  type ListItemProps as ListPrimitiveItemProps,
20
- type ListItemScopedProps,
21
- LIST_NAME,
22
- LIST_ITEM_NAME,
22
+ type ListProps as ListPrimitiveProps,
23
+ type ListScopedProps,
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
- import { ListDropIndicator } from './ListDropIndicator';
29
29
  import { useDensityContext, useThemeContext } from '../../hooks';
30
30
  import { type ThemedClassName } from '../../util';
31
31
  import { DensityProvider } from '../DensityProvider';
32
32
  import { Icon } from '../Icon';
33
33
 
34
+ import { ListDropIndicator } from './ListDropIndicator';
35
+
34
36
  type ListProps = ThemedClassName<ListPrimitiveProps> & { density?: Density };
35
37
 
36
38
  const List = forwardRef<HTMLOListElement, ListProps>(({ classNames, children, ...props }, forwardedRef) => {
@@ -39,7 +41,7 @@ const List = forwardRef<HTMLOListElement, ListProps>(({ classNames, children, ..
39
41
 
40
42
  return (
41
43
  <DensityProvider density={density}>
42
- <ListPrimitive {...props} className={tx('list.root', 'list', {}, classNames)} ref={forwardedRef}>
44
+ <ListPrimitive {...props} className={tx('list.root', {}, classNames)} ref={forwardedRef}>
43
45
  {children}
44
46
  </ListPrimitive>
45
47
  </DensityProvider>
@@ -50,18 +52,18 @@ type ListItemEndcapProps = ThemedClassName<ComponentPropsWithoutRef<'div'>> & {
50
52
 
51
53
  const ListItemEndcap = forwardRef<HTMLDivElement, ListItemEndcapProps>(
52
54
  ({ children, classNames, asChild, ...props }, forwardedRef) => {
53
- const Root = asChild ? Slot : 'div';
55
+ const Comp = asChild ? Slot : Primitive.div;
54
56
  const density = useDensityContext();
55
57
  const { tx } = useThemeContext();
56
58
  return (
57
- <Root
59
+ <Comp
58
60
  {...(!asChild && { role: 'none' })}
59
61
  {...props}
60
- className={tx('list.item.endcap', 'list__listItem__endcap', { density }, classNames)}
62
+ className={tx('list.item.endcap', { density }, classNames)}
61
63
  ref={forwardedRef}
62
64
  >
63
65
  {children}
64
- </Root>
66
+ </Comp>
65
67
  );
66
68
  },
67
69
  );
@@ -72,13 +74,7 @@ const MockListItemOpenTrigger = ({
72
74
  }: ThemedClassName<Omit<ComponentPropsWithoutRef<'div'>, 'children'>>) => {
73
75
  const density = useDensityContext();
74
76
  const { tx } = useThemeContext();
75
- return (
76
- <div
77
- role='none'
78
- {...props}
79
- className={tx('list.item.openTrigger', 'list__listItem__openTrigger--mock', { density }, classNames)}
80
- />
81
- );
77
+ return <div role='none' {...props} className={tx('list.item.openTrigger', { density }, classNames)} />;
82
78
  };
83
79
 
84
80
  type ListItemHeadingProps = ThemedClassName<ListPrimitiveItemHeadingProps>;
@@ -90,7 +86,7 @@ const ListItemHeading = forwardRef<HTMLParagraphElement, ListItemHeadingProps>(
90
86
  return (
91
87
  <ListPrimitiveItemHeading
92
88
  {...props}
93
- className={tx('list.item.heading', 'list__listItem__heading', { density }, classNames)}
89
+ className={tx('list.item.heading', { density }, classNames)}
94
90
  ref={forwardedRef}
95
91
  >
96
92
  {children}
@@ -106,15 +102,18 @@ const ListItemOpenTrigger = forwardRef<HTMLButtonElement, ListItemOpenTriggerPro
106
102
  const { tx } = useThemeContext();
107
103
  const density = useDensityContext();
108
104
  const { open } = useListItemContext(LIST_ITEM_NAME, __listItemScope);
109
- const iconName = open ? 'ph--caret-down--bold' : 'ph--caret-right--bold';
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
- <Icon icon={iconName} classNames={tx('list.item.openTriggerIcon', 'list__listItem__openTrigger__icon', {})} />
112
+ <Icon
113
+ size={3}
114
+ icon={open ? 'ph--caret-down--bold' : 'ph--caret-right--bold'}
115
+ classNames={tx('list.item.openTriggerIcon', {})}
116
+ />
118
117
  )}
119
118
  </ListPrimitiveItemOpenTrigger>
120
119
  );
@@ -130,7 +129,7 @@ const ListItemRoot = forwardRef<HTMLLIElement, ListItemRootProps>(
130
129
  return (
131
130
  <ListPrimitiveItem
132
131
  {...props}
133
- className={tx('list.item.root', 'list__listItem', { density, collapsible: props.collapsible }, classNames)}
132
+ className={tx('list.item.root', { density, collapsible: props.collapsible }, classNames)}
134
133
  ref={forwardedRef}
135
134
  >
136
135
  {children}
@@ -16,16 +16,16 @@ const edgeToOrientationMap: Record<Edge, Orientation> = {
16
16
 
17
17
  const orientationStyles: Record<Orientation, HTMLAttributes<HTMLElement>['className']> = {
18
18
  horizontal:
19
- 'h-[--line-thickness] left-[calc(var(--line-inset)+var(--terminal-radius))] right-[--line-inset] before:left-[--terminal-inset]',
19
+ 'h-(--line-thickness) left-[calc(var(--line-inset)+var(--terminal-radius))] right-(--line-inset) before:left-(--terminal-inset)',
20
20
  vertical:
21
- 'w-[--line-thickness] top-[calc(var(--line-inset)+var(--terminal-radius))] bottom-[--line-inset] before:top-[--terminal-inset]',
21
+ 'w-(--line-thickness) top-[calc(var(--line-inset)+var(--terminal-radius))] bottom-(--line-inset) before:top-(--terminal-inset)',
22
22
  };
23
23
 
24
24
  const edgeStyles: Record<Edge, HTMLAttributes<HTMLElement>['className']> = {
25
- top: 'top-[--line-offset] before:top-[--offset-terminal]',
26
- right: 'right-[--line-offset] before:right-[--offset-terminal]',
27
- bottom: 'bottom-[--line-offset] before:bottom-[--offset-terminal]',
28
- left: 'left-[--line-offset] before:left-[--offset-terminal]',
25
+ top: 'top-(--line-offset) before:top-(--offset-terminal)',
26
+ right: 'right-(--line-offset) before:right-(--offset-terminal)',
27
+ bottom: 'bottom-(--line-offset) before:bottom-(--offset-terminal)',
28
+ left: 'left-(--line-offset) before:left-(--offset-terminal)',
29
29
  };
30
30
 
31
31
  const strokeSize = 2;
@@ -64,7 +64,7 @@ export const ListDropIndicator = ({
64
64
  '--offset-terminal': `${offsetToAlignTerminalWithLine}px`,
65
65
  } as CSSProperties
66
66
  }
67
- className={`absolute z-10 pointer-events-none bg-accentSurface before:content-[''] before:w-[--terminal-size] before:h-[--terminal-size] box-border before:absolute before:border-[length:--line-thickness] before:border-solid before:border-accentSurface before:rounded-full ${orientationStyles[orientation]} ${edgeStyles[edge]}`}
67
+ className={`absolute z-10 pointer-events-none bg-accent-surface before:content-[''] before:w-(--terminal-size) before:h-(--terminal-size) box-border before:absolute before:border-[length:--line-thickness] before:border-solid before:border-accent-surface before:rounded-full ${orientationStyles[orientation]} ${edgeStyles[edge]}`}
68
68
  />
69
69
  );
70
70
  };