@dxos/react-ui 0.9.0 → 0.9.1-staging.ee54ba693a

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 (263) hide show
  1. package/dist/lib/browser/{chunk-5SPBSIWS.mjs → chunk-CMHHVHX3.mjs} +14 -1
  2. package/dist/lib/browser/chunk-CMHHVHX3.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-7JFD5ZHZ.mjs → chunk-GTHV4WYK.mjs} +141 -254
  4. package/dist/lib/browser/chunk-GTHV4WYK.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +1553 -1274
  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 +5 -5
  9. package/dist/lib/browser/testing/index.mjs.map +2 -2
  10. package/dist/lib/browser/translations.mjs +1 -1
  11. package/dist/lib/node-esm/{chunk-TTEL2FP2.mjs → chunk-3VSKWNCQ.mjs} +141 -254
  12. package/dist/lib/node-esm/chunk-3VSKWNCQ.mjs.map +7 -0
  13. package/dist/lib/node-esm/{chunk-FPVTVXND.mjs → chunk-P4KFQGJI.mjs} +14 -1
  14. package/dist/lib/node-esm/chunk-P4KFQGJI.mjs.map +7 -0
  15. package/dist/lib/node-esm/index.mjs +1553 -1274
  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 +5 -5
  19. package/dist/lib/node-esm/testing/index.mjs.map +2 -2
  20. package/dist/lib/node-esm/translations.mjs +1 -1
  21. package/dist/types/src/components/Avatars/Avatar.d.ts +1 -1
  22. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  23. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +3 -3
  24. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  25. package/dist/types/src/components/Button/Button.d.ts +4 -2
  26. package/dist/types/src/components/Button/Button.d.ts.map +1 -1
  27. package/dist/types/src/components/Button/IconButton.d.ts +0 -1
  28. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
  29. package/dist/types/src/components/Button/IconButton.stories.d.ts +37 -0
  30. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
  31. package/dist/types/src/components/Button/MicButton.d.ts +24 -0
  32. package/dist/types/src/components/Button/MicButton.d.ts.map +1 -0
  33. package/dist/types/src/components/Button/MicButton.stories.d.ts +57 -0
  34. package/dist/types/src/components/Button/MicButton.stories.d.ts.map +1 -0
  35. package/dist/types/src/components/Button/SystemIconButton.d.ts +33 -0
  36. package/dist/types/src/components/Button/SystemIconButton.d.ts.map +1 -0
  37. package/dist/types/src/components/Button/SystemIconButton.stories.d.ts +51 -0
  38. package/dist/types/src/components/Button/SystemIconButton.stories.d.ts.map +1 -0
  39. package/dist/types/src/components/Button/ToggleGroup.d.ts +2 -2
  40. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -1
  41. package/dist/types/src/components/Button/ToggleIconButton.d.ts +15 -0
  42. package/dist/types/src/components/Button/ToggleIconButton.d.ts.map +1 -0
  43. package/dist/types/src/components/Button/index.d.ts +3 -0
  44. package/dist/types/src/components/Button/index.d.ts.map +1 -1
  45. package/dist/types/src/components/Calendar/Calendar.d.ts.map +1 -1
  46. package/dist/types/src/components/Calendar/Calendar.theme.d.ts.map +1 -1
  47. package/dist/types/src/components/Card/Card.d.ts +32 -26
  48. package/dist/types/src/components/Card/Card.d.ts.map +1 -1
  49. package/dist/types/src/components/Card/Card.stories.d.ts +3 -3
  50. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -1
  51. package/dist/types/src/components/Card/Card.theme.d.ts.map +1 -1
  52. package/dist/types/src/components/Carousel/Carousel.d.ts +29 -6
  53. package/dist/types/src/components/Carousel/Carousel.d.ts.map +1 -1
  54. package/dist/types/src/components/Carousel/Carousel.stories.d.ts +48 -2
  55. package/dist/types/src/components/Carousel/Carousel.stories.d.ts.map +1 -1
  56. package/dist/types/src/components/Clipboard/index.d.ts +1 -0
  57. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  58. package/dist/types/src/components/Column/Column.d.ts +20 -2
  59. package/dist/types/src/components/Column/Column.d.ts.map +1 -1
  60. package/dist/types/src/components/Column/Column.theme.d.ts +8 -0
  61. package/dist/types/src/components/Column/Column.theme.d.ts.map +1 -1
  62. package/dist/types/src/components/Dialog/AlertDialog.d.ts +2 -2
  63. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
  64. package/dist/types/src/components/Dialog/Dialog.d.ts +1 -1
  65. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  66. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +2 -2
  67. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
  68. package/dist/types/src/components/Icon/Icon.stories.d.ts +5 -0
  69. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -1
  70. package/dist/types/src/components/Input/Input.d.ts +4 -1
  71. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  72. package/dist/types/src/components/Input/Input.stories.d.ts +3 -3
  73. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  74. package/dist/types/src/components/Input/Input.theme.d.ts +10 -10
  75. package/dist/types/src/components/Input/Input.theme.d.ts.map +1 -1
  76. package/dist/types/src/components/Input/SegmentedInput.d.ts +8 -8
  77. package/dist/types/src/components/Input/SegmentedInput.d.ts.map +1 -1
  78. package/dist/types/src/components/Input/index.d.ts +0 -1
  79. package/dist/types/src/components/Input/index.d.ts.map +1 -1
  80. package/dist/types/src/components/Main/Main.d.ts +3 -3
  81. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  82. package/dist/types/src/components/Menu/ContextMenu.d.ts +1 -1
  83. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
  84. package/dist/types/src/components/Menu/DropdownMenu.d.ts +2 -2
  85. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
  86. package/dist/types/src/components/Message/Message.d.ts +1 -1
  87. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  88. package/dist/types/src/components/Message/Message.stories.d.ts +2 -2
  89. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  90. package/dist/types/src/components/Message/Message.theme.d.ts.map +1 -1
  91. package/dist/types/src/components/Panel/Panel.d.ts +1 -1
  92. package/dist/types/src/components/Panel/Panel.d.ts.map +1 -1
  93. package/dist/types/src/components/Panel/Panel.theme.d.ts.map +1 -1
  94. package/dist/types/src/components/Popover/Popover.d.ts +2 -2
  95. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  96. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +2 -0
  97. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  98. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +1 -0
  99. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  100. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +1 -1
  101. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  102. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +2 -2
  103. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
  104. package/dist/types/src/components/Select/Select.d.ts +1 -1
  105. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  106. package/dist/types/src/components/Select/Select.stories.d.ts +2 -2
  107. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  108. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  109. package/dist/types/src/components/Splitter/Splitter.d.ts +30 -16
  110. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -1
  111. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +6 -1
  112. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -1
  113. package/dist/types/src/components/Splitter/Splitter.theme.d.ts +3 -1
  114. package/dist/types/src/components/Splitter/Splitter.theme.d.ts.map +1 -1
  115. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  116. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  117. package/dist/types/src/components/Tag/Tag.theme.d.ts +1 -1
  118. package/dist/types/src/components/Tag/Tag.theme.d.ts.map +1 -1
  119. package/dist/types/src/components/Toast/Toast.d.ts +1 -1
  120. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  121. package/dist/types/src/components/Toast/Toast.theme.d.ts.map +1 -1
  122. package/dist/types/src/components/Toolbar/Toolbar.d.ts +1 -1
  123. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  124. package/dist/types/src/components/Tooltip/TextTooltip.d.ts +19 -0
  125. package/dist/types/src/components/Tooltip/TextTooltip.d.ts.map +1 -0
  126. package/dist/types/src/components/Tooltip/Tooltip.d.ts +3 -3
  127. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  128. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +2 -2
  129. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  130. package/dist/types/src/components/Tooltip/index.d.ts +1 -0
  131. package/dist/types/src/components/Tooltip/index.d.ts.map +1 -1
  132. package/dist/types/src/components/index.d.ts +0 -1
  133. package/dist/types/src/components/index.d.ts.map +1 -1
  134. package/dist/types/src/index.d.ts +1 -1
  135. package/dist/types/src/index.d.ts.map +1 -1
  136. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts +1 -8
  137. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  138. package/dist/types/src/testing/Loading.d.ts.map +1 -1
  139. package/dist/types/src/theme/defaultTheme.d.ts.map +1 -1
  140. package/dist/types/src/theme/index.d.ts +0 -2
  141. package/dist/types/src/theme/index.d.ts.map +1 -1
  142. package/dist/types/src/translations.d.ts +13 -0
  143. package/dist/types/src/translations.d.ts.map +1 -1
  144. package/dist/types/src/util/slots.d.ts +1 -1
  145. package/dist/types/src/util/slots.d.ts.map +1 -1
  146. package/dist/types/tsconfig.tsbuildinfo +1 -1
  147. package/package.json +22 -21
  148. package/src/components/Avatars/Avatar.stories.tsx +2 -2
  149. package/src/components/Avatars/Avatar.theme.ts +1 -1
  150. package/src/components/Avatars/Avatar.tsx +3 -3
  151. package/src/components/Breadcrumb/Breadcrumb.tsx +6 -6
  152. package/src/components/Button/Button.tsx +25 -4
  153. package/src/components/Button/IconButton.stories.tsx +81 -1
  154. package/src/components/Button/IconButton.tsx +2 -4
  155. package/src/components/Button/MicButton.stories.tsx +60 -0
  156. package/src/components/Button/MicButton.tsx +117 -0
  157. package/src/components/Button/SystemIconButton.stories.tsx +91 -0
  158. package/src/components/Button/SystemIconButton.tsx +264 -0
  159. package/src/components/Button/ToggleGroup.tsx +2 -2
  160. package/src/components/Button/ToggleIconButton.tsx +32 -0
  161. package/src/components/Button/index.ts +3 -0
  162. package/src/components/Calendar/Calendar.theme.ts +2 -0
  163. package/src/components/Calendar/Calendar.tsx +3 -3
  164. package/src/components/Card/Card.stories.tsx +71 -29
  165. package/src/components/Card/Card.theme.ts +27 -9
  166. package/src/components/Card/Card.tsx +176 -99
  167. package/src/components/Carousel/Carousel.stories.tsx +42 -18
  168. package/src/components/Carousel/Carousel.tsx +169 -33
  169. package/src/components/Column/Column.theme.ts +32 -4
  170. package/src/components/Column/Column.tsx +39 -7
  171. package/src/components/Dialog/AlertDialog.stories.tsx +2 -2
  172. package/src/components/Dialog/AlertDialog.tsx +13 -13
  173. package/src/components/Dialog/Dialog.stories.tsx +3 -4
  174. package/src/components/Dialog/Dialog.theme.ts +1 -1
  175. package/src/components/Dialog/Dialog.tsx +12 -12
  176. package/src/components/Icon/Icon.stories.tsx +23 -0
  177. package/src/components/Icon/Icon.theme.ts +1 -1
  178. package/src/components/Input/Input.stories.tsx +13 -5
  179. package/src/components/Input/Input.theme.ts +17 -39
  180. package/src/components/Input/Input.tsx +30 -13
  181. package/src/components/Input/SegmentedInput.tsx +50 -41
  182. package/src/components/Input/index.ts +0 -1
  183. package/src/components/Main/Main.tsx +3 -3
  184. package/src/components/MediaPlayer/MediaPlayer.tsx +4 -4
  185. package/src/components/Menu/ContextMenu.tsx +8 -8
  186. package/src/components/Menu/DropdownMenu.tsx +12 -13
  187. package/src/components/Message/Message.stories.tsx +2 -2
  188. package/src/components/Message/Message.theme.ts +1 -11
  189. package/src/components/Message/Message.tsx +6 -6
  190. package/src/components/Panel/Panel.theme.ts +2 -1
  191. package/src/components/Panel/Panel.tsx +1 -1
  192. package/src/components/Popover/Popover.theme.ts +1 -1
  193. package/src/components/Popover/Popover.tsx +9 -9
  194. package/src/components/ScrollArea/ScrollArea.tsx +7 -4
  195. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +2 -2
  196. package/src/components/ScrollContainer/ScrollContainer.tsx +2 -2
  197. package/src/components/Select/Select.stories.tsx +2 -2
  198. package/src/components/Select/Select.theme.ts +1 -1
  199. package/src/components/Select/Select.tsx +14 -14
  200. package/src/components/Separator/Separator.tsx +1 -0
  201. package/src/components/Splitter/Splitter.stories.tsx +84 -20
  202. package/src/components/Splitter/Splitter.theme.ts +20 -3
  203. package/src/components/Splitter/Splitter.tsx +320 -47
  204. package/src/components/Tag/Tag.stories.tsx +1 -1
  205. package/src/components/Tag/Tag.theme.ts +1 -1
  206. package/src/components/Tag/Tag.tsx +3 -5
  207. package/src/components/Toast/Toast.theme.ts +3 -8
  208. package/src/components/Toast/Toast.tsx +16 -15
  209. package/src/components/Toolbar/Toolbar.tsx +10 -10
  210. package/src/components/Tooltip/TextTooltip.tsx +54 -0
  211. package/src/components/Tooltip/Tooltip.stories.tsx +2 -2
  212. package/src/components/Tooltip/Tooltip.tsx +3 -3
  213. package/src/components/Tooltip/index.ts +1 -0
  214. package/src/components/index.ts +0 -1
  215. package/src/exemplars/tabster.stories.tsx +1 -1
  216. package/src/index.ts +1 -1
  217. package/src/primitives/ThemeProvider/TranslationsProvider.tsx +10 -30
  218. package/src/testing/Loading.tsx +2 -1
  219. package/src/testing/decorators/withLayout.tsx +2 -2
  220. package/src/theme/defaultTheme.ts +0 -4
  221. package/src/theme/index.ts +0 -2
  222. package/src/translations.ts +18 -0
  223. package/src/util/slots.ts +5 -5
  224. package/dist/lib/browser/chunk-5SPBSIWS.mjs.map +0 -7
  225. package/dist/lib/browser/chunk-7JFD5ZHZ.mjs.map +0 -7
  226. package/dist/lib/node-esm/chunk-FPVTVXND.mjs.map +0 -7
  227. package/dist/lib/node-esm/chunk-TTEL2FP2.mjs.map +0 -7
  228. package/dist/types/src/components/Input/constants.d.ts +0 -2
  229. package/dist/types/src/components/Input/constants.d.ts.map +0 -1
  230. package/dist/types/src/components/List/List.d.ts +0 -29
  231. package/dist/types/src/components/List/List.d.ts.map +0 -1
  232. package/dist/types/src/components/List/List.stories.d.ts +0 -16
  233. package/dist/types/src/components/List/List.stories.d.ts.map +0 -1
  234. package/dist/types/src/components/List/List.theme.d.ts +0 -7
  235. package/dist/types/src/components/List/List.theme.d.ts.map +0 -1
  236. package/dist/types/src/components/List/ListDropIndicator.d.ts +0 -13
  237. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +0 -1
  238. package/dist/types/src/components/List/Tree.d.ts +0 -23
  239. package/dist/types/src/components/List/Tree.d.ts.map +0 -1
  240. package/dist/types/src/components/List/Tree.stories.d.ts +0 -15
  241. package/dist/types/src/components/List/Tree.stories.d.ts.map +0 -1
  242. package/dist/types/src/components/List/TreeDropIndicator.d.ts +0 -8
  243. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +0 -1
  244. package/dist/types/src/components/List/Treegrid.d.ts +0 -33
  245. package/dist/types/src/components/List/Treegrid.d.ts.map +0 -1
  246. package/dist/types/src/components/List/Treegrid.stories.d.ts +0 -12
  247. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +0 -1
  248. package/dist/types/src/components/List/Treegrid.theme.d.ts +0 -7
  249. package/dist/types/src/components/List/Treegrid.theme.d.ts.map +0 -1
  250. package/dist/types/src/components/List/index.d.ts +0 -4
  251. package/dist/types/src/components/List/index.d.ts.map +0 -1
  252. package/src/components/Input/constants.ts +0 -5
  253. package/src/components/List/List.stories.tsx +0 -234
  254. package/src/components/List/List.theme.ts +0 -47
  255. package/src/components/List/List.tsx +0 -171
  256. package/src/components/List/ListDropIndicator.tsx +0 -69
  257. package/src/components/List/Tree.stories.tsx +0 -87
  258. package/src/components/List/Tree.tsx +0 -74
  259. package/src/components/List/TreeDropIndicator.tsx +0 -70
  260. package/src/components/List/Treegrid.stories.tsx +0 -156
  261. package/src/components/List/Treegrid.theme.ts +0 -35
  262. package/src/components/List/Treegrid.tsx +0 -187
  263. package/src/components/List/index.ts +0 -7
