@basic-ui/core 0.0.59 → 0.0.61

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 (218) hide show
  1. package/build/cjs/index.js.map +1 -1
  2. package/build/esm/Accordion/AccordionBody.d.ts.map +1 -1
  3. package/build/esm/Accordion/AccordionBody.js +6 -26
  4. package/build/esm/Accordion/AccordionBody.js.map +1 -1
  5. package/build/esm/Accordion/AccordionHeader.d.ts.map +1 -1
  6. package/build/esm/Accordion/AccordionHeader.js +21 -69
  7. package/build/esm/Accordion/AccordionHeader.js.map +1 -1
  8. package/build/esm/Accordion/AccordionItem.d.ts.map +1 -1
  9. package/build/esm/Accordion/AccordionItem.js +31 -18
  10. package/build/esm/Accordion/AccordionItem.js.map +1 -1
  11. package/build/esm/Accordion/context.d.ts +0 -8
  12. package/build/esm/Accordion/context.d.ts.map +1 -1
  13. package/build/esm/Accordion/context.js +0 -11
  14. package/build/esm/Accordion/context.js.map +1 -1
  15. package/build/esm/Accordion/scopeQuery.d.ts +1 -0
  16. package/build/esm/Accordion/scopeQuery.d.ts.map +1 -1
  17. package/build/esm/Accordion/scopeQuery.js +3 -0
  18. package/build/esm/Accordion/scopeQuery.js.map +1 -1
  19. package/build/esm/Collapsible/Collapsible.d.ts +13 -0
  20. package/build/esm/Collapsible/Collapsible.d.ts.map +1 -0
  21. package/build/esm/Collapsible/Collapsible.js +53 -0
  22. package/build/esm/Collapsible/Collapsible.js.map +1 -0
  23. package/build/esm/Collapsible/CollapsiblePanel.d.ts +10 -0
  24. package/build/esm/Collapsible/CollapsiblePanel.d.ts.map +1 -0
  25. package/build/esm/Collapsible/CollapsiblePanel.js +85 -0
  26. package/build/esm/Collapsible/CollapsiblePanel.js.map +1 -0
  27. package/build/esm/Collapsible/CollapsibleTrigger.d.ts +11 -0
  28. package/build/esm/Collapsible/CollapsibleTrigger.d.ts.map +1 -0
  29. package/build/esm/Collapsible/CollapsibleTrigger.js +51 -0
  30. package/build/esm/Collapsible/CollapsibleTrigger.js.map +1 -0
  31. package/build/esm/Collapsible/context.d.ts +16 -0
  32. package/build/esm/Collapsible/context.d.ts.map +1 -0
  33. package/build/esm/Collapsible/context.js +11 -0
  34. package/build/esm/Collapsible/context.js.map +1 -0
  35. package/build/esm/Collapsible/index.d.ts +4 -0
  36. package/build/esm/Collapsible/index.d.ts.map +1 -0
  37. package/build/esm/Collapsible/index.js +4 -0
  38. package/build/esm/Collapsible/index.js.map +1 -0
  39. package/build/esm/Menu/Menu.d.ts +3 -2
  40. package/build/esm/Menu/Menu.d.ts.map +1 -1
  41. package/build/esm/Menu/Menu.js +64 -4
  42. package/build/esm/Menu/Menu.js.map +1 -1
  43. package/build/esm/Menu/MenuButton.d.ts.map +1 -1
  44. package/build/esm/Menu/MenuButton.js +85 -8
  45. package/build/esm/Menu/MenuButton.js.map +1 -1
  46. package/build/esm/Menu/MenuItem.d.ts.map +1 -1
  47. package/build/esm/Menu/MenuItem.js +16 -4
  48. package/build/esm/Menu/MenuItem.js.map +1 -1
  49. package/build/esm/Menu/MenuList.d.ts.map +1 -1
  50. package/build/esm/Menu/MenuList.js +47 -12
  51. package/build/esm/Menu/MenuList.js.map +1 -1
  52. package/build/esm/Menu/MenuPopover.d.ts.map +1 -1
  53. package/build/esm/Menu/MenuPopover.js +12 -1
  54. package/build/esm/Menu/MenuPopover.js.map +1 -1
  55. package/build/esm/Menu/MenuSubmenuTrigger.d.ts +8 -0
  56. package/build/esm/Menu/MenuSubmenuTrigger.d.ts.map +1 -0
  57. package/build/esm/Menu/MenuSubmenuTrigger.js +131 -0
  58. package/build/esm/Menu/MenuSubmenuTrigger.js.map +1 -0
  59. package/build/esm/Menu/context.d.ts +13 -3
  60. package/build/esm/Menu/context.d.ts.map +1 -1
  61. package/build/esm/Menu/context.js +1 -0
  62. package/build/esm/Menu/context.js.map +1 -1
  63. package/build/esm/Menu/index.d.ts +3 -0
  64. package/build/esm/Menu/index.d.ts.map +1 -1
  65. package/build/esm/Menu/index.js +2 -0
  66. package/build/esm/Menu/index.js.map +1 -1
  67. package/build/esm/Menu/scope.d.ts +1 -0
  68. package/build/esm/Menu/scope.d.ts.map +1 -1
  69. package/build/esm/Menu/scope.js +2 -1
  70. package/build/esm/Menu/scope.js.map +1 -1
  71. package/build/esm/MenuBar/MenuBar.d.ts +11 -0
  72. package/build/esm/MenuBar/MenuBar.d.ts.map +1 -0
  73. package/build/esm/MenuBar/MenuBar.js +153 -0
  74. package/build/esm/MenuBar/MenuBar.js.map +1 -0
  75. package/build/esm/MenuBar/context.d.ts +29 -0
  76. package/build/esm/MenuBar/context.d.ts.map +1 -0
  77. package/build/esm/MenuBar/context.js +7 -0
  78. package/build/esm/MenuBar/context.js.map +1 -0
  79. package/build/esm/MenuBar/index.d.ts +2 -0
  80. package/build/esm/MenuBar/index.d.ts.map +1 -0
  81. package/build/esm/MenuBar/index.js +2 -0
  82. package/build/esm/MenuBar/index.js.map +1 -0
  83. package/build/esm/Slider/Slider.d.ts +47 -1
  84. package/build/esm/Slider/Slider.d.ts.map +1 -1
  85. package/build/esm/Slider/Slider.js +91 -5
  86. package/build/esm/Slider/Slider.js.map +1 -1
  87. package/build/esm/ToggleGroup/ToggleGroup.d.ts +40 -0
  88. package/build/esm/ToggleGroup/ToggleGroup.d.ts.map +1 -0
  89. package/build/esm/ToggleGroup/ToggleGroup.js +113 -0
  90. package/build/esm/ToggleGroup/ToggleGroup.js.map +1 -0
  91. package/build/esm/ToggleGroup/ToggleGroupContext.d.ts +10 -0
  92. package/build/esm/ToggleGroup/ToggleGroupContext.d.ts.map +1 -0
  93. package/build/esm/ToggleGroup/ToggleGroupContext.js +6 -0
  94. package/build/esm/ToggleGroup/ToggleGroupContext.js.map +1 -0
  95. package/build/esm/ToggleGroup/index.d.ts +3 -0
  96. package/build/esm/ToggleGroup/index.d.ts.map +1 -0
  97. package/build/esm/ToggleGroup/index.js +3 -0
  98. package/build/esm/ToggleGroup/index.js.map +1 -0
  99. package/build/esm/Tooltip/Tooltip.d.ts.map +1 -1
  100. package/build/esm/Tooltip/Tooltip.js +2 -2
  101. package/build/esm/Tooltip/Tooltip.js.map +1 -1
  102. package/build/esm/Tree/Tree.d.ts +3 -0
  103. package/build/esm/Tree/Tree.d.ts.map +1 -0
  104. package/build/esm/Tree/Tree.js +730 -0
  105. package/build/esm/Tree/Tree.js.map +1 -0
  106. package/build/esm/Tree/TreeHeader.d.ts +3 -0
  107. package/build/esm/Tree/TreeHeader.d.ts.map +1 -0
  108. package/build/esm/Tree/TreeHeader.js +5 -0
  109. package/build/esm/Tree/TreeHeader.js.map +1 -0
  110. package/build/esm/Tree/TreeItem.d.ts +3 -0
  111. package/build/esm/Tree/TreeItem.d.ts.map +1 -0
  112. package/build/esm/Tree/TreeItem.js +5 -0
  113. package/build/esm/Tree/TreeItem.js.map +1 -0
  114. package/build/esm/Tree/TreeItemContent.d.ts +3 -0
  115. package/build/esm/Tree/TreeItemContent.d.ts.map +1 -0
  116. package/build/esm/Tree/TreeItemContent.js +69 -0
  117. package/build/esm/Tree/TreeItemContent.js.map +1 -0
  118. package/build/esm/Tree/TreeSection.d.ts +3 -0
  119. package/build/esm/Tree/TreeSection.d.ts.map +1 -0
  120. package/build/esm/Tree/TreeSection.js +5 -0
  121. package/build/esm/Tree/TreeSection.js.map +1 -0
  122. package/build/esm/Tree/collection.d.ts +18 -0
  123. package/build/esm/Tree/collection.d.ts.map +1 -0
  124. package/build/esm/Tree/collection.js +252 -0
  125. package/build/esm/Tree/collection.js.map +1 -0
  126. package/build/esm/Tree/context.d.ts +3 -0
  127. package/build/esm/Tree/context.d.ts.map +1 -0
  128. package/build/esm/Tree/context.js +3 -0
  129. package/build/esm/Tree/context.js.map +1 -0
  130. package/build/esm/Tree/index.d.ts +8 -0
  131. package/build/esm/Tree/index.d.ts.map +1 -0
  132. package/build/esm/Tree/index.js +7 -0
  133. package/build/esm/Tree/index.js.map +1 -0
  134. package/build/esm/Tree/types.d.ts +128 -0
  135. package/build/esm/Tree/types.d.ts.map +1 -0
  136. package/build/esm/Tree/types.js +2 -0
  137. package/build/esm/Tree/types.js.map +1 -0
  138. package/build/esm/hooks/index.d.ts +1 -0
  139. package/build/esm/hooks/index.d.ts.map +1 -1
  140. package/build/esm/hooks/index.js +1 -0
  141. package/build/esm/hooks/index.js.map +1 -1
  142. package/build/esm/hooks/useTransitionStatus.d.ts +7 -0
  143. package/build/esm/hooks/useTransitionStatus.d.ts.map +1 -0
  144. package/build/esm/hooks/useTransitionStatus.js +48 -0
  145. package/build/esm/hooks/useTransitionStatus.js.map +1 -0
  146. package/build/esm/index.d.ts +5 -0
  147. package/build/esm/index.d.ts.map +1 -1
  148. package/build/esm/index.js +5 -0
  149. package/build/esm/index.js.map +1 -1
  150. package/build/esm/toggle/Toggle.d.ts +28 -0
  151. package/build/esm/toggle/Toggle.d.ts.map +1 -0
  152. package/build/esm/toggle/Toggle.js +55 -0
  153. package/build/esm/toggle/Toggle.js.map +1 -0
  154. package/build/esm/toggle/index.d.ts +2 -0
  155. package/build/esm/toggle/index.d.ts.map +1 -0
  156. package/build/esm/toggle/index.js +2 -0
  157. package/build/esm/toggle/index.js.map +1 -0
  158. package/build/esm/utils/assign-ref.d.ts +3 -3
  159. package/build/esm/utils/assign-ref.d.ts.map +1 -1
  160. package/build/esm/utils/assign-ref.js +1 -1
  161. package/build/esm/utils/assign-ref.js.map +1 -1
  162. package/build/tsconfig-build.tsbuildinfo +1 -1
  163. package/build/tsconfig.tsbuildinfo +1 -1
  164. package/package.json +7 -4
  165. package/src/Accordion/AccordionBody.tsx +6 -35
  166. package/src/Accordion/AccordionHeader.tsx +29 -103
  167. package/src/Accordion/AccordionItem.tsx +40 -29
  168. package/src/Accordion/context.ts +0 -18
  169. package/src/Accordion/scopeQuery.ts +4 -0
  170. package/src/Collapsible/Collapsible.story.tsx +153 -0
  171. package/src/Collapsible/Collapsible.tsx +79 -0
  172. package/src/Collapsible/CollapsiblePanel.tsx +103 -0
  173. package/src/Collapsible/CollapsibleTrigger.tsx +60 -0
  174. package/src/Collapsible/context.ts +28 -0
  175. package/src/Collapsible/index.ts +3 -0
  176. package/src/Menu/Menu.story.tsx +70 -1
  177. package/src/Menu/Menu.tsx +141 -65
  178. package/src/Menu/MenuButton.tsx +115 -9
  179. package/src/Menu/MenuItem.tsx +20 -3
  180. package/src/Menu/MenuList.tsx +50 -13
  181. package/src/Menu/MenuPopover.tsx +12 -2
  182. package/src/Menu/MenuSubmenuTrigger.tsx +167 -0
  183. package/src/Menu/context.ts +20 -10
  184. package/src/Menu/index.ts +3 -0
  185. package/src/Menu/scope.ts +4 -1
  186. package/src/Menu/styles.css +57 -22
  187. package/src/MenuBar/MenuBar.story.tsx +92 -0
  188. package/src/MenuBar/MenuBar.tsx +236 -0
  189. package/src/MenuBar/context.ts +46 -0
  190. package/src/MenuBar/index.ts +1 -0
  191. package/src/MenuBar/styles.css +78 -0
  192. package/src/Slider/Slider.story.tsx +1 -1
  193. package/src/Slider/Slider.tsx +145 -8
  194. package/src/Toggle/Toggle.story.tsx +42 -0
  195. package/src/Toggle/Toggle.tsx +95 -0
  196. package/src/Toggle/index.ts +1 -0
  197. package/src/Toggle/styles.css +39 -0
  198. package/src/ToggleGroup/ToggleGroup.story.tsx +86 -0
  199. package/src/ToggleGroup/ToggleGroup.tsx +185 -0
  200. package/src/ToggleGroup/ToggleGroupContext.ts +17 -0
  201. package/src/ToggleGroup/index.ts +2 -0
  202. package/src/ToggleGroup/styles.css +66 -0
  203. package/src/Tooltip/Tooltip.tsx +4 -4
  204. package/src/Tree/Tree.story.tsx +221 -0
  205. package/src/Tree/Tree.tsx +1081 -0
  206. package/src/Tree/TreeHeader.tsx +9 -0
  207. package/src/Tree/TreeItem.tsx +9 -0
  208. package/src/Tree/TreeItemContent.tsx +91 -0
  209. package/src/Tree/TreeSection.tsx +9 -0
  210. package/src/Tree/collection.tsx +371 -0
  211. package/src/Tree/context.ts +6 -0
  212. package/src/Tree/index.ts +7 -0
  213. package/src/Tree/styles.css +135 -0
  214. package/src/Tree/types.ts +161 -0
  215. package/src/hooks/index.ts +1 -0
  216. package/src/hooks/useTransitionStatus.ts +65 -0
  217. package/src/index.ts +5 -0
  218. package/src/utils/assign-ref.ts +4 -4
