@dxos/react-ui 0.8.4-staging.ac66bdf99f → 0.9.1-main.c7dcc2e112

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 (496) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/browser/chunk-F3PLXTDA.mjs +1608 -0
  4. package/dist/lib/browser/chunk-F3PLXTDA.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-HFJYTGHU.mjs +43 -0
  6. package/dist/lib/browser/chunk-HFJYTGHU.mjs.map +7 -0
  7. package/dist/lib/browser/index.mjs +3785 -2451
  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 +14 -17
  11. package/dist/lib/browser/testing/index.mjs.map +3 -3
  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-LLVUYLAM.mjs +1610 -0
  15. package/dist/lib/node-esm/chunk-LLVUYLAM.mjs.map +7 -0
  16. package/dist/lib/node-esm/chunk-OJYUPUCY.mjs +45 -0
  17. package/dist/lib/node-esm/chunk-OJYUPUCY.mjs.map +7 -0
  18. package/dist/lib/node-esm/index.mjs +3785 -2451
  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 +14 -17
  22. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  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.map +1 -1
  26. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  27. package/dist/types/src/components/Avatars/Avatar.theme.d.ts +11 -0
  28. package/dist/types/src/components/Avatars/Avatar.theme.d.ts.map +1 -0
  29. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  30. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +5 -1
  31. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  32. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  33. package/dist/types/src/components/Breadcrumb/Breadcrumb.theme.d.ts +4 -0
  34. package/dist/types/src/components/Breadcrumb/Breadcrumb.theme.d.ts.map +1 -0
  35. package/dist/types/src/components/Button/Button.d.ts +3 -1
  36. package/dist/types/src/components/Button/Button.d.ts.map +1 -1
  37. package/dist/types/src/components/Button/Button.stories.d.ts +1 -1
  38. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -1
  39. package/dist/types/src/components/Button/Button.theme.d.ts +11 -0
  40. package/dist/types/src/components/Button/Button.theme.d.ts.map +1 -0
  41. package/dist/types/src/components/Button/IconButton.d.ts +1 -1
  42. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
  43. package/dist/types/src/components/Button/IconButton.stories.d.ts +35 -0
  44. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
  45. package/dist/types/src/components/Button/IconButton.theme.d.ts +8 -0
  46. package/dist/types/src/components/Button/IconButton.theme.d.ts.map +1 -0
  47. package/dist/types/src/components/Button/SystemIconButton.d.ts +20 -0
  48. package/dist/types/src/components/Button/SystemIconButton.d.ts.map +1 -0
  49. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -1
  50. package/dist/types/src/components/Button/ToggleGroup.d.ts +2 -2
  51. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +2 -2
  52. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -1
  53. package/dist/types/src/components/Button/ToggleIconButton.d.ts +15 -0
  54. package/dist/types/src/components/Button/ToggleIconButton.d.ts.map +1 -0
  55. package/dist/types/src/components/Button/index.d.ts +2 -0
  56. package/dist/types/src/components/Button/index.d.ts.map +1 -1
  57. package/dist/types/src/components/Calendar/Calendar.d.ts +33 -0
  58. package/dist/types/src/components/Calendar/Calendar.d.ts.map +1 -0
  59. package/dist/types/src/components/Calendar/Calendar.stories.d.ts +9 -0
  60. package/dist/types/src/components/Calendar/Calendar.stories.d.ts.map +1 -0
  61. package/dist/types/src/components/Calendar/Calendar.theme.d.ts +4 -0
  62. package/dist/types/src/components/Calendar/Calendar.theme.d.ts.map +1 -0
  63. package/dist/types/src/components/Calendar/index.d.ts +2 -0
  64. package/dist/types/src/components/Calendar/index.d.ts.map +1 -0
  65. package/dist/types/src/components/Card/Card.d.ts +67 -55
  66. package/dist/types/src/components/Card/Card.d.ts.map +1 -1
  67. package/dist/types/src/components/Card/Card.stories.d.ts +2 -1
  68. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -1
  69. package/dist/types/src/components/Card/Card.theme.d.ts +12 -0
  70. package/dist/types/src/components/Card/Card.theme.d.ts.map +1 -0
  71. package/dist/types/src/components/Carousel/Carousel.d.ts +106 -0
  72. package/dist/types/src/components/Carousel/Carousel.d.ts.map +1 -0
  73. package/dist/types/src/components/Carousel/Carousel.stories.d.ts +14 -0
  74. package/dist/types/src/components/Carousel/Carousel.stories.d.ts.map +1 -0
  75. package/dist/types/src/components/Carousel/index.d.ts +2 -0
  76. package/dist/types/src/components/Carousel/index.d.ts.map +1 -0
  77. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  78. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  79. package/dist/types/src/components/Clipboard/index.d.ts +2 -1
  80. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  81. package/dist/types/src/components/Column/Column.d.ts +51 -0
  82. package/dist/types/src/components/Column/Column.d.ts.map +1 -0
  83. package/dist/types/src/components/Column/Column.stories.d.ts.map +1 -0
  84. package/dist/types/src/components/Column/Column.theme.d.ts +17 -0
  85. package/dist/types/src/components/Column/Column.theme.d.ts.map +1 -0
  86. package/dist/types/src/components/Column/index.d.ts +3 -0
  87. package/dist/types/src/components/Column/index.d.ts.map +1 -0
  88. package/dist/types/src/components/Column/withColumn.d.ts +21 -0
  89. package/dist/types/src/components/Column/withColumn.d.ts.map +1 -0
  90. package/dist/types/src/components/DatePicker/DatePicker.d.ts +72 -0
  91. package/dist/types/src/components/DatePicker/DatePicker.d.ts.map +1 -0
  92. package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts +10 -0
  93. package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts.map +1 -0
  94. package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts +6 -0
  95. package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts.map +1 -0
  96. package/dist/types/src/components/DatePicker/index.d.ts +2 -0
  97. package/dist/types/src/components/DatePicker/index.d.ts.map +1 -0
  98. package/dist/types/src/components/Dialog/AlertDialog.d.ts +20 -20
  99. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
  100. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -1
  101. package/dist/types/src/components/Dialog/Dialog.d.ts +21 -19
  102. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  103. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
  104. package/dist/types/src/components/Dialog/Dialog.theme.d.ts +10 -0
  105. package/dist/types/src/components/Dialog/Dialog.theme.d.ts.map +1 -0
  106. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -1
  107. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -1
  108. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -1
  109. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -1
  110. package/dist/types/src/components/Focus/Focus.d.ts +2 -2
  111. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -1
  112. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -1
  113. package/dist/types/src/components/Focus/Focus.theme.d.ts +6 -0
  114. package/dist/types/src/components/Focus/Focus.theme.d.ts.map +1 -0
  115. package/dist/types/src/components/Icon/Icon.d.ts +1 -0
  116. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  117. package/dist/types/src/components/Icon/Icon.stories.d.ts +1 -1
  118. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -1
  119. package/dist/types/src/components/Icon/Icon.theme.d.ts +11 -0
  120. package/dist/types/src/components/Icon/Icon.theme.d.ts.map +1 -0
  121. package/dist/types/src/components/Icon/IconBlock.d.ts +15 -0
  122. package/dist/types/src/components/Icon/IconBlock.d.ts.map +1 -0
  123. package/dist/types/src/components/Icon/index.d.ts +1 -0
  124. package/dist/types/src/components/Icon/index.d.ts.map +1 -1
  125. package/dist/types/src/components/Image/Image.d.ts +8 -1
  126. package/dist/types/src/components/Image/Image.d.ts.map +1 -1
  127. package/dist/types/src/components/Image/Image.stories.d.ts +3 -2
  128. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -1
  129. package/dist/types/src/components/Input/Input.d.ts +88 -13
  130. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  131. package/dist/types/src/components/Input/Input.stories.d.ts +14 -3
  132. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  133. package/dist/types/src/components/Input/Input.theme.d.ts +115 -0
  134. package/dist/types/src/components/Input/Input.theme.d.ts.map +1 -0
  135. package/dist/types/src/components/Input/SegmentedInput.d.ts +79 -0
  136. package/dist/types/src/components/Input/SegmentedInput.d.ts.map +1 -0
  137. package/dist/types/src/components/Input/constants.d.ts +5 -0
  138. package/dist/types/src/components/Input/constants.d.ts.map +1 -0
  139. package/dist/types/src/components/Input/index.d.ts +2 -0
  140. package/dist/types/src/components/Input/index.d.ts.map +1 -1
  141. package/dist/types/src/components/Link/Link.d.ts.map +1 -1
  142. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  143. package/dist/types/src/components/Link/Link.theme.d.ts +6 -0
  144. package/dist/types/src/components/Link/Link.theme.d.ts.map +1 -0
  145. package/dist/types/src/components/List/List.d.ts +2 -2
  146. package/dist/types/src/components/List/List.d.ts.map +1 -1
  147. package/dist/types/src/components/List/List.stories.d.ts +1 -1
  148. package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
  149. package/dist/types/src/components/List/List.theme.d.ts +7 -0
  150. package/dist/types/src/components/List/List.theme.d.ts.map +1 -0
  151. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -1
  152. package/dist/types/src/components/List/Tree.d.ts +2 -2
  153. package/dist/types/src/components/List/Tree.d.ts.map +1 -1
  154. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -1
  155. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -1
  156. package/dist/types/src/components/List/Treegrid.d.ts +2 -2
  157. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
  158. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -1
  159. package/dist/types/src/components/List/Treegrid.theme.d.ts +7 -0
  160. package/dist/types/src/components/List/Treegrid.theme.d.ts.map +1 -0
  161. package/dist/types/src/components/Main/Main.d.ts +9 -5
  162. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  163. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  164. package/dist/types/src/components/Main/Main.theme.d.ts +20 -0
  165. package/dist/types/src/components/Main/Main.theme.d.ts.map +1 -0
  166. package/dist/types/src/components/Main/constants.d.ts +3 -0
  167. package/dist/types/src/components/Main/constants.d.ts.map +1 -0
  168. package/dist/types/src/components/Main/index.d.ts +1 -0
  169. package/dist/types/src/components/Main/index.d.ts.map +1 -1
  170. package/dist/types/src/components/Main/useSwipeToDismiss.d.ts.map +1 -1
  171. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts +47 -0
  172. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts.map +1 -0
  173. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts +16 -0
  174. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts.map +1 -0
  175. package/dist/types/src/components/MediaPlayer/index.d.ts +2 -0
  176. package/dist/types/src/components/MediaPlayer/index.d.ts.map +1 -0
  177. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
  178. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -1
  179. package/dist/types/src/components/Menu/DropdownMenu.d.ts +11 -3
  180. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
  181. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -1
  182. package/dist/types/src/components/Menu/Menu.theme.d.ts +7 -0
  183. package/dist/types/src/components/Menu/Menu.theme.d.ts.map +1 -0
  184. package/dist/types/src/components/Message/Message.d.ts +3 -3
  185. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  186. package/dist/types/src/components/Message/Message.stories.d.ts +5 -1
  187. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  188. package/dist/types/src/components/Message/Message.theme.d.ts +7 -0
  189. package/dist/types/src/components/Message/Message.theme.d.ts.map +1 -0
  190. package/dist/types/src/{primitives → components}/Panel/Panel.d.ts +5 -5
  191. package/dist/types/src/components/Panel/Panel.d.ts.map +1 -0
  192. package/dist/types/src/components/Panel/Panel.stories.d.ts.map +1 -0
  193. package/dist/types/src/components/Panel/Panel.theme.d.ts +13 -0
  194. package/dist/types/src/components/Panel/Panel.theme.d.ts.map +1 -0
  195. package/dist/types/src/components/Panel/index.d.ts.map +1 -0
  196. package/dist/types/src/components/Popover/Popover.d.ts +10 -2
  197. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  198. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  199. package/dist/types/src/components/Popover/Popover.theme.d.ts +8 -0
  200. package/dist/types/src/components/Popover/Popover.theme.d.ts.map +1 -0
  201. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +2 -2
  202. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  203. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +2 -2
  204. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  205. package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts +17 -0
  206. package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts.map +1 -0
  207. package/dist/types/src/components/ScrollArea/index.d.ts +1 -0
  208. package/dist/types/src/components/ScrollArea/index.d.ts.map +1 -1
  209. package/dist/types/src/components/ScrollArea/scrollbar.d.ts +18 -0
  210. package/dist/types/src/components/ScrollArea/scrollbar.d.ts.map +1 -0
  211. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +20 -18
  212. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  213. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
  214. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  215. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  216. package/dist/types/src/components/Select/Select.theme.d.ts +6 -0
  217. package/dist/types/src/components/Select/Select.theme.d.ts.map +1 -0
  218. package/dist/types/src/components/Separator/Separator.theme.d.ts +7 -0
  219. package/dist/types/src/components/Separator/Separator.theme.d.ts.map +1 -0
  220. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -1
  221. package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts +6 -0
  222. package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts.map +1 -0
  223. package/dist/types/src/components/Splitter/Splitter.d.ts +6 -8
  224. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -1
  225. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -1
  226. package/dist/types/src/components/Splitter/Splitter.theme.d.ts +4 -0
  227. package/dist/types/src/components/Splitter/Splitter.theme.d.ts.map +1 -0
  228. package/dist/types/src/components/Status/Status.d.ts +1 -1
  229. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  230. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  231. package/dist/types/src/components/Status/Status.theme.d.ts +7 -0
  232. package/dist/types/src/components/Status/Status.theme.d.ts.map +1 -0
  233. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  234. package/dist/types/src/components/Tag/Tag.theme.d.ts +6 -0
  235. package/dist/types/src/components/Tag/Tag.theme.d.ts.map +1 -0
  236. package/dist/types/src/components/Toast/Toast.d.ts +12 -9
  237. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  238. package/dist/types/src/components/Toast/Toast.stories.d.ts +5 -2
  239. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  240. package/dist/types/src/components/Toast/Toast.theme.d.ts +4 -0
  241. package/dist/types/src/components/Toast/Toast.theme.d.ts.map +1 -0
  242. package/dist/types/src/components/Toolbar/Toolbar.d.ts +24 -12
  243. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  244. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  245. package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts +8 -0
  246. package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts.map +1 -0
  247. package/dist/types/src/components/Tooltip/TextTooltip.d.ts +19 -0
  248. package/dist/types/src/components/Tooltip/TextTooltip.d.ts.map +1 -0
  249. package/dist/types/src/components/Tooltip/Tooltip.d.ts +8 -8
  250. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  251. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  252. package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts +6 -0
  253. package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts.map +1 -0
  254. package/dist/types/src/components/Tooltip/index.d.ts +2 -0
  255. package/dist/types/src/components/Tooltip/index.d.ts.map +1 -1
  256. package/dist/types/src/components/Tooltip/tooltipContent.d.ts +4 -0
  257. package/dist/types/src/components/Tooltip/tooltipContent.d.ts.map +1 -0
  258. package/dist/types/src/components/index.d.ts +7 -4
  259. package/dist/types/src/components/index.d.ts.map +1 -1
  260. package/dist/types/src/exemplars/generics.stories.d.ts +1 -1
  261. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -1
  262. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -1
  263. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -1
  264. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -1
  265. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  266. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  267. package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
  268. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  269. package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -1
  270. package/dist/types/src/hooks/useTranslationsContext.d.ts +1 -1
  271. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  272. package/dist/types/src/index.d.ts +1 -0
  273. package/dist/types/src/index.d.ts.map +1 -1
  274. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  275. package/dist/types/src/playground/Custom.stories.d.ts +1 -1
  276. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  277. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  278. package/dist/types/src/primitives/Container/Container.d.ts +1 -1
  279. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -1
  280. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -1
  281. package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts.map +1 -1
  282. package/dist/types/src/primitives/DensityProvider/index.d.ts.map +1 -0
  283. package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  284. package/dist/types/src/primitives/ElevationProvider/index.d.ts.map +1 -0
  285. package/dist/types/src/primitives/Flex/Flex.d.ts +1 -1
  286. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -1
  287. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -1
  288. package/dist/types/src/primitives/Grid/Grid.d.ts +1 -1
  289. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -1
  290. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -1
  291. package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  292. package/dist/types/src/primitives/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  293. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts +128 -0
  294. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts.map +1 -0
  295. package/dist/types/src/primitives/ThemeProvider/index.d.ts +4 -0
  296. package/dist/types/src/primitives/ThemeProvider/index.d.ts.map +1 -0
  297. package/dist/types/src/primitives/index.d.ts +3 -2
  298. package/dist/types/src/primitives/index.d.ts.map +1 -1
  299. package/dist/types/src/testing/Loading.d.ts.map +1 -1
  300. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
  301. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
  302. package/dist/types/src/testing/decorators/withTheme.d.ts +5 -1
  303. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  304. package/dist/types/src/theme/bindTheme.d.ts +3 -0
  305. package/dist/types/src/theme/bindTheme.d.ts.map +1 -0
  306. package/dist/types/src/theme/defaultTheme.d.ts +4 -0
  307. package/dist/types/src/theme/defaultTheme.d.ts.map +1 -0
  308. package/dist/types/src/theme/index.d.ts +31 -0
  309. package/dist/types/src/theme/index.d.ts.map +1 -0
  310. package/dist/types/src/translations.d.ts +27 -3
  311. package/dist/types/src/translations.d.ts.map +1 -1
  312. package/dist/types/src/util/index.d.ts +2 -1
  313. package/dist/types/src/util/index.d.ts.map +1 -1
  314. package/dist/types/src/util/mobile.d.ts +5 -0
  315. package/dist/types/src/util/mobile.d.ts.map +1 -0
  316. package/dist/types/src/util/slots.d.ts +57 -0
  317. package/dist/types/src/util/slots.d.ts.map +1 -0
  318. package/dist/types/src/util/usePx.d.ts.map +1 -1
  319. package/dist/types/tsconfig.tsbuildinfo +1 -1
  320. package/package.json +29 -25
  321. package/src/components/Avatars/Avatar.theme.ts +93 -0
  322. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +1 -1
  323. package/src/components/Breadcrumb/Breadcrumb.theme.ts +26 -0
  324. package/src/components/Breadcrumb/Breadcrumb.tsx +14 -2
  325. package/src/components/Button/Button.theme.ts +31 -0
  326. package/src/components/Button/Button.tsx +25 -4
  327. package/src/components/Button/IconButton.stories.tsx +132 -4
  328. package/src/components/Button/IconButton.theme.ts +21 -0
  329. package/src/components/Button/IconButton.tsx +3 -4
  330. package/src/components/Button/SystemIconButton.tsx +153 -0
  331. package/src/components/Button/ToggleIconButton.tsx +32 -0
  332. package/src/components/Button/index.ts +2 -0
  333. package/src/components/Calendar/Calendar.stories.tsx +43 -0
  334. package/src/components/Calendar/Calendar.theme.ts +74 -0
  335. package/src/components/Calendar/Calendar.tsx +196 -0
  336. package/src/components/Calendar/index.ts +5 -0
  337. package/src/components/Card/Card.stories.tsx +109 -46
  338. package/src/components/Card/Card.theme.ts +111 -0
  339. package/src/components/Card/Card.tsx +281 -212
  340. package/src/components/Carousel/Carousel.stories.tsx +47 -0
  341. package/src/components/Carousel/Carousel.tsx +373 -0
  342. package/src/components/Carousel/index.ts +5 -0
  343. package/src/components/Clipboard/CopyButton.tsx +3 -3
  344. package/src/{primitives → components}/Column/Column.stories.tsx +1 -1
  345. package/src/components/Column/Column.theme.ts +76 -0
  346. package/src/{primitives → components}/Column/Column.tsx +38 -2
  347. package/src/{primitives → components}/Column/index.ts +1 -0
  348. package/src/components/Column/withColumn.ts +27 -0
  349. package/src/components/DatePicker/DatePicker.stories.tsx +102 -0
  350. package/src/components/DatePicker/DatePicker.theme.ts +35 -0
  351. package/src/components/DatePicker/DatePicker.tsx +279 -0
  352. package/src/components/DatePicker/index.ts +5 -0
  353. package/src/components/Dialog/AlertDialog.tsx +12 -16
  354. package/src/components/Dialog/Dialog.stories.tsx +2 -2
  355. package/src/components/Dialog/Dialog.theme.ts +61 -0
  356. package/src/components/Dialog/Dialog.tsx +46 -17
  357. package/src/components/ErrorFallback/ErrorFallback.tsx +14 -8
  358. package/src/components/ErrorFallback/ErrorStack.tsx +12 -6
  359. package/src/components/Focus/Focus.theme.ts +32 -0
  360. package/src/components/Focus/Focus.tsx +1 -1
  361. package/src/components/Icon/Icon.theme.ts +45 -0
  362. package/src/components/Icon/Icon.tsx +10 -3
  363. package/src/components/Icon/IconBlock.tsx +38 -0
  364. package/src/components/Icon/index.ts +1 -0
  365. package/src/components/Image/Image.stories.tsx +1 -1
  366. package/src/components/Image/Image.tsx +38 -9
  367. package/src/components/Input/Input.stories.tsx +132 -29
  368. package/src/components/Input/Input.theme.ts +191 -0
  369. package/src/components/Input/Input.tsx +208 -2
  370. package/src/components/Input/SegmentedInput.tsx +454 -0
  371. package/src/components/Input/constants.ts +8 -0
  372. package/src/components/Input/index.ts +2 -0
  373. package/src/components/Link/Link.theme.ts +16 -0
  374. package/src/components/Link/Link.tsx +10 -2
  375. package/src/components/List/List.stories.tsx +1 -1
  376. package/src/components/List/List.theme.ts +47 -0
  377. package/src/components/List/List.tsx +3 -3
  378. package/src/components/List/ListDropIndicator.tsx +1 -2
  379. package/src/components/List/Tree.stories.tsx +1 -1
  380. package/src/components/List/TreeDropIndicator.tsx +3 -3
  381. package/src/components/List/Treegrid.theme.ts +35 -0
  382. package/src/components/List/Treegrid.tsx +3 -4
  383. package/src/components/Main/Main.theme.ts +29 -0
  384. package/src/components/Main/Main.tsx +9 -7
  385. package/src/components/Main/constants.ts +6 -0
  386. package/src/components/Main/index.ts +1 -0
  387. package/src/components/MediaPlayer/MediaPlayer.stories.tsx +50 -0
  388. package/src/components/MediaPlayer/MediaPlayer.tsx +182 -0
  389. package/src/components/MediaPlayer/index.ts +5 -0
  390. package/src/components/Menu/ContextMenu.stories.tsx +0 -3
  391. package/src/components/Menu/DropdownMenu.stories.tsx +0 -3
  392. package/src/components/Menu/DropdownMenu.tsx +15 -15
  393. package/src/components/Menu/Menu.theme.ts +48 -0
  394. package/src/components/Message/Message.stories.tsx +43 -5
  395. package/src/components/Message/Message.theme.ts +34 -0
  396. package/src/components/Message/Message.tsx +76 -16
  397. package/src/{primitives → components}/Panel/Panel.stories.tsx +2 -3
  398. package/src/components/Panel/Panel.theme.ts +41 -0
  399. package/src/{primitives → components}/Panel/Panel.tsx +2 -1
  400. package/src/components/Popover/Popover.theme.ts +40 -0
  401. package/src/components/Popover/Popover.tsx +7 -7
  402. package/src/components/ScrollArea/ScrollArea.stories.tsx +2 -6
  403. package/src/components/ScrollArea/ScrollArea.theme.ts +107 -0
  404. package/src/components/ScrollArea/ScrollArea.tsx +3 -2
  405. package/src/components/ScrollArea/index.ts +1 -0
  406. package/src/components/ScrollArea/scrollbar.ts +21 -0
  407. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +1 -1
  408. package/src/components/ScrollContainer/ScrollContainer.tsx +58 -58
  409. package/src/components/Select/Select.theme.ts +55 -0
  410. package/src/components/Select/Select.tsx +26 -10
  411. package/src/components/Separator/Separator.theme.ts +23 -0
  412. package/src/components/Skeleton/Skeleton.theme.ts +22 -0
  413. package/src/components/Splitter/Splitter.stories.tsx +1 -1
  414. package/src/components/Splitter/Splitter.theme.ts +18 -0
  415. package/src/components/Splitter/Splitter.tsx +10 -15
  416. package/src/components/Status/Status.theme.ts +31 -0
  417. package/src/components/Status/Status.tsx +1 -2
  418. package/src/components/Tag/Tag.theme.ts +22 -0
  419. package/src/components/Toast/Toast.stories.tsx +41 -20
  420. package/src/components/Toast/Toast.theme.ts +50 -0
  421. package/src/components/Toast/Toast.tsx +96 -27
  422. package/src/components/Toolbar/Toolbar.theme.ts +36 -0
  423. package/src/components/Toolbar/Toolbar.tsx +67 -15
  424. package/src/components/Tooltip/TextTooltip.tsx +54 -0
  425. package/src/components/Tooltip/Tooltip.stories.tsx +1 -10
  426. package/src/components/Tooltip/Tooltip.theme.ts +19 -0
  427. package/src/components/Tooltip/Tooltip.tsx +18 -17
  428. package/src/components/Tooltip/index.ts +2 -0
  429. package/src/components/Tooltip/tooltipContent.ts +16 -0
  430. package/src/components/index.ts +7 -5
  431. package/src/exemplars/generics.stories.tsx +1 -2
  432. package/src/exemplars/slot.stories.tsx +5 -6
  433. package/src/exemplars/virtualizer.stories.tsx +0 -1
  434. package/src/hooks/useDensityContext.ts +1 -1
  435. package/src/hooks/useElevationContext.ts +1 -1
  436. package/src/hooks/useThemeContext.ts +1 -1
  437. package/src/hooks/useTranslationsContext.ts +1 -1
  438. package/src/index.ts +1 -0
  439. package/src/playground/Custom.stories.tsx +12 -32
  440. package/src/primitives/Container/Container.tsx +3 -1
  441. package/src/{components → primitives}/DensityProvider/DensityProvider.tsx +1 -1
  442. package/src/primitives/Flex/Flex.tsx +3 -1
  443. package/src/primitives/Grid/Grid.tsx +3 -1
  444. package/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.tsx +1 -1
  445. package/src/{components → primitives}/ThemeProvider/ThemeProvider.tsx +1 -1
  446. package/src/{components → primitives}/ThemeProvider/index.ts +2 -2
  447. package/src/primitives/index.ts +4 -2
  448. package/src/testing/Loading.tsx +2 -1
  449. package/src/testing/decorators/withLayout.tsx +7 -17
  450. package/src/testing/decorators/withLayoutVariants.tsx +1 -1
  451. package/src/testing/decorators/withTheme.tsx +21 -13
  452. package/src/theme/bindTheme.ts +13 -0
  453. package/src/theme/defaultTheme.ts +83 -0
  454. package/src/theme/index.ts +37 -0
  455. package/src/translations.ts +24 -0
  456. package/src/util/index.ts +2 -1
  457. package/src/util/mobile.ts +11 -0
  458. package/src/util/slots.ts +129 -0
  459. package/src/util/usePx.ts +4 -1
  460. package/dist/lib/browser/chunk-OCVRIJCH.mjs +0 -848
  461. package/dist/lib/browser/chunk-OCVRIJCH.mjs.map +0 -7
  462. package/dist/lib/node-esm/chunk-QUD5P3RU.mjs +0 -850
  463. package/dist/lib/node-esm/chunk-QUD5P3RU.mjs.map +0 -7
  464. package/dist/types/src/components/DensityProvider/index.d.ts.map +0 -1
  465. package/dist/types/src/components/ElevationProvider/index.d.ts.map +0 -1
  466. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +0 -1
  467. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +0 -129
  468. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +0 -1
  469. package/dist/types/src/components/ThemeProvider/index.d.ts +0 -4
  470. package/dist/types/src/components/ThemeProvider/index.d.ts.map +0 -1
  471. package/dist/types/src/primitives/Column/Column.d.ts +0 -33
  472. package/dist/types/src/primitives/Column/Column.d.ts.map +0 -1
  473. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +0 -1
  474. package/dist/types/src/primitives/Column/index.d.ts +0 -2
  475. package/dist/types/src/primitives/Column/index.d.ts.map +0 -1
  476. package/dist/types/src/primitives/Panel/Panel.d.ts.map +0 -1
  477. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +0 -1
  478. package/dist/types/src/primitives/Panel/index.d.ts.map +0 -1
  479. package/dist/types/src/util/hasIosKeyboard.d.ts +0 -2
  480. package/dist/types/src/util/hasIosKeyboard.d.ts.map +0 -1
  481. package/src/util/hasIosKeyboard.ts +0 -8
  482. /package/dist/types/src/{primitives → components}/Column/Column.stories.d.ts +0 -0
  483. /package/dist/types/src/{primitives → components}/Panel/Panel.stories.d.ts +0 -0
  484. /package/dist/types/src/{primitives → components}/Panel/index.d.ts +0 -0
  485. /package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts +0 -0
  486. /package/dist/types/src/{components → primitives}/DensityProvider/index.d.ts +0 -0
  487. /package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts +0 -0
  488. /package/dist/types/src/{components → primitives}/ElevationProvider/index.d.ts +0 -0
  489. /package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts +0 -0
  490. /package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.d.ts +0 -0
  491. /package/src/{primitives → components}/Column/AUDIT.md +0 -0
  492. /package/src/{primitives → components}/Panel/index.ts +0 -0
  493. /package/src/{components → primitives}/DensityProvider/index.ts +0 -0
  494. /package/src/{components → primitives}/ElevationProvider/ElevationProvider.tsx +0 -0
  495. /package/src/{components → primitives}/ElevationProvider/index.ts +0 -0
  496. /package/src/{components → primitives}/ThemeProvider/TranslationsProvider.tsx +0 -0
