@homebound/beam 3.1.0 → 3.2.0-alpha.1

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 CHANGED
@@ -219,6 +219,7 @@ __export(index_exports, {
219
219
  filterTestIdPrefix: () => filterTestIdPrefix,
220
220
  formatDate: () => formatDate,
221
221
  formatDateRange: () => formatDateRange,
222
+ formatPlainDate: () => formatPlainDate,
222
223
  formatValue: () => formatValue,
223
224
  generateColumnId: () => generateColumnId,
224
225
  getAlignment: () => getAlignment,
@@ -5890,24 +5891,47 @@ function useHover2(props) {
5890
5891
  var import_react16 = require("react");
5891
5892
  var import_use_query_params2 = require("use-query-params");
5892
5893
  function usePersistedFilter({ storageKey, filterDefs }) {
5893
- const filterKeys = Object.keys(filterDefs);
5894
+ const filterImpls = (0, import_react16.useMemo)(
5895
+ () => Object.fromEntries(safeEntries(filterDefs).map(([key, def]) => [key, def(key)])),
5896
+ [filterDefs]
5897
+ );
5898
+ const filterKeys = (0, import_react16.useMemo)(() => Object.keys(filterImpls), [filterImpls]);
5894
5899
  const defaultFilter = (0, import_react16.useMemo)(
5895
5900
  () => Object.fromEntries(
5896
- safeEntries(filterDefs).filter(([key, def]) => def(key).defaultValue !== void 0).map(([key, def]) => [key, def(key).defaultValue])
5901
+ safeEntries(filterImpls).filter(([, def]) => def.defaultValue !== void 0).map(([key, def]) => [key, def.defaultValue])
5897
5902
  ),
5898
- [filterDefs]
5903
+ [filterImpls]
5899
5904
  );
5900
5905
  const [{ filter: queryParamsFilter }, setQueryParams] = (0, import_use_query_params2.useQueryParams)({ filter: import_use_query_params2.JsonParam });
5901
- const [storedFilter, setStoredFilter] = useSessionStorage(storageKey, queryParamsFilter ?? defaultFilter);
5906
+ const [storedFilter, setStoredFilter] = useSessionStorage(
5907
+ storageKey,
5908
+ dehydrateFilter(filterImpls, defaultFilter) ?? defaultFilter
5909
+ );
5902
5910
  const isQueryParamFilterValid = hasValidFilterKeys(queryParamsFilter, filterKeys);
5903
- const filter = isQueryParamFilterValid ? queryParamsFilter : storedFilter ?? defaultFilter;
5904
- const setFilter = (filter2) => setQueryParams({ filter: filter2 });
5911
+ const serializedQueryParamsFilter = (0, import_react16.useMemo)(() => JSON.stringify(queryParamsFilter), [queryParamsFilter]);
5912
+ const serializedStoredFilter = (0, import_react16.useMemo)(() => JSON.stringify(storedFilter), [storedFilter]);
5913
+ const queryParamsFilterSnapshot = (0, import_react16.useMemo)(
5914
+ () => parseSerializedValue(serializedQueryParamsFilter),
5915
+ [serializedQueryParamsFilter]
5916
+ );
5917
+ const storedFilterSnapshot = (0, import_react16.useMemo)(() => parseSerializedValue(serializedStoredFilter), [serializedStoredFilter]);
5918
+ const hydratedQueryParamsFilter = (0, import_react16.useMemo)(
5919
+ () => isQueryParamFilterValid ? hydrateFilter(filterImpls, queryParamsFilterSnapshot) : void 0,
5920
+ [filterImpls, isQueryParamFilterValid, queryParamsFilterSnapshot]
5921
+ );
5922
+ const hydratedStoredFilter = (0, import_react16.useMemo)(
5923
+ () => hasValidFilterKeys(storedFilterSnapshot, filterKeys) ? hydrateFilter(filterImpls, storedFilterSnapshot) : void 0,
5924
+ [filterImpls, filterKeys, storedFilterSnapshot]
5925
+ );
5926
+ const rawFilter = hydratedQueryParamsFilter ?? hydratedStoredFilter ?? defaultFilter;
5927
+ const filter = useStableValue(rawFilter);
5928
+ const setFilter = (filter2) => setQueryParams({ filter: dehydrateFilter(filterImpls, filter2) });
5905
5929
  (0, import_react16.useEffect)(
5906
5930
  () => {
5907
5931
  if (queryParamsFilter === void 0) {
5908
5932
  setQueryParams({ filter: storedFilter }, "replaceIn");
5909
5933
  } else if (!isQueryParamFilterValid) {
5910
- setQueryParams({ filter: defaultFilter }, "replaceIn");
5934
+ setQueryParams({ filter: dehydrateFilter(filterImpls, defaultFilter) }, "replaceIn");
5911
5935
  } else if (JSON.stringify(queryParamsFilter) !== JSON.stringify(storedFilter)) {
5912
5936
  setStoredFilter(queryParamsFilter);
5913
5937
  }
@@ -5919,7 +5943,46 @@ function usePersistedFilter({ storageKey, filterDefs }) {
5919
5943
  return { setFilter, filter };
5920
5944
  }
5921
5945
  function hasValidFilterKeys(queryParamsFilter, definedKeys) {
5922
- return queryParamsFilter && safeKeys(queryParamsFilter).every((key) => definedKeys.includes(key));
5946
+ return !!queryParamsFilter && safeKeys(queryParamsFilter).every((key) => definedKeys.includes(key));
5947
+ }
5948
+ function hydrateFilter(filterImpls, value) {
5949
+ if (typeof value !== "object" || value === null) return void 0;
5950
+ const hydratedEntries = [];
5951
+ safeEntries(value).forEach(([key, rawValue]) => {
5952
+ const filter = filterImpls[key];
5953
+ if (!filter) return;
5954
+ const hydratedValue = filter.hydrate ? filter.hydrate(rawValue) : rawValue;
5955
+ if (hydratedValue !== void 0) {
5956
+ hydratedEntries.push([key, hydratedValue]);
5957
+ }
5958
+ });
5959
+ return Object.fromEntries(hydratedEntries);
5960
+ }
5961
+ function dehydrateFilter(filterImpls, value) {
5962
+ if (!value) return value;
5963
+ return Object.fromEntries(
5964
+ safeEntries(value).map(([key, rawValue]) => {
5965
+ const filter = filterImpls[key];
5966
+ return [
5967
+ key,
5968
+ // Let each filter own serialization so persisted state stays stable for non-plain JSON values like PlainDate.
5969
+ filter?.dehydrate ? filter.dehydrate(rawValue) : rawValue
5970
+ ];
5971
+ })
5972
+ );
5973
+ }
5974
+ function parseSerializedValue(value) {
5975
+ return value === void 0 ? void 0 : JSON.parse(value);
5976
+ }
5977
+ function useStableValue(value) {
5978
+ const stableValue = (0, import_react16.useRef)(value);
5979
+ const stableKey = (0, import_react16.useRef)(JSON.stringify(value));
5980
+ const nextKey = JSON.stringify(value);
5981
+ if (stableKey.current !== nextKey) {
5982
+ stableValue.current = value;
5983
+ stableKey.current = nextKey;
5984
+ }
5985
+ return stableValue.current;
5923
5986
  }
5924
5987
 
5925
5988
  // src/hooks/useSessionStorage.ts
@@ -6349,6 +6412,107 @@ var import_react_stately7 = require("react-stately");
6349
6412
  // src/components/internal/DatePicker/DatePicker.tsx
6350
6413
  var import_react_day_picker3 = require("react-day-picker");
6351
6414
 
6415
+ // src/utils/plainDate.ts
6416
+ var import_temporal_polyfill = require("temporal-polyfill");
6417
+ function jsDateToPlainDate(date) {
6418
+ return new import_temporal_polyfill.Temporal.PlainDate(date.getFullYear(), date.getMonth() + 1, date.getDate());
6419
+ }
6420
+ function formatPlainDate(date, format) {
6421
+ switch (format) {
6422
+ case "shortDate":
6423
+ return date.toLocaleString("en-US", { month: "2-digit", day: "2-digit", year: "2-digit" });
6424
+ case "date":
6425
+ return date.toLocaleString("en-US", { month: "2-digit", day: "2-digit", year: "numeric" });
6426
+ case "shortWeekdayMonthDay":
6427
+ return date.toLocaleString("en-US", { weekday: "short", month: "short", day: "numeric" });
6428
+ case "longWeekdayMonthDayYear":
6429
+ return `${date.toLocaleString("en-US", { weekday: "long" })} ${date.toLocaleString("en-US", { month: "long" })} ${date.day}, ${formatYear(date.year)}`;
6430
+ case "monthYear":
6431
+ return date.toLocaleString("en-US", { month: "long", year: "numeric" });
6432
+ case "shortMonth":
6433
+ return date.toLocaleString("en-US", { month: "short" });
6434
+ case "year":
6435
+ return formatYear(date.year);
6436
+ case "weekdayInitial":
6437
+ return date.toLocaleString("en-US", { weekday: "narrow" });
6438
+ case "weekday":
6439
+ return date.toLocaleString("en-US", { weekday: "long" });
6440
+ default:
6441
+ throw new Error(`Unsupported date format: ${format}`);
6442
+ }
6443
+ }
6444
+ function todayPlainDate() {
6445
+ return import_temporal_polyfill.Temporal.Now.plainDateISO();
6446
+ }
6447
+ function isPlainDate(value) {
6448
+ return value instanceof import_temporal_polyfill.Temporal.PlainDate;
6449
+ }
6450
+ function parsePersistedPlainDate(value) {
6451
+ if (isPlainDate(value)) return value;
6452
+ if (value instanceof Date && !Number.isNaN(value.getTime())) {
6453
+ return jsDateToPlainDate(value);
6454
+ }
6455
+ if (typeof value !== "string") return void 0;
6456
+ try {
6457
+ if (/^\d{4}-\d{2}-\d{2}$/.test(value)) {
6458
+ return import_temporal_polyfill.Temporal.PlainDate.from(value);
6459
+ }
6460
+ } catch {
6461
+ return void 0;
6462
+ }
6463
+ const date = new Date(value);
6464
+ return Number.isNaN(date.getTime()) ? void 0 : jsDateToPlainDate(date);
6465
+ }
6466
+ function dehydratePlainDate(value) {
6467
+ return value?.toString();
6468
+ }
6469
+ function padNumber(value, length) {
6470
+ return Math.abs(value).toString().padStart(length, "0");
6471
+ }
6472
+ function formatYear(year) {
6473
+ return `${year < 0 ? "-" : ""}${padNumber(year, 4)}`;
6474
+ }
6475
+
6476
+ // src/components/internal/DatePicker/dates.ts
6477
+ function plainDateToJsDate(date) {
6478
+ return new Date(date.year, date.month - 1, date.day, 12);
6479
+ }
6480
+ function dateRangeToJsDateRange(range) {
6481
+ if (!range) return void 0;
6482
+ return {
6483
+ from: range.from ? plainDateToJsDate(range.from) : void 0,
6484
+ to: range.to ? plainDateToJsDate(range.to) : void 0
6485
+ };
6486
+ }
6487
+ function jsDateRangeToDateRange(range) {
6488
+ if (!range) return void 0;
6489
+ return {
6490
+ from: range.from ? jsDateToPlainDate(range.from) : void 0,
6491
+ to: range.to ? jsDateToPlainDate(range.to) : void 0
6492
+ };
6493
+ }
6494
+ function dateMatcherToDayPickerMatcher(matcher) {
6495
+ if (typeof matcher === "function") {
6496
+ return function dayPickerMatcher(date) {
6497
+ return matcher(jsDateToPlainDate(date));
6498
+ };
6499
+ }
6500
+ if (Array.isArray(matcher)) {
6501
+ return matcher.map(plainDateToJsDate);
6502
+ }
6503
+ if (isPlainDate(matcher)) {
6504
+ return plainDateToJsDate(matcher);
6505
+ }
6506
+ return {
6507
+ from: matcher.from ? plainDateToJsDate(matcher.from) : void 0,
6508
+ to: matcher.to ? plainDateToJsDate(matcher.to) : void 0
6509
+ };
6510
+ }
6511
+ function dateMatchersToDayPickerMatchers(matchers) {
6512
+ if (matchers === void 0) return void 0;
6513
+ return Array.isArray(matchers) ? matchers.map(dateMatcherToDayPickerMatcher) : dateMatcherToDayPickerMatcher(matchers);
6514
+ }
6515
+
6352
6516
  // src/components/internal/DatePicker/Day.tsx
6353
6517
  var import_react21 = require("react");
6354
6518
  var import_react_day_picker = require("react-day-picker");
@@ -6490,11 +6654,12 @@ function Header(props) {
6490
6654
  const {
6491
6655
  displayMonth
6492
6656
  } = props;
6657
+ const displayMonthDate = jsDateToPlainDate(displayMonth);
6493
6658
  const {
6494
6659
  goToMonth
6495
6660
  } = (0, import_react_day_picker2.useNavigation)();
6496
6661
  return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "df jcsb aic ml_12px mr_2px h_32px", children: [
6497
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("h1", { className: "fw4 fz_16px lh_24px", children: (0, import_date_fns.format)(displayMonth, "MMMM yyyy") }),
6662
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("h1", { className: "fw4 fz_16px lh_24px", children: formatPlainDate(displayMonthDate, "monthYear") }),
6498
6663
  /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { children: [
6499
6664
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(IconButton, { color: "rgba(100, 100, 100, 1)" /* Gray700 */, icon: "chevronLeft", onClick: () => goToMonth((0, import_date_fns.addMonths)(displayMonth, -1)) }),
6500
6665
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(IconButton, { color: "rgba(100, 100, 100, 1)" /* Gray700 */, icon: "chevronRight", onClick: () => goToMonth((0, import_date_fns.addMonths)(displayMonth, 1)) })
@@ -6505,36 +6670,41 @@ function YearSkipHeader(props) {
6505
6670
  const {
6506
6671
  displayMonth
6507
6672
  } = props;
6673
+ const displayMonthDate = jsDateToPlainDate(displayMonth);
6508
6674
  const {
6509
6675
  goToMonth
6510
6676
  } = (0, import_react_day_picker2.useNavigation)();
6511
6677
  return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "df jcsb aic ml_12px mr_12px h_32px", children: [
6512
6678
  /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "df fdr jcsb", children: [
6513
6679
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(IconButton, { color: "rgba(100, 100, 100, 1)" /* Gray700 */, icon: "chevronLeft", onClick: () => goToMonth((0, import_date_fns.addMonths)(displayMonth, -1)) }),
6514
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("h1", { className: "fw4 fz_16px lh_24px", children: (0, import_date_fns.format)(displayMonth, "MMM") }),
6680
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("h1", { className: "fw4 fz_16px lh_24px", children: formatPlainDate(displayMonthDate, "shortMonth") }),
6515
6681
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(IconButton, { color: "rgba(100, 100, 100, 1)" /* Gray700 */, icon: "chevronRight", onClick: () => goToMonth((0, import_date_fns.addMonths)(displayMonth, 1)) })
6516
6682
  ] }),
6517
6683
  /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "df fdr jcsb", children: [
6518
6684
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(IconButton, { color: "rgba(100, 100, 100, 1)" /* Gray700 */, icon: "chevronLeft", onClick: () => goToMonth((0, import_date_fns.addYears)(displayMonth, -1)) }),
6519
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("h1", { className: "fw4 fz_16px lh_24px", children: (0, import_date_fns.format)(displayMonth, "yyyy") }),
6685
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("h1", { className: "fw4 fz_16px lh_24px", children: formatPlainDate(displayMonthDate, "year") }),
6520
6686
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(IconButton, { color: "rgba(100, 100, 100, 1)" /* Gray700 */, icon: "chevronRight", onClick: () => goToMonth((0, import_date_fns.addYears)(displayMonth, 1)) })
6521
6687
  ] })
6522
6688
  ] });
6523
6689
  }
6524
6690
 
6525
6691
  // src/components/internal/DatePicker/WeekHeader.tsx
6526
- var import_date_fns2 = require("date-fns");
6527
6692
  var import_jsx_runtime18 = require("react/jsx-runtime");
6528
6693
  function WeekHeader() {
6529
- const start = (0, import_date_fns2.startOfWeek)(/* @__PURE__ */ new Date());
6694
+ const today = todayPlainDate();
6695
+ const start = today.subtract({
6696
+ days: today.dayOfWeek % 7
6697
+ });
6530
6698
  const days = [];
6531
6699
  for (let i = 0; i < 7; i++) {
6532
- days.push((0, import_date_fns2.addDays)(start, i));
6700
+ days.push(start.add({
6701
+ days: i
6702
+ }));
6533
6703
  }
6534
6704
  return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("thead", { className: "rdp-head", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("tr", { className: "rdp-head_row", children: days.map((day) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("th", { scope: "col", className: "pt1 pb_12px pr1 pl1 fw4 fz_12px lh_16px gray400", children: [
6535
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { "aria-hidden": "true", children: (0, import_date_fns2.format)(day, "EEEEE") }),
6536
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "rdp-vhidden", children: (0, import_date_fns2.format)(day, "EEEE") })
6537
- ] }, (0, import_date_fns2.format)(day, "EEEE"))) }) });
6705
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { "aria-hidden": "true", children: formatPlainDate(day, "weekdayInitial") }),
6706
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "rdp-vhidden", children: formatPlainDate(day, "weekday") })
6707
+ ] }, formatPlainDate(day, "weekday"))) }) });
6538
6708
  }
