@dxos/react-ui 0.8.4-main.d05539e30a → 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 (375) hide show
  1. package/dist/lib/browser/chunk-5SPBSIWS.mjs +33 -0
  2. package/dist/lib/browser/chunk-5SPBSIWS.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-KVJDKHLF.mjs +1613 -0
  4. package/dist/lib/browser/chunk-KVJDKHLF.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +2403 -1562
  6. package/dist/lib/browser/index.mjs.map +4 -4
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/lib/browser/testing/index.mjs +9 -6
  9. package/dist/lib/browser/testing/index.mjs.map +3 -3
  10. package/dist/lib/browser/translations.mjs +1 -1
  11. package/dist/lib/node-esm/chunk-5JYHWJDZ.mjs +1615 -0
  12. package/dist/lib/node-esm/chunk-5JYHWJDZ.mjs.map +7 -0
  13. package/dist/lib/node-esm/{chunk-XCFLA74M.mjs → chunk-FPVTVXND.mjs} +11 -2
  14. package/dist/lib/node-esm/chunk-FPVTVXND.mjs.map +7 -0
  15. package/dist/lib/node-esm/index.mjs +2403 -1562
  16. package/dist/lib/node-esm/index.mjs.map +4 -4
  17. package/dist/lib/node-esm/meta.json +1 -1
  18. package/dist/lib/node-esm/testing/index.mjs +9 -6
  19. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  20. package/dist/lib/node-esm/translations.mjs +1 -1
  21. package/dist/types/src/components/Avatars/Avatar.theme.d.ts +11 -0
  22. package/dist/types/src/components/Avatars/Avatar.theme.d.ts.map +1 -0
  23. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +5 -1
  24. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  25. package/dist/types/src/components/Breadcrumb/Breadcrumb.theme.d.ts +4 -0
  26. package/dist/types/src/components/Breadcrumb/Breadcrumb.theme.d.ts.map +1 -0
  27. package/dist/types/src/components/Button/Button.d.ts +1 -1
  28. package/dist/types/src/components/Button/Button.d.ts.map +1 -1
  29. package/dist/types/src/components/Button/Button.theme.d.ts +11 -0
  30. package/dist/types/src/components/Button/Button.theme.d.ts.map +1 -0
  31. package/dist/types/src/components/Button/IconButton.stories.d.ts +1 -0
  32. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
  33. package/dist/types/src/components/Button/IconButton.theme.d.ts +8 -0
  34. package/dist/types/src/components/Button/IconButton.theme.d.ts.map +1 -0
  35. package/dist/types/src/components/Calendar/Calendar.d.ts +33 -0
  36. package/dist/types/src/components/Calendar/Calendar.d.ts.map +1 -0
  37. package/dist/types/src/components/Calendar/Calendar.stories.d.ts +9 -0
  38. package/dist/types/src/components/Calendar/Calendar.stories.d.ts.map +1 -0
  39. package/dist/types/src/components/Calendar/Calendar.theme.d.ts +4 -0
  40. package/dist/types/src/components/Calendar/Calendar.theme.d.ts.map +1 -0
  41. package/dist/types/src/components/Calendar/index.d.ts +2 -0
  42. package/dist/types/src/components/Calendar/index.d.ts.map +1 -0
  43. package/dist/types/src/components/Card/Card.d.ts +51 -44
  44. package/dist/types/src/components/Card/Card.d.ts.map +1 -1
  45. package/dist/types/src/components/Card/Card.stories.d.ts +1 -0
  46. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -1
  47. package/dist/types/src/components/Card/Card.theme.d.ts +12 -0
  48. package/dist/types/src/components/Card/Card.theme.d.ts.map +1 -0
  49. package/dist/types/src/components/Carousel/Carousel.d.ts +2 -6
  50. package/dist/types/src/components/Carousel/Carousel.d.ts.map +1 -1
  51. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  52. package/dist/types/src/components/Clipboard/index.d.ts +1 -1
  53. package/dist/types/src/{primitives → components}/Column/Column.d.ts.map +1 -1
  54. package/dist/types/src/{primitives → components}/Column/Column.stories.d.ts.map +1 -1
  55. package/dist/types/src/components/Column/Column.theme.d.ts +9 -0
  56. package/dist/types/src/components/Column/Column.theme.d.ts.map +1 -0
  57. package/dist/types/src/components/Column/index.d.ts +3 -0
  58. package/dist/types/src/components/Column/index.d.ts.map +1 -0
  59. package/dist/types/src/components/Column/withColumn.d.ts +21 -0
  60. package/dist/types/src/components/Column/withColumn.d.ts.map +1 -0
  61. package/dist/types/src/components/DatePicker/DatePicker.d.ts +72 -0
  62. package/dist/types/src/components/DatePicker/DatePicker.d.ts.map +1 -0
  63. package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts +10 -0
  64. package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts.map +1 -0
  65. package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts +6 -0
  66. package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts.map +1 -0
  67. package/dist/types/src/components/DatePicker/index.d.ts +2 -0
  68. package/dist/types/src/components/DatePicker/index.d.ts.map +1 -0
  69. package/dist/types/src/components/Dialog/AlertDialog.d.ts +8 -8
  70. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
  71. package/dist/types/src/components/Dialog/Dialog.d.ts +9 -7
  72. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  73. package/dist/types/src/components/Dialog/Dialog.theme.d.ts +10 -0
  74. package/dist/types/src/components/Dialog/Dialog.theme.d.ts.map +1 -0
  75. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -1
  76. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -1
  77. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -1
  78. package/dist/types/src/components/Focus/Focus.theme.d.ts +6 -0
  79. package/dist/types/src/components/Focus/Focus.theme.d.ts.map +1 -0
  80. package/dist/types/src/components/Icon/Icon.theme.d.ts +11 -0
  81. package/dist/types/src/components/Icon/Icon.theme.d.ts.map +1 -0
  82. package/dist/types/src/components/Icon/IconBlock.d.ts +15 -0
  83. package/dist/types/src/components/Icon/IconBlock.d.ts.map +1 -0
  84. package/dist/types/src/components/Icon/index.d.ts +1 -0
  85. package/dist/types/src/components/Icon/index.d.ts.map +1 -1
  86. package/dist/types/src/components/Input/Input.d.ts +81 -3
  87. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  88. package/dist/types/src/components/Input/Input.stories.d.ts +14 -3
  89. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  90. package/dist/types/src/components/Input/Input.theme.d.ts +115 -0
  91. package/dist/types/src/components/Input/Input.theme.d.ts.map +1 -0
  92. package/dist/types/src/components/Input/SegmentedInput.d.ts +79 -0
  93. package/dist/types/src/components/Input/SegmentedInput.d.ts.map +1 -0
  94. package/dist/types/src/components/Input/constants.d.ts +2 -0
  95. package/dist/types/src/components/Input/constants.d.ts.map +1 -0
  96. package/dist/types/src/components/Input/index.d.ts +2 -0
  97. package/dist/types/src/components/Input/index.d.ts.map +1 -1
  98. package/dist/types/src/components/Link/Link.theme.d.ts +6 -0
  99. package/dist/types/src/components/Link/Link.theme.d.ts.map +1 -0
  100. package/dist/types/src/components/List/List.d.ts.map +1 -1
  101. package/dist/types/src/components/List/List.theme.d.ts +7 -0
  102. package/dist/types/src/components/List/List.theme.d.ts.map +1 -0
  103. package/dist/types/src/components/List/Treegrid.d.ts +1 -1
  104. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
  105. package/dist/types/src/components/List/Treegrid.theme.d.ts +7 -0
  106. package/dist/types/src/components/List/Treegrid.theme.d.ts.map +1 -0
  107. package/dist/types/src/components/Main/Main.d.ts +2 -2
  108. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  109. package/dist/types/src/components/Main/Main.theme.d.ts +20 -0
  110. package/dist/types/src/components/Main/Main.theme.d.ts.map +1 -0
  111. package/dist/types/src/components/Main/constants.d.ts +3 -0
  112. package/dist/types/src/components/Main/constants.d.ts.map +1 -0
  113. package/dist/types/src/components/Main/index.d.ts +1 -0
  114. package/dist/types/src/components/Main/index.d.ts.map +1 -1
  115. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts +9 -12
  116. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts.map +1 -1
  117. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts +1 -1
  118. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -1
  119. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -1
  120. package/dist/types/src/components/Menu/Menu.theme.d.ts +7 -0
  121. package/dist/types/src/components/Menu/Menu.theme.d.ts.map +1 -0
  122. package/dist/types/src/components/Message/Message.d.ts +2 -2
  123. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  124. package/dist/types/src/components/Message/Message.stories.d.ts +5 -1
  125. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  126. package/dist/types/src/components/Message/Message.theme.d.ts +7 -0
  127. package/dist/types/src/components/Message/Message.theme.d.ts.map +1 -0
  128. package/dist/types/src/{primitives → components}/Panel/Panel.d.ts +1 -1
  129. package/dist/types/src/components/Panel/Panel.d.ts.map +1 -0
  130. package/dist/types/src/{primitives → components}/Panel/Panel.stories.d.ts.map +1 -1
  131. package/dist/types/src/components/Panel/Panel.theme.d.ts +13 -0
  132. package/dist/types/src/components/Panel/Panel.theme.d.ts.map +1 -0
  133. package/dist/types/src/components/Panel/index.d.ts.map +1 -0
  134. package/dist/types/src/components/Popover/Popover.theme.d.ts +8 -0
  135. package/dist/types/src/components/Popover/Popover.theme.d.ts.map +1 -0
  136. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  137. package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts +17 -0
  138. package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts.map +1 -0
  139. package/dist/types/src/components/ScrollArea/index.d.ts +1 -0
  140. package/dist/types/src/components/ScrollArea/index.d.ts.map +1 -1
  141. package/dist/types/src/components/ScrollArea/scrollbar.d.ts +18 -0
  142. package/dist/types/src/components/ScrollArea/scrollbar.d.ts.map +1 -0
  143. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +13 -19
  144. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  145. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  146. package/dist/types/src/components/Select/Select.theme.d.ts +6 -0
  147. package/dist/types/src/components/Select/Select.theme.d.ts.map +1 -0
  148. package/dist/types/src/components/Separator/Separator.theme.d.ts +7 -0
  149. package/dist/types/src/components/Separator/Separator.theme.d.ts.map +1 -0
  150. package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts +6 -0
  151. package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts.map +1 -0
  152. package/dist/types/src/components/Splitter/Splitter.d.ts +3 -5
  153. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -1
  154. package/dist/types/src/components/Splitter/Splitter.theme.d.ts +4 -0
  155. package/dist/types/src/components/Splitter/Splitter.theme.d.ts.map +1 -0
  156. package/dist/types/src/components/Status/Status.d.ts +1 -1
  157. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  158. package/dist/types/src/components/Status/Status.theme.d.ts +7 -0
  159. package/dist/types/src/components/Status/Status.theme.d.ts.map +1 -0
  160. package/dist/types/src/components/Tag/Tag.theme.d.ts +6 -0
  161. package/dist/types/src/components/Tag/Tag.theme.d.ts.map +1 -0
  162. package/dist/types/src/components/Toast/Toast.d.ts +13 -10
  163. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  164. package/dist/types/src/components/Toast/Toast.stories.d.ts +5 -2
  165. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  166. package/dist/types/src/components/Toast/Toast.theme.d.ts +4 -0
  167. package/dist/types/src/components/Toast/Toast.theme.d.ts.map +1 -0
  168. package/dist/types/src/components/Toolbar/Toolbar.d.ts +19 -7
  169. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  170. package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts +8 -0
  171. package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts.map +1 -0
  172. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  173. package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts +6 -0
  174. package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts.map +1 -0
  175. package/dist/types/src/components/Tooltip/index.d.ts +1 -0
  176. package/dist/types/src/components/Tooltip/index.d.ts.map +1 -1
  177. package/dist/types/src/components/Tooltip/tooltipContent.d.ts +4 -0
  178. package/dist/types/src/components/Tooltip/tooltipContent.d.ts.map +1 -0
  179. package/dist/types/src/components/index.d.ts +5 -4
  180. package/dist/types/src/components/index.d.ts.map +1 -1
  181. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -1
  182. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -1
  183. package/dist/types/src/hooks/useTranslationsContext.d.ts +1 -1
  184. package/dist/types/src/index.d.ts +1 -0
  185. package/dist/types/src/index.d.ts.map +1 -1
  186. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  187. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -1
  188. package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts.map +1 -1
  189. package/dist/types/src/primitives/DensityProvider/index.d.ts.map +1 -0
  190. package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  191. package/dist/types/src/primitives/ElevationProvider/index.d.ts.map +1 -0
  192. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -1
  193. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -1
  194. package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  195. package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -1
  196. package/dist/types/src/{components → primitives}/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  197. package/dist/types/src/{components → primitives}/ThemeProvider/index.d.ts +1 -1
  198. package/dist/types/src/primitives/ThemeProvider/index.d.ts.map +1 -0
  199. package/dist/types/src/primitives/index.d.ts +3 -2
  200. package/dist/types/src/primitives/index.d.ts.map +1 -1
  201. package/dist/types/src/testing/decorators/withTheme.d.ts +5 -1
  202. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  203. package/dist/types/src/theme/bindTheme.d.ts +3 -0
  204. package/dist/types/src/theme/bindTheme.d.ts.map +1 -0
  205. package/dist/types/src/theme/defaultTheme.d.ts +4 -0
  206. package/dist/types/src/theme/defaultTheme.d.ts.map +1 -0
  207. package/dist/types/src/theme/index.d.ts +31 -0
  208. package/dist/types/src/theme/index.d.ts.map +1 -0
  209. package/dist/types/src/translations.d.ts +9 -0
  210. package/dist/types/src/translations.d.ts.map +1 -1
  211. package/dist/types/src/util/index.d.ts +2 -1
  212. package/dist/types/src/util/index.d.ts.map +1 -1
  213. package/dist/types/src/util/mobile.d.ts +5 -0
  214. package/dist/types/src/util/mobile.d.ts.map +1 -0
  215. package/dist/types/src/util/slots.d.ts +57 -0
  216. package/dist/types/src/util/slots.d.ts.map +1 -0
  217. package/dist/types/src/util/usePx.d.ts.map +1 -1
  218. package/dist/types/tsconfig.tsbuildinfo +1 -1
  219. package/package.json +19 -17
  220. package/src/components/Avatars/Avatar.theme.ts +93 -0
  221. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +1 -1
  222. package/src/components/Breadcrumb/Breadcrumb.theme.ts +26 -0
  223. package/src/components/Breadcrumb/Breadcrumb.tsx +14 -2
  224. package/src/components/Button/Button.theme.ts +31 -0
  225. package/src/components/Button/Button.tsx +1 -1
  226. package/src/components/Button/IconButton.stories.tsx +50 -2
  227. package/src/components/Button/IconButton.theme.ts +21 -0
  228. package/src/components/Calendar/Calendar.stories.tsx +43 -0
  229. package/src/components/Calendar/Calendar.theme.ts +74 -0
  230. package/src/components/Calendar/Calendar.tsx +196 -0
  231. package/src/components/Calendar/index.ts +5 -0
  232. package/src/components/Card/Card.stories.tsx +40 -19
  233. package/src/components/Card/Card.theme.ts +93 -0
  234. package/src/components/Card/Card.tsx +121 -147
  235. package/src/components/Carousel/Carousel.tsx +2 -10
  236. package/src/components/Clipboard/CopyButton.tsx +1 -1
  237. package/src/{primitives → components}/Column/Column.stories.tsx +1 -1
  238. package/src/components/Column/Column.theme.ts +48 -0
  239. package/src/{primitives → components}/Column/Column.tsx +2 -1
  240. package/src/{primitives → components}/Column/index.ts +1 -0
  241. package/src/components/Column/withColumn.ts +27 -0
  242. package/src/components/DatePicker/DatePicker.stories.tsx +102 -0
  243. package/src/components/DatePicker/DatePicker.theme.ts +35 -0
  244. package/src/components/DatePicker/DatePicker.tsx +279 -0
  245. package/src/components/DatePicker/index.ts +5 -0
  246. package/src/components/Dialog/AlertDialog.tsx +12 -13
  247. package/src/components/Dialog/Dialog.stories.tsx +2 -2
  248. package/src/components/Dialog/Dialog.theme.ts +61 -0
  249. package/src/components/Dialog/Dialog.tsx +46 -17
  250. package/src/components/ErrorFallback/ErrorFallback.tsx +14 -8
  251. package/src/components/ErrorFallback/ErrorStack.tsx +12 -6
  252. package/src/components/Focus/Focus.theme.ts +32 -0
  253. package/src/components/Focus/Focus.tsx +1 -1
  254. package/src/components/Icon/Icon.theme.ts +45 -0
  255. package/src/components/Icon/IconBlock.tsx +38 -0
  256. package/src/components/Icon/index.ts +1 -0
  257. package/src/components/Image/Image.stories.tsx +1 -1
  258. package/src/components/Input/Input.stories.tsx +132 -29
  259. package/src/components/Input/Input.theme.ts +191 -0
  260. package/src/components/Input/Input.tsx +207 -2
  261. package/src/components/Input/SegmentedInput.tsx +454 -0
  262. package/src/components/Input/constants.ts +5 -0
  263. package/src/components/Input/index.ts +2 -0
  264. package/src/components/Link/Link.theme.ts +16 -0
  265. package/src/components/List/List.theme.ts +47 -0
  266. package/src/components/List/List.tsx +2 -2
  267. package/src/components/List/ListDropIndicator.tsx +1 -1
  268. package/src/components/List/TreeDropIndicator.tsx +3 -3
  269. package/src/components/List/Treegrid.theme.ts +35 -0
  270. package/src/components/List/Treegrid.tsx +3 -4
  271. package/src/components/Main/Main.theme.ts +29 -0
  272. package/src/components/Main/Main.tsx +9 -7
  273. package/src/components/Main/constants.ts +6 -0
  274. package/src/components/Main/index.ts +1 -0
  275. package/src/components/MediaPlayer/MediaPlayer.tsx +61 -36
  276. package/src/components/Menu/ContextMenu.stories.tsx +0 -3
  277. package/src/components/Menu/DropdownMenu.stories.tsx +0 -3
  278. package/src/components/Menu/DropdownMenu.tsx +15 -15
  279. package/src/components/Menu/Menu.theme.ts +48 -0
  280. package/src/components/Message/Message.stories.tsx +42 -4
  281. package/src/components/Message/Message.theme.ts +44 -0
  282. package/src/components/Message/Message.tsx +63 -20
  283. package/src/{primitives → components}/Panel/Panel.stories.tsx +2 -3
  284. package/src/components/Panel/Panel.theme.ts +42 -0
  285. package/src/{primitives → components}/Panel/Panel.tsx +2 -1
  286. package/src/components/Popover/Popover.theme.ts +40 -0
  287. package/src/components/Popover/Popover.tsx +7 -7
  288. package/src/components/ScrollArea/ScrollArea.stories.tsx +1 -1
  289. package/src/components/ScrollArea/ScrollArea.theme.ts +107 -0
  290. package/src/components/ScrollArea/ScrollArea.tsx +3 -2
  291. package/src/components/ScrollArea/index.ts +1 -0
  292. package/src/components/ScrollArea/scrollbar.ts +21 -0
  293. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +1 -1
  294. package/src/components/ScrollContainer/ScrollContainer.tsx +57 -55
  295. package/src/components/Select/Select.theme.ts +55 -0
  296. package/src/components/Select/Select.tsx +26 -10
  297. package/src/components/Separator/Separator.theme.ts +23 -0
  298. package/src/components/Skeleton/Skeleton.theme.ts +22 -0
  299. package/src/components/Splitter/Splitter.stories.tsx +1 -1
  300. package/src/components/Splitter/Splitter.theme.ts +18 -0
  301. package/src/components/Splitter/Splitter.tsx +10 -15
  302. package/src/components/Status/Status.theme.ts +31 -0
  303. package/src/components/Status/Status.tsx +1 -2
  304. package/src/components/Tag/Tag.theme.ts +22 -0
  305. package/src/components/Toast/Toast.stories.tsx +41 -20
  306. package/src/components/Toast/Toast.theme.ts +56 -0
  307. package/src/components/Toast/Toast.tsx +95 -27
  308. package/src/components/Toolbar/Toolbar.theme.ts +36 -0
  309. package/src/components/Toolbar/Toolbar.tsx +63 -13
  310. package/src/components/Tooltip/Tooltip.stories.tsx +0 -9
  311. package/src/components/Tooltip/Tooltip.theme.ts +19 -0
  312. package/src/components/Tooltip/Tooltip.tsx +4 -4
  313. package/src/components/Tooltip/index.ts +1 -0
  314. package/src/components/Tooltip/tooltipContent.ts +16 -0
  315. package/src/components/index.ts +5 -5
  316. package/src/exemplars/generics.stories.tsx +1 -2
  317. package/src/exemplars/slot.stories.tsx +2 -1
  318. package/src/hooks/useDensityContext.ts +1 -1
  319. package/src/hooks/useElevationContext.ts +1 -1
  320. package/src/hooks/useThemeContext.ts +1 -1
  321. package/src/hooks/useTranslationsContext.ts +1 -1
  322. package/src/index.ts +1 -0
  323. package/src/playground/Custom.stories.tsx +12 -32
  324. package/src/primitives/Container/Container.tsx +3 -1
  325. package/src/{components → primitives}/DensityProvider/DensityProvider.tsx +1 -1
  326. package/src/primitives/Flex/Flex.tsx +3 -1
  327. package/src/primitives/Grid/Grid.tsx +3 -1
  328. package/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.tsx +1 -1
  329. package/src/{components → primitives}/ThemeProvider/ThemeProvider.tsx +1 -1
  330. package/src/{components → primitives}/ThemeProvider/index.ts +1 -1
  331. package/src/primitives/index.ts +4 -2
  332. package/src/testing/decorators/withLayoutVariants.tsx +1 -1
  333. package/src/testing/decorators/withTheme.tsx +21 -13
  334. package/src/theme/bindTheme.ts +13 -0
  335. package/src/theme/defaultTheme.ts +83 -0
  336. package/src/theme/index.ts +37 -0
  337. package/src/translations.ts +9 -0
  338. package/src/util/index.ts +2 -1
  339. package/src/util/mobile.ts +11 -0
  340. package/src/util/slots.ts +129 -0
  341. package/src/util/usePx.ts +4 -1
  342. package/dist/lib/browser/chunk-A5QCIG5R.mjs +0 -24
  343. package/dist/lib/browser/chunk-A5QCIG5R.mjs.map +0 -7
  344. package/dist/lib/browser/chunk-LY5XDQR5.mjs +0 -846
  345. package/dist/lib/browser/chunk-LY5XDQR5.mjs.map +0 -7
  346. package/dist/lib/node-esm/chunk-NGKLIKP3.mjs +0 -848
  347. package/dist/lib/node-esm/chunk-NGKLIKP3.mjs.map +0 -7
  348. package/dist/lib/node-esm/chunk-XCFLA74M.mjs.map +0 -7
  349. package/dist/types/src/components/DensityProvider/index.d.ts.map +0 -1
  350. package/dist/types/src/components/ElevationProvider/index.d.ts.map +0 -1
  351. package/dist/types/src/components/ThemeProvider/index.d.ts.map +0 -1
  352. package/dist/types/src/primitives/Column/index.d.ts +0 -2
  353. package/dist/types/src/primitives/Column/index.d.ts.map +0 -1
  354. package/dist/types/src/primitives/Panel/Panel.d.ts.map +0 -1
  355. package/dist/types/src/primitives/Panel/index.d.ts.map +0 -1
  356. package/dist/types/src/util/hasIosKeyboard.d.ts +0 -2
  357. package/dist/types/src/util/hasIosKeyboard.d.ts.map +0 -1
  358. package/src/util/hasIosKeyboard.ts +0 -8
  359. /package/dist/types/src/{primitives → components}/Column/Column.d.ts +0 -0
  360. /package/dist/types/src/{primitives → components}/Column/Column.stories.d.ts +0 -0
  361. /package/dist/types/src/{primitives → components}/Panel/Panel.stories.d.ts +0 -0
  362. /package/dist/types/src/{primitives → components}/Panel/index.d.ts +0 -0
  363. /package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts +0 -0
  364. /package/dist/types/src/{components → primitives}/DensityProvider/index.d.ts +0 -0
  365. /package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts +0 -0
  366. /package/dist/types/src/{components → primitives}/ElevationProvider/index.d.ts +0 -0
  367. /package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts +0 -0
  368. /package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.d.ts +0 -0
  369. /package/dist/types/src/{components → primitives}/ThemeProvider/TranslationsProvider.d.ts +0 -0
  370. /package/src/{primitives → components}/Column/AUDIT.md +0 -0
  371. /package/src/{primitives → components}/Panel/index.ts +0 -0
  372. /package/src/{components → primitives}/DensityProvider/index.ts +0 -0
  373. /package/src/{components → primitives}/ElevationProvider/ElevationProvider.tsx +0 -0
  374. /package/src/{components → primitives}/ElevationProvider/index.ts +0 -0
  375. /package/src/{components → primitives}/ThemeProvider/TranslationsProvider.tsx +0 -0
