@dxos/react-ui 0.8.4-main.d05673bc65 → 0.8.4-main.d9fc60f731

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 (534) 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 +2982 -1631
  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 +37 -28
  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 +2982 -1631
  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 +37 -28
  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 +1 -1
  26. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  27. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  28. package/dist/types/src/components/Avatars/Avatar.theme.d.ts +11 -0
  29. package/dist/types/src/components/Avatars/Avatar.theme.d.ts.map +1 -0
  30. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  31. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +5 -1
  32. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  33. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  34. package/dist/types/src/components/Breadcrumb/Breadcrumb.theme.d.ts +4 -0
  35. package/dist/types/src/components/Breadcrumb/Breadcrumb.theme.d.ts.map +1 -0
  36. package/dist/types/src/components/Button/Button.d.ts +3 -3
  37. package/dist/types/src/components/Button/Button.d.ts.map +1 -1
  38. package/dist/types/src/components/Button/Button.stories.d.ts +1 -1
  39. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -1
  40. package/dist/types/src/components/Button/Button.theme.d.ts +11 -0
  41. package/dist/types/src/components/Button/Button.theme.d.ts.map +1 -0
  42. package/dist/types/src/components/Button/IconButton.d.ts +1 -0
  43. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
  44. package/dist/types/src/components/Button/IconButton.stories.d.ts +4 -0
  45. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
  46. package/dist/types/src/components/Button/IconButton.theme.d.ts +8 -0
  47. package/dist/types/src/components/Button/IconButton.theme.d.ts.map +1 -0
  48. package/dist/types/src/components/Button/Toggle.d.ts +2 -2
  49. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -1
  50. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -1
  51. package/dist/types/src/components/Button/ToggleGroup.d.ts +6 -6
  52. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -1
  53. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +2 -2
  54. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -1
  55. package/dist/types/src/components/Calendar/Calendar.d.ts +33 -0
  56. package/dist/types/src/components/Calendar/Calendar.d.ts.map +1 -0
  57. package/dist/types/src/components/Calendar/Calendar.stories.d.ts +9 -0
  58. package/dist/types/src/components/Calendar/Calendar.stories.d.ts.map +1 -0
  59. package/dist/types/src/components/Calendar/Calendar.theme.d.ts +4 -0
  60. package/dist/types/src/components/Calendar/Calendar.theme.d.ts.map +1 -0
  61. package/dist/types/src/components/Calendar/index.d.ts +2 -0
  62. package/dist/types/src/components/Calendar/index.d.ts.map +1 -0
  63. package/dist/types/src/components/Card/Card.d.ts +92 -68
  64. package/dist/types/src/components/Card/Card.d.ts.map +1 -1
  65. package/dist/types/src/components/Card/Card.stories.d.ts +3 -2
  66. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -1
  67. package/dist/types/src/components/Card/Card.theme.d.ts +12 -0
  68. package/dist/types/src/components/Card/Card.theme.d.ts.map +1 -0
  69. package/dist/types/src/components/Carousel/Carousel.d.ts +102 -0
  70. package/dist/types/src/components/Carousel/Carousel.d.ts.map +1 -0
  71. package/dist/types/src/components/Carousel/index.d.ts +2 -0
  72. package/dist/types/src/components/Carousel/index.d.ts.map +1 -0
  73. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  74. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  75. package/dist/types/src/components/Clipboard/index.d.ts +10 -1
  76. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  77. package/dist/types/src/components/Column/Column.d.ts +33 -0
  78. package/dist/types/src/components/Column/Column.d.ts.map +1 -0
  79. package/dist/types/src/components/Column/Column.stories.d.ts +25 -0
  80. package/dist/types/src/components/Column/Column.stories.d.ts.map +1 -0
  81. package/dist/types/src/components/Column/Column.theme.d.ts +9 -0
  82. package/dist/types/src/components/Column/Column.theme.d.ts.map +1 -0
  83. package/dist/types/src/components/Column/index.d.ts +3 -0
  84. package/dist/types/src/components/Column/index.d.ts.map +1 -0
  85. package/dist/types/src/components/Column/withColumn.d.ts +21 -0
  86. package/dist/types/src/components/Column/withColumn.d.ts.map +1 -0
  87. package/dist/types/src/components/DatePicker/DatePicker.d.ts +72 -0
  88. package/dist/types/src/components/DatePicker/DatePicker.d.ts.map +1 -0
  89. package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts +10 -0
  90. package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts.map +1 -0
  91. package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts +6 -0
  92. package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts.map +1 -0
  93. package/dist/types/src/components/DatePicker/index.d.ts +2 -0
  94. package/dist/types/src/components/DatePicker/index.d.ts.map +1 -0
  95. package/dist/types/src/components/Dialog/AlertDialog.d.ts +43 -32
  96. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
  97. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -1
  98. package/dist/types/src/components/Dialog/Dialog.d.ts +51 -32
  99. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  100. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +3 -2
  101. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
  102. package/dist/types/src/components/Dialog/Dialog.theme.d.ts +10 -0
  103. package/dist/types/src/components/Dialog/Dialog.theme.d.ts.map +1 -0
  104. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -1
  105. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -1
  106. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +14 -3
  107. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -1
  108. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -1
  109. package/dist/types/src/components/Focus/Focus.d.ts +36 -0
  110. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -0
  111. package/dist/types/src/{primitives/Column/Column.stories.d.ts → components/Focus/Focus.stories.d.ts} +4 -1
  112. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -0
  113. package/dist/types/src/components/Focus/Focus.theme.d.ts +6 -0
  114. package/dist/types/src/components/Focus/Focus.theme.d.ts.map +1 -0
  115. package/dist/types/src/components/Focus/index.d.ts +2 -0
  116. package/dist/types/src/components/Focus/index.d.ts.map +1 -0
  117. package/dist/types/src/components/Icon/Icon.d.ts +4 -0
  118. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  119. package/dist/types/src/components/Icon/Icon.stories.d.ts +11 -3
  120. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -1
  121. package/dist/types/src/components/Icon/Icon.theme.d.ts +11 -0
  122. package/dist/types/src/components/Icon/Icon.theme.d.ts.map +1 -0
  123. package/dist/types/src/components/Icon/IconBlock.d.ts +15 -0
  124. package/dist/types/src/components/Icon/IconBlock.d.ts.map +1 -0
  125. package/dist/types/src/components/Icon/index.d.ts +1 -0
  126. package/dist/types/src/components/Icon/index.d.ts.map +1 -1
  127. package/dist/types/src/components/Image/Image.d.ts +2 -1
  128. package/dist/types/src/components/Image/Image.d.ts.map +1 -1
  129. package/dist/types/src/components/Image/Image.stories.d.ts +3 -2
  130. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -1
  131. package/dist/types/src/components/Input/Input.d.ts +90 -15
  132. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  133. package/dist/types/src/components/Input/Input.stories.d.ts +17 -6
  134. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  135. package/dist/types/src/components/Input/Input.theme.d.ts +115 -0
  136. package/dist/types/src/components/Input/Input.theme.d.ts.map +1 -0
  137. package/dist/types/src/components/Input/SegmentedInput.d.ts +79 -0
  138. package/dist/types/src/components/Input/SegmentedInput.d.ts.map +1 -0
  139. package/dist/types/src/components/Input/constants.d.ts +2 -0
  140. package/dist/types/src/components/Input/constants.d.ts.map +1 -0
  141. package/dist/types/src/components/Input/index.d.ts +2 -0
  142. package/dist/types/src/components/Input/index.d.ts.map +1 -1
  143. package/dist/types/src/components/Link/Link.d.ts.map +1 -1
  144. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  145. package/dist/types/src/components/Link/Link.theme.d.ts +6 -0
  146. package/dist/types/src/components/Link/Link.theme.d.ts.map +1 -0
  147. package/dist/types/src/components/List/List.d.ts +5 -3
  148. package/dist/types/src/components/List/List.d.ts.map +1 -1
  149. package/dist/types/src/components/List/List.stories.d.ts +3 -1
  150. package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
  151. package/dist/types/src/components/List/List.theme.d.ts +7 -0
  152. package/dist/types/src/components/List/List.theme.d.ts.map +1 -0
  153. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -1
  154. package/dist/types/src/components/List/Tree.d.ts +2 -2
  155. package/dist/types/src/components/List/Tree.d.ts.map +1 -1
  156. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -1
  157. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -1
  158. package/dist/types/src/components/List/Treegrid.d.ts +6 -10
  159. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
  160. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -1
  161. package/dist/types/src/components/List/Treegrid.theme.d.ts +7 -0
  162. package/dist/types/src/components/List/Treegrid.theme.d.ts.map +1 -0
  163. package/dist/types/src/components/Main/Main.d.ts +9 -5
  164. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  165. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  166. package/dist/types/src/components/Main/Main.theme.d.ts +20 -0
  167. package/dist/types/src/components/Main/Main.theme.d.ts.map +1 -0
  168. package/dist/types/src/components/Main/constants.d.ts +3 -0
  169. package/dist/types/src/components/Main/constants.d.ts.map +1 -0
  170. package/dist/types/src/components/Main/index.d.ts +1 -0
  171. package/dist/types/src/components/Main/index.d.ts.map +1 -1
  172. package/dist/types/src/components/Main/useSwipeToDismiss.d.ts.map +1 -1
  173. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts +43 -0
  174. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts.map +1 -0
  175. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts +16 -0
  176. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts.map +1 -0
  177. package/dist/types/src/components/MediaPlayer/index.d.ts +2 -0
  178. package/dist/types/src/components/MediaPlayer/index.d.ts.map +1 -0
  179. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
  180. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -1
  181. package/dist/types/src/components/Menu/DropdownMenu.d.ts +58 -49
  182. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
  183. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +14 -1
  184. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -1
  185. package/dist/types/src/components/Menu/Menu.theme.d.ts +7 -0
  186. package/dist/types/src/components/Menu/Menu.theme.d.ts.map +1 -0
  187. package/dist/types/src/components/Message/Message.d.ts +3 -3
  188. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  189. package/dist/types/src/components/Message/Message.stories.d.ts +6 -2
  190. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  191. package/dist/types/src/components/Message/Message.theme.d.ts +7 -0
  192. package/dist/types/src/components/Message/Message.theme.d.ts.map +1 -0
  193. package/dist/types/src/components/Panel/Panel.d.ts +35 -0
  194. package/dist/types/src/components/Panel/Panel.d.ts.map +1 -0
  195. package/dist/types/src/components/Panel/Panel.stories.d.ts.map +1 -0
  196. package/dist/types/src/components/Panel/Panel.theme.d.ts +13 -0
  197. package/dist/types/src/components/Panel/Panel.theme.d.ts.map +1 -0
  198. package/dist/types/src/components/Panel/index.d.ts.map +1 -0
  199. package/dist/types/src/components/Popover/Popover.d.ts +38 -22
  200. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  201. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  202. package/dist/types/src/components/Popover/Popover.theme.d.ts +8 -0
  203. package/dist/types/src/components/Popover/Popover.theme.d.ts.map +1 -0
  204. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +12 -9
  205. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  206. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +18 -5
  207. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  208. package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts +17 -0
  209. package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts.map +1 -0
  210. package/dist/types/src/components/ScrollArea/index.d.ts +1 -0
  211. package/dist/types/src/components/ScrollArea/index.d.ts.map +1 -1
  212. package/dist/types/src/components/ScrollArea/scrollbar.d.ts +18 -0
  213. package/dist/types/src/components/ScrollArea/scrollbar.d.ts.map +1 -0
  214. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +41 -18
  215. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  216. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +5 -6
  217. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
  218. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  219. package/dist/types/src/components/Select/Select.stories.d.ts +2 -2
  220. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  221. package/dist/types/src/components/Select/Select.theme.d.ts +6 -0
  222. package/dist/types/src/components/Select/Select.theme.d.ts.map +1 -0
  223. package/dist/types/src/components/Separator/Separator.d.ts +3 -3
  224. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  225. package/dist/types/src/components/Separator/Separator.theme.d.ts +7 -0
  226. package/dist/types/src/components/Separator/Separator.theme.d.ts.map +1 -0
  227. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -1
  228. package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts +6 -0
  229. package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts.map +1 -0
  230. package/dist/types/src/components/Splitter/Splitter.d.ts +18 -18
  231. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -1
  232. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -1
  233. package/dist/types/src/components/Splitter/Splitter.theme.d.ts +4 -0
  234. package/dist/types/src/components/Splitter/Splitter.theme.d.ts.map +1 -0
  235. package/dist/types/src/components/Status/Status.d.ts +3 -4
  236. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  237. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  238. package/dist/types/src/components/Status/Status.theme.d.ts +7 -0
  239. package/dist/types/src/components/Status/Status.theme.d.ts.map +1 -0
  240. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  241. package/dist/types/src/components/Tag/Tag.theme.d.ts +6 -0
  242. package/dist/types/src/components/Tag/Tag.theme.d.ts.map +1 -0
  243. package/dist/types/src/components/Toast/Toast.d.ts +23 -20
  244. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  245. package/dist/types/src/components/Toast/Toast.stories.d.ts +5 -2
  246. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  247. package/dist/types/src/components/Toast/Toast.theme.d.ts +4 -0
  248. package/dist/types/src/components/Toast/Toast.theme.d.ts.map +1 -0
  249. package/dist/types/src/components/Toolbar/Toolbar.d.ts +30 -26
  250. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  251. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  252. package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts +8 -0
  253. package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts.map +1 -0
  254. package/dist/types/src/components/Tooltip/Tooltip.d.ts +16 -16
  255. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  256. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +2 -2
  257. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  258. package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts +6 -0
  259. package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts.map +1 -0
  260. package/dist/types/src/components/Tooltip/index.d.ts +1 -0
  261. package/dist/types/src/components/Tooltip/index.d.ts.map +1 -1
  262. package/dist/types/src/components/Tooltip/tooltipContent.d.ts +4 -0
  263. package/dist/types/src/components/Tooltip/tooltipContent.d.ts.map +1 -0
  264. package/dist/types/src/components/index.d.ts +8 -4
  265. package/dist/types/src/components/index.d.ts.map +1 -1
  266. package/dist/types/src/exemplars/generics.stories.d.ts +6 -5
  267. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -1
  268. package/dist/types/src/exemplars/slot.stories.d.ts +1 -0
  269. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -1
  270. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -1
  271. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -1
  272. package/dist/types/src/hooks/index.d.ts +1 -0
  273. package/dist/types/src/hooks/index.d.ts.map +1 -1
  274. package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
  275. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  276. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  277. package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
  278. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  279. package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -1
  280. package/dist/types/src/hooks/useTranslationsContext.d.ts +1 -1
  281. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  282. package/dist/types/src/index.d.ts +1 -0
  283. package/dist/types/src/index.d.ts.map +1 -1
  284. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  285. package/dist/types/src/playground/Custom.stories.d.ts +1 -1
  286. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  287. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  288. package/dist/types/src/primitives/Container/Container.d.ts +4 -5
  289. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -1
  290. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -1
  291. package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts.map +1 -1
  292. package/dist/types/src/primitives/DensityProvider/index.d.ts.map +1 -0
  293. package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  294. package/dist/types/src/primitives/ElevationProvider/index.d.ts.map +1 -0
  295. package/dist/types/src/primitives/Flex/Flex.d.ts +5 -7
  296. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -1
  297. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -1
  298. package/dist/types/src/primitives/Grid/Grid.d.ts +3 -8
  299. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -1
  300. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -1
  301. package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts +1 -1
  302. package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  303. package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.d.ts +1 -1
  304. package/dist/types/src/primitives/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  305. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts +128 -0
  306. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts.map +1 -0
  307. package/dist/types/src/primitives/ThemeProvider/index.d.ts +4 -0
  308. package/dist/types/src/primitives/ThemeProvider/index.d.ts.map +1 -0
  309. package/dist/types/src/primitives/index.d.ts +3 -2
  310. package/dist/types/src/primitives/index.d.ts.map +1 -1
  311. package/dist/types/src/testing/Loading.d.ts.map +1 -1
  312. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
  313. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
  314. package/dist/types/src/testing/decorators/withTheme.d.ts +6 -2
  315. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  316. package/dist/types/src/theme/bindTheme.d.ts +3 -0
  317. package/dist/types/src/theme/bindTheme.d.ts.map +1 -0
  318. package/dist/types/src/theme/defaultTheme.d.ts +4 -0
  319. package/dist/types/src/theme/defaultTheme.d.ts.map +1 -0
  320. package/dist/types/src/theme/index.d.ts +31 -0
  321. package/dist/types/src/theme/index.d.ts.map +1 -0
  322. package/dist/types/src/translations.d.ts +17 -3
  323. package/dist/types/src/translations.d.ts.map +1 -1
  324. package/dist/types/src/util/index.d.ts +2 -1
  325. package/dist/types/src/util/index.d.ts.map +1 -1
  326. package/dist/types/src/util/mobile.d.ts +5 -0
  327. package/dist/types/src/util/mobile.d.ts.map +1 -0
  328. package/dist/types/src/util/slots.d.ts +57 -0
  329. package/dist/types/src/util/slots.d.ts.map +1 -0
  330. package/dist/types/src/util/usePx.d.ts.map +1 -1
  331. package/dist/types/tsconfig.tsbuildinfo +1 -1
  332. package/package.json +31 -26
  333. package/src/components/Avatars/Avatar.stories.tsx +2 -3
  334. package/src/components/Avatars/Avatar.theme.ts +93 -0
  335. package/src/components/Avatars/Avatar.tsx +1 -2
  336. package/src/components/Avatars/AvatarGroup.stories.tsx +0 -1
  337. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +1 -2
  338. package/src/components/Breadcrumb/Breadcrumb.theme.ts +26 -0
  339. package/src/components/Breadcrumb/Breadcrumb.tsx +14 -2
  340. package/src/components/Button/Button.stories.tsx +0 -1
  341. package/src/components/Button/Button.theme.ts +31 -0
  342. package/src/components/Button/Button.tsx +6 -14
  343. package/src/components/Button/IconButton.stories.tsx +56 -6
  344. package/src/components/Button/IconButton.theme.ts +21 -0
  345. package/src/components/Button/IconButton.tsx +3 -4
  346. package/src/components/Button/Toggle.stories.tsx +0 -1
  347. package/src/components/Button/Toggle.tsx +4 -4
  348. package/src/components/Button/ToggleGroup.stories.tsx +0 -1
  349. package/src/components/Button/ToggleGroup.tsx +12 -16
  350. package/src/components/Calendar/Calendar.stories.tsx +43 -0
  351. package/src/components/Calendar/Calendar.theme.ts +74 -0
  352. package/src/components/Calendar/Calendar.tsx +196 -0
  353. package/src/components/Calendar/index.ts +5 -0
  354. package/src/components/Card/Card.stories.tsx +55 -34
  355. package/src/components/Card/Card.theme.ts +93 -0
  356. package/src/components/Card/Card.tsx +297 -156
  357. package/src/components/Carousel/Carousel.tsx +371 -0
  358. package/src/components/Carousel/index.ts +5 -0
  359. package/src/components/Clipboard/CopyButton.tsx +6 -7
  360. package/src/components/Column/AUDIT.md +148 -0
  361. package/src/components/Column/Column.stories.tsx +181 -0
  362. package/src/components/Column/Column.theme.ts +48 -0
  363. package/src/components/Column/Column.tsx +166 -0
  364. package/src/{primitives → components}/Column/index.ts +1 -0
  365. package/src/components/Column/withColumn.ts +27 -0
  366. package/src/components/DatePicker/DatePicker.stories.tsx +102 -0
  367. package/src/components/DatePicker/DatePicker.theme.ts +35 -0
  368. package/src/components/DatePicker/DatePicker.tsx +279 -0
  369. package/src/components/DatePicker/index.ts +5 -0
  370. package/src/components/Dialog/AlertDialog.stories.tsx +5 -6
  371. package/src/components/Dialog/AlertDialog.tsx +72 -132
  372. package/src/components/Dialog/Dialog.stories.tsx +65 -10
  373. package/src/components/Dialog/Dialog.theme.ts +61 -0
  374. package/src/components/Dialog/Dialog.tsx +124 -99
  375. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +3 -8
  376. package/src/components/ErrorFallback/ErrorFallback.tsx +14 -8
  377. package/src/components/ErrorFallback/ErrorStack.tsx +48 -8
  378. package/src/components/Focus/AUDIT.md +43 -0
  379. package/src/components/Focus/Focus.stories.tsx +230 -0
  380. package/src/components/Focus/Focus.theme.ts +32 -0
  381. package/src/components/Focus/Focus.tsx +201 -0
  382. package/src/components/Focus/index.ts +5 -0
  383. package/src/components/Icon/Icon.stories.tsx +43 -13
  384. package/src/components/Icon/Icon.theme.ts +45 -0
  385. package/src/components/Icon/Icon.tsx +14 -3
  386. package/src/components/Icon/IconBlock.tsx +38 -0
  387. package/src/components/Icon/index.ts +1 -0
  388. package/src/components/Image/Image.stories.tsx +4 -4
  389. package/src/components/Image/Image.tsx +31 -8
  390. package/src/components/Input/Input.stories.tsx +135 -33
  391. package/src/components/Input/Input.theme.ts +191 -0
  392. package/src/components/Input/Input.tsx +214 -9
  393. package/src/components/Input/SegmentedInput.tsx +454 -0
  394. package/src/components/Input/constants.ts +5 -0
  395. package/src/components/Input/index.ts +2 -0
  396. package/src/components/Link/Link.stories.tsx +0 -1
  397. package/src/components/Link/Link.theme.ts +16 -0
  398. package/src/components/Link/Link.tsx +10 -2
  399. package/src/components/List/List.stories.tsx +1 -2
  400. package/src/components/List/List.theme.ts +47 -0
  401. package/src/components/List/List.tsx +8 -7
  402. package/src/components/List/ListDropIndicator.tsx +1 -2
  403. package/src/components/List/Tree.stories.tsx +2 -3
  404. package/src/components/List/Tree.tsx +0 -1
  405. package/src/components/List/TreeDropIndicator.tsx +3 -3
  406. package/src/components/List/Treegrid.stories.tsx +26 -27
  407. package/src/components/List/Treegrid.theme.ts +35 -0
  408. package/src/components/List/Treegrid.tsx +15 -16
  409. package/src/components/Main/Main.stories.tsx +0 -1
  410. package/src/components/Main/Main.theme.ts +29 -0
  411. package/src/components/Main/Main.tsx +10 -9
  412. package/src/components/Main/constants.ts +6 -0
  413. package/src/components/Main/index.ts +1 -0
  414. package/src/components/MediaPlayer/MediaPlayer.stories.tsx +50 -0
  415. package/src/components/MediaPlayer/MediaPlayer.tsx +178 -0
  416. package/src/components/MediaPlayer/index.ts +5 -0
  417. package/src/components/Menu/ContextMenu.stories.tsx +0 -4
  418. package/src/components/Menu/DropdownMenu.stories.tsx +0 -4
  419. package/src/components/Menu/DropdownMenu.tsx +63 -57
  420. package/src/components/Menu/Menu.theme.ts +48 -0
  421. package/src/components/Message/Message.stories.tsx +48 -11
  422. package/src/components/Message/Message.theme.ts +44 -0
  423. package/src/components/Message/Message.tsx +75 -19
  424. package/src/{primitives → components}/Panel/Panel.stories.tsx +9 -9
  425. package/src/components/Panel/Panel.theme.ts +42 -0
  426. package/src/components/Panel/Panel.tsx +121 -0
  427. package/src/components/Popover/Popover.stories.tsx +4 -5
  428. package/src/components/Popover/Popover.theme.ts +40 -0
  429. package/src/components/Popover/Popover.tsx +49 -49
  430. package/src/components/ScrollArea/ScrollArea.stories.tsx +89 -30
  431. package/src/components/ScrollArea/ScrollArea.theme.ts +107 -0
  432. package/src/components/ScrollArea/ScrollArea.tsx +40 -23
  433. package/src/components/ScrollArea/index.ts +1 -0
  434. package/src/components/ScrollArea/scrollbar.ts +21 -0
  435. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +21 -19
  436. package/src/components/ScrollContainer/ScrollContainer.tsx +215 -106
  437. package/src/components/Select/Select.stories.tsx +5 -6
  438. package/src/components/Select/Select.theme.ts +55 -0
  439. package/src/components/Select/Select.tsx +26 -10
  440. package/src/components/Separator/Separator.theme.ts +23 -0
  441. package/src/components/Separator/Separator.tsx +4 -7
  442. package/src/components/Skeleton/Skeleton.stories.tsx +0 -1
  443. package/src/components/Skeleton/Skeleton.theme.ts +22 -0
  444. package/src/components/Splitter/Splitter.stories.tsx +30 -30
  445. package/src/components/Splitter/Splitter.theme.ts +18 -0
  446. package/src/components/Splitter/Splitter.tsx +36 -40
  447. package/src/components/Status/Status.stories.tsx +0 -1
  448. package/src/components/Status/Status.theme.ts +31 -0
  449. package/src/components/Status/Status.tsx +7 -5
  450. package/src/components/Tag/Tag.stories.tsx +0 -1
  451. package/src/components/Tag/Tag.theme.ts +22 -0
  452. package/src/components/Toast/Toast.stories.tsx +41 -21
  453. package/src/components/Toast/Toast.theme.ts +56 -0
  454. package/src/components/Toast/Toast.tsx +105 -52
  455. package/src/components/Toolbar/Toolbar.stories.tsx +0 -1
  456. package/src/components/Toolbar/Toolbar.theme.ts +36 -0
  457. package/src/components/Toolbar/Toolbar.tsx +83 -46
  458. package/src/components/Tooltip/Tooltip.stories.tsx +7 -17
  459. package/src/components/Tooltip/Tooltip.theme.ts +19 -0
  460. package/src/components/Tooltip/Tooltip.tsx +33 -33
  461. package/src/components/Tooltip/index.ts +1 -0
  462. package/src/components/Tooltip/tooltipContent.ts +16 -0
  463. package/src/components/index.ts +8 -5
  464. package/src/exemplars/generics.stories.tsx +7 -16
  465. package/src/exemplars/slot.stories.tsx +66 -57
  466. package/src/exemplars/tabster.stories.tsx +1 -1
  467. package/src/exemplars/virtualizer.stories.tsx +4 -5
  468. package/src/hooks/index.ts +1 -0
  469. package/src/hooks/useDensityContext.ts +3 -3
  470. package/src/hooks/useElevationContext.ts +1 -1
  471. package/src/hooks/useThemeContext.ts +1 -1
  472. package/src/hooks/useTranslationsContext.ts +1 -1
  473. package/src/index.ts +1 -0
  474. package/src/playground/Custom.stories.tsx +13 -36
  475. package/src/primitives/Container/Container.stories.tsx +0 -1
  476. package/src/primitives/Container/Container.tsx +7 -8
  477. package/src/{components → primitives}/DensityProvider/DensityProvider.tsx +1 -1
  478. package/src/primitives/Flex/Flex.stories.tsx +0 -1
  479. package/src/primitives/Flex/Flex.tsx +12 -12
  480. package/src/primitives/Grid/Grid.stories.tsx +0 -1
  481. package/src/primitives/Grid/Grid.tsx +6 -9
  482. package/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.tsx +1 -2
  483. package/src/{components → primitives}/ThemeProvider/ThemeProvider.tsx +6 -5
  484. package/src/{components → primitives}/ThemeProvider/index.ts +2 -2
  485. package/src/primitives/index.ts +4 -2
  486. package/src/testing/Loading.tsx +25 -4
  487. package/src/testing/decorators/withLayout.tsx +7 -17
  488. package/src/testing/decorators/withLayoutVariants.tsx +1 -1
  489. package/src/testing/decorators/withTheme.tsx +23 -12
  490. package/src/theme/bindTheme.ts +13 -0
  491. package/src/theme/defaultTheme.ts +83 -0
  492. package/src/theme/index.ts +37 -0
  493. package/src/translations.ts +17 -3
  494. package/src/util/index.ts +2 -1
  495. package/src/util/mobile.ts +11 -0
  496. package/src/util/slots.ts +129 -0
  497. package/src/util/usePx.ts +5 -1
  498. package/dist/lib/browser/chunk-2FKSMWNY.mjs +0 -774
  499. package/dist/lib/browser/chunk-2FKSMWNY.mjs.map +0 -7
  500. package/dist/lib/node-esm/chunk-ZNBLTSHI.mjs +0 -776
  501. package/dist/lib/node-esm/chunk-ZNBLTSHI.mjs.map +0 -7
  502. package/dist/types/src/components/DensityProvider/index.d.ts.map +0 -1
  503. package/dist/types/src/components/ElevationProvider/index.d.ts.map +0 -1
  504. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +0 -1
  505. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +0 -129
  506. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +0 -1
  507. package/dist/types/src/components/ThemeProvider/index.d.ts +0 -4
  508. package/dist/types/src/components/ThemeProvider/index.d.ts.map +0 -1
  509. package/dist/types/src/primitives/Column/Column.d.ts +0 -26
  510. package/dist/types/src/primitives/Column/Column.d.ts.map +0 -1
  511. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +0 -1
  512. package/dist/types/src/primitives/Column/index.d.ts +0 -2
  513. package/dist/types/src/primitives/Column/index.d.ts.map +0 -1
  514. package/dist/types/src/primitives/Panel/Panel.d.ts +0 -26
  515. package/dist/types/src/primitives/Panel/Panel.d.ts.map +0 -1
  516. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +0 -1
  517. package/dist/types/src/primitives/Panel/index.d.ts.map +0 -1
  518. package/dist/types/src/util/hasIosKeyboard.d.ts +0 -2
  519. package/dist/types/src/util/hasIosKeyboard.d.ts.map +0 -1
  520. package/src/primitives/Column/Column.stories.tsx +0 -78
  521. package/src/primitives/Column/Column.tsx +0 -134
  522. package/src/primitives/Panel/Panel.tsx +0 -119
  523. package/src/util/hasIosKeyboard.ts +0 -8
  524. /package/dist/types/src/{primitives → components}/Panel/Panel.stories.d.ts +0 -0
  525. /package/dist/types/src/{primitives → components}/Panel/index.d.ts +0 -0
  526. /package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts +0 -0
  527. /package/dist/types/src/{components → primitives}/DensityProvider/index.d.ts +0 -0
  528. /package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts +0 -0
  529. /package/dist/types/src/{components → primitives}/ElevationProvider/index.d.ts +0 -0
  530. /package/src/{primitives → components}/Panel/index.ts +0 -0
  531. /package/src/{components → primitives}/DensityProvider/index.ts +0 -0
  532. /package/src/{components → primitives}/ElevationProvider/ElevationProvider.tsx +0 -0
  533. /package/src/{components → primitives}/ElevationProvider/index.ts +0 -0
  534. /package/src/{components → primitives}/ThemeProvider/TranslationsProvider.tsx +0 -0
