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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (263) hide show
  1. package/dist/lib/browser/{chunk-5SPBSIWS.mjs → chunk-CMHHVHX3.mjs} +14 -1
  2. package/dist/lib/browser/chunk-CMHHVHX3.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-7JFD5ZHZ.mjs → chunk-GTHV4WYK.mjs} +141 -254
  4. package/dist/lib/browser/chunk-GTHV4WYK.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +1553 -1274
  6. package/dist/lib/browser/index.mjs.map +4 -4
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/lib/browser/testing/index.mjs +5 -5
  9. package/dist/lib/browser/testing/index.mjs.map +2 -2
  10. package/dist/lib/browser/translations.mjs +1 -1
  11. package/dist/lib/node-esm/{chunk-TTEL2FP2.mjs → chunk-3VSKWNCQ.mjs} +141 -254
  12. package/dist/lib/node-esm/chunk-3VSKWNCQ.mjs.map +7 -0
  13. package/dist/lib/node-esm/{chunk-FPVTVXND.mjs → chunk-P4KFQGJI.mjs} +14 -1
  14. package/dist/lib/node-esm/chunk-P4KFQGJI.mjs.map +7 -0
  15. package/dist/lib/node-esm/index.mjs +1553 -1274
  16. package/dist/lib/node-esm/index.mjs.map +4 -4
  17. package/dist/lib/node-esm/meta.json +1 -1
  18. package/dist/lib/node-esm/testing/index.mjs +5 -5
  19. package/dist/lib/node-esm/testing/index.mjs.map +2 -2
  20. package/dist/lib/node-esm/translations.mjs +1 -1
  21. package/dist/types/src/components/Avatars/Avatar.d.ts +1 -1
  22. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  23. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +3 -3
  24. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  25. package/dist/types/src/components/Button/Button.d.ts +4 -2
  26. package/dist/types/src/components/Button/Button.d.ts.map +1 -1
  27. package/dist/types/src/components/Button/IconButton.d.ts +0 -1
  28. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
  29. package/dist/types/src/components/Button/IconButton.stories.d.ts +37 -0
  30. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
  31. package/dist/types/src/components/Button/MicButton.d.ts +24 -0
  32. package/dist/types/src/components/Button/MicButton.d.ts.map +1 -0
  33. package/dist/types/src/components/Button/MicButton.stories.d.ts +57 -0
  34. package/dist/types/src/components/Button/MicButton.stories.d.ts.map +1 -0
  35. package/dist/types/src/components/Button/SystemIconButton.d.ts +33 -0
  36. package/dist/types/src/components/Button/SystemIconButton.d.ts.map +1 -0
  37. package/dist/types/src/components/Button/SystemIconButton.stories.d.ts +51 -0
  38. package/dist/types/src/components/Button/SystemIconButton.stories.d.ts.map +1 -0
  39. package/dist/types/src/components/Button/ToggleGroup.d.ts +2 -2
  40. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -1
  41. package/dist/types/src/components/Button/ToggleIconButton.d.ts +15 -0
  42. package/dist/types/src/components/Button/ToggleIconButton.d.ts.map +1 -0
  43. package/dist/types/src/components/Button/index.d.ts +3 -0
  44. package/dist/types/src/components/Button/index.d.ts.map +1 -1
  45. package/dist/types/src/components/Calendar/Calendar.d.ts.map +1 -1
  46. package/dist/types/src/components/Calendar/Calendar.theme.d.ts.map +1 -1
  47. package/dist/types/src/components/Card/Card.d.ts +32 -26
  48. package/dist/types/src/components/Card/Card.d.ts.map +1 -1
  49. package/dist/types/src/components/Card/Card.stories.d.ts +3 -3
  50. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -1
  51. package/dist/types/src/components/Card/Card.theme.d.ts.map +1 -1
  52. package/dist/types/src/components/Carousel/Carousel.d.ts +29 -6
  53. package/dist/types/src/components/Carousel/Carousel.d.ts.map +1 -1
  54. package/dist/types/src/components/Carousel/Carousel.stories.d.ts +48 -2
  55. package/dist/types/src/components/Carousel/Carousel.stories.d.ts.map +1 -1
  56. package/dist/types/src/components/Clipboard/index.d.ts +1 -0
  57. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  58. package/dist/types/src/components/Column/Column.d.ts +20 -2
  59. package/dist/types/src/components/Column/Column.d.ts.map +1 -1
  60. package/dist/types/src/components/Column/Column.theme.d.ts +8 -0
  61. package/dist/types/src/components/Column/Column.theme.d.ts.map +1 -1
  62. package/dist/types/src/components/Dialog/AlertDialog.d.ts +2 -2
  63. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
  64. package/dist/types/src/components/Dialog/Dialog.d.ts +1 -1
  65. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  66. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +2 -2
  67. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
  68. package/dist/types/src/components/Icon/Icon.stories.d.ts +5 -0
  69. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -1
  70. package/dist/types/src/components/Input/Input.d.ts +4 -1
  71. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  72. package/dist/types/src/components/Input/Input.stories.d.ts +3 -3
  73. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  74. package/dist/types/src/components/Input/Input.theme.d.ts +10 -10
  75. package/dist/types/src/components/Input/Input.theme.d.ts.map +1 -1
  76. package/dist/types/src/components/Input/SegmentedInput.d.ts +8 -8
  77. package/dist/types/src/components/Input/SegmentedInput.d.ts.map +1 -1
  78. package/dist/types/src/components/Input/index.d.ts +0 -1
  79. package/dist/types/src/components/Input/index.d.ts.map +1 -1
  80. package/dist/types/src/components/Main/Main.d.ts +3 -3
  81. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  82. package/dist/types/src/components/Menu/ContextMenu.d.ts +1 -1
  83. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
  84. package/dist/types/src/components/Menu/DropdownMenu.d.ts +2 -2
  85. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
  86. package/dist/types/src/components/Message/Message.d.ts +1 -1
  87. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  88. package/dist/types/src/components/Message/Message.stories.d.ts +2 -2
  89. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  90. package/dist/types/src/components/Message/Message.theme.d.ts.map +1 -1
  91. package/dist/types/src/components/Panel/Panel.d.ts +1 -1
  92. package/dist/types/src/components/Panel/Panel.d.ts.map +1 -1
  93. package/dist/types/src/components/Panel/Panel.theme.d.ts.map +1 -1
  94. package/dist/types/src/components/Popover/Popover.d.ts +2 -2
  95. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  96. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +2 -0
  97. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  98. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +1 -0
  99. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  100. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +1 -1
  101. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  102. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +2 -2
  103. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
  104. package/dist/types/src/components/Select/Select.d.ts +1 -1
  105. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  106. package/dist/types/src/components/Select/Select.stories.d.ts +2 -2
  107. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  108. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  109. package/dist/types/src/components/Splitter/Splitter.d.ts +30 -16
  110. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -1
  111. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +6 -1
  112. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -1
  113. package/dist/types/src/components/Splitter/Splitter.theme.d.ts +3 -1
  114. package/dist/types/src/components/Splitter/Splitter.theme.d.ts.map +1 -1
  115. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  116. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  117. package/dist/types/src/components/Tag/Tag.theme.d.ts +1 -1
  118. package/dist/types/src/components/Tag/Tag.theme.d.ts.map +1 -1
  119. package/dist/types/src/components/Toast/Toast.d.ts +1 -1
  120. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  121. package/dist/types/src/components/Toast/Toast.theme.d.ts.map +1 -1
  122. package/dist/types/src/components/Toolbar/Toolbar.d.ts +1 -1
  123. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  124. package/dist/types/src/components/Tooltip/TextTooltip.d.ts +19 -0
  125. package/dist/types/src/components/Tooltip/TextTooltip.d.ts.map +1 -0
  126. package/dist/types/src/components/Tooltip/Tooltip.d.ts +3 -3
  127. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  128. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +2 -2
  129. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  130. package/dist/types/src/components/Tooltip/index.d.ts +1 -0
  131. package/dist/types/src/components/Tooltip/index.d.ts.map +1 -1
  132. package/dist/types/src/components/index.d.ts +0 -1
  133. package/dist/types/src/components/index.d.ts.map +1 -1
  134. package/dist/types/src/index.d.ts +1 -1
  135. package/dist/types/src/index.d.ts.map +1 -1
  136. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts +1 -8
  137. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  138. package/dist/types/src/testing/Loading.d.ts.map +1 -1
  139. package/dist/types/src/theme/defaultTheme.d.ts.map +1 -1
  140. package/dist/types/src/theme/index.d.ts +0 -2
  141. package/dist/types/src/theme/index.d.ts.map +1 -1
  142. package/dist/types/src/translations.d.ts +13 -0
  143. package/dist/types/src/translations.d.ts.map +1 -1
  144. package/dist/types/src/util/slots.d.ts +1 -1
  145. package/dist/types/src/util/slots.d.ts.map +1 -1
  146. package/dist/types/tsconfig.tsbuildinfo +1 -1
  147. package/package.json +22 -21
  148. package/src/components/Avatars/Avatar.stories.tsx +2 -2
  149. package/src/components/Avatars/Avatar.theme.ts +1 -1
  150. package/src/components/Avatars/Avatar.tsx +3 -3
  151. package/src/components/Breadcrumb/Breadcrumb.tsx +6 -6
  152. package/src/components/Button/Button.tsx +25 -4
  153. package/src/components/Button/IconButton.stories.tsx +81 -1
  154. package/src/components/Button/IconButton.tsx +2 -4
  155. package/src/components/Button/MicButton.stories.tsx +60 -0
  156. package/src/components/Button/MicButton.tsx +117 -0
  157. package/src/components/Button/SystemIconButton.stories.tsx +91 -0
  158. package/src/components/Button/SystemIconButton.tsx +264 -0
  159. package/src/components/Button/ToggleGroup.tsx +2 -2
  160. package/src/components/Button/ToggleIconButton.tsx +32 -0
  161. package/src/components/Button/index.ts +3 -0
  162. package/src/components/Calendar/Calendar.theme.ts +2 -0
  163. package/src/components/Calendar/Calendar.tsx +3 -3
  164. package/src/components/Card/Card.stories.tsx +71 -29
  165. package/src/components/Card/Card.theme.ts +27 -9
  166. package/src/components/Card/Card.tsx +176 -99
  167. package/src/components/Carousel/Carousel.stories.tsx +42 -18
  168. package/src/components/Carousel/Carousel.tsx +169 -33
  169. package/src/components/Column/Column.theme.ts +32 -4
  170. package/src/components/Column/Column.tsx +39 -7
  171. package/src/components/Dialog/AlertDialog.stories.tsx +2 -2
  172. package/src/components/Dialog/AlertDialog.tsx +13 -13
  173. package/src/components/Dialog/Dialog.stories.tsx +3 -4
  174. package/src/components/Dialog/Dialog.theme.ts +1 -1
  175. package/src/components/Dialog/Dialog.tsx +12 -12
  176. package/src/components/Icon/Icon.stories.tsx +23 -0
  177. package/src/components/Icon/Icon.theme.ts +1 -1
  178. package/src/components/Input/Input.stories.tsx +13 -5
  179. package/src/components/Input/Input.theme.ts +17 -39
  180. package/src/components/Input/Input.tsx +30 -13
  181. package/src/components/Input/SegmentedInput.tsx +50 -41
  182. package/src/components/Input/index.ts +0 -1
  183. package/src/components/Main/Main.tsx +3 -3
  184. package/src/components/MediaPlayer/MediaPlayer.tsx +4 -4
  185. package/src/components/Menu/ContextMenu.tsx +8 -8
  186. package/src/components/Menu/DropdownMenu.tsx +12 -13
  187. package/src/components/Message/Message.stories.tsx +2 -2
  188. package/src/components/Message/Message.theme.ts +1 -11
  189. package/src/components/Message/Message.tsx +6 -6
  190. package/src/components/Panel/Panel.theme.ts +2 -1
  191. package/src/components/Panel/Panel.tsx +1 -1
  192. package/src/components/Popover/Popover.theme.ts +1 -1
  193. package/src/components/Popover/Popover.tsx +9 -9
  194. package/src/components/ScrollArea/ScrollArea.tsx +7 -4
  195. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +2 -2
  196. package/src/components/ScrollContainer/ScrollContainer.tsx +2 -2
  197. package/src/components/Select/Select.stories.tsx +2 -2
  198. package/src/components/Select/Select.theme.ts +1 -1
  199. package/src/components/Select/Select.tsx +14 -14
  200. package/src/components/Separator/Separator.tsx +1 -0
  201. package/src/components/Splitter/Splitter.stories.tsx +84 -20
  202. package/src/components/Splitter/Splitter.theme.ts +20 -3
  203. package/src/components/Splitter/Splitter.tsx +320 -47
  204. package/src/components/Tag/Tag.stories.tsx +1 -1
  205. package/src/components/Tag/Tag.theme.ts +1 -1
  206. package/src/components/Tag/Tag.tsx +3 -5
  207. package/src/components/Toast/Toast.theme.ts +3 -8
  208. package/src/components/Toast/Toast.tsx +16 -15
  209. package/src/components/Toolbar/Toolbar.tsx +10 -10
  210. package/src/components/Tooltip/TextTooltip.tsx +54 -0
  211. package/src/components/Tooltip/Tooltip.stories.tsx +2 -2
  212. package/src/components/Tooltip/Tooltip.tsx +3 -3
  213. package/src/components/Tooltip/index.ts +1 -0
  214. package/src/components/index.ts +0 -1
  215. package/src/exemplars/tabster.stories.tsx +1 -1
  216. package/src/index.ts +1 -1
  217. package/src/primitives/ThemeProvider/TranslationsProvider.tsx +10 -30
  218. package/src/testing/Loading.tsx +2 -1
  219. package/src/testing/decorators/withLayout.tsx +2 -2
  220. package/src/theme/defaultTheme.ts +0 -4
  221. package/src/theme/index.ts +0 -2
  222. package/src/translations.ts +18 -0
  223. package/src/util/slots.ts +5 -5
  224. package/dist/lib/browser/chunk-5SPBSIWS.mjs.map +0 -7
  225. package/dist/lib/browser/chunk-7JFD5ZHZ.mjs.map +0 -7
  226. package/dist/lib/node-esm/chunk-FPVTVXND.mjs.map +0 -7
  227. package/dist/lib/node-esm/chunk-TTEL2FP2.mjs.map +0 -7
  228. package/dist/types/src/components/Input/constants.d.ts +0 -2
  229. package/dist/types/src/components/Input/constants.d.ts.map +0 -1
  230. package/dist/types/src/components/List/List.d.ts +0 -29
  231. package/dist/types/src/components/List/List.d.ts.map +0 -1
  232. package/dist/types/src/components/List/List.stories.d.ts +0 -16
  233. package/dist/types/src/components/List/List.stories.d.ts.map +0 -1
  234. package/dist/types/src/components/List/List.theme.d.ts +0 -7
  235. package/dist/types/src/components/List/List.theme.d.ts.map +0 -1
  236. package/dist/types/src/components/List/ListDropIndicator.d.ts +0 -13
  237. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +0 -1
  238. package/dist/types/src/components/List/Tree.d.ts +0 -23
  239. package/dist/types/src/components/List/Tree.d.ts.map +0 -1
  240. package/dist/types/src/components/List/Tree.stories.d.ts +0 -15
  241. package/dist/types/src/components/List/Tree.stories.d.ts.map +0 -1
  242. package/dist/types/src/components/List/TreeDropIndicator.d.ts +0 -8
  243. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +0 -1
  244. package/dist/types/src/components/List/Treegrid.d.ts +0 -33
  245. package/dist/types/src/components/List/Treegrid.d.ts.map +0 -1
  246. package/dist/types/src/components/List/Treegrid.stories.d.ts +0 -12
  247. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +0 -1
  248. package/dist/types/src/components/List/Treegrid.theme.d.ts +0 -7
  249. package/dist/types/src/components/List/Treegrid.theme.d.ts.map +0 -1
  250. package/dist/types/src/components/List/index.d.ts +0 -4
  251. package/dist/types/src/components/List/index.d.ts.map +0 -1
  252. package/src/components/Input/constants.ts +0 -5
  253. package/src/components/List/List.stories.tsx +0 -234
  254. package/src/components/List/List.theme.ts +0 -47
  255. package/src/components/List/List.tsx +0 -171
  256. package/src/components/List/ListDropIndicator.tsx +0 -69
  257. package/src/components/List/Tree.stories.tsx +0 -87
  258. package/src/components/List/Tree.tsx +0 -74
  259. package/src/components/List/TreeDropIndicator.tsx +0 -70
  260. package/src/components/List/Treegrid.stories.tsx +0 -156
  261. package/src/components/List/Treegrid.theme.ts +0 -35
  262. package/src/components/List/Treegrid.tsx +0 -187
  263. package/src/components/List/index.ts +0 -7
