@dxos/react-ui 0.10.0 → 0.11.1

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 (354) hide show
  1. package/dist/lib/chunk-parse-stack.mjs +1566 -0
  2. package/dist/lib/chunk-parse-stack.mjs.map +1 -0
  3. package/dist/lib/index.mjs +5220 -0
  4. package/dist/lib/index.mjs.map +1 -0
  5. package/dist/lib/testing.mjs +144 -0
  6. package/dist/lib/testing.mjs.map +1 -0
  7. package/dist/lib/translations.mjs +38 -0
  8. package/dist/lib/translations.mjs.map +1 -0
  9. package/dist/types/src/components/Avatars/Avatar.d.ts +1 -6
  10. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  11. package/dist/types/src/components/Avatars/AvatarContext.d.ts +9 -0
  12. package/dist/types/src/components/Avatars/AvatarContext.d.ts.map +1 -0
  13. package/dist/types/src/components/Avatars/index.d.ts +1 -0
  14. package/dist/types/src/components/Avatars/index.d.ts.map +1 -1
  15. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +1 -1
  16. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  17. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  18. package/dist/types/src/components/Breadcrumb/Breadcrumb.theme.d.ts.map +1 -1
  19. package/dist/types/src/components/Button/Button.d.ts +1 -6
  20. package/dist/types/src/components/Button/Button.d.ts.map +1 -1
  21. package/dist/types/src/components/Button/ButtonGroupContext.d.ts +9 -0
  22. package/dist/types/src/components/Button/ButtonGroupContext.d.ts.map +1 -0
  23. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
  24. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
  25. package/dist/types/src/components/Button/IconButton.theme.d.ts +1 -0
  26. package/dist/types/src/components/Button/IconButton.theme.d.ts.map +1 -1
  27. package/dist/types/src/components/Button/SystemIconButton.d.ts +1 -1
  28. package/dist/types/src/components/Button/SystemIconButton.d.ts.map +1 -1
  29. package/dist/types/src/components/Button/index.d.ts +1 -0
  30. package/dist/types/src/components/Button/index.d.ts.map +1 -1
  31. package/dist/types/src/components/Calendar/Calendar.d.ts +0 -2
  32. package/dist/types/src/components/Calendar/Calendar.d.ts.map +1 -1
  33. package/dist/types/src/components/Calendar/index.d.ts +1 -0
  34. package/dist/types/src/components/Calendar/index.d.ts.map +1 -1
  35. package/dist/types/src/components/Calendar/parse-calendar-date.d.ts +3 -0
  36. package/dist/types/src/components/Calendar/parse-calendar-date.d.ts.map +1 -0
  37. package/dist/types/src/components/Card/Card.d.ts +42 -15
  38. package/dist/types/src/components/Card/Card.d.ts.map +1 -1
  39. package/dist/types/src/components/Card/Card.theme.d.ts +0 -1
  40. package/dist/types/src/components/Card/Card.theme.d.ts.map +1 -1
  41. package/dist/types/src/components/Carousel/Carousel.d.ts +2 -4
  42. package/dist/types/src/components/Carousel/Carousel.d.ts.map +1 -1
  43. package/dist/types/src/components/Carousel/CarouselContext.d.ts +8 -0
  44. package/dist/types/src/components/Carousel/CarouselContext.d.ts.map +1 -0
  45. package/dist/types/src/components/Carousel/index.d.ts +1 -0
  46. package/dist/types/src/components/Carousel/index.d.ts.map +1 -1
  47. package/dist/types/src/components/Clipboard/ClipboardContext.d.ts +7 -0
  48. package/dist/types/src/components/Clipboard/ClipboardContext.d.ts.map +1 -0
  49. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts +0 -6
  50. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  51. package/dist/types/src/components/Clipboard/index.d.ts +1 -1
  52. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  53. package/dist/types/src/components/Column/Column.d.ts +7 -12
  54. package/dist/types/src/components/Column/Column.d.ts.map +1 -1
  55. package/dist/types/src/components/Column/Column.stories.d.ts +2 -2
  56. package/dist/types/src/components/Column/Column.theme.d.ts +0 -1
  57. package/dist/types/src/components/Column/Column.theme.d.ts.map +1 -1
  58. package/dist/types/src/components/Column/ColumnContext.d.ts +9 -0
  59. package/dist/types/src/components/Column/ColumnContext.d.ts.map +1 -0
  60. package/dist/types/src/components/Column/index.d.ts +1 -0
  61. package/dist/types/src/components/Column/index.d.ts.map +1 -1
  62. package/dist/types/src/components/Column/withColumn.d.ts +40 -4
  63. package/dist/types/src/components/Column/withColumn.d.ts.map +1 -1
  64. package/dist/types/src/components/DatePicker/DatePicker.d.ts +0 -10
  65. package/dist/types/src/components/DatePicker/DatePicker.d.ts.map +1 -1
  66. package/dist/types/src/components/DatePicker/DatePickerContext.d.ts +13 -0
  67. package/dist/types/src/components/DatePicker/DatePickerContext.d.ts.map +1 -0
  68. package/dist/types/src/components/DatePicker/index.d.ts +1 -0
  69. package/dist/types/src/components/DatePicker/index.d.ts.map +1 -1
  70. package/dist/types/src/components/Dialog/AlertDialog.d.ts +3 -3
  71. package/dist/types/src/components/Dialog/Dialog.d.ts +3 -3
  72. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +5 -10
  73. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -1
  74. package/dist/types/src/components/ErrorFallback/index.d.ts +1 -0
  75. package/dist/types/src/components/ErrorFallback/index.d.ts.map +1 -1
  76. package/dist/types/src/components/ErrorFallback/parse-stack.d.ts +8 -0
  77. package/dist/types/src/components/ErrorFallback/parse-stack.d.ts.map +1 -0
  78. package/dist/types/src/components/Focus/Focus.d.ts +2 -10
  79. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -1
  80. package/dist/types/src/components/Focus/FocusContext.d.ts +10 -0
  81. package/dist/types/src/components/Focus/FocusContext.d.ts.map +1 -0
  82. package/dist/types/src/components/Focus/index.d.ts +1 -0
  83. package/dist/types/src/components/Focus/index.d.ts.map +1 -1
  84. package/dist/types/src/components/Input/Input.d.ts +9 -10
  85. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  86. package/dist/types/src/components/Input/Input.stories.d.ts +7 -2
  87. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  88. package/dist/types/src/components/Input/Input.theme.d.ts +13 -0
  89. package/dist/types/src/components/Input/Input.theme.d.ts.map +1 -1
  90. package/dist/types/src/components/Input/InputTriggerContext.d.ts +15 -0
  91. package/dist/types/src/components/Input/InputTriggerContext.d.ts.map +1 -0
  92. package/dist/types/src/components/Input/SegmentedInput.d.ts.map +1 -1
  93. package/dist/types/src/components/Input/index.d.ts +1 -0
  94. package/dist/types/src/components/Input/index.d.ts.map +1 -1
  95. package/dist/types/src/components/Main/Main.d.ts +2 -35
  96. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  97. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  98. package/dist/types/src/components/Main/Main.theme.d.ts.map +1 -1
  99. package/dist/types/src/components/Main/MainContext.d.ts +38 -0
  100. package/dist/types/src/components/Main/MainContext.d.ts.map +1 -0
  101. package/dist/types/src/components/Main/index.d.ts +1 -0
  102. package/dist/types/src/components/Main/index.d.ts.map +1 -1
  103. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts +1 -17
  104. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts.map +1 -1
  105. package/dist/types/src/components/MediaPlayer/index.d.ts +1 -0
  106. package/dist/types/src/components/MediaPlayer/index.d.ts.map +1 -1
  107. package/dist/types/src/components/MediaPlayer/media-kind.d.ts +18 -0
  108. package/dist/types/src/components/MediaPlayer/media-kind.d.ts.map +1 -0
  109. package/dist/types/src/components/Menu/DropdownMenu.d.ts +6 -22
  110. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
  111. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +1 -11
  112. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -1
  113. package/dist/types/src/components/Menu/DropdownMenuContext.d.ts +27 -0
  114. package/dist/types/src/components/Menu/DropdownMenuContext.d.ts.map +1 -0
  115. package/dist/types/src/components/Menu/index.d.ts +1 -0
  116. package/dist/types/src/components/Menu/index.d.ts.map +1 -1
  117. package/dist/types/src/components/Message/Message.d.ts +11 -6
  118. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  119. package/dist/types/src/components/Message/Message.stories.d.ts +4 -1
  120. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  121. package/dist/types/src/components/Message/Message.theme.d.ts.map +1 -1
  122. package/dist/types/src/components/Message/index.d.ts +1 -0
  123. package/dist/types/src/components/Message/index.d.ts.map +1 -1
  124. package/dist/types/src/components/Message/message-icons.d.ts +3 -0
  125. package/dist/types/src/components/Message/message-icons.d.ts.map +1 -0
  126. package/dist/types/src/components/Panel/Panel.d.ts +4 -4
  127. package/dist/types/src/components/Panel/Panel.stories.d.ts.map +1 -1
  128. package/dist/types/src/components/Panel/Panel.theme.d.ts +1 -1
  129. package/dist/types/src/components/Panel/Panel.theme.d.ts.map +1 -1
  130. package/dist/types/src/components/Popover/Popover.d.ts +6 -10
  131. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  132. package/dist/types/src/components/Popover/PopoverContext.d.ts +29 -0
  133. package/dist/types/src/components/Popover/PopoverContext.d.ts.map +1 -0
  134. package/dist/types/src/components/Popover/index.d.ts +1 -0
  135. package/dist/types/src/components/Popover/index.d.ts.map +1 -1
  136. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +2 -2
  137. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +2 -2
  138. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +3 -16
  139. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  140. package/dist/types/src/components/ScrollContainer/ScrollContainerContext.d.ts +16 -0
  141. package/dist/types/src/components/ScrollContainer/ScrollContainerContext.d.ts.map +1 -0
  142. package/dist/types/src/components/ScrollContainer/index.d.ts +1 -0
  143. package/dist/types/src/components/ScrollContainer/index.d.ts.map +1 -1
  144. package/dist/types/src/components/Slider/Slider.d.ts +25 -0
  145. package/dist/types/src/components/Slider/Slider.d.ts.map +1 -0
  146. package/dist/types/src/components/Slider/Slider.stories.d.ts +29 -0
  147. package/dist/types/src/components/Slider/Slider.stories.d.ts.map +1 -0
  148. package/dist/types/src/components/Slider/Slider.test.d.ts +2 -0
  149. package/dist/types/src/components/Slider/Slider.test.d.ts.map +1 -0
  150. package/dist/types/src/components/Slider/Slider.theme.d.ts +7 -0
  151. package/dist/types/src/components/Slider/Slider.theme.d.ts.map +1 -0
  152. package/dist/types/src/components/Slider/index.d.ts +2 -0
  153. package/dist/types/src/components/Slider/index.d.ts.map +1 -0
  154. package/dist/types/src/components/Splitter/Splitter.d.ts +3 -3
  155. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  156. package/dist/types/src/components/Toolbar/Toolbar.d.ts +4 -2
  157. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  158. package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts.map +1 -1
  159. package/dist/types/src/components/Tooltip/TextTooltip.d.ts.map +1 -1
  160. package/dist/types/src/components/Tooltip/Tooltip.d.ts +2 -23
  161. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  162. package/dist/types/src/components/Tooltip/TooltipContext.d.ts +35 -0
  163. package/dist/types/src/components/Tooltip/TooltipContext.d.ts.map +1 -0
  164. package/dist/types/src/components/Tooltip/index.d.ts +1 -0
  165. package/dist/types/src/components/Tooltip/index.d.ts.map +1 -1
  166. package/dist/types/src/components/index.d.ts +1 -0
  167. package/dist/types/src/components/index.d.ts.map +1 -1
  168. package/dist/types/src/exemplars/generics.stories.d.ts +1 -1
  169. package/dist/types/src/hooks/useIconHref.d.ts +8 -0
  170. package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
  171. package/dist/types/src/hooks/useThemeContext.d.ts +2 -1
  172. package/dist/types/src/hooks/useThemeContext.d.ts.map +1 -1
  173. package/dist/types/src/hooks/useThemeContext.test.d.ts +2 -0
  174. package/dist/types/src/hooks/useThemeContext.test.d.ts.map +1 -0
  175. package/dist/types/src/playground/Density.stories.d.ts +11 -0
  176. package/dist/types/src/playground/Density.stories.d.ts.map +1 -0
  177. package/dist/types/src/playground/Elevation.stories.d.ts +14 -0
  178. package/dist/types/src/playground/Elevation.stories.d.ts.map +1 -0
  179. package/dist/types/src/primitives/Container/Container.d.ts +1 -1
  180. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -1
  181. package/dist/types/src/primitives/DensityProvider/DensityContext.d.ts +6 -0
  182. package/dist/types/src/primitives/DensityProvider/DensityContext.d.ts.map +1 -0
  183. package/dist/types/src/primitives/DensityProvider/DensityProvider.d.ts +10 -4
  184. package/dist/types/src/primitives/DensityProvider/DensityProvider.d.ts.map +1 -1
  185. package/dist/types/src/primitives/DensityProvider/index.d.ts +1 -0
  186. package/dist/types/src/primitives/DensityProvider/index.d.ts.map +1 -1
  187. package/dist/types/src/primitives/Flex/Flex.d.ts +1 -1
  188. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -1
  189. package/dist/types/src/primitives/Grid/Grid.d.ts +1 -1
  190. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -1
  191. package/dist/types/src/primitives/ThemeProvider/IconRegistry.d.ts +15 -0
  192. package/dist/types/src/primitives/ThemeProvider/IconRegistry.d.ts.map +1 -0
  193. package/dist/types/src/primitives/ThemeProvider/ThemeProvider.d.ts +1 -2
  194. package/dist/types/src/primitives/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  195. package/dist/types/src/primitives/ThemeProvider/ThemeProvider.stories.d.ts +1 -1
  196. package/dist/types/src/primitives/ThemeProvider/TranslationsContext.d.ts +112 -0
  197. package/dist/types/src/primitives/ThemeProvider/TranslationsContext.d.ts.map +1 -0
  198. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts +0 -109
  199. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  200. package/dist/types/src/primitives/ThemeProvider/icon-registry.d.ts +34 -0
  201. package/dist/types/src/primitives/ThemeProvider/icon-registry.d.ts.map +1 -0
  202. package/dist/types/src/primitives/ThemeProvider/index.d.ts +3 -1
  203. package/dist/types/src/primitives/ThemeProvider/index.d.ts.map +1 -1
  204. package/dist/types/src/testing/decorators/withTheme.d.ts +1 -1
  205. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  206. package/dist/types/src/theme/defaultTheme.d.ts.map +1 -1
  207. package/dist/types/src/theme/index.d.ts +1 -0
  208. package/dist/types/src/theme/index.d.ts.map +1 -1
  209. package/dist/types/src/util/slots.d.ts +6 -3
  210. package/dist/types/src/util/slots.d.ts.map +1 -1
  211. package/dist/types/src/util/slots.stories.d.ts +14 -0
  212. package/dist/types/src/util/slots.stories.d.ts.map +1 -0
  213. package/dist/types/tsconfig.tsbuildinfo +1 -1
  214. package/package.json +25 -27
  215. package/src/components/Avatars/Avatar.tsx +1 -11
  216. package/src/components/Avatars/AvatarContext.ts +16 -0
  217. package/src/components/Avatars/index.ts +2 -0
  218. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +27 -25
  219. package/src/components/Breadcrumb/Breadcrumb.theme.ts +7 -5
  220. package/src/components/Breadcrumb/Breadcrumb.tsx +2 -2
  221. package/src/components/Button/Button.tsx +2 -11
  222. package/src/components/Button/ButtonGroupContext.ts +17 -0
  223. package/src/components/Button/IconButton.stories.tsx +2 -3
  224. package/src/components/Button/IconButton.theme.ts +15 -2
  225. package/src/components/Button/IconButton.tsx +6 -1
  226. package/src/components/Button/SystemIconButton.tsx +23 -16
  227. package/src/components/Button/index.ts +2 -0
  228. package/src/components/Calendar/Calendar.theme.ts +5 -5
  229. package/src/components/Calendar/Calendar.tsx +1 -3
  230. package/src/components/Calendar/index.ts +2 -0
  231. package/src/components/Calendar/parse-calendar-date.ts +9 -0
  232. package/src/components/Card/Card.theme.ts +48 -38
  233. package/src/components/Card/Card.tsx +77 -16
  234. package/src/components/Carousel/Carousel.tsx +4 -11
  235. package/src/components/Carousel/CarouselContext.ts +17 -0
  236. package/src/components/Carousel/index.ts +2 -0
  237. package/src/components/Clipboard/ClipboardContext.ts +20 -0
  238. package/src/components/Clipboard/ClipboardProvider.tsx +2 -12
  239. package/src/components/Clipboard/CopyButton.tsx +1 -1
  240. package/src/components/Clipboard/index.ts +1 -1
  241. package/src/components/Column/Column.stories.tsx +2 -2
  242. package/src/components/Column/Column.theme.ts +2 -11
  243. package/src/components/Column/Column.tsx +35 -57
  244. package/src/components/Column/ColumnContext.ts +22 -0
  245. package/src/components/Column/index.ts +2 -0
  246. package/src/components/Column/withColumn.ts +41 -4
  247. package/src/components/DatePicker/DatePicker.theme.ts +2 -2
  248. package/src/components/DatePicker/DatePicker.tsx +1 -14
  249. package/src/components/DatePicker/DatePickerContext.ts +21 -0
  250. package/src/components/DatePicker/index.ts +2 -0
  251. package/src/components/ErrorFallback/ErrorStack.tsx +8 -28
  252. package/src/components/ErrorFallback/index.ts +1 -0
  253. package/src/components/ErrorFallback/parse-stack.ts +33 -0
  254. package/src/components/Focus/Focus.stories.tsx +6 -6
  255. package/src/components/Focus/Focus.tsx +2 -30
  256. package/src/components/Focus/FocusContext.ts +22 -0
  257. package/src/components/Focus/index.ts +2 -0
  258. package/src/components/Image/Image.tsx +1 -1
  259. package/src/components/Input/Input.stories.tsx +63 -48
  260. package/src/components/Input/Input.theme.ts +33 -27
  261. package/src/components/Input/Input.tsx +46 -43
  262. package/src/components/Input/InputTriggerContext.ts +45 -0
  263. package/src/components/Input/SegmentedInput.tsx +2 -1
  264. package/src/components/Input/index.ts +2 -0
  265. package/src/components/Main/Main.stories.tsx +2 -1
  266. package/src/components/Main/Main.theme.ts +10 -1
  267. package/src/components/Main/Main.tsx +1 -115
  268. package/src/components/Main/MainContext.ts +126 -0
  269. package/src/components/Main/index.ts +2 -0
  270. package/src/components/MediaPlayer/MediaPlayer.tsx +16 -47
  271. package/src/components/MediaPlayer/index.ts +2 -0
  272. package/src/components/MediaPlayer/media-kind.ts +41 -0
  273. package/src/components/Menu/DropdownMenu.tsx +27 -44
  274. package/src/components/Menu/DropdownMenuContext.ts +35 -0
  275. package/src/components/Menu/Menu.theme.ts +3 -3
  276. package/src/components/Menu/index.ts +2 -0
  277. package/src/components/Message/Message.stories.tsx +32 -15
  278. package/src/components/Message/Message.theme.ts +8 -2
  279. package/src/components/Message/Message.tsx +47 -23
  280. package/src/components/Message/index.ts +2 -0
  281. package/src/components/Message/message-icons.ts +16 -0
  282. package/src/components/Panel/Panel.stories.tsx +15 -2
  283. package/src/components/Panel/Panel.theme.ts +15 -6
  284. package/src/components/Popover/Popover.theme.ts +1 -1
  285. package/src/components/Popover/Popover.tsx +22 -37
  286. package/src/components/Popover/PopoverContext.ts +32 -0
  287. package/src/components/Popover/index.ts +2 -0
  288. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +1 -1
  289. package/src/components/ScrollContainer/ScrollContainer.tsx +1 -18
  290. package/src/components/ScrollContainer/ScrollContainerContext.ts +25 -0
  291. package/src/components/ScrollContainer/index.ts +2 -0
  292. package/src/components/Select/Select.theme.ts +2 -2
  293. package/src/components/Slider/Slider.stories.tsx +107 -0
  294. package/src/components/Slider/Slider.test.tsx +105 -0
  295. package/src/components/Slider/Slider.theme.ts +38 -0
  296. package/src/components/Slider/Slider.tsx +64 -0
  297. package/src/components/Slider/index.ts +5 -0
  298. package/src/components/Status/Status.theme.ts +1 -1
  299. package/src/components/Status/Status.tsx +0 -1
  300. package/src/components/Tag/Tag.stories.tsx +1 -1
  301. package/src/components/Toolbar/Toolbar.theme.ts +14 -5
  302. package/src/components/Toolbar/Toolbar.tsx +5 -1
  303. package/src/components/Tooltip/TextTooltip.tsx +2 -1
  304. package/src/components/Tooltip/Tooltip.tsx +12 -35
  305. package/src/components/Tooltip/TooltipContext.ts +41 -0
  306. package/src/components/Tooltip/index.ts +2 -0
  307. package/src/components/index.ts +1 -0
  308. package/src/hooks/useIconHref.ts +26 -5
  309. package/src/hooks/useThemeContext.test.tsx +33 -0
  310. package/src/hooks/useThemeContext.ts +28 -3
  311. package/src/playground/Density.stories.tsx +41 -0
  312. package/src/playground/Elevation.stories.tsx +348 -0
  313. package/src/primitives/DensityProvider/DensityContext.ts +15 -0
  314. package/src/primitives/DensityProvider/DensityProvider.tsx +12 -6
  315. package/src/primitives/DensityProvider/index.ts +1 -0
  316. package/src/primitives/Flex/Flex.stories.tsx +1 -1
  317. package/src/primitives/Grid/Grid.stories.tsx +1 -1
  318. package/src/primitives/ThemeProvider/IconRegistry.tsx +42 -0
  319. package/src/primitives/ThemeProvider/ThemeProvider.tsx +16 -15
  320. package/src/primitives/ThemeProvider/TranslationsContext.ts +24 -0
  321. package/src/primitives/ThemeProvider/TranslationsProvider.tsx +4 -16
  322. package/src/primitives/ThemeProvider/icon-registry.ts +272 -0
  323. package/src/primitives/ThemeProvider/index.ts +9 -1
  324. package/src/testing/decorators/withLayout.tsx +4 -4
  325. package/src/testing/decorators/withLayoutVariants.tsx +3 -3
  326. package/src/testing/decorators/withTheme.tsx +1 -2
  327. package/src/theme/defaultTheme.ts +2 -0
  328. package/src/theme/index.ts +1 -0
  329. package/src/util/slots.stories.tsx +80 -0
  330. package/src/util/slots.ts +14 -5
  331. package/dist/lib/browser/chunk-CMHHVHX3.mjs +0 -46
  332. package/dist/lib/browser/chunk-CMHHVHX3.mjs.map +0 -7
  333. package/dist/lib/browser/chunk-GTHV4WYK.mjs +0 -1499
  334. package/dist/lib/browser/chunk-GTHV4WYK.mjs.map +0 -7
  335. package/dist/lib/browser/index.mjs +0 -5632
  336. package/dist/lib/browser/index.mjs.map +0 -7
  337. package/dist/lib/browser/meta.json +0 -1
  338. package/dist/lib/browser/testing/index.mjs +0 -133
  339. package/dist/lib/browser/testing/index.mjs.map +0 -7
  340. package/dist/lib/browser/translations.mjs +0 -9
  341. package/dist/lib/browser/translations.mjs.map +0 -7
  342. package/dist/lib/node-esm/chunk-3VSKWNCQ.mjs +0 -1501
  343. package/dist/lib/node-esm/chunk-3VSKWNCQ.mjs.map +0 -7
  344. package/dist/lib/node-esm/chunk-P4KFQGJI.mjs +0 -48
  345. package/dist/lib/node-esm/chunk-P4KFQGJI.mjs.map +0 -7
  346. package/dist/lib/node-esm/index.mjs +0 -5633
  347. package/dist/lib/node-esm/index.mjs.map +0 -7
  348. package/dist/lib/node-esm/meta.json +0 -1
  349. package/dist/lib/node-esm/testing/index.mjs +0 -134
  350. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  351. package/dist/lib/node-esm/translations.mjs +0 -10
  352. package/dist/lib/node-esm/translations.mjs.map +0 -7
  353. package/src/components/Column/AUDIT.md +0 -148
  354. package/src/components/Focus/AUDIT.md +0 -43