@@ -0,0 +1,279 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { createContext } from '@radix-ui/react-context';
6
+ import { format as formatDate } from 'date-fns';
7
+ import React, {
8
+ type ComponentPropsWithoutRef,
9
+ type PropsWithChildren,
10
+ type ReactNode,
11
+ forwardRef,
12
+ useCallback,
13
+ useState,
14
+ } from 'react';
15
+
16
+ import { useThemeContext } from '../../hooks';
17
+ import { useTranslation } from '../../primitives';
18
+ import { translationKey } from '../../translations';
19
+ import { type ThemedClassName } from '../../util';
20
+ import { Calendar, type DateRange } from '../Calendar';
21
+ import { Icon } from '../Icon';
22
+ import { Popover } from '../Popover';
23
+
24
+ //
25
+ // Public API.
26
+ //
27
+ // Wraps the new react-aria-components-backed `<Calendar>` (single + range) in a Radix Popover,
28
+ // preserving the previous slot-style namespace: `<DatePicker.Root>`, `<DatePicker.Trigger>`,
29
+ // `<DatePicker.Content>`, `<DatePicker.Calendar>`. Multi-select is no longer supported (no
30
+ // in-repo consumers); use `<Calendar.Root>` directly with custom state if needed.
31
+ //
32
+
33
+ export type DatePickerMode = 'single' | 'range';
34
+
35
+ type ValueByMode = {
36
+ single: Date | undefined;
37
+ range: DateRange | undefined;
38
+ };
39
+
40
+ type DatePickerContextValue = {
41
+ mode: DatePickerMode;
42
+ value: ValueByMode[DatePickerMode];
43
+ setValue: (next: ValueByMode[DatePickerMode]) => void;
44
+ withTime: boolean;
45
+ open: boolean;
46
+ onOpenChange: (open: boolean) => void;
47
+ };
48
+
49
+ const [DatePickerProvider, useDatePickerContext] = createContext<DatePickerContextValue>('DatePicker');
50
+
51
+ //
52
+ // Root.
53
+ //
54
+
55
+ export type DatePickerRootProps<M extends DatePickerMode = 'single'> = {
56
+ mode?: M;
57
+ value?: ValueByMode[M];
58
+ defaultValue?: ValueByMode[M];
59
+ onValueChange?: (value: ValueByMode[M]) => void;
60
+ /** Preserve hour/minute on the selected date(s) when picking a new day. */
61
+ withTime?: boolean;
62
+ open?: boolean;
63
+ defaultOpen?: boolean;
64
+ onOpenChange?: (open: boolean) => void;
65
+ children?: ReactNode;
66
+ };
67
+
68
+ const DatePickerRoot = <M extends DatePickerMode = 'single'>({
69
+ mode = 'single' as M,
70
+ value,
71
+ defaultValue,
72
+ onValueChange,
73
+ withTime = false,
74
+ open,
75
+ defaultOpen,
76
+ onOpenChange,
77
+ children,
78
+ }: DatePickerRootProps<M>) => {
79
+ const [internalValue, setInternalValue] = useState<ValueByMode[M] | undefined>(defaultValue);
80
+ const [internalOpen, setInternalOpen] = useState(defaultOpen ?? false);
81
+
82
+ const controlled = value !== undefined || onValueChange !== undefined;
83
+ const resolvedValue = (controlled ? value : internalValue) as ValueByMode[DatePickerMode];
84
+
85
+ const setValue = useCallback(
86
+ (next: ValueByMode[DatePickerMode]) => {
87
+ if (!controlled) {
88
+ setInternalValue(next as ValueByMode[M] | undefined);
89
+ }
90
+ onValueChange?.(next as ValueByMode[M]);
91
+ },
92
+ [controlled, onValueChange],
93
+ );
94
+
95
+ const resolvedOpen = open ?? internalOpen;
96
+ const handleOpenChange = useCallback(
97
+ (next: boolean) => {
98
+ if (open === undefined) {
99
+ setInternalOpen(next);
100
+ }
101
+ onOpenChange?.(next);
102
+ },
103
+ [open, onOpenChange],
104
+ );
105
+
106
+ return (
107
+ <DatePickerProvider
108
+ mode={mode as DatePickerMode}
109
+ value={resolvedValue}
110
+ setValue={setValue}
111
+ withTime={withTime}
112
+ open={resolvedOpen}
113
+ onOpenChange={handleOpenChange}
114
+ >
115
+ <Popover.Root open={resolvedOpen} onOpenChange={handleOpenChange}>
116
+ {children}
117
+ </Popover.Root>
118
+ </DatePickerProvider>
119
+ );
120
+ };
121
+
122
+ //
123
+ // Trigger.
124
+ //
125
+
126
+ const formatValue = (mode: DatePickerMode, value: unknown, fmt: string): string | undefined => {
127
+ if (value === undefined || value === null) {
128
+ return undefined;
129
+ }
130
+ switch (mode) {
131
+ case 'single':
132
+ return formatDate(value as Date, fmt);
133
+ case 'range': {
134
+ const r = value as DateRange;
135
+ if (!r.from) {
136
+ return undefined;
137
+ }
138
+ return r.to ? `${formatDate(r.from, fmt)} – ${formatDate(r.to, fmt)}` : formatDate(r.from, fmt);
139
+ }
140
+ }
141
+ };
142
+
143
+ export type DatePickerTriggerProps = ThemedClassName<Omit<ComponentPropsWithoutRef<'button'>, 'children'>> &
144
+ PropsWithChildren<{
145
+ format?: string;
146
+ placeholder?: string;
147
+ /** Show the leading calendar icon in the default trigger. Defaults to true. */
148
+ icon?: boolean;
149
+ }>;
150
+
151
+ const DatePickerTrigger = forwardRef<HTMLButtonElement, DatePickerTriggerProps>(
152
+ ({ classNames, format: fmt = 'PPP', placeholder, icon = true, children, ...props }, forwardedRef) => {
153
+ const { tx } = useThemeContext();
154
+ const { t } = useTranslation(translationKey);
155
+ const { mode, value } = useDatePickerContext('DatePickerTrigger');
156
+
157
+ const placeholderText = placeholder ?? (t(`date-picker.placeholder.${mode}.label`) as string);
158
+ const label = formatValue(mode, value, fmt) ?? placeholderText;
159
+ const hasValue = label !== placeholderText;
160
+
161
+ return (
162
+ <Popover.Trigger asChild>
163
+ <button
164
+ ref={forwardedRef}
165
+ type='button'
166
+ {...props}
167
+ className={tx('datePicker.trigger', { hasValue }, classNames) ?? undefined}
168
+ >
169
+ {children ?? (
170
+ <>
171
+ {icon && <Icon size={4} icon='ph--calendar--regular' />}
172
+ {label}
173
+ </>
174
+ )}
175
+ </button>
176
+ </Popover.Trigger>
177
+ );
178
+ },
179
+ );
180
+
181
+ DatePickerTrigger.displayName = 'DatePickerTrigger';
182
+
183
+ //
184
+ // Content.
185
+ //
186
+
187
+ export type DatePickerContentProps = ThemedClassName<ComponentPropsWithoutRef<typeof Popover.Content>>;
188
+
189
+ const DatePickerContent = forwardRef<HTMLDivElement, DatePickerContentProps>(
190
+ ({ classNames, children, ...props }, forwardedRef) => {
191
+ const { tx } = useThemeContext();
192
+ return (
193
+ <Popover.Portal>
194
+ <Popover.Content ref={forwardedRef} align='start' sideOffset={4} {...props}>
195
+ <div className={tx('datePicker.content', {}, classNames)}>{children}</div>
196
+ </Popover.Content>
197
+ </Popover.Portal>
198
+ );
199
+ },
200
+ );
201
+
202
+ DatePickerContent.displayName = 'DatePickerContent';
203
+
204
+ //
205
+ // Calendar — single or range, time-of-day preservation, auto-dismiss on completion.
206
+ //
207
+
208
+ const carryTime = (oldDate: Date | undefined, newDate: Date | undefined): Date | undefined => {
209
+ if (!newDate) {
210
+ return newDate;
211
+ }
212
+ if (!oldDate) {
213
+ return newDate;
214
+ }
215
+ const out = new Date(newDate);
216
+ out.setHours(oldDate.getHours(), oldDate.getMinutes(), 0, 0);
217
+ return out;
218
+ };
219
+
220
+ const DatePickerCalendar = ({ classNames }: { classNames?: string } = {}) => {
221
+ const { mode, value, setValue, withTime, onOpenChange } = useDatePickerContext('DatePickerCalendar');
222
+
223
+ if (mode === 'single') {
224
+ const date = value as Date | undefined;
225
+ return (
226
+ <Calendar.Root
227
+ mode='single'
228
+ classNames={classNames}
229
+ selected={date}
230
+ onSelect={(next) => {
231
+ const merged = withTime ? carryTime(date, next) : next;
232
+ setValue(merged);
233
+ if (next !== undefined) {
234
+ onOpenChange(false);
235
+ }
236
+ }}
237
+ />
238
+ );
239
+ }
240
+
241
+ const range = value as DateRange | undefined;
242
+ return (
243
+ <Calendar.Root
244
+ mode='range'
245
+ classNames={classNames}
246
+ selected={range}
247
+ onSelect={(next) => {
248
+ if (!next) {
249
+ setValue(undefined);
250
+ return;
251
+ }
252
+ const merged: DateRange = withTime
253
+ ? { from: carryTime(range?.from, next.from)!, to: carryTime(range?.to, next.to) }
254
+ : next;
255
+ setValue(merged);
256
+ if (merged.from && merged.to) {
257
+ onOpenChange(false);
258
+ }
259
+ }}
260
+ />
261
+ );
262
+ };
263
+
264
+ DatePickerCalendar.displayName = 'DatePickerCalendar';
265
+
266
+ //
267
+ // Public namespace.
268
+ //
269
+
270
+ export const DatePicker = {
271
+ Root: DatePickerRoot,
272
+ Trigger: DatePickerTrigger,
273
+ Content: DatePickerContent,
274
+ Calendar: DatePickerCalendar,
275
+ };
276
+
277
+ export { useDatePickerContext };
278
+
279
+ export type { ValueByMode };
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ export * from './DatePicker';
@@ -5,14 +5,13 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React from 'react';
7
7
 
