@lumx/react 3.9.2-alpha.9 → 3.9.3

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
@@ -389,6 +389,11 @@ const DOCUMENT = typeof document !== 'undefined' ? document : undefined;
389
389
  */
390
390
  const IS_BROWSER = typeof navigator !== 'undefined' && !navigator.userAgent.includes('jsdom');
391
391
 
392
+ /**
393
+ * Visually hidden a11y utility class name
394
+ */
395
+ const VISUALLY_HIDDEN = 'visually-hidden';
396
+
392
397
  const _excluded$1s = ["prefix"];
393
398
 
394
399
  /**
@@ -2353,37 +2358,49 @@ const DatePickerControlled = /*#__PURE__*/forwardRef((props, ref) => {
2353
2358
  const localeObj = parseLocale(locale);
2354
2359
  return getMonthCalendar(localeObj, selectedMonth, minDate, maxDate);
2355
2360
  }, [locale, minDate, maxDate, selectedMonth]);
2356
- const selectedYear = selectedMonth.toLocaleDateString(locale, {
2361
+ const selectedYear = selectedMonth.getFullYear();
2362
+ const formattedYear = selectedMonth.toLocaleDateString(locale, {
2357
2363
  year: 'numeric'
2358
2364
  }).slice(0, 4);
2359
- const [textFieldYearValue, setTextFieldYearValue] = React__default.useState(selectedYear);
2360
- const isYearValid = Number(textFieldYearValue) > 0 && Number(textFieldYearValue) <= 9999;
2365
+ const [currentYear, setCurrentYear] = React__default.useState(String(selectedYear));
2361
2366
 
2362
2367
  // 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
- }
2368
+ const updateMonthOffset = React__default.useCallback(newYearValue => {
2369
+ const yearNumber = Number(newYearValue);
2370
+ if (yearNumber < 0 && yearNumber >= 9999) {
2371
+ return;
2370
2372
  }
2371
- }, [isYearValid, selectedMonth, textFieldYearValue, onMonthChange]);
2373
+ const previousYearNumber = selectedMonth.getFullYear();
2374
+ const offset = (yearNumber - previousYearNumber) * 12;
2375
+ onMonthChange === null || onMonthChange === void 0 ? void 0 : onMonthChange(addMonthResetDay(selectedMonth, offset));
2376
+ }, [selectedMonth, onMonthChange]);
2377
+ const onYearChange = React__default.useCallback((newYearValue, _, event) => {
2378
+ var _event$nativeEvent;
2379
+ setCurrentYear(newYearValue);
2380
+
2381
+ // Detect if change is coming from the spin up/down arrows
2382
+ const inputType = event === null || event === void 0 ? void 0 : (_event$nativeEvent = event.nativeEvent) === null || _event$nativeEvent === void 0 ? void 0 : _event$nativeEvent.inputType;
2383
+ if (
2384
+ // Chrome/Safari
2385
+ !inputType ||
2386
+ // Firefox
2387
+ inputType === 'insertReplacementText') {
2388
+ updateMonthOffset(newYearValue);
2389
+ }
2390
+ }, [updateMonthOffset]);
2391
+ const updateYear = React__default.useCallback(() => {
2392
+ updateMonthOffset(currentYear);
2393
+ }, [updateMonthOffset, currentYear]);
2394
+ const updateYearOnEnterPressed = React__default.useMemo(() => onEnterPressed(updateYear), [updateYear]);
2372
2395
  const monthYear = selectedMonth.toLocaleDateString(locale, {
2373
2396
  year: 'numeric',
2374
2397
  month: 'long'
2375
2398
  });
2376
2399
 
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
2400
+ // Update current year when selected year changes
2381
2401
  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]);
2402
+ setCurrentYear(String(selectedYear));
2403
+ }, [selectedYear]);
2387
2404
  const prevSelectedMonth = usePreviousValue(selectedMonth);
2388
2405
  const monthHasChanged = prevSelectedMonth && !isSameDay(selectedMonth, prevSelectedMonth);