@@ -0,0 +1,272 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { createContext, useContext } from 'react';
6
+
7
+ // Kept out of `IconRegistry.tsx`: react-refresh only fast-refreshes a module whose exports are all
8
+ // components, so the registry, context and hooks exported beside the provider force a full page
9
+ // reload on every edit.
10
+
11
+ const SVG_NS = 'http://www.w3.org/2000/svg';
12
+ const SPRITE_URL = '/icons.svg';
13
+
14
+ const SYMBOL_PATTERN = /^([a-z0-9]+)--([a-z0-9-]+)--([a-z]+)$/;
15
+
16
+ /**
17
+ * Locates the standalone SVG for one icon set, so glyphs missing from the static sprite can be
18
+ * fetched at runtime. The route must be served by the host (see the `assets` option of
19
+ * `@dxos/vite-plugin-icons`); sets without a source stay sprite-only.
20
+ */
21
+ export type IconSource = {
22
+ /** Symbol-name prefix, e.g. `ph` for `ph--house--regular`. */
23
+ iconSet: string;
24
+ /** Resolves a parsed symbol name to a URL. */
25
+ url: (name: string, variant: string) => string;
26
+ };
27
+
28
+ /**
29
+ * Phosphor's published layout: `{variant}/{name}[-{variant}].svg`, regular being unsuffixed.
30
+ */
31
+ export const phosphorIconSource = (route = '/phosphor'): IconSource => ({
32
+ iconSet: 'ph',
33
+ url: (name, variant) => `${route}/${variant}/${name}${variant === 'regular' ? '' : `-${variant}`}.svg`,
34
+ });
35
+
36
+ export const defaultSources: IconSource[] = [phosphorIconSource()];
37
+
38
+ export type IconRegistry = {
39
+ hasIcon(name: string): boolean;
40
+ requestIcon(name: string): void;
41
+ /**
42
+ * Subscribe to changes — fires whenever a new symbol becomes available (static sprite
43
+ * finished ingesting, or a runtime fetch resolved). Returns an unsubscribe function.
44
+ */
45
+ subscribe(listener: () => void): () => void;
46
+ };
47
+
48
+ export const NoopRegistry: IconRegistry = {
49
+ hasIcon: () => false,
50
+ requestIcon: () => {},
51
+ subscribe: () => () => {},
52
+ };
53
+
54
+ export const IconRegistryContext = createContext<IconRegistry>(NoopRegistry);
55
+
56
+ // Singleton bridge so non-React renderers (Lit's <dx-icon>, etc.) and packages that don't
57
+ // depend on @dxos/react-ui can access the same registry. The convention is intentionally a
58
+ // globalThis property so that any package can read it without importing from this module.
59
+ const REGISTRY_GLOBAL = '__dxIconRegistry' as const;
60
+
61
+ type RegistryHost = { [REGISTRY_GLOBAL]?: IconRegistry };
62
+
63
+ const getHost = (): RegistryHost => globalThis as unknown as RegistryHost;
64
+
65
+ const setActiveRegistry = (registry: IconRegistry | undefined): void => {
66
+ const host = getHost();
67
+ if (registry === undefined) {
68
+ delete host[REGISTRY_GLOBAL];
69
+ } else {
70
+ host[REGISTRY_GLOBAL] = registry;
71
+ }
72
+ };
73
+
74
+ export const getIconRegistry = (): IconRegistry => getHost()[REGISTRY_GLOBAL] ?? NoopRegistry;
75
+
76
+ export const useIconRegistry = (): IconRegistry => useContext(IconRegistryContext);
77
+
78
+ type RegistryHandle = {
79
+ registry: IconRegistry;
80
+ dispose: () => void;
81
+ };
82
+
83
+ const createDefsContainer = (): SVGSVGElement => {
84
+ const svg = document.createElementNS(SVG_NS, 'svg');
85
+ svg.setAttribute('aria-hidden', 'true');
86
+ svg.setAttribute('data-dx-icon-sprite', '');
87
+ svg.style.position = 'absolute';
88
+ svg.style.width = '0';
89
+ svg.style.height = '0';
90
+ svg.style.overflow = 'hidden';
91
+ document.body.appendChild(svg);
92
+ return svg;
93
+ };
94
+
95
+ const parseSymbolName = (name: string) => {
96
+ const match = name.match(SYMBOL_PATTERN);
97
+ if (!match) {
98
+ return undefined;
99
+ }
100
+ return { iconSet: match[1], iconName: match[2], variant: match[3] };
101
+ };
102
+
103
+ type RegistryState = {
104
+ defs: SVGSVGElement;
105
+ sources: IconSource[];
106
+ loaded: Set<string>;
107
+ inflight: Map<string, Promise<void>>;
108
+ // Permanent misses (no source for the set, 404, malformed source) — never re-fetched, so a
109
+ // component that re-renders with a bad icon name doesn't produce repeated network churn.
110
+ failed: Set<string>;
111
+ };
112
+
113
+ const ingestSvgChildrenAsSymbol = (sourceSvg: Element, id: string): SVGSymbolElement | undefined => {
114
+ if (sourceSvg.tagName.toLowerCase() !== 'svg') {
115
+ return undefined;
116
+ }
117
+ const symbol = document.createElementNS(SVG_NS, 'symbol') as SVGSymbolElement;
118
+ symbol.setAttribute('id', id);
119
+ const viewBox = sourceSvg.getAttribute('viewBox');
120
+ if (viewBox) {
121
+ symbol.setAttribute('viewBox', viewBox);
122
+ }
123
+ // Standalone sources don't set fill; the sprite convention is fill="currentColor" on each symbol.
124
+ symbol.setAttribute('fill', 'currentColor');
125
+ for (const child of Array.from(sourceSvg.children)) {
126
+ symbol.appendChild(child.cloneNode(true));
127
+ }
128
+ return symbol;
129
+ };
130
+
131
+ const loadStaticSprite = async (state: RegistryState): Promise<void> => {
132
+ let text: string;
133
+ try {
134
+ const response = await fetch(SPRITE_URL);
135
+ if (!response.ok) {
136
+ return;
137
+ }
138
+ text = await response.text();
139
+ } catch {
140
+ return;
141
+ }
142
+ const doc = new DOMParser().parseFromString(text, 'image/svg+xml');
143
+ const root = doc.documentElement;
144
+ if (root.tagName.toLowerCase() !== 'svg') {
145
+ return;
146
+ }
147
+ for (const child of Array.from(root.children)) {
148
+ const node = state.defs.ownerDocument.importNode(child, true);
149
+ state.defs.appendChild(node);
150
+ }
151
+ for (const symbol of state.defs.querySelectorAll('symbol[id]')) {
152
+ state.loaded.add(symbol.id);
153
+ }
154
+ };
155
+
156
+ const resolveDynamic = async (state: RegistryState, staticReady: Promise<void>, name: string): Promise<void> => {
157
+ // Wait until the static sprite has been ingested before deciding to fetch — the icon may already be present.
158
+ await staticReady;
159
+ if (state.loaded.has(name)) {
160
+ return;
161
+ }
162
+ const parsed = parseSymbolName(name);
163
+ const source = parsed && state.sources.find(({ iconSet }) => iconSet === parsed.iconSet);
164
+ if (!parsed || !source) {
165
+ // Sets without a configured source (custom brand glyphs, plugin namespaces) are sprite-only.
166
+ state.failed.add(name);
167
+ return;
168
+ }
169
+ let svgText: string;
170
+ try {
171
+ const response = await fetch(source.url(parsed.iconName, parsed.variant));
172
+ if (!response.ok) {
173
+ if (response.status === 404) {
174
+ state.failed.add(name);
175
+ }
176
+ return;
177
+ }
178
+ svgText = await response.text();
179
+ } catch {
180
+ // Network errors are transient — leave the name eligible for a retry.
181
+ return;
182
+ }
183
+ const doc = new DOMParser().parseFromString(svgText, 'image/svg+xml');
184
+ const symbol = ingestSvgChildrenAsSymbol(doc.documentElement, name);
185
+ if (!symbol) {
186
+ state.failed.add(name);
187
+ return;
188
+ }
189
+ state.defs.appendChild(symbol);
190
+ state.loaded.add(name);
191
+ };
192
+
193
+ const createRegistry = (sources: IconSource[]): RegistryHandle => {
194
+ const defs = createDefsContainer();
195
+ const listeners = new Set<() => void>();
196
+ const notify = () => {
197
+ for (const listener of listeners) {
198
+ listener();
199
+ }
200
+ };
201
+ const state: RegistryState = {
202
+ defs,
203
+ sources,
204
+ loaded: new Set<string>(),
205
+ inflight: new Map<string, Promise<void>>(),
206
+ failed: new Set<string>(),
207
+ };
208
+ const staticReady = loadStaticSprite(state).then(notify);
209
+
210
+ const registry: IconRegistry = {
211
+ hasIcon: (name) => state.loaded.has(name),
212
+ requestIcon: (name) => {
213
+ if (state.loaded.has(name) || state.inflight.has(name) || state.failed.has(name)) {
214
+ return;
215
+ }
216
+ const promise = resolveDynamic(state, staticReady, name)
217
+ .then(notify)
218
+ .finally(() => {
219
+ state.inflight.delete(name);
220
+ });
221
+ state.inflight.set(name, promise);
222
+ },
223
+ subscribe: (listener) => {
224
+ listeners.add(listener);
225
+ return () => {
226
+ listeners.delete(listener);
227
+ };
228
+ },
229
+ };
230
+
231
+ return {
232
+ registry,
233
+ dispose: () => {
234
+ listeners.clear();
235
+ defs.remove();
236
+ },
237
+ };
238
+ };
239
+
240
+ // Refcounted document-level singleton: ThemeProvider mounts many times in one document
241
+ // (editor tooltip roots, the shell, dialogs), and a registry per mount would re-fetch the
242
+ // static sprite and duplicate every symbol id in the DOM on each mount.
243
+ type SharedRegistry = RegistryHandle & { refCount: number };
244
+
245
+ let sharedRegistry: SharedRegistry | undefined;
246
+
247
+ export const acquireRegistry = (sources: IconSource[]): { registry: IconRegistry; release: () => void } => {
248
+ if (!sharedRegistry) {
249
+ sharedRegistry = { ...createRegistry(sources), refCount: 0 };
250
+ setActiveRegistry(sharedRegistry.registry);
251
+ }
252
+ const handle = sharedRegistry;
253
+ handle.refCount += 1;
254
+ let released = false;
255
+ return {
256
+ registry: handle.registry,
257
+ release: () => {
258
+ if (released) {
259
+ return;
260
+ }
261
+ released = true;
262
+ handle.refCount -= 1;
263
+ if (handle.refCount === 0 && sharedRegistry === handle) {
264
+ sharedRegistry = undefined;
265
+ if (getIconRegistry() === handle.registry) {
266
+ setActiveRegistry(undefined);
267
+ }
268
+ handle.dispose();
269
+ }
270
+ },
271
+ };
272
+ };
@@ -4,5 +4,13 @@
4
4
 
