@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.
Files changed (131) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/{Calendar-KVYGk3wS-CEptqxjI.js → Calendar-CNrdcd3f-BAKv-Gz3.js} +6 -4
  3. package/dist/{Calendar-KVYGk3wS-CEptqxjI.js.map → Calendar-CNrdcd3f-BAKv-Gz3.js.map} +1 -1
  4. package/dist/{Calendar-2q8zRbMK.js → Calendar-MIwfKzm7.js} +2 -2
  5. package/dist/{Calendar-2q8zRbMK.js.map → Calendar-MIwfKzm7.js.map} +1 -1
  6. package/dist/Calendar.js +1 -1
  7. package/dist/{Checkbox-cfgZP7Z2.js → Checkbox-IPM-sdvR.js} +2 -2
  8. package/dist/{Checkbox-cfgZP7Z2.js.map → Checkbox-IPM-sdvR.js.map} +1 -1
  9. package/dist/{Checkbox-Qucv_PK8-Bovwdnlj.js → Checkbox-JWDraGFN--7ptfLKN.js} +2 -2
  10. package/dist/{Checkbox-Qucv_PK8-Bovwdnlj.js.map → Checkbox-JWDraGFN--7ptfLKN.js.map} +1 -1
  11. package/dist/Checkbox.js +1 -1
  12. package/dist/{Combobox-3l2SK47T.js → Combobox-CM8DmNMs.js} +4 -4
  13. package/dist/{Combobox-3l2SK47T.js.map → Combobox-CM8DmNMs.js.map} +1 -1
  14. package/dist/Combobox.js +1 -1
  15. package/dist/{DateField-BQFAvS78.js → DateField-BDJEsVc1.js} +8 -8
  16. package/dist/{DateField-BQFAvS78.js.map → DateField-BDJEsVc1.js.map} +1 -1
  17. package/dist/DateField.js +1 -1
  18. package/dist/{DateFieldRange-CGA5ZTRa.js → DateFieldRange-BTq6MrNu.js} +2 -2
  19. package/dist/DateFieldRange-BTq6MrNu.js.map +1 -0
  20. package/dist/DateFieldRange.js +1 -1
  21. package/dist/{DateFieldSingle-eP5l_TrQ.js → DateFieldSingle-CaeOLrI4.js} +2 -2
  22. package/dist/DateFieldSingle-CaeOLrI4.js.map +1 -0
  23. package/dist/DateFieldSingle.js +1 -1
  24. package/dist/{DateFieldRange-BRjBcR4r-CfuSiOfZ.js → DateFieldYearless-CJP3H_Dg-BV5wGJp1.js} +257 -17
  25. package/dist/DateFieldYearless-CJP3H_Dg-BV5wGJp1.js.map +1 -0
  26. package/dist/DateFieldYearless-CbFo3oyZ.js +22 -0
  27. package/dist/DateFieldYearless-CbFo3oyZ.js.map +1 -0
  28. package/dist/DateFieldYearless.d.ts +2 -0
  29. package/dist/DateFieldYearless.js +2 -0
  30. package/dist/DateFieldYearless.js.map +1 -0
  31. package/dist/{DaysOfTheWeek-Dl31wkmU.js → DaysOfTheWeek-8zaAuw55.js} +2 -2
  32. package/dist/{DaysOfTheWeek-Dl31wkmU.js.map → DaysOfTheWeek-8zaAuw55.js.map} +1 -1
  33. package/dist/DaysOfTheWeek.js +1 -1
  34. package/dist/{Dialog-CJZEBa5r.js → Dialog-DnZE02ob.js} +9 -5
  35. package/dist/Dialog-DnZE02ob.js.map +1 -0
  36. package/dist/Dialog.js +1 -1
  37. package/dist/{Drawer-Cj3nJc4k.js → Drawer-5kgL0gY9.js} +2 -2
  38. package/dist/{Drawer-Cj3nJc4k.js.map → Drawer-5kgL0gY9.js.map} +1 -1
  39. package/dist/Drawer.js +1 -1
  40. package/dist/FieldLabel-D5rNXy6h.js +13 -0
  41. package/dist/FieldLabel-D5rNXy6h.js.map +1 -0
  42. package/dist/FieldLabel.d.ts +6 -0
  43. package/dist/FieldLabel.js +2 -0
  44. package/dist/FieldLabel.js.map +1 -0
  45. package/dist/{InputMask-BdLGTTAk.js → InputMask-B6kMdXCB.js} +2 -2
  46. package/dist/{InputMask-BdLGTTAk.js.map → InputMask-B6kMdXCB.js.map} +1 -1
  47. package/dist/{InputMask-Hn-xudp1-BKhtZ7Zk.js → InputMask-BLZh7hka-CTcRCY2k.js} +2 -2
  48. package/dist/{InputMask-Hn-xudp1-BKhtZ7Zk.js.map → InputMask-BLZh7hka-CTcRCY2k.js.map} +1 -1
  49. package/dist/InputMask.js +1 -1
  50. package/dist/{ListView-_YFTewqc.js → ListView-cMMBtp1O.js} +3 -3
  51. package/dist/{ListView-_YFTewqc.js.map → ListView-cMMBtp1O.js.map} +1 -1
  52. package/dist/ListView.js +1 -1
  53. package/dist/{Menu-CffX1bPZ-BeEOvryY.js → Menu-CAiyc2zk-rxU7H28t.js} +3 -3
  54. package/dist/{Menu-CffX1bPZ-BeEOvryY.js.map → Menu-CAiyc2zk-rxU7H28t.js.map} +1 -1
  55. package/dist/{Menu-1EwVMNIw.js → Menu-Dk3ESnzI.js} +2 -2
  56. package/dist/{Menu-1EwVMNIw.js.map → Menu-Dk3ESnzI.js.map} +1 -1
  57. package/dist/Menu.js +1 -1
  58. package/dist/{Page-BikjTlTM.js → Page-DWeD3rrr.js} +5 -5
  59. package/dist/{Page-BikjTlTM.js.map → Page-DWeD3rrr.js.map} +1 -1
  60. package/dist/Page.js +1 -1
  61. package/dist/Pagination.js +1 -1
  62. package/dist/Pagination.js.map +1 -1
  63. package/dist/{Popover-rB4BVx-A.js → Popover-2O1Q-34V.js} +2 -2
  64. package/dist/{Popover-rB4BVx-A.js.map → Popover-2O1Q-34V.js.map} +1 -1
  65. package/dist/{Popover-jcmNuir0-DjlCqU1z.js → Popover-DvLcjLjG-Yu5STx-v.js} +77 -14
  66. package/dist/Popover-DvLcjLjG-Yu5STx-v.js.map +1 -0
  67. package/dist/Popover.js +1 -1
  68. package/dist/{ProgressBar-CzXzPpIX-Clg1J71o.js → ProgressBar-BezETeA3-CeeedJ_w.js} +49 -15
  69. package/dist/ProgressBar-BezETeA3-CeeedJ_w.js.map +1 -0
  70. package/dist/{ProgressBar-BL34rg_J.js → ProgressBar-CfstmN5D.js} +2 -2
  71. package/dist/{ProgressBar-BL34rg_J.js.map → ProgressBar-CfstmN5D.js.map} +1 -1
  72. package/dist/ProgressBar.js +1 -1
  73. package/dist/{Radio-BnOSIK1U-1MmGQFPi.js → Radio-8E1l0DJa-CLVaSyQc.js} +3 -3
  74. package/dist/{Radio-BnOSIK1U-1MmGQFPi.js.map → Radio-8E1l0DJa-CLVaSyQc.js.map} +1 -1
  75. package/dist/{Radio-BzZUxQa6.js → Radio-P6dkI3W0.js} +2 -2
  76. package/dist/{Radio-BzZUxQa6.js.map → Radio-P6dkI3W0.js.map} +1 -1
  77. package/dist/Radio.js +1 -1
  78. package/dist/{SelectCard-ynL5QcZD-BtBzMtyR.js → SelectCard-m61WUlo--DlByowef.js} +4 -4
  79. package/dist/{SelectCard-ynL5QcZD-BtBzMtyR.js.map → SelectCard-m61WUlo--DlByowef.js.map} +1 -1
  80. package/dist/SelectCard.js +1 -1
  81. package/dist/{SelectCardGroup-D6GuJJB2.js → SelectCardGroup-DIaWX2Vp.js} +2 -2
  82. package/dist/{SelectCardGroup-D6GuJJB2.js.map → SelectCardGroup-DIaWX2Vp.js.map} +1 -1
  83. package/dist/{SelectTrigger-Bo2VPAD0.js → SelectTrigger-DKh0Bzy6.js} +2 -2
  84. package/dist/{SelectTrigger-Bo2VPAD0.js.map → SelectTrigger-DKh0Bzy6.js.map} +1 -1
  85. package/dist/SelectTrigger.js +1 -1
  86. package/dist/{SelectTriggerBase-BGHwx0mN-B3HiW5tQ.js → SelectTriggerBase-DnRvuD3R-CTFWVZhY.js} +3 -3
  87. package/dist/{SelectTriggerBase-BGHwx0mN-B3HiW5tQ.js.map → SelectTriggerBase-DnRvuD3R-CTFWVZhY.js.map} +1 -1
  88. package/dist/{TextField-COXABNrR.js → TextField--tytNBLh.js} +2 -2
  89. package/dist/{TextField-COXABNrR.js.map → TextField--tytNBLh.js.map} +1 -1
  90. package/dist/{TextField-BIeCvDD--C7yp05g5.js → TextField-D_fqJf85-Bcd6rWv4.js} +2 -2
  91. package/dist/{TextField-BIeCvDD--C7yp05g5.js.map → TextField-D_fqJf85-Bcd6rWv4.js.map} +1 -1
  92. package/dist/TextField.js +1 -1
  93. package/dist/{Textarea-D6K3Jc5_.js → Textarea-B0nZ9vOV.js} +2 -2
  94. package/dist/{Textarea-D6K3Jc5_.js.map → Textarea-B0nZ9vOV.js.map} +1 -1
  95. package/dist/Textarea.js +1 -1
  96. package/dist/Toast.js +1 -1
  97. package/dist/{Toolbar-CLsgDAKk.js → Toolbar-BM78DEEM.js} +3 -3
  98. package/dist/{Toolbar-CLsgDAKk.js.map → Toolbar-BM78DEEM.js.map} +1 -1
  99. package/dist/Toolbar.js +1 -1
  100. package/dist/{Tooltip-B_swJyoW.js → Tooltip-ZFFXA77Y.js} +2 -2
  101. package/dist/{Tooltip-B_swJyoW.js.map → Tooltip-ZFFXA77Y.js.map} +1 -1
  102. package/dist/Tooltip.js +1 -1
  103. package/dist/components/DateFieldRange/DateFieldRange.d.ts +4 -1
  104. package/dist/components/DateFieldRange/index.d.ts +1 -2
  105. package/dist/components/DateFieldSingle/DateFieldSingle.d.ts +3 -1
  106. package/dist/components/DateFieldSingle/index.d.ts +1 -2
  107. package/dist/components/DateFieldYearless/DateFieldYearless.d.ts +62 -0
  108. package/dist/components/DateFieldYearless/index.d.ts +1 -0
  109. package/dist/components/Dialog/Dialog.d.ts +1 -1
  110. package/dist/components/Drawer/Drawer.d.ts +1 -1
  111. package/dist/components/FieldLabel/FieldLabel.d.ts +8 -0
  112. package/dist/components/FieldLabel/index.d.ts +2 -0
  113. package/dist/components/index.d.ts +2 -0
  114. package/dist/index.js +25 -23
  115. package/dist/index.js.map +1 -1
  116. package/dist/{toast-CJSBieY0.js → toast-uADTqqrS.js} +2 -2
  117. package/dist/{toast-CJSBieY0.js.map → toast-uADTqqrS.js.map} +1 -1
  118. package/package.json +3 -3
  119. package/dist/DateFieldRange-BRjBcR4r-CfuSiOfZ.js.map +0 -1
  120. package/dist/DateFieldRange-CGA5ZTRa.js.map +0 -1
  121. package/dist/DateFieldSingle-eP5l_TrQ.js.map +0 -1
  122. package/dist/Dialog-CJZEBa5r.js.map +0 -1
  123. package/dist/Popover-jcmNuir0-DjlCqU1z.js.map +0 -1
  124. package/dist/ProgressBar-CzXzPpIX-Clg1J71o.js.map +0 -1
  125. /package/dist/{Calendar-KVYGk3wS.css → Calendar-CNrdcd3f.css} +0 -0
  126. /package/dist/{Menu-CffX1bPZ.css → Menu-CAiyc2zk.css} +0 -0
  127. /package/dist/{Popover-jcmNuir0.css → Popover-DvLcjLjG.css} +0 -0
  128. /package/dist/{ProgressBar-CzXzPpIX.css → ProgressBar-BezETeA3.css} +0 -0
  129. /package/dist/{Radio-BnOSIK1U.css → Radio-8E1l0DJa.css} +0 -0
  130. /package/dist/{SelectCard-ynL5QcZD.css → SelectCard-m61WUlo-.css} +0 -0
  131. /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-KVYGk3wS-CEptqxjI.js';
4
- import { T as TextField } from './TextField-BIeCvDD--C7yp05g5.js';
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-jcmNuir0-DjlCqU1z.js';
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-CzXzPpIX-Clg1J71o.js';
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$1(oldInputValue, previousMode ?? mode, mode)
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 : `format: ${mode}`
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$1(inputString, previousMode, mode) {
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 : `format: ${mode}`
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
- export { DateFieldRange as D, DateFieldSingle as a };
2885
- //# sourceMappingURL=DateFieldRange-BRjBcR4r-CfuSiOfZ.js.map
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