8
- import { faker } from '@dxos/random';
8
+ import { random } from '@dxos/random';
9
9
 
10
10
  import { withTheme } from '../../testing';
11
11
  import { Button } from '../Button';
12
-
13
12
  import { AlertDialog } from './AlertDialog';
14
13
 
15
- type StoryProps = Partial<{
14
+ type DefaultStoryProps = Partial<{
16
15
  title: string;
17
16
  description: string;
18
17
  openTrigger: string;
@@ -20,7 +19,7 @@ type StoryProps = Partial<{
20
19
  actionTrigger: string;
21
20
  }>;
22
21
 
23
- const DefaultStory = ({ title, description, openTrigger, cancelTrigger, actionTrigger }: StoryProps) => {
22
+ const DefaultStory = ({ title, description, openTrigger, cancelTrigger, actionTrigger }: DefaultStoryProps) => {
24
23
  return (
25
24
  <AlertDialog.Root defaultOpen>
26
25
  <AlertDialog.Trigger asChild>
@@ -60,8 +59,8 @@ type Story = StoryObj<typeof meta>;
60
59
 
61
60
  export const Default: Story = {
62
61
  args: {
63
- title: faker.lorem.sentence(3),
64
- description: faker.lorem.paragraph(1),
62
+ title: random.lorem.sentence(3),
63
+ description: random.lorem.paragraph(1),
65
64
  openTrigger: 'Open AlertDialog',
66
65
  cancelTrigger: 'Cancel',
67
66
  actionTrigger: 'Action',
@@ -2,50 +2,32 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import {
6
- AlertDialogAction as AlertDialogActionPrimitive,
7
- type AlertDialogActionProps as AlertDialogActionPrimitiveProps,
8
- AlertDialogCancel as AlertDialogCancelPrimitive,
9
- type AlertDialogCancelProps as AlertDialogCancelPrimitiveProps,
10
- AlertDialogContent as AlertDialogContentPrimitive,
11
- type AlertDialogContentProps as AlertDialogContentPrimitiveProps,
12
- AlertDialogDescription as AlertDialogDescriptionPrimitive,
13
- type AlertDialogDescriptionProps as AlertDialogDescriptionPrimitiveProps,
14
- AlertDialogOverlay as AlertDialogOverlayPrimitive,
15
- type AlertDialogOverlayProps as AlertDialogOverlayPrimitiveProps,
16
- AlertDialogPortal as AlertDialogPortalPrimitive,
17
- type AlertDialogPortalProps as AlertDialogPortalPrimitiveProps,
18
- Root as AlertDialogRootPrimitive,
19
- type AlertDialogProps as AlertDialogRootPrimitiveProps,
20
- AlertDialogTitle as AlertDialogTitlePrimitive,
21
- type AlertDialogTitleProps as AlertDialogTitlePrimitiveProps,
22
- AlertDialogTrigger as AlertDialogTriggerPrimitive,
23
- type AlertDialogTriggerProps as AlertDialogTriggerPrimitiveProps,
24
- } from '@radix-ui/react-alert-dialog';
5
+ import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
25
6
  import { createContext } from '@radix-ui/react-context';
26
- import React, {
27
- type ForwardRefExoticComponent,
28
- type FunctionComponent,
29
- type PropsWithChildren,
30
- forwardRef,
31
- } from 'react';
32
-
33
- import { type DialogSize } from '@dxos/ui-theme';
7
+ import React, { type ForwardRefExoticComponent, type FunctionComponent, forwardRef } from 'react';
34
8
 
35
9
  import { useThemeContext } from '../../hooks';
36
- import { Column } from '../../primitives';
10
+ import { ElevationProvider } from '../../primitives';
11
+ import { type DialogSize } from '../../theme';
37
12
  import { type ThemedClassName } from '../../util';
38
- import { ElevationProvider } from '../ElevationProvider';
13
+ import { Column } from '../Column';
14
+ import {
15
+ Dialog,
16
+ type DialogHeaderProps,
17
+ type DialogBodyProps,
18
+ type DialogActionBarProps,
19
+ type DialogActionIconButtonProps,
20
+ } from './Dialog';
39
21
 
40
22
  //
41
23
  // Root
42
24
  //
43
25
 
44
- type AlertDialogRootProps = AlertDialogRootPrimitiveProps;
26
+ type AlertDialogRootProps = AlertDialogPrimitive.AlertDialogProps;
45
27
 
46
28
  const AlertDialogRoot: FunctionComponent<AlertDialogRootProps> = (props) => (
47
29
  <ElevationProvider elevation='dialog'>
48
- <AlertDialogRootPrimitive {...props} />
30
+ <AlertDialogPrimitive.Root {...props} />
49
31
  </ElevationProvider>
50
32
  );
51
33
 
@@ -53,95 +35,55 @@ const AlertDialogRoot: FunctionComponent<AlertDialogRootProps> = (props) => (
53
35
  // Trigger
54
36
  //
55
37
 
56
- type AlertDialogTriggerProps = AlertDialogTriggerPrimitiveProps;
38
+ type AlertDialogTriggerProps = AlertDialogPrimitive.AlertDialogTriggerProps;
57
39
 
58
- const AlertDialogTrigger: FunctionComponent<AlertDialogTriggerProps> = AlertDialogTriggerPrimitive;
40
+ const AlertDialogTrigger = AlertDialogPrimitive.Trigger;
59
41
 
60
42
  //
61
43
  // Portal
62
44
  //
63
45
 
64
- type AlertDialogPortalProps = AlertDialogPortalPrimitiveProps;
46
+ type AlertDialogPortalProps = AlertDialogPrimitive.AlertDialogPortalProps;
65
47
 
66
- const AlertDialogPortal: FunctionComponent<AlertDialogPortalProps> = AlertDialogPortalPrimitive;
48
+ const AlertDialogPortal = AlertDialogPrimitive.Portal;
67
49
 
68
50
  //
69
51
  // Cancel
70
52
  //
71
53
 
72
- type AlertDialogCancelProps = AlertDialogCancelPrimitiveProps;
54
+ type AlertDialogCancelProps = AlertDialogPrimitive.AlertDialogCancelProps;
73
55
 
74
- const AlertDialogCancel: FunctionComponent<AlertDialogCancelProps> = AlertDialogCancelPrimitive;
56
+ const AlertDialogCancel = AlertDialogPrimitive.Cancel;
75
57
 
76
58
  //
77
59
  // Action
78
60
  //
79
61
 
80
- type AlertDialogActionProps = AlertDialogActionPrimitiveProps;
62
+ type AlertDialogActionProps = AlertDialogPrimitive.AlertDialogActionProps;
81
63
 
82
- const AlertDialogAction: FunctionComponent<AlertDialogActionProps> = AlertDialogActionPrimitive;
64
+ const AlertDialogAction = AlertDialogPrimitive.Action;
83
65
 
84
66
  //
85
- // Title
86
- //
87
-
88
- type AlertDialogTitleProps = ThemedClassName<AlertDialogTitlePrimitiveProps> & { srOnly?: boolean };
89
-
90
- const AlertDialogTitle: ForwardRefExoticComponent<AlertDialogTitleProps> = forwardRef<
91
- HTMLHeadingElement,
92
- AlertDialogTitleProps
93
- >(({ classNames, srOnly, ...props }, forwardedRef) => {
94
- const { tx } = useThemeContext();
95
- return (
96
- <AlertDialogTitlePrimitive {...props} className={tx('dialog.title', { srOnly }, classNames)} ref={forwardedRef} />
97
- );
98
- });
99
-
100
- //
101
- // Description
67
+ // Context
102
68
  //
103
69
 
104
- type AlertDialogDescriptionProps = ThemedClassName<AlertDialogDescriptionPrimitiveProps> & { srOnly?: boolean };
105
-
106
- const AlertDialogDescription: ForwardRefExoticComponent<AlertDialogTitleProps> = forwardRef<
107
- HTMLParagraphElement,
108
- AlertDialogDescriptionProps
109
- >(({ classNames, srOnly, ...props }, forwardedRef) => {
110
- const { tx } = useThemeContext();
111
- return (
112
- <AlertDialogDescriptionPrimitive
113
- {...props}
114
- className={tx('dialog.description', { srOnly }, classNames)}
115
- ref={forwardedRef}
116
- />
117
- );
118
- });
119
-
120
70
  type OverlayLayoutContextValue = { inOverlayLayout?: boolean };
121
71
 
122
- //
123
- // Context
124
- //
125
-
126
- const ALERT_DIALOG_OVERLAY_NAME = 'AlertDialogOverlay';
127
- const ALERT_DIALOG_CONTENT_NAME = 'AlertDialogContent';
128
- const ALERT_DIALOG_BODY_NAME = 'AlertDialogBody';
129
- const ALERT_DIALOG_ACTIONBAR_NAME = 'AlertDialogActionBar';
72
+ const ALERT_DIALOG_OVERLAY_NAME = 'AlertDialog.Overlay';
73
+ const ALERT_DIALOG_CONTENT_NAME = 'AlertDialog.Content';
130
74
 
131
75
  const [OverlayLayoutProvider, useOverlayLayoutContext] = createContext<OverlayLayoutContextValue>(
132
76
  ALERT_DIALOG_OVERLAY_NAME,
133
- {
134
- inOverlayLayout: false,
135
- },
77
+ { inOverlayLayout: false },
136
78
  );
137
79
 
138
80
  //
139
81
  // Overlay
140
82
  //
141
83
 
142
- type AlertDialogOverlayProps = ThemedClassName<AlertDialogOverlayPrimitiveProps> & {
143
- blockAlign?: 'center' | 'start' | 'end';
144
- };
84
+ type AlertDialogOverlayProps = ThemedClassName<
85
+ AlertDialogPrimitive.AlertDialogOverlayProps & { blockAlign?: 'center' | 'start' | 'end' }
86
+ >;
145
87
 
146
88
  const AlertDialogOverlay: ForwardRefExoticComponent<AlertDialogOverlayProps> = forwardRef<
147
89
  HTMLDivElement,
@@ -149,22 +91,14 @@ const AlertDialogOverlay: ForwardRefExoticComponent<AlertDialogOverlayProps> = f
149
91
  >(({ classNames, children, blockAlign, ...props }, forwardedRef) => {
150
92
  const { tx } = useThemeContext();
151
93
  return (
152
- <AlertDialogOverlayPrimitive
94
+ <AlertDialogPrimitive.Overlay
153
95
  {...props}
154
96
  data-block-align={blockAlign}
155
- className={tx(
156
- 'dialog.overlay',
157
- {},
158
- classNames,
159
- // TODO(burdon): Move to dialog.ts.
160
- 'data-[h-align=start]:justify-center',
161
- 'data-[h-align=start]:items-start',
162
- 'data-[h-align=center]:place-content-center',
163
- )}
97
+ className={tx('dialog.overlay', {}, classNames)}
164
98
  ref={forwardedRef}
165
99
  >
166
100
  <OverlayLayoutProvider inOverlayLayout>{children}</OverlayLayoutProvider>
167
- </AlertDialogOverlayPrimitive>
101
+ </AlertDialogPrimitive.Overlay>
168
102
  );
169
103
  });
170
104
 
@@ -174,7 +108,7 @@ AlertDialogOverlay.displayName = ALERT_DIALOG_OVERLAY_NAME;
174
108
  // Content
175
109
  //
176
110
 
177
- type AlertDialogContentProps = ThemedClassName<AlertDialogContentPrimitiveProps> & { size?: DialogSize };
111
+ type AlertDialogContentProps = ThemedClassName<AlertDialogPrimitive.AlertDialogContentProps> & { size?: DialogSize };
178
112
 
179
113
  const AlertDialogContent: ForwardRefExoticComponent<AlertDialogContentProps> = forwardRef<
180
114
  HTMLDivElement,
@@ -183,62 +117,61 @@ const AlertDialogContent: ForwardRefExoticComponent<AlertDialogContentProps> = f
183
117
  const { tx } = useThemeContext();
184
118
  const { inOverlayLayout } = useOverlayLayoutContext(ALERT_DIALOG_CONTENT_NAME);
185
119
  return (
186
- <AlertDialogContentPrimitive
120
+ <AlertDialogPrimitive.Content
187
121
  {...props}
188
122
  className={tx('dialog.content', { inOverlayLayout, size }, classNames)}
123
+ // NOTE: Radix warning unless set to undefined.
124
+ // https://www.radix-ui.com/primitives/docs/components/dialog#description
125
+ aria-describedby={undefined}
189
126
  ref={forwardedRef}
190
127
  >
191
- <Column.Root>{children}</Column.Root>
192
- </AlertDialogContentPrimitive>
128
+ <Column.Root classNames='dx-expander' gutter='sm'>
129
+ {children}
130
+ </Column.Root>
131
+ </AlertDialogPrimitive.Content>
193
132
  );
194
133
  });
195
134
 
196
135
  AlertDialogContent.displayName = ALERT_DIALOG_CONTENT_NAME;
197
136
 
198
137
  //
199
- // Body
138
+ // Title
200
139
  //
201
140
 
202
- type AlertDialogBodyProps = PropsWithChildren;
141
+ type AlertDialogTitleProps = ThemedClassName<AlertDialogPrimitive.AlertDialogTitleProps> & { srOnly?: boolean };
203
142
 
204
- const AlertDialogBody: ForwardRefExoticComponent<AlertDialogBodyProps> = forwardRef<
205
- HTMLDivElement,
206
- AlertDialogBodyProps
207
- >(({ children, ...props }, forwardedRef) => {
143
+ const AlertDialogTitle: ForwardRefExoticComponent<AlertDialogTitleProps> = forwardRef<
144
+ HTMLHeadingElement,
145
+ AlertDialogTitleProps
146
+ >(({ classNames, srOnly, ...props }, forwardedRef) => {
208
147
  const { tx } = useThemeContext();
209
148
  return (
210
- <Column.Segment asChild>
211
- <div role='none' {...props} className={tx('dialog.body')} ref={forwardedRef}>
212
- {children}
213
- </div>
214
- </Column.Segment>
149
+ <AlertDialogPrimitive.Title {...props} className={tx('dialog.title', { srOnly }, classNames)} ref={forwardedRef} />
215
150
  );
216
151
  });
217
152
 
218
- AlertDialogBody.displayName = ALERT_DIALOG_BODY_NAME;
219
-
220
153
  //
221
- // ActionBar
154
+ // Description
222
155
  //
223
156
 
224
- type AlertDialogActionBarProps = ThemedClassName<PropsWithChildren>;
157
+ type AlertDialogDescriptionProps = ThemedClassName<AlertDialogPrimitive.AlertDialogDescriptionProps> & {
158
+ srOnly?: boolean;
159
+ };
225
160
 
226
- const AlertDialogActionBar: ForwardRefExoticComponent<AlertDialogActionBarProps> = forwardRef<
227
- HTMLDivElement,
228
- AlertDialogActionBarProps
229
- >(({ children, classNames, ...props }, forwardedRef) => {
161
+ const AlertDialogDescription: ForwardRefExoticComponent<AlertDialogDescriptionProps> = forwardRef<
162
+ HTMLParagraphElement,
163
+ AlertDialogDescriptionProps
164
+ >(({ classNames, srOnly, ...props }, forwardedRef) => {
230
165
  const { tx } = useThemeContext();
231
166
  return (
232
- <Column.Segment asChild>
233
- <div {...props} className={tx('dialog.actionbar', {}, classNames)} ref={forwardedRef}>
234
- {children}
235
- </div>
236
- </Column.Segment>
167
+ <AlertDialogPrimitive.Description
168
+ {...props}
169
+ className={tx('dialog.description', { srOnly }, classNames)}
170
+ ref={forwardedRef}
171
+ />
237
172
  );
238
173
  });
239
174
 
240
- AlertDialogActionBar.displayName = ALERT_DIALOG_ACTIONBAR_NAME;
241
-
242
175
  //
243
176
  // AlertDialog
244
177
  //
@@ -249,10 +182,14 @@ export const AlertDialog = {
249
182
  Portal: AlertDialogPortal,
250
183
  Overlay: AlertDialogOverlay,
251
184
  Content: AlertDialogContent,
252
- Body: AlertDialogBody,
185
+ // Shared with Dialog.
186
+ Header: Dialog.Header,
187
+ Body: Dialog.Body,
253
188
  Title: AlertDialogTitle,
254
189
  Description: AlertDialogDescription,
255
- ActionBar: AlertDialogActionBar,
190
+ ActionBar: Dialog.ActionBar,
191
+ ActionIconButton: Dialog.ActionIconButton,
192
+ // AlertDialog-specific dismissal.
256
193
  Cancel: AlertDialogCancel,
257
194
  Action: AlertDialogAction,
258
195
  };
@@ -263,10 +200,13 @@ export type {
263
200
  AlertDialogPortalProps,
264
201
  AlertDialogOverlayProps,
265
202
  AlertDialogContentProps,
266
- AlertDialogBodyProps,
267
203
  AlertDialogTitleProps,
268
204
  AlertDialogDescriptionProps,
269
- AlertDialogActionBarProps,
270
205
  AlertDialogCancelProps,
271
206
  AlertDialogActionProps,
207
+ // Re-export shared types.
208
+ DialogHeaderProps as AlertDialogHeaderProps,
209
+ DialogBodyProps as AlertDialogBodyProps,
210
+ DialogActionBarProps as AlertDialogActionBarProps,
211
+ DialogActionIconButtonProps as AlertDialogActionIconButtonProps,
272
212
  };