@m4l/components 9.3.19-BE101025-beta.2 → 9.3.19-BE171025-beta.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 (95) hide show
  1. package/@types/types.d.ts +1 -1
  2. package/components/AccountPopover/AccountPopover.js +12 -13
  3. package/components/AccountPopover/subcomponents/MenuPopover/MenuPopover.d.ts +1 -1
  4. package/components/AccountPopover/subcomponents/MenuPopover/MenuPopover.js +7 -4
  5. package/components/AccountPopover/subcomponents/MenuPopover/types.d.ts +1 -1
  6. package/components/Chip/Chip.js +9 -7
  7. package/components/Chip/ChipStyles.js +4 -31
  8. package/components/Chip/helpers.d.ts +10 -0
  9. package/components/Chip/helpers.js +34 -0
  10. package/components/Chip/types.d.ts +6 -0
  11. package/components/DataGrid/subcomponents/HeaderActions/subcomponents/hooks/useModalSettings/index.js +1 -1
  12. package/components/DragResizeWindowRND/DragResizeWindowRND.js +14 -10
  13. package/components/DragResizeWindowRND/helpers/expandingParentContainer.d.ts +1 -1
  14. package/components/DragResizeWindowRND/helpers/expandingParentContainer.js +24 -19
  15. package/components/DragResizeWindowRND/helpers/getInitialSize.d.ts +3 -3
  16. package/components/DragResizeWindowRND/helpers/getInitialSize.js +18 -15
  17. package/components/DragResizeWindowRND/helpers/shrinkingParentContainer.d.ts +1 -1
  18. package/components/DragResizeWindowRND/helpers/shrinkingParentContainer.js +17 -9
  19. package/components/DragResizeWindowRND/hooks/useRNDDimensionEffects.js +4 -1
  20. package/components/DragResizeWindowRND/index.d.ts +1 -0
  21. package/components/DragResizeWindowRND/types.d.ts +12 -2
  22. package/components/DynamicFilter/DynamicFilter.js +2 -1
  23. package/components/DynamicFilter/helpers/frontEndHelpers.d.ts +2 -2
  24. package/components/DynamicFilter/helpers/frontEndHelpers.js +31 -9
  25. package/components/DynamicFilter/subcomponents/DynamicFilterBase/DynamicFilterBase.d.ts +2 -1
  26. package/components/DynamicFilter/subcomponents/DynamicFilterBase/DynamicFilterBase.js +4 -2
  27. package/components/DynamicFilter/subcomponents/DynamicFilterBase/types.d.ts +3 -0
  28. package/components/DynamicFilter/subcomponents/PopoverFilter/PopoverFilter.js +1 -1
  29. package/components/DynamicFilter/types.d.ts +4 -0
  30. package/components/DynamicSort/DynamicSort.js +2 -1
  31. package/components/DynamicSort/subcomponents/DynamicSortBase/DynamicSortBase.d.ts +2 -1
  32. package/components/DynamicSort/subcomponents/DynamicSortBase/DynamicSortBase.js +4 -2
  33. package/components/DynamicSort/subcomponents/DynamicSortBase/types.d.ts +3 -0
  34. package/components/DynamicSort/subcomponents/PopoverSort/PopoverSort.js +1 -1
  35. package/components/DynamicSort/types.d.ts +4 -0
  36. package/components/GridLayout/subcomponents/GridItem/index.js +2 -2
  37. package/components/Image/Image.js +4 -1
  38. package/components/MFLoader/MFLoader.js +8 -3
  39. package/components/MFLoader/styles.js +1 -1
  40. package/components/MFLoader/types.d.ts +10 -0
  41. package/components/ObjectLogs/hooks/useDetailFormatter.js +1 -1
  42. package/components/WindowBase/WindowBase.js +3 -3
  43. package/components/WindowBase/WindowBase.styles.js +36 -31
  44. package/components/WindowBase/constants.d.ts +1 -1
  45. package/components/WindowBase/constants.js +2 -2
  46. package/components/WindowBase/index.d.ts +1 -0
  47. package/components/WindowBase/subcomponents/Component/index.js +2 -2
  48. package/components/WindowBase/subcomponents/Component/types.d.ts +2 -0
  49. package/components/WindowBase/subcomponents/Header/HeaderWindowBase.js +7 -7
  50. package/components/WindowBase/subcomponents/Header/types.d.ts +1 -1
  51. package/components/WindowBase/subcomponents/MicroFrontend/types.d.ts +4 -0
  52. package/components/WindowBase/types.d.ts +3 -3
  53. package/components/WindowConfirm/WindowConfirm.js +1 -1
  54. package/components/areas/components/AreasViewer/AreasViewer.styles.js +1 -1
  55. package/components/areas/components/AreasViewer/subcomponents/Area/subcomponents/Window/Window.js +6 -2
  56. package/components/areas/components/AreasViewer/subcomponents/Area/subcomponents/Window/hooks/useWindow.d.ts +1 -0
  57. package/components/areas/components/AreasViewer/subcomponents/Area/subcomponents/Window/hooks/useWindow.js +21 -3
  58. package/components/areas/index.d.ts +1 -1
  59. package/components/areas/types.d.ts +1 -1
  60. package/components/formatters/DistanceToNowFormatter/DistanceToNowFormatter.js +3 -34
  61. package/components/formatters/DistanceToNowFormatter/dictionary.d.ts +8 -0
  62. package/components/formatters/DistanceToNowFormatter/hooks/useDistanceToNowFormatter.d.ts +13 -0
  63. package/components/formatters/DistanceToNowFormatter/hooks/useDistanceToNowFormatter.js +65 -0
  64. package/components/formatters/DistanceToNowFormatter/index.d.ts +1 -0
  65. package/components/formatters/DistanceToNowFormatter/types.d.ts +4 -1
  66. package/components/hook-form/RHFAutocomplete/RHFAutocomplete.js +5 -1
  67. package/components/hook-form/RHFAutocomplete/constants.d.ts +1 -0
  68. package/components/hook-form/RHFAutocomplete/constants.js +5 -1
  69. package/components/hook-form/RHFAutocompleteAsync/RHFAutocompleteAsync.js +3 -1
  70. package/components/hook-form/RHFAutocompleteAsync/types.d.ts +4 -0
  71. package/components/mui_extended/Button/ButtonStyles.js +15 -5
  72. package/components/mui_extended/ToggleIconButton/ToggleIconButton.js +6 -2
  73. package/components/mui_extended/ToggleIconButton/ToggleIconButton.styles.js +9 -0
  74. package/components/mui_extended/ToggleIconButton/types.d.ts +1 -0
  75. package/components/mui_extended/index.d.ts +1 -1
  76. package/components/popups/components/PopupsProvider/hooks/usePopups.d.ts +2 -2
  77. package/components/popups/components/PopupsProvider/hooks/usePopups.js +0 -1
  78. package/components/popups/components/PopupsViewer/PopupsViewer.js +4 -3
  79. package/components/popups/components/PopupsViewer/subcomponents/Popup/Popup.js +5 -2
  80. package/components/popups/components/PopupsViewer/subcomponents/Popup/types.d.ts +5 -0
  81. package/components/popups/components/PopupsViewer/types.d.ts +3 -0
  82. package/hooks/index.d.ts +1 -0
  83. package/hooks/useSizeContainer/index.d.ts +2 -1
  84. package/hooks/useSizeContainer/index.js +22 -13
  85. package/hooks/useSizeContainer/types.d.ts +6 -0
  86. package/hooks/useStateRef/index.d.ts +1 -1
  87. package/hooks/useStateRef/index.js +6 -6
  88. package/index.js +45 -38
  89. package/package.json +3 -4
  90. package/utils/deepShallow.d.ts +17 -0
  91. package/utils/deepShallow.js +76 -0
  92. package/utils/formatDistanceToNow/formatDistanteToNow.d.ts +2 -2
  93. package/utils/formatDistanceToNow/formatDistanteToNow.js +18 -2
  94. package/utils/formatDistanceToNow/types.d.ts +13 -0
  95. package/utils/index.d.ts +1 -0
