@dxos/react-ui 0.8.4-main.84f28bd → 0.8.4-main.8baae0fced

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 (504) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/browser/chunk-A5QCIG5R.mjs +24 -0
  4. package/dist/lib/browser/chunk-A5QCIG5R.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-LY5XDQR5.mjs +846 -0
  6. package/dist/lib/browser/chunk-LY5XDQR5.mjs.map +7 -0
  7. package/dist/lib/browser/index.mjs +4427 -61
  8. package/dist/lib/browser/index.mjs.map +4 -4
  9. package/dist/lib/browser/meta.json +1 -1
  10. package/dist/lib/browser/testing/index.mjs +106 -61
  11. package/dist/lib/browser/testing/index.mjs.map +4 -4
  12. package/dist/lib/browser/translations.mjs +9 -0
  13. package/dist/lib/browser/translations.mjs.map +7 -0
  14. package/dist/lib/node-esm/chunk-NGKLIKP3.mjs +848 -0
  15. package/dist/lib/node-esm/chunk-NGKLIKP3.mjs.map +7 -0
  16. package/dist/lib/node-esm/chunk-XCFLA74M.mjs +26 -0
  17. package/dist/lib/node-esm/chunk-XCFLA74M.mjs.map +7 -0
  18. package/dist/lib/node-esm/index.mjs +4427 -61
  19. package/dist/lib/node-esm/index.mjs.map +4 -4
  20. package/dist/lib/node-esm/meta.json +1 -1
  21. package/dist/lib/node-esm/testing/index.mjs +106 -61
  22. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  23. package/dist/lib/node-esm/translations.mjs +10 -0
  24. package/dist/lib/node-esm/translations.mjs.map +7 -0
  25. package/dist/types/src/components/Avatars/Avatar.d.ts +2 -2
  26. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  27. package/dist/types/src/components/Avatars/Avatar.stories.d.ts +5 -31
  28. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  29. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts +5 -11
  30. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  31. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +1 -1
  32. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  33. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts +8 -20
  34. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  35. package/dist/types/src/components/{Buttons → Button}/Button.d.ts +4 -4
  36. package/dist/types/src/components/Button/Button.d.ts.map +1 -0
  37. package/dist/types/src/components/Button/Button.stories.d.ts +17 -0
  38. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -0
  39. package/dist/types/src/components/{Buttons → Button}/IconButton.d.ts +5 -4
  40. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -0
  41. package/dist/types/src/components/Button/IconButton.stories.d.ts +16 -0
  42. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -0
  43. package/dist/types/src/components/{Buttons → Button}/Toggle.d.ts +2 -2
  44. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -0
  45. package/dist/types/src/components/Button/Toggle.stories.d.ts +16 -0
  46. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -0
  47. package/dist/types/src/components/Button/ToggleGroup.d.ts +27 -0
  48. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -0
  49. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +27 -0
  50. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -0
  51. package/dist/types/src/components/Button/index.d.ts.map +1 -0
  52. package/dist/types/src/components/Card/Card.d.ts +124 -0
  53. package/dist/types/src/components/Card/Card.d.ts.map +1 -0
  54. package/dist/types/src/components/Card/Card.stories.d.ts +21 -0
  55. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -0
  56. package/dist/types/src/components/Card/index.d.ts +2 -0
  57. package/dist/types/src/components/Card/index.d.ts.map +1 -0
  58. package/dist/types/src/components/Carousel/Carousel.d.ts +106 -0
  59. package/dist/types/src/components/Carousel/Carousel.d.ts.map +1 -0
  60. package/dist/types/src/components/Carousel/index.d.ts +2 -0
  61. package/dist/types/src/components/Carousel/index.d.ts.map +1 -0
  62. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  63. package/dist/types/src/components/Clipboard/CopyButton.d.ts +1 -1
  64. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  65. package/dist/types/src/components/Clipboard/index.d.ts +10 -1
  66. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  67. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts +1 -1
  68. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  69. package/dist/types/src/components/Dialog/AlertDialog.d.ts +51 -0
  70. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -0
  71. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts +11 -0
  72. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -0
  73. package/dist/types/src/components/Dialog/Dialog.d.ts +64 -0
  74. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -0
  75. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +25 -0
  76. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -0
  77. package/dist/types/src/components/Dialog/index.d.ts.map +1 -0
  78. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
  79. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  80. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts +11 -0
  81. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -0
  82. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts +7 -0
  83. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -0
  84. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +19 -0
  85. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -0
  86. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts +9 -0
  87. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -0
  88. package/dist/types/src/components/ErrorFallback/index.d.ts +5 -0
  89. package/dist/types/src/components/ErrorFallback/index.d.ts.map +1 -0
  90. package/dist/types/src/components/Focus/Focus.d.ts +36 -0
  91. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -0
  92. package/dist/types/src/components/Focus/Focus.stories.d.ts +9 -0
  93. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -0
  94. package/dist/types/src/components/Focus/index.d.ts +2 -0
  95. package/dist/types/src/components/Focus/index.d.ts.map +1 -0
  96. package/dist/types/src/components/Icon/Icon.d.ts +6 -2
  97. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  98. package/dist/types/src/components/Icon/Icon.stories.d.ts +25 -0
  99. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -0
  100. package/dist/types/src/components/Image/Image.d.ts +15 -0
  101. package/dist/types/src/components/Image/Image.d.ts.map +1 -0
  102. package/dist/types/src/components/Image/Image.stories.d.ts +34 -0
  103. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -0
  104. package/dist/types/src/components/Image/index.d.ts +2 -0
  105. package/dist/types/src/components/Image/index.d.ts.map +1 -0
  106. package/dist/types/src/components/Input/Input.d.ts +19 -24
  107. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  108. package/dist/types/src/components/Input/Input.stories.d.ts +17 -18
  109. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  110. package/dist/types/src/components/Link/Link.d.ts.map +1 -1
  111. package/dist/types/src/components/Link/Link.stories.d.ts +8 -8
  112. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  113. package/dist/types/src/components/{Lists → List}/List.d.ts +8 -6
  114. package/dist/types/src/components/List/List.d.ts.map +1 -0
  115. package/dist/types/src/components/List/List.stories.d.ts +16 -0
  116. package/dist/types/src/components/List/List.stories.d.ts.map +1 -0
  117. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -0
  118. package/dist/types/src/components/{Lists → List}/Tree.d.ts +3 -3
  119. package/dist/types/src/components/List/Tree.d.ts.map +1 -0
  120. package/dist/types/src/components/List/Tree.stories.d.ts +15 -0
  121. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -0
  122. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -0
  123. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts +6 -10
  124. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -0
  125. package/dist/types/src/components/List/Treegrid.stories.d.ts +12 -0
  126. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -0
  127. package/dist/types/src/components/List/index.d.ts.map +1 -0
  128. package/dist/types/src/components/Main/Main.d.ts +25 -31
  129. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  130. package/dist/types/src/components/Main/Main.stories.d.ts +6 -10
  131. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  132. package/dist/types/src/components/Main/useSwipeToDismiss.d.ts.map +1 -1
  133. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts +46 -0
  134. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts.map +1 -0
  135. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts +16 -0
  136. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts.map +1 -0
  137. package/dist/types/src/components/MediaPlayer/index.d.ts +2 -0
  138. package/dist/types/src/components/MediaPlayer/index.d.ts.map +1 -0
  139. package/dist/types/src/components/{Menus → Menu}/ContextMenu.d.ts +6 -6
  140. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -0
  141. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts +12 -0
  142. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -0
  143. package/dist/types/src/components/Menu/DropdownMenu.d.ts +121 -0
  144. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
  145. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +28 -0
  146. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
  147. package/dist/types/src/components/Menu/index.d.ts.map +1 -0
  148. package/dist/types/src/components/Message/Message.d.ts +2 -2
  149. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  150. package/dist/types/src/components/Message/Message.stories.d.ts +12 -22
  151. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  152. package/dist/types/src/components/Popover/Popover.d.ts +41 -24
  153. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  154. package/dist/types/src/components/Popover/Popover.stories.d.ts +6 -34
  155. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  156. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +27 -27
  157. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  158. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +50 -27
  159. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  160. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +68 -0
  161. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -0
  162. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +23 -0
  163. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -0
  164. package/dist/types/src/components/ScrollContainer/index.d.ts +2 -0
  165. package/dist/types/src/components/ScrollContainer/index.d.ts.map +1 -0
  166. package/dist/types/src/components/Select/Select.d.ts +10 -10
  167. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  168. package/dist/types/src/components/Select/Select.stories.d.ts +6 -11
  169. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  170. package/dist/types/src/components/Separator/Separator.d.ts +4 -4
  171. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  172. package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
  173. package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  174. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
  175. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  176. package/dist/types/src/components/Skeleton/index.d.ts +2 -0
  177. package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
  178. package/dist/types/src/components/Splitter/Splitter.d.ts +34 -0
  179. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
  180. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
  181. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
  182. package/dist/types/src/components/Splitter/index.d.ts +2 -0
  183. package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
  184. package/dist/types/src/components/Status/Status.d.ts +3 -4
  185. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  186. package/dist/types/src/components/Status/Status.stories.d.ts +6 -10
  187. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  188. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  189. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  190. package/dist/types/src/components/Tag/Tag.stories.d.ts +8 -13
  191. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  192. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +4 -4
  193. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  194. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts +12 -0
  195. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  196. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +55 -63
  197. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  198. package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
  199. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  200. package/dist/types/src/components/Toast/Toast.d.ts +20 -20
  201. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  202. package/dist/types/src/components/Toast/Toast.stories.d.ts +6 -44
  203. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  204. package/dist/types/src/components/Toolbar/Toolbar.d.ts +41 -23
  205. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  206. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +6 -50
  207. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  208. package/dist/types/src/components/Tooltip/Tooltip.d.ts +16 -18
  209. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  210. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +10 -63
  211. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  212. package/dist/types/src/components/index.d.ts +16 -8
  213. package/dist/types/src/components/index.d.ts.map +1 -1
  214. package/dist/types/src/exemplars/generics.stories.d.ts +19 -0
  215. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
  216. package/dist/types/src/exemplars/slot.stories.d.ts +15 -0
  217. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
  218. package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
  219. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
  220. package/dist/types/src/exemplars/virtualizer.stories.d.ts +11 -0
  221. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -0
  222. package/dist/types/src/hooks/index.d.ts +1 -0
  223. package/dist/types/src/hooks/index.d.ts.map +1 -1
  224. package/dist/types/src/hooks/useDensityContext.d.ts +2 -2
  225. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  226. package/dist/types/src/hooks/useElevationContext.d.ts +1 -1
  227. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  228. package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
  229. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  230. package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -1
  231. package/dist/types/src/hooks/useVisualViewport.d.ts +2 -2
  232. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  233. package/dist/types/src/index.d.ts +2 -1
  234. package/dist/types/src/index.d.ts.map +1 -1
  235. package/dist/types/src/playground/Controls.stories.d.ts +5 -9
  236. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  237. package/dist/types/src/playground/Custom.stories.d.ts +12 -4
  238. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  239. package/dist/types/src/playground/Typography.stories.d.ts +5 -11
  240. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  241. package/dist/types/src/primitives/Column/Column.d.ts +33 -0
  242. package/dist/types/src/primitives/Column/Column.d.ts.map +1 -0
  243. package/dist/types/src/primitives/Column/Column.stories.d.ts +25 -0
  244. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -0
  245. package/dist/types/src/primitives/Column/index.d.ts +2 -0
  246. package/dist/types/src/primitives/Column/index.d.ts.map +1 -0
  247. package/dist/types/src/primitives/Container/Container.d.ts +7 -0
  248. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
  249. package/dist/types/src/primitives/Container/Container.stories.d.ts +6 -0
  250. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
  251. package/dist/types/src/primitives/Container/index.d.ts +2 -0
  252. package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
  253. package/dist/types/src/primitives/Flex/Flex.d.ts +11 -0
  254. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
  255. package/dist/types/src/primitives/Flex/Flex.stories.d.ts +8 -0
  256. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -0
  257. package/dist/types/src/primitives/Flex/index.d.ts +2 -0
  258. package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
  259. package/dist/types/src/primitives/Grid/Grid.d.ts +10 -0
  260. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -0
  261. package/dist/types/src/primitives/Grid/Grid.stories.d.ts +8 -0
  262. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -0
  263. package/dist/types/src/primitives/Grid/index.d.ts +2 -0
  264. package/dist/types/src/primitives/Grid/index.d.ts.map +1 -0
  265. package/dist/types/src/primitives/Panel/Panel.d.ts +35 -0
  266. package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -0
  267. package/dist/types/src/primitives/Panel/Panel.stories.d.ts +6 -0
  268. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -0
  269. package/dist/types/src/primitives/Panel/index.d.ts +2 -0
  270. package/dist/types/src/primitives/Panel/index.d.ts.map +1 -0
  271. package/dist/types/src/primitives/index.d.ts +6 -0
  272. package/dist/types/src/primitives/index.d.ts.map +1 -0
  273. package/dist/types/src/testing/Loading.d.ts +9 -0
  274. package/dist/types/src/testing/Loading.d.ts.map +1 -0
  275. package/dist/types/src/testing/decorators/index.d.ts +2 -1
  276. package/dist/types/src/testing/decorators/index.d.ts.map +1 -1
  277. package/dist/types/src/testing/decorators/withLayout.d.ts +15 -0
  278. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -0
  279. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +12 -0
  280. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -0
  281. package/dist/types/src/testing/decorators/withTheme.d.ts +5 -1
  282. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  283. package/dist/types/src/testing/index.d.ts +1 -0
  284. package/dist/types/src/testing/index.d.ts.map +1 -1
  285. package/dist/types/src/translations.d.ts +16 -0
  286. package/dist/types/src/translations.d.ts.map +1 -0
  287. package/dist/types/src/util/index.d.ts +2 -1
  288. package/dist/types/src/util/index.d.ts.map +1 -1
  289. package/dist/types/src/util/usePx.d.ts +8 -0
  290. package/dist/types/src/util/usePx.d.ts.map +1 -0
  291. package/dist/types/tsconfig.tsbuildinfo +1 -1
  292. package/package.json +55 -40
  293. package/src/components/Avatars/Avatar.stories.tsx +23 -16
  294. package/src/components/Avatars/Avatar.tsx +10 -18
  295. package/src/components/Avatars/AvatarGroup.stories.tsx +11 -8
  296. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +19 -15
  297. package/src/components/Breadcrumb/Breadcrumb.tsx +14 -40
  298. package/src/components/{Buttons → Button}/Button.stories.tsx +11 -13
  299. package/src/components/{Buttons → Button}/Button.tsx +12 -26
  300. package/src/components/{Buttons → Button}/IconButton.stories.tsx +18 -13
  301. package/src/components/{Buttons → Button}/IconButton.tsx +22 -16
  302. package/src/components/Button/Toggle.stories.tsx +36 -0
  303. package/src/components/{Buttons → Button}/Toggle.tsx +4 -4
  304. package/src/components/{Buttons → Button}/ToggleGroup.stories.tsx +14 -12
  305. package/src/components/Button/ToggleGroup.tsx +50 -0
  306. package/src/components/Card/Card.stories.tsx +151 -0
  307. package/src/components/Card/Card.tsx +514 -0
  308. package/src/components/Card/index.ts +5 -0
  309. package/src/components/Carousel/Carousel.tsx +379 -0
  310. package/src/components/Carousel/index.ts +5 -0
  311. package/src/components/Clipboard/ClipboardProvider.tsx +1 -1
  312. package/src/components/Clipboard/CopyButton.tsx +11 -11
  313. package/src/components/DensityProvider/DensityProvider.tsx +2 -2
  314. package/src/components/Dialog/AlertDialog.stories.tsx +68 -0
  315. package/src/components/Dialog/AlertDialog.tsx +213 -0
  316. package/src/components/Dialog/Dialog.stories.tsx +177 -0
  317. package/src/components/Dialog/Dialog.tsx +285 -0
  318. package/src/components/ElevationProvider/ElevationProvider.tsx +2 -2
  319. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +45 -0
  320. package/src/components/ErrorFallback/ErrorFallback.tsx +70 -0
  321. package/src/components/ErrorFallback/ErrorStack.tsx +114 -0
  322. package/src/components/ErrorFallback/ThrowError.tsx +37 -0
  323. package/src/components/ErrorFallback/index.ts +9 -0
  324. package/src/components/Focus/AUDIT.md +43 -0
  325. package/src/components/Focus/Focus.stories.tsx +230 -0
  326. package/src/components/Focus/Focus.tsx +201 -0
  327. package/src/components/Focus/index.ts +5 -0
  328. package/src/components/Icon/Icon.stories.tsx +143 -0
  329. package/src/components/Icon/Icon.tsx +15 -4
  330. package/src/components/Image/Image.stories.tsx +86 -0
  331. package/src/components/Image/Image.tsx +246 -0
  332. package/src/components/Image/index.ts +5 -0
  333. package/src/components/Input/Input.stories.tsx +27 -49
  334. package/src/components/Input/Input.tsx +51 -87
  335. package/src/components/Link/Link.stories.tsx +11 -8
  336. package/src/components/Link/Link.tsx +11 -3
  337. package/src/components/{Lists → List}/List.stories.tsx +46 -48
  338. package/src/components/{Lists → List}/List.tsx +30 -35
  339. package/src/components/{Lists → List}/ListDropIndicator.tsx +7 -8
  340. package/src/components/{Lists → List}/Tree.stories.tsx +16 -14
  341. package/src/components/{Lists → List}/Tree.tsx +3 -3
  342. package/src/components/{Lists → List}/TreeDropIndicator.tsx +7 -7
  343. package/src/components/{Lists → List}/Treegrid.stories.tsx +39 -34
  344. package/src/components/List/Treegrid.tsx +188 -0
  345. package/src/components/Main/Main.stories.tsx +52 -27
  346. package/src/components/Main/Main.tsx +176 -105
  347. package/src/components/MediaPlayer/MediaPlayer.stories.tsx +50 -0
  348. package/src/components/MediaPlayer/MediaPlayer.tsx +153 -0
  349. package/src/components/MediaPlayer/index.ts +5 -0
  350. package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +12 -10
  351. package/src/components/{Menus → Menu}/ContextMenu.tsx +10 -33
  352. package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +13 -11
  353. package/src/components/{Menus → Menu}/DropdownMenu.tsx +157 -120
  354. package/src/components/Message/Message.stories.tsx +36 -18
  355. package/src/components/Message/Message.tsx +59 -33
  356. package/src/components/Popover/Popover.stories.tsx +18 -16
  357. package/src/components/Popover/Popover.tsx +124 -102
  358. package/src/components/ScrollArea/ScrollArea.stories.tsx +221 -33
  359. package/src/components/ScrollArea/ScrollArea.tsx +97 -79
  360. package/src/components/ScrollArea/index.ts +1 -1
  361. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +91 -0
  362. package/src/components/ScrollContainer/ScrollContainer.tsx +345 -0
  363. package/src/components/ScrollContainer/index.ts +5 -0
  364. package/src/components/Select/Select.stories.tsx +19 -17
  365. package/src/components/Select/Select.tsx +16 -32
  366. package/src/components/Separator/Separator.tsx +5 -8
  367. package/src/components/Skeleton/Skeleton.stories.tsx +51 -0
  368. package/src/components/Skeleton/Skeleton.tsx +26 -0
  369. package/src/components/Skeleton/index.ts +5 -0
  370. package/src/components/Splitter/Splitter.stories.tsx +83 -0
  371. package/src/components/Splitter/Splitter.tsx +127 -0
  372. package/src/components/Splitter/index.ts +5 -0
  373. package/src/components/Status/Status.stories.tsx +29 -23
  374. package/src/components/Status/Status.tsx +10 -7
  375. package/src/components/Tag/Tag.stories.tsx +16 -13
  376. package/src/components/Tag/Tag.tsx +3 -8
  377. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +31 -0
  378. package/src/components/ThemeProvider/ThemeProvider.tsx +12 -11
  379. package/src/components/ThemeProvider/TranslationsProvider.tsx +3 -18
  380. package/src/components/ThemeProvider/index.ts +3 -3
  381. package/src/components/Toast/Toast.stories.tsx +13 -11
  382. package/src/components/Toast/Toast.tsx +23 -42
  383. package/src/components/Toolbar/Toolbar.stories.tsx +22 -21
  384. package/src/components/Toolbar/Toolbar.tsx +190 -14
  385. package/src/components/Tooltip/Tooltip.stories.tsx +35 -30
  386. package/src/components/Tooltip/Tooltip.tsx +58 -54
  387. package/src/components/index.ts +17 -9
  388. package/src/exemplars/generics.stories.tsx +41 -0
  389. package/src/exemplars/slot.stories.tsx +115 -0
  390. package/src/exemplars/tabster.stories.tsx +127 -0
  391. package/src/exemplars/virtualizer.stories.tsx +136 -0
  392. package/src/hooks/index.ts +1 -0
  393. package/src/hooks/useDensityContext.ts +3 -3
  394. package/src/hooks/useElevationContext.ts +1 -1
  395. package/src/hooks/useSafeArea.ts +3 -2
  396. package/src/hooks/useSafeCollisionPadding.ts +1 -1
  397. package/src/hooks/useVisualViewport.ts +4 -4
  398. package/src/index.ts +2 -1
  399. package/src/playground/Controls.stories.tsx +20 -24
  400. package/src/playground/Custom.stories.tsx +20 -34
  401. package/src/playground/Typography.stories.tsx +11 -9
  402. package/src/primitives/Column/AUDIT.md +148 -0
  403. package/src/primitives/Column/Column.stories.tsx +181 -0
  404. package/src/primitives/Column/Column.tsx +165 -0
  405. package/src/primitives/Column/index.ts +5 -0
  406. package/src/primitives/Container/Container.stories.tsx +29 -0
  407. package/src/primitives/Container/Container.tsx +19 -0
  408. package/src/primitives/Container/index.ts +5 -0
  409. package/src/primitives/Flex/Flex.stories.tsx +57 -0
  410. package/src/primitives/Flex/Flex.tsx +27 -0
  411. package/src/primitives/Flex/index.ts +5 -0
  412. package/src/primitives/Grid/Grid.stories.tsx +56 -0
  413. package/src/primitives/Grid/Grid.tsx +30 -0
  414. package/src/primitives/Grid/index.ts +5 -0
  415. package/src/primitives/Panel/Panel.stories.tsx +68 -0
  416. package/src/primitives/Panel/Panel.tsx +120 -0
  417. package/src/primitives/Panel/index.ts +5 -0
  418. package/src/primitives/index.ts +9 -0
  419. package/src/testing/Loading.tsx +47 -0
  420. package/src/testing/decorators/index.ts +2 -1
  421. package/src/testing/decorators/withLayout.tsx +67 -0
  422. package/src/testing/decorators/withLayoutVariants.tsx +48 -0
  423. package/src/testing/decorators/withTheme.tsx +37 -0
  424. package/src/testing/index.ts +2 -0
  425. package/src/translations.ts +24 -0
  426. package/src/util/index.ts +3 -1
  427. package/src/util/usePx.ts +62 -0
  428. package/dist/lib/browser/chunk-T6YPS45E.mjs +0 -4376
  429. package/dist/lib/browser/chunk-T6YPS45E.mjs.map +0 -7
  430. package/dist/lib/node-esm/chunk-TYVQJ4KW.mjs +0 -4378
  431. package/dist/lib/node-esm/chunk-TYVQJ4KW.mjs.map +0 -7
  432. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +0 -15
  433. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +0 -1
  434. package/dist/types/src/components/AnchoredOverflow/index.d.ts +0 -2
  435. package/dist/types/src/components/AnchoredOverflow/index.d.ts.map +0 -1
  436. package/dist/types/src/components/Buttons/Button.d.ts.map +0 -1
  437. package/dist/types/src/components/Buttons/Button.stories.d.ts +0 -12
  438. package/dist/types/src/components/Buttons/Button.stories.d.ts.map +0 -1
  439. package/dist/types/src/components/Buttons/IconButton.d.ts.map +0 -1
  440. package/dist/types/src/components/Buttons/IconButton.stories.d.ts +0 -22
  441. package/dist/types/src/components/Buttons/IconButton.stories.d.ts.map +0 -1
  442. package/dist/types/src/components/Buttons/Toggle.d.ts.map +0 -1
  443. package/dist/types/src/components/Buttons/Toggle.stories.d.ts +0 -19
  444. package/dist/types/src/components/Buttons/Toggle.stories.d.ts.map +0 -1
  445. package/dist/types/src/components/Buttons/ToggleGroup.d.ts +0 -28
  446. package/dist/types/src/components/Buttons/ToggleGroup.d.ts.map +0 -1
  447. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts +0 -39
  448. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +0 -1
  449. package/dist/types/src/components/Buttons/index.d.ts.map +0 -1
  450. package/dist/types/src/components/Dialogs/AlertDialog.d.ts +0 -31
  451. package/dist/types/src/components/Dialogs/AlertDialog.d.ts.map +0 -1
  452. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts +0 -43
  453. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +0 -1
  454. package/dist/types/src/components/Dialogs/Dialog.d.ts +0 -31
  455. package/dist/types/src/components/Dialogs/Dialog.d.ts.map +0 -1
  456. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts +0 -48
  457. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +0 -1
  458. package/dist/types/src/components/Dialogs/index.d.ts.map +0 -1
  459. package/dist/types/src/components/Lists/List.d.ts.map +0 -1
  460. package/dist/types/src/components/Lists/List.stories.d.ts +0 -37
  461. package/dist/types/src/components/Lists/List.stories.d.ts.map +0 -1
  462. package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +0 -1
  463. package/dist/types/src/components/Lists/Tree.d.ts.map +0 -1
  464. package/dist/types/src/components/Lists/Tree.stories.d.ts +0 -41
  465. package/dist/types/src/components/Lists/Tree.stories.d.ts.map +0 -1
  466. package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +0 -1
  467. package/dist/types/src/components/Lists/Treegrid.d.ts.map +0 -1
  468. package/dist/types/src/components/Lists/Treegrid.stories.d.ts +0 -10
  469. package/dist/types/src/components/Lists/Treegrid.stories.d.ts.map +0 -1
  470. package/dist/types/src/components/Lists/index.d.ts.map +0 -1
  471. package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
  472. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts +0 -50
  473. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +0 -1
  474. package/dist/types/src/components/Menus/DropdownMenu.d.ts +0 -112
  475. package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
  476. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts +0 -50
  477. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
  478. package/dist/types/src/components/Menus/index.d.ts.map +0 -1
  479. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts +0 -12
  480. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts.map +0 -1
  481. package/dist/types/src/util/ThemedClassName.d.ts +0 -5
  482. package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
  483. package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +0 -59
  484. package/src/components/AnchoredOverflow/index.ts +0 -5
  485. package/src/components/Buttons/Toggle.stories.tsx +0 -33
  486. package/src/components/Buttons/ToggleGroup.tsx +0 -41
  487. package/src/components/Dialogs/AlertDialog.stories.tsx +0 -66
  488. package/src/components/Dialogs/AlertDialog.tsx +0 -172
  489. package/src/components/Dialogs/Dialog.stories.tsx +0 -65
  490. package/src/components/Dialogs/Dialog.tsx +0 -159
  491. package/src/components/Lists/Treegrid.tsx +0 -152
  492. package/src/testing/decorators/withSurfaceVariantsLayout.tsx +0 -51
  493. package/src/testing/decorators/withTheme.ts +0 -22
  494. package/src/util/ThemedClassName.ts +0 -7
  495. /package/dist/types/src/components/{Buttons → Button}/index.d.ts +0 -0
  496. /package/dist/types/src/components/{Dialogs → Dialog}/index.d.ts +0 -0
  497. /package/dist/types/src/components/{Lists → List}/ListDropIndicator.d.ts +0 -0
  498. /package/dist/types/src/components/{Lists → List}/TreeDropIndicator.d.ts +0 -0
  499. /package/dist/types/src/components/{Lists → List}/index.d.ts +0 -0
  500. /package/dist/types/src/components/{Menus → Menu}/index.d.ts +0 -0
  501. /package/src/components/{Buttons → Button}/index.ts +0 -0
  502. /package/src/components/{Dialogs → Dialog}/index.ts +0 -0
  503. /package/src/components/{Lists → List}/index.ts +0 -0
  504. /package/src/components/{Menus → Menu}/index.ts +0 -0
