@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 +2 -0
- package/index.js +77 -48
- package/index.js.map +1 -1
- package/package.json +4 -3
- package/src/components/date-picker/DatePickerControlled.test.tsx +3 -2
- package/src/components/date-picker/DatePickerControlled.tsx +55 -32
- package/src/components/image-lightbox/ImageLightbox.tsx +2 -0
- package/src/components/image-lightbox/useImageLightbox.tsx +1 -1
- package/src/components/text-field/TextField.tsx +3 -1
- package/src/components/tooltip/Tooltip.test.tsx +4 -3
- package/src/components/tooltip/Tooltip.tsx +3 -2
- package/src/constants.ts +5 -0
- package/src/utils/DOM/startViewTransition.ts +23 -11
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.
|
|
2361
|
+
const selectedYear = selectedMonth.getFullYear();
|
|
2362
|
+
const formattedYear = selectedMonth.toLocaleDateString(locale, {
|
|
2357
2363
|
year: 'numeric'
|
|
2358
2364
|
}).slice(0, 4);
|
|
2359
|
-
const [
|
|
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
|
-
|
|
2365
|
-
|
|
2366
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
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
|
-
|
|
2383
|
-
|
|
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
|
|
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 ?
|
|
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(`(.*)(${
|
|
2423
|
-
value:
|
|
2424
|
-
"aria-label":
|
|
2425
|
-
onChange:
|
|
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:
|
|
2430
|
-
onKeyPress:
|
|
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:
|
|
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
|
|
8348
|
-
|
|
8349
|
-
|
|
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
|
-
//
|
|
8377
|
-
|
|
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
|
-
|
|
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
|
|
8508
|
+
var _propsRef$current2, _propsRef$current2$on;
|
|
8483
8509
|
close();
|
|
8484
|
-
|
|
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
|
|
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
|
-
|
|
14211
|
-
})),
|
|
14239
|
+
position
|
|
14240
|
+
}), isHidden && VISUALLY_HIDDEN),
|
|
14212
14241
|
style: _objectSpread2(_objectSpread2({}, styles.popper), {}, {
|
|
14213
14242
|
zIndex
|
|
14214
14243
|
})
|