@caratlogic/design-system 0.1.7 → 0.1.9

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.cjs.js CHANGED
@@ -12119,18 +12119,18 @@ function requireMoment () {
12119
12119
  var momentExports = requireMoment();
12120
12120
  var moment = /*@__PURE__*/getDefaultExportFromCjs(momentExports);
12121
12121
 
12122
- const DATE_FORMAT = 'DD-MM-YYYY';
12122
+ const DATE_FORMAT$1 = 'DD-MM-YYYY';
12123
12123
  /**
12124
12124
  * Canonical default thumbnail used wherever a gem/diamond/inventory item has
12125
12125
  * no image of its own — single source of truth (mirrors the gem inventory grid).
12126
12126
  */
12127
12127
  const DEFAULT_INVENTORY_THUMBNAIL = '/default%20thumbnail.png';
12128
12128
 
12129
- const formatDate$1 = (iso) => {
12129
+ const formatDate$2 = (iso) => {
12130
12130
  if (!iso)
12131
12131
  return '-';
12132
12132
  try {
12133
- return moment(iso).format(DATE_FORMAT);
12133
+ return moment(iso).format(DATE_FORMAT$1);
12134
12134
  }
12135
12135
  catch {
12136
12136
  return iso;
@@ -12143,7 +12143,7 @@ const InfoCard = ({ info, title, refundToWallet, onRefundChange, }) => {
12143
12143
  if (React.isValidElement(info))
12144
12144
  return jsxRuntime.jsx("div", { className: "mt-3", children: info });
12145
12145
  const i = info;
12146
- return (jsxRuntime.jsx("div", { className: "mt-1 rounded-lg border bg-muted p-3 shadow-sm", children: jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [jsxRuntime.jsx("div", { className: "w-36 text-sm text-muted-foreground", children: "Date" }), jsxRuntime.jsx("div", { children: formatDate$1(i.invoiceDate) })] }), jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [jsxRuntime.jsx("div", { className: "w-36 text-sm text-muted-foreground", children: "Total" }), jsxRuntime.jsx("div", { className: "font-medium text-foreground", children: formatCurrencyWithTenantSymbol(i.totalAmount) })] }), i.paidAmount !== undefined && (jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [jsxRuntime.jsx("div", { className: "w-36 text-sm text-muted-foreground", children: "Paid" }), jsxRuntime.jsx("div", { className: "font-medium text-primary", children: formatCurrencyWithTenantSymbol(i.paidAmount) })] })), i.outstandingAmount !== undefined && (jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [jsxRuntime.jsx("div", { className: "w-36 text-sm text-muted-foreground", children: "Outstanding" }), jsxRuntime.jsx("div", { className: "font-medium text-muted-foreground", children: formatCurrencyWithTenantSymbol(i.outstandingAmount) })] })), title === 'Cancel Invoice' &&
12146
+ return (jsxRuntime.jsx("div", { className: "mt-1 rounded-lg border bg-muted p-3 shadow-sm", children: jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [jsxRuntime.jsx("div", { className: "w-36 text-sm text-muted-foreground", children: "Date" }), jsxRuntime.jsx("div", { children: formatDate$2(i.invoiceDate) })] }), jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [jsxRuntime.jsx("div", { className: "w-36 text-sm text-muted-foreground", children: "Total" }), jsxRuntime.jsx("div", { className: "font-medium text-foreground", children: formatCurrencyWithTenantSymbol(i.totalAmount) })] }), i.paidAmount !== undefined && (jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [jsxRuntime.jsx("div", { className: "w-36 text-sm text-muted-foreground", children: "Paid" }), jsxRuntime.jsx("div", { className: "font-medium text-primary", children: formatCurrencyWithTenantSymbol(i.paidAmount) })] })), i.outstandingAmount !== undefined && (jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [jsxRuntime.jsx("div", { className: "w-36 text-sm text-muted-foreground", children: "Outstanding" }), jsxRuntime.jsx("div", { className: "font-medium text-muted-foreground", children: formatCurrencyWithTenantSymbol(i.outstandingAmount) })] })), title === 'Cancel Invoice' &&
12147
12147
  !React.isValidElement(info) &&
12148
12148
  (i?.paidAmount ?? 0) > 0 && (jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [jsxRuntime.jsx("div", { className: "w-36 whitespace-nowrap text-sm text-muted-foreground", children: "Refund to Wallet" }), jsxRuntime.jsx(Checkbox, { checked: !!refundToWallet, onCheckedChange: (v) => onRefundChange?.(Boolean(v)), className: "bg-card" })] })), (i.customerName || i.email) && (jsxRuntime.jsxs("div", { className: "mt-1 rounded bg-card p-2", children: [i.customerName && (jsxRuntime.jsx("div", { className: "text-sm font-medium", children: i.customerName })), i.email && (jsxRuntime.jsx("div", { className: "text-sm text-muted-foreground", children: i.email }))] }))] }) }));
12149
12149
  };
@@ -22605,7 +22605,7 @@ function parseDate(value, dateFormat, locale, strictParsing, refDate) {
22605
22605
  var parsedDate = parse(value, format_1, refDate, {
22606
22606
  locale: localeObject});
22607
22607
  if (isValid(parsedDate) &&
22608
- (!strictParsing || value === formatDate(parsedDate, format_1, locale))) {
22608
+ (!strictParsing || value === formatDate$1(parsedDate, format_1, locale))) {
22609
22609
  return parsedDate;
22610
22610
  }
22611
22611
  }