6539
6709
 
6540
6710
  // src/components/internal/DatePicker/DatePicker.tsx
@@ -6556,15 +6726,15 @@ function DatePicker(props) {
6556
6726
  Head: WeekHeader,
6557
6727
  Day
6558
6728
  },
6559
- selected: value ? [value] : [],
6560
- defaultMonth: value ?? /* @__PURE__ */ new Date(),
6729
+ selected: value ? [plainDateToJsDate(value)] : [],
6730
+ defaultMonth: plainDateToJsDate(value ?? todayPlainDate()),
6561
6731
  onDayClick: (day, modifiers) => {
6562
6732
  if (modifiers.disabled) return;
6563
- onSelect(day);
6733
+ onSelect(jsDateToPlainDate(day));
6564
6734
  },
6565
- disabled: disabledDays,
6735
+ disabled: dateMatchersToDayPickerMatchers(disabledDays),
6566
6736
  modifiers: {
6567
- indicatorDot: dottedDays ?? []
6737
+ indicatorDot: dateMatchersToDayPickerMatchers(dottedDays) ?? []
6568
6738
  }
6569
6739
  }
6570
6740
  ) });
@@ -6591,15 +6761,15 @@ function DateRangePicker(props) {
6591
6761
  useYearPicker
6592
6762
  } = props;
