@m4l/components 9.25.1-beta-feature-731-code-editor.1 → 9.25.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/@types/types.d.ts +0 -11
  2. package/components/MFIsolationApp/MFIsolationApp.d.ts.map +1 -1
  3. package/components/MFIsolationApp/MFIsolationApp.js +76 -80
  4. package/components/extended/index.d.ts +0 -1
  5. package/components/extended/index.d.ts.map +1 -1
  6. package/components/hook-form/index.d.ts +0 -1
  7. package/components/hook-form/index.d.ts.map +1 -1
  8. package/index.d.ts +1 -1
  9. package/index.d.ts.map +1 -1
  10. package/index.js +559 -572
  11. package/package.json +6 -9
  12. package/components/MFIsolationApp/subcomponents/ThemeSettingsHostToolsBridge/ThemeSettingsHostToolsBridge.d.ts +0 -5
  13. package/components/MFIsolationApp/subcomponents/ThemeSettingsHostToolsBridge/ThemeSettingsHostToolsBridge.d.ts.map +0 -1
  14. package/components/MFIsolationApp/subcomponents/ThemeSettingsHostToolsBridge/ThemeSettingsHostToolsBridge.js +0 -14
  15. package/components/MFIsolationApp/subcomponents/ThemeSettingsHostToolsBridge/index.d.ts +0 -2
  16. package/components/MFIsolationApp/subcomponents/ThemeSettingsHostToolsBridge/index.d.ts.map +0 -1
  17. package/components/extended/ReactSimpleCodeEditor/CodeEditor.d.ts +0 -6
  18. package/components/extended/ReactSimpleCodeEditor/CodeEditor.d.ts.map +0 -1
  19. package/components/extended/ReactSimpleCodeEditor/CodeEditor.js +0 -380
  20. package/components/extended/ReactSimpleCodeEditor/CodeEditor.styles.d.ts +0 -3
  21. package/components/extended/ReactSimpleCodeEditor/CodeEditor.styles.d.ts.map +0 -1
  22. package/components/extended/ReactSimpleCodeEditor/CodeEditor.styles.js +0 -344
  23. package/components/extended/ReactSimpleCodeEditor/constants.d.ts +0 -83
  24. package/components/extended/ReactSimpleCodeEditor/constants.d.ts.map +0 -1
  25. package/components/extended/ReactSimpleCodeEditor/constants.js +0 -149
  26. package/components/extended/ReactSimpleCodeEditor/dictionary.d.ts +0 -12
  27. package/components/extended/ReactSimpleCodeEditor/dictionary.d.ts.map +0 -1
  28. package/components/extended/ReactSimpleCodeEditor/dictionary.js +0 -8
  29. package/components/extended/ReactSimpleCodeEditor/helpers/highlighting.d.ts +0 -58
  30. package/components/extended/ReactSimpleCodeEditor/helpers/highlighting.d.ts.map +0 -1
  31. package/components/extended/ReactSimpleCodeEditor/helpers/highlighting.js +0 -1063
  32. package/components/extended/ReactSimpleCodeEditor/helpers/languageIcon.d.ts +0 -6
  33. package/components/extended/ReactSimpleCodeEditor/helpers/languageIcon.d.ts.map +0 -1
  34. package/components/extended/ReactSimpleCodeEditor/helpers/languageIcon.js +0 -7
  35. package/components/extended/ReactSimpleCodeEditor/helpers/resolveEditorComponent.d.ts +0 -6
  36. package/components/extended/ReactSimpleCodeEditor/helpers/resolveEditorComponent.d.ts.map +0 -1
  37. package/components/extended/ReactSimpleCodeEditor/helpers/resolveEditorComponent.js +0 -9
  38. package/components/extended/ReactSimpleCodeEditor/index.d.ts +0 -4
  39. package/components/extended/ReactSimpleCodeEditor/index.d.ts.map +0 -1
  40. package/components/extended/ReactSimpleCodeEditor/slots/CodeEditorEnum.d.ts +0 -20
  41. package/components/extended/ReactSimpleCodeEditor/slots/CodeEditorEnum.d.ts.map +0 -1
  42. package/components/extended/ReactSimpleCodeEditor/slots/CodeEditorEnum.js +0 -4
  43. package/components/extended/ReactSimpleCodeEditor/slots/CodeEditorSlots.d.ts +0 -90
  44. package/components/extended/ReactSimpleCodeEditor/slots/CodeEditorSlots.d.ts.map +0 -1
  45. package/components/extended/ReactSimpleCodeEditor/slots/CodeEditorSlots.js +0 -73
  46. package/components/extended/ReactSimpleCodeEditor/slots/index.d.ts +0 -3
  47. package/components/extended/ReactSimpleCodeEditor/slots/index.d.ts.map +0 -1
  48. package/components/extended/ReactSimpleCodeEditor/types.d.ts +0 -460
  49. package/components/extended/ReactSimpleCodeEditor/types.d.ts.map +0 -1
  50. package/components/hook-form/RHFCodeEditor/RHFCodeEditor.d.ts +0 -7
  51. package/components/hook-form/RHFCodeEditor/RHFCodeEditor.d.ts.map +0 -1
  52. package/components/hook-form/RHFCodeEditor/RHFCodeEditor.js +0 -6
  53. package/components/hook-form/RHFCodeEditor/index.d.ts +0 -3
  54. package/components/hook-form/RHFCodeEditor/index.d.ts.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@m4l/components",
