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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (496) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/browser/chunk-F3PLXTDA.mjs +1608 -0
  4. package/dist/lib/browser/chunk-F3PLXTDA.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-HFJYTGHU.mjs +43 -0
  6. package/dist/lib/browser/chunk-HFJYTGHU.mjs.map +7 -0
  7. package/dist/lib/browser/index.mjs +3785 -2451
  8. package/dist/lib/browser/index.mjs.map +4 -4
  9. package/dist/lib/browser/meta.json +1 -1
  10. package/dist/lib/browser/testing/index.mjs +14 -17
  11. package/dist/lib/browser/testing/index.mjs.map +3 -3
  12. package/dist/lib/browser/translations.mjs +9 -0
  13. package/dist/lib/browser/translations.mjs.map +7 -0
  14. package/dist/lib/node-esm/chunk-LLVUYLAM.mjs +1610 -0
  15. package/dist/lib/node-esm/chunk-LLVUYLAM.mjs.map +7 -0
  16. package/dist/lib/node-esm/chunk-OJYUPUCY.mjs +45 -0
  17. package/dist/lib/node-esm/chunk-OJYUPUCY.mjs.map +7 -0
  18. package/dist/lib/node-esm/index.mjs +3785 -2451
  19. package/dist/lib/node-esm/index.mjs.map +4 -4
  20. package/dist/lib/node-esm/meta.json +1 -1
  21. package/dist/lib/node-esm/testing/index.mjs +14 -17
  22. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  23. package/dist/lib/node-esm/translations.mjs +10 -0
  24. package/dist/lib/node-esm/translations.mjs.map +7 -0
  25. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  26. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  27. package/dist/types/src/components/Avatars/Avatar.theme.d.ts +11 -0
  28. package/dist/types/src/components/Avatars/Avatar.theme.d.ts.map +1 -0
  29. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  30. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +5 -1
  31. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  32. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  33. package/dist/types/src/components/Breadcrumb/Breadcrumb.theme.d.ts +4 -0
  34. package/dist/types/src/components/Breadcrumb/Breadcrumb.theme.d.ts.map +1 -0
  35. package/dist/types/src/components/Button/Button.d.ts +3 -1
  36. package/dist/types/src/components/Button/Button.d.ts.map +1 -1
  37. package/dist/types/src/components/Button/Button.stories.d.ts +1 -1
  38. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -1
  39. package/dist/types/src/components/Button/Button.theme.d.ts +11 -0
  40. package/dist/types/src/components/Button/Button.theme.d.ts.map +1 -0
  41. package/dist/types/src/components/Button/IconButton.d.ts +1 -1
  42. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
  43. package/dist/types/src/components/Button/IconButton.stories.d.ts +35 -0
  44. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
  45. package/dist/types/src/components/Button/IconButton.theme.d.ts +8 -0
  46. package/dist/types/src/components/Button/IconButton.theme.d.ts.map +1 -0
  47. package/dist/types/src/components/Button/SystemIconButton.d.ts +20 -0
  48. package/dist/types/src/components/Button/SystemIconButton.d.ts.map +1 -0
  49. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -1
  50. package/dist/types/src/components/Button/ToggleGroup.d.ts +2 -2
  51. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +2 -2
  52. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -1
  53. package/dist/types/src/components/Button/ToggleIconButton.d.ts +15 -0
  54. package/dist/types/src/components/Button/ToggleIconButton.d.ts.map +1 -0
  55. package/dist/types/src/components/Button/index.d.ts +2 -0
  56. package/dist/types/src/components/Button/index.d.ts.map +1 -1
  57. package/dist/types/src/components/Calendar/Calendar.d.ts +33 -0
  58. package/dist/types/src/components/Calendar/Calendar.d.ts.map +1 -0
  59. package/dist/types/src/components/Calendar/Calendar.stories.d.ts +9 -0
  60. package/dist/types/src/components/Calendar/Calendar.stories.d.ts.map +1 -0
  61. package/dist/types/src/components/Calendar/Calendar.theme.d.ts +4 -0
  62. package/dist/types/src/components/Calendar/Calendar.theme.d.ts.map +1 -0
  63. package/dist/types/src/components/Calendar/index.d.ts +2 -0
  64. package/dist/types/src/components/Calendar/index.d.ts.map +1 -0
  65. package/dist/types/src/components/Card/Card.d.ts +67 -55
  66. package/dist/types/src/components/Card/Card.d.ts.map +1 -1
  67. package/dist/types/src/components/Card/Card.stories.d.ts +2 -1
  68. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -1
  69. package/dist/types/src/components/Card/Card.theme.d.ts +12 -0
  70. package/dist/types/src/components/Card/Card.theme.d.ts.map +1 -0
  71. package/dist/types/src/components/Carousel/Carousel.d.ts +106 -0
  72. package/dist/types/src/components/Carousel/Carousel.d.ts.map +1 -0
  73. package/dist/types/src/components/Carousel/Carousel.stories.d.ts +14 -0
  74. package/dist/types/src/components/Carousel/Carousel.stories.d.ts.map +1 -0
  75. package/dist/types/src/components/Carousel/index.d.ts +2 -0
  76. package/dist/types/src/components/Carousel/index.d.ts.map +1 -0
  77. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  78. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  79. package/dist/types/src/components/Clipboard/index.d.ts +2 -1
  80. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  81. package/dist/types/src/components/Column/Column.d.ts +51 -0
  82. package/dist/types/src/components/Column/Column.d.ts.map +1 -0
  83. package/dist/types/src/components/Column/Column.stories.d.ts.map +1 -0
  84. package/dist/types/src/components/Column/Column.theme.d.ts +17 -0
  85. package/dist/types/src/components/Column/Column.theme.d.ts.map +1 -0
  86. package/dist/types/src/components/Column/index.d.ts +3 -0
  87. package/dist/types/src/components/Column/index.d.ts.map +1 -0
  88. package/dist/types/src/components/Column/withColumn.d.ts +21 -0
  89. package/dist/types/src/components/Column/withColumn.d.ts.map +1 -0
  90. package/dist/types/src/components/DatePicker/DatePicker.d.ts +72 -0
  91. package/dist/types/src/components/DatePicker/DatePicker.d.ts.map +1 -0
  92. package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts +10 -0
  93. package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts.map +1 -0
  94. package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts +6 -0
  95. package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts.map +1 -0
  96. package/dist/types/src/components/DatePicker/index.d.ts +2 -0
  97. package/dist/types/src/components/DatePicker/index.d.ts.map +1 -0
  98. package/dist/types/src/components/Dialog/AlertDialog.d.ts +20 -20
  99. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
  100. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -1
  101. package/dist/types/src/components/Dialog/Dialog.d.ts +21 -19
  102. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  103. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
  104. package/dist/types/src/components/Dialog/Dialog.theme.d.ts +10 -0
  105. package/dist/types/src/components/Dialog/Dialog.theme.d.ts.map +1 -0
  106. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -1
  107. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -1
  108. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -1
  109. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -1
  110. package/dist/types/src/components/Focus/Focus.d.ts +2 -2
  111. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -1
  112. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -1
  113. package/dist/types/src/components/Focus/Focus.theme.d.ts +6 -0
  114. package/dist/types/src/components/Focus/Focus.theme.d.ts.map +1 -0
  115. package/dist/types/src/components/Icon/Icon.d.ts +1 -0
  116. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  117. package/dist/types/src/components/Icon/Icon.stories.d.ts +1 -1
  118. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -1
  119. package/dist/types/src/components/Icon/Icon.theme.d.ts +11 -0
  120. package/dist/types/src/components/Icon/Icon.theme.d.ts.map +1 -0
  121. package/dist/types/src/components/Icon/IconBlock.d.ts +15 -0
  122. package/dist/types/src/components/Icon/IconBlock.d.ts.map +1 -0
  123. package/dist/types/src/components/Icon/index.d.ts +1 -0
  124. package/dist/types/src/components/Icon/index.d.ts.map +1 -1
  125. package/dist/types/src/components/Image/Image.d.ts +8 -1
  126. package/dist/types/src/components/Image/Image.d.ts.map +1 -1
  127. package/dist/types/src/components/Image/Image.stories.d.ts +3 -2
  128. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -1
  129. package/dist/types/src/components/Input/Input.d.ts +88 -13
  130. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  131. package/dist/types/src/components/Input/Input.stories.d.ts +14 -3
  132. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  133. package/dist/types/src/components/Input/Input.theme.d.ts +115 -0
  134. package/dist/types/src/components/Input/Input.theme.d.ts.map +1 -0
  135. package/dist/types/src/components/Input/SegmentedInput.d.ts +79 -0
  136. package/dist/types/src/components/Input/SegmentedInput.d.ts.map +1 -0
  137. package/dist/types/src/components/Input/constants.d.ts +5 -0
  138. package/dist/types/src/components/Input/constants.d.ts.map +1 -0
  139. package/dist/types/src/components/Input/index.d.ts +2 -0
  140. package/dist/types/src/components/Input/index.d.ts.map +1 -1
  141. package/dist/types/src/components/Link/Link.d.ts.map +1 -1
  142. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  143. package/dist/types/src/components/Link/Link.theme.d.ts +6 -0
  144. package/dist/types/src/components/Link/Link.theme.d.ts.map +1 -0
  145. package/dist/types/src/components/List/List.d.ts +2 -2
  146. package/dist/types/src/components/List/List.d.ts.map +1 -1
  147. package/dist/types/src/components/List/List.stories.d.ts +1 -1
  148. package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
  149. package/dist/types/src/components/List/List.theme.d.ts +7 -0
  150. package/dist/types/src/components/List/List.theme.d.ts.map +1 -0
  151. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -1
  152. package/dist/types/src/components/List/Tree.d.ts +2 -2
  153. package/dist/types/src/components/List/Tree.d.ts.map +1 -1
  154. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -1
  155. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -1
  156. package/dist/types/src/components/List/Treegrid.d.ts +2 -2
  157. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
  158. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -1
  159. package/dist/types/src/components/List/Treegrid.theme.d.ts +7 -0
  160. package/dist/types/src/components/List/Treegrid.theme.d.ts.map +1 -0
  161. package/dist/types/src/components/Main/Main.d.ts +9 -5
  162. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  163. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  164. package/dist/types/src/components/Main/Main.theme.d.ts +20 -0
  165. package/dist/types/src/components/Main/Main.theme.d.ts.map +1 -0
  166. package/dist/types/src/components/Main/constants.d.ts +3 -0
  167. package/dist/types/src/components/Main/constants.d.ts.map +1 -0
  168. package/dist/types/src/components/Main/index.d.ts +1 -0
  169. package/dist/types/src/components/Main/index.d.ts.map +1 -1
  170. package/dist/types/src/components/Main/useSwipeToDismiss.d.ts.map +1 -1
  171. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts +47 -0
  172. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts.map +1 -0
  173. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts +16 -0
  174. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts.map +1 -0
  175. package/dist/types/src/components/MediaPlayer/index.d.ts +2 -0
  176. package/dist/types/src/components/MediaPlayer/index.d.ts.map +1 -0
  177. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
  178. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -1
  179. package/dist/types/src/components/Menu/DropdownMenu.d.ts +11 -3
  180. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
  181. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -1
  182. package/dist/types/src/components/Menu/Menu.theme.d.ts +7 -0
  183. package/dist/types/src/components/Menu/Menu.theme.d.ts.map +1 -0
  184. package/dist/types/src/components/Message/Message.d.ts +3 -3
  185. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  186. package/dist/types/src/components/Message/Message.stories.d.ts +5 -1
  187. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  188. package/dist/types/src/components/Message/Message.theme.d.ts +7 -0
  189. package/dist/types/src/components/Message/Message.theme.d.ts.map +1 -0
  190. package/dist/types/src/{primitives → components}/Panel/Panel.d.ts +5 -5
  191. package/dist/types/src/components/Panel/Panel.d.ts.map +1 -0
  192. package/dist/types/src/components/Panel/Panel.stories.d.ts.map +1 -0
  193. package/dist/types/src/components/Panel/Panel.theme.d.ts +13 -0
  194. package/dist/types/src/components/Panel/Panel.theme.d.ts.map +1 -0
  195. package/dist/types/src/components/Panel/index.d.ts.map +1 -0
  196. package/dist/types/src/components/Popover/Popover.d.ts +10 -2
  197. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  198. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  199. package/dist/types/src/components/Popover/Popover.theme.d.ts +8 -0
  200. package/dist/types/src/components/Popover/Popover.theme.d.ts.map +1 -0
  201. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +2 -2
  202. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  203. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +2 -2
  204. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  205. package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts +17 -0
  206. package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts.map +1 -0
  207. package/dist/types/src/components/ScrollArea/index.d.ts +1 -0
  208. package/dist/types/src/components/ScrollArea/index.d.ts.map +1 -1
  209. package/dist/types/src/components/ScrollArea/scrollbar.d.ts +18 -0
  210. package/dist/types/src/components/ScrollArea/scrollbar.d.ts.map +1 -0
  211. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +20 -18
  212. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  213. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
  214. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  215. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  216. package/dist/types/src/components/Select/Select.theme.d.ts +6 -0
  217. package/dist/types/src/components/Select/Select.theme.d.ts.map +1 -0
  218. package/dist/types/src/components/Separator/Separator.theme.d.ts +7 -0
  219. package/dist/types/src/components/Separator/Separator.theme.d.ts.map +1 -0
  220. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -1
  221. package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts +6 -0
  222. package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts.map +1 -0
  223. package/dist/types/src/components/Splitter/Splitter.d.ts +6 -8
  224. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -1
  225. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -1
  226. package/dist/types/src/components/Splitter/Splitter.theme.d.ts +4 -0
  227. package/dist/types/src/components/Splitter/Splitter.theme.d.ts.map +1 -0
  228. package/dist/types/src/components/Status/Status.d.ts +1 -1
  229. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  230. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  231. package/dist/types/src/components/Status/Status.theme.d.ts +7 -0
  232. package/dist/types/src/components/Status/Status.theme.d.ts.map +1 -0
  233. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  234. package/dist/types/src/components/Tag/Tag.theme.d.ts +6 -0
  235. package/dist/types/src/components/Tag/Tag.theme.d.ts.map +1 -0
  236. package/dist/types/src/components/Toast/Toast.d.ts +12 -9
  237. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  238. package/dist/types/src/components/Toast/Toast.stories.d.ts +5 -2
  239. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  240. package/dist/types/src/components/Toast/Toast.theme.d.ts +4 -0
  241. package/dist/types/src/components/Toast/Toast.theme.d.ts.map +1 -0
  242. package/dist/types/src/components/Toolbar/Toolbar.d.ts +24 -12
  243. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  244. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  245. package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts +8 -0
  246. package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts.map +1 -0
  247. package/dist/types/src/components/Tooltip/TextTooltip.d.ts +19 -0
  248. package/dist/types/src/components/Tooltip/TextTooltip.d.ts.map +1 -0
  249. package/dist/types/src/components/Tooltip/Tooltip.d.ts +8 -8
  250. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  251. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  252. package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts +6 -0
  253. package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts.map +1 -0
  254. package/dist/types/src/components/Tooltip/index.d.ts +2 -0
  255. package/dist/types/src/components/Tooltip/index.d.ts.map +1 -1
  256. package/dist/types/src/components/Tooltip/tooltipContent.d.ts +4 -0
  257. package/dist/types/src/components/Tooltip/tooltipContent.d.ts.map +1 -0
  258. package/dist/types/src/components/index.d.ts +7 -4
  259. package/dist/types/src/components/index.d.ts.map +1 -1
  260. package/dist/types/src/exemplars/generics.stories.d.ts +1 -1
  261. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -1
  262. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -1
  263. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -1
  264. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -1
  265. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  266. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  267. package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
  268. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  269. package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -1
  270. package/dist/types/src/hooks/useTranslationsContext.d.ts +1 -1
  271. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  272. package/dist/types/src/index.d.ts +1 -0
  273. package/dist/types/src/index.d.ts.map +1 -1
  274. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  275. package/dist/types/src/playground/Custom.stories.d.ts +1 -1
  276. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  277. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  278. package/dist/types/src/primitives/Container/Container.d.ts +1 -1
  279. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -1
  280. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -1
  281. package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts.map +1 -1
  282. package/dist/types/src/primitives/DensityProvider/index.d.ts.map +1 -0
  283. package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  284. package/dist/types/src/primitives/ElevationProvider/index.d.ts.map +1 -0
  285. package/dist/types/src/primitives/Flex/Flex.d.ts +1 -1
  286. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -1
  287. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -1
  288. package/dist/types/src/primitives/Grid/Grid.d.ts +1 -1
  289. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -1
  290. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -1
  291. package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  292. package/dist/types/src/primitives/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  293. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts +128 -0
  294. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts.map +1 -0
  295. package/dist/types/src/primitives/ThemeProvider/index.d.ts +4 -0
  296. package/dist/types/src/primitives/ThemeProvider/index.d.ts.map +1 -0
  297. package/dist/types/src/primitives/index.d.ts +3 -2
  298. package/dist/types/src/primitives/index.d.ts.map +1 -1
  299. package/dist/types/src/testing/Loading.d.ts.map +1 -1
  300. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
  301. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
  302. package/dist/types/src/testing/decorators/withTheme.d.ts +5 -1
  303. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  304. package/dist/types/src/theme/bindTheme.d.ts +3 -0
  305. package/dist/types/src/theme/bindTheme.d.ts.map +1 -0
  306. package/dist/types/src/theme/defaultTheme.d.ts +4 -0
  307. package/dist/types/src/theme/defaultTheme.d.ts.map +1 -0
  308. package/dist/types/src/theme/index.d.ts +31 -0
  309. package/dist/types/src/theme/index.d.ts.map +1 -0
  310. package/dist/types/src/translations.d.ts +27 -3
  311. package/dist/types/src/translations.d.ts.map +1 -1
  312. package/dist/types/src/util/index.d.ts +2 -1
  313. package/dist/types/src/util/index.d.ts.map +1 -1
  314. package/dist/types/src/util/mobile.d.ts +5 -0
  315. package/dist/types/src/util/mobile.d.ts.map +1 -0
  316. package/dist/types/src/util/slots.d.ts +57 -0
  317. package/dist/types/src/util/slots.d.ts.map +1 -0
  318. package/dist/types/src/util/usePx.d.ts.map +1 -1
  319. package/dist/types/tsconfig.tsbuildinfo +1 -1
  320. package/package.json +29 -25
  321. package/src/components/Avatars/Avatar.theme.ts +93 -0
  322. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +1 -1
  323. package/src/components/Breadcrumb/Breadcrumb.theme.ts +26 -0
  324. package/src/components/Breadcrumb/Breadcrumb.tsx +14 -2
  325. package/src/components/Button/Button.theme.ts +31 -0
  326. package/src/components/Button/Button.tsx +25 -4
  327. package/src/components/Button/IconButton.stories.tsx +132 -4
  328. package/src/components/Button/IconButton.theme.ts +21 -0
  329. package/src/components/Button/IconButton.tsx +3 -4
  330. package/src/components/Button/SystemIconButton.tsx +153 -0
  331. package/src/components/Button/ToggleIconButton.tsx +32 -0
  332. package/src/components/Button/index.ts +2 -0
  333. package/src/components/Calendar/Calendar.stories.tsx +43 -0
  334. package/src/components/Calendar/Calendar.theme.ts +74 -0
  335. package/src/components/Calendar/Calendar.tsx +196 -0
  336. package/src/components/Calendar/index.ts +5 -0
  337. package/src/components/Card/Card.stories.tsx +109 -46
  338. package/src/components/Card/Card.theme.ts +111 -0
  339. package/src/components/Card/Card.tsx +281 -212
  340. package/src/components/Carousel/Carousel.stories.tsx +47 -0
  341. package/src/components/Carousel/Carousel.tsx +373 -0
  342. package/src/components/Carousel/index.ts +5 -0
  343. package/src/components/Clipboard/CopyButton.tsx +3 -3
  344. package/src/{primitives → components}/Column/Column.stories.tsx +1 -1
  345. package/src/components/Column/Column.theme.ts +76 -0
  346. package/src/{primitives → components}/Column/Column.tsx +38 -2
  347. package/src/{primitives → components}/Column/index.ts +1 -0
  348. package/src/components/Column/withColumn.ts +27 -0
  349. package/src/components/DatePicker/DatePicker.stories.tsx +102 -0
  350. package/src/components/DatePicker/DatePicker.theme.ts +35 -0
  351. package/src/components/DatePicker/DatePicker.tsx +279 -0
  352. package/src/components/DatePicker/index.ts +5 -0
  353. package/src/components/Dialog/AlertDialog.tsx +12 -16
  354. package/src/components/Dialog/Dialog.stories.tsx +2 -2
  355. package/src/components/Dialog/Dialog.theme.ts +61 -0
  356. package/src/components/Dialog/Dialog.tsx +46 -17
  357. package/src/components/ErrorFallback/ErrorFallback.tsx +14 -8
  358. package/src/components/ErrorFallback/ErrorStack.tsx +12 -6
  359. package/src/components/Focus/Focus.theme.ts +32 -0
  360. package/src/components/Focus/Focus.tsx +1 -1
  361. package/src/components/Icon/Icon.theme.ts +45 -0
  362. package/src/components/Icon/Icon.tsx +10 -3
  363. package/src/components/Icon/IconBlock.tsx +38 -0
  364. package/src/components/Icon/index.ts +1 -0
  365. package/src/components/Image/Image.stories.tsx +1 -1
  366. package/src/components/Image/Image.tsx +38 -9
  367. package/src/components/Input/Input.stories.tsx +132 -29
  368. package/src/components/Input/Input.theme.ts +191 -0
  369. package/src/components/Input/Input.tsx +208 -2
  370. package/src/components/Input/SegmentedInput.tsx +454 -0
  371. package/src/components/Input/constants.ts +8 -0
  372. package/src/components/Input/index.ts +2 -0
  373. package/src/components/Link/Link.theme.ts +16 -0
  374. package/src/components/Link/Link.tsx +10 -2
  375. package/src/components/List/List.stories.tsx +1 -1
  376. package/src/components/List/List.theme.ts +47 -0
  377. package/src/components/List/List.tsx +3 -3
  378. package/src/components/List/ListDropIndicator.tsx +1 -2
  379. package/src/components/List/Tree.stories.tsx +1 -1
  380. package/src/components/List/TreeDropIndicator.tsx +3 -3
  381. package/src/components/List/Treegrid.theme.ts +35 -0
  382. package/src/components/List/Treegrid.tsx +3 -4
  383. package/src/components/Main/Main.theme.ts +29 -0
  384. package/src/components/Main/Main.tsx +9 -7
  385. package/src/components/Main/constants.ts +6 -0
  386. package/src/components/Main/index.ts +1 -0
  387. package/src/components/MediaPlayer/MediaPlayer.stories.tsx +50 -0
  388. package/src/components/MediaPlayer/MediaPlayer.tsx +182 -0
  389. package/src/components/MediaPlayer/index.ts +5 -0
  390. package/src/components/Menu/ContextMenu.stories.tsx +0 -3
  391. package/src/components/Menu/DropdownMenu.stories.tsx +0 -3
  392. package/src/components/Menu/DropdownMenu.tsx +15 -15
  393. package/src/components/Menu/Menu.theme.ts +48 -0
  394. package/src/components/Message/Message.stories.tsx +43 -5
  395. package/src/components/Message/Message.theme.ts +34 -0
  396. package/src/components/Message/Message.tsx +76 -16
  397. package/src/{primitives → components}/Panel/Panel.stories.tsx +2 -3
  398. package/src/components/Panel/Panel.theme.ts +41 -0
  399. package/src/{primitives → components}/Panel/Panel.tsx +2 -1
  400. package/src/components/Popover/Popover.theme.ts +40 -0
  401. package/src/components/Popover/Popover.tsx +7 -7
  402. package/src/components/ScrollArea/ScrollArea.stories.tsx +2 -6
  403. package/src/components/ScrollArea/ScrollArea.theme.ts +107 -0
  404. package/src/components/ScrollArea/ScrollArea.tsx +3 -2
  405. package/src/components/ScrollArea/index.ts +1 -0
  406. package/src/components/ScrollArea/scrollbar.ts +21 -0
  407. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +1 -1
  408. package/src/components/ScrollContainer/ScrollContainer.tsx +58 -58
  409. package/src/components/Select/Select.theme.ts +55 -0
  410. package/src/components/Select/Select.tsx +26 -10
  411. package/src/components/Separator/Separator.theme.ts +23 -0
  412. package/src/components/Skeleton/Skeleton.theme.ts +22 -0
  413. package/src/components/Splitter/Splitter.stories.tsx +1 -1
  414. package/src/components/Splitter/Splitter.theme.ts +18 -0
  415. package/src/components/Splitter/Splitter.tsx +10 -15
  416. package/src/components/Status/Status.theme.ts +31 -0
  417. package/src/components/Status/Status.tsx +1 -2
  418. package/src/components/Tag/Tag.theme.ts +22 -0
  419. package/src/components/Toast/Toast.stories.tsx +41 -20
  420. package/src/components/Toast/Toast.theme.ts +50 -0
  421. package/src/components/Toast/Toast.tsx +96 -27
  422. package/src/components/Toolbar/Toolbar.theme.ts +36 -0
  423. package/src/components/Toolbar/Toolbar.tsx +67 -15
  424. package/src/components/Tooltip/TextTooltip.tsx +54 -0
  425. package/src/components/Tooltip/Tooltip.stories.tsx +1 -10
  426. package/src/components/Tooltip/Tooltip.theme.ts +19 -0
  427. package/src/components/Tooltip/Tooltip.tsx +18 -17
  428. package/src/components/Tooltip/index.ts +2 -0
  429. package/src/components/Tooltip/tooltipContent.ts +16 -0
  430. package/src/components/index.ts +7 -5
  431. package/src/exemplars/generics.stories.tsx +1 -2
  432. package/src/exemplars/slot.stories.tsx +5 -6
  433. package/src/exemplars/virtualizer.stories.tsx +0 -1
  434. package/src/hooks/useDensityContext.ts +1 -1
  435. package/src/hooks/useElevationContext.ts +1 -1
  436. package/src/hooks/useThemeContext.ts +1 -1
  437. package/src/hooks/useTranslationsContext.ts +1 -1
  438. package/src/index.ts +1 -0
  439. package/src/playground/Custom.stories.tsx +12 -32
  440. package/src/primitives/Container/Container.tsx +3 -1
  441. package/src/{components → primitives}/DensityProvider/DensityProvider.tsx +1 -1
  442. package/src/primitives/Flex/Flex.tsx +3 -1
  443. package/src/primitives/Grid/Grid.tsx +3 -1
  444. package/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.tsx +1 -1
  445. package/src/{components → primitives}/ThemeProvider/ThemeProvider.tsx +1 -1
  446. package/src/{components → primitives}/ThemeProvider/index.ts +2 -2
  447. package/src/primitives/index.ts +4 -2
  448. package/src/testing/Loading.tsx +2 -1
  449. package/src/testing/decorators/withLayout.tsx +7 -17
  450. package/src/testing/decorators/withLayoutVariants.tsx +1 -1
  451. package/src/testing/decorators/withTheme.tsx +21 -13
  452. package/src/theme/bindTheme.ts +13 -0
  453. package/src/theme/defaultTheme.ts +83 -0
  454. package/src/theme/index.ts +37 -0
  455. package/src/translations.ts +24 -0
  456. package/src/util/index.ts +2 -1
  457. package/src/util/mobile.ts +11 -0
  458. package/src/util/slots.ts +129 -0
  459. package/src/util/usePx.ts +4 -1
  460. package/dist/lib/browser/chunk-OCVRIJCH.mjs +0 -848
  461. package/dist/lib/browser/chunk-OCVRIJCH.mjs.map +0 -7
  462. package/dist/lib/node-esm/chunk-QUD5P3RU.mjs +0 -850
  463. package/dist/lib/node-esm/chunk-QUD5P3RU.mjs.map +0 -7
  464. package/dist/types/src/components/DensityProvider/index.d.ts.map +0 -1
  465. package/dist/types/src/components/ElevationProvider/index.d.ts.map +0 -1
  466. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +0 -1
  467. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +0 -129
  468. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +0 -1
  469. package/dist/types/src/components/ThemeProvider/index.d.ts +0 -4
  470. package/dist/types/src/components/ThemeProvider/index.d.ts.map +0 -1
  471. package/dist/types/src/primitives/Column/Column.d.ts +0 -33
  472. package/dist/types/src/primitives/Column/Column.d.ts.map +0 -1
  473. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +0 -1
  474. package/dist/types/src/primitives/Column/index.d.ts +0 -2
  475. package/dist/types/src/primitives/Column/index.d.ts.map +0 -1
  476. package/dist/types/src/primitives/Panel/Panel.d.ts.map +0 -1
  477. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +0 -1
  478. package/dist/types/src/primitives/Panel/index.d.ts.map +0 -1
  479. package/dist/types/src/util/hasIosKeyboard.d.ts +0 -2
  480. package/dist/types/src/util/hasIosKeyboard.d.ts.map +0 -1
  481. package/src/util/hasIosKeyboard.ts +0 -8
  482. /package/dist/types/src/{primitives → components}/Column/Column.stories.d.ts +0 -0
  483. /package/dist/types/src/{primitives → components}/Panel/Panel.stories.d.ts +0 -0
  484. /package/dist/types/src/{primitives → components}/Panel/index.d.ts +0 -0
  485. /package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts +0 -0
  486. /package/dist/types/src/{components → primitives}/DensityProvider/index.d.ts +0 -0
  487. /package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts +0 -0
  488. /package/dist/types/src/{components → primitives}/ElevationProvider/index.d.ts +0 -0
  489. /package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts +0 -0
  490. /package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.d.ts +0 -0
  491. /package/src/{primitives → components}/Column/AUDIT.md +0 -0
  492. /package/src/{primitives → components}/Panel/index.ts +0 -0
  493. /package/src/{components → primitives}/DensityProvider/index.ts +0 -0
  494. /package/src/{components → primitives}/ElevationProvider/ElevationProvider.tsx +0 -0
  495. /package/src/{components → primitives}/ElevationProvider/index.ts +0 -0
  496. /package/src/{components → primitives}/ThemeProvider/TranslationsProvider.tsx +0 -0