@@ -0,0 +1,246 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React, { type SyntheticEvent, useCallback, useRef, useState } from 'react';
6
+
7
+ import { type ThemedClassName } from '@dxos/react-ui';
8
+ import { mx } from '@dxos/ui-theme';
9
+
10
+ const cache = new Map<string, string>();
11
+
12
+ export type ImageProps = ThemedClassName<
13
+ {
14
+ src: string;
15
+ alt?: string;
16
+ fit?: 'contain' | 'cover';
17
+ crossOrigin?: 'anonymous' | 'use-credentials' | '';
18
+ } & ColorOptions
19
+ >;
20
+
21
+ export const Image = ({
22
+ classNames,
23
+ src,
24
+ alt = '',
25
+ fit = 'contain',
26
+ crossOrigin = 'anonymous',
27
+ sampleSize = 64,
28
+ contrast = 0.9,
29
+ }: ImageProps) => {
30
+ const [crossOriginState, setCrossOriginState] = useState<ImageProps['crossOrigin']>(crossOrigin);
31
+ const [dominantColor, setDominantColor] = useState<string | undefined>(undefined);
32
+ const [imageLoaded, setImageLoaded] = useState<boolean>(false);
33
+ const canvasRef = useRef<HTMLCanvasElement>(null);
34
+
35
+ // CORS not supported by server.
36
+ const handleImageError = (): void => {
37
+ setCrossOriginState(undefined);
38
+ };
39
+
40
+ const handleImageLoad = useCallback(
41
+ ({ target }: SyntheticEvent<HTMLImageElement>): void => {
42
+ const rgb = cache.get(src);
43
+ if (rgb) {
44
+ setDominantColor(rgb);
45
+ setImageLoaded(true);
46
+ return;
47
+ }
48
+
49
+ const img = target as HTMLImageElement;
50
+ if (!canvasRef.current) {
51
+ return;
52
+ }
53
+
54
+ try {
55
+ const color = extractDominantColor(canvasRef.current, img, { sampleSize, contrast });
56
+ if (color) {
57
+ const rgb = `rgb(${color[0]}, ${color[1]}, ${color[2]})`;
58
+ cache.set(src, rgb);
59
+ setDominantColor(rgb);
60
+ }
61
+ } catch {
62
+ setCrossOriginState(undefined);
63
+ }
64
+
65
+ setImageLoaded(true);
66
+ },
67
+ [sampleSize, contrast, src],
68
+ );
69
+
70
+ return (
71
+ <div
72
+ // `isolate` (`isolation: isolate`) creates a new stacking context so
73
+ // the inner <img>'s `z-10` stays scoped to this wrapper. Without it
74
+ // the z-10 leaks into the parent's stacking context and elevates the
75
+ // image above any pseudo-element rings (e.g. Focus.Item's
76
+ // `dx-ring-pseudo` `::after`) painted on ancestors — most visibly,
77
+ // the focus ring on a Card containing a Card.Poster.
78
+ className={mx(
79
+ `relative flex w-full justify-center overflow-hidden transition-all duration-700 isolate`,
80
+ classNames,
81
+ )}
82
+ style={{
83
+ backgroundColor: dominantColor,
84
+ }}
85
+ >
86
+ {/* Hidden canvas for color extraction. */}
87
+ <canvas ref={canvasRef} style={{ display: 'none' }} aria-hidden='true' />
88
+
89
+ {/* Background gradient overlay for smooth transition. */}
90
+ <div
91
+ className='absolute inset-0 pointer-events-none'
92
+ style={{
93
+ background: dominantColor
94
+ ? `radial-gradient(circle at center, transparent 30%, ${dominantColor} 100%)`
95
+ : undefined,
96
+ transition: 'opacity 0.7s ease-in-out',
97
+ opacity: 0.5,
98
+ }}
99
+ />
100
+
101
+ <img
102
+ src={src}
103
+ alt={alt}
104
+ crossOrigin={crossOriginState}
105
+ onError={handleImageError}
106
+ onLoad={handleImageLoad}
107
+ className={mx(
108
+ 'z-10 transition-opacity duration-500',
109
+ fit === 'cover' ? 'w-full h-full object-cover' : 'object-contain',
110
+ )}
111
+ style={{
112
+ opacity: imageLoaded ? 1 : 0,
113
+ }}
114
+ />
115
+ </div>
116
+ );
117
+ };
118
+
119
+ type ColorOptions = {
120
+ sampleSize?: number;
121
+ contrast?: number;
122
+ };
123
+
124
+ /**
125
+ * Get dominant color from image (esp. from corners).
126
+ */
127
+ const extractDominantColor = (
128
+ canvas: HTMLCanvasElement,
129
+ img: HTMLImageElement,
130
+ { sampleSize = 64, contrast = 0.95 }: ColorOptions,
131
+ ): [number, number, number] | null => {
132
+ const ctx = canvas.getContext('2d');
133
+ if (!ctx) {
134
+ return null;
135
+ }
136
+
137
+ // Draw the image scaled down.
138
+ canvas.width = sampleSize;
139
+ canvas.height = sampleSize;
140
+ ctx.drawImage(img, 0, 0, sampleSize, sampleSize);
141
+
142
+ // Get image data.
143
+ const imageData = ctx.getImageData(0, 0, sampleSize, sampleSize);
144
+ const pixels = imageData.data;
145
+
146
+ // Check for transparent background.
147
+ if (isTransparent(pixels, sampleSize)) {
148
+ return null;
149
+ }
150
+
151
+ let r = 0;
152
+ let g = 0;
153
+ let b = 0;
154
+ let totalWeight = 0;
155
+
156
+ // Define corner sampling areas (e.g., 25% of each dimension from each corner).
157
+ const cornerSize = Math.floor(sampleSize * 0.125);
158
+
159
+ // Sample only pixels in corner areas.
160
+ for (let y = 0; y < sampleSize; y++) {
161
+ for (let x = 0; x < sampleSize; x++) {
162
+ // Check if pixel is in any corner area.
163
+ const isInTopLeft = x < cornerSize && y < cornerSize;
164
+ const isInTopRight = x >= sampleSize - cornerSize && y < cornerSize;
165
+ const isInBottomLeft = x < cornerSize && y >= sampleSize - cornerSize;
166
+ const isInBottomRight = x >= sampleSize - cornerSize && y >= sampleSize - cornerSize;
167
+ if (!isInTopLeft && !isInTopRight && !isInBottomLeft && !isInBottomRight) {
168
+ continue; // Skip pixels not in corner areas.
169
+ }
170
+
171
+ const i = (y * sampleSize + x) * 4;
172
+ const red = pixels[i];
173
+ const green = pixels[i + 1];
174
+ const blue = pixels[i + 2];
175
+ const alpha = pixels[i + 3];
176
+
177
+ // Skip transparent pixels.
178
+ if (alpha === 0) {
179
+ continue;
180
+ }
181
+
182
+ // Calculate saturation to weight vibrant colors more.
183
+ const max = Math.max(red, green, blue);
184
+ const min = Math.min(red, green, blue);
185
+ const saturation = max === 0 ? 0 : (max - min) / max;
186
+ const weight = 1 + saturation * 2;
187
+
188
+ r += red * weight;
189
+ g += green * weight;
190
+ b += blue * weight;
191
+ totalWeight += weight;
192
+ }
193
+ }
194
+
195
+ if (totalWeight > 0) {
196
+ // Slightly darken the color for better contrast.
197
+ r = Math.round(Math.round(r / totalWeight) * contrast);
198
+ g = Math.round(Math.round(g / totalWeight) * contrast);
199
+ b = Math.round(Math.round(b / totalWeight) * contrast);
200
+ return [r, g, b];
201
+ }
202
+
203
+ return null;
204
+ };
205
+
206
+ /**
207
+ * Detects if an image has a transparent background by examining edge pixels.
208
+ * @param pixels - Image pixel data from canvas
209
+ * @param sampleSize - Size of the sampled image
210
+ * @param threshold - Percentage threshold for considering background transparent (default: 0.5)
211
+ * @returns True if the image has a transparent background
212
+ */
213
+ const isTransparent = (pixels: Uint8ClampedArray, sampleSize: number, threshold: number = 0.5): boolean => {
214
+ let edgeTransparentPixels = 0;
215
+ const edgePixels = sampleSize * 4 - 4; // Perimeter minus corners counted twice.
216
+
217
+ for (let x = 0; x < sampleSize; x++) {
218
+ // Top edge.
219
+ const topIndex = x * 4;
220
+ if (pixels[topIndex + 3] === 0) {
221
+ edgeTransparentPixels++;
222
+ }
223
+
224
+ // Bottom edge.
225
+ const bottomIndex = ((sampleSize - 1) * sampleSize + x) * 4;
226
+ if (pixels[bottomIndex + 3] === 0) {
227
+ edgeTransparentPixels++;
228
+ }
229
+ }
230
+
231
+ for (let y = 1; y < sampleSize - 1; y++) {
232
+ // Left edge.
233
+ const leftIndex = y * sampleSize * 4;
234
+ if (pixels[leftIndex + 3] === 0) {
235
+ edgeTransparentPixels++;
236
+ }
237
+
238
+ // Right edge.
239
+ const rightIndex = (y * sampleSize + sampleSize - 1) * 4;
240
+ if (pixels[rightIndex + 3] === 0) {
241
+ edgeTransparentPixels++;
242
+ }
243
+ }
244
+
245
+ return edgeTransparentPixels / edgePixels > threshold;
246
+ };
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './Image';
@@ -2,23 +2,20 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
- import { type StoryObj, type Meta } from '@storybook/react-vite';
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
  import React from 'react';
