@homebound/beam 3.1.0 → 3.2.0-alpha.2
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 +358 -116
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +60 -47
- package/dist/index.d.ts +60 -47
- package/dist/index.js +497 -256
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
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
|
|
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(
|
|
5901
|
+
safeEntries(filterImpls).filter(([, def]) => def.defaultValue !== void 0).map(([key, def]) => [key, def.defaultValue])
|
|
5897
5902
|
),
|
|
5898
|
-
[
|
|
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(
|
|
5906
|
+
const [storedFilter, setStoredFilter] = useSessionStorage(
|
|
5907
|
+
storageKey,
|
|
5908
|
+
dehydrateFilter(filterImpls, defaultFilter) ?? defaultFilter
|
|
5909
|
+
);
|
|
5902
5910
|
const isQueryParamFilterValid = hasValidFilterKeys(queryParamsFilter, filterKeys);
|
|
5903
|
-
const
|
|
5904
|
-
const
|
|
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: (
|
|
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: (
|
|
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: (
|
|
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
|
|
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(
|
|
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: (
|
|
6536
|
-
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "rdp-vhidden", children: (
|
|
6537
|
-
] }, (
|
|
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 ??
|
|
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 ??
|
|
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
|
|
12618
|
+
var import_temporal_polyfill2 = require("temporal-polyfill");
|
|
12481
12619
|
var dateFormats = {
|
|
12482
|
-
short: "
|
|
12483
|
-
medium: "
|
|
12484
|
-
long: "
|
|
12620
|
+
short: "shortDate",
|
|
12621
|
+
medium: "shortWeekdayMonthDay",
|
|
12622
|
+
long: "longWeekdayMonthDayYear"
|
|
12485
12623
|
};
|
|
12486
|
-
function getDateFormat(
|
|
12487
|
-
return
|
|
12624
|
+
function getDateFormat(format) {
|
|
12625
|
+
return format ? dateFormats[format] : dateFormats.short;
|
|
12488
12626
|
}
|
|
12489
|
-
function formatDate(date,
|
|
12627
|
+
function formatDate(date, format) {
|
|
12490
12628
|
if (!date) return "";
|
|
12491
|
-
return (
|
|
12629
|
+
return formatPlainDate(date, format);
|
|
12492
12630
|
}
|
|
12493
|
-
function formatDateRange(date,
|
|
12631
|
+
function formatDateRange(date, format) {
|
|
12494
12632
|
if (!date) return "";
|
|
12495
12633
|
const { from, to } = date;
|
|
12496
|
-
const fromFormatted = from ? (
|
|
12497
|
-
const toFormatted = to ? (
|
|
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,
|
|
12501
|
-
return parseDateString(str,
|
|
12638
|
+
function parseDate(str, format) {
|
|
12639
|
+
return parseDateString(str, format);
|
|
12502
12640
|
}
|
|
12503
|
-
function parseDateRange(str,
|
|
12641
|
+
function parseDateRange(str, format) {
|
|
12504
12642
|
const [from = "", to = ""] = str.split("-");
|
|
12505
|
-
const fromDate = parseDateString(from.trim(),
|
|
12506
|
-
const toDate = parseDateString(to.trim(),
|
|
12507
|
-
if (toDate && fromDate && toDate <
|
|
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,
|
|
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
|
-
|
|
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)
|
|
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) ||
|
|
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
|
-
|
|
12530
|
-
|
|
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 && (
|
|
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
|
|
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(
|
|
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 && (
|
|
12849
|
+
if (isRangeMode && isDateRangeValue(d)) {
|
|
12662
12850
|
props.onChange(d);
|
|
12663
12851
|
return;
|
|
12664
12852
|
}
|
|
12665
|
-
if (!isRangeMode && !(
|
|
12853
|
+
if (!isRangeMode && !isDateRangeValue(d)) {
|
|
12666
12854
|
props.onChange(d);
|
|
12667
12855
|
return;
|
|
12668
12856
|
}
|
|
12669
12857
|
} else {
|
|
12670
|
-
|
|
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 ?
|
|
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 && (!(
|
|
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
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
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
|
|
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,
|
|
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
|
|
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
|
|
19008
|
+
value: value?.value ?? defaultValue?.value ?? todayPlainDate(),
|
|
18806
19009
|
label: "Date",
|
|
18807
|
-
onChange: (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
|
|
18835
|
-
onChange: (d) =>
|
|
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
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
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,
|