@@ -14,14 +14,15 @@ import React, {
14
14
  } from 'react';
15
15
  import { useTranslation } from 'react-i18next';
16
16
 
17
- import { composableProps, type DialogSize, osTranslations, slottable } from '@dxos/ui-theme';
17
+ import { osTranslations } from '@dxos/ui-theme';
18
18
  import { type SlottableProps } from '@dxos/ui-types';
19
19
 
20
20
  import { useThemeContext } from '../../hooks';
21
- import { Column } from '../../primitives';
22
- import { type ThemedClassName } from '../../util';
21
+ import { ElevationProvider } from '../../primitives';
22
+ import { type DialogSize } from '../../theme';
23
+ import { type ThemedClassName, composableProps, slottable } from '../../util';
23
24
  import { IconButton } from '../Button';
24
- import { ElevationProvider } from '../ElevationProvider';
25
+ import { Column } from '../Column';
25
26
 
26
27
  //
27
28
  // Root
@@ -40,13 +41,15 @@ const DialogRoot: FunctionComponent<DialogRootProps> = (props) => (
40
41
  </ElevationProvider>
41
42
  );
42
43
 
44
+ DialogRoot.displayName = 'Dialog.Root';
45
+
43
46
  //
44
47
  // Trigger
45
48
  //
46
49
 