9
7
 
10
- import { baseSurface, modalSurface, activeSurface, mx, surfaceShadow } from '@dxos/react-ui-theme';
11
- import { type MessageValence } from '@dxos/react-ui-types';
8
+ import { type MessageValence } from '@dxos/ui-types';
12
9
 
10
+ import { withLayoutVariants, withTheme } from '../../testing';
13
11
  import {
14
12
  type CheckboxProps,
15
13
  Input,
16
14
  type PinInputProps,
17
15
  type SwitchProps,
18
- type TextInputProps,
19
16
  type TextAreaProps,
17
+ type TextInputProps,
20
18
  } from './Input';
21
- import { withTheme } from '../../testing';
22
19
 
23
20
  type VariantMap = {
24
21
  text: TextInputProps;
@@ -30,7 +27,7 @@ type VariantMap = {
30
27
 
31
28
  type Variant = { [K in keyof VariantMap]: { type: K } & VariantMap[K] }[keyof VariantMap];
32
29
 
33
- type BaseProps = Partial<{
30
+ type DefaultStoryProps = Partial<{
34
31
  kind: keyof VariantMap;
35
32
  label: string;
36
33
  labelVisuallyHidden: boolean;
@@ -40,7 +37,7 @@ type BaseProps = Partial<{
40
37
  validationMessage: string;
41
38
  }>;
42
39
 
43
- const Wrapper = ({
40
+ const DefaultStory = ({
44
41
  kind,
45
42
  label,
46
43
  description,
@@ -49,7 +46,7 @@ const Wrapper = ({
49
46
  validationValence,
50
47
  validationMessage,
51
48
  ...props
52
- }: BaseProps) => {
49
+ }: DefaultStoryProps) => {
53
50
  return (
54
51
  <Input.Root {...{ validationValence }}>
55
52
  <Input.Label srOnly={labelVisuallyHidden}>{label}</Input.Label>
@@ -61,49 +58,28 @@ const Wrapper = ({
61
58
  {kind === 'switch' && <Input.Switch {...props} />}
62
59
 
63
60
  <Input.DescriptionAndValidation srOnly={descriptionVisuallyHidden}>
64
- {validationMessage && (
65
- <>
66
- <Input.Validation>{validationMessage}</Input.Validation>{' '}
67
- </>
68
- )}
61
+ {validationMessage && <Input.Validation classNames='block'>{validationMessage}</Input.Validation>}
69
62
  <Input.Description>{description}</Input.Description>
70
63
  </Input.DescriptionAndValidation>
71
64
  </Input.Root>
72
65
  );
73
66
  };
74
67
 
75
- const DefaultStory = (props: BaseProps) => {
76
- return (
77
- <div className='space-b-4'>
78
- <div className={mx(baseSurface, 'p-4')}>
79
- <Wrapper {...props} />
80
- </div>
81
- <div className={mx(activeSurface, 'p-4 rounded-md', surfaceShadow({ elevation: 'positioned' }))}>
82
- <Wrapper {...props} />
83
- </div>
84
- <div className={mx(modalSurface, 'p-4 rounded-md', surfaceShadow({ elevation: 'dialog' }))}>
85
- <Wrapper {...props} />
86
- </div>
87
- </div>
88
- );
89
- };
90
-
91
- const meta: Meta<BaseProps> = {
92
- title: 'ui/react-ui-core/Input',
93
- component: Input.Root,
68
+ const meta = {
69
+ title: 'ui/react-ui-core/components/Input',
70
+ component: Input.Root as any,
94
71
  render: DefaultStory,
95
- decorators: [withTheme],
96
- parameters: { chromatic: { disableSnapshot: false } },
97
- };
72
+ decorators: [withTheme(), withLayoutVariants()],
73
+ } satisfies Meta<typeof DefaultStory>;
98
74
 
99
75
  export default meta;
100
76
 
101
- type Story = StoryObj<BaseProps & Variant>;
77
+ type Story = StoryObj<DefaultStoryProps & Variant>;
102
78
 
103
- export const Default: Story = {
79
+ export const DensityCoarse: Story = {
104
80
  args: {
105
81
  kind: 'text',
106
- label: 'Hello',
82
+ label: 'Input value',
107
83
  placeholder: 'This is an input',
108
84
  disabled: false,
109
85
  description: undefined,
@@ -111,13 +87,14 @@ export const Default: Story = {
111
87
  descriptionVisuallyHidden: false,
112
88
  validationMessage: '',
113
89
  validationValence: undefined,
90
+ density: 'coarse',
114
91
  },
115
92
  };
116
93
 
117
94
  export const DensityFine: Story = {
118
95
  args: {
119
96
  kind: 'text',
120
- label: 'This is an Input with a density value of ‘fine’',
97
+ label: 'Input value',
121
98
  placeholder: 'This is a density:fine input',
122
99
  disabled: false,
123
100
  description: undefined,
@@ -132,7 +109,7 @@ export const DensityFine: Story = {
132
109
  export const Subdued: Story = {
133
110
  args: {
134
111
  kind: 'text',
135
- label: 'Hello',
112
+ label: 'Input value',
136
113
  placeholder: 'This is a subdued input',
137
114
  disabled: false,
138
115
  description: undefined,
@@ -162,7 +139,7 @@ export const LabelVisuallyHidden: Story = {
162
139
  },
163
140
  };
164
141
 
165
- export const InputWithDescription: Story = {
142
+ export const WithDescription: Story = {
166
143
  args: {
167
144
  kind: 'text',
168
145
  label: 'Described input',
@@ -171,7 +148,7 @@ export const InputWithDescription: Story = {
171
148
  },
172
149
  };
173
150
 
174
- export const InputWithErrorAndDescription: Story = {
151
+ export const WithErrorAndDescription: Story = {
175
152
  args: {
176
153
  kind: 'text',
177
154
  label: 'Described invalid input',
@@ -182,7 +159,7 @@ export const InputWithErrorAndDescription: Story = {
182
159
  },
183
160
  };
184
161
 
185
- export const InputWithValidationAndDescription: Story = {
162
+ export const WithValidationAndDescription: Story = {
186
163
  args: {
187
164
  kind: 'text',
188
165
  label: 'Described input with validation message',
@@ -208,7 +185,8 @@ export const PinInput: Story = {
208
185
  label: 'This input is a PIN-style input',
209
186
  length: 6,
210
187
  description: 'Type in secret you received',
211
- placeholder: '••••••',
188
+ pattern: '\\d*',
189
+ density: 'coarse',
212
190
  },
213
191
  };
214
192
 
@@ -216,15 +194,15 @@ export const Checkbox: Story = {
216
194
  args: {
217
195
  kind: 'checkbox',
218
196
  label: 'This is a checkbox',
219
- description: 'It’s checked, indeterminate, or unchecked',
197
+ description: 'Checked, indeterminate, or unchecked',
220
198
  size: 5,
221
199
  },
222
200
  };
223
201
 
224
- export const Switch = {
202
+ export const Switch: Story = {
225
203
  args: {
226
204
  kind: 'switch',
227
205
  label: 'This is a switch',
228
- description: 'It’s either off... or on.',
206
+ description: 'On or off',
229
207
  },
230
208
  };