@m4l/components 9.3.19 → 9.3.21-JAEBeta.0

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 (110) 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 +3 -2
  34. package/components/MFLoader/types.d.ts +5 -0
  35. package/components/ObjectLogs/hooks/useDetailFormatter.js +1 -1
  36. package/components/Stepper/Stepper.styles.js +17 -14
  37. package/components/Stepper/helpers/getInitialFieldValues/index.d.ts +12 -0
  38. package/components/Stepper/helpers/getInitialFieldValues/index.js +14 -0
  39. package/components/Stepper/helpers/index.d.ts +2 -0
  40. package/components/Stepper/helpers/parseWatchedValues/index.d.ts +17 -0
  41. package/components/Stepper/helpers/parseWatchedValues/index.js +12 -0
  42. package/components/Stepper/hooks/useDynamicValidation/index.d.ts +11 -0
  43. package/components/Stepper/hooks/useDynamicValidation/index.js +69 -0
  44. package/components/Stepper/hooks/useStepperActions/index.js +19 -3
  45. package/components/Stepper/store/StepperStore/index.js +20 -1
  46. package/components/Stepper/subcomponents/StepArea/index.js +45 -25
  47. package/components/Stepper/subcomponents/StepArea/subcomponents/Inidicator/index.js +18 -10
  48. package/components/Stepper/subcomponents/StepperButtons/StepperCancelButton/index.d.ts +2 -1
  49. package/components/Stepper/subcomponents/StepperButtons/StepperCancelButton/index.js +38 -5
  50. package/components/Stepper/subcomponents/StepperButtons/StepperNextButton/index.d.ts +2 -1
  51. package/components/Stepper/subcomponents/StepperButtons/StepperNextButton/index.js +5 -3
  52. package/components/Stepper/subcomponents/StepperButtons/StepperPrevButton/index.d.ts +2 -1
  53. package/components/Stepper/subcomponents/StepperButtons/StepperPrevButton/index.js +5 -3
  54. package/components/Stepper/subcomponents/StepperButtons/StepperSubmitButton/index.d.ts +2 -1
  55. package/components/Stepper/subcomponents/StepperButtons/StepperSubmitButton/index.js +5 -3
  56. package/components/Stepper/subcomponents/StepperContent/subcomponents/Step/index.js +30 -11
  57. package/components/Stepper/subcomponents/StepperFooter/subcomponents/StepperFooterRightActions/index.js +20 -10
  58. package/components/Stepper/types.d.ts +7 -0
  59. package/components/WindowBase/WindowBase.js +3 -3
  60. package/components/WindowBase/WindowBase.styles.js +36 -31
  61. package/components/WindowBase/constants.d.ts +1 -1
  62. package/components/WindowBase/constants.js +2 -2
  63. package/components/WindowBase/index.d.ts +1 -0
  64. package/components/WindowBase/subcomponents/Component/index.js +2 -2
  65. package/components/WindowBase/subcomponents/Component/types.d.ts +2 -0
  66. package/components/WindowBase/subcomponents/Header/HeaderWindowBase.js +7 -7
  67. package/components/WindowBase/subcomponents/Header/types.d.ts +1 -1
  68. package/components/WindowBase/subcomponents/MicroFrontend/types.d.ts +2 -0
  69. package/components/WindowBase/types.d.ts +3 -3
  70. package/components/WindowConfirm/WindowConfirm.js +1 -1
  71. package/components/areas/components/AreasViewer/subcomponents/Area/subcomponents/Window/Window.js +3 -1
  72. package/components/areas/components/AreasViewer/subcomponents/Area/subcomponents/Window/hooks/useWindow.js +17 -2
  73. package/components/areas/contexts/AreasContext/store.js +2 -2
  74. package/components/areas/index.d.ts +1 -1
  75. package/components/areas/types.d.ts +1 -1
  76. package/components/formatters/DistanceToNowFormatter/DistanceToNowFormatter.js +3 -34
  77. package/components/formatters/DistanceToNowFormatter/dictionary.d.ts +8 -0
  78. package/components/formatters/DistanceToNowFormatter/hooks/useDistanceToNowFormatter.d.ts +13 -0
  79. package/components/formatters/DistanceToNowFormatter/hooks/useDistanceToNowFormatter.js +65 -0
  80. package/components/formatters/DistanceToNowFormatter/index.d.ts +1 -0
  81. package/components/formatters/DistanceToNowFormatter/types.d.ts +4 -1
  82. package/components/hook-form/RHFAutocomplete/RHFAutocomplete.js +5 -1
  83. package/components/hook-form/RHFAutocomplete/constants.d.ts +1 -0
  84. package/components/hook-form/RHFAutocomplete/constants.js +5 -1
  85. package/components/hook-form/RHFAutocompleteAsync/RHFAutocompleteAsync.js +3 -1
  86. package/components/hook-form/RHFAutocompleteAsync/types.d.ts +4 -0
  87. package/components/hook-form/RHFormContext/index.d.ts +1 -1
  88. package/components/hook-form/RHFormContext/index.js +29 -4
  89. package/components/mui_extended/ToggleIconButton/ToggleIconButton.js +6 -2
  90. package/components/mui_extended/ToggleIconButton/ToggleIconButton.styles.js +9 -0
  91. package/components/mui_extended/ToggleIconButton/types.d.ts +1 -0
  92. package/components/mui_extended/index.d.ts +1 -1
  93. package/components/popups/components/PopupsProvider/hooks/usePopups.d.ts +2 -2
  94. package/components/popups/components/PopupsProvider/hooks/usePopups.js +0 -1
  95. package/components/popups/components/PopupsViewer/PopupsViewer.js +2 -2
  96. package/components/popups/components/PopupsViewer/subcomponents/Popup/Popup.js +3 -1
  97. package/components/popups/components/PopupsViewer/types.d.ts +1 -0
  98. package/hooks/index.d.ts +1 -0
  99. package/hooks/useSizeContainer/index.d.ts +2 -1
  100. package/hooks/useSizeContainer/index.js +22 -13
  101. package/hooks/useSizeContainer/types.d.ts +6 -0
  102. package/hooks/useStateRef/index.js +4 -4
  103. package/index.js +45 -38
  104. package/package.json +1 -1
  105. package/utils/deepShallow.d.ts +17 -0
  106. package/utils/deepShallow.js +76 -0
  107. package/utils/formatDistanceToNow/formatDistanteToNow.d.ts +2 -2
  108. package/utils/formatDistanceToNow/formatDistanteToNow.js +18 -2
  109. package/utils/formatDistanceToNow/types.d.ts +13 -0
  110. package/utils/index.d.ts +1 -0
