@undefine-ui/design-system 3.10.0 → 3.10.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
@@ -168,12 +168,22 @@ __export(index_exports, {
168
168
  defaultSettings: () => defaultSettings,
169
169
  dialogClasses: () => dialogClasses,
170
170
  drawerClasses: () => drawerClasses,
171
+ endOfDayTimestamp: () => endOfDayTimestamp,
171
172
  error: () => error,
172
173
  fCurrency: () => fCurrency,
173
174
  fData: () => fData,
175
+ fDate: () => fDate,
176
+ fDateRangeShortLabel: () => fDateRangeShortLabel,
177
+ fDateTime: () => fDateTime,
178
+ fIsAfter: () => fIsAfter,
179
+ fIsBetween: () => fIsBetween,
180
+ fIsSame: () => fIsSame,
174
181
  fNumber: () => fNumber,
175
182
  fPercent: () => fPercent,
176
183
  fShortenNumber: () => fShortenNumber,
184
+ fTime: () => fTime,
185
+ fTimestamp: () => fTimestamp,
186
+ fToNow: () => fToNow,
177
187
  feedbackDialogClasses: () => feedbackDialogClasses,
178
188
  fileData: () => fileData,
179
189
  fileNameByUrl: () => fileNameByUrl,
@@ -219,6 +229,7 @@ __export(index_exports, {
219
229
  shadows: () => shadows,
220
230
  snakeCase: () => snakeCase,
221
231
  splitFullname: () => splitFullname,
232
+ startOfDayTimestamp: () => startOfDayTimestamp,
222
233
  stylesMode: () => stylesMode,
223
234
  success: () => success,
224
235
  surface: () => surface,
@@ -295,6 +306,218 @@ var sentenceCase = (string) => {
295
306
  return string.charAt(0).toUpperCase() + string.slice(1);
296
307
  };
297
308
 
309
+ // src/libs/format-time.ts
310
+ var import_date_fns = require("date-fns");
311
+ var fDate = (date, newFormat) => {
312
+ const fm = newFormat || "dd MMM, yyyy";
313
+ if (typeof date === "number") {
314
+ try {
315
+ return (0, import_date_fns.format)((0, import_date_fns.fromUnixTime)(date), fm);
316
+ } catch (error2) {
317
+ console.error("Error formatting Unix timestamp:", error2);
318
+ return "";
319
+ }
320
+ }
321
+ if (date instanceof Date || typeof date === "string") {
322
+ try {
323
+ return (0, import_date_fns.format)(new Date(date), fm);
324
+ } catch (error2) {
325
+ console.error("Error formatting date:", error2);
326
+ return "";
327
+ }
328
+ }
329
+ return "";
330
+ };
331
+ var fTime = (date) => {
332
+ if (date) {
333
+ try {
334
+ if (typeof date === "number") {
335
+ return (0, import_date_fns.format)((0, import_date_fns.fromUnixTime)(date), "p");
336
+ }
337
+ return (0, import_date_fns.format)(new Date(date), "p");
338
+ } catch (error2) {
339
+ console.error("Error formatting time:", error2);
340
+ return "";
341
+ }
342
+ }
343
+ return "";
344
+ };
345
+ var fDateTime = (date, newFormat) => {
346
+ const fm = newFormat || "dd MMM yyyy p";
347
+ if (date) {
348
+ try {
349
+ if (typeof date === "number") {
350
+ return (0, import_date_fns.format)((0, import_date_fns.fromUnixTime)(date), fm);
351
+ }
352
+ return (0, import_date_fns.format)(new Date(date), fm);
353
+ } catch (error2) {
354
+ console.error("Error formatting date-time:", error2);
355
+ return "";
356
+ }
357
+ }
358
+ return "";
359
+ };
360
+ var fTimestamp = (date) => {
361
+ if (date) {
362
+ try {
363
+ if (typeof date === "number") {
364
+ return date > 9466848e5 ? date : date * 1e3;
365
+ }
366
+ return (0, import_date_fns.getTime)(new Date(date));
367
+ } catch (error2) {
368
+ console.error("Error getting timestamp:", error2);
369
+ return "";
370
+ }
371
+ }
372
+ return "";
373
+ };
374
+ var fToNow = (date) => {
375
+ if (date) {
376
+ try {
377
+ if (typeof date === "number") {
378
+ return (0, import_date_fns.formatDistanceToNow)((0, import_date_fns.fromUnixTime)(date), { addSuffix: true });
379
+ }
380
+ return (0, import_date_fns.formatDistanceToNow)(new Date(date), { addSuffix: true });
381
+ } catch (error2) {
382
+ console.error("Error formatting time distance:", error2);
383
+ return "";
384
+ }
385
+ }
386
+ return "";
387
+ };
388
+ var startOfDayTimestamp = (date) => {
389
+ if (date) {
390
+ try {
391
+ let dateObj;
392
+ if (typeof date === "number") {
393
+ dateObj = (0, import_date_fns.fromUnixTime)(date);
394
+ } else {
395
+ dateObj = new Date(date);
396
+ }
397
+ if (Number.isNaN(dateObj.getTime())) {
398
+ throw new Error("Invalid date input");
399
+ }
400
+ const start = (0, import_date_fns.startOfDay)(dateObj);
401
+ return Math.floor((0, import_date_fns.getTime)(start) / 1e3);
402
+ } catch (error2) {
403
+ console.error("Error calculating start of day timestamp:", error2);
404
+ return 0;
405
+ }
406
+ }
407
+ return 0;
408
+ };
409
+ var endOfDayTimestamp = (date) => {
410
+ if (date) {
411
+ try {
412
+ let dateObj;
413
+ if (typeof date === "number") {
414
+ dateObj = (0, import_date_fns.fromUnixTime)(date);
415
+ } else {
416
+ dateObj = new Date(date);
417
+ }
418
+ if (Number.isNaN(dateObj.getTime())) {
419
+ throw new Error("Invalid date input");
420
+ }
421
+ const end = (0, import_date_fns.endOfDay)(dateObj);
422
+ return Math.floor((0, import_date_fns.getTime)(end) / 1e3);
423
+ } catch (error2) {
424
+ console.error("Error calculating end of day timestamp:", error2);
425
+ return 0;
426
+ }
427
+ }
428
+ return 0;
429
+ };
430
+ var fIsBetween = (inputDate, startDate, endDate) => {
431
+ if (!inputDate || !startDate || !endDate) {
432
+ return false;
433
+ }
434
+ try {
435
+ const input = typeof inputDate === "string" ? (0, import_date_fns.parseISO)(inputDate) : new Date(inputDate);
436
+ const start = typeof startDate === "string" ? (0, import_date_fns.parseISO)(startDate) : new Date(startDate);
437
+ const end = typeof endDate === "string" ? (0, import_date_fns.parseISO)(endDate) : new Date(endDate);
438
+ if (!(0, import_date_fns.isValid)(input) || !(0, import_date_fns.isValid)(start) || !(0, import_date_fns.isValid)(end)) {
439
+ return false;
440
+ }
441
+ const inputTime = input.getTime();
442
+ const startTime = start.getTime();
443
+ const endTime = end.getTime();
444
+ return inputTime >= startTime && inputTime <= endTime;
445
+ } catch (error2) {
446
+ console.error("Error checking if date is between:", error2);
447
+ return false;
448
+ }
449
+ };
450
+ var fIsAfter = (startDate, endDate) => {
451
+ if (!startDate || !endDate) {
452
+ return false;
453
+ }
454
+ try {
455
+ const start = typeof startDate === "string" ? (0, import_date_fns.parseISO)(startDate) : new Date(startDate);
456
+ const end = typeof endDate === "string" ? (0, import_date_fns.parseISO)(endDate) : new Date(endDate);
457
+ if (!(0, import_date_fns.isValid)(start) || !(0, import_date_fns.isValid)(end)) {
458
+ return "Invalid time value";
459
+ }
460
+ return (0, import_date_fns.isAfter)(start, end);
461
+ } catch (error2) {
462
+ console.error("Error comparing dates:", error2);
463
+ return false;
464
+ }
465
+ };
466
+ var fIsSame = (startDate, endDate, units = "year") => {
467
+ if (!startDate || !endDate) {
468
+ return false;
469
+ }
470
+ try {
471
+ const start = typeof startDate === "string" ? (0, import_date_fns.parseISO)(startDate) : new Date(startDate);
472
+ const end = typeof endDate === "string" ? (0, import_date_fns.parseISO)(endDate) : new Date(endDate);
473
+ if (!(0, import_date_fns.isValid)(start) || !(0, import_date_fns.isValid)(end)) {
474
+ return "Invalid time value";
475
+ }
476
+ switch (units) {
477
+ case "day":
478
+ return (0, import_date_fns.isSameDay)(start, end);
479
+ case "month":
480
+ return (0, import_date_fns.isSameMonth)(start, end);
481
+ case "year":
482
+ default:
483
+ return (0, import_date_fns.isSameYear)(start, end);
484
+ }
485
+ } catch (error2) {
486
+ console.error("Error checking if dates are the same:", error2);
487
+ return false;
488
+ }
489
+ };
490
+ var fDateRangeShortLabel = (startDate, endDate, initial = false) => {
491
+ if (!startDate || !endDate) return "Invalid time value";
492
+ try {
493
+ const start = typeof startDate === "string" ? (0, import_date_fns.parseISO)(startDate) : new Date(startDate);
494
+ const end = typeof endDate === "string" ? (0, import_date_fns.parseISO)(endDate) : new Date(endDate);
495
+ const isValidDate = (0, import_date_fns.isValid)(start) && (0, import_date_fns.isValid)(end);
496
+ const dateIsAfter = fIsAfter(start, end);
497
+ if (!isValidDate || dateIsAfter === "Invalid time value" || dateIsAfter) {
498
+ return "Invalid time value";
499
+ }
500
+ let label = `${fDate(start)} - ${fDate(end)}`;
501
+ if (initial) {
502
+ return label;
503
+ }
504
+ const sameYear = fIsSame(start, end, "year");
505
+ const sameMonth = fIsSame(start, end, "month");
506
+ const sameDay = fIsSame(start, end, "day");
507
+ if (sameYear && !sameMonth) {
508
+ label = `${fDate(start, "dd MMM")} - ${fDate(end)}`;
509
+ } else if (sameYear && sameMonth && !sameDay) {
510
+ label = `${fDate(start, "dd")} - ${fDate(end)}`;
511
+ } else if (sameYear && sameMonth && sameDay) {
512
+ label = `${fDate(end)}`;
513
+ }
514
+ return label;
515
+ } catch (error2) {
516
+ console.error("Error formatting date range:", error2);
517
+ return "Invalid time value";
518
+ }
519
+ };
520
+
298
521
  // src/libs/format-number.ts
299
522
  var processInput = (inputValue) => {
300
523
  if (inputValue == null || Number.isNaN(Number(inputValue))) return null;
@@ -8795,7 +9018,7 @@ FilterDropdown.displayName = "FilterDropdown";
8795
9018
 
8796
9019
  // src/components/Toolbar/DateRangeDropdown.tsx
8797
9020
  var import_react22 = require("react");
8798
- var import_date_fns2 = require("date-fns");
9021
+ var import_date_fns3 = require("date-fns");
8799
9022
  var import_Popover3 = __toESM(require("@mui/material/Popover"), 1);
8800
9023
 
8801
9024
  // src/components/Toolbar/ToolbarDatePickerButton.tsx
@@ -8809,7 +9032,7 @@ var ToolbarDatePickerButton = ({
8809
9032
 
8810
9033
  // src/components/DateRangePicker/index.tsx
8811
9034
  var import_react21 = require("react");
8812
- var import_date_fns = require("date-fns");
9035
+ var import_date_fns2 = require("date-fns");
8813
9036
  var import_Box17 = __toESM(require("@mui/material/Box"), 1);
8814
9037
  var import_Radio3 = __toESM(require("@mui/material/Radio"), 1);
8815
9038
  var import_Button4 = __toESM(require("@mui/material/Button"), 1);
@@ -8835,20 +9058,20 @@ function getDateRangeFromPreset(preset) {
8835
9058
  const today = /* @__PURE__ */ new Date();
8836
9059
  switch (preset) {
8837
9060
  case "today":
8838
- return { start: (0, import_date_fns.startOfDay)(today), end: (0, import_date_fns.endOfDay)(today) };
9061
+ return { start: (0, import_date_fns2.startOfDay)(today), end: (0, import_date_fns2.endOfDay)(today) };
8839
9062
  case "yesterday":
8840
9063
  return {
8841
- start: (0, import_date_fns.startOfDay)((0, import_date_fns.subDays)(today, 1)),
8842
- end: (0, import_date_fns.endOfDay)((0, import_date_fns.subDays)(today, 1))
9064
+ start: (0, import_date_fns2.startOfDay)((0, import_date_fns2.subDays)(today, 1)),
9065
+ end: (0, import_date_fns2.endOfDay)((0, import_date_fns2.subDays)(today, 1))
8843
9066
  };
8844
9067
  case "last7days":
8845
- return { start: (0, import_date_fns.startOfDay)((0, import_date_fns.subDays)(today, 6)), end: (0, import_date_fns.endOfDay)(today) };
9068
+ return { start: (0, import_date_fns2.startOfDay)((0, import_date_fns2.subDays)(today, 6)), end: (0, import_date_fns2.endOfDay)(today) };
8846
9069
  case "last30days":
8847
- return { start: (0, import_date_fns.startOfDay)((0, import_date_fns.subDays)(today, 29)), end: (0, import_date_fns.endOfDay)(today) };
9070
+ return { start: (0, import_date_fns2.startOfDay)((0, import_date_fns2.subDays)(today, 29)), end: (0, import_date_fns2.endOfDay)(today) };
8848
9071
  case "last6months":
8849
- return { start: (0, import_date_fns.startOfDay)((0, import_date_fns.subMonths)(today, 6)), end: (0, import_date_fns.endOfDay)(today) };
9072
+ return { start: (0, import_date_fns2.startOfDay)((0, import_date_fns2.subMonths)(today, 6)), end: (0, import_date_fns2.endOfDay)(today) };
8850
9073
  case "lastyear":
8851
- return { start: (0, import_date_fns.startOfDay)((0, import_date_fns.subYears)(today, 1)), end: (0, import_date_fns.endOfDay)(today) };
9074
+ return { start: (0, import_date_fns2.startOfDay)((0, import_date_fns2.subYears)(today, 1)), end: (0, import_date_fns2.endOfDay)(today) };
8852
9075
  case "alltime":
8853
9076
  return { start: null, end: null };
8854
9077
  case "custom":
@@ -8894,7 +9117,7 @@ var DateRangePicker = (0, import_react21.forwardRef)(
8894
9117
  if (selectingDate === "start") {
8895
9118
  setTempRange((prev) => ({
8896
9119
  start: date,
8897
- end: prev.end && (0, import_date_fns.isAfter)(date, prev.end) ? null : prev.end
9120
+ end: prev.end && (0, import_date_fns2.isAfter)(date, prev.end) ? null : prev.end
8898
9121
  }));
8899
9122
  setSelectingDate("end");
8900
9123
  } else {
@@ -8914,15 +9137,15 @@ var DateRangePicker = (0, import_react21.forwardRef)(
8914
9137
  const handleEndDateClick = (0, import_react21.useCallback)(() => {
8915
9138
  setSelectingDate("end");
8916
9139
  }, []);
8917
- const formattedStartDate = tempRange.start ? (0, import_date_fns.format)(tempRange.start, dateFormat) : "";
8918
- const formattedEndDate = tempRange.end ? (0, import_date_fns.format)(tempRange.end, dateFormat) : "";
9140
+ const formattedStartDate = tempRange.start ? (0, import_date_fns2.format)(tempRange.start, dateFormat) : "";
9141
+ const formattedEndDate = tempRange.end ? (0, import_date_fns2.format)(tempRange.end, dateFormat) : "";
8919
9142
  const leftCalendarMonth = (0, import_react21.useMemo)(() => {
8920
9143
  if (tempRange.start) return tempRange.start;
8921
9144
  return /* @__PURE__ */ new Date();
8922
9145
  }, [tempRange.start]);
8923
9146
  const rightCalendarMonth = (0, import_react21.useMemo)(() => {
8924
9147
  if (tempRange.end) return tempRange.end;
8925
- return (0, import_date_fns.addMonths)(/* @__PURE__ */ new Date(), 1);
9148
+ return (0, import_date_fns2.addMonths)(/* @__PURE__ */ new Date(), 1);
8926
9149
  }, [tempRange.end]);
8927
9150
  return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_LocalizationProvider.LocalizationProvider, { dateAdapter: import_AdapterDateFns.AdapterDateFns, children: /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)(
8928
9151
  import_Box17.default,
@@ -9097,8 +9320,8 @@ function DateRangeDropdown({
9097
9320
  if (preset === "custom" && value?.start && value?.end) {
9098
9321
  const startYear = value.start.getFullYear();
9099
9322
  const endYear = value.end.getFullYear();
9100
- const startStr = startYear !== endYear ? (0, import_date_fns2.format)(value.start, "MMM d, yyyy") : (0, import_date_fns2.format)(value.start, "MMM d");
9101
- const endStr = (0, import_date_fns2.format)(value.end, "MMM d, yyyy");
9323
+ const startStr = startYear !== endYear ? (0, import_date_fns3.format)(value.start, "MMM d, yyyy") : (0, import_date_fns3.format)(value.start, "MMM d");
9324
+ const endStr = (0, import_date_fns3.format)(value.end, "MMM d, yyyy");
9102
9325
  return `${startStr} - ${endStr}`;
9103
9326
  }
9104
9327
  const presetsToSearch = presets ?? defaultPresets;
@@ -10188,7 +10411,7 @@ var RHFToggleButton = ({
10188
10411
  // src/components/HookForm/RHFDateRangePicker.tsx
10189
10412
  var import_react25 = require("react");
10190
10413
  var import_react_hook_form10 = require("react-hook-form");
10191
- var import_date_fns3 = require("date-fns");
10414
+ var import_date_fns4 = require("date-fns");
10192
10415
  var import_Box23 = __toESM(require("@mui/material/Box"), 1);
10193
10416
  var import_Popover4 = __toESM(require("@mui/material/Popover"), 1);
10194
10417
  var import_TextField6 = __toESM(require("@mui/material/TextField"), 1);
@@ -10221,11 +10444,11 @@ function RHFDateRangePicker({
10221
10444
  const presetOption = presets.find((p) => p.value === value.preset);
10222
10445
  if (presetOption) return presetOption.label;
10223
10446
  }
10224
- if (value.start && value.end && (0, import_date_fns3.isValid)(value.start) && (0, import_date_fns3.isValid)(value.end)) {
10447
+ if (value.start && value.end && (0, import_date_fns4.isValid)(value.start) && (0, import_date_fns4.isValid)(value.end)) {
10225
10448
  const startYear = value.start.getFullYear();
10226
10449
  const endYear = value.end.getFullYear();
10227
- const startStr = startYear !== endYear ? (0, import_date_fns3.format)(value.start, dateFormat) : (0, import_date_fns3.format)(value.start, "MMM d");
10228
- const endStr = (0, import_date_fns3.format)(value.end, dateFormat);
10450
+ const startStr = startYear !== endYear ? (0, import_date_fns4.format)(value.start, dateFormat) : (0, import_date_fns4.format)(value.start, "MMM d");
10451
+ const endStr = (0, import_date_fns4.format)(value.end, dateFormat);
10229
10452
  return `${startStr} - ${endStr}`;
10230
10453
  }
10231
10454
  return "";
@@ -11005,7 +11228,7 @@ var RHFDatePickerComponent = ({
11005
11228
  slotProps,
11006
11229
  helperText,
11007
11230
  clearable = false,
11008
- format: format4 = "MMM d, yyyy",
11231
+ format: format5 = "MMM d, yyyy",
11009
11232
  ...other
11010
11233
  }) => {
11011
11234
  const { control } = (0, import_react_hook_form13.useFormContext)();
@@ -11031,7 +11254,7 @@ var RHFDatePickerComponent = ({
11031
11254
  value: field.value ?? null,
11032
11255
  onChange: (newValue) => field.onChange(newValue),
11033
11256
  enableAccessibleFieldDOMStructure: false,
11034
- format: format4,
11257
+ format: format5,
11035
11258
  open: isOpen,
11036
11259
  onClose: () => setIsOpen(false),
11037
11260
  slots: {
@@ -11069,7 +11292,7 @@ var RHFTimePickerComponent = ({
11069
11292
  slotProps,
11070
11293
  helperText,
11071
11294
  clearable = false,
11072
- format: format4 = "h:mma",
11295
+ format: format5 = "h:mma",
11073
11296
  ...other
11074
11297
  }) => {
11075
11298
  const { control } = (0, import_react_hook_form13.useFormContext)();
@@ -11095,7 +11318,7 @@ var RHFTimePickerComponent = ({
11095
11318
  value: field.value ?? null,
11096
11319
  onChange: (newValue) => field.onChange(newValue),
11097
11320
  enableAccessibleFieldDOMStructure: false,
11098
- format: format4,
11321
+ format: format5,
11099
11322
  open: isOpen,
11100
11323
  onClose: () => setIsOpen(false),
11101
11324
  slots: {
@@ -11133,7 +11356,7 @@ var RHFDateTimePickerComponent = ({
11133
11356
  slotProps,
11134
11357
  helperText,
11135
11358
  clearable = false,
11136
- format: format4 = "MMM d, yyyy h:mma",
11359
+ format: format5 = "MMM d, yyyy h:mma",
11137
11360
  ...other
11138
11361
  }) => {
11139
11362
  const { control } = (0, import_react_hook_form13.useFormContext)();
@@ -11159,7 +11382,7 @@ var RHFDateTimePickerComponent = ({
11159
11382
  value: field.value ?? null,
11160
11383
  onChange: (newValue) => field.onChange(newValue),
11161
11384
  enableAccessibleFieldDOMStructure: false,
11162
- format: format4,
11385
+ format: format5,
11163
11386
  open: isOpen,
11164
11387
  onClose: () => setIsOpen(false),
11165
11388
  slots: {
@@ -12688,12 +12911,22 @@ __reExport(index_exports, components_exports2, module.exports);
12688
12911
  defaultSettings,
12689
12912
  dialogClasses,
12690
12913
  drawerClasses,
12914
+ endOfDayTimestamp,
12691
12915
  error,
12692
12916
  fCurrency,
12693
12917
  fData,
12918
+ fDate,
12919
+ fDateRangeShortLabel,
12920
+ fDateTime,
12921
+ fIsAfter,
12922
+ fIsBetween,
12923
+ fIsSame,
12694
12924
  fNumber,
12695
12925
  fPercent,
12696
12926
  fShortenNumber,
12927
+ fTime,
12928
+ fTimestamp,
12929
+ fToNow,
12697
12930
  feedbackDialogClasses,
12698
12931
  fileData,
12699
12932
  fileNameByUrl,
@@ -12739,6 +12972,7 @@ __reExport(index_exports, components_exports2, module.exports);
12739
12972
  shadows,
12740
12973
  snakeCase,
12741
12974
  splitFullname,
12975
+ startOfDayTimestamp,
12742
12976
  stylesMode,
12743
12977
  success,
12744
12978
  surface,