@caratlogic/design-system 0.1.8 → 0.1.10

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/dist/index.esm.js CHANGED
@@ -5742,21 +5742,33 @@ const TextHyperlink = ({ to, href, children, showIcon = true, className, 'aria-l
5742
5742
  return (jsx("a", { href: href, target: "_blank", rel: "noopener noreferrer", "aria-label": ariaLabel, className: cn(LINK_CLASS, className), children: content }));
5743
5743
  };
5744
5744
 
5745
+ /**
5746
+ * Track, thumb and travel, sized so the thumb keeps an even 2px inset on all
5747
+ * four sides. Travel is stated in px rather than `calc(100% - Npx)`: that form
5748
+ * resolves against the thumb's own width, so the gap silently changed whenever a
5749
+ * thumb size did — `md` ended up with a 0.2px vertical inset and no gap at
5750
+ * either end, which read as a thumb bulging out of its track.
5751
+ *
5752
+ * inner = track - 2px border | thumb = innerHeight - 4 | on = innerWidth - thumb - 2
5753
+ */
5745
5754
  const switchSizes = {
5755
+ // track 28x16 → inner 26x14, thumb 10, on 14
5746
5756
  sm: {
5747
5757
  switch: 'h-4 w-7',
5748
- thumb: 'size-3',
5749
- translate: 'data-[state=checked]:translate-x-[calc(100%-1px)]',
5758
+ thumb: 'size-2.5',
5759
+ translate: 'data-[state=unchecked]:translate-x-[2px] data-[state=checked]:translate-x-[14px]',
5750
5760
  },
5761
+ // track 32x20 → inner 30x18, thumb 14, on 14
5751
5762
  md: {
5752
- switch: 'h-[1.15rem] w-8',
5753
- thumb: 'size-4',
5754
- translate: 'data-[state=checked]:translate-x-[calc(100%-2px)]',
5763
+ switch: 'h-5 w-8',
5764
+ thumb: 'size-3.5',
5765
+ translate: 'data-[state=unchecked]:translate-x-[2px] data-[state=checked]:translate-x-[14px]',
5755
5766
  },
5767
+ // track 44x24 → inner 42x22, thumb 18, on 22
5756
5768
  lg: {
5757
5769
  switch: 'h-6 w-11',
5758
- thumb: 'size-5',
5759
- translate: 'data-[state=checked]:translate-x-[calc(100%-3px)]',
5770
+ thumb: 'size-[1.125rem]',
5771
+ translate: 'data-[state=unchecked]:translate-x-[2px] data-[state=checked]:translate-x-[22px]',
5760
5772
  },
5761
5773
  };
5762
5774
 
@@ -5767,7 +5779,7 @@ function ToggleSwitch({ checked = false, onCheckedChange, disabled = false, id,
5767
5779
  }
5768
5780
  };
5769
5781
  const currentSize = switchSizes[size];
5770
- const switchButton = (jsx("button", { type: "button", role: "switch", "aria-checked": checked, "data-state": checked ? 'checked' : 'unchecked', value: checked ? 'on' : 'off', "data-slot": "switch", disabled: disabled, onClick: handleClick, id: id, name: name, className: cn('peer inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent transition-all outline-none', 'focus-visible:ring-ring/50 focus-visible:border-ring focus-visible:ring-[3px]', 'disabled:cursor-not-allowed disabled:opacity-50', 'data-[state=unchecked]:bg-muted', 'data-[state=checked]:bg-primary', currentSize.switch, className), ...props, children: jsx("span", { "data-state": checked ? 'checked' : 'unchecked', "data-slot": "switch-thumb", className: cn('pointer-events-none block rounded-full ring-0 transition-transform', 'bg-card data-[state=checked]:bg-primary-foreground', 'data-[state=unchecked]:translate-x-0', currentSize.thumb, currentSize.translate) }) }));
5782
+ const switchButton = (jsx("button", { type: "button", role: "switch", "aria-checked": checked, "data-state": checked ? 'checked' : 'unchecked', value: checked ? 'on' : 'off', "data-slot": "switch", disabled: disabled, onClick: handleClick, id: id, name: name, className: cn('peer inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent transition-all outline-none', 'focus-visible:ring-ring/50 focus-visible:border-ring focus-visible:ring-[3px]', 'disabled:cursor-not-allowed disabled:opacity-50', 'data-[state=unchecked]:bg-muted', 'data-[state=checked]:bg-primary', currentSize.switch, className), ...props, children: jsx("span", { "data-state": checked ? 'checked' : 'unchecked', "data-slot": "switch-thumb", className: cn('pointer-events-none block rounded-full ring-0 transition-transform', 'bg-card data-[state=checked]:bg-primary-foreground', currentSize.thumb, currentSize.translate) }) }));
5771
5783
  if (!label) {
5772
5784
  return switchButton;
5773
5785
  }
@@ -12089,18 +12101,18 @@ function requireMoment () {
12089
12101
  var momentExports = requireMoment();
12090
12102
  var moment = /*@__PURE__*/getDefaultExportFromCjs(momentExports);
12091
12103
 
12092
- const DATE_FORMAT = 'DD-MM-YYYY';
12104
+ const DATE_FORMAT$1 = 'DD-MM-YYYY';
12093
12105
  /**
12094
12106
  * Canonical default thumbnail used wherever a gem/diamond/inventory item has
12095
12107
  * no image of its own — single source of truth (mirrors the gem inventory grid).
12096
12108
  */
12097
12109
  const DEFAULT_INVENTORY_THUMBNAIL = '/default%20thumbnail.png';
12098
12110
 
12099
- const formatDate$1 = (iso) => {
12111
+ const formatDate$2 = (iso) => {
12100
12112
  if (!iso)
12101
12113
  return '-';
12102
12114
  try {
12103
- return moment(iso).format(DATE_FORMAT);
12115
+ return moment(iso).format(DATE_FORMAT$1);
12104
12116
  }
12105
12117
  catch {
12106
12118
  return iso;
@@ -12113,7 +12125,7 @@ const InfoCard = ({ info, title, refundToWallet, onRefundChange, }) => {
12113
12125
  if (React__default.isValidElement(info))
12114
12126
  return jsx("div", { className: "mt-3", children: info });
12115
12127
  const i = info;
12116
- return (jsx("div", { className: "mt-1 rounded-lg border bg-muted p-3 shadow-sm", children: jsxs("div", { className: "flex flex-col gap-1", children: [jsxs("div", { className: "flex items-start gap-3", children: [jsx("div", { className: "w-36 text-sm text-muted-foreground", children: "Date" }), jsx("div", { children: formatDate$1(i.invoiceDate) })] }), jsxs("div", { className: "flex items-start gap-3", children: [jsx("div", { className: "w-36 text-sm text-muted-foreground", children: "Total" }), jsx("div", { className: "font-medium text-foreground", children: formatCurrencyWithTenantSymbol(i.totalAmount) })] }), i.paidAmount !== undefined && (jsxs("div", { className: "flex items-start gap-3", children: [jsx("div", { className: "w-36 text-sm text-muted-foreground", children: "Paid" }), jsx("div", { className: "font-medium text-primary", children: formatCurrencyWithTenantSymbol(i.paidAmount) })] })), i.outstandingAmount !== undefined && (jsxs("div", { className: "flex items-start gap-3", children: [jsx("div", { className: "w-36 text-sm text-muted-foreground", children: "Outstanding" }), jsx("div", { className: "font-medium text-muted-foreground", children: formatCurrencyWithTenantSymbol(i.outstandingAmount) })] })), title === 'Cancel Invoice' &&
12128
+ return (jsx("div", { className: "mt-1 rounded-lg border bg-muted p-3 shadow-sm", children: jsxs("div", { className: "flex flex-col gap-1", children: [jsxs("div", { className: "flex items-start gap-3", children: [jsx("div", { className: "w-36 text-sm text-muted-foreground", children: "Date" }), jsx("div", { children: formatDate$2(i.invoiceDate) })] }), jsxs("div", { className: "flex items-start gap-3", children: [jsx("div", { className: "w-36 text-sm text-muted-foreground", children: "Total" }), jsx("div", { className: "font-medium text-foreground", children: formatCurrencyWithTenantSymbol(i.totalAmount) })] }), i.paidAmount !== undefined && (jsxs("div", { className: "flex items-start gap-3", children: [jsx("div", { className: "w-36 text-sm text-muted-foreground", children: "Paid" }), jsx("div", { className: "font-medium text-primary", children: formatCurrencyWithTenantSymbol(i.paidAmount) })] })), i.outstandingAmount !== undefined && (jsxs("div", { className: "flex items-start gap-3", children: [jsx("div", { className: "w-36 text-sm text-muted-foreground", children: "Outstanding" }), jsx("div", { className: "font-medium text-muted-foreground", children: formatCurrencyWithTenantSymbol(i.outstandingAmount) })] })), title === 'Cancel Invoice' &&
12117
12129
  !React__default.isValidElement(info) &&
12118
12130
  (i?.paidAmount ?? 0) > 0 && (jsxs("div", { className: "flex items-start gap-3", children: [jsx("div", { className: "w-36 whitespace-nowrap text-sm text-muted-foreground", children: "Refund to Wallet" }), jsx(Checkbox, { checked: !!refundToWallet, onCheckedChange: (v) => onRefundChange?.(Boolean(v)), className: "bg-card" })] })), (i.customerName || i.email) && (jsxs("div", { className: "mt-1 rounded bg-card p-2", children: [i.customerName && (jsx("div", { className: "text-sm font-medium", children: i.customerName })), i.email && (jsx("div", { className: "text-sm text-muted-foreground", children: i.email }))] }))] }) }));
12119
12131
  };
@@ -22575,7 +22587,7 @@ function parseDate(value, dateFormat, locale, strictParsing, refDate) {
22575
22587
  var parsedDate = parse(value, format_1, refDate, {
22576
22588
  locale: localeObject});
22577
22589
  if (isValid(parsedDate) &&
22578
- (!strictParsing || value === formatDate(parsedDate, format_1, locale))) {
22590
+ (!strictParsing || value === formatDate$1(parsedDate, format_1, locale))) {
22579
22591
  return parsedDate;
22580
22592
  }
22581
22593
  }
@@ -22603,7 +22615,7 @@ function isValid(date, minDate) {
22603
22615
  * @param locale - The locale.
22604
22616
  * @returns - The formatted date.
22605
22617
  */
22606
- function formatDate(date, formatStr, locale) {
22618
+ function formatDate$1(date, formatStr, locale) {
22607
22619
  if (locale === "en") {
22608
22620
  return format(date, formatStr, {
22609
22621
  useAdditionalWeekYearTokens: true,
@@ -22633,7 +22645,7 @@ function safeDateFormat(date, _a) {
22633
22645
  var formatStr = (Array.isArray(dateFormat) && dateFormat.length > 0
22634
22646
  ? dateFormat[0]
22635
22647
  : dateFormat); // Cast to string because it's impossible to get `string | string[] | undefined` here and typescript doesn't know that
22636
- return (date && formatDate(date, formatStr, locale)) || "";
22648
+ return (date && formatDate$1(date, formatStr, locale)) || "";
22637
22649
  }
22638
22650
  /**
22639
22651
  * Used as a delimiter to separate two dates when formatting a date range
@@ -22707,7 +22719,7 @@ function getWeek(date) {
22707
22719
  * @returns - The day of the week code.
22708
22720
  */
22709
22721
  function getDayOfWeekCode(day, locale) {
22710
- return formatDate(day, "ddd", locale);
22722
+ return formatDate$1(day, "ddd", locale);
22711
22723
  }
22712
22724
  // *** Start of ***
22713
22725
  /**
@@ -22930,7 +22942,7 @@ function getLocaleObject(localeSpec) {
22930
22942
  * @returns - The formatted weekday.
22931
22943
  */
22932
22944
  function getFormattedWeekdayInLocale(date, formatFunc, locale) {
22933
- return formatFunc(formatDate(date, "EEEE", locale));
22945
+ return formatFunc(formatDate$1(date, "EEEE", locale));
22934
22946
  }
22935
22947
  /**
22936
22948
  * Gets the minimum weekday in a given locale.
@@ -22940,7 +22952,7 @@ function getFormattedWeekdayInLocale(date, formatFunc, locale) {
22940
22952
  * @returns - The minimum weekday.
22941
22953
  */
22942
22954
  function getWeekdayMinInLocale(date, locale) {
22943
- return formatDate(date, "EEEEEE", locale);
22955
+ return formatDate$1(date, "EEEEEE", locale);
22944
22956
  }
22945
22957
  /**
22946
22958
  * Gets the short weekday in a given locale.
@@ -22950,7 +22962,7 @@ function getWeekdayMinInLocale(date, locale) {
22950
22962
  * @returns - The short weekday.
22951
22963
  */
22952
22964
  function getWeekdayShortInLocale(date, locale) {
22953
- return formatDate(date, "EEE", locale);
22965
+ return formatDate$1(date, "EEE", locale);
22954
22966
  }
22955
22967
  /**
22956
22968
  * Gets the month in a given locale.
@@ -22960,7 +22972,7 @@ function getWeekdayShortInLocale(date, locale) {
22960
22972
  * @returns - The month.
22961
22973
  */
22962
22974
  function getMonthInLocale(month, locale) {
22963
- return formatDate(setMonth(newDate(), month), "LLLL", locale);
22975
+ return formatDate$1(setMonth(newDate(), month), "LLLL", locale);
22964
22976
  }
22965
22977
  /**
22966
22978
  * Gets the short month in a given locale.
@@ -22970,7 +22982,7 @@ function getMonthInLocale(month, locale) {
22970
22982
  * @returns - The short month.
22971
22983
  */
22972
22984
  function getMonthShortInLocale(month, locale) {
22973
- return formatDate(setMonth(newDate(), month), "LLL", locale);
22985
+ return formatDate$1(setMonth(newDate(), month), "LLL", locale);
22974
22986
  }
22975
22987
  /**
22976
22988
  * Gets the short quarter in a given locale.
@@ -22980,7 +22992,7 @@ function getMonthShortInLocale(month, locale) {
22980
22992
  * @returns - The short quarter.
22981
22993
  */
22982
22994
  function getQuarterShortInLocale(quarter, locale) {
22983
- return formatDate(setQuarter(newDate(), quarter), "QQQ", locale);
22995
+ return formatDate$1(setQuarter(newDate(), quarter), "QQQ", locale);
22984
22996
  }
22985
22997
  /**
22986
22998
  * Checks if a day is disabled.
@@ -23310,7 +23322,7 @@ function getHighLightDaysMap(highlightDates, defaultClassName) {
23310
23322
  for (var i = 0, len = highlightDates.length; i < len; i++) {
23311
23323
  var obj = highlightDates[i];
23312
23324
  if (isDate(obj)) {
23313
- var key = formatDate(obj, "MM.dd.yyyy");
23325
+ var key = formatDate$1(obj, "MM.dd.yyyy");
23314
23326
  var classNamesArr = dateClasses.get(key) || [];
23315
23327
  if (!classNamesArr.includes(defaultClassName)) {
23316
23328
  classNamesArr.push(defaultClassName);
@@ -23325,7 +23337,7 @@ function getHighLightDaysMap(highlightDates, defaultClassName) {
23325
23337
  for (var k = 0, len_1 = arrOfDates.length; k < len_1; k++) {
23326
23338
  var dateK = arrOfDates[k];
23327
23339
  if (dateK) {
23328
- var key = formatDate(dateK, "MM.dd.yyyy");
23340
+ var key = formatDate$1(dateK, "MM.dd.yyyy");
23329
23341
  var classNamesArr = dateClasses.get(key) || [];
23330
23342
  if (!classNamesArr.includes(className)) {
23331
23343
  classNamesArr.push(className);
@@ -23365,7 +23377,7 @@ function getHolidaysMap(holidayDates, defaultClassName) {
23365
23377
  if (!isDate(dateObj)) {
23366
23378
  return;
23367
23379
  }
23368
- var key = formatDate(dateObj, "MM.dd.yyyy");
23380
+ var key = formatDate$1(dateObj, "MM.dd.yyyy");
23369
23381
  var classNamesObj = dateClasses.get(key) || {
23370
23382
  className: "",
23371
23383
  holidayNames: [],
@@ -23739,7 +23751,7 @@ var Day = /** @class */ (function (_super) {
23739
23751
  return false;
23740
23752
  }
23741
23753
  // Looking for className in the Map of {'day string, 'className'}
23742
- var dayStr = formatDate(day, "MM.dd.yyyy");
23754
+ var dayStr = formatDate$1(day, "MM.dd.yyyy");
23743
23755
  return highlightDates.get(dayStr);
23744
23756
  };
23745
23757
  // Function to return the array containing className associated to the date
@@ -23750,7 +23762,7 @@ var Day = /** @class */ (function (_super) {
23750
23762
  // For type consistency no other reasons
23751
23763
  return [undefined];
23752
23764
  }
23753
- var dayStr = formatDate(day, "MM.dd.yyyy");
23765
+ var dayStr = formatDate$1(day, "MM.dd.yyyy");
23754
23766
  // Looking for className in the Map of {day string: {className, holidayName}}
23755
23767
  if (holidays.has(dayStr)) {
23756
23768
  return [(_a = holidays.get(dayStr)) === null || _a === void 0 ? void 0 : _a.className];
@@ -23891,12 +23903,12 @@ var Day = /** @class */ (function (_super) {
23891
23903
  var prefix = _this.isDisabled() || _this.isExcluded()
23892
23904
  ? ariaLabelPrefixWhenDisabled
23893
23905
  : ariaLabelPrefixWhenEnabled;
23894
- return "".concat(prefix, " ").concat(formatDate(day, "PPPP", _this.props.locale));
23906
+ return "".concat(prefix, " ").concat(formatDate$1(day, "PPPP", _this.props.locale));
23895
23907
  };
23896
23908
  // A function to return the holiday's name as title's content
23897
23909
  _this.getTitle = function () {
23898
23910
  var _a = _this.props, day = _a.day, _b = _a.holidays, holidays = _b === void 0 ? new Map() : _b, excludeDates = _a.excludeDates;
23899
- var compareDt = formatDate(day, "MM.dd.yyyy");
23911
+ var compareDt = formatDate$1(day, "MM.dd.yyyy");
23900
23912
  var titles = [];
23901
23913
  if (holidays.has(compareDt)) {
23902
23914
  titles.push.apply(titles, holidays.get(compareDt).holidayNames);
@@ -24822,7 +24834,7 @@ var Month = /** @class */ (function (_super) {
24822
24834
  var prefix = _this.isDisabled(labelDate) || _this.isExcluded(labelDate)
24823
24835
  ? disabledDayAriaLabelPrefix
24824
24836
  : chooseDayAriaLabelPrefix;
24825
- return "".concat(prefix, " ").concat(formatDate(labelDate, "MMMM yyyy", locale));
24837
+ return "".concat(prefix, " ").concat(formatDate$1(labelDate, "MMMM yyyy", locale));
24826
24838
  };
24827
24839
  _this.getQuarterClassNames = function (q) {
24828
24840
  var _a = _this.props, day = _a.day, startDate = _a.startDate, endDate = _a.endDate, minDate = _a.minDate, maxDate = _a.maxDate, excludeDates = _a.excludeDates, includeDates = _a.includeDates, filterDate = _a.filterDate, preSelection = _a.preSelection, disabledKeyboardNavigation = _a.disabledKeyboardNavigation, disabled = _a.disabled;
@@ -24924,7 +24936,7 @@ var Month = /** @class */ (function (_super) {
24924
24936
  : "";
24925
24937
  // Format aria-label, return empty string if date is invalid
24926
24938
  var formattedAriaLabel = isValid(day)
24927
- ? "".concat(formattedAriaLabelPrefix).concat(formatDate(day, "MMMM, yyyy", this.props.locale))
24939
+ ? "".concat(formattedAriaLabelPrefix).concat(formatDate$1(day, "MMMM, yyyy", this.props.locale))
24928
24940
  : "";
24929
24941
  var shouldUseListboxRole = showMonthYearPicker || showQuarterYearPicker;
24930
24942
  if (shouldUseListboxRole) {
@@ -25067,7 +25079,7 @@ var MonthYearDropdownOptions = /** @class */ (function (_super) {
25067
25079
  ? "react-datepicker__month-year-option--selected_month-year"
25068
25080
  : "react-datepicker__month-year-option", key: monthYearPoint, onClick: _this.onChange.bind(_this, monthYearPoint), "aria-selected": isSameMonthYear ? "true" : undefined },
25069
25081
  isSameMonthYear ? (React__default.createElement("span", { className: "react-datepicker__month-year-option--selected" }, "\u2713")) : (""),
25070
- formatDate(monthYear, _this.props.dateFormat, _this.props.locale)));
25082
+ formatDate$1(monthYear, _this.props.dateFormat, _this.props.locale)));
25071
25083
  });
25072
25084
  };
25073
25085
  _this.onChange = function (monthYear) { return _this.props.onChange(monthYear); };
@@ -25102,7 +25114,7 @@ var MonthYearDropdown = /** @class */ (function (_super) {
25102
25114
  var options = [];
25103
25115
  while (!isAfter$1(currDate, lastDate)) {
25104
25116
  var timePoint = getTime(currDate);
25105
- options.push(React__default.createElement("option", { key: timePoint, value: timePoint }, formatDate(currDate, _this.props.dateFormat, _this.props.locale)));
25117
+ options.push(React__default.createElement("option", { key: timePoint, value: timePoint }, formatDate$1(currDate, _this.props.dateFormat, _this.props.locale)));
25106
25118
  currDate = addMonths(currDate, 1);
25107
25119
  }
25108
25120
  return options;
@@ -25112,7 +25124,7 @@ var MonthYearDropdown = /** @class */ (function (_super) {
25112
25124
  };
25113
25125
  _this.renderSelectMode = function () { return (React__default.createElement("select", { value: getTime(getStartOfMonth(_this.props.date)), className: "react-datepicker__month-year-select", onChange: _this.onSelectChange }, _this.renderSelectOptions())); };
25114
25126
  _this.renderReadView = function (visible) {
25115
- var yearMonth = formatDate(_this.props.date, _this.props.dateFormat, _this.props.locale);
25127
+ var yearMonth = formatDate$1(_this.props.date, _this.props.dateFormat, _this.props.locale);
25116
25128
  return (React__default.createElement("div", { key: "read", style: { visibility: visible ? "visible" : "hidden" }, className: "react-datepicker__month-year-read-view", onClick: _this.toggleDropdown },
25117
25129
  React__default.createElement("span", { className: "react-datepicker__month-year-read-view--down-arrow" }),
25118
25130
  React__default.createElement("span", { className: "react-datepicker__month-year-read-view--selected-month-year" }, yearMonth)));
@@ -25281,7 +25293,7 @@ var Time = /** @class */ (function (_super) {
25281
25293
  }
25282
25294
  }, onKeyDown: function (event) {
25283
25295
  _this.handleOnKeyDown(event, time);
25284
- }, tabIndex: time === timeToFocus ? 0 : -1, role: "option", "aria-selected": _this.isSelectedTime(time) ? "true" : undefined, "aria-disabled": _this.isDisabledTime(time) ? "true" : undefined }, formatDate(time, format, _this.props.locale)));
25296
+ }, tabIndex: time === timeToFocus ? 0 : -1, role: "option", "aria-selected": _this.isSelectedTime(time) ? "true" : undefined, "aria-disabled": _this.isDisabledTime(time) ? "true" : undefined }, formatDate$1(time, format, _this.props.locale)));
25285
25297
  });
25286
25298
  };
25287
25299
  _this.renderTimeCaption = function () {
@@ -26052,7 +26064,7 @@ var Calendar = /** @class */ (function (_super) {
26052
26064
  ? _this.props.weekDayClassName(day)
26053
26065
  : undefined;
26054
26066
  return (React__default.createElement("div", { key: offset, role: "columnheader", className: clsx("react-datepicker__day-name", weekDayClassName, disabled ? "react-datepicker__day-name--disabled" : "") },
26055
- React__default.createElement("span", { className: "react-datepicker__sr-only" }, formatDate(day, "EEEE", _this.props.locale)),
26067
+ React__default.createElement("span", { className: "react-datepicker__sr-only" }, formatDate$1(day, "EEEE", _this.props.locale)),
26056
26068
  React__default.createElement("span", { "aria-hidden": "true" }, weekDayName)));
26057
26069
  }));
26058
26070
  };
@@ -26232,7 +26244,7 @@ var Calendar = /** @class */ (function (_super) {
26232
26244
  classes.push("react-datepicker__current-month--hasMonthYearDropdown");
26233
26245
  }
26234
26246
  return (React__default.createElement("h2", { className: classes.join(" ") }, isValid(date)
26235
- ? formatDate(date, _this.props.dateFormat, _this.props.locale)
26247
+ ? formatDate$1(date, _this.props.dateFormat, _this.props.locale)
26236
26248
  : ""));
26237
26249
  };
26238
26250
  _this.renderYearDropdown = function (overrideHide) {
@@ -27216,7 +27228,7 @@ var DatePicker = /** @class */ (function (_super) {
27216
27228
  var newMinutes = Math.min(maxMinutes, currentMinutes + timeIntervals);
27217
27229
  newTime = addMinutes(baseDate, newMinutes);
27218
27230
  }
27219
- var formattedTime = formatDate(newTime, formatStr || DatePicker.defaultProps.dateFormat, _this.props.locale);
27231
+ var formattedTime = formatDate$1(newTime, formatStr || DatePicker.defaultProps.dateFormat, _this.props.locale);
27220
27232
  _this.setState({
27221
27233
  preSelection: newTime,
27222
27234
  inputValue: formattedTime,
@@ -27808,24 +27820,77 @@ var PRESELECT_CHANGE_VIA_INPUT = "input";
27808
27820
  var PRESELECT_CHANGE_VIA_NAVIGATE = "navigate";
27809
27821
 
27810
27822
  const MONTHS = moment.months();
27823
+ /** The one format the field displays and accepts when typed. */
27824
+ const DATE_FORMAT = 'DD/MM/YYYY';
27825
+ const BOUND_FORMAT = 'YYYY-MM-DD';
27826
+ const MAX_DIGITS = 8;
27811
27827
  function computeDateBounds(min, max) {
27812
27828
  const minDate = min
27813
27829
  ? min instanceof Date
27814
- ? moment(min).format('YYYY-MM-DD')
27830
+ ? moment(min).format(BOUND_FORMAT)
27815
27831
  : min
27816
27832
  : undefined;
27817
27833
  const maxDate = max
27818
27834
  ? max instanceof Date
27819
- ? moment(max).format('YYYY-MM-DD')
27835
+ ? moment(max).format(BOUND_FORMAT)
27820
27836
  : max
27821
27837
  : undefined;
27822
27838
  return {
27823
27839
  minDate,
27824
27840
  maxDate,
27825
- minYear: minDate ? moment(minDate, 'YYYY-MM-DD').year() : undefined,
27826
- maxYear: maxDate ? moment(maxDate, 'YYYY-MM-DD').year() : undefined,
27841
+ minYear: minDate ? moment(minDate, BOUND_FORMAT).year() : undefined,
27842
+ maxYear: maxDate ? moment(maxDate, BOUND_FORMAT).year() : undefined,
27827
27843
  };
27828
27844
  }
27845
+ function formatDate(value) {
27846
+ return value ? moment(value).format(DATE_FORMAT) : '';
27847
+ }
27848
+ function toBoundDate(bound) {
27849
+ return bound ? moment(bound, BOUND_FORMAT).toDate() : undefined;
27850
+ }
27851
+ /**
27852
+ * Keep only the digits a date can hold and re-insert the separators, so typing
27853
+ * `25082026` reads back as `25/08/2026` and pasted junk cannot survive.
27854
+ */
27855
+ function maskDateText(text) {
27856
+ const digits = text.replace(/\D/g, '').slice(0, MAX_DIGITS);
27857
+ if (digits.length <= 2)
27858
+ return digits;
27859
+ if (digits.length <= 4)
27860
+ return `${digits.slice(0, 2)}/${digits.slice(2)}`;
27861
+ return `${digits.slice(0, 2)}/${digits.slice(2, 4)}/${digits.slice(4)}`;
27862
+ }
27863
+ function countDigits(text) {
27864
+ return text.replace(/\D/g, '').length;
27865
+ }
27866
+ /** Offset in `text` that sits just after its nth digit. */
27867
+ function caretAfterDigits(text, digits) {
27868
+ if (digits <= 0)
27869
+ return 0;
27870
+ let seen = 0;
27871
+ for (let index = 0; index < text.length; index += 1) {
27872
+ if (text[index] >= '0' && text[index] <= '9') {
27873
+ seen += 1;
27874
+ if (seen === digits)
27875
+ return index + 1;
27876
+ }
27877
+ }
27878
+ return text.length;
27879
+ }
27880
+ function parseDateText(text) {
27881
+ const parsed = moment(text, DATE_FORMAT, true);
27882
+ return parsed.isValid() ? parsed.toDate() : undefined;
27883
+ }
27884
+ function isWithinBounds(date, { minDate, maxDate }) {
27885
+ const day = moment(date).startOf('day');
27886
+ if (minDate && day.isBefore(moment(minDate, BOUND_FORMAT).startOf('day'))) {
27887
+ return false;
27888
+ }
27889
+ if (maxDate && day.isAfter(moment(maxDate, BOUND_FORMAT).startOf('day'))) {
27890
+ return false;
27891
+ }
27892
+ return true;
27893
+ }
27829
27894
 
27830
27895
  function DatePickerHeader({ monthDate, changeYear, changeMonth, decreaseMonth, increaseMonth, prevMonthButtonDisabled, nextMonthButtonDisabled, minYear, maxYear, hidePrev, hideNext, }) {
27831
27896
  const current = moment(monthDate);
@@ -27840,25 +27905,39 @@ function DatePickerHeader({ monthDate, changeYear, changeMonth, decreaseMonth, i
27840
27905
  return (jsxs("div", { className: "date-range-picker-header", children: [hidePrev ? (jsx("span", { className: "date-range-picker-nav-spacer", "aria-hidden": true })) : (jsx("button", { type: "button", onClick: decreaseMonth, disabled: prevMonthButtonDisabled, "aria-label": "Previous month", className: "date-range-picker-nav", children: jsx(ChevronLeft, { className: "h-4 w-4", strokeWidth: 2 }) })), jsxs("div", { className: "date-range-picker-selects", children: [jsx("div", { className: "date-range-picker-select-wrap", children: jsx("select", { "aria-label": "Select month", className: "date-range-picker-select", value: shownMonth, onChange: (event) => changeMonth(Number(event.target.value)), children: MONTHS.map((label, index) => (jsx("option", { value: index, children: label }, label))) }) }), jsx("div", { className: "date-range-picker-select-wrap", children: jsx("select", { "aria-label": "Select year", className: "date-range-picker-select", value: shownYear, onChange: (event) => changeYear(Number(event.target.value)), children: years.map((year) => (jsx("option", { value: year, children: year }, year))) }) })] }), hideNext ? (jsx("span", { className: "date-range-picker-nav-spacer", "aria-hidden": true })) : (jsx("button", { type: "button", onClick: increaseMonth, disabled: nextMonthButtonDisabled, "aria-label": "Next month", className: "date-range-picker-nav", children: jsx(ChevronRight, { className: "h-4 w-4", strokeWidth: 2 }) }))] }));
27841
27906
  }
27842
27907
 
27843
- var css_248z$2 = "@charset \"UTF-8\";.react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view--down-arrow,.react-datepicker__navigation-icon:before,.react-datepicker__year-read-view--down-arrow{border-color:#ccc;border-style:solid;border-width:3px 3px 0 0;content:\"\";display:block;height:9px;position:absolute;top:6px;width:9px}.react-datepicker__sr-only{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.react-datepicker-wrapper{border:0;display:inline-block;padding:0}.react-datepicker{background-color:#fff;border:1px solid #aeaeae;border-radius:.3rem;color:#000;display:inline-block;font-family:Helvetica Neue,helvetica,arial,sans-serif;font-size:.8rem;line-height:normal;position:relative}.react-datepicker--time-only .react-datepicker__time-container{border-left:0}.react-datepicker--time-only .react-datepicker__time,.react-datepicker--time-only .react-datepicker__time-box{border-bottom-left-radius:.3rem;border-bottom-right-radius:.3rem}.react-datepicker-popper{line-height:0;z-index:1}.react-datepicker-popper .react-datepicker__triangle{stroke:#aeaeae}.react-datepicker-popper[data-placement^=bottom] .react-datepicker__triangle{fill:#f0f0f0;color:#f0f0f0}.react-datepicker-popper[data-placement^=top] .react-datepicker__triangle{fill:#fff;color:#fff}.react-datepicker__header{background-color:#f0f0f0;border-bottom:1px solid #aeaeae;border-top-left-radius:.3rem;padding:8px 0;position:relative;text-align:center}.react-datepicker__header--time{padding-bottom:8px;padding-left:5px;padding-right:5px}.react-datepicker__header--time:not(.react-datepicker__header--time--only){border-top-left-radius:0}.react-datepicker__header:not(.react-datepicker__header--has-time-select){border-top-right-radius:.3rem}.react-datepicker__month-dropdown-container--scroll,.react-datepicker__month-dropdown-container--select,.react-datepicker__month-year-dropdown-container--scroll,.react-datepicker__month-year-dropdown-container--select,.react-datepicker__year-dropdown-container--scroll,.react-datepicker__year-dropdown-container--select{display:inline-block;margin:0 15px}.react-datepicker-time__header,.react-datepicker-year-header,.react-datepicker__current-month{color:#000;font-size:.944rem;font-weight:700;margin-top:0}h2.react-datepicker__current-month{margin:0;padding:0}.react-datepicker-time__header{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.react-datepicker__navigation{align-items:center;background:none;border:none;cursor:pointer;display:flex;height:32px;justify-content:center;overflow:hidden;padding:0;position:absolute;text-align:center;text-indent:-999em;top:2px;width:32px;z-index:1}.react-datepicker__navigation--previous{left:2px}.react-datepicker__navigation--next{right:2px}.react-datepicker__navigation--next--with-time:not(.react-datepicker__navigation--next--with-today-button){right:85px}.react-datepicker__navigation--years{display:block;margin-left:auto;margin-right:auto;position:relative;top:0}.react-datepicker__navigation--years-previous{top:4px}.react-datepicker__navigation--years-upcoming{top:-4px}.react-datepicker__navigation:hover :before{border-color:#a6a6a6}.react-datepicker__navigation-icon{font-size:20px;position:relative;top:-1px;width:0}.react-datepicker__navigation-icon--next{left:-2px}.react-datepicker__navigation-icon--next:before{left:-7px;transform:rotate(45deg)}.react-datepicker__navigation-icon--previous{right:-2px}.react-datepicker__navigation-icon--previous:before{right:-7px;transform:rotate(225deg)}.react-datepicker__month-container{float:left}.react-datepicker__year{margin:.4rem;text-align:center}.react-datepicker__year-wrapper{display:flex;flex-wrap:wrap;max-width:180px}.react-datepicker__year .react-datepicker__year-text{display:inline-block;margin:2px;width:4rem}.react-datepicker__month{margin:.4rem;text-align:center}.react-datepicker__month .react-datepicker__month-text,.react-datepicker__month .react-datepicker__quarter-text{display:inline-block;margin:2px;width:4rem}.react-datepicker__input-time-container{clear:both;float:left;margin:5px 0 10px 15px;text-align:left;width:100%}.react-datepicker__input-time-container .react-datepicker-time__caption,.react-datepicker__input-time-container .react-datepicker-time__input-container{display:inline-block}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input{display:inline-block;margin-left:10px}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input{width:auto}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]::-webkit-inner-spin-button,.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]{-moz-appearance:textfield}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__delimiter{display:inline-block;margin-left:5px}.react-datepicker__time-container{border-left:1px solid #aeaeae;float:right;width:85px}.react-datepicker__time-container--with-today-button{border:1px solid #aeaeae;border-radius:.3rem;display:inline;position:absolute;right:-87px;top:0}.react-datepicker__time-container .react-datepicker__time{background:#fff;border-bottom-right-radius:.3rem;position:relative}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box{border-bottom-right-radius:.3rem;margin:0 auto;overflow-x:hidden;text-align:center;width:85px}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list{box-sizing:content-box;height:calc(195px + .85rem);list-style:none;margin:0;overflow-y:scroll;padding-left:0;padding-right:0;width:100%}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item{height:30px;padding:5px 10px;white-space:nowrap}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item:hover{background-color:#f0f0f0;cursor:pointer}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected{background-color:#216ba5;color:#fff;font-weight:700}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected:hover{background-color:#216ba5}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled{color:#ccc}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled:hover{background-color:transparent;cursor:default}.react-datepicker__week-number{color:#ccc;display:inline-block;line-height:1.7rem;margin:.166rem;text-align:center;width:1.7rem}.react-datepicker__week-number.react-datepicker__week-number--clickable{cursor:pointer}.react-datepicker__week-number.react-datepicker__week-number--clickable:not(.react-datepicker__week-number--selected):hover{background-color:#f0f0f0;border-radius:.3rem}.react-datepicker__week-number--selected{background-color:#216ba5;border-radius:.3rem;color:#fff}.react-datepicker__week-number--selected:hover{background-color:#1d5d90}.react-datepicker__day-names{margin-bottom:-8px;text-align:center;white-space:nowrap}.react-datepicker__week{white-space:nowrap}.react-datepicker__day,.react-datepicker__day-name,.react-datepicker__time-name{color:#000;display:inline-block;line-height:1.7rem;margin:.166rem;text-align:center;width:1.7rem}.react-datepicker__day--disabled,.react-datepicker__day-name--disabled,.react-datepicker__time-name--disabled{color:#ccc;cursor:default}.react-datepicker__day,.react-datepicker__month-text,.react-datepicker__quarter-text,.react-datepicker__year-text{cursor:pointer}.react-datepicker__day:not([aria-disabled=true]):hover,.react-datepicker__month-text:not([aria-disabled=true]):hover,.react-datepicker__quarter-text:not([aria-disabled=true]):hover,.react-datepicker__year-text:not([aria-disabled=true]):hover{background-color:#f0f0f0;border-radius:.3rem}.react-datepicker__day--today,.react-datepicker__month-text--today,.react-datepicker__quarter-text--today,.react-datepicker__year-text--today{font-weight:700}.react-datepicker__day--highlighted,.react-datepicker__month-text--highlighted,.react-datepicker__quarter-text--highlighted,.react-datepicker__year-text--highlighted{background-color:#3dcc4a;border-radius:.3rem;color:#fff}.react-datepicker__day--highlighted:not([aria-disabled=true]):hover,.react-datepicker__month-text--highlighted:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--highlighted:not([aria-disabled=true]):hover,.react-datepicker__year-text--highlighted:not([aria-disabled=true]):hover{background-color:#32be3f}.react-datepicker__day--highlighted-custom-1,.react-datepicker__month-text--highlighted-custom-1,.react-datepicker__quarter-text--highlighted-custom-1,.react-datepicker__year-text--highlighted-custom-1{color:#f0f}.react-datepicker__day--highlighted-custom-2,.react-datepicker__month-text--highlighted-custom-2,.react-datepicker__quarter-text--highlighted-custom-2,.react-datepicker__year-text--highlighted-custom-2{color:green}.react-datepicker__day--holidays,.react-datepicker__month-text--holidays,.react-datepicker__quarter-text--holidays,.react-datepicker__year-text--holidays{background-color:#ff6803;border-radius:.3rem;color:#fff;position:relative}.react-datepicker__day--holidays .overlay,.react-datepicker__month-text--holidays .overlay,.react-datepicker__quarter-text--holidays .overlay,.react-datepicker__year-text--holidays .overlay{background-color:#333;border-radius:4px;bottom:100%;color:#fff;left:50%;opacity:0;padding:4px;position:absolute;transform:translateX(-50%);transition:visibility 0s,opacity .3s ease-in-out;visibility:hidden;white-space:nowrap}.react-datepicker__day--holidays:not([aria-disabled=true]):hover,.react-datepicker__month-text--holidays:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--holidays:not([aria-disabled=true]):hover,.react-datepicker__year-text--holidays:not([aria-disabled=true]):hover{background-color:#cf5300}.react-datepicker__day--holidays:hover .overlay,.react-datepicker__month-text--holidays:hover .overlay,.react-datepicker__quarter-text--holidays:hover .overlay,.react-datepicker__year-text--holidays:hover .overlay{opacity:1;visibility:visible}.react-datepicker__day--in-range,.react-datepicker__day--in-selecting-range,.react-datepicker__day--selected,.react-datepicker__month-text--in-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__month-text--selected,.react-datepicker__quarter-text--in-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__quarter-text--selected,.react-datepicker__year-text--in-range,.react-datepicker__year-text--in-selecting-range,.react-datepicker__year-text--selected{background-color:#216ba5;border-radius:.3rem;color:#fff}.react-datepicker__day--in-range:not([aria-disabled=true]):hover,.react-datepicker__day--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__day--selected:not([aria-disabled=true]):hover,.react-datepicker__month-text--in-range:not([aria-disabled=true]):hover,.react-datepicker__month-text--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__month-text--selected:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--in-range:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--selected:not([aria-disabled=true]):hover,.react-datepicker__year-text--in-range:not([aria-disabled=true]):hover,.react-datepicker__year-text--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__year-text--selected:not([aria-disabled=true]):hover{background-color:#1d5d90}.react-datepicker__day--keyboard-selected,.react-datepicker__month-text--keyboard-selected,.react-datepicker__quarter-text--keyboard-selected,.react-datepicker__year-text--keyboard-selected{background-color:#bad9f1;border-radius:.3rem;color:#000}.react-datepicker__day--keyboard-selected:not([aria-disabled=true]):hover,.react-datepicker__month-text--keyboard-selected:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--keyboard-selected:not([aria-disabled=true]):hover,.react-datepicker__year-text--keyboard-selected:not([aria-disabled=true]):hover{background-color:#1d5d90;color:#fff}.react-datepicker__day--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__month-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__quarter-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__year-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range){background-color:rgba(33,107,165,.5)}.react-datepicker__month--selecting-range .react-datepicker__day--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__month-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__quarter-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__year-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__day--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__month-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__quarter-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__year-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range){background-color:#f0f0f0;color:#000}.react-datepicker__day--disabled,.react-datepicker__month-text--disabled,.react-datepicker__quarter-text--disabled,.react-datepicker__year-text--disabled{color:#ccc;cursor:default}.react-datepicker__day--disabled .overlay,.react-datepicker__month-text--disabled .overlay,.react-datepicker__quarter-text--disabled .overlay,.react-datepicker__year-text--disabled .overlay{background-color:#333;border-radius:4px;bottom:70%;color:#fff;left:50%;opacity:0;padding:4px;position:absolute;transform:translateX(-50%);transition:visibility 0s,opacity .3s ease-in-out;visibility:hidden;white-space:nowrap}.react-datepicker__input-container{display:inline-block;position:relative;width:100%}.react-datepicker__input-container .react-datepicker__calendar-icon{box-sizing:content-box;padding:.5rem;position:absolute}.react-datepicker__view-calendar-icon input{padding:6px 10px 5px 25px}.react-datepicker__month-read-view,.react-datepicker__month-year-read-view,.react-datepicker__year-read-view{border:1px solid transparent;border-radius:.3rem;position:relative}.react-datepicker__month-read-view:hover,.react-datepicker__month-year-read-view:hover,.react-datepicker__year-read-view:hover{cursor:pointer}.react-datepicker__month-read-view:hover .react-datepicker__month-read-view--down-arrow,.react-datepicker__month-read-view:hover .react-datepicker__year-read-view--down-arrow,.react-datepicker__month-year-read-view:hover .react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view:hover .react-datepicker__year-read-view--down-arrow,.react-datepicker__year-read-view:hover .react-datepicker__month-read-view--down-arrow,.react-datepicker__year-read-view:hover .react-datepicker__year-read-view--down-arrow{border-top-color:#b3b3b3}.react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view--down-arrow,.react-datepicker__year-read-view--down-arrow{right:-16px;top:0;transform:rotate(135deg)}.react-datepicker__month-dropdown,.react-datepicker__month-year-dropdown,.react-datepicker__year-dropdown{background-color:#f0f0f0;border:1px solid #aeaeae;border-radius:.3rem;left:25%;position:absolute;text-align:center;top:30px;width:50%;z-index:1}.react-datepicker__month-dropdown:hover,.react-datepicker__month-year-dropdown:hover,.react-datepicker__year-dropdown:hover{cursor:pointer}.react-datepicker__month-dropdown--scrollable,.react-datepicker__month-year-dropdown--scrollable,.react-datepicker__year-dropdown--scrollable{height:150px;overflow-y:scroll}.react-datepicker__month-option,.react-datepicker__month-year-option,.react-datepicker__year-option{display:block;line-height:20px;margin-left:auto;margin-right:auto;width:100%}.react-datepicker__month-option:first-of-type,.react-datepicker__month-year-option:first-of-type,.react-datepicker__year-option:first-of-type{border-top-left-radius:.3rem;border-top-right-radius:.3rem}.react-datepicker__month-option:last-of-type,.react-datepicker__month-year-option:last-of-type,.react-datepicker__year-option:last-of-type{border-bottom-left-radius:.3rem;border-bottom-right-radius:.3rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.react-datepicker__month-option:hover,.react-datepicker__month-year-option:hover,.react-datepicker__year-option:hover{background-color:#ccc}.react-datepicker__month-option:hover .react-datepicker__navigation--years-upcoming,.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-upcoming,.react-datepicker__year-option:hover .react-datepicker__navigation--years-upcoming{border-bottom-color:#b3b3b3}.react-datepicker__month-option:hover .react-datepicker__navigation--years-previous,.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-previous,.react-datepicker__year-option:hover .react-datepicker__navigation--years-previous{border-top-color:#b3b3b3}.react-datepicker__month-option--selected,.react-datepicker__month-year-option--selected,.react-datepicker__year-option--selected{left:15px;position:absolute}.react-datepicker__close-icon{background-color:transparent;border:0;cursor:pointer;display:table-cell;height:100%;outline:0;padding:0 6px 0 0;position:absolute;right:0;top:0;vertical-align:middle}.react-datepicker__close-icon:after{background-color:#216ba5;border-radius:50%;color:#fff;content:\"×\";cursor:pointer;display:table-cell;font-size:12px;height:16px;line-height:1;padding:2px;text-align:center;vertical-align:middle;width:16px}.react-datepicker__close-icon--disabled{cursor:default}.react-datepicker__close-icon--disabled:after{background-color:#ccc;cursor:default}.react-datepicker__today-button{background:#f0f0f0;border-top:1px solid #aeaeae;clear:left;cursor:pointer;font-weight:700;padding:5px 0;text-align:center}.react-datepicker__portal{align-items:center;background-color:rgba(0,0,0,.8);display:flex;height:100vh;justify-content:center;left:0;position:fixed;top:0;width:100vw;z-index:2147483647}.react-datepicker__portal .react-datepicker__day,.react-datepicker__portal .react-datepicker__day-name,.react-datepicker__portal .react-datepicker__time-name{line-height:3rem;width:3rem}@media (max-height:550px),(max-width:400px){.react-datepicker__portal .react-datepicker__day,.react-datepicker__portal .react-datepicker__day-name,.react-datepicker__portal .react-datepicker__time-name{line-height:2rem;width:2rem}}.react-datepicker__portal .react-datepicker-time__header,.react-datepicker__portal .react-datepicker__current-month{font-size:1.44rem}.react-datepicker__children-container{height:auto;margin:.4rem;padding-left:.2rem;padding-right:.2rem;width:13.8rem}.react-datepicker__aria-live{border:0;clip-path:circle(0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.react-datepicker__calendar-icon{height:1em;vertical-align:-.125em;width:1em}";
27844
- styleInject(css_248z$2);
27845
-
27846
- var css_248z$1 = ".date-range-picker-popover[data-slot=popover-content]{max-width:calc(100vw - 2rem);width:fit-content}.date-range-picker-calendar.react-datepicker{background:transparent;border:0;display:flex;flex-direction:column;font-family:inherit;font-size:.875rem}.date-range-picker-calendar .react-datepicker__month-container{float:none;width:auto}.date-range-picker-calendar .react-datepicker__header{background:transparent;border-bottom:0;padding:0}.date-range-picker-calendar .react-datepicker__current-month{display:none}.date-range-picker-header{align-items:center;display:flex;gap:.5rem;justify-content:space-between;padding:0 .25rem .25rem}.date-range-picker-selects{align-items:center;display:flex;gap:.375rem}.date-range-picker-select-wrap{align-items:center;display:inline-flex;position:relative}.date-range-picker-select{appearance:none;-webkit-appearance:none;-moz-appearance:none;background-color:var(--background);background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2371717a' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E\");background-position:right .375rem center;background-repeat:no-repeat;background-size:.875rem;border:1px solid var(--input-border,var(--border));border-radius:.5rem;color:var(--foreground);cursor:pointer;font-size:.8125rem;font-weight:500;height:1.875rem;line-height:1.875rem;outline:none;padding:0 1.5rem 0 .625rem;transition:border-color .15s,box-shadow .15s}.date-range-picker-select:hover{background-color:var(--muted)}.date-range-picker-select:focus-visible{border-color:var(--ring);box-shadow:0 0 0 3px color-mix(in srgb,var(--ring) 30%,transparent)}.date-range-picker-select option{background-color:var(--popover,var(--background));color:var(--foreground)}.date-range-picker-nav-spacer{display:inline-block;height:1.75rem;width:1.75rem}.date-range-picker-nav{align-items:center;background-color:var(--muted);border:0;border-radius:.5rem;color:var(--muted-foreground);cursor:pointer;display:inline-flex;height:1.75rem;justify-content:center;padding:0;transition:background-color .15s,color .15s;width:1.75rem}.date-range-picker-nav:hover{background-color:var(--accent);color:var(--foreground)}.date-range-picker-nav:disabled{cursor:not-allowed;opacity:.4}.date-range-picker-calendar .react-datepicker__day-names{display:flex;justify-content:space-between;margin:.5rem 0 .25rem}.date-range-picker-calendar .react-datepicker__day-name{color:var(--muted-foreground);font-size:.75rem;font-weight:400;line-height:1.75rem;margin:0;width:2.25rem}.date-range-picker-calendar .react-datepicker__month{margin:0}.date-range-picker-calendar .react-datepicker__week{display:flex;justify-content:space-between}.date-range-picker-calendar .react-datepicker__day{align-items:center;border-radius:.5rem;color:var(--foreground);display:inline-flex;font-size:.875rem;height:2.25rem;justify-content:center;line-height:2.25rem;margin:.125rem 0;width:2.25rem}.date-range-picker-calendar .react-datepicker__day--outside-month{color:var(--muted-foreground);opacity:.55}.date-range-picker-calendar .react-datepicker__day:hover{background-color:var(--muted);border-radius:.5rem}.date-range-picker-calendar .react-datepicker__day--today{background-color:var(--muted);color:var(--foreground);font-weight:600}.date-range-picker-calendar .react-datepicker__day--keyboard-selected,.date-range-picker-calendar .react-datepicker__day--selected{background-color:var(--primary);color:var(--primary-foreground);font-weight:500}.date-range-picker-calendar .react-datepicker__day--keyboard-selected:hover,.date-range-picker-calendar .react-datepicker__day--selected:hover{background-color:var(--primary);color:var(--primary-foreground);filter:brightness(.95)}.date-range-picker-calendar .react-datepicker__day--in-range,.date-range-picker-calendar .react-datepicker__day--in-selecting-range{background-color:color-mix(in srgb,var(--primary) 18%,transparent);color:var(--primary)}.date-range-picker-calendar .react-datepicker__day--range-end,.date-range-picker-calendar .react-datepicker__day--range-start{background-color:var(--primary);color:var(--primary-foreground)}.date-range-picker-calendar .react-datepicker__day--disabled{color:var(--muted-foreground);cursor:not-allowed;opacity:.4}.date-range-picker-calendar .react-datepicker__children-container{margin:0;padding:0;width:auto}.date-range-picker-footer{align-items:center;display:flex;justify-content:space-between;margin-top:.75rem;padding-top:.75rem;width:100%}.date-range-picker-action{align-items:center;background-color:color-mix(in srgb,var(--primary) 10%,transparent);border:0;border-radius:.5rem;color:var(--primary);cursor:pointer;display:inline-flex;font-size:.8125rem;font-weight:500;height:2rem;justify-content:center;padding:0 .875rem;transition:background-color .15s}.date-range-picker-action:hover{background-color:color-mix(in srgb,var(--primary) 18%,transparent)}:is(.dark) .date-range-picker-calendar .react-datepicker__day--today{background-color:color-mix(in srgb,var(--muted) 80%,transparent)}:is(.dark) .date-range-picker-action{background-color:color-mix(in srgb,var(--primary) 18%,transparent)}:is(.dark) .date-range-picker-action:hover{background-color:color-mix(in srgb,var(--primary) 28%,transparent)}";
27847
- styleInject(css_248z$1);
27848
-
27849
27908
  // Only one DateInput popover should be open at a time. Because each instance is
27850
27909
  // its own `modal` Radix Popover, opening a second one does not dismiss the first
27851
27910
  // via outside-click. Instances coordinate through a window event: whoever opens
27852
27911
  // broadcasts its id, and every other open instance closes itself.
27853
27912
  const DATEINPUT_OPEN_EVENT = 'caratlogic:dateinput-open';
27854
- function DateInput({ value, onChange, onBlur, name, className, min, max, disabled, placeholder = 'Select date', }) {
27913
+ function useDateInput({ value, onChange, onBlur, min, max, disabled, }) {
27855
27914
  const [open, setOpen] = useState(false);
27856
27915
  const instanceId = useId$2();
27857
- const { minDate, maxDate, minYear, maxYear } = computeDateBounds(min, max);
27858
- // Close this popover when any other DateInput announces it just opened.
27916
+ const inputRef = useRef(null);
27917
+ const caretRef = useRef(null);
27918
+ const bounds = computeDateBounds(min, max);
27919
+ const formatted = formatDate(value);
27920
+ const [text, setText] = useState(formatted);
27921
+ const [syncedValue, setSyncedValue] = useState(formatted);
27922
+ // Adopt `value` whenever it changes from the outside — a form reset, a
27923
+ // calendar pick, a sibling field narrowing the range — while leaving a
27924
+ // half-typed date alone.
27925
+ if (formatted !== syncedValue) {
27926
+ setSyncedValue(formatted);
27927
+ setText(formatted);
27928
+ }
27929
+ // Masking rewrites the whole string, which parks the caret at the end on any
27930
+ // keystroke that crosses a separator. Put it back once the DOM has the value.
27931
+ useLayoutEffect(() => {
27932
+ const caret = caretRef.current;
27933
+ if (caret === null || !inputRef.current)
27934
+ return;
27935
+ caretRef.current = null;
27936
+ inputRef.current.setSelectionRange(caret, caret);
27937
+ });
27859
27938
  useEffect(() => {
27860
- const onOtherOpen = (e) => {
27861
- if (e.detail !== instanceId)
27939
+ const onOtherOpen = (event) => {
27940
+ if (event.detail !== instanceId)
27862
27941
  setOpen(false);
27863
27942
  };
27864
27943
  window.addEventListener(DATEINPUT_OPEN_EVENT, onOtherOpen);
@@ -27870,6 +27949,132 @@ function DateInput({ value, onChange, onBlur, name, className, min, max, disable
27870
27949
  window.dispatchEvent(new CustomEvent(DATEINPUT_OPEN_EVENT, { detail: instanceId }));
27871
27950
  }
27872
27951
  };
27952
+ const commit = (date) => {
27953
+ const next = formatDate(date);
27954
+ setText(next);
27955
+ setSyncedValue(next);
27956
+ onChange(date);
27957
+ };
27958
+ /**
27959
+ * Show `masked` and report it upwards only once it is a whole, real,
27960
+ * in-range date — so `01/01/2` on the way to `01/01/2026` never lands in the
27961
+ * form, and an emptied field clears the value.
27962
+ */
27963
+ const applyText = (masked, caret) => {
27964
+ caretRef.current = caret;
27965
+ setText(masked);
27966
+ if (masked === '') {
27967
+ setSyncedValue('');
27968
+ onChange(undefined);
27969
+ return;
27970
+ }
27971
+ if (masked.length < DATE_FORMAT.length)
27972
+ return;
27973
+ const parsed = parseDateText(masked);
27974
+ if (parsed && isWithinBounds(parsed, bounds)) {
27975
+ setSyncedValue(masked);
27976
+ onChange(parsed);
27977
+ }
27978
+ };
27979
+ const handleTextChange = (event) => {
27980
+ const raw = event.target.value;
27981
+ const caret = event.target.selectionStart ?? raw.length;
27982
+ const masked = maskDateText(raw);
27983
+ applyText(masked, caretAfterDigits(masked, countDigits(raw.slice(0, caret))));
27984
+ };
27985
+ /** Fall back to the committed value when the field is left mid-edit. */
27986
+ const normalize = () => {
27987
+ if (text === '')
27988
+ return;
27989
+ const parsed = parseDateText(text);
27990
+ if (!parsed || !isWithinBounds(parsed, bounds))
27991
+ setText(formatted);
27992
+ };
27993
+ const handleKeyDown = (event) => {
27994
+ if (event.key === 'Enter') {
27995
+ // Settle the field rather than submitting the form around it.
27996
+ event.preventDefault();
27997
+ setOpen(false);
27998
+ normalize();
27999
+ return;
28000
+ }
28001
+ if (event.key === 'Escape' && open) {
28002
+ setOpen(false);
28003
+ return;
28004
+ }
28005
+ if (event.key === 'ArrowDown' && event.altKey && !disabled) {
28006
+ event.preventDefault();
28007
+ handleOpenChange(true);
28008
+ return;
28009
+ }
28010
+ if (event.key !== 'Backspace')
28011
+ return;
28012
+ // A separator is not content: backspacing onto a `/` has to take the digit
28013
+ // in front of it, or the mask re-inserts the slash and the caret sticks.
28014
+ const input = event.currentTarget;
28015
+ const start = input.selectionStart ?? 0;
28016
+ if (start !== input.selectionEnd ||
28017
+ start < 2 ||
28018
+ input.value[start - 1] !== '/') {
28019
+ return;
28020
+ }
28021
+ event.preventDefault();
28022
+ const kept = input.value.slice(0, start - 2);
28023
+ const masked = maskDateText(kept + input.value.slice(start));
28024
+ applyText(masked, caretAfterDigits(masked, countDigits(kept)));
28025
+ };
28026
+ const handleTextBlur = () => {
28027
+ normalize();
28028
+ onBlur?.();
28029
+ };
28030
+ const parsedText = parseDateText(text);
28031
+ return {
28032
+ open,
28033
+ text,
28034
+ invalid: text.length === DATE_FORMAT.length &&
28035
+ (!parsedText || !isWithinBounds(parsedText, bounds)),
28036
+ bounds,
28037
+ inputRef,
28038
+ handleOpenChange,
28039
+ handleTextChange,
28040
+ handleKeyDown,
28041
+ handleTextBlur,
28042
+ toggleOpen: () => {
28043
+ if (!disabled)
28044
+ handleOpenChange(!open);
28045
+ },
28046
+ selectDate: (date) => {
28047
+ commit(date ?? undefined);
28048
+ if (date)
28049
+ setOpen(false);
28050
+ },
28051
+ clearDate: () => {
28052
+ commit(undefined);
28053
+ setOpen(false);
28054
+ },
28055
+ selectToday: () => {
28056
+ commit(new Date());
28057
+ setOpen(false);
28058
+ },
28059
+ };
28060
+ }
28061
+
28062
+ const CALENDAR_BUTTON_LABEL = 'Open calendar';
28063
+ /** Spells out what the field accepts, since the format is now typeable. */
28064
+ const DATE_FORMAT_HINT = `Date format ${DATE_FORMAT}`;
28065
+
28066
+ var css_248z$2 = "@charset \"UTF-8\";.react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view--down-arrow,.react-datepicker__navigation-icon:before,.react-datepicker__year-read-view--down-arrow{border-color:#ccc;border-style:solid;border-width:3px 3px 0 0;content:\"\";display:block;height:9px;position:absolute;top:6px;width:9px}.react-datepicker__sr-only{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.react-datepicker-wrapper{border:0;display:inline-block;padding:0}.react-datepicker{background-color:#fff;border:1px solid #aeaeae;border-radius:.3rem;color:#000;display:inline-block;font-family:Helvetica Neue,helvetica,arial,sans-serif;font-size:.8rem;line-height:normal;position:relative}.react-datepicker--time-only .react-datepicker__time-container{border-left:0}.react-datepicker--time-only .react-datepicker__time,.react-datepicker--time-only .react-datepicker__time-box{border-bottom-left-radius:.3rem;border-bottom-right-radius:.3rem}.react-datepicker-popper{line-height:0;z-index:1}.react-datepicker-popper .react-datepicker__triangle{stroke:#aeaeae}.react-datepicker-popper[data-placement^=bottom] .react-datepicker__triangle{fill:#f0f0f0;color:#f0f0f0}.react-datepicker-popper[data-placement^=top] .react-datepicker__triangle{fill:#fff;color:#fff}.react-datepicker__header{background-color:#f0f0f0;border-bottom:1px solid #aeaeae;border-top-left-radius:.3rem;padding:8px 0;position:relative;text-align:center}.react-datepicker__header--time{padding-bottom:8px;padding-left:5px;padding-right:5px}.react-datepicker__header--time:not(.react-datepicker__header--time--only){border-top-left-radius:0}.react-datepicker__header:not(.react-datepicker__header--has-time-select){border-top-right-radius:.3rem}.react-datepicker__month-dropdown-container--scroll,.react-datepicker__month-dropdown-container--select,.react-datepicker__month-year-dropdown-container--scroll,.react-datepicker__month-year-dropdown-container--select,.react-datepicker__year-dropdown-container--scroll,.react-datepicker__year-dropdown-container--select{display:inline-block;margin:0 15px}.react-datepicker-time__header,.react-datepicker-year-header,.react-datepicker__current-month{color:#000;font-size:.944rem;font-weight:700;margin-top:0}h2.react-datepicker__current-month{margin:0;padding:0}.react-datepicker-time__header{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.react-datepicker__navigation{align-items:center;background:none;border:none;cursor:pointer;display:flex;height:32px;justify-content:center;overflow:hidden;padding:0;position:absolute;text-align:center;text-indent:-999em;top:2px;width:32px;z-index:1}.react-datepicker__navigation--previous{left:2px}.react-datepicker__navigation--next{right:2px}.react-datepicker__navigation--next--with-time:not(.react-datepicker__navigation--next--with-today-button){right:85px}.react-datepicker__navigation--years{display:block;margin-left:auto;margin-right:auto;position:relative;top:0}.react-datepicker__navigation--years-previous{top:4px}.react-datepicker__navigation--years-upcoming{top:-4px}.react-datepicker__navigation:hover :before{border-color:#a6a6a6}.react-datepicker__navigation-icon{font-size:20px;position:relative;top:-1px;width:0}.react-datepicker__navigation-icon--next{left:-2px}.react-datepicker__navigation-icon--next:before{left:-7px;transform:rotate(45deg)}.react-datepicker__navigation-icon--previous{right:-2px}.react-datepicker__navigation-icon--previous:before{right:-7px;transform:rotate(225deg)}.react-datepicker__month-container{float:left}.react-datepicker__year{margin:.4rem;text-align:center}.react-datepicker__year-wrapper{display:flex;flex-wrap:wrap;max-width:180px}.react-datepicker__year .react-datepicker__year-text{display:inline-block;margin:2px;width:4rem}.react-datepicker__month{margin:.4rem;text-align:center}.react-datepicker__month .react-datepicker__month-text,.react-datepicker__month .react-datepicker__quarter-text{display:inline-block;margin:2px;width:4rem}.react-datepicker__input-time-container{clear:both;float:left;margin:5px 0 10px 15px;text-align:left;width:100%}.react-datepicker__input-time-container .react-datepicker-time__caption,.react-datepicker__input-time-container .react-datepicker-time__input-container{display:inline-block}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input{display:inline-block;margin-left:10px}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input{width:auto}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]::-webkit-inner-spin-button,.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]{-moz-appearance:textfield}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__delimiter{display:inline-block;margin-left:5px}.react-datepicker__time-container{border-left:1px solid #aeaeae;float:right;width:85px}.react-datepicker__time-container--with-today-button{border:1px solid #aeaeae;border-radius:.3rem;display:inline;position:absolute;right:-87px;top:0}.react-datepicker__time-container .react-datepicker__time{background:#fff;border-bottom-right-radius:.3rem;position:relative}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box{border-bottom-right-radius:.3rem;margin:0 auto;overflow-x:hidden;text-align:center;width:85px}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list{box-sizing:content-box;height:calc(195px + .85rem);list-style:none;margin:0;overflow-y:scroll;padding-left:0;padding-right:0;width:100%}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item{height:30px;padding:5px 10px;white-space:nowrap}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item:hover{background-color:#f0f0f0;cursor:pointer}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected{background-color:#216ba5;color:#fff;font-weight:700}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected:hover{background-color:#216ba5}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled{color:#ccc}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled:hover{background-color:transparent;cursor:default}.react-datepicker__week-number{color:#ccc;display:inline-block;line-height:1.7rem;margin:.166rem;text-align:center;width:1.7rem}.react-datepicker__week-number.react-datepicker__week-number--clickable{cursor:pointer}.react-datepicker__week-number.react-datepicker__week-number--clickable:not(.react-datepicker__week-number--selected):hover{background-color:#f0f0f0;border-radius:.3rem}.react-datepicker__week-number--selected{background-color:#216ba5;border-radius:.3rem;color:#fff}.react-datepicker__week-number--selected:hover{background-color:#1d5d90}.react-datepicker__day-names{margin-bottom:-8px;text-align:center;white-space:nowrap}.react-datepicker__week{white-space:nowrap}.react-datepicker__day,.react-datepicker__day-name,.react-datepicker__time-name{color:#000;display:inline-block;line-height:1.7rem;margin:.166rem;text-align:center;width:1.7rem}.react-datepicker__day--disabled,.react-datepicker__day-name--disabled,.react-datepicker__time-name--disabled{color:#ccc;cursor:default}.react-datepicker__day,.react-datepicker__month-text,.react-datepicker__quarter-text,.react-datepicker__year-text{cursor:pointer}.react-datepicker__day:not([aria-disabled=true]):hover,.react-datepicker__month-text:not([aria-disabled=true]):hover,.react-datepicker__quarter-text:not([aria-disabled=true]):hover,.react-datepicker__year-text:not([aria-disabled=true]):hover{background-color:#f0f0f0;border-radius:.3rem}.react-datepicker__day--today,.react-datepicker__month-text--today,.react-datepicker__quarter-text--today,.react-datepicker__year-text--today{font-weight:700}.react-datepicker__day--highlighted,.react-datepicker__month-text--highlighted,.react-datepicker__quarter-text--highlighted,.react-datepicker__year-text--highlighted{background-color:#3dcc4a;border-radius:.3rem;color:#fff}.react-datepicker__day--highlighted:not([aria-disabled=true]):hover,.react-datepicker__month-text--highlighted:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--highlighted:not([aria-disabled=true]):hover,.react-datepicker__year-text--highlighted:not([aria-disabled=true]):hover{background-color:#32be3f}.react-datepicker__day--highlighted-custom-1,.react-datepicker__month-text--highlighted-custom-1,.react-datepicker__quarter-text--highlighted-custom-1,.react-datepicker__year-text--highlighted-custom-1{color:#f0f}.react-datepicker__day--highlighted-custom-2,.react-datepicker__month-text--highlighted-custom-2,.react-datepicker__quarter-text--highlighted-custom-2,.react-datepicker__year-text--highlighted-custom-2{color:green}.react-datepicker__day--holidays,.react-datepicker__month-text--holidays,.react-datepicker__quarter-text--holidays,.react-datepicker__year-text--holidays{background-color:#ff6803;border-radius:.3rem;color:#fff;position:relative}.react-datepicker__day--holidays .overlay,.react-datepicker__month-text--holidays .overlay,.react-datepicker__quarter-text--holidays .overlay,.react-datepicker__year-text--holidays .overlay{background-color:#333;border-radius:4px;bottom:100%;color:#fff;left:50%;opacity:0;padding:4px;position:absolute;transform:translateX(-50%);transition:visibility 0s,opacity .3s ease-in-out;visibility:hidden;white-space:nowrap}.react-datepicker__day--holidays:not([aria-disabled=true]):hover,.react-datepicker__month-text--holidays:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--holidays:not([aria-disabled=true]):hover,.react-datepicker__year-text--holidays:not([aria-disabled=true]):hover{background-color:#cf5300}.react-datepicker__day--holidays:hover .overlay,.react-datepicker__month-text--holidays:hover .overlay,.react-datepicker__quarter-text--holidays:hover .overlay,.react-datepicker__year-text--holidays:hover .overlay{opacity:1;visibility:visible}.react-datepicker__day--in-range,.react-datepicker__day--in-selecting-range,.react-datepicker__day--selected,.react-datepicker__month-text--in-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__month-text--selected,.react-datepicker__quarter-text--in-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__quarter-text--selected,.react-datepicker__year-text--in-range,.react-datepicker__year-text--in-selecting-range,.react-datepicker__year-text--selected{background-color:#216ba5;border-radius:.3rem;color:#fff}.react-datepicker__day--in-range:not([aria-disabled=true]):hover,.react-datepicker__day--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__day--selected:not([aria-disabled=true]):hover,.react-datepicker__month-text--in-range:not([aria-disabled=true]):hover,.react-datepicker__month-text--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__month-text--selected:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--in-range:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--selected:not([aria-disabled=true]):hover,.react-datepicker__year-text--in-range:not([aria-disabled=true]):hover,.react-datepicker__year-text--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__year-text--selected:not([aria-disabled=true]):hover{background-color:#1d5d90}.react-datepicker__day--keyboard-selected,.react-datepicker__month-text--keyboard-selected,.react-datepicker__quarter-text--keyboard-selected,.react-datepicker__year-text--keyboard-selected{background-color:#bad9f1;border-radius:.3rem;color:#000}.react-datepicker__day--keyboard-selected:not([aria-disabled=true]):hover,.react-datepicker__month-text--keyboard-selected:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--keyboard-selected:not([aria-disabled=true]):hover,.react-datepicker__year-text--keyboard-selected:not([aria-disabled=true]):hover{background-color:#1d5d90;color:#fff}.react-datepicker__day--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__month-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__quarter-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__year-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range){background-color:rgba(33,107,165,.5)}.react-datepicker__month--selecting-range .react-datepicker__day--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__month-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__quarter-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__year-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__day--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__month-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__quarter-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__year-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range){background-color:#f0f0f0;color:#000}.react-datepicker__day--disabled,.react-datepicker__month-text--disabled,.react-datepicker__quarter-text--disabled,.react-datepicker__year-text--disabled{color:#ccc;cursor:default}.react-datepicker__day--disabled .overlay,.react-datepicker__month-text--disabled .overlay,.react-datepicker__quarter-text--disabled .overlay,.react-datepicker__year-text--disabled .overlay{background-color:#333;border-radius:4px;bottom:70%;color:#fff;left:50%;opacity:0;padding:4px;position:absolute;transform:translateX(-50%);transition:visibility 0s,opacity .3s ease-in-out;visibility:hidden;white-space:nowrap}.react-datepicker__input-container{display:inline-block;position:relative;width:100%}.react-datepicker__input-container .react-datepicker__calendar-icon{box-sizing:content-box;padding:.5rem;position:absolute}.react-datepicker__view-calendar-icon input{padding:6px 10px 5px 25px}.react-datepicker__month-read-view,.react-datepicker__month-year-read-view,.react-datepicker__year-read-view{border:1px solid transparent;border-radius:.3rem;position:relative}.react-datepicker__month-read-view:hover,.react-datepicker__month-year-read-view:hover,.react-datepicker__year-read-view:hover{cursor:pointer}.react-datepicker__month-read-view:hover .react-datepicker__month-read-view--down-arrow,.react-datepicker__month-read-view:hover .react-datepicker__year-read-view--down-arrow,.react-datepicker__month-year-read-view:hover .react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view:hover .react-datepicker__year-read-view--down-arrow,.react-datepicker__year-read-view:hover .react-datepicker__month-read-view--down-arrow,.react-datepicker__year-read-view:hover .react-datepicker__year-read-view--down-arrow{border-top-color:#b3b3b3}.react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view--down-arrow,.react-datepicker__year-read-view--down-arrow{right:-16px;top:0;transform:rotate(135deg)}.react-datepicker__month-dropdown,.react-datepicker__month-year-dropdown,.react-datepicker__year-dropdown{background-color:#f0f0f0;border:1px solid #aeaeae;border-radius:.3rem;left:25%;position:absolute;text-align:center;top:30px;width:50%;z-index:1}.react-datepicker__month-dropdown:hover,.react-datepicker__month-year-dropdown:hover,.react-datepicker__year-dropdown:hover{cursor:pointer}.react-datepicker__month-dropdown--scrollable,.react-datepicker__month-year-dropdown--scrollable,.react-datepicker__year-dropdown--scrollable{height:150px;overflow-y:scroll}.react-datepicker__month-option,.react-datepicker__month-year-option,.react-datepicker__year-option{display:block;line-height:20px;margin-left:auto;margin-right:auto;width:100%}.react-datepicker__month-option:first-of-type,.react-datepicker__month-year-option:first-of-type,.react-datepicker__year-option:first-of-type{border-top-left-radius:.3rem;border-top-right-radius:.3rem}.react-datepicker__month-option:last-of-type,.react-datepicker__month-year-option:last-of-type,.react-datepicker__year-option:last-of-type{border-bottom-left-radius:.3rem;border-bottom-right-radius:.3rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.react-datepicker__month-option:hover,.react-datepicker__month-year-option:hover,.react-datepicker__year-option:hover{background-color:#ccc}.react-datepicker__month-option:hover .react-datepicker__navigation--years-upcoming,.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-upcoming,.react-datepicker__year-option:hover .react-datepicker__navigation--years-upcoming{border-bottom-color:#b3b3b3}.react-datepicker__month-option:hover .react-datepicker__navigation--years-previous,.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-previous,.react-datepicker__year-option:hover .react-datepicker__navigation--years-previous{border-top-color:#b3b3b3}.react-datepicker__month-option--selected,.react-datepicker__month-year-option--selected,.react-datepicker__year-option--selected{left:15px;position:absolute}.react-datepicker__close-icon{background-color:transparent;border:0;cursor:pointer;display:table-cell;height:100%;outline:0;padding:0 6px 0 0;position:absolute;right:0;top:0;vertical-align:middle}.react-datepicker__close-icon:after{background-color:#216ba5;border-radius:50%;color:#fff;content:\"×\";cursor:pointer;display:table-cell;font-size:12px;height:16px;line-height:1;padding:2px;text-align:center;vertical-align:middle;width:16px}.react-datepicker__close-icon--disabled{cursor:default}.react-datepicker__close-icon--disabled:after{background-color:#ccc;cursor:default}.react-datepicker__today-button{background:#f0f0f0;border-top:1px solid #aeaeae;clear:left;cursor:pointer;font-weight:700;padding:5px 0;text-align:center}.react-datepicker__portal{align-items:center;background-color:rgba(0,0,0,.8);display:flex;height:100vh;justify-content:center;left:0;position:fixed;top:0;width:100vw;z-index:2147483647}.react-datepicker__portal .react-datepicker__day,.react-datepicker__portal .react-datepicker__day-name,.react-datepicker__portal .react-datepicker__time-name{line-height:3rem;width:3rem}@media (max-height:550px),(max-width:400px){.react-datepicker__portal .react-datepicker__day,.react-datepicker__portal .react-datepicker__day-name,.react-datepicker__portal .react-datepicker__time-name{line-height:2rem;width:2rem}}.react-datepicker__portal .react-datepicker-time__header,.react-datepicker__portal .react-datepicker__current-month{font-size:1.44rem}.react-datepicker__children-container{height:auto;margin:.4rem;padding-left:.2rem;padding-right:.2rem;width:13.8rem}.react-datepicker__aria-live{border:0;clip-path:circle(0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.react-datepicker__calendar-icon{height:1em;vertical-align:-.125em;width:1em}";
28067
+ styleInject(css_248z$2);
28068
+
28069
+ var css_248z$1 = ".date-range-picker-popover[data-slot=popover-content]{max-width:calc(100vw - 2rem);width:fit-content}.date-range-picker-calendar.react-datepicker{background:transparent;border:0;display:flex;flex-direction:column;font-family:inherit;font-size:.875rem}.date-range-picker-calendar .react-datepicker__month-container{float:none;width:auto}.date-range-picker-calendar .react-datepicker__header{background:transparent;border-bottom:0;padding:0}.date-range-picker-calendar .react-datepicker__current-month{display:none}.date-range-picker-header{align-items:center;display:flex;gap:.5rem;justify-content:space-between;padding:0 .25rem .25rem}.date-range-picker-selects{align-items:center;display:flex;gap:.375rem}.date-range-picker-select-wrap{align-items:center;display:inline-flex;position:relative}.date-range-picker-select{appearance:none;-webkit-appearance:none;-moz-appearance:none;background-color:var(--background);background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2371717a' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E\");background-position:right .375rem center;background-repeat:no-repeat;background-size:.875rem;border:1px solid var(--input-border,var(--border));border-radius:.5rem;color:var(--foreground);cursor:pointer;font-size:.8125rem;font-weight:500;height:1.875rem;line-height:1.875rem;outline:none;padding:0 1.5rem 0 .625rem;transition:border-color .15s,box-shadow .15s}.date-range-picker-select:hover{background-color:var(--muted)}.date-range-picker-select:focus-visible{border-color:var(--ring);box-shadow:0 0 0 3px color-mix(in srgb,var(--ring) 30%,transparent)}.date-range-picker-select option{background-color:var(--popover,var(--background));color:var(--foreground)}.date-range-picker-nav-spacer{display:inline-block;height:1.75rem;width:1.75rem}.date-range-picker-nav{align-items:center;background-color:var(--muted);border:0;border-radius:.5rem;color:var(--muted-foreground);cursor:pointer;display:inline-flex;height:1.75rem;justify-content:center;padding:0;transition:background-color .15s,color .15s;width:1.75rem}.date-range-picker-nav:hover{background-color:var(--accent);color:var(--foreground)}.date-range-picker-nav:disabled{cursor:not-allowed;opacity:.4}.date-range-picker-calendar .react-datepicker__day-names{display:flex;justify-content:space-between;margin:.5rem 0 .25rem}.date-range-picker-calendar .react-datepicker__day-name{color:var(--muted-foreground);font-size:.75rem;font-weight:400;line-height:1.75rem;margin:0;width:2.25rem}.date-range-picker-calendar .react-datepicker__month{margin:0}.date-range-picker-calendar .react-datepicker__week{display:flex;justify-content:space-between}.date-range-picker-calendar .react-datepicker__day{align-items:center;border-radius:.5rem;color:var(--foreground);display:inline-flex;font-size:.875rem;height:2.25rem;justify-content:center;line-height:2.25rem;margin:.125rem 0;width:2.25rem}.date-range-picker-calendar .react-datepicker__day--outside-month{color:var(--muted-foreground);opacity:.55}.date-range-picker-calendar .react-datepicker__day:hover{background-color:var(--muted);border-radius:.5rem}.date-range-picker-calendar .react-datepicker__day--today{background-color:var(--muted);color:var(--foreground);font-weight:600}.date-range-picker-calendar .react-datepicker__day--keyboard-selected,.date-range-picker-calendar .react-datepicker__day--selected{background-color:var(--primary);color:var(--primary-foreground);font-weight:500}.date-range-picker-calendar .react-datepicker__day--keyboard-selected:hover,.date-range-picker-calendar .react-datepicker__day--selected:hover{background-color:var(--primary);color:var(--primary-foreground);filter:brightness(.95)}.date-range-picker-calendar .react-datepicker__day--in-range,.date-range-picker-calendar .react-datepicker__day--in-selecting-range{background-color:color-mix(in srgb,var(--primary) 18%,transparent);color:var(--primary)}.date-range-picker-calendar .react-datepicker__day--range-end,.date-range-picker-calendar .react-datepicker__day--range-start{background-color:var(--primary);color:var(--primary-foreground)}.date-range-picker-calendar .react-datepicker__day--disabled{color:var(--muted-foreground);cursor:not-allowed;opacity:.4}.date-range-picker-calendar .react-datepicker__children-container{margin:0;padding:0;width:auto}.date-range-picker-footer{align-items:center;display:flex;justify-content:space-between;margin-top:.75rem;padding-top:.75rem;width:100%}.date-range-picker-action{align-items:center;background-color:color-mix(in srgb,var(--primary) 10%,transparent);border:0;border-radius:.5rem;color:var(--primary);cursor:pointer;display:inline-flex;font-size:.8125rem;font-weight:500;height:2rem;justify-content:center;padding:0 .875rem;transition:background-color .15s}.date-range-picker-action:hover{background-color:color-mix(in srgb,var(--primary) 18%,transparent)}:is(.dark) .date-range-picker-calendar .react-datepicker__day--today{background-color:color-mix(in srgb,var(--muted) 80%,transparent)}:is(.dark) .date-range-picker-action{background-color:color-mix(in srgb,var(--primary) 18%,transparent)}:is(.dark) .date-range-picker-action:hover{background-color:color-mix(in srgb,var(--primary) 28%,transparent)}";
28070
+ styleInject(css_248z$1);
28071
+
28072
+ /**
28073
+ * Date field that can be typed or picked. The text box takes a masked
28074
+ * `DD/MM/YYYY` entry; the trailing button opens the same calendar as before.
28075
+ */
28076
+ function DateInput({ value, onChange, onBlur, name, id, className, min, max, disabled, placeholder = DATE_FORMAT, ariaLabel, }) {
28077
+ const { open, text, invalid, bounds, inputRef, handleOpenChange, handleTextChange, handleKeyDown, handleTextBlur, toggleOpen, selectDate, clearDate, selectToday, } = useDateInput({ value, onChange, onBlur, min, max, disabled });
27873
28078
  // NOTE: We drive `open` ourselves from the button's onClick instead of using
27874
28079
  // Radix's <PopoverTrigger> toggle. When this Popover is nested inside the
27875
28080
  // modal <SlideOut> (Radix Dialog), the trigger's built-in toggle does not
@@ -27878,20 +28083,7 @@ function DateInput({ value, onChange, onBlur, name, className, min, max, disable
27878
28083
  // source of truth — no double-fire, and it works across browsers. `modal`
27879
28084
  // lets the open popover own pointer events above the dialog so the calendar
27880
28085
  // (portalled to <body>) stays clickable.
27881
- return (jsxs(Popover, { open: open, onOpenChange: handleOpenChange, modal: true, children: [jsx(PopoverAnchor, { asChild: true, children: jsxs("button", { type: "button", name: name, onBlur: onBlur, disabled: disabled, "aria-haspopup": "dialog", "aria-expanded": open, onClick: () => {
27882
- if (!disabled)
27883
- handleOpenChange(!open);
27884
- }, "data-slot": "input", "data-empty": !value || undefined, className: cn('border-input-border flex h-9 w-full min-w-0 cursor-pointer items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-1 text-left shadow-[0_1px_2px_0_#0000000d] transition-[color,box-shadow] outline-none', 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]', 'aria-invalid:ring-destructive/20 aria-invalid:border-destructive', disabled && 'cursor-not-allowed bg-muted/50 text-label', className), children: [jsx("span", { className: cn('truncate text-sm md:text-sm', value ? 'text-foreground' : 'text-placeholder'), children: value ? moment(value).format('DD/MM/YYYY') : placeholder }), jsx("span", { className: "inline-flex h-4 w-4 shrink-0 items-center justify-center text-muted-foreground", children: jsx(CalendarDays, { className: "h-4 w-4 stroke-[1.75]" }) })] }) }), jsx(PopoverContent, { align: "start", className: "date-range-picker-popover w-auto p-4", children: jsx(DatePicker, { inline: true, selected: value ?? null, minDate: minDate ? moment(minDate, 'YYYY-MM-DD').toDate() : undefined, maxDate: maxDate ? moment(maxDate, 'YYYY-MM-DD').toDate() : undefined, onChange: (date) => {
27885
- onChange(date ?? undefined);
27886
- if (date)
27887
- setOpen(false);
27888
- }, calendarClassName: "date-range-picker-calendar", formatWeekDay: (weekday) => weekday.slice(0, 2), renderCustomHeader: ({ monthDate, changeYear, changeMonth, decreaseMonth, increaseMonth, prevMonthButtonDisabled, nextMonthButtonDisabled, }) => (jsx(DatePickerHeader, { monthDate: monthDate, changeYear: changeYear, changeMonth: changeMonth, decreaseMonth: decreaseMonth, increaseMonth: increaseMonth, prevMonthButtonDisabled: prevMonthButtonDisabled, nextMonthButtonDisabled: nextMonthButtonDisabled, minYear: minYear, maxYear: maxYear })), children: jsxs("div", { className: "date-range-picker-footer", children: [jsx("button", { type: "button", onClick: () => {
27889
- onChange(undefined);
27890
- setOpen(false);
27891
- }, className: "date-range-picker-action", children: "Clear" }), jsx("button", { type: "button", onClick: () => {
27892
- onChange(new Date());
27893
- setOpen(false);
27894
- }, className: "date-range-picker-action", children: "Today" })] }) }) })] }));
28086
+ return (jsxs(Popover, { open: open, onOpenChange: handleOpenChange, modal: true, children: [jsx(PopoverAnchor, { asChild: true, children: jsxs("div", { "data-slot": "input", "data-empty": !value || undefined, "data-invalid": invalid || undefined, className: cn('border-input-border flex h-9 w-full min-w-0 items-center gap-2 rounded-md border bg-transparent px-3 py-1 shadow-[0_1px_2px_0_#0000000d] transition-[color,box-shadow] outline-none', 'focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]', 'data-[invalid]:border-destructive data-[invalid]:ring-destructive/20 data-[invalid]:ring-[3px]', disabled && 'cursor-not-allowed bg-muted/50 text-label', className), children: [jsx("input", { ref: inputRef, type: "text", inputMode: "numeric", autoComplete: "off", spellCheck: false, id: id, name: name, value: text, placeholder: placeholder, disabled: disabled, maxLength: DATE_FORMAT.length, "aria-label": ariaLabel, "aria-invalid": invalid || undefined, title: DATE_FORMAT_HINT, onChange: handleTextChange, onKeyDown: handleKeyDown, onBlur: handleTextBlur, className: "placeholder:text-placeholder selection:bg-primary selection:text-primary-foreground h-full min-w-0 flex-1 bg-transparent text-base text-foreground outline-none placeholder:text-sm disabled:cursor-not-allowed disabled:text-label md:text-sm" }), jsx("button", { type: "button", disabled: disabled, "aria-label": CALENDAR_BUTTON_LABEL, "aria-haspopup": "dialog", "aria-expanded": open, onClick: toggleOpen, className: "-mr-1 inline-flex h-6 w-6 shrink-0 cursor-pointer items-center justify-center rounded-sm text-muted-foreground outline-none hover:text-foreground focus-visible:ring-ring/50 focus-visible:ring-[2px] disabled:cursor-not-allowed", children: jsx(CalendarDays, { className: "h-4 w-4 stroke-[1.75]" }) })] }) }), jsx(PopoverContent, { align: "start", className: "date-range-picker-popover w-auto p-4", children: jsx(DatePicker, { inline: true, selected: value ?? null, minDate: toBoundDate(bounds.minDate), maxDate: toBoundDate(bounds.maxDate), onChange: selectDate, calendarClassName: "date-range-picker-calendar", formatWeekDay: (weekday) => weekday.slice(0, 2), renderCustomHeader: ({ monthDate, changeYear, changeMonth, decreaseMonth, increaseMonth, prevMonthButtonDisabled, nextMonthButtonDisabled, }) => (jsx(DatePickerHeader, { monthDate: monthDate, changeYear: changeYear, changeMonth: changeMonth, decreaseMonth: decreaseMonth, increaseMonth: increaseMonth, prevMonthButtonDisabled: prevMonthButtonDisabled, nextMonthButtonDisabled: nextMonthButtonDisabled, minYear: bounds.minYear, maxYear: bounds.maxYear })), children: jsxs("div", { className: "date-range-picker-footer", children: [jsx("button", { type: "button", onClick: clearDate, className: "date-range-picker-action", children: "Clear" }), jsx("button", { type: "button", onClick: selectToday, className: "date-range-picker-action", children: "Today" })] }) }) })] }));
27895
28087
  }
27896
28088
 
27897
28089
  const DropdownMenu = DropdownMenuPrimitive.Root;
@@ -58256,33 +58448,39 @@ function ZoomSplitViewer({ src, alt = 'Preview', zoom = 2, lensSize = 160, paneO
58256
58448
  }) })), isTouchDevice && (jsx("p", { className: `text-xs text-muted-foreground text-center mt-2 ${isMobile ? 'text-2xs' : ''}`, children: isMobile ? 'Touch & hold to zoom' : 'Touch and hold to zoom' }))] }));
58257
58449
  }
58258
58450
 
58259
- const SIZE_MAP = {
58260
- sm: {
58261
- track: { width: 28, height: 16 },
58262
- thumb: 12,
58263
- on: 14,
58264
- off: 2,
58265
- },
58266
- md: {
58267
- track: { width: 44, height: 24 },
58268
- thumb: 20,
58269
- on: 22,
58270
- off: 2,
58271
- },
58272
- lg: {
58273
- track: { width: 52, height: 28 },
58274
- thumb: 24,
58275
- on: 26,
58276
- off: 2,
58277
- },
58451
+ /** 1px border on the track, and the gap between thumb and track. */
58452
+ const TRACK_BORDER = 1;
58453
+ const THUMB_INSET = 2;
58454
+ const TRACK_SIZE = {
58455
+ sm: { width: 28, height: 16 },
58456
+ md: { width: 44, height: 24 },
58457
+ lg: { width: 52, height: 28 },
58278
58458
  };
58459
+ /**
58460
+ * Thumb size and travel are derived from the track rather than listed per size:
58461
+ * hardcoding them left the thumb 1px from the top and bottom but flush against
58462
+ * the inner right edge when on, so it bulged past the track's rounded end.
58463
+ * Deriving keeps the inset equal on all four sides at every size.
58464
+ */
58465
+ function switchGeometry(size) {
58466
+ const track = TRACK_SIZE[size];
58467
+ const innerWidth = track.width - TRACK_BORDER * 2;
58468
+ const innerHeight = track.height - TRACK_BORDER * 2;
58469
+ const thumb = innerHeight - THUMB_INSET * 2;
58470
+ return {
58471
+ track,
58472
+ thumb,
58473
+ off: THUMB_INSET,
58474
+ on: innerWidth - thumb - THUMB_INSET,
58475
+ };
58476
+ }
58279
58477
  const Switch = React.forwardRef(({ checked = false, onCheckedChange, disabled = false, id, name, className, size = 'md', 'aria-label': ariaLabel, }, ref) => {
58280
58478
  const handleClick = () => {
58281
58479
  if (!disabled && onCheckedChange) {
58282
58480
  onCheckedChange(!checked);
58283
58481
  }
58284
58482
  };
58285
- const dims = SIZE_MAP[size];
58483
+ const dims = switchGeometry(size);
58286
58484
  return (jsx("button", { type: "button", role: "switch", "aria-checked": checked, "aria-label": ariaLabel, "data-state": checked ? 'checked' : 'unchecked', disabled: disabled, onClick: handleClick, ref: ref, id: id, name: name, style: {
58287
58485
  width: dims.track.width,
58288
58486
  height: dims.track.height,
@@ -65906,7 +66104,13 @@ function CreateFormPageHeader({ title, onBack, backLabel = 'Go back', }) {
65906
66104
  function CreateFormPageShell({ title, onBack, children, backLabel, scrollable = false, containerClassName, }) {
65907
66105
  const content = (jsxs("div", { className: cn('mx-auto w-full max-w-4xl px-4 py-4', containerClassName), children: [jsx(CreateFormPageHeader, { title: title, onBack: onBack, backLabel: backLabel }), children] }));
65908
66106
  if (scrollable) {
65909
- return (jsx("div", { className: "h-full min-h-0 overflow-y-auto bg-card", children: content }));
66107
+ // `shrink-0` is the load-bearing part. As a flex item in the shell's
66108
+ // `flex-col overflow-y-auto` parent this div was shrunk to the parent's
66109
+ // height while its content overflowed, so the background stopped one
66110
+ // screenful down and taller forms showed the page background below it.
66111
+ // `min-h-full` alone cannot fix that — it resolves to the same shrunken
66112
+ // height. The parent already scrolls, so no inner scroller is needed.
66113
+ return (jsx("div", { className: "min-h-full shrink-0 bg-card", children: content }));
65910
66114
  }
65911
66115
  return content;
65912
66116
  }