3
- "version": "9.25.1-beta-feature-731-code-editor.1",
3
+ "version": "9.25.1",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -46,31 +46,28 @@
46
46
  "fast-equals": "5.4.0",
47
47
  "lodash-es": "4.17.23",
48
48
  "@textea/json-viewer": "4.0.1",
49
- "prismjs": "1.30.0",
50
- "prism-react-renderer": "2.4.1",
51
49
  "react-dom": "19.2.4",
52
50
  "react-helmet-async": "2.0.5",
53
51
  "@hookform/resolvers": "2.9.11",
54
52
  "nprogress": "0.2.0",
55
53
  "react-transition-group": "4.4.5",
56
54
  "@mui/x-date-pickers": "6.20.2",
57
- "react-color": "2.19.3",
58
- "react-draggable": "4.5.0",
59
55
  "react-rnd": "10.5.2",
56
+ "react-color": "2.19.3",
60
57
  "react-dropzone": "14.4.1",
61
- "react-spinners": "0.13.8",
62
58
  "date-fns": "2.30.0",
59
+ "react-spinners": "0.13.8",
60
+ "react-draggable": "4.5.0",
63
61
  "chart.js": "4.5.1",
64
62
  "chartjs-chart-error-bars": "4.4.5",
65
63
  "qrcode.react": "3.2.0",
66
- "simplebar-react": "3.2.6",
67
64
  "react-resizable-panels": "2.1.9",
68
- "react-simple-code-editor": "0.14.1",
65
+ "simplebar-react": "3.2.6",
69
66
  "react-data-grid": "7.0.0-beta.47",
70
67
  "react-dnd": "16.0.1",
71
68
  "react-dnd-html5-backend": "16.0.1",
72
- "react-window": "1.8.11",
73
69
  "react-resizable": "3.1.3",
70
+ "react-window": "1.8.11",
74
71
  "@tanstack/react-virtual": "3.13.23"
75
72
  }
76
73
  }
