@octanejs/aria 0.0.45 → 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.
Files changed (201) hide show
  1. package/README.md +7 -6
  2. package/UPSTREAM.md +58 -69
  3. package/package.json +12 -12
  4. package/src/calendar/useCalendarGrid.tsx +64 -62
  5. package/src/collections/Document.ts +3 -0
  6. package/src/color/useColorArea.tsx +95 -69
  7. package/src/color/useColorWheel.tsx +38 -37
  8. package/src/combobox/{useComboBox.ts → useComboBox.tsx} +239 -259
  9. package/src/components/ComboBox.ts +35 -2
  10. package/src/components/Dialog.ts +12 -1
  11. package/src/components/DropZone.tsx +3 -2
  12. package/src/components/FileTrigger.tsx +1 -0
  13. package/src/components/GridList.ts +11 -2
  14. package/src/components/ListBox.ts +1 -1
  15. package/src/components/Menu.ts +1 -0
  16. package/src/components/Meter.ts +3 -1
  17. package/src/components/Popover.ts +20 -8
  18. package/src/components/PreviewTrigger.tsx +101 -0
  19. package/src/components/ProgressBar.ts +10 -2
  20. package/src/components/Select.ts +1 -1
  21. package/src/components/Table.ts +26 -15
  22. package/src/components/TokenField.tsx +395 -0
  23. package/src/components/Tooltip.ts +4 -6
  24. package/src/components/Tree.ts +14 -7
  25. package/src/components/Virtualizer.tsx +30 -14
  26. package/src/components/index.ts +22 -0
  27. package/src/components/utils.ts +1 -1
  28. package/src/datepicker/useDateField.tsx +2 -11
  29. package/src/datepicker/useDatePickerGroup.tsx +44 -33
  30. package/src/datepicker/useDateSegment.tsx +31 -30
  31. package/src/dialog/useDialog.ts +8 -1
  32. package/src/dnd/DragManager.tsx +5 -1
  33. package/src/dnd/useDrag.tsx +2 -1
  34. package/src/focus/FocusScope.ts +2 -2
  35. package/src/grid/useGrid.ts +3 -0
  36. package/src/grid/{useGridCell.ts → useGridCell.tsx} +121 -64
  37. package/src/grid/utils.ts +1 -0
  38. package/src/gridlist/{useGridListItem.ts → useGridListItem.tsx} +152 -111
  39. package/src/index.ts +22 -0
  40. package/src/interactions/createEventHandler.ts +11 -8
  41. package/src/interactions/createKeyboardShortcutHandler.tsx +218 -0
  42. package/src/interactions/textSelection.ts +3 -3
  43. package/src/interactions/useContextMenu.tsx +125 -0
  44. package/src/interactions/useFocusVisible.ts +4 -4
  45. package/src/interactions/useKeyboard.ts +50 -2
  46. package/src/interactions/useLongPress.ts +33 -22
  47. package/src/interactions/useMove.ts +6 -6
  48. package/src/interactions/usePress.ts +8 -0
  49. package/src/interactions/utils.ts +10 -10
  50. package/src/intl/combobox/fi-FI.json +2 -2
  51. package/src/intl/previewtrigger/ar-AE.json +3 -0
  52. package/src/intl/previewtrigger/bg-BG.json +3 -0
  53. package/src/intl/previewtrigger/cs-CZ.json +3 -0
  54. package/src/intl/previewtrigger/da-DK.json +3 -0
  55. package/src/intl/previewtrigger/de-DE.json +3 -0
  56. package/src/intl/previewtrigger/el-GR.json +3 -0
  57. package/src/intl/previewtrigger/en-US.json +3 -0
  58. package/src/intl/previewtrigger/es-ES.json +3 -0
  59. package/src/intl/previewtrigger/et-EE.json +3 -0
  60. package/src/intl/previewtrigger/fi-FI.json +3 -0
  61. package/src/intl/previewtrigger/fr-FR.json +3 -0
  62. package/src/intl/previewtrigger/he-IL.json +3 -0
  63. package/src/intl/previewtrigger/hr-HR.json +3 -0
  64. package/src/intl/previewtrigger/hu-HU.json +3 -0
  65. package/src/intl/previewtrigger/index.ts +73 -0
  66. package/src/intl/previewtrigger/it-IT.json +3 -0
  67. package/src/intl/previewtrigger/ja-JP.json +3 -0
  68. package/src/intl/previewtrigger/ko-KR.json +3 -0
  69. package/src/intl/previewtrigger/lt-LT.json +3 -0
  70. package/src/intl/previewtrigger/lv-LV.json +3 -0
  71. package/src/intl/previewtrigger/nb-NO.json +3 -0
  72. package/src/intl/previewtrigger/nl-NL.json +3 -0
  73. package/src/intl/previewtrigger/pl-PL.json +3 -0
  74. package/src/intl/previewtrigger/pt-BR.json +3 -0
  75. package/src/intl/previewtrigger/pt-PT.json +3 -0
  76. package/src/intl/previewtrigger/ro-RO.json +3 -0
  77. package/src/intl/previewtrigger/ru-RU.json +3 -0
  78. package/src/intl/previewtrigger/sk-SK.json +3 -0
  79. package/src/intl/previewtrigger/sl-SI.json +3 -0
  80. package/src/intl/previewtrigger/sr-SP.json +3 -0
  81. package/src/intl/previewtrigger/sv-SE.json +3 -0
  82. package/src/intl/previewtrigger/tr-TR.json +3 -0
  83. package/src/intl/previewtrigger/uk-UA.json +3 -0
  84. package/src/intl/previewtrigger/zh-CN.json +3 -0
  85. package/src/intl/previewtrigger/zh-TW.json +3 -0
  86. package/src/intl/table/ar-AE.json +3 -3
  87. package/src/intl/table/bg-BG.json +3 -3
  88. package/src/intl/table/cs-CZ.json +3 -3
  89. package/src/intl/table/da-DK.json +3 -3
  90. package/src/intl/table/de-DE.json +3 -3
  91. package/src/intl/table/el-GR.json +3 -3
  92. package/src/intl/table/es-ES.json +3 -3
  93. package/src/intl/table/et-EE.json +3 -3
  94. package/src/intl/table/fi-FI.json +3 -3
  95. package/src/intl/table/fr-FR.json +3 -3
  96. package/src/intl/table/he-IL.json +3 -3
  97. package/src/intl/table/hr-HR.json +3 -3
  98. package/src/intl/table/hu-HU.json +3 -3
  99. package/src/intl/table/it-IT.json +3 -3
  100. package/src/intl/table/ja-JP.json +3 -3
  101. package/src/intl/table/ko-KR.json +3 -3
  102. package/src/intl/table/lt-LT.json +3 -3
  103. package/src/intl/table/lv-LV.json +3 -3
  104. package/src/intl/table/nb-NO.json +3 -3
  105. package/src/intl/table/nl-NL.json +3 -3
  106. package/src/intl/table/pl-PL.json +3 -3
  107. package/src/intl/table/pt-BR.json +3 -3
  108. package/src/intl/table/pt-PT.json +3 -3
  109. package/src/intl/table/ro-RO.json +3 -3
  110. package/src/intl/table/ru-RU.json +3 -3
  111. package/src/intl/table/sk-SK.json +3 -3
  112. package/src/intl/table/sl-SI.json +3 -3
  113. package/src/intl/table/sr-SP.json +3 -3
  114. package/src/intl/table/sv-SE.json +3 -3
  115. package/src/intl/table/tr-TR.json +3 -3
  116. package/src/intl/table/uk-UA.json +3 -3
  117. package/src/intl/table/zh-CN.json +4 -4
  118. package/src/intl/table/zh-TW.json +3 -3
  119. package/src/intl/tree/es-ES.json +1 -1
  120. package/src/link/useLink.ts +2 -0
  121. package/src/menu/useMenuItem.ts +33 -36
  122. package/src/menu/useMenuTrigger.tsx +217 -0
  123. package/src/menu/{useSubmenuTrigger.ts → useSubmenuTrigger.tsx} +112 -152
  124. package/src/numberfield/{useNumberField.ts → useNumberField.tsx} +185 -239
  125. package/src/overlays/Overlay.ts +5 -1
  126. package/src/overlays/ariaHideOutside.ts +6 -8
  127. package/src/overlays/useCloseOnScroll.ts +7 -5
  128. package/src/overlays/{useOverlay.ts → useOverlay.tsx} +72 -84
  129. package/src/overlays/usePopover.ts +10 -5
  130. package/src/overlays/usePreventScroll.ts +4 -4
  131. package/src/progress/useProgressBar.ts +2 -1
  132. package/src/radio/{useRadioGroup.ts → useRadioGroup.tsx} +83 -80
  133. package/src/searchfield/useSearchField.tsx +147 -0
  134. package/src/select/useSelect.ts +20 -20
  135. package/src/selection/useSelectableCollection.tsx +751 -0
  136. package/src/selection/useSelectableItem.ts +48 -11
  137. package/src/slider/{useSliderThumb.ts → useSliderThumb.tsx} +116 -159
  138. package/src/spinbutton/useSpinButton.tsx +330 -0
  139. package/src/stately/combobox/useComboBoxState.ts +1 -1
  140. package/src/stately/grid/useGridState.ts +9 -10
  141. package/src/stately/index.ts +11 -0
  142. package/src/stately/menu/useMenuTriggerState.ts +1 -1
  143. package/src/stately/menu/useSubmenuTriggerState.ts +2 -0
  144. package/src/stately/overlays/useOverlayTriggerState.ts +12 -1
  145. package/src/stately/radio/useRadioGroupState.ts +5 -1
  146. package/src/stately/table/TableUtils.ts +15 -1
  147. package/src/stately/table/useTableState.ts +7 -0
  148. package/src/stately/tokenfield/TokenFieldValue.tsx +440 -0
  149. package/src/stately/tokenfield/useTokenFieldState.tsx +57 -0
  150. package/src/stately/tooltip/useTooltipTriggerState.ts +16 -7
  151. package/src/stately/virtualizer/Layout.tsx +2 -0
  152. package/src/stately/virtualizer/ScrollAnchor.tsx +338 -0
  153. package/src/stately/virtualizer/Virtualizer.tsx +52 -1
  154. package/src/stately/virtualizer/types.tsx +2 -0
  155. package/src/table/useTableCell.ts +12 -0
  156. package/src/table/useTableColumnHeader.ts +8 -1
  157. package/src/table/useTableColumnResize.tsx +354 -0
  158. package/src/tag/useTag.ts +22 -15
  159. package/src/textfield/useTextField.ts +2 -0
  160. package/src/tokenfield/useToken.tsx +64 -0
  161. package/src/tokenfield/useTokenField.tsx +849 -0
  162. package/src/tooltip/usePreviewTrigger.tsx +266 -0
  163. package/src/tooltip/useSafeArea.tsx +171 -0
  164. package/src/upstream-exports/react-aria/mergeRefs.tsx +3 -0
  165. package/src/upstream-exports/react-aria/usePreviewTrigger.tsx +18 -0
  166. package/src/upstream-exports/react-aria/useTokenField.tsx +22 -0
  167. package/src/upstream-exports/react-stately/private/collections/getChildNodes.tsx +8 -0
  168. package/src/upstream-exports/react-stately/private/collections/getItemCount.tsx +2 -0
  169. package/src/upstream-exports/react-stately/private/grid/GridCollection.tsx +7 -0
  170. package/src/upstream-exports/react-stately/private/grid/useGridState.tsx +6 -0
  171. package/src/upstream-exports/react-stately/private/utils/number.tsx +2 -0
  172. package/src/upstream-exports/react-stately/useComboBoxState.tsx +23 -0
  173. package/src/upstream-exports/react-stately/useListState.tsx +15 -0
  174. package/src/upstream-exports/react-stately/useMenuTriggerState.tsx +26 -0
  175. package/src/upstream-exports/react-stately/useMultipleSelectionState.tsx +21 -0
  176. package/src/upstream-exports/react-stately/useNumberFieldState.tsx +20 -0
  177. package/src/upstream-exports/react-stately/useOverlayTriggerState.tsx +20 -0
  178. package/src/upstream-exports/react-stately/useRadioGroupState.tsx +16 -0
  179. package/src/upstream-exports/react-stately/useSearchFieldState.tsx +19 -0
  180. package/src/upstream-exports/react-stately/useSliderState.tsx +20 -0
  181. package/src/upstream-exports/react-stately/useTableState.tsx +45 -0
  182. package/src/upstream-exports/react-stately/useTokenFieldState.tsx +25 -0
  183. package/src/upstream-exports/react-stately/useTooltipTriggerState.tsx +20 -0
  184. package/src/upstream-exports/react-stately/useTreeState.tsx +14 -0
  185. package/src/utils/domHelpers.ts +74 -17
  186. package/src/utils/isVirtualEvent.ts +2 -1
  187. package/src/utils/openLink.ts +8 -3
  188. package/src/utils/platform.ts +7 -3
  189. package/src/utils/scrollIntoView.ts +4 -4
  190. package/src/utils/shadowdom/DOMFunctions.ts +42 -2
  191. package/src/utils/useId.ts +11 -2
  192. package/src/utils/useLoadMoreSentinel.ts +8 -3
  193. package/src/utils/useViewportSize.ts +3 -3
  194. package/src/virtualizer/ScrollView.tsx +13 -4
  195. package/src/virtualizer/VirtualizerItem.tsx +3 -1
  196. package/src/virtualizer/useVirtualizerItem.tsx +43 -3
  197. package/src/menu/useMenuTrigger.ts +0 -189
  198. package/src/searchfield/useSearchField.ts +0 -156
  199. package/src/selection/useSelectableCollection.ts +0 -750
  200. package/src/spinbutton/useSpinButton.ts +0 -380
  201. package/src/table/useTableColumnResize.ts +0 -374
