@jalvin/runtime 2.0.42 → 2.0.43
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/bibi.d.ts +0 -4
- package/dist/bibi.d.ts.map +1 -1
- package/dist/bibi.js +9 -11
- package/dist/bibi.js.map +1 -1
- package/dist/coroutines.js +47 -22
- package/dist/coroutines.js.map +1 -1
- package/dist/index.d.ts +2 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +224 -20
- package/dist/index.js.map +1 -1
- package/dist/stateflow.js +19 -8
- package/dist/stateflow.js.map +1 -1
- package/dist/stdlib/collections.js +108 -55
- package/dist/stdlib/collections.js.map +1 -1
- package/dist/stdlib/conversions.d.ts +0 -2
- package/dist/stdlib/conversions.d.ts.map +1 -1
- package/dist/stdlib/conversions.js +29 -17
- package/dist/stdlib/conversions.js.map +1 -1
- package/dist/stdlib/delegates.js +28 -14
- package/dist/stdlib/delegates.js.map +1 -1
- package/dist/stdlib/equality.js +4 -1
- package/dist/stdlib/equality.js.map +1 -1
- package/dist/stdlib/index.js +28 -12
- package/dist/stdlib/index.js.map +1 -1
- package/dist/stdlib/io.js +6 -2
- package/dist/stdlib/io.js.map +1 -1
- package/dist/stdlib/math.js +37 -29
- package/dist/stdlib/math.js.map +1 -1
- package/dist/stdlib/random.js +8 -3
- package/dist/stdlib/random.js.map +1 -1
- package/dist/stdlib/regex.js +8 -4
- package/dist/stdlib/regex.js.map +1 -1
- package/dist/stdlib/result.js +9 -3
- package/dist/stdlib/result.js.map +1 -1
- package/dist/stdlib/strings.js +51 -24
- package/dist/stdlib/strings.js.map +1 -1
- package/dist/stdlib/timing.js +8 -3
- package/dist/stdlib/timing.js.map +1 -1
- package/dist/stdlib/types.js +29 -13
- package/dist/stdlib/types.js.map +1 -1
- package/dist/ui.d.ts +69 -12
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +228 -127
- package/dist/ui.js.map +1 -1
- package/package.json +1 -1
- package/dist/dom.d.ts +0 -15
- package/dist/dom.d.ts.map +0 -1
- package/dist/dom.js +0 -212
- package/dist/dom.js.map +0 -1
- package/dist/nav.d.ts +0 -48
- package/dist/nav.d.ts.map +0 -1
- package/dist/nav.js +0 -136
- package/dist/nav.js.map +0 -1
package/dist/ui.js
CHANGED
|
@@ -1,170 +1,271 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
2
|
-
// Jalvin UI runtime —
|
|
3
|
+
// Jalvin UI runtime — React hooks for StateFlow, ViewModel, remember, mutableStateOf
|
|
4
|
+
//
|
|
5
|
+
// These are the companion hooks that make Jalvin's UI primitives
|
|
6
|
+
// work inside React components.
|
|
7
|
+
//
|
|
8
|
+
// `component fun` blocks compiled to React components call these hooks.
|
|
3
9
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.mutableStateOf = mutableStateOf;
|
|
12
|
+
exports.remember = remember;
|
|
13
|
+
exports.rememberMutableStateOf = rememberMutableStateOf;
|
|
14
|
+
exports.collectAsState = collectAsState;
|
|
15
|
+
exports.useViewModel = useViewModel;
|
|
16
|
+
exports.LaunchedEffect = LaunchedEffect;
|
|
17
|
+
exports.DisposableEffect = DisposableEffect;
|
|
18
|
+
exports.SideEffect = SideEffect;
|
|
19
|
+
exports.widthToSizeClass = widthToSizeClass;
|
|
20
|
+
exports.heightToSizeClass = heightToSizeClass;
|
|
21
|
+
exports.WindowSizeClassProvider = WindowSizeClassProvider;
|
|
22
|
+
exports.calculateWindowSizeClass = calculateWindowSizeClass;
|
|
23
|
+
let _react = null;
|
|
24
|
+
function getReact() {
|
|
25
|
+
if (_react)
|
|
26
|
+
return _react;
|
|
27
|
+
try {
|
|
28
|
+
// Dynamic require keeps this file tree-shakeable in non-React builds
|
|
29
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
30
|
+
_react = require("react");
|
|
31
|
+
return _react;
|
|
12
32
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
this.subscribers.add(activeSubscriber);
|
|
17
|
-
}
|
|
18
|
-
return this._value;
|
|
33
|
+
catch {
|
|
34
|
+
throw new Error("[jalvin/runtime] React is required for component functions. " +
|
|
35
|
+
"Install react@>=18 and add it to your peer dependencies.");
|
|
19
36
|
}
|
|
20
|
-
set value(next) {
|
|
21
|
-
if (!Object.is(this._value, next)) {
|
|
22
|
-
this._value = next;
|
|
23
|
-
this.notify();
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
notify() {
|
|
27
|
-
for (const sub of Array.from(this.subscribers)) {
|
|
28
|
-
sub();
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
// -- Hook System ------------------------------------------------------------
|
|
33
|
-
let currentHookIndex = 0;
|
|
34
|
-
let hookState = [];
|
|
35
|
-
/** Reset the hook pointer (called at the start of every render). */
|
|
36
|
-
function resetHooks() {
|
|
37
|
-
currentHookIndex = 0;
|
|
38
37
|
}
|
|
38
|
+
const stateflow_js_1 = require("./stateflow.js");
|
|
39
39
|
/**
|
|
40
|
-
*
|
|
40
|
+
* Hoisted `mutableStateOf(initial)` inside a `component fun`.
|
|
41
|
+
* Returns a mutable object whose `.value` setter triggers a re-render.
|
|
42
|
+
*
|
|
43
|
+
* Compiled output:
|
|
44
|
+
* val count = mutableStateOf(0)
|
|
45
|
+
* → const count = mutableStateOf(0);
|
|
46
|
+
* // count.value to read; count.value = x to update
|
|
41
47
|
*/
|
|
42
|
-
|
|
43
|
-
|
|
48
|
+
function mutableStateOf(initial) {
|
|
49
|
+
const R = getReact();
|
|
50
|
+
const [v, setV] = R.useState(initial);
|
|
51
|
+
// stateRef tracks the latest React state value. Updated on every render so
|
|
52
|
+
// the value getter always returns the current value, not the initial one.
|
|
53
|
+
const stateRef = R.useRef(v);
|
|
54
|
+
const holderRef = R.useRef(null);
|
|
55
|
+
stateRef.current = v;
|
|
56
|
+
if (holderRef.current === null) {
|
|
57
|
+
const holder = {};
|
|
58
|
+
Object.defineProperties(holder, {
|
|
59
|
+
value: {
|
|
60
|
+
get() { return stateRef.current; },
|
|
61
|
+
set(next) {
|
|
62
|
+
if (!Object.is(stateRef.current, next))
|
|
63
|
+
setV(next);
|
|
64
|
+
},
|
|
65
|
+
enumerable: true,
|
|
66
|
+
configurable: false,
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
holderRef.current = holder;
|
|
70
|
+
}
|
|
71
|
+
return holderRef.current;
|
|
44
72
|
}
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
74
|
+
// remember { } — memoised value across recompositions
|
|
75
|
+
// ---------------------------------------------------------------------------
|
|
45
76
|
/**
|
|
46
|
-
*
|
|
77
|
+
* Compute an expensive value once and remember it.
|
|
78
|
+
*
|
|
79
|
+
* val scope = remember { CoroutineScope() }
|
|
47
80
|
*/
|
|
48
|
-
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
let depsChanged = !existing || !existing.deps || existing.deps.length !== deps.length;
|
|
52
|
-
if (!depsChanged && existing) {
|
|
53
|
-
for (let i = 0; i < deps.length; i++) {
|
|
54
|
-
if (!Object.is(deps[i], existing.deps[i])) {
|
|
55
|
-
depsChanged = true;
|
|
56
|
-
break;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
if (depsChanged) {
|
|
61
|
-
hookState[idx] = { value: compute(), deps };
|
|
62
|
-
}
|
|
63
|
-
return hookState[idx].value;
|
|
81
|
+
function remember(compute, deps = []) {
|
|
82
|
+
const R = getReact();
|
|
83
|
+
return R.useMemo(compute, deps);
|
|
64
84
|
}
|
|
65
85
|
/**
|
|
66
|
-
*
|
|
86
|
+
* `remember { mutableStateOf(0) }` — convenience wrapper.
|
|
67
87
|
*/
|
|
68
|
-
|
|
69
|
-
|
|
88
|
+
function rememberMutableStateOf(initial) {
|
|
89
|
+
const R = getReact();
|
|
90
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
91
|
+
return R.useMemo(() => mutableStateOf(initial), []);
|
|
70
92
|
}
|
|
93
|
+
// ---------------------------------------------------------------------------
|
|
94
|
+
// collectAsState — subscribe to a StateFlow inside a component
|
|
95
|
+
// ---------------------------------------------------------------------------
|
|
71
96
|
/**
|
|
72
|
-
* Collects a StateFlow into
|
|
97
|
+
* Collects a StateFlow into React state. The component re-renders when
|
|
98
|
+
* the flow emits a new value.
|
|
99
|
+
*
|
|
100
|
+
* val currentName by viewModel.name.collectAsState()
|
|
73
101
|
*/
|
|
74
|
-
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
102
|
+
function collectAsState(flow) {
|
|
103
|
+
const R = getReact();
|
|
104
|
+
const [value, setValue] = R.useState(flow.value);
|
|
105
|
+
R.useEffect(() => {
|
|
106
|
+
const unsub = flow.collect((v) => setValue(v));
|
|
107
|
+
return unsub;
|
|
108
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
79
109
|
}, [flow]);
|
|
80
|
-
return
|
|
110
|
+
return value;
|
|
111
|
+
}
|
|
112
|
+
// ---------------------------------------------------------------------------
|
|
113
|
+
// useViewModel — get or create a ViewModel scoped to a component subtree
|
|
114
|
+
// ---------------------------------------------------------------------------
|
|
115
|
+
/**
|
|
116
|
+
* Returns a shared ViewModel instance for the given key.
|
|
117
|
+
*
|
|
118
|
+
* val vm = useViewModel("CounterVm") { CounterViewModel() }
|
|
119
|
+
*/
|
|
120
|
+
function useViewModel(key, factory) {
|
|
121
|
+
const R = getReact();
|
|
122
|
+
const vm = R.useMemo(() => (0, stateflow_js_1.viewModel)(key, factory), []);
|
|
123
|
+
R.useEffect(() => {
|
|
124
|
+
return () => (0, stateflow_js_1.clearViewModel)(key);
|
|
125
|
+
// Only clear when the component truly unmounts from root
|
|
126
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
127
|
+
}, []);
|
|
128
|
+
return vm;
|
|
81
129
|
}
|
|
130
|
+
// ---------------------------------------------------------------------------
|
|
131
|
+
// LaunchedEffect — run a suspend block tied to component lifecycle
|
|
132
|
+
// ---------------------------------------------------------------------------
|
|
82
133
|
/**
|
|
83
|
-
* Runs
|
|
134
|
+
* Runs a suspend block when deps change. Cancels on unmount.
|
|
135
|
+
*
|
|
136
|
+
* LaunchedEffect(Unit) {
|
|
137
|
+
* repeat(10) { delay(1_000) }
|
|
138
|
+
* }
|
|
84
139
|
*/
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
140
|
+
function LaunchedEffect(deps, fn) {
|
|
141
|
+
const R = getReact();
|
|
142
|
+
R.useEffect(() => {
|
|
143
|
+
let cancelled = false;
|
|
144
|
+
const guard = async () => {
|
|
145
|
+
if (!cancelled)
|
|
146
|
+
await fn();
|
|
147
|
+
};
|
|
148
|
+
guard();
|
|
149
|
+
return () => { cancelled = true; };
|
|
150
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
89
151
|
}, deps);
|
|
90
152
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
153
|
+
// ---------------------------------------------------------------------------
|
|
154
|
+
// DisposableEffect — run setup/teardown on deps change
|
|
155
|
+
// ---------------------------------------------------------------------------
|
|
156
|
+
function DisposableEffect(deps, fn) {
|
|
157
|
+
const R = getReact();
|
|
158
|
+
R.useEffect(() => {
|
|
159
|
+
const cleanup = fn();
|
|
160
|
+
return cleanup;
|
|
161
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
95
162
|
}, deps);
|
|
96
163
|
}
|
|
97
|
-
|
|
98
|
-
|
|
164
|
+
// ---------------------------------------------------------------------------
|
|
165
|
+
// SideEffect — run a non-suspending effect every recomposition
|
|
166
|
+
// ---------------------------------------------------------------------------
|
|
167
|
+
function SideEffect(fn) {
|
|
168
|
+
const R = getReact();
|
|
169
|
+
R.useEffect(fn);
|
|
99
170
|
}
|
|
100
|
-
|
|
171
|
+
/** @internal — exported for testing */
|
|
172
|
+
function widthToSizeClass(widthPx) {
|
|
101
173
|
if (widthPx < 600)
|
|
102
174
|
return "Compact";
|
|
103
175
|
if (widthPx < 840)
|
|
104
176
|
return "Medium";
|
|
105
177
|
return "Expanded";
|
|
106
178
|
}
|
|
107
|
-
|
|
179
|
+
/** @internal — exported for testing */
|
|
180
|
+
function heightToSizeClass(heightPx) {
|
|
108
181
|
if (heightPx < 480)
|
|
109
182
|
return "Compact";
|
|
110
183
|
if (heightPx < 900)
|
|
111
184
|
return "Medium";
|
|
112
185
|
return "Expanded";
|
|
113
186
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
187
|
+
// ---------------------------------------------------------------------------
|
|
188
|
+
// WindowSizeClassProvider — single resize listener for the whole tree
|
|
189
|
+
//
|
|
190
|
+
// Mount this once at the app root. All calls to calculateWindowSizeClass()
|
|
191
|
+
// read from this context, so a single resize event produces exactly one
|
|
192
|
+
// coordinated state update regardless of how many components call the hook.
|
|
193
|
+
// ---------------------------------------------------------------------------
|
|
194
|
+
const DEFAULT_WINDOW_SIZE_CLASS = {
|
|
195
|
+
widthSizeClass: "Expanded",
|
|
196
|
+
heightSizeClass: "Medium",
|
|
197
|
+
};
|
|
198
|
+
// Lazily created so the module remains usable in non-React (Node) builds.
|
|
199
|
+
let _WindowSizeClassContext = null;
|
|
200
|
+
function getWindowSizeClassContext() {
|
|
201
|
+
if (!_WindowSizeClassContext) {
|
|
202
|
+
_WindowSizeClassContext = getReact().createContext(DEFAULT_WINDOW_SIZE_CLASS);
|
|
203
|
+
}
|
|
204
|
+
return _WindowSizeClassContext;
|
|
128
205
|
}
|
|
129
|
-
|
|
130
|
-
|
|
206
|
+
/**
|
|
207
|
+
* Mount once at the app root. Registers a single `resize` listener and
|
|
208
|
+
* distributes the current {@link WindowSizeClassState} to all descendants
|
|
209
|
+
* that call {@link calculateWindowSizeClass}.
|
|
210
|
+
*
|
|
211
|
+
* The vite-plugin entry module wraps the root component in this provider
|
|
212
|
+
* automatically when the `entry` option is used.
|
|
213
|
+
*
|
|
214
|
+
* @example
|
|
215
|
+
* ```jalvin
|
|
216
|
+
* // main entry
|
|
217
|
+
* root.render(
|
|
218
|
+
* WindowSizeClassProvider { MyApp() }
|
|
219
|
+
* )
|
|
220
|
+
* ```
|
|
221
|
+
*/
|
|
222
|
+
function WindowSizeClassProvider({ children }) {
|
|
223
|
+
const R = getReact();
|
|
224
|
+
const getState = () => ({
|
|
225
|
+
widthSizeClass: widthToSizeClass(typeof window !== "undefined" ? window.innerWidth : 1280),
|
|
226
|
+
heightSizeClass: heightToSizeClass(typeof window !== "undefined" ? window.innerHeight : 800),
|
|
227
|
+
});
|
|
228
|
+
const [state, setState] = R.useState(getState);
|
|
229
|
+
R.useEffect(() => {
|
|
230
|
+
const onResize = () => {
|
|
231
|
+
const next = getState();
|
|
232
|
+
setState(prev => prev.widthSizeClass === next.widthSizeClass &&
|
|
233
|
+
prev.heightSizeClass === next.heightSizeClass
|
|
234
|
+
? prev
|
|
235
|
+
: next);
|
|
236
|
+
};
|
|
237
|
+
window.addEventListener("resize", onResize);
|
|
238
|
+
return () => window.removeEventListener("resize", onResize);
|
|
239
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
240
|
+
}, []);
|
|
241
|
+
const ctx = getWindowSizeClassContext();
|
|
242
|
+
return R.createElement(ctx.Provider, { value: state }, children);
|
|
131
243
|
}
|
|
132
|
-
// -- ViewModels -------------------------------------------------------------
|
|
133
|
-
export { viewModel as useViewModel } from "./stateflow.js";
|
|
134
|
-
// -- Root Rendering ---------------------------------------------------------
|
|
135
|
-
let renderCount = 0;
|
|
136
|
-
import { patch } from "./dom.js";
|
|
137
244
|
/**
|
|
138
|
-
*
|
|
245
|
+
* Returns the current {@link WindowSizeClassState}. Re-renders only when the
|
|
246
|
+
* window crosses a breakpoint boundary.
|
|
247
|
+
*
|
|
248
|
+
* Requires {@link WindowSizeClassProvider} to be mounted somewhere above this
|
|
249
|
+
* component in the tree (the vite-plugin does this automatically). If no
|
|
250
|
+
* provider is found the hook falls back to "Expanded/Medium" and logs a
|
|
251
|
+
* warning in development.
|
|
252
|
+
*
|
|
253
|
+
* Mirrors `calculateWindowSizeClass()` from Compose Material3 Adaptive.
|
|
254
|
+
*
|
|
255
|
+
* @example
|
|
256
|
+
* ```jalvin
|
|
257
|
+
* component fun AdaptiveLayout() {
|
|
258
|
+
* val windowSize = calculateWindowSizeClass()
|
|
259
|
+
* if (windowSize.widthSizeClass == "Compact") {
|
|
260
|
+
* MobileLayout()
|
|
261
|
+
* } else {
|
|
262
|
+
* DesktopLayout()
|
|
263
|
+
* }
|
|
264
|
+
* }
|
|
265
|
+
* ```
|
|
139
266
|
*/
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
const update = () => {
|
|
144
|
-
renderCount++;
|
|
145
|
-
activeSubscriber = update;
|
|
146
|
-
resetHooks();
|
|
147
|
-
// Save current active element (focus) and selection
|
|
148
|
-
let activeId = "";
|
|
149
|
-
if (document.activeElement && document.activeElement.id) {
|
|
150
|
-
activeId = document.activeElement.id;
|
|
151
|
-
}
|
|
152
|
-
else if (document.activeElement && document.activeElement.tagName === "INPUT") {
|
|
153
|
-
activeId = document.activeElement.name;
|
|
154
|
-
}
|
|
155
|
-
const newVNode = rootComponent();
|
|
156
|
-
// Patch the DOM instead of recreating it
|
|
157
|
-
patch(container, newVNode, oldVNode);
|
|
158
|
-
oldVNode = newVNode;
|
|
159
|
-
container._jalvin_vnode = oldVNode;
|
|
160
|
-
// Restore focus if possible
|
|
161
|
-
if (activeId) {
|
|
162
|
-
const toFocus = document.getElementById(activeId) || document.querySelector(`input[name="${activeId}"]`);
|
|
163
|
-
if (toFocus)
|
|
164
|
-
toFocus.focus();
|
|
165
|
-
}
|
|
166
|
-
activeSubscriber = null;
|
|
167
|
-
};
|
|
168
|
-
update();
|
|
267
|
+
function calculateWindowSizeClass() {
|
|
268
|
+
const R = getReact();
|
|
269
|
+
return R.useContext(getWindowSizeClassContext());
|
|
169
270
|
}
|
|
170
271
|
//# sourceMappingURL=ui.js.map
|
package/dist/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/dist/dom.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export interface VNode {
|
|
2
|
-
tag: string;
|
|
3
|
-
props: Record<string, any>;
|
|
4
|
-
children: Array<VNode | string>;
|
|
5
|
-
el?: Node;
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Creates a Virtual DOM Node instead of a real element.
|
|
9
|
-
*/
|
|
10
|
-
export declare function jalvinCreateElement(tag: string | Function, props: Record<string, any> | null, ...children: any[]): VNode | any;
|
|
11
|
-
/**
|
|
12
|
-
* A basic diffing algorithm to update the DOM without recreating it.
|
|
13
|
-
*/
|
|
14
|
-
export declare function patch(parentEl: HTMLElement, newVNode: VNode | string | null, oldVNode?: VNode | string | null, index?: number): void;
|
|
15
|
-
//# sourceMappingURL=dom.d.ts.map
|
package/dist/dom.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,KAAK;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,QAAQ,EAAE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;IAChC,EAAE,CAAC,EAAE,IAAI,CAAC;CACX;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,GAAG,QAAQ,EACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,EACjC,GAAG,QAAQ,EAAE,GAAG,EAAE,GACjB,KAAK,GAAG,GAAG,CAmCb;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,EAAE,KAAK,SAAI,GAAG,IAAI,CAmD/H"}
|