47
50
  type DialogTriggerProps = DialogPrimitive.DialogTriggerProps;
48
51
 
49
- const DialogTrigger: FunctionComponent<DialogTriggerProps> = DialogPrimitive.Trigger;
52
+ const DialogTrigger = DialogPrimitive.Trigger;
50
53
 
51
54
  //
52
55
  // Portal
@@ -54,13 +57,13 @@ const DialogTrigger: FunctionComponent<DialogTriggerProps> = DialogPrimitive.Tri
54
57
 
55
58
  type DialogPortalProps = DialogPrimitive.DialogPortalProps;
56
59
 
57
- const DialogPortal: FunctionComponent<DialogPortalProps> = DialogPrimitive.Portal;
60
+ const DialogPortal = DialogPrimitive.Portal;
58
61
 
59
62
  //
60
63
  // Overlay
61
64
  //
62
65
 
63
- const DIALOG_OVERLAY_NAME = 'DialogOverlay';
66
+ const DIALOG_OVERLAY_NAME = 'Dialog.Overlay';
64
67
 
65
68
  type OverlayLayoutContextValue = { inOverlayLayout?: boolean };
66
69
 
@@ -96,7 +99,7 @@ DialogOverlay.displayName = DIALOG_OVERLAY_NAME;
96
99
  // Content
