@twobirds/microcomponents 0.0.72 → 0.0.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/README.md +35 -24
  2. package/assets/documentation/MC.md +2 -2
  3. package/assets/documentation/MicroComponents.svg +15 -0
  4. package/assets/documentation/elements.md +18 -16
  5. package/assets/documentation/formvalues.md +5 -26
  6. package/assets/documentation/observables.md +18 -24
  7. package/assets/test/test.html +5 -4
  8. package/assets/test/testform.json +27 -0
  9. package/dist/MC.d.ts +2 -2
  10. package/dist/MC.d.ts.map +1 -1
  11. package/dist/MC.min.js +2 -1
  12. package/dist/MC.ts +6 -3
  13. package/dist/elements.min.js +1 -1
  14. package/dist/formValues.d.ts.map +1 -1
  15. package/dist/formValues.ts +0 -14
  16. package/dist/formvValues.min.js +1 -1
  17. package/dist/microcomponents.min.js +1 -1
  18. package/dist/observables.d.ts.map +1 -1
  19. package/dist/observables.min.js +1 -1
  20. package/dist/observables.ts +177 -169
  21. package/dist/selectors.min.js +1 -1
  22. package/package.json +1 -1
  23. package/public/MC.d.ts +2 -2
  24. package/public/MC.d.ts.map +1 -1
  25. package/public/MC.js +4 -3
  26. package/public/MC.js.map +1 -1
  27. package/public/MC.min.js +2 -1
  28. package/public/MC.ts +6 -3
  29. package/public/documentation/MC.md +2 -2
  30. package/public/documentation/MicroComponents.svg +15 -0
  31. package/public/documentation/elements.md +18 -16
  32. package/public/documentation/formvalues.md +5 -26
  33. package/public/documentation/klemmstein.png +0 -0
  34. package/public/documentation/observables.md +18 -24
  35. package/public/elements.min.js +1 -1
  36. package/public/formValues.d.ts.map +1 -1
  37. package/public/formValues.js.map +1 -1
  38. package/public/formValues.ts +0 -14
  39. package/public/formvValues.min.js +1 -1
  40. package/public/microcomponents.min.js +1 -1
  41. package/public/observables.d.ts.map +1 -1
  42. package/public/observables.js +111 -118
  43. package/public/observables.js.map +1 -1
  44. package/public/observables.min.js +1 -1
  45. package/public/observables.ts +177 -169
  46. package/public/selectors.min.js +1 -1
  47. package/public/src/MC.ts +6 -3
  48. package/public/src/formValues.ts +0 -14
  49. package/public/src/observables.ts +177 -169
  50. package/public/test/MC.d.ts +2 -2
  51. package/public/test/MC.d.ts.map +1 -1
  52. package/public/test/MC.js +4 -3
  53. package/public/test/MC.js.map +1 -1
  54. package/public/test/MC.ts +6 -3
  55. package/public/test/formValues.d.ts.map +1 -1
  56. package/public/test/formValues.js.map +1 -1
  57. package/public/test/formValues.ts +0 -14
  58. package/public/test/microcomponents.min.js +1 -1
  59. package/public/test/observables.d.ts.map +1 -1
  60. package/public/test/observables.js +111 -118
  61. package/public/test/observables.js.map +1 -1
  62. package/public/test/observables.ts +177 -169
  63. package/public/test/test/grandparent.js +1 -1
  64. package/public/test/test/testform.js +1 -1
  65. package/public/test/test/testform.js.map +1 -1
  66. package/public/test/test.d.ts.map +1 -1
  67. package/public/test/test.html +5 -4
  68. package/public/test/test.js +5 -6
  69. package/public/test/test.js.map +1 -1
  70. package/public/test/testform.json +27 -0
  71. package/public/typedoc/assets/navigation.js +1 -1
  72. package/public/typedoc/assets/search.js +1 -1
  73. package/public/typedoc/classes/MC.DC.html +2 -2
  74. package/public/typedoc/classes/MC.MC.html +2 -2
  75. package/public/typedoc/classes/MC.McBase.html +2 -2
  76. package/public/typedoc/classes/MC.McEvent.html +2 -2
  77. package/public/typedoc/functions/MC.addListener.html +1 -1
  78. package/public/typedoc/functions/MC.autoload.html +1 -1
  79. package/public/typedoc/functions/MC.removeListener.html +1 -1
  80. package/public/typedoc/functions/elements.defineCE.html +1 -1
  81. package/public/typedoc/functions/elements.getCE.html +1 -1
  82. package/public/typedoc/functions/formValues.formValues.html +1 -1
  83. package/public/typedoc/functions/observables.observe.html +1 -1
  84. package/public/typedoc/index.html +40 -23
  85. package/public/typedoc/interfaces/MC.HTMLMcElement.html +2 -2
  86. package/public/typedoc/modules/MC.html +1 -1
  87. package/public/typedoc/modules/elements.html +1 -1
  88. package/public/typedoc/modules/formValues.html +1 -1
  89. package/public/typedoc/modules/observables.html +1 -1
  90. package/public/typedoc/modules.html +0 -1
  91. package/public/typedoc/types/observables.Observable.html +1 -1
  92. package/src/MC.ts +6 -3
  93. package/src/formValues.ts +0 -14
  94. package/src/observables.ts +177 -169
  95. package/src/test/test/testform.ts +10 -2
  96. package/src/{test.ts → test/test.ts} +32 -26
  97. package/tsconfig.json +2 -2
  98. package/typedoc.json +1 -1
  99. package/checklist.md +0 -93
  100. package/dist/microcomponents.es3.d.ts +0 -2
  101. package/dist/microcomponents.es3.d.ts.map +0 -1
  102. package/dist/test.d.ts +0 -2
  103. package/dist/test.d.ts.map +0 -1
  104. package/dist/test.ts +0 -194
  105. package/public/microcomponents.es3.d.ts +0 -2
  106. package/public/microcomponents.es3.d.ts.map +0 -1
  107. package/public/microcomponents.es3.js +0 -303
  108. package/public/microcomponents.es3.js.map +0 -1
  109. package/public/src/test.ts +0 -194
  110. package/public/test/microcomponents.es3.d.ts +0 -2
  111. package/public/test/microcomponents.es3.d.ts.map +0 -1
  112. package/public/test/microcomponents.es3.js +0 -303
  113. package/public/test/microcomponents.es3.js.map +0 -1
  114. package/public/test/test.ts +0 -194
  115. package/public/typedoc/functions/selectors._d.html +0 -1
  116. package/public/typedoc/functions/selectors._t.html +0 -1
  117. package/public/typedoc/interfaces/selectors.DSelector.html +0 -50
  118. package/public/typedoc/interfaces/selectors.TSelector.html +0 -34
  119. package/public/typedoc/modules/selectors.html +0 -7
  120. package/public/typedoc/types/selectors.selection.html +0 -1
  121. package/public/typedoc/types/selectors.singleSelector.html +0 -1
  122. package/src/microcomponents.es3.js +0 -377
  123. /package/{klemmstein.png → assets/documentation/klemmstein.png} +0 -0
