@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
@@ -12,32 +12,43 @@ import { Toast } from './Toast';
12
12
  type ActionTriggerProps = { altText: string; trigger: ReactNode };
13
13
 
14
14
  type StorybookToastProps = Partial<{
15
+ icon: string;
15
16
  title: string;
16
17
  description: string;
18
+ duration: number;
17
19
  actionTriggers: ActionTriggerProps[];
18
20
  openTrigger: string;
19
- closeTrigger: ReactNode;
21
+ defaultOpen: boolean;
20
22
  }>;
21
23
 
22
- const DefaultStory = ({ title, description, actionTriggers, openTrigger, closeTrigger }: StorybookToastProps) => {
23
- const [open, setOpen] = useState(true);
24
+ const DefaultStory = ({
25
+ icon,
26
+ title,
27
+ description,
28
+ duration,
29
+ actionTriggers,
30
+ openTrigger,
31
+ defaultOpen = true,
32
+ }: StorybookToastProps) => {
33
+ const [open, setOpen] = useState(defaultOpen);
24
34
  return (
25
35
  <Toast.Provider>
26
36
  <Button onClick={() => setOpen(true)}>{openTrigger}</Button>
27
37
  <Toast.Viewport />
28
- <Toast.Root open={open} onOpenChange={setOpen}>
29
- <Toast.Body>
30
- <Toast.Title>{title}</Toast.Title>
31
- <Toast.Description>{description}</Toast.Description>
32
- </Toast.Body>
33
- <Toast.Actions>
34
- <Toast.Close asChild={typeof closeTrigger !== 'string'}>{closeTrigger}</Toast.Close>
35
- {(actionTriggers || []).map(({ altText, trigger }: ActionTriggerProps, index: number) => (
36
- <Toast.Action key={index} altText={altText} asChild={typeof trigger !== 'string'}>
37
- {trigger}
38
- </Toast.Action>
39
- ))}
40
- </Toast.Actions>
38
+ <Toast.Root open={open} onOpenChange={setOpen} defaultOpen={defaultOpen} duration={duration}>
39
+ <Toast.Title icon={icon} onClose={() => setOpen(false)}>
40
+ {title}
41
+ </Toast.Title>
42
+ <Toast.Description>{description}</Toast.Description>
43
+ {actionTriggers && actionTriggers.length > 0 && (
44
+ <Toast.Actions>
45
+ {actionTriggers.map(({ altText, trigger }: ActionTriggerProps, index: number) => (
46
+ <Toast.Action key={index} altText={altText} asChild={typeof trigger !== 'string'}>
47
+ {trigger}
48
+ </Toast.Action>
49
+ ))}
50
+ </Toast.Actions>
51
+ )}
41
52
  </Toast.Root>
42
53
  </Toast.Provider>
43
54
  );
@@ -56,18 +67,28 @@ type Story = StoryObj<typeof meta>;
56
67
 
57
68
  export const Default: Story = {
58
69
  args: {
70
+ defaultOpen: true,
59
71
  openTrigger: 'Open toast',
72
+ icon: 'ph--sparkle--regular',
60
73
  title: 'This is a toast',
61
74
  description: 'This goes away on its own with a timer.',
75
+ duration: 100_000,
76
+ },
77
+ };
78
+
79
+ export const WithAction: Story = {
80
+ args: {
81
+ defaultOpen: true,
82
+ openTrigger: 'Open toast',
83
+ icon: 'ph--sparkle--regular',
84
+ title: 'This is a toast',
85
+ description: 'This goes away on its own with a timer.',
86
+ duration: 100_000,
62
87
  actionTriggers: [
63
88
  {
64
89
  altText: 'Press F5 to reload the page',
65
90
  trigger: <Button variant='primary'>Reload</Button>,
66
91
  },
67
92
  ],
68
- closeTrigger: <Button>Close</Button>,
69
- },
70
- parameters: {
71
- chromatic: { delay: 800 },
72
93
  },
73
94
  };
@@ -0,0 +1,50 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { mx, surfaceShadow } from '@dxos/ui-theme';
6
+ import { type ComponentFunction, type Theme } from '@dxos/ui-types';
7
+
8
+ export type ToastStyleProps = {};
9
+
10
+ const viewport: ComponentFunction<ToastStyleProps> = (_props, ...etc) =>
11
+ mx(
12
+ // TODO(burdon): block-end should take into account status bar.
13
+ 'z-40 fixed bottom-[calc(env(safe-area-inset-bottom)+1rem)] inset-start-[calc(env(safe-area-inset-left)+1rem)] inset-end-[calc(env(safe-area-inset-right)+1rem)] w-auto md:end-[calc(env(safe-area-inset-right)+1rem)] md:left-auto md:w-full md:max-w-sm',
14
+ 'rounded-md flex flex-col gap-2',
15
+ ...etc,
16
+ );
17
+
18
+ const root: ComponentFunction<ToastStyleProps> = (_props, ...etc) =>
19
+ mx(
20
+ 'dx-popover-surface rounded-md p-1',
21
+ surfaceShadow({ elevation: 'toast' }),
22
+ 'radix-state-open:animate-toast-slide-in-bottom md:radix-state-open:animate-toast-slide-in-right',
23
+ 'radix-state-closed:animate-toast-hide',
24
+ 'radix-swipe-end:animate-toast-swipe-out',
25
+ 'translate-x-radix-toast-swipe-move-x',
26
+ 'radix-swipe-cancel:translate-x-0 radix-swipe-cancel:duration-200 radix-swipe-cancel:ease-[ease]',
27
+ 'dx-focus-ring',
28
+ ...etc,
29
+ );
30
+
31
+ const grid: ComponentFunction<ToastStyleProps> = (_props, ...etc) => mx('gap-y-1 pbe-1', ...etc);
32
+
33
+ const header: ComponentFunction<ToastStyleProps> = (_props, ...etc) => mx('items-center', ...etc);
34
+
35
+ const title: ComponentFunction<ToastStyleProps> = (_props, ...etc) => mx('col-start-2 truncate font-medium', ...etc);
36
+
37
+ const description: ComponentFunction<ToastStyleProps> = (_props, ...etc) =>
38
+ mx('col-start-2 overflow-hidden text-description', ...etc);
39
+
40
+ const actions: ComponentFunction<ToastStyleProps> = (_props, ...etc) => mx('flex gap-2 mbs-1', ...etc);
41
+
42
+ export const toastTheme: Theme<ToastStyleProps> = {
43
+ viewport,
44
+ root,
45
+ grid,
46
+ header,
47
+ title,
48
+ description,
49
+ actions,
50
+ };
@@ -2,18 +2,30 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Primitive } from '@radix-ui/react-primitive';
6
- import { Slot } from '@radix-ui/react-slot';
7
5
  import * as ToastPrimitive from '@radix-ui/react-toast';
8
- import React, { type ComponentPropsWithRef, type FunctionComponent, forwardRef } from 'react';
6
+ import React, { type ComponentPropsWithRef, forwardRef } from 'react';
7
+ import { useTranslation } from 'react-i18next';
8
+
9
+ import { translationKey } from '#translations';
9
10
 
10
11
  import { useThemeContext } from '../../hooks';
12
+ import { DensityProvider, ElevationProvider } from '../../primitives';
11
13
  import { type ThemedClassName } from '../../util';
12
- import { ElevationProvider } from '../ElevationProvider';
14
+ import { IconButton } from '../Button';
15
+ import { Column } from '../Column';
16
+ import { Icon } from '../Icon';
17
+
18
+ //
19
+ // Provider
20
+ //
13
21
 
14
22
  type ToastProviderProps = ToastPrimitive.ToastProviderProps;
15
23
 
16
- const ToastProvider: FunctionComponent<ToastProviderProps> = ToastPrimitive.Provider;
24
+ const ToastProvider = ToastPrimitive.Provider;
25
+
26
+ //
27
+ // Viewport
28
+ //
17
29
 
18
30
  type ToastViewportProps = ThemedClassName<ToastPrimitive.ToastViewportProps>;
19
31
 
@@ -22,68 +34,126 @@ const ToastViewport = forwardRef<HTMLOListElement, ToastViewportProps>(({ classN
22
34
  return <ToastPrimitive.Viewport {...props} className={tx('toast.viewport', {}, classNames)} ref={forwardedRef} />;
23
35
  });
24
36
 
37
+ ToastViewport.displayName = 'Toast.Viewport';
38
+
39
+ //
40
+ // Root
41
+ //
42
+
25
43
  type ToastRootProps = ThemedClassName<ToastPrimitive.ToastProps>;
26
44
 
27
45
  const ToastRoot = forwardRef<HTMLLIElement, ToastRootProps>(({ classNames, children, ...props }, forwardedRef) => {
28
46
  const { tx } = useThemeContext();
29
47
  return (
30
48
  <ToastPrimitive.Root {...props} className={tx('toast.root', {}, classNames)} ref={forwardedRef}>
31
- <ElevationProvider elevation='toast'>{children}</ElevationProvider>
49
+ <ElevationProvider elevation='toast'>
50
+ <Column.Root classNames={tx('toast.grid', {})}>{children}</Column.Root>
51
+ </ElevationProvider>
32
52
  </ToastPrimitive.Root>
33
53
  );
34
54
  });
35
55
 
36
- type ToastBodyProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.div>>;
56
+ ToastRoot.displayName = 'Toast.Root';
37
57
 
38
- const ToastBody = forwardRef<HTMLDivElement, ToastBodyProps>(({ asChild, classNames, ...props }, forwardedRef) => {
39
- const { tx } = useThemeContext();
40
- const Comp = asChild ? Slot : Primitive.div;
41
- return <Comp {...props} className={tx('toast.body', {}, classNames)} ref={forwardedRef} />;
42
- });
58
+ //
59
+ // Title
60
+ //
43
61
 
44
- type ToastTitleProps = ThemedClassName<ToastPrimitive.ToastTitleProps>;
62
+ type ToastTitleProps = ThemedClassName<ToastPrimitive.ToastTitleProps> & {
63
+ icon?: string;
64
+ onClose?: () => void;
65
+ };
45
66
 
46
67
  const ToastTitle = forwardRef<HTMLHeadingElement, ToastTitleProps>(
47
- ({ asChild, classNames, ...props }, forwardedRef) => {
68
+ ({ classNames, children, icon, onClose, ...props }, forwardedRef) => {
69
+ const { t } = useTranslation(translationKey);
48
70
  const { tx } = useThemeContext();
49
- const Comp = asChild ? Slot : ToastPrimitive.Title;
50
- return <Comp {...props} className={tx('toast.title', {}, classNames)} ref={forwardedRef} />;
71
+ return (
72
+ <Column.Row classNames={tx('toast.header', {})}>
73
+ {icon && (
74
+ <Column.Block>
75
+ <Icon icon={icon} size={5} />
76
+ </Column.Block>
77
+ )}
78
+ <ToastPrimitive.Title {...props} className={tx('toast.title', {}, classNames)} ref={forwardedRef}>
79
+ {children}
80
+ </ToastPrimitive.Title>
81
+ {onClose && (
82
+ <Column.Block end>
83
+ <IconButton
84
+ variant='ghost'
85
+ icon='ph--x--regular'
86
+ iconOnly
87
+ label={t('toolbar-close.label')}
88
+ onClick={onClose}
89
+ />
90
+ </Column.Block>
91
+ )}
92
+ </Column.Row>
93
+ );
51
94
  },
52
95
  );
53
96
 
97
+ ToastTitle.displayName = 'Toast.Title';
98
+
99
+ //
100
+ // Description
101
+ //
102
+
54
103
  type ToastDescriptionProps = ThemedClassName<ToastPrimitive.ToastDescriptionProps>;
55
104
 
56
105
  const ToastDescription = forwardRef<HTMLParagraphElement, ToastDescriptionProps>(
57
- ({ asChild, classNames, ...props }, forwardedRef) => {
106
+ ({ classNames, children, ...props }, forwardedRef) => {
58
107
  const { tx } = useThemeContext();
59
- const Comp = asChild ? Slot : ToastPrimitive.Description;
60
- return <Comp {...props} className={tx('toast.description', {}, classNames)} ref={forwardedRef} />;
108
+ return (
109
+ <ToastPrimitive.Description {...props} className={tx('toast.description', {}, classNames)} ref={forwardedRef}>
110
+ {children}
111
+ </ToastPrimitive.Description>
112
+ );
61
113
  },
62
114
  );
63
115
 
64
- type ToastActionsProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.div>>;
116
+ ToastDescription.displayName = 'Toast.Description';
117
+
118
+ //
119
+ // Actions
120
+ //
121
+
122
+ type ToastActionsProps = ThemedClassName<ComponentPropsWithRef<'div'>>;
65
123
 
66
124
  const ToastActions = forwardRef<HTMLDivElement, ToastActionsProps>(
67
- ({ asChild, classNames, ...props }, forwardedRef) => {
125
+ ({ classNames, children, ...props }, forwardedRef) => {
68
126
  const { tx } = useThemeContext();
69
- const Comp = asChild ? Slot : Primitive.div;
70
- return <Comp {...props} className={tx('toast.actions', {}, classNames)} ref={forwardedRef} />;
127
+ return (
128
+ <Column.Center classNames={tx('toast.actions', {}, classNames)} ref={forwardedRef} {...props}>
129
+ <DensityProvider density='sm'>{children}</DensityProvider>
130
+ </Column.Center>
131
+ );
71
132
  },
72
133
  );
73
134
 
135
+ ToastActions.displayName = 'Toast.Actions';
136
+
137
+ //
138
+ // Action / Close
139
+ //
140
+
74
141
  type ToastActionProps = ToastPrimitive.ToastActionProps;
75
142
 
76
- const ToastAction: FunctionComponent<ToastActionProps> = ToastPrimitive.Action;
143
+ const ToastAction = ToastPrimitive.Action;
77
144
 
78
145
  type ToastCloseProps = ToastPrimitive.ToastCloseProps;
79
146
 
80
- const ToastClose: FunctionComponent<ToastCloseProps> = ToastPrimitive.Close;
147
+ const ToastClose = ToastPrimitive.Close;
148
+
149
+ //
150
+ // Toast
151
+ //
81
152
 
82
153
  export const Toast = {
83
154
  Provider: ToastProvider,
84
155
  Viewport: ToastViewport,
85
156
  Root: ToastRoot,
86
- Body: ToastBody,
87
157
  Title: ToastTitle,
88
158
  Description: ToastDescription,
89
159
  Actions: ToastActions,
@@ -95,7 +165,6 @@ export type {
95
165
  ToastProviderProps,
96
166
  ToastViewportProps,
97
167
  ToastRootProps,
98
- ToastBodyProps,
99
168
  ToastTitleProps,
100
169
  ToastDescriptionProps,
101
170
  ToastActionsProps,
@@ -0,0 +1,36 @@
1
+ //
2
+ // Copyright 2022 DXOS.org
3
+ //
4
+
5
+ import { mx } from '@dxos/ui-theme';
6
+ import { type ComponentFunction, type Density, type Theme } from '@dxos/ui-types';
7
+
8
+ export type ToolbarStyleProps = Partial<{
9
+ density: Density;
10
+ disabled: boolean;
11
+ layoutManaged: boolean;
12
+ }>;
13
+
14
+ const layout =
15
+ 'w-full shrink-0 flex flex-nowrap p-1 gap-1 items-center overflow-x-auto scrollbar-none dx-contain-layout';
16
+
17
+ const root: ComponentFunction<ToolbarStyleProps> = ({ density, disabled, layoutManaged }, ...etc) => {
18
+ return mx(
19
+ 'bg-toolbar-surface dx-toolbar shadow-sm',
20
+ density === 'lg' && 'h-(--dx-rail-size) px-3!',
21
+ density === 'sm' && 'h-7 px-2!',
22
+ density === 'xs' && 'h-6 px-1!',
23
+ disabled && '*:opacity-20',
24
+ !layoutManaged && layout,
25
+ ...etc,
26
+ );
27
+ };
28
+
29
+ const text: ComponentFunction<ToolbarStyleProps> = (_, ...etc) => {
30
+ return mx('px-2 grow truncate items-center', ...etc);
31
+ };
32
+
33
+ export const toolbarTheme: Theme<ToolbarStyleProps> = {
34
+ root,
35
+ text,
36
+ };
@@ -6,14 +6,16 @@ import { Primitive } from '@radix-ui/react-primitive';
6
6
  import { Slot } from '@radix-ui/react-slot';
7
7
  import type { ToggleGroupItemProps as ToggleGroupItemPrimitiveProps } from '@radix-ui/react-toggle-group';
8
8
  import * as ToolbarPrimitive from '@radix-ui/react-toolbar';
9
- import React, { forwardRef } from 'react';
9
+ import React, { type MouseEventHandler, forwardRef } from 'react';
10
10
  import { useTranslation } from 'react-i18next';
11
11
 
12
- import { composable, composableProps, slottable, type ToolbarStyleProps } from '@dxos/ui-theme';
13
12
  import { type SlottableProps } from '@dxos/ui-types';
14
13
 
14
+ import { translationKey } from '#translations';
15
+
15
16
  import { useThemeContext } from '../../hooks';
16
- import { translationKey } from '../../translations';
17
+ import { type ToolbarStyleProps } from '../../theme';
18
+ import { composable, composableProps, slottable } from '../../util';
17
19
  import {
18
20
  Button,
19
21
  ButtonGroup,
@@ -56,6 +58,8 @@ const ToolbarRoot = composable<HTMLDivElement, ToolbarRootProps>(
56
58
  },
57
59
  );
58
60
 
61
+ ToolbarRoot.displayName = 'Toolbar.Root';
62
+
59
63
  //
60
64
  // Text
61
65
  //
@@ -73,6 +77,8 @@ const ToolbarText = slottable<HTMLDivElement>(({ children, asChild, ...props },
73
77
  );
74
78
  });
75
79
 
80
+ ToolbarText.displayName = 'Toolbar.Text';
81
+
76
82
  //
77
83
  // Button
78
84
  //
@@ -87,6 +93,8 @@ const ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>((props,
87
93
  );
88
94
  });
89
95
 
96
+ ToolbarButton.displayName = 'Toolbar.Button';
97
+
90
98
  //
91
99
  // IconButton
92
100
  //
@@ -96,11 +104,13 @@ type ToolbarIconButtonProps = IconButtonProps;
96
104
  const ToolbarIconButton = forwardRef<HTMLButtonElement, ToolbarIconButtonProps>((props, forwardedRef) => {
97
105
  return (
98
106
  <ToolbarPrimitive.Button asChild>
99
- <IconButton {...props} noTooltip ref={forwardedRef} />
107
+ <IconButton {...props} ref={forwardedRef} />
100
108
  </ToolbarPrimitive.Button>
101
109
  );
102
110
  });
103
111
 
112
+ ToolbarIconButton.displayName = 'Toolbar.IconButton';
113
+
104
114
  type ToolbarToggleProps = ToggleProps;
105
115
 
106
116
  const ToolbarToggle = forwardRef<HTMLButtonElement, ToolbarToggleProps>((props, forwardedRef) => {
@@ -111,6 +121,8 @@ const ToolbarToggle = forwardRef<HTMLButtonElement, ToolbarToggleProps>((props,
111
121
  );
112
122
  });
113
123
 
124
+ ToolbarToggle.displayName = 'Toolbar.Toggle';
125
+
114
126
  //
115
127
  // Link
116
128
  //
@@ -125,6 +137,8 @@ const ToolbarLink = forwardRef<HTMLAnchorElement, ToolbarLinkProps>((props, forw
125
137
  );
126
138
  });
127
139
 
140
+ ToolbarLink.displayName = 'Toolbar.Link';
141
+
128
142
  type ToolbarToggleGroupProps = (
129
143
  | Omit<ToolbarPrimitive.ToolbarToggleGroupSingleProps, 'className'>
130
144
  | Omit<ToolbarPrimitive.ToolbarToggleGroupMultipleProps, 'className'>
@@ -145,6 +159,8 @@ const ToolbarToggleGroup = forwardRef<HTMLDivElement, ToolbarToggleGroupProps>(
145
159
  },
146
160
  );
147
161
 
162
+ ToolbarToggleGroup.displayName = 'Toolbar.ToggleGroup';
163
+
148
164
  type ToolbarToggleGroupItemProps = ToggleGroupItemProps;
149
165
 
150
166
  const ToolbarToggleGroupItem = forwardRef<HTMLButtonElement, ToolbarToggleGroupItemProps>(
@@ -157,10 +173,12 @@ const ToolbarToggleGroupItem = forwardRef<HTMLButtonElement, ToolbarToggleGroupI
157
173
  },
158
174
  );
159
175
 
176
+ ToolbarToggleGroupItem.displayName = 'Toolbar.ToggleGroupItem';
177
+
160
178
  type ToolbarToggleGroupIconItemProps = Omit<ToggleGroupItemPrimitiveProps, 'className'> & IconButtonProps;
161
179
 
162
180
  const ToolbarToggleGroupIconItem = forwardRef<HTMLButtonElement, ToolbarToggleGroupIconItemProps>(
163
- ({ variant, density, elevation, classNames, icon, label, iconOnly, ...props }, forwardedRef) => {
181
+ ({ variant, density, elevation, classNames, icon, label, iconOnly, iconClassNames, ...props }, forwardedRef) => {
164
182
  return (
165
183
  <ToolbarPrimitive.ToolbarToggleItem {...props} asChild>
166
184
  <IconButton
@@ -172,6 +190,7 @@ const ToolbarToggleGroupIconItem = forwardRef<HTMLButtonElement, ToolbarToggleGr
172
190
  icon,
173
191
  label,
174
192
  iconOnly,
193
+ iconClassNames,
175
194
  }}
176
195
  ref={forwardedRef}
177
196
  />
@@ -180,6 +199,8 @@ const ToolbarToggleGroupIconItem = forwardRef<HTMLButtonElement, ToolbarToggleGr
180
199
  },
181
200
  );
182
201
 
202
+ ToolbarToggleGroupIconItem.displayName = 'Toolbar.ToggleGroupIconItem';
203
+
183
204
  //
184
205
  // Separator
185
206
  //
@@ -198,6 +219,8 @@ const ToolbarSeparator = forwardRef<HTMLDivElement, ToolbarSeparatorProps>(
198
219
  },
199
220
  );
200
221
 
222
+ ToolbarSeparator.displayName = 'Toolbar.Separator';
223
+
201
224
  //
202
225
  // DragHandle
203
226
  //
@@ -224,22 +247,46 @@ const ToolbarDragHandle = forwardRef<HTMLButtonElement, ToolbarDragHandleProps>(
224
247
  },
225
248
  );
226
249
 
250
+ ToolbarDragHandle.displayName = 'Toolbar.DragHandle';
251
+
227
252
  //
228
- // CloseIconButton
253
+ // ActionIconButton
229
254
  //
230
255
 
231
- type ToolbarCloseIconButtonProps = { onClick?: () => void; label?: string };
256
+ /**
257
+ * Known semantic actions a toolbar icon-button can represent. Each action
258
+ * picks its own phosphor icon + default translation key so call sites just
259
+ * declare intent (`action='delete'`) rather than re-specifying the icon /
260
+ * label every time.
261
+ */
262
+ type ToolbarActionIconButtonAction = 'close' | 'delete';
263
+
264
+ type ToolbarActionIconButtonProps = {
265
+ action: ToolbarActionIconButtonAction;
266
+ onClick?: MouseEventHandler<HTMLButtonElement>;
267
+ label?: string;
268
+ };
269
+
270
+ const TOOLBAR_ACTION_ICONS: Record<ToolbarActionIconButtonAction, string> = {
271
+ close: 'ph--x--regular',
272
+ delete: 'ph--trash--regular',
273
+ };
274
+
275
+ const TOOLBAR_ACTION_LABEL_KEYS: Record<ToolbarActionIconButtonAction, string> = {
276
+ close: 'toolbar-close.label',
277
+ delete: 'toolbar-delete.label',
278
+ };
232
279
 
233
- const ToolbarCloseIconButton = forwardRef<HTMLButtonElement, ToolbarCloseIconButtonProps>(
234
- ({ onClick, label }, forwardedRef) => {
280
+ const ToolbarActionIconButton = forwardRef<HTMLButtonElement, ToolbarActionIconButtonProps>(
281
+ ({ action, onClick, label }, forwardedRef) => {
235
282
  const { t } = useTranslation(translationKey);
236
283
 
237
284
  return (
238
285
  <ToolbarIconButton
239
286
  iconOnly
240
- icon='ph--x--regular'
287
+ icon={TOOLBAR_ACTION_ICONS[action]}
241
288
  variant='ghost'
242
- label={label ?? t('toolbar-close.label')}
289
+ label={label ?? t(TOOLBAR_ACTION_LABEL_KEYS[action])}
243
290
  classNames='cursor-pointer'
244
291
  onClick={onClick}
245
292
  ref={forwardedRef}
@@ -248,6 +295,8 @@ const ToolbarCloseIconButton = forwardRef<HTMLButtonElement, ToolbarCloseIconBut
248
295
  },
249
296
  );
250
297
 
298
+ ToolbarActionIconButton.displayName = 'Toolbar.ActionIconButton';
299
+
251
300
  //
252
301
  // Menu
253
302
  //
@@ -263,7 +312,7 @@ type ToolbarMenuProps<T extends any | void = void> = {
263
312
  };
264
313
 
265
314
  // TODO(burdon): Make slottable.
266
- const ToolbarMenu = <T extends any | void = void>({ context, items }: ToolbarMenuProps<T>) => {
315
+ function ToolbarMenu<T extends any | void = void>({ context, items }: ToolbarMenuProps<T>) {
267
316
  const { t } = useTranslation(translationKey);
268
317
 
269
318
  return (
@@ -292,7 +341,9 @@ const ToolbarMenu = <T extends any | void = void>({ context, items }: ToolbarMen
292
341
  )}
293
342
  </DropdownMenu.Root>
294
343
  );
295
- };
344
+ }
345
+
346
+ ToolbarMenu.displayName = 'Toolbar.Menu';
296
347
 
297
348
  //
298
349
  // Toolbar
@@ -310,7 +361,7 @@ export const Toolbar = {
310
361
  ToggleGroupIconItem: ToolbarToggleGroupIconItem,
311
362
  Separator: ToolbarSeparator,
312
363
  DragHandle: ToolbarDragHandle,
313
- CloseIconButton: ToolbarCloseIconButton,
364
+ ActionIconButton: ToolbarActionIconButton,
314
365
  Menu: ToolbarMenu,
315
366
  };
316
367
 
@@ -326,7 +377,8 @@ export type {
326
377
  ToolbarToggleGroupIconItemProps,
327
378
  ToolbarSeparatorProps,
328
379
  ToolbarDragHandleProps,
329
- ToolbarCloseIconButtonProps,
380
+ ToolbarActionIconButtonAction,
381
+ ToolbarActionIconButtonProps,
330
382
  ToolbarMenuItem,
331
383
  ToolbarMenuProps,
332
384
  };
@@ -0,0 +1,54 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { useComposedRefs } from '@radix-ui/react-compose-refs';
6
+ import React, {
7
+ type ComponentPropsWithoutRef,
8
+ type PropsWithChildren,
9
+ type SyntheticEvent,
10
+ forwardRef,
11
+ useCallback,
12
+ useRef,
13
+ } from 'react';
14
+
15
+ import { Tooltip, type TooltipScopedProps, type TooltipTriggerProps } from './Tooltip';
16
+
17
+ export type TextTooltipProps = PropsWithChildren<
18
+ {
19
+ text: string;
20
+ asChild?: boolean;
21
+ onlyWhenTruncating?: boolean;
22
+ truncateQuery?: string;
23
+ } & Pick<TooltipTriggerProps, 'side'> &
24
+ ComponentPropsWithoutRef<'button'>
25
+ >;
26
+
27
+ export const TextTooltip = forwardRef<HTMLButtonElement, TooltipScopedProps<TextTooltipProps>>(
28
+ (
29
+ { __scopeTooltip, text, children, onlyWhenTruncating, asChild = true, side, truncateQuery, ...props },
30
+ forwardedRef,
31
+ ) => {
32
+ const content = useRef<HTMLButtonElement | null>(null);
33
+ const ref = useComposedRefs(content, forwardedRef);
34
+ const handleInteract = useCallback(
35
+ (event: SyntheticEvent) => {
36
+ if (onlyWhenTruncating && content.current) {
37
+ const element: HTMLElement | null = truncateQuery
38
+ ? content.current.querySelector(truncateQuery)
39
+ : content.current;
40
+ if (!element || element.scrollWidth <= element.offsetWidth) {
41
+ event.preventDefault();
42
+ }
43
+ }
44
+ },
45
+ [onlyWhenTruncating, truncateQuery],
46
+ );
47
+
48
+ return (
49
+ <Tooltip.Trigger asChild={asChild} {...props} content={text} side={side} onInteract={handleInteract} ref={ref}>
50
+ {children}
51
+ </Tooltip.Trigger>
52
+ );
53
+ },
54
+ );
@@ -19,7 +19,7 @@ type DefaultStoryProps = {
19
19
  const DefaultStory = ({ tooltips, defaultOpen }: DefaultStoryProps) => {
20
20
  return (
21
21
  <Tooltip.Provider defaultOpen={defaultOpen}>
22
- <div role='none' className='w-32'>
22
+ <div className='w-32'>
23
23
  {tooltips.map(({ label, content }, i) => (
24
24
  <Tooltip.Trigger asChild key={i} content={content} side='right'>
25
25
  <Button classNames='block w-full'>{label}</Button>
@@ -50,9 +50,6 @@ export const Default: Story = {
50
50
  },
51
51
  ],
52
52
  },
53
- parameters: {
54
- chromatic: { delay: 500 },
55
- },
56
53
  };
57
54
 
58
55
  export const DefaultOpen: Story = {
@@ -65,9 +62,6 @@ export const DefaultOpen: Story = {
65
62
  },
66
63
  ],
67
64
  },
68
- parameters: {
69
- chromatic: { delay: 500 },
70
- },
71
65
  };
72
66
 
73
67
  export const StressTest: Story = {
@@ -81,7 +75,4 @@ export const StressTest: Story = {
81
75
  { count: 32 },
82
76
  ),
83
77
  },
84
- parameters: {
85
- chromatic: { disableSnapshot: true },
86
- },
87
78
  };