@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
@@ -3,49 +3,58 @@
3
3
  *
4
4
  * Provides reactive state for dragging items from a collection.
5
5
  */
6
- import { type Accessor } from 'solid-js';
7
- import type { DragItem, DraggableCollectionStartEvent, DraggableCollectionMoveEvent, DraggableCollectionEndEvent, DropOperation, DragPreviewRenderer } from './types';
6
+ import { type Accessor } from "solid-js";
7
+ import type {
8
+ DragItem,
9
+ DraggableCollectionStartEvent,
10
+ DraggableCollectionMoveEvent,
11
+ DraggableCollectionEndEvent,
12
+ DropOperation,
13
+ DragPreviewRenderer,
14
+ } from "./types";
8
15
  export interface DraggableCollectionStateOptions<T = object> {
9
- /** A function that returns the items being dragged. */
10
- getItems: (keys: Set<string | number>) => DragItem[];
11
- /** Function that returns the allowed drop operations. */
12
- getAllowedDropOperations?: () => DropOperation[];
13
- /** Handler that is called when a drag operation is started. */
14
- onDragStart?: (e: DraggableCollectionStartEvent) => void;
15
- /** Handler that is called when the drag is moved. */
16
- onDragMove?: (e: DraggableCollectionMoveEvent) => void;
17
- /** Handler that is called when the drag operation ends. */
18
- onDragEnd?: (e: DraggableCollectionEndEvent) => void;
19
- /** Whether the drag operation is disabled. */
20
- isDisabled?: boolean;
21
- /** Preview renderer function ref. */
22
- preview?: {
23
- current: DragPreviewRenderer | null;
24
- };
16
+ /** A function that returns the items being dragged. */
17
+ getItems: (keys: Set<string | number>) => DragItem[];
18
+ /** Function that returns the allowed drop operations. */
19
+ getAllowedDropOperations?: () => DropOperation[];
20
+ /** Handler that is called when a drag operation is started. */
21
+ onDragStart?: (e: DraggableCollectionStartEvent) => void;
22
+ /** Handler that is called when the drag is moved. */
23
+ onDragMove?: (e: DraggableCollectionMoveEvent) => void;
24
+ /** Handler that is called when the drag operation ends. */
25
+ onDragEnd?: (e: DraggableCollectionEndEvent) => void;
26
+ /** Whether the drag operation is disabled. */
27
+ isDisabled?: boolean;
28
+ /** Preview renderer function ref. */
29
+ preview?: {
30
+ current: DragPreviewRenderer | null;
31
+ };
25
32
  }
26
33
  export interface DraggableCollectionState {
27
- /** Whether items are currently being dragged. */
28
- readonly isDragging: boolean;
29
- /** The keys of the items being dragged. */
30
- readonly draggingKeys: Set<string | number>;
31
- /** Whether dragging is disabled. */
32
- readonly isDisabled: boolean;
33
- /** Start a drag operation with the given keys. */
34
- startDrag(keys: Set<string | number>, x: number, y: number): void;
35
- /** Update drag position. */
36
- moveDrag(x: number, y: number): void;
37
- /** End a drag operation. */
38
- endDrag(x: number, y: number, dropOperation: DropOperation, isInternal: boolean): void;
39
- /** Cancel a drag operation. */
40
- cancelDrag(): void;
41
- /** Get the items being dragged for the given keys. */
42
- getItems(keys: Set<string | number>): DragItem[];
43
- /** Get allowed drop operations. */
44
- getAllowedDropOperations(): DropOperation[];
45
- /** Preview renderer. */
46
- readonly preview: {
34
+ /** Whether items are currently being dragged. */
35
+ readonly isDragging: boolean;
36
+ /** The keys of the items being dragged. */
37
+ readonly draggingKeys: Set<string | number>;
38
+ /** Whether dragging is disabled. */
39
+ readonly isDisabled: boolean;
40
+ /** Start a drag operation with the given keys. */
41
+ startDrag(keys: Set<string | number>, x: number, y: number): void;
42
+ /** Update drag position. */
43
+ moveDrag(x: number, y: number): void;
44
+ /** End a drag operation. */
45
+ endDrag(x: number, y: number, dropOperation: DropOperation, isInternal: boolean): void;
46
+ /** Cancel a drag operation. */
47
+ cancelDrag(): void;
48
+ /** Get the items being dragged for the given keys. */
49
+ getItems(keys: Set<string | number>): DragItem[];
50
+ /** Get allowed drop operations. */
51
+ getAllowedDropOperations(): DropOperation[];
52
+ /** Preview renderer. */
53
+ readonly preview:
54
+ | {
47
55
  current: DragPreviewRenderer | null;
48
- } | undefined;
56
+ }
57
+ | undefined;
49
58
  }
