@dxos/react-ui 0.8.4-main.bc674ce → 0.8.4-main.bd9b33e6c8

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 (321) hide show
  1. package/dist/lib/browser/{chunk-CEKVHJ27.mjs → chunk-LUPEFGHJ.mjs} +119 -117
  2. package/dist/lib/browser/chunk-LUPEFGHJ.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +3021 -2087
  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 +59 -36
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/{chunk-2NHEX4AD.mjs → chunk-EQOBFLZC.mjs} +119 -117
  9. package/dist/lib/node-esm/chunk-EQOBFLZC.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +3021 -2087
  11. package/dist/lib/node-esm/index.mjs.map +4 -4
  12. package/dist/lib/node-esm/meta.json +1 -1
  13. package/dist/lib/node-esm/testing/index.mjs +59 -36
  14. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  15. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  16. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  17. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  18. package/dist/types/src/components/Button/Button.d.ts +2 -2
  19. package/dist/types/src/components/Button/Button.d.ts.map +1 -1
  20. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
  21. package/dist/types/src/components/Button/Toggle.d.ts +2 -2
  22. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -1
  23. package/dist/types/src/components/Button/ToggleGroup.d.ts +6 -6
  24. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -1
  25. package/dist/types/src/components/Card/Card.d.ts +145 -0
  26. package/dist/types/src/components/Card/Card.d.ts.map +1 -0
  27. package/dist/types/src/components/Card/Card.stories.d.ts +21 -0
  28. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -0
  29. package/dist/types/src/components/Card/index.d.ts +2 -0
  30. package/dist/types/src/components/Card/index.d.ts.map +1 -0
  31. package/dist/types/src/components/Clipboard/index.d.ts +10 -1
  32. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  33. package/dist/types/src/components/Dialog/AlertDialog.d.ts +41 -19
  34. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
  35. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -1
  36. package/dist/types/src/components/Dialog/Dialog.d.ts +48 -22
  37. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  38. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +6 -8
  39. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
  40. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts +11 -0
  41. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -0
  42. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts +7 -0
  43. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -0
  44. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +8 -0
  45. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -0
  46. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts +9 -0
  47. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -0
  48. package/dist/types/src/components/ErrorFallback/index.d.ts +5 -0
  49. package/dist/types/src/components/ErrorFallback/index.d.ts.map +1 -0
  50. package/dist/types/src/components/Focus/Focus.d.ts +44 -0
  51. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -0
  52. package/dist/types/src/components/Focus/Focus.stories.d.ts +9 -0
  53. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -0
  54. package/dist/types/src/components/Focus/index.d.ts +2 -0
  55. package/dist/types/src/components/Focus/index.d.ts.map +1 -0
  56. package/dist/types/src/components/Icon/Icon.d.ts +3 -0
  57. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  58. package/dist/types/src/components/Icon/Icon.stories.d.ts +11 -3
  59. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -1
  60. package/dist/types/src/components/Image/Image.d.ts +14 -0
  61. package/dist/types/src/components/Image/Image.d.ts.map +1 -0
  62. package/dist/types/src/components/Image/Image.stories.d.ts +33 -0
  63. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -0
  64. package/dist/types/src/components/Image/index.d.ts +2 -0
  65. package/dist/types/src/components/Image/index.d.ts.map +1 -0
  66. package/dist/types/src/components/Input/Input.d.ts +4 -7
  67. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  68. package/dist/types/src/components/Input/Input.stories.d.ts +7 -7
  69. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  70. package/dist/types/src/components/List/List.d.ts +9 -3
  71. package/dist/types/src/components/List/List.d.ts.map +1 -1
  72. package/dist/types/src/components/List/List.stories.d.ts +8 -2
  73. package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
  74. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
  75. package/dist/types/src/components/Main/Main.d.ts +6 -32
  76. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  77. package/dist/types/src/components/Main/Main.stories.d.ts +1 -5
  78. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  79. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
  80. package/dist/types/src/components/Menu/DropdownMenu.d.ts +51 -50
  81. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
  82. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +14 -1
  83. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -1
  84. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  85. package/dist/types/src/components/Message/Message.stories.d.ts +4 -5
  86. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  87. package/dist/types/src/components/Popover/Popover.d.ts +32 -23
  88. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  89. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +31 -25
  90. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  91. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +62 -9
  92. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  93. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +23 -7
  94. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  95. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +6 -2
  96. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
  97. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  98. package/dist/types/src/components/Select/Select.stories.d.ts +2 -2
  99. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  100. package/dist/types/src/components/Separator/Separator.d.ts +3 -3
  101. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  102. package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
  103. package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  104. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
  105. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  106. package/dist/types/src/components/Skeleton/index.d.ts +2 -0
  107. package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
  108. package/dist/types/src/components/Splitter/Splitter.d.ts +37 -0
  109. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
  110. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
  111. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
  112. package/dist/types/src/components/Splitter/index.d.ts +2 -0
  113. package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
  114. package/dist/types/src/components/Status/Status.d.ts +3 -4
  115. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  116. package/dist/types/src/components/Status/Status.stories.d.ts +4 -2
  117. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  118. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  119. package/dist/types/src/components/Tag/Tag.stories.d.ts +0 -5
  120. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  121. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +2 -1
  122. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  123. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts +12 -0
  124. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  125. package/dist/types/src/components/Toast/Toast.d.ts +15 -15
  126. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  127. package/dist/types/src/components/Toolbar/Toolbar.d.ts +37 -11
  128. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  129. package/dist/types/src/components/Tooltip/Tooltip.d.ts +9 -9
  130. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  131. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +2 -2
  132. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  133. package/dist/types/src/components/index.d.ts +9 -4
  134. package/dist/types/src/components/index.d.ts.map +1 -1
  135. package/dist/types/src/exemplars/generics.stories.d.ts +23 -0
  136. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
  137. package/dist/types/src/exemplars/slot.stories.d.ts +15 -0
  138. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
  139. package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
  140. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
  141. package/dist/types/src/exemplars/virtualizer.stories.d.ts +11 -0
  142. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -0
  143. package/dist/types/src/hooks/index.d.ts +1 -0
  144. package/dist/types/src/hooks/index.d.ts.map +1 -1
  145. package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
  146. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  147. package/dist/types/src/index.d.ts +1 -0
  148. package/dist/types/src/index.d.ts.map +1 -1
  149. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  150. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  151. package/dist/types/src/primitives/Column/Column.d.ts +51 -0
  152. package/dist/types/src/primitives/Column/Column.d.ts.map +1 -0
  153. package/dist/types/src/primitives/Column/Column.stories.d.ts +25 -0
  154. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -0
  155. package/dist/types/src/primitives/Column/index.d.ts +2 -0
  156. package/dist/types/src/primitives/Column/index.d.ts.map +1 -0
  157. package/dist/types/src/primitives/Container/Container.d.ts +11 -0
  158. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
  159. package/dist/types/src/primitives/Container/Container.stories.d.ts +6 -0
  160. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
  161. package/dist/types/src/primitives/Container/index.d.ts +2 -0
  162. package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
  163. package/dist/types/src/primitives/Flex/Flex.d.ts +15 -0
  164. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
  165. package/dist/types/src/primitives/Flex/Flex.stories.d.ts +8 -0
  166. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -0
  167. package/dist/types/src/primitives/Flex/index.d.ts +2 -0
  168. package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
  169. package/dist/types/src/primitives/Grid/Grid.d.ts +14 -0
  170. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -0
  171. package/dist/types/src/primitives/Grid/Grid.stories.d.ts +8 -0
  172. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -0
  173. package/dist/types/src/primitives/Grid/index.d.ts +2 -0
  174. package/dist/types/src/primitives/Grid/index.d.ts.map +1 -0
  175. package/dist/types/src/primitives/Panel/Panel.d.ts +46 -0
  176. package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -0
  177. package/dist/types/src/primitives/Panel/Panel.stories.d.ts +6 -0
  178. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -0
  179. package/dist/types/src/primitives/Panel/index.d.ts +2 -0
  180. package/dist/types/src/primitives/Panel/index.d.ts.map +1 -0
  181. package/dist/types/src/primitives/index.d.ts +6 -0
  182. package/dist/types/src/primitives/index.d.ts.map +1 -0
  183. package/dist/types/src/testing/Loading.d.ts +9 -0
  184. package/dist/types/src/testing/Loading.d.ts.map +1 -0
  185. package/dist/types/src/testing/decorators/withLayout.d.ts +1 -1
  186. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
  187. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
  188. package/dist/types/src/testing/decorators/withTheme.d.ts +3 -2
  189. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  190. package/dist/types/src/testing/index.d.ts +1 -0
  191. package/dist/types/src/testing/index.d.ts.map +1 -1
  192. package/dist/types/src/translations.d.ts +11 -0
  193. package/dist/types/src/translations.d.ts.map +1 -0
  194. package/dist/types/src/util/usePx.d.ts.map +1 -1
  195. package/dist/types/tsconfig.tsbuildinfo +1 -1
  196. package/package.json +25 -21
  197. package/src/components/Avatars/Avatar.stories.tsx +7 -8
  198. package/src/components/Avatars/Avatar.tsx +5 -12
  199. package/src/components/Avatars/AvatarGroup.stories.tsx +2 -2
  200. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +3 -3
  201. package/src/components/Breadcrumb/Breadcrumb.tsx +11 -37
  202. package/src/components/Button/Button.stories.tsx +3 -3
  203. package/src/components/Button/Button.tsx +11 -25
  204. package/src/components/Button/IconButton.stories.tsx +4 -4
  205. package/src/components/Button/IconButton.tsx +2 -3
  206. package/src/components/Button/Toggle.stories.tsx +2 -2
  207. package/src/components/Button/Toggle.tsx +4 -4
  208. package/src/components/Button/ToggleGroup.stories.tsx +2 -2
  209. package/src/components/Button/ToggleGroup.tsx +12 -16
  210. package/src/components/Card/Card.stories.tsx +151 -0
  211. package/src/components/Card/Card.tsx +394 -0
  212. package/src/components/Card/index.ts +5 -0
  213. package/src/components/Clipboard/CopyButton.tsx +3 -3
  214. package/src/components/Dialog/AlertDialog.stories.tsx +16 -16
  215. package/src/components/Dialog/AlertDialog.tsx +121 -82
  216. package/src/components/Dialog/Dialog.stories.tsx +98 -17
  217. package/src/components/Dialog/Dialog.tsx +108 -87
  218. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +50 -0
  219. package/src/components/ErrorFallback/ErrorFallback.tsx +70 -0
  220. package/src/components/ErrorFallback/ErrorStack.tsx +80 -0
  221. package/src/components/ErrorFallback/ThrowError.tsx +37 -0
  222. package/src/components/ErrorFallback/index.ts +9 -0
  223. package/src/components/Focus/AUDIT.md +43 -0
  224. package/src/components/Focus/Focus.stories.tsx +230 -0
  225. package/src/components/Focus/Focus.tsx +201 -0
  226. package/src/components/Focus/index.ts +5 -0
  227. package/src/components/Icon/Icon.stories.tsx +45 -14
  228. package/src/components/Icon/Icon.tsx +6 -2
  229. package/src/components/Image/Image.stories.tsx +86 -0
  230. package/src/components/Image/Image.tsx +223 -0
  231. package/src/components/Image/index.ts +5 -0
  232. package/src/components/Input/Input.stories.tsx +20 -39
  233. package/src/components/Input/Input.tsx +24 -69
  234. package/src/components/Link/Link.stories.tsx +2 -2
  235. package/src/components/Link/Link.tsx +2 -2
  236. package/src/components/List/List.stories.tsx +15 -22
  237. package/src/components/List/List.tsx +15 -18
  238. package/src/components/List/ListDropIndicator.tsx +7 -7
  239. package/src/components/List/Tree.stories.tsx +5 -5
  240. package/src/components/List/TreeDropIndicator.tsx +6 -6
  241. package/src/components/List/Treegrid.stories.tsx +3 -3
  242. package/src/components/List/Treegrid.tsx +10 -15
  243. package/src/components/Main/Main.stories.tsx +6 -95
  244. package/src/components/Main/Main.tsx +61 -211
  245. package/src/components/Menu/ContextMenu.stories.tsx +2 -2
  246. package/src/components/Menu/ContextMenu.tsx +9 -33
  247. package/src/components/Menu/DropdownMenu.stories.tsx +2 -2
  248. package/src/components/Menu/DropdownMenu.tsx +58 -52
  249. package/src/components/Message/Message.stories.tsx +27 -12
  250. package/src/components/Message/Message.tsx +14 -30
  251. package/src/components/Popover/Popover.stories.tsx +4 -4
  252. package/src/components/Popover/Popover.tsx +62 -59
  253. package/src/components/ScrollArea/ScrollArea.stories.tsx +213 -73
  254. package/src/components/ScrollArea/ScrollArea.tsx +85 -113
  255. package/src/components/ScrollArea/index.ts +1 -1
  256. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +43 -23
  257. package/src/components/ScrollContainer/ScrollContainer.tsx +174 -87
  258. package/src/components/Select/Select.stories.tsx +4 -4
  259. package/src/components/Select/Select.tsx +11 -27
  260. package/src/components/Separator/Separator.tsx +5 -8
  261. package/src/components/Skeleton/Skeleton.stories.tsx +52 -0
  262. package/src/components/Skeleton/Skeleton.tsx +26 -0
  263. package/src/components/Skeleton/index.ts +5 -0
  264. package/src/components/Splitter/Splitter.stories.tsx +83 -0
  265. package/src/components/Splitter/Splitter.tsx +140 -0
  266. package/src/components/Splitter/index.ts +5 -0
  267. package/src/components/Status/Status.stories.tsx +21 -17
  268. package/src/components/Status/Status.tsx +10 -7
  269. package/src/components/Tag/Tag.stories.tsx +4 -9
  270. package/src/components/Tag/Tag.tsx +2 -7
  271. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +32 -0
  272. package/src/components/ThemeProvider/ThemeProvider.tsx +9 -6
  273. package/src/components/Toast/Toast.stories.tsx +2 -2
  274. package/src/components/Toast/Toast.tsx +22 -41
  275. package/src/components/Toolbar/Toolbar.stories.tsx +2 -2
  276. package/src/components/Toolbar/Toolbar.tsx +171 -25
  277. package/src/components/Tooltip/Tooltip.stories.tsx +16 -14
  278. package/src/components/Tooltip/Tooltip.tsx +18 -18
  279. package/src/components/index.ts +10 -5
  280. package/src/exemplars/generics.stories.tsx +41 -0
  281. package/src/exemplars/slot.stories.tsx +117 -0
  282. package/src/exemplars/tabster.stories.tsx +127 -0
  283. package/src/exemplars/virtualizer.stories.tsx +137 -0
  284. package/src/hooks/index.ts +1 -0
  285. package/src/hooks/useDensityContext.ts +2 -2
  286. package/src/index.ts +1 -0
  287. package/src/playground/Controls.stories.tsx +3 -10
  288. package/src/playground/Custom.stories.tsx +11 -21
  289. package/src/playground/Typography.stories.tsx +3 -3
  290. package/src/primitives/Column/AUDIT.md +354 -0
  291. package/src/primitives/Column/Column.stories.tsx +183 -0
  292. package/src/primitives/Column/Column.tsx +169 -0
  293. package/src/primitives/Column/index.ts +5 -0
  294. package/src/primitives/Container/Container.stories.tsx +30 -0
  295. package/src/primitives/Container/Container.tsx +19 -0
  296. package/src/primitives/Container/index.ts +5 -0
  297. package/src/primitives/Flex/Flex.stories.tsx +58 -0
  298. package/src/primitives/Flex/Flex.tsx +24 -0
  299. package/src/primitives/Flex/index.ts +5 -0
  300. package/src/primitives/Grid/Grid.stories.tsx +57 -0
  301. package/src/primitives/Grid/Grid.tsx +30 -0
  302. package/src/primitives/Grid/index.ts +5 -0
  303. package/src/primitives/Panel/Panel.stories.tsx +67 -0
  304. package/src/primitives/Panel/Panel.tsx +114 -0
  305. package/src/primitives/Panel/index.ts +5 -0
  306. package/src/primitives/index.ts +9 -0
  307. package/src/testing/Loading.tsx +26 -0
  308. package/src/testing/decorators/withLayout.tsx +21 -7
  309. package/src/testing/decorators/withLayoutVariants.tsx +18 -21
  310. package/src/testing/decorators/withTheme.tsx +24 -19
  311. package/src/testing/index.ts +2 -0
  312. package/src/translations.ts +19 -0
  313. package/src/util/usePx.ts +1 -0
  314. package/dist/lib/browser/chunk-CEKVHJ27.mjs.map +0 -7
  315. package/dist/lib/node-esm/chunk-2NHEX4AD.mjs.map +0 -7
  316. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +0 -15
  317. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +0 -1
  318. package/dist/types/src/components/AnchoredOverflow/index.d.ts +0 -2
  319. package/dist/types/src/components/AnchoredOverflow/index.d.ts.map +0 -1
  320. package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +0 -59
  321. package/src/components/AnchoredOverflow/index.ts +0 -5