@@ -11,7 +11,7 @@ import { M as MemonizedWindowBaseMicroFrontend } from "../../../../../WindowBase
11
11
  import { W as WindowBaseComponent } from "../../../../../WindowBase/subcomponents/Component/index.js";
12
12
  import { W as WindowBase } from "../../../../../WindowBase/WindowBase.js";
13
13
  const Popup = forwardRef((props, ref) => {
14
- const { popupId, containerElement, containerSize, style, onResizeStart, onResizeStop, onDragStart, onDragStop } = props;
14
+ const { popupId, containerElement, containerSize, style, onResizeStart, onResizeStop, onDragStart, onDragStop, loggedUser } = props;
15
15
  const popup = usePopupsStore((state) => state.hashPopups[popupId], shallow);
16
16
  const { bringPopupOnFront } = usePopupsStore((state) => state.popupsActions, shallow);
17
17
  const { close } = usePopupsStore((state) => state.popupActions, shallow);
@@ -118,7 +118,7 @@ const Popup = forwardRef((props, ref) => {
118
118
  isLoading: loading,
119
119
  windowId: popupId,
120
120
  selected,
121
- type: "popup",
121
+ emergeType: "popup",
122
122
  variant: "outlined",
123
123
  ...process.env.NODE_ENV !== "production" ? {
124
124
  [TEST_PROP_ID]: getNameDataTestId(
@@ -129,14 +129,17 @@ const Popup = forwardRef((props, ref) => {
129
129
  children: winType === "microfrontend" ? /* @__PURE__ */ jsx(
130
130
  MemonizedWindowBaseMicroFrontend,
131
131
  {
132
+ emergeType: "popup",
132
133
  moduleId,
133
134
  dynamicMFStore,
134
135
  windowTools,
136
+ loggedUser,
135
137
  ...mfProps ?? { debugPort: 0, prefix: "" }
136
138
  }
137
139
  ) : /* @__PURE__ */ jsx(
138
140
  WindowBaseComponent,
139
141
  {
142
+ emergeType: "popup",
140
143
  dynamicMFStore,
141
144
  windowTools,
142
145
  component
@@ -1,5 +1,6 @@
1
1
  import { CSSProperties } from 'react';
2
2
  import { ContainerSize } from '../../../../../../utils/types';
3
+ import { AuthUserType } from '@m4l/core';
3
4
  export type ResizeReason = 'start' | 'resize' | 'stop';
4
5
  export interface PopupProps {
5
6
  /**
@@ -34,4 +35,8 @@ export interface PopupProps {
34
35
  * "onDragStop" Función que se ejecuta cuando se termina de arrastrar el popup
35
36
  */
36
37
  onDragStop?: () => void;
38
+ /**
39
+ * "loggedUser" Usuario logueado
40
+ */
41
+ loggedUser?: AuthUserType;
37
42
  }
@@ -3,14 +3,17 @@ import { PopupViewerSlots } from './slots/slots';
3
3
  import { POPUPS_VIEWER_KEY_COMPONENT } from './constants';
4
4
  import { PopupStoreProps, PopupsProviderStoreState } from '../PopupsProvider/contexts/PopupsContext/types';
5
5
  import { M4LOverridesStyleRules } from '../../../../@types/augmentations';
6
+ import { AuthUserType } from '@m4l/core';
6
7
  export type PopupViewerSlotsType = keyof typeof PopupViewerSlots;
7
8
  export type PopupsViewerProps = {
9
+ className?: string;
8
10
  containerElement?: HTMLElement;
9
11
  groupId?: string;
10
12
  onResizeStart?: () => void;
11
13
  onResizeStop?: () => void;
12
14
  onDragStart?: () => void;
13
15
  onDragStop?: () => void;
16
+ loggedUser?: AuthUserType;
14
17
  };
15
18
  export type PopupStatus = 'init' | 'closing' | 'hidden';
16
19
  export interface PopupOwnerState extends Pick<PopupStoreProps, 'status' | 'subTitle' | 'editionInfo' | 'zIndex' | 'variant'> {
package/hooks/index.d.ts CHANGED
@@ -12,3 +12,4 @@ export * from './useDynamicFilterAndSort';
12
12
  export * from './useDataGridPersistence';
13
13
  export * from './usePopoverContainer';
14
14
  export * from './useIsVisible';
15
+ export * from './useSizeContainer';
@@ -1,8 +1,9 @@
1
1
  import { ContainerSize } from '../../utils/types';
2
+ import { UseSizeContainerOptions } from './types';
2
3
  /**
3
4
  * useSizeContainer: hook encargado de obtener el tamaño de un elemento contenedor
4
5
  * TODO: Usar throttle para evitar llamadas innecesarias
5
6
  * @param containerElement
6
7
  * @returns un objeto con el ancho y alto del contenedor
7
8
  */
8
- export declare function useSizeContainer(containerElement?: HTMLElement | undefined | null): ContainerSize | undefined;
9
+ export declare function useSizeContainer(containerElement?: HTMLElement | undefined | null, options?: UseSizeContainerOptions): ContainerSize | undefined;
@@ -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";
@@ -176,7 +177,7 @@ import { g as g27 } from "./components/ObjectLogs/dictionary.js";
176
177
  import { O } from "./components/ObjectLogs/ObjectLogs.js";
177
178
  import { P as P7 } from "./components/PaperForm/PaperForm.js";
178
179
  import { P as P8 } from "./components/PDFViewer/PDFViewer.js";
179
- import { u as u13 } from "./components/popups/components/PopupsProvider/hooks/usePopupsStore.js";
180
+ import { u as u14 } from "./components/popups/components/PopupsProvider/hooks/usePopupsStore.js";
180
181
  import { a as a10, P as P9 } from "./components/popups/components/PopupsProvider/contexts/PopupsContext/PopupsContext.js";
181
182
  import { P as P10 } from "./components/popups/components/PopupsViewer/PopupsViewer.js";
182
183
  import { P as P11 } from "./components/PrintingSystem/PrintingSystem.js";
@@ -186,8 +187,8 @@ import { S as S9 } from "./components/SideBar/SideBar.js";
186
187
  import { T as T17 } from "./components/ToastContainer/ToastContainer.js";
187
188
  import { T as T18 } from "./components/ToastContainer/subcomponents/ToastMessage/ToastMessage.js";
188
189
  import { W as W2 } from "./components/WindowBase/WindowBase.js";
189
- import { u as u14 } from "./components/WindowBase/hooks/useWindowToolsMF/index.js";
190
- import { u as u15, a as a11 } from "./components/WindowBase/hooks/useDynamicMFParameters/index.js";
190
+ import { u as u15 } from "./components/WindowBase/hooks/useWindowToolsMF/index.js";
191
+ import { u as u16, a as a11 } from "./components/WindowBase/hooks/useDynamicMFParameters/index.js";
191
192
  import { M as M7, W as W3, a as a12 } from "./components/WindowBase/contexts/WindowToolsMFContext/WindowToolsMFContext.js";
192
193
  import { c as c3 } from "./components/WindowBase/contexts/DynamicMFParmsContext/store.js";
193
194
  import { D as D10, a as a13, M as M8 } from "./components/WindowBase/contexts/DynamicMFParmsContext/DynamicMFParmsContext.js";
@@ -196,7 +197,7 @@ import { a as a14, g as g28 } from "./components/ModalDialog/dictionary.js";
196
197
  import { M as M9 } from "./components/ModalDialog/ModalDialog.js";
197
198
  import { S as S10 } from "./components/SettingsLayout/SettingsLayout.js";
198
199
  import { P as P13 } from "./components/Pager/Pager.js";
199
- import { u as u16 } from "./components/Stepper/hooks/useStepper/index.js";
200
+ import { u as u17 } from "./components/Stepper/hooks/useStepper/index.js";
200
201
  import { S as S11 } from "./components/Stepper/Stepper.js";
201
202
  import { S as S12 } from "./components/Stepper/subcomponents/StepperContent/index.js";
202
203
  import { S as S13 } from "./components/Stepper/subcomponents/StepperContent/subcomponents/Step/index.js";
@@ -209,26 +210,27 @@ import { S as S19 } from "./components/Stepper/subcomponents/StepperButtons/Step
209
210
  import { S as S20 } from "./components/Stepper/subcomponents/StepperButtons/StepperSubmitButton/index.js";
210
211
  import { e as e3 } from "./components/Stepper/helpers/evaluateVisibilityStepCondition/index.js";
211
212
  import { g as g29 } from "./components/Stepper/dictionary.js";
212
- import { F as F3, R as R23, u as u17 } from "./components/hook-form/RHFormContext/index.js";
213
+ import { F as F3, R as R23, u as u18 } from "./components/hook-form/RHFormContext/index.js";
213
214
  import { g as g30 } from "./components/hook-form/RHFormContext/dictionary.js";
214
- import { u as u18 } from "./contexts/AppearanceComponentContext/useAppearanceComponentStore.js";
215
+ import { u as u19 } from "./contexts/AppearanceComponentContext/useAppearanceComponentStore.js";
215
216
  import { A as A16 } from "./contexts/AppearanceComponentContext/AppearanceComponentContext.js";
216
217
  import { a as a15, M as M10 } from "./contexts/ModalContext/index.js";
217
- import { u as u19 } from "./hooks/useFormAddEdit/index.js";
218
- import { u as u20 } from "./hooks/useModal/index.js";
219
- import { u as u21 } from "./hooks/useTab/index.js";
218
+ import { u as u20 } from "./hooks/useFormAddEdit/index.js";
219
+ import { u as u21 } from "./hooks/useModal/index.js";
220
+ import { u as u22 } from "./hooks/useTab/index.js";
220
221
  import { g as g31 } from "./hooks/useFormAddEdit/dictionary.js";
221
- import { u as u22 } from "./hooks/useFormFocus/index.js";
222
- import { u as u23 } from "./hooks/useInterval/index.js";
223
- import { u as u24 } from "./hooks/useComponentSize/useComponentSize.js";
224
- import { u as u25 } from "./hooks/useFormReadyForUpdate/index.js";
225
- import { u as u26 } from "./hooks/useStateRef/index.js";
222
+ import { u as u23 } from "./hooks/useFormFocus/index.js";
223
+ import { u as u24 } from "./hooks/useInterval/index.js";
224
+ import { u as u25 } from "./hooks/useComponentSize/useComponentSize.js";
225
+ import { u as u26 } from "./hooks/useFormReadyForUpdate/index.js";
226
+ import { u as u27 } from "./hooks/useStateRef/index.js";
226
227
  import { S as S21 } from "./hooks/useSvgColor/constants.js";
227
- import { u as u27 } from "./hooks/useSvgColor/useSvgColor.js";
228
- import { u as u28 } from "./hooks/useDynamicFilterAndSort/useDynamicFilterAndSort.js";
229
- import { u as u29 } from "./hooks/useDataGridPersistence/useDataGridPersistence.js";
230
- import { u as u30 } from "./hooks/usePopoverContainer/usePopoverContainer.js";
231
- import { u as u31 } from "./hooks/useIsVisible/useIsVisible.js";
228
+ import { u as u28 } from "./hooks/useSvgColor/useSvgColor.js";
229
+ import { u as u29 } from "./hooks/useDynamicFilterAndSort/useDynamicFilterAndSort.js";
230
+ import { u as u30 } from "./hooks/useDataGridPersistence/useDataGridPersistence.js";
231
+ import { u as u31 } from "./hooks/usePopoverContainer/usePopoverContainer.js";
232
+ import { u as u32 } from "./hooks/useIsVisible/useIsVisible.js";
233
+ import { u as u33 } from "./hooks/useSizeContainer/index.js";
232
234
  import { c as c4 } from "./utils/capitalizeFirstLetter.js";
233
235
  import { i as i2 } from "./utils/isValidDate.js";
234
236
  import { g as g32 } from "./utils/getComponentUtilityClass.js";
@@ -241,6 +243,7 @@ import { g as g37, a as a17 } from "./utils/getComponentSlotRoot.js";
241
243
  import { f } from "./utils/formatDistanceToNow/formatDistanteToNow.js";
242
244
  import { g as g38 } from "./utils/getValidDate.js";
243
245
  import { g as g39 } from "./utils/getNullGuard.js";
246
+ import { c as c5, d as d4 } from "./utils/deepShallow.js";
244
247
  import { g as g40 } from "./helpers/getStepsAndValidationSchema/getStepsAndValidationSchema.js";
245
248
  export {
246
249
  A7 as AREAS_DICCTIONARY,
@@ -430,8 +433,10 @@ export {
430
433
  e2 as addLayoutItemToBreakPoints,
431
434
  c4 as capitalizeFirstLetter,
432
435
  d3 as cloneLayouts,
436
+ c5 as createCustomDeepShallow,
433
437
  c3 as createDynamicMFStore,
434
438
  c as createToaster,
439
+ d4 as deepShallow,
435
440
  d as defaultCommonActionsDictionary,
436
441
  d2 as dragResizeWindowRNDClasses,
437
442
  e3 as evaluateVisibilityStepCondition,
@@ -488,7 +493,7 @@ export {
488
493
  r as rhfPeriodStyles,
489
494
  t as toggleButtonStyles,
490
495
  t2 as toggleIconButtonStyles,
491
- u18 as useAppearanceComponentStore,
496
+ u19 as useAppearanceComponentStore,
492
497
  u as useAreasStore,
493
498
  u2 as useColumnBoolean,
494
499
  u11 as useColumnChipStatus,
@@ -500,26 +505,28 @@ export {
500
505
  u8 as useColumnPrice,
501
506
  u9 as useColumnSetCheck,
502
507
  u10 as useColumnUncertanity,
503
- u24 as useComponentSize,
504
- u17 as useCustomForm,
505
- u29 as useDataGridPersistence,
506
- u28 as useDynamicFilterAndSort,
507
- u15 as useDynamicMFParameters,
508
+ u25 as useComponentSize,
509
+ u18 as useCustomForm,
510
+ u30 as useDataGridPersistence,
511
+ u13 as useDistanceToNowFormatter,
512
+ u29 as useDynamicFilterAndSort,
513
+ u16 as useDynamicMFParameters,
508
514
  a11 as useDynamicMFParametersStore,
509
- u19 as useFormAddEdit,
510
- u22 as useFormFocus,
511
- u25 as useFormReadyForUpdate,
515
+ u20 as useFormAddEdit,
516
+ u23 as useFormFocus,
517
+ u26 as useFormReadyForUpdate,
512
518
  u12 as useFormatPeriod,
513
- u23 as useInterval,
514
- u31 as useIsVisible,
515
- u20 as useModal,
516
- u30 as usePopoverContainer,
517
- u13 as usePopupsStore,
518
- u26 as useStateRef,
519
- u16 as useStepper,
520
- u27 as useSvgColor,
521
- u21 as useTab,
522
- u14 as useWindowToolsMF,
519
+ u24 as useInterval,
520
+ u32 as useIsVisible,
521
+ u21 as useModal,
522
+ u31 as usePopoverContainer,
523
+ u14 as usePopupsStore,
524
+ u33 as useSizeContainer,
525
+ u27 as useStateRef,
526
+ u17 as useStepper,
527
+ u28 as useSvgColor,
528
+ u22 as useTab,
529
+ u15 as useWindowToolsMF,
523
530
  v2 as varBounce,
524
531
  v3 as varContainer,
525
532
  v as varFade,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@m4l/components",
3
- "version": "9.3.19-BE101025-beta.2",
3
+ "version": "9.3.19-BE171025-beta.1",
4
4
  "license": "UNLICENSED",
5
5
  "description": "M4L Components",
6
6
  "lint-staged": {
@@ -11,8 +11,8 @@
11
11
  "@googlemaps/js-api-loader": "^1.16.6",
12
12
  "@hookform/resolvers": "2.9.11",
13
13
  "@m4l/core": "^2.0.0",
14
- "@m4l/graphics": "7.1.5-BE093025-beta.1",
15
- "@m4l/styles": "7.1.34-BE093025-beta.1",
14
+ "@m4l/graphics": "7.2.0-BE171025-beta.1",
15
+ "@m4l/styles": "7.1.34-BE171025-beta.1",
16
16
  "@mui/lab": "5.0.0-alpha.173",
17
17
  "@mui/material": "5.16.7",
18
18
  "@mui/x-date-pickers": "6.20.2",
@@ -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';