@servicetitan/anvil2 1.41.0 → 1.42.0
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/CHANGELOG.md +32 -0
- package/dist/{AnvilProvider-Lh8YtV03.js → AnvilProvider-BLYCqIbb.js} +2 -2
- package/dist/{AnvilProvider-Lh8YtV03.js.map → AnvilProvider-BLYCqIbb.js.map} +1 -1
- package/dist/AnvilProvider.js +1 -1
- package/dist/{Avatar-B20IdOEO-Di14brYV.js → Avatar-C7cbRTCt-DCvzmr2C.js} +14 -12
- package/dist/Avatar-C7cbRTCt-DCvzmr2C.js.map +1 -0
- package/dist/{Avatar-B20IdOEO.css → Avatar-C7cbRTCt.css} +34 -19
- package/dist/{Avatar-hNOToS9S.js → Avatar-DREZJN2K.js} +2 -2
- package/dist/Avatar-DREZJN2K.js.map +1 -0
- package/dist/Avatar.js +1 -1
- package/dist/{Breadcrumbs-D_jgwoN3-Dlw-weD8.js → Breadcrumbs-B5bqrZ5D-BqK-Qfh9.js} +3 -3
- package/dist/{Breadcrumbs-D_jgwoN3-Dlw-weD8.js.map → Breadcrumbs-B5bqrZ5D-BqK-Qfh9.js.map} +1 -1
- package/dist/{Breadcrumbs-C_gan90a.js → Breadcrumbs-De8uoLi8.js} +2 -2
- package/dist/{Breadcrumbs-C_gan90a.js.map → Breadcrumbs-De8uoLi8.js.map} +1 -1
- package/dist/Breadcrumbs.js +1 -1
- package/dist/{Calendar-MIwfKzm7.js → Calendar-Bgpz99F2.js} +2 -2
- package/dist/{Calendar-MIwfKzm7.js.map → Calendar-Bgpz99F2.js.map} +1 -1
- package/dist/{Calendar-CNrdcd3f-BAKv-Gz3.js → Calendar-DD5kmVd3-CBGTR11R.js} +4 -4
- package/dist/{Calendar-CNrdcd3f-BAKv-Gz3.js.map → Calendar-DD5kmVd3-CBGTR11R.js.map} +1 -1
- package/dist/Calendar.js +1 -1
- package/dist/{Checkbox-JWDraGFN--7ptfLKN.js → Checkbox-DyHm7Ntt-DYw5QL3l.js} +2 -2
- package/dist/{Checkbox-JWDraGFN--7ptfLKN.js.map → Checkbox-DyHm7Ntt-DYw5QL3l.js.map} +1 -1
- package/dist/{Checkbox-IPM-sdvR.js → Checkbox-zg8LVvB6.js} +2 -2
- package/dist/{Checkbox-IPM-sdvR.js.map → Checkbox-zg8LVvB6.js.map} +1 -1
- package/dist/Checkbox.js +1 -1
- package/dist/Chip-DXQiqF8k.js +34 -0
- package/dist/Chip-DXQiqF8k.js.map +1 -0
- package/dist/{Chip-_daV8CmM-CTke7zH4.js → Chip-MbBEXeAm-DmAcwPRJ.js} +57 -10
- package/dist/Chip-MbBEXeAm-DmAcwPRJ.js.map +1 -0
- package/dist/{Chip-_daV8CmM.css → Chip-MbBEXeAm.css} +68 -18
- package/dist/Chip.js +1 -1
- package/dist/{Combobox-CM8DmNMs.js → Combobox-D2aSaDkz.js} +7 -7
- package/dist/{Combobox-CM8DmNMs.js.map → Combobox-D2aSaDkz.js.map} +1 -1
- package/dist/Combobox.js +1 -1
- package/dist/{DateField-BDJEsVc1.js → DateField-D28_sa7P.js} +6 -6
- package/dist/{DateField-BDJEsVc1.js.map → DateField-D28_sa7P.js.map} +1 -1
- package/dist/DateField.js +1 -1
- package/dist/{DateFieldRange-BTq6MrNu.js → DateFieldRange-CgVqJrVg.js} +2 -2
- package/dist/{DateFieldRange-BTq6MrNu.js.map → DateFieldRange-CgVqJrVg.js.map} +1 -1
- package/dist/DateFieldRange.js +1 -1
- package/dist/{DateFieldSingle-CaeOLrI4.js → DateFieldSingle-CLoWDlPO.js} +2 -2
- package/dist/{DateFieldSingle-CaeOLrI4.js.map → DateFieldSingle-CLoWDlPO.js.map} +1 -1
- package/dist/DateFieldSingle.js +1 -1
- package/dist/{DateFieldYearless-CbFo3oyZ.js → DateFieldYearless-CXlUH0c7.js} +2 -2
- package/dist/{DateFieldYearless-CbFo3oyZ.js.map → DateFieldYearless-CXlUH0c7.js.map} +1 -1
- package/dist/{DateFieldYearless-CJP3H_Dg-BV5wGJp1.js → DateFieldYearless-M5KDI_hn-akXtkIZA.js} +673 -611
- package/dist/{DateFieldYearless-CJP3H_Dg-BV5wGJp1.js.map → DateFieldYearless-M5KDI_hn-akXtkIZA.js.map} +1 -1
- package/dist/DateFieldYearless.js +1 -1
- package/dist/{DaysOfTheWeek-8zaAuw55.js → DaysOfTheWeek-ImBPjEvl.js} +2 -2
- package/dist/{DaysOfTheWeek-8zaAuw55.js.map → DaysOfTheWeek-ImBPjEvl.js.map} +1 -1
- package/dist/DaysOfTheWeek.js +1 -1
- package/dist/{Dialog-DnZE02ob.js → Dialog-BR6f-XRH.js} +3 -3
- package/dist/{Dialog-DnZE02ob.js.map → Dialog-BR6f-XRH.js.map} +1 -1
- package/dist/Dialog.js +1 -1
- package/dist/{Drawer-5kgL0gY9.js → Drawer-0ayAWgAA.js} +2 -2
- package/dist/{Drawer-5kgL0gY9.js.map → Drawer-0ayAWgAA.js.map} +1 -1
- package/dist/Drawer.js +1 -1
- package/dist/{EditCard-C0hD1VPA.js → EditCard-B_n1uFkv.js} +2 -2
- package/dist/{EditCard-C0hD1VPA.js.map → EditCard-B_n1uFkv.js.map} +1 -1
- package/dist/EditCard.js +1 -1
- package/dist/{FieldLabel-D5rNXy6h.js → FieldLabel-DWl5qsRY.js} +2 -2
- package/dist/{FieldLabel-D5rNXy6h.js.map → FieldLabel-DWl5qsRY.js.map} +1 -1
- package/dist/FieldLabel.js +1 -1
- package/dist/{HammerProvider-CYP98rq3-Dd9GVIyP.js → HammerProvider-vt3DkcCZ-06BeBrPu.js} +2 -2
- package/dist/{HammerProvider-CYP98rq3-Dd9GVIyP.js.map → HammerProvider-vt3DkcCZ-06BeBrPu.js.map} +1 -1
- package/dist/{InputMask-BLZh7hka-CTcRCY2k.js → InputMask-CE3pdXwL-B8XVrj36.js} +2 -2
- package/dist/{InputMask-BLZh7hka-CTcRCY2k.js.map → InputMask-CE3pdXwL-B8XVrj36.js.map} +1 -1
- package/dist/{InputMask-B6kMdXCB.js → InputMask-wUro4G2j.js} +2 -2
- package/dist/{InputMask-B6kMdXCB.js.map → InputMask-wUro4G2j.js.map} +1 -1
- package/dist/InputMask.js +1 -1
- package/dist/{ListView-cMMBtp1O.js → ListView-DdHpJHTc.js} +3 -3
- package/dist/{ListView-cMMBtp1O.js.map → ListView-DdHpJHTc.js.map} +1 -1
- package/dist/ListView.js +1 -1
- package/dist/{Listbox-BvJLSAVO-Br5k6fmq.js → Listbox-B-WUuj-_-BWWeWtLW.js} +2 -2
- package/dist/{Listbox-BvJLSAVO-Br5k6fmq.js.map → Listbox-B-WUuj-_-BWWeWtLW.js.map} +1 -1
- package/dist/{Listbox-dVARiucB.js → Listbox-Di6OS1Fk.js} +2 -2
- package/dist/{Listbox-dVARiucB.js.map → Listbox-Di6OS1Fk.js.map} +1 -1
- package/dist/Listbox.js +1 -1
- package/dist/{Menu-Dk3ESnzI.js → Menu-DHCOMJx2.js} +2 -2
- package/dist/{Menu-Dk3ESnzI.js.map → Menu-DHCOMJx2.js.map} +1 -1
- package/dist/{Menu-CAiyc2zk-rxU7H28t.js → Menu-TtVJnSrA-yBYichuJ.js} +6 -9
- package/dist/Menu-TtVJnSrA-yBYichuJ.js.map +1 -0
- package/dist/Menu.js +1 -1
- package/dist/{Page-DWeD3rrr.js → Page-KN0DLtcf.js} +8 -8
- package/dist/{Page-DWeD3rrr.js.map → Page-KN0DLtcf.js.map} +1 -1
- package/dist/Page.js +1 -1
- package/dist/Pagination.js +2 -2
- package/dist/Pagination.js.map +1 -1
- package/dist/{Popover-2O1Q-34V.js → Popover-B1HaUjGI.js} +2 -2
- package/dist/{Popover-2O1Q-34V.js.map → Popover-B1HaUjGI.js.map} +1 -1
- package/dist/{Popover-DvLcjLjG-Yu5STx-v.js → Popover-CU2cGVD8-FWJOuFRj.js} +4 -4
- package/dist/{Popover-DvLcjLjG-Yu5STx-v.js.map → Popover-CU2cGVD8-FWJOuFRj.js.map} +1 -1
- package/dist/Popover.js +1 -1
- package/dist/{ProgressBar-BezETeA3-CeeedJ_w.js → ProgressBar-BRvB-bD4-DppwBrFg.js} +5 -5
- package/dist/{ProgressBar-BezETeA3-CeeedJ_w.js.map → ProgressBar-BRvB-bD4-DppwBrFg.js.map} +1 -1
- package/dist/{ProgressBar-CfstmN5D.js → ProgressBar-lPKNTz6i.js} +2 -2
- package/dist/{ProgressBar-CfstmN5D.js.map → ProgressBar-lPKNTz6i.js.map} +1 -1
- package/dist/ProgressBar.js +1 -1
- package/dist/{Radio-8E1l0DJa-CLVaSyQc.js → Radio-DQ_VQFGZ-SdFBlDnE.js} +3 -3
- package/dist/{Radio-8E1l0DJa-CLVaSyQc.js.map → Radio-DQ_VQFGZ-SdFBlDnE.js.map} +1 -1
- package/dist/{Radio-P6dkI3W0.js → Radio-DnOuBPi_.js} +2 -2
- package/dist/{Radio-P6dkI3W0.js.map → Radio-DnOuBPi_.js.map} +1 -1
- package/dist/Radio.js +1 -1
- package/dist/{SelectCard-m61WUlo--DlByowef.js → SelectCard-DUNwYa5y-BSi21Aba.js} +4 -4
- package/dist/{SelectCard-m61WUlo--DlByowef.js.map → SelectCard-DUNwYa5y-BSi21Aba.js.map} +1 -1
- package/dist/SelectCard.js +1 -1
- package/dist/{SelectCardGroup-DIaWX2Vp.js → SelectCardGroup-YGYiBv5M.js} +2 -2
- package/dist/{SelectCardGroup-DIaWX2Vp.js.map → SelectCardGroup-YGYiBv5M.js.map} +1 -1
- package/dist/{SelectTrigger-DKh0Bzy6.js → SelectTrigger-Cg-rlFKY.js} +3 -3
- package/dist/{SelectTrigger-DKh0Bzy6.js.map → SelectTrigger-Cg-rlFKY.js.map} +1 -1
- package/dist/SelectTrigger.js +1 -1
- package/dist/{SelectTriggerBase-DnRvuD3R-CTFWVZhY.js → SelectTriggerBase-C0fhFfuj-DfR6h1Lq.js} +4 -4
- package/dist/{SelectTriggerBase-DnRvuD3R-CTFWVZhY.js.map → SelectTriggerBase-C0fhFfuj-DfR6h1Lq.js.map} +1 -1
- package/dist/{SideNav-DEoGpeqJ.js → SideNav-Bh_pVeEw.js} +11 -11
- package/dist/{SideNav-DEoGpeqJ.js.map → SideNav-Bh_pVeEw.js.map} +1 -1
- package/dist/SideNav.css +70 -52
- package/dist/SideNav.js +1 -1
- package/dist/{Text-B91g6xKn.js → Text-35Ve4Uq0.js} +2 -2
- package/dist/{Text-B91g6xKn.js.map → Text-35Ve4Uq0.js.map} +1 -1
- package/dist/{Text-DCvcLCvf-DlmnnjTR.js → Text-CED_yrId-DsRYZw2-.js} +10 -10
- package/dist/{Text-DCvcLCvf-DlmnnjTR.js.map → Text-CED_yrId-DsRYZw2-.js.map} +1 -1
- package/dist/{Text-DCvcLCvf.css → Text-CED_yrId.css} +35 -17
- package/dist/Text.js +1 -1
- package/dist/{TextField-D_fqJf85-Bcd6rWv4.js → TextField-CRTh0gL_-D2CjcYXX.js} +6 -3
- package/dist/TextField-CRTh0gL_-D2CjcYXX.js.map +1 -0
- package/dist/{TextField--tytNBLh.js → TextField-gYAqTpcX.js} +2 -2
- package/dist/{TextField--tytNBLh.js.map → TextField-gYAqTpcX.js.map} +1 -1
- package/dist/TextField.js +1 -1
- package/dist/{Textarea-B0nZ9vOV.js → Textarea-DohNOiIp.js} +24 -11
- package/dist/Textarea-DohNOiIp.js.map +1 -0
- package/dist/Textarea.js +1 -1
- package/dist/{ThemeProvider-BKave7Ha.js → ThemeProvider-DwJqkbiU.js} +2 -2
- package/dist/{ThemeProvider-BKave7Ha.js.map → ThemeProvider-DwJqkbiU.js.map} +1 -1
- package/dist/{ThemeProvider-CR67FJg0-DYVRlJRA.js → ThemeProvider-Q3ji6Rpx-DBXlAuQ8.js} +5 -5
- package/dist/{ThemeProvider-CR67FJg0-DYVRlJRA.js.map → ThemeProvider-Q3ji6Rpx-DBXlAuQ8.js.map} +1 -1
- package/dist/{ThemeProvider-CR67FJg0.css → ThemeProvider-Q3ji6Rpx.css} +106 -4
- package/dist/ThemeProvider.js +1 -1
- package/dist/Toast.js +1 -1
- package/dist/{Toolbar-BM78DEEM.js → Toolbar-BznMJKGJ.js} +4 -4
- package/dist/{Toolbar-BM78DEEM.js.map → Toolbar-BznMJKGJ.js.map} +1 -1
- package/dist/Toolbar.js +1 -1
- package/dist/{Tooltip-ZFFXA77Y.js → Tooltip-C2HQDvYj.js} +2 -2
- package/dist/{Tooltip-ZFFXA77Y.js.map → Tooltip-C2HQDvYj.js.map} +1 -1
- package/dist/Tooltip.js +1 -1
- package/dist/assets/icons/st/fixed.svg +1 -0
- package/dist/assets/icons/st/full_fluid.svg +1 -0
- package/dist/assets/icons/st/installed_equipment.svg +1 -0
- package/dist/assets/icons/st/unpin.svg +1 -0
- package/dist/assets/icons/st.ts +4 -0
- package/dist/components/Avatar/Avatar.d.ts +7 -2
- package/dist/components/Chip/Chip.d.ts +12 -10
- package/dist/components/DateField/DateField.d.ts +1 -0
- package/dist/index.js +34 -34
- package/dist/{toast-uADTqqrS.js → toast-BhV_Ask2.js} +2 -2
- package/dist/{toast-uADTqqrS.js.map → toast-BhV_Ask2.js.map} +1 -1
- package/dist/token/core/raw.js +85 -0
- package/dist/token/core/semantic-variables.scss +102 -0
- package/dist/token/core/semantic.js +357 -0
- package/dist/token/core/semantic.scss +51 -0
- package/dist/token.js +408 -0
- package/dist/token.js.map +1 -1
- package/package.json +3 -3
- package/dist/Avatar-B20IdOEO-Di14brYV.js.map +0 -1
- package/dist/Avatar-hNOToS9S.js.map +0 -1
- package/dist/Chip-BlLavyIK.js +0 -24
- package/dist/Chip-BlLavyIK.js.map +0 -1
- package/dist/Chip-_daV8CmM-CTke7zH4.js.map +0 -1
- package/dist/Menu-CAiyc2zk-rxU7H28t.js.map +0 -1
- package/dist/TextField-D_fqJf85-Bcd6rWv4.js.map +0 -1
- package/dist/Textarea-B0nZ9vOV.js.map +0 -1
- /package/dist/{Breadcrumbs-D_jgwoN3.css → Breadcrumbs-B5bqrZ5D.css} +0 -0
- /package/dist/{Calendar-CNrdcd3f.css → Calendar-DD5kmVd3.css} +0 -0
- /package/dist/{Menu-CAiyc2zk.css → Menu-TtVJnSrA.css} +0 -0
- /package/dist/{Popover-DvLcjLjG.css → Popover-CU2cGVD8.css} +0 -0
- /package/dist/{ProgressBar-BezETeA3.css → ProgressBar-BRvB-bD4.css} +0 -0
- /package/dist/{Radio-8E1l0DJa.css → Radio-DQ_VQFGZ.css} +0 -0
- /package/dist/{SelectCard-m61WUlo-.css → SelectCard-DUNwYa5y.css} +0 -0
- /package/dist/{SelectTriggerBase-DnRvuD3R.css → SelectTriggerBase-C0fhFfuj.css} +0 -0
package/dist/{DateFieldYearless-CJP3H_Dg-BV5wGJp1.js → DateFieldYearless-M5KDI_hn-akXtkIZA.js}
RENAMED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import { useState, useCallback, useRef, useLayoutEffect, useEffect, useMemo, forwardRef, useImperativeHandle } from 'react';
|
|
3
|
-
import {
|
|
4
|
-
import { T as TextField } from './TextField-D_fqJf85-Bcd6rWv4.js';
|
|
3
|
+
import { T as TextField } from './TextField-CRTh0gL_-D2CjcYXX.js';
|
|
5
4
|
import { u as useMergeRefs$1 } from './floating-ui.react-BFNinq1w.js';
|
|
5
|
+
import { D as DateTime, f as Calendar } from './Calendar-DD5kmVd3-CBGTR11R.js';
|
|
6
6
|
import { I as Icon } from './Icon-B6HmlQiR-BxQkO3X5.js';
|
|
7
7
|
import { u as usePopoverCloseDelayWorkaround, S as SvgEvent } from './usePopoverCloseDelayWorkaround-BhhG-xEB-hfJZaXHC.js';
|
|
8
|
-
import { d as Popover } from './Popover-
|
|
9
|
-
import { u as useMergeRefs } from './useMergeRefs-Bde85AWI-Bde85AWI.js';
|
|
8
|
+
import { d as Popover } from './Popover-CU2cGVD8-FWJOuFRj.js';
|
|
10
9
|
import { u as useOptionallyControlledState } from './useOptionallyControlledState-DAv5LXXh-DAv5LXXh.js';
|
|
11
|
-
import {
|
|
10
|
+
import { u as useMergeRefs } from './useMergeRefs-Bde85AWI-Bde85AWI.js';
|
|
11
|
+
import { s as supportsPopover, u as useKeyboardFocusables } from './ProgressBar-BRvB-bD4-DppwBrFg.js';
|
|
12
12
|
|
|
13
13
|
function getContentEditableSelection(element) {
|
|
14
14
|
const { anchorOffset = 0, focusOffset = 0 } = element.ownerDocument.getSelection() || {};
|
|
@@ -1911,8 +1911,12 @@ const MaskedDateInput = forwardRef(
|
|
|
1911
1911
|
mode,
|
|
1912
1912
|
removePlaceholder
|
|
1913
1913
|
);
|
|
1914
|
+
const isValueDifferent = isInputValid !== currentParsedData.isInputValid || // The input has changed validity
|
|
1915
|
+
isInputEmpty !== currentParsedData.isInputEmpty || // The input has changed emptiness
|
|
1916
|
+
date === null !== (lastValidDate === null) || // The input has changed from empty to non-empty or vice versa
|
|
1917
|
+
date !== null && lastValidDate !== null && !date.equals(lastValidDate);
|
|
1918
|
+
if (!isValueDifferent) return;
|
|
1914
1919
|
onChange?.({
|
|
1915
|
-
event,
|
|
1916
1920
|
date: date ?? lastValidDate ?? null,
|
|
1917
1921
|
isInputValid,
|
|
1918
1922
|
isInputEmpty
|
|
@@ -1984,6 +1988,206 @@ function orderSegmentsByMode(day, month, year, mode) {
|
|
|
1984
1988
|
}
|
|
1985
1989
|
}
|
|
1986
1990
|
|
|
1991
|
+
function containsRelatedTarget(event) {
|
|
1992
|
+
if (event.currentTarget instanceof HTMLElement && event.relatedTarget instanceof HTMLElement) {
|
|
1993
|
+
return event.currentTarget.contains(event.relatedTarget);
|
|
1994
|
+
}
|
|
1995
|
+
return false;
|
|
1996
|
+
}
|
|
1997
|
+
function useFocusWithin({
|
|
1998
|
+
onBlur,
|
|
1999
|
+
onFocus
|
|
2000
|
+
} = {}) {
|
|
2001
|
+
const [focused, setFocused] = useState(false);
|
|
2002
|
+
const focusedRef = useRef(false);
|
|
2003
|
+
const elementRef = useRef(null);
|
|
2004
|
+
const _setFocused = useCallback((value) => {
|
|
2005
|
+
setFocused(value);
|
|
2006
|
+
focusedRef.current = value;
|
|
2007
|
+
}, []);
|
|
2008
|
+
const handleFocusIn = useCallback(
|
|
2009
|
+
(event) => {
|
|
2010
|
+
if (!focusedRef.current) {
|
|
2011
|
+
_setFocused(true);
|
|
2012
|
+
onFocus?.(event);
|
|
2013
|
+
}
|
|
2014
|
+
},
|
|
2015
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
2016
|
+
[onFocus]
|
|
2017
|
+
);
|
|
2018
|
+
const handleFocusOut = useCallback(
|
|
2019
|
+
(event) => {
|
|
2020
|
+
if (focusedRef.current && !containsRelatedTarget(event)) {
|
|
2021
|
+
_setFocused(false);
|
|
2022
|
+
onBlur?.(event);
|
|
2023
|
+
}
|
|
2024
|
+
},
|
|
2025
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
2026
|
+
[onBlur]
|
|
2027
|
+
);
|
|
2028
|
+
useEffect(() => {
|
|
2029
|
+
const element = elementRef.current;
|
|
2030
|
+
if (!element) {
|
|
2031
|
+
return;
|
|
2032
|
+
}
|
|
2033
|
+
element.addEventListener("focusin", handleFocusIn);
|
|
2034
|
+
element.addEventListener("focusout", handleFocusOut);
|
|
2035
|
+
return () => {
|
|
2036
|
+
element.removeEventListener("focusin", handleFocusIn);
|
|
2037
|
+
element.removeEventListener("focusout", handleFocusOut);
|
|
2038
|
+
};
|
|
2039
|
+
}, [handleFocusIn, handleFocusOut]);
|
|
2040
|
+
return { ref: elementRef, focused };
|
|
2041
|
+
}
|
|
2042
|
+
|
|
2043
|
+
function convertStringToDate(v) {
|
|
2044
|
+
if (v === void 0 || v === null) {
|
|
2045
|
+
return v;
|
|
2046
|
+
}
|
|
2047
|
+
const date = DateTime.fromISO(v, { setZone: true, zone: "utc" }).startOf(
|
|
2048
|
+
"day"
|
|
2049
|
+
);
|
|
2050
|
+
if (date.isValid) {
|
|
2051
|
+
return date;
|
|
2052
|
+
}
|
|
2053
|
+
return null;
|
|
2054
|
+
}
|
|
2055
|
+
function validateDate({
|
|
2056
|
+
date,
|
|
2057
|
+
constraints
|
|
2058
|
+
}) {
|
|
2059
|
+
const { required, unavailable, minDate, maxDate } = constraints;
|
|
2060
|
+
if (!date) {
|
|
2061
|
+
return required ? false : true;
|
|
2062
|
+
}
|
|
2063
|
+
if (unavailable?.dates?.some((d) => d.equals(date))) {
|
|
2064
|
+
return false;
|
|
2065
|
+
}
|
|
2066
|
+
if (unavailable?.daysOfWeek?.includes(date.weekday)) {
|
|
2067
|
+
return false;
|
|
2068
|
+
}
|
|
2069
|
+
if (minDate && date < minDate) {
|
|
2070
|
+
return false;
|
|
2071
|
+
}
|
|
2072
|
+
if (maxDate && date > maxDate) {
|
|
2073
|
+
return false;
|
|
2074
|
+
}
|
|
2075
|
+
return true;
|
|
2076
|
+
}
|
|
2077
|
+
function validateYearlessDate({
|
|
2078
|
+
value,
|
|
2079
|
+
constraints
|
|
2080
|
+
}) {
|
|
2081
|
+
const { required, unavailable, minDate, maxDate } = constraints;
|
|
2082
|
+
if (!value || !value?.day && !value?.month) {
|
|
2083
|
+
return required ? false : true;
|
|
2084
|
+
}
|
|
2085
|
+
if (value.day === null || value.month === null) {
|
|
2086
|
+
return false;
|
|
2087
|
+
}
|
|
2088
|
+
if (unavailable?.dates?.some(
|
|
2089
|
+
(d) => d.day === value.day && d.month === value.month
|
|
2090
|
+
)) {
|
|
2091
|
+
return false;
|
|
2092
|
+
}
|
|
2093
|
+
const minDateMonth = minDate?.month ?? 1;
|
|
2094
|
+
const minDateDay = minDate?.day ?? 1;
|
|
2095
|
+
const maxDateMonth = maxDate?.month ?? 12;
|
|
2096
|
+
const maxDateDay = maxDate?.day ?? 31;
|
|
2097
|
+
if (value.month < minDateMonth || // Earlier month
|
|
2098
|
+
value.month === minDateMonth && value.day < minDateDay) {
|
|
2099
|
+
return false;
|
|
2100
|
+
}
|
|
2101
|
+
if (value.month > maxDateMonth || // Later month
|
|
2102
|
+
value.month === maxDateMonth && value.day > maxDateDay) {
|
|
2103
|
+
return false;
|
|
2104
|
+
}
|
|
2105
|
+
return true;
|
|
2106
|
+
}
|
|
2107
|
+
|
|
2108
|
+
function useDateFieldSingleConversion({
|
|
2109
|
+
value,
|
|
2110
|
+
defaultValue,
|
|
2111
|
+
minDate,
|
|
2112
|
+
maxDate,
|
|
2113
|
+
unavailable,
|
|
2114
|
+
onChange
|
|
2115
|
+
}) {
|
|
2116
|
+
const normalizedValue = useMemo(() => convertStringToDate(value), [value]);
|
|
2117
|
+
const normalizedDefaultValue = useMemo(
|
|
2118
|
+
() => convertStringToDate(defaultValue),
|
|
2119
|
+
[defaultValue]
|
|
2120
|
+
);
|
|
2121
|
+
const normalizedMinDate = useMemo(
|
|
2122
|
+
() => convertStringToDate(minDate),
|
|
2123
|
+
[minDate]
|
|
2124
|
+
);
|
|
2125
|
+
const normalizedMaxDate = useMemo(
|
|
2126
|
+
() => convertStringToDate(maxDate),
|
|
2127
|
+
[maxDate]
|
|
2128
|
+
);
|
|
2129
|
+
const normalizedUnavailableDates = useMemo(
|
|
2130
|
+
() => unavailable?.dates?.map((d) => convertStringToDate(d)).filter((d) => d !== null && d !== void 0),
|
|
2131
|
+
[unavailable?.dates]
|
|
2132
|
+
);
|
|
2133
|
+
const handleChange = useCallback(
|
|
2134
|
+
(change) => {
|
|
2135
|
+
onChange?.({
|
|
2136
|
+
...change,
|
|
2137
|
+
date: change.date?.toISODate() ?? null
|
|
2138
|
+
});
|
|
2139
|
+
},
|
|
2140
|
+
[onChange]
|
|
2141
|
+
);
|
|
2142
|
+
return {
|
|
2143
|
+
value: normalizedValue,
|
|
2144
|
+
defaultValue: normalizedDefaultValue,
|
|
2145
|
+
minDate: normalizedMinDate,
|
|
2146
|
+
maxDate: normalizedMaxDate,
|
|
2147
|
+
unavailable: {
|
|
2148
|
+
dates: normalizedUnavailableDates,
|
|
2149
|
+
daysOfWeek: unavailable?.daysOfWeek
|
|
2150
|
+
},
|
|
2151
|
+
onChange: handleChange
|
|
2152
|
+
};
|
|
2153
|
+
}
|
|
2154
|
+
|
|
2155
|
+
function DateFieldSingleCalendar({
|
|
2156
|
+
onKeyDown,
|
|
2157
|
+
value,
|
|
2158
|
+
onSelection,
|
|
2159
|
+
minDate,
|
|
2160
|
+
maxDate,
|
|
2161
|
+
unavailable,
|
|
2162
|
+
...rest
|
|
2163
|
+
}) {
|
|
2164
|
+
const handleCalendarSelection = (data) => {
|
|
2165
|
+
if (data.value) {
|
|
2166
|
+
const date = DateTime.fromISO(data.value, { zone: "utc" });
|
|
2167
|
+
onSelection(date);
|
|
2168
|
+
}
|
|
2169
|
+
};
|
|
2170
|
+
return /* @__PURE__ */ jsx(
|
|
2171
|
+
Calendar,
|
|
2172
|
+
{
|
|
2173
|
+
...rest,
|
|
2174
|
+
range: false,
|
|
2175
|
+
onKeyDown,
|
|
2176
|
+
defaultFocusedDate: value?.toISODate() || DateTime.now().toISODate(),
|
|
2177
|
+
value: value?.toISODate() || void 0,
|
|
2178
|
+
onSelection: handleCalendarSelection,
|
|
2179
|
+
defaultTimeZone: "UTC",
|
|
2180
|
+
minDate: minDate?.toISODate() ?? void 0,
|
|
2181
|
+
maxDate: maxDate?.toISODate() ?? void 0,
|
|
2182
|
+
unavailable: unavailable ? {
|
|
2183
|
+
dates: unavailable.dates?.map((d) => d.toISODate() ?? ""),
|
|
2184
|
+
daysOfWeek: unavailable.daysOfWeek
|
|
2185
|
+
} : void 0,
|
|
2186
|
+
_disableAutofocus: true
|
|
2187
|
+
}
|
|
2188
|
+
);
|
|
2189
|
+
}
|
|
2190
|
+
|
|
1987
2191
|
const useDateFieldOrchestration = ({
|
|
1988
2192
|
inputRef,
|
|
1989
2193
|
calendarDefaultOpen,
|
|
@@ -2070,360 +2274,172 @@ const useDateFieldOrchestration = ({
|
|
|
2070
2274
|
};
|
|
2071
2275
|
};
|
|
2072
2276
|
|
|
2073
|
-
function
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
"day"
|
|
2079
|
-
);
|
|
2080
|
-
if (date.isValid) {
|
|
2081
|
-
return date;
|
|
2082
|
-
}
|
|
2083
|
-
return null;
|
|
2084
|
-
}
|
|
2085
|
-
function validateDate({
|
|
2086
|
-
date,
|
|
2087
|
-
constraints
|
|
2088
|
-
}) {
|
|
2089
|
-
const { required, unavailable, minDate, maxDate } = constraints;
|
|
2090
|
-
if (!date) {
|
|
2091
|
-
return required ? false : true;
|
|
2092
|
-
}
|
|
2093
|
-
if (unavailable?.dates?.some((d) => d.equals(date))) {
|
|
2094
|
-
return false;
|
|
2095
|
-
}
|
|
2096
|
-
if (unavailable?.daysOfWeek?.includes(date.weekday)) {
|
|
2097
|
-
return false;
|
|
2098
|
-
}
|
|
2099
|
-
if (minDate && date < minDate) {
|
|
2100
|
-
return false;
|
|
2101
|
-
}
|
|
2102
|
-
if (maxDate && date > maxDate) {
|
|
2103
|
-
return false;
|
|
2104
|
-
}
|
|
2105
|
-
return true;
|
|
2106
|
-
}
|
|
2107
|
-
function validateYearlessDate({
|
|
2108
|
-
value,
|
|
2109
|
-
constraints
|
|
2277
|
+
function useDateFieldSingleState({
|
|
2278
|
+
valueProp,
|
|
2279
|
+
defaultValueProp,
|
|
2280
|
+
inputRef,
|
|
2281
|
+
onChange
|
|
2110
2282
|
}) {
|
|
2111
|
-
const
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
}
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
|
|
2129
|
-
|
|
2130
|
-
|
|
2131
|
-
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
|
|
2283
|
+
const [value, setValue] = useOptionallyControlledState({
|
|
2284
|
+
controlledValue: valueProp,
|
|
2285
|
+
defaultValue: defaultValueProp
|
|
2286
|
+
});
|
|
2287
|
+
const setSharedValue = (date) => {
|
|
2288
|
+
inputRef.current?.setDate(date);
|
|
2289
|
+
setValue(date);
|
|
2290
|
+
};
|
|
2291
|
+
const handleInputChange = (change) => {
|
|
2292
|
+
const date = change.isInputEmpty ? null : change.date?.startOf("day") ?? null;
|
|
2293
|
+
onChange?.({
|
|
2294
|
+
date,
|
|
2295
|
+
isInputValid: change.isInputValid,
|
|
2296
|
+
isInputEmpty: change.isInputEmpty
|
|
2297
|
+
});
|
|
2298
|
+
if (change.isInputValid) {
|
|
2299
|
+
setSharedValue(change.isInputEmpty ? null : change.date);
|
|
2300
|
+
}
|
|
2301
|
+
if (change.isInputEmpty) {
|
|
2302
|
+
setSharedValue(null);
|
|
2303
|
+
return;
|
|
2304
|
+
}
|
|
2305
|
+
if (change.date) {
|
|
2306
|
+
setSharedValue(change.date);
|
|
2307
|
+
}
|
|
2308
|
+
};
|
|
2309
|
+
const handleCalendarSelection = (date) => {
|
|
2310
|
+
setSharedValue(date);
|
|
2311
|
+
onChange?.({
|
|
2312
|
+
date,
|
|
2313
|
+
isInputValid: true,
|
|
2314
|
+
isInputEmpty: false
|
|
2315
|
+
});
|
|
2316
|
+
};
|
|
2317
|
+
return {
|
|
2318
|
+
value,
|
|
2319
|
+
setValue: setSharedValue,
|
|
2320
|
+
handleInputChange,
|
|
2321
|
+
handleCalendarSelection
|
|
2322
|
+
};
|
|
2136
2323
|
}
|
|
2137
2324
|
|
|
2138
|
-
const
|
|
2139
|
-
|
|
2140
|
-
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
|
|
2145
|
-
|
|
2325
|
+
const DateFieldSingle = ({
|
|
2326
|
+
onFocus,
|
|
2327
|
+
onBlur,
|
|
2328
|
+
disableCalendar,
|
|
2329
|
+
required,
|
|
2330
|
+
mode,
|
|
2331
|
+
...rest
|
|
2332
|
+
}) => {
|
|
2333
|
+
const inputRef = useRef(null);
|
|
2334
|
+
const {
|
|
2335
|
+
value: valueProp,
|
|
2336
|
+
defaultValue: defaultValueProp,
|
|
2146
2337
|
minDate,
|
|
2147
2338
|
maxDate,
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
2152
|
-
|
|
2153
|
-
|
|
2154
|
-
|
|
2155
|
-
|
|
2156
|
-
const combinedRef = useMergeRefs([popoverTriggerRef, inputRef, ref]);
|
|
2157
|
-
const {
|
|
2158
|
-
calendarOpen,
|
|
2159
|
-
setCalendarOpen,
|
|
2160
|
-
handleCalendarKeyDown,
|
|
2161
|
-
handleInputKeyDown
|
|
2162
|
-
} = useDateFieldOrchestration({
|
|
2163
|
-
inputRef,
|
|
2164
|
-
calendarDefaultOpen: false,
|
|
2165
|
-
popoverContentRef,
|
|
2166
|
-
disableCalendar
|
|
2167
|
-
});
|
|
2168
|
-
const [lastValidDate, setLastValidDate] = useOptionallyControlledState({
|
|
2169
|
-
controlledValue: valueProp,
|
|
2170
|
-
defaultValue: defaultValueProp
|
|
2171
|
-
});
|
|
2172
|
-
const popoverSupported = usePopoverSupport();
|
|
2173
|
-
const shouldShowCalendar = usePopoverCloseDelayWorkaround(calendarOpen);
|
|
2174
|
-
const currentValidity = useMemo(
|
|
2175
|
-
() => validateDate({
|
|
2176
|
-
date: lastValidDate,
|
|
2339
|
+
unavailable,
|
|
2340
|
+
onChange
|
|
2341
|
+
} = useDateFieldSingleConversion(rest);
|
|
2342
|
+
const handleChange = (change) => {
|
|
2343
|
+
onChange?.({
|
|
2344
|
+
...change,
|
|
2345
|
+
isDateValid: validateDate({
|
|
2346
|
+
date: change.date,
|
|
2177
2347
|
constraints: {
|
|
2178
2348
|
required,
|
|
2179
2349
|
unavailable,
|
|
2180
2350
|
minDate: minDate ?? void 0,
|
|
2181
2351
|
maxDate: maxDate ?? void 0
|
|
2182
2352
|
}
|
|
2183
|
-
})
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2205
|
-
|
|
2206
|
-
|
|
2207
|
-
|
|
2208
|
-
|
|
2209
|
-
|
|
2210
|
-
|
|
2211
|
-
|
|
2212
|
-
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
|
|
2216
|
-
setLastValidDate(date);
|
|
2217
|
-
inputRef.current?.setDate(date);
|
|
2218
|
-
onChange?.({
|
|
2219
|
-
date: date.toISODate(),
|
|
2220
|
-
isInputValid: true,
|
|
2221
|
-
isInputEmpty: false,
|
|
2222
|
-
isDateValid: validateDate({
|
|
2223
|
-
date,
|
|
2224
|
-
constraints: {
|
|
2225
|
-
required,
|
|
2226
|
-
unavailable,
|
|
2227
|
-
minDate: minDate ?? void 0,
|
|
2228
|
-
maxDate: maxDate ?? void 0
|
|
2229
|
-
}
|
|
2230
|
-
})
|
|
2231
|
-
});
|
|
2232
|
-
}
|
|
2233
|
-
};
|
|
2234
|
-
const justTheField = /* @__PURE__ */ jsx(
|
|
2235
|
-
MaskedDateInput,
|
|
2236
|
-
{
|
|
2237
|
-
mode,
|
|
2238
|
-
ref: combinedRef,
|
|
2239
|
-
...rest,
|
|
2240
|
-
onChange: handleInputChange,
|
|
2241
|
-
onKeyDown: handleInputKeyDown,
|
|
2242
|
-
onClick: () => setCalendarOpen(true),
|
|
2243
|
-
lastValidDate,
|
|
2353
|
+
})
|
|
2354
|
+
});
|
|
2355
|
+
};
|
|
2356
|
+
const { value, handleInputChange, handleCalendarSelection } = useDateFieldSingleState({
|
|
2357
|
+
valueProp,
|
|
2358
|
+
defaultValueProp,
|
|
2359
|
+
inputRef,
|
|
2360
|
+
onChange: handleChange
|
|
2361
|
+
});
|
|
2362
|
+
const { ref: wrapperRef } = useFocusWithin({
|
|
2363
|
+
onBlur,
|
|
2364
|
+
onFocus
|
|
2365
|
+
});
|
|
2366
|
+
const [popoverTriggerRef, setPopoverTriggerRef] = useState();
|
|
2367
|
+
const popoverContentRef = useRef(null);
|
|
2368
|
+
const combinedRef = useMergeRefs([popoverTriggerRef, inputRef]);
|
|
2369
|
+
const {
|
|
2370
|
+
calendarOpen,
|
|
2371
|
+
setCalendarOpen,
|
|
2372
|
+
handleCalendarKeyDown,
|
|
2373
|
+
handleInputKeyDown
|
|
2374
|
+
} = useDateFieldOrchestration({
|
|
2375
|
+
inputRef,
|
|
2376
|
+
calendarDefaultOpen: false,
|
|
2377
|
+
popoverContentRef,
|
|
2378
|
+
disableCalendar
|
|
2379
|
+
});
|
|
2380
|
+
const popoverSupported = usePopoverSupport();
|
|
2381
|
+
const shouldShowCalendar = usePopoverCloseDelayWorkaround(calendarOpen);
|
|
2382
|
+
const currentValidity = useMemo(
|
|
2383
|
+
() => validateDate({
|
|
2384
|
+
date: value,
|
|
2385
|
+
constraints: {
|
|
2244
2386
|
required,
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
);
|
|
2249
|
-
if (disableCalendar) {
|
|
2250
|
-
return justTheField;
|
|
2251
|
-
}
|
|
2252
|
-
if (!popoverSupported) {
|
|
2253
|
-
return justTheField;
|
|
2254
|
-
}
|
|
2255
|
-
return /* @__PURE__ */ jsxs(
|
|
2256
|
-
Popover,
|
|
2257
|
-
{
|
|
2258
|
-
open: calendarOpen,
|
|
2259
|
-
modal: true,
|
|
2260
|
-
placement: "bottom-start",
|
|
2261
|
-
disableFlipFallback: true,
|
|
2262
|
-
disableTriggerFocus: true,
|
|
2263
|
-
onClose: () => setCalendarOpen(false),
|
|
2264
|
-
disableAutoUpdate: true,
|
|
2265
|
-
onClickOutside: () => setCalendarOpen(false),
|
|
2266
|
-
children: [
|
|
2267
|
-
/* @__PURE__ */ jsx(Popover.Trigger, { children: ({ ref: iRef }) => {
|
|
2268
|
-
setPopoverTriggerRef(iRef);
|
|
2269
|
-
return justTheField;
|
|
2270
|
-
} }),
|
|
2271
|
-
/* @__PURE__ */ jsx(Popover.Content, { ref: popoverContentRef, "data-testid": "calendar-popover", children: shouldShowCalendar && /* @__PURE__ */ jsx(
|
|
2272
|
-
Calendar,
|
|
2273
|
-
{
|
|
2274
|
-
range: false,
|
|
2275
|
-
onKeyDown: handleCalendarKeyDown,
|
|
2276
|
-
defaultFocusedDate: lastValidDate?.toISODate() || DateTime.now().toISODate(),
|
|
2277
|
-
value: lastValidDate?.toISODate() || void 0,
|
|
2278
|
-
onSelection: handleCalendarSelection,
|
|
2279
|
-
defaultTimeZone: "UTC",
|
|
2280
|
-
minDate: minDate?.toISODate() ?? void 0,
|
|
2281
|
-
maxDate: maxDate?.toISODate() ?? void 0,
|
|
2282
|
-
unavailable: unavailable ? {
|
|
2283
|
-
dates: unavailable.dates?.map((d) => d.toISODate() ?? ""),
|
|
2284
|
-
daysOfWeek: unavailable.daysOfWeek
|
|
2285
|
-
} : void 0,
|
|
2286
|
-
_disableAutofocus: true
|
|
2287
|
-
}
|
|
2288
|
-
) })
|
|
2289
|
-
]
|
|
2290
|
-
}
|
|
2291
|
-
);
|
|
2292
|
-
}
|
|
2293
|
-
);
|
|
2294
|
-
NormalizedDateFieldSingle.displayName = "NormalizedDateFieldSingle";
|
|
2295
|
-
|
|
2296
|
-
function containsRelatedTarget(event) {
|
|
2297
|
-
if (event.currentTarget instanceof HTMLElement && event.relatedTarget instanceof HTMLElement) {
|
|
2298
|
-
return event.currentTarget.contains(event.relatedTarget);
|
|
2299
|
-
}
|
|
2300
|
-
return false;
|
|
2301
|
-
}
|
|
2302
|
-
function useFocusWithin({
|
|
2303
|
-
onBlur,
|
|
2304
|
-
onFocus
|
|
2305
|
-
} = {}) {
|
|
2306
|
-
const [focused, setFocused] = useState(false);
|
|
2307
|
-
const focusedRef = useRef(false);
|
|
2308
|
-
const elementRef = useRef(null);
|
|
2309
|
-
const _setFocused = useCallback((value) => {
|
|
2310
|
-
setFocused(value);
|
|
2311
|
-
focusedRef.current = value;
|
|
2312
|
-
}, []);
|
|
2313
|
-
const handleFocusIn = useCallback(
|
|
2314
|
-
(event) => {
|
|
2315
|
-
if (!focusedRef.current) {
|
|
2316
|
-
_setFocused(true);
|
|
2317
|
-
onFocus?.(event);
|
|
2318
|
-
}
|
|
2319
|
-
},
|
|
2320
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
2321
|
-
[onFocus]
|
|
2322
|
-
);
|
|
2323
|
-
const handleFocusOut = useCallback(
|
|
2324
|
-
(event) => {
|
|
2325
|
-
if (focusedRef.current && !containsRelatedTarget(event)) {
|
|
2326
|
-
_setFocused(false);
|
|
2327
|
-
onBlur?.(event);
|
|
2387
|
+
unavailable,
|
|
2388
|
+
minDate: minDate ?? void 0,
|
|
2389
|
+
maxDate: maxDate ?? void 0
|
|
2328
2390
|
}
|
|
2329
|
-
},
|
|
2330
|
-
|
|
2331
|
-
[onBlur]
|
|
2391
|
+
}),
|
|
2392
|
+
[value, required, unavailable, minDate, maxDate]
|
|
2332
2393
|
);
|
|
2333
|
-
|
|
2334
|
-
|
|
2335
|
-
|
|
2336
|
-
|
|
2394
|
+
const justTheField = /* @__PURE__ */ jsx(
|
|
2395
|
+
MaskedDateInput,
|
|
2396
|
+
{
|
|
2397
|
+
mode,
|
|
2398
|
+
ref: combinedRef,
|
|
2399
|
+
...rest,
|
|
2400
|
+
onChange: handleInputChange,
|
|
2401
|
+
onKeyDown: handleInputKeyDown,
|
|
2402
|
+
onClick: () => setCalendarOpen(true),
|
|
2403
|
+
lastValidDate: value,
|
|
2404
|
+
required,
|
|
2405
|
+
autoComplete: "off",
|
|
2406
|
+
"data-date-valid": currentValidity
|
|
2337
2407
|
}
|
|
2338
|
-
element.addEventListener("focusin", handleFocusIn);
|
|
2339
|
-
element.addEventListener("focusout", handleFocusOut);
|
|
2340
|
-
return () => {
|
|
2341
|
-
element.removeEventListener("focusin", handleFocusIn);
|
|
2342
|
-
element.removeEventListener("focusout", handleFocusOut);
|
|
2343
|
-
};
|
|
2344
|
-
}, [handleFocusIn, handleFocusOut]);
|
|
2345
|
-
return { ref: elementRef, focused };
|
|
2346
|
-
}
|
|
2347
|
-
|
|
2348
|
-
const useConditionalChange = ({
|
|
2349
|
-
changeHandler,
|
|
2350
|
-
compareFn
|
|
2351
|
-
}) => {
|
|
2352
|
-
const lastChangeRef = useRef(null);
|
|
2353
|
-
const onChange = useCallback(
|
|
2354
|
-
(change) => {
|
|
2355
|
-
if (!!lastChangeRef.current && !compareFn(lastChangeRef.current, change)) {
|
|
2356
|
-
return;
|
|
2357
|
-
}
|
|
2358
|
-
changeHandler?.(change);
|
|
2359
|
-
lastChangeRef.current = change;
|
|
2360
|
-
},
|
|
2361
|
-
[changeHandler, compareFn]
|
|
2362
|
-
);
|
|
2363
|
-
return onChange;
|
|
2364
|
-
};
|
|
2365
|
-
|
|
2366
|
-
const DateFieldSingle = ({
|
|
2367
|
-
value,
|
|
2368
|
-
defaultValue,
|
|
2369
|
-
minDate,
|
|
2370
|
-
maxDate,
|
|
2371
|
-
unavailable,
|
|
2372
|
-
onChange,
|
|
2373
|
-
onFocus,
|
|
2374
|
-
onBlur,
|
|
2375
|
-
...rest
|
|
2376
|
-
}) => {
|
|
2377
|
-
const handleBlur = useCallback(
|
|
2378
|
-
(event) => {
|
|
2379
|
-
onBlur?.(event);
|
|
2380
|
-
},
|
|
2381
|
-
[onBlur]
|
|
2382
|
-
);
|
|
2383
|
-
const handleFocus = useCallback(
|
|
2384
|
-
(event) => {
|
|
2385
|
-
onFocus?.(event);
|
|
2386
|
-
},
|
|
2387
|
-
[onFocus]
|
|
2388
|
-
);
|
|
2389
|
-
const { ref: wrapperRef } = useFocusWithin({
|
|
2390
|
-
onBlur: handleBlur,
|
|
2391
|
-
onFocus: handleFocus
|
|
2392
|
-
});
|
|
2393
|
-
const normalizedValue = useMemo(() => convertStringToDate(value), [value]);
|
|
2394
|
-
const normalizedDefaultValue = useMemo(
|
|
2395
|
-
() => convertStringToDate(defaultValue),
|
|
2396
|
-
[defaultValue]
|
|
2397
|
-
);
|
|
2398
|
-
const normalizedMinDate = useMemo(
|
|
2399
|
-
() => convertStringToDate(minDate),
|
|
2400
|
-
[minDate]
|
|
2401
|
-
);
|
|
2402
|
-
const normalizedMaxDate = useMemo(
|
|
2403
|
-
() => convertStringToDate(maxDate),
|
|
2404
|
-
[maxDate]
|
|
2405
|
-
);
|
|
2406
|
-
const normalizedUnavailableDates = useMemo(
|
|
2407
|
-
() => unavailable?.dates?.map((d) => convertStringToDate(d)).filter((d) => d !== null && d !== void 0),
|
|
2408
|
-
[unavailable?.dates]
|
|
2409
2408
|
);
|
|
2410
|
-
|
|
2411
|
-
|
|
2412
|
-
|
|
2413
|
-
|
|
2414
|
-
|
|
2415
|
-
|
|
2409
|
+
if (disableCalendar) {
|
|
2410
|
+
return justTheField;
|
|
2411
|
+
}
|
|
2412
|
+
if (!popoverSupported) {
|
|
2413
|
+
return justTheField;
|
|
2414
|
+
}
|
|
2415
|
+
return /* @__PURE__ */ jsx("div", { ref: wrapperRef, children: /* @__PURE__ */ jsxs(
|
|
2416
|
+
Popover,
|
|
2416
2417
|
{
|
|
2417
|
-
|
|
2418
|
-
|
|
2419
|
-
|
|
2420
|
-
|
|
2421
|
-
|
|
2422
|
-
|
|
2423
|
-
|
|
2424
|
-
|
|
2425
|
-
|
|
2426
|
-
|
|
2418
|
+
open: calendarOpen,
|
|
2419
|
+
modal: true,
|
|
2420
|
+
placement: "bottom-start",
|
|
2421
|
+
disableFlipFallback: true,
|
|
2422
|
+
disableTriggerFocus: true,
|
|
2423
|
+
onClose: () => setCalendarOpen(false),
|
|
2424
|
+
disableAutoUpdate: true,
|
|
2425
|
+
onClickOutside: () => setCalendarOpen(false),
|
|
2426
|
+
children: [
|
|
2427
|
+
/* @__PURE__ */ jsx(Popover.Trigger, { children: ({ ref: iRef }) => {
|
|
2428
|
+
setPopoverTriggerRef(iRef);
|
|
2429
|
+
return justTheField;
|
|
2430
|
+
} }),
|
|
2431
|
+
/* @__PURE__ */ jsx(Popover.Content, { ref: popoverContentRef, "data-testid": "calendar-popover", children: shouldShowCalendar && /* @__PURE__ */ jsx(
|
|
2432
|
+
DateFieldSingleCalendar,
|
|
2433
|
+
{
|
|
2434
|
+
onKeyDown: handleCalendarKeyDown,
|
|
2435
|
+
value,
|
|
2436
|
+
onSelection: handleCalendarSelection,
|
|
2437
|
+
minDate,
|
|
2438
|
+
maxDate,
|
|
2439
|
+
unavailable
|
|
2440
|
+
}
|
|
2441
|
+
) })
|
|
2442
|
+
]
|
|
2427
2443
|
}
|
|
2428
2444
|
) });
|
|
2429
2445
|
};
|
|
@@ -2513,6 +2529,9 @@ const MaskedDateRangeInput = forwardRef(
|
|
|
2513
2529
|
previousStartDate,
|
|
2514
2530
|
previousEndDate
|
|
2515
2531
|
]);
|
|
2532
|
+
const currentParsedData = useMemo(() => {
|
|
2533
|
+
return parseRangeInputValue(inputValue, mode, removePlaceholder);
|
|
2534
|
+
}, [inputValue, mode, removePlaceholder]);
|
|
2516
2535
|
const handleChange = (event) => {
|
|
2517
2536
|
setInputValue(event.target.value);
|
|
2518
2537
|
const {
|
|
@@ -2522,17 +2541,20 @@ const MaskedDateRangeInput = forwardRef(
|
|
|
2522
2541
|
isInputEmpty,
|
|
2523
2542
|
isHalfEmpty
|
|
2524
2543
|
} = parseRangeInputValue(event.target.value, mode, removePlaceholder);
|
|
2544
|
+
const isValueDifferent = isInputValid !== currentParsedData.isInputValid || // The input has changed validity
|
|
2545
|
+
isInputEmpty !== currentParsedData.isInputEmpty || // The input has changed emptiness
|
|
2546
|
+
parsedStartDate === null !== (startDate === null) || // The start date has changed from empty to non-empty or vice versa
|
|
2547
|
+
parsedEndDate === null !== (endDate === null) || // The end date has changed from empty to non-empty or vice versa
|
|
2548
|
+
parsedStartDate !== null && startDate !== null && !parsedStartDate.equals(startDate) || // The start date has changed
|
|
2549
|
+
parsedEndDate !== null && endDate !== null && !parsedEndDate.equals(endDate);
|
|
2550
|
+
if (!isValueDifferent) return;
|
|
2525
2551
|
onChange?.({
|
|
2526
|
-
event,
|
|
2527
2552
|
startDate: isInputEmpty ? null : parsedStartDate ?? startDate ?? null,
|
|
2528
2553
|
endDate: isInputEmpty || isHalfEmpty ? null : parsedEndDate ?? endDate ?? null,
|
|
2529
2554
|
isInputValid,
|
|
2530
2555
|
isInputEmpty
|
|
2531
2556
|
});
|
|
2532
2557
|
};
|
|
2533
|
-
const currentParsedData = useMemo(() => {
|
|
2534
|
-
return parseRangeInputValue(inputValue, mode, removePlaceholder);
|
|
2535
|
-
}, [inputValue, mode, removePlaceholder]);
|
|
2536
2558
|
useImperativeHandle(ref, () => {
|
|
2537
2559
|
const input = inputRef.current;
|
|
2538
2560
|
if (!input) return null;
|
|
@@ -2623,202 +2645,299 @@ function swapMode$1(inputString, previousMode, mode) {
|
|
|
2623
2645
|
return inputString;
|
|
2624
2646
|
}
|
|
2625
2647
|
|
|
2626
|
-
const
|
|
2627
|
-
|
|
2628
|
-
|
|
2629
|
-
|
|
2630
|
-
|
|
2631
|
-
|
|
2632
|
-
|
|
2633
|
-
|
|
2634
|
-
|
|
2635
|
-
|
|
2636
|
-
|
|
2637
|
-
|
|
2638
|
-
|
|
2639
|
-
|
|
2640
|
-
|
|
2641
|
-
|
|
2642
|
-
|
|
2643
|
-
|
|
2644
|
-
|
|
2645
|
-
|
|
2646
|
-
|
|
2647
|
-
|
|
2648
|
-
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
|
-
|
|
2654
|
-
|
|
2655
|
-
|
|
2656
|
-
const previousEndDate = usePrevious(endDate);
|
|
2657
|
-
const popoverSupported = usePopoverSupport();
|
|
2658
|
-
const {
|
|
2659
|
-
calendarOpen,
|
|
2660
|
-
setCalendarOpen,
|
|
2661
|
-
handleCalendarKeyDown,
|
|
2662
|
-
handleInputKeyDown
|
|
2663
|
-
} = useDateFieldOrchestration({
|
|
2664
|
-
inputRef,
|
|
2665
|
-
calendarDefaultOpen: false,
|
|
2666
|
-
popoverContentRef,
|
|
2667
|
-
disableCalendar
|
|
2668
|
-
});
|
|
2669
|
-
const shouldShowCalendar = usePopoverCloseDelayWorkaround(calendarOpen);
|
|
2670
|
-
const isDateRangeValid = useMemo(() => {
|
|
2671
|
-
return validateDate({
|
|
2672
|
-
date: startDate ?? null,
|
|
2673
|
-
constraints: {
|
|
2674
|
-
required,
|
|
2675
|
-
unavailable,
|
|
2676
|
-
minDate: minDate ?? void 0,
|
|
2677
|
-
maxDate: maxDate ?? void 0
|
|
2678
|
-
}
|
|
2679
|
-
}) && validateDate({
|
|
2680
|
-
date: endDate ?? null,
|
|
2681
|
-
constraints: {
|
|
2682
|
-
required,
|
|
2683
|
-
unavailable,
|
|
2684
|
-
minDate: minDate ?? void 0,
|
|
2685
|
-
maxDate: maxDate ?? void 0
|
|
2686
|
-
}
|
|
2687
|
-
}) && (!startDate || !endDate || startDate <= endDate);
|
|
2688
|
-
}, [required, unavailable, minDate, maxDate, startDate, endDate]);
|
|
2689
|
-
const defaultFocusedDate = useMemo(() => {
|
|
2690
|
-
if (!startDate && !endDate) return DateTime.now().toISODate();
|
|
2691
|
-
if (!startDate) return endDate?.toISODate();
|
|
2692
|
-
if (!endDate) return startDate?.toISODate();
|
|
2693
|
-
if (endDate && !previousEndDate?.equals(endDate)) {
|
|
2694
|
-
return endDate.toISODate();
|
|
2695
|
-
} else if (startDate && !previousStartDate?.equals(startDate)) {
|
|
2696
|
-
return startDate.toISODate();
|
|
2697
|
-
}
|
|
2698
|
-
if (endDate) return endDate.toISODate();
|
|
2699
|
-
if (startDate) return startDate.toISODate();
|
|
2700
|
-
return DateTime.now().toISODate();
|
|
2701
|
-
}, [previousStartDate, previousEndDate, startDate, endDate]);
|
|
2702
|
-
const handleInputChange = (change) => {
|
|
2703
|
-
const sharedConstraints = {
|
|
2704
|
-
unavailable,
|
|
2705
|
-
minDate: minDate ?? void 0,
|
|
2706
|
-
maxDate: maxDate ?? void 0
|
|
2707
|
-
};
|
|
2708
|
-
const range = change.isInputEmpty ? null : {
|
|
2709
|
-
startDate: change.startDate?.startOf("day") ?? null,
|
|
2710
|
-
endDate: change.endDate?.startOf("day") ?? null
|
|
2711
|
-
};
|
|
2712
|
-
setStartDate(range?.startDate ?? null);
|
|
2713
|
-
setEndDate(range?.endDate ?? null);
|
|
2648
|
+
const useDateFieldRangeConversion = (props) => {
|
|
2649
|
+
const { value, defaultValue, minDate, maxDate, unavailable, onChange } = props;
|
|
2650
|
+
const normalizedValue = useMemo(() => {
|
|
2651
|
+
if (value === null || value === void 0) return value;
|
|
2652
|
+
return {
|
|
2653
|
+
startDate: convertStringToDate(value.startDate) ?? null,
|
|
2654
|
+
endDate: convertStringToDate(value.endDate) ?? null
|
|
2655
|
+
};
|
|
2656
|
+
}, [value]);
|
|
2657
|
+
const normalizedDefaultValue = useMemo(() => {
|
|
2658
|
+
if (defaultValue === null || defaultValue === void 0)
|
|
2659
|
+
return defaultValue;
|
|
2660
|
+
return {
|
|
2661
|
+
startDate: convertStringToDate(defaultValue.startDate) ?? null,
|
|
2662
|
+
endDate: convertStringToDate(defaultValue.endDate) ?? null
|
|
2663
|
+
};
|
|
2664
|
+
}, [defaultValue]);
|
|
2665
|
+
const normalizedMinDate = useMemo(
|
|
2666
|
+
() => convertStringToDate(minDate),
|
|
2667
|
+
[minDate]
|
|
2668
|
+
);
|
|
2669
|
+
const normalizedMaxDate = useMemo(
|
|
2670
|
+
() => convertStringToDate(maxDate),
|
|
2671
|
+
[maxDate]
|
|
2672
|
+
);
|
|
2673
|
+
const normalizedUnavailableDates = useMemo(() => {
|
|
2674
|
+
return unavailable?.dates?.map((date) => convertStringToDate(date)).filter((date) => date !== null && date !== void 0);
|
|
2675
|
+
}, [unavailable?.dates]);
|
|
2676
|
+
const handleChange = useCallback(
|
|
2677
|
+
(change) => {
|
|
2714
2678
|
onChange?.({
|
|
2715
|
-
|
|
2716
|
-
|
|
2717
|
-
|
|
2718
|
-
isInputEmpty: change.isInputEmpty,
|
|
2719
|
-
isDateRangeValid: validateDateRange({
|
|
2720
|
-
required,
|
|
2721
|
-
startDate: range?.startDate ?? null,
|
|
2722
|
-
endDate: range?.endDate ?? null,
|
|
2723
|
-
startDateConstraints: sharedConstraints,
|
|
2724
|
-
endDateConstraints: sharedConstraints
|
|
2725
|
-
})
|
|
2679
|
+
...change,
|
|
2680
|
+
startDate: change.startDate?.toISODate() ?? null,
|
|
2681
|
+
endDate: change.endDate?.toISODate() ?? null
|
|
2726
2682
|
});
|
|
2683
|
+
},
|
|
2684
|
+
[onChange]
|
|
2685
|
+
);
|
|
2686
|
+
return {
|
|
2687
|
+
value: normalizedValue,
|
|
2688
|
+
defaultValue: normalizedDefaultValue,
|
|
2689
|
+
minDate: normalizedMinDate,
|
|
2690
|
+
maxDate: normalizedMaxDate,
|
|
2691
|
+
unavailable: {
|
|
2692
|
+
dates: normalizedUnavailableDates,
|
|
2693
|
+
daysOfWeek: unavailable?.daysOfWeek
|
|
2694
|
+
},
|
|
2695
|
+
onChange: handleChange
|
|
2696
|
+
};
|
|
2697
|
+
};
|
|
2698
|
+
|
|
2699
|
+
function useDateFieldRangeState({
|
|
2700
|
+
valueProp,
|
|
2701
|
+
defaultValueProp,
|
|
2702
|
+
inputRef,
|
|
2703
|
+
onChange
|
|
2704
|
+
}) {
|
|
2705
|
+
const [startDate, setStartDate] = useOptionallyControlledState({
|
|
2706
|
+
controlledValue: valueProp !== void 0 ? valueProp?.startDate : void 0,
|
|
2707
|
+
defaultValue: defaultValueProp !== void 0 ? defaultValueProp?.startDate : void 0
|
|
2708
|
+
});
|
|
2709
|
+
const [endDate, setEndDate] = useOptionallyControlledState({
|
|
2710
|
+
controlledValue: valueProp !== void 0 ? valueProp?.endDate : void 0,
|
|
2711
|
+
defaultValue: defaultValueProp !== void 0 ? defaultValueProp?.endDate : void 0
|
|
2712
|
+
});
|
|
2713
|
+
const setSharedValue = (value) => {
|
|
2714
|
+
inputRef.current?.setDateRange(value.startDate, value.endDate);
|
|
2715
|
+
setStartDate(value.startDate);
|
|
2716
|
+
setEndDate(value.endDate);
|
|
2717
|
+
};
|
|
2718
|
+
const handleInputChange = (change) => {
|
|
2719
|
+
const range = change.isInputEmpty ? null : {
|
|
2720
|
+
startDate: change.startDate?.startOf("day") ?? null,
|
|
2721
|
+
endDate: change.endDate?.startOf("day") ?? null
|
|
2727
2722
|
};
|
|
2728
|
-
|
|
2729
|
-
|
|
2730
|
-
|
|
2731
|
-
|
|
2732
|
-
|
|
2733
|
-
|
|
2734
|
-
|
|
2735
|
-
|
|
2736
|
-
|
|
2737
|
-
|
|
2738
|
-
|
|
2739
|
-
|
|
2740
|
-
|
|
2741
|
-
|
|
2742
|
-
|
|
2743
|
-
|
|
2744
|
-
|
|
2745
|
-
|
|
2746
|
-
|
|
2747
|
-
|
|
2748
|
-
|
|
2749
|
-
|
|
2750
|
-
|
|
2751
|
-
|
|
2752
|
-
|
|
2753
|
-
|
|
2723
|
+
setStartDate(range?.startDate ?? null);
|
|
2724
|
+
setEndDate(range?.endDate ?? null);
|
|
2725
|
+
onChange?.({
|
|
2726
|
+
startDate: range?.startDate ?? null,
|
|
2727
|
+
endDate: range?.endDate ?? null,
|
|
2728
|
+
isInputValid: change.isInputValid,
|
|
2729
|
+
isInputEmpty: change.isInputEmpty
|
|
2730
|
+
});
|
|
2731
|
+
};
|
|
2732
|
+
const handleCalendarSelection = ({
|
|
2733
|
+
startDate: startDate2,
|
|
2734
|
+
endDate: endDate2
|
|
2735
|
+
}) => {
|
|
2736
|
+
setSharedValue({ startDate: startDate2, endDate: endDate2 });
|
|
2737
|
+
onChange?.({
|
|
2738
|
+
startDate: startDate2,
|
|
2739
|
+
endDate: endDate2,
|
|
2740
|
+
isInputValid: true,
|
|
2741
|
+
isInputEmpty: false
|
|
2742
|
+
});
|
|
2743
|
+
};
|
|
2744
|
+
return {
|
|
2745
|
+
startDate,
|
|
2746
|
+
endDate,
|
|
2747
|
+
setStartDate,
|
|
2748
|
+
setEndDate,
|
|
2749
|
+
handleInputChange,
|
|
2750
|
+
handleCalendarSelection
|
|
2751
|
+
};
|
|
2752
|
+
}
|
|
2753
|
+
|
|
2754
|
+
const DateFieldRangeCalendar = ({
|
|
2755
|
+
startDate,
|
|
2756
|
+
endDate,
|
|
2757
|
+
onKeyDown,
|
|
2758
|
+
onSelection,
|
|
2759
|
+
minDate,
|
|
2760
|
+
maxDate,
|
|
2761
|
+
unavailable
|
|
2762
|
+
}) => {
|
|
2763
|
+
const previousStartDate = usePrevious(startDate);
|
|
2764
|
+
const previousEndDate = usePrevious(endDate);
|
|
2765
|
+
const handleCalendarSelection = (data) => {
|
|
2766
|
+
if (!data.value) return;
|
|
2767
|
+
const calStartDate = data.value.start ? DateTime.fromISO(data.value.start, { zone: "utc" }) : null;
|
|
2768
|
+
const calEndDate = data.value.end ? DateTime.fromISO(data.value.end, { zone: "utc" }) : null;
|
|
2769
|
+
onSelection({
|
|
2770
|
+
startDate: calStartDate,
|
|
2771
|
+
endDate: calEndDate
|
|
2772
|
+
});
|
|
2773
|
+
};
|
|
2774
|
+
const defaultFocusedDate = useMemo(() => {
|
|
2775
|
+
if (!startDate && !endDate) return DateTime.now().toISODate();
|
|
2776
|
+
if (!startDate) return endDate?.toISODate();
|
|
2777
|
+
if (!endDate) return startDate?.toISODate();
|
|
2778
|
+
if (endDate && !previousEndDate?.equals(endDate)) {
|
|
2779
|
+
return endDate.toISODate();
|
|
2780
|
+
} else if (startDate && !previousStartDate?.equals(startDate)) {
|
|
2781
|
+
return startDate.toISODate();
|
|
2782
|
+
}
|
|
2783
|
+
if (endDate) return endDate.toISODate();
|
|
2784
|
+
if (startDate) return startDate.toISODate();
|
|
2785
|
+
return DateTime.now().toISODate();
|
|
2786
|
+
}, [previousStartDate, previousEndDate, startDate, endDate]);
|
|
2787
|
+
return /* @__PURE__ */ jsx(
|
|
2788
|
+
Calendar,
|
|
2789
|
+
{
|
|
2790
|
+
range: true,
|
|
2791
|
+
onKeyDown,
|
|
2792
|
+
defaultFocusedDate,
|
|
2793
|
+
value: {
|
|
2794
|
+
start: startDate?.toISODate() || void 0,
|
|
2795
|
+
end: endDate?.toISODate() || void 0
|
|
2796
|
+
},
|
|
2797
|
+
onSelection: handleCalendarSelection,
|
|
2798
|
+
defaultTimeZone: "UTC",
|
|
2799
|
+
minDate: minDate?.toISODate() ?? void 0,
|
|
2800
|
+
maxDate: maxDate?.toISODate() ?? void 0,
|
|
2801
|
+
unavailable: unavailable ? {
|
|
2802
|
+
dates: unavailable.dates?.map((d) => d.toISODate() ?? ""),
|
|
2803
|
+
daysOfWeek: unavailable.daysOfWeek
|
|
2804
|
+
} : void 0,
|
|
2805
|
+
_disableAutofocus: true
|
|
2806
|
+
},
|
|
2807
|
+
`${startDate?.toISODate()}-${endDate?.toISODate()}`
|
|
2808
|
+
);
|
|
2809
|
+
};
|
|
2810
|
+
|
|
2811
|
+
const DateFieldRange = ({
|
|
2812
|
+
onFocus,
|
|
2813
|
+
onBlur,
|
|
2814
|
+
disableCalendar,
|
|
2815
|
+
required,
|
|
2816
|
+
mode,
|
|
2817
|
+
...rest
|
|
2818
|
+
}) => {
|
|
2819
|
+
const { ref: wrapperRef } = useFocusWithin({
|
|
2820
|
+
onBlur,
|
|
2821
|
+
onFocus
|
|
2822
|
+
});
|
|
2823
|
+
const { value, defaultValue, minDate, maxDate, unavailable, onChange } = useDateFieldRangeConversion(rest);
|
|
2824
|
+
const inputRef = useRef(null);
|
|
2825
|
+
const [popoverTriggerRef, setPopoverTriggerRef] = useState();
|
|
2826
|
+
const popoverContentRef = useRef(null);
|
|
2827
|
+
const combinedRef = useMergeRefs([popoverTriggerRef, inputRef]);
|
|
2828
|
+
const popoverSupported = usePopoverSupport();
|
|
2829
|
+
const handleChange = (change) => {
|
|
2830
|
+
const sharedConstraints = {
|
|
2831
|
+
unavailable,
|
|
2832
|
+
minDate: minDate ?? void 0,
|
|
2833
|
+
maxDate: maxDate ?? void 0
|
|
2754
2834
|
};
|
|
2755
|
-
|
|
2756
|
-
|
|
2757
|
-
|
|
2758
|
-
|
|
2759
|
-
|
|
2760
|
-
|
|
2761
|
-
onChange: handleInputChange,
|
|
2762
|
-
disableHint: rest.disableHint,
|
|
2763
|
-
onKeyDown: handleInputKeyDown,
|
|
2764
|
-
onClick: () => setCalendarOpen(true),
|
|
2835
|
+
onChange?.({
|
|
2836
|
+
startDate: change.startDate?.startOf("day") ?? null,
|
|
2837
|
+
endDate: change.endDate?.startOf("day") ?? null,
|
|
2838
|
+
isInputValid: change.isInputValid,
|
|
2839
|
+
isInputEmpty: change.isInputEmpty,
|
|
2840
|
+
isDateRangeValid: validateDateRange({
|
|
2765
2841
|
required,
|
|
2766
|
-
|
|
2767
|
-
"
|
|
2768
|
-
|
|
2769
|
-
|
|
2842
|
+
startDate: change.startDate?.startOf("day") ?? null,
|
|
2843
|
+
endDate: change.endDate?.startOf("day") ?? null,
|
|
2844
|
+
startDateConstraints: sharedConstraints,
|
|
2845
|
+
endDateConstraints: sharedConstraints
|
|
2846
|
+
})
|
|
2847
|
+
});
|
|
2848
|
+
};
|
|
2849
|
+
const { startDate, endDate, handleInputChange, handleCalendarSelection } = useDateFieldRangeState({
|
|
2850
|
+
valueProp: value,
|
|
2851
|
+
defaultValueProp: defaultValue,
|
|
2852
|
+
inputRef,
|
|
2853
|
+
onChange: handleChange
|
|
2854
|
+
});
|
|
2855
|
+
const {
|
|
2856
|
+
calendarOpen,
|
|
2857
|
+
setCalendarOpen,
|
|
2858
|
+
handleCalendarKeyDown,
|
|
2859
|
+
handleInputKeyDown
|
|
2860
|
+
} = useDateFieldOrchestration({
|
|
2861
|
+
inputRef,
|
|
2862
|
+
calendarDefaultOpen: false,
|
|
2863
|
+
popoverContentRef,
|
|
2864
|
+
disableCalendar
|
|
2865
|
+
});
|
|
2866
|
+
const shouldShowCalendar = usePopoverCloseDelayWorkaround(calendarOpen);
|
|
2867
|
+
const currentValidity = useMemo(() => {
|
|
2868
|
+
return validateDateRange({
|
|
2869
|
+
required,
|
|
2870
|
+
startDate,
|
|
2871
|
+
endDate,
|
|
2872
|
+
startDateConstraints: {
|
|
2873
|
+
unavailable,
|
|
2874
|
+
minDate: minDate ?? void 0,
|
|
2875
|
+
maxDate: maxDate ?? void 0
|
|
2876
|
+
},
|
|
2877
|
+
endDateConstraints: {
|
|
2878
|
+
unavailable,
|
|
2879
|
+
minDate: minDate ?? void 0,
|
|
2880
|
+
maxDate: maxDate ?? void 0
|
|
2770
2881
|
}
|
|
2771
|
-
);
|
|
2772
|
-
|
|
2773
|
-
|
|
2774
|
-
|
|
2775
|
-
|
|
2776
|
-
|
|
2882
|
+
});
|
|
2883
|
+
}, [required, startDate, endDate, minDate, maxDate, unavailable]);
|
|
2884
|
+
const { defaultValue: _, ...passthroughProps } = rest;
|
|
2885
|
+
const justTheField = /* @__PURE__ */ jsx(
|
|
2886
|
+
MaskedDateRangeInput,
|
|
2887
|
+
{
|
|
2888
|
+
mode,
|
|
2889
|
+
ref: combinedRef,
|
|
2890
|
+
...passthroughProps,
|
|
2891
|
+
startDate: startDate ?? null,
|
|
2892
|
+
endDate: endDate ?? null,
|
|
2893
|
+
onChange: handleInputChange,
|
|
2894
|
+
disableHint: rest.disableHint,
|
|
2895
|
+
onKeyDown: handleInputKeyDown,
|
|
2896
|
+
onClick: () => setCalendarOpen(true),
|
|
2897
|
+
required,
|
|
2898
|
+
autoComplete: "off",
|
|
2899
|
+
"data-date-range-valid": currentValidity
|
|
2777
2900
|
}
|
|
2778
|
-
|
|
2779
|
-
|
|
2780
|
-
|
|
2781
|
-
open: calendarOpen,
|
|
2782
|
-
modal: true,
|
|
2783
|
-
placement: "bottom-start",
|
|
2784
|
-
disableFlipFallback: true,
|
|
2785
|
-
disableTriggerFocus: true,
|
|
2786
|
-
onClose: () => setCalendarOpen(false),
|
|
2787
|
-
disableAutoUpdate: true,
|
|
2788
|
-
onOutsidePress: () => setCalendarOpen(false),
|
|
2789
|
-
children: [
|
|
2790
|
-
/* @__PURE__ */ jsx(Popover.Trigger, { children: ({ ref: iRef }) => {
|
|
2791
|
-
setPopoverTriggerRef(iRef);
|
|
2792
|
-
return justTheField;
|
|
2793
|
-
} }),
|
|
2794
|
-
/* @__PURE__ */ jsx(Popover.Content, { ref: popoverContentRef, "data-testid": "calendar-popover", children: shouldShowCalendar && /* @__PURE__ */ jsx(
|
|
2795
|
-
Calendar,
|
|
2796
|
-
{
|
|
2797
|
-
range: true,
|
|
2798
|
-
onKeyDown: handleCalendarKeyDown,
|
|
2799
|
-
defaultFocusedDate,
|
|
2800
|
-
value: {
|
|
2801
|
-
start: startDate?.toISODate() || void 0,
|
|
2802
|
-
end: endDate?.toISODate() || void 0
|
|
2803
|
-
},
|
|
2804
|
-
onSelection: handleCalendarSelection,
|
|
2805
|
-
defaultTimeZone: "UTC",
|
|
2806
|
-
minDate: minDate?.toISODate() ?? void 0,
|
|
2807
|
-
maxDate: maxDate?.toISODate() ?? void 0,
|
|
2808
|
-
unavailable: unavailable ? {
|
|
2809
|
-
dates: unavailable.dates?.map((d) => d.toISODate() ?? ""),
|
|
2810
|
-
daysOfWeek: unavailable.daysOfWeek
|
|
2811
|
-
} : void 0,
|
|
2812
|
-
_disableAutofocus: true
|
|
2813
|
-
},
|
|
2814
|
-
`${startDate?.toISODate()}-${endDate?.toISODate()}`
|
|
2815
|
-
) })
|
|
2816
|
-
]
|
|
2817
|
-
}
|
|
2818
|
-
);
|
|
2901
|
+
);
|
|
2902
|
+
if (disableCalendar) {
|
|
2903
|
+
return justTheField;
|
|
2819
2904
|
}
|
|
2820
|
-
)
|
|
2821
|
-
|
|
2905
|
+
if (!popoverSupported) {
|
|
2906
|
+
return justTheField;
|
|
2907
|
+
}
|
|
2908
|
+
return /* @__PURE__ */ jsx("div", { ref: wrapperRef, children: /* @__PURE__ */ jsxs(
|
|
2909
|
+
Popover,
|
|
2910
|
+
{
|
|
2911
|
+
open: calendarOpen,
|
|
2912
|
+
modal: true,
|
|
2913
|
+
placement: "bottom-start",
|
|
2914
|
+
disableFlipFallback: true,
|
|
2915
|
+
disableTriggerFocus: true,
|
|
2916
|
+
onClose: () => setCalendarOpen(false),
|
|
2917
|
+
disableAutoUpdate: true,
|
|
2918
|
+
onOutsidePress: () => setCalendarOpen(false),
|
|
2919
|
+
children: [
|
|
2920
|
+
/* @__PURE__ */ jsx(Popover.Trigger, { children: ({ ref: iRef }) => {
|
|
2921
|
+
setPopoverTriggerRef(iRef);
|
|
2922
|
+
return justTheField;
|
|
2923
|
+
} }),
|
|
2924
|
+
/* @__PURE__ */ jsx(Popover.Content, { ref: popoverContentRef, "data-testid": "calendar-popover", children: shouldShowCalendar && /* @__PURE__ */ jsx(
|
|
2925
|
+
DateFieldRangeCalendar,
|
|
2926
|
+
{
|
|
2927
|
+
startDate,
|
|
2928
|
+
endDate,
|
|
2929
|
+
onKeyDown: handleCalendarKeyDown,
|
|
2930
|
+
onSelection: handleCalendarSelection,
|
|
2931
|
+
minDate,
|
|
2932
|
+
maxDate,
|
|
2933
|
+
unavailable
|
|
2934
|
+
}
|
|
2935
|
+
) })
|
|
2936
|
+
]
|
|
2937
|
+
}
|
|
2938
|
+
) });
|
|
2939
|
+
};
|
|
2940
|
+
DateFieldRange.displayName = "DateFieldRange";
|
|
2822
2941
|
function validateDateRange({
|
|
2823
2942
|
required,
|
|
2824
2943
|
startDate,
|
|
@@ -2836,81 +2955,6 @@ function validateDateRange({
|
|
|
2836
2955
|
}) && (!startDate || !endDate || startDate <= endDate);
|
|
2837
2956
|
}
|
|
2838
2957
|
|
|
2839
|
-
const DateFieldRange = ({
|
|
2840
|
-
value,
|
|
2841
|
-
defaultValue,
|
|
2842
|
-
minDate,
|
|
2843
|
-
maxDate,
|
|
2844
|
-
unavailable,
|
|
2845
|
-
onChange,
|
|
2846
|
-
onFocus,
|
|
2847
|
-
onBlur,
|
|
2848
|
-
...rest
|
|
2849
|
-
}) => {
|
|
2850
|
-
const handleBlur = useCallback(
|
|
2851
|
-
(event) => {
|
|
2852
|
-
onBlur?.(event);
|
|
2853
|
-
},
|
|
2854
|
-
[onBlur]
|
|
2855
|
-
);
|
|
2856
|
-
const handleFocus = useCallback(
|
|
2857
|
-
(event) => {
|
|
2858
|
-
onFocus?.(event);
|
|
2859
|
-
},
|
|
2860
|
-
[onFocus]
|
|
2861
|
-
);
|
|
2862
|
-
const { ref: wrapperRef } = useFocusWithin({
|
|
2863
|
-
onBlur: handleBlur,
|
|
2864
|
-
onFocus: handleFocus
|
|
2865
|
-
});
|
|
2866
|
-
const normalizedValue = useMemo(
|
|
2867
|
-
() => value !== void 0 ? {
|
|
2868
|
-
startDate: convertStringToDate(value?.startDate ?? null) ?? null,
|
|
2869
|
-
endDate: convertStringToDate(value?.endDate ?? null) ?? null
|
|
2870
|
-
} : void 0,
|
|
2871
|
-
[value]
|
|
2872
|
-
);
|
|
2873
|
-
const normalizedDefaultValue = useMemo(
|
|
2874
|
-
() => defaultValue !== void 0 ? {
|
|
2875
|
-
startDate: convertStringToDate(defaultValue?.startDate ?? null) ?? null,
|
|
2876
|
-
endDate: convertStringToDate(defaultValue?.endDate ?? null) ?? null
|
|
2877
|
-
} : void 0,
|
|
2878
|
-
[defaultValue]
|
|
2879
|
-
);
|
|
2880
|
-
const normalizedMinDate = useMemo(
|
|
2881
|
-
() => convertStringToDate(minDate),
|
|
2882
|
-
[minDate]
|
|
2883
|
-
);
|
|
2884
|
-
const normalizedMaxDate = useMemo(
|
|
2885
|
-
() => convertStringToDate(maxDate),
|
|
2886
|
-
[maxDate]
|
|
2887
|
-
);
|
|
2888
|
-
const normalizedUnavailableDates = useMemo(
|
|
2889
|
-
() => unavailable?.dates?.map((d) => convertStringToDate(d)).filter((d) => d !== null && d !== void 0),
|
|
2890
|
-
[unavailable?.dates]
|
|
2891
|
-
);
|
|
2892
|
-
const handleChange = useConditionalChange({
|
|
2893
|
-
changeHandler: onChange,
|
|
2894
|
-
compareFn: (a, b) => a.isInputValid !== b.isInputValid || a.isInputEmpty !== b.isInputEmpty || a.isDateRangeValid !== b.isDateRangeValid || a.startDate !== b.startDate || a.endDate !== b.endDate
|
|
2895
|
-
});
|
|
2896
|
-
return /* @__PURE__ */ jsx("div", { ref: wrapperRef, children: /* @__PURE__ */ jsx(
|
|
2897
|
-
NormalizedDateFieldRange,
|
|
2898
|
-
{
|
|
2899
|
-
...rest,
|
|
2900
|
-
value: normalizedValue,
|
|
2901
|
-
defaultValue: normalizedDefaultValue,
|
|
2902
|
-
minDate: normalizedMinDate,
|
|
2903
|
-
maxDate: normalizedMaxDate,
|
|
2904
|
-
unavailable: unavailable ? {
|
|
2905
|
-
dates: normalizedUnavailableDates,
|
|
2906
|
-
daysOfWeek: unavailable?.daysOfWeek
|
|
2907
|
-
} : void 0,
|
|
2908
|
-
onChange: handleChange
|
|
2909
|
-
}
|
|
2910
|
-
) });
|
|
2911
|
-
};
|
|
2912
|
-
DateFieldRange.displayName = "DateFieldRange";
|
|
2913
|
-
|
|
2914
2958
|
const yearlessDatePlaceholderMask = ({
|
|
2915
2959
|
mode,
|
|
2916
2960
|
separator = "/",
|
|
@@ -3060,6 +3104,24 @@ function stringifyYearlessDate(day, month, mode) {
|
|
|
3060
3104
|
return `${mm}/${dd}`;
|
|
3061
3105
|
}
|
|
3062
3106
|
|
|
3107
|
+
const useConditionalChange = ({
|
|
3108
|
+
changeHandler,
|
|
3109
|
+
compareFn
|
|
3110
|
+
}) => {
|
|
3111
|
+
const lastChangeRef = useRef(null);
|
|
3112
|
+
const onChange = useCallback(
|
|
3113
|
+
(change) => {
|
|
3114
|
+
if (!!lastChangeRef.current && !compareFn(lastChangeRef.current, change)) {
|
|
3115
|
+
return;
|
|
3116
|
+
}
|
|
3117
|
+
changeHandler?.(change);
|
|
3118
|
+
lastChangeRef.current = change;
|
|
3119
|
+
},
|
|
3120
|
+
[changeHandler, compareFn]
|
|
3121
|
+
);
|
|
3122
|
+
return onChange;
|
|
3123
|
+
};
|
|
3124
|
+
|
|
3063
3125
|
const DateFieldYearless = ({
|
|
3064
3126
|
value: valueProp,
|
|
3065
3127
|
defaultValue: defaultValueProp,
|
|
@@ -3122,4 +3184,4 @@ const DateFieldYearless = ({
|
|
|
3122
3184
|
DateFieldYearless.displayName = "DateFieldYearless";
|
|
3123
3185
|
|
|
3124
3186
|
export { DateFieldRange as D, DateFieldSingle as a, DateFieldYearless as b };
|
|
3125
|
-
//# sourceMappingURL=DateFieldYearless-
|
|
3187
|
+
//# sourceMappingURL=DateFieldYearless-M5KDI_hn-akXtkIZA.js.map
|