50
59
  /**
51
60
  * Creates state for dragging items from a collection.
@@ -53,5 +62,7 @@ export interface DraggableCollectionState {
53
62
  * @param props - Accessor returning draggable collection options
54
63
  * @returns Draggable collection state object
55
64
  */
56
- export declare function createDraggableCollectionState<T = object>(props: Accessor<DraggableCollectionStateOptions<T>>): DraggableCollectionState;
57
- //# sourceMappingURL=createDraggableCollectionState.d.ts.map
65
+ export declare function createDraggableCollectionState<T = object>(
66
+ props: Accessor<DraggableCollectionStateOptions<T>>,
67
+ ): DraggableCollectionState;
68
+ //# sourceMappingURL=createDraggableCollectionState.d.ts.map
@@ -1,165 +1,158 @@
1
- /**
2
- * Draggable collection state management for solid-stately.
3
- *
4
- * Provides reactive state for dragging items from a collection.
5
- */
6
-
7
- import { createSignal, createMemo, type Accessor } from 'solid-js';
8
- import type {
9
- DragItem,
10
- DraggableCollectionStartEvent,
11
- DraggableCollectionMoveEvent,
12
- DraggableCollectionEndEvent,
13
- DropOperation,
14
- DragPreviewRenderer,
15
- } from './types';
16
-
17
- export interface DraggableCollectionStateOptions<T = object> {
18
- /** A function that returns the items being dragged. */
19
- getItems: (keys: Set<string | number>) => DragItem[];
20
- /** Function that returns the allowed drop operations. */
21
- getAllowedDropOperations?: () => DropOperation[];
22
- /** Handler that is called when a drag operation is started. */
23
- onDragStart?: (e: DraggableCollectionStartEvent) => void;
24
- /** Handler that is called when the drag is moved. */
25
- onDragMove?: (e: DraggableCollectionMoveEvent) => void;
26
- /** Handler that is called when the drag operation ends. */
27
- onDragEnd?: (e: DraggableCollectionEndEvent) => void;
28
- /** Whether the drag operation is disabled. */
29
- isDisabled?: boolean;
30
- /** Preview renderer function ref. */
31
- preview?: { current: DragPreviewRenderer | null };
32
- }
33
-
34
- export interface DraggableCollectionState {
35
- /** Whether items are currently being dragged. */
36
- readonly isDragging: boolean;
37
- /** The keys of the items being dragged. */
38
- readonly draggingKeys: Set<string | number>;
39
- /** Whether dragging is disabled. */
40
- readonly isDisabled: boolean;
41
- /** Start a drag operation with the given keys. */
42
- startDrag(keys: Set<string | number>, x: number, y: number): void;
43
- /** Update drag position. */
44
- moveDrag(x: number, y: number): void;
45
- /** End a drag operation. */
46
- endDrag(x: number, y: number, dropOperation: DropOperation, isInternal: boolean): void;
47
- /** Cancel a drag operation. */
48
- cancelDrag(): void;
49
- /** Get the items being dragged for the given keys. */
50
- getItems(keys: Set<string | number>): DragItem[];
51
- /** Get allowed drop operations. */
52
- getAllowedDropOperations(): DropOperation[];
53
- /** Preview renderer. */
54
- readonly preview: { current: DragPreviewRenderer | null } | undefined;
55
- }
56
-
57
- /**
58
- * Creates state for dragging items from a collection.
59
- *
60
- * @param props - Accessor returning draggable collection options
61
- * @returns Draggable collection state object
62
- */
63
- export function createDraggableCollectionState<T = object>(
64
- props: Accessor<DraggableCollectionStateOptions<T>>
65
- ): DraggableCollectionState {
66
- const getProps = createMemo(() => props());
67
-
68
- const [isDragging, setIsDragging] = createSignal(false);
69
- const [draggingKeys, setDraggingKeys] = createSignal<Set<string | number>>(
70
- new Set()
71
- );
72
-
73
- const startDrag = (keys: Set<string | number>, x: number, y: number) => {
74
- const p = getProps();
75
- if (p.isDisabled) return;
76
-
77
- setIsDragging(true);
78
- setDraggingKeys(keys);
79
-
80
- if (typeof p.onDragStart === 'function') {
81
- p.onDragStart({
82
- type: 'dragstart',
83
- x,
84
- y,
85
- keys,
86
- });
87
- }
88
- };
89
-
90
- const moveDrag = (x: number, y: number) => {
91
- const p = getProps();
92
- if (!isDragging() || p.isDisabled) return;
93
-
94
- if (typeof p.onDragMove === 'function') {
95
- p.onDragMove({
96
- type: 'dragmove',
97
- x,
98
- y,
99
- keys: draggingKeys(),
100
- });
101
- }
102
- };
103
-
104
- const endDrag = (
105
- x: number,
106
- y: number,
107
- dropOperation: DropOperation,
108
- isInternal: boolean
109
- ) => {
110
- const p = getProps();
111
- const keys = draggingKeys();
112
-
113
- setIsDragging(false);
114
- setDraggingKeys(new Set<string | number>());
115
-
116
- if (typeof p.onDragEnd === 'function') {
117
- p.onDragEnd({
118
- type: 'dragend',
119
- x,
120
- y,
121
- dropOperation,
122
- keys,
123
- isInternal,
124
- });
125
- }
126
- };
127
-
128
- const cancelDrag = () => {
129
- endDrag(0, 0, 'cancel', false);
130
- };
131
-
132
- const getItems = (keys: Set<string | number>) => {
133
- const p = getProps();
134
- return p.getItems(keys);
135
- };
136
-
137
- const getAllowedDropOperations = (): DropOperation[] => {
138
- const p = getProps();
139
- if (typeof p.getAllowedDropOperations === 'function') {
140
- return p.getAllowedDropOperations();
141
- }
142
- return ['move', 'copy', 'link'];
143
- };
144
-
145
- return {
146
- get isDragging() {
147
- return isDragging();
148
- },
149
- get draggingKeys() {
150
- return draggingKeys();
151
- },
152
- get isDisabled() {
153
- return getProps().isDisabled ?? false;
154
- },
155
- get preview() {
156
- return getProps().preview;
157
- },
158
- startDrag,
159
- moveDrag,
160
- endDrag,
161
- cancelDrag,
162
- getItems,
163
- getAllowedDropOperations,
164
- };
165
- }
1
+ /**
2
+ * Draggable collection state management for solid-stately.
3
+ *
4
+ * Provides reactive state for dragging items from a collection.
5
+ */
6
+
7
+ import { createSignal, createMemo, type Accessor } from "solid-js";
8
+ import type {
9
+ DragItem,
10
+ DraggableCollectionStartEvent,
11
+ DraggableCollectionMoveEvent,
12
+ DraggableCollectionEndEvent,
13
+ DropOperation,
14
+ DragPreviewRenderer,
15
+ } from "./types";
16
+
17
+ export interface DraggableCollectionStateOptions<T = object> {
18
+ /** A function that returns the items being dragged. */
19
+ getItems: (keys: Set<string | number>) => DragItem[];
20
+ /** Function that returns the allowed drop operations. */
21
+ getAllowedDropOperations?: () => DropOperation[];
22
+ /** Handler that is called when a drag operation is started. */
23
+ onDragStart?: (e: DraggableCollectionStartEvent) => void;
24
+ /** Handler that is called when the drag is moved. */
25
+ onDragMove?: (e: DraggableCollectionMoveEvent) => void;
26
+ /** Handler that is called when the drag operation ends. */
27
+ onDragEnd?: (e: DraggableCollectionEndEvent) => void;
28
+ /** Whether the drag operation is disabled. */
29
+ isDisabled?: boolean;
30
+ /** Preview renderer function ref. */
31
+ preview?: { current: DragPreviewRenderer | null };
32
+ }
33
+
34
+ export interface DraggableCollectionState {
35
+ /** Whether items are currently being dragged. */
36
+ readonly isDragging: boolean;
37
+ /** The keys of the items being dragged. */
38
+ readonly draggingKeys: Set<string | number>;
39
+ /** Whether dragging is disabled. */
40
+ readonly isDisabled: boolean;
41
+ /** Start a drag operation with the given keys. */
42
+ startDrag(keys: Set<string | number>, x: number, y: number): void;
43
+ /** Update drag position. */
44
+ moveDrag(x: number, y: number): void;
45
+ /** End a drag operation. */
46
+ endDrag(x: number, y: number, dropOperation: DropOperation, isInternal: boolean): void;
47
+ /** Cancel a drag operation. */
48
+ cancelDrag(): void;
49
+ /** Get the items being dragged for the given keys. */
50
+ getItems(keys: Set<string | number>): DragItem[];
51
+ /** Get allowed drop operations. */
52
+ getAllowedDropOperations(): DropOperation[];
53
+ /** Preview renderer. */
54
+ readonly preview: { current: DragPreviewRenderer | null } | undefined;
55
+ }
56
+
57
+ /**
58
+ * Creates state for dragging items from a collection.
59
+ *
60
+ * @param props - Accessor returning draggable collection options
61
+ * @returns Draggable collection state object
62
+ */
63
+ export function createDraggableCollectionState<T = object>(
64
+ props: Accessor<DraggableCollectionStateOptions<T>>,
65
+ ): DraggableCollectionState {
66
+ const getProps = createMemo(() => props());
67
+
68
+ const [isDragging, setIsDragging] = createSignal(false);
69
+ const [draggingKeys, setDraggingKeys] = createSignal<Set<string | number>>(new Set());
70
+
71
+ const startDrag = (keys: Set<string | number>, x: number, y: number) => {
72
+ const p = getProps();
73
+ if (p.isDisabled) return;
74
+
75
+ setIsDragging(true);
76
+ setDraggingKeys(keys);
77
+
78
+ if (typeof p.onDragStart === "function") {
79
+ p.onDragStart({
80
+ type: "dragstart",
81
+ x,
82
+ y,
83
+ keys,
84
+ });
85
+ }
86
+ };
87
+
88
+ const moveDrag = (x: number, y: number) => {
89
+ const p = getProps();
90
+ if (!isDragging() || p.isDisabled) return;
91
+
92
+ if (typeof p.onDragMove === "function") {
93
+ p.onDragMove({
94
+ type: "dragmove",
95
+ x,
96
+ y,
97
+ keys: draggingKeys(),
98
+ });
99
+ }
100
+ };
101
+
102
+ const endDrag = (x: number, y: number, dropOperation: DropOperation, isInternal: boolean) => {
103
+ const p = getProps();
104
+ const keys = draggingKeys();
105
+
106
+ setIsDragging(false);
107
+ setDraggingKeys(new Set<string | number>());
108
+
109
+ if (typeof p.onDragEnd === "function") {
110
+ p.onDragEnd({
111
+ type: "dragend",
112
+ x,
113
+ y,
114
+ dropOperation,
115
+ keys,
116
+ isInternal,
117
+ });
118
+ }
119
+ };
120
+
121
+ const cancelDrag = () => {
122
+ endDrag(0, 0, "cancel", false);
123
+ };
124
+
125
+ const getItems = (keys: Set<string | number>) => {
126
+ const p = getProps();
127
+ return p.getItems(keys);
128
+ };
129
+
130
+ const getAllowedDropOperations = (): DropOperation[] => {
131
+ const p = getProps();
132
+ if (typeof p.getAllowedDropOperations === "function") {
133
+ return p.getAllowedDropOperations();
134
+ }
135
+ return ["move", "copy", "link"];
136
+ };
137
+
138
+ return {
139
+ get isDragging() {
140
+ return isDragging();
141
+ },
142
+ get draggingKeys() {
143
+ return draggingKeys();
144
+ },
145
+ get isDisabled() {
146
+ return getProps().isDisabled ?? false;
147
+ },
148
+ get preview() {
149
+ return getProps().preview;
150
+ },
151
+ startDrag,
152
+ moveDrag,
153
+ endDrag,
154
+ cancelDrag,
155
+ getItems,
156
+ getAllowedDropOperations,
157
+ };
158
+ }
@@ -3,53 +3,72 @@
3
3
  *
