@dxos/react-ui 0.8.4-main.d05673bc65 → 0.8.4-main.dfabb4ec29

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 (290) hide show
  1. package/dist/lib/browser/{chunk-2FKSMWNY.mjs → chunk-BDBC6H6V.mjs} +79 -5
  2. package/dist/lib/browser/chunk-BDBC6H6V.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +949 -758
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing/index.mjs +30 -24
  7. package/dist/lib/browser/testing/index.mjs.map +3 -3
  8. package/dist/lib/browser/translations.mjs +18 -0
  9. package/dist/lib/browser/translations.mjs.map +7 -0
  10. package/dist/lib/node-esm/{chunk-ZNBLTSHI.mjs → chunk-3JSJK2ZY.mjs} +79 -5
  11. package/dist/lib/node-esm/chunk-3JSJK2ZY.mjs.map +7 -0
  12. package/dist/lib/node-esm/index.mjs +949 -758
  13. package/dist/lib/node-esm/index.mjs.map +4 -4
  14. package/dist/lib/node-esm/meta.json +1 -1
  15. package/dist/lib/node-esm/testing/index.mjs +30 -24
  16. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  17. package/dist/lib/node-esm/translations.mjs +20 -0
  18. package/dist/lib/node-esm/translations.mjs.map +7 -0
  19. package/dist/types/src/components/Avatars/Avatar.d.ts +1 -1
  20. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  21. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  22. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  23. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  24. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.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/Button.stories.d.ts +1 -1
  28. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -1
  29. package/dist/types/src/components/Button/IconButton.d.ts +1 -0
  30. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
  31. package/dist/types/src/components/Button/IconButton.stories.d.ts +3 -0
  32. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
  33. package/dist/types/src/components/Button/Toggle.d.ts +2 -2
  34. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -1
  35. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -1
  36. package/dist/types/src/components/Button/ToggleGroup.d.ts +6 -6
  37. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -1
  38. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +2 -2
  39. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -1
  40. package/dist/types/src/components/Card/Card.d.ts +68 -51
  41. package/dist/types/src/components/Card/Card.d.ts.map +1 -1
  42. package/dist/types/src/components/Card/Card.stories.d.ts +2 -2
  43. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -1
  44. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  45. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  46. package/dist/types/src/components/Clipboard/index.d.ts +10 -1
  47. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  48. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  49. package/dist/types/src/components/Dialog/AlertDialog.d.ts +42 -31
  50. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
  51. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -1
  52. package/dist/types/src/components/Dialog/Dialog.d.ts +47 -30
  53. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  54. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +3 -2
  55. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
  56. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  57. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -1
  58. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -1
  59. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +14 -3
  60. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -1
  61. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -1
  62. package/dist/types/src/components/Focus/Focus.d.ts +36 -0
  63. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -0
  64. package/dist/types/src/components/Focus/Focus.stories.d.ts +9 -0
  65. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -0
  66. package/dist/types/src/components/Focus/index.d.ts +2 -0
  67. package/dist/types/src/components/Focus/index.d.ts.map +1 -0
  68. package/dist/types/src/components/Icon/Icon.d.ts +4 -0
  69. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  70. package/dist/types/src/components/Icon/Icon.stories.d.ts +11 -3
  71. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -1
  72. package/dist/types/src/components/Image/Image.d.ts +2 -1
  73. package/dist/types/src/components/Image/Image.d.ts.map +1 -1
  74. package/dist/types/src/components/Image/Image.stories.d.ts +3 -2
  75. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -1
  76. package/dist/types/src/components/Input/Input.d.ts +14 -17
  77. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  78. package/dist/types/src/components/Input/Input.stories.d.ts +3 -3
  79. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  80. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  81. package/dist/types/src/components/List/List.d.ts +5 -3
  82. package/dist/types/src/components/List/List.d.ts.map +1 -1
  83. package/dist/types/src/components/List/List.stories.d.ts +3 -1
  84. package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
  85. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -1
  86. package/dist/types/src/components/List/Tree.d.ts +2 -2
  87. package/dist/types/src/components/List/Tree.d.ts.map +1 -1
  88. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -1
  89. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -1
  90. package/dist/types/src/components/List/Treegrid.d.ts +5 -9
  91. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
  92. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -1
  93. package/dist/types/src/components/Main/Main.d.ts +7 -3
  94. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  95. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  96. package/dist/types/src/components/Main/useSwipeToDismiss.d.ts.map +1 -1
  97. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
  98. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -1
  99. package/dist/types/src/components/Menu/DropdownMenu.d.ts +58 -49
  100. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
  101. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +14 -1
  102. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -1
  103. package/dist/types/src/components/Message/Message.d.ts +1 -1
  104. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  105. package/dist/types/src/components/Message/Message.stories.d.ts +2 -2
  106. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  107. package/dist/types/src/components/Popover/Popover.d.ts +38 -22
  108. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  109. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  110. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +12 -9
  111. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  112. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +18 -5
  113. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  114. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +42 -13
  115. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  116. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +5 -6
  117. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
  118. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  119. package/dist/types/src/components/Select/Select.stories.d.ts +2 -2
  120. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  121. package/dist/types/src/components/Separator/Separator.d.ts +3 -3
  122. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  123. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -1
  124. package/dist/types/src/components/Splitter/Splitter.d.ts +19 -17
  125. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -1
  126. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -1
  127. package/dist/types/src/components/Status/Status.d.ts +3 -4
  128. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  129. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  130. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  131. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +1 -1
  132. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  133. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts +1 -1
  134. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -1
  135. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +54 -55
  136. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  137. package/dist/types/src/components/ThemeProvider/index.d.ts +1 -1
  138. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  139. package/dist/types/src/components/Toast/Toast.d.ts +16 -16
  140. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  141. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  142. package/dist/types/src/components/Toolbar/Toolbar.d.ts +11 -19
  143. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  144. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  145. package/dist/types/src/components/Tooltip/Tooltip.d.ts +10 -10
  146. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  147. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +2 -2
  148. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  149. package/dist/types/src/components/index.d.ts +1 -0
  150. package/dist/types/src/components/index.d.ts.map +1 -1
  151. package/dist/types/src/exemplars/generics.stories.d.ts +6 -5
  152. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -1
  153. package/dist/types/src/exemplars/slot.stories.d.ts +1 -0
  154. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -1
  155. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -1
  156. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -1
  157. package/dist/types/src/hooks/index.d.ts +1 -0
  158. package/dist/types/src/hooks/index.d.ts.map +1 -1
  159. package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
  160. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  161. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  162. package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
  163. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  164. package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -1
  165. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  166. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  167. package/dist/types/src/playground/Custom.stories.d.ts +1 -1
  168. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  169. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  170. package/dist/types/src/primitives/Column/Column.d.ts +21 -14
  171. package/dist/types/src/primitives/Column/Column.d.ts.map +1 -1
  172. package/dist/types/src/primitives/Column/Column.stories.d.ts +19 -0
  173. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -1
  174. package/dist/types/src/primitives/Container/Container.d.ts +4 -5
  175. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -1
  176. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -1
  177. package/dist/types/src/primitives/Flex/Flex.d.ts +5 -7
  178. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -1
  179. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -1
  180. package/dist/types/src/primitives/Grid/Grid.d.ts +3 -8
  181. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -1
  182. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -1
  183. package/dist/types/src/primitives/Panel/Panel.d.ts +24 -15
  184. package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -1
  185. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -1
  186. package/dist/types/src/testing/Loading.d.ts.map +1 -1
  187. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
  188. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
  189. package/dist/types/src/testing/decorators/withTheme.d.ts +1 -1
  190. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  191. package/dist/types/src/translations.d.ts +3 -3
  192. package/dist/types/src/translations.d.ts.map +1 -1
  193. package/dist/types/src/util/usePx.d.ts.map +1 -1
  194. package/dist/types/tsconfig.tsbuildinfo +1 -1
  195. package/package.json +28 -25
  196. package/src/components/Avatars/Avatar.stories.tsx +2 -3
  197. package/src/components/Avatars/Avatar.tsx +1 -2
  198. package/src/components/Avatars/AvatarGroup.stories.tsx +0 -1
  199. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +1 -2
  200. package/src/components/Button/Button.stories.tsx +0 -1
  201. package/src/components/Button/Button.tsx +5 -13
  202. package/src/components/Button/IconButton.stories.tsx +6 -4
  203. package/src/components/Button/IconButton.tsx +3 -4
  204. package/src/components/Button/Toggle.stories.tsx +0 -1
  205. package/src/components/Button/Toggle.tsx +4 -4
  206. package/src/components/Button/ToggleGroup.stories.tsx +0 -1
  207. package/src/components/Button/ToggleGroup.tsx +12 -16
  208. package/src/components/Card/Card.stories.tsx +15 -15
  209. package/src/components/Card/Card.tsx +280 -115
  210. package/src/components/Clipboard/CopyButton.tsx +5 -6
  211. package/src/components/Dialog/AlertDialog.stories.tsx +5 -6
  212. package/src/components/Dialog/AlertDialog.tsx +67 -126
  213. package/src/components/Dialog/Dialog.stories.tsx +64 -9
  214. package/src/components/Dialog/Dialog.tsx +84 -88
  215. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +3 -8
  216. package/src/components/ErrorFallback/ErrorStack.tsx +36 -2
  217. package/src/components/Focus/AUDIT.md +43 -0
  218. package/src/components/Focus/Focus.stories.tsx +230 -0
  219. package/src/components/Focus/Focus.tsx +201 -0
  220. package/src/components/Focus/index.ts +5 -0
  221. package/src/components/Icon/Icon.stories.tsx +43 -13
  222. package/src/components/Icon/Icon.tsx +14 -3
  223. package/src/components/Image/Image.stories.tsx +3 -3
  224. package/src/components/Image/Image.tsx +31 -8
  225. package/src/components/Input/Input.stories.tsx +3 -4
  226. package/src/components/Input/Input.tsx +7 -7
  227. package/src/components/Link/Link.stories.tsx +0 -1
  228. package/src/components/List/List.stories.tsx +1 -2
  229. package/src/components/List/List.tsx +7 -6
  230. package/src/components/List/ListDropIndicator.tsx +0 -1
  231. package/src/components/List/Tree.stories.tsx +2 -3
  232. package/src/components/List/Tree.tsx +0 -1
  233. package/src/components/List/Treegrid.stories.tsx +26 -27
  234. package/src/components/List/Treegrid.tsx +14 -14
  235. package/src/components/Main/Main.stories.tsx +0 -1
  236. package/src/components/Main/Main.tsx +1 -2
  237. package/src/components/Menu/ContextMenu.stories.tsx +0 -1
  238. package/src/components/Menu/DropdownMenu.stories.tsx +0 -1
  239. package/src/components/Menu/DropdownMenu.tsx +48 -42
  240. package/src/components/Message/Message.stories.tsx +7 -8
  241. package/src/components/Message/Message.tsx +23 -10
  242. package/src/components/Popover/Popover.stories.tsx +4 -5
  243. package/src/components/Popover/Popover.tsx +42 -42
  244. package/src/components/ScrollArea/ScrollArea.stories.tsx +89 -30
  245. package/src/components/ScrollArea/ScrollArea.tsx +39 -23
  246. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +20 -18
  247. package/src/components/ScrollContainer/ScrollContainer.tsx +199 -92
  248. package/src/components/Select/Select.stories.tsx +5 -6
  249. package/src/components/Separator/Separator.tsx +4 -7
  250. package/src/components/Skeleton/Skeleton.stories.tsx +0 -1
  251. package/src/components/Splitter/Splitter.stories.tsx +29 -29
  252. package/src/components/Splitter/Splitter.tsx +35 -34
  253. package/src/components/Status/Status.stories.tsx +0 -1
  254. package/src/components/Status/Status.tsx +8 -5
  255. package/src/components/Tag/Tag.stories.tsx +0 -1
  256. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +0 -1
  257. package/src/components/ThemeProvider/ThemeProvider.tsx +5 -4
  258. package/src/components/ThemeProvider/index.ts +1 -1
  259. package/src/components/Toast/Toast.stories.tsx +0 -1
  260. package/src/components/Toast/Toast.tsx +16 -31
  261. package/src/components/Toolbar/Toolbar.stories.tsx +0 -1
  262. package/src/components/Toolbar/Toolbar.tsx +21 -35
  263. package/src/components/Tooltip/Tooltip.stories.tsx +7 -8
  264. package/src/components/Tooltip/Tooltip.tsx +15 -16
  265. package/src/components/index.ts +1 -0
  266. package/src/exemplars/generics.stories.tsx +7 -15
  267. package/src/exemplars/slot.stories.tsx +65 -57
  268. package/src/exemplars/tabster.stories.tsx +1 -1
  269. package/src/exemplars/virtualizer.stories.tsx +4 -5
  270. package/src/hooks/index.ts +1 -0
  271. package/src/hooks/useDensityContext.ts +2 -2
  272. package/src/playground/Custom.stories.tsx +6 -9
  273. package/src/primitives/Column/AUDIT.md +148 -0
  274. package/src/primitives/Column/Column.stories.tsx +122 -19
  275. package/src/primitives/Column/Column.tsx +73 -42
  276. package/src/primitives/Container/Container.stories.tsx +0 -1
  277. package/src/primitives/Container/Container.tsx +5 -8
  278. package/src/primitives/Flex/Flex.stories.tsx +0 -1
  279. package/src/primitives/Flex/Flex.tsx +10 -12
  280. package/src/primitives/Grid/Grid.stories.tsx +0 -1
  281. package/src/primitives/Grid/Grid.tsx +4 -9
  282. package/src/primitives/Panel/Panel.stories.tsx +9 -8
  283. package/src/primitives/Panel/Panel.tsx +64 -63
  284. package/src/testing/Loading.tsx +25 -4
  285. package/src/testing/decorators/withLayout.tsx +7 -17
  286. package/src/testing/decorators/withTheme.tsx +10 -7
  287. package/src/translations.ts +3 -3
  288. package/src/util/usePx.ts +1 -0
  289. package/dist/lib/browser/chunk-2FKSMWNY.mjs.map +0 -7
  290. package/dist/lib/node-esm/chunk-ZNBLTSHI.mjs.map +0 -7