@@ -14,14 +14,15 @@ import React, {
14
14
  } from 'react';
15
15
  import { useTranslation } from 'react-i18next';
16
16
 
17
- import { composableProps, type DialogSize, osTranslations, slottable } from '@dxos/ui-theme';
17
+ import { osTranslations } from '@dxos/ui-theme';
18
18
  import { type SlottableProps } from '@dxos/ui-types';
19
19
 
20
20
  import { useThemeContext } from '../../hooks';
21
- import { Column } from '../../primitives';
22
- import { type ThemedClassName } from '../../util';
21
+ import { ElevationProvider } from '../../primitives';
22
+ import { type DialogSize } from '../../theme';
23
+ import { type ThemedClassName, composableProps, slottable } from '../../util';
23
24
  import { IconButton } from '../Button';
24
- import { ElevationProvider } from '../ElevationProvider';
25
+ import { Column } from '../Column';
25
26
 
26
27
  //
27
28
  // Root
@@ -40,13 +41,15 @@ const DialogRoot: FunctionComponent<DialogRootProps> = (props) => (
40
41
  </ElevationProvider>
41
42
  );
42
43
 
44
+ DialogRoot.displayName = 'Dialog.Root';
45
+
43
46
  //
44
47
  // Trigger
45
48
  //
46
49
 
