@sigx/lynx-testing 0.4.0 → 0.4.2
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/fire-event.d.ts +1 -1
- package/dist/fire-event.d.ts.map +1 -1
- package/dist/fire-event.js +99 -0
- package/dist/fire-event.js.map +1 -0
- package/dist/flush.js +40 -0
- package/dist/flush.js.map +1 -0
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -304
- package/dist/index.js.map +1 -1
- package/dist/mt/index.js +232 -105
- package/dist/mt/index.js.map +1 -1
- package/dist/mt/setup.js +105 -2
- package/dist/mt/setup.js.map +1 -0
- package/dist/queries.d.ts +1 -1
- package/dist/queries.d.ts.map +1 -1
- package/dist/queries.js +38 -0
- package/dist/queries.js.map +1 -0
- package/dist/render.d.ts +1 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +31 -0
- package/dist/render.js.map +1 -0
- package/dist/test-node.js +75 -0
- package/dist/test-node.js.map +1 -0
- package/dist/test-renderer.d.ts +1 -1
- package/dist/test-renderer.d.ts.map +1 -1
- package/dist/test-renderer.js +102 -0
- package/dist/test-renderer.js.map +1 -0
- package/package.json +12 -11
- package/dist/setup-BUzWSuVx.js +0 -55
- package/dist/setup-BUzWSuVx.js.map +0 -1
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TestNode — lightweight in-memory tree node for test rendering.
|
|
3
|
+
* Replaces ShadowElement + Lynx PAPI for testing purposes.
|
|
4
|
+
*/
|
|
5
|
+
export class TestNode {
|
|
6
|
+
type;
|
|
7
|
+
props = {};
|
|
8
|
+
children = [];
|
|
9
|
+
parent = null;
|
|
10
|
+
text;
|
|
11
|
+
/** Event handlers keyed by prop name (e.g. 'bindtap', 'bindtouchstart'). */
|
|
12
|
+
_handlers = new Map();
|
|
13
|
+
/** Style object (last value from patchProp 'style'). */
|
|
14
|
+
_style = {};
|
|
15
|
+
/** Class string. */
|
|
16
|
+
_class = '';
|
|
17
|
+
constructor(type) {
|
|
18
|
+
this.type = type;
|
|
19
|
+
}
|
|
20
|
+
// -- Tree queries --
|
|
21
|
+
/** Find first descendant matching element type. */
|
|
22
|
+
findByType(type) {
|
|
23
|
+
for (const child of this.children) {
|
|
24
|
+
if (child.type === type)
|
|
25
|
+
return child;
|
|
26
|
+
const found = child.findByType(type);
|
|
27
|
+
if (found)
|
|
28
|
+
return found;
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
/** Find all descendants matching element type. */
|
|
33
|
+
findAllByType(type) {
|
|
34
|
+
const results = [];
|
|
35
|
+
for (const child of this.children) {
|
|
36
|
+
if (child.type === type)
|
|
37
|
+
results.push(child);
|
|
38
|
+
results.push(...child.findAllByType(type));
|
|
39
|
+
}
|
|
40
|
+
return results;
|
|
41
|
+
}
|
|
42
|
+
/** Find first descendant containing the given text. */
|
|
43
|
+
findByText(text) {
|
|
44
|
+
if (this.text !== undefined && String(this.text).includes(text))
|
|
45
|
+
return this;
|
|
46
|
+
for (const child of this.children) {
|
|
47
|
+
const found = child.findByText(text);
|
|
48
|
+
if (found)
|
|
49
|
+
return found;
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
/** Get all text content from this node and descendants. */
|
|
54
|
+
textContent() {
|
|
55
|
+
if (this.text !== undefined)
|
|
56
|
+
return String(this.text);
|
|
57
|
+
return this.children.map(c => c.textContent()).join('');
|
|
58
|
+
}
|
|
59
|
+
/** Debug: serialize tree to a readable string. */
|
|
60
|
+
toDebugString(indent = 0) {
|
|
61
|
+
const pad = ' '.repeat(indent);
|
|
62
|
+
if (this.type === '#text')
|
|
63
|
+
return `${pad}${JSON.stringify(this.text)}`;
|
|
64
|
+
if (this.type === '#comment')
|
|
65
|
+
return `${pad}<!-- -->`;
|
|
66
|
+
const attrs = Object.keys(this.props).length > 0
|
|
67
|
+
? ' ' + Object.entries(this.props).map(([k, v]) => `${k}=${JSON.stringify(v)}`).join(' ')
|
|
68
|
+
: '';
|
|
69
|
+
if (this.children.length === 0)
|
|
70
|
+
return `${pad}<${this.type}${attrs} />`;
|
|
71
|
+
const childStr = this.children.map(c => c.toDebugString(indent + 1)).join('\n');
|
|
72
|
+
return `${pad}<${this.type}${attrs}>\n${childStr}\n${pad}</${this.type}>`;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=test-node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-node.js","sourceRoot":"","sources":["../src/test-node.ts"],"names":[],"mappings":"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"}
|
package/dist/test-renderer.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { RendererOptions } from '@sigx/runtime-core/internals';
|
|
2
|
-
import { TestNode } from './test-node';
|
|
2
|
+
import { TestNode } from './test-node.js';
|
|
3
3
|
declare const nodeOps: RendererOptions<TestNode, TestNode>;
|
|
4
4
|
export declare const testRenderer: import("@sigx/runtime-core/internals").Renderer<TestNode, TestNode>;
|
|
5
5
|
export { nodeOps as testNodeOps };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-renderer.d.ts","sourceRoot":"","sources":["../src/test-renderer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"test-renderer.d.ts","sourceRoot":"","sources":["../src/test-renderer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,QAAA,MAAM,OAAO,EAAE,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAsGhD,CAAC;AAEF,eAAO,MAAM,YAAY,qEAA8C,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test renderer — implements RendererOptions<TestNode, TestNode> for
|
|
3
|
+
* in-memory rendering without Lynx PAPI.
|
|
4
|
+
*/
|
|
5
|
+
import { createRenderer } from '@sigx/runtime-core/internals';
|
|
6
|
+
import { TestNode } from './test-node.js';
|
|
7
|
+
const nodeOps = {
|
|
8
|
+
createElement(type) {
|
|
9
|
+
return new TestNode(type);
|
|
10
|
+
},
|
|
11
|
+
createText(text) {
|
|
12
|
+
const node = new TestNode('#text');
|
|
13
|
+
node.text = text;
|
|
14
|
+
return node;
|
|
15
|
+
},
|
|
16
|
+
createComment(_text) {
|
|
17
|
+
return new TestNode('#comment');
|
|
18
|
+
},
|
|
19
|
+
setText(node, text) {
|
|
20
|
+
node.text = text;
|
|
21
|
+
},
|
|
22
|
+
setElementText(el, text) {
|
|
23
|
+
el.children = [];
|
|
24
|
+
const textNode = new TestNode('#text');
|
|
25
|
+
textNode.text = text;
|
|
26
|
+
textNode.parent = el;
|
|
27
|
+
el.children.push(textNode);
|
|
28
|
+
},
|
|
29
|
+
insert(child, parent, anchor) {
|
|
30
|
+
// Remove from old parent
|
|
31
|
+
if (child.parent) {
|
|
32
|
+
const idx = child.parent.children.indexOf(child);
|
|
33
|
+
if (idx !== -1)
|
|
34
|
+
child.parent.children.splice(idx, 1);
|
|
35
|
+
}
|
|
36
|
+
child.parent = parent;
|
|
37
|
+
if (anchor) {
|
|
38
|
+
const anchorIdx = parent.children.indexOf(anchor);
|
|
39
|
+
if (anchorIdx !== -1) {
|
|
40
|
+
parent.children.splice(anchorIdx, 0, child);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
parent.children.push(child);
|
|
45
|
+
},
|
|
46
|
+
remove(child) {
|
|
47
|
+
if (child.parent) {
|
|
48
|
+
const idx = child.parent.children.indexOf(child);
|
|
49
|
+
if (idx !== -1)
|
|
50
|
+
child.parent.children.splice(idx, 1);
|
|
51
|
+
child.parent = null;
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
patchProp(el, key, _prevValue, nextValue) {
|
|
55
|
+
if (key === 'style') {
|
|
56
|
+
el._style = nextValue ?? {};
|
|
57
|
+
el.props[key] = nextValue;
|
|
58
|
+
}
|
|
59
|
+
else if (key === 'class') {
|
|
60
|
+
el._class = nextValue ?? '';
|
|
61
|
+
el.props[key] = nextValue;
|
|
62
|
+
}
|
|
63
|
+
else if (key.startsWith('bind') ||
|
|
64
|
+
key.startsWith('catch') ||
|
|
65
|
+
key.startsWith('on') ||
|
|
66
|
+
key.startsWith('main-thread-bind') ||
|
|
67
|
+
key.startsWith('main-thread-catch') ||
|
|
68
|
+
key.startsWith('global-')) {
|
|
69
|
+
// Event handler
|
|
70
|
+
if (typeof nextValue === 'function') {
|
|
71
|
+
el._handlers.set(key, nextValue);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
el._handlers.delete(key);
|
|
75
|
+
}
|
|
76
|
+
el.props[key] = nextValue;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
if (nextValue != null) {
|
|
80
|
+
el.props[key] = nextValue;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
delete el.props[key];
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
parentNode(node) {
|
|
88
|
+
return node.parent;
|
|
89
|
+
},
|
|
90
|
+
nextSibling(node) {
|
|
91
|
+
if (!node.parent)
|
|
92
|
+
return null;
|
|
93
|
+
const idx = node.parent.children.indexOf(node);
|
|
94
|
+
return node.parent.children[idx + 1] ?? null;
|
|
95
|
+
},
|
|
96
|
+
cloneNode(node) {
|
|
97
|
+
return new TestNode(node.type);
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
export const testRenderer = createRenderer(nodeOps);
|
|
101
|
+
export { nodeOps as testNodeOps };
|
|
102
|
+
//# sourceMappingURL=test-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-renderer.js","sourceRoot":"","sources":["../src/test-renderer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sigx/lynx-testing",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"description": "Testing utilities for SignalX Lynx components - render, fireEvent, queries",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -31,13 +31,13 @@
|
|
|
31
31
|
"author": "Andreas Ekdahl",
|
|
32
32
|
"license": "MIT",
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@sigx/runtime-core": "^0.4.
|
|
35
|
-
"@sigx/lynx": "^0.4.
|
|
34
|
+
"@sigx/runtime-core": "^0.4.8",
|
|
35
|
+
"@sigx/lynx": "^0.4.2"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
|
-
"@lynx-js/react": "^0.
|
|
38
|
+
"@lynx-js/react": "^0.121.0",
|
|
39
39
|
"vitest": "^4.0.0",
|
|
40
|
-
"@sigx/lynx-runtime-main": "^0.4.
|
|
40
|
+
"@sigx/lynx-runtime-main": "^0.4.2"
|
|
41
41
|
},
|
|
42
42
|
"peerDependenciesMeta": {
|
|
43
43
|
"@lynx-js/react": {
|
|
@@ -51,11 +51,11 @@
|
|
|
51
51
|
}
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
|
-
"@lynx-js/react": "^0.
|
|
54
|
+
"@lynx-js/react": "^0.121.0",
|
|
55
|
+
"@typescript/native-preview": "7.0.0-dev.20260521.1",
|
|
55
56
|
"typescript": "^6.0.3",
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"@sigx/lynx-runtime-main": "^0.4.0"
|
|
57
|
+
"vitest": "^4.1.7",
|
|
58
|
+
"@sigx/lynx-runtime-main": "^0.4.2"
|
|
59
59
|
},
|
|
60
60
|
"repository": {
|
|
61
61
|
"type": "git",
|
|
@@ -70,7 +70,8 @@
|
|
|
70
70
|
"access": "public"
|
|
71
71
|
},
|
|
72
72
|
"scripts": {
|
|
73
|
-
"build": "
|
|
74
|
-
"dev": "
|
|
73
|
+
"build": "node ../../scripts/clean.mjs dist && tsgo",
|
|
74
|
+
"dev": "tsgo --watch",
|
|
75
|
+
"clean": "node ../../scripts/clean.mjs dist .turbo"
|
|
75
76
|
}
|
|
76
77
|
}
|
package/dist/setup-BUzWSuVx.js
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { vi as e } from "vitest";
|
|
2
|
-
//#region src/mt/setup.ts
|
|
3
|
-
var t = {
|
|
4
|
-
addEventListener: e.fn(),
|
|
5
|
-
dispatchEvent: e.fn()
|
|
6
|
-
}, n = {
|
|
7
|
-
SystemInfo: { lynxSdkVersion: "3.5.0" },
|
|
8
|
-
getJSContext: () => t,
|
|
9
|
-
getCoreContext: () => t,
|
|
10
|
-
setTimeout: globalThis.setTimeout.bind(globalThis),
|
|
11
|
-
setInterval: globalThis.setInterval.bind(globalThis),
|
|
12
|
-
clearTimeout: globalThis.clearTimeout.bind(globalThis),
|
|
13
|
-
clearInterval: globalThis.clearInterval.bind(globalThis),
|
|
14
|
-
requestAnimationFrame: (e) => globalThis.setTimeout(() => e(Date.now()), 16),
|
|
15
|
-
cancelAnimationFrame: (e) => globalThis.clearTimeout(e),
|
|
16
|
-
querySelector: (e) => null,
|
|
17
|
-
querySelectorAll: (e) => []
|
|
18
|
-
};
|
|
19
|
-
globalThis.lynx = n, globalThis.SystemInfo = { lynxSdkVersion: "3.5.0" };
|
|
20
|
-
var r = e.fn();
|
|
21
|
-
for (let e of [
|
|
22
|
-
"__CreatePage",
|
|
23
|
-
"__CreateView",
|
|
24
|
-
"__SetCSSId",
|
|
25
|
-
"__AppendElement",
|
|
26
|
-
"__GetElementUniqueID",
|
|
27
|
-
"__SetInlineStyles",
|
|
28
|
-
"__SetStyle",
|
|
29
|
-
"__AddInlineStyle",
|
|
30
|
-
"__SetAttribute",
|
|
31
|
-
"__AddEvent",
|
|
32
|
-
"__GetAttributeByName",
|
|
33
|
-
"__GetAttributeNames",
|
|
34
|
-
"__GetComputedStyleByKey",
|
|
35
|
-
"__QuerySelector",
|
|
36
|
-
"__QuerySelectorAll",
|
|
37
|
-
"__InvokeUIMethod",
|
|
38
|
-
"__FlushElementTree",
|
|
39
|
-
"__GetPageElement",
|
|
40
|
-
"__ElementAnimate"
|
|
41
|
-
]) globalThis[e] = r;
|
|
42
|
-
await import("@sigx/lynx-runtime-main"), await import("@lynx-js/react/worklet-runtime"), await import("@sigx/lynx-runtime-main/install-hybrid-worklet");
|
|
43
|
-
function i() {
|
|
44
|
-
return t;
|
|
45
|
-
}
|
|
46
|
-
function a() {
|
|
47
|
-
t = {
|
|
48
|
-
addEventListener: e.fn(),
|
|
49
|
-
dispatchEvent: e.fn()
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
//#endregion
|
|
53
|
-
export { a as n, i as t };
|
|
54
|
-
|
|
55
|
-
//# sourceMappingURL=setup-BUzWSuVx.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setup-BUzWSuVx.js","names":[],"sources":["../src/mt/setup.ts"],"sourcesContent":["/**\n * Side-effect bootstrap for the main-thread (MT) gesture/worklet test\n * harness. Consumers list this in their `vitest.mt.config.ts`'s\n * `setupFiles` array; it must run before any test that drives a worklet\n * directly.\n *\n * ```ts\n * // vitest.mt.config.ts\n * import { defineConfig } from 'vitest/config';\n *\n * export default defineConfig({\n * test: {\n * environment: 'happy-dom',\n * globals: true,\n * include: ['__tests__/**\\/*.mt.test.ts'],\n * setupFiles: ['@sigx/lynx-testing/mt/setup'],\n * },\n * });\n * ```\n *\n * Order matters and is encoded here:\n * 1. Stub PAPI globals (`__SetAttribute` etc.) + `globalThis.lynx` +\n * `globalThis.SystemInfo`. The worklet-runtime IIFE reads\n * `SystemInfo.lynxSdkVersion` at init and reassigns lynx.setTimeout /\n * lynx.requestAnimationFrame onto globalThis, so both must exist\n * before its IIFE evaluates.\n * 2. Side-effect import `@sigx/lynx-runtime-main` — its entry-main\n * module installs `sigxRunOnMT`, `runOnBackground`, etc. (no PAPI\n * calls fire at module init — only inside the renderPage /\n * sigxPatchUpdate handlers we never invoke from these tests).\n * 3. Side-effect import `@lynx-js/react/worklet-runtime` — IIFE that\n * installs `globalThis.lynxWorkletImpl`, `registerWorkletInternal`,\n * `runWorklet`.\n * 4. Side-effect import `@sigx/lynx-runtime-main/install-hybrid-worklet`\n * — registers the hybrid dispatcher into the now-populated\n * `_workletMap`.\n *\n * The mocks are installed once per worker. `resetJsContextSpy()` from the\n * companion `@sigx/lynx-testing/mt` module wipes the dispatchEvent /\n * addEventListener spies between tests when needed.\n */\n\nimport { vi } from 'vitest';\n\ninterface JSContextMock {\n addEventListener: ReturnType<typeof vi.fn>;\n dispatchEvent: ReturnType<typeof vi.fn>;\n}\n\nlet jsContext: JSContextMock = {\n addEventListener: vi.fn(),\n dispatchEvent: vi.fn(),\n};\n\nconst lynxMock = {\n SystemInfo: { lynxSdkVersion: '3.5.0' },\n getJSContext: () => jsContext,\n getCoreContext: () => jsContext,\n setTimeout: globalThis.setTimeout.bind(globalThis),\n setInterval: globalThis.setInterval.bind(globalThis),\n clearTimeout: globalThis.clearTimeout.bind(globalThis),\n clearInterval: globalThis.clearInterval.bind(globalThis),\n requestAnimationFrame: (cb: FrameRequestCallback) => globalThis.setTimeout(() => cb(Date.now()), 16) as unknown as number,\n cancelAnimationFrame: (h: number) => globalThis.clearTimeout(h as unknown as ReturnType<typeof globalThis.setTimeout>),\n querySelector: (_sel: string) => null,\n querySelectorAll: (_sel: string) => [],\n};\n\n(globalThis as Record<string, unknown>)['lynx'] = lynxMock;\n(globalThis as Record<string, unknown>)['SystemInfo'] = { lynxSdkVersion: '3.5.0' };\n\nconst noopPapi = vi.fn();\nconst papiKeys = [\n '__CreatePage',\n '__CreateView',\n '__SetCSSId',\n '__AppendElement',\n '__GetElementUniqueID',\n '__SetInlineStyles',\n '__SetStyle',\n '__AddInlineStyle',\n '__SetAttribute',\n '__AddEvent',\n '__GetAttributeByName',\n '__GetAttributeNames',\n '__GetComputedStyleByKey',\n '__QuerySelector',\n '__QuerySelectorAll',\n '__InvokeUIMethod',\n '__FlushElementTree',\n '__GetPageElement',\n '__ElementAnimate',\n];\nfor (const k of papiKeys) {\n (globalThis as Record<string, unknown>)[k] = noopPapi;\n}\n\nawait import('@sigx/lynx-runtime-main');\nawait import('@lynx-js/react/worklet-runtime');\nawait import('@sigx/lynx-runtime-main/install-hybrid-worklet');\n\n// Internal — exposed through `@sigx/lynx-testing/mt` so tests can read or\n// reset the JS-context spy between cases without re-stubbing the global.\nexport function _getJsContext(): JSContextMock {\n return jsContext;\n}\n\nexport function _resetJsContextSpy(): void {\n jsContext = {\n addEventListener: vi.fn(),\n dispatchEvent: vi.fn(),\n };\n // Re-bind so `lynxMock.getJSContext()` / `getCoreContext()` return the\n // fresh spy instance (the closure captures `jsContext` by lexical\n // reference, so re-assigning it above is enough — but document this\n // here so future readers don't get confused if they refactor.)\n}\n"],"mappings":";;AAiDA,IAAI,IAA2B;CAC3B,kBAAkB,EAAG,IAAI;CACzB,eAAe,EAAG,IAAI;CACzB,EAEK,IAAW;CACb,YAAY,EAAE,gBAAgB,SAAS;CACvC,oBAAoB;CACpB,sBAAsB;CACtB,YAAY,WAAW,WAAW,KAAK,WAAW;CAClD,aAAa,WAAW,YAAY,KAAK,WAAW;CACpD,cAAc,WAAW,aAAa,KAAK,WAAW;CACtD,eAAe,WAAW,cAAc,KAAK,WAAW;CACxD,wBAAwB,MAA6B,WAAW,iBAAiB,EAAG,KAAK,KAAK,CAAC,EAAE,GAAG;CACpG,uBAAuB,MAAc,WAAW,aAAa,EAAyD;CACtH,gBAAgB,MAAiB;CACjC,mBAAmB,MAAiB,EAAE;CACzC;AAED,WAAwC,OAAU,GAClD,WAAwC,aAAgB,EAAE,gBAAgB,SAAS;AAEnF,IAAM,IAAW,EAAG,IAAI;AAsBxB,KAAK,IAAM,KAAK;CApBZ;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEY,EACZ,WAAwC,KAAK;AAGjD,MAAM,OAAO,4BACb,MAAM,OAAO,mCACb,MAAM,OAAO;AAIb,SAAgB,IAA+B;CAC3C,OAAO;;AAGX,SAAgB,IAA2B;CACvC,IAAY;EACR,kBAAkB,EAAG,IAAI;EACzB,eAAe,EAAG,IAAI;EACzB"}
|