@@ -2,7 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- // This is based upon `@radix-ui/react-popover` fetched 25 Oct 2024 at https://github.com/radix-ui/primitives at commit 374c7d7.
5
+ // This is based upon `@radix-ui/react-popover` fetched Oct 25, 2024 at https://github.com/radix-ui/primitives at commit 374c7d7.
6
6
 
7
7
  import { composeEventHandlers } from '@radix-ui/primitive';
8
8
  import { useComposedRefs } from '@radix-ui/react-compose-refs';
@@ -23,9 +23,8 @@ import { hideOthers } from 'aria-hidden';
23
23
  import React, {
24
24
  type ComponentPropsWithRef,
25
25
  type ComponentPropsWithoutRef,
26
- type ElementRef,
26
+ type ComponentRef,
27
27
  type FC,
28
- type MutableRefObject,
29
28
  type ReactNode,
30
29
  type RefObject,
31
30
  forwardRef,
@@ -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
- triggerRef: MutableRefObject<HTMLButtonElement>;
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;
@@ -93,7 +93,7 @@ const PopoverRoot: FC<PopoverRootProps> = (props: ScopedProps<PopoverRootProps>)
93
93
  <PopoverProvider
94
94
  scope={__scopePopover}
95
95
  contentId={useId()}
96
- triggerRef={triggerRef as MutableRefObject<HTMLButtonElement>}
96
+ triggerRef={triggerRef as RefObject<HTMLButtonElement>}
97
97
  open={open}
98
98
  onOpenChange={setOpen}
99
99
  onOpenToggle={useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen])}