47
50
  type DialogTriggerProps = DialogPrimitive.DialogTriggerProps;
48
51
 
49
- const DialogTrigger: FunctionComponent<DialogTriggerProps> = DialogPrimitive.Trigger;
52
+ const DialogTrigger = DialogPrimitive.Trigger;
50
53
 
51
54
  //
52
55
  // Portal
@@ -54,13 +57,13 @@ const DialogTrigger: FunctionComponent<DialogTriggerProps> = DialogPrimitive.Tri
54
57
 
55
58
  type DialogPortalProps = DialogPrimitive.DialogPortalProps;
56
59
 
57
- const DialogPortal: FunctionComponent<DialogPortalProps> = DialogPrimitive.Portal;
60
+ const DialogPortal = DialogPrimitive.Portal;
58
61
 
59
62
  //
60
63
  // Overlay
61
64
  //
62
65
 
63
- const DIALOG_OVERLAY_NAME = 'DialogOverlay';
66
+ const DIALOG_OVERLAY_NAME = 'Dialog.Overlay';
64
67
 
65
68
  type OverlayLayoutContextValue = { inOverlayLayout?: boolean };
66
69
 
@@ -96,7 +99,7 @@ DialogOverlay.displayName = DIALOG_OVERLAY_NAME;
96
99
  // Content
