@@ -57,7 +57,7 @@ export function useDateSegment(segment: DateSegment, state: DateFieldState, ref:
5757 // The ARIA spec says aria-valuenow is optional if there's no value, but aXe seems to require it.
5858 // This doesn't seem to have any negative effects with real AT since we also use aria-valuetext.
5959 // https://github.com/dequelabs/axe-core/issues/3505
60- value : segment . value ,
60+ value : segment . value ?? undefined ,
6161 textValue,
6262 minValue : segment . minValue ,
6363 maxValue : segment . maxValue ,
@@ -82,15 +82,11 @@ export function useDateSegment(segment: DateSegment, state: DateFieldState, ref:
8282 } ,
8383 onIncrementToMax : ( ) => {
8484 enteredKeys . current = '' ;
85- if ( segment . maxValue !== undefined ) {
86- state . setSegment ( segment . type , segment . maxValue ) ;
87- }
85+ state . incrementToMax ( segment . type ) ;
8886 } ,
8987 onDecrementToMin : ( ) => {
9088 enteredKeys . current = '' ;
91- if ( segment . minValue !== undefined ) {
92- state . setSegment ( segment . type , segment . minValue ) ;
93- }
89+ state . decrementToMin ( segment . type ) ;
9490 }
9591 } ) ;
9692
@@ -110,7 +106,7 @@ export function useDateSegment(segment: DateSegment, state: DateFieldState, ref:
110106 state . setSegment ( segment . type , parsed ) ;
111107 }
112108 enteredKeys . current = newValue ;
113- } else if ( segment . type === 'dayPeriod' ) {
109+ } else if ( segment . type === 'dayPeriod' || segment . type === 'era' ) {
114110 state . clearSegment ( segment . type ) ;
115111 }
116112 } ;
@@ -193,7 +189,7 @@ export function useDateSegment(segment: DateSegment, state: DateFieldState, ref:
193189 if ( startsWith ( am , key ) ) {
194190 state . setSegment ( 'dayPeriod' , 0 ) ;
195191 } else if ( startsWith ( pm , key ) ) {
196- state . setSegment ( 'dayPeriod' , 12 ) ;
192+ state . setSegment ( 'dayPeriod' , 1 ) ;
197193 } else {
198194 break ;
199195 }
@@ -219,43 +215,19 @@ export function useDateSegment(segment: DateSegment, state: DateFieldState, ref:
219215
220216 let numberValue = parser . parse ( newValue ) ;
221217 let segmentValue = numberValue ;
222- let allowsZero = segment . minValue === 0 ;
223- if ( segment . type === 'hour' && state . dateFormatter . resolvedOptions ( ) . hour12 ) {
224- switch ( state . dateFormatter . resolvedOptions ( ) . hourCycle ) {
225- case 'h11' :
226- if ( numberValue > 11 ) {
227- segmentValue = parser . parse ( key ) ;
228- }
229- break ;
230- case 'h12' :
231- allowsZero = false ;
232- if ( numberValue > 12 ) {
233- segmentValue = parser . parse ( key ) ;
234- }
235- break ;
236- }
237-
238- if ( segment . value !== undefined && segment . value >= 12 && numberValue > 1 ) {
239- numberValue += 12 ;
240- }
241- } else if ( segment . maxValue !== undefined && numberValue > segment . maxValue ) {
218+ if ( segment . maxValue !== undefined && numberValue > segment . maxValue ) {
242219 segmentValue = parser . parse ( key ) ;
243220 }
244221
245222 if ( isNaN ( numberValue ) ) {
246223 return ;
247224 }
248225
249- let shouldSetValue = segmentValue !== 0 || allowsZero ;
250- if ( shouldSetValue ) {
251- state . setSegment ( segment . type , segmentValue ) ;
252- }
226+ state . setSegment ( segment . type , segmentValue ) ;
253227
254228 if ( segment . maxValue !== undefined && ( Number ( numberValue + '0' ) > segment . maxValue || newValue . length >= String ( segment . maxValue ) . length ) ) {
255229 enteredKeys . current = '' ;
256- if ( shouldSetValue ) {
257- focusManager . focusNext ( ) ;
258- }
230+ focusManager . focusNext ( ) ;
259231 } else {
260232 enteredKeys . current = newValue ;
261233 }
0 commit comments