@octanejs/aria 0.0.46 → 0.0.47
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/README.md +7 -6
- package/UPSTREAM.md +58 -69
- package/package.json +11 -11
- package/src/calendar/useCalendarGrid.tsx +64 -62
- package/src/collections/Document.ts +3 -0
- package/src/color/useColorArea.tsx +95 -69
- package/src/color/useColorWheel.tsx +38 -37
- package/src/combobox/{useComboBox.ts → useComboBox.tsx} +239 -259
- package/src/components/ComboBox.ts +35 -2
- package/src/components/Dialog.ts +12 -1
- package/src/components/DropZone.tsx +3 -2
- package/src/components/FileTrigger.tsx +1 -0
- package/src/components/GridList.ts +11 -2
- package/src/components/ListBox.ts +1 -1
- package/src/components/Menu.ts +1 -0
- package/src/components/Meter.ts +3 -1
- package/src/components/Popover.ts +20 -8
- package/src/components/PreviewTrigger.tsx +101 -0
- package/src/components/ProgressBar.ts +10 -2
- package/src/components/Select.ts +1 -1
- package/src/components/Table.ts +26 -15
- package/src/components/TokenField.tsx +395 -0
- package/src/components/Tooltip.ts +4 -6
- package/src/components/Tree.ts +14 -7
- package/src/components/Virtualizer.tsx +30 -14
- package/src/components/index.ts +22 -0
- package/src/components/utils.ts +1 -1
- package/src/datepicker/useDateField.tsx +2 -11
- package/src/datepicker/useDatePickerGroup.tsx +44 -33
- package/src/datepicker/useDateSegment.tsx +31 -30
- package/src/dialog/useDialog.ts +8 -1
- package/src/dnd/DragManager.tsx +5 -1
- package/src/dnd/useDrag.tsx +2 -1
- package/src/focus/FocusScope.ts +2 -2
- package/src/grid/useGrid.ts +3 -0
- package/src/grid/{useGridCell.ts → useGridCell.tsx} +121 -64
- package/src/grid/utils.ts +1 -0
- package/src/gridlist/{useGridListItem.ts → useGridListItem.tsx} +152 -111
- package/src/index.ts +22 -0
- package/src/interactions/createEventHandler.ts +11 -8
- package/src/interactions/createKeyboardShortcutHandler.tsx +218 -0
- package/src/interactions/textSelection.ts +3 -3
- package/src/interactions/useContextMenu.tsx +125 -0
- package/src/interactions/useFocusVisible.ts +4 -4
- package/src/interactions/useKeyboard.ts +50 -2
- package/src/interactions/useLongPress.ts +33 -22
- package/src/interactions/useMove.ts +6 -6
- package/src/interactions/usePress.ts +8 -0
- package/src/interactions/utils.ts +10 -10
- package/src/intl/combobox/fi-FI.json +2 -2
- package/src/intl/previewtrigger/ar-AE.json +3 -0
- package/src/intl/previewtrigger/bg-BG.json +3 -0
- package/src/intl/previewtrigger/cs-CZ.json +3 -0
- package/src/intl/previewtrigger/da-DK.json +3 -0
- package/src/intl/previewtrigger/de-DE.json +3 -0
- package/src/intl/previewtrigger/el-GR.json +3 -0
- package/src/intl/previewtrigger/en-US.json +3 -0
- package/src/intl/previewtrigger/es-ES.json +3 -0
- package/src/intl/previewtrigger/et-EE.json +3 -0
- package/src/intl/previewtrigger/fi-FI.json +3 -0
- package/src/intl/previewtrigger/fr-FR.json +3 -0
- package/src/intl/previewtrigger/he-IL.json +3 -0
- package/src/intl/previewtrigger/hr-HR.json +3 -0
- package/src/intl/previewtrigger/hu-HU.json +3 -0
- package/src/intl/previewtrigger/index.ts +73 -0
- package/src/intl/previewtrigger/it-IT.json +3 -0
- package/src/intl/previewtrigger/ja-JP.json +3 -0
- package/src/intl/previewtrigger/ko-KR.json +3 -0
- package/src/intl/previewtrigger/lt-LT.json +3 -0
- package/src/intl/previewtrigger/lv-LV.json +3 -0
- package/src/intl/previewtrigger/nb-NO.json +3 -0
- package/src/intl/previewtrigger/nl-NL.json +3 -0
- package/src/intl/previewtrigger/pl-PL.json +3 -0
- package/src/intl/previewtrigger/pt-BR.json +3 -0
- package/src/intl/previewtrigger/pt-PT.json +3 -0
- package/src/intl/previewtrigger/ro-RO.json +3 -0
- package/src/intl/previewtrigger/ru-RU.json +3 -0
- package/src/intl/previewtrigger/sk-SK.json +3 -0
- package/src/intl/previewtrigger/sl-SI.json +3 -0
- package/src/intl/previewtrigger/sr-SP.json +3 -0
- package/src/intl/previewtrigger/sv-SE.json +3 -0
- package/src/intl/previewtrigger/tr-TR.json +3 -0
- package/src/intl/previewtrigger/uk-UA.json +3 -0
- package/src/intl/previewtrigger/zh-CN.json +3 -0
- package/src/intl/previewtrigger/zh-TW.json +3 -0
- package/src/intl/table/ar-AE.json +3 -3
- package/src/intl/table/bg-BG.json +3 -3
- package/src/intl/table/cs-CZ.json +3 -3
- package/src/intl/table/da-DK.json +3 -3
- package/src/intl/table/de-DE.json +3 -3
- package/src/intl/table/el-GR.json +3 -3
- package/src/intl/table/es-ES.json +3 -3
- package/src/intl/table/et-EE.json +3 -3
- package/src/intl/table/fi-FI.json +3 -3
- package/src/intl/table/fr-FR.json +3 -3
- package/src/intl/table/he-IL.json +3 -3
- package/src/intl/table/hr-HR.json +3 -3
- package/src/intl/table/hu-HU.json +3 -3
- package/src/intl/table/it-IT.json +3 -3
- package/src/intl/table/ja-JP.json +3 -3
- package/src/intl/table/ko-KR.json +3 -3
- package/src/intl/table/lt-LT.json +3 -3
- package/src/intl/table/lv-LV.json +3 -3
- package/src/intl/table/nb-NO.json +3 -3
- package/src/intl/table/nl-NL.json +3 -3
- package/src/intl/table/pl-PL.json +3 -3
- package/src/intl/table/pt-BR.json +3 -3
- package/src/intl/table/pt-PT.json +3 -3
- package/src/intl/table/ro-RO.json +3 -3
- package/src/intl/table/ru-RU.json +3 -3
- package/src/intl/table/sk-SK.json +3 -3
- package/src/intl/table/sl-SI.json +3 -3
- package/src/intl/table/sr-SP.json +3 -3
- package/src/intl/table/sv-SE.json +3 -3
- package/src/intl/table/tr-TR.json +3 -3
- package/src/intl/table/uk-UA.json +3 -3
- package/src/intl/table/zh-CN.json +4 -4
- package/src/intl/table/zh-TW.json +3 -3
- package/src/intl/tree/es-ES.json +1 -1
- package/src/link/useLink.ts +2 -0
- package/src/menu/useMenuItem.ts +33 -36
- package/src/menu/useMenuTrigger.tsx +217 -0
- package/src/menu/{useSubmenuTrigger.ts → useSubmenuTrigger.tsx} +112 -152
- package/src/numberfield/{useNumberField.ts → useNumberField.tsx} +185 -239
- package/src/overlays/Overlay.ts +5 -1
- package/src/overlays/ariaHideOutside.ts +6 -8
- package/src/overlays/useCloseOnScroll.ts +7 -5
- package/src/overlays/{useOverlay.ts → useOverlay.tsx} +72 -84
- package/src/overlays/usePopover.ts +10 -5
- package/src/overlays/usePreventScroll.ts +4 -4
- package/src/progress/useProgressBar.ts +2 -1
- package/src/radio/{useRadioGroup.ts → useRadioGroup.tsx} +83 -80
- package/src/searchfield/useSearchField.tsx +147 -0
- package/src/select/useSelect.ts +20 -20
- package/src/selection/useSelectableCollection.tsx +751 -0
- package/src/selection/useSelectableItem.ts +48 -11
- package/src/slider/{useSliderThumb.ts → useSliderThumb.tsx} +116 -159
- package/src/spinbutton/useSpinButton.tsx +330 -0
- package/src/stately/combobox/useComboBoxState.ts +1 -1
- package/src/stately/grid/useGridState.ts +9 -10
- package/src/stately/index.ts +11 -0
- package/src/stately/menu/useMenuTriggerState.ts +1 -1
- package/src/stately/menu/useSubmenuTriggerState.ts +2 -0
- package/src/stately/overlays/useOverlayTriggerState.ts +12 -1
- package/src/stately/radio/useRadioGroupState.ts +5 -1
- package/src/stately/table/TableUtils.ts +15 -1
- package/src/stately/table/useTableState.ts +7 -0
- package/src/stately/tokenfield/TokenFieldValue.tsx +440 -0
- package/src/stately/tokenfield/useTokenFieldState.tsx +57 -0
- package/src/stately/tooltip/useTooltipTriggerState.ts +16 -7
- package/src/stately/virtualizer/Layout.tsx +2 -0
- package/src/stately/virtualizer/ScrollAnchor.tsx +338 -0
- package/src/stately/virtualizer/Virtualizer.tsx +52 -1
- package/src/stately/virtualizer/types.tsx +2 -0
- package/src/table/useTableCell.ts +12 -0
- package/src/table/useTableColumnHeader.ts +8 -1
- package/src/table/useTableColumnResize.tsx +354 -0
- package/src/tag/useTag.ts +22 -15
- package/src/textfield/useTextField.ts +2 -0
- package/src/tokenfield/useToken.tsx +64 -0
- package/src/tokenfield/useTokenField.tsx +849 -0
- package/src/tooltip/usePreviewTrigger.tsx +266 -0
- package/src/tooltip/useSafeArea.tsx +171 -0
- package/src/upstream-exports/react-aria/mergeRefs.tsx +3 -0
- package/src/upstream-exports/react-aria/usePreviewTrigger.tsx +18 -0
- package/src/upstream-exports/react-aria/useTokenField.tsx +22 -0
- package/src/upstream-exports/react-stately/private/collections/getChildNodes.tsx +8 -0
- package/src/upstream-exports/react-stately/private/collections/getItemCount.tsx +2 -0
- package/src/upstream-exports/react-stately/private/grid/GridCollection.tsx +7 -0
- package/src/upstream-exports/react-stately/private/grid/useGridState.tsx +6 -0
- package/src/upstream-exports/react-stately/private/utils/number.tsx +2 -0
- package/src/upstream-exports/react-stately/useComboBoxState.tsx +23 -0
- package/src/upstream-exports/react-stately/useListState.tsx +15 -0
- package/src/upstream-exports/react-stately/useMenuTriggerState.tsx +26 -0
- package/src/upstream-exports/react-stately/useMultipleSelectionState.tsx +21 -0
- package/src/upstream-exports/react-stately/useNumberFieldState.tsx +20 -0
- package/src/upstream-exports/react-stately/useOverlayTriggerState.tsx +20 -0
- package/src/upstream-exports/react-stately/useRadioGroupState.tsx +16 -0
- package/src/upstream-exports/react-stately/useSearchFieldState.tsx +19 -0
- package/src/upstream-exports/react-stately/useSliderState.tsx +20 -0
- package/src/upstream-exports/react-stately/useTableState.tsx +45 -0
- package/src/upstream-exports/react-stately/useTokenFieldState.tsx +25 -0
- package/src/upstream-exports/react-stately/useTooltipTriggerState.tsx +20 -0
- package/src/upstream-exports/react-stately/useTreeState.tsx +14 -0
- package/src/utils/domHelpers.ts +74 -17
- package/src/utils/isVirtualEvent.ts +2 -1
- package/src/utils/openLink.ts +8 -3
- package/src/utils/platform.ts +7 -3
- package/src/utils/scrollIntoView.ts +4 -4
- package/src/utils/shadowdom/DOMFunctions.ts +42 -2
- package/src/utils/useId.ts +11 -2
- package/src/utils/useLoadMoreSentinel.ts +8 -3
- package/src/utils/useViewportSize.ts +3 -3
- package/src/virtualizer/ScrollView.tsx +13 -4
- package/src/virtualizer/VirtualizerItem.tsx +3 -1
- package/src/virtualizer/useVirtualizerItem.tsx +43 -3
- package/src/menu/useMenuTrigger.ts +0 -189
- package/src/searchfield/useSearchField.ts +0 -156
- package/src/selection/useSelectableCollection.ts +0 -750
- package/src/spinbutton/useSpinButton.ts +0 -380
- package/src/table/useTableColumnResize.ts +0 -374
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** @jsxImportSource octane */
|
|
2
|
-
// Ported from adobe/react-spectrum@
|
|
2
|
+
// Ported from adobe/react-spectrum@5ecb3333001313e83898cd07644227897e3bae1f (packages/react-aria/src/color/useColorArea.ts).
|
|
3
3
|
/*
|
|
4
4
|
* Copyright 2020 Adobe. All rights reserved.
|
|
5
5
|
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
@@ -12,13 +12,7 @@
|
|
|
12
12
|
* governing permissions and limitations under the License.
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
import {
|
|
16
|
-
AriaLabelingProps,
|
|
17
|
-
DOMAttributes,
|
|
18
|
-
DOMProps,
|
|
19
|
-
MoveMoveEvent,
|
|
20
|
-
RefObject,
|
|
21
|
-
} from '@react-types/shared';
|
|
15
|
+
import { AriaLabelingProps, DOMAttributes, DOMProps, RefObject } from '@react-types/shared';
|
|
22
16
|
import {
|
|
23
17
|
ColorAreaProps,
|
|
24
18
|
ColorAreaState,
|
|
@@ -28,7 +22,13 @@ import { focusWithoutScrolling } from '../utils/focusWithoutScrolling';
|
|
|
28
22
|
import intlMessages from '../intl/color/index';
|
|
29
23
|
import { isAndroid, isIOS } from '../utils/platform';
|
|
30
24
|
import { mergeProps } from '../utils/mergeProps';
|
|
31
|
-
import React, {
|
|
25
|
+
import React, {
|
|
26
|
+
ChangeEvent,
|
|
27
|
+
InputHTMLAttributes,
|
|
28
|
+
useCallback,
|
|
29
|
+
useRef,
|
|
30
|
+
useState,
|
|
31
|
+
} from '../compat/react';
|
|
32
32
|
import { useColorAreaGradient } from './useColorAreaGradient';
|
|
33
33
|
import { useFocus } from '../interactions/useFocus';
|
|
34
34
|
import { useFocusWithin } from '../interactions/useFocusWithin';
|
|
@@ -80,8 +80,6 @@ export interface AriaColorAreaOptions extends AriaColorAreaProps {
|
|
|
80
80
|
containerRef: RefObject<Element | null>;
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
type NativeInputEvent = Event & { currentTarget: HTMLInputElement };
|
|
84
|
-
|
|
85
83
|
/**
|
|
86
84
|
* Provides the behavior and accessibility implementation for a color area component. Color area
|
|
87
85
|
* allows users to adjust two channels of an RGB, HSL or HSB color value against a two-dimensional
|
|
@@ -117,55 +115,70 @@ export function useColorArea(props: AriaColorAreaOptions, state: ColorAreaState)
|
|
|
117
115
|
useFormReset(inputXRef, state.defaultValue, state.setValue);
|
|
118
116
|
|
|
119
117
|
let [valueChangedViaKeyboard, setValueChangedViaKeyboard] = useState(false);
|
|
120
|
-
let [
|
|
118
|
+
let [valueChangedViaInputChangeEvent, setValueChangedViaInputChangeEvent] = useState(false);
|
|
121
119
|
let { xChannel, yChannel, zChannel } = state.channels;
|
|
122
120
|
let xChannelStep = state.xChannelStep;
|
|
123
121
|
let yChannelStep = state.yChannelStep;
|
|
124
122
|
|
|
125
123
|
let currentPosition = useRef<{ x: number; y: number } | null>(null);
|
|
126
124
|
|
|
125
|
+
let keyboardUpdate = (
|
|
126
|
+
cb: () => void,
|
|
127
|
+
inputRef: RefObject<HTMLInputElement | null>,
|
|
128
|
+
input: 'x' | 'y',
|
|
129
|
+
) => {
|
|
130
|
+
state.setDragging(true);
|
|
131
|
+
setValueChangedViaKeyboard(true);
|
|
132
|
+
cb();
|
|
133
|
+
state.setDragging(false);
|
|
134
|
+
focusInput(inputRef);
|
|
135
|
+
setFocusedInput(input);
|
|
136
|
+
};
|
|
137
|
+
|
|
127
138
|
let { keyboardProps } = useKeyboard({
|
|
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
|
-
|
|
139
|
+
shortcuts: {
|
|
140
|
+
PageUp: () => {
|
|
141
|
+
return keyboardUpdate(
|
|
142
|
+
() => {
|
|
143
|
+
state.incrementY(state.yChannelPageStep);
|
|
144
|
+
},
|
|
145
|
+
inputYRef,
|
|
146
|
+
'y',
|
|
147
|
+
);
|
|
148
|
+
},
|
|
149
|
+
PageDown: () => {
|
|
150
|
+
return keyboardUpdate(
|
|
151
|
+
() => {
|
|
152
|
+
state.decrementY(state.yChannelPageStep);
|
|
153
|
+
},
|
|
154
|
+
inputYRef,
|
|
155
|
+
'y',
|
|
156
|
+
);
|
|
157
|
+
},
|
|
158
|
+
Home: () => {
|
|
159
|
+
return keyboardUpdate(
|
|
160
|
+
() => {
|
|
161
|
+
direction === 'rtl'
|
|
162
|
+
? state.incrementX(state.xChannelPageStep)
|
|
163
|
+
: state.decrementX(state.xChannelPageStep);
|
|
164
|
+
},
|
|
165
|
+
inputXRef,
|
|
166
|
+
'x',
|
|
167
|
+
);
|
|
168
|
+
},
|
|
169
|
+
End: () => {
|
|
170
|
+
return keyboardUpdate(
|
|
171
|
+
() => {
|
|
172
|
+
direction === 'rtl'
|
|
173
|
+
? state.decrementX(state.xChannelPageStep)
|
|
174
|
+
: state.incrementX(state.xChannelPageStep);
|
|
175
|
+
},
|
|
176
|
+
inputXRef,
|
|
177
|
+
'x',
|
|
178
|
+
);
|
|
179
|
+
},
|
|
168
180
|
},
|
|
181
|
+
allowRepeats: true,
|
|
169
182
|
});
|
|
170
183
|
|
|
171
184
|
let moveHandler = {
|
|
@@ -173,7 +186,7 @@ export function useColorArea(props: AriaColorAreaOptions, state: ColorAreaState)
|
|
|
173
186
|
currentPosition.current = null;
|
|
174
187
|
state.setDragging(true);
|
|
175
188
|
},
|
|
176
|
-
onMove({ deltaX, deltaY, pointerType, shiftKey }: MoveMoveEvent) {
|
|
189
|
+
onMove({ deltaX, deltaY, pointerType, shiftKey }: import('@react-types/shared').MoveMoveEvent) {
|
|
177
190
|
let {
|
|
178
191
|
incrementX,
|
|
179
192
|
decrementX,
|
|
@@ -210,6 +223,7 @@ export function useColorArea(props: AriaColorAreaOptions, state: ColorAreaState)
|
|
|
210
223
|
}
|
|
211
224
|
setValueChangedViaKeyboard(valueChanged);
|
|
212
225
|
// set the focused input based on which axis has the greater delta
|
|
226
|
+
// oxlint-disable-next-line react/react-compiler
|
|
213
227
|
focusedInput = valueChanged && Math.abs(deltaY) > Math.abs(deltaX) ? 'y' : 'x';
|
|
214
228
|
setFocusedInput(focusedInput);
|
|
215
229
|
} else {
|
|
@@ -231,7 +245,7 @@ export function useColorArea(props: AriaColorAreaOptions, state: ColorAreaState)
|
|
|
231
245
|
onFocusWithinChange: (focusWithin: boolean) => {
|
|
232
246
|
if (!focusWithin) {
|
|
233
247
|
setValueChangedViaKeyboard(false);
|
|
234
|
-
|
|
248
|
+
setValueChangedViaInputChangeEvent(false);
|
|
235
249
|
}
|
|
236
250
|
},
|
|
237
251
|
});
|
|
@@ -271,8 +285,13 @@ export function useColorArea(props: AriaColorAreaOptions, state: ColorAreaState)
|
|
|
271
285
|
}
|
|
272
286
|
};
|
|
273
287
|
|
|
274
|
-
let onThumbUp = (e:
|
|
275
|
-
let id =
|
|
288
|
+
let onThumbUp = (e: globalThis.PointerEvent | globalThis.TouchEvent | globalThis.MouseEvent) => {
|
|
289
|
+
let id =
|
|
290
|
+
'pointerId' in e
|
|
291
|
+
? e.pointerId
|
|
292
|
+
: 'changedTouches' in e
|
|
293
|
+
? e.changedTouches[0]?.identifier
|
|
294
|
+
: undefined;
|
|
276
295
|
if (id === currentPointer.current) {
|
|
277
296
|
setValueChangedViaKeyboard(false);
|
|
278
297
|
focusInput();
|
|
@@ -327,8 +346,15 @@ export function useColorArea(props: AriaColorAreaOptions, state: ColorAreaState)
|
|
|
327
346
|
}
|
|
328
347
|
};
|
|
329
348
|
|
|
330
|
-
let onColorAreaUp = (
|
|
331
|
-
|
|
349
|
+
let onColorAreaUp = (
|
|
350
|
+
e: globalThis.PointerEvent | globalThis.TouchEvent | globalThis.MouseEvent,
|
|
351
|
+
) => {
|
|
352
|
+
let id =
|
|
353
|
+
'pointerId' in e
|
|
354
|
+
? e.pointerId
|
|
355
|
+
: 'changedTouches' in e
|
|
356
|
+
? e.changedTouches[0]?.identifier
|
|
357
|
+
: undefined;
|
|
332
358
|
if (isOnColorArea.current && id === currentPointer.current) {
|
|
333
359
|
isOnColorArea.current = false;
|
|
334
360
|
setValueChangedViaKeyboard(false);
|
|
@@ -348,6 +374,7 @@ export function useColorArea(props: AriaColorAreaOptions, state: ColorAreaState)
|
|
|
348
374
|
let colorAreaInteractions = isDisabled
|
|
349
375
|
? {}
|
|
350
376
|
: mergeProps(
|
|
377
|
+
// oxlint-disable-next-line react/react-compiler
|
|
351
378
|
{
|
|
352
379
|
...(typeof PointerEvent !== 'undefined'
|
|
353
380
|
? {
|
|
@@ -384,6 +411,7 @@ export function useColorArea(props: AriaColorAreaOptions, state: ColorAreaState)
|
|
|
384
411
|
let thumbInteractions = isDisabled
|
|
385
412
|
? {}
|
|
386
413
|
: mergeProps(
|
|
414
|
+
// oxlint-disable-next-line react/react-compiler
|
|
387
415
|
{
|
|
388
416
|
...(typeof PointerEvent !== 'undefined'
|
|
389
417
|
? {
|
|
@@ -426,13 +454,13 @@ export function useColorArea(props: AriaColorAreaOptions, state: ColorAreaState)
|
|
|
426
454
|
},
|
|
427
455
|
});
|
|
428
456
|
|
|
429
|
-
const onInput = (e:
|
|
430
|
-
const {
|
|
431
|
-
|
|
432
|
-
if (
|
|
433
|
-
state.setXValue(parseFloat(
|
|
434
|
-
} else if (
|
|
435
|
-
state.setYValue(parseFloat(
|
|
457
|
+
const onInput = (e: ChangeEvent<HTMLInputElement>) => {
|
|
458
|
+
const { target } = e;
|
|
459
|
+
setValueChangedViaInputChangeEvent(true);
|
|
460
|
+
if (target === inputXRef.current) {
|
|
461
|
+
state.setXValue(parseFloat(target.value));
|
|
462
|
+
} else if (target === inputYRef.current) {
|
|
463
|
+
state.setYValue(parseFloat(target.value));
|
|
436
464
|
}
|
|
437
465
|
};
|
|
438
466
|
|
|
@@ -441,7 +469,7 @@ export function useColorArea(props: AriaColorAreaOptions, state: ColorAreaState)
|
|
|
441
469
|
let value = state.getDisplayColor();
|
|
442
470
|
const getAriaValueTextForChannel = useCallback(
|
|
443
471
|
(channel: ColorChannel) => {
|
|
444
|
-
const isAfterInput =
|
|
472
|
+
const isAfterInput = valueChangedViaInputChangeEvent || valueChangedViaKeyboard;
|
|
445
473
|
return `${
|
|
446
474
|
isAfterInput
|
|
447
475
|
? stringFormatter.format('colorNameAndValue', {
|
|
@@ -468,7 +496,7 @@ export function useColorArea(props: AriaColorAreaOptions, state: ColorAreaState)
|
|
|
468
496
|
locale,
|
|
469
497
|
value,
|
|
470
498
|
stringFormatter,
|
|
471
|
-
|
|
499
|
+
valueChangedViaInputChangeEvent,
|
|
472
500
|
valueChangedViaKeyboard,
|
|
473
501
|
xChannel,
|
|
474
502
|
yChannel,
|
|
@@ -564,7 +592,6 @@ export function useColorArea(props: AriaColorAreaOptions, state: ColorAreaState)
|
|
|
564
592
|
isMobile || !focusedInput || focusedInput === 'x' || valueChangedViaKeyboard
|
|
565
593
|
? undefined
|
|
566
594
|
: 'true',
|
|
567
|
-
// React's synthetic onChange for range inputs follows the native input event.
|
|
568
595
|
onInput,
|
|
569
596
|
},
|
|
570
597
|
yInputProps: {
|
|
@@ -592,7 +619,6 @@ export function useColorArea(props: AriaColorAreaOptions, state: ColorAreaState)
|
|
|
592
619
|
*/
|
|
593
620
|
'aria-hidden':
|
|
594
621
|
isMobile || focusedInput === 'y' || valueChangedViaKeyboard ? undefined : 'true',
|
|
595
|
-
// React's synthetic onChange for range inputs follows the native input event.
|
|
596
622
|
onInput,
|
|
597
623
|
},
|
|
598
624
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** @jsxImportSource octane */
|
|
2
|
-
// Ported from adobe/react-spectrum@
|
|
2
|
+
// Ported from adobe/react-spectrum@5ecb3333001313e83898cd07644227897e3bae1f (packages/react-aria/src/color/useColorWheel.ts).
|
|
3
3
|
/*
|
|
4
4
|
* Copyright 2020 Adobe. All rights reserved.
|
|
5
5
|
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
@@ -17,7 +17,6 @@ import {
|
|
|
17
17
|
DOMAttributes,
|
|
18
18
|
DOMProps,
|
|
19
19
|
InputDOMProps,
|
|
20
|
-
MoveMoveEvent,
|
|
21
20
|
RefObject,
|
|
22
21
|
} from '@react-types/shared';
|
|
23
22
|
import {
|
|
@@ -27,7 +26,7 @@ import {
|
|
|
27
26
|
import { focusWithoutScrolling } from '../utils/focusWithoutScrolling';
|
|
28
27
|
import { getEventTarget } from '../utils/shadowdom/DOMFunctions';
|
|
29
28
|
import { mergeProps } from '../utils/mergeProps';
|
|
30
|
-
import React, { InputHTMLAttributes, useCallback, useRef } from '../compat/react';
|
|
29
|
+
import React, { ChangeEvent, InputHTMLAttributes, useCallback, useRef } from '../compat/react';
|
|
31
30
|
import { useFormReset } from '../utils/useFormReset';
|
|
32
31
|
import { useGlobalListeners } from '../utils/useGlobalListeners';
|
|
33
32
|
import { useKeyboard } from '../interactions/useKeyboard';
|
|
@@ -55,8 +54,6 @@ export interface ColorWheelAria {
|
|
|
55
54
|
inputProps: InputHTMLAttributes<HTMLInputElement>;
|
|
56
55
|
}
|
|
57
56
|
|
|
58
|
-
type NativeInputEvent = Event & { currentTarget: HTMLInputElement };
|
|
59
|
-
|
|
60
57
|
/**
|
|
61
58
|
* Provides the behavior and accessibility implementation for a color wheel component.
|
|
62
59
|
* Color wheels allow users to adjust the hue of an HSL or HSB color value on a circular track.
|
|
@@ -83,28 +80,19 @@ export function useColorWheel(
|
|
|
83
80
|
let currentPosition = useRef<{ x: number; y: number } | null>(null);
|
|
84
81
|
|
|
85
82
|
let { keyboardProps } = useKeyboard({
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
case 'PageUp':
|
|
98
|
-
e.preventDefault();
|
|
99
|
-
state.increment(state.pageStep);
|
|
100
|
-
break;
|
|
101
|
-
case 'PageDown':
|
|
102
|
-
e.preventDefault();
|
|
103
|
-
state.decrement(state.pageStep);
|
|
104
|
-
break;
|
|
105
|
-
}
|
|
106
|
-
state.setDragging(false);
|
|
83
|
+
shortcuts: {
|
|
84
|
+
PageUp: () => {
|
|
85
|
+
state.setDragging(true);
|
|
86
|
+
state.increment(state.pageStep);
|
|
87
|
+
state.setDragging(false);
|
|
88
|
+
},
|
|
89
|
+
PageDown: () => {
|
|
90
|
+
state.setDragging(true);
|
|
91
|
+
state.decrement(state.pageStep);
|
|
92
|
+
state.setDragging(false);
|
|
93
|
+
},
|
|
107
94
|
},
|
|
95
|
+
allowRepeats: true,
|
|
108
96
|
});
|
|
109
97
|
|
|
110
98
|
let moveHandler = {
|
|
@@ -112,7 +100,7 @@ export function useColorWheel(
|
|
|
112
100
|
currentPosition.current = null;
|
|
113
101
|
state.setDragging(true);
|
|
114
102
|
},
|
|
115
|
-
onMove({ deltaX, deltaY, pointerType, shiftKey }: MoveMoveEvent) {
|
|
103
|
+
onMove({ deltaX, deltaY, pointerType, shiftKey }: import('@react-types/shared').MoveMoveEvent) {
|
|
116
104
|
if (currentPosition.current == null) {
|
|
117
105
|
currentPosition.current = state.getThumbPosition(thumbRadius);
|
|
118
106
|
}
|
|
@@ -171,8 +159,13 @@ export function useColorWheel(
|
|
|
171
159
|
}
|
|
172
160
|
};
|
|
173
161
|
|
|
174
|
-
let onThumbUp = (e:
|
|
175
|
-
let id =
|
|
162
|
+
let onThumbUp = (e: globalThis.PointerEvent | globalThis.TouchEvent | globalThis.MouseEvent) => {
|
|
163
|
+
let id =
|
|
164
|
+
'pointerId' in e
|
|
165
|
+
? e.pointerId
|
|
166
|
+
: 'changedTouches' in e
|
|
167
|
+
? e.changedTouches[0]?.identifier
|
|
168
|
+
: undefined;
|
|
176
169
|
if (id === currentPointer.current) {
|
|
177
170
|
focusInput();
|
|
178
171
|
state.setDragging(false);
|
|
@@ -220,8 +213,13 @@ export function useColorWheel(
|
|
|
220
213
|
}
|
|
221
214
|
};
|
|
222
215
|
|
|
223
|
-
let onTrackUp = (e:
|
|
224
|
-
let id =
|
|
216
|
+
let onTrackUp = (e: globalThis.PointerEvent | globalThis.TouchEvent | globalThis.MouseEvent) => {
|
|
217
|
+
let id =
|
|
218
|
+
'pointerId' in e
|
|
219
|
+
? e.pointerId
|
|
220
|
+
: 'changedTouches' in e
|
|
221
|
+
? e.changedTouches[0]?.identifier
|
|
222
|
+
: undefined;
|
|
225
223
|
if (isOnTrack.current && id === currentPointer.current) {
|
|
226
224
|
isOnTrack.current = false;
|
|
227
225
|
currentPointer.current = undefined;
|
|
@@ -240,6 +238,7 @@ export function useColorWheel(
|
|
|
240
238
|
let trackInteractions = isDisabled
|
|
241
239
|
? {}
|
|
242
240
|
: mergeProps(
|
|
241
|
+
// oxlint-disable-next-line react/react-compiler
|
|
243
242
|
{
|
|
244
243
|
...(typeof PointerEvent !== 'undefined'
|
|
245
244
|
? {
|
|
@@ -276,6 +275,7 @@ export function useColorWheel(
|
|
|
276
275
|
let thumbInteractions = isDisabled
|
|
277
276
|
? {}
|
|
278
277
|
: mergeProps(
|
|
278
|
+
// oxlint-disable-next-line react/react-compiler
|
|
279
279
|
{
|
|
280
280
|
...(typeof PointerEvent !== 'undefined'
|
|
281
281
|
? {
|
|
@@ -320,8 +320,8 @@ export function useColorWheel(
|
|
|
320
320
|
let { minValue, maxValue, step } = state.value.getChannelRange('hue');
|
|
321
321
|
|
|
322
322
|
let forcedColorAdjustNoneStyle = {
|
|
323
|
-
forcedColorAdjust: 'none',
|
|
324
|
-
}
|
|
323
|
+
forcedColorAdjust: 'none' as const,
|
|
324
|
+
};
|
|
325
325
|
|
|
326
326
|
let { visuallyHiddenProps } = useVisuallyHidden({
|
|
327
327
|
style: {
|
|
@@ -383,12 +383,13 @@ export function useColorWheel(
|
|
|
383
383
|
value: `${state.value.getChannelValue('hue')}`,
|
|
384
384
|
name,
|
|
385
385
|
form,
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
state.setHue(parseFloat(e.currentTarget.value));
|
|
386
|
+
onInput: (e: Event) => {
|
|
387
|
+
state.setHue(parseFloat((getEventTarget(e) as HTMLInputElement).value));
|
|
389
388
|
},
|
|
390
389
|
style: visuallyHiddenProps.style,
|
|
391
|
-
'aria-errormessage': (props as
|
|
390
|
+
'aria-errormessage': (props as AriaColorWheelOptions & { 'aria-errormessage'?: string })[
|
|
391
|
+
'aria-errormessage'
|
|
392
|
+
],
|
|
392
393
|
'aria-describedby': props['aria-describedby'],
|
|
393
394
|
'aria-details': props['aria-details'],
|
|
394
395
|
}),
|