@dxos/react-ui 0.9.1-main.c7dcc2e112 → 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 (239) hide show
  1. package/dist/lib/browser/{chunk-HFJYTGHU.mjs → chunk-CMHHVHX3.mjs} +4 -1
  2. package/dist/lib/browser/chunk-CMHHVHX3.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-F3PLXTDA.mjs → chunk-GTHV4WYK.mjs} +123 -232
  4. package/dist/lib/browser/chunk-GTHV4WYK.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +1069 -976
  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-LLVUYLAM.mjs → chunk-3VSKWNCQ.mjs} +123 -232
  12. package/dist/lib/node-esm/chunk-3VSKWNCQ.mjs.map +7 -0
  13. package/dist/lib/node-esm/{chunk-OJYUPUCY.mjs → chunk-P4KFQGJI.mjs} +4 -1
  14. package/dist/lib/node-esm/chunk-P4KFQGJI.mjs.map +7 -0
  15. package/dist/lib/node-esm/index.mjs +1069 -976
  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 +2 -2
  26. package/dist/types/src/components/Button/Button.d.ts.map +1 -1
  27. package/dist/types/src/components/Button/IconButton.stories.d.ts +3 -0
  28. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
  29. package/dist/types/src/components/Button/MicButton.d.ts +24 -0
  30. package/dist/types/src/components/Button/MicButton.d.ts.map +1 -0
  31. package/dist/types/src/components/Button/MicButton.stories.d.ts +57 -0
  32. package/dist/types/src/components/Button/MicButton.stories.d.ts.map +1 -0
  33. package/dist/types/src/components/Button/SystemIconButton.d.ts +15 -2
  34. package/dist/types/src/components/Button/SystemIconButton.d.ts.map +1 -1
  35. package/dist/types/src/components/Button/SystemIconButton.stories.d.ts +51 -0
  36. package/dist/types/src/components/Button/SystemIconButton.stories.d.ts.map +1 -0
  37. package/dist/types/src/components/Button/ToggleGroup.d.ts +2 -2
  38. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -1
  39. package/dist/types/src/components/Button/index.d.ts +1 -0
  40. package/dist/types/src/components/Button/index.d.ts.map +1 -1
  41. package/dist/types/src/components/Calendar/Calendar.d.ts.map +1 -1
  42. package/dist/types/src/components/Calendar/Calendar.theme.d.ts.map +1 -1
  43. package/dist/types/src/components/Card/Card.d.ts +8 -8
  44. package/dist/types/src/components/Card/Card.d.ts.map +1 -1
  45. package/dist/types/src/components/Card/Card.stories.d.ts +2 -2
  46. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -1
  47. package/dist/types/src/components/Carousel/Carousel.d.ts +29 -6
  48. package/dist/types/src/components/Carousel/Carousel.d.ts.map +1 -1
  49. package/dist/types/src/components/Carousel/Carousel.stories.d.ts +48 -2
  50. package/dist/types/src/components/Carousel/Carousel.stories.d.ts.map +1 -1
  51. package/dist/types/src/components/Column/Column.d.ts +2 -2
  52. package/dist/types/src/components/Column/Column.d.ts.map +1 -1
  53. package/dist/types/src/components/Dialog/AlertDialog.d.ts +2 -2
  54. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
  55. package/dist/types/src/components/Dialog/Dialog.d.ts +1 -1
  56. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  57. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +2 -2
  58. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
  59. package/dist/types/src/components/Icon/Icon.stories.d.ts +5 -0
  60. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -1
  61. package/dist/types/src/components/Input/Input.d.ts +4 -1
  62. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  63. package/dist/types/src/components/Input/Input.stories.d.ts +3 -3
  64. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  65. package/dist/types/src/components/Input/Input.theme.d.ts +10 -10
  66. package/dist/types/src/components/Input/Input.theme.d.ts.map +1 -1
  67. package/dist/types/src/components/Input/SegmentedInput.d.ts +8 -8
  68. package/dist/types/src/components/Input/SegmentedInput.d.ts.map +1 -1
  69. package/dist/types/src/components/Input/index.d.ts +0 -1
  70. package/dist/types/src/components/Input/index.d.ts.map +1 -1
  71. package/dist/types/src/components/Main/Main.d.ts +3 -3
  72. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  73. package/dist/types/src/components/Menu/ContextMenu.d.ts +1 -1
  74. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
  75. package/dist/types/src/components/Menu/DropdownMenu.d.ts +2 -2
  76. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
  77. package/dist/types/src/components/Message/Message.d.ts +1 -1
  78. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  79. package/dist/types/src/components/Message/Message.stories.d.ts +2 -2
  80. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  81. package/dist/types/src/components/Panel/Panel.d.ts +1 -1
  82. package/dist/types/src/components/Panel/Panel.d.ts.map +1 -1
  83. package/dist/types/src/components/Panel/Panel.theme.d.ts.map +1 -1
  84. package/dist/types/src/components/Popover/Popover.d.ts +2 -2
  85. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  86. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +2 -0
  87. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  88. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +1 -0
  89. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  90. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +1 -1
  91. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  92. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +2 -2
  93. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
  94. package/dist/types/src/components/Select/Select.d.ts +1 -1
  95. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  96. package/dist/types/src/components/Select/Select.stories.d.ts +2 -2
  97. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  98. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  99. package/dist/types/src/components/Splitter/Splitter.d.ts +30 -16
  100. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -1
  101. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +6 -1
  102. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -1
  103. package/dist/types/src/components/Splitter/Splitter.theme.d.ts +3 -1
  104. package/dist/types/src/components/Splitter/Splitter.theme.d.ts.map +1 -1
  105. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  106. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  107. package/dist/types/src/components/Tag/Tag.theme.d.ts +1 -1
  108. package/dist/types/src/components/Tag/Tag.theme.d.ts.map +1 -1
  109. package/dist/types/src/components/Toast/Toast.d.ts +1 -1
  110. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  111. package/dist/types/src/components/Toast/Toast.theme.d.ts.map +1 -1
  112. package/dist/types/src/components/Toolbar/Toolbar.d.ts +1 -1
  113. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  114. package/dist/types/src/components/Tooltip/Tooltip.d.ts +3 -3
  115. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  116. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +2 -2
  117. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  118. package/dist/types/src/components/index.d.ts +0 -1
  119. package/dist/types/src/components/index.d.ts.map +1 -1
  120. package/dist/types/src/index.d.ts +1 -1
  121. package/dist/types/src/index.d.ts.map +1 -1
  122. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts +1 -8
  123. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  124. package/dist/types/src/theme/defaultTheme.d.ts.map +1 -1
  125. package/dist/types/src/theme/index.d.ts +0 -2
  126. package/dist/types/src/theme/index.d.ts.map +1 -1
  127. package/dist/types/src/translations.d.ts +3 -0
  128. package/dist/types/src/translations.d.ts.map +1 -1
  129. package/dist/types/src/util/slots.d.ts +1 -1
  130. package/dist/types/src/util/slots.d.ts.map +1 -1
  131. package/dist/types/tsconfig.tsbuildinfo +1 -1
  132. package/package.json +22 -21
  133. package/src/components/Avatars/Avatar.stories.tsx +2 -2
  134. package/src/components/Avatars/Avatar.theme.ts +1 -1
  135. package/src/components/Avatars/Avatar.tsx +3 -3
  136. package/src/components/Breadcrumb/Breadcrumb.tsx +6 -6
  137. package/src/components/Button/Button.tsx +2 -2
  138. package/src/components/Button/MicButton.stories.tsx +60 -0
  139. package/src/components/Button/MicButton.tsx +117 -0
  140. package/src/components/Button/SystemIconButton.stories.tsx +91 -0
  141. package/src/components/Button/SystemIconButton.tsx +113 -2
  142. package/src/components/Button/ToggleGroup.tsx +2 -2
  143. package/src/components/Button/index.ts +1 -0
  144. package/src/components/Calendar/Calendar.theme.ts +2 -0
  145. package/src/components/Calendar/Calendar.tsx +3 -3
  146. package/src/components/Card/Card.stories.tsx +2 -2
  147. package/src/components/Card/Card.tsx +11 -11
  148. package/src/components/Carousel/Carousel.stories.tsx +42 -18
  149. package/src/components/Carousel/Carousel.tsx +169 -33
  150. package/src/components/Column/Column.tsx +4 -7
  151. package/src/components/Dialog/AlertDialog.stories.tsx +2 -2
  152. package/src/components/Dialog/AlertDialog.tsx +13 -13
  153. package/src/components/Dialog/Dialog.stories.tsx +3 -4
  154. package/src/components/Dialog/Dialog.theme.ts +1 -1
  155. package/src/components/Dialog/Dialog.tsx +12 -12
  156. package/src/components/Icon/Icon.stories.tsx +23 -0
  157. package/src/components/Icon/Icon.theme.ts +1 -1
  158. package/src/components/Input/Input.stories.tsx +13 -5
  159. package/src/components/Input/Input.theme.ts +17 -39
  160. package/src/components/Input/Input.tsx +30 -13
  161. package/src/components/Input/SegmentedInput.tsx +50 -41
  162. package/src/components/Input/index.ts +0 -1
  163. package/src/components/Main/Main.tsx +3 -3
  164. package/src/components/MediaPlayer/MediaPlayer.tsx +4 -4
  165. package/src/components/Menu/ContextMenu.tsx +8 -8
  166. package/src/components/Menu/DropdownMenu.tsx +12 -13
  167. package/src/components/Message/Message.stories.tsx +2 -2
  168. package/src/components/Message/Message.theme.ts +1 -1
  169. package/src/components/Message/Message.tsx +2 -2
  170. package/src/components/Panel/Panel.theme.ts +2 -1
  171. package/src/components/Panel/Panel.tsx +1 -1
  172. package/src/components/Popover/Popover.tsx +9 -9
  173. package/src/components/ScrollArea/ScrollArea.tsx +7 -4
  174. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +2 -2
  175. package/src/components/ScrollContainer/ScrollContainer.tsx +2 -2
  176. package/src/components/Select/Select.stories.tsx +2 -2
  177. package/src/components/Select/Select.theme.ts +1 -1
  178. package/src/components/Select/Select.tsx +14 -14
  179. package/src/components/Separator/Separator.tsx +1 -0
  180. package/src/components/Splitter/Splitter.stories.tsx +84 -20
  181. package/src/components/Splitter/Splitter.theme.ts +20 -3
  182. package/src/components/Splitter/Splitter.tsx +320 -47
  183. package/src/components/Tag/Tag.stories.tsx +1 -1
  184. package/src/components/Tag/Tag.theme.ts +1 -1
  185. package/src/components/Tag/Tag.tsx +3 -5
  186. package/src/components/Toast/Toast.theme.ts +3 -2
  187. package/src/components/Toast/Toast.tsx +5 -5
  188. package/src/components/Toolbar/Toolbar.tsx +10 -10
  189. package/src/components/Tooltip/Tooltip.stories.tsx +2 -2
  190. package/src/components/Tooltip/Tooltip.tsx +3 -3
  191. package/src/components/index.ts +0 -1
  192. package/src/exemplars/tabster.stories.tsx +1 -1
  193. package/src/index.ts +1 -1
  194. package/src/primitives/ThemeProvider/TranslationsProvider.tsx +10 -30
  195. package/src/testing/decorators/withLayout.tsx +4 -4
  196. package/src/theme/defaultTheme.ts +0 -4
  197. package/src/theme/index.ts +0 -2
  198. package/src/translations.ts +8 -0
  199. package/src/util/slots.ts +5 -5
  200. package/dist/lib/browser/chunk-F3PLXTDA.mjs.map +0 -7
  201. package/dist/lib/browser/chunk-HFJYTGHU.mjs.map +0 -7
  202. package/dist/lib/node-esm/chunk-LLVUYLAM.mjs.map +0 -7
  203. package/dist/lib/node-esm/chunk-OJYUPUCY.mjs.map +0 -7
  204. package/dist/types/src/components/Input/constants.d.ts +0 -5
  205. package/dist/types/src/components/Input/constants.d.ts.map +0 -1
  206. package/dist/types/src/components/List/List.d.ts +0 -29
  207. package/dist/types/src/components/List/List.d.ts.map +0 -1
  208. package/dist/types/src/components/List/List.stories.d.ts +0 -16
  209. package/dist/types/src/components/List/List.stories.d.ts.map +0 -1
  210. package/dist/types/src/components/List/List.theme.d.ts +0 -7
  211. package/dist/types/src/components/List/List.theme.d.ts.map +0 -1
  212. package/dist/types/src/components/List/ListDropIndicator.d.ts +0 -13
  213. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +0 -1
  214. package/dist/types/src/components/List/Tree.d.ts +0 -23
  215. package/dist/types/src/components/List/Tree.d.ts.map +0 -1
  216. package/dist/types/src/components/List/Tree.stories.d.ts +0 -15
  217. package/dist/types/src/components/List/Tree.stories.d.ts.map +0 -1
  218. package/dist/types/src/components/List/TreeDropIndicator.d.ts +0 -8
  219. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +0 -1
  220. package/dist/types/src/components/List/Treegrid.d.ts +0 -33
  221. package/dist/types/src/components/List/Treegrid.d.ts.map +0 -1
  222. package/dist/types/src/components/List/Treegrid.stories.d.ts +0 -12
  223. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +0 -1
  224. package/dist/types/src/components/List/Treegrid.theme.d.ts +0 -7
  225. package/dist/types/src/components/List/Treegrid.theme.d.ts.map +0 -1
  226. package/dist/types/src/components/List/index.d.ts +0 -4
  227. package/dist/types/src/components/List/index.d.ts.map +0 -1
  228. package/src/components/Input/constants.ts +0 -8
  229. package/src/components/List/List.stories.tsx +0 -234
  230. package/src/components/List/List.theme.ts +0 -47
  231. package/src/components/List/List.tsx +0 -171
  232. package/src/components/List/ListDropIndicator.tsx +0 -69
  233. package/src/components/List/Tree.stories.tsx +0 -87
  234. package/src/components/List/Tree.tsx +0 -74
  235. package/src/components/List/TreeDropIndicator.tsx +0 -70
  236. package/src/components/List/Treegrid.stories.tsx +0 -156
  237. package/src/components/List/Treegrid.theme.ts +0 -35
  238. package/src/components/List/Treegrid.tsx +0 -187
  239. package/src/components/List/index.ts +0 -7
@@ -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 };
@@ -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
  };