@@ -24,7 +24,6 @@ import React, {
24
24
  type ComponentPropsWithRef,
25
25
  type ComponentPropsWithoutRef,
26
26
  type ComponentRef,
27
- type ElementRef,
28
27
  type FC,
29
28
  type ReactNode,
30
29
  type RefObject,
@@ -37,30 +36,31 @@ import React, {
37
36
  } from 'react';
38
37
  import { RemoveScroll } from 'react-remove-scroll';
39
38
 
40
- import { useElevationContext, useThemeContext } from '../../hooks';
41
- import { useSafeCollisionPadding } from '../../hooks/useSafeCollisionPadding';
39
+ import { useSafeCollisionPadding, useElevationContext, useThemeContext } from '../../hooks';
42
40
  import { type ThemedClassName } from '../../util';
43
41
 
44
42
  //
45
43
  // Context
46
44
  //
47
45
 
46
+ type ScopedProps<P> = P & { __scopePopover?: Scope };
47
+
48
48
  const POPOVER_NAME = 'Popover';
49
49
 
50
- type ScopedProps<P> = P & { __scopePopover?: Scope };
51
50
  const [createPopoverContext, createPopoverScope] = createContextScope(POPOVER_NAME, [createPopperScope]);
51
+
52
52
  const usePopperScope = createPopperScope();
53
53
 
54
54
  type PopoverContextValue = {
55
55
  triggerRef: RefObject<HTMLButtonElement>;
56
56
  contentId: string;
57
+ hasCustomAnchor: boolean;
58
+ modal: boolean;
57
59
  open: boolean;
58
60
  onOpenChange(open: boolean): void;
59
61
  onOpenToggle(): void;
60
- hasCustomAnchor: boolean;
61
62
  onCustomAnchorAdd(): void;
62
63
  onCustomAnchorRemove(): void;
63
- modal: boolean;
64
64
  };
65
65
 
66
66
  const [PopoverProvider, usePopoverContext] = createPopoverContext<PopoverContextValue>(POPOVER_NAME);
@@ -69,13 +69,13 @@ const [PopoverProvider, usePopoverContext] = createPopoverContext<PopoverContext
69
69
  // PopoverRoot
70
70
  //
71
71
 
72
- interface PopoverRootProps {
72
+ type PopoverRootProps = {
73
73
  children?: ReactNode;
74
74
  open?: boolean;
75
75
  defaultOpen?: boolean;
76
76
  onOpenChange?: (open: boolean) => void;
77
77
  modal?: boolean;
78
- }
78
+ };
79
79
 
80
80
  const PopoverRoot: FC<PopoverRootProps> = (props: ScopedProps<PopoverRootProps>) => {
81
81
  const { __scopePopover, children, open: openProp, defaultOpen, onOpenChange, modal = false } = props;
@@ -118,7 +118,7 @@ const ANCHOR_NAME = 'PopoverAnchor';
118
118
 
119
119
  type PopoverAnchorElement = ComponentRef<typeof PopperPrimitive.Anchor>;
120
120
  type PopperAnchorProps = ComponentPropsWithoutRef<typeof PopperPrimitive.Anchor>;
121
- interface PopoverAnchorProps extends PopperAnchorProps {}
121
+ type PopoverAnchorProps = PopperAnchorProps;
122
122
 
123
123
  const PopoverAnchor = forwardRef<PopoverAnchorElement, PopoverAnchorProps>(
124
124
  (props: ScopedProps<PopoverAnchorProps>, forwardedRef) => {
@@ -144,11 +144,11 @@ PopoverAnchor.displayName = ANCHOR_NAME;
144
144
 
145
145
  const TRIGGER_NAME = 'PopoverTrigger';
146
146
 
147
- type PopoverTriggerElement = ElementRef<typeof Primitive.button>;
147
+ type PopoverTriggerElement = ComponentRef<typeof Primitive.button>;
148
148
  type PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;
149
- interface PopoverTriggerProps extends PrimitiveButtonProps {
149
+ type PopoverTriggerProps = PrimitiveButtonProps & {
150
150
  asChild?: boolean;
151
- }
151
+ };
152
152
 
153
153
  const PopoverTrigger = forwardRef<PopoverTriggerElement, PopoverTriggerProps>(
154
154
  (props: ScopedProps<PopoverTriggerProps>, forwardedRef) => {
@@ -189,9 +189,9 @@ PopoverTrigger.displayName = TRIGGER_NAME;
189
189
 
190
190
  const VIRTUAL_TRIGGER_NAME = 'PopoverVirtualTrigger';
191
191
 
192
- interface PopoverVirtualTriggerProps {
192
+ type PopoverVirtualTriggerProps = {
193
193
  virtualRef: RefObject<PopoverTriggerElement | null>;
194
- }
194
+ };
195
195
 
196
196
  const PopoverVirtualTrigger = (props: ScopedProps<PopoverVirtualTriggerProps>) => {
197
197
  const { __scopePopover, virtualRef } = props;
@@ -219,7 +219,7 @@ const [PortalProvider, usePortalContext] = createPopoverContext<PortalContextVal
219
219
  });
220
220
 
221
221
  type PortalProps = ComponentPropsWithoutRef<typeof PortalPrimitive>;
222
- interface PopoverPortalProps {
222
+ type PopoverPortalProps = {
223
223
  children?: ReactNode;
224
224
  /**
225
225
  * Specify a container element to portal the content into.
@@ -230,9 +230,9 @@ interface PopoverPortalProps {
230
230
  * controlling animation with React animation libraries.
231
231
  */
232
232
  forceMount?: true;
233
- }
233
+ };
234
234
 
235
- const PopoverPortal: FC<PopoverPortalProps> = (props: ScopedProps<PopoverPortalProps>) => {
235
+ const PopoverPortal = (props: ScopedProps<PopoverPortalProps>) => {
236
236
  const { __scopePopover, forceMount, children, container } = props;
237
237
  const context = usePopoverContext(PORTAL_NAME, __scopePopover);
238
238
  return (
@@ -397,31 +397,31 @@ const PopoverContentNonModal = forwardRef<PopoverContentTypeElement, PopoverCont
397
397
  },
398
398
  );
399
399
 
400
- type PopoverContentImplElement = ElementRef<typeof PopperPrimitive.Content>;
400
+ type PopoverContentImplElement = ComponentRef<typeof PopperPrimitive.Content>;
401
401
  type FocusScopeProps = ComponentPropsWithoutRef<typeof FocusScope>;
402
402
  type DismissableLayerProps = ComponentPropsWithoutRef<typeof DismissableLayer>;
403
403
  type PopperContentProps = ThemedClassName<ComponentPropsWithoutRef<typeof PopperPrimitive.Content>>;
404
404
 
405
- interface PopoverContentImplProps
406
- extends Omit<PopperContentProps, 'onPlaced'>, Omit<DismissableLayerProps, 'onDismiss'> {
407
- /**
408
- * Whether focus should be trapped within the `Popover`
409
- * (default: false)
410
- */
411
- trapFocus?: FocusScopeProps['trapped'];
412
-
413
- /**
414
- * Event handler called when auto-focusing on open.
415
- * Can be prevented.
416
- */
417
- onOpenAutoFocus?: FocusScopeProps['onMountAutoFocus'];
418
-
419
- /**
420
- * Event handler called when auto-focusing on close.
421
- * Can be prevented.
422
- */
423
- onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus'];
424
- }
405
+ type PopoverContentImplProps = Omit<PopperContentProps, 'onPlaced'> &
406
+ Omit<DismissableLayerProps, 'onDismiss'> & {
407
+ /**
408
+ * Whether focus should be trapped within the `Popover`
409
+ * (default: false)
410
+ */
411
+ trapFocus?: FocusScopeProps['trapped'];
412
+
413
+ /**
414
+ * Event handler called when auto-focusing on open.
415
+ * Can be prevented.
416
+ */
417
+ onOpenAutoFocus?: FocusScopeProps['onMountAutoFocus'];
418
+
419
+ /**
420
+ * Event handler called when auto-focusing on close.
421
+ * Can be prevented.
422
+ */
423
+ onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus'];
424
+ };
425
425
 
426
426
  const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentImplProps>(
427
427
  (props: ScopedProps<PopoverContentImplProps>, forwardedRef) => {
@@ -514,8 +514,8 @@ const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentI
514
514
 
515
515
  const CLOSE_NAME = 'PopoverClose';
516
516
 
517
- type PopoverCloseElement = ElementRef<typeof Primitive.button>;
518
- interface PopoverCloseProps extends PrimitiveButtonProps {}
517
+ type PopoverCloseElement = ComponentRef<typeof Primitive.button>;
518
+ type PopoverCloseProps = PrimitiveButtonProps;
519
519
 
520
520
  const PopoverClose = forwardRef<PopoverCloseElement, PopoverCloseProps>(
521
521
  (props: ScopedProps<PopoverCloseProps>, forwardedRef) => {
@@ -540,9 +540,9 @@ PopoverClose.displayName = CLOSE_NAME;
540
540
 
541
541
  const ARROW_NAME = 'PopoverArrow';
542
542
 
543
- type PopoverArrowElement = ElementRef<typeof PopperPrimitive.Arrow>;
543
+ type PopoverArrowElement = ComponentRef<typeof PopperPrimitive.Arrow>;
544
544
  type PopperArrowProps = ThemedClassName<ComponentPropsWithoutRef<typeof PopperPrimitive.Arrow>>;
545
- interface PopoverArrowProps extends PopperArrowProps {}
545
+ type PopoverArrowProps = PopperArrowProps;
546
546
 
547
547
  const PopoverArrow = forwardRef<PopoverArrowElement, PopoverArrowProps>(
548
548
  (props: ScopedProps<PopoverArrowProps>, forwardedRef) => {
@@ -2,16 +2,18 @@
2
2
  // Copyright 2026 DXOS.org
3
3
  //
4
4
 
5
- import React, { useMemo } from 'react';
5
+ import React, { PropsWithChildren, useMemo } from 'react';
6
6
 
7
- import { faker } from '@dxos/random';
7
+ import { random } from '@dxos/random';
8
8
  import { mx } from '@dxos/ui-theme';
9
+ import { ThemedClassName } from '@dxos/ui-types';
9
10
 
11
+ import { Column } from '../../primitives';
10
12
  import { withLayout, withTheme } from '../../testing';
11
-
13
+ import { Input } from '../Input';
12
14
  import { ScrollArea } from './ScrollArea';
13
15
 
14
- faker.seed(123);
16
+ random.seed(123);
15
17
 
16
18
  export default {
17
19
  title: 'ui/react-ui-core/components/ScrollArea',
@@ -22,22 +24,22 @@ export default {
22
24
  },
23
25
  };
24
26
 
25
- const Column = () => (
27
+ const List = ({ items = 50 }: { items?: number }) => (
26
28
  <div>
27
- {Array.from({ length: 50 }).map((_, index) => (
28
- <div key={index} className='px-1 text-sm cursor-pointer hover:bg-hover-surface'>
29
+ {Array.from({ length: items }).map((_, index) => (
30
+ <div key={index} className='px-1 cursor-pointer hover:bg-hover-surface'>
29
31
  Item {index + 1}
30
32
  </div>
31
33
  ))}
32
34
  </div>
33
35
  );
34
36
 
35
- const Row = () => (
37
+ const Row = ({ items = 50 }: { items?: number }) => (
36
38
  <div className='flex gap-2 w-max'>
37
- {Array.from({ length: 50 }).map((_, index) => (
39
+ {Array.from({ length: items }).map((_, index) => (
38
40
  <div
39
41
  key={index}
40
- className='shrink-0 h-20 w-20 cursor-pointer border border-separator rounded-md flex items-center justify-center text-sm hover:bg-hover-surface'
42
+ className='shrink-0 h-20 w-20 cursor-pointer border border-separator rounded-md flex items-center justify-center hover:bg-hover-surface'
41
43
  >
42
44
  {index + 1}
43
45
  </div>
@@ -45,58 +47,91 @@ const Row = () => (
45
47
  </div>
46
48
  );
47
49
 
50
+ const Container = ({ classNames, children }: ThemedClassName<PropsWithChildren>) => {
51
+ return <div className={mx('border border-separator rounded-md overflow-hidden', classNames)}>{children}</div>;
52
+ };
53
+
48
54
  export const Vertical = {
49
55
  render: () => (
50
- <div className='h-72 w-48 p-2 border border-separator rounded-md'>
51
- <ScrollArea.Root orientation='vertical' padding>
56
+ <Container classNames='h-72 w-48'>
57
+ <ScrollArea.Root orientation='vertical'>
52
58
  <ScrollArea.Viewport>
53
- <Column />
59
+ <List />
54
60
  </ScrollArea.Viewport>
55
61
  </ScrollArea.Root>
56
- </div>
62
+ </Container>
57
63
  ),
58
64
  };
59
65
 
60
66
  export const VerticalThin = {
61
67
  render: () => (
62
- <div className='h-72 w-48 p-2 border border-separator rounded-md'>
63
- <ScrollArea.Root orientation='vertical' padding thin>
68
+ <Container classNames='h-72 w-48'>
69
+ <ScrollArea.Root orientation='vertical' thin>
64
70
  <ScrollArea.Viewport>
65
- <Column />
71
+ <List />
66
72
  </ScrollArea.Viewport>
67
73
  </ScrollArea.Root>
68
- </div>
74
+ </Container>
75
+ ),
76
+ };
77
+
78
+ export const VerticalPadded = {
79
+ render: () => (
80
+ <Container classNames='h-72 w-48'>
81
+ <ScrollArea.Root orientation='vertical' centered padding thin>
82
+ <ScrollArea.Viewport>
83
+ <List />
84
+ </ScrollArea.Viewport>
85
+ </ScrollArea.Root>
86
+ </Container>
87
+ ),
88
+ };
89
+
90
+ export const VerticalColumn = {
91
+ render: () => (
92
+ <Container classNames='h-72 w-48'>
93
+ <Column.Root gutter='sm' classNames='h-full overflow-hidden'>
94
+ <ScrollArea.Root orientation='vertical' padding thin>
95
+ <ScrollArea.Viewport classNames='py-2'>
96
+ <Input.Root>
97
+ <Input.TextInput classNames='p-1' />
98
+ </Input.Root>
99
+ <List />
100
+ </ScrollArea.Viewport>
101
+ </ScrollArea.Root>
102
+ </Column.Root>
103
+ </Container>
69
104
  ),
70
105
  };
71
106
 
72
107
  export const Horizontal = {
73
108
  render: () => (
74
- <div className='w-96 p-2 border border-separator rounded-md'>
75
- <ScrollArea.Root orientation='horizontal' padding>
109
+ <Container classNames='w-96'>
110
+ <ScrollArea.Root orientation='horizontal'>
76
111
  <ScrollArea.Viewport>
77
112
  <Row />
78
113
  </ScrollArea.Viewport>
79
114
  </ScrollArea.Root>
80
- </div>
115
+ </Container>
81
116
  ),
82
117
  };
83
118
 
84
119
  export const HorizontalThin = {
85
120
  render: () => (
86
- <div className='w-96 p-2 border border-separator rounded-md'>
87
- <ScrollArea.Root orientation='horizontal' padding thin>
121
+ <Container classNames='w-96'>
122
+ <ScrollArea.Root orientation='horizontal' thin>
88
123
  <ScrollArea.Viewport>
89
124
  <Row />
90
125
  </ScrollArea.Viewport>
91
126
  </ScrollArea.Root>
92
- </div>
127
+ </Container>
93
128
  ),
94
129
  };
95
130
 
96
131
  export const Both = {
97
132
  render: () => (
98
- <div className='h-96 w-96 p-2 border border-separator rounded-md'>
99
- <ScrollArea.Root orientation='all' padding>
133
+ <Container classNames='w-96 h-96'>
134
+ <ScrollArea.Root orientation='all'>
100
135
  <ScrollArea.Viewport>
101
136
  <div className='flex flex-col gap-2'>
102
137
  {Array.from({ length: 50 }).map((_, rowIndex) => (
@@ -114,7 +149,31 @@ export const Both = {
114
149
  </div>
115
150
  </ScrollArea.Viewport>
116
151
  </ScrollArea.Root>
117
- </div>
152
+ </Container>
153
+ ),
154
+ };
155
+
156
+ export const Fullscreen = {
157
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
158
+ render: () => (
159
+ <ScrollArea.Root orientation='all' thin>
160
+ <ScrollArea.Viewport>
161
+ <div className='flex flex-col gap-2'>
162
+ {Array.from({ length: 50 }).map((_, rowIndex) => (
163
+ <div key={rowIndex} className='flex gap-2'>
164
+ {Array.from({ length: 50 }).map((_, colIndex) => (
165
+ <div
166
+ key={colIndex}
167
+ className='shrink-0 h-20 w-20 flex items-center justify-center text-sm border border-separator font-mono'
168
+ >
169
+ [{colIndex}:{rowIndex}]
170
+ </div>
171
+ ))}
172
+ </div>
173
+ ))}
174
+ </div>
175
+ </ScrollArea.Viewport>
176
+ </ScrollArea.Root>
118
177
  ),
119
178
  };
120
179
 
@@ -125,13 +184,13 @@ export const NestedScrollAreas = {
125
184
  () =>
126
185
  Array.from({ length: 8 }).map((_, index) => ({
127
186
  id: String(index),
128
- count: faker.number.int({ min: 5, max: 20 }),
187
+ count: random.number.int({ min: 5, max: 20 }),
129
188
  })),
130
189
  [],
131
190
  );
132
191
 
133
192
  return (
134
- <ScrollArea.Root thin orientation='horizontal'>
193
+ <ScrollArea.Root orientation='horizontal' thin padding>
135
194
  <ScrollArea.Viewport classNames='gap-4'>
136
195
  {columns.map((column) => (
137
196
  <section
@@ -170,7 +229,7 @@ export const NativeScroll = {
170
229
  'group-hover:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb',
171
230
  )}
172
231
  >
173
- <Column />
232
+ <List />
174
233
  </div>
175
234
  </div>
176
235
  ),
@@ -5,10 +5,10 @@
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 HTMLAttributes, forwardRef } from 'react';
8
+ import React, { CSSProperties, useMemo } from 'react';
9
9
 
10
- import { composableProps } from '@dxos/ui-theme';
11
- import { type AllowedAxis, type SlottableProps, type ThemedClassName } from '@dxos/ui-types';
10
+ import { composableProps, scrollbar, slottable } from '@dxos/ui-theme';
11
+ import { type AllowedAxis, type SlottableProps } from '@dxos/ui-types';
12
12
 
13
13
  import { useThemeContext } from '../../hooks';
14
14
 
@@ -24,7 +24,7 @@ type ScrollAreaContextType = {
24
24
  /** Hide scrollbars when not scrolling. */
25
25
  autoHide: boolean;
26
26
  /** Apply padding to opposite side of scrollbar. */
27
- margin?: boolean;
27
+ centered?: boolean;
28
28
  /** Apply padding. */
29
29
  padding: boolean;
30
30
  /** Use thin scrollbars. */
@@ -41,19 +41,19 @@ const [ScrollAreaProvider, useScrollAreaContext] = createContext<ScrollAreaConte
41
41
 
42
42
  const SCROLLAREA_ROOT_NAME = 'ScrollArea.Root';
43
43
 
44
- type ScrollAreaRootProps = SlottableProps<HTMLDivElement, Partial<ScrollAreaContextType>>;
44
+ type ScrollAreaRootProps = Partial<ScrollAreaContextType>;
45
45
 
46
46
  /**
47
47
  * ScrollArea provides native scrollbars with custom styling.
48
48
  */
49
- const ScrollAreaRoot = forwardRef<HTMLDivElement, ScrollAreaRootProps>(
49
+ const ScrollAreaRoot = slottable<HTMLDivElement, ScrollAreaRootProps>(
50
50
  (
51
51
  {
52
52
  children,
53
53
  asChild,
54
54
  orientation = 'vertical',
55
55
  autoHide = true,
56
- margin = false,
56
+ centered = false,
57
57
  padding = false,
58
58
  thin = false,
59
59
  snap = false,
@@ -61,10 +61,13 @@ const ScrollAreaRoot = forwardRef<HTMLDivElement, ScrollAreaRootProps>(
61
61
  },
62
62
  forwardedRef,
63
63
  ) => {
64
+ const { tx } = useThemeContext();
64
65
  const { className, ...rest } = composableProps(props);
65
66
  const Comp = asChild ? Slot : Primitive.div;
66
- const { tx } = useThemeContext();
67
- const options = { orientation, autoHide, margin, padding, thin, snap };
67
+ const options = useMemo(
68
+ () => ({ orientation, autoHide, centered, padding, thin, snap }),
69
+ [orientation, autoHide, centered, padding, thin, snap],
70
+ );
68
71
 
69
72
  return (
70
73
  <ScrollAreaProvider {...options}>
@@ -84,20 +87,33 @@ ScrollAreaRoot.displayName = SCROLLAREA_ROOT_NAME;
84
87
 
85
88
  const SCROLLAREA_VIEWPORT_NAME = 'ScrollArea.Viewport';
86
89
 
87
- type ScrollAreaViewportProps = ThemedClassName<HTMLAttributes<HTMLDivElement>>;
88
-
89
- const ScrollAreaViewport = forwardRef<HTMLDivElement, ScrollAreaViewportProps>(
90
- ({ classNames, children, ...props }, forwardedRef) => {
91
- const { tx } = useThemeContext();
92
- const options = useScrollAreaContext(SCROLLAREA_VIEWPORT_NAME);
93
-
94
- return (
95
- <div {...props} className={tx('scrollArea.viewport', options, classNames)} ref={forwardedRef}>
96
- {children}
97
- </div>
98
- );
99
- },
100
- );
90
+ type ScrollAreaViewportProps = SlottableProps;
91
+
92
+ const ScrollAreaViewport = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
93
+ const { tx } = useThemeContext();
94
+ const options = useScrollAreaContext(SCROLLAREA_VIEWPORT_NAME);
95
+ const density = options.thin ? scrollbar.thin : scrollbar.coarse;
96
+ const { className, ...rest } = composableProps(props);
97
+ const { style, ...restWithoutStyle } = rest as { style?: CSSProperties; [key: string]: any };
98
+ const Comp = asChild ? Slot : Primitive.div;
99
+
100
+ return (
101
+ <Comp
102
+ {...restWithoutStyle}
103
+ style={
104
+ {
105
+ '--scroll-width': `${density.size}px`,
106
+ '--scroll-padding': `${density.padding}px`,
107
+ ...style,
108
+ } as CSSProperties
109
+ }
110
+ className={tx('scrollArea.viewport', options, className)}
111
+ ref={forwardedRef}
112
+ >
113
+ {children}
114
+ </Comp>
115
+ );
116
+ });
101
117
 
102
118
  ScrollAreaViewport.displayName = SCROLLAREA_VIEWPORT_NAME;
103
119
 
@@ -5,23 +5,22 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React, { useEffect, useRef, useState } from 'react';
7
7
 
8
- import { faker } from '@dxos/random';
8
+ import { random } from '@dxos/random';
9
9
 
10
10
  import { Panel } from '../../primitives';
11
11
  import { withLayout, withTheme } from '../../testing';
12
12
  import { Button } from '../Button';
13
13
  import { Toolbar } from '../Toolbar';
14
-
15
14
  import { ScrollContainer, type ScrollContainerRootProps, type ScrollController } from './ScrollContainer';
16
15
 
17
- type StoryProps = ScrollContainerRootProps & { running?: boolean; initialLines?: number };
16
+ type DefaultStoryProps = ScrollContainerRootProps & { running?: boolean; initialLines?: number };
18
17
 
19
- const DefaultStory = ({ initialLines = 0, running: runningProp, ...props }: StoryProps) => {
18
+ const DefaultStory = ({ initialLines = 0, running: runningProp, ...props }: DefaultStoryProps) => {
20
19
  const [lines, setLines] = useState<string[]>([]);
21
20
  const [running, setRunning] = useState(runningProp);
22
21
  const scroller = useRef<ScrollController>(null);
23
22
  useEffect(() => {
24
- setLines(Array.from({ length: initialLines }, () => faker.lorem.paragraph()));
23
+ setLines(Array.from({ length: initialLines }, () => random.lorem.paragraph()));
25
24
  }, [initialLines]);
26
25
  useEffect(() => {
27
26
  if (!running) {
@@ -29,14 +28,14 @@ const DefaultStory = ({ initialLines = 0, running: runningProp, ...props }: Stor
29
28
  }
30
29
 
31
30
  const i = setInterval(() => {
32
- setLines((lines) => [...lines, faker.lorem.paragraph()]);
31
+ setLines((lines) => [...lines, random.lorem.paragraph()]);
33
32
  }, 500);
34
33
 
35
34
  return () => clearInterval(i);
36
35
  }, [running]);
37
36
 
38
37
  return (
39
- <Panel.Root className='dx-article'>
38
+ <Panel.Root className='dx-document'>
40
39
  <Panel.Toolbar asChild>
41
40
  <Toolbar.Root>
42
41
  <Button onClick={() => setRunning((running) => !running)}>{running ? 'Stop' : 'Start'}</Button>
@@ -45,16 +44,19 @@ const DefaultStory = ({ initialLines = 0, running: runningProp, ...props }: Stor
45
44
  <div className='px-1'>{lines.length}</div>
46
45
  </Toolbar.Root>
47
46
  </Panel.Toolbar>
48
- <Panel.Content asChild>
47
+ <Panel.Content>
49
48
  <ScrollContainer.Root {...props} ref={scroller}>
50
- <ScrollContainer.Viewport>
51
- {lines.map((line, index) => (
52
- <div key={index} className='p-2 text-description'>
53
- {line}
54
- </div>
55
- ))}
56
- </ScrollContainer.Viewport>
57
- <ScrollContainer.ScrollDownButton />
49
+ <ScrollContainer.Content>
50
+ <ScrollContainer.Viewport>
51
+ {lines.map((line, index) => (
52
+ <div key={index} className='p-2 text-description'>
53
+ {line}
54
+ </div>
55
+ ))}
56
+ </ScrollContainer.Viewport>
57
+ <ScrollContainer.ScrollDownButton />
58
+ <ScrollContainer.Fade />
59
+ </ScrollContainer.Content>
58
60
  </ScrollContainer.Root>
59
61
  </Panel.Content>
60
62
  </Panel.Root>
@@ -75,7 +77,7 @@ type Story = StoryObj<typeof meta>;
75
77
  export const Default: Story = {
76
78
  args: {
77
79
  pin: true,
78
- fade: true,
80
+
79
81
  running: true,
80
82
  },
81
83
  };
@@ -83,7 +85,7 @@ export const Default: Story = {
83
85
  export const Large: Story = {
84
86
  args: {
85
87
  pin: true,
86
- fade: true,
88
+
87
89
  initialLines: 100,
88
90
  },
89
91
  };