97
100
  //
98
101
 
99
- const DIALOG_CONTENT_NAME = 'DialogContent';
102
+ const DIALOG_CONTENT_NAME = 'Dialog.Content';
100
103
 
101
104
  type DialogContentProps = ThemedClassName<ComponentPropsWithRef<typeof DialogPrimitive.Content>> & {
102
105
  size?: DialogSize;
@@ -151,20 +154,35 @@ const DialogHeader = slottable<HTMLDivElement>(({ children, asChild, ...props },
151
154
  );
152
155
  });
153
156
 
157
+ DialogHeader.displayName = 'Dialog.Header';
158
+
154
159
  //
155
- // CloseIconButton
160
+ // ActionIconButton
156
161
  //
157
162
 
158
- type DialogCloseIconButtonProps = { label?: string };
163
+ type DialogActionIconButtonAction = 'close' | 'delete';
164
+
165
+ type DialogActionIconButtonProps = { action: DialogActionIconButtonAction; label?: string };
166
+
167
+ const DIALOG_ACTION_ICONS: Record<DialogActionIconButtonAction, string> = {
168
+ close: 'ph--x--regular',
169
+ delete: 'ph--trash--regular',
170
+ };
171
+
172
+ const DIALOG_ACTION_LABEL_KEYS: Record<DialogActionIconButtonAction, string> = {
173
+ // Preserves the legacy `close-dialog.label` translation key for backward compat.
174
+ close: 'close-dialog.label',
175
+ delete: 'toolbar-delete.label',
176
+ };
159
177
 