97
100
  //
98
101
 
99
- const DIALOG_CONTENT_NAME = 'DialogContent';
102
+ const DIALOG_CONTENT_NAME = 'Dialog.Content';
100
103
 
101
104
  type DialogContentProps = ThemedClassName<ComponentPropsWithRef<typeof DialogPrimitive.Content>> & {
102
105
  size?: DialogSize;
@@ -151,20 +154,35 @@ const DialogHeader = slottable<HTMLDivElement>(({ children, asChild, ...props },
151
154
  );
152
155
  });
153
156
 
157
+ DialogHeader.displayName = 'Dialog.Header';
158
+
154
159
  //
155
- // CloseIconButton
160
+ // ActionIconButton
156
161
  //
157
162
 
158
- type DialogCloseIconButtonProps = { label?: string };
163
+ type DialogActionIconButtonAction = 'close' | 'delete';
164
+
165
+ type DialogActionIconButtonProps = { action: DialogActionIconButtonAction; label?: string };
166
+
167
+ const DIALOG_ACTION_ICONS: Record<DialogActionIconButtonAction, string> = {
168
+ close: 'ph--x--regular',
169
+ delete: 'ph--trash--regular',
170
+ };
171
+
172
+ const DIALOG_ACTION_LABEL_KEYS: Record<DialogActionIconButtonAction, string> = {
173
+ // Preserves the legacy `close-dialog.label` translation key for backward compat.
174
+ close: 'close-dialog.label',
175
+ delete: 'toolbar-delete.label',
176
+ };
159
177
 