5
5
  export { type Label, isLabel, toLocalizedString } from '@dxos/ui-types/translations';
6
6
 
7
+ export {
8
+ type IconRegistry,
9
+ type IconSource,
10
+ getIconRegistry,
11
+ phosphorIconSource,
12
+ useIconRegistry,
13
+ } from './icon-registry';
14
+ export * from './IconRegistry';
7
15
  export * from './ThemeProvider';
8
- export { TranslationsContext, useTranslation } from './TranslationsProvider';
16
+ export { TranslationsContext, useTranslation } from './TranslationsContext';
@@ -54,14 +54,14 @@ const layouts: Record<ContainerType, FC<ContainerProps>> = {
54
54
  ),
55
55
 
56
56
  centered: ({ classNames, children }: ContainerProps) => (
57
- <div className={mx('fixed inset-0 grid overflow-hidden place-items-center bg-trim-surface')}>
58
- <div className={mx('flex flex-col bg-base-surface', classNames)}>{children}</div>
57
+ <div className={mx('fixed inset-0 grid overflow-hidden place-items-center dx-deck-surface')}>
58
+ <div className={mx('flex flex-col dx-base-surface', classNames)}>{children}</div>
59
59
  </div>
60
60
  ),
61
61
 
62
62
  column: ({ classNames, children }: ContainerProps) => (
63
- <div className='fixed inset-0 flex overflow-hidden justify-center bg-trim-surface'>
64
- <div className={mx('flex flex-col w-[40rem] bg-base-surface', classNames)}>{children}</div>
63
+ <div className='fixed inset-0 flex overflow-hidden justify-center dx-deck-surface'>
64
+ <div className={mx('flex flex-col w-[40rem] dx-base-surface', classNames)}>{children}</div>
65
65
  </div>
66
66
  ),