4
4
  * Provides reactive state for drop target operations.
5
5
  */
6
- import { type Accessor } from 'solid-js';
7
- import type { DropItem, DropEnterEvent, DropMoveEvent, DropExitEvent, DropActivateEvent, DropEvent, DropOperation, DragTypes } from './types';
6
+ import { type Accessor } from "solid-js";
7
+ import type {
8
+ DropItem,
9
+ DropEnterEvent,
10
+ DropMoveEvent,
11
+ DropExitEvent,
12
+ DropActivateEvent,
13
+ DropEvent,
14
+ DropOperation,
15
+ DragTypes,
16
+ } from "./types";
8
17
  export interface DropStateOptions {
9
- /**
10
- * A function returning the drop operation to be performed.
11
- */
12
- getDropOperation?: (types: DragTypes, allowedOperations: DropOperation[]) => DropOperation;
13
- /**
14
- * A function returning the drop operation for a specific point.
15
- */
16
- getDropOperationForPoint?: (types: DragTypes, allowedOperations: DropOperation[], x: number, y: number) => DropOperation;
17
- /** Handler that is called when a valid drag enters the drop target. */
18
- onDropEnter?: (e: DropEnterEvent) => void;
19
- /** Handler that is called when a valid drag is moved within the drop target. */
20
- onDropMove?: (e: DropMoveEvent) => void;
21
- /** Handler that is called after a valid drag is held over the drop target. */
22
- onDropActivate?: (e: DropActivateEvent) => void;
23
- /** Handler that is called when a valid drag exits the drop target. */
24
- onDropExit?: (e: DropExitEvent) => void;
25
- /** Handler that is called when a valid drag is dropped on the drop target. */
26
- onDrop?: (e: DropEvent) => void;
27
- /** Whether there is a separate drop button affordance. */
28
- hasDropButton?: boolean;
29
- /** Whether the drop target is disabled. */
30
- isDisabled?: boolean;
18
+ /**
19
+ * A function returning the drop operation to be performed.
20
+ */
21
+ getDropOperation?: (types: DragTypes, allowedOperations: DropOperation[]) => DropOperation;
22
+ /**
23
+ * A function returning the drop operation for a specific point.
24
+ */
25
+ getDropOperationForPoint?: (
26
+ types: DragTypes,
27
+ allowedOperations: DropOperation[],
28
+ x: number,
29
+ y: number,
30
+ ) => DropOperation;
31
+ /** Handler that is called when a valid drag enters the drop target. */
32
+ onDropEnter?: (e: DropEnterEvent) => void;
33
+ /** Handler that is called when a valid drag is moved within the drop target. */
34
+ onDropMove?: (e: DropMoveEvent) => void;
35
+ /** Handler that is called after a valid drag is held over the drop target. */
36
+ onDropActivate?: (e: DropActivateEvent) => void;
37
+ /** Handler that is called when a valid drag exits the drop target. */
38
+ onDropExit?: (e: DropExitEvent) => void;
39
+ /** Handler that is called when a valid drag is dropped on the drop target. */
40
+ onDrop?: (e: DropEvent) => void;
41
+ /** Whether there is a separate drop button affordance. */
42
+ hasDropButton?: boolean;
43
+ /** Whether the drop target is disabled. */
44
+ isDisabled?: boolean;
31
45
  }
