@dxos/react-ui 0.8.4-main.422d1c7879 → 0.8.4-main.43cb759274

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 (478) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/browser/chunk-5SPBSIWS.mjs +33 -0
  4. package/dist/lib/browser/chunk-5SPBSIWS.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-KVJDKHLF.mjs +1613 -0
  6. package/dist/lib/browser/chunk-KVJDKHLF.mjs.map +7 -0
  7. package/dist/lib/browser/index.mjs +2661 -1515
  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 +9 -12
  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-5JYHWJDZ.mjs +1615 -0
  15. package/dist/lib/node-esm/chunk-5JYHWJDZ.mjs.map +7 -0
  16. package/dist/lib/node-esm/chunk-FPVTVXND.mjs +35 -0
  17. package/dist/lib/node-esm/chunk-FPVTVXND.mjs.map +7 -0
  18. package/dist/lib/node-esm/index.mjs +2661 -1515
  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 +9 -12
  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 +1 -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 -0
  42. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
  43. package/dist/types/src/components/Button/IconButton.stories.d.ts +1 -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/Toggle.stories.d.ts.map +1 -1
  48. package/dist/types/src/components/Button/ToggleGroup.d.ts +2 -2
  49. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +2 -2
  50. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -1
  51. package/dist/types/src/components/Calendar/Calendar.d.ts +33 -0
  52. package/dist/types/src/components/Calendar/Calendar.d.ts.map +1 -0
  53. package/dist/types/src/components/Calendar/Calendar.stories.d.ts +9 -0
  54. package/dist/types/src/components/Calendar/Calendar.stories.d.ts.map +1 -0
  55. package/dist/types/src/components/Calendar/Calendar.theme.d.ts +4 -0
  56. package/dist/types/src/components/Calendar/Calendar.theme.d.ts.map +1 -0
  57. package/dist/types/src/components/Calendar/index.d.ts +2 -0
  58. package/dist/types/src/components/Calendar/index.d.ts.map +1 -0
  59. package/dist/types/src/components/Card/Card.d.ts +60 -56
  60. package/dist/types/src/components/Card/Card.d.ts.map +1 -1
  61. package/dist/types/src/components/Card/Card.stories.d.ts +1 -0
  62. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -1
  63. package/dist/types/src/components/Card/Card.theme.d.ts +12 -0
  64. package/dist/types/src/components/Card/Card.theme.d.ts.map +1 -0
  65. package/dist/types/src/components/Carousel/Carousel.d.ts +102 -0
  66. package/dist/types/src/components/Carousel/Carousel.d.ts.map +1 -0
  67. package/dist/types/src/components/Carousel/index.d.ts +2 -0
  68. package/dist/types/src/components/Carousel/index.d.ts.map +1 -0
  69. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  70. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  71. package/dist/types/src/components/Clipboard/index.d.ts +1 -1
  72. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  73. package/dist/types/src/{primitives → components}/Column/Column.d.ts +4 -4
  74. package/dist/types/src/components/Column/Column.d.ts.map +1 -0
  75. package/dist/types/src/components/Column/Column.stories.d.ts.map +1 -0
  76. package/dist/types/src/components/Column/Column.theme.d.ts +9 -0
  77. package/dist/types/src/components/Column/Column.theme.d.ts.map +1 -0
  78. package/dist/types/src/components/Column/index.d.ts +3 -0
  79. package/dist/types/src/components/Column/index.d.ts.map +1 -0
  80. package/dist/types/src/components/Column/withColumn.d.ts +21 -0
  81. package/dist/types/src/components/Column/withColumn.d.ts.map +1 -0
  82. package/dist/types/src/components/DatePicker/DatePicker.d.ts +72 -0
  83. package/dist/types/src/components/DatePicker/DatePicker.d.ts.map +1 -0
  84. package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts +10 -0
  85. package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts.map +1 -0
  86. package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts +6 -0
  87. package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts.map +1 -0
  88. package/dist/types/src/components/DatePicker/index.d.ts +2 -0
  89. package/dist/types/src/components/DatePicker/index.d.ts.map +1 -0
  90. package/dist/types/src/components/Dialog/AlertDialog.d.ts +20 -20
  91. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
  92. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -1
  93. package/dist/types/src/components/Dialog/Dialog.d.ts +21 -19
  94. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  95. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
  96. package/dist/types/src/components/Dialog/Dialog.theme.d.ts +10 -0
  97. package/dist/types/src/components/Dialog/Dialog.theme.d.ts.map +1 -0
  98. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -1
  99. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -1
  100. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -1
  101. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -1
  102. package/dist/types/src/components/Focus/Focus.d.ts +2 -2
  103. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -1
  104. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -1
  105. package/dist/types/src/components/Focus/Focus.theme.d.ts +6 -0
  106. package/dist/types/src/components/Focus/Focus.theme.d.ts.map +1 -0
  107. package/dist/types/src/components/Icon/Icon.d.ts +1 -0
  108. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  109. package/dist/types/src/components/Icon/Icon.stories.d.ts +1 -1
  110. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -1
  111. package/dist/types/src/components/Icon/Icon.theme.d.ts +11 -0
  112. package/dist/types/src/components/Icon/Icon.theme.d.ts.map +1 -0
  113. package/dist/types/src/components/Icon/IconBlock.d.ts +15 -0
  114. package/dist/types/src/components/Icon/IconBlock.d.ts.map +1 -0
  115. package/dist/types/src/components/Icon/index.d.ts +1 -0
  116. package/dist/types/src/components/Icon/index.d.ts.map +1 -1
  117. package/dist/types/src/components/Image/Image.d.ts.map +1 -1
  118. package/dist/types/src/components/Image/Image.stories.d.ts +2 -2
  119. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -1
  120. package/dist/types/src/components/Input/Input.d.ts +88 -13
  121. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  122. package/dist/types/src/components/Input/Input.stories.d.ts +14 -3
  123. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  124. package/dist/types/src/components/Input/Input.theme.d.ts +115 -0
  125. package/dist/types/src/components/Input/Input.theme.d.ts.map +1 -0
  126. package/dist/types/src/components/Input/SegmentedInput.d.ts +79 -0
  127. package/dist/types/src/components/Input/SegmentedInput.d.ts.map +1 -0
  128. package/dist/types/src/components/Input/constants.d.ts +2 -0
  129. package/dist/types/src/components/Input/constants.d.ts.map +1 -0
  130. package/dist/types/src/components/Input/index.d.ts +2 -0
  131. package/dist/types/src/components/Input/index.d.ts.map +1 -1
  132. package/dist/types/src/components/Link/Link.d.ts.map +1 -1
  133. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  134. package/dist/types/src/components/Link/Link.theme.d.ts +6 -0
  135. package/dist/types/src/components/Link/Link.theme.d.ts.map +1 -0
  136. package/dist/types/src/components/List/List.d.ts +2 -2
  137. package/dist/types/src/components/List/List.d.ts.map +1 -1
  138. package/dist/types/src/components/List/List.stories.d.ts +1 -1
  139. package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
  140. package/dist/types/src/components/List/List.theme.d.ts +7 -0
  141. package/dist/types/src/components/List/List.theme.d.ts.map +1 -0
  142. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -1
  143. package/dist/types/src/components/List/Tree.d.ts +2 -2
  144. package/dist/types/src/components/List/Tree.d.ts.map +1 -1
  145. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -1
  146. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -1
  147. package/dist/types/src/components/List/Treegrid.d.ts +2 -2
  148. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
  149. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -1
  150. package/dist/types/src/components/List/Treegrid.theme.d.ts +7 -0
  151. package/dist/types/src/components/List/Treegrid.theme.d.ts.map +1 -0
  152. package/dist/types/src/components/Main/Main.d.ts +9 -5
  153. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  154. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  155. package/dist/types/src/components/Main/Main.theme.d.ts +20 -0
  156. package/dist/types/src/components/Main/Main.theme.d.ts.map +1 -0
  157. package/dist/types/src/components/Main/constants.d.ts +3 -0
  158. package/dist/types/src/components/Main/constants.d.ts.map +1 -0
  159. package/dist/types/src/components/Main/index.d.ts +1 -0
  160. package/dist/types/src/components/Main/index.d.ts.map +1 -1
  161. package/dist/types/src/components/Main/useSwipeToDismiss.d.ts.map +1 -1
  162. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts +43 -0
  163. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts.map +1 -0
  164. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts +16 -0
  165. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts.map +1 -0
  166. package/dist/types/src/components/MediaPlayer/index.d.ts +2 -0
  167. package/dist/types/src/components/MediaPlayer/index.d.ts.map +1 -0
  168. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
  169. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -1
  170. package/dist/types/src/components/Menu/DropdownMenu.d.ts +11 -3
  171. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
  172. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -1
  173. package/dist/types/src/components/Menu/Menu.theme.d.ts +7 -0
  174. package/dist/types/src/components/Menu/Menu.theme.d.ts.map +1 -0
  175. package/dist/types/src/components/Message/Message.d.ts +3 -3
  176. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  177. package/dist/types/src/components/Message/Message.stories.d.ts +5 -1
  178. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  179. package/dist/types/src/components/Message/Message.theme.d.ts +7 -0
  180. package/dist/types/src/components/Message/Message.theme.d.ts.map +1 -0
  181. package/dist/types/src/{primitives → components}/Panel/Panel.d.ts +5 -5
  182. package/dist/types/src/components/Panel/Panel.d.ts.map +1 -0
  183. package/dist/types/src/components/Panel/Panel.stories.d.ts.map +1 -0
  184. package/dist/types/src/components/Panel/Panel.theme.d.ts +13 -0
  185. package/dist/types/src/components/Panel/Panel.theme.d.ts.map +1 -0
  186. package/dist/types/src/components/Panel/index.d.ts.map +1 -0
  187. package/dist/types/src/components/Popover/Popover.d.ts +10 -2
  188. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  189. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  190. package/dist/types/src/components/Popover/Popover.theme.d.ts +8 -0
  191. package/dist/types/src/components/Popover/Popover.theme.d.ts.map +1 -0
  192. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +2 -2
  193. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  194. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +2 -2
  195. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  196. package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts +17 -0
  197. package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts.map +1 -0
  198. package/dist/types/src/components/ScrollArea/index.d.ts +1 -0
  199. package/dist/types/src/components/ScrollArea/index.d.ts.map +1 -1
  200. package/dist/types/src/components/ScrollArea/scrollbar.d.ts +18 -0
  201. package/dist/types/src/components/ScrollArea/scrollbar.d.ts.map +1 -0
  202. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +20 -18
  203. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  204. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
  205. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  206. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  207. package/dist/types/src/components/Select/Select.theme.d.ts +6 -0
  208. package/dist/types/src/components/Select/Select.theme.d.ts.map +1 -0
  209. package/dist/types/src/components/Separator/Separator.theme.d.ts +7 -0
  210. package/dist/types/src/components/Separator/Separator.theme.d.ts.map +1 -0
  211. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -1
  212. package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts +6 -0
  213. package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts.map +1 -0
  214. package/dist/types/src/components/Splitter/Splitter.d.ts +6 -8
  215. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -1
  216. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -1
  217. package/dist/types/src/components/Splitter/Splitter.theme.d.ts +4 -0
  218. package/dist/types/src/components/Splitter/Splitter.theme.d.ts.map +1 -0
  219. package/dist/types/src/components/Status/Status.d.ts +1 -1
  220. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  221. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  222. package/dist/types/src/components/Status/Status.theme.d.ts +7 -0
  223. package/dist/types/src/components/Status/Status.theme.d.ts.map +1 -0
  224. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  225. package/dist/types/src/components/Tag/Tag.theme.d.ts +6 -0
  226. package/dist/types/src/components/Tag/Tag.theme.d.ts.map +1 -0
  227. package/dist/types/src/components/Toast/Toast.d.ts +12 -9
  228. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  229. package/dist/types/src/components/Toast/Toast.stories.d.ts +5 -2
  230. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  231. package/dist/types/src/components/Toast/Toast.theme.d.ts +4 -0
  232. package/dist/types/src/components/Toast/Toast.theme.d.ts.map +1 -0
  233. package/dist/types/src/components/Toolbar/Toolbar.d.ts +24 -12
  234. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  235. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  236. package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts +8 -0
  237. package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts.map +1 -0
  238. package/dist/types/src/components/Tooltip/Tooltip.d.ts +8 -8
  239. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  240. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  241. package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts +6 -0
  242. package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts.map +1 -0
  243. package/dist/types/src/components/Tooltip/index.d.ts +1 -0
  244. package/dist/types/src/components/Tooltip/index.d.ts.map +1 -1
  245. package/dist/types/src/components/Tooltip/tooltipContent.d.ts +4 -0
  246. package/dist/types/src/components/Tooltip/tooltipContent.d.ts.map +1 -0
  247. package/dist/types/src/components/index.d.ts +7 -4
  248. package/dist/types/src/components/index.d.ts.map +1 -1
  249. package/dist/types/src/exemplars/generics.stories.d.ts +1 -1
  250. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -1
  251. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -1
  252. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -1
  253. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -1
  254. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  255. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  256. package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
  257. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  258. package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -1
  259. package/dist/types/src/hooks/useTranslationsContext.d.ts +1 -1
  260. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  261. package/dist/types/src/index.d.ts +1 -0
  262. package/dist/types/src/index.d.ts.map +1 -1
  263. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  264. package/dist/types/src/playground/Custom.stories.d.ts +1 -1
  265. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  266. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  267. package/dist/types/src/primitives/Container/Container.d.ts +1 -1
  268. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -1
  269. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -1
  270. package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts.map +1 -1
  271. package/dist/types/src/primitives/DensityProvider/index.d.ts.map +1 -0
  272. package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  273. package/dist/types/src/primitives/ElevationProvider/index.d.ts.map +1 -0
  274. package/dist/types/src/primitives/Flex/Flex.d.ts +1 -1
  275. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -1
  276. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -1
  277. package/dist/types/src/primitives/Grid/Grid.d.ts +1 -1
  278. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -1
  279. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -1
  280. package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  281. package/dist/types/src/primitives/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  282. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts +128 -0
  283. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts.map +1 -0
  284. package/dist/types/src/primitives/ThemeProvider/index.d.ts +4 -0
  285. package/dist/types/src/primitives/ThemeProvider/index.d.ts.map +1 -0
  286. package/dist/types/src/primitives/index.d.ts +3 -2
  287. package/dist/types/src/primitives/index.d.ts.map +1 -1
  288. package/dist/types/src/testing/Loading.d.ts.map +1 -1
  289. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
  290. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
  291. package/dist/types/src/testing/decorators/withTheme.d.ts +5 -1
  292. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  293. package/dist/types/src/theme/bindTheme.d.ts +3 -0
  294. package/dist/types/src/theme/bindTheme.d.ts.map +1 -0
  295. package/dist/types/src/theme/defaultTheme.d.ts +4 -0
  296. package/dist/types/src/theme/defaultTheme.d.ts.map +1 -0
  297. package/dist/types/src/theme/index.d.ts +31 -0
  298. package/dist/types/src/theme/index.d.ts.map +1 -0
  299. package/dist/types/src/translations.d.ts +17 -3
  300. package/dist/types/src/translations.d.ts.map +1 -1
  301. package/dist/types/src/util/index.d.ts +2 -1
  302. package/dist/types/src/util/index.d.ts.map +1 -1
  303. package/dist/types/src/util/mobile.d.ts +5 -0
  304. package/dist/types/src/util/mobile.d.ts.map +1 -0
  305. package/dist/types/src/util/slots.d.ts +57 -0
  306. package/dist/types/src/util/slots.d.ts.map +1 -0
  307. package/dist/types/src/util/usePx.d.ts.map +1 -1
  308. package/dist/types/tsconfig.tsbuildinfo +1 -1
  309. package/package.json +29 -18
  310. package/src/components/Avatars/Avatar.theme.ts +93 -0
  311. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +1 -1
  312. package/src/components/Breadcrumb/Breadcrumb.theme.ts +26 -0
  313. package/src/components/Breadcrumb/Breadcrumb.tsx +14 -2
  314. package/src/components/Button/Button.theme.ts +31 -0
  315. package/src/components/Button/Button.tsx +1 -1
  316. package/src/components/Button/IconButton.stories.tsx +51 -3
  317. package/src/components/Button/IconButton.theme.ts +21 -0
  318. package/src/components/Button/IconButton.tsx +3 -2
  319. package/src/components/Calendar/Calendar.stories.tsx +43 -0
  320. package/src/components/Calendar/Calendar.theme.ts +74 -0
  321. package/src/components/Calendar/Calendar.tsx +196 -0
  322. package/src/components/Calendar/index.ts +5 -0
  323. package/src/components/Card/Card.stories.tsx +43 -22
  324. package/src/components/Card/Card.theme.ts +93 -0
  325. package/src/components/Card/Card.tsx +143 -160
  326. package/src/components/Carousel/Carousel.tsx +371 -0
  327. package/src/components/Carousel/index.ts +5 -0
  328. package/src/components/Clipboard/CopyButton.tsx +3 -3
  329. package/src/{primitives → components}/Column/Column.stories.tsx +1 -1
  330. package/src/components/Column/Column.theme.ts +48 -0
  331. package/src/{primitives → components}/Column/Column.tsx +2 -1
  332. package/src/{primitives → components}/Column/index.ts +1 -0
  333. package/src/components/Column/withColumn.ts +27 -0
  334. package/src/components/DatePicker/DatePicker.stories.tsx +102 -0
  335. package/src/components/DatePicker/DatePicker.theme.ts +35 -0
  336. package/src/components/DatePicker/DatePicker.tsx +279 -0
  337. package/src/components/DatePicker/index.ts +5 -0
  338. package/src/components/Dialog/AlertDialog.tsx +12 -13
  339. package/src/components/Dialog/Dialog.stories.tsx +2 -2
  340. package/src/components/Dialog/Dialog.theme.ts +61 -0
  341. package/src/components/Dialog/Dialog.tsx +46 -17
  342. package/src/components/ErrorFallback/ErrorFallback.tsx +14 -8
  343. package/src/components/ErrorFallback/ErrorStack.tsx +12 -6
  344. package/src/components/Focus/Focus.theme.ts +32 -0
  345. package/src/components/Focus/Focus.tsx +1 -1
  346. package/src/components/Icon/Icon.theme.ts +45 -0
  347. package/src/components/Icon/Icon.tsx +10 -3
  348. package/src/components/Icon/IconBlock.tsx +38 -0
  349. package/src/components/Icon/index.ts +1 -0
  350. package/src/components/Image/Image.stories.tsx +1 -1
  351. package/src/components/Image/Image.tsx +15 -5
  352. package/src/components/Input/Input.stories.tsx +132 -29
  353. package/src/components/Input/Input.theme.ts +191 -0
  354. package/src/components/Input/Input.tsx +207 -2
  355. package/src/components/Input/SegmentedInput.tsx +454 -0
  356. package/src/components/Input/constants.ts +5 -0
  357. package/src/components/Input/index.ts +2 -0
  358. package/src/components/Link/Link.theme.ts +16 -0
  359. package/src/components/Link/Link.tsx +10 -2
  360. package/src/components/List/List.stories.tsx +1 -1
  361. package/src/components/List/List.theme.ts +47 -0
  362. package/src/components/List/List.tsx +3 -3
  363. package/src/components/List/ListDropIndicator.tsx +1 -2
  364. package/src/components/List/Tree.stories.tsx +1 -1
  365. package/src/components/List/TreeDropIndicator.tsx +3 -3
  366. package/src/components/List/Treegrid.theme.ts +35 -0
  367. package/src/components/List/Treegrid.tsx +3 -4
  368. package/src/components/Main/Main.theme.ts +29 -0
  369. package/src/components/Main/Main.tsx +9 -7
  370. package/src/components/Main/constants.ts +6 -0
  371. package/src/components/Main/index.ts +1 -0
  372. package/src/components/MediaPlayer/MediaPlayer.stories.tsx +50 -0
  373. package/src/components/MediaPlayer/MediaPlayer.tsx +178 -0
  374. package/src/components/MediaPlayer/index.ts +5 -0
  375. package/src/components/Menu/ContextMenu.stories.tsx +0 -3
  376. package/src/components/Menu/DropdownMenu.stories.tsx +0 -3
  377. package/src/components/Menu/DropdownMenu.tsx +15 -15
  378. package/src/components/Menu/Menu.theme.ts +48 -0
  379. package/src/components/Message/Message.stories.tsx +43 -5
  380. package/src/components/Message/Message.theme.ts +44 -0
  381. package/src/components/Message/Message.tsx +76 -16
  382. package/src/{primitives → components}/Panel/Panel.stories.tsx +2 -3
  383. package/src/components/Panel/Panel.theme.ts +42 -0
  384. package/src/{primitives → components}/Panel/Panel.tsx +2 -1
  385. package/src/components/Popover/Popover.theme.ts +40 -0
  386. package/src/components/Popover/Popover.tsx +7 -7
  387. package/src/components/ScrollArea/ScrollArea.stories.tsx +2 -6
  388. package/src/components/ScrollArea/ScrollArea.theme.ts +107 -0
  389. package/src/components/ScrollArea/ScrollArea.tsx +3 -2
  390. package/src/components/ScrollArea/index.ts +1 -0
  391. package/src/components/ScrollArea/scrollbar.ts +21 -0
  392. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +1 -1
  393. package/src/components/ScrollContainer/ScrollContainer.tsx +58 -58
  394. package/src/components/Select/Select.theme.ts +55 -0
  395. package/src/components/Select/Select.tsx +26 -10
  396. package/src/components/Separator/Separator.theme.ts +23 -0
  397. package/src/components/Skeleton/Skeleton.theme.ts +22 -0
  398. package/src/components/Splitter/Splitter.stories.tsx +1 -1
  399. package/src/components/Splitter/Splitter.theme.ts +18 -0
  400. package/src/components/Splitter/Splitter.tsx +10 -15
  401. package/src/components/Status/Status.theme.ts +31 -0
  402. package/src/components/Status/Status.tsx +1 -2
  403. package/src/components/Tag/Tag.theme.ts +22 -0
  404. package/src/components/Toast/Toast.stories.tsx +41 -20
  405. package/src/components/Toast/Toast.theme.ts +56 -0
  406. package/src/components/Toast/Toast.tsx +95 -27
  407. package/src/components/Toolbar/Toolbar.theme.ts +36 -0
  408. package/src/components/Toolbar/Toolbar.tsx +67 -15
  409. package/src/components/Tooltip/Tooltip.stories.tsx +1 -10
  410. package/src/components/Tooltip/Tooltip.theme.ts +19 -0
  411. package/src/components/Tooltip/Tooltip.tsx +18 -17
  412. package/src/components/Tooltip/index.ts +1 -0
  413. package/src/components/Tooltip/tooltipContent.ts +16 -0
  414. package/src/components/index.ts +7 -5
  415. package/src/exemplars/generics.stories.tsx +1 -2
  416. package/src/exemplars/slot.stories.tsx +4 -5
  417. package/src/exemplars/virtualizer.stories.tsx +0 -1
  418. package/src/hooks/useDensityContext.ts +1 -1
  419. package/src/hooks/useElevationContext.ts +1 -1
  420. package/src/hooks/useThemeContext.ts +1 -1
  421. package/src/hooks/useTranslationsContext.ts +1 -1
  422. package/src/index.ts +1 -0
  423. package/src/playground/Custom.stories.tsx +12 -32
  424. package/src/primitives/Container/Container.tsx +3 -1
  425. package/src/{components → primitives}/DensityProvider/DensityProvider.tsx +1 -1
  426. package/src/primitives/Flex/Flex.tsx +3 -1
  427. package/src/primitives/Grid/Grid.tsx +3 -1
  428. package/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.tsx +1 -1
  429. package/src/{components → primitives}/ThemeProvider/ThemeProvider.tsx +1 -1
  430. package/src/{components → primitives}/ThemeProvider/index.ts +2 -2
  431. package/src/primitives/index.ts +4 -2
  432. package/src/testing/decorators/withLayout.tsx +6 -16
  433. package/src/testing/decorators/withLayoutVariants.tsx +1 -1
  434. package/src/testing/decorators/withTheme.tsx +21 -13
  435. package/src/theme/bindTheme.ts +13 -0
  436. package/src/theme/defaultTheme.ts +83 -0
  437. package/src/theme/index.ts +37 -0
  438. package/src/translations.ts +14 -0
  439. package/src/util/index.ts +2 -1
  440. package/src/util/mobile.ts +11 -0
  441. package/src/util/slots.ts +129 -0
  442. package/src/util/usePx.ts +4 -1
  443. package/dist/lib/browser/chunk-OCVRIJCH.mjs +0 -848
  444. package/dist/lib/browser/chunk-OCVRIJCH.mjs.map +0 -7
  445. package/dist/lib/node-esm/chunk-QUD5P3RU.mjs +0 -850
  446. package/dist/lib/node-esm/chunk-QUD5P3RU.mjs.map +0 -7
  447. package/dist/types/src/components/DensityProvider/index.d.ts.map +0 -1
  448. package/dist/types/src/components/ElevationProvider/index.d.ts.map +0 -1
  449. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +0 -1
  450. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +0 -129
  451. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +0 -1
  452. package/dist/types/src/components/ThemeProvider/index.d.ts +0 -4
  453. package/dist/types/src/components/ThemeProvider/index.d.ts.map +0 -1
  454. package/dist/types/src/primitives/Column/Column.d.ts.map +0 -1
  455. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +0 -1
  456. package/dist/types/src/primitives/Column/index.d.ts +0 -2
  457. package/dist/types/src/primitives/Column/index.d.ts.map +0 -1
  458. package/dist/types/src/primitives/Panel/Panel.d.ts.map +0 -1
  459. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +0 -1
  460. package/dist/types/src/primitives/Panel/index.d.ts.map +0 -1
  461. package/dist/types/src/util/hasIosKeyboard.d.ts +0 -2
  462. package/dist/types/src/util/hasIosKeyboard.d.ts.map +0 -1
  463. package/src/util/hasIosKeyboard.ts +0 -8
  464. /package/dist/types/src/{primitives → components}/Column/Column.stories.d.ts +0 -0
  465. /package/dist/types/src/{primitives → components}/Panel/Panel.stories.d.ts +0 -0
  466. /package/dist/types/src/{primitives → components}/Panel/index.d.ts +0 -0
  467. /package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts +0 -0
  468. /package/dist/types/src/{components → primitives}/DensityProvider/index.d.ts +0 -0
  469. /package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts +0 -0
  470. /package/dist/types/src/{components → primitives}/ElevationProvider/index.d.ts +0 -0
  471. /package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts +0 -0
  472. /package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.d.ts +0 -0
  473. /package/src/{primitives → components}/Column/AUDIT.md +0 -0
  474. /package/src/{primitives → components}/Panel/index.ts +0 -0
  475. /package/src/{components → primitives}/DensityProvider/index.ts +0 -0
  476. /package/src/{components → primitives}/ElevationProvider/ElevationProvider.tsx +0 -0
  477. /package/src/{components → primitives}/ElevationProvider/index.ts +0 -0
  478. /package/src/{components → primitives}/ThemeProvider/TranslationsProvider.tsx +0 -0