@@ -0,0 +1,153 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import React, { forwardRef } from 'react';
6
+ import { useTranslation } from 'react-i18next';
7
+
8
+ import { translationKey } from '#translations';
9
+
10
+ import { IconButton, type IconButtonProps } from './IconButton';
11
+ import { ToggleIconButton, type ToggleIconButtonProps } from './ToggleIconButton';
12
+
13
+ // Static presets fix the icon and default the label; callers can still override `label`.
14
+ type StaticPresetProps = Omit<IconButtonProps, 'icon' | 'label'> & { label?: string };
15
+
16
+ // Stateful presets fix both icons so a call site cannot supply a conflicting glyph.
17
+ type TogglePresetProps = Omit<ToggleIconButtonProps, 'icon' | 'activeIcon' | 'label'> & { label?: string };
18
+
19
+ //
20
+ // Star
21
+ //
22
+
23
+ const StarIconButton = forwardRef<HTMLButtonElement, TogglePresetProps>(({ label, active, ...props }, forwardedRef) => {
24
+ const { t } = useTranslation(translationKey);
25
+ return (
26
+ <ToggleIconButton
27
+ {...props}
28
+ active={active}
29
+ icon='ph--star--regular'
30
+ activeIcon='ph--star--fill'
31
+ label={label ?? t(active ? 'system-button.unstar.label' : 'system-button.star.label')}
32
+ ref={forwardedRef}
33
+ />
34
+ );
35
+ });
36
+
37
+ StarIconButton.displayName = 'SystemIconButton.Star';
38
+
39
+ //
40
+ // Bookmark
41
+ //
42
+
43
+ const BookmarkIconButton = forwardRef<HTMLButtonElement, TogglePresetProps>(
44
+ ({ label, active, ...props }, forwardedRef) => {
45
+ const { t } = useTranslation(translationKey);
46
+ return (
47
+ <ToggleIconButton
48
+ {...props}
49
+ active={active}
50
+ icon='ph--bookmark-simple--regular'
51
+ activeIcon='ph--bookmark-simple--fill'
52
+ label={label ?? t(active ? 'system-button.unbookmark.label' : 'system-button.bookmark.label')}
53
+ ref={forwardedRef}
54
+ />
55
+ );
56
+ },
57
+ );
58
+
59
+ BookmarkIconButton.displayName = 'SystemIconButton.Bookmark';
60
+
61
+ //
62
+ // Expander
63
+ //
64
+
65
+ const ExpanderIconButton = forwardRef<HTMLButtonElement, TogglePresetProps>(
66
+ ({ label, active, ...props }, forwardedRef) => {
67
+ const { t } = useTranslation(translationKey);
68
+ return (
69
+ <ToggleIconButton
70
+ {...props}
71
+ active={active}
72
+ icon='ph--caret-right--regular'
73
+ label={label ?? t(active ? 'system-button.collapse.label' : 'system-button.expand.label')}
74
+ ref={forwardedRef}
75
+ />
76
+ );
77
+ },
78
+ );
79
+
80
+ ExpanderIconButton.displayName = 'SystemIconButton.Expander';
81
+
82
+ //
83
+ // Add
84
+ //
85
+
86
+ const AddIconButton = forwardRef<HTMLButtonElement, StaticPresetProps>(({ label, ...props }, forwardedRef) => {
87
+ const { t } = useTranslation(translationKey);
88
+ return (
89
+ <IconButton {...props} icon='ph--plus--regular' label={label ?? t('system-button.add.label')} ref={forwardedRef} />
90
+ );
91
+ });
92
+
93
+ AddIconButton.displayName = 'SystemIconButton.Add';
94
+
95
+ //
96
+ // Delete
97
+ //
98
+
99
+ const DeleteIconButton = forwardRef<HTMLButtonElement, StaticPresetProps>(({ label, ...props }, forwardedRef) => {
100
+ const { t } = useTranslation(translationKey);
101
+ return (
102
+ <IconButton
103
+ {...props}
104
+ icon='ph--trash--regular'
105
+ label={label ?? t('system-button.delete.label')}
106
+ ref={forwardedRef}
107
+ />
108
+ );
109
+ });
110
+
111
+ DeleteIconButton.displayName = 'SystemIconButton.Delete';
112
+
113
+ //
114
+ // Edit
115
+ //
116
+
117
+ const EditIconButton = forwardRef<HTMLButtonElement, StaticPresetProps>(({ label, ...props }, forwardedRef) => {
118
+ const { t } = useTranslation(translationKey);
119
+ return (
120
+ <IconButton {...props} icon='ph--pen--regular' label={label ?? t('system-button.edit.label')} ref={forwardedRef} />
121
+ );
122
+ });
123
+
124
+ EditIconButton.displayName = 'SystemIconButton.Edit';
125
+
126
+ //
127
+ // Close
128
+ //
129
+
130
+ const CloseIconButton = forwardRef<HTMLButtonElement, StaticPresetProps>(({ label, ...props }, forwardedRef) => {
131
+ const { t } = useTranslation(translationKey);
132
+ return (
133
+ <IconButton {...props} icon='ph--x--regular' label={label ?? t('system-button.close.label')} ref={forwardedRef} />
134
+ );
135
+ });
136
+
137
+ CloseIconButton.displayName = 'SystemIconButton.Close';
138
+
139
+ //
140
+ // Namespace
141
+ //
142
+
143
+ export const SystemIconButton = {
144
+ Star: StarIconButton,
145
+ Bookmark: BookmarkIconButton,
146
+ Expander: ExpanderIconButton,
147
+ Add: AddIconButton,
148
+ Delete: DeleteIconButton,
149
+ Edit: EditIconButton,
150
+ Close: CloseIconButton,
151
+ };
152
+
153
+ export type { StaticPresetProps, TogglePresetProps };
@@ -0,0 +1,32 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import React, { forwardRef } from 'react';
6
+
7
+ import { mx } from '@dxos/ui-theme';
8
+
9
+ import { IconButton, type IconButtonProps } from './IconButton';
10
+
11
+ export type ToggleIconButtonProps = Omit<IconButtonProps, 'icon'> & {
12
+ active?: boolean;
13
+ /** Icon for the inactive state; rotated 90° in the active state when `activeIcon` is omitted. */
14
+ icon: NonNullable<IconButtonProps['icon']>;
15
+ /** Icon for the active state. When omitted, `icon` rotates 90° (disclosure-style). */
16
+ activeIcon?: NonNullable<IconButtonProps['icon']>;
17
+ };
18
+
19
+ /**
20
+ * Icon button bound to a boolean toggle. With `activeIcon` it swaps icons between states;
21
+ * otherwise it rotates `icon` 90° to signal the active (e.g. expanded) state.
22
+ */
23
+ export const ToggleIconButton = forwardRef<HTMLButtonElement, ToggleIconButtonProps>(
24
+ ({ active, icon, activeIcon, iconClassNames, ...props }, forwardedRef) => (
25
+ <IconButton
26
+ {...props}
27
+ ref={forwardedRef}
28
+ icon={active && activeIcon ? activeIcon : icon}
29
+ iconClassNames={activeIcon ? iconClassNames : mx('transition-transform', active && 'rotate-90', iconClassNames)}
30
+ />
31
+ ),
32
+ );
@@ -4,5 +4,7 @@
4
4
 