6593
6763
  const tid = useTestIds(props, "datePicker");
6594
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "dib bgWhite fw4 fz_12px lh_16px", ...tid, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react_day_picker4.DayPicker, { mode: "range", selected: range, components: {
6764
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "dib bgWhite fw4 fz_12px lh_16px", ...tid, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react_day_picker4.DayPicker, { mode: "range", selected: dateRangeToJsDateRange(range), components: {
6595
6765
  Caption: useYearPicker ? YearSkipHeader : Header,
6596
6766
  Head: WeekHeader,
6597
6767
  Day
6598
- }, defaultMonth: range?.to ?? /* @__PURE__ */ new Date(), onSelect: (selection, day, activeModifiers) => {
6768
+ }, defaultMonth: plainDateToJsDate(range?.to ?? range?.from ?? todayPlainDate()), onSelect: (selection, day, activeModifiers) => {
6599
6769
  if (activeModifiers.disabled) return;
6600
- onSelect(selection);
6601
- }, disabled: disabledDays, modifiers: {
6602
- indicatorDot: dottedDays ?? []
6770
+ onSelect(jsDateRangeToDateRange(selection));
6771
+ }, disabled: dateMatchersToDayPickerMatchers(disabledDays), modifiers: {
6772
+ indicatorDot: dateMatchersToDayPickerMatchers(dottedDays) ?? []
6603
6773
  } }) });
