@m4l/components 9.3.20 → 9.3.21-JAEBeta.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.
Files changed (91) hide show
  1. package/@types/types.d.ts +1 -1
  2. package/components/Chip/Chip.js +9 -7
  3. package/components/Chip/ChipStyles.js +4 -31
  4. package/components/Chip/helpers.d.ts +10 -0
  5. package/components/Chip/helpers.js +34 -0
  6. package/components/Chip/types.d.ts +6 -0
  7. package/components/DataGrid/subcomponents/HeaderActions/subcomponents/hooks/useModalSettings/index.js +1 -1
  8. package/components/DragResizeWindowRND/DragResizeWindowRND.js +14 -10
  9. package/components/DragResizeWindowRND/helpers/expandingParentContainer.d.ts +1 -1
  10. package/components/DragResizeWindowRND/helpers/expandingParentContainer.js +24 -19
  11. package/components/DragResizeWindowRND/helpers/getInitialSize.d.ts +3 -3
  12. package/components/DragResizeWindowRND/helpers/getInitialSize.js +18 -15
  13. package/components/DragResizeWindowRND/helpers/shrinkingParentContainer.d.ts +1 -1
  14. package/components/DragResizeWindowRND/helpers/shrinkingParentContainer.js +17 -9
  15. package/components/DragResizeWindowRND/hooks/useRNDDimensionEffects.js +4 -1
  16. package/components/DragResizeWindowRND/index.d.ts +1 -0
  17. package/components/DragResizeWindowRND/types.d.ts +12 -2
  18. package/components/DynamicFilter/DynamicFilter.js +2 -1
  19. package/components/DynamicFilter/helpers/frontEndHelpers.d.ts +2 -2
  20. package/components/DynamicFilter/helpers/frontEndHelpers.js +31 -9
  21. package/components/DynamicFilter/subcomponents/DynamicFilterBase/DynamicFilterBase.d.ts +2 -1
  22. package/components/DynamicFilter/subcomponents/DynamicFilterBase/DynamicFilterBase.js +4 -2
  23. package/components/DynamicFilter/subcomponents/DynamicFilterBase/types.d.ts +3 -0
  24. package/components/DynamicFilter/subcomponents/PopoverFilter/PopoverFilter.js +1 -1
  25. package/components/DynamicFilter/types.d.ts +4 -0
  26. package/components/DynamicSort/DynamicSort.js +2 -1
  27. package/components/DynamicSort/subcomponents/DynamicSortBase/DynamicSortBase.d.ts +2 -1
  28. package/components/DynamicSort/subcomponents/DynamicSortBase/DynamicSortBase.js +4 -2
  29. package/components/DynamicSort/subcomponents/DynamicSortBase/types.d.ts +3 -0
  30. package/components/DynamicSort/subcomponents/PopoverSort/PopoverSort.js +1 -1
  31. package/components/DynamicSort/types.d.ts +4 -0
  32. package/components/Image/Image.js +4 -1
  33. package/components/MFLoader/MFLoader.js +8 -3
  34. package/components/MFLoader/styles.js +1 -1
  35. package/components/MFLoader/types.d.ts +10 -0
  36. package/components/ObjectLogs/hooks/useDetailFormatter.js +1 -1
  37. package/components/WindowBase/WindowBase.js +3 -3
  38. package/components/WindowBase/WindowBase.styles.js +36 -31
  39. package/components/WindowBase/constants.d.ts +1 -1
  40. package/components/WindowBase/constants.js +2 -2
  41. package/components/WindowBase/index.d.ts +1 -0
  42. package/components/WindowBase/subcomponents/Component/index.js +2 -2
  43. package/components/WindowBase/subcomponents/Component/types.d.ts +2 -0
  44. package/components/WindowBase/subcomponents/Header/HeaderWindowBase.js +7 -7
  45. package/components/WindowBase/subcomponents/Header/types.d.ts +1 -1
  46. package/components/WindowBase/subcomponents/MicroFrontend/types.d.ts +4 -0
  47. package/components/WindowBase/types.d.ts +3 -3
  48. package/components/WindowConfirm/WindowConfirm.js +1 -1
  49. package/components/areas/components/AreasViewer/AreasViewer.styles.js +1 -1
  50. package/components/areas/components/AreasViewer/subcomponents/Area/subcomponents/Window/Window.js +6 -2
  51. package/components/areas/components/AreasViewer/subcomponents/Area/subcomponents/Window/hooks/useWindow.d.ts +1 -0
  52. package/components/areas/components/AreasViewer/subcomponents/Area/subcomponents/Window/hooks/useWindow.js +21 -3
  53. package/components/areas/contexts/AreasContext/store.js +2 -2
  54. package/components/areas/index.d.ts +1 -1
  55. package/components/areas/types.d.ts +1 -1
  56. package/components/formatters/DistanceToNowFormatter/DistanceToNowFormatter.js +3 -34
  57. package/components/formatters/DistanceToNowFormatter/dictionary.d.ts +8 -0
  58. package/components/formatters/DistanceToNowFormatter/hooks/useDistanceToNowFormatter.d.ts +13 -0
  59. package/components/formatters/DistanceToNowFormatter/hooks/useDistanceToNowFormatter.js +65 -0
  60. package/components/formatters/DistanceToNowFormatter/index.d.ts +1 -0
  61. package/components/formatters/DistanceToNowFormatter/types.d.ts +4 -1
  62. package/components/hook-form/RHFAutocomplete/RHFAutocomplete.js +5 -1
  63. package/components/hook-form/RHFAutocomplete/constants.d.ts +1 -0
  64. package/components/hook-form/RHFAutocomplete/constants.js +5 -1
  65. package/components/hook-form/RHFAutocompleteAsync/RHFAutocompleteAsync.js +3 -1
  66. package/components/hook-form/RHFAutocompleteAsync/types.d.ts +4 -0
  67. package/components/hook-form/RHFormContext/index.d.ts +1 -1
  68. package/components/mui_extended/ToggleIconButton/ToggleIconButton.js +6 -2
  69. package/components/mui_extended/ToggleIconButton/ToggleIconButton.styles.js +9 -0
  70. package/components/mui_extended/ToggleIconButton/types.d.ts +1 -0
  71. package/components/mui_extended/index.d.ts +1 -1
  72. package/components/popups/components/PopupsProvider/hooks/usePopups.d.ts +2 -2
  73. package/components/popups/components/PopupsProvider/hooks/usePopups.js +0 -1
  74. package/components/popups/components/PopupsViewer/PopupsViewer.js +4 -3
  75. package/components/popups/components/PopupsViewer/subcomponents/Popup/Popup.js +5 -2
  76. package/components/popups/components/PopupsViewer/subcomponents/Popup/types.d.ts +5 -0
  77. package/components/popups/components/PopupsViewer/types.d.ts +3 -0
  78. package/hooks/index.d.ts +1 -0
  79. package/hooks/useSizeContainer/index.d.ts +2 -1
  80. package/hooks/useSizeContainer/index.js +22 -13
  81. package/hooks/useSizeContainer/types.d.ts +6 -0
  82. package/hooks/useStateRef/index.d.ts +1 -1
  83. package/hooks/useStateRef/index.js +6 -6
  84. package/index.js +45 -38
  85. package/package.json +1 -2
  86. package/utils/deepShallow.d.ts +17 -0
  87. package/utils/deepShallow.js +76 -0
  88. package/utils/formatDistanceToNow/formatDistanteToNow.d.ts +2 -2
  89. package/utils/formatDistanceToNow/formatDistanteToNow.js +18 -2
  90. package/utils/formatDistanceToNow/types.d.ts +13 -0
  91. package/utils/index.d.ts +1 -0