32
46
  export interface DropState {
33
- /** Whether the drop target is currently being hovered or focused. */
34
- readonly isDropTarget: boolean;
35
- /** Whether the drop target is disabled. */
36
- readonly isDisabled: boolean;
37
- /** Whether there is a drop button. */
38
- readonly hasDropButton: boolean;
39
- /** Enter the drop target. */
40
- enterTarget(x: number, y: number): void;
41
- /** Move within the drop target. */
42
- moveInTarget(x: number, y: number): void;
43
- /** Exit the drop target. */
44
- exitTarget(x: number, y: number): void;
45
- /** Activate the drop target (after holding). */
46
- activateTarget(x: number, y: number): void;
47
- /** Perform a drop on the target. */
48
- drop(x: number, y: number, items: DropItem[], dropOperation: DropOperation): void;
49
- /** Get the drop operation for given types. */
50
- getDropOperation(types: DragTypes, allowedOperations: DropOperation[]): DropOperation;
51
- /** Get the drop operation for a specific point. */
52
- getDropOperationForPoint(types: DragTypes, allowedOperations: DropOperation[], x: number, y: number): DropOperation;
47
+ /** Whether the drop target is currently being hovered or focused. */
48
+ readonly isDropTarget: boolean;
49
+ /** Whether the drop target is disabled. */
50
+ readonly isDisabled: boolean;
51
+ /** Whether there is a drop button. */
52
+ readonly hasDropButton: boolean;
53
+ /** Enter the drop target. */
54
+ enterTarget(x: number, y: number): void;
55
+ /** Move within the drop target. */
56
+ moveInTarget(x: number, y: number): void;
57
+ /** Exit the drop target. */
58
+ exitTarget(x: number, y: number): void;
59
+ /** Activate the drop target (after holding). */
60
+ activateTarget(x: number, y: number): void;
61
+ /** Perform a drop on the target. */
62
+ drop(x: number, y: number, items: DropItem[], dropOperation: DropOperation): void;
63
+ /** Get the drop operation for given types. */
64
+ getDropOperation(types: DragTypes, allowedOperations: DropOperation[]): DropOperation;
65
+ /** Get the drop operation for a specific point. */
66
+ getDropOperationForPoint(
67
+ types: DragTypes,
68
+ allowedOperations: DropOperation[],
69
+ x: number,
70
+ y: number,
71
+ ): DropOperation;
53
72
  }
54
73
  /**
55
74
  * Creates drop state for managing drop target operations.
@@ -58,4 +77,4 @@ export interface DropState {
58
77
  * @returns Drop state object
59
78
  */
60
79
  export declare function createDropState(props: Accessor<DropStateOptions>): DropState;
61
- //# sourceMappingURL=createDropState.d.ts.map
80
+ //# sourceMappingURL=createDropState.d.ts.map