6604
6774
  }
6605
6775
 
@@ -12442,69 +12612,37 @@ function CheckboxGroupItem(props) {
12442
12612
  }
12443
12613
 
12444
12614
  // src/inputs/DateFields/DateField.mock.tsx
12445
- var import_date_fns3 = require("date-fns");
12446
12615
  var import_react50 = require("react");
12447
- var import_jsx_runtime60 = require("react/jsx-runtime");
12448
- function DateFieldMock(props) {
12449
- const { onChange = () => {
12450
- }, errorMsg, onBlur, onFocus } = props;
12451
- const [value, setValue] = (0, import_react50.useState)(props.value ? (0, import_date_fns3.format)(props.value, "MM/dd/yy") : "");
12452
- const tid = useTestIds(props, "date");
12453
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
12454
- "input",
12455
- {
12456
- ...tid,
12457
- "data-error": !!errorMsg,
12458
- value,
12459
- onChange: (e) => {
12460
- const { value: value2 } = e.target;
12461
- setValue(value2);
12462
- onChange((0, import_date_fns3.parse)(value2, "MM/dd/yy", /* @__PURE__ */ new Date()));
12463
- },
12464
- onBlur: () => maybeCall(onBlur),
12465
- onFocus: () => maybeCall(onFocus),
12466
- disabled: !!props.disabled,
12467
- readOnly: !!props.readOnly,
12468
- "data-disabled-days": JSON.stringify(props.disabledDays)
12469
- }
12470
- );
12471
- }
12472
-
12473
- // src/inputs/DateFields/DateFieldBase.tsx
12474
- var import_react51 = require("react");
12475
- var import_react_aria31 = require("react-aria");
12476
- var import_react_day_picker5 = require("react-day-picker");
12477
- var import_react_stately10 = require("react-stately");
12478
12616
 
12479
12617
  // src/inputs/DateFields/utils.ts
12480
- var import_date_fns4 = require("date-fns");
12618
+ var import_temporal_polyfill2 = require("temporal-polyfill");
12481
12619
  var dateFormats = {
12482
- short: "MM/dd/yy",
12483
- medium: "EEE, MMM d",
12484
- long: "EEEE LLLL d, uuuu"
12620
+ short: "shortDate",
12621
+ medium: "shortWeekdayMonthDay",
12622
+ long: "longWeekdayMonthDayYear"
12485
12623
  };