160
- const DialogCloseIconButton = forwardRef<HTMLButtonElement, DialogCloseIconButtonProps>(
161
- ({ label, ...props }, forwardedRef) => {
178
+ const DialogActionIconButton = forwardRef<HTMLButtonElement, DialogActionIconButtonProps>(
179
+ ({ action, label, ...props }, forwardedRef) => {
162
180
  const { t } = useTranslation(osTranslations);
163
181
  return (
164
182
  <IconButton
165
183
  {...props}
166
- label={label ?? t('close-dialog.label')}
167
- icon='ph--x--regular'
184
+ label={label ?? t(DIALOG_ACTION_LABEL_KEYS[action])}
185
+ icon={DIALOG_ACTION_ICONS[action]}
168
186
  iconOnly
169
187
  size={4}
170
188
  variant='ghost'
@@ -174,6 +192,8 @@ const DialogCloseIconButton = forwardRef<HTMLButtonElement, DialogCloseIconButto
174
192
  },
175
193
  );
176
194
 
195
+ DialogActionIconButton.displayName = 'Dialog.ActionIconButton';
196
+
177
197
  //
178
198
  // Body
179
199
  //
@@ -191,6 +211,8 @@ const DialogBody = slottable<HTMLDivElement>(({ children, asChild, ...props }, f
191
211
  );
192
212
  });
193
213
 
214
+ DialogBody.displayName = 'Dialog.Body';
215
+
194
216
  //
195
217
  // Title
196
218
  //
@@ -206,6 +228,8 @@ const DialogTitle = forwardRef<HTMLHeadingElement, DialogTitleProps>(
206
228
  },
207
229
  );
208
230
 
231
+ DialogTitle.displayName = 'Dialog.Title';
232
+
209
233
  //
210
234
  // Description
211
235
  //
@@ -225,6 +249,8 @@ const DialogDescription = forwardRef<HTMLParagraphElement, DialogDescriptionProp
225
249
  },
226
250
  );
227
251
 
252
+ DialogDescription.displayName = 'Dialog.Description';
253
+
228
254
  //
229
255
  // ActionBar
230
256
  //
