@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
@@ -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,56 @@
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 icon: ComponentFunction<ToastStyleProps> = (_props, ...etc) => mx('col-start-1 grid place-items-center', ...etc);
36
+
37
+ const title: ComponentFunction<ToastStyleProps> = (_props, ...etc) =>
38
+ mx('col-start-2 overflow-hidden truncate font-medium', ...etc);
39
+
40
+ const close: ComponentFunction<ToastStyleProps> = (_props, ...etc) => mx('col-start-3', ...etc);
41
+
42
+ const description: ComponentFunction<ToastStyleProps> = (_props, ...etc) => mx('col-start-2 text-description', ...etc);
43
+
44
+ const actions: ComponentFunction<ToastStyleProps> = (_props, ...etc) => mx('flex gap-2 mbs-1', ...etc);
45
+
46
+ export const toastTheme: Theme<ToastStyleProps> = {
47
+ viewport,
48
+ root,
49
+ grid,
50
+ header,
51
+ icon,
52
+ title,
53
+ close,
54
+ description,
55
+ actions,
56
+ };
@@ -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,125 @@ 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
+ <div className={tx('toast.icon', {})}>
75
+ <Icon icon={icon} size={5} />
76
+ </div>
77
+ )}
78
+ <ToastPrimitive.Title {...props} className={tx('toast.title', {}, classNames)} ref={forwardedRef}>
79
+ {children}
80
+ </ToastPrimitive.Title>
81
+ {onClose && (
82
+ <IconButton
83
+ variant='ghost'
84
+ icon='ph--x--regular'
85
+ iconOnly
86
+ label={t('toolbar-close.label')}
87
+ classNames={tx('toast.close', {})}
88
+ onClick={onClose}
89
+ />
90
+ )}
91
+ </Column.Row>
92
+ );
51
93
  },
52
94
  );
53
95
 
96
+ ToastTitle.displayName = 'Toast.Title';
97
+
98
+ //
99
+ // Description
100
+ //
101
+
54
102
  type ToastDescriptionProps = ThemedClassName<ToastPrimitive.ToastDescriptionProps>;
55
103
 