160
- const DialogCloseIconButton = forwardRef<HTMLButtonElement, DialogCloseIconButtonProps>(
161
- ({ label, ...props }, forwardedRef) => {
178
+ const DialogActionIconButton = forwardRef<HTMLButtonElement, DialogActionIconButtonProps>(
179
+ ({ action, label, ...props }, forwardedRef) => {
162
180
  const { t } = useTranslation(osTranslations);
163
181
  return (
164
182
  <IconButton
165
183
  {...props}
166
- label={label ?? t('close-dialog.label')}
167
- icon='ph--x--regular'
184
+ label={label ?? t(DIALOG_ACTION_LABEL_KEYS[action])}
185
+ icon={DIALOG_ACTION_ICONS[action]}
168
186
  iconOnly
169
187
  size={4}
170
188
  variant='ghost'
@@ -174,6 +192,8 @@ const DialogCloseIconButton = forwardRef<HTMLButtonElement, DialogCloseIconButto
174
192
  },
175
193
  );
176
194
 
195
+ DialogActionIconButton.displayName = 'Dialog.ActionIconButton';
196
+
177
197
  //
178
198
  // Body
179
199
  //
@@ -191,6 +211,8 @@ const DialogBody = slottable<HTMLDivElement>(({ children, asChild, ...props }, f
191
211
  );
192
212
  });
193
213
 
214
+ DialogBody.displayName = 'Dialog.Body';
215
+
194
216
  //
195
217
  // Title
196
218
  //
@@ -206,6 +228,8 @@ const DialogTitle = forwardRef<HTMLHeadingElement, DialogTitleProps>(
206
228
  },
207
229
  );
208
230
 
231
+ DialogTitle.displayName = 'Dialog.Title';
232
+
209
233
  //
210
234
  // Description
211
235
  //
@@ -225,6 +249,8 @@ const DialogDescription = forwardRef<HTMLParagraphElement, DialogDescriptionProp
225
249
  },