5
5
  export * from './Button';
6
6
  export * from './IconButton';
7
+ export * from './SystemIconButton';
7
8
  export * from './Toggle';
8
9
  export * from './ToggleGroup';
10
+ export * from './ToggleIconButton';
@@ -0,0 +1,43 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React, { useState } from 'react';
7
+
8
+ import { withLayout, withTheme } from '../../testing';
9
+ import { Calendar, type DateRange } from './Calendar';
10
+
11
+ const meta: Meta<typeof Calendar.Root> = {
12
+ title: 'ui/react-ui-core/components/Calendar',
13
+ component: Calendar.Root,
14
+ decorators: [withTheme(), withLayout({ layout: 'column', classNames: 'flex flex-row p-4 justify-center' })],
15
+ parameters: {
16
+ layout: 'fullscreen',
17
+ },
18
+ };
19
+
20
+ export default meta;
21
+
22
+ type Story = StoryObj<typeof Calendar.Root>;
23
+
24
+ export const Single: Story = {
25
+ render: () => {
26
+ const [date, setDate] = useState<Date | undefined>(new Date());
27
+ return <Calendar.Root mode='single' selected={date} onSelect={setDate} />;
28
+ },
29
+ };
30
+
31
+ export const Range: Story = {
32
+ render: () => {
33
+ const [range, setRange] = useState<DateRange | undefined>();
34
+ return <Calendar.Root mode='range' selected={range} onSelect={setRange} />;
35
+ },
36
+ };
37
+
38
+ export const WithMinDate: Story = {
39
+ render: () => {
40
+ const [date, setDate] = useState<Date | undefined>();
41
+ return <Calendar.Root mode='single' selected={date} onSelect={setDate} minValue={new Date()} />;
42
+ },
43
+ };
@@ -0,0 +1,74 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { mx } from '@dxos/ui-theme';
6
+ import { type ComponentFunction, type Theme } from '@dxos/ui-types';
7
+
8
+ export type CalendarStyleProps = Partial<{}>;
9
+
10
+ //
11
+ // Theme slots target react-aria-components elements. RAC attaches `data-*` attributes to its
12
+ // rendered nodes (`data-selected`, `data-focused`, `data-disabled`, `data-outside-month`,
13
+ // `data-selection-start`, `data-selection-end`, `data-hovered`, etc.) which we hook into via
14
+ // Tailwind's `data-[…]:` modifiers.
15
+ //
16
+
17
+ const root: ComponentFunction<CalendarStyleProps> = (_p, ...etc) =>
18
+ mx('relative w-fit h-fit self-start p-2 select-none bg-group-surface text-base-fg', ...etc);
19
+
20
+ const nav: ComponentFunction<CalendarStyleProps> = (_p, ...etc) => mx('flex items-center justify-between pb-1', ...etc);
21
+
22
+ const caption_label: ComponentFunction<CalendarStyleProps> = (_p, ...etc) =>
23
+ mx('flex-1 text-center text-sm font-medium', ...etc);
24
+
25
+ const button_previous: ComponentFunction<CalendarStyleProps> = (_p, ...etc) =>
26
+ mx(
27
+ 'h-7 w-7 inline-flex items-center justify-center rounded-sm shrink-0',
28
+ 'text-description hover:bg-hover-surface',
29
+ 'data-[disabled]:opacity-50 data-[disabled]:cursor-not-allowed',
30
+ ...etc,
31
+ );
32
+
33
+ const button_next: ComponentFunction<CalendarStyleProps> = (_p, ...etc) =>
34
+ mx(
35
+ 'h-7 w-7 inline-flex items-center justify-center rounded-sm shrink-0',
36
+ 'text-description hover:bg-hover-surface',
37
+ 'data-[disabled]:opacity-50 data-[disabled]:cursor-not-allowed',
38
+ ...etc,
39
+ );
40
+
41
+ const month_grid: ComponentFunction<CalendarStyleProps> = (_p, ...etc) => mx('w-full border-collapse', ...etc);
42
+
43
+ const weekdays: ComponentFunction<CalendarStyleProps> = (_p, ...etc) => mx('', ...etc);
44
+
45
+ const weekday: ComponentFunction<CalendarStyleProps> = (_p, ...etc) =>
46
+ mx('w-9 h-7 text-xs font-thin text-description', ...etc);
47
+
48
+ const day: ComponentFunction<CalendarStyleProps> = (_p, ...etc) =>
49
+ mx(
50
+ 'relative w-9 h-9 p-0 text-center text-sm rounded-sm inline-flex items-center justify-center cursor-pointer',
51
+ 'outline-none',
52
+ 'data-[hovered]:bg-hover-surface',
53
+ 'data-[focus-visible]:outline-2 data-[focus-visible]:outline-primary-500',
54
+ 'data-[selected]:bg-primary-500 data-[selected]:text-primary-fg data-[selected]:hover:bg-primary-500',
55
+ 'data-[outside-month]:text-description/40',
56
+ 'data-[disabled]:text-description/40 data-[disabled]:cursor-not-allowed data-[disabled]:hover:bg-transparent',
57
+ 'data-[unavailable]:line-through data-[unavailable]:text-description/50 data-[unavailable]:cursor-not-allowed',
58
+ // Range selection visual layer.
59
+ 'data-[selection-start]:rounded-l-sm data-[selection-end]:rounded-r-sm',
60
+ 'data-[selection-start]:bg-primary-500 data-[selection-end]:bg-primary-500',
61
+ ...etc,
62
+ );
63
+
64
+ export const calendarTheme: Theme<CalendarStyleProps> = {
65
+ root,
66
+ nav,
67
+ caption_label,
68
+ button_previous,
69
+ button_next,
70
+ month_grid,
71
+ weekdays,
72
+ weekday,
73
+ day,
74
+ };
@@ -0,0 +1,196 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { CalendarDate, parseDate } from '@internationalized/date';
6
+ import React, { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';
7
+ import {
8
+ Button as RACButton,
9
+ Calendar as RACCalendar,
10
+ CalendarCell as RACCalendarCell,
11
+ type CalendarProps as RACCalendarProps,
12
+ CalendarGrid as RACCalendarGrid,
13
+ CalendarGridBody as RACCalendarGridBody,
14
+ CalendarGridHeader as RACCalendarGridHeader,
15
+ CalendarHeaderCell as RACCalendarHeaderCell,
16
+ Heading as RACHeading,
17
+ RangeCalendar as RACRangeCalendar,
18
+ type RangeCalendarProps as RACRangeCalendarProps,
19
+ type DateValue,
20
+ } from 'react-aria-components';
21
+
22
+ import { type ClassNameValue } from '@dxos/ui-types';
23
+
24
+ import { useThemeContext } from '../../hooks';
25
+ import { Icon } from '../Icon';
26
+
27
+ //
28
+ // Date <-> CalendarDate conversion.
29
+ // External API stays `Date` (and `{from,to}`-style range objects) so existing call sites keep working.
30
+ //
31
+
32
+ const toCalendarDate = (date: Date | undefined): CalendarDate | null => {
33
+ if (!date) {
34
+ return null;
35
+ }
36
+ return new CalendarDate(date.getFullYear(), date.getMonth() + 1, date.getDate());
37
+ };
38
+
39
+ const fromCalendarDate = (value: DateValue | null | undefined): Date | undefined => {
40
+ if (!value) {
41
+ return undefined;
42
+ }
43
+ return new Date(value.year, value.month - 1, value.day);
44
+ };
45
+
46
+ export type DateRange = { from: Date; to?: Date };
47
+
48
+ //
49
+ // Public API.
50
+ //
51
+
52
+ type BaseCalendarProps = {
53
+ classNames?: ClassNameValue;
54
+ className?: string;
55
+ isDisabled?: boolean;
56
+ minValue?: Date;
57
+ maxValue?: Date;
58
+ /** Month to render when there's no selection — driven by the consuming picker. */
59
+ defaultMonth?: Date;
60
+ };
61
+
62
+ type SingleProps = BaseCalendarProps & {
63
+ mode?: 'single';
64
+ selected?: Date;
65
+ onSelect?: (date: Date | undefined) => void;
66
+ };
67
+
68
+ type RangeProps = BaseCalendarProps & {
69
+ mode: 'range';
70
+ selected?: DateRange;
71
+ onSelect?: (range: DateRange | undefined) => void;
72
+ };
73
+
74
+ export type CalendarRootProps = SingleProps | RangeProps;
75
+
76
+ const CalendarShell = ({
77
+ classNames,
78
+ className,
79
+ isDisabled,
80
+ forwardedRef,
81
+ children,
82
+ }: {
83
+ classNames?: ClassNameValue;
84
+ className?: string;
85
+ isDisabled?: boolean;
86
+ forwardedRef?: React.Ref<HTMLDivElement>;
87
+ children: ReactNode;
88
+ }) => {
89
+ const { tx } = useThemeContext();
90
+ return (
91
+ <div
92
+ ref={forwardedRef}
93
+ className={tx('calendar.root', {}, classNames, className) ?? undefined}
94
+ aria-disabled={isDisabled || undefined}
95
+ >
96
+ {children}
97
+ </div>
98
+ );
99
+ };
100
+
101
+ const CalendarChrome = () => {
102
+ const { tx } = useThemeContext();
103
+ return (
104
+ <header className={tx('calendar.nav', {}) ?? undefined}>
105
+ <RACButton slot='previous' className={tx('calendar.button_previous', {}) ?? undefined}>
106
+ <Icon size={4} icon='ph--caret-left--regular' />
107
+ </RACButton>
108
+ <RACHeading className={tx('calendar.caption_label', {}) ?? undefined} />
109
+ <RACButton slot='next' className={tx('calendar.button_next', {}) ?? undefined}>
110
+ <Icon size={4} icon='ph--caret-right--regular' />
111
+ </RACButton>
112
+ </header>
113
+ );
114
+ };
115
+
116
+ const CalendarGridContent = () => {
117
+ const { tx } = useThemeContext();
118
+ return (
119
+ <RACCalendarGrid className={tx('calendar.month_grid', {}) ?? undefined}>
120
+ <RACCalendarGridHeader className={tx('calendar.weekdays', {}) ?? undefined}>
121
+ {(day) => (
122
+ <RACCalendarHeaderCell className={tx('calendar.weekday', {}) ?? undefined}>{day}</RACCalendarHeaderCell>
123
+ )}
124
+ </RACCalendarGridHeader>
125
+ <RACCalendarGridBody>
126
+ {(date) => <RACCalendarCell date={date} className={tx('calendar.day', {}) ?? undefined} />}
127
+ </RACCalendarGridBody>
128
+ </RACCalendarGrid>
129
+ );
130
+ };
131
+
132
+ const CalendarRoot = forwardRef<HTMLDivElement, CalendarRootProps>((props, forwardedRef) => {
133
+ const { classNames, className, isDisabled, minValue, maxValue, defaultMonth } = props;
134
+ const defaultFocused = toCalendarDate(defaultMonth) ?? undefined;
135
+
136
+ if (props.mode === 'range') {
137
+ const racProps: RACRangeCalendarProps<CalendarDate> = {
138
+ isDisabled,
139
+ minValue: toCalendarDate(minValue) ?? undefined,
140
+ maxValue: toCalendarDate(maxValue) ?? undefined,
141
+ defaultFocusedValue: defaultFocused,
142
+ value: props.selected?.from
143
+ ? {
144
+ start: toCalendarDate(props.selected.from)!,
145
+ end: toCalendarDate(props.selected.to ?? props.selected.from)!,
146
+ }
147
+ : undefined,
148
+ onChange: (next) => {
149
+ if (!next) {
150
+ props.onSelect?.(undefined);
151
+ return;
152
+ }
153
+ const from = fromCalendarDate(next.start);
154
+ const to = fromCalendarDate(next.end);
155
+ if (from) {
156
+ props.onSelect?.({ from, to });
157
+ }
158
+ },
159
+ };
160
+ return (
161
+ <CalendarShell classNames={classNames} className={className} isDisabled={isDisabled} forwardedRef={forwardedRef}>
162
+ <RACRangeCalendar {...racProps}>
163
+ <CalendarChrome />
164
+ <CalendarGridContent />
165
+ </RACRangeCalendar>
166
+ </CalendarShell>
167
+ );
168
+ }
169
+
170
+ const racProps: RACCalendarProps<CalendarDate> = {
171
+ isDisabled,
172
+ minValue: toCalendarDate(minValue) ?? undefined,
173
+ maxValue: toCalendarDate(maxValue) ?? undefined,
174
+ defaultFocusedValue: defaultFocused,
175
+ value: toCalendarDate(props.selected),
176
+ onChange: (next) => props.onSelect?.(fromCalendarDate(next)),
177
+ };
178
+ return (
179
+ <CalendarShell classNames={classNames} className={className} isDisabled={isDisabled} forwardedRef={forwardedRef}>
180
+ <RACCalendar {...racProps}>
181
+ <CalendarChrome />
182
+ <CalendarGridContent />
183
+ </RACCalendar>
184
+ </CalendarShell>
185
+ );
186
+ });
187
+
188
+ CalendarRoot.displayName = 'Calendar.Root';
189
+
190
+ export const Calendar = {
191
+ Root: CalendarRoot,
192
+ };
193
+
194
+ // Re-export the iso parser for convenience.
195
+ export { parseDate as parseCalendarDate };
196
+ export type { ComponentPropsWithoutRef };
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ export * from './Calendar';