@rakun-kit/react 1.6.0 → 1.7.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.
package/README.md CHANGED
@@ -7,6 +7,12 @@ development and manager UI. `JsonViewer` provides the shared collapsible JSON
7
7
  tree used by Rakun debugging interfaces; use `defaultExpandedDepth={-1}` when
8
8
  the root should start collapsed.
9
9
 
10
+ `@rakun-kit/react/devtools` exports the shared `RakunDevToolbar` client component
11
+ used by framework adapters for development-only route and module inspection.
12
+ Adapters provide its module metadata and DOM instrumentation; applications
13
+ normally receive it through the Bun or Next integration instead of mounting it
14
+ directly.
15
+
10
16
  Apps provide a module registry, so framework adapters stay open:
11
17
 
12
18
  ```tsx
@@ -0,0 +1,324 @@
1
+ "use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.RakunDevToolbar = RakunDevToolbar;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const react_1 = require("react");
7
+ const JsonViewer_1 = require("./JsonViewer.js");
8
+ const RakunLogo_1 = require("./RakunLogo.js");
9
+ const moduleSelector = '[data-rakun-module]';
10
+ const colors = {
11
+ background: 'rgba(17, 20, 24, 0.97)',
12
+ backgroundSoft: 'rgba(255, 255, 255, 0.06)',
13
+ border: 'rgba(255, 255, 255, 0.14)',
14
+ foreground: '#f7f8f8',
15
+ muted: '#a7adb5',
16
+ accent: '#49d17d',
17
+ accentSoft: 'rgba(73, 209, 125, 0.14)',
18
+ };
19
+ const toolbarStyle = {
20
+ position: 'fixed',
21
+ zIndex: 2147483646,
22
+ right: 16,
23
+ bottom: 16,
24
+ width: 'min(760px, calc(100vw - 32px))',
25
+ overflow: 'hidden',
26
+ border: `1px solid ${colors.border}`,
27
+ borderRadius: 12,
28
+ background: colors.background,
29
+ color: colors.foreground,
30
+ boxShadow: '0 18px 60px rgba(0, 0, 0, 0.38)',
31
+ fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, monospace',
32
+ fontSize: 12,
33
+ lineHeight: 1.45,
34
+ };
35
+ const launcherStyle = {
36
+ position: 'fixed',
37
+ zIndex: 2147483646,
38
+ right: 16,
39
+ bottom: 16,
40
+ display: 'grid',
41
+ placeItems: 'center',
42
+ width: 46,
43
+ height: 46,
44
+ padding: 10,
45
+ border: `1px solid ${colors.border}`,
46
+ borderRadius: 14,
47
+ background: colors.background,
48
+ color: colors.accent,
49
+ boxShadow: '0 12px 36px rgba(0, 0, 0, 0.34)',
50
+ cursor: 'pointer',
51
+ transition: 'background 140ms ease, border-color 140ms ease, transform 140ms ease',
52
+ };
53
+ const buttonStyle = {
54
+ border: `1px solid ${colors.border}`,
55
+ borderRadius: 7,
56
+ background: colors.backgroundSoft,
57
+ color: colors.foreground,
58
+ padding: '5px 8px',
59
+ font: 'inherit',
60
+ cursor: 'pointer',
61
+ transition: 'background 140ms ease, border-color 140ms ease, color 140ms ease',
62
+ };
63
+ const toolbarCss = `
64
+ @keyframes rakun-dev-toolbar-open {
65
+ from { opacity: 0; transform: translateY(12px) scale(0.97); }
66
+ to { opacity: 1; transform: translateY(0) scale(1); }
67
+ }
68
+
69
+ @keyframes rakun-dev-toolbar-close {
70
+ from { opacity: 1; transform: translateY(0) scale(1); }
71
+ to { opacity: 0; transform: translateY(12px) scale(0.97); }
72
+ }
73
+
74
+ @keyframes rakun-dev-toolbar-launcher-open {
75
+ from { opacity: 0; transform: translateY(8px) scale(0.86); }
76
+ to { opacity: 1; transform: translateY(0) scale(1); }
77
+ }
78
+
79
+ .rakun-dev-toolbar-panel {
80
+ transform-origin: bottom right;
81
+ animation: rakun-dev-toolbar-open 180ms cubic-bezier(0.2, 0.8, 0.2, 1);
82
+ }
83
+
84
+ .rakun-dev-toolbar-panel-closing {
85
+ pointer-events: none;
86
+ animation: rakun-dev-toolbar-close 150ms ease-in forwards;
87
+ }
88
+
89
+ .rakun-dev-toolbar-launcher {
90
+ transform-origin: bottom right;
91
+ animation: rakun-dev-toolbar-launcher-open 160ms cubic-bezier(0.2, 0.8, 0.2, 1);
92
+ }
93
+
94
+ .rakun-dev-toolbar-launcher:hover {
95
+ background: rgba(29, 35, 41, 0.98) !important;
96
+ border-color: ${colors.accent} !important;
97
+ transform: translateY(-2px);
98
+ }
99
+
100
+ .rakun-dev-toolbar-action:hover,
101
+ .rakun-dev-toolbar-module:hover {
102
+ background: ${colors.accentSoft} !important;
103
+ border-color: rgba(73, 209, 125, 0.62) !important;
104
+ color: ${colors.accent} !important;
105
+ }
106
+
107
+ .rakun-dev-toolbar-launcher:focus-visible,
108
+ .rakun-dev-toolbar-action:focus-visible,
109
+ .rakun-dev-toolbar-module:focus-visible {
110
+ outline: 2px solid ${colors.accent};
111
+ outline-offset: 2px;
112
+ }
113
+
114
+ @media (prefers-reduced-motion: reduce) {
115
+ .rakun-dev-toolbar-panel,
116
+ .rakun-dev-toolbar-panel-closing,
117
+ .rakun-dev-toolbar-launcher {
118
+ animation: none;
119
+ }
120
+
121
+ .rakun-dev-toolbar-launcher,
122
+ .rakun-dev-toolbar-action,
123
+ .rakun-dev-toolbar-module {
124
+ transition: none !important;
125
+ }
126
+ }
127
+ `;
128
+ const getVisibleRects = (elements) => {
129
+ const visible = (rect) => rect.width > 0 && rect.height > 0;
130
+ return elements.flatMap((element) => {
131
+ const ownRects = Array.from(element.getClientRects()).filter(visible);
132
+ if (ownRects.length > 0)
133
+ return ownRects;
134
+ return Array.from(element.children).flatMap((child) => Array.from(child.getClientRects()).filter(visible));
135
+ });
136
+ };
137
+ const getHighlightRect = (elements) => {
138
+ const rects = getVisibleRects(elements);
139
+ if (rects.length === 0)
140
+ return null;
141
+ const bounds = rects.reduce((current, rect) => ({
142
+ top: Math.min(current.top, rect.top),
143
+ right: Math.max(current.right, rect.right),
144
+ bottom: Math.max(current.bottom, rect.bottom),
145
+ left: Math.min(current.left, rect.left),
146
+ }), {
147
+ top: rects[0].top,
148
+ right: rects[0].right,
149
+ bottom: rects[0].bottom,
150
+ left: rects[0].left,
151
+ });
152
+ return {
153
+ top: Math.max(0, bounds.top),
154
+ left: Math.max(0, bounds.left),
155
+ width: Math.max(0, Math.min(window.innerWidth, bounds.right) - Math.max(0, bounds.left)),
156
+ height: Math.max(0, Math.min(window.innerHeight, bounds.bottom) - Math.max(0, bounds.top)),
157
+ };
158
+ };
159
+ const getModuleElements = (index) => Array.from(document.querySelectorAll(`${moduleSelector}[data-rakun-index="${index}"]`));
160
+ const getModuleIndex = (element) => {
161
+ const value = Number(element.dataset.rakunIndex);
162
+ return Number.isFinite(value) ? value : null;
163
+ };
164
+ function RakunDevToolbar({ modules, renderMode, language, documentType, documentId, editHref, initialOpen = false, }) {
165
+ const [open, setOpen] = (0, react_1.useState)(initialOpen);
166
+ const [hidden, setHidden] = (0, react_1.useState)(false);
167
+ const [closing, setClosing] = (0, react_1.useState)(null);
168
+ const [inspect, setInspect] = (0, react_1.useState)(false);
169
+ const [selectedIndex, setSelectedIndex] = (0, react_1.useState)(null);
170
+ const [hoveredIndex, setHoveredIndex] = (0, react_1.useState)(null);
171
+ const [highlight, setHighlight] = (0, react_1.useState)(null);
172
+ const [pathname, setPathname] = (0, react_1.useState)('/');
173
+ const closeTimer = (0, react_1.useRef)(null);
174
+ const activeIndex = open && !closing ? (hoveredIndex ?? selectedIndex) : null;
175
+ const selected = (0, react_1.useMemo)(() => modules.find((entry) => entry.index === selectedIndex), [modules, selectedIndex]);
176
+ (0, react_1.useEffect)(() => {
177
+ setPathname(`${window.location.pathname}${window.location.search}`);
178
+ return () => {
179
+ if (closeTimer.current)
180
+ clearTimeout(closeTimer.current);
181
+ };
182
+ }, []);
183
+ const updateHighlight = (0, react_1.useCallback)(() => {
184
+ setHighlight(activeIndex === null ? null : getHighlightRect(getModuleElements(activeIndex)));
185
+ }, [activeIndex]);
186
+ (0, react_1.useEffect)(() => {
187
+ updateHighlight();
188
+ window.addEventListener('resize', updateHighlight);
189
+ window.addEventListener('scroll', updateHighlight, true);
190
+ return () => {
191
+ window.removeEventListener('resize', updateHighlight);
192
+ window.removeEventListener('scroll', updateHighlight, true);
193
+ };
194
+ }, [updateHighlight]);
195
+ (0, react_1.useEffect)(() => {
196
+ if (!inspect) {
197
+ setHoveredIndex(null);
198
+ return;
199
+ }
200
+ const previousCursor = document.body.style.cursor;
201
+ document.body.style.cursor = 'crosshair';
202
+ const onPointerMove = (event) => {
203
+ const target = event.target instanceof Element ? event.target : null;
204
+ if (!target || target.closest('[data-rakun-dev-toolbar]')) {
205
+ setHoveredIndex(null);
206
+ return;
207
+ }
208
+ const moduleElement = target.closest(moduleSelector);
209
+ setHoveredIndex(moduleElement ? getModuleIndex(moduleElement) : null);
210
+ };
211
+ const onClick = (event) => {
212
+ const target = event.target instanceof Element ? event.target : null;
213
+ if (!target || target.closest('[data-rakun-dev-toolbar]'))
214
+ return;
215
+ const moduleElement = target.closest(moduleSelector);
216
+ if (!moduleElement)
217
+ return;
218
+ const index = getModuleIndex(moduleElement);
219
+ if (index === null)
220
+ return;
221
+ event.preventDefault();
222
+ event.stopPropagation();
223
+ setSelectedIndex(index);
224
+ setInspect(false);
225
+ setOpen(true);
226
+ };
227
+ document.addEventListener('mousemove', onPointerMove, true);
228
+ document.addEventListener('click', onClick, true);
229
+ return () => {
230
+ document.body.style.cursor = previousCursor;
231
+ document.removeEventListener('mousemove', onPointerMove, true);
232
+ document.removeEventListener('click', onClick, true);
233
+ };
234
+ }, [inspect]);
235
+ const selectModule = (entry) => {
236
+ setSelectedIndex(entry.index);
237
+ setOpen(true);
238
+ const element = getModuleElements(entry.index)[0];
239
+ const scrollTarget = element?.firstElementChild ?? element;
240
+ scrollTarget?.scrollIntoView({ behavior: 'smooth', block: 'center' });
241
+ };
242
+ const closeToolbar = (destination) => {
243
+ if (closing)
244
+ return;
245
+ setInspect(false);
246
+ setHoveredIndex(null);
247
+ setClosing(destination);
248
+ if (destination === 'hide') {
249
+ setSelectedIndex(null);
250
+ setHighlight(null);
251
+ }
252
+ closeTimer.current = setTimeout(() => {
253
+ if (destination === 'hide')
254
+ setHidden(true);
255
+ else
256
+ setOpen(false);
257
+ setClosing(null);
258
+ closeTimer.current = null;
259
+ }, 150);
260
+ };
261
+ if (hidden)
262
+ return null;
263
+ if (!open) {
264
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("style", { "data-rakun-dev-toolbar": "", children: toolbarCss }), (0, jsx_runtime_1.jsx)("button", { type: "button", className: "rakun-dev-toolbar-launcher", "data-rakun-dev-toolbar": "", "aria-label": "Open Rakun development toolbar", title: "Open Rakun development toolbar", onClick: () => setOpen(true), style: launcherStyle, children: (0, jsx_runtime_1.jsx)(RakunLogo_1.RakunLogoMark, { style: { display: 'block', width: 24, height: 26 } }) })] }));
265
+ }
266
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [highlight ? ((0, jsx_runtime_1.jsx)("div", { "aria-hidden": "true", style: {
267
+ position: 'fixed',
268
+ zIndex: 2147483645,
269
+ pointerEvents: 'none',
270
+ top: highlight.top,
271
+ left: highlight.left,
272
+ width: highlight.width,
273
+ height: highlight.height,
274
+ border: `2px solid ${colors.accent}`,
275
+ borderRadius: 6,
276
+ background: colors.accentSoft,
277
+ boxShadow: '0 0 0 4px rgba(73, 209, 125, 0.18)',
278
+ } })) : null, (0, jsx_runtime_1.jsxs)("aside", { className: `rakun-dev-toolbar-panel${closing ? ' rakun-dev-toolbar-panel-closing' : ''}`, "data-rakun-dev-toolbar": "", style: toolbarStyle, children: [(0, jsx_runtime_1.jsx)("style", { children: toolbarCss }), (0, jsx_runtime_1.jsxs)("div", { style: {
279
+ display: 'flex',
280
+ alignItems: 'center',
281
+ gap: 8,
282
+ minHeight: 42,
283
+ padding: '7px 8px',
284
+ }, children: [(0, jsx_runtime_1.jsxs)("span", { style: {
285
+ display: 'inline-flex',
286
+ alignItems: 'center',
287
+ gap: 6,
288
+ color: colors.accent,
289
+ fontWeight: 700,
290
+ }, children: [(0, jsx_runtime_1.jsx)(RakunLogo_1.RakunLogoMark, { style: { display: 'block', width: 16, height: 18 } }), "Rakun Dev"] }), (0, jsx_runtime_1.jsx)("span", { style: { minWidth: 0, flex: 1, overflow: 'hidden', textOverflow: 'ellipsis' }, children: pathname }), (0, jsx_runtime_1.jsxs)("span", { style: { color: colors.muted }, children: [modules.length, " modules"] }), (0, jsx_runtime_1.jsx)("button", { type: "button", className: "rakun-dev-toolbar-action", "aria-pressed": inspect, onClick: () => setInspect((value) => !value), style: {
291
+ ...buttonStyle,
292
+ borderColor: inspect ? colors.accent : colors.border,
293
+ color: inspect ? colors.accent : colors.foreground,
294
+ }, children: "Inspect" }), editHref ? ((0, jsx_runtime_1.jsx)("a", { className: "rakun-dev-toolbar-action", href: editHref, target: "_blank", rel: "noreferrer", style: { ...buttonStyle, textDecoration: 'none' }, children: "Edit" })) : null, (0, jsx_runtime_1.jsx)("button", { type: "button", className: "rakun-dev-toolbar-action", onClick: () => closeToolbar('hide'), style: buttonStyle, children: "Hide" }), (0, jsx_runtime_1.jsx)("button", { type: "button", className: "rakun-dev-toolbar-action", "aria-label": "Minimize Rakun development toolbar", title: "Minimize", onClick: () => closeToolbar('minimize'), style: { ...buttonStyle, width: 30, paddingInline: 0 }, children: "\u2212" })] }), open ? ((0, jsx_runtime_1.jsxs)("div", { style: {
295
+ display: 'grid',
296
+ gridTemplateColumns: 'minmax(190px, 0.7fr) minmax(0, 1.3fr)',
297
+ height: 'min(440px, 55vh)',
298
+ borderTop: `1px solid ${colors.border}`,
299
+ }, children: [(0, jsx_runtime_1.jsxs)("div", { style: { minWidth: 0, overflow: 'auto', borderRight: `1px solid ${colors.border}` }, children: [(0, jsx_runtime_1.jsxs)("div", { style: { padding: 10, borderBottom: `1px solid ${colors.border}` }, children: [(0, jsx_runtime_1.jsx)("div", { style: { color: colors.muted }, children: "Route" }), (0, jsx_runtime_1.jsx)("div", { style: { marginTop: 3, overflowWrap: 'anywhere' }, children: pathname }), (0, jsx_runtime_1.jsxs)("div", { style: { marginTop: 6, color: colors.muted }, children: [renderMode, language ? ` · ${language}` : ''] }), documentType ? ((0, jsx_runtime_1.jsxs)("div", { style: { marginTop: 3, color: colors.muted, overflowWrap: 'anywhere' }, children: [documentType, documentId ? ` · ${documentId}` : ''] })) : null] }), (0, jsx_runtime_1.jsx)("div", { style: { padding: 6 }, children: modules.map((entry) => {
300
+ const active = entry.index === selectedIndex;
301
+ return ((0, jsx_runtime_1.jsxs)("button", { type: "button", className: "rakun-dev-toolbar-module", onMouseEnter: () => setHoveredIndex(entry.index), onMouseLeave: () => setHoveredIndex(null), onClick: () => selectModule(entry), style: {
302
+ ...buttonStyle,
303
+ display: 'block',
304
+ width: '100%',
305
+ marginBottom: 4,
306
+ borderColor: active ? colors.accent : 'transparent',
307
+ background: active ? colors.accentSoft : 'transparent',
308
+ textAlign: 'left',
309
+ }, children: [(0, jsx_runtime_1.jsxs)("span", { style: { color: colors.muted }, children: [entry.index + 1, ". "] }), entry.module._type, (0, jsx_runtime_1.jsxs)("span", { style: { display: 'block', color: colors.muted, fontSize: 10 }, children: [entry.entryType, entry.layoutKey ? ` · ${entry.layoutKey}` : ''] })] }, `${entry.entryType}:${entry.index}:${entry.module._id}`));
310
+ }) })] }), (0, jsx_runtime_1.jsx)("div", { style: { minWidth: 0, overflow: 'auto', padding: 10 }, children: selected ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', alignItems: 'baseline', gap: 8 }, children: [(0, jsx_runtime_1.jsx)("strong", { style: { color: colors.accent }, children: selected.module._type }), (0, jsx_runtime_1.jsx)("span", { style: { color: colors.muted }, children: selected.module._id })] }), (0, jsx_runtime_1.jsx)("div", { style: { marginTop: 8, color: colors.muted }, children: "Props" }), (0, jsx_runtime_1.jsx)(JsonViewer_1.JsonViewer, { value: selected.module, style: {
311
+ marginTop: 6,
312
+ padding: 10,
313
+ borderRadius: 8,
314
+ background: 'rgba(0, 0, 0, 0.28)',
315
+ color: colors.foreground,
316
+ }, theme: {
317
+ foreground: colors.foreground,
318
+ muted: colors.muted,
319
+ accent: colors.accent,
320
+ border: colors.border,
321
+ hover: colors.accentSoft,
322
+ } }, selected.index)] })) : ((0, jsx_runtime_1.jsx)("div", { style: { color: colors.muted }, children: "Select a module from the list or enable Inspect and click it on the page." })) })] })) : null] })] }));
323
+ }
324
+ //# sourceMappingURL=RakunDevToolbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RakunDevToolbar.js","sourceRoot":"","sources":["../../src/RakunDevToolbar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.RakunDevToolbar = void 0;
5
+ var RakunDevToolbar_1 = require("./RakunDevToolbar.js");
6
+ Object.defineProperty(exports, "RakunDevToolbar", { enumerable: true, get: function () { return RakunDevToolbar_1.RakunDevToolbar; } });
7
+ //# sourceMappingURL=devtools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools.js","sourceRoot":"","sources":["../../src/devtools.ts"],"names":[],"mappings":";AAAA,YAAY,CAAA;;;AAEZ,qDAI0B;AAHxB,kHAAA,eAAe,OAAA"}
@@ -142,6 +142,9 @@ for private objects are never converted into public URLs.
142
142
  `JsonViewer` collapsible tree, and the `RakunLogoMark` / `RakunLogoBadge` SVG
143
143
  components. `JsonViewer` accepts theme colors and `defaultExpandedDepth`; use
144
144
  `-1` for a fully collapsed initial tree.
145
+ - `@rakun-kit/react/devtools`: the client-side `RakunDevToolbar` and its module
146
+ metadata contract for framework adapters. Applications normally consume the
147
+ configured toolbar through Bun or Next.
145
148
  - `@rakun-kit/react/plugins`: web plugin contracts and registry composition.
146
149
  - `@rakun-kit/react/translation`: React translation helpers.
147
150
 
@@ -0,0 +1,20 @@
1
+ import type { PageModule } from '@rakun-kit/core/contracts';
2
+ export type RakunDevToolbarModule = {
3
+ module: PageModule;
4
+ entryType: 'content' | 'layout' | 'template';
5
+ index: number;
6
+ layoutIndex: number;
7
+ layoutKey?: string;
8
+ moduleIndex?: number;
9
+ };
10
+ export type RakunDevToolbarProps = {
11
+ modules: RakunDevToolbarModule[];
12
+ renderMode: 'static' | 'dynamic';
13
+ language?: string;
14
+ documentType?: string;
15
+ documentId?: string;
16
+ editHref?: string;
17
+ initialOpen?: boolean;
18
+ };
19
+ export declare function RakunDevToolbar({ modules, renderMode, language, documentType, documentId, editHref, initialOpen, }: RakunDevToolbarProps): import("react/jsx-runtime").JSX.Element | null;
20
+ //# sourceMappingURL=RakunDevToolbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RakunDevToolbar.d.ts","sourceRoot":"","sources":["../../src/RakunDevToolbar.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAK3D,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,UAAU,CAAA;IAClB,SAAS,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAA;IAC5C,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,qBAAqB,EAAE,CAAA;IAChC,UAAU,EAAE,QAAQ,GAAG,SAAS,CAAA;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,CAAA;AAqLD,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,WAAmB,GACpB,EAAE,oBAAoB,kDA0UtB"}