@m4l/components 0.1.77 → 0.1.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/@types/export.d.ts +3 -3
- package/components/AccountPopover/{index.3a79c395.js → index.7e76dbb7.js} +6 -6
- package/components/AppBar/{index.71b38ee9.js → index.06858422.js} +6 -6
- package/components/CommonActions/components/ActionCancel/{index.b748a38e.js → index.d536ccfa.js} +1 -1
- package/components/CommonActions/components/ActionFormCancel/{index.27ad09e1.js → index.a915b105.js} +13 -13
- package/components/CommonActions/components/ActionFormIntro/{index.2556f054.js → index.14e65d6c.js} +1 -1
- package/components/CommonActions/components/ActionIntro/{index.a7d92e66.js → index.aa1648eb.js} +1 -1
- package/components/CommonActions/components/Actions/{index.3eba9d91.js → index.52125041.js} +11 -11
- package/components/DataGrid/{index.545b492f.js → index.9fb3e6a1.js} +20 -23
- package/components/DataGrid/types.d.ts +1 -1
- package/components/DynamicFilter/constants.d.ts +1 -0
- package/components/DynamicFilter/contexts/DynamicFilterContext/store.d.ts +6 -1
- package/components/DynamicFilter/{index.d7be0f37.js → index.d1a2e2d1.js} +50 -50
- package/components/DynamicFilter/subcomponents/InnerForHooks/index.d.ts +1 -2
- package/components/DynamicFilter/tests/contants.d.ts +2 -3
- package/components/GridLayout/Responsive/{index.a12a8cec.js → index.0905a698.js} +61 -43
- package/components/GridLayout/WidthProvider/{index.8ff65909.js → index.9a26dfe4.js} +1 -3
- package/components/GridLayout/index.d.ts +1 -1
- package/components/GridLayout/{index.4ba3767a.js → index.da6fd387.js} +103 -93
- package/components/GridLayout/subcomponents/GridItem/index.d.ts +1 -0
- package/components/GridLayout/subcomponents/GridItem/types.d.ts +2 -0
- package/components/GridLayout/subcomponents/Responsive/responsiveUtils.d.ts +6 -3
- package/components/GridLayout/subcomponents/Responsive/types.d.ts +1 -3
- package/components/HelperText/{index.ef31df1f.js → index.a019742c.js} +6 -6
- package/components/Icon/{index.ecb63e65.js → index.9fcd1476.js} +1 -1
- package/components/LanguagePopover/{index.0023d069.js → index.98b63dcb.js} +6 -6
- package/components/ModalDialog/{index.d880e685.js → index.d9937d46.js} +4 -4
- package/components/NavLink/{index.cd92eceb.js → index.a5dea6d3.js} +6 -6
- package/components/ObjectLogs/{index.f174c542.js → index.d9d20b9d.js} +22 -16
- package/components/ObjectLogs/types.d.ts +1 -0
- package/components/PaperForm/{index.1bd86ee5.js → index.ba38a0bd.js} +1 -1
- package/components/Period/{index.711db043.js → index.7b94c418.js} +12 -12
- package/components/PropertyValue/constants.d.ts +3 -0
- package/components/PropertyValue/{index.8a1adf3e.js → index.45c73161.js} +17 -11
- package/components/PropertyValue/types.d.ts +2 -1
- package/components/SideBar/{index.c5ce0bad.js → index.2f497e6c.js} +2 -2
- package/components/areas/components/AreasAdmin/classes/index.d.ts +1 -1
- package/components/areas/components/AreasAdmin/classes/types.d.ts +3 -0
- package/components/areas/components/AreasAdmin/{index.cc4cbf56.js → index.43ecd998.js} +91 -79
- package/components/areas/components/AreasViewer/classes/index.d.ts +1 -1
- package/components/areas/components/AreasViewer/classes/types.d.ts +1 -0
- package/components/areas/components/AreasViewer/{index.9c2aaaeb.js → index.14e62059.js} +143 -161
- package/components/areas/components/{index.0f7ac464.js → index.a87653a9.js} +9 -9
- package/components/areas/contexts/AreasContext/helper.d.ts +3 -1
- package/components/areas/contexts/AreasContext/{index.c8147e8e.js → index.02c4e7be.js} +99 -78
- package/components/areas/contexts/AreasContext/types.d.ts +1 -2
- package/components/areas/contexts/{index.02336412.js → index.1ff9b360.js} +1 -1
- package/components/areas/hooks/useAreas/{index.3406a6cb.js → index.85e4b2e2.js} +1 -1
- package/components/areas/{index.6f2e5dab.js → index.d1dcccf5.js} +9 -9
- package/components/areas/types.d.ts +0 -1
- package/components/formatters/BooleanFormatter/{index.5268b024.js → index.e8de8e4c.js} +1 -1
- package/components/formatters/{index.137169d8.js → index.67aeb049.js} +2 -2
- package/components/hook-form/RHFAutocomplete/{index.ac2b1fae.js → index.6aa51705.js} +23 -12
- package/components/hook-form/RHFAutocompleteAsync/{index.8b4ccc8d.js → index.1a3dfe5f.js} +1 -1
- package/components/hook-form/RHFCheckbox/{index.acef119c.js → index.a08a65b3.js} +1 -1
- package/components/hook-form/RHFDateTime/{index.5b080342.js → index.4d671108.js} +7 -7
- package/components/hook-form/RHFPeriod/{index.5304e3bd.js → index.39b4be49.js} +2 -2
- package/components/hook-form/RHFTextField/{index.e751dca7.js → index.9004e898.js} +3 -3
- package/components/hook-form/RHFUpload/{index.25db0511.js → index.bed8573e.js} +7 -10
- package/components/modal/{WindowBase.850ea31a.js → WindowBase.a0c0b322.js} +8 -8
- package/components/modal/{WindowConfirm.cb37bc58.js → WindowConfirm.6c063f2d.js} +14 -14
- package/components/modal/{index.a0978193.js → index.00efea85.js} +11 -11
- package/components/mui_extended/Accordion/constants.d.ts +1 -0
- package/components/mui_extended/Accordion/{index.12b1339a.js → index.9877f7bf.js} +8 -9
- package/components/mui_extended/Accordion/types.d.ts +1 -0
- package/components/mui_extended/IconButton/{index.fc5b7c2d.js → index.12f1a3c3.js} +4 -1
- package/components/mui_extended/MenuActions/{index.f5b1c022.js → index.43a2e1ae.js} +15 -6
- package/components/mui_extended/MenuActions/index.d.ts +3 -2
- package/components/mui_extended/MenuActions/types.d.ts +1 -0
- package/components/mui_extended/Pager/{index.435af0df.js → index.2f6d6d7d.js} +1 -1
- package/components/mui_extended/Tab/constant.d.ts +1 -0
- package/components/mui_extended/Tab/{index.9e2f6e34.js → index.7c82e43d.js} +5 -6
- package/components/mui_extended/Tab/types.d.ts +1 -0
- package/components/mui_extended/{index.83979b6a.js → index.0e2ff642.js} +6 -6
- package/contexts/ModalContext/{index.dee85a61.js → index.e9a7ba4a.js} +1 -1
- package/hooks/useModal/{index.de522a10.js → index.8e85f7ae.js} +1 -1
- package/index.js +220 -217
- package/package.json +1 -1
- package/test/getNameDataTestId.d.ts +1 -0
- package/vendor.e353394b.js +124 -0
- package/components/DynamicFilter/subcomponents/InnerForHooks/types.d.ts +0 -2
- package/components/DynamicFilter/tests/types.d.ts +0 -2
- package/components/DynamicFilter/tests/utils.d.ts +0 -2
- package/components/PropertyValue/tests/constants.d.ts +0 -1
- package/components/PropertyValue/tests/utils.d.ts +0 -2
- package/components/mui_extended/Accordion/tests/constants.d.ts +0 -1
- package/components/mui_extended/Accordion/tests/utils.d.ts +0 -2
- package/components/mui_extended/Tab/tests/constants.d.ts +0 -1
- package/components/mui_extended/Tab/tests/utils.d.ts +0 -2
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import "react";
|
|
2
2
|
import "@m4l/core";
|
|
3
3
|
import "@mui/material";
|
|
4
|
-
import "../../Icon/index.
|
|
4
|
+
import "../../Icon/index.9fcd1476.js";
|
|
5
5
|
import "clsx";
|
|
6
6
|
import "react/jsx-runtime";
|
|
7
|
-
import "../../mui_extended/IconButton/index.
|
|
7
|
+
import "../../mui_extended/IconButton/index.12f1a3c3.js";
|
|
8
8
|
import "@m4l/graphics";
|
|
9
9
|
import "zustand";
|
|
10
|
-
import "../contexts/AreasContext/index.
|
|
11
|
-
import "./AreasAdmin/index.
|
|
10
|
+
import "../contexts/AreasContext/index.02c4e7be.js";
|
|
11
|
+
import "./AreasAdmin/index.43ecd998.js";
|
|
12
12
|
import "zustand/shallow";
|
|
13
13
|
import "../../ScrollBar/index.bbe48f4d.js";
|
|
14
|
-
import "../../mui_extended/Accordion/index.
|
|
14
|
+
import "../../mui_extended/Accordion/index.9877f7bf.js";
|
|
15
15
|
import "../../mui_extended/Typography/index.443590d6.js";
|
|
16
16
|
import "../../mui_extended/Avatar/index.75e6ed57.js";
|
|
17
17
|
import "react-router-dom";
|
|
@@ -20,10 +20,10 @@ import "../../mui_extended/Button/index.4288f9fc.js";
|
|
|
20
20
|
import "../../mui_extended/Badge/index.8c2b8b66.js";
|
|
21
21
|
import "../../Image/index.c18ebf5a.js";
|
|
22
22
|
import "@mui/lab";
|
|
23
|
+
import "../../mui_extended/MenuActions/index.43a2e1ae.js";
|
|
23
24
|
import "../../mui_extended/Popover/index.9f35d0eb.js";
|
|
24
|
-
import "../../mui_extended/
|
|
25
|
-
import "../../mui_extended/
|
|
26
|
-
import "../../mui_extended/Tab/index.9e2f6e34.js";
|
|
25
|
+
import "../../mui_extended/Pager/index.2f6d6d7d.js";
|
|
26
|
+
import "../../mui_extended/Tab/index.7c82e43d.js";
|
|
27
27
|
import "../../mui_extended/Tooltip/index.5a795dcd.js";
|
|
28
|
-
import "./AreasViewer/index.
|
|
28
|
+
import "./AreasViewer/index.14e62059.js";
|
|
29
29
|
import "../../LinearProgressIndeterminate/index.60dabc06.js";
|
|
@@ -41,10 +41,12 @@ export declare const addArea: (state: WritableDraft<AreasStateWithActions>) => s
|
|
|
41
41
|
export declare const updateOwnerStateClasses: (state: WritableDraft<AreasStateWithActions>) => void;
|
|
42
42
|
export declare const getCurrentArea: (state: WritableDraft<AreasStateWithActions> | AreasStateWithActions) => Area;
|
|
43
43
|
export declare const getParmsFromValue: (key: string, data: []) => any;
|
|
44
|
+
export declare function setColapsedLayoutBreakPoints(state: WritableDraft<Area>, layoutId: string, colapsed: boolean): void;
|
|
44
45
|
export declare function deleteLayoutFromBreakPoints(state: WritableDraft<Area>, layoutId?: string): void;
|
|
46
|
+
export declare function purgeToastsWindow(state: WritableDraft<AreasStateWithActions>, windowId: string): void;
|
|
47
|
+
export declare function purgeToastsArea(state: WritableDraft<AreasStateWithActions>, areaId: string): void;
|
|
45
48
|
export declare function getDataFromResponse(data: any, state: WritableDraft<AreasStateWithActions>, areaId: string): {
|
|
46
49
|
newBreakPointsLayouts: Layouts;
|
|
47
|
-
newWindowsLayoutsIds: string[];
|
|
48
50
|
newHashLayoutItems: string[];
|
|
49
51
|
};
|
|
50
52
|
export declare function getCookiesContainer(data: any, containerId: string): Record<string, any>;
|
|
@@ -5,14 +5,14 @@ import { useResponsiveDesktop, useFirstRender } from "@m4l/graphics";
|
|
|
5
5
|
import { useHostTools, useModuleDictionary, useNetwork, useModuleSkeleton, EmitEvents } from "@m4l/core";
|
|
6
6
|
import { devtools } from "zustand/middleware";
|
|
7
7
|
import { immer } from "zustand/middleware/immer";
|
|
8
|
-
import { u as useAreasViewerUtilityClasses } from "../../components/AreasViewer/index.
|
|
9
|
-
import { u as useAreasAdminUtilityClasses } from "../../components/AreasAdmin/index.
|
|
8
|
+
import { u as useAreasViewerUtilityClasses } from "../../components/AreasViewer/index.14e62059.js";
|
|
9
|
+
import { u as useAreasAdminUtilityClasses } from "../../components/AreasAdmin/index.43ecd998.js";
|
|
10
10
|
import { c as createDynamicMFStore } from "../DynamicMFParmsContext/index.1607c78e.js";
|
|
11
11
|
import { g as getAreasDictionary, D as DICCTIONARY } from "../../dictionary.afb7e3d9.js";
|
|
12
12
|
import "clsx";
|
|
13
|
-
import "../../../GridLayout/index.
|
|
13
|
+
import "../../../GridLayout/index.da6fd387.js";
|
|
14
|
+
import { a as addLayoutItemToBreakPointIfNoExists, b as addLayoutItemToBreakPoints, c as isEqualLayouts } from "../../../GridLayout/Responsive/index.0905a698.js";
|
|
14
15
|
import { jsx } from "react/jsx-runtime";
|
|
15
|
-
import { a as addLayoutItemToBreakPointIfNoExists, b as addLayoutItemToBreakPoints } from "../../../GridLayout/Responsive/index.a12a8cec.js";
|
|
16
16
|
import { debounce, cloneDeep } from "lodash";
|
|
17
17
|
const ROW_HEIGTH_GRIDLAYOUT = 20;
|
|
18
18
|
const PADDING_GRIDLAYOUT = 3;
|
|
@@ -35,8 +35,7 @@ const DEFAULT_AREA = {
|
|
|
35
35
|
status: "init",
|
|
36
36
|
zPopUpIndex: 0,
|
|
37
37
|
layouts: {},
|
|
38
|
-
|
|
39
|
-
hashLayoutItems: [],
|
|
38
|
+
layoutItemsIds: [],
|
|
40
39
|
currentLayoutId: "",
|
|
41
40
|
currentPopUpId: "",
|
|
42
41
|
breakpoints: BREAKPOINT_SIZES,
|
|
@@ -96,6 +95,22 @@ const getParmsFromValue = (key, data) => {
|
|
|
96
95
|
}
|
|
97
96
|
return void 0;
|
|
98
97
|
};
|
|
98
|
+
function setColapsedLayoutBreakPoints(state, layoutId, colapsed) {
|
|
99
|
+
const layoutsBreakPoints = state.layouts;
|
|
100
|
+
for (const key in layoutsBreakPoints) {
|
|
101
|
+
const layoutBreakpoint = layoutsBreakPoints[key];
|
|
102
|
+
const index = layoutBreakpoint.findIndex((lb) => lb.i === layoutId);
|
|
103
|
+
if (index > -1) {
|
|
104
|
+
if (key !== "xxs") {
|
|
105
|
+
layoutBreakpoint[index].colapsed = colapsed;
|
|
106
|
+
} else {
|
|
107
|
+
if (!layoutBreakpoint[index].freeMove) {
|
|
108
|
+
layoutBreakpoint[index].colapsed = colapsed;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
99
114
|
function deleteLayoutFromBreakPoints(state, layoutId) {
|
|
100
115
|
const layoutsBreakPoints = state.layouts;
|
|
101
116
|
for (const key in layoutsBreakPoints) {
|
|
@@ -109,6 +124,24 @@ function deleteLayoutFromBreakPoints(state, layoutId) {
|
|
|
109
124
|
}
|
|
110
125
|
}
|
|
111
126
|
}
|
|
127
|
+
function purgeToastsWindow(state, windowId) {
|
|
128
|
+
const toasties = state?.hashWindows[windowId]?.toasties;
|
|
129
|
+
if (toasties) {
|
|
130
|
+
for (let index = 0; index < toasties.length; index++) {
|
|
131
|
+
const toast = toasties[index];
|
|
132
|
+
if (toast.timer) {
|
|
133
|
+
clearInterval(toast.timer);
|
|
134
|
+
toast.timer = void 0;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
function purgeToastsArea(state, areaId) {
|
|
140
|
+
const area = state.hashAreas[areaId];
|
|
141
|
+
for (let index = 0; index < area.layoutItemsIds.length; index++) {
|
|
142
|
+
purgeToastsWindow(state, area.layoutItemsIds[index]);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
112
145
|
function getDataFromResponse(data, state, areaId) {
|
|
113
146
|
let newBreakPointsLayouts = getParmsFromValue(COOKIE_BREAKPOINT_LAYOUTS, data);
|
|
114
147
|
const windows = getParmsFromValue(COOKIE_WINDOWS, data);
|
|
@@ -157,13 +190,6 @@ function getDataFromResponse(data, state, areaId) {
|
|
|
157
190
|
[PADDING_GRIDLAYOUT, PADDING_GRIDLAYOUT],
|
|
158
191
|
ROW_HEIGTH_GRIDLAYOUT
|
|
159
192
|
);
|
|
160
|
-
console.log(
|
|
161
|
-
"addLayoutItemToBreakPointIfNoExists",
|
|
162
|
-
element,
|
|
163
|
-
breakPoint,
|
|
164
|
-
key,
|
|
165
|
-
newBreakPointsLayouts[breakPoint]
|
|
166
|
-
);
|
|
167
193
|
}
|
|
168
194
|
}
|
|
169
195
|
}
|
|
@@ -177,10 +203,8 @@ function getDataFromResponse(data, state, areaId) {
|
|
|
177
203
|
newBreakPointsLayouts[breakPoint] = [];
|
|
178
204
|
}
|
|
179
205
|
}
|
|
180
|
-
console.log("newBreakPointsLayouts", newBreakPointsLayouts, windows);
|
|
181
206
|
return {
|
|
182
207
|
newBreakPointsLayouts,
|
|
183
|
-
newWindowsLayoutsIds,
|
|
184
208
|
newHashLayoutItems
|
|
185
209
|
};
|
|
186
210
|
}
|
|
@@ -202,12 +226,14 @@ const verifyRemoveToasty = (state, toastyId, forceRemove) => {
|
|
|
202
226
|
const tfy = state.hashToasties[toastyId];
|
|
203
227
|
if (tfy) {
|
|
204
228
|
tfy.percentExecuted = (1 - (tfy.timeStart + tfy.timeoutMs - new Date().getTime()) / tfy.timeoutMs) * 100;
|
|
205
|
-
console.log("verifyRemoveToasty", tfy.percentExecuted);
|
|
206
229
|
if (tfy.percentExecuted >= 100 || forceRemove) {
|
|
207
230
|
const tosties = state.toasties;
|
|
208
231
|
for (let i = 0; i < tosties.length; i++) {
|
|
209
232
|
const findToasty = tosties[i];
|
|
210
233
|
if (findToasty.id === toastyId) {
|
|
234
|
+
if (findToasty.timer) {
|
|
235
|
+
clearInterval(findToasty.timer);
|
|
236
|
+
}
|
|
211
237
|
state.toasties.splice(i, 1);
|
|
212
238
|
delete state.hashToasties[toastyId];
|
|
213
239
|
return;
|
|
@@ -280,13 +306,14 @@ const createAreasStore = (initProps) => {
|
|
|
280
306
|
}
|
|
281
307
|
}
|
|
282
308
|
},
|
|
283
|
-
editArea: (
|
|
309
|
+
editArea: (areaId, newName) => {
|
|
284
310
|
set((state) => {
|
|
285
|
-
if (state.hashAreas[
|
|
286
|
-
state
|
|
311
|
+
if (state.hashAreas[areaId]) {
|
|
312
|
+
purgeToastsArea(state, areaId);
|
|
313
|
+
state.hashAreas[areaId].name = newName;
|
|
287
314
|
state.networkOperation({
|
|
288
315
|
method: "PATCH",
|
|
289
|
-
endPoint: `areas/${
|
|
316
|
+
endPoint: `areas/${areaId}`,
|
|
290
317
|
data: { name: newName },
|
|
291
318
|
toastSuccess: false,
|
|
292
319
|
toastError: false
|
|
@@ -402,8 +429,8 @@ const createAreasStore = (initProps) => {
|
|
|
402
429
|
return;
|
|
403
430
|
}
|
|
404
431
|
if (newWindowProps.replaceMeId) {
|
|
405
|
-
for (let index = 0; index < area.
|
|
406
|
-
const key = area.
|
|
432
|
+
for (let index = 0; index < area.layoutItemsIds.length; index++) {
|
|
433
|
+
const key = area.layoutItemsIds[index];
|
|
407
434
|
const WindoPopUp = state.hashWindows[key];
|
|
408
435
|
if (WindoPopUp.replaceMeId === newWindowProps.replaceMeId) {
|
|
409
436
|
previousId = key;
|
|
@@ -427,7 +454,7 @@ const createAreasStore = (initProps) => {
|
|
|
427
454
|
...DEFAULT_WINDOW,
|
|
428
455
|
dynamicMFStore
|
|
429
456
|
};
|
|
430
|
-
area.
|
|
457
|
+
area.layoutItemsIds.push(windowId);
|
|
431
458
|
if (newWindowProps.emergeType === "layout") {
|
|
432
459
|
area.currentLayoutId = windowId;
|
|
433
460
|
if (area.maximizedId) {
|
|
@@ -443,11 +470,16 @@ const createAreasStore = (initProps) => {
|
|
|
443
470
|
[MARGIN_GRIDLAYOUT, MARGIN_GRIDLAYOUT],
|
|
444
471
|
[PADDING_GRIDLAYOUT, PADDING_GRIDLAYOUT],
|
|
445
472
|
ROW_HEIGTH_GRIDLAYOUT,
|
|
446
|
-
area.containerHeight
|
|
473
|
+
area.containerHeight,
|
|
474
|
+
area.currentBreakpoint
|
|
447
475
|
);
|
|
476
|
+
if (area.currentBreakpoint === "xxs") {
|
|
477
|
+
area.maximizedId = windowId;
|
|
478
|
+
}
|
|
448
479
|
}
|
|
449
480
|
});
|
|
450
481
|
get().areaActions.saveLayouts(areaId);
|
|
482
|
+
get().areaActions.bouncedSaveBreakpointsLayouts(areaId);
|
|
451
483
|
},
|
|
452
484
|
closeLayout: (areaId, removeLayoutId) => {
|
|
453
485
|
set((state) => {
|
|
@@ -455,19 +487,20 @@ const createAreasStore = (initProps) => {
|
|
|
455
487
|
if (!area) {
|
|
456
488
|
return;
|
|
457
489
|
}
|
|
458
|
-
const removeIndex = area.
|
|
490
|
+
const removeIndex = area.layoutItemsIds.indexOf(removeLayoutId);
|
|
459
491
|
if (removeIndex > -1) {
|
|
460
|
-
area.
|
|
492
|
+
area.layoutItemsIds.splice(removeIndex, 1);
|
|
461
493
|
}
|
|
462
494
|
deleteLayoutFromBreakPoints(area, removeLayoutId);
|
|
495
|
+
purgeToastsWindow(state, removeLayoutId);
|
|
463
496
|
delete state.hashWindows[removeLayoutId];
|
|
464
497
|
});
|
|
465
498
|
get().areaActions.saveLayouts(areaId);
|
|
466
499
|
if (get().hashAreas[areaId].maximizedId === removeLayoutId) {
|
|
467
500
|
get().areaActions.maximizeLayout(areaId);
|
|
468
501
|
}
|
|
469
|
-
for (let index = 0; index < get().hashAreas[areaId].
|
|
470
|
-
const layoutItemId = get().hashAreas[areaId].
|
|
502
|
+
for (let index = 0; index < get().hashAreas[areaId].layoutItemsIds.length; index++) {
|
|
503
|
+
const layoutItemId = get().hashAreas[areaId].layoutItemsIds[index];
|
|
471
504
|
const layoutItem = get().hashWindows[layoutItemId];
|
|
472
505
|
if (layoutItem.parentLayoutId === removeLayoutId) {
|
|
473
506
|
get().areaActions.closeLayout(areaId, layoutItem.windowId);
|
|
@@ -480,11 +513,9 @@ const createAreasStore = (initProps) => {
|
|
|
480
513
|
if (!area) {
|
|
481
514
|
return;
|
|
482
515
|
}
|
|
483
|
-
console.log("saveLayouts before", areaId, area.hashLayoutItems);
|
|
484
516
|
const saveObjetc = {};
|
|
485
|
-
for (let index = 0; index < area.
|
|
486
|
-
const key = area.
|
|
487
|
-
console.log("saveLayouts", areaId, key, get().hashWindows[key]);
|
|
517
|
+
for (let index = 0; index < area.layoutItemsIds.length; index++) {
|
|
518
|
+
const key = area.layoutItemsIds[index];
|
|
488
519
|
if (get().hashWindows[key] && get().hashWindows[key].winType === "microfrontend") {
|
|
489
520
|
const element = get().hashWindows[key];
|
|
490
521
|
const hasPropsToSave = {
|
|
@@ -506,7 +537,6 @@ const createAreasStore = (initProps) => {
|
|
|
506
537
|
}
|
|
507
538
|
}
|
|
508
539
|
if (nrKeys > 0) {
|
|
509
|
-
console.log("SaveLayouyts", saveObjetc);
|
|
510
540
|
get().networkOperation({
|
|
511
541
|
method: "PUT",
|
|
512
542
|
endPoint: `cookies/${area.id}/${COOKIE_WINDOWS}`,
|
|
@@ -534,6 +564,7 @@ const createAreasStore = (initProps) => {
|
|
|
534
564
|
if (removeIndex > -1) {
|
|
535
565
|
state.windowsModals.splice(removeIndex, 1);
|
|
536
566
|
}
|
|
567
|
+
purgeToastsWindow(state, removeModalId);
|
|
537
568
|
delete state.hashWindows[removeModalId];
|
|
538
569
|
delete state.hashWindowsModals[removeModalId];
|
|
539
570
|
});
|
|
@@ -568,7 +599,7 @@ const createAreasStore = (initProps) => {
|
|
|
568
599
|
if (l.i === "none") {
|
|
569
600
|
return false;
|
|
570
601
|
}
|
|
571
|
-
if (get().hashAreas[areaId].
|
|
602
|
+
if (get().hashAreas[areaId].layoutItemsIds.indexOf(l.i) > -1) {
|
|
572
603
|
return true;
|
|
573
604
|
}
|
|
574
605
|
return false;
|
|
@@ -596,16 +627,16 @@ const createAreasStore = (initProps) => {
|
|
|
596
627
|
}
|
|
597
628
|
),
|
|
598
629
|
onBreakpointsLayoutsChange: (areaId, _currentLayout, newAllLayouts) => {
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
630
|
+
if (!isEqualLayouts(get().hashAreas[areaId].layouts, newAllLayouts)) {
|
|
631
|
+
set((state) => {
|
|
632
|
+
state.hashAreas[areaId].layouts = cloneDeep(newAllLayouts);
|
|
633
|
+
});
|
|
634
|
+
if (!get().hashAreas[areaId].maximizedId) {
|
|
635
|
+
get().areaActions.bouncedSaveBreakpointsLayouts(areaId);
|
|
636
|
+
}
|
|
605
637
|
}
|
|
606
638
|
},
|
|
607
639
|
onContainerChange: (areaId, e) => {
|
|
608
|
-
console.log("onContainerChange Store", areaId, e.containerHeight);
|
|
609
640
|
set((state) => {
|
|
610
641
|
state.hashAreas[areaId].containerHeight = e.containerHeight;
|
|
611
642
|
state.hashAreas[areaId].currentBreakpoint = e.breakpoint;
|
|
@@ -636,24 +667,18 @@ const createAreasStore = (initProps) => {
|
|
|
636
667
|
});
|
|
637
668
|
},
|
|
638
669
|
unColapseLayoutItem: (areaId, layoutId) => {
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
...state.hashAreas[areaId].colapsedItems
|
|
643
|
-
};
|
|
644
|
-
delete state.hashAreas[areaId].colapsedItems[layoutId];
|
|
645
|
-
state.hashWindows[layoutId].colapsed = false;
|
|
646
|
-
});
|
|
647
|
-
}
|
|
670
|
+
set((state) => {
|
|
671
|
+
setColapsedLayoutBreakPoints(state.hashAreas[areaId], layoutId, false);
|
|
672
|
+
});
|
|
648
673
|
},
|
|
649
674
|
colapseLayoutItem: (areaId, layoutId) => {
|
|
650
675
|
if (!get().hashAreas[areaId].maximizedId && get().hashWindows[layoutId]) {
|
|
651
676
|
set((state) => {
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
677
|
+
setColapsedLayoutBreakPoints(
|
|
678
|
+
state.hashAreas[areaId],
|
|
679
|
+
layoutId,
|
|
680
|
+
true
|
|
681
|
+
);
|
|
657
682
|
});
|
|
658
683
|
}
|
|
659
684
|
},
|
|
@@ -663,6 +688,13 @@ const createAreasStore = (initProps) => {
|
|
|
663
688
|
if (!area)
|
|
664
689
|
return;
|
|
665
690
|
area.maximizedId = layoutId;
|
|
691
|
+
const index = area.layouts["xxs"]?.findIndex(
|
|
692
|
+
(li) => li.i === area.maximizedId
|
|
693
|
+
);
|
|
694
|
+
if (index !== void 0 && index > -1 && layoutId && state.hashWindows[layoutId].emergeType === "popup") {
|
|
695
|
+
area.layouts["xxs"][index].visible = true;
|
|
696
|
+
area.layouts["xxs"][index].colapsed = false;
|
|
697
|
+
}
|
|
666
698
|
});
|
|
667
699
|
if (layoutId) {
|
|
668
700
|
get().areaActions.selectLayout(areaId, layoutId);
|
|
@@ -673,6 +705,14 @@ const createAreasStore = (initProps) => {
|
|
|
673
705
|
const area = state.hashAreas[areaId];
|
|
674
706
|
if (!area)
|
|
675
707
|
return;
|
|
708
|
+
if (area.maximizedId) {
|
|
709
|
+
const index = area.layouts["xxs"]?.findIndex(
|
|
710
|
+
(li) => li.i === area.maximizedId
|
|
711
|
+
);
|
|
712
|
+
if (index !== void 0 && index > -1 && state.hashWindows[area.maximizedId].emergeType === "popup") {
|
|
713
|
+
area.layouts["xxs"][index].visible = false;
|
|
714
|
+
}
|
|
715
|
+
}
|
|
676
716
|
area.maximizedId = void 0;
|
|
677
717
|
});
|
|
678
718
|
},
|
|
@@ -706,20 +746,10 @@ const createAreasStore = (initProps) => {
|
|
|
706
746
|
}
|
|
707
747
|
set((state) => {
|
|
708
748
|
const area3 = state.hashAreas[areaId];
|
|
709
|
-
const {
|
|
710
|
-
newBreakPointsLayouts,
|
|
711
|
-
newWindowsLayoutsIds,
|
|
712
|
-
newHashLayoutItems
|
|
713
|
-
} = getDataFromResponse(response.data, state, areaId);
|
|
749
|
+
const { newBreakPointsLayouts, newHashLayoutItems } = getDataFromResponse(response.data, state, areaId);
|
|
714
750
|
area3.layouts = newBreakPointsLayouts;
|
|
715
|
-
area3.
|
|
751
|
+
area3.layoutItemsIds = newHashLayoutItems;
|
|
716
752
|
area3.status = "loaded";
|
|
717
|
-
console.log(
|
|
718
|
-
"loadWindowsFromApi",
|
|
719
|
-
newBreakPointsLayouts,
|
|
720
|
-
newHashLayoutItems,
|
|
721
|
-
newWindowsLayoutsIds
|
|
722
|
-
);
|
|
723
753
|
});
|
|
724
754
|
}).catch((_response) => {
|
|
725
755
|
set((state) => {
|
|
@@ -738,11 +768,6 @@ const createAreasStore = (initProps) => {
|
|
|
738
768
|
});
|
|
739
769
|
},
|
|
740
770
|
getCookie: (windowId, id) => {
|
|
741
|
-
console.log(
|
|
742
|
-
"getCookie",
|
|
743
|
-
get().hashWindows[windowId].cookies.windowCookies[id],
|
|
744
|
-
get().hashWindows[windowId].cookies.moduleCookies[id]
|
|
745
|
-
);
|
|
746
771
|
if (get().hashWindows[windowId]) {
|
|
747
772
|
return get().hashWindows[windowId].cookies.windowCookies[id] || get().hashWindows[windowId].cookies.moduleCookies[id];
|
|
748
773
|
}
|
|
@@ -832,11 +857,6 @@ const createAreasStore = (initProps) => {
|
|
|
832
857
|
response.data,
|
|
833
858
|
windowId
|
|
834
859
|
);
|
|
835
|
-
console.log(
|
|
836
|
-
"cookies",
|
|
837
|
-
hWs.cookies.windowCookies,
|
|
838
|
-
hWs.cookies.moduleCookies
|
|
839
|
-
);
|
|
840
860
|
hWs.status = "loaded";
|
|
841
861
|
}
|
|
842
862
|
});
|
|
@@ -890,7 +910,6 @@ const createAreasStore = (initProps) => {
|
|
|
890
910
|
toast: (windowId, options) => {
|
|
891
911
|
const hW = get().hashWindows[windowId];
|
|
892
912
|
if (hW) {
|
|
893
|
-
console.log("replaceMeId", options.replaceMeId);
|
|
894
913
|
if (options.replaceMeId) {
|
|
895
914
|
for (const key in hW.hashToasties) {
|
|
896
915
|
const t = hW.hashToasties[key];
|
|
@@ -904,6 +923,7 @@ const createAreasStore = (initProps) => {
|
|
|
904
923
|
hw2.timeStart = new Date().getTime();
|
|
905
924
|
hw2.percentExecuted = 0;
|
|
906
925
|
hw2.timer = setInterval(() => {
|
|
926
|
+
console.log("toast timer edit tick");
|
|
907
927
|
set((state3) => {
|
|
908
928
|
verifyRemoveToasty(
|
|
909
929
|
state3.hashWindows[windowId],
|
|
@@ -927,6 +947,7 @@ const createAreasStore = (initProps) => {
|
|
|
927
947
|
timeStart: new Date().getTime(),
|
|
928
948
|
percentExecuted: 0,
|
|
929
949
|
timer: setInterval(() => {
|
|
950
|
+
console.log("toast timer new tick");
|
|
930
951
|
set((stateRemoveToasty) => {
|
|
931
952
|
verifyRemoveToasty(
|
|
932
953
|
stateRemoveToasty.hashWindows[windowId],
|
|
@@ -30,10 +30,9 @@ export interface Area {
|
|
|
30
30
|
containerHeight?: number;
|
|
31
31
|
currentBreakpoint?: Breakpoint;
|
|
32
32
|
layouts: LayoutsNotReadonly;
|
|
33
|
-
colapsedItems: Record<string, boolean>;
|
|
34
33
|
maximizedId?: string | undefined;
|
|
35
34
|
/** Son los ids de las ventanas, iterar con keys, destruye los componentes en un map */
|
|
36
|
-
|
|
35
|
+
layoutItemsIds: string[];
|
|
37
36
|
currentLayoutId: string;
|
|
38
37
|
currentPopUpId: string;
|
|
39
38
|
breakpoints: Breakpoints;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import "./AreasContext/index.
|
|
1
|
+
import "./AreasContext/index.02c4e7be.js";
|
|
2
2
|
import "./WindowToolsMFContext/index.8f3e2a04.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useContext } from "react";
|
|
2
2
|
import { useStore } from "zustand";
|
|
3
|
-
import { A as AreasContext } from "../../contexts/AreasContext/index.
|
|
3
|
+
import { A as AreasContext } from "../../contexts/AreasContext/index.02c4e7be.js";
|
|
4
4
|
function useAreasStore(selector, equalityFn) {
|
|
5
5
|
const context = useContext(AreasContext);
|
|
6
6
|
if (!context)
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import "react";
|
|
2
2
|
import "@m4l/core";
|
|
3
3
|
import "@mui/material";
|
|
4
|
-
import "../Icon/index.
|
|
4
|
+
import "../Icon/index.9fcd1476.js";
|
|
5
5
|
import "clsx";
|
|
6
6
|
import "react/jsx-runtime";
|
|
7
|
-
import "../mui_extended/IconButton/index.
|
|
7
|
+
import "../mui_extended/IconButton/index.12f1a3c3.js";
|
|
8
8
|
import "@m4l/graphics";
|
|
9
9
|
import "zustand";
|
|
10
|
-
import "./contexts/AreasContext/index.
|
|
11
|
-
import "./components/AreasAdmin/index.
|
|
10
|
+
import "./contexts/AreasContext/index.02c4e7be.js";
|
|
11
|
+
import "./components/AreasAdmin/index.43ecd998.js";
|
|
12
12
|
import "zustand/shallow";
|
|
13
13
|
import "../ScrollBar/index.bbe48f4d.js";
|
|
14
|
-
import "../mui_extended/Accordion/index.
|
|
14
|
+
import "../mui_extended/Accordion/index.9877f7bf.js";
|
|
15
15
|
import "../mui_extended/Typography/index.443590d6.js";
|
|
16
16
|
import "../mui_extended/Avatar/index.75e6ed57.js";
|
|
17
17
|
import "react-router-dom";
|
|
@@ -20,12 +20,12 @@ import "../mui_extended/Button/index.4288f9fc.js";
|
|
|
20
20
|
import "../mui_extended/Badge/index.8c2b8b66.js";
|
|
21
21
|
import "../Image/index.c18ebf5a.js";
|
|
22
22
|
import "@mui/lab";
|
|
23
|
+
import "../mui_extended/MenuActions/index.43a2e1ae.js";
|
|
23
24
|
import "../mui_extended/Popover/index.9f35d0eb.js";
|
|
24
|
-
import "../mui_extended/
|
|
25
|
-
import "../mui_extended/
|
|
26
|
-
import "../mui_extended/Tab/index.9e2f6e34.js";
|
|
25
|
+
import "../mui_extended/Pager/index.2f6d6d7d.js";
|
|
26
|
+
import "../mui_extended/Tab/index.7c82e43d.js";
|
|
27
27
|
import "../mui_extended/Tooltip/index.5a795dcd.js";
|
|
28
|
-
import "./components/AreasViewer/index.
|
|
28
|
+
import "./components/AreasViewer/index.14e62059.js";
|
|
29
29
|
import "../LinearProgressIndeterminate/index.60dabc06.js";
|
|
30
30
|
import "./contexts/WindowToolsMFContext/index.8f3e2a04.js";
|
|
31
31
|
import "./contexts/DynamicMFParmsContext/index.1607c78e.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useMemo } from "react";
|
|
2
2
|
import { useModuleDictionary, useEnvironment } from "@m4l/core";
|
|
3
|
-
import { I as Icon } from "../../Icon/index.
|
|
3
|
+
import { I as Icon } from "../../Icon/index.9fcd1476.js";
|
|
4
4
|
import { W as WrapperComponent } from "../../WrapperComponent/index.5e872594.js";
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|
|
6
6
|
const BOOLEAN_FORMATTER_DICTIONARY_KEY = `boolean_formatter`;
|
|
@@ -2,11 +2,11 @@ import { W as WrapperComponent } from "../WrapperComponent/index.5e872594.js";
|
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
3
|
import { useModuleDictionary } from "@m4l/core";
|
|
4
4
|
import "react";
|
|
5
|
-
import "../Icon/index.
|
|
5
|
+
import "../Icon/index.9fcd1476.js";
|
|
6
6
|
import "@mui/material";
|
|
7
7
|
import "clsx";
|
|
8
8
|
import "@m4l/graphics";
|
|
9
|
-
import { a as BOOLEAN_FORMATTER_DICTIONARY_KEY, b as BOOLEAN_FORMATTER_DICTIONARY_LABELS } from "./BooleanFormatter/index.
|
|
9
|
+
import { a as BOOLEAN_FORMATTER_DICTIONARY_KEY, b as BOOLEAN_FORMATTER_DICTIONARY_LABELS } from "./BooleanFormatter/index.e8de8e4c.js";
|
|
10
10
|
function getFormatConcatenated(values, separator) {
|
|
11
11
|
const returnSymbol = "";
|
|
12
12
|
if (values === null)
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import { useModuleDictionary, useModuleSkeleton } from "@m4l/core";
|
|
1
|
+
import { useModuleDictionary, useModuleSkeleton, useEnvironment } from "@m4l/core";
|
|
2
2
|
import { useFormContext, Controller } from "react-hook-form";
|
|
3
3
|
import { styled as styled$1, Skeleton, generateUtilityClasses, generateUtilityClass, Autocomplete, Popper, TextField, CircularProgress } from "@mui/material";
|
|
4
4
|
import { I as Image } from "../../Image/index.c18ebf5a.js";
|
|
5
|
-
import { useMemo, useState, useEffect } from "react";
|
|
5
|
+
import { useMemo, useRef, useState, useEffect } from "react";
|
|
6
6
|
import { T as TEST_PROP_ID } from "../../../test/constants_no_mock.86c553a9.js";
|
|
7
7
|
import { jsxs, jsx, Fragment } from "react/jsx-runtime";
|
|
8
8
|
import { T as Typography } from "../../mui_extended/Typography/index.443590d6.js";
|
|
9
|
-
import { H as HelperText } from "../../HelperText/index.
|
|
9
|
+
import { H as HelperText } from "../../HelperText/index.a019742c.js";
|
|
10
|
+
import { I as IconButton } from "../../mui_extended/IconButton/index.12f1a3c3.js";
|
|
10
11
|
import { styled } from "@mui/material/styles";
|
|
11
12
|
import "clsx";
|
|
12
13
|
import { unstable_composeClasses } from "@mui/base";
|
|
13
|
-
import "../../Icon/index.
|
|
14
|
-
import "../../mui_extended/IconButton/index.fc5b7c2d.js";
|
|
14
|
+
import "../../Icon/index.9fcd1476.js";
|
|
15
15
|
import "@m4l/graphics";
|
|
16
|
-
import "../../mui_extended/Accordion/index.
|
|
16
|
+
import "../../mui_extended/Accordion/index.9877f7bf.js";
|
|
17
17
|
import "../../mui_extended/Avatar/index.75e6ed57.js";
|
|
18
18
|
import "react-router-dom";
|
|
19
19
|
import "@mui/material/Button";
|
|
20
20
|
import "../../mui_extended/Button/index.4288f9fc.js";
|
|
21
21
|
import "../../mui_extended/Badge/index.8c2b8b66.js";
|
|
22
22
|
import "@mui/lab";
|
|
23
|
+
import "../../mui_extended/MenuActions/index.43a2e1ae.js";
|
|
23
24
|
import "../../mui_extended/Popover/index.9f35d0eb.js";
|
|
24
|
-
import "../../mui_extended/
|
|
25
|
-
import "../../mui_extended/
|
|
26
|
-
import "../../mui_extended/Tab/index.9e2f6e34.js";
|
|
25
|
+
import "../../mui_extended/Pager/index.2f6d6d7d.js";
|
|
26
|
+
import "../../mui_extended/Tab/index.7c82e43d.js";
|
|
27
27
|
import "../../mui_extended/Tooltip/index.5a795dcd.js";
|
|
28
28
|
const AutocompleteRoot = styled("div")(({
|
|
29
29
|
theme
|
|
@@ -207,6 +207,11 @@ function RHFAutocomplete(props) {
|
|
|
207
207
|
} = useModuleDictionary();
|
|
208
208
|
const isSkeleton = useModuleSkeleton();
|
|
209
209
|
const withImage = useMemo(() => getOptionUrlImage !== void 0, [getOptionUrlImage]);
|
|
210
|
+
const {
|
|
211
|
+
host_static_assets,
|
|
212
|
+
environment_assets
|
|
213
|
+
} = useEnvironment();
|
|
214
|
+
const autocompleteRef = useRef(null);
|
|
210
215
|
const [open, setOpen] = useState(false);
|
|
211
216
|
const onCloseLocal = (event, reason) => {
|
|
212
217
|
setOpen(false);
|
|
@@ -304,6 +309,7 @@ function RHFAutocomplete(props) {
|
|
|
304
309
|
}), /* @__PURE__ */ jsx(Autocomplete, {
|
|
305
310
|
onKeyDown: checkKeyDown,
|
|
306
311
|
autoComplete: true,
|
|
312
|
+
ref: autocompleteRef,
|
|
307
313
|
onFocus: handleFocus,
|
|
308
314
|
onBlur: handleBlur,
|
|
309
315
|
autoSelect: false,
|
|
@@ -336,6 +342,7 @@ function RHFAutocomplete(props) {
|
|
|
336
342
|
value: value || null,
|
|
337
343
|
onOpen: onOpenLocal,
|
|
338
344
|
onClose: onCloseLocal,
|
|
345
|
+
open,
|
|
339
346
|
onChange: (_e, val) => {
|
|
340
347
|
setInputValue(getOptionLabelLocal(val));
|
|
341
348
|
onChange(val);
|
|
@@ -366,11 +373,15 @@ function RHFAutocomplete(props) {
|
|
|
366
373
|
width: imageWidth,
|
|
367
374
|
height: imageHeight
|
|
368
375
|
}, "ImageTextField") : null,
|
|
369
|
-
endAdornment: /* @__PURE__ */
|
|
370
|
-
children:
|
|
376
|
+
endAdornment: /* @__PURE__ */ jsx(Fragment, {
|
|
377
|
+
children: loading ? /* @__PURE__ */ jsx(CircularProgress, {
|
|
371
378
|
color: "inherit",
|
|
372
379
|
size: 20
|
|
373
|
-
}) :
|
|
380
|
+
}) : /* @__PURE__ */ jsx(IconButton, {
|
|
381
|
+
src: `${host_static_assets}/${environment_assets}/frontend/components/RHFAutocompletarAsync/assets/icons/chevronRight.svg`,
|
|
382
|
+
onClick: (event) => onOpenLocal(event),
|
|
383
|
+
size: "small"
|
|
384
|
+
})
|
|
374
385
|
})
|
|
375
386
|
},
|
|
376
387
|
autoComplete: "off",
|
|
@@ -5,7 +5,7 @@ import { styled } from "@mui/material/styles";
|
|
|
5
5
|
import { generateUtilityClasses, generateUtilityClass } from "@mui/material";
|
|
6
6
|
import { unstable_composeClasses } from "@mui/base";
|
|
7
7
|
import { T as TEST_PROP_ID } from "../../../test/constants_no_mock.86c553a9.js";
|
|
8
|
-
import { R as RHFAutocomplete, g as getRHFAutocompleteComponentsDictionary } from "../RHFAutocomplete/index.
|
|
8
|
+
import { R as RHFAutocomplete, g as getRHFAutocompleteComponentsDictionary } from "../RHFAutocomplete/index.6aa51705.js";
|
|
9
9
|
import { jsx } from "react/jsx-runtime";
|
|
10
10
|
styled("div")(() => ({
|
|
11
11
|
display: "flex",
|
|
@@ -5,7 +5,7 @@ import { T as TEST_PROP_ID } from "../../../test/constants_no_mock.86c553a9.js";
|
|
|
5
5
|
import { jsxs, jsx, Fragment } from "react/jsx-runtime";
|
|
6
6
|
import { styled as styled$1 } from "@mui/material/styles";
|
|
7
7
|
import { unstable_composeClasses } from "@mui/base";
|
|
8
|
-
import { H as HelperText } from "../../HelperText/index.
|
|
8
|
+
import { H as HelperText } from "../../HelperText/index.a019742c.js";
|
|
9
9
|
import { T as Typography } from "../../mui_extended/Typography/index.443590d6.js";
|
|
10
10
|
const WrapperSkeletonCheckBox = styled("div")(() => ({
|
|
11
11
|
display: "flex",
|