@proyecto-viviana/solidaria 0.2.4 → 0.2.8
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/dist/actiongroup/createActionGroup.d.ts +29 -0
- package/dist/actiongroup/createActionGroup.d.ts.map +1 -0
- package/dist/actiongroup/index.d.ts +2 -0
- package/dist/actiongroup/index.d.ts.map +1 -0
- package/dist/autocomplete/createAutocomplete.d.ts +6 -2
- package/dist/autocomplete/createAutocomplete.d.ts.map +1 -1
- package/dist/breadcrumbs/createBreadcrumbs.d.ts +2 -0
- package/dist/breadcrumbs/createBreadcrumbs.d.ts.map +1 -1
- package/dist/button/createToggleButtonGroup.d.ts +32 -0
- package/dist/button/createToggleButtonGroup.d.ts.map +1 -0
- package/dist/button/index.d.ts +2 -0
- package/dist/button/index.d.ts.map +1 -1
- package/dist/calendar/createCalendarCell.d.ts +2 -0
- package/dist/calendar/createCalendarCell.d.ts.map +1 -1
- package/dist/calendar/createCalendarGrid.d.ts.map +1 -1
- package/dist/calendar/createRangeCalendarCell.d.ts +3 -1
- package/dist/calendar/createRangeCalendarCell.d.ts.map +1 -1
- package/dist/checkbox/createCheckboxGroup.d.ts +5 -1
- package/dist/checkbox/createCheckboxGroup.d.ts.map +1 -1
- package/dist/collections/index.d.ts +56 -0
- package/dist/collections/index.d.ts.map +1 -0
- package/dist/color/createColorArea.d.ts.map +1 -1
- package/dist/color/createColorSlider.d.ts.map +1 -1
- package/dist/color/createColorWheel.d.ts.map +1 -1
- package/dist/combobox/createComboBox.d.ts +6 -0
- package/dist/combobox/createComboBox.d.ts.map +1 -1
- package/dist/datepicker/createDatePicker.d.ts +6 -0
- package/dist/datepicker/createDatePicker.d.ts.map +1 -1
- package/dist/datepicker/createDateRangePicker.d.ts +40 -0
- package/dist/datepicker/createDateRangePicker.d.ts.map +1 -0
- package/dist/datepicker/createDateSegment.d.ts +1 -1
- package/dist/datepicker/createDateSegment.d.ts.map +1 -1
- package/dist/datepicker/createTimeSegment.d.ts +29 -0
- package/dist/datepicker/createTimeSegment.d.ts.map +1 -0
- package/dist/datepicker/index.d.ts +2 -0
- package/dist/datepicker/index.d.ts.map +1 -1
- package/dist/disclosure/createDisclosureGroup.d.ts +2 -1
- package/dist/disclosure/createDisclosureGroup.d.ts.map +1 -1
- package/dist/dnd/createDrag.d.ts.map +1 -1
- package/dist/dnd/createDraggableCollection.d.ts +4 -0
- package/dist/dnd/createDraggableCollection.d.ts.map +1 -1
- package/dist/dnd/createDraggableItem.d.ts.map +1 -1
- package/dist/dnd/createDrop.d.ts.map +1 -1
- package/dist/dnd/createDroppableCollection.d.ts +32 -1
- package/dist/dnd/createDroppableCollection.d.ts.map +1 -1
- package/dist/dnd/createDroppableItem.d.ts.map +1 -1
- package/dist/dnd/index.d.ts +1 -1
- package/dist/dnd/index.d.ts.map +1 -1
- package/dist/grid/createGrid.d.ts.map +1 -1
- package/dist/gridlist/createGridList.d.ts.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4659 -3452
- package/dist/index.js.map +1 -7
- package/dist/index.ssr.js +4659 -3452
- package/dist/index.ssr.js.map +1 -7
- package/dist/interactions/createFocus.d.ts.map +1 -1
- package/dist/interactions/createFocusWithin.d.ts.map +1 -1
- package/dist/link/createLink.d.ts +10 -0
- package/dist/link/createLink.d.ts.map +1 -1
- package/dist/listbox/createListBox.d.ts +1 -0
- package/dist/listbox/createListBox.d.ts.map +1 -1
- package/dist/listbox/createOption.d.ts.map +1 -1
- package/dist/menu/createMenu.d.ts +1 -0
- package/dist/menu/createMenu.d.ts.map +1 -1
- package/dist/meter/createMeter.d.ts.map +1 -1
- package/dist/numberfield/createNumberField.d.ts +18 -0
- package/dist/numberfield/createNumberField.d.ts.map +1 -1
- package/dist/overlays/createModal.d.ts +16 -0
- package/dist/overlays/createModal.d.ts.map +1 -1
- package/dist/overlays/createOverlay.d.ts.map +1 -1
- package/dist/overlays/index.d.ts +1 -1
- package/dist/overlays/index.d.ts.map +1 -1
- package/dist/popover/createOverlayPosition.d.ts.map +1 -1
- package/dist/popover/createPopover.d.ts.map +1 -1
- package/dist/progress/createProgressBar.d.ts.map +1 -1
- package/dist/radio/createRadioGroup.d.ts +2 -2
- package/dist/radio/createRadioGroup.d.ts.map +1 -1
- package/dist/searchfield/createSearchField.d.ts.map +1 -1
- package/dist/select/createHiddenSelect.d.ts.map +1 -1
- package/dist/select/createSelect.d.ts.map +1 -1
- package/dist/slider/createSlider.d.ts.map +1 -1
- package/dist/table/createTable.d.ts.map +1 -1
- package/dist/tabs/createTabs.d.ts +1 -1
- package/dist/tabs/createTabs.d.ts.map +1 -1
- package/dist/tag/createTag.d.ts.map +1 -1
- package/dist/tag/createTagGroup.d.ts.map +1 -1
- package/dist/toast/createToast.d.ts +4 -0
- package/dist/toast/createToast.d.ts.map +1 -1
- package/dist/toast/createToastRegion.d.ts.map +1 -1
- package/dist/toolbar/createToolbar.d.ts.map +1 -1
- package/dist/tooltip/createTooltipTrigger.d.ts.map +1 -1
- package/dist/tree/createTree.d.ts.map +1 -1
- package/dist/tree/createTreeItem.d.ts.map +1 -1
- package/dist/tree/types.d.ts +4 -0
- package/dist/tree/types.d.ts.map +1 -1
- package/dist/utils/env.d.ts +1 -1
- package/dist/utils/env.d.ts.map +1 -1
- package/dist/utils/platform.d.ts.map +1 -1
- package/dist/visually-hidden/createVisuallyHidden.d.ts.map +1 -1
- package/package.json +8 -6
- package/src/actiongroup/createActionGroup.ts +324 -0
- package/src/actiongroup/index.ts +8 -0
- package/src/autocomplete/createAutocomplete.ts +32 -9
- package/src/breadcrumbs/createBreadcrumbs.ts +10 -15
- package/src/button/createButton.ts +1 -1
- package/src/button/createToggleButtonGroup.ts +128 -0
- package/src/button/index.ts +9 -0
- package/src/calendar/createCalendarCell.ts +6 -4
- package/src/calendar/createCalendarGrid.ts +27 -18
- package/src/calendar/createRangeCalendarCell.ts +26 -9
- package/src/checkbox/createCheckboxGroup.ts +21 -4
- package/src/collections/index.ts +242 -0
- package/src/color/createColorArea.ts +380 -314
- package/src/color/createColorField.ts +137 -137
- package/src/color/createColorSlider.ts +286 -197
- package/src/color/createColorSwatch.ts +40 -40
- package/src/color/createColorWheel.ts +218 -208
- package/src/color/index.ts +24 -24
- package/src/color/types.ts +116 -116
- package/src/combobox/createComboBox.ts +670 -647
- package/src/combobox/index.ts +6 -6
- package/src/datepicker/createDatePicker.ts +54 -16
- package/src/datepicker/createDateRangePicker.ts +246 -0
- package/src/datepicker/createDateSegment.ts +185 -31
- package/src/datepicker/createTimeSegment.ts +370 -0
- package/src/datepicker/index.ts +14 -0
- package/src/dialog/createDialog.ts +120 -120
- package/src/dialog/index.ts +2 -2
- package/src/dialog/types.ts +19 -19
- package/src/disclosure/createDisclosureGroup.ts +5 -2
- package/src/dnd/createDrag.ts +224 -209
- package/src/dnd/createDraggableCollection.ts +96 -63
- package/src/dnd/createDraggableItem.ts +259 -243
- package/src/dnd/createDrop.ts +322 -321
- package/src/dnd/createDroppableCollection.ts +682 -293
- package/src/dnd/createDroppableItem.ts +215 -213
- package/src/dnd/index.ts +55 -47
- package/src/dnd/types.ts +89 -89
- package/src/dnd/utils.ts +294 -294
- package/src/focus/createAutoFocus.ts +321 -321
- package/src/focus/createFocusRestore.ts +313 -313
- package/src/focus/createVirtualFocus.ts +396 -396
- package/src/form/createFormValidation.ts +224 -224
- package/src/form/index.ts +11 -11
- package/src/grid/createGrid.ts +3 -1
- package/src/gridlist/createGridList.ts +16 -0
- package/src/gridlist/createGridListItem.ts +1 -1
- package/src/i18n/NumberFormatter.ts +266 -266
- package/src/i18n/createCollator.ts +79 -79
- package/src/i18n/createDateFormatter.ts +83 -83
- package/src/i18n/createFilter.ts +131 -131
- package/src/i18n/createNumberFormatter.ts +52 -52
- package/src/i18n/index.ts +40 -40
- package/src/i18n/locale.tsx +188 -188
- package/src/i18n/utils.ts +99 -99
- package/src/index.ts +51 -0
- package/src/interactions/createFocus.ts +6 -5
- package/src/interactions/createFocusWithin.ts +6 -5
- package/src/interactions/createLongPress.ts +174 -174
- package/src/interactions/createMove.ts +289 -289
- package/src/interactions/createPress.ts +5 -5
- package/src/landmark/createLandmark.ts +377 -377
- package/src/landmark/index.ts +8 -8
- package/src/link/createLink.ts +23 -8
- package/src/listbox/createListBox.ts +308 -269
- package/src/listbox/createOption.ts +162 -151
- package/src/listbox/index.ts +12 -12
- package/src/live-announcer/announce.ts +322 -322
- package/src/live-announcer/index.ts +9 -9
- package/src/menu/createMenu.ts +405 -396
- package/src/menu/createMenuItem.ts +149 -149
- package/src/menu/createMenuTrigger.ts +88 -88
- package/src/menu/index.ts +18 -18
- package/src/meter/createMeter.ts +1 -6
- package/src/numberfield/createNumberField.ts +311 -268
- package/src/numberfield/index.ts +5 -5
- package/src/overlays/ariaHideOutside.ts +219 -219
- package/src/overlays/createInteractOutside.ts +149 -149
- package/src/overlays/createModal.tsx +238 -202
- package/src/overlays/createOverlay.ts +165 -155
- package/src/overlays/createOverlayTrigger.ts +85 -85
- package/src/overlays/createPreventScroll.ts +266 -266
- package/src/overlays/index.ts +48 -44
- package/src/popover/calculatePosition.ts +6 -6
- package/src/popover/createOverlayPosition.ts +7 -4
- package/src/popover/createPopover.ts +21 -7
- package/src/progress/createProgressBar.ts +6 -1
- package/src/radio/createRadioGroup.ts +88 -14
- package/src/searchfield/createSearchField.ts +241 -186
- package/src/searchfield/index.ts +2 -2
- package/src/select/createHiddenSelect.tsx +263 -236
- package/src/select/createSelect.ts +373 -395
- package/src/select/index.ts +14 -14
- package/src/slider/createSlider.ts +364 -349
- package/src/slider/index.ts +2 -2
- package/src/ssr/index.tsx +370 -370
- package/src/table/createTable.ts +3 -1
- package/src/table/createTableColumnHeader.ts +1 -1
- package/src/table/createTableRow.ts +1 -1
- package/src/tabs/createTabs.ts +80 -51
- package/src/tag/createTag.ts +135 -6
- package/src/tag/createTagGroup.ts +7 -2
- package/src/toast/createToast.ts +8 -2
- package/src/toast/createToastRegion.ts +0 -1
- package/src/toolbar/createToolbar.ts +75 -1
- package/src/tooltip/createTooltip.ts +79 -79
- package/src/tooltip/createTooltipTrigger.ts +226 -222
- package/src/tooltip/index.ts +6 -6
- package/src/tree/createTree.ts +261 -246
- package/src/tree/createTreeItem.ts +282 -233
- package/src/tree/createTreeSelectionCheckbox.ts +68 -68
- package/src/tree/index.ts +16 -16
- package/src/tree/types.ts +91 -87
- package/src/utils/env.ts +55 -54
- package/src/utils/platform.ts +16 -6
- package/src/visually-hidden/createVisuallyHidden.ts +139 -124
- package/src/visually-hidden/index.ts +6 -6
|
@@ -1,208 +1,218 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* createColorWheel hook.
|
|
3
|
-
*
|
|
4
|
-
* Provides ARIA attributes and keyboard/pointer handling for a circular hue selector.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { createMemo, type Accessor } from 'solid-js';
|
|
8
|
-
import type { ColorWheelState } from '@proyecto-viviana/solid-stately';
|
|
9
|
-
import { createId } from '../ssr';
|
|
10
|
-
import type { AriaColorWheelOptions, ColorWheelAria } from './types';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Creates ARIA props for a color wheel.
|
|
14
|
-
*/
|
|
15
|
-
export function createColorWheel(
|
|
16
|
-
props: Accessor<AriaColorWheelOptions>,
|
|
17
|
-
state: Accessor<ColorWheelState>,
|
|
18
|
-
wheelRef: Accessor<HTMLDivElement | null>
|
|
19
|
-
): ColorWheelAria {
|
|
20
|
-
const getProps = () => props();
|
|
21
|
-
const getState = () => state();
|
|
22
|
-
|
|
23
|
-
// Generate IDs
|
|
24
|
-
const inputId = createId();
|
|
25
|
-
|
|
26
|
-
// Calculate angle from pointer position
|
|
27
|
-
const getAngleFromEvent = (e: MouseEvent | PointerEvent) => {
|
|
28
|
-
const wheel = wheelRef();
|
|
29
|
-
if (!wheel) return null;
|
|
30
|
-
|
|
31
|
-
const rect = wheel.getBoundingClientRect();
|
|
32
|
-
const centerX = rect.left + rect.width / 2;
|
|
33
|
-
const centerY = rect.top + rect.height / 2;
|
|
34
|
-
|
|
35
|
-
const dx = e.clientX - centerX;
|
|
36
|
-
const dy = e.clientY - centerY;
|
|
37
|
-
|
|
38
|
-
return Math.atan2(-dy, dx); // Negative dy because Y is inverted in screen coords
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
// Handle pointer down
|
|
42
|
-
const onPointerDown = (e: PointerEvent) => {
|
|
43
|
-
if (getProps().isDisabled || getState().isDisabled) return;
|
|
44
|
-
|
|
45
|
-
const angle = getAngleFromEvent(e);
|
|
46
|
-
if (angle === null) return;
|
|
47
|
-
|
|
48
|
-
getState().setHueFromAngle(angle);
|
|
49
|
-
getState().setDragging(true);
|
|
50
|
-
|
|
51
|
-
(e.target as HTMLElement).setPointerCapture?.(e.pointerId);
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
// Handle pointer move
|
|
55
|
-
const onPointerMove = (e: PointerEvent) => {
|
|
56
|
-
if (!getState().isDragging) return;
|
|
57
|
-
|
|
58
|
-
const angle = getAngleFromEvent(e);
|
|
59
|
-
if (angle === null) return;
|
|
60
|
-
|
|
61
|
-
getState().setHueFromAngle(angle);
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
// Handle pointer up
|
|
65
|
-
const onPointerUp = (e: PointerEvent) => {
|
|
66
|
-
if (getState().isDragging) {
|
|
67
|
-
getState().setDragging(false);
|
|
68
|
-
(e.target as HTMLElement).releasePointerCapture?.(e.pointerId);
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
// Handle keyboard
|
|
73
|
-
const onKeyDown = (e: KeyboardEvent) => {
|
|
74
|
-
if (getProps().isDisabled || getState().isDisabled) return;
|
|
75
|
-
|
|
76
|
-
const s = getState();
|
|
77
|
-
let handled = true;
|
|
78
|
-
|
|
79
|
-
switch (e.key) {
|
|
80
|
-
case 'ArrowRight':
|
|
81
|
-
case 'ArrowUp':
|
|
82
|
-
s.increment();
|
|
83
|
-
break;
|
|
84
|
-
case 'ArrowLeft':
|
|
85
|
-
case 'ArrowDown':
|
|
86
|
-
s.decrement();
|
|
87
|
-
break;
|
|
88
|
-
case 'PageUp':
|
|
89
|
-
s.increment(s.pageStep);
|
|
90
|
-
break;
|
|
91
|
-
case 'PageDown':
|
|
92
|
-
s.decrement(s.pageStep);
|
|
93
|
-
break;
|
|
94
|
-
case 'Home':
|
|
95
|
-
s.setHue(0);
|
|
96
|
-
break;
|
|
97
|
-
case 'End':
|
|
98
|
-
s.setHue(359);
|
|
99
|
-
break;
|
|
100
|
-
default:
|
|
101
|
-
handled = false;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
if (handled) {
|
|
105
|
-
e.preventDefault();
|
|
106
|
-
e.stopPropagation();
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
//
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
'
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
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
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
1
|
+
/**
|
|
2
|
+
* createColorWheel hook.
|
|
3
|
+
*
|
|
4
|
+
* Provides ARIA attributes and keyboard/pointer handling for a circular hue selector.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { createMemo, type Accessor } from 'solid-js';
|
|
8
|
+
import type { ColorWheelState } from '@proyecto-viviana/solid-stately';
|
|
9
|
+
import { createId } from '../ssr';
|
|
10
|
+
import type { AriaColorWheelOptions, ColorWheelAria } from './types';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Creates ARIA props for a color wheel.
|
|
14
|
+
*/
|
|
15
|
+
export function createColorWheel(
|
|
16
|
+
props: Accessor<AriaColorWheelOptions>,
|
|
17
|
+
state: Accessor<ColorWheelState>,
|
|
18
|
+
wheelRef: Accessor<HTMLDivElement | null>
|
|
19
|
+
): ColorWheelAria {
|
|
20
|
+
const getProps = () => props();
|
|
21
|
+
const getState = () => state();
|
|
22
|
+
|
|
23
|
+
// Generate IDs
|
|
24
|
+
const inputId = createId();
|
|
25
|
+
|
|
26
|
+
// Calculate angle from pointer position
|
|
27
|
+
const getAngleFromEvent = (e: MouseEvent | PointerEvent) => {
|
|
28
|
+
const wheel = wheelRef();
|
|
29
|
+
if (!wheel) return null;
|
|
30
|
+
|
|
31
|
+
const rect = wheel.getBoundingClientRect();
|
|
32
|
+
const centerX = rect.left + rect.width / 2;
|
|
33
|
+
const centerY = rect.top + rect.height / 2;
|
|
34
|
+
|
|
35
|
+
const dx = e.clientX - centerX;
|
|
36
|
+
const dy = e.clientY - centerY;
|
|
37
|
+
|
|
38
|
+
return Math.atan2(-dy, dx); // Negative dy because Y is inverted in screen coords
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
// Handle pointer down
|
|
42
|
+
const onPointerDown = (e: PointerEvent) => {
|
|
43
|
+
if (getProps().isDisabled || getState().isDisabled) return;
|
|
44
|
+
|
|
45
|
+
const angle = getAngleFromEvent(e);
|
|
46
|
+
if (angle === null) return;
|
|
47
|
+
|
|
48
|
+
getState().setHueFromAngle(angle);
|
|
49
|
+
getState().setDragging(true);
|
|
50
|
+
|
|
51
|
+
(e.target as HTMLElement).setPointerCapture?.(e.pointerId);
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
// Handle pointer move
|
|
55
|
+
const onPointerMove = (e: PointerEvent) => {
|
|
56
|
+
if (!getState().isDragging) return;
|
|
57
|
+
|
|
58
|
+
const angle = getAngleFromEvent(e);
|
|
59
|
+
if (angle === null) return;
|
|
60
|
+
|
|
61
|
+
getState().setHueFromAngle(angle);
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
// Handle pointer up
|
|
65
|
+
const onPointerUp = (e: PointerEvent) => {
|
|
66
|
+
if (getState().isDragging) {
|
|
67
|
+
getState().setDragging(false);
|
|
68
|
+
(e.target as HTMLElement).releasePointerCapture?.(e.pointerId);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
// Handle keyboard
|
|
73
|
+
const onKeyDown = (e: KeyboardEvent) => {
|
|
74
|
+
if (getProps().isDisabled || getState().isDisabled) return;
|
|
75
|
+
|
|
76
|
+
const s = getState();
|
|
77
|
+
let handled = true;
|
|
78
|
+
|
|
79
|
+
switch (e.key) {
|
|
80
|
+
case 'ArrowRight':
|
|
81
|
+
case 'ArrowUp':
|
|
82
|
+
s.increment();
|
|
83
|
+
break;
|
|
84
|
+
case 'ArrowLeft':
|
|
85
|
+
case 'ArrowDown':
|
|
86
|
+
s.decrement();
|
|
87
|
+
break;
|
|
88
|
+
case 'PageUp':
|
|
89
|
+
s.increment(s.pageStep);
|
|
90
|
+
break;
|
|
91
|
+
case 'PageDown':
|
|
92
|
+
s.decrement(s.pageStep);
|
|
93
|
+
break;
|
|
94
|
+
case 'Home':
|
|
95
|
+
s.setHue(0);
|
|
96
|
+
break;
|
|
97
|
+
case 'End':
|
|
98
|
+
s.setHue(359);
|
|
99
|
+
break;
|
|
100
|
+
default:
|
|
101
|
+
handled = false;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (handled) {
|
|
105
|
+
e.preventDefault();
|
|
106
|
+
e.stopPropagation();
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
// Hue spectrum conic gradient
|
|
111
|
+
const conicGradient = `conic-gradient(from 90deg, hsl(0, 100%, 50%), hsl(30, 100%, 50%), hsl(60, 100%, 50%), hsl(90, 100%, 50%), hsl(120, 100%, 50%), hsl(150, 100%, 50%), hsl(180, 100%, 50%), hsl(210, 100%, 50%), hsl(240, 100%, 50%), hsl(270, 100%, 50%), hsl(300, 100%, 50%), hsl(330, 100%, 50%), hsl(360, 100%, 50%))`;
|
|
112
|
+
|
|
113
|
+
// Track props (the wheel container)
|
|
114
|
+
const trackProps = createMemo(() => {
|
|
115
|
+
const s = getState();
|
|
116
|
+
const p = getProps();
|
|
117
|
+
|
|
118
|
+
return {
|
|
119
|
+
role: 'presentation' as const,
|
|
120
|
+
onPointerDown,
|
|
121
|
+
onPointerMove,
|
|
122
|
+
onPointerUp,
|
|
123
|
+
style: {
|
|
124
|
+
position: 'relative' as const,
|
|
125
|
+
'touch-action': 'none',
|
|
126
|
+
'border-radius': '50%',
|
|
127
|
+
background: conicGradient,
|
|
128
|
+
// Use radial-gradient mask to cut out center hole (creates ring shape)
|
|
129
|
+
// 35% inner radius leaves a nice thick ring
|
|
130
|
+
'-webkit-mask-image': 'radial-gradient(circle, transparent 35%, black 36%)',
|
|
131
|
+
'mask-image': 'radial-gradient(circle, transparent 35%, black 36%)',
|
|
132
|
+
'forced-color-adjust': 'none' as const,
|
|
133
|
+
},
|
|
134
|
+
'data-disabled': s.isDisabled || p.isDisabled || undefined,
|
|
135
|
+
};
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
// Thumb props
|
|
139
|
+
const thumbProps = createMemo(() => {
|
|
140
|
+
const s = getState();
|
|
141
|
+
const p = getProps();
|
|
142
|
+
const angle = s.getThumbAngle();
|
|
143
|
+
|
|
144
|
+
// Calculate thumb position on the wheel edge
|
|
145
|
+
// Assumes wheel is circular and thumb is at the outer edge
|
|
146
|
+
// Angle 0 = right (3 o'clock)
|
|
147
|
+
const thumbX = Math.cos(angle);
|
|
148
|
+
const thumbY = -Math.sin(angle); // Negative because CSS Y is inverted
|
|
149
|
+
|
|
150
|
+
return {
|
|
151
|
+
role: 'presentation' as const,
|
|
152
|
+
style: {
|
|
153
|
+
position: 'absolute' as const,
|
|
154
|
+
// Position relative to center, scaled to radius
|
|
155
|
+
// These will be overridden by the component with actual radius
|
|
156
|
+
left: `calc(50% + ${thumbX * 50}%)`,
|
|
157
|
+
top: `calc(50% + ${thumbY * 50}%)`,
|
|
158
|
+
transform: 'translate(-50%, -50%)',
|
|
159
|
+
'touch-action': 'none',
|
|
160
|
+
},
|
|
161
|
+
'data-dragging': s.isDragging || undefined,
|
|
162
|
+
'data-disabled': s.isDisabled || p.isDisabled || undefined,
|
|
163
|
+
};
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
// Input props (hidden, for accessibility)
|
|
167
|
+
const inputProps = createMemo(() => {
|
|
168
|
+
const s = getState();
|
|
169
|
+
const p = getProps();
|
|
170
|
+
|
|
171
|
+
return {
|
|
172
|
+
type: 'range',
|
|
173
|
+
id: inputId,
|
|
174
|
+
min: 0,
|
|
175
|
+
max: 360,
|
|
176
|
+
step: s.step,
|
|
177
|
+
value: s.getHue(),
|
|
178
|
+
disabled: s.isDisabled || p.isDisabled,
|
|
179
|
+
'aria-label': p['aria-label'] ?? 'Hue',
|
|
180
|
+
'aria-labelledby': p['aria-labelledby'],
|
|
181
|
+
'aria-describedby': p['aria-describedby'],
|
|
182
|
+
'aria-valuetext': `${s.getHue()}°`,
|
|
183
|
+
onKeyDown,
|
|
184
|
+
onChange: (e: Event) => {
|
|
185
|
+
const target = e.target as HTMLInputElement;
|
|
186
|
+
s.setHue(parseFloat(target.value));
|
|
187
|
+
},
|
|
188
|
+
onBlur: () => {
|
|
189
|
+
if (s.isDragging) {
|
|
190
|
+
s.setDragging(false);
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
style: {
|
|
194
|
+
position: 'absolute' as const,
|
|
195
|
+
width: '1px',
|
|
196
|
+
height: '1px',
|
|
197
|
+
padding: '0',
|
|
198
|
+
margin: '-1px',
|
|
199
|
+
overflow: 'hidden',
|
|
200
|
+
clip: 'rect(0, 0, 0, 0)',
|
|
201
|
+
'white-space': 'nowrap',
|
|
202
|
+
border: '0',
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
return {
|
|
208
|
+
get trackProps() {
|
|
209
|
+
return trackProps();
|
|
210
|
+
},
|
|
211
|
+
get thumbProps() {
|
|
212
|
+
return thumbProps();
|
|
213
|
+
},
|
|
214
|
+
get inputProps() {
|
|
215
|
+
return inputProps();
|
|
216
|
+
},
|
|
217
|
+
};
|
|
218
|
+
}
|
package/src/color/index.ts
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Color ARIA hooks exports.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
// Types
|
|
6
|
-
export type {
|
|
7
|
-
AriaColorSliderOptions,
|
|
8
|
-
ColorSliderAria,
|
|
9
|
-
AriaColorAreaOptions,
|
|
10
|
-
ColorAreaAria,
|
|
11
|
-
AriaColorWheelOptions,
|
|
12
|
-
ColorWheelAria,
|
|
13
|
-
AriaColorFieldOptions,
|
|
14
|
-
ColorFieldAria,
|
|
15
|
-
AriaColorSwatchOptions,
|
|
16
|
-
ColorSwatchAria,
|
|
17
|
-
} from './types';
|
|
18
|
-
|
|
19
|
-
// Hooks
|
|
20
|
-
export { createColorSlider } from './createColorSlider';
|
|
21
|
-
export { createColorArea } from './createColorArea';
|
|
22
|
-
export { createColorWheel } from './createColorWheel';
|
|
23
|
-
export { createColorField } from './createColorField';
|
|
24
|
-
export { createColorSwatch } from './createColorSwatch';
|
|
1
|
+
/**
|
|
2
|
+
* Color ARIA hooks exports.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
// Types
|
|
6
|
+
export type {
|
|
7
|
+
AriaColorSliderOptions,
|
|
8
|
+
ColorSliderAria,
|
|
9
|
+
AriaColorAreaOptions,
|
|
10
|
+
ColorAreaAria,
|
|
11
|
+
AriaColorWheelOptions,
|
|
12
|
+
ColorWheelAria,
|
|
13
|
+
AriaColorFieldOptions,
|
|
14
|
+
ColorFieldAria,
|
|
15
|
+
AriaColorSwatchOptions,
|
|
16
|
+
ColorSwatchAria,
|
|
17
|
+
} from './types';
|
|
18
|
+
|
|
19
|
+
// Hooks
|
|
20
|
+
export { createColorSlider } from './createColorSlider';
|
|
21
|
+
export { createColorArea } from './createColorArea';
|
|
22
|
+
export { createColorWheel } from './createColorWheel';
|
|
23
|
+
export { createColorField } from './createColorField';
|
|
24
|
+
export { createColorSwatch } from './createColorSwatch';
|