12486
- function getDateFormat(format4) {
12487
- return format4 ? dateFormats[format4] : dateFormats.short;
12624
+ function getDateFormat(format) {
12625
+ return format ? dateFormats[format] : dateFormats.short;
12488
12626
  }
12489
- function formatDate(date, format4) {
12627
+ function formatDate(date, format) {
12490
12628
  if (!date) return "";
12491
- return (0, import_date_fns4.format)(date, format4);
12629
+ return formatPlainDate(date, format);
12492
12630
  }
12493
- function formatDateRange(date, format4) {
12631
+ function formatDateRange(date, format) {
12494
12632
  if (!date) return "";
12495
12633
  const { from, to } = date;
12496
- const fromFormatted = from ? (0, import_date_fns4.format)(from, format4) : "";
12497
- const toFormatted = to ? (0, import_date_fns4.format)(to, format4) : "";
12634
+ const fromFormatted = from ? formatPlainDate(from, format) : "";
12635
+ const toFormatted = to ? formatPlainDate(to, format) : "";
12498
12636
  return !fromFormatted && !toFormatted ? void 0 : `${fromFormatted} - ${toFormatted}`;
12499
12637
  }
12500
- function parseDate(str, format4) {
12501
- return parseDateString(str, format4);
12638
+ function parseDate(str, format) {
12639
+ return parseDateString(str, format);
12502
12640
  }
12503
- function parseDateRange(str, format4) {
12641
+ function parseDateRange(str, format) {
12504
12642
  const [from = "", to = ""] = str.split("-");
12505
- const fromDate = parseDateString(from.trim(), format4);
12506
- const toDate = parseDateString(to.trim(), format4);
12507
- if (toDate && fromDate && toDate < fromDate) {
12643
+ const fromDate = parseDateString(from.trim(), format);
12644
+ const toDate = parseDateString(to.trim(), format);
12645
+ if (toDate && fromDate && import_temporal_polyfill2.Temporal.PlainDate.compare(toDate, fromDate) < 0) {
12508
12646
  return { from: toDate, to: fromDate };
12509
12647
  }
12510
12648
  if (toDate === void 0 && fromDate === void 0) {
@@ -12512,31 +12650,81 @@ function parseDateRange(str, format4) {
12512
12650
  }
12513
12651
  return { from: fromDate, to: toDate };
12514
12652
  }
12515
- function parseDateString(str, format4) {
12653
+ function parseDateString(str, format) {
12654
+ if (format !== dateFormats.short && format !== "date") {
12655
+ return void 0;
12656
+ }
12516
12657
  const split = str.split("/");
12517
12658
  if (split.length !== 3) {
12518
12659
  return void 0;
12519
12660
  }
12520
- if (split[2].length !== 2) {
12661
+ const yearLength = format === dateFormats.short ? 2 : 4;
12662
+ if (split[2].length !== yearLength) {
12521
12663
  return void 0;
12522
12664
  }
12523
- const month = parseInt(split[0], 10) - 1;
12665
+ const month = parseInt(split[0], 10);
12524
12666
  const day = parseInt(split[1], 10);
12525
12667
  const year = parseInt(split[2], 10);
12526
- if (isNaN(year) || String(year).length > 4 || isNaN(month) || isNaN(day) || day <= 0 || day > 31 || month < 0 || month >= 12) {
12668
+ if (Number.isNaN(year) || Number.isNaN(month) || Number.isNaN(day) || day <= 0 || day > 31 || month <= 0 || month > 12) {
12527
12669
  return void 0;
12528
12670
  }
12529
- const parsed = (0, import_date_fns4.parse)(str, format4, /* @__PURE__ */ new Date());
12530
- if (!isValidDate(parsed)) {
12671
+ try {
12672
+ return import_temporal_polyfill2.Temporal.PlainDate.from({
12673
+ year: yearLength === 2 ? normalizeTwoDigitYear(year, todayPlainDate().year) : year,
12674
+ month,
12675
+ day
12676
+ });
12677
+ } catch {
12531
12678
  return void 0;
12532
12679
  }
12533
- return parsed;
12534
12680
  }
12535
12681
  function isValidDate(d) {
12536
- return d !== void 0 && (0, import_date_fns4.isDate)(d) && d.toString() !== "Invalid Date";
12682
+ return d !== void 0 && isPlainDate(d);
12683
+ }
12684
+ function normalizeTwoDigitYear(twoDigitYear, currentYear) {
12685
+ const isCommonEra = currentYear > 0;
12686
+ const absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;
12687
+ if (absCurrentYear <= 50) {
12688
+ return isCommonEra ? twoDigitYear || 100 : 1 - (twoDigitYear || 100);
12689
+ }
12690
+ const rangeEnd = absCurrentYear + 50;
12691
+ const rangeEndCentury = Math.floor(rangeEnd / 100) * 100;
12692
+ const isPreviousCentury = twoDigitYear >= rangeEnd % 100;
12693
+ const normalizedYear = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);
12694
+ return isCommonEra ? normalizedYear : 1 - normalizedYear;
12695
+ }
12696
+
12697
+ // src/inputs/DateFields/DateField.mock.tsx
12698
+ var import_jsx_runtime60 = require("react/jsx-runtime");
12699
+ function DateFieldMock(props) {
12700
+ const { onChange = () => {
12701
+ }, errorMsg, onBlur, onFocus } = props;
12702
+ const [value, setValue] = (0, import_react50.useState)(formatDate(props.value, dateFormats.short));
12703
+ const tid = useTestIds(props, "date");
12704
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
12705
+ "input",
12706
+ {
12707
+ ...tid,
12708
+ "data-error": !!errorMsg,
12709
+ value,
12710
+ onChange: (e) => {
12711
+ const { value: value2 } = e.target;
12712
+ setValue(value2);
12713
+ onChange(parseDate(value2, dateFormats.short));
12714
+ },
12715
+ onBlur: () => maybeCall(onBlur),
12716
+ onFocus: () => maybeCall(onFocus),
12717
+ disabled: !!props.disabled,
12718
+ readOnly: !!props.readOnly,
12719
+ "data-disabled-days": JSON.stringify(props.disabledDays)
12720
+ }
12721
+ );
12537
12722
  }
12538
12723
 
12539
12724
  // src/inputs/DateFields/DateFieldBase.tsx
12725
+ var import_react51 = require("react");
12726
+ var import_react_aria31 = require("react-aria");
12727
+ var import_react_stately10 = require("react-stately");
12540
12728
  var import_runtime43 = require("@homebound/truss/runtime");
12541
12729
  var import_jsx_runtime61 = require("react/jsx-runtime");
12542
12730
  function DateFieldBase(props) {
@@ -12552,7 +12740,7 @@ function DateFieldBase(props) {
12552
12740
  errorMsg,
12553
12741
  helperText,
12554
12742
  readOnly,
12555
- format: format4 = "short",
12743
+ format = "short",
12556
12744
  iconLeft = false,
12557
12745
  hideCalendarIcon = false,
12558
12746
  disabledDays,
@@ -12569,7 +12757,7 @@ function DateFieldBase(props) {
12569
12757
  const buttonRef = (0, import_react51.useRef)(null);
12570
12758
  const overlayRef = (0, import_react51.useRef)(null);
12571
12759
  const isFocused = (0, import_react51.useRef)(false);
12572
- const dateFormat = getDateFormat(format4);
12760
+ const dateFormat = getDateFormat(format);
12573
12761
  const [wipValue, setWipValue] = (0, import_react51.useState)(value);
12574
12762
  const [inputValue, setInputValue] = (0, import_react51.useState)((isRangeMode ? formatDateRange(props.value, dateFormat) : formatDate(props.value, dateFormat)) ?? "");
12575
12763
  const tid = useTestIds(props, defaultTestId(label));
@@ -12658,16 +12846,20 @@ function DateFieldBase(props) {
12658
12846
  (d) => {
12659
12847
  setWipValue(d);
12660
12848
  if (d && isParsedDateValid(d)) {
12661
- if (isRangeMode && (0, import_react_day_picker5.isDateRange)(d)) {
12849
+ if (isRangeMode && isDateRangeValue(d)) {
12662
12850
  props.onChange(d);
12663
12851
  return;
12664
12852
  }
12665
- if (!isRangeMode && !(0, import_react_day_picker5.isDateRange)(d)) {
12853
+ if (!isRangeMode && !isDateRangeValue(d)) {
12666
12854
  props.onChange(d);
12667
12855
  return;
12668
12856
  }
12669
12857
  } else {
12670
- props.onChange(void 0);
12858
+ if (isRangeMode) {
12859
+ props.onChange(void 0);
12860
+ } else {
12861
+ props.onChange(void 0);
12862
+ }
12671
12863
  return;
12672
12864
  }
12673
12865
  },
@@ -12675,7 +12867,7 @@ function DateFieldBase(props) {
12675
12867
  // eslint-disable-next-line react-hooks/exhaustive-deps
12676
12868
  [isRangeMode, props.onChange]
12677
12869
  );
12678
- const inputSize = !isRangeMode ? format4 === "short" ? 8 : format4 === "medium" ? 10 : void 0 : void 0;
12870
+ const inputSize = !isRangeMode ? format === "short" ? 8 : format === "medium" ? 10 : void 0 : void 0;
12679
12871
  const clearButton = /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_jsx_runtime61.Fragment, { children: inputValue !== "" && !state.isOpen && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(IconButton, { icon: "xCircle", color: "rgba(100, 100, 100, 1)" /* Gray700 */, onClick: () => {
12680
12872
  setInputValue("");
12681
12873
  onChange(void 0);
@@ -12737,7 +12929,10 @@ function DateFieldBase(props) {
12737
12929
  ] });
12738
12930
  }
12739
12931
  function isParsedDateValid(d) {
12740
- return d !== void 0 && (!(0, import_react_day_picker5.isDateRange)(d) || (0, import_react_day_picker5.isDateRange)(d) && isValidDate(d.from) && isValidDate(d.to));
12932
+ return d !== void 0 && (!isDateRangeValue(d) || isValidDate(d.from) && isValidDate(d.to));
12933
+ }
12934
+ function isDateRangeValue(value) {
12935
+ return typeof value === "object" && value !== null && ("from" in value || "to" in value);
12741
12936
  }
12742
12937
 
12743
12938
  // src/utils/withTestMock.tsx
@@ -15254,7 +15449,7 @@ function useScrollStorage(tableId, enabled = true) {
15254
15449
  }
15255
15450
 
15256
15451
  // src/components/Table/hooks/useSetupColumnSizes.ts
15257
- var import_utils66 = require("@react-aria/utils");
15452
+ var import_utils67 = require("@react-aria/utils");
15258
15453
  var import_react70 = require("react");
15259
15454
 
15260
15455
  // src/components/Table/hooks/useColumnResizing.ts
@@ -15378,7 +15573,7 @@ function useSetupColumnSizes(style, columns, resizeRef, expandedColumnIds, visib
15378
15573
  // eslint-disable-next-line react-hooks/exhaustive-deps
15379
15574
  [tableWidth, setTableAndColumnWidths, setTableAndColumnWidthsDebounced]
15380
15575
  );
15381
- (0, import_utils66.useResizeObserver)({ ref: resizeRef, onResize });
15576
+ (0, import_utils67.useResizeObserver)({ ref: resizeRef, onResize });
15382
15577
  return { columnSizes, tableWidth, resizedWidths, setResizedWidth, setResizedWidths, resetColumnWidths };
15383
15578
  }
15384
15579
 
@@ -15971,7 +16166,7 @@ function ToggleChips(props) {
15971
16166
  }
15972
16167
 
15973
16168
  // src/components/Accordion.tsx
15974
- var import_utils69 = require("@react-aria/utils");
16169
+ var import_utils70 = require("@react-aria/utils");
15975
16170
  var import_react73 = require("react");
15976
16171
  var import_react_aria40 = require("react-aria");
15977
16172
  var import_runtime54 = require("@homebound/truss/runtime");
@@ -15997,7 +16192,7 @@ function Accordion(props) {
15997
16192
  xss
15998
16193
  } = props;
15999
16194
  const tid = useTestIds(props, "accordion");
16000
- const id = (0, import_utils69.useId)();
16195
+ const id = (0, import_utils70.useId)();
16001
16196
  const [expanded, setExpanded] = (0, import_react73.useState)(defaultExpanded && !disabled);
16002
16197
  const {
16003
16198
  isFocusVisible,
@@ -16019,7 +16214,7 @@ function Accordion(props) {
16019
16214
  setContentHeight(`${contentEl.scrollHeight}px`);
16020
16215
  }
16021
16216
  }, [expanded, contentEl, setContentHeight]);
16022
- (0, import_utils69.useResizeObserver)({
16217
+ (0, import_utils70.useResizeObserver)({
16023
16218
  ref: contentRef,
16024
16219
  onResize
16025
16220
  });
@@ -16310,7 +16505,7 @@ var import_react102 = require("react");
16310
16505
  var import_react_aria46 = require("react-aria");
16311
16506
 
16312
16507
  // src/components/Modal/Modal.tsx
16313
- var import_utils73 = require("@react-aria/utils");
16508
+ var import_utils74 = require("@react-aria/utils");
16314
16509
  var import_react78 = require("react");
16315
16510
  var import_react_aria41 = require("react-aria");
16316
16511
  var import_react_dom3 = require("react-dom");
@@ -16433,7 +16628,7 @@ function Modal(props) {
16433
16628
  };
16434
16629
  }
16435
16630
  const [hasScroll, setHasScroll] = (0, import_react78.useState)(forceScrolling ?? false);
16436
- (0, import_utils73.useResizeObserver)({
16631
+ (0, import_utils74.useResizeObserver)({
16437
16632
  ref: modalBodyRef,
16438
16633
  onResize: (0, import_react78.useCallback)(
16439
16634
  () => {
@@ -18073,7 +18268,7 @@ function FormHeading(props) {
18073
18268
  FormHeading.isFormHeading = true;
18074
18269
 
18075
18270
  // src/forms/StaticField.tsx
18076
- var import_utils101 = require("@react-aria/utils");
18271
+ var import_utils102 = require("@react-aria/utils");
18077
18272
  var import_runtime65 = require("@homebound/truss/runtime");
18078
18273
  var import_jsx_runtime118 = require("react/jsx-runtime");
18079
18274
  function StaticField(props) {
@@ -18087,7 +18282,7 @@ function StaticField(props) {
18087
18282
  children
18088
18283
  } = props;
18089
18284
  const tid = useTestIds(props, typeof label === "string" ? defaultTestId(label) : "staticField");
18090
- const id = (0, import_utils101.useId)();
18285
+ const id = (0, import_utils102.useId)();
18091
18286
  return /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("div", { ...(0, import_runtime65.trussProps)({
18092
18287
  ...labelStyle === "left" ? {
18093
18288
  display: "df",
@@ -18771,8 +18966,16 @@ function dateFilter(props) {
18771
18966
  }
18772
18967
  var anyOption = {};
18773
18968
  var DateFilter = class extends BaseFilter {
18969
+ hydrate(value) {
18970
+ if (!isDateFilterValue(value)) return void 0;
18971
+ const hydratedValue = parsePersistedPlainDate(value.value);
18972
+ return hydratedValue ? { op: value.op, value: hydratedValue } : void 0;
18973
+ }
18974
+ dehydrate(value) {
18975
+ return value ? { op: value.op, value: dehydratePlainDate(value.value) } : void 0;
18976
+ }
18774
18977
  render(value, setValue, tid, inModal, vertical) {
18775
- const { label, operations, getOperationValue, getOperationLabel } = this.props;
18978
+ const { label, operations, getOperationValue, getOperationLabel, defaultValue } = this.props;
18776
18979
  return /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)(import_jsx_runtime127.Fragment, { children: [
18777
18980
  vertical && /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(Label, { label }),
18778
18981
  /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)(CompoundField, { children: [
@@ -18789,8 +18992,8 @@ var DateFilter = class extends BaseFilter {
18789
18992
  getOptionLabel: (o) => o === anyOption ? "Any" : getOperationLabel(o),
18790
18993
  value: value?.op,
18791
18994
  onSelect: (op) => (
18792
- // default the selected date to today if it doesn't exist in the filter's value
18793
- setValue(op ? { op, value: value?.value ? new Date(value.value) : /* @__PURE__ */ new Date() } : void 0)
18995
+ // default the selected date to the filter's default date or today if it doesn't exist in the filter's value
18996
+ setValue(op ? { op, value: value?.value ?? defaultValue?.value ?? todayPlainDate() } : void 0)
18794
18997
  ),
18795
18998
  label: inModal ? `${label} date filter operation` : label,
18796
18999
  labelStyle: !inModal && !vertical ? "inline" : inModal || vertical ? "hidden" : "above",
@@ -18802,9 +19005,13 @@ var DateFilter = class extends BaseFilter {
18802
19005
  DateField,
18803
19006
  {
18804
19007
  labelStyle: "inline",
18805
- value: value?.value ? new Date(value.value) : /* @__PURE__ */ new Date(),
19008
+ value: value?.value ?? defaultValue?.value ?? todayPlainDate(),
18806
19009
  label: "Date",
18807
- onChange: (d) => setValue({ ...value, value: d }),
19010
+ onChange: (d) => {
19011
+ if (d && value) {
19012
+ setValue({ ...value, value: d });
19013
+ }
19014
+ },
18808
19015
  disabled: !value,
18809
19016
  ...tid[`${defaultTestId(this.label)}_dateField`]
18810
19017
  }
@@ -18813,6 +19020,9 @@ var DateFilter = class extends BaseFilter {
18813
19020
  ] });
18814
19021
  }
18815
19022
  };
19023
+ function isDateFilterValue(value) {
19024
+ return typeof value === "object" && value !== null && "op" in value && "value" in value;
19025
+ }
18816
19026
 
18817
19027
  // src/components/Filters/DateRangeFilter.tsx
18818
19028
  var import_jsx_runtime128 = require("react/jsx-runtime");
@@ -18820,6 +19030,17 @@ function dateRangeFilter(props) {
18820
19030
  return (key) => new DateRangeFilter(key, props);
18821
19031
  }
18822
19032
  var DateRangeFilter = class extends BaseFilter {
19033
+ hydrate(value) {
19034
+ if (!isDateRangeFilterValue(value)) return void 0;
19035
+ const hydratedValue = hydrateDateRange(value.value);
19036
+ return hydratedValue ? { op: value.op, value: hydratedValue } : void 0;
19037
+ }
19038
+ dehydrate(value) {
19039
+ return value ? {
19040
+ op: value.op,
19041
+ value: value.value ? { from: dehydratePlainDate(value.value.from), to: dehydratePlainDate(value.value.to) } : void 0
19042
+ } : void 0;
19043
+ }
18823
19044
  render(value, setValue, tid, inModal, vertical) {
18824
19045
  const { label, placeholderText, disabledDays, testFieldLabel, defaultValue } = this.props;
18825
19046
  return /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)(import_jsx_runtime128.Fragment, { children: [
@@ -18831,8 +19052,17 @@ var DateRangeFilter = class extends BaseFilter {
18831
19052
  isRangeFilterField: true,
18832
19053
  placeholder: placeholderText,
18833
19054
  label: testFieldLabel ?? "Date",
18834
- value: value?.value ? { from: new Date(value.value.from), to: new Date(value.value.to) } : void 0,
18835
- onChange: (d) => d ? setValue({ op: defaultValue?.op, value: d }) : setValue(void 0),
19055
+ value: value?.value,
19056
+ onChange: (d) => {
19057
+ if (!d) {
19058
+ setValue(void 0);
19059
+ return;
19060
+ }
19061
+ const op = value?.op ?? defaultValue?.op;
19062
+ if (op !== void 0) {
19063
+ setValue({ op, value: d });
19064
+ }
19065
+ },
18836
19066
  disabledDays,
18837
19067
  ...tid[`${defaultTestId(this.label)}_dateField`]
18838
19068
  }
@@ -18840,6 +19070,17 @@ var DateRangeFilter = class extends BaseFilter {
18840
19070
  ] });
18841
19071
  }
18842
19072
  };
19073
+ function isDateRangeFilterValue(value) {
19074
+ return typeof value === "object" && value !== null && "op" in value && "value" in value;
19075
+ }
19076
+ function hydrateDateRange(value) {
19077
+ if (typeof value !== "object" || value === null) return void 0;
19078
+ const { from, to } = value;
19079
+ const hydratedFrom = parsePersistedPlainDate(from);
19080
+ const hydratedTo = parsePersistedPlainDate(to);
19081
+ if (hydratedFrom === void 0 && hydratedTo === void 0) return void 0;
19082
+ return { from: hydratedFrom, to: hydratedTo };
19083
+ }
18843
19084
 
18844
19085
  // src/components/Filters/MultiFilter.tsx
18845
19086
  var import_jsx_runtime129 = require("react/jsx-runtime");
@@ -19645,10 +19886,10 @@ function useGridTableLayoutState({
19645
19886
  });
19646
19887
  (0, import_react99.useEffect)(() => {
19647
19888
  if (page.limit !== persistedPageSize) setPersistedPageSize(page.limit);
19648
- setPage((prev) => ({
19889
+ setPage((prev) => prev.offset === 0 ? prev : {
19649
19890
  ...prev,
19650
19891
  offset: 0
19651
- }));
19892
+ });
19652
19893
  }, [page.limit, persistedPageSize, setPersistedPageSize, filter, searchString]);
19653
19894
  return {
19654
19895
  filter,
@@ -20163,7 +20404,7 @@ var import_react106 = require("react");
20163
20404
  var import_react_aria49 = require("react-aria");
20164
20405
 
20165
20406
  // src/components/Tag.tsx
20166
- var import_utils118 = require("@react-aria/utils");
20407
+ var import_utils119 = require("@react-aria/utils");
20167
20408
  var import_react105 = require("react");
20168
20409
  var import_runtime78 = require("@homebound/truss/runtime");
20169
20410
  var import_jsx_runtime152 = require("react/jsx-runtime");
@@ -20179,7 +20420,7 @@ function Tag(props) {
20179
20420
  const tid = useTestIds(otherProps);
20180
20421
  const [showTooltip, setShowTooltip] = (0, import_react105.useState)(false);
20181
20422
  const ref = (0, import_react105.useRef)(null);
20182
- (0, import_utils118.useResizeObserver)({
20423
+ (0, import_utils119.useResizeObserver)({
20183
20424
  ref,
20184
20425
  onResize: () => {
20185
20426
  if (ref.current) {
@@ -20876,7 +21117,7 @@ function HbSpinnerProvider({
20876
21117
  }
20877
21118
 
20878
21119
  // src/components/MaxLines.tsx
20879
- var import_utils126 = require("@react-aria/utils");
21120
+ var import_utils127 = require("@react-aria/utils");
20880
21121
  var import_react115 = require("react");
20881
21122
  var import_runtime85 = require("@homebound/truss/runtime");
20882
21123
  var import_jsx_runtime160 = require("react/jsx-runtime");
@@ -20887,7 +21128,7 @@ function MaxLines({
20887
21128
  const elRef = (0, import_react115.useRef)(null);
20888
21129
  const [hasMore, setHasMore] = (0, import_react115.useState)(false);
20889
21130
  const [expanded, setExpanded] = (0, import_react115.useState)(false);
20890
- (0, import_utils126.useLayoutEffect)(() => {
21131
+ (0, import_utils127.useLayoutEffect)(() => {
20891
21132
  if (!elRef.current) return;
20892
21133
  setHasMore(elRef.current.scrollHeight > elRef.current.clientHeight);
20893
21134
  }, []);
@@ -20898,7 +21139,7 @@ function MaxLines({
20898
21139
  if (!elRef.current) return;
20899
21140
  !expanded && setHasMore(elRef.current.scrollHeight > elRef.current.clientHeight);
20900
21141
  }, [expanded]);
20901
- (0, import_utils126.useResizeObserver)({
21142
+ (0, import_utils127.useResizeObserver)({
20902
21143
  ref: elRef,
20903
21144
  onResize
20904
21145
  });
@@ -20919,7 +21160,7 @@ function MaxLines({
20919
21160
  }
20920
21161
 
20921
21162
  // src/components/ScrollShadows.tsx
20922
- var import_utils127 = require("@react-aria/utils");
21163
+ var import_utils128 = require("@react-aria/utils");
20923
21164
  var import_react116 = require("react");
20924
21165
  var import_runtime86 = require("@homebound/truss/runtime");
20925
21166
  var import_jsx_runtime161 = require("react/jsx-runtime");
@@ -21006,7 +21247,7 @@ function ScrollShadows(props) {
21006
21247
  setShowEndShadow(start + boxSize < end);
21007
21248
  }, [horizontal]);
21008
21249
  const onResize = (0, import_react116.useCallback)(() => scrollRef.current && updateScrollProps(scrollRef.current), [updateScrollProps]);
21009
- (0, import_utils127.useResizeObserver)({
21250
+ (0, import_utils128.useResizeObserver)({
21010
21251
  ref: scrollRef,
21011
21252
  onResize
21012
21253
  });
@@ -22043,6 +22284,7 @@ function useToast() {
22043
22284
  filterTestIdPrefix,
22044
22285
  formatDate,
22045
22286
  formatDateRange,
22287
+ formatPlainDate,
22046
22288
  formatValue,
22047
22289
  generateColumnId,
22048
22290
  getAlignment,