@@ -1,5 +0,0 @@
1
- /**
2
- * Register the isolation host-tools emitter inside the shared theme settings store.
3
- */
4
- export declare function ThemeSettingsHostToolsBridge(): null;
5
- //# sourceMappingURL=ThemeSettingsHostToolsBridge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ThemeSettingsHostToolsBridge.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/components/src/components/MFIsolationApp/subcomponents/ThemeSettingsHostToolsBridge/ThemeSettingsHostToolsBridge.tsx"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAgB,4BAA4B,SAe3C"}
@@ -1,14 +0,0 @@
1
- import { useEffect as s } from "react";
2
- import { useHostTools as r } from "@m4l/core";
3
- import { useThemeSettingsStore as i } from "@m4l/graphics";
4
- function f() {
5
- const { events_emit: e } = r(), t = i(
6
- (o) => o.settingsActions.registerHostToolsEventsEmit
7
- );
8
- return s(() => (t(e), () => {
9
- t(void 0);
10
- }), [e, t]), null;
11
- }
12
- export {
13
- f as ThemeSettingsHostToolsBridge
14
- };
@@ -1,2 +0,0 @@
1
- export { ThemeSettingsHostToolsBridge } from './ThemeSettingsHostToolsBridge';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/components/src/components/MFIsolationApp/subcomponents/ThemeSettingsHostToolsBridge/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC"}
@@ -1,6 +0,0 @@
1
- import { CodeEditorProps } from './types';
2
- /**
3
- * Render a syntax-highlighted code editor with optional self-managed fallback state.
4
- */
5
- export declare function CodeEditor(props: CodeEditorProps): import("@emotion/react/jsx-runtime").JSX.Element;
6
- //# sourceMappingURL=CodeEditor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CodeEditor.d.ts","sourceRoot":"","sources":["../../../../../../../packages/components/src/components/extended/ReactSimpleCodeEditor/CodeEditor.tsx"],"names":[],"mappings":"AA6DA,OAAO,KAAK,EAEV,eAAe,EAEhB,MAAM,SAAS,CAAC;AAmDjB;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,oDAmiBhD"}
@@ -1,380 +0,0 @@
1
- import { jsx as r, jsxs as A } from "@emotion/react/jsx-runtime";
2
- import { useHostTools as it, useModuleDictionary as lt, useModuleSkeleton as st, EmitEvents as be } from "@m4l/core";
3
- import B from "clsx";
4
- import { SettingsLimitOutlined as dt } from "@m4l/icons";
5
- import { useId as ut, useState as D, useRef as z, useMemo as I, useEffect as s, useCallback as v } from "react";
6
- import { useTheme as ct } from "@mui/material/styles";
7
- import { getPropDataTestId as N, getNameDataTestId as De } from "../../../test/getNameDataTestId.js";
8
- import { CODE_EDITOR_DEFAULT_MAX_LINES as gt, CODE_EDITOR_DEFAULT_MIN_LINES as mt, CODE_EDITOR_DEFAULT_LANGUAGE as ht, CODE_EDITOR_LINE_HEIGHT_BY_SIZE as Et, CODE_EDITOR_CLASSES as R, CODE_EDITOR_KEY_COMPONENT as m, CODE_EDITOR_TOGGLE_LINE_NUMBERS_LABEL as ft, CODE_EDITOR_READ_ONLY_LABEL as pt, CODE_EDITOR_PADDING_PX as Ie, CODE_EDITOR_LANGUAGE_CHIP_ICON_INSTANCE_ID as Lt } from "./constants.js";
9
- import { CODE_EDITOR_DICTIONARY as w } from "./dictionary.js";
10
- import { resolveCodeEditorLanguageIcon as Ct } from "./helpers/languageIcon.js";
11
- import { getCodeEditorLineCount as Tt, ensureCodeEditorRuntimeDependencies as yt, createCodeEditorPrismTheme as _t, resolveCodeEditorLanguageTemplate as St, validateCodeEditorSyntax as bt, highlightCode as Dt } from "./helpers/highlighting.js";
12
- import { SkeletonStyled as It, RootStyled as vt, HeaderStyled as Nt, LanguageChipStyled as Rt, LanguageChipIconStyled as Ot, LineNumbersToggleStyled as xt, HeaderBadgesStyled as Ht, ReadOnlyChipStyled as Mt, BodyResizeShellStyled as At, BodyStyled as Bt, LineNumbersStyled as zt, LineNumberStyled as wt, EditorScrollerStyled as Vt, PlaceholderStyled as Pt, EditorStyled as kt } from "./slots/CodeEditorSlots.js";
13
- import { CodeEditorSlots as h } from "./slots/CodeEditorEnum.js";
14
- function te(o) {
15
- return o === "dark" ? "dark" : "light";
16
- }
17
- function Gt(o, i) {
18
- return o.length !== i.length ? !1 : o.every((l, a) => l === i[a]);
19
- }
20
- function ve(o, i, l) {
21
- const a = l ? Ie : Ie * 2;
22
- return o * i + a;
23
- }
24
- function Ut(o, i, l) {
25
- return ve(o, i, l);
26
- }
27
- function nn(o) {
28
- const {
29
- className: i,
30
- customLanguages: l,
31
- dataTestId: a,
32
- defaultValue: Ne,
33
- disabled: d = !1,
34
- editorClassName: Re,
35
- error: Oe = !1,
36
- forceHeader: xe = !1,
37
- highlightTheme: ne,
38
- id: He,
39
- insertSpaces: Me,
40
- languageIcon: Ae,
41
- languageLabel: Be,
42
- languageTemplate: u,
43
- languageText: ze,
44
- maxLines: we = gt,
45
- minLines: O = mt,
46
- onBlur: Ve,
47
- onChange: V,
48
- placeholder: P,
49
- preClassName: Pe,
50
- readOnly: C = !1,
51
- readOnlyLabel: ke,
52
- resizable: E = !0,
53
- runtimeDependencies: T,
54
- showLineNumbers: k = !1,
55
- showPlaceholder: re = !0,
56
- size: oe = "medium",
57
- syntaxValidator: G,
58
- skeleton: Ge = !1,
59
- textareaClassName: Ue,
60
- validateSyntax: ae = !1,
61
- value: y,
62
- variant: Ye = "outlined",
63
- ...x
64
- } = o, Fe = ut(), $e = He || Fe, U = ct(), { events_add_listener: ie, events_remove_listener: le } = it(), { getLabel: se } = lt(), je = st() || Ge, _ = V === void 0, [Y, qe] = D(0), F = z([]), de = z(null), $ = z(!1), j = z(null), [q, ue] = D(
65
- () => te(U.palette.mode)
66
- ), [Xe, ce] = D(
67
- y ?? Ne ?? ""
68
- ), [H, ge] = D(k), [f, X] = D(null), me = I(() => T ? Array.isArray(T) ? T : [T] : [], [T]);
69
- Gt(
70
- F.current,
71
- me
72
- ) || (F.current = me);
73
- const K = F.current, c = _ ? Xe : y ?? "", Ke = re && c.length === 0 && !!P, Z = Et[oe], he = Tt(c), Ee = Math.max(he, O), J = Math.max(O, we), fe = Math.min(Ee, J), Q = he >= J, pe = ve(
74
- fe,
75
- Z,
76
- Q
77
- ), g = Ut(
78
- O,
79
- Z,
80
- Q
81
- ), Ze = E ? Math.max(f ?? pe, g) : pe;
82
- s(() => {
83
- _ && y !== void 0 && ce(y);
84
- }, [_, y]), s(() => {
85
- ge(k);
86
- }, [k]), s(() => {
87
- ue(te(U.palette.mode));
88
- }, [U.palette.mode]), s(() => {
89
- const e = (n) => {
90
- ue(te(n));
91
- };
92
- return ie(
93
- be.EMMIT_EVENT_HOST_THEME_CHANGE,
94
- e
95
- ), () => {
96
- le(
97
- be.EMMIT_EVENT_HOST_THEME_CHANGE,
98
- e
99
- );
100
- };
101
- }, [ie, le]), s(() => {
102
- if (!K.length)
103
- return;
104
- let e = !0;
105
- return yt(K).catch(() => {
106
- }).then(() => {
107
- e && qe((n) => n + 1);
108
- }), () => {
109
- e = !1;
110
- };
111
- }, [K]), s(() => {
112
- !E && f !== null && X(null);
113
- }, [f, E]), s(() => {
114
- f !== null && f < g && X(g);
115
- }, [f, g]), s(() => {
116
- const e = () => {
117
- if (!$.current)
118
- return;
119
- $.current = !1;
120
- const n = j.current;
121
- j.current = null;
122
- const M = de.current?.offsetHeight;
123
- n === null || M === void 0 || M === n || X(
124
- Math.max(Math.round(M), g)
125
- );
126
- };
127
- return window.addEventListener("pointerup", e), window.addEventListener("pointercancel", e), () => {
128
- window.removeEventListener("pointerup", e), window.removeEventListener("pointercancel", e);
129
- };
130
- }, [g]);
131
- const Le = I(
132
- () => ne ?? _t(q),
133
- [q, ne]
134
- ), p = I(
135
- () => St(u),
136
- [u, Y]
137
- ), S = ze ?? p?.languageText ?? ht, Ce = Be ?? p?.languageLabel, Te = !!Ce, Je = Ct(
138
- Ae ?? p?.languageIcon
139
- ), W = C ? se(w.readOnly) : void 0, Qe = ke ?? (W && W !== w.readOnly ? W : pt), ye = xe || Te || C, ee = ye ? se(w.toggleLineNumbers) : void 0, _e = ee && ee !== w.toggleLineNumbers ? ee : ft, b = I(() => {
140
- if (G)
141
- return G({
142
- code: c,
143
- languageTemplate: p ?? u,
144
- languageText: S
145
- });
146
- if (ae)
147
- return bt({
148
- code: c,
149
- languageTemplate: p ?? u,
150
- languageText: S
151
- });
152
- }, [
153
- u,
154
- p,
155
- S,
156
- c,
157
- Y,
158
- G,
159
- ae
160
- ]), Se = Oe || !!b && !b.isValid, L = b && !b.isValid ? b.errorRange : void 0, We = I(() => {
161
- if (!L)
162
- return /* @__PURE__ */ new Set();
163
- const e = L.start.line, n = L.end?.line ?? e;
164
- return new Set(
165
- Array.from(
166
- { length: Math.max(n - e + 1, 1) },
167
- (M, at) => e + at
168
- )
169
- );
170
- }, [L]), t = {
171
- colorMode: q,
172
- disabled: d,
173
- error: Se,
174
- isLineCapped: Q,
175
- isEmpty: c.length === 0,
176
- isPlaceholderVisible: Ke,
177
- lineHeight: Z,
178
- maxLines: J,
179
- minLines: O,
180
- readOnly: C,
181
- resizable: E,
182
- showLineNumbers: H,
183
- size: oe,
184
- variant: Ye,
185
- visibleLineCount: fe
186
- }, et = v(
187
- (e) => Dt({
188
- code: e,
189
- customLanguages: l,
190
- languageTemplate: u,
191
- languageText: S,
192
- prismTheme: Le,
193
- syntaxErrorRange: L
194
- }),
195
- [
196
- l,
197
- u,
198
- Le,
199
- S,
200
- Y,
201
- L
202
- ]
203
- ), tt = v(
204
- (e) => {
205
- _ && ce(e), V?.(e);
206
- },
207
- [V, _]
208
- ), nt = v(
209
- (e) => {
210
- if (!E || d)
211
- return;
212
- const { bottom: n } = e.currentTarget.getBoundingClientRect();
213
- n - e.clientY > 16 || ($.current = !0, j.current = e.currentTarget.offsetHeight);
214
- },
215
- [d, E]
216
- ), rt = v(
217
- (e) => {
218
- if (d || e.target instanceof Element && e.target.closest("textarea"))
219
- return;
220
- e.currentTarget.querySelector("textarea")?.focus();
221
- },
222
- [d]
223
- ), ot = v(() => {
224
- ge((e) => !e);
225
- }, []);
226
- return je ? /* @__PURE__ */ r(It, { ownerState: t }) : /* @__PURE__ */ A(
227
- vt,
228
- {
229
- ownerState: t,
230
- "aria-disabled": t.disabled || void 0,
231
- className: B(R.root, i),
232
- ...N(
233
- m,
234
- h.root,
235
- a
236
- ),
237
- children: [
238
- ye ? /* @__PURE__ */ A(
239
- Nt,
240
- {
241
- ownerState: t,
242
- className: R.header,
243
- children: [
244
- Te ? /* @__PURE__ */ r(
245
- Rt,
246
- {
247
- label: Ce,
248
- size: "small",
249
- variant: "outlined",
250
- color: "default",
251
- startIcon: /* @__PURE__ */ r(
252
- Ot,
253
- {
254
- ...N(
255
- m,
256
- h.languageChipIcon,
257
- Lt
258
- ),
259
- children: /* @__PURE__ */ r(Je, { fontSize: "small" })
260
- }
261
- )
262
- }
263
- ) : null,
264
- /* @__PURE__ */ r(
265
- xt,
266
- {
267
- "aria-label": _e,
268
- "aria-pressed": H,
269
- dataTestId: De(
270
- m,
271
- h.lineNumbersToggle,
272
- a
273
- ),
274
- disabled: d,
275
- icon: /* @__PURE__ */ r(dt, {}),
276
- onClick: ot,
277
- selected: H,
278
- size: "small",
279
- tooltip: _e,
280
- variant: "text"
281
- }
282
- ),
283
- /* @__PURE__ */ r(Ht, { ownerState: t, children: C ? /* @__PURE__ */ r(
284
- Mt,
285
- {
286
- label: Qe,
287
- size: "small"
288
- }
289
- ) : null })
290
- ]
291
- }
292
- ) : null,
293
- /* @__PURE__ */ r(
294
- At,
295
- {
296
- ref: de,
297
- ownerState: t,
298
- onPointerDown: nt,
299
- style: {
300
- height: `${Ze}px`,
301
- minHeight: `${g}px`
302
- },
303
- ...N(
304
- m,
305
- h.bodyResizeShell,
306
- a
307
- ),
308
- children: /* @__PURE__ */ A(
309
- Bt,
310
- {
311
- ownerState: t,
312
- onClick: rt,
313
- ...N(m, h.body, a),
314
- children: [
315
- H ? /* @__PURE__ */ r(zt, { ownerState: t, "aria-hidden": "true", children: Array.from({ length: Ee }, (e, n) => n + 1).map(
316
- (e) => /* @__PURE__ */ r(
317
- wt,
318
- {
319
- ownerState: t,
320
- "data-code-editor-error-line": We.has(e) || void 0,
321
- children: e
322
- },
323
- `code-editor-line-${e}`
324
- )
325
- ) }) : null,
326
- /* @__PURE__ */ A(Vt, { ownerState: t, children: [
327
- re && t.isEmpty && P ? /* @__PURE__ */ r(
328
- Pt,
329
- {
330
- ownerState: t,
331
- ...N(
332
- m,
333
- h.placeholder,
334
- a
335
- ),
336
- children: P
337
- }
338
- ) : null,
339
- /* @__PURE__ */ r(
340
- kt,
341
- {
342
- ...x,
343
- ownerState: t,
344
- "aria-label": x["aria-label"] ?? "Code editor",
345
- "aria-invalid": x["aria-invalid"] ?? (Se || void 0),
346
- className: B(R.editor, Re),
347
- "data-testid": De(
348
- m,
349
- h.textarea,
350
- a
351
- ),
352
- disabled: d,
353
- highlight: et,
354
- insertSpaces: Me,
355
- onBlur: Ve,
356
- onValueChange: tt,
357
- preClassName: B(R.pre, Pe),
358
- readOnly: C,
359
- tabSize: x.tabSize,
360
- textareaClassName: B(
361
- R.textarea,
362
- Ue
363
- ),
364
- textareaId: $e,
365
- value: c
366
- }
367
- )
368
- ] })
369
- ]
370
- }
371
- )
372
- }
373
- )
374
- ]
375
- }
376
- );
377
- }
378
- export {
379
- nn as CodeEditor
380
- };
@@ -1,3 +0,0 @@
1
- import { CodeEditorStyles } from './types';
2
- export declare const codeEditorStyles: CodeEditorStyles;
3
- //# sourceMappingURL=CodeEditor.styles.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CodeEditor.styles.d.ts","sourceRoot":"","sources":["../../../../../../../packages/components/src/components/extended/ReactSimpleCodeEditor/CodeEditor.styles.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAGhD,eAAO,MAAM,gBAAgB,EAAE,gBA2X9B,CAAC"}