@@ -5,54 +5,33 @@
5
5
  import { Primitive } from '@radix-ui/react-primitive';
6
6
  import { Slot } from '@radix-ui/react-slot';
7
7
  import DOMPurify from 'dompurify';
8
- import React, {
9
- CSSProperties,
10
- MouseEventHandler,
11
- type PropsWithChildren,
12
- createContext,
13
- forwardRef,
14
- useContext,
15
- useMemo,
16
- } from 'react';
17
-
18
- import { composable, composableProps, iconSize, mx, slottable } from '@dxos/ui-theme';
8
+ import React, { CSSProperties, JSX, MouseEventHandler, type ReactNode, forwardRef, useId, useMemo } from 'react';
9
+
10
+ import { iconSize } from '@dxos/ui-theme';
19
11
  import { type Density } from '@dxos/ui-types';
20
12
 
21
13
  import { useThemeContext } from '../../hooks';
22
- import { Column } from '../../primitives';
14
+ import { composable, composableProps, slottable } from '../../util';
23
15
  import { type ThemedClassName } from '../../util';
24
16
  import { Button } from '../Button';
25
- import { Icon, type IconProps } from '../Icon';
17
+ import { Column } from '../Column';
18
+ import { Icon, IconBlock, type IconBlockProps, type IconProps } from '../Icon';
26
19
  import { Image } from '../Image';