@@ -1,194 +0,0 @@
1
- 'use strict';
2
-
3
- import {
4
- LooseObject,
5
- DC,
6
- McEvent,
7
- defineCE,
8
- getCE,
9
- observe,
10
- Observable,
11
- } from './microcomponents.js';
12
-
13
- class Translator extends DC {
14
- #translations: LooseObject = {};
15
-
16
- Language: unknown = 'en';
17
- Translation: unknown = {};
18
-
19
- constructor(
20
- target: HTMLElement | ShadowRoot | DocumentFragment,
21
- translations: LooseObject,
22
- translationTargetObject: HTMLElement
23
- ) {
24
- super(target as HTMLElement);
25
- let that = this; // minifier help
26
-
27
- // state
28
- that.Language = 'en';
29
- that.Translation = {};
30
-
31
- observe(that);
32
-
33
- // setup
34
- that.#translations = translations;
35
-
36
- // state
37
- (that.Language as Observable).observe((lang) => {
38
- if (that.#translations.hasOwnProperty(lang)) {
39
- that.Translation = { lang: that.#translations[lang] }; // set translation
40
- }
41
- });
42
-
43
- (that.Translation as Observable).bind(translationTargetObject);
44
-
45
- that.target.setAttribute('language', 'en');
46
-
47
- (that.Language as Observable).notify();
48
-
49
- delete that._mc; // cleanup, not needed
50
- }
51
-
52
- onAttributeChanged(ev: McEvent) {
53
- if (!ev.data.newValue) return;
54
- switch (ev.data.name) {
55
- case 'language':
56
- this.Language = ev.data.newValue;
57
- break;
58
- }
59
- }
60
- }
61
-
62
- defineCE(
63
- // equivalent to custom element registry .define()
64
- 'my-tag',
65
- class MyTag extends DC {
66
- #template: string = '<button>{lang.click} {counter}</button>';
67
-
68
- #languages = {
69
- en: {
70
- click: 'click me',
71
- },
72
- de: {
73
- click: 'klick mich',
74
- },
75
- };
76
-
77
- Dom: LooseObject = {};
78
-
79
- constructor(target: HTMLElement) {
80
- super(target);
81
-
82
- let that = this; // minifier help
83
-
84
- // render
85
- target.innerHTML = this.#template;
86
-
87
- // add translator
88
- DC.add(
89
- target,
90
- 'translator',
91
- new Translator(target, that.#languages, target)
92
- );
93
-
94
- delete that._mc; // cleanup, not needed
95
- }
96
-
97
- oneInit(ev: McEvent) {
98
- let that = this;
99
-
100
- // state
101
- that.Dom = { counter: 0 };
102
-
103
- // state: convert all props defined so far into observables
104
- observe(that);
105
-
106
- // bind Dom to target
107
- (that.Dom as Observable).bind(that.target);
108
- }
109
-
110
- onClick(ev: McEvent) {
111
- const that = this,
112
- c = that.Dom.counter++;
113
- (ev.data as PointerEvent).stopPropagation();
114
- (that.target as HTMLElement).classList.remove('clicked');
115
- (that.target as HTMLElement).classList.add(
116
- that.Dom.counter > 9 ? 'overClicked' : 'clicked'
117
- );
118
- }
119
- },
120
- ['language']
121
- );
122
-
123
- let MyTag: CustomElementConstructor = getCE('my-tag')!,
124
- fragment = new DocumentFragment();
125
-
126
- /*
127
- stress test
128
- */
129
-
130
- let start = new Date().getTime(),
131
- max = 1000;
132
-
133
- // create 1000 elements
134
- for (let x = 0; x < max; x++) {
135
- fragment.append(new MyTag());
136
- }
137
-
138
- let end = new Date().getTime();
139
-
140
- // and put them into the DOM
141
- document.body.appendChild(fragment);
142
-
143
- //document.querySelectorAll('my-tag').forEach((e) => e.remove());
144
-
145
- /*
146
- console test
147
- */
148
-
149
- setTimeout(() => {
150
- // console.clear();
151
-
152
- console.log(
153
- '%c \n\nStress Test:\n\n %cInstancing %s web components (%s classes): %c %s ms.',
154
- 'font-weight: bold; color: black;',
155
- 'font-weight: normal;',
156
- max,
157
- max * 3,
158
- 'font-weight: bold; color: blue;',
159
- end - start
160
- );
161
-
162
- //document.body.appendChild(new MyTag());
163
-
164
- let element = document.querySelector('my-tag');
165
-
166
- console.log(
167
- "\n\n%cInspect this tag:%c \n( ...to see the inner structure in the '._mc' property )\n\n %O %c %s",
168
- 'font-weight: bold;',
169
- 'font-weight: normal;',
170
- element,
171
- 'font-weight: bold;',
172
- '\n\nLook up code in the debugger: test.js\n'
173
- );
174
-
175
- let form = ( document.querySelector('test-testform') as any);
176
- let formInstance = form._mc.TestTestform;
177
-
178
- (window as any).form = formInstance;
179
- console.log(
180
- "\n\n%cAttached a global variable 'form':%c \n\n %O %c %s %c %s %c %s",
181
- 'font-weight: bold;',
182
- 'font-weight: normal;',
183
- formInstance,
184
- 'font-weight: bold;',
185
- '\n\nYou can use it to change input values, e.g. \n\n',
186
- 'font-weight: normal;',
187
- ' form.data.textInput="other value"',
188
- 'font-weight: bold;',
189
- '\n\nChanges will be reflected in the form contents, same as vice versa.\n'
190
- );
191
-
192
- // will trigger the event on all micro components contained in <my-tag>
193
- DC.trigger(element, 'doSomething');
194
- }, 500);
@@ -1,2 +0,0 @@
1
- declare function findNodesWithMcAttribute(rootNode: any, childrenOnly: any): any[];
2
- //# sourceMappingURL=microcomponents.es3.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"microcomponents.es3.d.ts","sourceRoot":"","sources":["../src/microcomponents.es3.js"],"names":[],"mappings":"AAgWA,mFAwBC"}
@@ -1,303 +0,0 @@
1
- "use strict";
2
- (function () {
3
- if (!String.prototype.trim) {
4
- String.prototype.trim = function () {
5
- return this.replace(/^\s+|\s+$/g, "");
6
- };
7
- }
8
- function unique(elements) {
9
- var uniqueElements = [];
10
- for (var i = 0; i < elements.length; i++) {
11
- if (uniqueElements.indexOf(elements[i]) === -1) {
12
- uniqueElements.push(elements[i]);
13
- }
14
- }
15
- return uniqueElements;
16
- }
17
- function matchesAttribute(element, attrSelector) {
18
- var match = attrSelector.match(/^\[([^\]=~^$*]+)([~^$*|]?=)?(['"]?)(.*?)\3\]$/);
19
- if (!match)
20
- return false;
21
- var attrName = match[1];
22
- var operator = match[2] || null;
23
- var attrValue = match[4] || null;
24
- var actualValue = element.getAttribute(attrName);
25
- if (actualValue === null)
26
- return false;
27
- switch (operator) {
28
- case null:
29
- return true;
30
- case "=":
31
- return actualValue === attrValue;
32
- case "~=":
33
- return (" " + actualValue + " ").indexOf(" " + attrValue + " ") !== -1;
34
- case "^=":
35
- return actualValue.indexOf(attrValue) === 0;
36
- case "$=":
37
- return actualValue.slice(-attrValue.length) === attrValue;
38
- case "*=":
39
- return actualValue.indexOf(attrValue) !== -1;
40
- default:
41
- return false;
42
- }
43
- }
44
- function matchesSelector(element, selector) {
45
- var regex = /(\w+)?(?:\.([\w\-]+))?(?:\[.*?\])?/g;
46
- var match, tagMatch, classMatch, attrMatch;
47
- while ((match = regex.exec(selector))) {
48
- tagMatch = match[1];
49
- classMatch = match[2] ? match[2].split(".") : null;
50
- attrMatch = selector.match(/\[.*?\]/g);
51
- if (tagMatch &&
52
- element.tagName.toLowerCase() !== tagMatch.toLowerCase()) {
53
- return false;
54
- }
55
- if (classMatch) {
56
- for (var i = 0; i < classMatch.length; i++) {
57
- if ((" " + element.className + " ").indexOf(" " + classMatch[i] + " ") === -1) {
58
- return false;
59
- }
60
- }
61
- }
62
- if (attrMatch) {
63
- for (var j = 0; j < attrMatch.length; j++) {
64
- if (!matchesAttribute(element, attrMatch[j])) {
65
- return false;
66
- }
67
- }
68
- }
69
- }
70
- return true;
71
- }
72
- if (!document.querySelectorAll) {
73
- document.querySelectorAll = function (selectors) {
74
- var simpleSelectors = selectors.split(",");
75
- var results = [];
76
- for (var i = 0; i < simpleSelectors.length; i++) {
77
- var selector = simpleSelectors[i].trim();
78
- if (!selector)
79
- continue;
80
- var allElements = document.getElementsByTagName("*");
81
- for (var j = 0; j < allElements.length; j++) {
82
- if (matchesSelector(allElements[j], selector)) {
83
- results.push(allElements[j]);
84
- }
85
- }
86
- }
87
- return unique(results);
88
- };
89
- }
90
- if (!document.querySelector) {
91
- document.querySelector = function (selectors) {
92
- var elements = document.querySelectorAll(selectors);
93
- return elements.length ? elements[0] : null;
94
- };
95
- }
96
- if (typeof HTMLElement !== "undefined" &&
97
- !HTMLElement.prototype.querySelectorAll) {
98
- HTMLElement.prototype.querySelectorAll = function (selectors) {
99
- var simpleSelectors = selectors.split(",");
100
- var results = [];
101
- for (var i = 0; i < simpleSelectors.length; i++) {
102
- var selector = simpleSelectors[i].trim();
103
- if (!selector)
104
- continue;
105
- var allElements = this.getElementsByTagName("*");
106
- for (var j = 0; j < allElements.length; j++) {
107
- if (matchesSelector(allElements[j], selector)) {
108
- results.push(allElements[j]);
109
- }
110
- }
111
- }
112
- return unique(results);
113
- };
114
- }
115
- if (typeof HTMLElement !== "undefined" &&
116
- !HTMLElement.prototype.querySelector) {
117
- HTMLElement.prototype.querySelector = function (selectors) {
118
- var elements = this.querySelectorAll(selectors);
119
- return elements.length ? elements[0] : null;
120
- };
121
- }
122
- if (!Object.values) {
123
- Object.values = function (obj) {
124
- if (obj === null ||
125
- (typeof obj !== "object" && typeof obj !== "function")) {
126
- throw new TypeError("Object.values called on a non-object");
127
- }
128
- var values = [];
129
- for (var key in obj) {
130
- if (obj.hasOwnProperty(key)) {
131
- values.push(obj[key]);
132
- }
133
- }
134
- return values;
135
- };
136
- }
137
- })();
138
- window.MC = (function () {
139
- function getMicroComponents(elements, search) {
140
- let mcValues = [];
141
- elements.forEach((e) => {
142
- if (e) {
143
- if (e instanceof HTMLElement) {
144
- const _mc = e?._mc;
145
- if (!search && _mc) {
146
- mcValues = mcValues.concat(Object.values(e._mc));
147
- }
148
- else if (search && _mc && _mc[search]) {
149
- mcValues.push(_mc[search]);
150
- }
151
- }
152
- }
153
- });
154
- return mcValues;
155
- }
156
- function traverseNodes(node, search, firstonly = true) {
157
- let mcValues = [];
158
- while (node) {
159
- if (node._mc) {
160
- if (!search) {
161
- mcValues = mcValues.concat(Object.values(node._mc));
162
- }
163
- else if (search && node._mc[search]) {
164
- mcValues.push(node._mc[search]);
165
- }
166
- if (firstonly)
167
- return mcValues;
168
- }
169
- node = node.parentNode;
170
- }
171
- return mcValues;
172
- }
173
- function isDOM(element) {
174
- return element && element instanceof HTMLElement;
175
- }
176
- var MC = function () { };
177
- class MC {
178
- #target = {};
179
- #_mc = {};
180
- static debug = false;
181
- constructor(target) {
182
- this.#target = target;
183
- this.#_mc = {};
184
- }
185
- get _mc() {
186
- if (!MC.debug)
187
- return undefined;
188
- return this.#_mc;
189
- }
190
- get target() {
191
- return this.#target;
192
- }
193
- static siblings(target, search = "") {
194
- const mc = target;
195
- if (!mc._mc) {
196
- return [];
197
- }
198
- const _mc = mc._mc;
199
- if (search.length) {
200
- return _mc?.[search] || [];
201
- }
202
- return [...Object.values(_mc)];
203
- }
204
- static add(target, key, element = {}) {
205
- let node = target;
206
- if (!node._mc) {
207
- node._mc = new MC(target);
208
- }
209
- const _mc = node._mc;
210
- if (key.length && !_mc[key]) {
211
- _mc[key] = element;
212
- if (target instanceof HTMLElement) {
213
- target.setAttribute("_mc", "");
214
- }
215
- }
216
- return element;
217
- }
218
- static remove(target, key) {
219
- if (!key)
220
- return;
221
- const _mc = target?._mc || {};
222
- if (_mc && _mc[key]) {
223
- delete _mc[key];
224
- }
225
- if (!Object.keys(_mc).length &&
226
- target instanceof HTMLElement &&
227
- target.hasAttribute("_mc")) {
228
- target.removeAttribute("_mc");
229
- }
230
- return;
231
- }
232
- add(key, element, target) {
233
- if (this.#_mc[key])
234
- return;
235
- if (target) {
236
- MC.add(target, key, element);
237
- }
238
- this.#_mc[key] = element;
239
- return element;
240
- }
241
- remove(key, target) {
242
- const _mc = this.#_mc;
243
- const t = target;
244
- if (target) {
245
- MC.remove(t, key);
246
- }
247
- delete _mc?.[key];
248
- }
249
- siblings(search = "") {
250
- const _mc = this.#_mc;
251
- if (!_mc)
252
- return [];
253
- const result = _mc[search || ""];
254
- return search && result ? [result] : [...Object.values(_mc)];
255
- }
256
- parent(search = "") {
257
- if (!isDOM(this.#target))
258
- return [];
259
- return traverseNodes(this.#target.parentNode, search, true);
260
- }
261
- parents(search = "") {
262
- if (!isDOM(this.#target))
263
- return [];
264
- return traverseNodes(this.#target.parentNode, search, false);
265
- }
266
- children(search = "") {
267
- if (!isDOM(this.#target))
268
- return [];
269
- const id = Math.random().toString().replace(".", "");
270
- const selector = '[_mc]:not([temp_id="' + id + '"] [_mc] [_mc])';
271
- this.#target.setAttribute("temp_id", id);
272
- const myDomElements = this.#target.querySelectorAll(selector);
273
- const mcValues = getMicroComponents([...myDomElements], search);
274
- this.#target.removeAttribute("temp_id");
275
- return mcValues;
276
- }
277
- descendants(search = "") {
278
- if (!isDOM(this.#target))
279
- return [];
280
- const myDomElements = this.#target.querySelectorAll("*[_mc]");
281
- return getMicroComponents([...myDomElements], search);
282
- }
283
- }
284
- return MC;
285
- })();
286
- function findNodesWithMcAttribute(rootNode, childrenOnly) {
287
- var result = [];
288
- var getChildren = childrenOnly === undefined ? true : childrenOnly;
289
- function walk(node) {
290
- if (node.nodeType === 1 && node.getAttribute("_mc") !== null) {
291
- result.push(node);
292
- return;
293
- }
294
- var child = node.firstChild;
295
- while (child) {
296
- walk(child);
297
- child = child.nextSibling;
298
- }
299
- }
300
- walk(rootNode);
301
- return result;
302
- }
303
- //# sourceMappingURL=microcomponents.es3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"microcomponents.es3.js","sourceRoot":"","sources":["../src/microcomponents.es3.js"],"names":[],"mappings":";AAAA,CAAC;IAEA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG;YACvB,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QACvC,CAAC,CAAC;IACH,CAAC;IAGD,SAAS,MAAM,CAAC,QAAQ;QACvB,IAAI,cAAc,GAAG,EAAE,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,IAAI,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAChD,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC;QACF,CAAC;QACD,OAAO,cAAc,CAAC;IACvB,CAAC;IAGD,SAAS,gBAAgB,CAAC,OAAO,EAAE,YAAY;QAC9C,IAAI,KAAK,GAAG,YAAY,CAAC,KAAK,CAC7B,+CAA+C,CAC/C,CAAC;QACF,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAEzB,IAAI,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QAChC,IAAI,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QACjC,IAAI,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAEjD,IAAI,WAAW,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAEvC,QAAQ,QAAQ,EAAE,CAAC;YAClB,KAAK,IAAI;gBACR,OAAO,IAAI,CAAC;YACb,KAAK,GAAG;gBACP,OAAO,WAAW,KAAK,SAAS,CAAC;YAClC,KAAK,IAAI;gBACR,OAAO,CAAC,GAAG,GAAG,WAAW,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YACxE,KAAK,IAAI;gBACR,OAAO,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC7C,KAAK,IAAI;gBACR,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;YAC3D,KAAK,IAAI;gBACR,OAAO,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9C;gBACC,OAAO,KAAK,CAAC;QACf,CAAC;IACF,CAAC;IAGD,SAAS,eAAe,CAAC,OAAO,EAAE,QAAQ;QACzC,IAAI,KAAK,GAAG,qCAAqC,CAAC;QAClD,IAAI,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC;QAE3C,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YACvC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACpB,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACnD,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAEvC,IACC,QAAQ;gBACR,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,EAAE,EACvD,CAAC;gBACF,OAAO,KAAK,CAAC;YACd,CAAC;YAED,IAAI,UAAU,EAAE,CAAC;gBAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC5C,IACC,CAAC,GAAG,GAAG,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,OAAO,CACtC,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CACzB,KAAK,CAAC,CAAC,EACP,CAAC;wBACF,OAAO,KAAK,CAAC;oBACd,CAAC;gBACF,CAAC;YACF,CAAC;YAED,IAAI,SAAS,EAAE,CAAC;gBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3C,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC9C,OAAO,KAAK,CAAC;oBACd,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAGD,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QAChC,QAAQ,CAAC,gBAAgB,GAAG,UAAU,SAAS;YAC9C,IAAI,eAAe,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3C,IAAI,OAAO,GAAG,EAAE,CAAC;YACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACjD,IAAI,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACzC,IAAI,CAAC,QAAQ;oBAAE,SAAS;gBAExB,IAAI,WAAW,GAAG,QAAQ,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;gBACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7C,IAAI,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;wBAC/C,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC9B,CAAC;gBACF,CAAC;YACF,CAAC;YACD,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC,CAAC;IACH,CAAC;IAGD,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC7B,QAAQ,CAAC,aAAa,GAAG,UAAU,SAAS;YAC3C,IAAI,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YACpD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7C,CAAC,CAAC;IACH,CAAC;IAGD,IACC,OAAO,WAAW,KAAK,WAAW;QAClC,CAAC,WAAW,CAAC,SAAS,CAAC,gBAAgB,EACtC,CAAC;QACF,WAAW,CAAC,SAAS,CAAC,gBAAgB,GAAG,UAAU,SAAS;YAC3D,IAAI,eAAe,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3C,IAAI,OAAO,GAAG,EAAE,CAAC;YACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACjD,IAAI,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACzC,IAAI,CAAC,QAAQ;oBAAE,SAAS;gBAExB,IAAI,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;gBACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7C,IAAI,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;wBAC/C,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC9B,CAAC;gBACF,CAAC;YACF,CAAC;YACD,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC,CAAC;IACH,CAAC;IAGD,IACC,OAAO,WAAW,KAAK,WAAW;QAClC,CAAC,WAAW,CAAC,SAAS,CAAC,aAAa,EACnC,CAAC;QACF,WAAW,CAAC,SAAS,CAAC,aAAa,GAAG,UAAU,SAAS;YACxD,IAAI,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YAChD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7C,CAAC,CAAC;IACH,CAAC;IAGD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,CAAC,MAAM,GAAG,UAAU,GAAG;YAC5B,IACC,GAAG,KAAK,IAAI;gBACZ,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,UAAU,CAAC,EACrD,CAAC;gBACF,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;YAC7D,CAAC;YAED,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;gBACrB,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC7B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvB,CAAC;YACF,CAAC;YACD,OAAO,MAAM,CAAC;QACf,CAAC,CAAC;IACH,CAAC;AACF,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,CAAC,EAAE,GAAG,CAAC;IAKZ,SAAS,kBAAkB,CAAC,QAAQ,EAAE,MAAM;QAC3C,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACtB,IAAI,CAAC,EAAE,CAAC;gBACP,IAAI,CAAC,YAAY,WAAW,EAAE,CAAC;oBAC9B,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC;oBACnB,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;wBACpB,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAClD,CAAC;yBAAM,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;wBACzC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC5B,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,SAAS,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI;QACpD,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,OAAO,IAAI,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBACd,IAAI,CAAC,MAAM,EAAE,CAAC;oBACb,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBACrD,CAAC;qBAAM,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBACvC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;gBACjC,CAAC;gBACD,IAAI,SAAS;oBAAE,OAAO,QAAQ,CAAC;YAChC,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;QACxB,CAAC;QACD,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,SAAS,KAAK,CAAC,OAAO;QACrB,OAAO,OAAO,IAAI,OAAO,YAAY,WAAW,CAAC;IAClD,CAAC;IAGD,IAAI,EAAE,GAAG,cAAa,CAAC,CAAC;IAExB,MAAM,EAAE;QACP,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,EAAE,CAAC;QACV,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,YAAY,MAAM;YACjB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;YACtB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,GAAG;YACN,IAAI,CAAC,EAAE,CAAC,KAAK;gBAAE,OAAO,SAAS,CAAC;YAChC,OAAO,IAAI,CAAC,IAAI,CAAC;QAClB,CAAC;QACD,IAAI,MAAM;YACT,OAAO,IAAI,CAAC,OAAO,CAAC;QACrB,CAAC;QAED,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE;YAClC,MAAM,EAAE,GAAG,MAAM,CAAC;YAClB,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;gBACb,OAAO,EAAE,CAAC;YACX,CAAC;YACD,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;YACnB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5B,CAAC;YACD,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,EAAE;YACnC,IAAI,IAAI,GAAG,MAAM,CAAC;YAElB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;YAC3B,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YAErB,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;gBAEnB,IAAI,MAAM,YAAY,WAAW,EAAE,CAAC;oBACnC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAChC,CAAC;YACF,CAAC;YACD,OAAO,OAAO,CAAC;QAChB,CAAC;QAED,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG;YACxB,IAAI,CAAC,GAAG;gBAAE,OAAO;YACjB,MAAM,GAAG,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;YAE9B,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;YAED,IACC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM;gBACxB,MAAM,YAAY,WAAW;gBAC7B,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,EACzB,CAAC;gBACF,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;YACD,OAAO;QACR,CAAC;QAED,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM;YACvB,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;gBAAE,OAAO;YAG3B,IAAI,MAAM,EAAE,CAAC;gBAEZ,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YAC9B,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;YACzB,OAAO,OAAO,CAAC;QAChB,CAAC;QAED,MAAM,CAAC,GAAG,EAAE,MAAM;YACjB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;YACtB,MAAM,CAAC,GAAG,MAAM,CAAC;YAGjB,IAAI,MAAM,EAAE,CAAC;gBAEZ,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACnB,CAAC;YAED,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;QAID,QAAQ,CAAC,MAAM,GAAG,EAAE;YACnB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;YACtB,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YACjC,OAAO,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9D,CAAC;QAKD,MAAM,CAAC,MAAM,GAAG,EAAE;YACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,OAAO,EAAE,CAAC;YACpC,OAAO,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,CAAC,MAAM,GAAG,EAAE;YAClB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,OAAO,EAAE,CAAC;YACpC,OAAO,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC9D,CAAC;QAED,QAAQ,CAAC,MAAM,GAAG,EAAE;YACnB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,OAAO,EAAE,CAAC;YACpC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAG,sBAAsB,GAAG,EAAE,GAAG,iBAAiB,CAAC;YACjE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACzC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC9D,MAAM,QAAQ,GAAG,kBAAkB,CAAC,CAAC,GAAG,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC;YAChE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YACxC,OAAO,QAAQ,CAAC;QACjB,CAAC;QAED,WAAW,CAAC,MAAM,GAAG,EAAE;YACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,OAAO,EAAE,CAAC;YACpC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC9D,OAAO,kBAAkB,CAAC,CAAC,GAAG,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC;QACvD,CAAC;;IAGF,OAAO,EAAE,CAAC;AACX,CAAC,CAAC,EAAE,CAAC;AAEL,SAAS,wBAAwB,CAAC,QAAQ,EAAE,YAAY;IACvD,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,IAAI,WAAW,GAAG,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;IAEnE,SAAS,IAAI,CAAC,IAAI;QAEjB,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YAC9D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO;QACR,CAAC;QAGD,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;QAC5B,OAAO,KAAK,EAAE,CAAC;YACd,IAAI,CAAC,KAAK,CAAC,CAAC;YACZ,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC;QAC3B,CAAC;IACF,CAAC;IAGD,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEf,OAAO,MAAM,CAAC;AACf,CAAC"}