@lumx/react 3.9.2-alpha.9 → 3.9.2

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/index.d.ts CHANGED
@@ -2820,6 +2820,8 @@ interface TextFieldProps extends GenericProps, HasTheme {
2820
2820
  placeholder?: string;
2821
2821
  /** Reference to the wrapper. */
2822
2822
  textFieldRef?: Ref<HTMLDivElement>;
2823
+ /** Native input type (only when `multiline` is disabled). */
2824
+ type?: React.ComponentProps<'input'>['type'];
2823
2825
  /** Value. */
2824
2826
  value?: string;
2825
2827
  /** On blur callback. */
package/index.js CHANGED
@@ -2353,37 +2353,49 @@ const DatePickerControlled = /*#__PURE__*/forwardRef((props, ref) => {
2353
2353
  const localeObj = parseLocale(locale);
2354
2354
  return getMonthCalendar(localeObj, selectedMonth, minDate, maxDate);
2355
2355
  }, [locale, minDate, maxDate, selectedMonth]);
2356
- const selectedYear = selectedMonth.toLocaleDateString(locale, {
2356
+ const selectedYear = selectedMonth.getFullYear();
2357
+ const formattedYear = selectedMonth.toLocaleDateString(locale, {
2357
2358
  year: 'numeric'
2358
2359
  }).slice(0, 4);
2359
- const [textFieldYearValue, setTextFieldYearValue] = React__default.useState(selectedYear);
2360
- const isYearValid = Number(textFieldYearValue) > 0 && Number(textFieldYearValue) <= 9999;
2360
+ const [currentYear, setCurrentYear] = React__default.useState(String(selectedYear));
2361
2361
 
2362
2362
  // Updates month offset when validating year. Adds or removes 12 months per year when updating year value.
2363
- const updateMonthOffset = React__default.useCallback(() => {
2364
- if (isYearValid) {
2365
- const yearNumber = selectedMonth.getFullYear();
2366
- const offset = (Number(textFieldYearValue) - yearNumber) * 12;
2367
- if (onMonthChange) {
2368
- onMonthChange(addMonthResetDay(selectedMonth, offset));
2369
- }
2363
+ const updateMonthOffset = React__default.useCallback(newYearValue => {
2364
+ const yearNumber = Number(newYearValue);
2365
+ if (yearNumber < 0 && yearNumber >= 9999) {
2366
+ return;
2370
2367
  }
2371
- }, [isYearValid, selectedMonth, textFieldYearValue, onMonthChange]);
2368
+ const previousYearNumber = selectedMonth.getFullYear();
2369
+ const offset = (yearNumber - previousYearNumber) * 12;
2370
+ onMonthChange === null || onMonthChange === void 0 ? void 0 : onMonthChange(addMonthResetDay(selectedMonth, offset));
2371
+ }, [selectedMonth, onMonthChange]);
2372
+ const onYearChange = React__default.useCallback((newYearValue, _, event) => {
2373
+ var _event$nativeEvent;
2374
+ setCurrentYear(newYearValue);
2375
+
2376
+ // Detect if change is coming from the spin up/down arrows
2377
+ const inputType = event === null || event === void 0 ? void 0 : (_event$nativeEvent = event.nativeEvent) === null || _event$nativeEvent === void 0 ? void 0 : _event$nativeEvent.inputType;
2378
+ if (
2379
+ // Chrome/Safari
2380
+ !inputType ||
2381
+ // Firefox
2382
+ inputType === 'insertReplacementText') {
2383
+ updateMonthOffset(newYearValue);
2384
+ }
2385
+ }, [updateMonthOffset]);
2386
+ const updateYear = React__default.useCallback(() => {
2387
+ updateMonthOffset(currentYear);
2388
+ }, [updateMonthOffset, currentYear]);
2389
+ const updateYearOnEnterPressed = React__default.useMemo(() => onEnterPressed(updateYear), [updateYear]);
2372
2390
  const monthYear = selectedMonth.toLocaleDateString(locale, {
2373
2391
  year: 'numeric',
2374
2392
  month: 'long'
2375
2393
  });
2376
2394
 
2377
- // Year can only be validated by pressing Enter key or on Blur. The below handles the press Enter key case
2378
- const handleKeyPress = React__default.useMemo(() => onEnterPressed(updateMonthOffset), [updateMonthOffset]);
2379
-
2380
- // Required to update year in the TextField when the user changes year by using prev next month arrows
2395
+ // Update current year when selected year changes
2381
2396
  React__default.useEffect(() => {
2382
- if (Number(textFieldYearValue) !== selectedMonth.getFullYear()) {
2383
- setTextFieldYearValue(selectedMonth.getFullYear().toString());
2384
- }
2385
- // eslint-disable-next-line react-hooks/exhaustive-deps
2386
- }, [selectedMonth]);
2397
+ setCurrentYear(String(selectedYear));
2398
+ }, [selectedYear]);
2387
2399
  const prevSelectedMonth = usePreviousValue(selectedMonth);
2388
2400
  const monthHasChanged = prevSelectedMonth && !isSameDay(selectedMonth, prevSelectedMonth);
2389
2401
 
@@ -2392,7 +2404,7 @@ const DatePickerControlled = /*#__PURE__*/forwardRef((props, ref) => {
2392
2404
  React__default.useEffect(() => {
2393
2405
  if (monthHasChanged) setLabelAriaLive('polite');
2394
2406
  }, [monthHasChanged]);
2395
- const label = getYearDisplayName(locale);
2407
+ const yearLabel = getYearDisplayName(locale);
2396
2408
  return /*#__PURE__*/React__default.createElement("div", {
2397
2409
  ref: ref,
2398
2410
  className: `${CLASSNAME$17}`
@@ -2419,15 +2431,15 @@ const DatePickerControlled = /*#__PURE__*/forwardRef((props, ref) => {
2419
2431
  gap: "regular",
2420
2432
  vAlign: "center",
2421
2433
  dir: "auto"
2422
- }, (_RegExp$exec = RegExp(`(.*)(${selectedYear})(.*)`).exec(monthYear)) === null || _RegExp$exec === void 0 ? void 0 : _RegExp$exec.slice(1).filter(part => part !== '').map(part => part === selectedYear ? /*#__PURE__*/React__default.createElement(TextField, {
2423
- value: textFieldYearValue,
2424
- "aria-label": label,
2425
- onChange: setTextFieldYearValue,
2434
+ }, (_RegExp$exec = RegExp(`(.*)(${formattedYear})(.*)`).exec(monthYear)) === null || _RegExp$exec === void 0 ? void 0 : _RegExp$exec.slice(1).filter(part => part !== '').map(part => part === formattedYear ? /*#__PURE__*/React__default.createElement(TextField, {
2435
+ value: currentYear,
2436
+ "aria-label": yearLabel,
2437
+ onChange: onYearChange,
2426
2438
  type: "number",
2427
2439
  max: 9999,
2428
2440
  min: 0,
2429
- onBlur: updateMonthOffset,
2430
- onKeyPress: handleKeyPress,
2441
+ onBlur: updateYear,
2442
+ onKeyPress: updateYearOnEnterPressed,
2431
2443
  key: "year",
2432
2444
  className: `${CLASSNAME$17}__year`
2433
2445
  }) : /*#__PURE__*/React__default.createElement(Text, {