@@ -16,7 +16,7 @@ const windowBaseStyles = {
16
16
  overflow: "hidden",
17
17
  ...ownerState?.variant === "outlined" && {
18
18
  ...ownerState?.selected ? {
19
- ...ownerState?.type === "layout" ? {
19
+ ...ownerState?.emergeType === "layout" ? {
20
20
  background: `linear-gradient(to bottom,
21
21
  ${theme.vars.palette.primary.opacityGradient1},
22
22
  ${theme.vars.palette.primary.opacityGradient2})`,
@@ -31,26 +31,26 @@ const windowBaseStyles = {
31
31
  boxShadow: `inset 0px 0px 0 1px ${theme.vars.palette?.border.main}`
32
32
  }
33
33
  } : {
34
- boxShadow: ownerState?.type === "layout" ? `inset 0px 0px 0 1px ${theme.vars.palette?.border.secondary}` : "unset"
34
+ boxShadow: ownerState?.emergeType === "layout" ? `inset 0px 0px 0 1px ${theme.vars.palette?.border.secondary}` : "unset"
35
35
  }
36
36
  },
37
- ...ownerState?.type === "popup" && {
37
+ ...ownerState?.emergeType === "popup" && {
38
38
  "&&&": {
39
39
  boxShadow: theme.vars.customShadows.z1,
40
40
  border: `1px solid ${theme.vars.palette?.border.secondary}`,
41
- borderRadius: theme.vars.size.borderRadius.r1,
41
+ borderRadius: theme.vars.size.borderRadius.r3,
42
42
  ...ownerState?.selected && {
43
43
  boxShadow: theme.vars.customShadows.z4,
44
- border: `1px solid ${theme.vars.palette?.border.main}`
44
+ border: `1px solid ${theme.vars.palette?.primary.activeOpacity}`
45
45
  }
46
46
  }
47
47
  },
48
- ...ownerState?.type === "layout" && {
48
+ ...ownerState?.emergeType === "layout" && {
49
49
  ...ownerState?.selected && !ownerState?.maximized ? {
50
50
  boxShadow: theme.vars.customShadows.primary
51
51
  } : {}
52
52
  },
53
- ...ownerState?.type === "modal" && {
53
+ ...ownerState?.emergeType === "modal" && {
54
54
  boxShadow: `${theme.vars.customShadows.z3}!important`
55
55
  }
56
56
  }
@@ -59,8 +59,8 @@ const windowBaseStyles = {
59
59
  /**
60
60
  * Styles for the content of the window base component.
61
61
  */
62
- contentWindowBase: ({ theme, ownerState }) => ({
63
- padding: ownerState?.type === "layout" ? theme.vars.size.baseSpacings.sp5 : theme.vars.size.baseSpacings.sp4,
62
+ contentWindowBase: ({ ownerState, theme }) => ({
63
+ padding: ownerState?.emergeType === "layout" ? theme.vars.size.baseSpacings.sp5 : theme.vars.size.baseSpacings.sp4,
64
64
  overflow: "auto",
65
65
  width: "100%",
66
66
  height: "100%",
@@ -69,6 +69,17 @@ const windowBaseStyles = {
69
69
  display: "none"
70
70
  }
71
71
  }),
72
+ /**
73
+ * Window component content Styles by emergeType
74
+ */
75
+ windowContainerComponent: () => ({
76
+ //Mover el estilado para adentro
77
+ position: "relative",
78
+ display: "flex",
79
+ width: "100%",
80
+ height: "100%",
81
+ overflow: "visible"
82
+ }),
72
83
  /**
73
84
  * Styles for the header of the window base component.
74
85
  */
@@ -76,14 +87,19 @@ const windowBaseStyles = {
76
87
  return {
77
88
  width: "100%",
78
89
  display: "flex",
79
- padding: ownerState?.type === "popup" || ownerState?.type === "modal" ? theme.vars.size.baseSpacings["sp0-5"] : theme.vars.size.baseSpacings.sp1,
90
+ padding: theme.vars.size.baseSpacings.sp1,
91
+ borderBottom: "1px solid #ffffff00",
92
+ ...(ownerState?.emergeType === "popup" || ownerState?.emergeType === "modal") && {
93
+ padding: `${theme.vars.size.baseSpacings["sp2-5"]} ${theme.vars.size.baseSpacings.sp2} 0 ${theme.vars.size.baseSpacings.sp2}`,
94
+ borderBottom: `unset`
95
+ },
80
96
  alignItems: "center",
81
97
  justifyContent: "space-between",
82
98
  flexShrink: 0,
83
99
  alignSelf: "stretch",
84
100
  cursor: ownerState?.draggable ? "all-scroll" : "default",
85
101
  position: "relative",
86
- ...ownerState?.type === "layout" || ownerState?.type === "modal" ? getSizeStyles(
102
+ ...ownerState?.emergeType === "layout" || ownerState?.emergeType === "modal" ? getSizeStyles(
87
103
  theme,
88
104
  ownerState?.size,
89
105
  "container",
@@ -101,8 +117,7 @@ const windowBaseStyles = {
101
117
  })
102
118
  )
103
119
  },
104
- borderBottom: "1px solid #ffffff00",
105
- ...ownerState?.selected && ownerState?.type === "layout" && ownerState?.variant === "outlined" && !ownerState?.maximized ? {
120
+ ...ownerState?.selected && ownerState?.emergeType === "layout" && ownerState?.variant === "outlined" && !ownerState?.maximized ? {
106
121
  background: `linear-gradient(to right, ${theme.vars.palette.primary.opacity}, #ffffff00);`,
107
122
  "&::before": {
108
123
  content: '""',
@@ -114,8 +129,7 @@ const windowBaseStyles = {
114
129
  background: `linear-gradient(to left, ${theme.vars.palette.primary.opacityGradient2}, #ffffff00);`
115
130
  }
116
131
  } : {
117
- background: "transparent",
118
- borderBottom: `1px solid ${theme.vars.palette.border.disabled}`
132
+ background: "transparent"
119
133
  }
120
134
  };
121
135
  },
@@ -138,7 +152,7 @@ const windowBaseStyles = {
138
152
  */
139
153
  headerTitleWindowBase: ({ theme, ownerState }) => ({
140
154
  minWidth: "30px",
141
- ...ownerState?.selected && ownerState?.type !== "modal" ? {
155
+ ...ownerState?.selected && ownerState?.emergeType !== "modal" ? {
142
156
  color: `${theme.vars.palette["primary"].semanticText} !important`
143
157
  } : {
144
158
  color: `${theme.vars.palette.text.secondary} !important`
@@ -180,7 +194,7 @@ const windowBaseStyles = {
180
194
  headerSubTitleWindowBase: ({ theme, ownerState }) => ({
181
195
  width: "auto !important",
182
196
  height: "auto !important",
183
- ...ownerState?.selected && ownerState?.type !== "modal" ? {
197
+ ...ownerState?.selected && ownerState?.emergeType !== "modal" ? {
184
198
  color: `${theme.vars.palette["primary"].semanticText} !important`
185
199
  } : {
186
200
  color: `${theme.vars.palette.text.secondary} !important`
@@ -196,7 +210,7 @@ const windowBaseStyles = {
196
210
  */
197
211
  headerIconWindowBase: ({ theme, ownerState }) => ({
198
212
  "& .M4LIcon-icon": {
199
- ...ownerState?.selected && ownerState?.type !== "modal" ? {
213
+ ...ownerState?.selected && ownerState?.emergeType !== "modal" ? {
200
214
  backgroundColor: `${theme.vars.palette["primary"].semanticText} !important`
201
215
  } : {
202
216
  backgroundColor: `${theme.vars.palette.text.secondary} !important`
@@ -228,7 +242,7 @@ const windowBaseStyles = {
228
242
  ),
229
243
  marginLeft: theme.vars.size.baseSpacings.sp1,
230
244
  marginRight: theme.vars.size.baseSpacings.sp1,
231
- marginBottom: ownerState?.type === "layout" ? "auto" : "unset"
245
+ marginBottom: ownerState?.emergeType === "layout" ? "auto" : "unset"
232
246
  },
233
247
  '& .window-actions[class*="M4LIconButton-styledMUIIconButton"]': {
234
248
  ...getSizeStyles(
@@ -242,7 +256,7 @@ const windowBaseStyles = {
242
256
  ),
243
257
  marginLeft: theme.vars.size.baseSpacings.sp1,
244
258
  marginRight: theme.vars.size.baseSpacings.sp1,
245
- marginBottom: ownerState?.type === "layout" ? "auto!important" : "unset!important",
259
+ marginBottom: ownerState?.emergeType === "layout" ? "auto!important" : "unset!important",
246
260
  "&.collapse-toggle": {
247
261
  ...ownerState?.maximized && {
248
262
  display: "none"
@@ -304,7 +318,7 @@ const windowBaseStyles = {
304
318
  */
305
319
  pointIcon: ({ theme, ownerState }) => ({
306
320
  "& .M4LIcon-icon": {
307
- ...ownerState?.selected && ownerState?.type !== "modal" && ownerState?.variant === "outlined" ? {
321
+ ...ownerState?.selected && ownerState?.emergeType !== "modal" && ownerState?.variant === "outlined" ? {
308
322
  backgroundColor: `${theme.vars.palette["primary"].semanticText} !important`
309
323
  } : {
310
324
  backgroundColor: `${theme.vars.palette.text.secondary} !important`
@@ -320,7 +334,7 @@ const windowBaseStyles = {
320
334
  * Styles for the menu actions of the window base component.
321
335
  */
322
336
  menuActionsWindowBase: ({ theme, ownerState }) => ({
323
- ...ownerState?.type === "layout" ? {
337
+ ...ownerState?.emergeType === "layout" ? {
324
338
  ...getSizeStyles(
325
339
  theme,
326
340
  ownerState?.size,
@@ -363,15 +377,6 @@ const windowBaseStyles = {
363
377
  maxWidth: "100%"
364
378
  }
365
379
  }),
366
- /**
367
- * Window component content Styles
368
- */
369
- windowContainerComponent: () => ({
370
- display: "flex",
371
- width: "100%",
372
- height: "100%",
373
- overflow: "auto"
374
- }),
375
380
  /**
376
381
  * Styles for the toast container of the window base component.
377
382
  */
@@ -1,2 +1,2 @@
1
1
  export declare const WINDOW_BASE_KEY_COMPONENT = "M4LWindowBase";
2
- export declare const WINDOW_BASE_CLASSES: Record<string, string>;
2
+ export declare const windowBaseClasses: Record<string, string>;
@@ -1,8 +1,8 @@
1
1
  import { g as getComponentClasses } from "../../utils/getComponentSlotRoot.js";
2
2
  import { W as WindowBaseSlots } from "./slots/WindowBaseEnum.js";
3
3
  const WINDOW_BASE_KEY_COMPONENT = "M4LWindowBase";
4
- const WINDOW_BASE_CLASSES = getComponentClasses(WINDOW_BASE_KEY_COMPONENT, WindowBaseSlots);
4
+ const windowBaseClasses = getComponentClasses(WINDOW_BASE_KEY_COMPONENT, WindowBaseSlots);
5
5
  export {
6
6
  WINDOW_BASE_KEY_COMPONENT as W,
7
- WINDOW_BASE_CLASSES as a
7
+ windowBaseClasses as w
8
8
  };
@@ -5,3 +5,4 @@ export * from './contexts/WindowToolsMFContext';
5
5
  export * from './contexts/DynamicMFParmsContext';
6
6
  export type { WindowToolsMFContextProps } from './contexts/WindowToolsMFContext/types';
7
7
  export type { ModuleAction, GroupActionMenuItem, ModuleActionGroup } from './types';
8
+ export type { JSX_REACT_NODE } from './types';
@@ -4,8 +4,8 @@ import { a as WindowContainerComponentStyled } from "../../slots/WindowBaseSlots
4
4
  import { a as WindowToolsMFProvider } from "../../contexts/WindowToolsMFContext/WindowToolsMFContext.js";
5
5
  import { a as DynamicMFParmsProvider } from "../../contexts/DynamicMFParmsContext/DynamicMFParmsContext.js";
6
6
  const WindowBaseComponent = (props) => {
7
- const { component, dynamicMFStore, windowTools, componentProps } = props;
8
- return /* @__PURE__ */ jsx(WindowToolsMFProvider, { ...windowTools, children: /* @__PURE__ */ jsx(DynamicMFParmsProvider, { store: dynamicMFStore, children: /* @__PURE__ */ jsx(WindowContainerComponentStyled, { ownerState: {}, children: typeof component === "function" ? component(componentProps) : component }) }) });
7
+ const { component, dynamicMFStore, windowTools, componentProps, emergeType } = props;
8
+ return /* @__PURE__ */ jsx(WindowToolsMFProvider, { ...windowTools, children: /* @__PURE__ */ jsx(DynamicMFParmsProvider, { store: dynamicMFStore, children: /* @__PURE__ */ jsx(WindowContainerComponentStyled, { ownerState: { emergeType }, children: typeof component === "function" ? component(componentProps) : component }) }) });
9
9
  };
10
10
  React.memo(WindowBaseComponent);
11
11
  export {
@@ -1,7 +1,9 @@
1
1
  import { WindowToolsMF } from '../../contexts';
2
2
  import { DynamicMFStore } from '../../contexts/DynamicMFParmsContext/store';
3
3
  import { JSX_REACT_NODE } from '../../../WindowBase/types';
4
+ import { EmergeType } from '../../../areas/types';
4
5
  export interface ComponentProps {
6
+ emergeType: EmergeType;
5
7
  windowTools: WindowToolsMF;
6
8
  dynamicMFStore: DynamicMFStore;
7
9
  component: JSX_REACT_NODE;
@@ -8,7 +8,7 @@ import { deepEqual } from "fast-equals";
8
8
  import { useFormatter } from "@m4l/graphics";
9
9
  import { u as useButtonActions } from "./useButtonActions.js";
10
10
  import { H as HeaderWindowComponentStyled, c as HeaderContentStyled, I as IconWindowStyled, d as ContainerTitleSubtitleStyled, e as TitleWindowStyled, P as PointIconStyled, S as SubtitleWindowStyled, f as IconsWrapperStyled, g as ContainerLeftActionsStyled, M as MenuActionsWindowsStyled } from "../../slots/WindowBaseSlots.js";
11
- import { a as WINDOW_BASE_CLASSES } from "../../constants.js";
11
+ import { w as windowBaseClasses } from "../../constants.js";
12
12
  import clsx from "clsx";
13
13
  const HeaderWindowBase = (props) => {
14
14
  const {
@@ -24,7 +24,7 @@ const HeaderWindowBase = (props) => {
24
24
  variant,
25
25
  actions = [],
26
26
  collapsed,
27
- type,
27
+ emergeType,
28
28
  draggable
29
29
  } = props;
30
30
  const { host_static_assets, environment_assets } = useEnvironment();
@@ -103,17 +103,17 @@ const HeaderWindowBase = (props) => {
103
103
  maximized,
104
104
  variant,
105
105
  size,
106
- type,
106
+ emergeType,
107
107
  collapsed,
108
108
  draggable
109
109
  };
110
110
  const IconButtonLeftActions = useButtonActions(leftActions);
111
111
  const IconButtonRightActions = useButtonActions(rightActions);
112
- return /* @__PURE__ */ jsxs(HeaderWindowComponentStyled, { className: clsx(draggable && dragResizeWindowRNDClasses.draggableHandle, WINDOW_BASE_CLASSES.headerWindowComponent), ownerState, children: [
113
- /* @__PURE__ */ jsxs(HeaderContentStyled, { ownerState, children: [
112
+ return /* @__PURE__ */ jsxs(HeaderWindowComponentStyled, { className: clsx(draggable && dragResizeWindowRNDClasses.draggableHandle, windowBaseClasses.headerWindowComponent), ownerState, children: [
113
+ /* @__PURE__ */ jsxs(HeaderContentStyled, { ownerState, className: windowBaseClasses.headerContentWindowBase, children: [
114
114
  iconUrl && /* @__PURE__ */ jsx(IconWindowStyled, { size, ownerState, src: iconUrl, "aria-label": "main icon" }),
115
115
  /* @__PURE__ */ jsxs(ContainerTitleSubtitleStyled, { size, ownerState, children: [
116
- /* @__PURE__ */ jsx(TitleWindowStyled, { variant: type === "popup" || type === "modal" ? "body" : "captionDens", size, skeletonWidth: 100, ownerState, children: title }),
116
+ /* @__PURE__ */ jsx(TitleWindowStyled, { variant: emergeType === "popup" || emergeType === "modal" ? "body" : "captionDens", size, skeletonWidth: 100, ownerState, children: title }),
117
117
  subTitle && /* @__PURE__ */ jsx(
118
118
  PointIconStyled,
119
119
  {
@@ -122,7 +122,7 @@ const HeaderWindowBase = (props) => {
122
122
  ownerState
123
123
  }
124
124
  ),
125
- subTitle && /* @__PURE__ */ jsx(SubtitleWindowStyled, { variant: type === "popup" || type === "modal" ? "body" : "captionDens", size, skeletonWidth: 100, ownerState, children: subTitle })
125
+ subTitle && /* @__PURE__ */ jsx(SubtitleWindowStyled, { variant: emergeType === "popup" || emergeType === "modal" ? "body" : "captionDens", size, skeletonWidth: 100, ownerState, children: subTitle })
126
126
  ] })
127
127
  ] }),
128
128
  /* @__PURE__ */ jsxs(
@@ -32,7 +32,7 @@ import { WindowBaseAction, WindowBaseProps } from '../../types';
32
32
  * - `selected` modifies the visual appearance to indicate the selected state.
33
33
  * @see WindowBaseProps - General properties for the window base.
34
34
  */
35
- export type HeaderProps = Pick<WindowBaseProps, 'title' | 'subTitle' | 'iconUrl' | 'onClose' | 'version' | 'selected' | 'variant' | 'type' | 'buildTime' | 'maximized' | 'draggable'> & {
35
+ export type HeaderProps = Pick<WindowBaseProps, 'title' | 'subTitle' | 'iconUrl' | 'onClose' | 'version' | 'selected' | 'variant' | 'emergeType' | 'buildTime' | 'maximized' | 'draggable'> & {
36
36
  actions?: WindowBaseAction[];
37
37
  };
38
38
  /**
@@ -1,3 +1,4 @@
1
+ import { EmergeType } from '../../../areas/types';
1
2
  import { MFBaseProps } from '../../../MFLoader/types';
2
3
  import { WindowToolsMF } from '../../contexts';
3
4
  import { DynamicMFStore } from '../../contexts/DynamicMFParmsContext/store';
@@ -5,4 +6,5 @@ export interface MicroFrontendProps extends MFBaseProps {
5
6
  moduleId: string;
6
7
  windowTools: WindowToolsMF;
7
8
  dynamicMFStore: DynamicMFStore;
9
+ emergeType: EmergeType;
8
10
  }
@@ -189,7 +189,7 @@ export interface WindowBaseProps {
189
189
  * - `'window'`: A window.
190
190
  * Default is `'window'` if not specified.
191
191
  */
192
- type?: EmergeType;
192
+ emergeType?: EmergeType;
193
193
  /**
194
194
  * Indicates if the window is draggable.
195
195
  */
@@ -210,13 +210,13 @@ export type WindowBaseType = keyof typeof WindowBaseSlots;
210
210
  * windowBaseVariant (optional) - Visual variant of the component (`'outlined'` or `'text'`).
211
211
  * windowBaseSize (optional) - Size of the component (`'small'` or `'medium'`).
212
212
  */
213
- export type WindowBaseOwnerState = Pick<WindowBaseProps, 'size'> & {
213
+ export type WindowBaseOwnerState = {
214
214
  selected?: WindowBaseProps['selected'];
215
215
  collapsed?: WindowBaseProps['collapsed'];
216
216
  maximized?: WindowBaseProps['maximized'];
217
217
  variant?: WindowBaseProps['variant'];
218
218
  size?: WindowBaseProps['size'];
219
- type?: WindowBaseProps['type'];
219
+ emergeType?: WindowBaseProps['emergeType'];
220
220
  draggable?: WindowBaseProps['draggable'];
221
221
  };
222
222
  /**
@@ -56,7 +56,7 @@ const WindowConfirm = (props) => {
56
56
  info: `${host_static_assets}/${environment_assets}/frontend/components/window_confirm/assets/icons/Info.svg`
57
57
  };
58
58
  const iconUrl = iconMap[variant] || iconMap.warning;
59
- return /* @__PURE__ */ jsx(AppearanceComponentProvider, { defaultSize: currentSize, children: /* @__PURE__ */ jsx(WindowBase, { iconUrl, variant: "outlined", title: getLabel("modal_dialog.label_window_confirm"), onClose: () => closeModal(), type: "modal", children: /* @__PURE__ */ jsx(
59
+ return /* @__PURE__ */ jsx(AppearanceComponentProvider, { defaultSize: currentSize, children: /* @__PURE__ */ jsx(WindowBase, { iconUrl, variant: "outlined", title: getLabel("modal_dialog.label_window_confirm"), onClose: () => closeModal(), emergeType: "modal", children: /* @__PURE__ */ jsx(
60
60
  WindowConfirmRootStyled,
61
61
  {
62
62
  className: clsx(getComponentSlotRoot(WINDOW_CONFIRM_KEY_COMPONENT)),
@@ -67,7 +67,7 @@ const Window = (props) => {
67
67
  selected,
68
68
  maximized: !!maximizedId,
69
69
  onMouseDown: onTouch,
70
- type: emergeType,
70
+ emergeType,
71
71
  collapsed,
72
72
  ...process.env.NODE_ENV !== "production" ? {
73
73
  [TEST_PROP_ID]: getNameDataTestId(
@@ -79,6 +79,7 @@ const Window = (props) => {
79
79
  children: status === "loaded" ? winType === "microfrontend" ? /* @__PURE__ */ jsx(
80
80
  MemonizedWindowBaseMicroFrontend,
81
81
  {
82
+ emergeType,
82
83
  moduleId,
83
84
  dynamicMFStore,
84
85
  windowTools,
@@ -87,6 +88,7 @@ const Window = (props) => {
87
88
  ) : /* @__PURE__ */ jsx(
88
89
  WindowBaseComponent,
89
90
  {
91
+ emergeType,
90
92
  dynamicMFStore,
91
93
  windowTools,
92
94
  component
@@ -5,7 +5,22 @@ import { u as useHeaderActions } from "./useHeaderActions.js";
5
5
  import { u as usePopupsStore } from "../../../../../../../../popups/components/PopupsProvider/hooks/usePopupsStore.js";
6
6
  import { c as createToaster } from "../../../../../../../../ToastContainer/helpers/toaster.js";
7
7
  const useWindow = (windowId, areaId) => {
8
- const [emergeType, moduleId, winType, title, subTitle, editionInfo, iconUrl, version, buildTime, moduleCount, selected, loading, status, dynamicMFStore] = useAreasStore((state) => {
8
+ const [
9
+ emergeType,
10
+ moduleId,
11
+ winType,
12
+ title,
13
+ subTitle,
14
+ editionInfo,
15
+ iconUrl,
16
+ version,
17
+ buildTime,
18
+ moduleCount,
19
+ selected,
20
+ loading,
21
+ status,
22
+ dynamicMFStore
23
+ ] = useAreasStore((state) => {
9
24
  const window = state.hashWindows[windowId];
10
25
  const selected2 = areaId ? state.hashAreas[areaId]?.currentLayoutId === windowId : false;
11
26
  return [
@@ -66,7 +81,7 @@ const useWindow = (windowId, areaId) => {
66
81
  throw new Error("show not implemented");
67
82
  }
68
83
  }),
69
- [windowId, version, setActions, getCookie, getCookies, setCookie, close, startProgress, stopProgress, setFnQueryClose, setWindowTitle]
84
+ [windowId, setActions, getCookie, getCookies, setCookie, close, startProgress, stopProgress, setFnQueryClose, setWindowTitle]
70
85
  );
71
86
  useEffect(() => {
72
87
  if (status === "init") {
@@ -441,8 +441,8 @@ const createAreasStore = (initProps, storeDevtoolsEnabled = false) => {
441
441
  bounds: {
442
442
  left: MARGIN_GRIDLAYOUT,
443
443
  top: MARGIN_GRIDLAYOUT,
444
- right: -MARGIN_GRIDLAYOUT,
445
- bottom: -MARGIN_GRIDLAYOUT
444
+ right: -10,
445
+ bottom: -10
446
446
  }
447
447
  });
448
448
  }
@@ -1,5 +1,5 @@
1
1
  export * from './components';
2
2
  export * from './contexts';
3
3
  export * from './hooks';
4
- export type { CookieType } from './types';
4
+ export type { CookieType, EmergeType } from './types';
5
5
  export * from './dictionary';
@@ -148,7 +148,7 @@ export type AreaLayoutStateProps = AreaLayoutProps & WindowState;
148
148
  export type EmmitNewLayoutProps = Omit<AreaLayoutMFProps, 'windowId' | 'onClose' | 'areaId'> | Omit<AreaLayoutComponentProps, 'windowId' | 'onClose' | 'areaId'> & {
149
149
  winType: string;
150
150
  emergeType: string;
151
- layoutProps: any;
151
+ layoutProps: Omit<LayoutItem, 'i'>;
152
152
  moduleId: string;
153
153
  dynamicParams: Record<string, any>;
154
154
  iconUrl: string;
@@ -1,46 +1,15 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
- import React, { useMemo, useState, useCallback } from "react";
2
+ import React from "react";
3
3
  import clsx from "clsx";
4
- import { useModuleDictionary } from "@m4l/core";
5
4
  import { R as RootStyled } from "./slots/DistanceToNowFormatterSlots.js";
6
- import { u as useInterval } from "../../../hooks/useInterval/index.js";
7
- import { D as DTNF_DICCTIONARY } from "./dictionary.js";
8
5
  import { g as getPropDataTestId } from "../../../test/getNameDataTestId.js";
9
6
  import { C as COMPONET_KEY_COMPONENT } from "./constants.js";
10
7
  import { D as DistanceToNowFormatterSlots } from "./slots/slots.js";
11
- import { f as formatDistanceToNow } from "../../../utils/formatDistanceToNow/formatDistanteToNow.js";
8
+ import { u as useDistanceToNowFormatter } from "./hooks/useDistanceToNowFormatter.js";
12
9
  import { a as getComponentSlotRoot } from "../../../utils/getComponentSlotRoot.js";
13
10
  function DistanceToNowFormatter(props) {
14
11
  const { presentationTime = "present", date, dataTestId, delay, className, Component = RootStyled, componentProps } = props;
15
- const { getLabel } = useModuleDictionary();
16
- const dictionary = useMemo(() => {
17
- const ret = {
18
- label_sentence_past_seconds: getLabel(DTNF_DICCTIONARY.LABEL_SENTENCE_PAST_SECONDS),
19
- label_sentence_past_others: getLabel(DTNF_DICCTIONARY.LABEL_SENTENCE_PAST_OTHERS),
20
- label_sentence_present_seconds: getLabel(DTNF_DICCTIONARY.LABEL_SENTENCE_PRESENT_SECONDS),
21
- label_sentence_present_others: getLabel(DTNF_DICCTIONARY.LABEL_SENTENCE_PRESENT_OTHERS),
22
- label_sentence_future_seconds: getLabel(DTNF_DICCTIONARY.LABEL_SENTENCE_FUTURE_SECONDS),
23
- label_sentence_future_others: getLabel(DTNF_DICCTIONARY.LABEL_SENTENCE_FUTURE_OTHERS),
24
- label_unit_time_second: getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_SECOND),
25
- label_unit_time_seconds: getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_SECONDS),
26
- label_unit_time_minute: getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_MINUTE),
27
- label_unit_time_minutes: getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_MINUTES),
28
- label_unit_time_hour: getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_HOUR),
29
- label_unit_time_hours: getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_HOURS),
30
- label_unit_time_day: getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_DAY),
31
- label_unit_time_days: getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_DAYS),
32
- label_unit_time_month: getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_MONTH),
33
- label_unit_time_months: getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_MONTHS),
34
- label_unit_time_year: getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_YEAR),
35
- label_unit_time_years: getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_YEARS)
36
- };
37
- return ret;
38
- }, [getLabel]);
39
- const [time, setTime] = useState(formatDistanceToNow(presentationTime, date, dictionary));
40
- const updateTime = useCallback(() => {
41
- setTime(formatDistanceToNow(presentationTime, date, dictionary));
42
- }, [date, dictionary, presentationTime]);
43
- useInterval(updateTime, delay);
12
+ const { time } = useDistanceToNowFormatter({ presentationTime, date, delay });
44
13
  if (Component === React.Fragment) {
45
14
  return time;
46
15
  }
@@ -19,4 +19,12 @@ export declare const DTNF_DICCTIONARY: {
19
19
  readonly LABEL_UNIT_TIME_MONTHS: "distance_to_now_formmater.label_unit_time_months";
20
20
  readonly LABEL_UNIT_TIME_YEAR: "distance_to_now_formmater.label_unit_time_year";
21
21
  readonly LABEL_UNIT_TIME_YEARS: "distance_to_now_formmater.label_unit_time_years";
22
+ readonly LABEL_UNIT_TIME_SECONDS_SHORT: "distance_to_now_formmater.label_unit_time_seconds_short";
23
+ readonly LABEL_UNIT_TIME_MINUTES_SHORT: "distance_to_now_formmater.label_unit_time_minutes_short";
24
+ readonly LABEL_UNIT_TIME_HOURS_SHORT: "distance_to_now_formmater.label_unit_time_hours_short";
25
+ readonly LABEL_UNIT_TIME_DAYS_SHORT: "distance_to_now_formmater.label_unit_time_days_short";
26
+ readonly LABEL_UNIT_TIME_MONTHS_SHORT: "distance_to_now_formmater.label_unit_time_months_short";
27
+ readonly LABEL_UNIT_TIME_YEARS_SHORT: "distance_to_now_formmater.label_unit_time_years_short";
28
+ readonly LABEL_SEPARATOR_TIME: "distance_to_now_formmater.label_separator_time";
29
+ readonly LABEL_SEPARATOR_DATE: "distance_to_now_formmater.label_separator_date";
22
30
  };
@@ -0,0 +1,13 @@
1
+ import { default as React } from 'react';
2
+ import { DistanceToNowFormatterProps } from '../types';
3
+ import { FormatDistanceToNowReturn } from '../../../../utils/formatDistanceToNow/types';
4
+ /**
5
+ * "useDistanceToNowFormatter" que se encarga de retornar el tiempo transcurrido desde una fecha hasta la fecha actual.
6
+ * Actualizando cada delay configurable a través de props
7
+ * Tiene 3 tipos de presentaciones:
8
+ * En tiempo pasado
9
+ * En tiempo presente
10
+ * En tiempo futuro
11
+ *
12
+ */
13
+ export declare function useDistanceToNowFormatter<T extends React.ElementType>(props: DistanceToNowFormatterProps<T>): FormatDistanceToNowReturn;
@@ -0,0 +1,65 @@
1
+ import { useMemo, useState, useRef, useCallback, useEffect } from "react";
2
+ import { useModuleDictionary } from "@m4l/core";
3
+ import { u as useInterval } from "../../../../hooks/useInterval/index.js";
4
+ import { D as DTNF_DICCTIONARY } from "../dictionary.js";
5
+ import { f as formatDistanceToNow } from "../../../../utils/formatDistanceToNow/formatDistanteToNow.js";
6
+ function useDistanceToNowFormatter(props) {
7
+ const { presentationTime = "present", date, delay } = props;
8
+ const { getLabel } = useModuleDictionary();
9
+ const dictionary = useMemo(() => {
10
+ const ret = {
11
+ label_sentence_past_seconds: getLabel(DTNF_DICCTIONARY.LABEL_SENTENCE_PAST_SECONDS),
12
+ label_sentence_past_others: getLabel(DTNF_DICCTIONARY.LABEL_SENTENCE_PAST_OTHERS),
13
+ label_sentence_present_seconds: getLabel(DTNF_DICCTIONARY.LABEL_SENTENCE_PRESENT_SECONDS),
14
+ label_sentence_present_others: getLabel(DTNF_DICCTIONARY.LABEL_SENTENCE_PRESENT_OTHERS),
15
+ label_sentence_future_seconds: getLabel(DTNF_DICCTIONARY.LABEL_SENTENCE_FUTURE_SECONDS),
16
+ label_sentence_future_others: getLabel(DTNF_DICCTIONARY.LABEL_SENTENCE_FUTURE_OTHERS),
17
+ label_unit_time_second: getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_SECOND),
18
+ label_unit_time_seconds: getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_SECONDS),
19
+ label_unit_time_minute: getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_MINUTE),
20
+ label_unit_time_minutes: getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_MINUTES),
21
+ label_unit_time_hour: getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_HOUR),
22
+ label_unit_time_hours: getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_HOURS),
23
+ label_unit_time_day: getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_DAY),
24
+ label_unit_time_days: getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_DAYS),
25
+ label_unit_time_month: getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_MONTH),
26
+ label_unit_time_months: getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_MONTHS),
27
+ label_unit_time_year: getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_YEAR),
28
+ label_unit_time_years: getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_YEARS),
29
+ label_unit_time_seconds_short: "ss",
30
+ // getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_SECONDS_SHORT),
31
+ label_unit_time_minutes_short: "mm",
32
+ // getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_MINUTES_SHORT),
33
+ label_unit_time_hours_short: "hh",
34
+ // getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_HOURS_SHORT),
35
+ label_unit_time_days_short: "DD",
36
+ // getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_DAYS_SHORT),
37
+ label_unit_time_months_short: "MM",
38
+ // getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_MONTHS_SHORT),
39
+ label_unit_time_years_short: "YY",
40
+ // getLabel(DTNF_DICCTIONARY.LABEL_UNIT_TIME_YEARS_SHORT),
41
+ label_separator_time: ":",
42
+ // getLabel(DTNF_DICCTIONARY.LABEL_SEPARATOR_TIME),
43
+ label_separator_date: "-"
44
+ // getLabel(DTNF_DICCTIONARY.LABEL_SEPARATOR_DATE),
45
+ };
46
+ return ret;
47
+ }, [getLabel]);
48
+ const [time, setTime] = useState(formatDistanceToNow(presentationTime, new Date(date), dictionary));
49
+ const refTime = useRef({ ...time });
50
+ const updateTime = useCallback(() => {
51
+ const newTime = formatDistanceToNow(presentationTime, new Date(date), dictionary);
52
+ if (refTime.current.value !== newTime.value || refTime.current.unit !== newTime.unit) {
53
+ refTime.current = newTime;
54
+ setTime(newTime);
55
+ }
56
+ }, [date, dictionary, presentationTime]);
57
+ useEffect(() => {
58
+ updateTime();
59
+ }, [updateTime]);
60
+ useInterval(updateTime, delay);
61
+ return time;
62
+ }
63
+ export {
64
+ useDistanceToNowFormatter as u
65
+ };
@@ -1,2 +1,3 @@
1
1
  export * from './DistanceToNowFormatter';
2
+ export * from './hooks/useDistanceToNowFormatter';
2
3
  export { getDistanceToNowFormatterComponentsDictionary } from './dictionary';
@@ -11,7 +11,10 @@ export type DistanceToNowFormatterProps<T extends React.ElementType = typeof Roo
11
11
  */
12
12
  componentProps?: React.ComponentPropsWithoutRef<T>;
13
13
  presentationTime: PresentationTimeType;
14
- date: Date;
14
+ /**
15
+ * Se maneja en string, para evitar re-renderizaciones innecesarias debido a que Date es un objeto y se crea un nuevo objeto cada vez que se pasa como prop.
16
+ */
17
+ date: string;
15
18
  delay?: number;
16
19
  dataTestId?: string;
17
20
  className?: string;
@@ -1,6 +1,8 @@
1
1
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
2
  import { useId, useState, useCallback, useEffect } from "react";
3
3
  import { useFormContext, Controller } from "react-hook-form";
4
+ import { r as rhfAutocompleteClasses } from "./constants.js";
5
+ import clsx from "clsx";
4
6
  import { A as AutocompleteRootStyled, L as LabelStyled } from "./slots/RHFAutocompleteSlots.js";
5
7
  import { A as Autocomplete } from "../../mui_extended/Autocomplete/Autocomplete.js";
6
8
  import { H as HelperError } from "../../HelperError/HelperError.js";
@@ -21,7 +23,8 @@ function RHFAutocomplete(props) {
21
23
  mandatory,
22
24
  mandatoryMessage,
23
25
  multiple,
24
- refresh
26
+ refresh,
27
+ className
25
28
  // onChange: onChangeRHF,
26
29
  } = props;
27
30
  const htmlForId = useId();
@@ -59,6 +62,7 @@ function RHFAutocomplete(props) {
59
62
  return /* @__PURE__ */ jsx(
60
63
  AutocompleteRootStyled,
61
64
  {
65
+ className: clsx(className, rhfAutocompleteClasses.autocompleteRoot),
62
66
  ownerState: { ...ownerState },
63
67
  size,
64
68
  children: /* @__PURE__ */ jsx(
@@ -7,3 +7,4 @@
7
7
  */
8
8
  export declare const RFHAUTOCOMPLETE_KEY_COMPONENT = "RHFM4LAutocomplete";
9
9
  export declare const RFHAUTOCOMPLETE_CLASS_NAME_SPECIFY = "RHFM4LclasssAutocompleCssSpecificity";
10
+ export declare const rhfAutocompleteClasses: Record<string, string>;
@@ -1,4 +1,8 @@
1
+ import { g as getComponentClasses } from "../../../utils/getComponentSlotRoot.js";
2
+ import { R as RFHAutocompleteSlots } from "./slots/RHFAutocompleteEnum.js";
1
3
  const RFHAUTOCOMPLETE_KEY_COMPONENT = "RHFM4LAutocomplete";
4
+ const rhfAutocompleteClasses = getComponentClasses(RFHAUTOCOMPLETE_KEY_COMPONENT, RFHAutocompleteSlots);
2
5
  export {
3
- RFHAUTOCOMPLETE_KEY_COMPONENT as R
6
+ RFHAUTOCOMPLETE_KEY_COMPONENT as R,
7
+ rhfAutocompleteClasses as r
4
8
  };