@@ -22633,7 +22633,7 @@ function isValid(date, minDate) {
22633
22633
  * @param locale - The locale.
22634
22634
  * @returns - The formatted date.
22635
22635
  */
22636
- function formatDate(date, formatStr, locale) {
22636
+ function formatDate$1(date, formatStr, locale) {
22637
22637
  if (locale === "en") {
22638
22638
  return format(date, formatStr, {
22639
22639
  useAdditionalWeekYearTokens: true,
@@ -22663,7 +22663,7 @@ function safeDateFormat(date, _a) {
22663
22663
  var formatStr = (Array.isArray(dateFormat) && dateFormat.length > 0
22664
22664
  ? dateFormat[0]
22665
22665
  : dateFormat); // Cast to string because it's impossible to get `string | string[] | undefined` here and typescript doesn't know that
22666
- return (date && formatDate(date, formatStr, locale)) || "";
22666
+ return (date && formatDate$1(date, formatStr, locale)) || "";
22667
22667
  }
22668
22668
  /**
22669
22669
  * Used as a delimiter to separate two dates when formatting a date range
@@ -22737,7 +22737,7 @@ function getWeek(date) {
22737
22737
  * @returns - The day of the week code.
22738
22738
  */
22739
22739
  function getDayOfWeekCode(day, locale) {
22740
- return formatDate(day, "ddd", locale);
22740
+ return formatDate$1(day, "ddd", locale);
22741
22741
  }
22742
22742
  // *** Start of ***
22743
22743
  /**
@@ -22960,7 +22960,7 @@ function getLocaleObject(localeSpec) {
22960
22960
  * @returns - The formatted weekday.
22961
22961
  */
22962
22962
  function getFormattedWeekdayInLocale(date, formatFunc, locale) {
22963
- return formatFunc(formatDate(date, "EEEE", locale));
22963
+ return formatFunc(formatDate$1(date, "EEEE", locale));
22964
22964
  }
22965
22965
  /**
22966
22966
  * Gets the minimum weekday in a given locale.
@@ -22970,7 +22970,7 @@ function getFormattedWeekdayInLocale(date, formatFunc, locale) {
22970
22970
  * @returns - The minimum weekday.
22971
22971
  */
22972
22972
  function getWeekdayMinInLocale(date, locale) {
22973
- return formatDate(date, "EEEEEE", locale);
22973
+ return formatDate$1(date, "EEEEEE", locale);
22974
22974
  }
22975
22975
  /**
22976
22976
  * Gets the short weekday in a given locale.
@@ -22980,7 +22980,7 @@ function getWeekdayMinInLocale(date, locale) {
22980
22980
  * @returns - The short weekday.
22981
22981
  */
22982
22982
  function getWeekdayShortInLocale(date, locale) {
22983
- return formatDate(date, "EEE", locale);
22983
+ return formatDate$1(date, "EEE", locale);
22984
22984
  }
22985
22985
  /**
22986
22986
  * Gets the month in a given locale.
@@ -22990,7 +22990,7 @@ function getWeekdayShortInLocale(date, locale) {
22990
22990
  * @returns - The month.
22991
22991
  */
22992
22992
  function getMonthInLocale(month, locale) {
22993
- return formatDate(setMonth(newDate(), month), "LLLL", locale);
22993
+ return formatDate$1(setMonth(newDate(), month), "LLLL", locale);
22994
22994
  }
22995
22995
  /**
22996
22996
  * Gets the short month in a given locale.
@@ -23000,7 +23000,7 @@ function getMonthInLocale(month, locale) {
23000
23000
  * @returns - The short month.
23001
23001
  */
23002
23002
  function getMonthShortInLocale(month, locale) {
23003
- return formatDate(setMonth(newDate(), month), "LLL", locale);
23003
+ return formatDate$1(setMonth(newDate(), month), "LLL", locale);
23004
23004
  }
23005
23005
  /**
23006
23006
  * Gets the short quarter in a given locale.
@@ -23010,7 +23010,7 @@ function getMonthShortInLocale(month, locale) {
23010
23010
  * @returns - The short quarter.
23011
23011
  */
23012
23012
  function getQuarterShortInLocale(quarter, locale) {
23013
- return formatDate(setQuarter(newDate(), quarter), "QQQ", locale);
23013
+ return formatDate$1(setQuarter(newDate(), quarter), "QQQ", locale);
23014
23014
  }
23015
23015
  /**
23016
23016
  * Checks if a day is disabled.
@@ -23340,7 +23340,7 @@ function getHighLightDaysMap(highlightDates, defaultClassName) {
23340
23340
  for (var i = 0, len = highlightDates.length; i < len; i++) {
23341
23341
  var obj = highlightDates[i];
23342
23342
  if (isDate(obj)) {
23343
- var key = formatDate(obj, "MM.dd.yyyy");
23343
+ var key = formatDate$1(obj, "MM.dd.yyyy");
23344
23344
  var classNamesArr = dateClasses.get(key) || [];
23345
23345
  if (!classNamesArr.includes(defaultClassName)) {
23346
23346
  classNamesArr.push(defaultClassName);
@@ -23355,7 +23355,7 @@ function getHighLightDaysMap(highlightDates, defaultClassName) {
23355
23355
  for (var k = 0, len_1 = arrOfDates.length; k < len_1; k++) {
23356
23356
  var dateK = arrOfDates[k];
23357
23357
  if (dateK) {
23358
- var key = formatDate(dateK, "MM.dd.yyyy");
23358
+ var key = formatDate$1(dateK, "MM.dd.yyyy");
23359
23359
  var classNamesArr = dateClasses.get(key) || [];
23360
23360
  if (!classNamesArr.includes(className)) {
23361
23361
  classNamesArr.push(className);
@@ -23395,7 +23395,7 @@ function getHolidaysMap(holidayDates, defaultClassName) {
23395
23395
  if (!isDate(dateObj)) {
23396
23396
  return;
23397
23397
  }
23398
- var key = formatDate(dateObj, "MM.dd.yyyy");
23398
+ var key = formatDate$1(dateObj, "MM.dd.yyyy");
23399
23399
  var classNamesObj = dateClasses.get(key) || {
23400
23400
  className: "",
23401
23401
  holidayNames: [],
@@ -23769,7 +23769,7 @@ var Day = /** @class */ (function (_super) {
23769
23769
  return false;
23770
23770
  }
23771
23771
  // Looking for className in the Map of {'day string, 'className'}
23772
- var dayStr = formatDate(day, "MM.dd.yyyy");
23772
+ var dayStr = formatDate$1(day, "MM.dd.yyyy");
23773
23773
  return highlightDates.get(dayStr);
23774
23774
  };
23775
23775
  // Function to return the array containing className associated to the date
@@ -23780,7 +23780,7 @@ var Day = /** @class */ (function (_super) {
23780
23780
  // For type consistency no other reasons
23781
23781
  return [undefined];
23782
23782
  }
23783
- var dayStr = formatDate(day, "MM.dd.yyyy");
23783
+ var dayStr = formatDate$1(day, "MM.dd.yyyy");
23784
23784
  // Looking for className in the Map of {day string: {className, holidayName}}
23785
23785
  if (holidays.has(dayStr)) {
23786
23786
  return [(_a = holidays.get(dayStr)) === null || _a === void 0 ? void 0 : _a.className];
@@ -23921,12 +23921,12 @@ var Day = /** @class */ (function (_super) {
23921
23921
  var prefix = _this.isDisabled() || _this.isExcluded()
23922
23922
  ? ariaLabelPrefixWhenDisabled
23923
23923
  : ariaLabelPrefixWhenEnabled;
23924
- return "".concat(prefix, " ").concat(formatDate(day, "PPPP", _this.props.locale));
23924
+ return "".concat(prefix, " ").concat(formatDate$1(day, "PPPP", _this.props.locale));
23925
23925
  };
23926
23926
  // A function to return the holiday's name as title's content
23927
23927
  _this.getTitle = function () {
23928
23928
  var _a = _this.props, day = _a.day, _b = _a.holidays, holidays = _b === void 0 ? new Map() : _b, excludeDates = _a.excludeDates;
23929
- var compareDt = formatDate(day, "MM.dd.yyyy");
23929
+ var compareDt = formatDate$1(day, "MM.dd.yyyy");
23930
23930
  var titles = [];
23931
23931
  if (holidays.has(compareDt)) {
23932
23932
  titles.push.apply(titles, holidays.get(compareDt).holidayNames);
@@ -24852,7 +24852,7 @@ var Month = /** @class */ (function (_super) {
24852
24852
  var prefix = _this.isDisabled(labelDate) || _this.isExcluded(labelDate)
24853
24853
  ? disabledDayAriaLabelPrefix
24854
24854
  : chooseDayAriaLabelPrefix;
24855
- return "".concat(prefix, " ").concat(formatDate(labelDate, "MMMM yyyy", locale));
24855
+ return "".concat(prefix, " ").concat(formatDate$1(labelDate, "MMMM yyyy", locale));
24856
24856
  };
24857
24857
  _this.getQuarterClassNames = function (q) {
24858
24858
  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;
@@ -24954,7 +24954,7 @@ var Month = /** @class */ (function (_super) {
24954
24954
  : "";
24955
24955
  // Format aria-label, return empty string if date is invalid
24956
24956
  var formattedAriaLabel = isValid(day)
24957
- ? "".concat(formattedAriaLabelPrefix).concat(formatDate(day, "MMMM, yyyy", this.props.locale))
24957
+ ? "".concat(formattedAriaLabelPrefix).concat(formatDate$1(day, "MMMM, yyyy", this.props.locale))
24958
24958
  : "";
24959
24959
  var shouldUseListboxRole = showMonthYearPicker || showQuarterYearPicker;
24960
24960
  if (shouldUseListboxRole) {
@@ -25097,7 +25097,7 @@ var MonthYearDropdownOptions = /** @class */ (function (_super) {
25097
25097
  ? "react-datepicker__month-year-option--selected_month-year"
25098
25098
  : "react-datepicker__month-year-option", key: monthYearPoint, onClick: _this.onChange.bind(_this, monthYearPoint), "aria-selected": isSameMonthYear ? "true" : undefined },
25099
25099
  isSameMonthYear ? (React.createElement("span", { className: "react-datepicker__month-year-option--selected" }, "\u2713")) : (""),
25100
- formatDate(monthYear, _this.props.dateFormat, _this.props.locale)));
25100
+ formatDate$1(monthYear, _this.props.dateFormat, _this.props.locale)));
25101
25101
  });
25102
25102
  };
25103
25103
  _this.onChange = function (monthYear) { return _this.props.onChange(monthYear); };
@@ -25132,7 +25132,7 @@ var MonthYearDropdown = /** @class */ (function (_super) {
25132
25132
  var options = [];
25133
25133
  while (!isAfter$1(currDate, lastDate)) {
25134
25134
  var timePoint = getTime(currDate);
25135
- options.push(React.createElement("option", { key: timePoint, value: timePoint }, formatDate(currDate, _this.props.dateFormat, _this.props.locale)));
25135
+ options.push(React.createElement("option", { key: timePoint, value: timePoint }, formatDate$1(currDate, _this.props.dateFormat, _this.props.locale)));
25136
25136
  currDate = addMonths(currDate, 1);
25137
25137
  }
25138
25138
  return options;
@@ -25142,7 +25142,7 @@ var MonthYearDropdown = /** @class */ (function (_super) {
25142
25142
  };
25143
25143
  _this.renderSelectMode = function () { return (React.createElement("select", { value: getTime(getStartOfMonth(_this.props.date)), className: "react-datepicker__month-year-select", onChange: _this.onSelectChange }, _this.renderSelectOptions())); };
25144
25144
  _this.renderReadView = function (visible) {
25145
- var yearMonth = formatDate(_this.props.date, _this.props.dateFormat, _this.props.locale);
25145
+ var yearMonth = formatDate$1(_this.props.date, _this.props.dateFormat, _this.props.locale);
25146
25146
  return (React.createElement("div", { key: "read", style: { visibility: visible ? "visible" : "hidden" }, className: "react-datepicker__month-year-read-view", onClick: _this.toggleDropdown },
25147
25147
  React.createElement("span", { className: "react-datepicker__month-year-read-view--down-arrow" }),
25148
25148
  React.createElement("span", { className: "react-datepicker__month-year-read-view--selected-month-year" }, yearMonth)));
@@ -25311,7 +25311,7 @@ var Time = /** @class */ (function (_super) {
25311
25311
  }
25312
25312
  }, onKeyDown: function (event) {
25313
25313
  _this.handleOnKeyDown(event, time);
25314
- }, 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)));
25314
+ }, 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)));
25315
25315
  });
25316
25316
  };
25317
25317
  _this.renderTimeCaption = function () {
@@ -26082,7 +26082,7 @@ var Calendar = /** @class */ (function (_super) {
26082
26082
  ? _this.props.weekDayClassName(day)
26083
26083
  : undefined;
26084
26084
  return (React.createElement("div", { key: offset, role: "columnheader", className: clsx("react-datepicker__day-name", weekDayClassName, disabled ? "react-datepicker__day-name--disabled" : "") },
26085
- React.createElement("span", { className: "react-datepicker__sr-only" }, formatDate(day, "EEEE", _this.props.locale)),
26085
+ React.createElement("span", { className: "react-datepicker__sr-only" }, formatDate$1(day, "EEEE", _this.props.locale)),
26086
26086
  React.createElement("span", { "aria-hidden": "true" }, weekDayName)));
26087
26087
  }));
26088
26088
  };
@@ -26262,7 +26262,7 @@ var Calendar = /** @class */ (function (_super) {
26262
26262
  classes.push("react-datepicker__current-month--hasMonthYearDropdown");
26263
26263
  }
26264
26264
  return (React.createElement("h2", { className: classes.join(" ") }, isValid(date)
26265
- ? formatDate(date, _this.props.dateFormat, _this.props.locale)
26265
+ ? formatDate$1(date, _this.props.dateFormat, _this.props.locale)
26266
26266
  : ""));
26267
26267
  };
26268
26268
  _this.renderYearDropdown = function (overrideHide) {
@@ -27246,7 +27246,7 @@ var DatePicker = /** @class */ (function (_super) {
27246
27246
  var newMinutes = Math.min(maxMinutes, currentMinutes + timeIntervals);
27247
27247
  newTime = addMinutes(baseDate, newMinutes);
27248
27248
  }
27249
- var formattedTime = formatDate(newTime, formatStr || DatePicker.defaultProps.dateFormat, _this.props.locale);
27249
+ var formattedTime = formatDate$1(newTime, formatStr || DatePicker.defaultProps.dateFormat, _this.props.locale);
27250
27250
  _this.setState({
27251
27251
  preSelection: newTime,
27252
27252
  inputValue: formattedTime,
@@ -27838,24 +27838,77 @@ var PRESELECT_CHANGE_VIA_INPUT = "input";
27838
27838
  var PRESELECT_CHANGE_VIA_NAVIGATE = "navigate";
27839
27839
 
27840
27840
  const MONTHS = moment.months();
27841
+ /** The one format the field displays and accepts when typed. */
27842
+ const DATE_FORMAT = 'DD/MM/YYYY';
27843
+ const BOUND_FORMAT = 'YYYY-MM-DD';
27844
+ const MAX_DIGITS = 8;
27841
27845
  function computeDateBounds(min, max) {
27842
27846
  const minDate = min
27843
27847
  ? min instanceof Date
27844
- ? moment(min).format('YYYY-MM-DD')
27848
+ ? moment(min).format(BOUND_FORMAT)
27845
27849
  : min
27846
27850
  : undefined;
27847
27851
  const maxDate = max
27848
27852
  ? max instanceof Date
27849
- ? moment(max).format('YYYY-MM-DD')
27853
+ ? moment(max).format(BOUND_FORMAT)
27850
27854
  : max
27851
27855
  : undefined;
27852
27856
  return {
27853
27857
  minDate,
27854
27858
  maxDate,
27855
- minYear: minDate ? moment(minDate, 'YYYY-MM-DD').year() : undefined,
27856
- maxYear: maxDate ? moment(maxDate, 'YYYY-MM-DD').year() : undefined,
27859
+ minYear: minDate ? moment(minDate, BOUND_FORMAT).year() : undefined,
27860
+ maxYear: maxDate ? moment(maxDate, BOUND_FORMAT).year() : undefined,
27857
27861
  };
27858
27862
  }
27863
+ function formatDate(value) {
27864
+ return value ? moment(value).format(DATE_FORMAT) : '';
27865
+ }
27866
+ function toBoundDate(bound) {
27867
+ return bound ? moment(bound, BOUND_FORMAT).toDate() : undefined;
27868
+ }
27869
+ /**
27870
+ * Keep only the digits a date can hold and re-insert the separators, so typing
27871
+ * `25082026` reads back as `25/08/2026` and pasted junk cannot survive.
27872
+ */
27873
+ function maskDateText(text) {
27874
+ const digits = text.replace(/\D/g, '').slice(0, MAX_DIGITS);
27875
+ if (digits.length <= 2)
27876
+ return digits;
27877
+ if (digits.length <= 4)
27878
+ return `${digits.slice(0, 2)}/${digits.slice(2)}`;
27879
+ return `${digits.slice(0, 2)}/${digits.slice(2, 4)}/${digits.slice(4)}`;
27880
+ }
27881
+ function countDigits(text) {
27882
+ return text.replace(/\D/g, '').length;
27883
+ }
27884
+ /** Offset in `text` that sits just after its nth digit. */
27885
+ function caretAfterDigits(text, digits) {
27886
+ if (digits <= 0)
27887
+ return 0;
27888
+ let seen = 0;
27889
+ for (let index = 0; index < text.length; index += 1) {
27890
+ if (text[index] >= '0' && text[index] <= '9') {
27891
+ seen += 1;
27892
+ if (seen === digits)
27893
+ return index + 1;
27894
+ }
27895
+ }
27896
+ return text.length;
27897
+ }
27898
+ function parseDateText(text) {
27899
+ const parsed = moment(text, DATE_FORMAT, true);
27900
+ return parsed.isValid() ? parsed.toDate() : undefined;
27901
+ }
27902
+ function isWithinBounds(date, { minDate, maxDate }) {
27903
+ const day = moment(date).startOf('day');
27904
+ if (minDate && day.isBefore(moment(minDate, BOUND_FORMAT).startOf('day'))) {
27905
+ return false;
27906
+ }
27907
+ if (maxDate && day.isAfter(moment(maxDate, BOUND_FORMAT).startOf('day'))) {
27908
+ return false;
27909
+ }
27910
+ return true;
27911
+ }
27859
27912
 
27860
27913
  function DatePickerHeader({ monthDate, changeYear, changeMonth, decreaseMonth, increaseMonth, prevMonthButtonDisabled, nextMonthButtonDisabled, minYear, maxYear, hidePrev, hideNext, }) {
27861
27914
  const current = moment(monthDate);
@@ -27870,25 +27923,39 @@ function DatePickerHeader({ monthDate, changeYear, changeMonth, decreaseMonth, i
27870
27923
  return (jsxRuntime.jsxs("div", { className: "date-range-picker-header", children: [hidePrev ? (jsxRuntime.jsx("span", { className: "date-range-picker-nav-spacer", "aria-hidden": true })) : (jsxRuntime.jsx("button", { type: "button", onClick: decreaseMonth, disabled: prevMonthButtonDisabled, "aria-label": "Previous month", className: "date-range-picker-nav", children: jsxRuntime.jsx(ChevronLeft, { className: "h-4 w-4", strokeWidth: 2 }) })), jsxRuntime.jsxs("div", { className: "date-range-picker-selects", children: [jsxRuntime.jsx("div", { className: "date-range-picker-select-wrap", children: jsxRuntime.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) => (jsxRuntime.jsx("option", { value: index, children: label }, label))) }) }), jsxRuntime.jsx("div", { className: "date-range-picker-select-wrap", children: jsxRuntime.jsx("select", { "aria-label": "Select year", className: "date-range-picker-select", value: shownYear, onChange: (event) => changeYear(Number(event.target.value)), children: years.map((year) => (jsxRuntime.jsx("option", { value: year, children: year }, year))) }) })] }), hideNext ? (jsxRuntime.jsx("span", { className: "date-range-picker-nav-spacer", "aria-hidden": true })) : (jsxRuntime.jsx("button", { type: "button", onClick: increaseMonth, disabled: nextMonthButtonDisabled, "aria-label": "Next month", className: "date-range-picker-nav", children: jsxRuntime.jsx(ChevronRight, { className: "h-4 w-4", strokeWidth: 2 }) }))] }));
27871
27924
  }
27872
27925
 
27873
- 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}";
27874
- styleInject(css_248z$2);
27875
-
27876
- 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)}";
27877
- styleInject(css_248z$1);
27878
-
27879
27926
  // Only one DateInput popover should be open at a time. Because each instance is
27880
27927
  // its own `modal` Radix Popover, opening a second one does not dismiss the first
27881
27928
  // via outside-click. Instances coordinate through a window event: whoever opens
27882
27929
  // broadcasts its id, and every other open instance closes itself.
27883
27930
  const DATEINPUT_OPEN_EVENT = 'caratlogic:dateinput-open';
27884
- function DateInput({ value, onChange, onBlur, name, className, min, max, disabled, placeholder = 'Select date', }) {
27931
+ function useDateInput({ value, onChange, onBlur, min, max, disabled, }) {
27885
27932
  const [open, setOpen] = React.useState(false);
27886
27933
  const instanceId = React.useId();
27887
- const { minDate, maxDate, minYear, maxYear } = computeDateBounds(min, max);
27888
- // Close this popover when any other DateInput announces it just opened.
27934
+ const inputRef = React.useRef(null);
27935
+ const caretRef = React.useRef(null);
27936
+ const bounds = computeDateBounds(min, max);
27937
+ const formatted = formatDate(value);
27938
+ const [text, setText] = React.useState(formatted);
27939
+ const [syncedValue, setSyncedValue] = React.useState(formatted);
27940
+ // Adopt `value` whenever it changes from the outside — a form reset, a
27941
+ // calendar pick, a sibling field narrowing the range — while leaving a
27942
+ // half-typed date alone.
27943
+ if (formatted !== syncedValue) {
27944
+ setSyncedValue(formatted);
27945
+ setText(formatted);
27946
+ }
27947
+ // Masking rewrites the whole string, which parks the caret at the end on any
27948
+ // keystroke that crosses a separator. Put it back once the DOM has the value.
27949
+ React.useLayoutEffect(() => {
27950
+ const caret = caretRef.current;
27951
+ if (caret === null || !inputRef.current)
27952
+ return;
27953
+ caretRef.current = null;
27954
+ inputRef.current.setSelectionRange(caret, caret);
27955
+ });
27889
27956
  React.useEffect(() => {
27890
- const onOtherOpen = (e) => {
27891
- if (e.detail !== instanceId)
27957
+ const onOtherOpen = (event) => {
27958
+ if (event.detail !== instanceId)
27892
27959
  setOpen(false);
27893
27960
  };
27894
27961
  window.addEventListener(DATEINPUT_OPEN_EVENT, onOtherOpen);
@@ -27900,6 +27967,132 @@ function DateInput({ value, onChange, onBlur, name, className, min, max, disable
27900
27967
  window.dispatchEvent(new CustomEvent(DATEINPUT_OPEN_EVENT, { detail: instanceId }));
27901
27968
  }
27902
27969
  };
27970
+ const commit = (date) => {
27971
+ const next = formatDate(date);
27972
+ setText(next);
27973
+ setSyncedValue(next);
27974
+ onChange(date);
27975
+ };
27976
+ /**
27977
+ * Show `masked` and report it upwards only once it is a whole, real,
27978
+ * in-range date — so `01/01/2` on the way to `01/01/2026` never lands in the
27979
+ * form, and an emptied field clears the value.
27980
+ */
27981
+ const applyText = (masked, caret) => {
27982
+ caretRef.current = caret;
27983
+ setText(masked);
27984
+ if (masked === '') {
27985
+ setSyncedValue('');
27986
+ onChange(undefined);
27987
+ return;
27988
+ }
27989
+ if (masked.length < DATE_FORMAT.length)
27990
+ return;
27991
+ const parsed = parseDateText(masked);
27992
+ if (parsed && isWithinBounds(parsed, bounds)) {
27993
+ setSyncedValue(masked);
27994
+ onChange(parsed);
27995
+ }
27996
+ };
27997
+ const handleTextChange = (event) => {
27998
+ const raw = event.target.value;
27999
+ const caret = event.target.selectionStart ?? raw.length;
28000
+ const masked = maskDateText(raw);
28001
+ applyText(masked, caretAfterDigits(masked, countDigits(raw.slice(0, caret))));
28002
+ };
28003
+ /** Fall back to the committed value when the field is left mid-edit. */
28004
+ const normalize = () => {
28005
+ if (text === '')
28006
+ return;
28007
+ const parsed = parseDateText(text);
28008
+ if (!parsed || !isWithinBounds(parsed, bounds))
28009
+ setText(formatted);
28010
+ };
28011
+ const handleKeyDown = (event) => {
28012
+ if (event.key === 'Enter') {
28013
+ // Settle the field rather than submitting the form around it.
28014
+ event.preventDefault();
28015
+ setOpen(false);
28016
+ normalize();
28017
+ return;
28018
+ }
28019
+ if (event.key === 'Escape' && open) {
28020
+ setOpen(false);
28021
+ return;
28022
+ }
28023
+ if (event.key === 'ArrowDown' && event.altKey && !disabled) {
28024
+ event.preventDefault();
28025
+ handleOpenChange(true);
28026
+ return;
28027
+ }
28028
+ if (event.key !== 'Backspace')
28029
+ return;
28030
+ // A separator is not content: backspacing onto a `/` has to take the digit
28031
+ // in front of it, or the mask re-inserts the slash and the caret sticks.
28032
+ const input = event.currentTarget;
28033
+ const start = input.selectionStart ?? 0;
28034
+ if (start !== input.selectionEnd ||
28035
+ start < 2 ||
28036
+ input.value[start - 1] !== '/') {
28037
+ return;
28038
+ }
28039
+ event.preventDefault();
28040
+ const kept = input.value.slice(0, start - 2);
28041
+ const masked = maskDateText(kept + input.value.slice(start));
28042
+ applyText(masked, caretAfterDigits(masked, countDigits(kept)));
28043
+ };
28044
+ const handleTextBlur = () => {
28045
+ normalize();
28046
+ onBlur?.();
28047
+ };
28048
+ const parsedText = parseDateText(text);
28049
+ return {
28050
+ open,
28051
+ text,
28052
+ invalid: text.length === DATE_FORMAT.length &&
28053
+ (!parsedText || !isWithinBounds(parsedText, bounds)),
28054
+ bounds,
28055
+ inputRef,
28056
+ handleOpenChange,
28057
+ handleTextChange,
28058
+ handleKeyDown,
28059
+ handleTextBlur,
28060
+ toggleOpen: () => {
28061
+ if (!disabled)
28062
+ handleOpenChange(!open);
28063
+ },
28064
+ selectDate: (date) => {
28065
+ commit(date ?? undefined);
28066
+ if (date)
28067
+ setOpen(false);
28068
+ },
28069
+ clearDate: () => {
28070
+ commit(undefined);
28071
+ setOpen(false);
28072
+ },
28073
+ selectToday: () => {
28074
+ commit(new Date());
28075
+ setOpen(false);
28076
+ },
28077
+ };
28078
+ }
28079
+
28080
+ const CALENDAR_BUTTON_LABEL = 'Open calendar';
28081
+ /** Spells out what the field accepts, since the format is now typeable. */
28082
+ const DATE_FORMAT_HINT = `Date format ${DATE_FORMAT}`;
28083
+
28084
+ 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}";
28085
+ styleInject(css_248z$2);
28086
+
28087
+ 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)}";
28088
+ styleInject(css_248z$1);
28089
+
28090
+ /**
28091
+ * Date field that can be typed or picked. The text box takes a masked
28092
+ * `DD/MM/YYYY` entry; the trailing button opens the same calendar as before.
28093
+ */
28094
+ function DateInput({ value, onChange, onBlur, name, id, className, min, max, disabled, placeholder = DATE_FORMAT, ariaLabel, }) {
28095
+ const { open, text, invalid, bounds, inputRef, handleOpenChange, handleTextChange, handleKeyDown, handleTextBlur, toggleOpen, selectDate, clearDate, selectToday, } = useDateInput({ value, onChange, onBlur, min, max, disabled });
27903
28096
  // NOTE: We drive `open` ourselves from the button's onClick instead of using
27904
28097
  // Radix's <PopoverTrigger> toggle. When this Popover is nested inside the
27905
28098
  // modal <SlideOut> (Radix Dialog), the trigger's built-in toggle does not
@@ -27908,20 +28101,7 @@ function DateInput({ value, onChange, onBlur, name, className, min, max, disable
27908
28101
  // source of truth — no double-fire, and it works across browsers. `modal`
27909
28102
  // lets the open popover own pointer events above the dialog so the calendar
27910
28103
  // (portalled to <body>) stays clickable.
27911
- return (jsxRuntime.jsxs(Popover, { open: open, onOpenChange: handleOpenChange, modal: true, children: [jsxRuntime.jsx(PopoverAnchor, { asChild: true, children: jsxRuntime.jsxs("button", { type: "button", name: name, onBlur: onBlur, disabled: disabled, "aria-haspopup": "dialog", "aria-expanded": open, onClick: () => {
27912
- if (!disabled)
27913
- handleOpenChange(!open);
27914
- }, "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: [jsxRuntime.jsx("span", { className: cn('truncate text-sm md:text-sm', value ? 'text-foreground' : 'text-placeholder'), children: value ? moment(value).format('DD/MM/YYYY') : placeholder }), jsxRuntime.jsx("span", { className: "inline-flex h-4 w-4 shrink-0 items-center justify-center text-muted-foreground", children: jsxRuntime.jsx(CalendarDays, { className: "h-4 w-4 stroke-[1.75]" }) })] }) }), jsxRuntime.jsx(PopoverContent, { align: "start", className: "date-range-picker-popover w-auto p-4", children: jsxRuntime.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) => {
27915
- onChange(date ?? undefined);
27916
- if (date)
27917
- setOpen(false);
27918
- }, calendarClassName: "date-range-picker-calendar", formatWeekDay: (weekday) => weekday.slice(0, 2), renderCustomHeader: ({ monthDate, changeYear, changeMonth, decreaseMonth, increaseMonth, prevMonthButtonDisabled, nextMonthButtonDisabled, }) => (jsxRuntime.jsx(DatePickerHeader, { monthDate: monthDate, changeYear: changeYear, changeMonth: changeMonth, decreaseMonth: decreaseMonth, increaseMonth: increaseMonth, prevMonthButtonDisabled: prevMonthButtonDisabled, nextMonthButtonDisabled: nextMonthButtonDisabled, minYear: minYear, maxYear: maxYear })), children: jsxRuntime.jsxs("div", { className: "date-range-picker-footer", children: [jsxRuntime.jsx("button", { type: "button", onClick: () => {
27919
- onChange(undefined);
27920
- setOpen(false);
27921
- }, className: "date-range-picker-action", children: "Clear" }), jsxRuntime.jsx("button", { type: "button", onClick: () => {
27922
- onChange(new Date());
27923
- setOpen(false);
27924
- }, className: "date-range-picker-action", children: "Today" })] }) }) })] }));
28104
+ return (jsxRuntime.jsxs(Popover, { open: open, onOpenChange: handleOpenChange, modal: true, children: [jsxRuntime.jsx(PopoverAnchor, { asChild: true, children: jsxRuntime.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: [jsxRuntime.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" }), jsxRuntime.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: jsxRuntime.jsx(CalendarDays, { className: "h-4 w-4 stroke-[1.75]" }) })] }) }), jsxRuntime.jsx(PopoverContent, { align: "start", className: "date-range-picker-popover w-auto p-4", children: jsxRuntime.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, }) => (jsxRuntime.jsx(DatePickerHeader, { monthDate: monthDate, changeYear: changeYear, changeMonth: changeMonth, decreaseMonth: decreaseMonth, increaseMonth: increaseMonth, prevMonthButtonDisabled: prevMonthButtonDisabled, nextMonthButtonDisabled: nextMonthButtonDisabled, minYear: bounds.minYear, maxYear: bounds.maxYear })), children: jsxRuntime.jsxs("div", { className: "date-range-picker-footer", children: [jsxRuntime.jsx("button", { type: "button", onClick: clearDate, className: "date-range-picker-action", children: "Clear" }), jsxRuntime.jsx("button", { type: "button", onClick: selectToday, className: "date-range-picker-action", children: "Today" })] }) }) })] }));
27925
28105
  }
27926
28106
 
27927
28107
  const DropdownMenu = DropdownMenuPrimitive__namespace.Root;
@@ -57479,7 +57659,11 @@ const SidebarInset = React__namespace.forwardRef(({ className, ...props }, ref)
57479
57659
  SidebarInset.displayName = 'SidebarInset';
57480
57660
  const SidebarInput = React__namespace.forwardRef(({ className, ...props }, ref) => (jsxRuntime.jsx("input", { ref: ref, "data-sidebar": "input", className: cn('h-8 w-full bg-background text-sm shadow-none focus-visible:ring-2 focus-visible:ring-sidebar-ring', className), ...props })));
57481
57661
  SidebarInput.displayName = 'SidebarInput';
57482
- const SidebarHeader = React__namespace.forwardRef(({ className, ...props }, ref) => (jsxRuntime.jsx("div", { ref: ref, "data-sidebar": "header", className: cn('flex flex-col gap-2 pr-1 pt-3 pb-4 pl-4', className), ...props })));
57662
+ const SidebarHeader = React__namespace.forwardRef(({ className, ...props }, ref) => (jsxRuntime.jsx("div", { ref: ref, "data-sidebar": "header",
57663
+ /* Icon mode drops the asymmetric pl-4/pr-1 (which is there for the expanded
57664
+ brand + collapse button row) so a centred brand lands on the same axis as
57665
+ the nav icons below it. */
57666
+ className: cn('flex flex-col gap-2 pr-1 pt-3 pb-4 pl-4 group-data-[collapsible=icon]:px-0', className), ...props })));
57483
57667
  SidebarHeader.displayName = 'SidebarHeader';
57484
57668
  const SidebarFooter = React__namespace.forwardRef(({ className, ...props }, ref) => (jsxRuntime.jsx("div", { ref: ref, "data-sidebar": "footer", className: cn('flex flex-col gap-2 pr-1 py-4 pl-4', className), ...props })));
57485
57669
  SidebarFooter.displayName = 'SidebarFooter';
@@ -57505,6 +57689,21 @@ const SidebarMenu = React__namespace.forwardRef(({ className, ...props }, ref) =
57505
57689
  SidebarMenu.displayName = 'SidebarMenu';
57506
57690
  const SidebarMenuItem = React__namespace.forwardRef(({ className, ...props }, ref) => (jsxRuntime.jsx("li", { ref: ref, "data-sidebar": "menu-item", className: cn('group/menu-item relative', className), ...props })));
57507
57691
  SidebarMenuItem.displayName = 'SidebarMenuItem';
57692
+ /**
57693
+ * Owns a nav tooltip's open state so every tooltip closes when the sidebar
57694
+ * expands or collapses. The width transition slides buttons out from under a
57695
+ * stationary pointer without firing `pointerleave`, so Radix otherwise keeps
57696
+ * each tooltip it opened on the way in — they surface together the moment the
57697
+ * rail renders them, and only a fresh hover dismisses them one by one.
57698
+ */
57699
+ const useSidebarTooltipOpen = () => {
57700
+ const { state } = useSidebar();
57701
+ const [open, setOpen] = React__namespace.useState(false);
57702
+ React__namespace.useEffect(() => {
57703
+ setOpen(false);
57704
+ }, [state]);
57705
+ return { open, setOpen };
57706
+ };
57508
57707
  const sidebarMenuButtonVariants = cva('peer/menu-button relative flex h-9 w-full cursor-pointer items-center gap-2 overflow-hidden rounded-sm px-2.5 py-1.5 text-left text-sm text-sidebar-foreground outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-active-bg data-[active=true]:text-sidebar-foreground data-[state=open]:hover:bg-sidebar-active-bg data-[state=open]:hover:text-sidebar-foreground group-data-[collapsible=icon]:!size-9 group-data-[collapsible=icon]:!p-2 group-data-[collapsible=icon]:justify-center group-data-[collapsible=icon]:[&>span]:hidden [&>span]:truncate [&>svg]:size-4 [&>svg]:shrink-0', {
57509
57708
  variants: {
57510
57709
  variant: {
@@ -57527,13 +57726,15 @@ const SidebarMenuButton = React__namespace.forwardRef(({ asChild = false, isActi
57527
57726
  const { state } = useSidebar();
57528
57727
  const [innerRef, setRef] = useForwardedRef(ref);
57529
57728
  const truncatedText = useTruncatedText(innerRef);
57729
+ const { open: tooltipOpen, setOpen: setTooltipOpen } = useSidebarTooltipOpen();
57530
57730
  const button = (jsxRuntime.jsx(Comp, { ref: setRef, "data-sidebar": "menu-button", "data-size": size, "data-active": isActive, className: cn(sidebarMenuButtonVariants({ variant, size }), className), ...props }));
57531
57731
  // Tooltip when collapsed (icon-only) OR when the expanded label is clipped.
57532
57732
  // The Tooltip structure stays mounted and only the content is conditional,
57533
57733
  // so toggling it never remounts the button.
57534
57734
  const collapsed = !!tooltip && state === 'collapsed';
57535
57735
  const collapsedProps = typeof tooltip === 'string' ? { children: tooltip } : tooltip;
57536
- return (jsxRuntime.jsxs(Tooltip, { children: [jsxRuntime.jsx(TooltipTrigger, { asChild: true, children: button }), collapsed ? (jsxRuntime.jsx(TooltipContent, { side: "right", align: "center", className: TRUNCATION_TOOLTIP_CLASS, ...collapsedProps })) : truncatedText ? (jsxRuntime.jsx(TooltipContent, { side: "right", align: "center", className: TRUNCATION_TOOLTIP_CLASS, children: truncatedText })) : null] }));
57736
+ const tooltipContent = collapsed ? (jsxRuntime.jsx(TooltipContent, { side: "right", align: "center", className: TRUNCATION_TOOLTIP_CLASS, ...collapsedProps })) : truncatedText ? (jsxRuntime.jsx(TooltipContent, { side: "right", align: "center", className: TRUNCATION_TOOLTIP_CLASS, children: truncatedText })) : null;
57737
+ return (jsxRuntime.jsxs(Tooltip, { open: !!tooltipContent && tooltipOpen, onOpenChange: setTooltipOpen, children: [jsxRuntime.jsx(TooltipTrigger, { asChild: true, children: button }), tooltipContent] }));
57537
57738
  });
57538
57739
  SidebarMenuButton.displayName = 'SidebarMenuButton';
57539
57740
  const SidebarMenuAction = React__namespace.forwardRef(({ className, asChild = false, showOnHover = false, ...props }, ref) => {
@@ -57557,9 +57758,10 @@ const SidebarMenuSubButton = React__namespace.forwardRef(({ asChild = false, siz
57557
57758
  const Comp = asChild ? reactSlot.Slot : 'a';
57558
57759
  const [innerRef, setRef] = useForwardedRef(ref);
57559
57760
  const truncatedText = useTruncatedText(innerRef);
57761
+ const { open: tooltipOpen, setOpen: setTooltipOpen } = useSidebarTooltipOpen();
57560
57762
  const button = (jsxRuntime.jsx(Comp, { ref: setRef, "data-sidebar": "menu-sub-button", "data-size": size, "data-active": isActive, className: cn('relative flex h-9 w-full min-w-0 cursor-pointer items-center gap-2 overflow-hidden rounded-sm pl-3 pr-1 py-1.5 text-left text-sidebar-foreground/80 outline-none ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span]:truncate [&>svg]:size-4 [&>svg]:shrink-0', 'data-[active=true]:bg-sidebar-primary data-[active=true]:text-sidebar-primary-foreground', size === 'sm' && 'text-xs', size === 'md' && 'text-sm', 'group-data-[collapsible=icon]:hidden', className), ...props }));
57561
57763
  // Keep the Tooltip mounted; render the content only when the label is clipped.
57562
- return (jsxRuntime.jsxs(Tooltip, { children: [jsxRuntime.jsx(TooltipTrigger, { asChild: true, children: button }), truncatedText && (jsxRuntime.jsx(TooltipContent, { side: "right", align: "center", className: TRUNCATION_TOOLTIP_CLASS, children: truncatedText }))] }));
57764
+ return (jsxRuntime.jsxs(Tooltip, { open: !!truncatedText && tooltipOpen, onOpenChange: setTooltipOpen, children: [jsxRuntime.jsx(TooltipTrigger, { asChild: true, children: button }), truncatedText && (jsxRuntime.jsx(TooltipContent, { side: "right", align: "center", className: TRUNCATION_TOOLTIP_CLASS, children: truncatedText }))] }));
57563
57765
  });
57564
57766
  SidebarMenuSubButton.displayName = 'SidebarMenuSubButton';
57565
57767
  const Collapsible = CollapsiblePrimitive__namespace.Root;
@@ -65829,6 +66031,15 @@ const DEFAULT_SIDEBAR_WIDTH = '248px';
65829
66031
  /** Green pill marking the active top-level item. Rendered in-flow as the row's
65830
66032
  * first flex child (hidden when the sidebar collapses to icons). */
65831
66033
  const ActiveRail = () => (jsxRuntime.jsx("span", { "aria-hidden": "true", className: "pointer-events-none h-9 w-[4px] shrink-0 rounded-full bg-sidebar-primary group-data-[collapsible=icon]:hidden" }));
66034
+ /** Collapsed, the rail is also the way back into the menu: clicking any nav
66035
+ * item opens the sidebar, not just the brand. */
66036
+ const useCollapsedSidebar = () => {
66037
+ const { state, isMobile, setOpen } = useSidebar();
66038
+ return {
66039
+ collapsed: !isMobile && state === 'collapsed',
66040
+ expandSidebar: () => setOpen(true),
66041
+ };
66042
+ };
65832
66043
  const BrandHeader = ({ brand }) => {
65833
66044
  const { state, isMobile, openMobile, toggleSidebar } = useSidebar();
65834
66045
  const expanded = state === 'expanded' || (isMobile && openMobile);
@@ -65840,13 +66051,31 @@ const BrandHeader = ({ brand }) => {
65840
66051
  const NavLeaf = ({ item, currentPath, onNavigate }) => {
65841
66052
  const Icon = item.icon;
65842
66053
  const active = isPathActive(currentPath, item.path);
65843
- return (jsxRuntime.jsxs(SidebarMenuItem, { className: cn(active && 'flex items-center gap-1.5 group-data-[collapsible=icon]:block'), children: [active && jsxRuntime.jsx(ActiveRail, {}), jsxRuntime.jsxs(SidebarMenuButton, { isActive: active, tooltip: item.label, onClick: () => item.path && onNavigate(item.path), className: cn(active && 'min-w-0 flex-1 group-data-[collapsible=icon]:flex-none'), children: [Icon && jsxRuntime.jsx(Icon, {}), jsxRuntime.jsx("span", { children: item.label })] }), item.badge != null && (jsxRuntime.jsx(SidebarMenuBadge, { className: "h-5 w-5 min-w-5 rounded-full border border-primary bg-primary/10 p-0 text-primary", children: item.badge }))] }));
66054
+ const { collapsed, expandSidebar } = useCollapsedSidebar();
66055
+ return (jsxRuntime.jsxs(SidebarMenuItem, { className: cn(active && 'flex items-center gap-1.5 group-data-[collapsible=icon]:block'), children: [active && jsxRuntime.jsx(ActiveRail, {}), jsxRuntime.jsxs(SidebarMenuButton, { isActive: active, tooltip: item.label, onClick: () => {
66056
+ if (collapsed)
66057
+ expandSidebar();
66058
+ if (item.path)
66059
+ onNavigate(item.path);
66060
+ }, className: cn(active && 'min-w-0 flex-1 group-data-[collapsible=icon]:flex-none'), children: [Icon && jsxRuntime.jsx(Icon, {}), jsxRuntime.jsx("span", { children: item.label })] }), item.badge != null && (jsxRuntime.jsx(SidebarMenuBadge, { className: "h-5 w-5 min-w-5 rounded-full border border-primary bg-primary/10 p-0 text-primary", children: item.badge }))] }));
65844
66061
  };
65845
66062
  const NavParent = ({ item, currentPath, onNavigate }) => {
65846
66063
  const Icon = item.icon;
65847
66064
  const children = (item.children ?? []).filter((s) => s.visible !== false);
65848
66065
  const parentActive = children.some((s) => isPathActive(currentPath, s.path));
65849
- return (jsxRuntime.jsx(Collapsible, { asChild: true, defaultOpen: parentActive, children: jsxRuntime.jsxs(SidebarMenuItem, { className: "group/collapsible", children: [jsxRuntime.jsxs("div", { className: cn(parentActive &&
66066
+ const { collapsed, expandSidebar } = useCollapsedSidebar();
66067
+ const [open, setOpen] = React.useState(parentActive);
66068
+ // Collapsed, the sub-menu is hidden, so a click opens the sidebar and this
66069
+ // group instead of silently toggling something the user cannot see.
66070
+ const handleOpenChange = (next) => {
66071
+ if (!collapsed) {
66072
+ setOpen(next);
66073
+ return;
66074
+ }
66075
+ expandSidebar();
66076
+ setOpen(true);
66077
+ };
66078
+ return (jsxRuntime.jsx(Collapsible, { asChild: true, open: open, onOpenChange: handleOpenChange, children: jsxRuntime.jsxs(SidebarMenuItem, { className: "group/collapsible", children: [jsxRuntime.jsxs("div", { className: cn(parentActive &&
65850
66079
  'flex items-center gap-1.5 group-data-[collapsible=icon]:block'), children: [parentActive && jsxRuntime.jsx(ActiveRail, {}), jsxRuntime.jsx(CollapsibleTrigger, { asChild: true, children: jsxRuntime.jsxs(SidebarMenuButton, { isActive: parentActive, tooltip: item.label, className: cn(parentActive &&
65851
66080
  'min-w-0 flex-1 group-data-[collapsible=icon]:flex-none'), children: [Icon && jsxRuntime.jsx(Icon, {}), jsxRuntime.jsx("span", { children: item.label }), jsxRuntime.jsx(ChevronRight, { className: "ml-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90 group-data-[collapsible=icon]:hidden" })] }) })] }), jsxRuntime.jsx(CollapsibleContent, { children: jsxRuntime.jsx(SidebarMenuSub, { children: children.map((sub) => {
65852
66081
  const SubIcon = sub.icon;