@@ -1,12 +0,0 @@
1
- import { type StoryObj } from '@storybook/react-vite';
2
- import React from 'react';
3
- declare const meta: {
4
- title: string;
5
- component: any;
6
- render: () => React.JSX.Element;
7
- decorators: import("@storybook/react").Decorator[];
8
- };
9
- export default meta;
10
- type Story = StoryObj<typeof meta>;
11
- export declare const Default: Story;
12
- //# sourceMappingURL=Treegrid.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Treegrid.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/List/Treegrid.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,MAAM,OAAO,CAAC;AA2I1B,QAAA,MAAM,IAAI;;eAEoB,GAAG;;;CAGI,CAAC;eAEvB,IAAI;AAEnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC"}
@@ -1,7 +0,0 @@
1
- import type { Theme } from '@dxos/ui-types';
2
- export type TreegridStyleProps = Partial<{
3
- level: number;
4
- indent: boolean;
5
- }>;
6
- export declare const treegridTheme: Theme<TreegridStyleProps>;
7
- //# sourceMappingURL=Treegrid.theme.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Treegrid.theme.d.ts","sourceRoot":"","sources":["../../../../../src/components/List/Treegrid.theme.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAqB,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE/D,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC,CAAC;AAoBH,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,kBAAkB,CAInD,CAAC"}
@@ -1,4 +0,0 @@
1
- export * from './List';
2
- export * from './Tree';
3
- export * from './Treegrid';
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/List/index.ts"],"names":[],"mappings":"AAIA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC"}
@@ -1,5 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- export const inputTextLabel = 'py-1 text-sm text-description';
@@ -1,234 +0,0 @@
1
- //
2
- // Copyright 2022 DXOS.org
3
- //
4
-
5
- import { DndContext, type DragEndEvent, type DragStartEvent } from '@dnd-kit/core';
6
- import { SortableContext, arrayMove, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable';
7
- import { CSS } from '@dnd-kit/utilities';
8
- import { useArrowNavigationGroup } from '@fluentui/react-tabster';
9
- import { type Meta, type StoryObj } from '@storybook/react-vite';
10
- import React, { type ReactNode, useCallback, useState } from 'react';
11
-
12
- import { getSize, ghostHover, mx, surfaceShadow } from '@dxos/ui-theme';
13
-
14
- import { withTheme } from '../../testing';
15
- import { Icon } from '../Icon';
16
- import { List, ListItem, type ListScopedProps } from './List';
17
-
18
- const meta = {
19
- title: 'ui/react-ui-core/components/List',
20
- component: List,
21
- decorators: [withTheme()],
22
- } satisfies Meta<typeof List>;
23
-
24
- export default meta;
25
-
26
- type Story = StoryObj<typeof meta>;
27
-
28
- const UniformListItem = ({ id, text }: { id: string; text: string }) => {
29
- const { attributes, listeners, setNodeRef, transform } = useSortable({ id });
30
- return (
31
- <ListItem.Root
32
- id={id}
33
- ref={setNodeRef}
34
- {...attributes}
35
- {...listeners}
36
- style={{ transform: CSS.Transform.toString(transform) }}
37
- >
38
- <ListItem.Endcap>
39
- <Icon icon='ph--dots-six-vertical--regular' classNames={mx(getSize(5), 'mt-2.5')} />
40
- </ListItem.Endcap>
41
- <ListItem.Heading classNames='grow pt-2'>{text}</ListItem.Heading>
42
- <ListItem.Endcap>
43
- <Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), 'mt-2.5')} />
44
- </ListItem.Endcap>
45
- </ListItem.Root>
46
- );
47
- };
48
-
49
- export const UniformSizeDraggable: Story = {
50
- render: ({ ...args }) => {
51
- const [items, setItems] = useState(
52
- [...Array(12)].map((_, index) => ({
53
- id: `listItem-${index}`,
54
- text: `List item ${index + 1}`,
55
- })),
56
- );
57
-
58
- const handleDragEnd = useCallback(
59
- (event: DragEndEvent) => {
60
- const { active, over } = event;
61
- if (active.id !== over?.id) {
62
- setItems((items) => {
63
- const oldIndex = items.findIndex((item) => item.id === active.id);
64
- const newIndex = items.findIndex((item) => item.id === over?.id);
65
- return arrayMove(items, oldIndex, newIndex);
66
- });
67
- }
68
- },
69
- [items],
70
- );
71
-
72
- return (
73
- <DndContext onDragEnd={handleDragEnd}>
74
- <SortableContext items={items.map(({ id }) => id)} strategy={verticalListSortingStrategy}>
75
- <List {...args} itemSizes='one'>
76
- {items.map((item) => (
77
- <UniformListItem key={item.id} {...item} />
78
- ))}
79
- </List>
80
- </SortableContext>
81
- </DndContext>
82
- );
83
- },
84
- args: {},
85
- };
86
-
87
- const ManySizesDraggableListItem = ({
88
- id,
89
- text,
90
- className,
91
- dragging,
92
- __listScope,
93
- }: ListScopedProps<{ id: string; text: ReactNode; className?: string; dragging?: boolean }>) => {
94
- const { attributes, listeners, setNodeRef, transform } = useSortable({ id });
95
- return (
96
- <ListItem.Root
97
- id={id}
98
- classNames={[dragging && 'relative z-10', className]}
99
- ref={setNodeRef}
100
- {...attributes}
101
- {...listeners}
102
- style={{ transform: CSS.Translate.toString(transform) }}
103
- >
104
- <ListItem.Endcap>
105
- <Icon icon='ph--dots-six-vertical--regular' classNames={mx(getSize(5), 'mt-2.5')} />
106
- </ListItem.Endcap>
107
- <ListItem.Heading classNames='grow pt-2' asChild>
108
- {text}
109
- </ListItem.Heading>
110
- <ListItem.Endcap>
111
- <Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), 'mt-2.5')} />
112
- </ListItem.Endcap>
113
- </ListItem.Root>
114
- );
115
- };
116
-
117
- export const ManySizesDraggable: Story = {
118
- render: ({ ...args }) => {
119
- const [items, setItems] = useState(
120
- [...Array(12)].map((_, index) => ({
121
- id: `listItem-${index}`,
122
- text: (
123
- <p
124
- className={mx(
125
- index % 3 === 0 ? 'h-20' : index % 2 === 0 ? 'h-12' : 'h-8',
126
- surfaceShadow({ elevation: 'positioned' }),
127
- 'mb-2 p-2 bg-white dark:bg-neutral-800 rounded-sm',
128
- )}
129
- >{`List item ${index + 1}`}</p>
130
- ),
131
- })),
132
- );
133
-
134
- const [activeId, setActiveId] = useState<string | null>(null);
135
-
136
- const handleDragStart = ({ active: { id } }: DragStartEvent) => setActiveId(id.toString());
137
-
138
- const handleDragEnd = (event: DragEndEvent) => {
139
- const { active, over } = event;
140
-
141
- if (active.id !== over?.id) {
142
- setItems((items) => {
143
- const oldIndex = items.findIndex((item) => item.id === active.id);
144
- const newIndex = items.findIndex((item) => item.id === over?.id);
145
- return arrayMove(items, oldIndex, newIndex);
146
- });
147
- }
148
- };
149
-
150
- return (
151
- <DndContext onDragEnd={handleDragEnd} onDragStart={handleDragStart}>
152
- <SortableContext items={items.map(({ id }) => id)} strategy={verticalListSortingStrategy}>
153
- <List {...args}>
154
- {items.map(({ id, text }) => (
155
- <ManySizesDraggableListItem key={id} {...{ id, text }} dragging={activeId === id} />
156
- ))}
157
- </List>
158
- </SortableContext>
159
- </DndContext>
160
- );
161
- },
162
- args: {},
163
- };
164
-
165
- export const Collapsible: Story = {
166
- render: ({ ...args }) => {
167
- const [items, _setItems] = useState(
168
- [...Array(12)].map((_, index) => ({
169
- id: `listItem-${index}`,
170
- text: `List item ${index + 1}`,
171
- body: `Collapsible content for item ${index + 1}`,
172
- })),
173
- );
174
-
175
- return (
176
- <List {...args}>
177
- {items.map(({ id, text, body }, index) => (
178
- <ListItem.Root key={id} id={id} collapsible={index !== 2} defaultOpen={index % 2 === 0}>
179
- <div className='grow flex'>
180
- {index !== 2 ? <ListItem.OpenTrigger /> : <ListItem.MockOpenTrigger />}
181
- <ListItem.Heading classNames='grow pt-2'>{text}</ListItem.Heading>
182
- <ListItem.Endcap>
183
- <Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), 'mt-2.5')} />
184
- </ListItem.Endcap>
185
- </div>
186
- {index !== 2 && <ListItem.CollapsibleContent>{body}</ListItem.CollapsibleContent>}
187
- </ListItem.Root>
188
- ))}
189
- </List>
190
- );
191
- },
192
- args: {
193
- variant: 'unordered',
194
- },
195
- };
196
-
197
- export const SelectableListbox: Story = {
198
- render: () => {
199
- const [selectedId, setSelectedId] = useState<string>();
200
- const arrowNavigationAttrs = useArrowNavigationGroup({ axis: 'vertical' });
201
- const [items, _setItems] = useState(
202
- [...Array(12)].map((_, index) => ({
203
- id: `listItem-${index}`,
204
- text: `List item ${index + 1}`,
205
- })),
206
- );
207
-
208
- const handleKeyUp = (event: any, id: string) => {
209
- switch (event.key) {
210
- case ' ':
211
- case 'Enter': {
212
- setSelectedId(id);
213
- }
214
- }
215
- };
216
-
217
- return (
218
- <List selectable {...arrowNavigationAttrs}>
219
- {items.map(({ id, text }) => (
220
- <ListItem.Root
221
- key={id}
222
- tabIndex={0}
223
- selected={selectedId === id}
224
- classNames={mx(ghostHover, 'dx-selected')}
225
- onClick={() => setSelectedId(id)}
226
- onKeyUp={(event) => handleKeyUp(event, id)}
227
- >
228
- <ListItem.Heading classNames='flex px-1 items-center grow truncate'>{text}</ListItem.Heading>
229
- </ListItem.Root>
230
- ))}
231
- </List>
232
- );
233
- },
234
- };
@@ -1,47 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { densityBlockSize, ghostHover } from '@dxos/ui-theme';
6
- import { getSize, mx } from '@dxos/ui-theme';
7
- import { type ComponentFunction, type Density, type Theme } from '@dxos/ui-types';
8
-
9
- export type ListStyleProps = Partial<{
10
- density: Density;
11
- collapsible: boolean;
12
- }>;
13
-
14
- const root: ComponentFunction<ListStyleProps> = (_, ...etc) => mx(...etc);
15
-
16
- const item: ComponentFunction<ListStyleProps> = ({ collapsible }, ...etc) => mx(!collapsible && 'flex', ...etc);
17
-
18
- const itemEndcap: ComponentFunction<ListStyleProps> = ({ density }, ...etc) =>
19
- mx(
20
- density === 'lg' ? getSize(10) : density === 'sm' ? getSize(7) : density === 'xs' ? getSize(6) : getSize(8),
21
- 'shrink-0 flex items-center justify-center',
22
- ...etc,
23
- );
24
-
25
- const itemHeading: ComponentFunction<ListStyleProps> = ({ density }, ...etc) =>
26
- mx(densityBlockSize(density), 'flex items-center overflow-hidden [&>span]:truncate', ...etc);
27
-
28
- const itemDragHandleIcon: ComponentFunction<ListStyleProps> = (_props, ...etc) => mx(getSize(5), 'mt-2.5', ...etc);
29
-
30
- const itemOpenTrigger: ComponentFunction<ListStyleProps> = ({ density }, ...etc) =>
31
- mx('w-5 rounded-sm flex justify-center items-center', densityBlockSize(density), ghostHover, 'dx-focus-ring', ...etc);
32
-
33
- const itemOpenTriggerIcon: ComponentFunction<ListStyleProps> = (_props, ...etc) => {
34
- return mx(getSize(5), ...etc);
35
- };
36
-
37
- export const listTheme: Theme<ListStyleProps> = {
38
- root,
39
- item: {
40
- root: item,
41
- endcap: itemEndcap,
42
- heading: itemHeading,
43
- dragHandleIcon: itemDragHandleIcon,
44
- openTrigger: itemOpenTrigger,
45
- openTriggerIcon: itemOpenTriggerIcon,
46
- },
47
- };
@@ -1,171 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { Primitive } from '@radix-ui/react-primitive';
6
- import { Slot } from '@radix-ui/react-slot';
7
- import React, { type ComponentPropsWithoutRef, type FC, type ForwardRefExoticComponent, forwardRef } from 'react';
8
-
9
- import {
10
- LIST_ITEM_NAME,
11
- LIST_NAME,
12
- ListItemCollapsibleContent,
13
- type ListItemCollapsibleContentProps,
14
- type ListItemScopedProps,
15
- List as ListPrimitive,
16
- ListItem as ListPrimitiveItem,
17
- ListItemHeading as ListPrimitiveItemHeading,
18
- type ListItemHeadingProps as ListPrimitiveItemHeadingProps,
19
- ListItemOpenTrigger as ListPrimitiveItemOpenTrigger,
20
- type ListItemOpenTriggerProps as ListPrimitiveItemOpenTriggerProps,
21
- type ListItemProps as ListPrimitiveItemProps,
22
- type ListProps as ListPrimitiveProps,
23
- type ListScopedProps,
24
- useListContext,
25
- useListItemContext,
26
- } from '@dxos/react-list';
27
- import { type Density } from '@dxos/ui-types';
28
-
29
- import { useDensityContext, useThemeContext } from '../../hooks';
30
- import { DensityProvider } from '../../primitives';
31
- import { composable, composableProps } from '../../util';
32
- import { type ThemedClassName } from '../../util';
33
- import { Icon } from '../Icon';
34
- import { ListDropIndicator } from './ListDropIndicator';
35
-
36
- type ListProps = ThemedClassName<ListPrimitiveProps & { density?: Density }>;
37
-
38
- const List = composable<HTMLOListElement, ListProps>(({ children, ...props }, forwardedRef) => {
39
- const { tx } = useThemeContext();
40
- const density = useDensityContext(props.density);
41
- const { className, ...rest } = composableProps(props);
42
-
43
- return (
44
- <DensityProvider density={density}>
45
- <ListPrimitive {...rest} className={tx('list.root', {}, className)} ref={forwardedRef}>
46
- {children}
47
- </ListPrimitive>
48
- </DensityProvider>
49
- );
50
- });
51
-
52
- type ListItemEndcapProps = ThemedClassName<ComponentPropsWithoutRef<'div'>> & { asChild?: boolean };
53
-
54
- const ListItemEndcap = forwardRef<HTMLDivElement, ListItemEndcapProps>(
55
- ({ children, classNames, asChild, ...props }, forwardedRef) => {
56
- const Comp = asChild ? Slot : Primitive.div;
57
- const density = useDensityContext();
58
- const { tx } = useThemeContext();
59
- return (
60
- <Comp
61
- {...(!asChild && { role: 'none' })}
62
- {...props}
63
- className={tx('list.item.endcap', { density }, classNames)}
64
- ref={forwardedRef}
65
- >
66
- {children}
67
- </Comp>
68
- );
69
- },
70
- );
71
-
72
- const MockListItemOpenTrigger = ({
73
- classNames,
74
- ...props
75
- }: ThemedClassName<Omit<ComponentPropsWithoutRef<'div'>, 'children'>>) => {
76
- const density = useDensityContext();
77
- const { tx } = useThemeContext();
78
- return <div {...props} className={tx('list.item.openTrigger', { density }, classNames)} />;
79
- };
80
-
81
- type ListItemHeadingProps = ThemedClassName<ListPrimitiveItemHeadingProps>;
82
-
83
- const ListItemHeading = forwardRef<HTMLParagraphElement, ListItemHeadingProps>(
84
- ({ children, classNames, ...props }, forwardedRef) => {
85
- const { tx } = useThemeContext();
86
- const density = useDensityContext();
87
- return (
88
- <ListPrimitiveItemHeading
89
- {...props}
90
- className={tx('list.item.heading', { density }, classNames)}
91
- ref={forwardedRef}
92
- >
93
- <span>{children}</span>
94
- </ListPrimitiveItemHeading>
95
- );
96
- },
97
- );
98
-
99
- type ListItemOpenTriggerProps = ThemedClassName<ListPrimitiveItemOpenTriggerProps>;
100
-
101
- const ListItemOpenTrigger = forwardRef<HTMLButtonElement, ListItemOpenTriggerProps>(
102
- ({ __listItemScope, classNames, children, ...props }, forwardedRef) => {
103
- const { tx } = useThemeContext();
104
- const density = useDensityContext();
105
- const { open } = useListItemContext(LIST_ITEM_NAME, __listItemScope);
106
- return (
107
- <ListPrimitiveItemOpenTrigger
108
- {...props}
109
- className={tx('list.item.openTrigger', { density }, classNames)}
110
- ref={forwardedRef}
111
- >
112
- {children || (
113
- <Icon
114
- size={3}
115
- icon={open ? 'ph--caret-down--bold' : 'ph--caret-right--bold'}
116
- classNames={tx('list.item.openTriggerIcon', {})}
117
- />
118
- )}
119
- </ListPrimitiveItemOpenTrigger>
120
- );
121
- },
122
- );
123
-
124
- type ListItemRootProps = ThemedClassName<ListPrimitiveItemProps>;
125
-
126
- const ListItemRoot = forwardRef<HTMLLIElement, ListItemRootProps>(
127
- ({ classNames, children, ...props }, forwardedRef) => {
128
- const { tx } = useThemeContext();
129
- const density = useDensityContext();
130
- return (
131
- <ListPrimitiveItem
132
- {...props}
133
- className={tx('list.item.root', { density, collapsible: props.collapsible }, classNames)}
134
- ref={forwardedRef}
135
- >
136
- {children}
137
- </ListPrimitiveItem>
138
- );
139
- },
140
- );
141
-
142
- export const ListItem: {
143
- Root: ForwardRefExoticComponent<ListItemRootProps>;
144
- Endcap: ForwardRefExoticComponent<ListItemEndcapProps>;
145
- Heading: ForwardRefExoticComponent<ListItemHeadingProps>;
146
- OpenTrigger: ForwardRefExoticComponent<ListItemOpenTriggerProps>;
147
- CollapsibleContent: ForwardRefExoticComponent<ListItemCollapsibleContentProps>;
148
- MockOpenTrigger: FC<ThemedClassName<Omit<ComponentPropsWithoutRef<'div'>, 'children'>>>;
149
- DropIndicator: typeof ListDropIndicator;
150
- } = {
151
- Root: ListItemRoot,
152
- Endcap: ListItemEndcap,
153
- Heading: ListItemHeading,
154
- OpenTrigger: ListItemOpenTrigger,
155
- CollapsibleContent: ListItemCollapsibleContent,
156
- MockOpenTrigger: MockListItemOpenTrigger,
157
- DropIndicator: ListDropIndicator,
158
- };
159
-
160
- export { List, useListContext, useListItemContext, LIST_NAME, LIST_ITEM_NAME };
161
-
162
- export type {
163
- ListProps,
164
- ListScopedProps,
165
- ListItemRootProps,
166
- ListItemScopedProps,
167
- ListItemEndcapProps,
168
- ListItemHeadingProps,
169
- ListItemOpenTriggerProps,
170
- ListItemCollapsibleContentProps,
171
- };
@@ -1,69 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { type Edge } from '@atlaskit/pragmatic-drag-and-drop-hitbox/types';
6
- import React, { type CSSProperties, type HTMLAttributes } from 'react';
7
-
8
- type Orientation = 'horizontal' | 'vertical';
9
-
10
- const edgeToOrientationMap: Record<Edge, Orientation> = {
11
- top: 'horizontal',
12
- bottom: 'horizontal',
13
- left: 'vertical',
14
- right: 'vertical',
15
- };
16
-
17
- const orientationStyles: Record<Orientation, HTMLAttributes<HTMLElement>['className']> = {
18
- horizontal:
19
- 'h-(--line-thickness) left-[calc(var(--line-inset)+var(--terminal-radius))] right-(--line-inset) before:left-(--terminal-inset)',
20
- vertical:
21
- 'w-(--line-thickness) top-[calc(var(--line-inset)+var(--terminal-radius))] bottom-(--line-inset) before:top-(--terminal-inset)',
22
- };
23
-
24
- const edgeStyles: Record<Edge, HTMLAttributes<HTMLElement>['className']> = {
25
- top: 'top-(--line-offset) before:top-(--offset-terminal)',
26
- right: 'right-(--line-offset) before:right-(--offset-terminal)',
27
- bottom: 'bottom-(--line-offset) before:bottom-(--offset-terminal)',
28
- left: 'left-(--line-offset) before:left-(--offset-terminal)',
29
- };
30
-
31
- const strokeSize = 2;
32
- const terminalSize = 8;
33
- const offsetToAlignTerminalWithLine = (strokeSize - terminalSize) / 2;
34
-
35
- export type DropIndicatorProps = {
36
- edge: Edge;
37
- gap?: number;
38
- terminalInset?: number;
39
- lineInset?: number;
40
- };
41
-
42
- /**
43
- * This is a tailwind port of `@atlaskit/pragmatic-drag-and-drop-react-drop-indicator/box`
44
- */
45
- export const ListDropIndicator = ({
46
- edge,
47
- gap = 0,
48
- lineInset = 0,
49
- terminalInset = lineInset - terminalSize,
50
- }: DropIndicatorProps) => {
51
- const orientation = edgeToOrientationMap[edge];
52
-
53
- return (
54
- <div
55
- style={
56
- {
57
- '--line-thickness': `${strokeSize}px`,
58
- '--line-offset': `calc(-0.5 * (${gap}px + ${strokeSize}px))`,
59
- '--line-inset': `${lineInset}px`,
60
- '--terminal-size': `${terminalSize}px`,
61
- '--terminal-radius': `${terminalSize / 2}px`,
62
- '--terminal-inset': `${terminalInset}px`,
63
- '--offset-terminal': `${offsetToAlignTerminalWithLine}px`,
64
- } as CSSProperties
65
- }
66
- className={`absolute z-10 pointer-events-none bg-accent-bg before:content-[''] before:w-(--terminal-size) before:h-(--terminal-size) box-border before:absolute before:border-[length:--line-thickness] before:border-solid before:border-accent-bg before:rounded-full ${orientationStyles[orientation]} ${edgeStyles[edge]}`}
67
- />
68
- );
69
- };
@@ -1,87 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { type Meta, type StoryObj } from '@storybook/react-vite';
6
- import React from 'react';
7
-
8
- import { withTheme } from '../../testing';
9
- import { Tree, TreeItem } from './Tree';
10
-
11
- type StorybookTreeProps = {
12
- data: any;
13
- };
14
-
15
- type StorybookTreeItemProps = {
16
- data: any;
17
- prefix?: string;
18
- };
19
-
20
- const isScalar = (data: any) => !(typeof data === 'object' || Array.isArray(data));
21
-
22
- const createKey = (key: string, prefix?: string) => (prefix === undefined ? key : `${prefix}.${key}`);
23
-
24
- const StorybookTreeItem = ({ data, prefix }: StorybookTreeItemProps) => {
25
- const keys = Array.isArray(data) ? Array.from(data.keys()) : Object.keys(data);
26
- return (
27
- <Tree.Root>
28
- {keys.map((key) => {
29
- const id = createKey(String(key), prefix);
30
- const value = data[key as keyof typeof data];
31
- const valueIsScalar = isScalar(value);
32
-
33
- return (
34
- <TreeItem.Root key={id} id={id} collapsible={!valueIsScalar} defaultOpen>
35
- <div className='grow flex'>
36
- {valueIsScalar ? <TreeItem.MockOpenTrigger /> : <TreeItem.OpenTrigger />}
37
- <TreeItem.Heading classNames='grow pt-1'>{valueIsScalar ? String(value) : key}</TreeItem.Heading>
38
- </div>
39
- {!valueIsScalar && (
40
- <TreeItem.Body className='ps-2'>
41
- <Tree.Branch>
42
- <StorybookTreeItem data={value} prefix={id} />
43
- </Tree.Branch>
44
- </TreeItem.Body>
45
- )}
46
- </TreeItem.Root>
47
- );
48
- })}
49
- </Tree.Root>
50
- );
51
- };
52
-
53
- const DefaultStory = ({ data }: StorybookTreeProps) => {
54
- return <StorybookTreeItem data={data} />;
55
- };
56
-
57
- const meta = {
58
- title: 'ui/react-ui-core/components/Tree',
59
- component: Tree as any,
60
- render: DefaultStory,
61
- decorators: [withTheme()],
62
- } satisfies Meta<typeof DefaultStory>;
63
-
64
- export default meta;
65
-
66
- type Story = StoryObj<typeof meta>;
67
-
68
- export const Default: Story = {
69
- args: {
70
- data: {
71
- foo: 100,
72
- bar: {
73
- zoo: 200,
74
- },
75
- tags: ['a', 'b', 'c'],
76
- items: [
77
- {
78
- a: true,
79
- b: 100,
80
- },
81
- {
82
- c: 200,
83
- },
84
- ],
85
- },
86
- },
87
- };