@@ -1,35 +1,44 @@
1
1
  import { useState, useEffect } from "react";
2
2
  import { T as THROTTLE_RESIZE_TIMEOUT } from "./contants.js";
3
3
  import throttle from "lodash-es/throttle";
4
- function useSizeContainer(containerElement) {
5
- const [currentState, setCurrentState] = useState();
4
+ function useSizeContainer(containerElement, options) {
5
+ const { throttleTime = THROTTLE_RESIZE_TIMEOUT, excludePadding = false, leading = false, trailing = true } = options || {};
6
+ const [currentState, setCurrentState] = useState(void 0);
6
7
  useEffect(() => {
7
8
  if (!containerElement) {
8
9
  return;
9
10
  }
10
- const throttleResize = throttle(setCurrentState, THROTTLE_RESIZE_TIMEOUT, {
11
- leading: false,
12
- // No enviar el primer evento de resizing
13
- trailing: true
11
+ const setter = (size) => {
12
+ setCurrentState(size);
13
+ };
14
+ const throttleResize = throttle(setter, throttleTime, {
15
+ leading,
16
+ // Evento de resizing (Por defecto false)
17
+ trailing
14
18
  // Incluir siempre el ultimo evento en la cola, para que no quede se quedee a la mitad de resizing
15
19
  });
16
20
  const resizeObserver = new ResizeObserver((entries) => {
17
- for (const entry of entries) {
21
+ if (excludePadding) {
18
22
  throttleResize({
19
- containerWidth: Math.round(entry.contentRect.width),
20
- containerHeight: Math.round(entry.contentRect.height)
23
+ containerWidth: Math.round(containerElement.clientWidth),
24
+ containerHeight: Math.round(containerElement.clientHeight)
21
25
  });
26
+ } else {
27
+ for (const entry of entries) {
28
+ throttleResize({
29
+ containerWidth: Math.round(entry.contentRect.width),
30
+ containerHeight: Math.round(entry.contentRect.height)
31
+ });
32
+ }
22
33
  }
23
34
  });
24
- if (containerElement) {
25
- resizeObserver.observe(containerElement);
26
- }
35
+ resizeObserver.observe(containerElement);
27
36
  return () => {
28
37
  if (containerElement) {
29
38
  resizeObserver.unobserve(containerElement);
30
39
  }
31
40
  };
32
- }, [containerElement]);
41
+ }, [containerElement, excludePadding, leading, throttleTime, trailing]);
33
42
  return currentState;
34
43
  }
35
44
  export {
@@ -0,0 +1,6 @@
1
+ export type UseSizeContainerOptions = {
2
+ leading?: boolean;
3
+ trailing?: boolean;
4
+ throttleTime?: number;
5
+ excludePadding?: boolean;
6
+ };
@@ -5,4 +5,4 @@
5
5
  * @param initialValue
6
6
  * @returns
7
7
  */
8
- export declare function useStateRef<T>(initialValue: T | null): [T | null, (node: T | null) => void];
8
+ export declare function useStateRef<T extends HTMLElement | null>(initialValue: T | null): [T | null, (node: T | null) => void];
@@ -1,13 +1,13 @@
1
- import { useState, useRef } from "react";
1
+ import { useState, useRef, useCallback } from "react";
2
2
  function useStateRef(initialValue) {
3
3
  const [refState, setRefState] = useState(initialValue);
4
4
  const nodeRef = useRef(null);
5
- const ref = (nodeElement) => {
6
- if (nodeRef.current !== nodeElement) {
7
- nodeRef.current = nodeElement;
8
- setRefState(nodeElement);
5
+ const ref = useCallback((current) => {
6
+ if (current && nodeRef.current !== current) {
7
+ nodeRef.current = current;
8
+ setRefState(current);
9
9
  }
10
- };
10
+ }, []);
11
11
  return [refState, ref];
12
12
  }
13
13
  export {
package/index.js CHANGED
@@ -122,6 +122,7 @@ import { P as P5, g as g16 } from "./components/formatters/PriceFormatter/PriceF
122
122
  import { C as C18 } from "./components/formatters/ChipStatusFormatter/ChipStatusFormatter.js";
123
123
  import { g as g17 } from "./components/formatters/DistanceToNowFormatter/dictionary.js";
124
124
  import { D as D9 } from "./components/formatters/DistanceToNowFormatter/DistanceToNowFormatter.js";
125
+ import { u as u13 } from "./components/formatters/DistanceToNowFormatter/hooks/useDistanceToNowFormatter.js";
125
126
  import { g as g18 } from "./components/formatters/dictionary.js";
126
127
  import { F as F2 } from "./components/FormContainer/FormContainer.js";
127
128
  import { G } from "./components/GridLayout/GridLayout.js";
@@ -175,7 +176,7 @@ import { g as g27 } from "./components/ObjectLogs/dictionary.js";
175
176
  import { O } from "./components/ObjectLogs/ObjectLogs.js";
176
177
  import { P as P7 } from "./components/PaperForm/PaperForm.js";
177
178
  import { P as P8 } from "./components/PDFViewer/PDFViewer.js";
178
- import { u as u13 } from "./components/popups/components/PopupsProvider/hooks/usePopupsStore.js";
179
+ import { u as u14 } from "./components/popups/components/PopupsProvider/hooks/usePopupsStore.js";
179
180
  import { a as a10, P as P9 } from "./components/popups/components/PopupsProvider/contexts/PopupsContext/PopupsContext.js";
180
181
  import { P as P10 } from "./components/popups/components/PopupsViewer/PopupsViewer.js";
181
182
  import { P as P11 } from "./components/PrintingSystem/PrintingSystem.js";
@@ -185,8 +186,8 @@ import { S as S9 } from "./components/SideBar/SideBar.js";
185
186
  import { T as T17 } from "./components/ToastContainer/ToastContainer.js";
186
187
  import { T as T18 } from "./components/ToastContainer/subcomponents/ToastMessage/ToastMessage.js";
187
188
  import { W as W2 } from "./components/WindowBase/WindowBase.js";
188
- import { u as u14 } from "./components/WindowBase/hooks/useWindowToolsMF/index.js";
189
- import { u as u15, a as a11 } from "./components/WindowBase/hooks/useDynamicMFParameters/index.js";
189
+ import { u as u15 } from "./components/WindowBase/hooks/useWindowToolsMF/index.js";
190
+ import { u as u16, a as a11 } from "./components/WindowBase/hooks/useDynamicMFParameters/index.js";
190
191
  import { M as M6, W as W3, a as a12 } from "./components/WindowBase/contexts/WindowToolsMFContext/WindowToolsMFContext.js";
191
192
  import { c as c3 } from "./components/WindowBase/contexts/DynamicMFParmsContext/store.js";
192
193
  import { D as D10, a as a13, M as M7 } from "./components/WindowBase/contexts/DynamicMFParmsContext/DynamicMFParmsContext.js";
@@ -195,7 +196,7 @@ import { a as a14, g as g28 } from "./components/ModalDialog/dictionary.js";
195
196
  import { M as M8 } from "./components/ModalDialog/ModalDialog.js";
196
197
  import { S as S10 } from "./components/SettingsLayout/SettingsLayout.js";
197
198
  import { P as P13 } from "./components/Pager/Pager.js";
198
- import { u as u16 } from "./components/Stepper/hooks/useStepper/index.js";
199
+ import { u as u17 } from "./components/Stepper/hooks/useStepper/index.js";
199
200
  import { S as S11 } from "./components/Stepper/Stepper.js";
200
201
  import { S as S12 } from "./components/Stepper/subcomponents/StepperContent/index.js";
201
202
  import { S as S13 } from "./components/Stepper/subcomponents/StepperContent/subcomponents/Step/index.js";
@@ -208,26 +209,27 @@ import { S as S19 } from "./components/Stepper/subcomponents/StepperButtons/Step
208
209
  import { S as S20 } from "./components/Stepper/subcomponents/StepperButtons/StepperSubmitButton/index.js";
209
210
  import { e as e3 } from "./components/Stepper/helpers/evaluateVisibilityStepCondition/index.js";
210
211
  import { g as g29 } from "./components/Stepper/dictionary.js";
211
- import { F as F3, R as R23, u as u17 } from "./components/hook-form/RHFormContext/index.js";
212
+ import { F as F3, R as R23, u as u18 } from "./components/hook-form/RHFormContext/index.js";
212
213
  import { g as g30 } from "./components/hook-form/RHFormContext/dictionary.js";
213
- import { u as u18 } from "./contexts/AppearanceComponentContext/useAppearanceComponentStore.js";
214
+ import { u as u19 } from "./contexts/AppearanceComponentContext/useAppearanceComponentStore.js";
214
215
  import { A as A16 } from "./contexts/AppearanceComponentContext/AppearanceComponentContext.js";
215
216
  import { a as a15, M as M9 } from "./contexts/ModalContext/index.js";
216
- import { u as u19 } from "./hooks/useFormAddEdit/index.js";
217
- import { u as u20 } from "./hooks/useModal/index.js";
218
- import { u as u21 } from "./hooks/useTab/index.js";
217
+ import { u as u20 } from "./hooks/useFormAddEdit/index.js";
218
+ import { u as u21 } from "./hooks/useModal/index.js";
219
+ import { u as u22 } from "./hooks/useTab/index.js";
219
220
  import { g as g31 } from "./hooks/useFormAddEdit/dictionary.js";
220
- import { u as u22 } from "./hooks/useFormFocus/index.js";
221
- import { u as u23 } from "./hooks/useInterval/index.js";
222
- import { u as u24 } from "./hooks/useComponentSize/useComponentSize.js";
223
- import { u as u25 } from "./hooks/useFormReadyForUpdate/index.js";
224
- import { u as u26 } from "./hooks/useStateRef/index.js";
221
+ import { u as u23 } from "./hooks/useFormFocus/index.js";
222
+ import { u as u24 } from "./hooks/useInterval/index.js";
223
+ import { u as u25 } from "./hooks/useComponentSize/useComponentSize.js";
224
+ import { u as u26 } from "./hooks/useFormReadyForUpdate/index.js";
225
+ import { u as u27 } from "./hooks/useStateRef/index.js";
225
226
  import { S as S21 } from "./hooks/useSvgColor/constants.js";
226
- import { u as u27 } from "./hooks/useSvgColor/useSvgColor.js";
227
- import { u as u28 } from "./hooks/useDynamicFilterAndSort/useDynamicFilterAndSort.js";
228
- import { u as u29 } from "./hooks/useDataGridPersistence/useDataGridPersistence.js";
229
- import { u as u30 } from "./hooks/usePopoverContainer/usePopoverContainer.js";
230
- import { u as u31 } from "./hooks/useIsVisible/useIsVisible.js";
227
+ import { u as u28 } from "./hooks/useSvgColor/useSvgColor.js";
228
+ import { u as u29 } from "./hooks/useDynamicFilterAndSort/useDynamicFilterAndSort.js";
229
+ import { u as u30 } from "./hooks/useDataGridPersistence/useDataGridPersistence.js";
230
+ import { u as u31 } from "./hooks/usePopoverContainer/usePopoverContainer.js";
231
+ import { u as u32 } from "./hooks/useIsVisible/useIsVisible.js";
232
+ import { u as u33 } from "./hooks/useSizeContainer/index.js";
231
233
  import { c as c4 } from "./utils/capitalizeFirstLetter.js";
232
234
  import { i as i2 } from "./utils/isValidDate.js";
233
235
  import { g as g32 } from "./utils/getComponentUtilityClass.js";
@@ -240,6 +242,7 @@ import { g as g37, a as a17 } from "./utils/getComponentSlotRoot.js";
240
242
  import { f } from "./utils/formatDistanceToNow/formatDistanteToNow.js";
241
243
  import { g as g38 } from "./utils/getValidDate.js";
242
244
  import { g as g39 } from "./utils/getNullGuard.js";
245
+ import { c as c5, d as d4 } from "./utils/deepShallow.js";
243
246
  import { g as g40 } from "./helpers/getStepsAndValidationSchema/getStepsAndValidationSchema.js";
244
247
  export {
245
248
  A7 as AREAS_DICCTIONARY,
@@ -428,8 +431,10 @@ export {
428
431
  e2 as addLayoutItemToBreakPoints,
429
432
  c4 as capitalizeFirstLetter,
430
433
  d3 as cloneLayouts,
434
+ c5 as createCustomDeepShallow,
431
435
  c3 as createDynamicMFStore,
432
436
  c as createToaster,
437
+ d4 as deepShallow,
433
438
  d as defaultCommonActionsDictionary,
434
439
  d2 as dragResizeWindowRNDClasses,
435
440
  e3 as evaluateVisibilityStepCondition,
@@ -486,7 +491,7 @@ export {
486
491
  r as rhfPeriodStyles,
487
492
  t as toggleButtonStyles,
488
493
  t2 as toggleIconButtonStyles,
489
- u18 as useAppearanceComponentStore,
494
+ u19 as useAppearanceComponentStore,
490
495
  u as useAreasStore,
491
496
  u2 as useColumnBoolean,
492
497
  u11 as useColumnChipStatus,
@@ -498,26 +503,28 @@ export {
498
503
  u8 as useColumnPrice,
499
504
  u9 as useColumnSetCheck,
500
505
  u10 as useColumnUncertanity,
501
- u24 as useComponentSize,
502
- u17 as useCustomForm,
503
- u29 as useDataGridPersistence,
504
- u28 as useDynamicFilterAndSort,
505
- u15 as useDynamicMFParameters,
506
+ u25 as useComponentSize,
507
+ u18 as useCustomForm,
508
+ u30 as useDataGridPersistence,
509
+ u13 as useDistanceToNowFormatter,
510
+ u29 as useDynamicFilterAndSort,
511
+ u16 as useDynamicMFParameters,
506
512
  a11 as useDynamicMFParametersStore,
507
- u19 as useFormAddEdit,
508
- u22 as useFormFocus,
509
- u25 as useFormReadyForUpdate,
513
+ u20 as useFormAddEdit,
514
+ u23 as useFormFocus,
515
+ u26 as useFormReadyForUpdate,
510
516
  u12 as useFormatPeriod,
511
- u23 as useInterval,
512
- u31 as useIsVisible,
513
- u20 as useModal,
514
- u30 as usePopoverContainer,
515
- u13 as usePopupsStore,
516
- u26 as useStateRef,
517
- u16 as useStepper,
518
- u27 as useSvgColor,
519
- u21 as useTab,
520
- u14 as useWindowToolsMF,
517
+ u24 as useInterval,
518
+ u32 as useIsVisible,
519
+ u21 as useModal,
520
+ u31 as usePopoverContainer,
521
+ u14 as usePopupsStore,
522
+ u33 as useSizeContainer,
523
+ u27 as useStateRef,
524
+ u17 as useStepper,
525
+ u28 as useSvgColor,
526
+ u22 as useTab,
527
+ u15 as useWindowToolsMF,
521
528
  v2 as varBounce,
522
529
  v3 as varContainer,
523
530
  v as varFade,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@m4l/components",
3
- "version": "9.3.20",
3
+ "version": "9.3.21-JAEBeta.1",
4
4
  "license": "UNLICENSED",
5
5
  "description": "M4L Components",
6
6
  "lint-staged": {
@@ -43,7 +43,6 @@
43
43
  "react-helmet-async": "^2.0.5",
44
44
  "react-hook-form": "^7.33.1",
45
45
  "react-intersection-observer": "^9.4.0",
46
- "react-leaflet": "^4.2.1",
47
46
  "react-resizable": "^3.0.4",
48
47
  "react-resizable-panels": "^2.1.8",
49
48
  "react-rnd": "^10.5.2",
@@ -0,0 +1,17 @@
1
+ type DeepShallowOptions = {
2
+ maxDepth?: number;
3
+ ignoreTypes?: Array<string>;
4
+ compareArrays?: boolean;
5
+ compareObjects?: boolean;
6
+ customComparers?: Record<string, (a: any, b: any) => boolean>;
7
+ log?: boolean;
8
+ };
9
+ /**
10
+ * Comparador con profundidad
11
+ */
12
+ export declare const deepShallow: <T>(objA: T, objB: T, depth?: number, options?: DeepShallowOptions) => boolean;
13
+ /**
14
+ * Crea una función de comparación profunda con opciones personalizadas
15
+ */
16
+ export declare const createCustomDeepShallow: <T>(options?: DeepShallowOptions) => (objA: T, objB: T, depth?: number) => boolean;
17
+ export {};
@@ -0,0 +1,76 @@
1
+ const deepShallow = (objA, objB, depth = 0, options) => {
2
+ const {
3
+ maxDepth = 10,
4
+ ignoreTypes = ["function"],
5
+ compareArrays = true,
6
+ compareObjects = true,
7
+ customComparers = {},
8
+ log = false
9
+ } = options || {};
10
+ if (log && process.env.NODE_ENV === "development" && depth === 0) {
11
+ console.log("deepShallow**", objA, objB, depth);
12
+ }
13
+ if (depth >= maxDepth) {
14
+ return Object.is(objA, objB);
15
+ }
16
+ if (objA === objB) {
17
+ return true;
18
+ }
19
+ if (objA == null || objB == null) {
20
+ return objA === objB;
21
+ }
22
+ if (typeof objA !== "object" || typeof objB !== "object") {
23
+ return objA === objB;
24
+ }
25
+ if (Array.isArray(objA) && Array.isArray(objB)) {
26
+ if (!compareArrays) {
27
+ return Object.is(objA, objB);
28
+ }
29
+ if (objA.length !== objB.length) {
30
+ return false;
31
+ }
32
+ for (let i = 0; i < objA.length; i++) {
33
+ if (!deepShallow(objA[i], objB[i], depth + 1, options)) {
34
+ return false;
35
+ }
36
+ }
37
+ return true;
38
+ }
39
+ if (Array.isArray(objA) || Array.isArray(objB)) {
40
+ return false;
41
+ }
42
+ if (!compareObjects) {
43
+ return Object.is(objA, objB);
44
+ }
45
+ const keysA = Object.keys(objA);
46
+ const keysB = Object.keys(objB);
47
+ if (keysA.length !== keysB.length) {
48
+ return false;
49
+ }
50
+ for (let i = 0; i < keysA.length; i++) {
51
+ const key = keysA[i];
52
+ const valueA = objA[key];
53
+ const valueB = objB[key];
54
+ if (ignoreTypes.includes(typeof valueA)) {
55
+ continue;
56
+ }
57
+ const valueType = typeof valueA;
58
+ if (customComparers[valueType]) {
59
+ if (!customComparers[valueType](valueA, valueB)) {
60
+ return false;
61
+ }
62
+ continue;
63
+ }
64
+ if (!deepShallow(valueA, valueB, depth + 1, options)) {
65
+ return false;
66
+ }
67
+ }
68
+ return true;
69
+ };
70
+ const createCustomDeepShallow = (options) => {
71
+ return (objA, objB, depth = 0) => deepShallow(objA, objB, depth, options);
72
+ };
73
+ export {
74
+ createCustomDeepShallow as c,
75
+ deepShallow as d
76
+ };
@@ -1,5 +1,5 @@
1
- import { PresentationTimeType, FormatDistanteToNowDictionary } from './types';
1
+ import { PresentationTimeType, FormatDistanteToNowDictionary, FormatDistanceToNowReturn } from './types';
2
2
  /**
3
3
  * TODO: Documentar
4
4
  */
5
- export declare const formatDistanceToNow: (type: PresentationTimeType, date: Date, dictionary: FormatDistanteToNowDictionary) => string;
5
+ export declare const formatDistanceToNow: (type: PresentationTimeType, date: Date, dictionary: FormatDistanteToNowDictionary) => FormatDistanceToNowReturn;
@@ -9,7 +9,7 @@ const replaceValues = (label, ...values) => {
9
9
  };
10
10
  const formatDistanceToNow = (type, date, dictionary) => {
11
11
  if (!(date instanceof Date)) {
12
- return "No date";
12
+ return { time: "No date", value: "", unit: "" };
13
13
  }
14
14
  const now = /* @__PURE__ */ new Date();
15
15
  const diff = now.getTime() - date.getTime();
@@ -19,6 +19,8 @@ const formatDistanceToNow = (type, date, dictionary) => {
19
19
  const days = Math.floor(hours / 24);
20
20
  const months = Math.floor(days / 30);
21
21
  const years = Math.floor(months / 12);
22
+ let value;
23
+ let unit;
22
24
  let timeElaped = "";
23
25
  const unitYears = years > 1 ? dictionary.label_unit_time_years : dictionary.label_unit_time_year;
24
26
  const unitMonths = months % 12 > 1 ? dictionary.label_unit_time_months : dictionary.label_unit_time_month;
@@ -32,6 +34,8 @@ const formatDistanceToNow = (type, date, dictionary) => {
32
34
  } else if (type === "future") {
33
35
  label = dictionary.label_sentence_future_others;
34
36
  }
37
+ const separatorTime = ":";
38
+ const separatorDate = "-";
35
39
  if (seconds < 60) {
36
40
  if (type === "past") {
37
41
  timeElaped = replaceValues(dictionary.label_sentence_past_seconds, seconds + "", unitSeconds);
@@ -48,34 +52,46 @@ const formatDistanceToNow = (type, date, dictionary) => {
48
52
  unitSeconds
49
53
  );
50
54
  }
55
+ value = seconds.toString().padStart(2, "0") + "";
56
+ unit = dictionary.label_unit_time_seconds_short;
51
57
  } else if (minutes < 60) {
52
58
  timeElaped = replaceValues(label, `${minutes}`, unitMinutes);
59
+ value = minutes.toString().padStart(2, "0") + ":" + (seconds % 60).toString().padStart(2, "0");
60
+ unit = dictionary.label_unit_time_minutes_short + dictionary.label_separator_time + dictionary.label_unit_time_seconds_short;
53
61
  } else if (hours < 24) {
54
62
  if (minutes % 60 > 0) {
55
63
  timeElaped = replaceValues(label, `${hours} ${unitHours} ${minutes % 60} ${unitMinutes}`, "");
56
64
  } else {
57
65
  timeElaped = replaceValues(label, `${hours} ${unitHours}`, "");
58
66
  }
67
+ value = hours.toString().padStart(2, "0") + ":" + (minutes % 60).toString().padStart(2, "0");
68
+ unit = dictionary.label_unit_time_hours_short + separatorTime + dictionary.label_unit_time_minutes_short;
59
69
  } else if (days < 30) {
60
70
  if (hours % 24 > 0) {
61
71
  timeElaped = replaceValues(label, `${days} ${unitDays} ${hours % 24} ${unitHours}`, "");
62
72
  } else {
63
73
  timeElaped = replaceValues(label, `${days} ${unitDays}`, "");
64
74
  }
75
+ value = days.toString().padStart(2, "0") + " " + (hours % 24).toString().padStart(2, "0");
76
+ unit = dictionary.label_unit_time_days_short + " " + dictionary.label_unit_time_hours_short;
65
77
  } else if (months < 12) {
66
78
  if (days % 30 > 0) {
67
79
  timeElaped = replaceValues(label, `${months} ${unitMonths} ${days % 30} ${unitDays}`, "");
68
80
  } else {
69
81
  timeElaped = replaceValues(label, `${months} ${unitMonths}`, "");
70
82
  }
83
+ value = months.toString().padStart(2, "0") + separatorDate + (days % 30).toString().padStart(2, "0");
84
+ unit = dictionary.label_unit_time_months_short + separatorDate + dictionary.label_unit_time_days_short;
71
85
  } else {
72
86
  if (months % 12 > 0) {
73
87
  timeElaped = replaceValues(label, `${years} ${unitYears} ${months % 12} ${unitMonths}`, "");
74
88
  } else {
75
89
  timeElaped = replaceValues(label, `${years} ${unitYears}`, "");
76
90
  }
91
+ value = years.toString().padStart(2, "0") + separatorDate + (months % 12).toString().padStart(2, "0");
92
+ unit = dictionary.label_unit_time_years_short + separatorDate + dictionary.label_unit_time_months_short;
77
93
  }
78
- return timeElaped;
94
+ return { time: timeElaped, value, unit };
79
95
  };
80
96
  export {
81
97
  formatDistanceToNow as f
@@ -13,9 +13,22 @@ export type FormatDistanteToNowDictionary = {
13
13
  label_unit_time_month: string;
14
14
  label_unit_time_year: string;
15
15
  label_unit_time_seconds: string;
16
+ label_unit_time_seconds_short: string;
16
17
  label_unit_time_minutes: string;
18
+ label_unit_time_minutes_short: string;
17
19
  label_unit_time_hours: string;
20
+ label_unit_time_hours_short: string;
18
21
  label_unit_time_days: string;
22
+ label_unit_time_days_short: string;
19
23
  label_unit_time_months: string;
24
+ label_unit_time_months_short: string;
20
25
  label_unit_time_years: string;
26
+ label_unit_time_years_short: string;
27
+ label_separator_time: string;
28
+ label_separator_date: string;
29
+ };
30
+ export type FormatDistanceToNowReturn = {
31
+ time: string;
32
+ value: string;
33
+ unit: string;
21
34
  };
package/utils/index.d.ts CHANGED
@@ -11,3 +11,4 @@ export { getSizeStyles } from './getSizeStyles';
11
11
  export * from './formatDistanceToNow';
12
12
  export * from './getValidDate';
13
13
  export * from './getNullGuard';
14
+ export * from './deepShallow';