56
104
  const ToastDescription = forwardRef<HTMLParagraphElement, ToastDescriptionProps>(
57
- ({ asChild, classNames, ...props }, forwardedRef) => {
105
+ ({ classNames, children, ...props }, forwardedRef) => {
58
106
  const { tx } = useThemeContext();
59
- const Comp = asChild ? Slot : ToastPrimitive.Description;
60
- return <Comp {...props} className={tx('toast.description', {}, classNames)} ref={forwardedRef} />;
107
+ return (
108
+ <ToastPrimitive.Description {...props} className={tx('toast.description', {}, classNames)} ref={forwardedRef}>
109
+ {children}
110
+ </ToastPrimitive.Description>
111
+ );
61
112
  },
62
113
  );
63
114
 
64
- type ToastActionsProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.div>>;
115
+ ToastDescription.displayName = 'Toast.Description';
116
+
117
+ //
118
+ // Actions
119
+ //
120
+
121
+ type ToastActionsProps = ThemedClassName<ComponentPropsWithRef<'div'>>;
65
122
 
66
123
  const ToastActions = forwardRef<HTMLDivElement, ToastActionsProps>(
67
- ({ asChild, classNames, ...props }, forwardedRef) => {
124
+ ({ classNames, children, ...props }, forwardedRef) => {
68
125
  const { tx } = useThemeContext();
69
- const Comp = asChild ? Slot : Primitive.div;
70
- return <Comp {...props} className={tx('toast.actions', {}, classNames)} ref={forwardedRef} />;
126
+ return (
127
+ <Column.Center classNames={tx('toast.actions', {}, classNames)} ref={forwardedRef} {...props}>
128
+ <DensityProvider density='sm'>{children}</DensityProvider>
129
+ </Column.Center>
130
+ );
71
131
  },
72
132
  );
73
133
 
134
+ ToastActions.displayName = 'Toast.Actions';
135
+
136
+ //
137
+ // Action / Close
138
+ //
139
+
74
140
  type ToastActionProps = ToastPrimitive.ToastActionProps;
75
141
 
76
- const ToastAction: FunctionComponent<ToastActionProps> = ToastPrimitive.Action;
142
+ const ToastAction = ToastPrimitive.Action;
77
143
 
78
144
  type ToastCloseProps = ToastPrimitive.ToastCloseProps;
79
145
 
80
- const ToastClose: FunctionComponent<ToastCloseProps> = ToastPrimitive.Close;
146
+ const ToastClose = ToastPrimitive.Close;
147
+
148
+ //
149
+ // Toast
150
+ //
81
151
 
82
152
  export const Toast = {
83
153
  Provider: ToastProvider,
84
154
  Viewport: ToastViewport,
85
155
  Root: ToastRoot,
86
- Body: ToastBody,
87
156
  Title: ToastTitle,
88
157
  Description: ToastDescription,
89
158
  Actions: ToastActions,
@@ -95,7 +164,6 @@ export type {
95
164
  ToastProviderProps,
96
165
  ToastViewportProps,
97
166
  ToastRootProps,
98
- ToastBodyProps,
99
167
  ToastTitleProps,
100
168
  ToastDescriptionProps,
101
169
  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,15 +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
 
15
14
  import { translationKey } from '#translations';
16
15
 
17
16
  import { useThemeContext } from '../../hooks';
17
+ import { type ToolbarStyleProps } from '../../theme';
18
+ import { composable, composableProps, slottable } from '../../util';
18
19
  import {
19
20
  Button,
20
21
  ButtonGroup,
@@ -57,6 +58,8 @@ const ToolbarRoot = composable<HTMLDivElement, ToolbarRootProps>(
57
58
  },
58
59
  );
59
60
 
61
+ ToolbarRoot.displayName = 'Toolbar.Root';
62
+
60
63
  //
61
64
  // Text
62
65
  //
@@ -74,6 +77,8 @@ const ToolbarText = slottable<HTMLDivElement>(({ children, asChild, ...props },
74
77
  );
75
78
  });
76
79
 
80
+ ToolbarText.displayName = 'Toolbar.Text';
81
+
77
82
  //
78
83
  // Button
79
84
  //
@@ -88,6 +93,8 @@ const ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>((props,
88
93
  );
89
94
  });
90
95
 
96
+ ToolbarButton.displayName = 'Toolbar.Button';
97
+
91
98
  //
92
99
  // IconButton
93
100
  //
@@ -97,11 +104,13 @@ type ToolbarIconButtonProps = IconButtonProps;
97
104
  const ToolbarIconButton = forwardRef<HTMLButtonElement, ToolbarIconButtonProps>((props, forwardedRef) => {
98
105
  return (
99
106
  <ToolbarPrimitive.Button asChild>
100
- <IconButton {...props} noTooltip ref={forwardedRef} />
107
+ <IconButton {...props} ref={forwardedRef} />
101
108
  </ToolbarPrimitive.Button>
102
109
  );
103
110
  });
104
111
 
112
+ ToolbarIconButton.displayName = 'Toolbar.IconButton';
113
+
105
114
  type ToolbarToggleProps = ToggleProps;
106
115
 
107
116
  const ToolbarToggle = forwardRef<HTMLButtonElement, ToolbarToggleProps>((props, forwardedRef) => {
@@ -112,6 +121,8 @@ const ToolbarToggle = forwardRef<HTMLButtonElement, ToolbarToggleProps>((props,
112
121
  );
113
122
  });
114
123
 
124
+ ToolbarToggle.displayName = 'Toolbar.Toggle';
125
+
115
126
  //
116
127
  // Link
117
128
  //
@@ -126,6 +137,8 @@ const ToolbarLink = forwardRef<HTMLAnchorElement, ToolbarLinkProps>((props, forw
126
137
  );
127
138
  });
128
139
 
140
+ ToolbarLink.displayName = 'Toolbar.Link';
141
+
129
142
  type ToolbarToggleGroupProps = (
130
143
  | Omit<ToolbarPrimitive.ToolbarToggleGroupSingleProps, 'className'>
131
144
  | Omit<ToolbarPrimitive.ToolbarToggleGroupMultipleProps, 'className'>
@@ -146,6 +159,8 @@ const ToolbarToggleGroup = forwardRef<HTMLDivElement, ToolbarToggleGroupProps>(
146
159
  },
147
160
  );
148
161
 
162
+ ToolbarToggleGroup.displayName = 'Toolbar.ToggleGroup';
163
+
149
164
  type ToolbarToggleGroupItemProps = ToggleGroupItemProps;
150
165
 
151
166
  const ToolbarToggleGroupItem = forwardRef<HTMLButtonElement, ToolbarToggleGroupItemProps>(
@@ -158,6 +173,8 @@ const ToolbarToggleGroupItem = forwardRef<HTMLButtonElement, ToolbarToggleGroupI
158
173
  },
159
174
  );
160
175
 
176
+ ToolbarToggleGroupItem.displayName = 'Toolbar.ToggleGroupItem';
177
+
161
178
  type ToolbarToggleGroupIconItemProps = Omit<ToggleGroupItemPrimitiveProps, 'className'> & IconButtonProps;
162
179
 
163
180
  const ToolbarToggleGroupIconItem = forwardRef<HTMLButtonElement, ToolbarToggleGroupIconItemProps>(
@@ -182,6 +199,8 @@ const ToolbarToggleGroupIconItem = forwardRef<HTMLButtonElement, ToolbarToggleGr
182
199
  },
183
200
  );