@@ -5,7 +5,7 @@
5
5
  import { createContext } from '@radix-ui/react-context';
6
6
  import { Primitive } from '@radix-ui/react-primitive';
7
7
  import { Slot } from '@radix-ui/react-slot';
8
- import React, { type CSSProperties, type ComponentPropsWithRef, forwardRef } from 'react';
8
+ import React, { type ComponentPropsWithRef, type CSSProperties, forwardRef } from 'react';
9
9
  import { useTranslation } from 'react-i18next';
10
10
 
11
11
  import { useId } from '@dxos/react-hooks';
@@ -141,15 +141,15 @@ const MessageTitle = forwardRef<HTMLDivElement, MessageTitleProps>(
141
141
  return (
142
142
  <Column.Row classNames={tx('message.header', {}, classNames)} ref={forwardedRef}>
143
143
  {icon && (
144
- <div className={tx('message.icon', { valence })}>
144
+ <Column.Block>
145
145
  <Icon icon={icon} />
146
- </div>
146
+ </Column.Block>
147
147
  )}
148
148
  <h2 className={tx('message.title', {}, classNames)} id={titleId}>
149
149
  {children}
150
150
  </h2>
151
151
  {onClose && (
152
- <div className={tx('message.close', {})}>
152
+ <Column.Block end>
153
153
  <IconButton
154
154
  variant='ghost'
155
155
  icon='ph--x--regular'
@@ -158,7 +158,7 @@ const MessageTitle = forwardRef<HTMLDivElement, MessageTitleProps>(
158
158
  label={t('toolbar-close.label')}
159
159
  onClick={onClose}
160
160
  />
161
- </div>
161
+ </Column.Block>
162
162
  )}
163
163
  </Column.Row>
164
164
  );
@@ -204,6 +204,6 @@ export const Message = {
204
204
 
205
205
  export const Callout = Message;
206
206
 
207
- export type { MessageRootProps, MessageTitleProps, MessageContentProps };
207
+ export type { MessageContentProps, MessageRootProps, MessageTitleProps };
208
208
 
209
209
  export { messageIcons };
@@ -25,8 +25,9 @@ const root: ComponentFunction<PanelStyleProps> = (_, ...etc) =>
25
25
  ...etc,
26
26
  );
27
27
 
28
+ // Toolbars default to the bar surface (tier 5); callers can still override via the trailing classes.
28
29
  const toolbar: ComponentFunction<PanelStyleProps> = ({ size = 'md' }, ...etc) =>
29
- mx('[grid-area:toolbar]', 'shrink-0', sizes[size], ...etc);
30
+ mx('[grid-area:toolbar]', 'shrink-0', 'bg-toolbar-surface', sizes[size], ...etc);
30
31
 
31
32
  const content: ComponentFunction<PanelStyleProps> = (_, ...etc) => mx('[grid-area:content] min-h-0', ...etc);
32
33
 
@@ -118,4 +118,4 @@ export const Panel = {
118
118
  Statusbar: PanelStatusbar,
119
119
  };
120
120
 
121
- export type { PanelRootProps, PanelToolbarProps, PanelContentProps, PanelStatusbarProps };
121
+ export type { PanelContentProps, PanelRootProps, PanelStatusbarProps, PanelToolbarProps };
@@ -13,7 +13,7 @@ export type PopoverStyleProps = Partial<{
13
13
 
14
14
  const content: ComponentFunction<PopoverStyleProps> = ({ elevation }, ...etc) =>
15
15
  mx(
16
- 'dx-popover-surface border border-separator rounded-sm',
16
+ 'dx-popover-surface overflow-hidden border border-separator rounded-sm',
17
17
  surfaceShadow({ elevation: 'positioned' }),
18
18
  surfaceZIndex({ elevation, level: 'menu' }),
19
19
  'dx-focus-ring',
@@ -21,8 +21,8 @@ import { Slot } from '@radix-ui/react-slot';
21
21
  import { useControllableState } from '@radix-ui/react-use-controllable-state';
22
22
  import { hideOthers } from 'aria-hidden';
23
23
  import React, {
24
- type ComponentPropsWithRef,
25
24
  type ComponentPropsWithoutRef,
25
+ type ComponentPropsWithRef,
26
26
  type ComponentRef,
27
27
  type FC,
28
28
  type ReactNode,
@@ -36,7 +36,7 @@ import React, {
36
36
  } from 'react';
37
37
  import { RemoveScroll } from 'react-remove-scroll';
38
38
 
39
- import { useSafeCollisionPadding, useElevationContext, useThemeContext } from '../../hooks';
39
+ import { useElevationContext, useSafeCollisionPadding, useThemeContext } from '../../hooks';
40
40
  import { type ThemedClassName } from '../../util';
41
41
 
42
42
  //
@@ -611,14 +611,14 @@ export const Popover = {
611
611
  export { createPopoverScope };
612
612
 
613
613
  export type {
614
- PopoverRootProps,
615
614
  PopoverAnchorProps,
616
- PopoverTriggerProps,
617
- PopoverVirtualTriggerProps,
618
- PopoverPortalProps,
619
- PopoverContentProps,
620
- PopoverCloseProps,
621
615
  PopoverArrowProps,
622
- PopoverViewportProps,
616
+ PopoverCloseProps,
623
617
  PopoverContentInteractOutsideEvent,
618
+ PopoverContentProps,
619
+ PopoverPortalProps,
620
+ PopoverRootProps,
621
+ PopoverTriggerProps,
622
+ PopoverViewportProps,
623
+ PopoverVirtualTriggerProps,
624
624
  };
@@ -24,6 +24,8 @@ type ScrollAreaContextType = {
24
24
  orientation: AllowedAxis;
25
25
  /** Hide scrollbars when not scrolling. */
26
26
  autoHide: boolean;
27
+ /** Show scrollbars. */
28
+ scrollbars?: boolean;
27
29
  /** Apply padding to opposite side of scrollbar. */
28
30
  centered?: boolean;
29
31
  /** Apply padding. */
@@ -54,6 +56,7 @@ const ScrollAreaRoot = slottable<HTMLDivElement, ScrollAreaRootProps>(
54
56
  asChild,
55
57
  orientation = 'vertical',
56
58
  autoHide = true,
59
+ scrollbars = true,
57
60
  centered = false,
58
61
  padding = false,
59
62
  thin = false,
@@ -66,8 +69,8 @@ const ScrollAreaRoot = slottable<HTMLDivElement, ScrollAreaRootProps>(
66
69
  const { className, ...rest } = composableProps(props);
67
70
  const Comp = asChild ? Slot : Primitive.div;
68
71
  const options = useMemo(
69
- () => ({ orientation, autoHide, centered, padding, thin, snap }),
70
- [orientation, autoHide, centered, padding, thin, snap],
72
+ () => ({ orientation, autoHide, scrollbars, centered, padding, thin, snap }),
73
+ [orientation, autoHide, scrollbars, centered, padding, thin, snap],
71
74
  );
72
75
 
73
76
  return (
@@ -103,8 +106,8 @@ const ScrollAreaViewport = slottable<HTMLDivElement>(({ children, asChild, ...pr
103
106
  {...restWithoutStyle}
104
107
  style={
105
108
  {
106
- '--scroll-width': `${density.size}px`,
107
- '--scroll-padding': `${density.padding}px`,
109
+ '--scroll-width': options.scrollbars ? `${density.size}px` : '0px',
110
+ '--scroll-padding': options.scrollbars ? `${density.padding}px` : '0px',
108
111
  ...style,
109
112
  } as CSSProperties
110
113
  }
@@ -13,9 +13,9 @@ import { Panel } from '../Panel';
13
13
  import { Toolbar } from '../Toolbar';
14
14
  import { ScrollContainer, type ScrollContainerRootProps, type ScrollController } from './ScrollContainer';
15
15
 
16
- type DefaultStoryProps = ScrollContainerRootProps & { running?: boolean; initialLines?: number };
16
+ type StoryArgs = ScrollContainerRootProps & { running?: boolean; initialLines?: number };
17
17
 
18
- const DefaultStory = ({ initialLines = 0, running: runningProp, ...props }: DefaultStoryProps) => {
18
+ const DefaultStory = ({ initialLines = 0, running: runningProp, ...props }: StoryArgs) => {
19
19
  const [lines, setLines] = useState<string[]>([]);
20
20
  const [running, setRunning] = useState(runningProp);
21
21
  const scroller = useRef<ScrollController>(null);
@@ -339,9 +339,9 @@ export const ScrollContainer = {
339
339
  };
340
340
 
341
341
  export type {
342
- ScrollContainerRootProps,
343
342
  ScrollContainerContentProps,
344
- ScrollContainerViewportProps,
345
343
  ScrollContainerFadeProps,
344
+ ScrollContainerRootProps,
346
345
  ScrollContainerScrollDownButtonProps,
346
+ ScrollContainerViewportProps,
347
347
  };
@@ -15,9 +15,9 @@ random.seed(1234);
15
15
 
16
16
  type ItemProps = { id: string; text: string };
17
17
 
18
- type DefaultStoryProps = { items: ItemProps[] };
18
+ type StoryArgs = { items: ItemProps[] };
19
19
 
20
- const DefaultStory = ({ items = [] }: DefaultStoryProps) => {
20
+ const DefaultStory = ({ items = [] }: StoryArgs) => {
21
21
  const [value, setValue] = useState<string>();
22
22
  return (
23
23
  <Select.Root value={value} onValueChange={setValue}>
@@ -20,7 +20,7 @@ const content: ComponentFunction<SelectStyleProps> = ({ elevation }, ...etc) =>
20
20
  };
21
21
 
22
22
  const triggerButton: ComponentFunction<SelectStyleProps> = (_props, ...etc) =>
23
- mx('grid grid-cols-[1fr_auto] [&>span]:text-left', ...etc);
23
+ mx('bg-input-surface grid grid-cols-[1fr_auto] [&>span]:text-left', ...etc);
24
24
 
25
25
  const viewport: ComponentFunction<SelectStyleProps> = (_props, ...etc) => mx(...etc);
26
26
 
@@ -5,7 +5,7 @@
5
5
  import * as SelectPrimitive from '@radix-ui/react-select';
6
6
  import React, { forwardRef } from 'react';
7
7
 
8
- import { useSafeCollisionPadding, useElevationContext, useThemeContext } from '../../hooks';
8
+ import { useElevationContext, useSafeCollisionPadding, useThemeContext } from '../../hooks';
9
9
  import { type ThemedClassName } from '../../util';
10
10
  import { Button, type ButtonProps } from '../Button';
11
11
  import { Icon } from '../Icon';
@@ -222,22 +222,22 @@ export const Select = {
222
222
  };
223
223
 
224
224
  export type {
225
- SelectRootProps,
226
- SelectTriggerProps,
227
- SelectTriggerButtonProps,
228
- SelectValueProps,
229
- SelectIconProps,
230
- SelectPortalProps,
225
+ SelectArrowProps,
231
226
  SelectContentProps,
232
- SelectScrollUpButtonProps,
233
- SelectScrollDownButtonProps,
234
- SelectViewportProps,
227
+ SelectGroupProps,
228
+ SelectIconProps,
229
+ SelectItemIndicatorProps,
235
230
  SelectItemProps,
236
231
  SelectItemTextProps,
237
- SelectItemIndicatorProps,
238
- SelectOptionProps,
239
- SelectGroupProps,
240
232
  SelectLabelProps,
233
+ SelectOptionProps,
234
+ SelectPortalProps,
235
+ SelectRootProps,
236
+ SelectScrollDownButtonProps,
237
+ SelectScrollUpButtonProps,
241
238
  SelectSeparatorProps,
242
- SelectArrowProps,
239
+ SelectTriggerButtonProps,
240
+ SelectTriggerProps,
241
+ SelectValueProps,
242
+ SelectViewportProps,
243
243
  };
@@ -1,6 +1,7 @@
1
1
  //
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
+
4
5
  import * as SeparatorPrimitive from '@radix-ui/react-separator';
5
6
  import React, { forwardRef } from 'react';
6
7
 
@@ -9,7 +9,7 @@ import { withLayout, withTheme } from '../../testing';
9
9
  import { Panel } from '../Panel';
10
10
  import { ScrollArea } from '../ScrollArea';
11
11
  import { Toolbar } from '../Toolbar';
12
- import { Splitter, type SplitterRootProps } from './Splitter';
12
+ import { Splitter, type SplitterMode, type SplitterRootProps } from './Splitter';
13
13
 
14
14
  const PanelContent = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<'div'> & { label: string }>(
15
15
  ({ label, ...props }, forwardedRef) => (
@@ -32,29 +32,44 @@ const PanelContent = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<'div'>
32
32
  ),
33
33
  );
34
34
 
35
- const DefaultStory = (props: SplitterRootProps) => {
36
- const [mode, setMode] = useState(props.mode ?? 'split');
37
- const [ratio, setRatio] = useState(props.ratio ?? 0.5);
35
+ const Panes = () => (
36
+ <>
37
+ <Splitter.Panel position='start'>
38
+ <PanelContent label='A' />
39
+ </Splitter.Panel>
40
+ <Splitter.Handle />
41
+ <Splitter.Panel position='end'>
42
+ <PanelContent label='B' />
43
+ </Splitter.Panel>
44
+ </>
45
+ );
46
+
47
+ // Renders the splitter with no surrounding chrome (Panel.Root keeps the height chain without a toolbar).
48
+ const BasicStory = (args: SplitterRootProps) => (
49
+ <Panel.Root>
50
+ <Panel.Content asChild>
51
+ <Splitter.Root {...args}>
52
+ <Panes />
53
+ </Splitter.Root>
54
+ </Panel.Content>
55
+ </Panel.Root>
56
+ );
38
57
 
58
+ // Toolbar drives the animated collapse via `mode`.
59
+ const ToolbarStory = (args: SplitterRootProps) => {
60
+ const [mode, setMode] = useState<SplitterMode>(args.mode ?? 'split');
39
61
  return (
40
62
  <Panel.Root>
41
63
  <Panel.Toolbar asChild>
42
64
  <Toolbar.Root>
43
- <Toolbar.Button onClick={() => setMode('top')}>A</Toolbar.Button>
65
+ <Toolbar.Button onClick={() => setMode('start')}>A</Toolbar.Button>
44
66
  <Toolbar.Button onClick={() => setMode('split')}>A+B</Toolbar.Button>
45
- <Toolbar.Button onClick={() => setMode('bottom')}>B</Toolbar.Button>
46
- <Toolbar.Separator />
47
- <Toolbar.Button onClick={() => setRatio((r) => 1 - r)}>Toggle</Toolbar.Button>
67
+ <Toolbar.Button onClick={() => setMode('end')}>B</Toolbar.Button>
48
68
  </Toolbar.Root>
49
69
  </Panel.Toolbar>
50
70
  <Panel.Content asChild>
51
- <Splitter.Root mode={mode} ratio={ratio}>
52
- <Splitter.Panel asChild position='top'>
53
- <PanelContent label='A' />
54
- </Splitter.Panel>
55
- <Splitter.Panel asChild position='bottom'>
56
- <PanelContent label='B' />
57
- </Splitter.Panel>
71
+ <Splitter.Root {...args} mode={mode}>
72
+ <Panes />
58
73
  </Splitter.Root>
59
74
  </Panel.Content>
60
75
  </Panel.Root>
@@ -64,8 +79,8 @@ const DefaultStory = (props: SplitterRootProps) => {
64
79
  const meta: Meta<SplitterRootProps> = {
65
80
  title: 'ui/react-ui-core/components/Splitter',
66
81
  component: Splitter.Root,
67
- render: DefaultStory,
68
- decorators: [withTheme(), withLayout({ layout: 'column' })],
82
+ render: BasicStory,
83
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
69
84
  parameters: {
70
85
  layout: 'fullscreen',
71
86
  },
@@ -75,9 +90,58 @@ export default meta;
75
90
 
76
91
  type Story = StoryObj<SplitterRootProps>;
77
92
 
78
- export const Default: Story = {
93
+ export const VerticalStart: Story = {
94
+ args: {
95
+ orientation: 'vertical',
96
+ anchor: 'start',
97
+ resizable: true,
98
+ defaultSize: 20,
99
+ minSize: 6,
100
+ },
101
+ };
102
+
103
+ export const VerticalEnd: Story = {
104
+ args: {
105
+ orientation: 'vertical',
106
+ anchor: 'end',
107
+ resizable: true,
108
+ defaultSize: 20,
109
+ minSize: 6,
110
+ },
111
+ };
112
+
113
+ export const VerticalAnimated: Story = {
114
+ render: ToolbarStory,
115
+ args: {
116
+ orientation: 'vertical',
117
+ transition: 250,
118
+ },
119
+ };
120
+
121
+ export const HorizontalStart: Story = {
122
+ args: {
123
+ orientation: 'horizontal',
124
+ anchor: 'start',
125
+ resizable: true,
126
+ defaultSize: 30,
127
+ minSize: 6,
128
+ },
129
+ };
130
+
131
+ export const HorizontalEnd: Story = {
132
+ args: {
133
+ orientation: 'horizontal',
134
+ anchor: 'end',
135
+ resizable: true,
136
+ defaultSize: 30,
137
+ minSize: 6,
138
+ },
139
+ };
140
+
141
+ export const HorizontalAnimated: Story = {
142
+ render: ToolbarStory,
79
143
  args: {
80
- mode: 'split',
81
- ratio: 0.4,
144
+ orientation: 'horizontal',
145
+ transition: 250,
82
146
  },
83
147
  };
@@ -5,14 +5,31 @@
5
5
  import { mx } from '@dxos/ui-theme';
6
6
  import { type ComponentFunction, type Theme } from '@dxos/ui-types';
7
7
 
8
- export type SplitterStyleProps = {};
8
+ export type SplitterStyleProps = {
9
+ orientation?: 'horizontal' | 'vertical';
10
+ };
9
11
 
10
- const root: ComponentFunction<SplitterStyleProps> = (_props, ...etc) => mx('relative h-full overflow-hidden', ...etc);
12
+ const root: ComponentFunction<SplitterStyleProps> = ({ orientation }, ...etc) =>
13
+ mx('relative flex w-full h-full overflow-hidden', orientation === 'vertical' ? 'flex-col' : 'flex-row', ...etc);
11
14
 
12
15
  const panel: ComponentFunction<SplitterStyleProps> = (_props, ...etc) =>
13
- mx('absolute inset-x-0 flex flex-col overflow-hidden', ...etc);
16
+ mx('relative grid overflow-hidden min-w-0 min-h-0', ...etc);
17
+
18
+ // A 7px grab area, absolutely positioned and centered on the split point (the component sets the offset),
19
+ // containing a persistent 1px divider line that brightens on hover/focus/active.
20
+ const handle: ComponentFunction<SplitterStyleProps> = ({ orientation }, ...etc) =>
21
+ mx(
22
+ 'group absolute z-10 touch-none select-none',
23
+ 'before:absolute before:block before:bg-separator',
24
+ 'before:transition-colors before:duration-100 before:ease-in-out hover:before:bg-focus-ring-subtle focus-visible:before:bg-focus-ring-subtle active:before:bg-focus-ring-subtle',
25
+ orientation === 'vertical'
26
+ ? 'h-[7px] cursor-row-resize before:inset-x-0 before:top-1/2 before:-translate-y-1/2 before:h-px'
27
+ : 'w-[7px] cursor-col-resize before:inset-y-0 before:left-1/2 before:-translate-x-1/2 before:w-px',
28
+ ...etc,
29
+ );
14
30
 
15
31
  export const splitterTheme: Theme<SplitterStyleProps> = {
16
32
  root,
17
33
  panel,
34
+ handle,
18
35
  };