@proyecto-viviana/solid-stately 0.2.4 → 0.3.0

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 (243) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +30 -283
  3. package/dist/autocomplete/createAutocompleteState.d.ts +3 -2
  4. package/dist/autocomplete/index.d.ts +1 -1
  5. package/dist/calendar/createCalendarState.d.ts +22 -7
  6. package/dist/calendar/createDateFieldState.d.ts +30 -7
  7. package/dist/calendar/createDatePickerState.d.ts +60 -0
  8. package/dist/calendar/createRangeCalendarState.d.ts +27 -8
  9. package/dist/calendar/createTimeFieldState.d.ts +34 -7
  10. package/dist/calendar/index.d.ts +7 -6
  11. package/dist/checkbox/createCheckboxGroupState.d.ts +12 -3
  12. package/dist/checkbox/index.d.ts +1 -1
  13. package/dist/collections/ListCollection.d.ts +1 -1
  14. package/dist/collections/createListState.d.ts +8 -8
  15. package/dist/collections/createMenuState.d.ts +7 -7
  16. package/dist/collections/createSelectionState.d.ts +5 -5
  17. package/dist/collections/index.d.ts +5 -5
  18. package/dist/collections/types.d.ts +23 -12
  19. package/dist/color/Color.d.ts +1 -1
  20. package/dist/color/createColorAreaState.d.ts +4 -2
  21. package/dist/color/createColorFieldState.d.ts +38 -12
  22. package/dist/color/createColorSliderState.d.ts +9 -2
  23. package/dist/color/createColorWheelState.d.ts +13 -2
  24. package/dist/color/getColorChannels.d.ts +20 -0
  25. package/dist/color/index.d.ts +6 -6
  26. package/dist/color/types.d.ts +4 -4
  27. package/dist/combobox/createComboBoxState.d.ts +27 -13
  28. package/dist/combobox/index.d.ts +1 -1
  29. package/dist/data/createAsyncList.d.ts +111 -0
  30. package/dist/data/createListData.d.ts +65 -0
  31. package/dist/data/createTreeData.d.ts +65 -0
  32. package/dist/data/index.d.ts +3 -0
  33. package/dist/datepicker/index.d.ts +8 -0
  34. package/dist/disclosure/createDisclosureState.d.ts +2 -2
  35. package/dist/disclosure/index.d.ts +1 -1
  36. package/dist/dnd/createDragState.d.ts +2 -2
  37. package/dist/dnd/createDraggableCollectionState.d.ts +2 -2
  38. package/dist/dnd/createDropState.d.ts +2 -2
  39. package/dist/dnd/createDroppableCollectionState.d.ts +3 -3
  40. package/dist/dnd/index.d.ts +5 -5
  41. package/dist/dnd/types.d.ts +16 -16
  42. package/dist/form/createFormValidationState.d.ts +3 -3
  43. package/dist/form/index.d.ts +1 -1
  44. package/dist/grid/createGridState.d.ts +2 -2
  45. package/dist/grid/index.d.ts +2 -2
  46. package/dist/grid/types.d.ts +17 -11
  47. package/dist/index.d.ts +31 -25
  48. package/dist/index.js +7990 -6264
  49. package/dist/index.js.map +1 -7
  50. package/dist/menu/index.d.ts +8 -0
  51. package/dist/numberfield/createNumberFieldState.d.ts +2 -2
  52. package/dist/numberfield/index.d.ts +1 -1
  53. package/dist/overlays/createOverlayTriggerState.d.ts +2 -2
  54. package/dist/overlays/index.d.ts +1 -1
  55. package/dist/radio/createRadioGroupState.d.ts +13 -4
  56. package/dist/radio/index.d.ts +1 -1
  57. package/dist/searchfield/createSearchFieldState.d.ts +2 -2
  58. package/dist/searchfield/index.d.ts +2 -2
  59. package/dist/select/createSelectState.d.ts +20 -3
  60. package/dist/select/index.d.ts +1 -1
  61. package/dist/selection/index.d.ts +11 -0
  62. package/dist/slider/createSliderState.d.ts +3 -3
  63. package/dist/slider/index.d.ts +2 -2
  64. package/dist/steplist/createStepListState.d.ts +48 -0
  65. package/dist/steplist/index.d.ts +1 -0
  66. package/dist/table/TableCollection.d.ts +3 -3
  67. package/dist/table/createTableColumnResizeState.d.ts +54 -0
  68. package/dist/table/createTableState.d.ts +2 -2
  69. package/dist/table/index.d.ts +5 -3
  70. package/dist/table/types.d.ts +10 -10
  71. package/dist/tabs/createTabListState.d.ts +5 -5
  72. package/dist/tabs/index.d.ts +1 -1
  73. package/dist/textfield/createTextFieldState.d.ts +2 -2
  74. package/dist/textfield/index.d.ts +1 -1
  75. package/dist/toast/createToastState.d.ts +15 -3
  76. package/dist/toast/index.d.ts +1 -1
  77. package/dist/toggle/createToggleGroupState.d.ts +45 -0
  78. package/dist/toggle/createToggleState.d.ts +2 -2
  79. package/dist/toggle/index.d.ts +2 -1
  80. package/dist/tooltip/createTooltipTriggerState.d.ts +2 -2
  81. package/dist/tooltip/index.d.ts +1 -1
  82. package/dist/tree/TreeCollection.d.ts +5 -4
  83. package/dist/tree/createTreeState.d.ts +2 -2
  84. package/dist/tree/index.d.ts +3 -3
  85. package/dist/tree/types.d.ts +19 -13
  86. package/dist/utils/index.d.ts +1 -1
  87. package/dist/utils/reactivity.d.ts +1 -1
  88. package/package.json +30 -30
  89. package/src/autocomplete/createAutocompleteState.d.ts +19 -17
  90. package/src/autocomplete/createAutocompleteState.ts +25 -32
  91. package/src/autocomplete/index.d.ts +6 -2
  92. package/src/autocomplete/index.ts +1 -1
  93. package/src/calendar/createCalendarState.d.ts +139 -117
  94. package/src/calendar/createCalendarState.ts +221 -74
  95. package/src/calendar/createDateFieldState.d.ts +130 -95
  96. package/src/calendar/createDateFieldState.ts +286 -151
  97. package/src/calendar/createDatePickerState.ts +347 -0
  98. package/src/calendar/createRangeCalendarState.d.ts +154 -129
  99. package/src/calendar/createRangeCalendarState.ts +293 -79
  100. package/src/calendar/createTimeFieldState.d.ts +81 -79
  101. package/src/calendar/createTimeFieldState.ts +187 -108
  102. package/src/calendar/index.d.ts +80 -7
  103. package/src/calendar/index.ts +21 -12
  104. package/src/checkbox/createCheckboxGroupState.d.ts +57 -55
  105. package/src/checkbox/createCheckboxGroupState.ts +57 -30
  106. package/src/checkbox/index.d.ts +6 -2
  107. package/src/checkbox/index.ts +1 -1
  108. package/src/collections/ListCollection.d.ts +25 -22
  109. package/src/collections/ListCollection.ts +152 -146
  110. package/src/collections/createListState.d.ts +73 -58
  111. package/src/collections/createListState.ts +267 -264
  112. package/src/collections/createMenuState.d.ts +36 -31
  113. package/src/collections/createMenuState.ts +112 -106
  114. package/src/collections/createSelectionState.d.ts +78 -65
  115. package/src/collections/createSelectionState.ts +340 -336
  116. package/src/collections/index.d.ts +38 -6
  117. package/src/collections/index.ts +41 -46
  118. package/src/collections/types.d.ts +101 -101
  119. package/src/collections/types.ts +181 -169
  120. package/src/color/Color.d.ts +20 -5
  121. package/src/color/Color.ts +1054 -951
  122. package/src/color/createColorAreaState.d.ts +67 -65
  123. package/src/color/createColorAreaState.ts +301 -293
  124. package/src/color/createColorFieldState.d.ts +46 -44
  125. package/src/color/createColorFieldState.ts +428 -292
  126. package/src/color/createColorSliderState.d.ts +58 -56
  127. package/src/color/createColorSliderState.ts +272 -241
  128. package/src/color/createColorWheelState.d.ts +42 -40
  129. package/src/color/createColorWheelState.ts +248 -211
  130. package/src/color/getColorChannels.ts +36 -0
  131. package/src/color/index.d.ts +36 -7
  132. package/src/color/index.ts +44 -47
  133. package/src/color/types.d.ts +68 -63
  134. package/src/color/types.ts +119 -127
  135. package/src/combobox/createComboBoxState.d.ts +107 -105
  136. package/src/combobox/createComboBoxState.ts +790 -703
  137. package/src/combobox/index.d.ts +10 -2
  138. package/src/combobox/index.ts +13 -13
  139. package/src/data/createAsyncList.ts +403 -0
  140. package/src/data/createListData.ts +298 -0
  141. package/src/data/createTreeData.ts +646 -0
  142. package/src/data/index.ts +25 -0
  143. package/src/datepicker/index.ts +32 -0
  144. package/src/disclosure/createDisclosureState.d.ts +47 -43
  145. package/src/disclosure/createDisclosureState.ts +9 -23
  146. package/src/disclosure/index.d.ts +10 -2
  147. package/src/disclosure/index.ts +1 -1
  148. package/src/dnd/createDragState.d.ts +51 -42
  149. package/src/dnd/createDragState.ts +151 -153
  150. package/src/dnd/createDraggableCollectionState.d.ts +52 -41
  151. package/src/dnd/createDraggableCollectionState.ts +158 -165
  152. package/src/dnd/createDropState.d.ts +64 -45
  153. package/src/dnd/createDropState.ts +202 -212
  154. package/src/dnd/createDroppableCollectionState.d.ts +88 -59
  155. package/src/dnd/createDroppableCollectionState.ts +354 -357
  156. package/src/dnd/index.d.ts +54 -6
  157. package/src/dnd/index.ts +63 -76
  158. package/src/dnd/types.d.ts +167 -156
  159. package/src/dnd/types.ts +316 -317
  160. package/src/form/createFormValidationState.d.ts +47 -45
  161. package/src/form/createFormValidationState.ts +356 -389
  162. package/src/form/index.d.ts +16 -2
  163. package/src/form/index.ts +15 -15
  164. package/src/grid/createGridState.d.ts +7 -4
  165. package/src/grid/createGridState.ts +44 -51
  166. package/src/grid/index.d.ts +3 -3
  167. package/src/grid/index.ts +2 -8
  168. package/src/grid/types.d.ts +136 -129
  169. package/src/grid/types.ts +24 -17
  170. package/src/index.d.ts +310 -26
  171. package/src/index.ts +87 -79
  172. package/src/menu/index.ts +17 -0
  173. package/src/numberfield/createNumberFieldState.d.ts +56 -54
  174. package/src/numberfield/createNumberFieldState.ts +422 -383
  175. package/src/numberfield/index.d.ts +6 -2
  176. package/src/numberfield/index.ts +5 -5
  177. package/src/overlays/createOverlayTriggerState.d.ts +22 -20
  178. package/src/overlays/createOverlayTriggerState.ts +66 -67
  179. package/src/overlays/index.d.ts +6 -2
  180. package/src/overlays/index.ts +5 -5
  181. package/src/radio/createRadioGroupState.d.ts +54 -52
  182. package/src/radio/createRadioGroupState.ts +66 -30
  183. package/src/radio/index.d.ts +7 -2
  184. package/src/radio/index.ts +1 -1
  185. package/src/searchfield/createSearchFieldState.d.ts +16 -14
  186. package/src/searchfield/createSearchFieldState.ts +56 -62
  187. package/src/searchfield/index.d.ts +3 -3
  188. package/src/searchfield/index.ts +2 -5
  189. package/src/select/createSelectState.d.ts +63 -61
  190. package/src/select/createSelectState.ts +290 -181
  191. package/src/select/index.d.ts +2 -2
  192. package/src/select/index.ts +1 -5
  193. package/src/selection/index.ts +27 -0
  194. package/src/slider/createSliderState.d.ts +60 -60
  195. package/src/slider/createSliderState.ts +233 -211
  196. package/src/slider/index.d.ts +3 -3
  197. package/src/slider/index.ts +2 -6
  198. package/src/ssr/index.d.ts +1 -1
  199. package/src/ssr/index.ts +2 -2
  200. package/src/steplist/createStepListState.ts +191 -0
  201. package/src/steplist/index.ts +5 -0
  202. package/src/table/TableCollection.d.ts +42 -40
  203. package/src/table/TableCollection.ts +61 -64
  204. package/src/table/createTableColumnResizeState.ts +242 -0
  205. package/src/table/createTableState.d.ts +7 -4
  206. package/src/table/createTableState.ts +10 -7
  207. package/src/table/index.d.ts +14 -4
  208. package/src/table/index.ts +10 -3
  209. package/src/table/types.d.ts +98 -92
  210. package/src/table/types.ts +17 -13
  211. package/src/tabs/createTabListState.d.ts +59 -57
  212. package/src/tabs/createTabListState.ts +58 -39
  213. package/src/tabs/index.d.ts +8 -2
  214. package/src/tabs/index.ts +1 -1
  215. package/src/textfield/createTextFieldState.d.ts +16 -14
  216. package/src/textfield/createTextFieldState.ts +7 -18
  217. package/src/textfield/index.d.ts +6 -2
  218. package/src/textfield/index.ts +1 -1
  219. package/src/toast/createToastState.d.ts +92 -81
  220. package/src/toast/createToastState.ts +56 -44
  221. package/src/toast/index.d.ts +12 -2
  222. package/src/toast/index.ts +1 -1
  223. package/src/toggle/createToggleGroupState.ts +117 -0
  224. package/src/toggle/createToggleState.d.ts +19 -19
  225. package/src/toggle/createToggleState.ts +2 -16
  226. package/src/toggle/index.d.ts +2 -2
  227. package/src/toggle/index.ts +6 -4
  228. package/src/tooltip/createTooltipTriggerState.d.ts +17 -17
  229. package/src/tooltip/createTooltipTriggerState.ts +184 -183
  230. package/src/tooltip/index.d.ts +7 -2
  231. package/src/tooltip/index.ts +6 -6
  232. package/src/tree/TreeCollection.d.ts +26 -23
  233. package/src/tree/TreeCollection.ts +215 -175
  234. package/src/tree/createTreeState.d.ts +7 -4
  235. package/src/tree/createTreeState.ts +390 -392
  236. package/src/tree/index.d.ts +10 -4
  237. package/src/tree/index.ts +13 -13
  238. package/src/tree/types.d.ts +131 -126
  239. package/src/tree/types.ts +183 -174
  240. package/src/utils/index.d.ts +2 -2
  241. package/src/utils/index.ts +1 -1
  242. package/src/utils/reactivity.d.ts +2 -2
  243. package/src/utils/reactivity.ts +3 -3