@@ -242,13 +268,15 @@ const DialogActionBar = slottable<HTMLDivElement>(({ children, asChild, ...props
242
268
  );
243
269
  });
244
270
 
271
+ DialogActionBar.displayName = 'Dialog.ActionBar';
272
+
245
273
  //
246
274
  // Close
247
275
  //
248
276
 
249
277
  type DialogCloseProps = DialogPrimitive.DialogCloseProps;
250
278
 
251
- const DialogClose: FunctionComponent<DialogCloseProps> = DialogPrimitive.Close;
279
+ const DialogClose = DialogPrimitive.Close;
252
280
 
253
281
  //
254
282
  // Dialog
@@ -266,7 +294,7 @@ export const Dialog = {
266
294
  Description: DialogDescription,
267
295
  ActionBar: DialogActionBar,
268
296
  Close: DialogClose,
269
- CloseIconButton: DialogCloseIconButton,
297
+ ActionIconButton: DialogActionIconButton,
270
298
  };
271
299
 
272
300
  export type {
@@ -281,5 +309,6 @@ export type {
281
309
  DialogDescriptionProps,
282
310
  DialogActionBarProps,
283
311
  DialogCloseProps,
284
- DialogCloseIconButtonProps,
312
+ DialogActionIconButtonAction,
313
+ DialogActionIconButtonProps,
285
314
  };
@@ -7,6 +7,10 @@ import { type FallbackProps } from 'react-error-boundary';
7
7
 
8
8
  import { safeStringify } from '@dxos/util';
9
9
 
10
+ import { translationKey } from '#translations';
11
+
12
+ import { useTranslation } from '../../primitives';
13
+ import { IconButton } from '../Button';
10
14
  import { ErrorStack } from './ErrorStack';
11
15
 
12
16
  export type ErrorFallbackProps = PropsWithChildren<Pick<FallbackProps, 'error'> & { title?: string; data?: any }>;
@@ -15,6 +19,7 @@ export type ErrorFallbackProps = PropsWithChildren<Pick<FallbackProps, 'error'>
15
19
  * Themed fallback component for `ErrorBoundary`.
16
20
  */
17
21
  export const ErrorFallback = ({ children, error, title, data }: ErrorFallbackProps) => {
22
+ const { t } = useTranslation(translationKey);
18
23
  const isDev = process.env.NODE_ENV === 'development';
19
24
  const message = error instanceof Error ? error.message : String(error);
20
25
 
@@ -55,14 +60,15 @@ const Section = ({ children, title, onClick }: PropsWithChildren<{ title?: strin
55
60
  return (
56
61
  <div className='flex flex-col gap-1'>
57
62
  {onClick && (
58
- <button
59
- type='button'
60
- onClick={onClick}
61
- className='flex items-center gap-1 text-xs text-subdued hover:text-primary-500 transition-colors'
62
- title={`Copy ${title}`}
63
- >
64
- <h2 className='text-xs uppercase text-subdued'>{title}</h2>
65
- </button>
63
+ <div>
64
+ <IconButton
65
+ classNames='text-xs uppercase'
66
+ label={title ?? 'Copy'}
67
+ icon='ph--clipboard-text--regular'
68
+ size={5}
69
+ onClick={onClick}
70
+ />
71
+ </div>
66
72
  )}
67
73
  {children}
68
74
  </div>
@@ -56,7 +56,7 @@ export const ErrorStack = ({ error, frames: framesProp }: ErrorStackProps) => {
56
56
  const local = frame.fileName
57
57
  ? parseLocalFrame(frame.fileName, frame.lineNumber, frame.columnNumber)
58
58
  : undefined;
59
- const name = frame.functionName ?? '<anonymous>';
59
+ const functionName = frame.functionName ?? '<anonymous>';
60
60
  return (
61
61
  <div
62
62
  key={i}
@@ -75,14 +75,15 @@ export const ErrorStack = ({ error, frames: framesProp }: ErrorStackProps) => {
75
75
  />
76
76
  <div className='absolute top-1/2 -translate-y-1/2 left-1/2 right-0 h-px bg-neutral-500' />
77
77
  </div>
78
+
78
79
  {local ? (
79
80
  <a href={local.href} className='truncate self-center'>
80
- {name}
81
+ {functionName}
81
82
  </a>
82
83
  ) : (
83
- <span className='text-subdued truncate self-center'>{name}</span>
84
+ <span className='text-subdued truncate self-center'>{functionName}</span>
84
85
  )}
85
- <span className='text-xs text-subdued truncate self-center'>{local?.fileName ?? ''}</span>
86
+ <span className='text-xs text-subdued truncate self-center truncate'>{local?.fileName ?? ''}</span>
86
87
  <span className='text-xs text-subdued text-right self-center'>
87
88
  {local ? `${frame.lineNumber}:${frame.columnNumber}` : ''}
88
89
  </span>
@@ -103,10 +104,15 @@ const parseLocalFrame = (fileUrl: string, line?: number, col?: number): LocalFra
103
104
  if (!pathname.startsWith('/@fs/')) {
104
105
  return undefined;
105
106
  }
106
- const localPath = pathname.slice(4); // /@fs/Users/... → /Users/...
107
+
108
+ const FILE_PREFIX = '/@fs';
109
+ const localPath = pathname.slice(FILE_PREFIX.length); // /@fs/Users/... → /Users/...
110
+ const PKG_PREFIX = '/packages/';
111
+ const i = localPath.indexOf(PKG_PREFIX);
112
+ const path = i === -1 ? localPath : localPath.substring(i + PKG_PREFIX.length);
107
113
  return {
108
114
  href: `vscode://file/${localPath}:${line ?? 1}:${col ?? 1}`,
109
- fileName: pathname.split('/').pop() ?? localPath,
115
+ fileName: path,
110
116
  };
111
117
  } catch {
112
118
  return undefined;
@@ -0,0 +1,32 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { mx } from '@dxos/ui-theme';
6
+ import { type ComponentFunction, type Theme } from '@dxos/ui-types';
7
+
8
+ export type FocusStyleProps = {
9
+ border?: boolean;
10
+ };
11
+
12
+ /**
13
+ * Focus ring styles shared by Focus.Group and Focus.Item.
14
+ * Uses a `::after` pseudo-element overlay so the ring paints above child content
15
+ * (inset box-shadow alone is obscured by children with backgrounds).
16
+ * The pseudo-element is `pointer-events-none` and absolutely positioned over the element.
17
+ * When `border` is true, a subdued CSS border is always visible (e.g., for grid cell edges).
18
+ */
19
+ const ring: ComponentFunction<FocusStyleProps> = ({ border }, ...etc) =>
20
+ mx(
21
+ 'dx-ring-pseudo outline-hidden',
22
+ 'focus:after:ring-focus-ring-subtle',
23
+ 'data-[focus-state=active]:after:ring-focus-ring-subtle',
24
+ 'data-[focus-state=error]:after:ring-rose-500',
25
+ border && 'border border-separator',
26
+ ...etc,
27
+ );
28
+
29
+ export const focusTheme: Theme<FocusStyleProps> = {
30
+ group: ring,
31
+ item: ring,
32
+ };
@@ -21,10 +21,10 @@ import React, {
21
21
  useState,
22
22
  } from 'react';
23
23
 
24
- import { composableProps, slottable } from '@dxos/ui-theme';
25
24
  import { type Axis } from '@dxos/ui-types';
26
25
 
27
26
  import { useThemeContext } from '../../hooks';
27
+ import { composableProps, slottable } from '../../util';
28
28
 
29
29
  //
30
30
  // Context
@@ -0,0 +1,45 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { getSize, mx } from '@dxos/ui-theme';
6
+ import { type ComponentFunction, type Size, type Theme } from '@dxos/ui-types';
7
+
8
+ export type IconStyleProps = {
9
+ size?: Size;
10
+ };
11
+
12
+ export type IconBlockStyleProps = {
13
+ compact?: boolean;
14
+ /** Constrain to a square (1:1) slot rather than the default rail-item width. */
15
+ square?: boolean;
16
+ };
17
+
18
+ /**
19
+ * Size can be specified directly, or inherited from a container (e.g., toolbar).
20
+ */
21
+ const root: ComponentFunction<IconStyleProps> = ({ size }, etc) => {
22
+ return mx(
23
+ 'shrink-0 text-[var(--icons-color,currentColor)]',
24
+ size
25
+ ? getSize(size)
26
+ : '[width:var(--icon-size,var(--dx-default-icons-size))] [height:var(--icon-size,var(--dx-default-icons-size))]',
27
+ etc,
28
+ );
29
+ };
30
+
31
+ /**
32
+ * Static slot sized to `--dx-rail-item` so a wrapped `Icon` lines up with an `IconButton iconOnly`.
33
+ */
34
+ const block: ComponentFunction<IconBlockStyleProps> = ({ compact, square }, ...etc) =>
35
+ mx(
36
+ 'grid place-items-center',
37
+ square ? 'aspect-square' : 'w-[var(--dx-rail-item)]',
38
+ compact ? '' : 'h-[var(--dx-rail-item)]',
39
+ ...etc,
40
+ );
41
+
42
+ export const iconTheme: Theme<IconStyleProps & IconBlockStyleProps> = {
43
+ root,
44
+ block,
45
+ };
@@ -0,0 +1,38 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import React, { type ComponentPropsWithRef, type PropsWithChildren, forwardRef } from 'react';
6
+
7
+ import { useThemeContext } from '../../hooks';
8
+ import { type ThemedClassName } from '../../util';
9
+ import { IconBlockStyleProps } from './Icon.theme';
10
+
11
+ export type IconBlockProps = ThemedClassName<ComponentPropsWithRef<'div'> & PropsWithChildren<IconBlockStyleProps>>;
12
+
13
+ /**
14
+ * Static layout slot sized to `--dx-rail-item` (the same square that an `IconButton iconOnly`
15
+ * occupies). Use whenever a decorative `<Icon>` needs to share a row, column, or grid track with
16
+ * interactive `IconButton`s without drifting by a pixel.
17
+ *
18
+ * Defaults `aria-hidden='true'` — the slot wraps decorative chrome by default. Pass
19
+ * `aria-hidden={false}` when the slot's contents convey meaning that isn't already labelled
20
+ * elsewhere in the row.
21
+ */
22
+ export const IconBlock = forwardRef<HTMLDivElement, IconBlockProps>(
23
+ ({ classNames, children, compact, square, ...props }, forwardedRef) => {
24
+ const { tx } = useThemeContext();
25
+ return (
26
+ <div
27
+ aria-hidden='true'
28
+ {...props}
29
+ className={tx('icon.block', { compact, square }, classNames)}
30
+ ref={forwardedRef}
31
+ >
32
+ {children}
33
+ </div>
34
+ );
35
+ },
36
+ );
37
+
38
+ IconBlock.displayName = 'IconBlock';
@@ -3,3 +3,4 @@
3
3
  //
4
4
 
5
5
  export * from './Icon';
6
+ export * from './IconBlock';
@@ -15,7 +15,7 @@ const seed = Math.random();
15
15
  random.seed(seed);
16
16
 
17
17
  const meta = {
18
- title: 'ui/react-ui-mosaic/Image',
18
+ title: 'ui/react-ui-core/components/Image',
19
19
  component: Image,
20
20
  render: (args) => (
21
21
  <div className='absolute inset-0 flex justify-center items-center'>
@@ -10,17 +10,23 @@ import { type MessageValence } from '@dxos/ui-types';
10
10
  import { withLayoutVariants, withTheme } from '../../testing';
11
11
  import {
12
12
  type CheckboxProps,
13
+ type DateInputProps,
14
+ type DateTimeInputProps,
13
15
  Input,
14
16
  type PinInputProps,
15
17
  type SwitchProps,
16
18
  type TextAreaProps,
17
19
  type TextInputProps,
20
+ type TimeProps,
18
21
  } from './Input';
19
22
 
20
23
  type VariantMap = {
21
24
  text: TextInputProps;
22
25
  pin: PinInputProps;
23
26
  textarea: TextAreaProps;
27
+ time: TimeProps;
28
+ date: DateInputProps;
29
+ datetime: DateTimeInputProps;
24
30
  checkbox: CheckboxProps;
25
31
  switch: SwitchProps;
26
32
  };
@@ -54,6 +60,9 @@ const DefaultStory = ({
54
60
  {kind === 'text' && <Input.TextInput {...props} />}
55
61
  {kind === 'pin' && <Input.PinInput {...props} />}
56
62
  {kind === 'textarea' && <Input.TextArea {...props} />}
63
+ {kind === 'time' && <Input.Time {...props} />}
64
+ {kind === 'date' && <Input.Date {...props} />}
65
+ {kind === 'datetime' && <Input.DateTime {...props} />}
57
66
  {kind === 'checkbox' && <Input.Checkbox {...props} />}
58
67
  {kind === 'switch' && <Input.Switch {...props} />}
59
68
 
@@ -76,34 +85,17 @@ export default meta;
76
85
 
77
86
  type Story = StoryObj<DefaultStoryProps & Variant>;
78
87
 
79
- export const DensityCoarse: Story = {
80
- args: {
81
- kind: 'text',
82
- label: 'Input value',
83
- placeholder: 'This is an input',
84
- disabled: false,
85
- description: undefined,
86
- labelVisuallyHidden: false,
87
- descriptionVisuallyHidden: false,
88
- validationMessage: '',
89
- validationValence: undefined,
90
- density: 'coarse',
91
- },
92
- };
93
-
94
- export const DensityFine: Story = {
95
- args: {
96
- kind: 'text',
97
- label: 'Input value',
98
- placeholder: 'This is a density:fine input',
99
- disabled: false,
100
- description: undefined,
101
- labelVisuallyHidden: false,
102
- descriptionVisuallyHidden: false,
103
- validationMessage: '',
104
- validationValence: undefined,
105
- density: 'fine',
106
- },
88
+ export const Density: Story = {
89
+ render: () => (
90
+ <div className='flex flex-col gap-4'>
91
+ {(['lg', 'md', 'sm', 'xs'] as const).map((density) => (
92
+ <Input.Root key={density}>
93
+ <Input.Label>{`density="${density}"`}</Input.Label>
94
+ <Input.TextInput density={density} placeholder={`This is a density:${density} input`} />
95
+ </Input.Root>
96
+ ))}
97
+ </div>
98
+ ),
107
99
  };
108
100
 
109
101
  export const Subdued: Story = {
@@ -186,10 +178,86 @@ export const PinInput: Story = {
186
178
  length: 6,
187
179
  description: 'Type in secret you received',
188
180
  pattern: '\\d*',
189
- density: 'coarse',
181
+ density: 'lg',
190
182
  },
191
183
  };
192
184
 
185
+ export const Time: Story = {
186
+ args: {
187
+ kind: 'time',
188
+ label: 'Time',
189
+ defaultValue: '09:30',
190
+ },
191
+ };
192
+
193
+ export const TimeUncontrolled: Story = {
194
+ args: {
195
+ kind: 'time',
196
+ label: 'Time (uncontrolled)',
197
+ defaultValue: '14:00',
198
+ },
199
+ };
200
+
201
+ export const TimeAmPm: Story = {
202
+ args: {
203
+ kind: 'time',
204
+ label: 'Time (12-hour, AM/PM)',
205
+ defaultValue: '14:00',
206
+ hourCycle: 12,
207
+ } as any,
208
+ };
209
+
210
+ export const TimeDisabled: Story = {
211
+ args: {
212
+ kind: 'time',
213
+ label: 'Time (disabled)',
214
+ defaultValue: '12:00',
215
+ disabled: true,
216
+ },
217
+ };
218
+
219
+ export const Date: Story = {
220
+ args: {
221
+ kind: 'date',
222
+ label: 'Date',
223
+ defaultValue: '1990-05-12',
224
+ },
225
+ };
226
+
227
+ export const DateTime: Story = {
228
+ args: {
229
+ kind: 'datetime',
230
+ label: 'Date & time',
231
+ defaultValue: '2026-06-01T15:30',
232
+ },
233
+ };
234
+
235
+ export const DateWithPicker: Story = {
236
+ render: () => (
237
+ <Input.Root>
238
+ <Input.Label>Date (with picker)</Input.Label>
239
+ <div className='flex items-center gap-1'>
240
+ <Input.Date defaultValue='2026-06-01' />
241
+ <Input.TriggerIcon />
242
+ </div>
243
+ <Input.Description>Click the calendar icon to open the date picker.</Input.Description>
244
+ </Input.Root>
245
+ ),
246
+ };
247
+
248
+ export const DateTimeWithPicker: Story = {
249
+ render: () => (
250
+ <Input.Root>
251
+ <Input.Label>Date & time (with picker)</Input.Label>
252
+ <div className='flex items-center gap-1'>
253
+ <Input.DateTime defaultValue='2026-06-01T15:30' />
254
+ <Input.TriggerIcon />
255
+ </div>
256
+ <Input.Description>Click the calendar icon to open the date picker.</Input.Description>
257
+ </Input.Root>
258
+ ),
259
+ };
260
+
193
261
  export const Checkbox: Story = {
194
262
  args: {
195
263
  kind: 'checkbox',
@@ -206,3 +274,38 @@ export const Switch: Story = {
206
274
  description: 'On or off',
207
275
  },
208
276
  };
277
+
278
+ /**
279
+ * Native HTML input types. `Input.TextInput` accepts every standard
280
+ * `<input type="…">` value via its `type` prop; this story exercises the most
281
+ * commonly used ones so the rendering across themes/browsers can be
282
+ * inspected at a glance.
283
+ */
284
+ const TEXT_INPUT_TYPES: { type: string; placeholder: string }[] = [
285
+ { type: 'text', placeholder: 'Plain text' },
286
+ { type: 'email', placeholder: 'name@example.com' },
287
+ { type: 'password', placeholder: '••••••••' },
288
+ { type: 'search', placeholder: 'Search…' },
289
+ { type: 'tel', placeholder: '+1 (555) 555-5555' },
290
+ { type: 'url', placeholder: 'https://example.com' },
291
+ { type: 'number', placeholder: '42' },
292
+ { type: 'date', placeholder: '' },
293
+ { type: 'time', placeholder: '' },
294
+ { type: 'datetime-local', placeholder: '' },
295
+ { type: 'month', placeholder: '' },
296
+ { type: 'week', placeholder: '' },
297
+ { type: 'color', placeholder: '' },
298
+ ];
299
+
300
+ export const TextInputTypes: Story = {
301
+ render: () => (
302
+ <div className='flex flex-col gap-3 min-w-[24rem]'>
303
+ {TEXT_INPUT_TYPES.map(({ type, placeholder }) => (
304
+ <Input.Root key={type}>
305
+ <Input.Label>{`type="${type}"`}</Input.Label>
306
+ <Input.TextInput type={type} placeholder={placeholder} />
307
+ </Input.Root>
308
+ ))}
309
+ </div>
310
+ ),
311
+ };