184
201
 
202
+ ToolbarToggleGroupIconItem.displayName = 'Toolbar.ToggleGroupIconItem';
203
+
185
204
  //
186
205
  // Separator
187
206
  //
@@ -200,6 +219,8 @@ const ToolbarSeparator = forwardRef<HTMLDivElement, ToolbarSeparatorProps>(
200
219
  },
201
220
  );
202
221
 
222
+ ToolbarSeparator.displayName = 'Toolbar.Separator';
223
+
203
224
  //
204
225
  // DragHandle
205
226
  //
@@ -226,22 +247,46 @@ const ToolbarDragHandle = forwardRef<HTMLButtonElement, ToolbarDragHandleProps>(
226
247
  },
227
248
  );
228
249
 
250
+ ToolbarDragHandle.displayName = 'Toolbar.DragHandle';
251
+
229
252
  //
230
- // CloseIconButton
253
+ // ActionIconButton
231
254
  //
232
255
 
233
- 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
+ };
234
269
 
235
- const ToolbarCloseIconButton = forwardRef<HTMLButtonElement, ToolbarCloseIconButtonProps>(
236
- ({ onClick, label }, forwardedRef) => {
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
+ };
279
+
280
+ const ToolbarActionIconButton = forwardRef<HTMLButtonElement, ToolbarActionIconButtonProps>(
281
+ ({ action, onClick, label }, forwardedRef) => {
237
282
  const { t } = useTranslation(translationKey);
238
283
 
239
284
  return (
240
285
  <ToolbarIconButton
241
286
  iconOnly
242
- icon='ph--x--regular'
287
+ icon={TOOLBAR_ACTION_ICONS[action]}
243
288
  variant='ghost'
244
- label={label ?? t('toolbar-close.label')}
289
+ label={label ?? t(TOOLBAR_ACTION_LABEL_KEYS[action])}
245
290
  classNames='cursor-pointer'
246
291
  onClick={onClick}
247
292
  ref={forwardedRef}
@@ -250,6 +295,8 @@ const ToolbarCloseIconButton = forwardRef<HTMLButtonElement, ToolbarCloseIconBut
250
295
  },
251
296
  );
252
297
 
298
+ ToolbarActionIconButton.displayName = 'Toolbar.ActionIconButton';
299
+
253
300
  //
254
301
  // Menu
255
302
  //
@@ -265,7 +312,7 @@ type ToolbarMenuProps<T extends any | void = void> = {
265
312
  };
266
313
 
267
314
  // TODO(burdon): Make slottable.
268
- const ToolbarMenu = <T extends any | void = void>({ context, items }: ToolbarMenuProps<T>) => {
315
+ function ToolbarMenu<T extends any | void = void>({ context, items }: ToolbarMenuProps<T>) {
269
316
  const { t } = useTranslation(translationKey);
270
317
 
271
318
  return (
@@ -294,7 +341,9 @@ const ToolbarMenu = <T extends any | void = void>({ context, items }: ToolbarMen
294
341
  )}
295
342
  </DropdownMenu.Root>
296
343
  );
297
- };
344
+ }
345
+
346
+ ToolbarMenu.displayName = 'Toolbar.Menu';
298
347
 
299
348
  //
300
349
  // Toolbar
@@ -312,7 +361,7 @@ export const Toolbar = {
312
361
  ToggleGroupIconItem: ToolbarToggleGroupIconItem,
313
362
  Separator: ToolbarSeparator,
314
363
  DragHandle: ToolbarDragHandle,
315
- CloseIconButton: ToolbarCloseIconButton,
364
+ ActionIconButton: ToolbarActionIconButton,
316
365
  Menu: ToolbarMenu,
317
366
  };
318
367
 
@@ -328,7 +377,8 @@ export type {
328
377
  ToolbarToggleGroupIconItemProps,
329
378
  ToolbarSeparatorProps,
330
379
  ToolbarDragHandleProps,
331
- ToolbarCloseIconButtonProps,
380
+ ToolbarActionIconButtonAction,
381
+ ToolbarActionIconButtonProps,
332
382
  ToolbarMenuItem,
333
383
  ToolbarMenuProps,
334
384
  };
@@ -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
  };