@@ -1,175 +1,215 @@
1
- /**
2
- * TreeCollection implementation.
3
- * Based on @react-stately/tree/TreeCollection.
4
- *
5
- * A flattened view of tree nodes that respects expanded state.
6
- * Only visible nodes (root + expanded children) are included in iteration.
7
- */
8
-
9
- import type { Key } from '../collections/types';
10
- import type { TreeCollection as ITreeCollection, TreeNode, TreeItemData } from './types';
11
-
12
- /**
13
- * Creates a TreeCollection from hierarchical data.
14
- * The collection is flattened based on expanded keys.
15
- */
16
- export class TreeCollection<T> implements ITreeCollection<T> {
17
- private keyMap: Map<Key, TreeNode<T>> = new Map();
18
- private visibleKeys: Key[] = [];
19
- private _rows: TreeNode<T>[] = [];
20
-
21
- constructor(
22
- items: TreeItemData<T>[],
23
- expandedKeys: Set<Key>
24
- ) {
25
- this.buildCollection(items, expandedKeys);
26
- }
27
-
28
- private buildCollection(items: TreeItemData<T>[], expandedKeys: Set<Key>): void {
29
- let globalIndex = 0;
30
-
31
- const visit = (
32
- item: TreeItemData<T>,
33
- level: number,
34
- parentKey: Key | null,
35
- indexInParent: number
36
- ): TreeNode<T> => {
37
- const hasChildren = item.children && item.children.length > 0;
38
- const isExpanded = hasChildren && expandedKeys.has(item.key);
39
-
40
- // Build child nodes first (even if not visible, for the map)
41
- const childNodes: TreeNode<T>[] = [];
42
- if (hasChildren && item.children) {
43
- for (let i = 0; i < item.children.length; i++) {
44
- const childNode = visit(item.children[i], level + 1, item.key, i);
45
- childNodes.push(childNode);
46
- }
47
- }
48
-
49
- const node: TreeNode<T> = {
50
- type: 'item',
51
- key: item.key,
52
- value: item.value,
53
- textValue: item.textValue || String(item.key),
54
- level,
55
- index: indexInParent,
56
- parentKey,
57
- hasChildNodes: hasChildren || false,
58
- childNodes,
59
- isDisabled: item.isDisabled,
60
- isExpandable: hasChildren,
61
- isExpanded,
62
- };
63
-
64
- // Always add to keyMap (for getItem lookups)
65
- this.keyMap.set(item.key, node);
66
-
67
- return node;
68
- };
69
-
70
- // First pass: build all nodes
71
- const rootNodes: TreeNode<T>[] = [];
72
- for (let i = 0; i < items.length; i++) {
73
- const node = visit(items[i], 0, null, i);
74
- rootNodes.push(node);
75
- }
76
-
77
- // Second pass: build visible rows list
78
- const addVisibleNodes = (nodes: TreeNode<T>[]): void => {
79
- for (const node of nodes) {
80
- // Update the row index for visible nodes
81
- node.rowIndex = globalIndex++;
82
- this._rows.push(node);
83
- this.visibleKeys.push(node.key);
84
-
85
- // Add children if expanded
86
- if (node.isExpanded && node.childNodes.length > 0) {
87
- addVisibleNodes(node.childNodes);
88
- }
89
- }
90
- };
91
-
92
- addVisibleNodes(rootNodes);
93
- }
94
-
95
- // Collection properties
96
-
97
- get size(): number {
98
- return this.visibleKeys.length;
99
- }
100
-
101
- get rows(): TreeNode<T>[] {
102
- return this._rows;
103
- }
104
-
105
- get rowCount(): number {
106
- return this._rows.length;
107
- }
108
-
109
- // Collection methods
110
-
111
- getKeys(): Iterable<Key> {
112
- return this.visibleKeys;
113
- }
114
-
115
- getItem(key: Key): TreeNode<T> | null {
116
- return this.keyMap.get(key) ?? null;
117
- }
118
-
119
- at(index: number): TreeNode<T> | null {
120
- if (index < 0 || index >= this._rows.length) {
121
- return null;
122
- }
123
- return this._rows[index];
124
- }
125
-
126
- getKeyBefore(key: Key): Key | null {
127
- const index = this.visibleKeys.indexOf(key);
128
- if (index <= 0) return null;
129
- return this.visibleKeys[index - 1];
130
- }
131
-
132
- getKeyAfter(key: Key): Key | null {
133
- const index = this.visibleKeys.indexOf(key);
134
- if (index < 0 || index >= this.visibleKeys.length - 1) return null;
135
- return this.visibleKeys[index + 1];
136
- }
137
-
138
- getFirstKey(): Key | null {
139
- return this.visibleKeys[0] ?? null;
140
- }
141
-
142
- getLastKey(): Key | null {
143
- return this.visibleKeys[this.visibleKeys.length - 1] ?? null;
144
- }
145
-
146
- getChildren(key: Key): Iterable<TreeNode<T>> {
147
- const node = this.keyMap.get(key);
148
- return node?.childNodes ?? [];
149
- }
150
-
151
- getTextValue(key: Key): string {
152
- const node = this.keyMap.get(key);
153
- return node?.textValue ?? '';
154
- }
155
-
156
- getParentKey(key: Key): Key | null {
157
- const node = this.keyMap.get(key);
158
- return node?.parentKey ?? null;
159
- }
160
-
161
- [Symbol.iterator](): Iterator<TreeNode<T>> {
162
- return this._rows[Symbol.iterator]();
163
- }
164
- }
165
-
166
- /**
167
- * Factory function to create a TreeCollection.
168
- * Useful for the collectionFactory pattern in TreeStateOptions.
169
- */
170
- export function createTreeCollection<T>(
171
- items: TreeItemData<T>[],
172
- expandedKeys: Set<Key>
173
- ): TreeCollection<T> {
174
- return new TreeCollection(items, expandedKeys);
175
- }
1
+ /**
2
+ * TreeCollection implementation.
3
+ * Based on @react-stately/tree/TreeCollection.
4
+ *
5
+ * A flattened view of tree nodes that respects expanded state.
6
+ * Only visible nodes (root + expanded children) are included in iteration.
7
+ */
8
+
9
+ import type { Key } from "../collections/types";
10
+ import type { TreeCollection as ITreeCollection, TreeNode, TreeItemData } from "./types";
11
+
12
+ function getItemKey<T>(item: TreeItemData<T>): Key {
13
+ const key = item.key ?? item.id;
14
+ if (key == null) {
15
+ throw new Error("Tree items must define either a key or id.");
16
+ }
17
+ return key;
18
+ }
19
+
20
+ /**
21
+ * Creates a TreeCollection from hierarchical data.
22
+ * The collection is flattened based on expanded keys.
23
+ */
24
+ export class TreeCollection<T> implements ITreeCollection<T> {
25
+ private keyMap: Map<Key, TreeNode<T>> = new Map();
26
+ private visibleRows: TreeNode<T>[] = [];
27
+ private firstKey: Key | null = null;
28
+ private lastKey: Key | null = null;
29
+
30
+ constructor(items: TreeItemData<T>[], expandedKeys: Set<Key>) {
31
+ this.buildCollection(items, expandedKeys);
32
+ }
33
+
34
+ private buildCollection(items: TreeItemData<T>[], expandedKeys: Set<Key>): void {
35
+ let globalIndex = 0;
36
+ let previousNode: TreeNode<T> | null = null;
37
+
38
+ const visit = (
39
+ item: TreeItemData<T>,
40
+ level: number,
41
+ parentKey: Key | null,
42
+ indexInParent: number,
43
+ ): TreeNode<T> => {
44
+ const key = getItemKey(item);
45
+ const hasLoadedChildren = Boolean(item.children && item.children.length > 0);
46
+ const hasChildren = hasLoadedChildren || !!item.hasChildItems;
47
+ const isExpanded = hasChildren && expandedKeys.has(key);
48
+
49
+ // Build child nodes first (even if not visible, for the map)
50
+ const childNodes: TreeNode<T>[] = [];
51
+ if (hasLoadedChildren && item.children) {
52
+ for (let i = 0; i < item.children.length; i++) {
53
+ const childNode = visit(item.children[i], level + 1, key, i);
54
+ childNodes.push(childNode);
55
+ }
56
+ }
57
+
58
+ const node: TreeNode<T> = {
59
+ type: "item",
60
+ key,
61
+ value: (item.value ?? item) as T,
62
+ textValue: item.textValue || String(key),
63
+ level,
64
+ index: indexInParent,
65
+ parentKey,
66
+ hasChildNodes: hasChildren || false,
67
+ childNodes,
68
+ isDisabled: item.isDisabled,
69
+ isExpandable: hasChildren,
70
+ isExpanded,
71
+ };
72
+
73
+ // Always add to keyMap (for getItem lookups)
74
+ this.keyMap.set(key, node);
75
+
76
+ return node;
77
+ };
78
+
79
+ // First pass: build all nodes
80
+ const rootNodes: TreeNode<T>[] = [];
81
+ for (let i = 0; i < items.length; i++) {
82
+ const node = visit(items[i], 0, null, i);
83
+ rootNodes.push(node);
84
+ }
85
+
86
+ // Second pass: build visible rows list
87
+ const addVisibleNodes = (nodes: TreeNode<T>[]): void => {
88
+ for (const node of nodes) {
89
+ node.rowIndex = globalIndex++;
90
+ this.visibleRows.push(node);
91
+ node.prevKey = previousNode?.key ?? null;
92
+ node.nextKey = undefined;
93
+ if (previousNode) {
94
+ previousNode.nextKey = node.key;
95
+ }
96
+ previousNode = node;
97
+
98
+ if (node.isExpanded && node.childNodes.length > 0) {
99
+ addVisibleNodes(node.childNodes);
100
+ }
101
+ }
102
+ };
103
+
104
+ addVisibleNodes(rootNodes);
105
+ this.firstKey = this.visibleRows[0]?.key ?? null;
106
+ this.lastKey = this.visibleRows[this.visibleRows.length - 1]?.key ?? null;
107
+ }
108
+
109
+ // Collection properties
110
+
111
+ get size(): number {
112
+ return this.visibleRows.length;
113
+ }
114
+
115
+ get rows(): TreeNode<T>[] {
116
+ return this.visibleRows;
117
+ }
118
+
119
+ get rowCount(): number {
120
+ return this.visibleRows.length;
121
+ }
122
+
123
+ // Collection methods
124
+
125
+ getKeys(): Iterable<Key> {
126
+ return this.visibleRows.map((node) => node.key);
127
+ }
128
+
129
+ getItem(key: Key): TreeNode<T> | null {
130
+ return this.keyMap.get(key) ?? null;
131
+ }
132
+
133
+ at(index: number): TreeNode<T> | null {
134
+ if (index < 0 || index >= this.visibleRows.length) {
135
+ return null;
136
+ }
137
+ return this.visibleRows[index];
138
+ }
139
+
140
+ getKeyBefore(key: Key): Key | null {
141
+ const node = this.keyMap.get(key);
142
+ let previousKey = node?.prevKey ?? null;
143
+ while (previousKey != null) {
144
+ const candidate = this.keyMap.get(previousKey);
145
+ if (!candidate) break;
146
+ if (candidate.type !== "content") {
147
+ return candidate.key;
148
+ }
149
+ previousKey = candidate.prevKey ?? null;
150
+ }
151
+ return null;
152
+ }
153
+
154
+ getKeyAfter(key: Key): Key | null {
155
+ const node = this.keyMap.get(key);
156
+ let nextKey = node?.nextKey ?? null;
157
+ while (nextKey != null) {
158
+ const candidate = this.keyMap.get(nextKey);
159
+ if (!candidate) break;
160
+ if (candidate.type !== "content") {
161
+ return candidate.key;
162
+ }
163
+ nextKey = candidate.nextKey ?? null;
164
+ }
165
+ return null;
166
+ }
167
+
168
+ getFirstKey(): Key | null {
169
+ if (this.firstKey == null) return null;
170
+ const candidate = this.keyMap.get(this.firstKey);
171
+ if (candidate?.type === "content") {
172
+ return this.getKeyAfter(candidate.key);
173
+ }
174
+ return this.firstKey;
175
+ }
176
+
177
+ getLastKey(): Key | null {
178
+ if (this.lastKey == null) return null;
179
+ const candidate = this.keyMap.get(this.lastKey);
180
+ if (candidate?.type === "content") {
181
+ return this.getKeyBefore(candidate.key);
182
+ }
183
+ return this.lastKey;
184
+ }
185
+
186
+ getChildren(key: Key): Iterable<TreeNode<T>> {
187
+ const node = this.keyMap.get(key);
188
+ return node?.childNodes ?? [];
189
+ }
190
+
191
+ getTextValue(key: Key): string {
192
+ const node = this.keyMap.get(key);
193
+ return node?.textValue ?? "";
194
+ }
195
+
196
+ getParentKey(key: Key): Key | null {
197
+ const node = this.keyMap.get(key);
198
+ return node?.parentKey ?? null;
199
+ }
200
+
201
+ [Symbol.iterator](): Iterator<TreeNode<T>> {
202
+ return this.visibleRows[Symbol.iterator]();
203
+ }
204
+ }
205
+
206
+ /**
207
+ * Factory function to create a TreeCollection.
208
+ * Useful for the collectionFactory pattern in TreeStateOptions.
209
+ */
210
+ export function createTreeCollection<T>(
211
+ items: TreeItemData<T>[],
212
+ expandedKeys: Set<Key>,
213
+ ): TreeCollection<T> {
214
+ return new TreeCollection(items, expandedKeys);
215
+ }
@@ -4,11 +4,14 @@
4
4
  *
5
5
  * Manages expansion state, selection, and focus for hierarchical tree data.
6
6
  */
7
- import { type Accessor } from 'solid-js';
8
- import type { TreeState, TreeStateOptions, TreeCollection } from './types';
7
+ import { type Accessor } from "solid-js";
8
+ import type { TreeState, TreeStateOptions, TreeCollection } from "./types";
9
9
  /**
10
10
  * Creates state management for a tree component.
11
11
  * Handles expansion, selection, focus management, and keyboard navigation state.
12
12
  */
13
- export declare function createTreeState<T extends object, C extends TreeCollection<T> = TreeCollection<T>>(options: Accessor<TreeStateOptions<T, C>>): TreeState<T, C>;
14
- //# sourceMappingURL=createTreeState.d.ts.map
13
+ export declare function createTreeState<
14
+ T extends object,
15
+ C extends TreeCollection<T> = TreeCollection<T>,
16
+ >(options: Accessor<TreeStateOptions<T, C>>): TreeState<T, C>;
17
+ //# sourceMappingURL=createTreeState.d.ts.map