@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.
- package/LICENSE +21 -0
- package/README.md +30 -283
- package/dist/autocomplete/createAutocompleteState.d.ts +3 -2
- package/dist/autocomplete/index.d.ts +1 -1
- package/dist/calendar/createCalendarState.d.ts +22 -7
- package/dist/calendar/createDateFieldState.d.ts +30 -7
- package/dist/calendar/createDatePickerState.d.ts +60 -0
- package/dist/calendar/createRangeCalendarState.d.ts +27 -8
- package/dist/calendar/createTimeFieldState.d.ts +34 -7
- package/dist/calendar/index.d.ts +7 -6
- package/dist/checkbox/createCheckboxGroupState.d.ts +12 -3
- package/dist/checkbox/index.d.ts +1 -1
- package/dist/collections/ListCollection.d.ts +1 -1
- package/dist/collections/createListState.d.ts +8 -8
- package/dist/collections/createMenuState.d.ts +7 -7
- package/dist/collections/createSelectionState.d.ts +5 -5
- package/dist/collections/index.d.ts +5 -5
- package/dist/collections/types.d.ts +23 -12
- package/dist/color/Color.d.ts +1 -1
- package/dist/color/createColorAreaState.d.ts +4 -2
- package/dist/color/createColorFieldState.d.ts +38 -12
- package/dist/color/createColorSliderState.d.ts +9 -2
- package/dist/color/createColorWheelState.d.ts +13 -2
- package/dist/color/getColorChannels.d.ts +20 -0
- package/dist/color/index.d.ts +6 -6
- package/dist/color/types.d.ts +4 -4
- package/dist/combobox/createComboBoxState.d.ts +27 -13
- package/dist/combobox/index.d.ts +1 -1
- package/dist/data/createAsyncList.d.ts +111 -0
- package/dist/data/createListData.d.ts +65 -0
- package/dist/data/createTreeData.d.ts +65 -0
- package/dist/data/index.d.ts +3 -0
- package/dist/datepicker/index.d.ts +8 -0
- package/dist/disclosure/createDisclosureState.d.ts +2 -2
- package/dist/disclosure/index.d.ts +1 -1
- package/dist/dnd/createDragState.d.ts +2 -2
- package/dist/dnd/createDraggableCollectionState.d.ts +2 -2
- package/dist/dnd/createDropState.d.ts +2 -2
- package/dist/dnd/createDroppableCollectionState.d.ts +3 -3
- package/dist/dnd/index.d.ts +5 -5
- package/dist/dnd/types.d.ts +16 -16
- package/dist/form/createFormValidationState.d.ts +3 -3
- package/dist/form/index.d.ts +1 -1
- package/dist/grid/createGridState.d.ts +2 -2
- package/dist/grid/index.d.ts +2 -2
- package/dist/grid/types.d.ts +17 -11
- package/dist/index.d.ts +31 -25
- package/dist/index.js +7990 -6264
- package/dist/index.js.map +1 -7
- package/dist/menu/index.d.ts +8 -0
- package/dist/numberfield/createNumberFieldState.d.ts +2 -2
- package/dist/numberfield/index.d.ts +1 -1
- package/dist/overlays/createOverlayTriggerState.d.ts +2 -2
- package/dist/overlays/index.d.ts +1 -1
- package/dist/radio/createRadioGroupState.d.ts +13 -4
- package/dist/radio/index.d.ts +1 -1
- package/dist/searchfield/createSearchFieldState.d.ts +2 -2
- package/dist/searchfield/index.d.ts +2 -2
- package/dist/select/createSelectState.d.ts +20 -3
- package/dist/select/index.d.ts +1 -1
- package/dist/selection/index.d.ts +11 -0
- package/dist/slider/createSliderState.d.ts +3 -3
- package/dist/slider/index.d.ts +2 -2
- package/dist/steplist/createStepListState.d.ts +48 -0
- package/dist/steplist/index.d.ts +1 -0
- package/dist/table/TableCollection.d.ts +3 -3
- package/dist/table/createTableColumnResizeState.d.ts +54 -0
- package/dist/table/createTableState.d.ts +2 -2
- package/dist/table/index.d.ts +5 -3
- package/dist/table/types.d.ts +10 -10
- package/dist/tabs/createTabListState.d.ts +5 -5
- package/dist/tabs/index.d.ts +1 -1
- package/dist/textfield/createTextFieldState.d.ts +2 -2
- package/dist/textfield/index.d.ts +1 -1
- package/dist/toast/createToastState.d.ts +15 -3
- package/dist/toast/index.d.ts +1 -1
- package/dist/toggle/createToggleGroupState.d.ts +45 -0
- package/dist/toggle/createToggleState.d.ts +2 -2
- package/dist/toggle/index.d.ts +2 -1
- package/dist/tooltip/createTooltipTriggerState.d.ts +2 -2
- package/dist/tooltip/index.d.ts +1 -1
- package/dist/tree/TreeCollection.d.ts +5 -4
- package/dist/tree/createTreeState.d.ts +2 -2
- package/dist/tree/index.d.ts +3 -3
- package/dist/tree/types.d.ts +19 -13
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/reactivity.d.ts +1 -1
- package/package.json +30 -30
- package/src/autocomplete/createAutocompleteState.d.ts +19 -17
- package/src/autocomplete/createAutocompleteState.ts +25 -32
- package/src/autocomplete/index.d.ts +6 -2
- package/src/autocomplete/index.ts +1 -1
- package/src/calendar/createCalendarState.d.ts +139 -117
- package/src/calendar/createCalendarState.ts +221 -74
- package/src/calendar/createDateFieldState.d.ts +130 -95
- package/src/calendar/createDateFieldState.ts +286 -151
- package/src/calendar/createDatePickerState.ts +347 -0
- package/src/calendar/createRangeCalendarState.d.ts +154 -129
- package/src/calendar/createRangeCalendarState.ts +293 -79
- package/src/calendar/createTimeFieldState.d.ts +81 -79
- package/src/calendar/createTimeFieldState.ts +187 -108
- package/src/calendar/index.d.ts +80 -7
- package/src/calendar/index.ts +21 -12
- package/src/checkbox/createCheckboxGroupState.d.ts +57 -55
- package/src/checkbox/createCheckboxGroupState.ts +57 -30
- package/src/checkbox/index.d.ts +6 -2
- package/src/checkbox/index.ts +1 -1
- package/src/collections/ListCollection.d.ts +25 -22
- package/src/collections/ListCollection.ts +152 -146
- package/src/collections/createListState.d.ts +73 -58
- package/src/collections/createListState.ts +267 -264
- package/src/collections/createMenuState.d.ts +36 -31
- package/src/collections/createMenuState.ts +112 -106
- package/src/collections/createSelectionState.d.ts +78 -65
- package/src/collections/createSelectionState.ts +340 -336
- package/src/collections/index.d.ts +38 -6
- package/src/collections/index.ts +41 -46
- package/src/collections/types.d.ts +101 -101
- package/src/collections/types.ts +181 -169
- package/src/color/Color.d.ts +20 -5
- package/src/color/Color.ts +1054 -951
- package/src/color/createColorAreaState.d.ts +67 -65
- package/src/color/createColorAreaState.ts +301 -293
- package/src/color/createColorFieldState.d.ts +46 -44
- package/src/color/createColorFieldState.ts +428 -292
- package/src/color/createColorSliderState.d.ts +58 -56
- package/src/color/createColorSliderState.ts +272 -241
- package/src/color/createColorWheelState.d.ts +42 -40
- package/src/color/createColorWheelState.ts +248 -211
- package/src/color/getColorChannels.ts +36 -0
- package/src/color/index.d.ts +36 -7
- package/src/color/index.ts +44 -47
- package/src/color/types.d.ts +68 -63
- package/src/color/types.ts +119 -127
- package/src/combobox/createComboBoxState.d.ts +107 -105
- package/src/combobox/createComboBoxState.ts +790 -703
- package/src/combobox/index.d.ts +10 -2
- package/src/combobox/index.ts +13 -13
- package/src/data/createAsyncList.ts +403 -0
- package/src/data/createListData.ts +298 -0
- package/src/data/createTreeData.ts +646 -0
- package/src/data/index.ts +25 -0
- package/src/datepicker/index.ts +32 -0
- package/src/disclosure/createDisclosureState.d.ts +47 -43
- package/src/disclosure/createDisclosureState.ts +9 -23
- package/src/disclosure/index.d.ts +10 -2
- package/src/disclosure/index.ts +1 -1
- package/src/dnd/createDragState.d.ts +51 -42
- package/src/dnd/createDragState.ts +151 -153
- package/src/dnd/createDraggableCollectionState.d.ts +52 -41
- package/src/dnd/createDraggableCollectionState.ts +158 -165
- package/src/dnd/createDropState.d.ts +64 -45
- package/src/dnd/createDropState.ts +202 -212
- package/src/dnd/createDroppableCollectionState.d.ts +88 -59
- package/src/dnd/createDroppableCollectionState.ts +354 -357
- package/src/dnd/index.d.ts +54 -6
- package/src/dnd/index.ts +63 -76
- package/src/dnd/types.d.ts +167 -156
- package/src/dnd/types.ts +316 -317
- package/src/form/createFormValidationState.d.ts +47 -45
- package/src/form/createFormValidationState.ts +356 -389
- package/src/form/index.d.ts +16 -2
- package/src/form/index.ts +15 -15
- package/src/grid/createGridState.d.ts +7 -4
- package/src/grid/createGridState.ts +44 -51
- package/src/grid/index.d.ts +3 -3
- package/src/grid/index.ts +2 -8
- package/src/grid/types.d.ts +136 -129
- package/src/grid/types.ts +24 -17
- package/src/index.d.ts +310 -26
- package/src/index.ts +87 -79
- package/src/menu/index.ts +17 -0
- package/src/numberfield/createNumberFieldState.d.ts +56 -54
- package/src/numberfield/createNumberFieldState.ts +422 -383
- package/src/numberfield/index.d.ts +6 -2
- package/src/numberfield/index.ts +5 -5
- package/src/overlays/createOverlayTriggerState.d.ts +22 -20
- package/src/overlays/createOverlayTriggerState.ts +66 -67
- package/src/overlays/index.d.ts +6 -2
- package/src/overlays/index.ts +5 -5
- package/src/radio/createRadioGroupState.d.ts +54 -52
- package/src/radio/createRadioGroupState.ts +66 -30
- package/src/radio/index.d.ts +7 -2
- package/src/radio/index.ts +1 -1
- package/src/searchfield/createSearchFieldState.d.ts +16 -14
- package/src/searchfield/createSearchFieldState.ts +56 -62
- package/src/searchfield/index.d.ts +3 -3
- package/src/searchfield/index.ts +2 -5
- package/src/select/createSelectState.d.ts +63 -61
- package/src/select/createSelectState.ts +290 -181
- package/src/select/index.d.ts +2 -2
- package/src/select/index.ts +1 -5
- package/src/selection/index.ts +27 -0
- package/src/slider/createSliderState.d.ts +60 -60
- package/src/slider/createSliderState.ts +233 -211
- package/src/slider/index.d.ts +3 -3
- package/src/slider/index.ts +2 -6
- package/src/ssr/index.d.ts +1 -1
- package/src/ssr/index.ts +2 -2
- package/src/steplist/createStepListState.ts +191 -0
- package/src/steplist/index.ts +5 -0
- package/src/table/TableCollection.d.ts +42 -40
- package/src/table/TableCollection.ts +61 -64
- package/src/table/createTableColumnResizeState.ts +242 -0
- package/src/table/createTableState.d.ts +7 -4
- package/src/table/createTableState.ts +10 -7
- package/src/table/index.d.ts +14 -4
- package/src/table/index.ts +10 -3
- package/src/table/types.d.ts +98 -92
- package/src/table/types.ts +17 -13
- package/src/tabs/createTabListState.d.ts +59 -57
- package/src/tabs/createTabListState.ts +58 -39
- package/src/tabs/index.d.ts +8 -2
- package/src/tabs/index.ts +1 -1
- package/src/textfield/createTextFieldState.d.ts +16 -14
- package/src/textfield/createTextFieldState.ts +7 -18
- package/src/textfield/index.d.ts +6 -2
- package/src/textfield/index.ts +1 -1
- package/src/toast/createToastState.d.ts +92 -81
- package/src/toast/createToastState.ts +56 -44
- package/src/toast/index.d.ts +12 -2
- package/src/toast/index.ts +1 -1
- package/src/toggle/createToggleGroupState.ts +117 -0
- package/src/toggle/createToggleState.d.ts +19 -19
- package/src/toggle/createToggleState.ts +2 -16
- package/src/toggle/index.d.ts +2 -2
- package/src/toggle/index.ts +6 -4
- package/src/tooltip/createTooltipTriggerState.d.ts +17 -17
- package/src/tooltip/createTooltipTriggerState.ts +184 -183
- package/src/tooltip/index.d.ts +7 -2
- package/src/tooltip/index.ts +6 -6
- package/src/tree/TreeCollection.d.ts +26 -23
- package/src/tree/TreeCollection.ts +215 -175
- package/src/tree/createTreeState.d.ts +7 -4
- package/src/tree/createTreeState.ts +390 -392
- package/src/tree/index.d.ts +10 -4
- package/src/tree/index.ts +13 -13
- package/src/tree/types.d.ts +131 -126
- package/src/tree/types.ts +183 -174
- package/src/utils/index.d.ts +2 -2
- package/src/utils/index.ts +1 -1
- package/src/utils/reactivity.d.ts +2 -2
- package/src/utils/reactivity.ts +3 -3
|
@@ -2,66 +2,68 @@
|
|
|
2
2
|
* ColorSlider state management.
|
|
3
3
|
* Based on @react-stately/color useColorSliderState.
|
|
4
4
|
*/
|
|
5
|
-
import { type Accessor } from
|
|
6
|
-
import type { Color, ColorChannel } from
|
|
5
|
+
import { type Accessor } from "solid-js";
|
|
6
|
+
import type { Color, ColorChannel } from "./types";
|
|
7
7
|
export interface ColorSliderStateOptions {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
8
|
+
/** The current color value (controlled). */
|
|
9
|
+
value?: Color | string;
|
|
10
|
+
/** The default color value (uncontrolled). */
|
|
11
|
+
defaultValue?: Color | string;
|
|
12
|
+
/** Handler called when the color changes. */
|
|
13
|
+
onChange?: (color: Color) => void;
|
|
14
|
+
/** Handler called when dragging ends. */
|
|
15
|
+
onChangeEnd?: (color: Color) => void;
|
|
16
|
+
/** The color channel this slider controls. */
|
|
17
|
+
channel: ColorChannel;
|
|
18
|
+
/** Whether the slider is disabled. */
|
|
19
|
+
isDisabled?: boolean;
|
|
20
|
+
/** The locale for formatting. */
|
|
21
|
+
locale?: string;
|
|
22
22
|
}
|
|
23
23
|
export interface ColorSliderState {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
24
|
+
/** The current color value. */
|
|
25
|
+
readonly value: Color;
|
|
26
|
+
/** Whether the slider is being dragged. */
|
|
27
|
+
readonly isDragging: boolean;
|
|
28
|
+
/** The color channel being controlled. */
|
|
29
|
+
readonly channel: ColorChannel;
|
|
30
|
+
/** The step value for the channel. */
|
|
31
|
+
readonly step: number;
|
|
32
|
+
/** The page step value for the channel. */
|
|
33
|
+
readonly pageSize: number;
|
|
34
|
+
/** The minimum value for the channel. */
|
|
35
|
+
readonly minValue: number;
|
|
36
|
+
/** The maximum value for the channel. */
|
|
37
|
+
readonly maxValue: number;
|
|
38
|
+
/** Whether the slider is disabled. */
|
|
39
|
+
readonly isDisabled: boolean;
|
|
40
|
+
/** Get the current channel value. */
|
|
41
|
+
getThumbValue(): number;
|
|
42
|
+
/** Get the minimum percent. */
|
|
43
|
+
getThumbMinValue(): number;
|
|
44
|
+
/** Get the maximum percent. */
|
|
45
|
+
getThumbMaxValue(): number;
|
|
46
|
+
/** Get the thumb value as a percentage. */
|
|
47
|
+
getThumbPercent(): number;
|
|
48
|
+
/** Set the channel value. */
|
|
49
|
+
setThumbValue(value: number): void;
|
|
50
|
+
/** Set the thumb value from a percentage (0-1). */
|
|
51
|
+
setThumbPercent(percent: number): void;
|
|
52
|
+
/** Increment the channel value. */
|
|
53
|
+
incrementThumb(stepSize?: number): void;
|
|
54
|
+
/** Decrement the channel value. */
|
|
55
|
+
decrementThumb(stepSize?: number): void;
|
|
56
|
+
/** Set the dragging state. */
|
|
57
|
+
setDragging(isDragging: boolean): void;
|
|
58
|
+
/** Get the display color (with alpha = 1). */
|
|
59
|
+
getDisplayColor(): Color;
|
|
60
|
+
/** Get the formatted value label. */
|
|
61
|
+
getThumbValueLabel(): string;
|
|
62
62
|
}
|
|
63
63
|
/**
|
|
64
64
|
* Creates state for a color slider.
|
|
65
65
|
*/
|
|
66
|
-
export declare function createColorSliderState(
|
|
67
|
-
|
|
66
|
+
export declare function createColorSliderState(
|
|
67
|
+
options: Accessor<ColorSliderStateOptions>,
|
|
68
|
+
): ColorSliderState;
|
|
69
|
+
//# sourceMappingURL=createColorSliderState.d.ts.map
|
|
@@ -1,241 +1,272 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ColorSlider state management.
|
|
3
|
-
* Based on @react-stately/color useColorSliderState.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { createSignal, createMemo, type Accessor } from
|
|
7
|
-
import type { Color, ColorChannel } from
|
|
8
|
-
import { normalizeColor } from
|
|
9
|
-
|
|
10
|
-
export
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
/** The
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
|
|
17
|
-
/** Handler called when
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
|
|
23
|
-
/** The
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
/** The
|
|
35
|
-
readonly
|
|
36
|
-
/**
|
|
37
|
-
readonly
|
|
38
|
-
/** The
|
|
39
|
-
readonly
|
|
40
|
-
/** The
|
|
41
|
-
readonly
|
|
42
|
-
/**
|
|
43
|
-
readonly
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
|
|
61
|
-
/** Set the
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
|
|
71
|
-
*/
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
):
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
const
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
const
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
const
|
|
201
|
-
|
|
202
|
-
};
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* ColorSlider state management.
|
|
3
|
+
* Based on @react-stately/color useColorSliderState.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { createSignal, createMemo, type Accessor } from "solid-js";
|
|
7
|
+
import type { Color, ColorChannel, ColorSpace } from "./types";
|
|
8
|
+
import { normalizeColor } from "./Color";
|
|
9
|
+
|
|
10
|
+
export type ColorSliderOrientation = "horizontal" | "vertical";
|
|
11
|
+
|
|
12
|
+
export interface ColorSliderStateOptions {
|
|
13
|
+
/** The current color value (controlled). */
|
|
14
|
+
value?: Color | string;
|
|
15
|
+
/** The default color value (uncontrolled). */
|
|
16
|
+
defaultValue?: Color | string;
|
|
17
|
+
/** Handler called when the color changes. */
|
|
18
|
+
onChange?: (color: Color) => void;
|
|
19
|
+
/** Handler called when dragging ends. */
|
|
20
|
+
onChangeEnd?: (color: Color) => void;
|
|
21
|
+
/** The color channel this slider controls. */
|
|
22
|
+
channel: ColorChannel;
|
|
23
|
+
/** The color space to use for channel values. */
|
|
24
|
+
colorSpace?: ColorSpace;
|
|
25
|
+
/** The slider orientation. */
|
|
26
|
+
orientation?: ColorSliderOrientation;
|
|
27
|
+
/** Whether the slider is disabled. */
|
|
28
|
+
isDisabled?: boolean;
|
|
29
|
+
/** The locale for formatting. */
|
|
30
|
+
locale?: string;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface ColorSliderState {
|
|
34
|
+
/** The current color value. */
|
|
35
|
+
readonly value: Color;
|
|
36
|
+
/** Whether the slider is being dragged. */
|
|
37
|
+
readonly isDragging: boolean;
|
|
38
|
+
/** The color channel being controlled. */
|
|
39
|
+
readonly channel: ColorChannel;
|
|
40
|
+
/** The slider orientation. */
|
|
41
|
+
readonly orientation: ColorSliderOrientation;
|
|
42
|
+
/** The step value for the channel. */
|
|
43
|
+
readonly step: number;
|
|
44
|
+
/** The page step value for the channel. */
|
|
45
|
+
readonly pageSize: number;
|
|
46
|
+
/** The minimum value for the channel. */
|
|
47
|
+
readonly minValue: number;
|
|
48
|
+
/** The maximum value for the channel. */
|
|
49
|
+
readonly maxValue: number;
|
|
50
|
+
/** Whether the slider is disabled. */
|
|
51
|
+
readonly isDisabled: boolean;
|
|
52
|
+
|
|
53
|
+
/** Get the current channel value. */
|
|
54
|
+
getThumbValue(): number;
|
|
55
|
+
/** Get the minimum percent. */
|
|
56
|
+
getThumbMinValue(): number;
|
|
57
|
+
/** Get the maximum percent. */
|
|
58
|
+
getThumbMaxValue(): number;
|
|
59
|
+
/** Get the thumb value as a percentage. */
|
|
60
|
+
getThumbPercent(): number;
|
|
61
|
+
/** Set the channel value. */
|
|
62
|
+
setThumbValue(value: number): void;
|
|
63
|
+
/** Set the thumb value from a percentage (0-1). */
|
|
64
|
+
setThumbPercent(percent: number): void;
|
|
65
|
+
/** Increment the channel value. */
|
|
66
|
+
incrementThumb(stepSize?: number): void;
|
|
67
|
+
/** Decrement the channel value. */
|
|
68
|
+
decrementThumb(stepSize?: number): void;
|
|
69
|
+
/** Set the dragging state. */
|
|
70
|
+
setDragging(isDragging: boolean): void;
|
|
71
|
+
/** Get the display color (with alpha = 1). */
|
|
72
|
+
getDisplayColor(): Color;
|
|
73
|
+
/** Get the formatted value label. */
|
|
74
|
+
getThumbValueLabel(): string;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Creates state for a color slider.
|
|
79
|
+
*/
|
|
80
|
+
export function createColorSliderState(
|
|
81
|
+
options: Accessor<ColorSliderStateOptions>,
|
|
82
|
+
): ColorSliderState {
|
|
83
|
+
const getOptions = () => options();
|
|
84
|
+
|
|
85
|
+
const normalizeValue = (value: Color | string) => {
|
|
86
|
+
const color = normalizeColor(value);
|
|
87
|
+
const colorSpace = getOptions().colorSpace;
|
|
88
|
+
return colorSpace ? color.toFormat(colorSpace) : color;
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
// Internal value state
|
|
92
|
+
const [internalValue, setInternalValue] = createSignal<Color | null>(null);
|
|
93
|
+
const [isDragging, setIsDragging] = createSignal(false);
|
|
94
|
+
|
|
95
|
+
// Initialize internal value
|
|
96
|
+
const initValue = () => {
|
|
97
|
+
const opts = getOptions();
|
|
98
|
+
if (opts.defaultValue) {
|
|
99
|
+
return normalizeValue(opts.defaultValue);
|
|
100
|
+
}
|
|
101
|
+
return null;
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
// Set initial value
|
|
105
|
+
if (internalValue() === null) {
|
|
106
|
+
const init = initValue();
|
|
107
|
+
if (init) {
|
|
108
|
+
setInternalValue(init);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// Controlled vs uncontrolled value
|
|
113
|
+
const value = createMemo(() => {
|
|
114
|
+
const opts = getOptions();
|
|
115
|
+
if (opts.value !== undefined) {
|
|
116
|
+
return normalizeValue(opts.value);
|
|
117
|
+
}
|
|
118
|
+
const fallback = internalValue() ?? normalizeValue("#ff0000");
|
|
119
|
+
return opts.colorSpace ? fallback.toFormat(opts.colorSpace) : fallback;
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
const channel = createMemo(() => getOptions().channel);
|
|
123
|
+
const orientation = createMemo<ColorSliderOrientation>(
|
|
124
|
+
() => getOptions().orientation ?? "horizontal",
|
|
125
|
+
);
|
|
126
|
+
const isDisabled = createMemo(() => getOptions().isDisabled ?? false);
|
|
127
|
+
const locale = createMemo(() => getOptions().locale ?? "en-US");
|
|
128
|
+
|
|
129
|
+
// Get channel range
|
|
130
|
+
const channelRange = createMemo(() => value().getChannelRange(channel()));
|
|
131
|
+
|
|
132
|
+
const step = createMemo(() => channelRange().step);
|
|
133
|
+
const pageSize = createMemo(() => channelRange().pageSize);
|
|
134
|
+
const minValue = createMemo(() => channelRange().minValue);
|
|
135
|
+
const maxValue = createMemo(() => channelRange().maxValue);
|
|
136
|
+
|
|
137
|
+
// Update value
|
|
138
|
+
const updateValue = (newColor: Color) => {
|
|
139
|
+
const opts = getOptions();
|
|
140
|
+
const nextColor = opts.colorSpace ? newColor.toFormat(opts.colorSpace) : newColor;
|
|
141
|
+
|
|
142
|
+
// Controlled mode
|
|
143
|
+
if (opts.value !== undefined) {
|
|
144
|
+
opts.onChange?.(nextColor);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Uncontrolled mode
|
|
149
|
+
setInternalValue(nextColor);
|
|
150
|
+
opts.onChange?.(nextColor);
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
// Get thumb value
|
|
154
|
+
const getThumbValue = () => {
|
|
155
|
+
return value().getChannelValue(channel());
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
// Get min/max values
|
|
159
|
+
const getThumbMinValue = () => minValue();
|
|
160
|
+
const getThumbMaxValue = () => maxValue();
|
|
161
|
+
|
|
162
|
+
// Get thumb percent
|
|
163
|
+
const getThumbPercent = () => {
|
|
164
|
+
const val = getThumbValue();
|
|
165
|
+
const min = minValue();
|
|
166
|
+
const max = maxValue();
|
|
167
|
+
return (val - min) / (max - min);
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
// Set thumb value
|
|
171
|
+
const setThumbValue = (newValue: number) => {
|
|
172
|
+
const min = minValue();
|
|
173
|
+
const max = maxValue();
|
|
174
|
+
const stepValue = step();
|
|
175
|
+
const clamped = Math.max(min, Math.min(max, newValue));
|
|
176
|
+
const precision = `${stepValue}`.split(".")[1]?.length ?? 0;
|
|
177
|
+
const rounded = Number(
|
|
178
|
+
(Math.round((clamped - min) / stepValue) * stepValue + min).toFixed(precision),
|
|
179
|
+
);
|
|
180
|
+
const newColor = value().withChannelValue(channel(), rounded);
|
|
181
|
+
updateValue(newColor);
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
// Set thumb from percent
|
|
185
|
+
const setThumbPercent = (percent: number) => {
|
|
186
|
+
const min = minValue();
|
|
187
|
+
const max = maxValue();
|
|
188
|
+
const val = min + (max - min) * percent;
|
|
189
|
+
setThumbValue(val);
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
// Increment
|
|
193
|
+
const incrementThumb = (stepSize?: number) => {
|
|
194
|
+
const s = stepSize ?? step();
|
|
195
|
+
setThumbValue(getThumbValue() + s);
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
// Decrement
|
|
199
|
+
const decrementThumb = (stepSize?: number) => {
|
|
200
|
+
const s = stepSize ?? step();
|
|
201
|
+
setThumbValue(getThumbValue() - s);
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
// Set dragging
|
|
205
|
+
const setDraggingState = (dragging: boolean) => {
|
|
206
|
+
const wasDragging = isDragging();
|
|
207
|
+
setIsDragging(dragging);
|
|
208
|
+
|
|
209
|
+
// Call onChangeEnd when dragging ends
|
|
210
|
+
if (wasDragging && !dragging) {
|
|
211
|
+
getOptions().onChangeEnd?.(value());
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
// Get display color (alpha = 1)
|
|
216
|
+
const getDisplayColor = () => {
|
|
217
|
+
const v = value();
|
|
218
|
+
if (channel() === "hue") {
|
|
219
|
+
return normalizeColor(`hsl(${v.getChannelValue("hue")}, 100%, 50%)`);
|
|
220
|
+
}
|
|
221
|
+
return v.withChannelValue("alpha", 1);
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
// Get formatted value label
|
|
225
|
+
const getThumbValueLabel = () => {
|
|
226
|
+
const v = value();
|
|
227
|
+
const ch = channel();
|
|
228
|
+
const loc = locale();
|
|
229
|
+
return v.formatChannelValue(ch, loc);
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
return {
|
|
233
|
+
get value() {
|
|
234
|
+
return value();
|
|
235
|
+
},
|
|
236
|
+
get isDragging() {
|
|
237
|
+
return isDragging();
|
|
238
|
+
},
|
|
239
|
+
get channel() {
|
|
240
|
+
return channel();
|
|
241
|
+
},
|
|
242
|
+
get orientation() {
|
|
243
|
+
return orientation();
|
|
244
|
+
},
|
|
245
|
+
get step() {
|
|
246
|
+
return step();
|
|
247
|
+
},
|
|
248
|
+
get pageSize() {
|
|
249
|
+
return pageSize();
|
|
250
|
+
},
|
|
251
|
+
get minValue() {
|
|
252
|
+
return minValue();
|
|
253
|
+
},
|
|
254
|
+
get maxValue() {
|
|
255
|
+
return maxValue();
|
|
256
|
+
},
|
|
257
|
+
get isDisabled() {
|
|
258
|
+
return isDisabled();
|
|
259
|
+
},
|
|
260
|
+
getThumbValue,
|
|
261
|
+
getThumbMinValue,
|
|
262
|
+
getThumbMaxValue,
|
|
263
|
+
getThumbPercent,
|
|
264
|
+
setThumbValue,
|
|
265
|
+
setThumbPercent,
|
|
266
|
+
incrementThumb,
|
|
267
|
+
decrementThumb,
|
|
268
|
+
setDragging: setDraggingState,
|
|
269
|
+
getDisplayColor,
|
|
270
|
+
getThumbValueLabel,
|
|
271
|
+
};
|
|
272
|
+
}
|