@layers-app/shared 0.2.3 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/AppContainer/AppContainer.d.ts +1 -1
- package/dist/components/AppContainer/AppContainer.d.ts.map +1 -1
- package/dist/components/AppContainer/AppContainer.js +31 -23
- package/dist/components/AppContainer/hooks/useAppContainerStore.d.ts.map +1 -1
- package/dist/components/AppContainer/hooks/useAppContainerStore.js +12 -9
- package/dist/components/AppContainer/types.d.ts +1 -0
- package/dist/components/AppContainer/types.d.ts.map +1 -1
- package/dist/components/EmojiPicker/EmojiPanel.d.ts.map +1 -1
- package/dist/components/EmojiPicker/EmojiPanel.js +50 -49
- package/dist/components/EmojiPicker/IconsPanel.d.ts.map +1 -1
- package/dist/components/EmojiPicker/IconsPanel.js +79 -78
- package/dist/components/FilePicker/FilePicker.d.ts +2 -3
- package/dist/components/FilePicker/FilePicker.d.ts.map +1 -1
- package/dist/components/FilePicker/FilePicker.js +88 -122
- package/dist/components/FilePicker/FilePickerGiphy.d.ts +1 -3
- package/dist/components/FilePicker/FilePickerGiphy.d.ts.map +1 -1
- package/dist/components/FilePicker/FilePickerGiphy.js +43 -44
- package/dist/components/FilePicker/FilePickerLink.d.ts +2 -3
- package/dist/components/FilePicker/FilePickerLink.d.ts.map +1 -1
- package/dist/components/FilePicker/FilePickerLink.js +21 -21
- package/dist/components/FilePicker/FilePickerUnsplash.d.ts +1 -3
- package/dist/components/FilePicker/FilePickerUnsplash.d.ts.map +1 -1
- package/dist/components/FilePicker/FilePickerUnsplash.js +45 -46
- package/dist/components/FilePicker/FilePickerUpload.d.ts +3 -3
- package/dist/components/FilePicker/FilePickerUpload.d.ts.map +1 -1
- package/dist/components/FilePicker/FilePickerUpload.js +49 -43
- package/dist/components/NavMenu/components/NavMenuItem.d.ts.map +1 -1
- package/dist/components/NavMenu/components/NavMenuItem.js +6 -5
- package/dist/components/WorkspaceMenu/WorkspaceMenu.d.ts +2 -2
- package/dist/components/WorkspaceMenu/WorkspaceMenu.d.ts.map +1 -1
- package/dist/components/WorkspaceMenu/WorkspaceMenu.js +100 -103
- package/dist/lang/locales/ui_en.json.js +20 -12
- package/dist/lang/locales/ui_es.json.js +18 -10
- package/dist/lang/locales/ui_ru.json.js +24 -16
- package/package.json +1 -1
|
@@ -1,87 +1,87 @@
|
|
|
1
1
|
import { jsxs as m, jsx as e } from "react/jsx-runtime";
|
|
2
|
-
import { memo as
|
|
3
|
-
import { useTranslation as
|
|
4
|
-
import { Search01Icon as
|
|
2
|
+
import { memo as q, useState as x, useEffect as B, useCallback as M, useMemo as U } from "react";
|
|
3
|
+
import { useTranslation as V } from "react-i18next";
|
|
4
|
+
import { Search01Icon as G, ShuffleIcon as Q } from "@hugeicons/core-free-icons";
|
|
5
5
|
import { HugeiconsIcon as L } from "@hugeicons/react";
|
|
6
|
-
import { useMantineTheme as
|
|
6
|
+
import { useMantineTheme as Y, parseThemeColor as _, darken as J, Stack as y, Text as b, Flex as z, FocusTrap as K, TextInput as W, Tooltip as X, ActionIcon as Z, Box as ee, Paper as D, SimpleGrid as E } from "@mantine/core";
|
|
7
7
|
import { useEvent as oe } from "draggable-ui";
|
|
8
|
-
import { groupBy as
|
|
9
|
-
import { DEFAULT_VALUES as
|
|
8
|
+
import { groupBy as te } from "lodash-es";
|
|
9
|
+
import { DEFAULT_VALUES as re } from "../../constants.js";
|
|
10
10
|
import { ColorPicker as ie } from "../ColorPicker/ColorPicker.js";
|
|
11
11
|
import { NoData as ne } from "../NoData/NoData.js";
|
|
12
|
-
import { IconEntity as
|
|
13
|
-
import { customIcons as
|
|
12
|
+
import { IconEntity as w, IconType as N } from "../ProjectIcon/ProjectIcon.js";
|
|
13
|
+
import { customIcons as A } from "./custom-icons/customIcons.js";
|
|
14
14
|
import { getIconsList as F } from "./getIconsList.js";
|
|
15
15
|
import { getRandomIcon as ce } from "./getRandomIcon.js";
|
|
16
16
|
import h from "./EmojiPicker.module.css.js";
|
|
17
17
|
async function ae(c, a, l = 500) {
|
|
18
|
-
const u = [],
|
|
19
|
-
for (let
|
|
20
|
-
const
|
|
21
|
-
u.push(...
|
|
18
|
+
const u = [], f = c.length;
|
|
19
|
+
for (let r = 0; r < f; r += l) {
|
|
20
|
+
const p = c.slice(r, r + l).filter(a);
|
|
21
|
+
u.push(...p), await new Promise((I) => setTimeout(I, 0));
|
|
22
22
|
}
|
|
23
23
|
return u;
|
|
24
24
|
}
|
|
25
|
-
const Ce =
|
|
25
|
+
const Ce = q(
|
|
26
26
|
({
|
|
27
27
|
showColors: c,
|
|
28
28
|
locales: a,
|
|
29
29
|
onChange: l,
|
|
30
30
|
value: u,
|
|
31
|
-
onClose:
|
|
32
|
-
project:
|
|
31
|
+
onClose: f,
|
|
32
|
+
project: r
|
|
33
33
|
}) => {
|
|
34
|
-
const C =
|
|
34
|
+
const C = Y(), [p, I] = x(""), { t: k } = V("ui"), [R, P] = x(
|
|
35
35
|
[]
|
|
36
36
|
);
|
|
37
|
-
|
|
37
|
+
B(() => {
|
|
38
38
|
(async () => {
|
|
39
|
-
const
|
|
39
|
+
const t = await F(r), s = te(t, "c");
|
|
40
40
|
P(
|
|
41
|
-
Object.entries(s).map((
|
|
42
|
-
id:
|
|
43
|
-
icons:
|
|
41
|
+
Object.entries(s).map((v) => ({
|
|
42
|
+
id: v[0],
|
|
43
|
+
icons: v[1].map((d) => d.n)
|
|
44
44
|
}))
|
|
45
45
|
);
|
|
46
46
|
})();
|
|
47
|
-
}, [
|
|
48
|
-
const [T, S] =
|
|
47
|
+
}, [r]);
|
|
48
|
+
const [T, S] = x([]), $ = M(
|
|
49
49
|
async (o) => {
|
|
50
|
-
const
|
|
51
|
-
I(
|
|
52
|
-
const s = await F(
|
|
50
|
+
const t = o.currentTarget.value;
|
|
51
|
+
I(t);
|
|
52
|
+
const s = await F(r), v = await ae(
|
|
53
53
|
s,
|
|
54
|
-
(d) => d.t.split(",").some((
|
|
54
|
+
(d) => d.t.split(",").some((j) => t.includes(String(j))) || d.n.includes(t),
|
|
55
55
|
500
|
|
56
56
|
);
|
|
57
|
-
S(
|
|
57
|
+
S(v.map((d) => d.n));
|
|
58
58
|
},
|
|
59
|
-
[
|
|
60
|
-
), i =
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
icon:
|
|
59
|
+
[r]
|
|
60
|
+
), i = w.parse(u), g = oe((o) => {
|
|
61
|
+
const t = o.currentTarget.getAttribute("data-icon");
|
|
62
|
+
t && (l?.(
|
|
63
|
+
w.stringify({
|
|
64
|
+
icon: t.replace("i:", ""),
|
|
65
65
|
color: i?.color,
|
|
66
|
-
type:
|
|
66
|
+
type: N.FILLED
|
|
67
67
|
})
|
|
68
|
-
), c ||
|
|
69
|
-
}), n =
|
|
70
|
-
color: i?.color ||
|
|
68
|
+
), c || f());
|
|
69
|
+
}), n = _({
|
|
70
|
+
color: i?.color || re.COLORS[0],
|
|
71
71
|
theme: C
|
|
72
|
-
}), H =
|
|
72
|
+
}), H = U(() => n.isThemeColor ? {
|
|
73
73
|
"--icon-color": `var(--mantine-color-${n.color}-filled)`,
|
|
74
74
|
"--icon-color-hover": `var(--mantine-color-${n.color}-filled-hover)`
|
|
75
75
|
} : {
|
|
76
76
|
"--icon-color": n.value,
|
|
77
77
|
"--icon-color-hover": J(n.value, 0.2)
|
|
78
78
|
}, [n]), O = async () => {
|
|
79
|
-
const o = await ce(
|
|
80
|
-
S([]), l?.(
|
|
79
|
+
const o = await ce(r);
|
|
80
|
+
S([]), l?.(w.stringify({ icon: o, color: i?.color })), c || f();
|
|
81
81
|
};
|
|
82
|
-
return /* @__PURE__ */ m(
|
|
83
|
-
c && /* @__PURE__ */ m(
|
|
84
|
-
/* @__PURE__ */ e(b, { lh: "140%", fw: 500, c: "dimmed", fz: "xs", children: a?.chooseColor ||
|
|
82
|
+
return /* @__PURE__ */ m(y, { w: "100%", gap: "sm", pt: 12, pb: 8, h: "100%", children: [
|
|
83
|
+
c && /* @__PURE__ */ m(y, { gap: 4, px: 8, w: "100%", children: [
|
|
84
|
+
/* @__PURE__ */ e(b, { lh: "140%", fw: 500, c: "dimmed", fz: "xs", children: a?.chooseColor || k("chooseColor") }),
|
|
85
85
|
/* @__PURE__ */ e(
|
|
86
86
|
ie,
|
|
87
87
|
{
|
|
@@ -89,10 +89,10 @@ const Ce = B(
|
|
|
89
89
|
gap: 4,
|
|
90
90
|
value: n.color,
|
|
91
91
|
onChange: (o) => l?.(
|
|
92
|
-
|
|
92
|
+
w.stringify({
|
|
93
93
|
color: o,
|
|
94
94
|
icon: i?.icon,
|
|
95
|
-
type:
|
|
95
|
+
type: N.FILLED
|
|
96
96
|
})
|
|
97
97
|
),
|
|
98
98
|
colors: [
|
|
@@ -111,12 +111,12 @@ const Ce = B(
|
|
|
111
111
|
n.color
|
|
112
112
|
)
|
|
113
113
|
] }),
|
|
114
|
-
/* @__PURE__ */ m(
|
|
115
|
-
/* @__PURE__ */ e(
|
|
116
|
-
|
|
114
|
+
/* @__PURE__ */ m(z, { w: "100%", justify: "space-between", gap: 4, px: 8, h: 38, children: [
|
|
115
|
+
/* @__PURE__ */ e(K, { active: !0, children: /* @__PURE__ */ e(
|
|
116
|
+
W,
|
|
117
117
|
{
|
|
118
|
-
leftSection: /* @__PURE__ */ e(L, { size: 16, icon:
|
|
119
|
-
value:
|
|
118
|
+
leftSection: /* @__PURE__ */ e(L, { size: 16, icon: G }),
|
|
119
|
+
value: p,
|
|
120
120
|
placeholder: `${a?.search}...`,
|
|
121
121
|
"data-autofocus": !0,
|
|
122
122
|
styles: {
|
|
@@ -130,8 +130,8 @@ const Ce = B(
|
|
|
130
130
|
radius: "var(--mantine-radius-default)"
|
|
131
131
|
}
|
|
132
132
|
) }),
|
|
133
|
-
/* @__PURE__ */ e(
|
|
134
|
-
|
|
133
|
+
/* @__PURE__ */ e(X, { withArrow: !0, label: k("random"), children: /* @__PURE__ */ e(
|
|
134
|
+
Z,
|
|
135
135
|
{
|
|
136
136
|
h: 36,
|
|
137
137
|
w: 36,
|
|
@@ -144,23 +144,23 @@ const Ce = B(
|
|
|
144
144
|
{
|
|
145
145
|
color: "var(--mantine-color-default-color)",
|
|
146
146
|
size: 20,
|
|
147
|
-
icon:
|
|
147
|
+
icon: Q
|
|
148
148
|
}
|
|
149
149
|
)
|
|
150
150
|
}
|
|
151
151
|
) })
|
|
152
152
|
] }),
|
|
153
|
-
/* @__PURE__ */ e(
|
|
154
|
-
|
|
153
|
+
/* @__PURE__ */ e(ee, { pl: 8, style: H, children: /* @__PURE__ */ e(
|
|
154
|
+
y,
|
|
155
155
|
{
|
|
156
156
|
h: "210px",
|
|
157
157
|
style: {
|
|
158
158
|
overflowY: "auto"
|
|
159
159
|
},
|
|
160
160
|
gap: 16,
|
|
161
|
-
children:
|
|
161
|
+
children: p ? /* @__PURE__ */ m(y, { flex: 1, justify: "center", align: "stretch", children: [
|
|
162
162
|
/* @__PURE__ */ e(
|
|
163
|
-
|
|
163
|
+
D,
|
|
164
164
|
{
|
|
165
165
|
py: 6,
|
|
166
166
|
pos: "sticky",
|
|
@@ -170,16 +170,16 @@ const Ce = B(
|
|
|
170
170
|
children: /* @__PURE__ */ e(b, { fz: "xs", fw: 500, lh: "140%", c: "dimmed", children: a?.searchResults })
|
|
171
171
|
}
|
|
172
172
|
),
|
|
173
|
-
T.length ? /* @__PURE__ */ e(
|
|
174
|
-
const
|
|
175
|
-
return
|
|
173
|
+
T.length ? /* @__PURE__ */ e(E, { cols: 8, spacing: 0, children: T.map((o) => {
|
|
174
|
+
const t = A[o];
|
|
175
|
+
return t ? /* @__PURE__ */ e(
|
|
176
176
|
"div",
|
|
177
177
|
{
|
|
178
178
|
className: h.item,
|
|
179
179
|
"data-icon": o,
|
|
180
180
|
"data-active": o === i?.icon,
|
|
181
|
-
onClick:
|
|
182
|
-
children: /* @__PURE__ */ e(
|
|
181
|
+
onClick: g,
|
|
182
|
+
children: /* @__PURE__ */ e(t, {})
|
|
183
183
|
},
|
|
184
184
|
o
|
|
185
185
|
) : /* @__PURE__ */ e(
|
|
@@ -188,7 +188,7 @@ const Ce = B(
|
|
|
188
188
|
className: h.item,
|
|
189
189
|
"data-icon": o,
|
|
190
190
|
"data-active": o === i?.icon,
|
|
191
|
-
onClick:
|
|
191
|
+
onClick: g,
|
|
192
192
|
children: /* @__PURE__ */ e("svg", { width: "1em", height: "1em", children: /* @__PURE__ */ e(
|
|
193
193
|
"use",
|
|
194
194
|
{
|
|
@@ -198,9 +198,10 @@ const Ce = B(
|
|
|
198
198
|
},
|
|
199
199
|
o
|
|
200
200
|
);
|
|
201
|
-
}) }) : /* @__PURE__ */ e(z, {
|
|
201
|
+
}) }) : /* @__PURE__ */ e(z, { flex: 1, justify: "center", align: "stretch", children: /* @__PURE__ */ e(
|
|
202
202
|
ne,
|
|
203
203
|
{
|
|
204
|
+
showDots: !1,
|
|
204
205
|
size: 100,
|
|
205
206
|
description: a?.searchNoResults,
|
|
206
207
|
descriptionProps: {
|
|
@@ -210,25 +211,25 @@ const Ce = B(
|
|
|
210
211
|
) })
|
|
211
212
|
] }) : R.map((o) => /* @__PURE__ */ m("div", { children: [
|
|
212
213
|
/* @__PURE__ */ e(
|
|
213
|
-
|
|
214
|
+
D,
|
|
214
215
|
{
|
|
215
216
|
bg: "light-dark(var(--mantine-color-white), var(--mantine-color-dark-6))",
|
|
216
217
|
py: 6,
|
|
217
218
|
pos: "sticky",
|
|
218
219
|
top: -1,
|
|
219
220
|
style: { zIndex: 1 },
|
|
220
|
-
children: /* @__PURE__ */ e(b, { fz: "xs", fw: 500, lh: "140%", c: "dimmed", children: o.id ||
|
|
221
|
+
children: /* @__PURE__ */ e(b, { fz: "xs", fw: 500, lh: "140%", c: "dimmed", children: o.id || k("noCat") })
|
|
221
222
|
}
|
|
222
223
|
),
|
|
223
|
-
/* @__PURE__ */ e(
|
|
224
|
-
const s =
|
|
224
|
+
/* @__PURE__ */ e(E, { cols: 10, spacing: 0, children: o.icons.map((t) => {
|
|
225
|
+
const s = A[t];
|
|
225
226
|
return s ? /* @__PURE__ */ e(
|
|
226
227
|
"div",
|
|
227
228
|
{
|
|
228
229
|
className: h.item,
|
|
229
|
-
"data-icon":
|
|
230
|
-
"data-active":
|
|
231
|
-
onClick:
|
|
230
|
+
"data-icon": t,
|
|
231
|
+
"data-active": t === i?.icon,
|
|
232
|
+
onClick: g,
|
|
232
233
|
children: /* @__PURE__ */ e(
|
|
233
234
|
s,
|
|
234
235
|
{
|
|
@@ -238,22 +239,22 @@ const Ce = B(
|
|
|
238
239
|
}
|
|
239
240
|
)
|
|
240
241
|
},
|
|
241
|
-
|
|
242
|
+
t
|
|
242
243
|
) : /* @__PURE__ */ e(
|
|
243
244
|
"div",
|
|
244
245
|
{
|
|
245
246
|
className: h.item,
|
|
246
|
-
"data-icon":
|
|
247
|
-
"data-active":
|
|
248
|
-
onClick:
|
|
247
|
+
"data-icon": t,
|
|
248
|
+
"data-active": t === i?.icon,
|
|
249
|
+
onClick: g,
|
|
249
250
|
children: /* @__PURE__ */ e("svg", { width: "1em", height: "1em", children: /* @__PURE__ */ e(
|
|
250
251
|
"use",
|
|
251
252
|
{
|
|
252
|
-
xlinkHref: `/tabler-sprite-filled.svg#tabler-filled-${
|
|
253
|
+
xlinkHref: `/tabler-sprite-filled.svg#tabler-filled-${t}`
|
|
253
254
|
}
|
|
254
255
|
) })
|
|
255
256
|
},
|
|
256
|
-
|
|
257
|
+
t
|
|
257
258
|
);
|
|
258
259
|
}) })
|
|
259
260
|
] }, o.id))
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { PropsWithChildren } from 'react';
|
|
2
2
|
import { FlexProps, FloatingPosition, PopoverProps } from '@mantine/core';
|
|
3
3
|
import { DropzoneProps, FileWithPath } from '@mantine/dropzone';
|
|
4
|
-
import {
|
|
4
|
+
import { FileType, ImagePickerGalleryCollection } from './types';
|
|
5
5
|
declare const baseTabsList: readonly ["gallery", "upload", "link", "unsplash", "giphy"];
|
|
6
6
|
type TabType = (typeof baseTabsList)[number];
|
|
7
7
|
export type FilePickerProps = PropsWithChildren<{
|
|
@@ -19,12 +19,11 @@ export type FilePickerProps = PropsWithChildren<{
|
|
|
19
19
|
galleryCollection?: ImagePickerGalleryCollection[];
|
|
20
20
|
popoverProps?: PopoverProps;
|
|
21
21
|
dropZoneProps?: Omit<DropzoneProps, 'onDrop'>;
|
|
22
|
-
locales?: FilePickerLocales;
|
|
23
22
|
type?: FileType;
|
|
24
23
|
isValidMediaUrl?: (url: string) => boolean;
|
|
25
24
|
targetProps?: FlexProps;
|
|
26
25
|
onOpenedChange?: (opened: boolean) => void;
|
|
27
26
|
}>;
|
|
28
|
-
export declare const FilePicker: ({ onChange, onRemove, onUpload, uploading, showTabs, children, width, position, readOnly, hasImage, giphyToken, unsplashClientId, type, galleryCollection, isValidMediaUrl, popoverProps, dropZoneProps, targetProps, onOpenedChange,
|
|
27
|
+
export declare const FilePicker: ({ onChange, onRemove, onUpload, uploading, showTabs, children, width, position, readOnly, hasImage, giphyToken, unsplashClientId, type, galleryCollection, isValidMediaUrl, popoverProps, dropZoneProps, targetProps, onOpenedChange, }: PropsWithChildren<FilePickerProps>) => import("react/jsx-runtime").JSX.Element;
|
|
29
28
|
export {};
|
|
30
29
|
//# sourceMappingURL=FilePicker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilePicker.d.ts","sourceRoot":"","sources":["../../../src/components/FilePicker/FilePicker.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAqB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"FilePicker.d.ts","sourceRoot":"","sources":["../../../src/components/FilePicker/FilePicker.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAqB,MAAM,OAAO,CAAC;AAK7D,OAAO,EAIL,SAAS,EACT,gBAAgB,EAEhB,YAAY,EAIb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAQhE,OAAO,EAAE,QAAQ,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AAIjE,QAAA,MAAM,YAAY,6DAMR,CAAC;AAEX,KAAK,OAAO,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7C,MAAM,MAAM,eAAe,GAAG,iBAAiB,CAAC;IAC9C,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IAC5D,QAAQ,CAAC,EAAE,CACT,KAAK,EAAE,YAAY,EAAE,EACrB,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,KAChC,IAAI,CAAC;IACV,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,4BAA4B,EAAE,CAAC;IACnD,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,aAAa,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3C,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C,CAAC,CAAC;AAEH,eAAO,MAAM,UAAU,GAAI,yOAoBxB,iBAAiB,CAAC,eAAe,CAAC,4CA4MpC,CAAC"}
|