67
67
  };
@@ -38,9 +38,9 @@ const Panel = ({
38
38
 
39
39
  export const withLayoutVariants = ({
40
40
  elevations = [
41
- { elevation: 'dialog', surface: 'bg-modal-surface' },
42
- { elevation: 'positioned', surface: 'bg-card-surface' },
43
- { elevation: 'base', surface: 'bg-base-surface' },
41
+ { elevation: 'dialog', surface: 'dx-modal-surface' },
42
+ { elevation: 'positioned', surface: 'dx-card-surface' },
43
+ { elevation: 'base', surface: 'dx-base-surface' },
44
44
  ],
45
45
  densities = ['md'],
46
46
  }: Config = {}): Decorator => {
@@ -20,7 +20,7 @@ import { defaultTx } from '../../theme';
20
20
  * empty.
21
21
  */
22
22
  export const withTheme =
23
- ({ tx = defaultTx, noCache, platform }: Partial<ThemeContextValue> = {}): Decorator =>
23
+ ({ tx = defaultTx, platform }: Partial<ThemeContextValue> = {}): Decorator =>
24
24
  (Story, context) => {
25
25
  const {
26
26
  globals: { theme },
@@ -33,7 +33,6 @@ export const withTheme =
33
33
  tx={tx}
34
34
  themeMode={(theme as ThemeMode) || 'dark'}
35
35
  resourceExtensions={translations}
36
- noCache={noCache}
37
36
  platform={platform}
38
37
  >
39
38
  <Tooltip.Provider>
@@ -26,6 +26,7 @@ import { scrollAreaTheme } from '../components/ScrollArea/ScrollArea.theme';
26
26
  import { selectTheme } from '../components/Select/Select.theme';
27
27
  import { separatorTheme } from '../components/Separator/Separator.theme';
28
28
  import { skeletonTheme } from '../components/Skeleton/Skeleton.theme';
29
+ import { sliderTheme } from '../components/Slider/Slider.theme';
29
30
  import { splitterTheme } from '../components/Splitter/Splitter.theme';
30
31
  import { statusTheme } from '../components/Status/Status.theme';
31
32
  import { tagTheme } from '../components/Tag/Tag.theme';
@@ -68,6 +69,7 @@ export const defaultTheme: Theme<Record<string, any>> = {
68
69
  select: selectTheme,
69
70
  separator: separatorTheme,
70
71
  skeleton: skeletonTheme,
72
+ slider: sliderTheme,
71
73
  splitter: splitterTheme,
72
74
  status: statusTheme,
73
75
  tag: tagTheme,
@@ -25,6 +25,7 @@ export * from '../components/ScrollArea/ScrollArea.theme';
25
25
  export * from '../components/Select/Select.theme';
26
26
  export * from '../components/Separator/Separator.theme';
27
27
  export * from '../components/Skeleton/Skeleton.theme';
28
+ export * from '../components/Slider/Slider.theme';
28
29
  export * from '../components/Splitter/Splitter.theme';
29
30
  export * from '../components/Status/Status.theme';
30
31
  export * from '../components/Tag/Tag.theme';
@@ -0,0 +1,80 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { Slot } from '@radix-ui/react-slot';
6
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
7
+ import React, { type ReactNode, forwardRef } from 'react';
8
+
9
+ import { withLayout, withTheme } from '../testing';
10
+ import { composable, composableProps, slottable } from './slots';
11
+
12
+ //
13
+ // A slottable host and two candidate children: one built with `composable()`, one a plain
14
+ // `forwardRef`. Radix `Slot` merges its props into whichever child it is given, but a child that
15
+ // does not spread them drops the injected `className` and `ref` — silently, with no error and no
16
+ // type complaint. `slottable()` detects that in dev builds and marks the rendered element with
17
+ // `dx-slot-warning` (a dashed rose outline).
18
+ //
19
+
20
+ const Host = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
21
+ const Comp: any = asChild ? Slot : 'div';
22
+ return (
23
+ <Comp {...composableProps(props, { classNames: 'p-2 rounded-sm bg-base-surface text-base-fg' })} ref={forwardedRef}>
24
+ {children}
25
+ </Comp>
26
+ );
27
+ });
28
+
29
+ /** Correct: built with `composable()`, so it carries the COMPOSABLE marker and spreads props. */
30
+ const GoodChild = composable<HTMLDivElement>(({ children, ...props }, forwardedRef) => (
31
+ <div {...composableProps(props)} ref={forwardedRef}>
32
+ {children}
33
+ </div>
34
+ ));
35
+
36
+ /** Incorrect: a plain `forwardRef`. It renders fine on its own, but as an `asChild` target the
37
+ * host's className never reaches the DOM — the failure this diagnostic exists to surface. */
38
+ const BadChild = forwardRef<HTMLDivElement, { children?: ReactNode }>(({ children }, forwardedRef) => (
39
+ <div ref={forwardedRef}>{children}</div>
40
+ ));
41
+
42
+ const Row = ({ label, children }: { label: string; children: ReactNode }) => (
43
+ <div className='flex flex-col gap-1'>
44
+ <span className='text-sm text-description'>{label}</span>
45
+ {children}
46
+ </div>
47
+ );
48
+
49
+ const DefaultStory = () => (
50
+ <div className='flex flex-col gap-6 p-4 w-96'>
51
+ <Row label='No asChild — host renders its own element.'>
52
+ <Host>Plain host</Host>
53
+ </Row>
54
+
55
+ <Row label='asChild with a composable child — no warning.'>
56
+ <Host asChild>
57
+ <GoodChild>Composable child</GoodChild>
58
+ </Host>
59
+ </Row>
60
+
61
+ <Row label='asChild with a non-composable child — dashed rose outline, and a console warning.'>
62
+ <Host asChild>
63
+ <BadChild>Non-composable child</BadChild>
64
+ </Host>
65
+ </Row>
66
+ </div>
67
+ );
68
+
69
+ const meta = {
70
+ title: 'ui/react-ui-core/util/slots',
71
+ render: DefaultStory,
72
+ decorators: [withTheme(), withLayout()],
73
+ parameters: { layout: 'fullscreen' },
74
+ } satisfies Meta<typeof DefaultStory>;
75
+
76
+ export default meta;
77
+
78
+ type Story = StoryObj<typeof meta>;
79
+
80
+ export const Default: Story = {};
package/src/util/slots.ts CHANGED
@@ -21,12 +21,13 @@ import { type ComposableProps, type SlottableProps, type ThemedClassName } from
21
21
 
22
22
  /**
23
23
  * Reconciles className properties from a parent slot.
24
- * - `className` is set by the Slot merge mechanism.
24
+ * - `className` is injected at runtime by the Slot merge mechanism; it is absent from
25
+ * `ComposableProps` so consumers cannot pass it, hence the widened parameter type here.
25
26
  * - `classNames` is the consumer-facing prop for theming overrides.
26
27
  * Use `composableProps` to reconcile both into a single `className`.
27
28
  */
28
29
  export const composableProps = <P extends HTMLElement = HTMLElement>(
29
- { className, classNames, role, style, ...props }: ComposableProps,
30
+ { className, classNames, role, style, ...props }: ComposableProps & { className?: string },
30
31
  { classNames: defaultClassNames, ...defaults }: ThemedClassName<Partial<HTMLAttributes<P>>> | undefined = {},
31
32
  ) => ({
32
33
  // Default props.
@@ -35,8 +36,10 @@ export const composableProps = <P extends HTMLElement = HTMLElement>(
35
36
  // Spread supplied props.
36
37
  ...props,
37
38
 
38
- // Prefer explicit role, then defaults role, then 'none'.
39
- role: role ?? defaults.role ?? 'none',
39
+ // No `role='none'` default. On a div it is a no-op, so the only elements it ever reached were the
40
+ // semantic ones — `Card.Header` renders a <header>, `Main.Content` a <main> — where it stripped
41
+ // the landmark. A part that genuinely wants its element ignored passes the role itself.
42
+ ...((role ?? defaults.role) ? { role: role ?? defaults.role } : null),
40
43
 
41
44
  // Merge styles.
42
45
  style: { ...defaults.style, ...style } as CSSProperties,
@@ -73,7 +76,9 @@ export function slottable<E extends HTMLElement, P extends object = {}>(
73
76
  ): ForwardRefExoticComponent<SlottableProps<P> & RefAttributes<E>> {
74
77
  const wrapped = (props: SlottableProps<P> & HTMLAttributes<E>, forwardedRef: ForwardedRef<E>) => {
75
78
  let warn = false;
76
- if (props.asChild) {
79
+ // Dev-only: the check walks children on every render of every `asChild` part, and the marker it
80
+ // paints is a developer diagnostic, not a product affordance.
81
+ if (process.env.NODE_ENV !== 'production' && props.asChild) {
77
82
  try {
78
83
  const child = Children.only(props.children);
79
84
  if (isValidElement(child) && typeof child.type !== 'string' && !(child.type as any)[COMPOSABLE]) {
@@ -89,6 +94,10 @@ export function slottable<E extends HTMLElement, P extends object = {}>(
89
94
 
90
95
  const result = render(props, forwardedRef);
91
96
  if (warn) {
97
+ // The marker cannot go on the rendered element: under `asChild` that element is the `Slot`,
98
+ // which merges the class into the very child that is dropping props — the bug being flagged
99
+ // swallows its own diagnostic. So it goes on a wrapper, which `dx-slot-warning` renders as
100
+ // `display: contents` so it adds no layout box; the outline is drawn on its children instead.
92
101
  return createElement('div', { role: 'none', className: 'dx-slot-warning' }, result);
93
102
  }
94
103
 
@@ -1,46 +0,0 @@
1
- // src/translations.ts
2
- var translationKey = "@dxos/react-ui";
3
- var translations = [
4
- {
5
- "en-US": {
6
- [translationKey]: {
7
- "toolbar-menu.label": "Action menu",
8
- "toolbar-drag-handle.label": "Drag to rearrange",
9
- "toolbar-close.label": "Close",
10
- "toolbar-delete.label": "Delete",
11
- "system-button.star.label": "Star",
12
- "system-button.unstar.label": "Unstar",
13
- "system-button.bookmark.label": "Bookmark",
14
- "system-button.unbookmark.label": "Remove bookmark",
15
- "system-button.expand.label": "Expand",
16
- "system-button.collapse.label": "Collapse",
17
- "system-button.add.label": "Add",
18
- "system-button.delete.label": "Delete",
19
- "system-button.edit.label": "Edit",
20
- "system-button.close.label": "Close",
21
- "system-button.upload.label": "Upload",
22
- "system-button.download.label": "Download",
23
- "system-button.clipboard.label": "Copy",
24
- "carousel-viewport.label": "Carousel",
25
- "carousel-prev.label": "Previous slide",
26
- "carousel-next.label": "Next slide",
27
- "carousel-indicators.label": "Carousel slides",
28
- "carousel-go-to.label": "Go to slide {{index}}",
29
- "date-picker.placeholder.single.label": "Pick a date",
30
- "date-picker.placeholder.range.label": "Pick a date range",
31
- "date-picker.placeholder.multiple.label": "Pick dates",
32
- "date-picker.clear.label": "Clear",
33
- "calendar.nav.previous.label": "Previous month",
34
- "calendar.nav.next.label": "Next month",
35
- "calendar.footer.today.label": "Today",
36
- "trigger-button.label": "Open"
37
- }
38
- }
39
- }
40
- ];
41
-
42
- export {
43
- translationKey,
44
- translations
45
- };
46
- //# sourceMappingURL=chunk-CMHHVHX3.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/translations.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Resource } from '@dxos/react-ui';\n\nexport const translationKey = '@dxos/react-ui';\n\nexport const translations = [\n {\n 'en-US': {\n [translationKey]: {\n 'toolbar-menu.label': 'Action menu',\n 'toolbar-drag-handle.label': 'Drag to rearrange',\n 'toolbar-close.label': 'Close',\n 'toolbar-delete.label': 'Delete',\n\n 'system-button.star.label': 'Star',\n 'system-button.unstar.label': 'Unstar',\n 'system-button.bookmark.label': 'Bookmark',\n 'system-button.unbookmark.label': 'Remove bookmark',\n 'system-button.expand.label': 'Expand',\n 'system-button.collapse.label': 'Collapse',\n 'system-button.add.label': 'Add',\n 'system-button.delete.label': 'Delete',\n 'system-button.edit.label': 'Edit',\n 'system-button.close.label': 'Close',\n 'system-button.upload.label': 'Upload',\n 'system-button.download.label': 'Download',\n 'system-button.clipboard.label': 'Copy',\n\n 'carousel-viewport.label': 'Carousel',\n 'carousel-prev.label': 'Previous slide',\n 'carousel-next.label': 'Next slide',\n 'carousel-indicators.label': 'Carousel slides',\n 'carousel-go-to.label': 'Go to slide {{index}}',\n\n 'date-picker.placeholder.single.label': 'Pick a date',\n 'date-picker.placeholder.range.label': 'Pick a date range',\n 'date-picker.placeholder.multiple.label': 'Pick dates',\n 'date-picker.clear.label': 'Clear',\n\n 'calendar.nav.previous.label': 'Previous month',\n 'calendar.nav.next.label': 'Next month',\n 'calendar.footer.today.label': 'Today',\n\n 'trigger-button.label': 'Open',\n },\n },\n },\n] as const satisfies Resource[];\n"],
5
- "mappings": ";AAMO,IAAMA,iBAAiB;AAEvB,IAAMC,eAAe;EAC1B;IACE,SAAS;MACP,CAACD,cAAAA,GAAiB;QAChB,sBAAsB;QACtB,6BAA6B;QAC7B,uBAAuB;QACvB,wBAAwB;QAExB,4BAA4B;QAC5B,8BAA8B;QAC9B,gCAAgC;QAChC,kCAAkC;QAClC,8BAA8B;QAC9B,gCAAgC;QAChC,2BAA2B;QAC3B,8BAA8B;QAC9B,4BAA4B;QAC5B,6BAA6B;QAC7B,8BAA8B;QAC9B,gCAAgC;QAChC,iCAAiC;QAEjC,2BAA2B;QAC3B,uBAAuB;QACvB,uBAAuB;QACvB,6BAA6B;QAC7B,wBAAwB;QAExB,wCAAwC;QACxC,uCAAuC;QACvC,0CAA0C;QAC1C,2BAA2B;QAE3B,+BAA+B;QAC/B,2BAA2B;QAC3B,+BAA+B;QAE/B,wBAAwB;MAC1B;IACF;EACF;;",
6
- "names": ["translationKey", "translations"]
7
- }