@servicetitan/anvil2 1.40.3 → 1.41.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 +23 -0
- package/dist/{Calendar-KVYGk3wS-CEptqxjI.js → Calendar-CNrdcd3f-BAKv-Gz3.js} +6 -4
- package/dist/{Calendar-KVYGk3wS-CEptqxjI.js.map → Calendar-CNrdcd3f-BAKv-Gz3.js.map} +1 -1
- package/dist/{Calendar-2q8zRbMK.js → Calendar-MIwfKzm7.js} +2 -2
- package/dist/{Calendar-2q8zRbMK.js.map → Calendar-MIwfKzm7.js.map} +1 -1
- package/dist/Calendar.js +1 -1
- package/dist/{Checkbox-cfgZP7Z2.js → Checkbox-IPM-sdvR.js} +2 -2
- package/dist/{Checkbox-cfgZP7Z2.js.map → Checkbox-IPM-sdvR.js.map} +1 -1
- package/dist/{Checkbox-Qucv_PK8-Bovwdnlj.js → Checkbox-JWDraGFN--7ptfLKN.js} +2 -2
- package/dist/{Checkbox-Qucv_PK8-Bovwdnlj.js.map → Checkbox-JWDraGFN--7ptfLKN.js.map} +1 -1
- package/dist/Checkbox.js +1 -1
- package/dist/{Combobox-3l2SK47T.js → Combobox-CM8DmNMs.js} +4 -4
- package/dist/{Combobox-3l2SK47T.js.map → Combobox-CM8DmNMs.js.map} +1 -1
- package/dist/Combobox.js +1 -1
- package/dist/{DateField-BQFAvS78.js → DateField-BDJEsVc1.js} +8 -8
- package/dist/{DateField-BQFAvS78.js.map → DateField-BDJEsVc1.js.map} +1 -1
- package/dist/DateField.js +1 -1
- package/dist/{DateFieldRange-CGA5ZTRa.js → DateFieldRange-BTq6MrNu.js} +2 -2
- package/dist/DateFieldRange-BTq6MrNu.js.map +1 -0
- package/dist/DateFieldRange.js +1 -1
- package/dist/{DateFieldSingle-eP5l_TrQ.js → DateFieldSingle-CaeOLrI4.js} +2 -2
- package/dist/DateFieldSingle-CaeOLrI4.js.map +1 -0
- package/dist/DateFieldSingle.js +1 -1
- package/dist/{DateFieldRange-BRjBcR4r-CfuSiOfZ.js → DateFieldYearless-CJP3H_Dg-BV5wGJp1.js} +257 -17
- package/dist/DateFieldYearless-CJP3H_Dg-BV5wGJp1.js.map +1 -0
- package/dist/DateFieldYearless-CbFo3oyZ.js +22 -0
- package/dist/DateFieldYearless-CbFo3oyZ.js.map +1 -0
- package/dist/DateFieldYearless.d.ts +2 -0
- package/dist/DateFieldYearless.js +2 -0
- package/dist/DateFieldYearless.js.map +1 -0
- package/dist/{DaysOfTheWeek-Dl31wkmU.js → DaysOfTheWeek-8zaAuw55.js} +2 -2
- package/dist/{DaysOfTheWeek-Dl31wkmU.js.map → DaysOfTheWeek-8zaAuw55.js.map} +1 -1
- package/dist/DaysOfTheWeek.js +1 -1
- package/dist/{Dialog-CJZEBa5r.js → Dialog-DnZE02ob.js} +9 -5
- package/dist/Dialog-DnZE02ob.js.map +1 -0
- package/dist/Dialog.js +1 -1
- package/dist/{Drawer-Cj3nJc4k.js → Drawer-5kgL0gY9.js} +2 -2
- package/dist/{Drawer-Cj3nJc4k.js.map → Drawer-5kgL0gY9.js.map} +1 -1
- package/dist/Drawer.js +1 -1
- package/dist/FieldLabel-D5rNXy6h.js +13 -0
- package/dist/FieldLabel-D5rNXy6h.js.map +1 -0
- package/dist/FieldLabel.d.ts +6 -0
- package/dist/FieldLabel.js +2 -0
- package/dist/FieldLabel.js.map +1 -0
- package/dist/{InputMask-BdLGTTAk.js → InputMask-B6kMdXCB.js} +2 -2
- package/dist/{InputMask-BdLGTTAk.js.map → InputMask-B6kMdXCB.js.map} +1 -1
- package/dist/{InputMask-Hn-xudp1-BKhtZ7Zk.js → InputMask-BLZh7hka-CTcRCY2k.js} +2 -2
- package/dist/{InputMask-Hn-xudp1-BKhtZ7Zk.js.map → InputMask-BLZh7hka-CTcRCY2k.js.map} +1 -1
- package/dist/InputMask.js +1 -1
- package/dist/{ListView-_YFTewqc.js → ListView-cMMBtp1O.js} +3 -3
- package/dist/{ListView-_YFTewqc.js.map → ListView-cMMBtp1O.js.map} +1 -1
- package/dist/ListView.js +1 -1
- package/dist/{Menu-CffX1bPZ-BeEOvryY.js → Menu-CAiyc2zk-rxU7H28t.js} +3 -3
- package/dist/{Menu-CffX1bPZ-BeEOvryY.js.map → Menu-CAiyc2zk-rxU7H28t.js.map} +1 -1
- package/dist/{Menu-1EwVMNIw.js → Menu-Dk3ESnzI.js} +2 -2
- package/dist/{Menu-1EwVMNIw.js.map → Menu-Dk3ESnzI.js.map} +1 -1
- package/dist/Menu.js +1 -1
- package/dist/{Page-BikjTlTM.js → Page-DWeD3rrr.js} +5 -5
- package/dist/{Page-BikjTlTM.js.map → Page-DWeD3rrr.js.map} +1 -1
- package/dist/Page.js +1 -1
- package/dist/Pagination.js +1 -1
- package/dist/Pagination.js.map +1 -1
- package/dist/{Popover-rB4BVx-A.js → Popover-2O1Q-34V.js} +2 -2
- package/dist/{Popover-rB4BVx-A.js.map → Popover-2O1Q-34V.js.map} +1 -1
- package/dist/{Popover-jcmNuir0-DjlCqU1z.js → Popover-DvLcjLjG-Yu5STx-v.js} +77 -14
- package/dist/Popover-DvLcjLjG-Yu5STx-v.js.map +1 -0
- package/dist/Popover.js +1 -1
- package/dist/{ProgressBar-CzXzPpIX-Clg1J71o.js → ProgressBar-BezETeA3-CeeedJ_w.js} +49 -15
- package/dist/ProgressBar-BezETeA3-CeeedJ_w.js.map +1 -0
- package/dist/{ProgressBar-BL34rg_J.js → ProgressBar-CfstmN5D.js} +2 -2
- package/dist/{ProgressBar-BL34rg_J.js.map → ProgressBar-CfstmN5D.js.map} +1 -1
- package/dist/ProgressBar.js +1 -1
- package/dist/{Radio-BnOSIK1U-1MmGQFPi.js → Radio-8E1l0DJa-CLVaSyQc.js} +3 -3
- package/dist/{Radio-BnOSIK1U-1MmGQFPi.js.map → Radio-8E1l0DJa-CLVaSyQc.js.map} +1 -1
- package/dist/{Radio-BzZUxQa6.js → Radio-P6dkI3W0.js} +2 -2
- package/dist/{Radio-BzZUxQa6.js.map → Radio-P6dkI3W0.js.map} +1 -1
- package/dist/Radio.js +1 -1
- package/dist/{SelectCard-ynL5QcZD-BtBzMtyR.js → SelectCard-m61WUlo--DlByowef.js} +4 -4
- package/dist/{SelectCard-ynL5QcZD-BtBzMtyR.js.map → SelectCard-m61WUlo--DlByowef.js.map} +1 -1
- package/dist/SelectCard.js +1 -1
- package/dist/{SelectCardGroup-D6GuJJB2.js → SelectCardGroup-DIaWX2Vp.js} +2 -2
- package/dist/{SelectCardGroup-D6GuJJB2.js.map → SelectCardGroup-DIaWX2Vp.js.map} +1 -1
- package/dist/{SelectTrigger-Bo2VPAD0.js → SelectTrigger-DKh0Bzy6.js} +2 -2
- package/dist/{SelectTrigger-Bo2VPAD0.js.map → SelectTrigger-DKh0Bzy6.js.map} +1 -1
- package/dist/SelectTrigger.js +1 -1
- package/dist/{SelectTriggerBase-BGHwx0mN-B3HiW5tQ.js → SelectTriggerBase-DnRvuD3R-CTFWVZhY.js} +3 -3
- package/dist/{SelectTriggerBase-BGHwx0mN-B3HiW5tQ.js.map → SelectTriggerBase-DnRvuD3R-CTFWVZhY.js.map} +1 -1
- package/dist/{TextField-COXABNrR.js → TextField--tytNBLh.js} +2 -2
- package/dist/{TextField-COXABNrR.js.map → TextField--tytNBLh.js.map} +1 -1
- package/dist/{TextField-BIeCvDD--C7yp05g5.js → TextField-D_fqJf85-Bcd6rWv4.js} +2 -2
- package/dist/{TextField-BIeCvDD--C7yp05g5.js.map → TextField-D_fqJf85-Bcd6rWv4.js.map} +1 -1
- package/dist/TextField.js +1 -1
- package/dist/{Textarea-D6K3Jc5_.js → Textarea-B0nZ9vOV.js} +2 -2
- package/dist/{Textarea-D6K3Jc5_.js.map → Textarea-B0nZ9vOV.js.map} +1 -1
- package/dist/Textarea.js +1 -1
- package/dist/Toast.js +1 -1
- package/dist/{Toolbar-CLsgDAKk.js → Toolbar-BM78DEEM.js} +3 -3
- package/dist/{Toolbar-CLsgDAKk.js.map → Toolbar-BM78DEEM.js.map} +1 -1
- package/dist/Toolbar.js +1 -1
- package/dist/{Tooltip-B_swJyoW.js → Tooltip-ZFFXA77Y.js} +2 -2
- package/dist/{Tooltip-B_swJyoW.js.map → Tooltip-ZFFXA77Y.js.map} +1 -1
- package/dist/Tooltip.js +1 -1
- package/dist/components/DateFieldRange/DateFieldRange.d.ts +4 -1
- package/dist/components/DateFieldRange/index.d.ts +1 -2
- package/dist/components/DateFieldSingle/DateFieldSingle.d.ts +3 -1
- package/dist/components/DateFieldSingle/index.d.ts +1 -2
- package/dist/components/DateFieldYearless/DateFieldYearless.d.ts +62 -0
- package/dist/components/DateFieldYearless/index.d.ts +1 -0
- package/dist/components/Dialog/Dialog.d.ts +1 -1
- package/dist/components/Drawer/Drawer.d.ts +1 -1
- package/dist/components/FieldLabel/FieldLabel.d.ts +8 -0
- package/dist/components/FieldLabel/index.d.ts +2 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/index.js +25 -23
- package/dist/index.js.map +1 -1
- package/dist/{toast-CJSBieY0.js → toast-uADTqqrS.js} +2 -2
- package/dist/{toast-CJSBieY0.js.map → toast-uADTqqrS.js.map} +1 -1
- package/package.json +3 -3
- package/dist/DateFieldRange-BRjBcR4r-CfuSiOfZ.js.map +0 -1
- package/dist/DateFieldRange-CGA5ZTRa.js.map +0 -1
- package/dist/DateFieldSingle-eP5l_TrQ.js.map +0 -1
- package/dist/Dialog-CJZEBa5r.js.map +0 -1
- package/dist/Popover-jcmNuir0-DjlCqU1z.js.map +0 -1
- package/dist/ProgressBar-CzXzPpIX-Clg1J71o.js.map +0 -1
- /package/dist/{Calendar-KVYGk3wS.css → Calendar-CNrdcd3f.css} +0 -0
- /package/dist/{Menu-CffX1bPZ.css → Menu-CAiyc2zk.css} +0 -0
- /package/dist/{Popover-jcmNuir0.css → Popover-DvLcjLjG.css} +0 -0
- /package/dist/{ProgressBar-CzXzPpIX.css → ProgressBar-BezETeA3.css} +0 -0
- /package/dist/{Radio-BnOSIK1U.css → Radio-8E1l0DJa.css} +0 -0
- /package/dist/{SelectCard-ynL5QcZD.css → SelectCard-m61WUlo-.css} +0 -0
- /package/dist/{SelectTriggerBase-BGHwx0mN.css → SelectTriggerBase-DnRvuD3R.css} +0 -0
|
@@ -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 { D as DateTime, f as Calendar } from './Calendar-
|
|
4
|
-
import { T as TextField } from './TextField-
|
|
3
|
+
import { D as DateTime, f as Calendar } from './Calendar-CNrdcd3f-BAKv-Gz3.js';
|
|
4
|
+
import { T as TextField } from './TextField-D_fqJf85-Bcd6rWv4.js';
|
|
5
5
|
import { u as useMergeRefs$1 } from './floating-ui.react-BFNinq1w.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-
|
|
8
|
+
import { d as Popover } from './Popover-DvLcjLjG-Yu5STx-v.js';
|
|
9
9
|
import { u as useMergeRefs } from './useMergeRefs-Bde85AWI-Bde85AWI.js';
|
|
10
10
|
import { u as useOptionallyControlledState } from './useOptionallyControlledState-DAv5LXXh-DAv5LXXh.js';
|
|
11
|
-
import { s as supportsPopover, u as useKeyboardFocusables } from './ProgressBar-
|
|
11
|
+
import { s as supportsPopover, u as useKeyboardFocusables } from './ProgressBar-BezETeA3-CeeedJ_w.js';
|
|
12
12
|
|
|
13
13
|
function getContentEditableSelection(element) {
|
|
14
14
|
const { anchorOffset = 0, focusOffset = 0 } = element.ownerDocument.getSelection() || {};
|
|
@@ -1887,7 +1887,7 @@ const MaskedDateInput = forwardRef(
|
|
|
1887
1887
|
useEffect(() => {
|
|
1888
1888
|
if (mode !== previousMode) {
|
|
1889
1889
|
setInputValue(
|
|
1890
|
-
(oldInputValue) => swapMode$
|
|
1890
|
+
(oldInputValue) => swapMode$2(oldInputValue, previousMode ?? mode, mode)
|
|
1891
1891
|
);
|
|
1892
1892
|
}
|
|
1893
1893
|
}, [mode, previousMode]);
|
|
@@ -1902,11 +1902,11 @@ const MaskedDateInput = forwardRef(
|
|
|
1902
1902
|
}
|
|
1903
1903
|
}, [lastValidDate, mode, placeholder]);
|
|
1904
1904
|
const currentParsedData = useMemo(() => {
|
|
1905
|
-
return parseInputValue(inputValue, mode, removePlaceholder);
|
|
1905
|
+
return parseInputValue$1(inputValue, mode, removePlaceholder);
|
|
1906
1906
|
}, [inputValue, mode, removePlaceholder]);
|
|
1907
1907
|
const handleChange = (event) => {
|
|
1908
1908
|
setInputValue(event.target.value);
|
|
1909
|
-
const { date, isInputValid, isInputEmpty } = parseInputValue(
|
|
1909
|
+
const { date, isInputValid, isInputEmpty } = parseInputValue$1(
|
|
1910
1910
|
event.target.value,
|
|
1911
1911
|
mode,
|
|
1912
1912
|
removePlaceholder
|
|
@@ -1941,13 +1941,13 @@ const MaskedDateInput = forwardRef(
|
|
|
1941
1941
|
value: inputValue,
|
|
1942
1942
|
onChange: handleChange,
|
|
1943
1943
|
prefix: /* @__PURE__ */ jsx(Icon, { svg: SvgEvent }),
|
|
1944
|
-
hint: disableHint ? void 0 : `
|
|
1944
|
+
hint: disableHint ? void 0 : `Format: ${mode}`
|
|
1945
1945
|
}
|
|
1946
1946
|
);
|
|
1947
1947
|
}
|
|
1948
1948
|
);
|
|
1949
1949
|
MaskedDateInput.displayName = "MaskedDateInput";
|
|
1950
|
-
function parseInputValue(value, mode, removePlaceholder) {
|
|
1950
|
+
function parseInputValue$1(value, mode, removePlaceholder) {
|
|
1951
1951
|
const valueMinusPlaceholder = removePlaceholder(value);
|
|
1952
1952
|
const jsDate = maskitoParseDate(valueMinusPlaceholder, { mode });
|
|
1953
1953
|
const luxonDate = jsDate ? DateTime.fromJSDate(jsDate, { zone: "utc" }) : null;
|
|
@@ -1957,11 +1957,11 @@ function parseInputValue(value, mode, removePlaceholder) {
|
|
|
1957
1957
|
isInputEmpty: valueMinusPlaceholder === ""
|
|
1958
1958
|
};
|
|
1959
1959
|
}
|
|
1960
|
-
function swapMode$
|
|
1961
|
-
const { day, month, year } = divideSegments(inputString, previousMode);
|
|
1960
|
+
function swapMode$2(inputString, previousMode, mode) {
|
|
1961
|
+
const { day, month, year } = divideSegments$1(inputString, previousMode);
|
|
1962
1962
|
return orderSegmentsByMode(day, month, year, mode);
|
|
1963
1963
|
}
|
|
1964
|
-
function divideSegments(value, mode) {
|
|
1964
|
+
function divideSegments$1(value, mode) {
|
|
1965
1965
|
const [segment1, segment2, segment3] = value.split("/");
|
|
1966
1966
|
if (mode === "dd/mm/yyyy") {
|
|
1967
1967
|
return { day: segment1, month: segment2, year: segment3 };
|
|
@@ -2104,6 +2104,36 @@ function validateDate({
|
|
|
2104
2104
|
}
|
|
2105
2105
|
return true;
|
|
2106
2106
|
}
|
|
2107
|
+
function validateYearlessDate({
|
|
2108
|
+
value,
|
|
2109
|
+
constraints
|
|
2110
|
+
}) {
|
|
2111
|
+
const { required, unavailable, minDate, maxDate } = constraints;
|
|
2112
|
+
if (!value || !value?.day && !value?.month) {
|
|
2113
|
+
return required ? false : true;
|
|
2114
|
+
}
|
|
2115
|
+
if (value.day === null || value.month === null) {
|
|
2116
|
+
return false;
|
|
2117
|
+
}
|
|
2118
|
+
if (unavailable?.dates?.some(
|
|
2119
|
+
(d) => d.day === value.day && d.month === value.month
|
|
2120
|
+
)) {
|
|
2121
|
+
return false;
|
|
2122
|
+
}
|
|
2123
|
+
const minDateMonth = minDate?.month ?? 1;
|
|
2124
|
+
const minDateDay = minDate?.day ?? 1;
|
|
2125
|
+
const maxDateMonth = maxDate?.month ?? 12;
|
|
2126
|
+
const maxDateDay = maxDate?.day ?? 31;
|
|
2127
|
+
if (value.month < minDateMonth || // Earlier month
|
|
2128
|
+
value.month === minDateMonth && value.day < minDateDay) {
|
|
2129
|
+
return false;
|
|
2130
|
+
}
|
|
2131
|
+
if (value.month > maxDateMonth || // Later month
|
|
2132
|
+
value.month === maxDateMonth && value.day > maxDateDay) {
|
|
2133
|
+
return false;
|
|
2134
|
+
}
|
|
2135
|
+
return true;
|
|
2136
|
+
}
|
|
2107
2137
|
|
|
2108
2138
|
const NormalizedDateFieldSingle = forwardRef(
|
|
2109
2139
|
({
|
|
@@ -2458,7 +2488,7 @@ const MaskedDateRangeInput = forwardRef(
|
|
|
2458
2488
|
useEffect(() => {
|
|
2459
2489
|
if (mode !== previousMode) {
|
|
2460
2490
|
setInputValue(
|
|
2461
|
-
(previousInputValue) => swapMode(previousInputValue, previousMode ?? mode, mode)
|
|
2491
|
+
(previousInputValue) => swapMode$1(previousInputValue, previousMode ?? mode, mode)
|
|
2462
2492
|
);
|
|
2463
2493
|
}
|
|
2464
2494
|
}, [mode, fullPlaceholder, previousMode]);
|
|
@@ -2530,7 +2560,7 @@ const MaskedDateRangeInput = forwardRef(
|
|
|
2530
2560
|
value: inputValue,
|
|
2531
2561
|
onChange: handleChange,
|
|
2532
2562
|
prefix: /* @__PURE__ */ jsx(Icon, { svg: SvgEvent }),
|
|
2533
|
-
hint: disableHint ? void 0 : `
|
|
2563
|
+
hint: disableHint ? void 0 : `Format: ${mode}`
|
|
2534
2564
|
}
|
|
2535
2565
|
);
|
|
2536
2566
|
}
|
|
@@ -2553,7 +2583,7 @@ function parseRangeInputValue(value, mode, removePlaceholder) {
|
|
|
2553
2583
|
isHalfEmpty: endDate === void 0
|
|
2554
2584
|
};
|
|
2555
2585
|
}
|
|
2556
|
-
function swapMode(inputString, previousMode, mode) {
|
|
2586
|
+
function swapMode$1(inputString, previousMode, mode) {
|
|
2557
2587
|
const halves = inputString.split(RANGE_SEPARATOR);
|
|
2558
2588
|
const segments = halves.map((half) => half.split("/"));
|
|
2559
2589
|
let startDay, startMonth, startYear, endDay, endMonth, endYear;
|
|
@@ -2881,5 +2911,215 @@ const DateFieldRange = ({
|
|
|
2881
2911
|
};
|
|
2882
2912
|
DateFieldRange.displayName = "DateFieldRange";
|
|
2883
2913
|
|
|
2884
|
-
|
|
2885
|
-
|
|
2914
|
+
const yearlessDatePlaceholderMask = ({
|
|
2915
|
+
mode,
|
|
2916
|
+
separator = "/",
|
|
2917
|
+
placeholder
|
|
2918
|
+
}) => {
|
|
2919
|
+
const dateOptions = maskitoDateOptionsGenerator({
|
|
2920
|
+
mode,
|
|
2921
|
+
separator
|
|
2922
|
+
});
|
|
2923
|
+
const { plugins, removePlaceholder, ...placeholderOptions } = maskitoWithPlaceholder(placeholder);
|
|
2924
|
+
const datePlaceholderMask = {
|
|
2925
|
+
...dateOptions,
|
|
2926
|
+
plugins: plugins.concat(dateOptions.plugins || []),
|
|
2927
|
+
preprocessors: [
|
|
2928
|
+
...placeholderOptions.preprocessors,
|
|
2929
|
+
...dateOptions.preprocessors,
|
|
2930
|
+
makeZeroShortcutPreprocessor(mode, separator)
|
|
2931
|
+
],
|
|
2932
|
+
postprocessors: [
|
|
2933
|
+
...dateOptions.postprocessors,
|
|
2934
|
+
...placeholderOptions.postprocessors
|
|
2935
|
+
]
|
|
2936
|
+
};
|
|
2937
|
+
return { options: datePlaceholderMask, removePlaceholder };
|
|
2938
|
+
};
|
|
2939
|
+
|
|
2940
|
+
const MaskedYearlessDateInput = forwardRef(({ onChange, mode = "mm/dd", value, disableHint = false, ...props }, ref) => {
|
|
2941
|
+
const placeholder = "__/__";
|
|
2942
|
+
const [inputValue, setInputValue] = useState(placeholder);
|
|
2943
|
+
const { options, removePlaceholder } = yearlessDatePlaceholderMask({
|
|
2944
|
+
mode,
|
|
2945
|
+
placeholder
|
|
2946
|
+
});
|
|
2947
|
+
const maskedInputRef = useMaskito({ options });
|
|
2948
|
+
const inputRef = useRef(null);
|
|
2949
|
+
const combinedRef = useMergeRefs$1([maskedInputRef, inputRef, ref]);
|
|
2950
|
+
const previousValue = usePrevious(value);
|
|
2951
|
+
const previousMode = usePrevious(mode);
|
|
2952
|
+
useEffect(() => {
|
|
2953
|
+
if (mode !== previousMode) {
|
|
2954
|
+
setInputValue(
|
|
2955
|
+
(oldInputValue) => swapMode(oldInputValue, previousMode ?? mode, mode)
|
|
2956
|
+
);
|
|
2957
|
+
}
|
|
2958
|
+
}, [mode, previousMode]);
|
|
2959
|
+
useEffect(() => {
|
|
2960
|
+
if (previousValue?.day !== value?.day || previousValue?.month !== value?.month) {
|
|
2961
|
+
if (value?.day && value?.month) {
|
|
2962
|
+
setInputValue(stringifyYearlessDate(value.day, value.month, mode));
|
|
2963
|
+
} else if (previousValue !== null && previousValue !== void 0 && (value === null || value?.day === null && value?.month === null)) {
|
|
2964
|
+
setInputValue(placeholder);
|
|
2965
|
+
} else {
|
|
2966
|
+
return;
|
|
2967
|
+
}
|
|
2968
|
+
}
|
|
2969
|
+
}, [value, mode, previousValue]);
|
|
2970
|
+
const currentParsedData = useMemo(() => {
|
|
2971
|
+
return parseInputValue(inputValue, mode, removePlaceholder);
|
|
2972
|
+
}, [inputValue, mode, removePlaceholder]);
|
|
2973
|
+
const handleChange = (event) => {
|
|
2974
|
+
setInputValue(event.target.value);
|
|
2975
|
+
const {
|
|
2976
|
+
value: v,
|
|
2977
|
+
isInputValid,
|
|
2978
|
+
isInputEmpty
|
|
2979
|
+
} = parseInputValue(event.target.value, mode, removePlaceholder);
|
|
2980
|
+
onChange?.({
|
|
2981
|
+
event,
|
|
2982
|
+
value: v ?? currentParsedData.value ?? null,
|
|
2983
|
+
isInputValid,
|
|
2984
|
+
isInputEmpty
|
|
2985
|
+
});
|
|
2986
|
+
};
|
|
2987
|
+
useImperativeHandle(ref, () => {
|
|
2988
|
+
const input = inputRef.current;
|
|
2989
|
+
if (!input) return null;
|
|
2990
|
+
return Object.assign(input, {
|
|
2991
|
+
setValue: (value2) => {
|
|
2992
|
+
if (!value2) {
|
|
2993
|
+
setInputValue(placeholder);
|
|
2994
|
+
return;
|
|
2995
|
+
}
|
|
2996
|
+
setInputValue(
|
|
2997
|
+
stringifyYearlessDate(value2.day ?? 1, value2.month ?? 1, mode)
|
|
2998
|
+
);
|
|
2999
|
+
}
|
|
3000
|
+
});
|
|
3001
|
+
}, [mode, placeholder]);
|
|
3002
|
+
return /* @__PURE__ */ jsx(
|
|
3003
|
+
TextField,
|
|
3004
|
+
{
|
|
3005
|
+
ref: combinedRef,
|
|
3006
|
+
"data-month-value": value?.month,
|
|
3007
|
+
"data-day-value": value?.day,
|
|
3008
|
+
"data-input-valid": currentParsedData.isInputValid,
|
|
3009
|
+
"data-input-empty": currentParsedData.isInputEmpty,
|
|
3010
|
+
...props,
|
|
3011
|
+
showCounter: false,
|
|
3012
|
+
value: inputValue,
|
|
3013
|
+
onChange: handleChange,
|
|
3014
|
+
hint: disableHint ? void 0 : `Format: ${mode}`
|
|
3015
|
+
}
|
|
3016
|
+
);
|
|
3017
|
+
});
|
|
3018
|
+
MaskedYearlessDateInput.displayName = "MaskedYearlessDateInput";
|
|
3019
|
+
function parseInputValue(value, mode, removePlaceholder) {
|
|
3020
|
+
const valueMinusPlaceholder = removePlaceholder(value);
|
|
3021
|
+
const [segment1, segment2] = valueMinusPlaceholder.split("/");
|
|
3022
|
+
const incompleteFirstSegment = segment1?.length !== 2;
|
|
3023
|
+
const incompleteSecondSegment = segment2?.length !== 2;
|
|
3024
|
+
if (mode === "dd/mm") {
|
|
3025
|
+
return {
|
|
3026
|
+
value: {
|
|
3027
|
+
day: incompleteFirstSegment ? null : parseInt(segment1),
|
|
3028
|
+
month: incompleteSecondSegment ? null : parseInt(segment2)
|
|
3029
|
+
},
|
|
3030
|
+
isInputValid: !incompleteFirstSegment && !incompleteSecondSegment,
|
|
3031
|
+
isInputEmpty: valueMinusPlaceholder === ""
|
|
3032
|
+
};
|
|
3033
|
+
}
|
|
3034
|
+
return {
|
|
3035
|
+
value: {
|
|
3036
|
+
day: incompleteSecondSegment ? null : parseInt(segment2),
|
|
3037
|
+
month: incompleteFirstSegment ? null : parseInt(segment1)
|
|
3038
|
+
},
|
|
3039
|
+
isInputValid: !incompleteFirstSegment && !incompleteSecondSegment,
|
|
3040
|
+
isInputEmpty: valueMinusPlaceholder === ""
|
|
3041
|
+
};
|
|
3042
|
+
}
|
|
3043
|
+
function swapMode(inputString, previousMode, mode) {
|
|
3044
|
+
const { day, month } = divideSegments(inputString, previousMode);
|
|
3045
|
+
return stringifyYearlessDate(day, month, mode);
|
|
3046
|
+
}
|
|
3047
|
+
function divideSegments(value, mode) {
|
|
3048
|
+
const [segment1, segment2] = value.split("/");
|
|
3049
|
+
if (mode === "dd/mm") {
|
|
3050
|
+
return { day: segment1, month: segment2 };
|
|
3051
|
+
}
|
|
3052
|
+
return { day: segment2, month: segment1 };
|
|
3053
|
+
}
|
|
3054
|
+
function stringifyYearlessDate(day, month, mode) {
|
|
3055
|
+
const dd = day.toString().padStart(2, "0");
|
|
3056
|
+
const mm = month.toString().padStart(2, "0");
|
|
3057
|
+
if (mode === "dd/mm") {
|
|
3058
|
+
return `${dd}/${mm}`;
|
|
3059
|
+
}
|
|
3060
|
+
return `${mm}/${dd}`;
|
|
3061
|
+
}
|
|
3062
|
+
|
|
3063
|
+
const DateFieldYearless = ({
|
|
3064
|
+
value: valueProp,
|
|
3065
|
+
defaultValue: defaultValueProp,
|
|
3066
|
+
onChange,
|
|
3067
|
+
minDate,
|
|
3068
|
+
maxDate,
|
|
3069
|
+
unavailable,
|
|
3070
|
+
required,
|
|
3071
|
+
...restProps
|
|
3072
|
+
}) => {
|
|
3073
|
+
const [value, setValue] = useOptionallyControlledState({
|
|
3074
|
+
controlledValue: valueProp,
|
|
3075
|
+
defaultValue: defaultValueProp
|
|
3076
|
+
});
|
|
3077
|
+
const currentValidity = useMemo(
|
|
3078
|
+
() => validateYearlessDate({
|
|
3079
|
+
value: value ?? null,
|
|
3080
|
+
constraints: {
|
|
3081
|
+
required,
|
|
3082
|
+
unavailable,
|
|
3083
|
+
minDate,
|
|
3084
|
+
maxDate
|
|
3085
|
+
}
|
|
3086
|
+
}),
|
|
3087
|
+
[value, required, unavailable, minDate, maxDate]
|
|
3088
|
+
);
|
|
3089
|
+
const conditionalChange = useConditionalChange({
|
|
3090
|
+
changeHandler: onChange,
|
|
3091
|
+
compareFn: (a, b) => a.isInputValid !== b.isInputValid || a.isInputEmpty !== b.isInputEmpty || a.isValid !== b.isValid || a.value?.day !== b.value?.day || a.value?.month !== b.value?.month
|
|
3092
|
+
});
|
|
3093
|
+
const handleInputChange = (change) => {
|
|
3094
|
+
const { event, value: value2, ...restChange } = change;
|
|
3095
|
+
setValue(value2);
|
|
3096
|
+
return conditionalChange({
|
|
3097
|
+
...restChange,
|
|
3098
|
+
value: value2,
|
|
3099
|
+
isValid: validateYearlessDate({
|
|
3100
|
+
value: value2,
|
|
3101
|
+
constraints: {
|
|
3102
|
+
required,
|
|
3103
|
+
unavailable,
|
|
3104
|
+
minDate,
|
|
3105
|
+
maxDate
|
|
3106
|
+
}
|
|
3107
|
+
})
|
|
3108
|
+
});
|
|
3109
|
+
};
|
|
3110
|
+
return /* @__PURE__ */ jsx(
|
|
3111
|
+
MaskedYearlessDateInput,
|
|
3112
|
+
{
|
|
3113
|
+
required,
|
|
3114
|
+
...restProps,
|
|
3115
|
+
autoComplete: "off",
|
|
3116
|
+
onChange: handleInputChange,
|
|
3117
|
+
value,
|
|
3118
|
+
"data-valid": currentValidity
|
|
3119
|
+
}
|
|
3120
|
+
);
|
|
3121
|
+
};
|
|
3122
|
+
DateFieldYearless.displayName = "DateFieldYearless";
|
|
3123
|
+
|
|
3124
|
+
export { DateFieldRange as D, DateFieldSingle as a, DateFieldYearless as b };
|
|
3125
|
+
//# sourceMappingURL=DateFieldYearless-CJP3H_Dg-BV5wGJp1.js.map
|