27
20
  import {
28
21
  Toolbar,
29
- ToolbarCloseIconButtonProps,
22
+ type ToolbarActionIconButtonProps,
30
23
  ToolbarDragHandleProps,
31
- type ToolbarMenuItem,
32
24
  type ToolbarMenuProps,
33
25
  type ToolbarRootProps,
34
26
  } from '../Toolbar';
35
27
 
36
- //
37
- // Context
38
- //
39
-
40
- const CARD_NAME = 'Card';
41
-
42
- type CardContextValue = {
43
- menuItems?: CardMenuItem<any>[];
44
- };
45
-
46
- /** @deprecated Use context for menus. */
47
- const CardContext = createContext<CardContextValue>({});
48
-
49
28
  //
50
29
  // Root
51
30
  //
52
31
 
53
32
  const CARD_ROOT_NAME = 'Card.Root';
54
33
 
55
- type CardRootOwnProps = {
34
+ type CardRootProps = {
56
35
  id?: string;
57
36
  border?: boolean;
58
37
  fullWidth?: boolean;
@@ -64,24 +43,33 @@ type CardRootOwnProps = {
64
43
  'data-testid'?: string;
65
44
  };
66
45
 
67
- type CardRootProps = CardRootOwnProps;
68
-
69
- const CardRoot = slottable<HTMLDivElement, CardRootOwnProps>(
70
- ({ children, id, asChild, role, border = true, fullWidth, density, ...props }, forwardedRef) => {
46
+ /**
47
+ * `Card.Root` does not support `asChild`. The Column grid is the root element
48
+ * (one `<div>` carrying both the `dx-card` and `dx-column-root` classes
49
+ * instead of the previous outer-card + inner-column pair), so caller-provided
50
+ * HTML attributes — `onClick`, `tabIndex`, `style`, `data-*`, `grid-template-rows`
51
+ * overrides via `classNames` — land directly on the grid container.
52
+ * Slot-parents (`Focus.Item asChild`, `Mosaic.Tile asChild`, etc.) continue to
53
+ * work because `composable()` preserves the COMPOSABLE marker that slottable parents
54
+ * check before warning, and Radix `Slot` merges the parent's props onto the inner
55
+ * `<div>` exactly the way `slottable`'s `Slot`/`Primitive.div` branch did.
56
+ */
57
+ const CardRoot = composable<HTMLDivElement, CardRootProps>(
58
+ ({ children, id, role, border = true, fullWidth, density, ...props }, forwardedRef) => {
71
59
  const { className, ...rest } = composableProps(props);
72
- const Comp = asChild ? Slot : Primitive.div;
73
60
  const { tx } = useThemeContext();
74
61
 
75
62
  return (
76
- <Comp
77
- {...rest}
78
- {...(id && { 'data-object-id': id })}
63
+ <Column.Root
64
+ asChild
65
+ gutter={density === 'lg' ? 'lg' : density === 'sm' || density === 'xs' ? 'sm' : 'md'}
66
+ classNames={tx('card.root', { border, fullWidth }, className)}
79
67
  role={role ?? 'group'}
80
- className={tx('card.root', { border, fullWidth }, className)}
81
- ref={forwardedRef}
82
68
  >
83
- <Column.Root gutter={density === 'coarse' ? 'lg' : 'md'}>{children}</Column.Root>
84
- </Comp>
69
+ <div {...rest} {...(id && { 'data-object-id': id })} ref={forwardedRef}>
70
+ {children}
71
+ </div>
72
+ </Column.Root>
85
73
  );
86
74
  },
87
75
  );
@@ -89,24 +77,29 @@ const CardRoot = slottable<HTMLDivElement, CardRootOwnProps>(
89
77
  CardRoot.displayName = CARD_ROOT_NAME;
90
78
 
91
79
  //
92
- // Toolbar
80
+ // Header
93
81
  //
94
82
 
95
- const CARD_TOOLBAR_NAME = 'Card.Toolbar';
83
+ const CARD_HEADER_NAME = 'Card.Header';
96
84
 
97
- type CardToolbarProps = ToolbarRootProps;
85
+ type CardHeaderProps = ToolbarRootProps;
98
86
 
99
- const CardToolbar = composable<HTMLDivElement, CardToolbarProps>(({ children, classNames, ...props }, forwardedRef) => {
87
+ /**
88
+ * Top "header" slot of a Card. Despite the name, this renders as an ARIA
89
+ * toolbar (`role="toolbar"`) so its action children get keyboard navigation
90
+ * for free — `<header>` is allowed to contain a toolbar.
91
+ */
92
+ const CardHeader = composable<HTMLDivElement, CardHeaderProps>(({ children, classNames, ...props }, forwardedRef) => {
100
93
  const { tx } = useThemeContext();
101
94
 
102
95
  return (
103
- <Toolbar.Root {...props} style={iconSize(5)} classNames={[tx('card.toolbar', {}), classNames]} ref={forwardedRef}>
96
+ <Toolbar.Root {...props} style={iconSize(5)} classNames={[tx('card.header', {}), classNames]} ref={forwardedRef}>
104
97
  {children}
105
98
  </Toolbar.Root>
106
99
  );
107
100
  });
108
101
 
109
- CardToolbar.displayName = CARD_TOOLBAR_NAME;
102
+ CardHeader.displayName = CARD_HEADER_NAME;
110
103
 
111
104
  //
112
105
  // DragHandle
@@ -118,7 +111,7 @@ type CardDragHandleProps = ToolbarDragHandleProps;
118
111
 
119
112
  const CardDragHandle = forwardRef<HTMLButtonElement, CardDragHandleProps>((props, forwardedRef) => {
120
113
  return (
121
- <CardIconBlock padding>
114
+ <CardIconBlock>
122
115
  <Toolbar.DragHandle {...props} ref={forwardedRef} />
123
116
  </CardIconBlock>
124
117
  );
@@ -127,22 +120,22 @@ const CardDragHandle = forwardRef<HTMLButtonElement, CardDragHandleProps>((props
127
120
  CardDragHandle.displayName = CARD_DRAG_HANDLE_NAME;
128
121
 
129
122
  //
130
- // CloseIconButton
123
+ // ActionIconButton
131
124
  //
132
125
 
133
- const CARD_CLOSE_ICON_BUTTON_NAME = 'Card.CloseIconButton';
126
+ const CARD_ACTION_ICON_BUTTON_NAME = 'Card.ActionIconButton';
134
127
 
135
- type CloseIconButtonProps = ToolbarCloseIconButtonProps;
128
+ type CardActionIconButtonProps = ToolbarActionIconButtonProps;
136
129
 
137
- const CloseIconButton = forwardRef<HTMLButtonElement, CloseIconButtonProps>((props, forwardedRef) => {
130
+ const CardActionIconButton = forwardRef<HTMLButtonElement, CardActionIconButtonProps>((props, forwardedRef) => {
138
131
  return (
139
- <CardIconBlock padding>
140
- <Toolbar.CloseIconButton {...props} ref={forwardedRef} />
132
+ <CardIconBlock>
133
+ <Toolbar.ActionIconButton {...props} ref={forwardedRef} />
141
134
  </CardIconBlock>
142
135
  );
143
136
  });
144
137
 
145
- CloseIconButton.displayName = CARD_CLOSE_ICON_BUTTON_NAME;
138
+ CardActionIconButton.displayName = CARD_ACTION_ICON_BUTTON_NAME;
146
139
 
147
140
  //
148
141
  // Menu
@@ -150,22 +143,17 @@ CloseIconButton.displayName = CARD_CLOSE_ICON_BUTTON_NAME;
150
143
 
151
144
  const CARD_MENU_NAME = 'Card.Menu';
152
145
 
153
- type CardMenuItem<T extends any | void = void> = ToolbarMenuItem<T>;
154
-
155
146
  type CardMenuProps<T extends any | void = void> = ToolbarMenuProps<T>;
156
147
 
157
- const CardMenu = <T extends any | void = void>({ context, items, ...props }: CardMenuProps<T>) => {
158
- const { menuItems } = useContext(CardContext) ?? {};
159
- const combinedItems = [...(items ?? []), ...((menuItems as CardMenuItem<T>[]) ?? [])];
160
-
148
+ function CardMenu<T extends any | void = void>({ context, items, ...props }: CardMenuProps<T>) {
161
149
  return (
162
- <CardIconBlock padding>
163
- <Toolbar.Menu {...props} context={context} items={combinedItems} />
150
+ <CardIconBlock>
151
+ <Toolbar.Menu {...props} context={context} items={items ?? []} />
164
152
  </CardIconBlock>
165
153
  );
166
- };
154
+ }
167
155
 
168
- (CardMenu as any).displayName = CARD_MENU_NAME;
156
+ CardMenu.displayName = CARD_MENU_NAME;
169
157
 
170
158
  //
171
159
  // Icon
@@ -173,15 +161,15 @@ const CardMenu = <T extends any | void = void>({ context, items, ...props }: Car
173
161
 
174
162
  const CARD_ICON_NAME = 'Card.Icon';
175
163
 
176
- const CardIcon = (props: IconProps) => {
164
+ function CardIcon(props: IconProps) {
177
165
  return (
178
166
  <CardIconBlock>
179
167
  <Icon {...props} />
180
168
  </CardIconBlock>
181
169
  );
182
- };
170
+ }
183
171
 
184
- (CardIcon as any).displayName = CARD_ICON_NAME;
172
+ CardIcon.displayName = CARD_ICON_NAME;
185
173
 
186
174
  //
187
175
  // IconBlock
@@ -189,17 +177,9 @@ const CardIcon = (props: IconProps) => {
189
177
 
190
178
  const CARD_ICON_BLOCK_NAME = 'Card.IconBlock';
191
179
 
192
- const CardIconBlock = forwardRef<HTMLDivElement, ThemedClassName<PropsWithChildren<{ padding?: boolean }>>>(
193
- ({ classNames, children, padding, ...props }, forwardedRef) => {
194
- const { tx } = useThemeContext();
195
-
196
- return (
197
- <div {...props} role='none' className={tx('card.icon-block', { padding }, classNames)} ref={forwardedRef}>
198
- {children}
199
- </div>
200
- );
201
- },
202
- );
180
+ const CardIconBlock = forwardRef<HTMLDivElement, IconBlockProps>((props, forwardedRef) => {
181
+ return <IconBlock {...props} ref={forwardedRef} />;
182
+ });
203
183
 
204
184
  CardIconBlock.displayName = CARD_ICON_BLOCK_NAME;
205
185
 
@@ -224,47 +204,24 @@ const CardTitle = slottable<HTMLDivElement>(({ children, asChild, ...props }, fo
224
204
  CardTitle.displayName = CARD_TITLE_NAME;
225
205
 
226
206
  //
227
- // Content
228
- //
229
-
230
- const CARD_CONTENT_NAME = 'Card.Content';
231
-
232
- const CardContent = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
233
- const { className, ...rest } = composableProps(props);
234
- const Comp = asChild ? Slot : Primitive.div;
235
- const { tx } = useThemeContext();
236
-
237
- return (
238
- <Comp {...rest} className={tx('card.content', {}, className)} ref={forwardedRef}>
239
- {children}
240
- </Comp>
241
- );
242
- });
243
-
244
- CardContent.displayName = CARD_CONTENT_NAME;
245
-
246
- //
247
- // Row
207
+ // Body
248
208
  //
249
209
 
250
- const CARD_ROW_NAME = 'Card.Row';
251
-
252
- type CardRowProps = { icon?: string; fullWidth?: boolean };
210
+ const CARD_BODY_NAME = 'Card.Body';
253
211
 
254
- const CardRow = slottable<HTMLDivElement, CardRowProps>(({ children, asChild, icon, ...props }, forwardedRef) => {
212
+ const CardBody = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
255
213
  const { className, ...rest } = composableProps(props);
256
214
  const Comp = asChild ? Slot : Primitive.div;
257
215
  const { tx } = useThemeContext();
258
216
 
259
217
  return (
260
- <Comp {...rest} className={tx('card.row', {}, className)} ref={forwardedRef}>
261
- {(icon && <CardIcon classNames='text-subdued' icon={icon} size={4} />) || <div />}
218
+ <Comp {...rest} className={tx('card.body', {}, className)} ref={forwardedRef}>
262
219
  {children}
263
220
  </Comp>
264
221
  );
265
222
  });
266
223
 
267
- CardRow.displayName = CARD_ROW_NAME;
224
+ CardBody.displayName = CARD_BODY_NAME;
268
225
 
269
226
  //
270
227
  // Section
@@ -272,53 +229,81 @@ CardRow.displayName = CARD_ROW_NAME;
272
229
 
273
230
  const CARD_SECTION_NAME = 'Card.Section';
274
231
 
232
+ type CardSectionProps = { title?: ReactNode };
233
+
275
234
  /**
276
- * @deprecated Merge with Card.Row fullWidth
235
+ * A labeled grouping of card content. `display: contents` keeps children aligned
236
+ * to the Card's column grid (like `Card.Body`); when `title` is provided,
237
+ * renders a subheading row at the top and exposes the group with
238
+ * `role='group' aria-labelledby=…` for screen readers.
277
239
  */
278
- const CardSection = slottable<HTMLDivElement>(({ children, asChild, role, ...props }, forwardedRef) => {
279
- const { className, ...rest } = composableProps(props);
280
- const Comp = asChild ? Slot : Primitive.div;
240
+ const CardSection = slottable<HTMLDivElement, CardSectionProps>(
241
+ ({ children, asChild, title, role, ...props }, forwardedRef) => {
242
+ const { className, ...rest } = composableProps(props);
243
+ const Comp = asChild ? Slot : Primitive.div;
244
+ const { tx } = useThemeContext();
245
+ const titleId = useId();
281
246
 
282
- return (
283
- <Comp {...rest} role={role ?? 'none'} className={mx('col-span-full', className)} ref={forwardedRef}>
284
- {children}
285
- </Comp>
286
- );
287
- });
247
+ return (
248
+ <Comp
249
+ {...rest}
250
+ role={role ?? (title ? 'group' : 'none')}
251
+ aria-labelledby={title ? titleId : undefined}
252
+ className={tx('card.section', {}, className)}
253
+ ref={forwardedRef}
254
+ >
255
+ {title && (
256
+ <div id={titleId} className={tx('card.section-title', {})}>
257
+ {title}
258
+ </div>
259
+ )}
260
+ {children}
261
+ </Comp>
262
+ );
263
+ },
264
+ );
288
265
 
289
266
  CardSection.displayName = CARD_SECTION_NAME;
290
267
 
291
268
  //
292
- // Heading
269
+ // Row
293
270
  //
294
271
 
295
- const CARD_HEADING_NAME = 'Card.Heading';
272
+ const CARD_ROW_NAME = 'Card.Row';
296
273
 
297
- type CardHeadingProps = { variant?: 'default' | 'subtitle' };
274
+ type CardRowProps = { icon?: string | JSX.Element; fullWidth?: boolean };
298
275
 
299
276
  /**
300
- * @deprecated Use typography.
277
+ * A row inside a Card.
278
+ * - Default: spans all 3 columns and establishes a subgrid so children align to the Card's columns.
279
+ * An optional `icon` lands in the first column; when omitted, the first column is left empty.
280
+ * - `fullWidth`: spans all columns without a subgrid — children do their own internal layout.
281
+ * The `icon` prop is ignored in this mode.
301
282
  */
302
- const CardHeading = slottable<HTMLDivElement, CardHeadingProps>(
303
- ({ children, asChild, role, variant = 'default', ...props }, forwardedRef) => {
283
+ const CardRow = slottable<HTMLDivElement, CardRowProps>(
284
+ ({ children, asChild, icon: iconProp, fullWidth, ...props }, forwardedRef) => {
285
+ const { tx } = useThemeContext();
304
286
  const { className, ...rest } = composableProps(props);
305
287
  const Comp = asChild ? Slot : Primitive.div;
306
- const { tx } = useThemeContext();
288
+ const icon =
289
+ typeof iconProp === 'string' ? (
290
+ <CardIcon classNames='text-subdued' icon={iconProp as string} size={4} />
291
+ ) : iconProp ? (
292
+ iconProp
293
+ ) : (
294
+ <div />
295
+ );
307
296
 
308
297
  return (
309
- <Comp
310
- {...rest}
311
- role={role ?? 'heading'}
312
- className={tx('card.heading', { variant }, className)}
313
- ref={forwardedRef}
314
- >
298
+ <Comp {...rest} className={tx('card.row', { fullWidth }, className)} ref={forwardedRef}>
299
+ {!fullWidth && icon}
315
300
  {children}
316
301
  </Comp>
317
302
  );
318
303
  },
319
304
  );
320
305
 
321
- CardHeading.displayName = CARD_HEADING_NAME;
306
+ CardRow.displayName = CARD_ROW_NAME;
322
307
 
323
308
  //
324
309
  // Text
@@ -330,9 +315,9 @@ type CardTextProps = { truncate?: boolean; variant?: 'default' | 'description' }
330
315
 
331
316
  const CardText = slottable<HTMLDivElement, CardTextProps>(
332
317
  ({ children, asChild, role, truncate, variant = 'default', ...props }, forwardedRef) => {
318
+ const { tx } = useThemeContext();
333
319
  const { className, ...rest } = composableProps(props);
334
320
  const Comp = asChild ? Slot : Primitive.div;
335
- const { tx } = useThemeContext();
336
321
 
337
322
  return (
338
323
  <Comp {...rest} role={role ?? 'none'} className={tx('card.text', { variant }, className)} ref={forwardedRef}>
@@ -350,28 +335,27 @@ CardText.displayName = CARD_TEXT_NAME;
350
335
 
351
336
  const CARD_HTML_NAME = 'Card.Html';
352
337
 
353
- type CardHtmlProps = { html: string; variant?: 'default' | 'description' };
338
+ type CardHtmlProps = { html?: string; variant?: 'default' | 'description' };
354
339
 
355
340
  /**
356
341
  * Renders sanitized HTML content inside a card text slot.
357
342
  * Uses DOMPurify to prevent XSS from untrusted markup (e.g. RSS feed content).
358
343
  */
359
- const CardHtml = ({ html, variant = 'default', ...props }: CardHtmlProps & ThemedClassName<object>) => {
344
+ function CardHtml({ html = '', variant = 'default', ...props }: CardHtmlProps & ThemedClassName<object>) {
360
345
  const { tx } = useThemeContext();
361
346
  const sanitized = useMemo(() => DOMPurify.sanitize(html), [html]);
362
347
 
363
348
  return (
364
349
  <div
365
350
  {...props}
366
- role='none'
367
351
  className={tx('card.text', { variant })}
368
352
  // eslint-disable-next-line react/no-danger
369
353
  dangerouslySetInnerHTML={{ __html: sanitized }}
370
354
  />
371
355
  );
372
- };
356
+ }
373
357
 
374
- (CardHtml as any).displayName = CARD_HTML_NAME;
358
+ CardHtml.displayName = CARD_HTML_NAME;
375
359
 
376
360
  //
377
361
  // Poster
@@ -393,13 +377,13 @@ type CardPosterProps = ThemedClassName<
393
377
  } & Partial<{ image: string; icon: string }>
394
378
  >;
395
379
 
396
- const CardPoster = (props: CardPosterProps) => {
380
+ function CardPoster(props: CardPosterProps) {
397
381
  const { tx } = useThemeContext();
398
382
  const aspect = props.aspect === 'auto' ? 'aspect-auto' : 'aspect-video';
399
383
 
400
384
  if (props.image) {
401
385
  return (
402
- <div role='none' className='col-span-full'>
386
+ <div className='col-span-full'>
403
387
  <Image
404
388
  classNames={[tx('card.poster', {}), aspect, props.classNames]}
405
389
  src={props.image}
@@ -417,9 +401,9 @@ const CardPoster = (props: CardPosterProps) => {
417
401
  </div>
418
402
  );
419
403
  }
420
- };
404
+ }
421
405
 
422
- (CardPoster as any).displayName = CARD_POSTER_NAME;
406
+ CardPoster.displayName = CARD_POSTER_NAME;
423
407
 
424
408
  //
425
409
  // Action
@@ -429,7 +413,7 @@ const CARD_ACTION_NAME = 'Card.Action';
429
413
 
430
414
  type CardActionProps = { icon?: string; label: string; actionIcon?: string; onClick?: () => void };
431
415
 
432
- const CardAction = ({ icon, actionIcon = 'ph--arrow-right--regular', label, onClick }: CardActionProps) => {
416
+ function CardAction({ icon, actionIcon = 'ph--arrow-right--regular', label, onClick }: CardActionProps) {
433
417
  const { tx } = useThemeContext();
434
418
  return (
435
419
  <Button variant='ghost' classNames={tx('card.action', {})} onClick={onClick}>
@@ -438,9 +422,9 @@ const CardAction = ({ icon, actionIcon = 'ph--arrow-right--regular', label, onCl
438
422
  {actionIcon && <CardIcon icon={actionIcon} size={4} />}
439
423
  </Button>
440
424
  );
441
- };
425
+ }
442
426
 
443
- (CardAction as any).displayName = CARD_ACTION_NAME;
427
+ CardAction.displayName = CARD_ACTION_NAME;
444
428
 
445
429
  //
446
430
  // Link
@@ -450,7 +434,7 @@ const CARD_LINK_NAME = 'Card.Link';
450
434
 
451
435
  type CardLinkProps = { label: string; href: string };
452
436
 
453
- const CardLink = ({ label, href }: CardLinkProps) => {
437
+ function CardLink({ label, href }: CardLinkProps) {
454
438
  const { tx } = useThemeContext();
455
439
  return (
456
440
  <a className={tx('card.link', {})} data-variant='ghost' href={href} target='_blank' rel='noreferrer'>
@@ -459,9 +443,9 @@ const CardLink = ({ label, href }: CardLinkProps) => {
459
443
  <CardIcon classNames='invisible group-hover:visible' icon='ph--arrow-square-out--regular' />
460
444
  </a>
461
445
  );
462
- };
446
+ }
463
447
 
464
- (CardLink as any).displayName = CARD_LINK_NAME;
448
+ CardLink.displayName = CARD_LINK_NAME;
465
449
 
466
450
  //
467
451
  // Card
@@ -470,24 +454,23 @@ const CardLink = ({ label, href }: CardLinkProps) => {
470
454
  export const Card = {
471
455
  Root: CardRoot,
472
456
 
473
- // Toolbar
474
- Toolbar: CardToolbar,
475
- ToolbarIconButton: Toolbar.IconButton,
476
- ToolbarSeparator: Toolbar.Separator,
457
+ // Header
458
+ Header: CardHeader,
477
459
 
478
- // Toolbar blocks
460
+ // Header parts
479
461
  IconBlock: CardIconBlock,
480
462
  DragHandle: CardDragHandle,
481
- CloseIconButton: CloseIconButton,
463
+ ActionIconButton: CardActionIconButton,
482
464
  Menu: CardMenu,
483
465
  Icon: CardIcon,
484
466
  Title: CardTitle,
485
467
 
486
- // Content
487
- Content: CardContent,
488
- Row: CardRow,
468
+ // Body
469
+ Body: CardBody,
489
470
  Section: CardSection,
490
- Heading: CardHeading,
471
+ Row: CardRow,
472
+
473
+ // Body parts
491
474
  Text: CardText,
492
475
  Html: CardHtml,
493
476
  Poster: CardPoster,
@@ -496,10 +479,10 @@ export const Card = {
496
479
  };
497
480
 
498
481
  export type {
499
- CardContextValue,
500
482
  CardRootProps,
501
- CardToolbarProps,
483
+ CardHeaderProps,
502
484
  CardDragHandleProps,
503
- CloseIconButtonProps,
485
+ CardActionIconButtonProps,
504
486
  CardMenuProps,
487
+ CardSectionProps,
505
488
  };