@@ -0,0 +1,221 @@
1
+ import type { ReactNode } from 'react';
2
+ import { useState } from 'react';
3
+
4
+ import { Tree, TreeItem, TreeItemContent, TreeSection, TreeHeader } from './';
5
+ import './styles.css';
6
+ import type {
7
+ TreeSelectionBehavior,
8
+ TreeSelectionMode,
9
+ } from './types';
10
+
11
+ export default {
12
+ title: 'components/Tree',
13
+ };
14
+
15
+ const Wrapper = ({ children }: { children: ReactNode }) => (
16
+ <div className="TreeStory-frame">{children}</div>
17
+ );
18
+
19
+ const treeSelectionArgTypes = {
20
+ selectionMode: {
21
+ control: 'inline-radio',
22
+ options: ['none', 'single', 'multiple'],
23
+ },
24
+ selectionBehavior: {
25
+ control: 'inline-radio',
26
+ options: ['toggle', 'replace'],
27
+ },
28
+ disallowEmptySelection: {
29
+ control: 'boolean',
30
+ },
31
+ disabledBehavior: {
32
+ control: 'inline-radio',
33
+ options: ['selection', 'all'],
34
+ },
35
+ } as const;
36
+
37
+ const treeSelectionArgs = {
38
+ selectionMode: 'multiple',
39
+ selectionBehavior: 'toggle',
40
+ disallowEmptySelection: false,
41
+ disabledBehavior: 'selection',
42
+ } as const;
43
+
44
+ /* Basic uncontrolled tree */
45
+ export const Basic = ({
46
+ selectionMode = 'multiple',
47
+ selectionBehavior = 'toggle',
48
+ disallowEmptySelection = false,
49
+ disabledBehavior = 'selection',
50
+ }: {
51
+ selectionMode?: TreeSelectionMode;
52
+ selectionBehavior?: TreeSelectionBehavior;
53
+ disallowEmptySelection?: boolean;
54
+ disabledBehavior?: 'selection' | 'all';
55
+ }) => (
56
+ <Wrapper>
57
+ <Tree
58
+ selectionMode={selectionMode}
59
+ selectionBehavior={selectionBehavior}
60
+ disallowEmptySelection={disallowEmptySelection}
61
+ disabledBehavior={disabledBehavior}
62
+ aria-label="Files"
63
+ >
64
+ <TreeItem title="Documents">
65
+ <TreeItem title="Project">
66
+ <TreeItem title="Weekly Report" />
67
+ </TreeItem>
68
+ </TreeItem>
69
+ <TreeItem title="Photos">
70
+ <TreeItem title="Image 1" />
71
+ <TreeItem title="Image 2" />
72
+ </TreeItem>
73
+ </Tree>
74
+ </Wrapper>
75
+ );
76
+
77
+ Basic.args = {
78
+ ...treeSelectionArgs,
79
+ };
80
+ Basic.argTypes = treeSelectionArgTypes;
81
+
82
+ export const WithSections = ({
83
+ selectionMode = 'multiple',
84
+ selectionBehavior = 'toggle',
85
+ disallowEmptySelection = false,
86
+ disabledBehavior = 'selection',
87
+ }: {
88
+ selectionMode?: TreeSelectionMode;
89
+ selectionBehavior?: TreeSelectionBehavior;
90
+ disallowEmptySelection?: boolean;
91
+ disabledBehavior?: 'selection' | 'all';
92
+ }) => (
93
+ <Wrapper>
94
+ <Tree
95
+ selectionMode={selectionMode}
96
+ selectionBehavior={selectionBehavior}
97
+ disallowEmptySelection={disallowEmptySelection}
98
+ disabledBehavior={disabledBehavior}
99
+ aria-label="Files"
100
+ >
101
+ <TreeSection>
102
+ <TreeHeader>Photos</TreeHeader>
103
+ <TreeItem id="my-photos" title="My Photos">
104
+ <TreeItem id="photo-1" title="Photo 1" />
105
+ <TreeItem id="photo-2" title="Photo 2" />
106
+ </TreeItem>
107
+ <TreeItem id="shared-photos" title="Shared Photos">
108
+ <TreeItem id="shared-photo-1" title="Shared Photo 1" />
109
+ <TreeItem id="shared-photo-2" title="Shared Photo 2" />
110
+ </TreeItem>
111
+ </TreeSection>
112
+ <TreeSection>
113
+ <TreeHeader>Documents</TreeHeader>
114
+ <TreeItem id="my-documents" title="My Documents">
115
+ <TreeItem id="document-1" title="Document 1" />
116
+ <TreeItem id="document-2" title="Document 2" />
117
+ </TreeItem>
118
+ <TreeItem id="shared-documents" title="Shared Documents">
119
+ <TreeItem id="shared-document-1" title="Shared Document 1" />
120
+ <TreeItem id="shared-document-2" title="Shared Document 2" />
121
+ </TreeItem>
122
+ </TreeSection>
123
+ </Tree>
124
+ </Wrapper>
125
+ );
126
+
127
+ WithSections.args = {
128
+ ...treeSelectionArgs,
129
+ };
130
+ WithSections.argTypes = treeSelectionArgTypes;
131
+
132
+ export const Complex = ({
133
+ selectionMode = 'multiple',
134
+ selectionBehavior = 'toggle',
135
+ disallowEmptySelection = false,
136
+ disabledBehavior = 'selection',
137
+ }: {
138
+ selectionMode?: TreeSelectionMode;
139
+ selectionBehavior?: TreeSelectionBehavior;
140
+ disallowEmptySelection?: boolean;
141
+ disabledBehavior?: 'selection' | 'all';
142
+ }) => (
143
+ <Wrapper>
144
+ <Tree
145
+ selectionMode={selectionMode}
146
+ selectionBehavior={selectionBehavior}
147
+ disallowEmptySelection={disallowEmptySelection}
148
+ disabledBehavior={disabledBehavior}
149
+ aria-label="Files"
150
+ >
151
+ <TreeSection>
152
+ <TreeHeader>Documents</TreeHeader>
153
+ <TreeItem>
154
+ {/* The tree item content can be used to compose complex looking tree items */}
155
+ <TreeItemContent>
156
+ <button slot="chevron">
157
+ {' '}
158
+ {/* Chevron icon */}
159
+ <span aria-hidden="true">›</span>
160
+ </button>
161
+ <input type="checkbox" slot="selection" />
162
+ <span>Documents</span>
163
+ <button slot="drag">☰</button> {/* drag handle */}
164
+ </TreeItemContent>
165
+ <TreeItem>File 1</TreeItem>
166
+ </TreeItem>
167
+ </TreeSection>
168
+ <TreeSection>
169
+ <TreeHeader>Images</TreeHeader>
170
+ <TreeItem>File 1</TreeItem>
171
+ <TreeItem>File 2</TreeItem>
172
+ </TreeSection>
173
+ </Tree>
174
+ </Wrapper>
175
+ );
176
+
177
+ Complex.args = {
178
+ ...treeSelectionArgs,
179
+ };
180
+ Complex.argTypes = treeSelectionArgTypes;
181
+
182
+ export const LazyLoading = () => {
183
+ const [expandedKeys, setExpandedKeys] = useState<Set<string>>(new Set());
184
+ const [loaded, setLoaded] = useState(false);
185
+ const [loading, setLoading] = useState(false);
186
+
187
+ return (
188
+ <Wrapper>
189
+ <Tree
190
+ aria-label="Lazy files"
191
+ expandedKeys={expandedKeys}
192
+ onExpandedChange={(keys) => {
193
+ setExpandedKeys(keys as Set<string>);
194
+ if (keys.has('remote') && !loaded && !loading) {
195
+ setLoading(true);
196
+ setTimeout(() => {
197
+ setLoaded(true);
198
+ setLoading(false);
199
+ }, 800);
200
+ }
201
+ }}
202
+ renderLoadingState={() => 'Loading...'}
203
+ >
204
+ <TreeItem
205
+ id="remote"
206
+ title="Remote folder"
207
+ hasChildItems
208
+ isLoading={loading}
209
+ >
210
+ {loaded ? (
211
+ <>
212
+ <TreeItem id="remote-a" title="Loaded file A" />
213
+ <TreeItem id="remote-b" title="Loaded file B" />
214
+ </>
215
+ ) : null}
216
+ </TreeItem>
217
+ <TreeItem id="local" title="Local file" />
218
+ </Tree>
219
+ </Wrapper>
220
+ );
221
+ };