@@ -116,9 +116,9 @@ PopoverRoot.displayName = POPOVER_NAME;
116
116
 
117
117
  const ANCHOR_NAME = 'PopoverAnchor';
118
118
 
119
- type PopoverAnchorElement = ElementRef<typeof PopperPrimitive.Anchor>;
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,19 +144,22 @@ 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
+ asChild?: boolean;
151
+ };
150
152
 
151
153
  const PopoverTrigger = forwardRef<PopoverTriggerElement, PopoverTriggerProps>(
152
154
  (props: ScopedProps<PopoverTriggerProps>, forwardedRef) => {
153
- const { __scopePopover, ...triggerProps } = props;
155
+ const { __scopePopover, asChild, ...triggerProps } = props;
154
156
  const context = usePopoverContext(TRIGGER_NAME, __scopePopover);
155
157
  const popperScope = usePopperScope(__scopePopover);
156
158
  const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);
159
+ const Comp = asChild ? Slot : Primitive.button;
157
160
 
158
161
  const trigger = (
159
- <Primitive.button
162
+ <Comp
160
163
  type='button'
161
164
  aria-haspopup='dialog'
162
165
  aria-expanded={context.open}
@@ -186,9 +189,9 @@ PopoverTrigger.displayName = TRIGGER_NAME;
186
189
 
187
190
  const VIRTUAL_TRIGGER_NAME = 'PopoverVirtualTrigger';
188
191
 
189
- interface PopoverVirtualTriggerProps {
192
+ type PopoverVirtualTriggerProps = {
190
193
  virtualRef: RefObject<PopoverTriggerElement | null>;
191
- }
194
+ };
192
195
 
193
196
  const PopoverVirtualTrigger = (props: ScopedProps<PopoverVirtualTriggerProps>) => {
194
197
  const { __scopePopover, virtualRef } = props;
@@ -216,7 +219,7 @@ const [PortalProvider, usePortalContext] = createPopoverContext<PortalContextVal
216
219
  });
217
220
 
218
221
  type PortalProps = ComponentPropsWithoutRef<typeof PortalPrimitive>;
219
- interface PopoverPortalProps {
222
+ type PopoverPortalProps = {
220
223
  children?: ReactNode;
221
224
  /**
222
225
  * Specify a container element to portal the content into.
@@ -227,9 +230,9 @@ interface PopoverPortalProps {
227
230
  * controlling animation with React animation libraries.
228
231
  */
229
232
  forceMount?: true;
230
- }
233
+ };
231
234
 
232
- const PopoverPortal: FC<PopoverPortalProps> = (props: ScopedProps<PopoverPortalProps>) => {
235
+ const PopoverPortal = (props: ScopedProps<PopoverPortalProps>) => {
233
236
  const { __scopePopover, forceMount, children, container } = props;
234
237
  const context = usePopoverContext(PORTAL_NAME, __scopePopover);
235
238
  return (
@@ -280,8 +283,10 @@ const PopoverContent = forwardRef<PopoverContentTypeElement, PopoverContentProps
280
283
  PopoverContent.displayName = CONTENT_NAME;
281
284
 
282
285
  type PopoverContentTypeElement = PopoverContentImplElement;
283
- export interface PopoverContentTypeProps
284
- extends Omit<PopoverContentImplProps, 'trapFocus' | 'disableOutsidePointerEvents'> {}
286
+ export interface PopoverContentTypeProps extends Omit<
287
+ PopoverContentImplProps,
288
+ 'trapFocus' | 'disableOutsidePointerEvents'
289
+ > {}
285
290
 
286
291
  const PopoverContentModal = forwardRef<PopoverContentTypeElement, PopoverContentTypeProps>(
287
292
  (props: ScopedProps<PopoverContentTypeProps>, forwardedRef) => {
@@ -303,8 +308,7 @@ const PopoverContentModal = forwardRef<PopoverContentTypeElement, PopoverContent
303
308
  <PopoverContentImpl
304
309
  {...props}
305
310
  ref={composedRefs}
306
- // we make sure we're not trapping once it's been closed
307
- // (closed !== unmounted when animating out)
311
+ // Make sure we're not trapping once it's been closed (closed !== unmounted when animating out).
308
312
  trapFocus={context.open}
309
313
  disableOutsidePointerEvents
310
314
  onCloseAutoFocus={composeEventHandlers(props.onCloseAutoFocus, (event) => {
@@ -393,32 +397,31 @@ const PopoverContentNonModal = forwardRef<PopoverContentTypeElement, PopoverCont
393
397
  },
394
398
  );
395
399
 
396
- type PopoverContentImplElement = ElementRef<typeof PopperPrimitive.Content>;
400
+ type PopoverContentImplElement = ComponentRef<typeof PopperPrimitive.Content>;
397
401
  type FocusScopeProps = ComponentPropsWithoutRef<typeof FocusScope>;
398
402
  type DismissableLayerProps = ComponentPropsWithoutRef<typeof DismissableLayer>;
399
403
  type PopperContentProps = ThemedClassName<ComponentPropsWithoutRef<typeof PopperPrimitive.Content>>;
400
404
 
401
- interface PopoverContentImplProps
402
- extends Omit<PopperContentProps, 'onPlaced'>,
403
- Omit<DismissableLayerProps, 'onDismiss'> {
404
- /**
405
- * Whether focus should be trapped within the `Popover`
406
- * (default: false)
407
- */
408
- trapFocus?: FocusScopeProps['trapped'];
409
-
410
- /**
411
- * Event handler called when auto-focusing on open.
412
- * Can be prevented.
413
- */
414
- onOpenAutoFocus?: FocusScopeProps['onMountAutoFocus'];
415
-
416
- /**
417
- * Event handler called when auto-focusing on close.
418
- * Can be prevented.
419
- */
420
- onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus'];
421
- }
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
+ };
422
425
 
423
426
  const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentImplProps>(
424
427
  (props: ScopedProps<PopoverContentImplProps>, forwardedRef) => {
@@ -485,7 +488,7 @@ const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentI
485
488
  {...contentProps}
486
489
  collisionPadding={safeCollisionPadding}
487
490
  collisionBoundary={computedCollisionBoundary}
488
- className={tx('popover.content', 'popover', { elevation }, classNames)}
491
+ className={tx('popover.content', { elevation }, classNames)}
489
492
  ref={forwardedRef}
490
493
  style={{
491
494
  ...contentProps.style,
@@ -511,8 +514,8 @@ const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentI
511
514
 
512
515
  const CLOSE_NAME = 'PopoverClose';
513
516
 
514
- type PopoverCloseElement = ElementRef<typeof Primitive.button>;
515
- interface PopoverCloseProps extends PrimitiveButtonProps {}
517
+ type PopoverCloseElement = ComponentRef<typeof Primitive.button>;
518
+ type PopoverCloseProps = PrimitiveButtonProps;
516
519
 
517
520
  const PopoverClose = forwardRef<PopoverCloseElement, PopoverCloseProps>(
518
521
  (props: ScopedProps<PopoverCloseProps>, forwardedRef) => {
@@ -537,9 +540,9 @@ PopoverClose.displayName = CLOSE_NAME;
537
540
 
538
541
  const ARROW_NAME = 'PopoverArrow';
539
542
 
540
- type PopoverArrowElement = ElementRef<typeof PopperPrimitive.Arrow>;
543
+ type PopoverArrowElement = ComponentRef<typeof PopperPrimitive.Arrow>;
541
544
  type PopperArrowProps = ThemedClassName<ComponentPropsWithoutRef<typeof PopperPrimitive.Arrow>>;
542
- interface PopoverArrowProps extends PopperArrowProps {}
545
+ type PopoverArrowProps = PopperArrowProps;
543
546
 
544
547
  const PopoverArrow = forwardRef<PopoverArrowElement, PopoverArrowProps>(
545
548
  (props: ScopedProps<PopoverArrowProps>, forwardedRef) => {
@@ -550,7 +553,7 @@ const PopoverArrow = forwardRef<PopoverArrowElement, PopoverArrowProps>(
550
553
  <PopperPrimitive.Arrow
551
554
  {...popperScope}
552
555
  {...arrowProps}
553
- className={tx('popover.arrow', 'popover__arrow', {}, classNames)}
556
+ className={tx('popover.arrow', {}, classNames)}
554
557
  ref={forwardedRef}
555
558
  />
556
559
  );
@@ -572,15 +575,15 @@ type PopoverViewportProps = ThemedClassName<ComponentPropsWithRef<typeof Primiti
572
575
  const PopoverViewport = forwardRef<HTMLDivElement, PopoverViewportProps>(
573
576
  ({ classNames, asChild, constrainInline = true, constrainBlock = true, children, ...props }, forwardedRef) => {
574
577
  const { tx } = useThemeContext();
575
- const Root = asChild ? Slot : Primitive.div;
578
+ const Comp = asChild ? Slot : Primitive.div;
576
579
  return (
577
- <Root
580
+ <Comp
578
581
  {...props}
579
- className={tx('popover.viewport', 'popover__viewport', { constrainInline, constrainBlock }, classNames)}
582
+ className={tx('popover.viewport', { constrainInline, constrainBlock }, classNames)}
580
583
  ref={forwardedRef}
581
584
  >
582
585
  {children}
583
- </Root>
586
+ </Comp>
584
587
  );
585
588
  },
586
589
  );
@@ -1,101 +1,241 @@
1
1
  //
2
- // Copyright 2023 DXOS.org
2
+ // Copyright 2026 DXOS.org
3
3
  //
4
4
 
5
- import { type Meta, type StoryObj } from '@storybook/react-vite';
6
- import React, { type PropsWithChildren } from 'react';
5
+ import React, { PropsWithChildren, useMemo } from 'react';
7
6
 
8
7
  import { faker } from '@dxos/random';
9
- import { activeSurface, surfaceShadow } from '@dxos/ui-theme';
8
+ import { mx } from '@dxos/ui-theme';
10
9
 
11
10
  import { withLayout, withTheme } from '../../testing';
12
11
 
13
12
  import { ScrollArea } from './ScrollArea';
13
+ import { Column } from '../../primitives';
14
+ import { Input } from '../Input';
15
+ import { ThemedClassName } from '@dxos/ui-types';
14
16
 
15
- faker.seed(1234);
17
+ faker.seed(123);
16
18
 
17
- const DefaultStory = ({ children }: PropsWithChildren<{}>) => {
19
+ export default {
20
+ title: 'ui/react-ui-core/components/ScrollArea',
21
+ component: ScrollArea,
22
+ decorators: [withTheme()],
23
+ parameters: {
24
+ layout: 'centered',
25
+ },
26
+ };
27
+
28
+ const List = ({ items = 50 }: { items?: number }) => (
29
+ <div>
30
+ {Array.from({ length: items }).map((_, index) => (
31
+ <div key={index} className='px-1 cursor-pointer hover:bg-hover-surface'>
32
+ Item {index + 1}
33
+ </div>
34
+ ))}
35
+ </div>
36
+ );
37
+
38
+ const Row = ({ items = 50 }: { items?: number }) => (
39
+ <div className='flex gap-2 w-max'>
40
+ {Array.from({ length: items }).map((_, index) => (
41
+ <div
42
+ key={index}
43
+ className='shrink-0 h-20 w-20 cursor-pointer border border-separator rounded-md flex items-center justify-center hover:bg-hover-surface'
44
+ >
45
+ {index + 1}
46
+ </div>
47
+ ))}
48
+ </div>
49
+ );
50
+
51
+ const Container = ({ classNames, children }: ThemedClassName<PropsWithChildren>) => {
18
52
  return (
19
- <ScrollArea.Root
20
- classNames={['is-[300px] bs-[400px] rounded', activeSurface, surfaceShadow({ elevation: 'positioned' })]}
21
- >
22
- <ScrollArea.Viewport classNames='rounded p-4'>
23
- <p>{children}</p>
24
- </ScrollArea.Viewport>
25
- <ScrollArea.Scrollbar orientation='horizontal'>
26
- <ScrollArea.Thumb />
27
- </ScrollArea.Scrollbar>
28
- <ScrollArea.Scrollbar orientation='vertical'>
29
- <ScrollArea.Thumb />
30
- </ScrollArea.Scrollbar>
31
- <ScrollArea.Corner />
32
- </ScrollArea.Root>
53
+ <div role='none' className={mx('border border-separator rounded-md overflow-hidden', classNames)}>
54
+ {children}
55
+ </div>
33
56
  );
34
57
  };
35
58
 
36
- const meta = {
37
- title: 'ui/react-ui-core/ScrollArea',
38
- component: ScrollArea as any,
39
- render: DefaultStory,
40
- decorators: [withTheme, withLayout({ layout: 'fullscreen' })],
41
- parameters: {
42
- layout: 'fullscreen',
43
- },
44
- } satisfies Meta<typeof DefaultStory>;
59
+ export const Vertical = {
60
+ render: () => (
61
+ <Container classNames='h-72 w-48'>
62
+ <ScrollArea.Root orientation='vertical'>
63
+ <ScrollArea.Viewport>
64
+ <List />
65
+ </ScrollArea.Viewport>
66
+ </ScrollArea.Root>
67
+ </Container>
68
+ ),
69
+ };
45
70
 
46
- export default meta;
71
+ export const VerticalThin = {
72
+ render: () => (
73
+ <Container classNames='h-72 w-48'>
74
+ <ScrollArea.Root orientation='vertical' thin>
75
+ <ScrollArea.Viewport>
76
+ <List />
77
+ </ScrollArea.Viewport>
78
+ </ScrollArea.Root>
79
+ </Container>
80
+ ),
81
+ };
47
82
 
48
- type Story = StoryObj<typeof meta>;
83
+ export const VerticalPadded = {
84
+ render: () => (
85
+ <Container classNames='h-72 w-48'>
86
+ <ScrollArea.Root orientation='vertical' centered padding thin>
87
+ <ScrollArea.Viewport>
88
+ <List />
89
+ </ScrollArea.Viewport>
90
+ </ScrollArea.Root>
91
+ </Container>
92
+ ),
93
+ };
49
94
 
50
- export const Default: Story = {
51
- args: {
52
- children: faker.lorem.paragraphs(5),
53
- },
95
+ export const VerticalColumn = {
96
+ render: () => (
97
+ <Container classNames='h-72 w-48'>
98
+ <Column.Root gutter='sm' classNames='h-full overflow-hidden'>
99
+ <ScrollArea.Root orientation='vertical' padding thin>
100
+ <ScrollArea.Viewport classNames='py-2'>
101
+ <Input.Root>
102
+ <Input.TextInput classNames='p-1' />
103
+ </Input.Root>
104
+ <List />
105
+ </ScrollArea.Viewport>
106
+ </ScrollArea.Root>
107
+ </Column.Root>
108
+ </Container>
109
+ ),
54
110
  };
55
111
 
56
- export const NestedScrollAreas: Story = {
57
- render: () => {
58
- const columns = Array.from({ length: 3 }).map((_, index) => ({
59
- id: String(index),
60
- itemCount: 20,
61
- }));
112
+ export const Horizontal = {
113
+ render: () => (
114
+ <Container classNames='w-96'>
115
+ <ScrollArea.Root orientation='horizontal'>
116
+ <ScrollArea.Viewport>
117
+ <Row />
118
+ </ScrollArea.Viewport>
119
+ </ScrollArea.Root>
120
+ </Container>
121
+ ),
122
+ };
62
123
 
63
- return (
64
- <div className='p-4 bs-full is-full overflow-hidden'>
65
- <div className='flex bs-full is-full overflow-hidden border border-sky-500'>
66
- <ScrollArea.Root>
67
- <ScrollArea.Viewport>
68
- <div className='flex gap-4 p-3 bs-full overflow-hidden'>
69
- {columns.map((column) => (
70
- <div key={column.id} className='flex flex-col gap-1 bs-full overflow-hidden is-[300px]'>
71
- <div className='flex shrink-0 p-2 border border-separator'>Column {column.id}</div>
72
- <ScrollArea.Expander classNames='border border-rose-500'>
73
- <ScrollArea.Root>
74
- <ScrollArea.Viewport>
75
- <div className='flex flex-col p-3 space-y-2'>
76
- {Array.from({ length: column.itemCount }, (_, i) => (
77
- <div key={i} className={`p-3 border border-separator rounded-sm`}>
78
- Item {i + 1}
79
- </div>
80
- ))}
81
- </div>
82
- </ScrollArea.Viewport>
83
- <ScrollArea.Scrollbar orientation='vertical'>
84
- <ScrollArea.Thumb />
85
- </ScrollArea.Scrollbar>
86
- </ScrollArea.Root>
87
- </ScrollArea.Expander>
88
- <div className={`p-2 border border-separator`}>Footer</div>
124
+ export const HorizontalThin = {
125
+ render: () => (
126
+ <Container classNames='w-96'>
127
+ <ScrollArea.Root orientation='horizontal' thin>
128
+ <ScrollArea.Viewport>
129
+ <Row />
130
+ </ScrollArea.Viewport>
131
+ </ScrollArea.Root>
132
+ </Container>
133
+ ),
134
+ };
135
+
136
+ export const Both = {
137
+ render: () => (
138
+ <Container classNames='w-96 h-96'>
139
+ <ScrollArea.Root orientation='all'>
140
+ <ScrollArea.Viewport>
141
+ <div className='flex flex-col gap-2'>
142
+ {Array.from({ length: 50 }).map((_, rowIndex) => (
143
+ <div key={rowIndex} className='flex gap-2'>
144
+ {Array.from({ length: 50 }).map((_, colIndex) => (
145
+ <div
146
+ key={colIndex}
147
+ className='shrink-0 h-20 w-20 flex items-center justify-center text-sm border border-separator font-mono'
148
+ >
149
+ [{colIndex}:{rowIndex}]
89
150
  </div>
90
151
  ))}
91
152
  </div>
92
- </ScrollArea.Viewport>
93
- <ScrollArea.Scrollbar orientation='horizontal'>
94
- <ScrollArea.Thumb />
95
- </ScrollArea.Scrollbar>
96
- </ScrollArea.Root>
153
+ ))}
154
+ </div>
155
+ </ScrollArea.Viewport>
156
+ </ScrollArea.Root>
157
+ </Container>
158
+ ),
159
+ };
160
+
161
+ export const Fullscreen = {
162
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
163
+ render: () => (
164
+ <ScrollArea.Root orientation='all' thin>
165
+ <ScrollArea.Viewport>
166
+ <div className='flex flex-col gap-2'>
167
+ {Array.from({ length: 50 }).map((_, rowIndex) => (
168
+ <div key={rowIndex} className='flex gap-2'>
169
+ {Array.from({ length: 50 }).map((_, colIndex) => (
170
+ <div
171
+ key={colIndex}
172
+ className='shrink-0 h-20 w-20 flex items-center justify-center text-sm border border-separator font-mono'
173
+ >
174
+ [{colIndex}:{rowIndex}]
175
+ </div>
176
+ ))}
177
+ </div>
178
+ ))}
97
179
  </div>
98
- </div>
180
+ </ScrollArea.Viewport>
181
+ </ScrollArea.Root>
182
+ ),
183
+ };
184
+
185
+ export const NestedScrollAreas = {
186
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
187
+ render: () => {
188
+ const columns = useMemo(
189
+ () =>
190
+ Array.from({ length: 8 }).map((_, index) => ({
191
+ id: String(index),
192
+ count: faker.number.int({ min: 5, max: 20 }),
193
+ })),
194
+ [],
195
+ );
196
+
197
+ return (
198
+ <ScrollArea.Root orientation='horizontal' thin padding>
199
+ <ScrollArea.Viewport classNames='gap-4'>
200
+ {columns.map((column) => (
201
+ <section
202
+ key={column.id}
203
+ className='shrink-0 h-full w-[16rem] grid grid-rows-[min-content_1fr_min-content] border border-separator'
204
+ >
205
+ <header className='flex shrink-0 p-2 border-b border-separator'>Column {column.id}</header>
206
+ <ScrollArea.Root thin orientation='vertical'>
207
+ <ScrollArea.Viewport classNames='py-2 px-2 gap-2'>
208
+ {Array.from({ length: column.count }, (_, i) => (
209
+ <div key={i} role='listitem' className={`shrink-0 p-2 text-sm border border-separator rounded-xs`}>
210
+ Item {i + 1}
211
+ </div>
212
+ ))}
213
+ </ScrollArea.Viewport>
214
+ </ScrollArea.Root>
215
+ <footer className={`p-2 text-subdued border-t border-separator`}>{column.count}</footer>
216
+ </section>
217
+ ))}
218
+ </ScrollArea.Viewport>
219
+ </ScrollArea.Root>
99
220
  );
100
221
  },
101
222
  };
223
+
224
+ export const NativeScroll = {
225
+ render: () => (
226
+ <div className='group h-48 w-48 border border-separator'>
227
+ <div
228
+ className={mx(
229
+ 'group h-full w-full overflow-y-scroll',
230
+ '[&::-webkit-scrollbar]:w-3',
231
+ '[&::-webkit-scrollbar-thumb]:rounded-none',
232
+ '[&::-webkit-scrollbar-track]:bg-scrollbar-track',
233
+ '[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumbSubdued',
234
+ 'group-hover:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb',
235
+ )}
236
+ >
237
+ <List />
238
+ </div>
239
+ </div>
240
+ ),
241
+ };