2389
2406
 
@@ -2392,7 +2409,7 @@ const DatePickerControlled = /*#__PURE__*/forwardRef((props, ref) => {
2392
2409
  React__default.useEffect(() => {
2393
2410
  if (monthHasChanged) setLabelAriaLive('polite');
2394
2411
  }, [monthHasChanged]);
2395
- const label = getYearDisplayName(locale);
2412
+ const yearLabel = getYearDisplayName(locale);
2396
2413
  return /*#__PURE__*/React__default.createElement("div", {
2397
2414
  ref: ref,
2398
2415
  className: `${CLASSNAME$17}`
@@ -2410,7 +2427,7 @@ const DatePickerControlled = /*#__PURE__*/forwardRef((props, ref) => {
2410
2427
  })),
2411
2428
  label: /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("span", {
2412
2429
  "aria-live": labelAriaLive,
2413
- className: onMonthChange ? 'visually-hidden' : '',
2430
+ className: onMonthChange ? VISUALLY_HIDDEN : '',
2414
2431
  dir: "auto"
2415
2432
  }, monthYear), onMonthChange && /*#__PURE__*/React__default.createElement(FlexBox, {
2416
2433
  className: `${CLASSNAME$17}__month`,
@@ -2419,15 +2436,15 @@ const DatePickerControlled = /*#__PURE__*/forwardRef((props, ref) => {
2419
2436
  gap: "regular",
2420
2437
  vAlign: "center",
2421
2438
  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,
2439
+ }, (_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, {
2440
+ value: currentYear,
2441
+ "aria-label": yearLabel,
2442
+ onChange: onYearChange,
2426
2443
  type: "number",
2427
2444
  max: 9999,
2428
2445
  min: 0,
2429
- onBlur: updateMonthOffset,
2430
- onKeyPress: handleKeyPress,
2446
+ onBlur: updateYear,
2447
+ onKeyPress: updateYearOnEnterPressed,
2431
2448
  key: "year",
2432
2449
  className: `${CLASSNAME$17}__year`
2433
2450
  }) : /*#__PURE__*/React__default.createElement(Text, {
@@ -2479,7 +2496,7 @@ const DatePickerControlled = /*#__PURE__*/forwardRef((props, ref) => {
2479
2496
  }, /*#__PURE__*/React__default.createElement("span", {
2480
2497
  "aria-hidden": true
2481
2498
  }, formatDayNumber(locale, date)), /*#__PURE__*/React__default.createElement("span", {
2482
- className: "visually-hidden"
2499
+ className: VISUALLY_HIDDEN
2483
2500
  }, date.toLocaleDateString(locale, {
2484
2501
  day: 'numeric',
2485
2502
  month: 'long',
@@ -8344,9 +8361,21 @@ function unref(maybeElement) {
8344
8361
  return maybeElement === null || maybeElement === void 0 ? void 0 : maybeElement.current;
8345
8362
  }
8346
8363
 
8347
- function setTransitionViewName(elementRef, name) {
8348
- const element = unref(elementRef);
8349
- if (element) element.style.viewTransitionName = name;
8364
+ function setupViewTransitionName(elementRef, name) {
8365
+ let originalName = null;
8366
+ return {
8367
+ set() {
8368
+ const element = unref(elementRef);
8369
+ if (!element) return;
8370
+ originalName = element.style.viewTransitionName;
8371
+ element.style.viewTransitionName = name;
8372
+ },
8373
+ unset() {
8374
+ const element = unref(elementRef);
8375
+ if (!element || originalName === null) return;
8376
+ element.style.viewTransitionName = originalName;
8377
+ }
8378
+ };
8350
8379
  }
8351
8380
 
8352
8381
  /**
@@ -8373,21 +8402,18 @@ async function startViewTransition(_ref) {
8373
8402
  return;
8374
8403
  }
8375
8404
 
8376
- // Set transition name on source element
8377
- setTransitionViewName(viewTransitionName.source, viewTransitionName.name);
8405
+ // Setup set/unset transition name on source & target
8406
+ const sourceTransitionName = setupViewTransitionName(viewTransitionName.source, viewTransitionName.name);
8407
+ const targetTransitionName = setupViewTransitionName(viewTransitionName.target, viewTransitionName.name);
8408
+ sourceTransitionName.set();
8378
8409
 
8379
8410
  // Start view transition, apply changes & flush to DOM
8380
8411
  await start(() => {
8381
- // Un-set transition name on source element
8382
- setTransitionViewName(viewTransitionName.source, null);
8412
+ sourceTransitionName.unset();
8383
8413
  flushSync(changes);
8384
-
8385
- // Set transition name on target element
8386
- setTransitionViewName(viewTransitionName.target, viewTransitionName.name);
8414
+ targetTransitionName.set();
8387
8415
  }).updateCallbackDone;
8388
-
8389
- // Un-set transition name on target element
8390
- setTransitionViewName(viewTransitionName.target, null);
8416
+ targetTransitionName.unset();
8391
8417
  }
8392
8418
 
8393
8419
  /** Find image in element including the element */
@@ -8479,9 +8505,9 @@ function useImageLightbox(props) {
8479
8505
  },
8480
8506
  isOpen: true,
8481
8507
  onClose: () => {
8482
- var _prevProps$onClose;
8508
+ var _propsRef$current2, _propsRef$current2$on;
8483
8509
  close();
8484
- prevProps === null || prevProps === void 0 ? void 0 : (_prevProps$onClose = prevProps.onClose) === null || _prevProps$onClose === void 0 ? void 0 : _prevProps$onClose.call(prevProps);
8510
+ (_propsRef$current2 = propsRef.current) === null || _propsRef$current2 === void 0 ? void 0 : (_propsRef$current2$on = _propsRef$current2.onClose) === null || _propsRef$current2$on === void 0 ? void 0 : _propsRef$current2$on.call(_propsRef$current2);
8485
8511
  },
8486
8512
  images,
8487
8513
  activeImageIndex: activeImageIndex || 0
@@ -8552,7 +8578,10 @@ const Inner = /*#__PURE__*/forwardRef((props, ref) => {
8552
8578
  onClose: onClose,
8553
8579
  closeButtonProps: closeButtonProps,
8554
8580
  focusElement: currentPaginationItemRef
8555
- }, forwardedProps), /*#__PURE__*/React__default.createElement(ClickAwayProvider, {
8581
+ }, forwardedProps, {
8582
+ // Disable the close on click away as we want a custom one here
8583
+ preventAutoClose: true
8584
+ }), /*#__PURE__*/React__default.createElement(ClickAwayProvider, {
8556
8585
  childrenRefs: clickAwayChildrenRefs,
8557
8586
  callback: onClickAway
8558
8587
  }, /*#__PURE__*/React__default.createElement(ImageSlideshow, {
@@ -14183,6 +14212,7 @@ const Tooltip = /*#__PURE__*/forwardRef((props, ref) => {
14183
14212
  } = useTooltipOpen(delay, anchorElement);
14184
14213
  const isOpen = (isActivated || forceOpen) && !!label;
14185
14214
  const isMounted = !!label && (isOpen || closeMode === 'hide');
14215
+ const isHidden = !isOpen && closeMode === 'hide';
14186
14216
  const wrappedChildren = useInjectTooltipRef({
14187
14217
  children,
14188
14218
  setAnchorElement,
@@ -14206,9 +14236,8 @@ const Tooltip = /*#__PURE__*/forwardRef((props, ref) => {
14206
14236
  "aria-label": label || '',
14207
14237
  className: classnames(className, handleBasicClasses({
14208
14238
  prefix: CLASSNAME$2,
14209
- position,
14210
- hidden: !isOpen && closeMode === 'hide'
14211
- })),
14239
+ position
14240
+ }), isHidden && VISUALLY_HIDDEN),
14212
14241
  style: _objectSpread2(_objectSpread2({}, styles.popper), {}, {
14213
14242
  zIndex
14214
14243
  })