@@ -1,5 +1,5 @@
1
1
  /** @jsxImportSource octane */
2
- // Ported from adobe/react-spectrum@1c84a49a1faf50b571c84e00bcf9c60b22ddd03e (packages/react-aria/src/color/useColorArea.ts).
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, { InputHTMLAttributes, useCallback, useRef, useState } from '../compat/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 [valueChangedViaInputEvent, setValueChangedViaInputEvent] = useState(false);
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
- onKeyDown(e) {
129
- // these are the cases that useMove doesn't handle
130
- if (!/^(PageUp|PageDown|Home|End)$/.test(e.key)) {
131
- e.continuePropagation();
132
- return;
133
- }
134
- // same handling as useMove, don't need to stop propagation, useKeyboard will do that for us
135
- e.preventDefault();
136
- // remember to set this and unset it so that onChangeEnd is fired
137
- state.setDragging(true);
138
- setValueChangedViaKeyboard(true);
139
- let dir: 'x' | 'y' | undefined;
140
- switch (e.key) {
141
- case 'PageUp':
142
- state.incrementY(state.yChannelPageStep);
143
- dir = 'y';
144
- break;
145
- case 'PageDown':
146
- state.decrementY(state.yChannelPageStep);
147
- dir = 'y';
148
- break;
149
- case 'Home':
150
- direction === 'rtl'
151
- ? state.incrementX(state.xChannelPageStep)
152
- : state.decrementX(state.xChannelPageStep);
153
- dir = 'x';
154
- break;
155
- case 'End':
156
- direction === 'rtl'
157
- ? state.decrementX(state.xChannelPageStep)
158
- : state.incrementX(state.xChannelPageStep);
159
- dir = 'x';
160
- break;
161
- }
162
- state.setDragging(false);
163
- if (dir) {
164
- let input = dir === 'x' ? inputXRef : inputYRef;
165
- focusInput(input);
166
- setFocusedInput(dir);
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
- setValueChangedViaInputEvent(false);
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: any) => {
275
- let id = e.pointerId ?? e.changedTouches?.[0].identifier;
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 = (e: any) => {
331
- let id = e.pointerId ?? e.changedTouches?.[0].identifier;
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: NativeInputEvent) => {
430
- const { currentTarget } = e;
431
- setValueChangedViaInputEvent(true);
432
- if (currentTarget === inputXRef.current) {
433
- state.setXValue(parseFloat(currentTarget.value));
434
- } else if (currentTarget === inputYRef.current) {
435
- state.setYValue(parseFloat(currentTarget.value));
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 = valueChangedViaInputEvent || valueChangedViaKeyboard;
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
- valueChangedViaInputEvent,
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@1c84a49a1faf50b571c84e00bcf9c60b22ddd03e (packages/react-aria/src/color/useColorWheel.ts).
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
- onKeyDown(e) {
87
- // these are the cases that useMove doesn't handle
88
- if (!/^(PageUp|PageDown)$/.test(e.key)) {
89
- e.continuePropagation();
90
- return;
91
- }
92
- // same handling as useMove, don't need to stop propagation, useKeyboard will do that for us
93
- e.preventDefault();
94
- // remember to set this and unset it so that onChangeEnd is fired
95
- state.setDragging(true);
96
- switch (e.key) {
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: any) => {
175
- let id = e.pointerId ?? e.changedTouches?.[0].identifier;
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: any) => {
224
- let id = e.pointerId ?? e.changedTouches?.[0].identifier;
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
- } as const;
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
- // React's synthetic onChange for range inputs follows the native input event.
387
- onInput: (e: NativeInputEvent) => {
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 any)['aria-errormessage'],
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
  }),