@@ -0,0 +1,19 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { mx } from '@dxos/ui-theme';
6
+ import { type ComponentFunction, type Elevation, type Theme } from '@dxos/ui-types';
7
+
8
+ import { tooltipContent } from './tooltipContent';
9
+
10
+ export type TooltipStyleProps = Partial<{
11
+ elevation: Elevation;
12
+ }>;
13
+
14
+ const arrow: ComponentFunction<TooltipStyleProps> = (_props, ...etc) => mx('fill-inverse-surface', ...etc);
15
+
16
+ export const tooltipTheme: Theme<TooltipStyleProps> = {
17
+ content: tooltipContent,
18
+ arrow,
19
+ };
@@ -247,7 +247,7 @@ const TooltipVirtualTrigger = ({
247
247
  // TooltipTrigger
248
248
  //
249
249
 
250
- const TRIGGER_NAME = 'TooltipTrigger';
250
+ const TRIGGER_NAME = 'Tooltip.Trigger';
251
251
 
252
252
  type TooltipTriggerElement = ComponentRef<typeof Primitive.button>;
253
253
  type PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;
@@ -327,7 +327,7 @@ TooltipTrigger.displayName = TRIGGER_NAME;
327
327
  // TooltipPortal
328
328
  //
329
329
 
330
- const PORTAL_NAME = 'TooltipPortal';
330
+ const PORTAL_NAME = 'Tooltip.Portal';
331
331
 
332
332
  type PortalContextValue = { forceMount?: true };
333
333
  const [PortalProvider, usePortalContext] = createTooltipContext<PortalContextValue>(PORTAL_NAME, {
@@ -368,7 +368,7 @@ TooltipPortal.displayName = PORTAL_NAME;
368
368
  // TooltipContent
369
369
  //
370
370
 
371
- const CONTENT_NAME = 'TooltipContent';
371
+ const CONTENT_NAME = 'Tooltip.Content';
372
372
 
373
373
  type TooltipContentElement = TooltipContentImplElement;
374
374
  type TooltipContentProps = TooltipContentImplProps & {
@@ -579,7 +579,7 @@ TooltipContent.displayName = CONTENT_NAME;
579
579
  // TooltipArrow
580
580
  //
581
581
 
582
- const ARROW_NAME = 'TooltipArrow';
582
+ const ARROW_NAME = 'Tooltip.Arrow';
583
583
 
584
584
  type TooltipArrowElement = ComponentRef<typeof PopperPrimitive.Arrow>;
585
585
  type PopperArrowProps = ComponentPropsWithoutRef<typeof PopperPrimitive.Arrow>;
@@ -3,3 +3,4 @@
3
3
  //
4
4
 
5
5
  export * from './Tooltip';
6
+ export * from './tooltipContent';