airx 0.1.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.
@@ -0,0 +1,576 @@
1
+ import { createCollector, watch } from './reactive';
2
+ import { createElement, isValidElement } from './element';
3
+ import { createLogger } from './logger';
4
+ class InnerAirxComponentContext {
5
+ disposers = new Set();
6
+ mountListeners = new Set();
7
+ unmountedListeners = new Set();
8
+ triggerMounted() {
9
+ this.mountListeners.forEach(listener => {
10
+ let disposer = null;
11
+ try {
12
+ disposer = listener();
13
+ }
14
+ catch (err) {
15
+ console.error(err, listener);
16
+ }
17
+ if (typeof disposer === 'function') {
18
+ this.addDisposer(disposer);
19
+ }
20
+ });
21
+ // 生命周期只会调用一次
22
+ this.mountListeners.clear();
23
+ }
24
+ triggerUnmounted() {
25
+ this.unmountedListeners.forEach(listener => {
26
+ try {
27
+ listener();
28
+ }
29
+ catch (err) {
30
+ console.error(err, listener);
31
+ }
32
+ });
33
+ // 生命周期只会调用一次
34
+ this.mountListeners.clear();
35
+ }
36
+ onMounted(listener) {
37
+ this.mountListeners.add(listener);
38
+ }
39
+ onUnmounted(listener) {
40
+ this.unmountedListeners.add(listener);
41
+ }
42
+ addDisposer(...disposers) {
43
+ disposers.forEach(disposer => {
44
+ this.disposers.add(disposer);
45
+ });
46
+ }
47
+ dispose() {
48
+ this.disposers.forEach((disposer) => {
49
+ try {
50
+ disposer();
51
+ }
52
+ catch (err) {
53
+ // eslint-disable-next-line no-console
54
+ console.error(err, disposer);
55
+ }
56
+ });
57
+ this.disposers.clear();
58
+ this.mountListeners.clear();
59
+ this.unmountedListeners.clear();
60
+ }
61
+ /**
62
+ * 当 context 传递给外部消费时,隐藏内部实现,仅暴露接口定义的内容
63
+ * @returns 和 AirxComponentContext 接口完全一致的对象
64
+ */
65
+ getSafeContext() {
66
+ return {
67
+ onMounted: listener => this.onMounted(listener),
68
+ onUnmounted: listener => this.onUnmounted(listener)
69
+ };
70
+ }
71
+ }
72
+ export function render(element, domRef) {
73
+ const context = {
74
+ rootInstance: {
75
+ domRef,
76
+ memoProps: {},
77
+ context: new InnerAirxComponentContext()
78
+ },
79
+ nextUnitOfWork: null,
80
+ needCommitDom: false
81
+ };
82
+ const appInstance = {
83
+ element,
84
+ memoProps: {},
85
+ parent: context.rootInstance,
86
+ context: new InnerAirxComponentContext()
87
+ };
88
+ context.rootInstance.child = appInstance;
89
+ context.nextUnitOfWork = appInstance;
90
+ /**
91
+ * 更新 children
92
+ * @param parentInstance 当前正在处理的组件的实例
93
+ * @param children 当前组件的子节点
94
+ */
95
+ function reconcileChildren(parentInstance, childrenElementArray) {
96
+ const logger = createLogger('reconcileChildren');
97
+ logger.debug('reconcileChildren', parentInstance, childrenElementArray);
98
+ // parentInstance ←--------
99
+ // | ↑ ↑
100
+ // child parent parent
101
+ // ↓ | |
102
+ // instance -sibling→ instance -→ ....
103
+ /**
104
+ * 内部通过 index 生成 element 的 key
105
+ * 通过前缀来避免和用户手动设置的 key 发生冲突
106
+ * @param index
107
+ * @returns 生成的 key
108
+ */
109
+ function getInnerElementIndexKey(index) {
110
+ return `airx-element-inner-key:${index}`;
111
+ }
112
+ /**
113
+ * 将 children 实例链转成 Map 便于此处消费
114
+ * @param firstChild children 实例的第一个元素
115
+ * @returns 从 firstChild 开始之后的所有 sibling 实例组成的 Map
116
+ */
117
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
118
+ function getChildrenInstanceMap(firstChild) {
119
+ // 不使用递归是因为递归容易爆栈
120
+ let nextIndex = 0;
121
+ let nextChild = firstChild;
122
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
123
+ const map = new Map();
124
+ while (nextChild) {
125
+ /* 如果有 key,则将 key 作为 map key,否则将 index 作为 key */
126
+ if (nextChild.element?.props.key != null) {
127
+ map.set(nextChild.element?.props.key, nextChild);
128
+ }
129
+ else {
130
+ map.set(getInnerElementIndexKey(nextIndex), nextChild);
131
+ }
132
+ nextChild = nextChild.sibling;
133
+ nextIndex += 1;
134
+ }
135
+ return map;
136
+ }
137
+ const newChildrenInstanceArray = [];
138
+ const childrenInstanceMap = getChildrenInstanceMap(parentInstance.child);
139
+ function getChildInstance(child, index) {
140
+ if (child.props.key != null) {
141
+ const key = child.props.key;
142
+ const instance = childrenInstanceMap.get(key) || null;
143
+ return [instance, () => childrenInstanceMap.delete(key)];
144
+ }
145
+ const innerKey = getInnerElementIndexKey(index);
146
+ const instance = childrenInstanceMap.get(innerKey) || null;
147
+ return [instance, () => childrenInstanceMap.delete(innerKey)];
148
+ }
149
+ /**
150
+ * 浅比较 props 是否相等
151
+ * @param prev 之前的 props
152
+ * @param next 下一个 props
153
+ */
154
+ function isSameElementType(instance, nextElement) {
155
+ if (instance == null)
156
+ return false;
157
+ if (instance.element == null)
158
+ return false;
159
+ if (instance.element.type !== nextElement.type)
160
+ return false;
161
+ return true;
162
+ }
163
+ function updateProps(instance) {
164
+ if (instance.element == null)
165
+ return;
166
+ if (instance.memoProps == null)
167
+ instance.memoProps = {};
168
+ // 简单来说就是以下几件事情
169
+ // 始终保持 props 的引用不变
170
+ // 1. 创建一个新对象来保存 beforeElement props 的状态
171
+ // 2. 将新的 element 上的 props 引用设置为之前的 props
172
+ // 3. 将新的 element 上的 props 更新到之前的 props 上去
173
+ // 清空原来的东西
174
+ if (instance.beforeElement != null) {
175
+ for (const key in instance.beforeElement.props) {
176
+ Reflect.deleteProperty(instance.memoProps, key);
177
+ }
178
+ }
179
+ // 将新的 props 更新上去
180
+ for (const key in instance.element.props) {
181
+ const value = Reflect.get(instance.element.props, key);
182
+ Reflect.set(instance.memoProps, key, value);
183
+ }
184
+ }
185
+ function shouldUpdate(instance) {
186
+ const nextProps = instance.element?.props;
187
+ const preProps = instance.beforeElement?.props;
188
+ if (Object.is(nextProps, preProps)) {
189
+ return false;
190
+ }
191
+ if (typeof preProps !== 'object'
192
+ || typeof nextProps !== 'object'
193
+ || preProps === null
194
+ || nextProps === null) {
195
+ logger.debug('props must be an object');
196
+ return true;
197
+ }
198
+ // 对应 key 的值不相同返回 false
199
+ const prevKeys = Object.keys(preProps);
200
+ for (let index = 0; index < prevKeys.length; index++) {
201
+ const key = prevKeys[index];
202
+ if (key !== 'children' && key !== 'key') {
203
+ if (!Object.hasOwn(nextProps, key))
204
+ return true;
205
+ if (!Object.is(preProps[key], nextProps[key]))
206
+ return true;
207
+ }
208
+ if (key === 'children') {
209
+ const prevChildren = preProps['children'];
210
+ const nextChildren = nextProps['children'];
211
+ // children 都是空的,则无需更新
212
+ if (prevChildren.length === 0 && nextChildren.length === 0)
213
+ return false;
214
+ // 简单比较一下 child 的引用
215
+ for (let index = 0; index < prevChildren.length; index++) {
216
+ const prevChild = prevChildren[index];
217
+ const nextChild = nextChildren[index];
218
+ if (prevChild !== nextChild)
219
+ return true;
220
+ if (typeof prevChild !== typeof nextChild)
221
+ return true;
222
+ }
223
+ }
224
+ return false;
225
+ }
226
+ return true;
227
+ }
228
+ // 依次遍历 child 并和 instance 对比
229
+ for (let index = 0; index < childrenElementArray.length; index++) {
230
+ const element = childrenElementArray[index];
231
+ const [instance, seize] = getChildInstance(element, index);
232
+ const isSameType = instance && isSameElementType(instance, element);
233
+ if (isSameType) {
234
+ seize(); // 从 childrenInstanceMap 中释放
235
+ newChildrenInstanceArray.push(instance);
236
+ instance.beforeElement = instance.element;
237
+ instance.element = element;
238
+ updateProps(instance);
239
+ // 未标注更新的检查一下是否需要更新
240
+ if (!instance.requiredUpdate) {
241
+ instance.requiredUpdate = shouldUpdate(instance);
242
+ }
243
+ }
244
+ else {
245
+ const context = new InnerAirxComponentContext();
246
+ const instance = { element, context };
247
+ newChildrenInstanceArray.push(instance);
248
+ updateProps(instance);
249
+ }
250
+ }
251
+ // 新的 node
252
+ for (let index = 0; index < newChildrenInstanceArray.length; index++) {
253
+ const instance = newChildrenInstanceArray[index];
254
+ // 确保链的干净
255
+ instance.parent = parentInstance;
256
+ if (index === 0)
257
+ parentInstance.child = instance;
258
+ if (index > 0)
259
+ newChildrenInstanceArray[index - 1].sibling = instance;
260
+ if (index === newChildrenInstanceArray.length - 1)
261
+ delete instance.sibling;
262
+ }
263
+ // 剩余的是需要移除的
264
+ if (childrenInstanceMap.size > 0) {
265
+ if (parentInstance.deletions == null) {
266
+ parentInstance.deletions = new Set();
267
+ }
268
+ childrenInstanceMap.forEach(instance => {
269
+ parentInstance.deletions?.add(instance);
270
+ });
271
+ }
272
+ logger.debug('parentInstance', parentInstance);
273
+ }
274
+ /**
275
+ * 处理单个 instance
276
+ * @param instance 当前处理的实例
277
+ * @returns 返回下一个需要处理的 instance
278
+ */
279
+ function performUnitOfWork(instance) {
280
+ const element = instance.element;
281
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
282
+ function childrenAsElements(children) {
283
+ const childrenAsArray = Array.isArray(children) ? children : [children];
284
+ function isComment(element) {
285
+ if (element === '')
286
+ return true;
287
+ if (element == null)
288
+ return true;
289
+ if (element === false)
290
+ return true;
291
+ return false;
292
+ }
293
+ return childrenAsArray.flat(3).map(element => {
294
+ if (isValidElement(element))
295
+ return element;
296
+ const elementType = isComment(element) ? 'comment' : 'text';
297
+ const textContent = element === '' ? 'empty-string' : String(element);
298
+ return createElement(elementType, { textContent });
299
+ });
300
+ }
301
+ // airx 组件
302
+ if (typeof element?.type === 'function') {
303
+ const collector = createCollector();
304
+ if (instance.render == null) {
305
+ const component = element.type;
306
+ const safeContext = instance.context.getSafeContext();
307
+ instance.render = collector.collect(() => component(instance.memoProps, safeContext));
308
+ const children = collector.collect(() => instance.render?.());
309
+ reconcileChildren(instance, childrenAsElements(children));
310
+ }
311
+ if (instance.requiredUpdate) {
312
+ const children = collector.collect(() => instance.render?.());
313
+ reconcileChildren(instance, childrenAsElements(children));
314
+ delete instance.requiredUpdate;
315
+ }
316
+ // 处理依赖触发的更新
317
+ collector.complete().forEach(ref => {
318
+ instance.context.addDisposer(watch(ref, () => {
319
+ instance.requiredUpdate = true;
320
+ if (context.nextUnitOfWork == null && context.rootInstance.child) {
321
+ context.nextUnitOfWork = context.rootInstance.child;
322
+ }
323
+ }));
324
+ });
325
+ }
326
+ // 浏览器组件/标签
327
+ if (typeof element?.type === 'string') {
328
+ if ('children' in element.props && Array.isArray(element.props.children)) {
329
+ reconcileChildren(instance, childrenAsElements(element.props.children));
330
+ }
331
+ }
332
+ // 优先处理 child
333
+ if (instance.child) {
334
+ return instance.child;
335
+ }
336
+ /**
337
+ * 递归向上查找可用的兄弟 instance
338
+ * @param instance
339
+ * @returns 返回下一个需要处理的兄弟 instance
340
+ */
341
+ function returnSibling(instance) {
342
+ if (instance.sibling) {
343
+ return instance.sibling;
344
+ }
345
+ if (instance.parent) {
346
+ return returnSibling(instance.parent);
347
+ }
348
+ return null;
349
+ }
350
+ return returnSibling(instance);
351
+ }
352
+ /**
353
+ * 提交 Dom 变化
354
+ */
355
+ function commitDom(rootInstance, rootNode) {
356
+ const logger = createLogger('commitDom');
357
+ logger.debug('commitDom', rootInstance);
358
+ function updateDomProperties(dom, nextProps, prevProps = {}) {
359
+ const isKey = (key) => key === 'key';
360
+ const isStyle = (key) => key === 'style';
361
+ const isClass = (key) => key === 'class';
362
+ const isEvent = (key) => key.startsWith("on");
363
+ const isChildren = (key) => key === 'children';
364
+ const isGone = (_prev, next) => (key) => !(key in next);
365
+ const isNew = (prev, next) => (key) => prev[key] !== next[key];
366
+ const isProperty = (key) => !isChildren(key) && !isEvent(key) && !isStyle(key) && !isClass(key) && !isKey(key);
367
+ // https://developer.mozilla.org/zh-CN/docs/Web/API/Node
368
+ if (dom.nodeName === '#text' || dom.nodeName === '#comment') {
369
+ const textNode = dom;
370
+ if (textNode.nodeValue !== nextProps.textContent) {
371
+ textNode.nodeValue = String(nextProps.textContent);
372
+ }
373
+ return;
374
+ }
375
+ // remove old style
376
+ const oldStyle = prevProps?.style;
377
+ if (typeof oldStyle === 'object' && oldStyle != null) {
378
+ Object.keys(oldStyle).forEach(key => {
379
+ /* eslint-disable @typescript-eslint/no-explicit-any */
380
+ delete dom.style[key];
381
+ /* eslint-enable @typescript-eslint/no-explicit-any */
382
+ });
383
+ }
384
+ // add new style
385
+ const newStyle = nextProps?.style;
386
+ if (typeof newStyle === 'object' && newStyle != null) {
387
+ Object.keys(newStyle).forEach((key) => {
388
+ /* eslint-disable @typescript-eslint/no-explicit-any */
389
+ const value = newStyle?.[key];
390
+ dom.style[key] = value == null ? '' : value;
391
+ /* eslint-enable @typescript-eslint/no-explicit-any */
392
+ });
393
+ }
394
+ if (dom.className !== nextProps?.class) {
395
+ if (!nextProps?.class) {
396
+ dom.removeAttribute('class');
397
+ }
398
+ else if (typeof nextProps?.class === 'string') {
399
+ dom.setAttribute('class', nextProps?.class);
400
+ }
401
+ }
402
+ //Remove old or changed event listeners
403
+ Object.keys(prevProps)
404
+ .filter(isEvent)
405
+ .filter(key => !(key in nextProps) ||
406
+ isNew(prevProps, nextProps)(key))
407
+ .forEach(name => {
408
+ const eventType = name
409
+ .toLowerCase()
410
+ .substring(2);
411
+ if (prevProps[name] == null)
412
+ return;
413
+ if (typeof prevProps[name] !== 'function') {
414
+ console.error('EventListener is not a function');
415
+ }
416
+ else {
417
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
418
+ dom.removeEventListener(eventType, prevProps[name]);
419
+ }
420
+ });
421
+ // Add event listeners
422
+ Object.keys(nextProps)
423
+ .filter(isEvent)
424
+ .filter(isNew(prevProps, nextProps))
425
+ .forEach(name => {
426
+ const eventType = name
427
+ .toLowerCase()
428
+ .substring(2);
429
+ if (nextProps[name] == null)
430
+ return;
431
+ if (typeof nextProps[name] !== 'function') {
432
+ console.error('EventListener is not a function');
433
+ }
434
+ else {
435
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
436
+ dom.addEventListener(eventType, nextProps[name]);
437
+ }
438
+ });
439
+ // Remove old properties
440
+ Object.keys(prevProps)
441
+ .filter(isProperty)
442
+ .filter(isGone(prevProps, nextProps))
443
+ .forEach(name => dom.setAttribute(name, ''));
444
+ // Set new or changed properties
445
+ Object.keys(nextProps)
446
+ .filter(isProperty)
447
+ .filter(isNew(prevProps, nextProps))
448
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
449
+ .forEach(name => dom.setAttribute(name, nextProps[name]));
450
+ }
451
+ function getParentDom(instance) {
452
+ if (instance.parent?.domRef != null) {
453
+ return instance.parent.domRef;
454
+ }
455
+ if (instance.parent) {
456
+ return getParentDom(instance.parent);
457
+ }
458
+ throw new Error('Cant find dom');
459
+ }
460
+ function getChildDom(instance) {
461
+ if (instance.child?.domRef != null) {
462
+ return instance.child.domRef;
463
+ }
464
+ if (instance.child) {
465
+ return getChildDom(instance.child);
466
+ }
467
+ return null;
468
+ }
469
+ function commitInstanceDom(nextInstance, oldNode) {
470
+ // 移除标删元素
471
+ if (nextInstance.deletions) {
472
+ for (const deletion of nextInstance.deletions) {
473
+ const dom = deletion.domRef || getChildDom(deletion);
474
+ if (dom && dom.parentNode)
475
+ dom.parentNode.removeChild(dom);
476
+ deletion.context.triggerUnmounted();
477
+ deletion.context.dispose();
478
+ }
479
+ nextInstance.deletions.clear();
480
+ }
481
+ // 创建 dom
482
+ if (nextInstance.domRef == null) {
483
+ if (nextInstance.element == null)
484
+ throw new Error('???');
485
+ if (typeof nextInstance.element.type === 'string') {
486
+ if (nextInstance.element.type === 'text') {
487
+ const textContent = nextInstance.element.props.textContent;
488
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
489
+ nextInstance.domRef = document.createTextNode(textContent);
490
+ }
491
+ else if (nextInstance.element.type === 'comment') {
492
+ const textContent = nextInstance.element.props.textContent;
493
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
494
+ nextInstance.domRef = document.createComment(textContent);
495
+ }
496
+ else {
497
+ nextInstance.domRef = document.createElement(nextInstance.element.type);
498
+ }
499
+ }
500
+ }
501
+ // 更新属性
502
+ if (nextInstance.domRef != null && nextInstance.element != null) {
503
+ updateDomProperties(nextInstance.domRef, nextInstance.element.props, nextInstance.beforeElement?.props);
504
+ }
505
+ // 插入 parent
506
+ // TODO: 针对仅移动时优化
507
+ if (nextInstance.domRef != null) {
508
+ if (oldNode !== nextInstance.domRef) {
509
+ if (nextInstance.domRef.parentNode) {
510
+ nextInstance.domRef.parentNode.removeChild(nextInstance.domRef);
511
+ }
512
+ const parentDom = getParentDom(nextInstance);
513
+ parentDom.appendChild(nextInstance.domRef);
514
+ }
515
+ }
516
+ }
517
+ function commitWalkV2(initInstance, initNode) {
518
+ // 创建一个栈,将根节点压入栈中
519
+ const stack = [[initInstance, initNode]];
520
+ while (stack.length > 0) {
521
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
522
+ const stackLayer = stack.pop();
523
+ if (typeof stackLayer === 'function') {
524
+ stackLayer();
525
+ continue;
526
+ }
527
+ const [instance, node] = stackLayer;
528
+ commitInstanceDom(instance, node);
529
+ // stack 是先入后出
530
+ // 实际上是先渲染 child
531
+ // 这里然后再渲染 sibling
532
+ // 执行生命周期的 Mount
533
+ stack.push(() => instance.context.triggerMounted());
534
+ // 更新下一个兄弟节点
535
+ if (instance.sibling != null) {
536
+ const siblingNode = instance.domRef
537
+ ? instance.domRef.nextSibling
538
+ : node?.nextSibling;
539
+ stack.push([instance.sibling, siblingNode || undefined]);
540
+ }
541
+ // 更新下一个子节点
542
+ if (instance.child != null) {
543
+ const childNode = instance.domRef
544
+ ? instance.domRef.firstChild
545
+ : node;
546
+ stack.push([instance.child, childNode || undefined]);
547
+ }
548
+ }
549
+ }
550
+ commitWalkV2(rootInstance, rootNode);
551
+ }
552
+ /**
553
+ * 调度
554
+ */
555
+ function workLoop(deadline) {
556
+ let shouldYield = false;
557
+ const logger = createLogger('workLoop');
558
+ while (context.nextUnitOfWork && !shouldYield) {
559
+ logger.debug('nextUnitOfWork', context.nextUnitOfWork);
560
+ context.nextUnitOfWork = performUnitOfWork(context.nextUnitOfWork);
561
+ if (context.nextUnitOfWork == null)
562
+ context.needCommitDom = true;
563
+ if (deadline)
564
+ shouldYield = deadline.timeRemaining() < 1;
565
+ }
566
+ if (context.needCommitDom && context.rootInstance.child) {
567
+ commitDom(context.rootInstance.child, context.rootInstance.domRef?.firstChild || undefined);
568
+ context.needCommitDom = false;
569
+ }
570
+ requestIdleCallback(workLoop);
571
+ }
572
+ // 开始调度
573
+ requestIdleCallback(workLoop);
574
+ return context.rootInstance;
575
+ }
576
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../source/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAGL,aAAa,EACb,cAAc,EAKf,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAIvC,MAAM,yBAAyB;IACrB,SAAS,GAAG,IAAI,GAAG,EAAY,CAAA;IAC/B,cAAc,GAAG,IAAI,GAAG,EAAgC,CAAA;IACxD,kBAAkB,GAAG,IAAI,GAAG,EAAkC,CAAA;IAE/D,cAAc;QACnB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACrC,IAAI,QAAQ,GAAoB,IAAI,CAAA;YAEpC,IAAI;gBACF,QAAQ,GAAG,QAAQ,EAAE,CAAA;aACtB;YAAC,OAAO,GAAY,EAAE;gBACrB,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;aAC7B;YAED,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;gBAClC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;aAC3B;QACH,CAAC,CAAC,CAAA;QACF,aAAa;QACb,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;IAC7B,CAAC;IAEM,gBAAgB;QACrB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACzC,IAAI;gBACF,QAAQ,EAAE,CAAA;aACX;YAAC,OAAO,GAAY,EAAE;gBACrB,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;aAC7B;QACH,CAAC,CAAC,CAAA;QACF,aAAa;QACb,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;IAC7B,CAAC;IAEM,SAAS,CAAC,QAAsC;QACrD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACnC,CAAC;IAEM,WAAW,CAAC,QAAwC;QACzD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACvC,CAAC;IAED,WAAW,CAAC,GAAG,SAAqB;QAClC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC3B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC9B,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO;QACL,IAAI,CAAC,SAAS,CAAC,OAAO,CACpB,CAAC,QAAkB,EAAE,EAAE;YACrB,IAAI;gBACF,QAAQ,EAAE,CAAA;aACX;YAAC,OAAO,GAAY,EAAE;gBACrB,sCAAsC;gBACtC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;aAC7B;QACH,CAAC,CACF,CAAA;QAED,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;QACtB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;QAC3B,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAA;IACjC,CAAC;IAED;;;OAGG;IACI,cAAc;QACnB,OAAO;YACL,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;YAC/C,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;SACpD,CAAA;IACH,CAAC;CACF;AAiCD,MAAM,UAAU,MAAM,CAAC,OAAoB,EAAE,MAAmB;IAC9D,MAAM,OAAO,GAAkB;QAC7B,YAAY,EAAE;YACZ,MAAM;YACN,SAAS,EAAE,EAAE;YACb,OAAO,EAAE,IAAI,yBAAyB,EAAE;SACzC;QACD,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,KAAK;KACrB,CAAA;IAED,MAAM,WAAW,GAAa;QAC5B,OAAO;QACP,SAAS,EAAE,EAAE;QACb,MAAM,EAAE,OAAO,CAAC,YAAY;QAC5B,OAAO,EAAE,IAAI,yBAAyB,EAAE;KACzC,CAAA;IAED,OAAO,CAAC,YAAY,CAAC,KAAK,GAAG,WAAW,CAAA;IACxC,OAAO,CAAC,cAAc,GAAG,WAAW,CAAA;IAEpC;;;;OAIG;IACH,SAAS,iBAAiB,CAAC,cAAwB,EAAE,oBAAmC;QACtF,MAAM,MAAM,GAAG,YAAY,CAAC,mBAAmB,CAAC,CAAA;QAChD,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,cAAc,EAAE,oBAAoB,CAAC,CAAA;QACvE,4BAA4B;QAC5B,4BAA4B;QAC5B,+BAA+B;QAC/B,4BAA4B;QAC5B,wCAAwC;QAExC;;;;;WAKG;QACH,SAAS,uBAAuB,CAAC,KAAa;YAC5C,OAAO,0BAA0B,KAAK,EAAE,CAAA;QAC1C,CAAC;QAED;;;;WAIG;QACH,8DAA8D;QAC9D,SAAS,sBAAsB,CAAC,UAAqB;YACnD,iBAAiB;YACjB,IAAI,SAAS,GAAG,CAAC,CAAA;YACjB,IAAI,SAAS,GAAG,UAAU,CAAA;YAC1B,8DAA8D;YAC9D,MAAM,GAAG,GAAG,IAAI,GAAG,EAAiB,CAAA;YAEpC,OAAO,SAAS,EAAE;gBAChB,gDAAgD;gBAChD,IAAI,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE;oBACxC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;iBACjD;qBAAM;oBACL,GAAG,CAAC,GAAG,CAAC,uBAAuB,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAA;iBACvD;gBAED,SAAS,GAAG,SAAS,CAAC,OAAO,CAAA;gBAC7B,SAAS,IAAI,CAAC,CAAA;aACf;YAED,OAAO,GAAG,CAAA;QACZ,CAAC;QAED,MAAM,wBAAwB,GAAe,EAAE,CAAA;QAC/C,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;QAExE,SAAS,gBAAgB,CAAC,KAAkB,EAAE,KAAa;YACzD,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE;gBAC3B,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAA;gBAC3B,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAA;gBACrD,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;aACzD;YAED,MAAM,QAAQ,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAA;YAC/C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAA;YAC1D,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;QAC/D,CAAC;QAED;;;;WAIG;QACH,SAAS,iBAAiB,CAAC,QAAkB,EAAE,WAAwB;YACrE,IAAI,QAAQ,IAAI,IAAI;gBAAE,OAAO,KAAK,CAAA;YAClC,IAAI,QAAQ,CAAC,OAAO,IAAI,IAAI;gBAAE,OAAO,KAAK,CAAA;YAC1C,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI;gBAAE,OAAO,KAAK,CAAA;YAC5D,OAAO,IAAI,CAAA;QACb,CAAC;QAED,SAAS,WAAW,CAAC,QAAkB;YACrC,IAAI,QAAQ,CAAC,OAAO,IAAI,IAAI;gBAAE,OAAM;YACpC,IAAI,QAAQ,CAAC,SAAS,IAAI,IAAI;gBAAE,QAAQ,CAAC,SAAS,GAAG,EAAE,CAAA;YACvD,eAAe;YACf,mBAAmB;YACnB,wCAAwC;YACxC,yCAAyC;YACzC,0CAA0C;YAE1C,UAAU;YACV,IAAI,QAAQ,CAAC,aAAa,IAAI,IAAI,EAAE;gBAClC,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE;oBAC9C,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;iBAChD;aACF;YAED,iBAAiB;YACjB,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE;gBACxC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;gBACtD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;aAC5C;QACH,CAAC;QAED,SAAS,YAAY,CAAC,QAAkB;YACtC,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAA;YACzC,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAA;YAE9C,IAAI,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE;gBAClC,OAAO,KAAK,CAAA;aACb;YAED,IACE,OAAO,QAAQ,KAAK,QAAQ;mBACzB,OAAO,SAAS,KAAK,QAAQ;mBAC7B,QAAQ,KAAK,IAAI;mBACjB,SAAS,KAAK,IAAI,EACrB;gBACA,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAA;gBACvC,OAAO,IAAI,CAAA;aACZ;YAED,uBAAuB;YACvB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACtC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;gBAC3B,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,KAAK,EAAE;oBACvC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC;wBAAE,OAAO,IAAI,CAAA;oBAC/C,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;wBAAE,OAAO,IAAI,CAAA;iBAC3D;gBAED,IAAI,GAAG,KAAK,UAAU,EAAE;oBACtB,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAmB,CAAA;oBAC3D,MAAM,YAAY,GAAG,SAAS,CAAC,UAAU,CAAmB,CAAA;oBAC5D,sBAAsB;oBACtB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;wBAAE,OAAO,KAAK,CAAA;oBAExE,mBAAmB;oBACnB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;wBACxD,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;wBACrC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;wBAErC,IAAI,SAAS,KAAK,SAAS;4BAAE,OAAO,IAAI,CAAA;wBACxC,IAAI,OAAO,SAAS,KAAK,OAAO,SAAS;4BAAE,OAAO,IAAI,CAAA;qBACvD;iBACF;gBAED,OAAO,KAAK,CAAA;aACb;YAED,OAAO,IAAI,CAAA;QACb,CAAC;QAED,4BAA4B;QAC5B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAChE,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAA;YAC3C,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;YAC1D,MAAM,UAAU,GAAG,QAAQ,IAAI,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YAEnE,IAAI,UAAU,EAAE;gBACd,KAAK,EAAE,CAAA,CAAC,4BAA4B;gBACpC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;gBACvC,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAA;gBACzC,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAA;gBAC1B,WAAW,CAAC,QAAQ,CAAC,CAAA;gBAErB,mBAAmB;gBACnB,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;oBAC5B,QAAQ,CAAC,cAAc,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;iBACjD;aACF;iBAAM;gBACL,MAAM,OAAO,GAAG,IAAI,yBAAyB,EAAE,CAAA;gBAC/C,MAAM,QAAQ,GAAa,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;gBAC/C,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;gBACvC,WAAW,CAAC,QAAQ,CAAC,CAAA;aACtB;SACF;QAED,UAAU;QACV,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,wBAAwB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACpE,MAAM,QAAQ,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAA;YAEhD,SAAS;YACT,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAA;YAChC,IAAI,KAAK,KAAK,CAAC;gBAAE,cAAc,CAAC,KAAK,GAAG,QAAQ,CAAA;YAChD,IAAI,KAAK,GAAG,CAAC;gBAAE,wBAAwB,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,QAAQ,CAAA;YACrE,IAAI,KAAK,KAAK,wBAAwB,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,QAAQ,CAAC,OAAO,CAAA;SAC3E;QAED,YAAY;QACZ,IAAI,mBAAmB,CAAC,IAAI,GAAG,CAAC,EAAE;YAChC,IAAI,cAAc,CAAC,SAAS,IAAI,IAAI,EAAE;gBACpC,cAAc,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAA;aACrC;YAED,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBACrC,cAAc,CAAC,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;YACzC,CAAC,CAAC,CAAA;SACH;QAED,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAA;IAChD,CAAC;IAED;;;;OAIG;IACH,SAAS,iBAAiB,CAAC,QAAkB;QAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAA;QAEhC,8DAA8D;QAC9D,SAAS,kBAAkB,CAAC,QAAsB;YAChD,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;YACvE,SAAS,SAAS,CAAC,OAAqB;gBACtC,IAAI,OAAO,KAAK,EAAE;oBAAE,OAAO,IAAI,CAAA;gBAC/B,IAAI,OAAO,IAAI,IAAI;oBAAE,OAAO,IAAI,CAAA;gBAChC,IAAI,OAAO,KAAK,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAClC,OAAO,KAAK,CAAA;YACd,CAAC;YAED,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;gBAC3C,IAAI,cAAc,CAAC,OAAO,CAAC;oBAAE,OAAO,OAAO,CAAA;gBAC3C,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAA;gBAC3D,MAAM,WAAW,GAAG,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;gBACrE,OAAO,aAAa,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,CAAC,CAAA;YACpD,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,UAAU;QACV,IAAI,OAAO,OAAO,EAAE,IAAI,KAAK,UAAU,EAAE;YACvC,MAAM,SAAS,GAAG,eAAe,EAAE,CAAA;YAEnC,IAAI,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE;gBAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAA;gBAC9B,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,CAAA;gBACrD,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAA;gBACrF,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;gBAC7D,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAA;aAC1D;YAED,IAAI,QAAQ,CAAC,cAAc,EAAE;gBAC3B,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;gBAC7D,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAA;gBACzD,OAAO,QAAQ,CAAC,cAAc,CAAA;aAC/B;YAED,YAAY;YACZ,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACjC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;oBAC3C,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAA;oBAC9B,IAAI,OAAO,CAAC,cAAc,IAAI,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE;wBAChE,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAA;qBACpD;gBACH,CAAC,CAAC,CAAC,CAAA;YACL,CAAC,CAAC,CAAA;SACH;QAED,WAAW;QACX,IAAI,OAAO,OAAO,EAAE,IAAI,KAAK,QAAQ,EAAE;YACrC,IAAI,UAAU,IAAI,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;gBACxE,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;aACxE;SACF;QAED,aAAa;QACb,IAAI,QAAQ,CAAC,KAAK,EAAE;YAClB,OAAO,QAAQ,CAAC,KAAK,CAAA;SACtB;QAED;;;;WAIG;QACH,SAAS,aAAa,CAAC,QAAkB;YACvC,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,OAAO,QAAQ,CAAC,OAAO,CAAA;aACxB;YACD,IAAI,QAAQ,CAAC,MAAM,EAAE;gBACnB,OAAO,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;aACtC;YAED,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAA;IAChC,CAAC;IAED;;OAEG;IACH,SAAS,SAAS,CAAC,YAAsB,EAAE,QAAoB;QAC7D,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,CAAA;QACxC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;QAIvC,SAAS,mBAAmB,CAAC,GAAgB,EAAE,SAAoB,EAAE,YAAuB,EAAE;YAC5F,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,CAAA;YAC5C,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,KAAK,OAAO,CAAA;YAChD,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,KAAK,OAAO,CAAA;YAChD,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YACrD,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,KAAK,UAAU,CAAA;YACtD,MAAM,MAAM,GAAG,CAAC,KAAgB,EAAE,IAAe,EAAE,EAAE,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAA;YACrF,MAAM,KAAK,GAAG,CAAC,IAAe,EAAE,IAAe,EAAE,EAAE,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAA;YAC5F,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAEtH,wDAAwD;YACxD,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,UAAU,EAAE;gBAC3D,MAAM,QAAQ,GAAI,GAAiC,CAAA;gBACnD,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC,WAAW,EAAE;oBAChD,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;iBACnD;gBACD,OAAM;aACP;YAED,mBAAmB;YACnB,MAAM,QAAQ,GAAG,SAAS,EAAE,KAAK,CAAA;YACjC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,IAAI,IAAI,EAAE;gBACpD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBAClC,uDAAuD;oBACvD,OAAO,GAAG,CAAC,KAAK,CAAC,GAAU,CAAC,CAAA;oBAC5B,sDAAsD;gBACxD,CAAC,CAAC,CAAA;aACH;YAED,gBAAgB;YAChB,MAAM,QAAQ,GAAG,SAAS,EAAE,KAAK,CAAA;YACjC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,IAAI,IAAI,EAAE;gBACpD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,GAAY,EAAE,EAAE;oBAC7C,uDAAuD;oBACvD,MAAM,KAAK,GAAI,QAAgB,EAAE,CAAC,GAAU,CAAC,CAAA;oBAC7C,GAAG,CAAC,KAAK,CAAC,GAAU,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;oBAClD,sDAAsD;gBACxD,CAAC,CAAC,CAAA;aACH;YAED,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,KAAK,EAAE;gBACtC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE;oBACrB,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;iBAC7B;qBAAM,IAAI,OAAO,SAAS,EAAE,KAAK,KAAK,QAAQ,EAAE;oBAC/C,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;iBAC5C;aACF;YAED,uCAAuC;YACvC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;iBACnB,MAAM,CAAC,OAAO,CAAC;iBACf,MAAM,CACL,GAAG,CAAC,EAAE,CACJ,CAAC,CAAC,GAAG,IAAI,SAAS,CAAC;gBACnB,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CACnC;iBACA,OAAO,CAAC,IAAI,CAAC,EAAE;gBACd,MAAM,SAAS,GAAG,IAAI;qBACnB,WAAW,EAAE;qBACb,SAAS,CAAC,CAAC,CAAC,CAAA;gBAEf,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI;oBAAE,OAAM;gBACnC,IAAI,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,UAAU,EAAE;oBACzC,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAA;iBACjD;qBAAM;oBACL,8DAA8D;oBAC9D,GAAG,CAAC,mBAAmB,CAAC,SAAgB,EAAE,SAAS,CAAC,IAAI,CAAQ,CAAC,CAAA;iBAClE;YACH,CAAC,CAAC,CAAA;YAEJ,sBAAsB;YACtB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;iBACnB,MAAM,CAAC,OAAO,CAAC;iBACf,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;iBACnC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACd,MAAM,SAAS,GAAG,IAAI;qBACnB,WAAW,EAAE;qBACb,SAAS,CAAC,CAAC,CAAC,CAAA;gBACf,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI;oBAAE,OAAM;gBACnC,IAAI,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,UAAU,EAAE;oBACzC,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAA;iBACjD;qBAAM;oBACL,8DAA8D;oBAC9D,GAAG,CAAC,gBAAgB,CAAC,SAAgB,EAAE,SAAS,CAAC,IAAI,CAAQ,CAAC,CAAA;iBAC/D;YACH,CAAC,CAAC,CAAA;YAEJ,wBAAwB;YACxB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;iBACnB,MAAM,CAAC,UAAU,CAAC;iBAClB,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;iBACpC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;YAE9C,gCAAgC;YAChC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;iBACnB,MAAM,CAAC,UAAU,CAAC;iBAClB,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;gBACpC,8DAA8D;iBAC7D,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAQ,CAAC,CAAC,CAAA;QACpE,CAAC;QAED,SAAS,YAAY,CAAC,QAAkB;YACtC,IAAI,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,IAAI,EAAE;gBACnC,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAA;aAC9B;YACD,IAAI,QAAQ,CAAC,MAAM,EAAE;gBACnB,OAAO,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;aACrC;YAED,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;QAClC,CAAC;QAED,SAAS,WAAW,CAAC,QAAkB;YACrC,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,IAAI,EAAE;gBAClC,OAAO,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAA;aAC7B;YACD,IAAI,QAAQ,CAAC,KAAK,EAAE;gBAClB,OAAO,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;aACnC;YAED,OAAO,IAAI,CAAA;QACb,CAAC;QAED,SAAS,iBAAiB,CAAC,YAAsB,EAAE,OAAmB;YACpE,SAAS;YACT,IAAI,YAAY,CAAC,SAAS,EAAE;gBAC1B,KAAK,MAAM,QAAQ,IAAI,YAAY,CAAC,SAAS,EAAE;oBAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAA;oBACpD,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU;wBAAE,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;oBAC1D,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAA;oBACnC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;iBAC3B;gBACD,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;aAC/B;YAED,SAAS;YACT,IAAI,YAAY,CAAC,MAAM,IAAI,IAAI,EAAE;gBAC/B,IAAI,YAAY,CAAC,OAAO,IAAI,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAA;gBACxD,IAAI,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;oBACjD,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;wBACxC,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAA;wBAC1D,8DAA8D;wBAC9D,YAAY,CAAC,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,WAAqB,CAAQ,CAAA;qBAC5E;yBAAM,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;wBAClD,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAA;wBAC1D,8DAA8D;wBAC9D,YAAY,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAqB,CAAQ,CAAA;qBAC3E;yBAAM;wBACL,YAAY,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;qBACxE;iBACF;aACF;YAED,OAAO;YACP,IAAI,YAAY,CAAC,MAAM,IAAI,IAAI,IAAI,YAAY,CAAC,OAAO,IAAI,IAAI,EAAE;gBAC/D,mBAAmB,CACjB,YAAY,CAAC,MAAM,EACnB,YAAY,CAAC,OAAO,CAAC,KAAK,EAC1B,YAAY,CAAC,aAAa,EAAE,KAAK,CAClC,CAAA;aACF;YAED,YAAY;YACZ,iBAAiB;YACjB,IAAI,YAAY,CAAC,MAAM,IAAI,IAAI,EAAE;gBAC/B,IAAI,OAAO,KAAK,YAAY,CAAC,MAAM,EAAE;oBACnC,IAAI,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE;wBAClC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;qBAChE;oBAED,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC,CAAA;oBAC5C,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;iBAC3C;aACF;QACH,CAAC;QAED,SAAS,YAAY,CAAC,YAAsB,EAAE,QAAoB;YAChE,iBAAiB;YAGjB,MAAM,KAAK,GAAiB,CAAC,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAA;YAEtD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvB,oEAAoE;gBACpE,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,EAAG,CAAA;gBAC/B,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE;oBACpC,UAAU,EAAE,CAAA;oBACZ,SAAQ;iBACT;gBAED,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,UAAU,CAAA;gBACnC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;gBAEjC,cAAc;gBACd,gBAAgB;gBAChB,kBAAkB;gBAElB,gBAAgB;gBAChB,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;gBAEnD,YAAY;gBACZ,IAAI,QAAQ,CAAC,OAAO,IAAI,IAAI,EAAE;oBAC5B,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM;wBACjC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW;wBAC7B,CAAC,CAAC,IAAI,EAAE,WAAW,CAAA;oBAErB,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,IAAI,SAAS,CAAC,CAAC,CAAA;iBACzD;gBAED,WAAW;gBACX,IAAI,QAAQ,CAAC,KAAK,IAAI,IAAI,EAAE;oBAC1B,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM;wBAC/B,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU;wBAC5B,CAAC,CAAC,IAAI,CAAA;oBAER,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,SAAS,CAAC,CAAC,CAAA;iBACrD;aACF;QACH,CAAC;QAED,YAAY,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;IACtC,CAAC;IAED;;OAEG;IACH,SAAS,QAAQ,CAAC,QAAuB;QACvC,IAAI,WAAW,GAAG,KAAK,CAAA;QACvB,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAA;QACvC,OAAO,OAAO,CAAC,cAAc,IAAI,CAAC,WAAW,EAAE;YAC7C,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;YACtD,OAAO,CAAC,cAAc,GAAG,iBAAiB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;YAClE,IAAI,OAAO,CAAC,cAAc,IAAI,IAAI;gBAAE,OAAO,CAAC,aAAa,GAAG,IAAI,CAAA;YAChE,IAAI,QAAQ;gBAAE,WAAW,GAAG,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,CAAA;SACzD;QAED,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE;YACvD,SAAS,CACP,OAAO,CAAC,YAAY,CAAC,KAAK,EAC1B,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,IAAI,SAAS,CACrD,CAAA;YACD,OAAO,CAAC,aAAa,GAAG,KAAK,CAAA;SAC9B;QAED,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IAC/B,CAAC;IAED,OAAO;IACP,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IAC7B,OAAO,OAAO,CAAC,YAAY,CAAA;AAC7B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const airxElementSymbol: unique symbol;
2
+ export declare const airxReactiveDependenciesSymbol: unique symbol;
@@ -0,0 +1,3 @@
1
+ export const airxElementSymbol = Symbol('airx-element');
2
+ export const airxReactiveDependenciesSymbol = Symbol('airx-dependencies');
3
+ //# sourceMappingURL=symbol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol.js","sourceRoot":"","sources":["../source/symbol.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,cAAc,CAAC,CAAA;AACvD,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA"}