226
250
  );
227
251
 
252
+ DialogDescription.displayName = 'Dialog.Description';
253
+
228
254
  //
229
255
  // ActionBar
230
256
  //
@@ -242,13 +268,15 @@ const DialogActionBar = slottable<HTMLDivElement>(({ children, asChild, ...props
242
268
  );
243
269
  });
244
270
 
271
+ DialogActionBar.displayName = 'Dialog.ActionBar';
272
+
245
273
  //
246
274
  // Close
247
275
  //
248
276
 
249
277
  type DialogCloseProps = DialogPrimitive.DialogCloseProps;
250
278
 
251
- const DialogClose: FunctionComponent<DialogCloseProps> = DialogPrimitive.Close;
279
+ const DialogClose = DialogPrimitive.Close;
252
280
 
253
281
  //
254
282
  // Dialog
@@ -266,7 +294,7 @@ export const Dialog = {
266
294
  Description: DialogDescription,
267
295
  ActionBar: DialogActionBar,
268
296
  Close: DialogClose,
269
- CloseIconButton: DialogCloseIconButton,
297
+ ActionIconButton: DialogActionIconButton,
270
298
  };
271
299
 
272
300
  export type {
@@ -281,5 +309,6 @@ export type {
281
309
  DialogDescriptionProps,
282
310
  DialogActionBarProps,
283
311
  DialogCloseProps,
284
- DialogCloseIconButtonProps,
312
+ DialogActionIconButtonAction,
313
+ DialogActionIconButtonProps,
285
314
  };
@@ -7,6 +7,10 @@ import { type FallbackProps } from 'react-error-boundary';
7
7
 
8
8
  import { safeStringify } from '@dxos/util';
9
9
 
10
+ import { translationKey } from '#translations';
11
+
12
+ import { useTranslation } from '../../primitives';
13
+ import { IconButton } from '../Button';
10
14
  import { ErrorStack } from './ErrorStack';
11
15
 
12
16
  export type ErrorFallbackProps = PropsWithChildren<Pick<FallbackProps, 'error'> & { title?: string; data?: any }>;
@@ -15,6 +19,7 @@ export type ErrorFallbackProps = PropsWithChildren<Pick<FallbackProps, 'error'>
15
19
  * Themed fallback component for `ErrorBoundary`.
16
20
  */
17
21
  export const ErrorFallback = ({ children, error, title, data }: ErrorFallbackProps) => {
22
+ const { t } = useTranslation(translationKey);
18
23
  const isDev = process.env.NODE_ENV === 'development';
19
24
  const message = error instanceof Error ? error.message : String(error);
20
25
 
@@ -55,14 +60,15 @@ const Section = ({ children, title, onClick }: PropsWithChildren<{ title?: strin
55
60
  return (
56
61
  <div className='flex flex-col gap-1'>
57
62
  {onClick && (
58
- <button
59
- type='button'
60
- onClick={onClick}
61
- className='flex items-center gap-1 text-xs text-subdued hover:text-primary-500 transition-colors'
62
- title={`Copy ${title}`}
63
- >
64
- <h2 className='text-xs uppercase text-subdued'>{title}</h2>
65
- </button>
63
+ <div>
64
+ <IconButton
65
+ classNames='text-xs uppercase'
66
+ label={title ?? 'Copy'}
67
+ icon='ph--clipboard-text--regular'
68
+ size={5}
69
+ onClick={onClick}
70
+ />
71
+ </div>
66
72
  )}
67
73
  {children}
68
74
  </div>
@@ -56,7 +56,7 @@ export const ErrorStack = ({ error, frames: framesProp }: ErrorStackProps) => {
56
56
  const local = frame.fileName
57
57
  ? parseLocalFrame(frame.fileName, frame.lineNumber, frame.columnNumber)
58
58
  : undefined;
59
- const name = frame.functionName ?? '<anonymous>';
59
+ const functionName = frame.functionName ?? '<anonymous>';
60
60
  return (
61
61
  <div
62
62
  key={i}
@@ -75,14 +75,15 @@ export const ErrorStack = ({ error, frames: framesProp }: ErrorStackProps) => {
75
75
  />
76
76
  <div className='absolute top-1/2 -translate-y-1/2 left-1/2 right-0 h-px bg-neutral-500' />
77
77
  </div>
78
+
78
79
  {local ? (
79
80
  <a href={local.href} className='truncate self-center'>
80
- {name}
81
+ {functionName}
81
82
  </a>
82
83
  ) : (
83
- <span className='text-subdued truncate self-center'>{name}</span>
84
+ <span className='text-subdued truncate self-center'>{functionName}</span>
84
85
  )}
85
- <span className='text-xs text-subdued truncate self-center'>{local?.fileName ?? ''}</span>
86
+ <span className='text-xs text-subdued truncate self-center truncate'>{local?.fileName ?? ''}</span>
86
87
  <span className='text-xs text-subdued text-right self-center'>
87
88
  {local ? `${frame.lineNumber}:${frame.columnNumber}` : ''}
88
89
  </span>
@@ -103,10 +104,15 @@ const parseLocalFrame = (fileUrl: string, line?: number, col?: number): LocalFra
103
104
  if (!pathname.startsWith('/@fs/')) {
104
105
  return undefined;
105
106
  }
106
- const localPath = pathname.slice(4); // /@fs/Users/... → /Users/...
107
+
108
+ const FILE_PREFIX = '/@fs';
109
+ const localPath = pathname.slice(FILE_PREFIX.length); // /@fs/Users/... → /Users/...
110
+ const PKG_PREFIX = '/packages/';
111
+ const i = localPath.indexOf(PKG_PREFIX);
112
+ const path = i === -1 ? localPath : localPath.substring(i + PKG_PREFIX.length);
107
113
  return {
108
114
  href: `vscode://file/${localPath}:${line ?? 1}:${col ?? 1}`,
109
- fileName: pathname.split('/').pop() ?? localPath,
115
+ fileName: path,
110
116
  };
111
117
  } catch {
112
118
  return undefined;
@@ -0,0 +1,32 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { mx } from '@dxos/ui-theme';
6
+ import { type ComponentFunction, type Theme } from '@dxos/ui-types';
7
+
8
+ export type FocusStyleProps = {
9
+ border?: boolean;
10
+ };
11
+
12
+ /**
13
+ * Focus ring styles shared by Focus.Group and Focus.Item.
14
+ * Uses a `::after` pseudo-element overlay so the ring paints above child content
15
+ * (inset box-shadow alone is obscured by children with backgrounds).
16
+ * The pseudo-element is `pointer-events-none` and absolutely positioned over the element.
17
+ * When `border` is true, a subdued CSS border is always visible (e.g., for grid cell edges).
18
+ */
19
+ const ring: ComponentFunction<FocusStyleProps> = ({ border }, ...etc) =>
20
+ mx(
21
+ 'dx-ring-pseudo outline-hidden',
22
+ 'focus:after:ring-focus-ring-subtle',
23
+ 'data-[focus-state=active]:after:ring-focus-ring-subtle',
24
+ 'data-[focus-state=error]:after:ring-rose-500',
25
+ border && 'border border-separator',
26
+ ...etc,
27
+ );
28
+
29
+ export const focusTheme: Theme<FocusStyleProps> = {
30
+ group: ring,
31
+ item: ring,
32
+ };
@@ -21,10 +21,10 @@ import React, {
21
21
  useState,
22
22
  } from 'react';
23
23
 
24
- import { composableProps, slottable } from '@dxos/ui-theme';
25
24
  import { type Axis } from '@dxos/ui-types';
26
25
 
27
26
  import { useThemeContext } from '../../hooks';
27
+ import { composableProps, slottable } from '../../util';
28
28
 
29
29
  //
30
30
  // Context
@@ -0,0 +1,45 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { getSize, mx } from '@dxos/ui-theme';
6
+ import { type ComponentFunction, type Size, type Theme } from '@dxos/ui-types';
7
+
8
+ export type IconStyleProps = {
9
+ size?: Size;
10
+ };
11
+
12
+ export type IconBlockStyleProps = {
13
+ compact?: boolean;
14
+ /** Constrain to a square (1:1) slot rather than the default rail-item width. */
15
+ square?: boolean;
16
+ };
17
+
18
+ /**
19
+ * Size can be specified directly, or inherited from a container (e.g., toolbar).
20
+ */
21
+ const root: ComponentFunction<IconStyleProps> = ({ size }, etc) => {
22
+ return mx(
23
+ 'shrink-0 text-[var(--icons-color,currentColor)]',
24
+ size
25
+ ? getSize(size)
26
+ : '[width:var(--icon-size,var(--dx-default-icons-size))] [height:var(--icon-size,var(--dx-default-icons-size))]',
27
+ etc,
28
+ );
29
+ };
30
+
31
+ /**
32
+ * Static slot sized to `--dx-rail-item` so a wrapped `Icon` lines up with an `IconButton iconOnly`.
33
+ */
34
+ const block: ComponentFunction<IconBlockStyleProps> = ({ compact, square }, ...etc) =>
35
+ mx(
36
+ 'grid place-items-center [&>img]:max-w-[1.5rem]',
37
+ square ? 'aspect-square' : 'w-[var(--dx-rail-item)]',
38
+ compact ? '' : 'h-[var(--dx-rail-item)]',
39
+ ...etc,
40
+ );
41
+
42
+ export const iconTheme: Theme<IconStyleProps & IconBlockStyleProps> = {
43
+ root,
44
+ block,
45
+ };
@@ -3,7 +3,7 @@
3
3
  //
4
4
 
5
5
  import { type Primitive } from '@radix-ui/react-primitive';
6
- import React, { type ComponentPropsWithRef, forwardRef, memo } from 'react';
6
+ import React, { type ComponentPropsWithRef, forwardRef, memo, useMemo } from 'react';
7
7
 
8
8
  import { type Size } from '@dxos/ui-types';
9
9
 
@@ -13,18 +13,25 @@ import { type ThemedClassName } from '../../util';
13
13
  export type IconProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.svg>> & {
14
14
  icon: string;
15
15
  size?: Size;
16
+ synchronized?: boolean;
16
17
  };
17
18
 
18
19
  /**
19
20
  * The Icon's size can be set directly or inherited from the `--dx-icon-size` CSS variable.
20
21
  */
21
22
  export const Icon = memo(
22
- forwardRef<SVGSVGElement, IconProps>(({ icon, classNames, size, ...props }, forwardedRef) => {
23
+ forwardRef<SVGSVGElement, IconProps>(({ classNames, icon, size, synchronized, style, ...props }, forwardedRef) => {
23
24
  const { tx } = useThemeContext();
25
+ const spinDelay = useMemo(() => (synchronized ? `${-(Date.now() % 1_000)}ms` : undefined), [synchronized]);
24
26
  const href = useIconHref(icon);
25
27
 
26
28
  return (
27
- <svg {...props} className={tx('icon.root', { size }, classNames)} ref={forwardedRef}>
29
+ <svg
30
+ {...props}
31
+ style={{ ...style, animationDelay: spinDelay }}
32
+ className={tx('icon.root', { size }, classNames)}
33
+ ref={forwardedRef}
34
+ >
28
35
  <use href={href} />
29
36
  </svg>
30
37
  );
@@ -0,0 +1,38 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import React, { type ComponentPropsWithRef, type PropsWithChildren, forwardRef } from 'react';
6
+
7
+ import { useThemeContext } from '../../hooks';
8
+ import { type ThemedClassName } from '../../util';
9
+ import { IconBlockStyleProps } from './Icon.theme';
10
+
11
+ export type IconBlockProps = ThemedClassName<ComponentPropsWithRef<'div'> & PropsWithChildren<IconBlockStyleProps>>;
12
+
13
+ /**
14
+ * Static layout slot sized to `--dx-rail-item` (the same square that an `IconButton iconOnly`
15
+ * occupies). Use whenever a decorative `<Icon>` needs to share a row, column, or grid track with
16
+ * interactive `IconButton`s without drifting by a pixel.
17
+ *
18
+ * Defaults `aria-hidden='true'` — the slot wraps decorative chrome by default. Pass
19
+ * `aria-hidden={false}` when the slot's contents convey meaning that isn't already labelled
20
+ * elsewhere in the row.
21
+ */
22
+ export const IconBlock = forwardRef<HTMLDivElement, IconBlockProps>(
23
+ ({ classNames, children, compact, square, ...props }, forwardedRef) => {
24
+ const { tx } = useThemeContext();
25
+ return (
26
+ <div
27
+ aria-hidden='true'
28
+ {...props}
29
+ className={tx('icon.block', { compact, square }, classNames)}
30
+ ref={forwardedRef}
31
+ >
32
+ {children}
33
+ </div>
34
+ );
35
+ },
36
+ );
37
+
38
+ IconBlock.displayName = 'IconBlock';
@@ -3,3 +3,4 @@
3
3
  //
4
4
 
5
5
  export * from './Icon';
6
+ export * from './IconBlock';
@@ -15,7 +15,7 @@ const seed = Math.random();
15
15
  random.seed(seed);
16
16
 
17
17
  const meta = {
18
- title: 'ui/react-ui-mosaic/Image',
18
+ title: 'ui/react-ui-core/components/Image',
19
19
  component: Image,
20
20
  render: (args) => (
21
21
  <div className='absolute inset-0 flex justify-center items-center'>
@@ -13,16 +13,23 @@ export type ImageProps = ThemedClassName<
13
13
  {
14
14
  src: string;
15
15
  alt?: string;
16
+ fit?: 'contain' | 'cover';
17
+ /**
18
+ * Image CORS mode (sets the `<img crossorigin>` attribute). Omitted by default: cross-origin
19
+ * images load without a CORS request (no console errors), but the dominant-color sampler can't
20
+ * read their pixels off the canvas (the browser taints it). Opt in with `'anonymous'` when the
21
+ * image host sends CORS headers and you want the dominant-color gradient.
22
+ */
16
23
  crossOrigin?: 'anonymous' | 'use-credentials' | '';
17
24
  } & ColorOptions
18
25
  >;
19
26
 
20
- // TODO(burdon): Option for neutral background color.
21
27
  export const Image = ({
22
28
  classNames,
23
29
  src,
24
30
  alt = '',
25
- crossOrigin = 'anonymous',
31
+ fit = 'contain',
32
+ crossOrigin,
26
33
  sampleSize = 64,
27
34
  contrast = 0.9,
28
35
  }: ImageProps) => {
@@ -68,7 +75,16 @@ export const Image = ({
68
75
 
69
76
  return (
70
77
  <div
71
- className={mx(`relative flex w-full justify-center overflow-hidden transition-all duration-700`, classNames)}
78
+ // `isolate` (`isolation: isolate`) creates a new stacking context so
79
+ // the inner <img>'s `z-10` stays scoped to this wrapper. Without it
80
+ // the z-10 leaks into the parent's stacking context and elevates the
81
+ // image above any pseudo-element rings (e.g. Focus.Item's
82
+ // `dx-ring-pseudo` `::after`) painted on ancestors — most visibly,
83
+ // the focus ring on a Card containing a Card.Poster.
84
+ className={mx(
85
+ `relative flex w-full justify-center overflow-hidden transition-all duration-700 isolate`,
86
+ classNames,
87
+ )}
72
88
  style={{
73
89
  backgroundColor: dominantColor,
74
90
  }}
@@ -94,7 +110,10 @@ export const Image = ({
94
110
  crossOrigin={crossOriginState}
95
111
  onError={handleImageError}
96
112
  onLoad={handleImageLoad}
97
- className='z-10 object-contain transition-opacity duration-500'
113
+ className={mx(
114
+ 'z-10 transition-opacity duration-500',
115
+ fit === 'cover' ? 'w-full h-full object-cover' : 'object-contain',
116
+ )}
98
117
  style={{
99
118
  opacity: imageLoaded ? 1 : 0,
100
119
  }}
@@ -162,7 +181,9 @@ const extractDominantColor = (
162
181
  const alpha = pixels[i + 3];
163
182
 
164
183
  // Skip transparent pixels.
165
- if (alpha === 0) continue;
184
+ if (alpha === 0) {
185
+ continue;
186
+ }
166
187
 
167
188
  // Calculate saturation to weight vibrant colors more.
168
189
  const max = Math.max(red, green, blue);
@@ -202,21 +223,29 @@ const isTransparent = (pixels: Uint8ClampedArray, sampleSize: number, threshold:
202
223
  for (let x = 0; x < sampleSize; x++) {
203
224
  // Top edge.
204
225
  const topIndex = x * 4;
205
- if (pixels[topIndex + 3] === 0) edgeTransparentPixels++;
226
+ if (pixels[topIndex + 3] === 0) {
227
+ edgeTransparentPixels++;
228
+ }
206
229
 
207
230
  // Bottom edge.
208
231
  const bottomIndex = ((sampleSize - 1) * sampleSize + x) * 4;
209
- if (pixels[bottomIndex + 3] === 0) edgeTransparentPixels++;
232
+ if (pixels[bottomIndex + 3] === 0) {
233
+ edgeTransparentPixels++;
234
+ }
210
235
  }
211
236
 
212
237
  for (let y = 1; y < sampleSize - 1; y++) {
213
238
  // Left edge.
214
239
  const leftIndex = y * sampleSize * 4;
215
- if (pixels[leftIndex + 3] === 0) edgeTransparentPixels++;
240
+ if (pixels[leftIndex + 3] === 0) {
241
+ edgeTransparentPixels++;
242
+ }
216
243
 
217
244
  // Right edge.
218
245
  const rightIndex = (y * sampleSize + sampleSize - 1) * 4;
219
- if (pixels[rightIndex + 3] === 0) edgeTransparentPixels++;
246
+ if (pixels[rightIndex + 3] === 0) {
247
+ edgeTransparentPixels++;
248
+ }
220
249
  }
221
250
 
222
251
  return edgeTransparentPixels / edgePixels > threshold;