@jqhtml/core 2.3.59 → 2.3.64
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/boot.d.ts +0 -0
- package/dist/boot.d.ts.map +0 -0
- package/dist/cache-key-serializer.d.ts +0 -0
- package/dist/cache-key-serializer.d.ts.map +0 -0
- package/dist/component-cache.d.ts +0 -0
- package/dist/component-cache.d.ts.map +0 -0
- package/dist/component-events.d.ts +0 -0
- package/dist/component-events.d.ts.map +0 -0
- package/dist/component-name.d.ts +13 -0
- package/dist/component-name.d.ts.map +1 -0
- package/dist/component-queue.d.ts +0 -0
- package/dist/component-queue.d.ts.map +0 -0
- package/dist/component-registry.d.ts +0 -0
- package/dist/component-registry.d.ts.map +1 -1
- package/dist/component.d.ts +2 -6
- package/dist/component.d.ts.map +1 -1
- package/dist/config.d.ts +0 -0
- package/dist/config.d.ts.map +0 -0
- package/dist/data-proxy.d.ts +0 -0
- package/dist/data-proxy.d.ts.map +0 -0
- package/dist/debug-entry.d.ts +0 -0
- package/dist/debug-entry.d.ts.map +0 -0
- package/dist/debug.d.ts +0 -0
- package/dist/debug.d.ts.map +0 -0
- package/dist/index.cjs +60 -44
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +58 -45
- package/dist/index.js.map +1 -1
- package/dist/instruction-processor.d.ts +2 -1
- package/dist/instruction-processor.d.ts.map +1 -1
- package/dist/jqhtml-core.esm.js +59 -46
- package/dist/jqhtml-core.esm.js.map +1 -1
- package/dist/jqhtml-debug.esm.js +0 -0
- package/dist/jqhtml-debug.esm.js.map +0 -0
- package/dist/jquery-plugin.d.ts +0 -0
- package/dist/jquery-plugin.d.ts.map +1 -1
- package/dist/lifecycle-manager.d.ts +0 -0
- package/dist/lifecycle-manager.d.ts.map +0 -0
- package/dist/load-coordinator.d.ts +0 -0
- package/dist/load-coordinator.d.ts.map +0 -0
- package/dist/local-storage.d.ts +0 -0
- package/dist/local-storage.d.ts.map +0 -0
- package/dist/preload-data.d.ts +0 -0
- package/dist/preload-data.d.ts.map +0 -0
- package/dist/template-renderer.d.ts +0 -0
- package/dist/template-renderer.d.ts.map +0 -0
- package/dist/viewport.d.ts +0 -0
- package/dist/viewport.d.ts.map +0 -0
- package/package.json +1 -1
- package/dist/boot.js +0 -130
- package/dist/boot.js.map +0 -1
- package/dist/cache-key-serializer.js +0 -140
- package/dist/cache-key-serializer.js.map +0 -1
- package/dist/component-cache.js +0 -270
- package/dist/component-cache.js.map +0 -1
- package/dist/component-events.js +0 -141
- package/dist/component-events.js.map +0 -1
- package/dist/component-queue.js +0 -118
- package/dist/component-queue.js.map +0 -1
- package/dist/component-registry.js +0 -298
- package/dist/component-registry.js.map +0 -1
- package/dist/component.js +0 -1892
- package/dist/component.js.map +0 -1
- package/dist/config.js +0 -64
- package/dist/config.js.map +0 -1
- package/dist/data-proxy.js +0 -223
- package/dist/data-proxy.js.map +0 -1
- package/dist/debug-entry.js +0 -8
- package/dist/debug-entry.js.map +0 -1
- package/dist/debug.js +0 -203
- package/dist/debug.js.map +0 -1
- package/dist/instruction-processor.js +0 -563
- package/dist/instruction-processor.js.map +0 -1
- package/dist/jquery-plugin.js +0 -472
- package/dist/jquery-plugin.js.map +0 -1
- package/dist/lifecycle-manager.js +0 -201
- package/dist/lifecycle-manager.js.map +0 -1
- package/dist/load-coordinator.js +0 -309
- package/dist/load-coordinator.js.map +0 -1
- package/dist/local-storage.js +0 -699
- package/dist/local-storage.js.map +0 -1
- package/dist/preload-data.js +0 -136
- package/dist/preload-data.js.map +0 -1
- package/dist/template-renderer.js +0 -278
- package/dist/template-renderer.js.map +0 -1
- package/dist/viewport.js +0 -69
- package/dist/viewport.js.map +0 -1
|
@@ -1,563 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* JQHTML v2 Instruction Processor
|
|
3
|
-
*
|
|
4
|
-
* Processes instruction arrays generated by the parser
|
|
5
|
-
* Uses v1's HTML string building approach for performance
|
|
6
|
-
*/
|
|
7
|
-
import { Jqhtml_Component } from './component.js';
|
|
8
|
-
import { debug_attributes_enabled } from './config.js';
|
|
9
|
-
import { get_component_class, get_template } from './component-registry.js';
|
|
10
|
-
// Base36 incrementing CID generator
|
|
11
|
-
// Format: aa, ab, ..., az, a0, ..., a9, ba, ..., zz, z9, aaa, ...
|
|
12
|
-
// First digit must always be a letter (a-z), subsequent digits can be a-z0-9
|
|
13
|
-
let _cid_increment = 'aa';
|
|
14
|
-
export function uid() {
|
|
15
|
-
const current = _cid_increment;
|
|
16
|
-
// Increment for next use
|
|
17
|
-
const chars = _cid_increment.split('');
|
|
18
|
-
let carry = true;
|
|
19
|
-
// Process from right to left
|
|
20
|
-
for (let i = chars.length - 1; i >= 0 && carry; i--) {
|
|
21
|
-
const char = chars[i];
|
|
22
|
-
if (char >= 'a' && char < 'z') {
|
|
23
|
-
// a-y increments to next letter
|
|
24
|
-
chars[i] = String.fromCharCode(char.charCodeAt(0) + 1);
|
|
25
|
-
carry = false;
|
|
26
|
-
}
|
|
27
|
-
else if (char === 'z') {
|
|
28
|
-
// z transitions to '0' (start of numeric range)
|
|
29
|
-
chars[i] = '0';
|
|
30
|
-
carry = false;
|
|
31
|
-
}
|
|
32
|
-
else if (char >= '0' && char < '9') {
|
|
33
|
-
// 0-8 increments to next number
|
|
34
|
-
chars[i] = String.fromCharCode(char.charCodeAt(0) + 1);
|
|
35
|
-
carry = false;
|
|
36
|
-
}
|
|
37
|
-
else if (char === '9') {
|
|
38
|
-
// 9 wraps back to 'a' with carry
|
|
39
|
-
chars[i] = 'a';
|
|
40
|
-
carry = true;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
// If we still have carry after processing all digits, we need more digits
|
|
44
|
-
if (carry) {
|
|
45
|
-
chars.unshift('a'); // Prepend new 'a' (first digit must be letter)
|
|
46
|
-
}
|
|
47
|
-
// Ensure first digit is never numeric
|
|
48
|
-
if (chars[0] >= '0' && chars[0] <= '9') {
|
|
49
|
-
chars[0] = 'a';
|
|
50
|
-
chars.unshift('a');
|
|
51
|
-
}
|
|
52
|
-
_cid_increment = chars.join('');
|
|
53
|
-
return current;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Process an array of instructions and append to target
|
|
57
|
-
* Uses v1 approach: build HTML string, set innerHTML, then initialize
|
|
58
|
-
*/
|
|
59
|
-
export function process_instructions(instructions, target, context, slots) {
|
|
60
|
-
// Build HTML string and track elements that need initialization
|
|
61
|
-
const html = [];
|
|
62
|
-
const tagElements = {};
|
|
63
|
-
const components = {};
|
|
64
|
-
// Process all instructions to build HTML
|
|
65
|
-
for (const instruction of instructions) {
|
|
66
|
-
process_instruction_to_html(instruction, html, tagElements, components, context, slots);
|
|
67
|
-
}
|
|
68
|
-
// Set innerHTML once - this is the performance win
|
|
69
|
-
// Use native innerHTML for better performance
|
|
70
|
-
target[0].innerHTML = html.join('');
|
|
71
|
-
// Second pass: initialize special attributes and events
|
|
72
|
-
for (const [tid, tagData] of Object.entries(tagElements)) {
|
|
73
|
-
// Use native querySelector for better performance
|
|
74
|
-
const el = target[0].querySelector(`[data-tid="${tid}"]`);
|
|
75
|
-
if (el) {
|
|
76
|
-
const element = $(el);
|
|
77
|
-
el.removeAttribute('data-tid');
|
|
78
|
-
apply_attributes(element, tagData.attrs, context);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
// Third pass: initialize and boot components in parallel
|
|
82
|
-
// Like v1, all sibling components at this level boot simultaneously
|
|
83
|
-
// DO NOT await - let children boot in background while parent continues
|
|
84
|
-
for (const [cid, compData] of Object.entries(components)) {
|
|
85
|
-
// Use native querySelector for better performance
|
|
86
|
-
const el = target[0].querySelector(`[data-cid="${cid}"]`);
|
|
87
|
-
if (el) {
|
|
88
|
-
const element = $(el);
|
|
89
|
-
el.removeAttribute('data-cid');
|
|
90
|
-
// Boot this component (which will render and boot its children recursively)
|
|
91
|
-
// Fire and forget - don't wait for boot to complete
|
|
92
|
-
initialize_component(element, compData);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Process a single instruction into HTML
|
|
98
|
-
*/
|
|
99
|
-
function process_instruction_to_html(instruction, html, tagElements, components, context, slots) {
|
|
100
|
-
if (typeof instruction === 'string') {
|
|
101
|
-
// Raw HTML/text - no escaping, as requested
|
|
102
|
-
html.push(instruction);
|
|
103
|
-
}
|
|
104
|
-
else if ('tag' in instruction) {
|
|
105
|
-
// HTML tag
|
|
106
|
-
process_tag_to_html(instruction, html, tagElements, components, context);
|
|
107
|
-
}
|
|
108
|
-
else if ('comp' in instruction) {
|
|
109
|
-
// Component
|
|
110
|
-
process_component_to_html(instruction, html, components, context);
|
|
111
|
-
}
|
|
112
|
-
else if ('slot' in instruction) {
|
|
113
|
-
// Slot content
|
|
114
|
-
process_slot_to_html(instruction, html, tagElements, components, context, slots);
|
|
115
|
-
}
|
|
116
|
-
else if ('rawtag' in instruction) {
|
|
117
|
-
// Raw content tag (textarea, pre)
|
|
118
|
-
process_rawtag_to_html(instruction, html);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Process a tag instruction to HTML
|
|
123
|
-
*/
|
|
124
|
-
function process_tag_to_html(instruction, html, tagElements, components, context) {
|
|
125
|
-
const [tagName, attrs, selfClosing] = instruction.tag;
|
|
126
|
-
// Check if we need to track this element for second pass
|
|
127
|
-
const needsTracking = Object.keys(attrs).some(key => key === '$sid' || key.startsWith('$') || key.startsWith('@') ||
|
|
128
|
-
key.startsWith('on') ||
|
|
129
|
-
key.startsWith('data-bind-') || key.startsWith('data-__-on-'));
|
|
130
|
-
// Start building tag
|
|
131
|
-
html.push(`<${tagName}`);
|
|
132
|
-
// Add tracking ID if needed
|
|
133
|
-
let tid = null;
|
|
134
|
-
if (needsTracking) {
|
|
135
|
-
tid = uid();
|
|
136
|
-
html.push(` data-tid="${tid}"`);
|
|
137
|
-
tagElements[tid] = { attrs, context };
|
|
138
|
-
}
|
|
139
|
-
// Add simple string/numeric attributes directly
|
|
140
|
-
for (const [key, value] of Object.entries(attrs)) {
|
|
141
|
-
if (key === 'data-sid' && !debug_attributes_enabled()) {
|
|
142
|
-
continue; // debug-only attribute; the scoped id is what $sid() resolves
|
|
143
|
-
}
|
|
144
|
-
if (!key.startsWith('$') && !key.startsWith('on') && !key.startsWith('@') &&
|
|
145
|
-
!key.startsWith('data-bind-') && !key.startsWith('data-__-on-') &&
|
|
146
|
-
(typeof value === 'string' || typeof value === 'number')) {
|
|
147
|
-
if (key === 'id' && tid) {
|
|
148
|
-
// Special handling for id attribute - scope to parent component's _cid
|
|
149
|
-
// This is for regular id="foo" attributes that need scoping (rare case)
|
|
150
|
-
// Most scoping happens via $sid attribute which becomes data-sid
|
|
151
|
-
// Don't double-scope if already scoped (contains :)
|
|
152
|
-
if (typeof value === 'string' && value.includes(':')) {
|
|
153
|
-
html.push(` id="${value}"`);
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
html.push(` id="${value}:${context._cid}"`);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
else {
|
|
160
|
-
html.push(` ${key}="${value}"`);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
// Close opening tag
|
|
165
|
-
if (selfClosing) {
|
|
166
|
-
html.push(' />');
|
|
167
|
-
}
|
|
168
|
-
else {
|
|
169
|
-
html.push('>');
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Process a component instruction to HTML
|
|
174
|
-
*/
|
|
175
|
-
function process_component_to_html(instruction, html, components, context) {
|
|
176
|
-
const [componentName, originalProps, contentOrSlots] = instruction.comp;
|
|
177
|
-
// Propagate lifecycle flags from parent to child if parent has them set
|
|
178
|
-
// This allows a parent component with these flags to automatically
|
|
179
|
-
// pass this behavior to all child components rendered in its template
|
|
180
|
-
let props = originalProps;
|
|
181
|
-
const parentArgs = context.args;
|
|
182
|
-
// Check if we need to propagate any flags.
|
|
183
|
-
// Template-authored flags arrive with the '$' still on the key ($_load_only=false
|
|
184
|
-
// compiles to props['$_load_only']) - honor both spellings so a child template can
|
|
185
|
-
// opt out of a cascading parent flag with an explicit false.
|
|
186
|
-
const own_use_cached_data = props.use_cached_data !== undefined ? props.use_cached_data : props['$use_cached_data'];
|
|
187
|
-
const own_load_only = props._load_only !== undefined ? props._load_only : props['$_load_only'];
|
|
188
|
-
const own_load_render_only = props._load_render_only !== undefined ? props._load_render_only : props['$_load_render_only'];
|
|
189
|
-
const propagate_use_cached_data = parentArgs?.use_cached_data === true && own_use_cached_data === undefined;
|
|
190
|
-
const propagate_load_only = parentArgs?._load_only === true && own_load_only === undefined;
|
|
191
|
-
const propagate_load_render_only = parentArgs?._load_render_only === true && own_load_render_only === undefined;
|
|
192
|
-
if (propagate_use_cached_data || propagate_load_only || propagate_load_render_only) {
|
|
193
|
-
props = { ...originalProps };
|
|
194
|
-
if (propagate_use_cached_data) {
|
|
195
|
-
props.use_cached_data = true;
|
|
196
|
-
}
|
|
197
|
-
if (propagate_load_only) {
|
|
198
|
-
props._load_only = true;
|
|
199
|
-
}
|
|
200
|
-
if (propagate_load_render_only) {
|
|
201
|
-
props._load_render_only = true;
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
// Determine if third parameter is a function (default content) or object (named slots)
|
|
205
|
-
let contentFn;
|
|
206
|
-
let slots;
|
|
207
|
-
if (contentOrSlots) {
|
|
208
|
-
if (typeof contentOrSlots === 'function') {
|
|
209
|
-
// Single function = default content
|
|
210
|
-
contentFn = contentOrSlots;
|
|
211
|
-
}
|
|
212
|
-
else if (typeof contentOrSlots === 'object') {
|
|
213
|
-
// Object = named slots
|
|
214
|
-
slots = contentOrSlots;
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
// Generate unique ID for this component
|
|
218
|
-
const cid = uid();
|
|
219
|
-
// Get component class (or default) and template to determine tag name
|
|
220
|
-
const ComponentClass = get_component_class(componentName) || Jqhtml_Component;
|
|
221
|
-
const template = get_template(componentName);
|
|
222
|
-
// Get tag name with precedence: _tag (invocation) > tag (template) > 'div'
|
|
223
|
-
const tagName = props._tag || template.tag || 'div';
|
|
224
|
-
// Create element with tracking ID
|
|
225
|
-
html.push(`<${tagName} data-cid="${cid}"`);
|
|
226
|
-
// Handle id attributes for components
|
|
227
|
-
// The compiled code always generates both 'id' (scoped) and 'data-sid' (base) for $sid attributes
|
|
228
|
-
// We just pass through what the compiler gave us - NEVER regenerate
|
|
229
|
-
if (props['data-sid']) {
|
|
230
|
-
const baseId = props['data-sid'];
|
|
231
|
-
// The compiled code ALWAYS sets props['id'] with the correct scoped value
|
|
232
|
-
// Just use it directly - it already has the correct parent _cid baked in
|
|
233
|
-
// data-sid is debug-only: $sid() resolves via the scoped id, never this.
|
|
234
|
-
html.push(debug_attributes_enabled()
|
|
235
|
-
? ` id="${props['id']}" data-sid="${baseId}"`
|
|
236
|
-
: ` id="${props['id']}"`);
|
|
237
|
-
}
|
|
238
|
-
// Regular id passes through unchanged
|
|
239
|
-
else if (props['id']) {
|
|
240
|
-
html.push(` id="${props['id']}"`);
|
|
241
|
-
}
|
|
242
|
-
// Close tag - other attributes will be added during initialization
|
|
243
|
-
html.push('></' + tagName + '>');
|
|
244
|
-
// Track for initialization
|
|
245
|
-
components[cid] = {
|
|
246
|
-
name: componentName,
|
|
247
|
-
props,
|
|
248
|
-
contentFn,
|
|
249
|
-
slots,
|
|
250
|
-
context
|
|
251
|
-
};
|
|
252
|
-
}
|
|
253
|
-
/**
|
|
254
|
-
* Process a slot instruction to HTML
|
|
255
|
-
*/
|
|
256
|
-
function process_slot_to_html(instruction, html, tagElements, components, context, parentSlots) {
|
|
257
|
-
const [slotName] = instruction.slot;
|
|
258
|
-
// Check if parent provided content for this slot
|
|
259
|
-
if (parentSlots && slotName in parentSlots) {
|
|
260
|
-
const parentSlot = parentSlots[slotName];
|
|
261
|
-
const [, slotProps, contentFn] = parentSlot.slot;
|
|
262
|
-
// Execute slot content function with props
|
|
263
|
-
const [content] = contentFn.call(context, slotProps);
|
|
264
|
-
// Process the content to HTML
|
|
265
|
-
for (const item of content) {
|
|
266
|
-
process_instruction_to_html(item, html, tagElements, components, context);
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
else if (slotName === 'default' && instruction.slot[2]) {
|
|
270
|
-
// Use default slot content
|
|
271
|
-
const [, , defaultFn] = instruction.slot;
|
|
272
|
-
const [content] = defaultFn.call(context, {});
|
|
273
|
-
for (const item of content) {
|
|
274
|
-
process_instruction_to_html(item, html, tagElements, components, context);
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
/**
|
|
279
|
-
* Process a rawtag instruction to HTML
|
|
280
|
-
*
|
|
281
|
-
* Raw content tags (textarea, pre) preserve exact whitespace without collapsing.
|
|
282
|
-
* Content is inserted as textContent (not innerHTML) to prevent any interpretation.
|
|
283
|
-
*/
|
|
284
|
-
function process_rawtag_to_html(instruction, html) {
|
|
285
|
-
const [tagName, attrs, rawContent] = instruction.rawtag;
|
|
286
|
-
// Build opening tag
|
|
287
|
-
html.push(`<${tagName}`);
|
|
288
|
-
// Add attributes
|
|
289
|
-
for (const [key, value] of Object.entries(attrs)) {
|
|
290
|
-
if (typeof value === 'string' || typeof value === 'number') {
|
|
291
|
-
const escaped_value = String(value).replace(/"/g, '"');
|
|
292
|
-
html.push(` ${key}="${escaped_value}"`);
|
|
293
|
-
}
|
|
294
|
-
else if (typeof value === 'boolean' && value) {
|
|
295
|
-
// Boolean attribute (e.g., disabled, readonly)
|
|
296
|
-
html.push(` ${key}`);
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
html.push('>');
|
|
300
|
-
// Add raw content, preserving whitespace.
|
|
301
|
-
//
|
|
302
|
-
// <textarea> holds text and nothing else, so everything is escaped.
|
|
303
|
-
//
|
|
304
|
-
// <pre> holds phrasing content - <pre><code> is the standard code-block idiom - so
|
|
305
|
-
// markup the author wrote is passed through. A '<' that does not begin a tag is
|
|
306
|
-
// still escaped, which is what the HTML tokenizer itself does with a stray '<' and
|
|
307
|
-
// keeps code samples such as "if (a < b)" rendering as written. Interpolated
|
|
308
|
-
// values are escaped by the compiler before they reach this point.
|
|
309
|
-
const is_raw_html_content = tagName.toLowerCase() === 'pre';
|
|
310
|
-
const escaped_content = is_raw_html_content
|
|
311
|
-
? rawContent.replace(/<(?![a-zA-Z/!?])/g, '<')
|
|
312
|
-
: rawContent
|
|
313
|
-
.replace(/&/g, '&')
|
|
314
|
-
.replace(/</g, '<')
|
|
315
|
-
.replace(/>/g, '>');
|
|
316
|
-
html.push(escaped_content);
|
|
317
|
-
// Close tag
|
|
318
|
-
html.push(`</${tagName}>`);
|
|
319
|
-
}
|
|
320
|
-
/**
|
|
321
|
-
* Apply attributes with special handling to a DOM element
|
|
322
|
-
*
|
|
323
|
-
* This function processes various attribute types and applies them to the element:
|
|
324
|
-
* - $sid: Creates component-scoped IDs (handled elsewhere in HTML generation)
|
|
325
|
-
* - $*: Stored via jQuery .data() only (added to context.args for components)
|
|
326
|
-
* - @*: Event handlers with automatic preventDefault and context binding
|
|
327
|
-
* - on*: Standard event handlers with context binding
|
|
328
|
-
* - data-*: Data attributes (stored both as attributes and via .data(), added to context.args)
|
|
329
|
-
* - class: Merges with existing classes (no duplicates)
|
|
330
|
-
* - style: Merges with existing styles (rule by rule, new values override)
|
|
331
|
-
* - All other attributes: Applied directly to the element as standard HTML attributes
|
|
332
|
-
*
|
|
333
|
-
* For class and style attributes, merge logic is applied:
|
|
334
|
-
* - class: Splits both existing and new, combines without duplicates
|
|
335
|
-
* - style: Parses both into property maps, merges (new overrides), rebuilds
|
|
336
|
-
*
|
|
337
|
-
* Regular HTML attributes (href, title, role, etc.) are applied directly to the DOM
|
|
338
|
-
* and are NOT converted to data attributes or added to component args.
|
|
339
|
-
*/
|
|
340
|
-
function apply_attributes(element, attrs, context) {
|
|
341
|
-
for (const [key, value] of Object.entries(attrs)) {
|
|
342
|
-
if (key === '$sid' || key === 'id') {
|
|
343
|
-
// Already handled in HTML generation
|
|
344
|
-
continue;
|
|
345
|
-
}
|
|
346
|
-
else if (key.startsWith('$')) {
|
|
347
|
-
// $ attributes: store via jQuery .data() only
|
|
348
|
-
// Does NOT create data-* attributes on the DOM element
|
|
349
|
-
const dataKey = key.substring(1);
|
|
350
|
-
element.data(dataKey, value);
|
|
351
|
-
// } else if (key.startsWith('@')) {
|
|
352
|
-
// // Event handler with @ prefix (e.g., @click)
|
|
353
|
-
// const eventName = key.substring(1); // Remove @ to get 'click'
|
|
354
|
-
// if (typeof value === 'function') {
|
|
355
|
-
// element.on(eventName, function(e: any) {
|
|
356
|
-
// e.preventDefault(); // Auto-preventDefault as per JQHTML design
|
|
357
|
-
// // Bind 'this' to the component context and call the function
|
|
358
|
-
// value.bind(context)(e, element);
|
|
359
|
-
// });
|
|
360
|
-
// } else {
|
|
361
|
-
// console.warn("(JQHTML) Tried to assign a non function to @ event handler "+key)
|
|
362
|
-
// }
|
|
363
|
-
}
|
|
364
|
-
else if (key.startsWith('data-__-on-')) {
|
|
365
|
-
// Event handler
|
|
366
|
-
const eventName = key.substring(11); // 'data-__-on-'.length = 11
|
|
367
|
-
if (typeof value === 'function') {
|
|
368
|
-
element.on(eventName, function (e) {
|
|
369
|
-
value.bind(context)(e, element);
|
|
370
|
-
});
|
|
371
|
-
}
|
|
372
|
-
else {
|
|
373
|
-
console.warn("(JQHTML) Tried to assign a non function to on event handler " + key);
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
else if (key.startsWith('on')) {
|
|
377
|
-
// Event handler
|
|
378
|
-
const eventName = key.substring(2);
|
|
379
|
-
if (typeof value === 'function') {
|
|
380
|
-
element.on(eventName, function (e) {
|
|
381
|
-
value.bind(context)(e, element);
|
|
382
|
-
});
|
|
383
|
-
}
|
|
384
|
-
else {
|
|
385
|
-
console.warn("(JQHTML) Tried to assign a non function to on event handler " + key);
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
else if (key.startsWith('data-')) {
|
|
389
|
-
// data-sid is debug-only - suppressed entirely in production
|
|
390
|
-
if (key === 'data-sid' && !debug_attributes_enabled()) {
|
|
391
|
-
continue;
|
|
392
|
-
}
|
|
393
|
-
// Data attributes - go into DOM
|
|
394
|
-
const attrValue = typeof value === "string" ? value.trim() : value;
|
|
395
|
-
element.attr(key, attrValue);
|
|
396
|
-
// Get version without 'data-' prefix
|
|
397
|
-
const dataKey = key.substring(5);
|
|
398
|
-
// Always set element.data
|
|
399
|
-
element.data(dataKey, value);
|
|
400
|
-
}
|
|
401
|
-
else if (key === 'class') {
|
|
402
|
-
// Handle class attribute with merge logic
|
|
403
|
-
const existingClasses = element.attr('class');
|
|
404
|
-
// Debug logging
|
|
405
|
-
if (window.jqhtml?.debug?.enabled) {
|
|
406
|
-
console.log(`[InstructionProcessor] Merging class attribute:`, {
|
|
407
|
-
existing: existingClasses,
|
|
408
|
-
new: value
|
|
409
|
-
});
|
|
410
|
-
}
|
|
411
|
-
if (!existingClasses) {
|
|
412
|
-
// No existing classes - set directly
|
|
413
|
-
const attrValue = typeof value === "string" ? value.trim() : value;
|
|
414
|
-
element.attr('class', attrValue);
|
|
415
|
-
}
|
|
416
|
-
else {
|
|
417
|
-
// Merge classes - split and add if not present
|
|
418
|
-
const existing = existingClasses.split(/\s+/).filter(c => c);
|
|
419
|
-
const newClasses = String(value).split(/\s+/).filter(c => c);
|
|
420
|
-
for (const newClass of newClasses) {
|
|
421
|
-
if (!existing.includes(newClass)) {
|
|
422
|
-
existing.push(newClass);
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
element.attr('class', existing.join(' '));
|
|
426
|
-
}
|
|
427
|
-
// Debug logging result
|
|
428
|
-
if (window.jqhtml?.debug?.enabled) {
|
|
429
|
-
console.log(`[InstructionProcessor] Class after merge:`, element.attr('class'));
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
else if (key === 'style') {
|
|
433
|
-
// Handle style attribute with merge logic
|
|
434
|
-
const existingStyle = element.attr('style');
|
|
435
|
-
if (!existingStyle) {
|
|
436
|
-
// No existing style - set directly
|
|
437
|
-
const attrValue = typeof value === "string" ? value.trim() : value;
|
|
438
|
-
element.attr('style', attrValue);
|
|
439
|
-
}
|
|
440
|
-
else {
|
|
441
|
-
// Merge styles rule by rule
|
|
442
|
-
// Parse existing styles into map
|
|
443
|
-
const styleMap = {};
|
|
444
|
-
existingStyle.split(';').forEach(rule => {
|
|
445
|
-
const [prop, val] = rule.split(':').map(s => s.trim());
|
|
446
|
-
if (prop && val) {
|
|
447
|
-
styleMap[prop] = val;
|
|
448
|
-
}
|
|
449
|
-
});
|
|
450
|
-
// Parse and merge new styles
|
|
451
|
-
String(value).split(';').forEach(rule => {
|
|
452
|
-
const [prop, val] = rule.split(':').map(s => s.trim());
|
|
453
|
-
if (prop && val) {
|
|
454
|
-
styleMap[prop] = val; // Override existing or add new
|
|
455
|
-
}
|
|
456
|
-
});
|
|
457
|
-
// Rebuild style string
|
|
458
|
-
const mergedStyle = Object.entries(styleMap)
|
|
459
|
-
.map(([prop, val]) => `${prop}: ${val}`)
|
|
460
|
-
.join('; ');
|
|
461
|
-
element.attr('style', mergedStyle);
|
|
462
|
-
}
|
|
463
|
-
}
|
|
464
|
-
else {
|
|
465
|
-
// Regular HTML attributes - apply directly to the element
|
|
466
|
-
// These do NOT become data attributes or go into context.args
|
|
467
|
-
// Examples: href, title, role, aria-*, tabindex, etc.
|
|
468
|
-
if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
|
|
469
|
-
const attrValue = typeof value === "string" ? value.trim() : String(value);
|
|
470
|
-
element.attr(key, attrValue);
|
|
471
|
-
}
|
|
472
|
-
else if (typeof value === 'object') {
|
|
473
|
-
// Complex values can't be DOM attributes, store as jQuery data only
|
|
474
|
-
console.warn(`(JQHTML) Unexpected value for '${key}' on`, element);
|
|
475
|
-
// element.data(key, value);
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
|
-
}
|
|
479
|
-
}
|
|
480
|
-
/**
|
|
481
|
-
* Initialize a component on a DOM element
|
|
482
|
-
*
|
|
483
|
-
* This function sets up a component instance on the given element by:
|
|
484
|
-
* 1. Building the component's CSS classes (component name + Jqhtml_Component)
|
|
485
|
-
* 2. Applying attributes from Define tag (template.defaultAttributes) first
|
|
486
|
-
* 3. Applying attributes from invocation (props) second, which override Define attributes
|
|
487
|
-
* 4. Creating the component instance
|
|
488
|
-
*
|
|
489
|
-
* Attribute handling rules:
|
|
490
|
-
* - 'as': Determines tag name (handled in process_component_to_html)
|
|
491
|
-
* - 'class': Merged from both Define and invocation
|
|
492
|
-
* - 'style': Merged with rule-by-rule precedence (invocation wins conflicts)
|
|
493
|
-
* - '$*' and 'data-*': Become data attributes and component args
|
|
494
|
-
* - '@*': Event handlers (only allowed in invocation, not Define)
|
|
495
|
-
* - All other attributes: Applied directly to DOM element
|
|
496
|
-
*/
|
|
497
|
-
async function initialize_component(element, compData) {
|
|
498
|
-
const { name, props, contentFn, slots, context } = compData;
|
|
499
|
-
// Get component class (use default Jqhtml_Component if not registered)
|
|
500
|
-
const ComponentClass = get_component_class(name) || Jqhtml_Component;
|
|
501
|
-
// Apply invocation attributes to the element
|
|
502
|
-
// The component constructor will handle defaultAttributes
|
|
503
|
-
// Filter out internal props that start with underscore
|
|
504
|
-
const invocationAttrs = {};
|
|
505
|
-
for (const [key, value] of Object.entries(props)) {
|
|
506
|
-
if (!key.startsWith('_')) {
|
|
507
|
-
invocationAttrs[key] = value;
|
|
508
|
-
}
|
|
509
|
-
}
|
|
510
|
-
// Debug logging
|
|
511
|
-
if (window.jqhtml?.debug?.enabled) {
|
|
512
|
-
console.log(`[InstructionProcessor] Applying invocation attributes for ${name}:`, invocationAttrs);
|
|
513
|
-
}
|
|
514
|
-
// Apply invocation attributes (component constructor will apply defaultAttributes first)
|
|
515
|
-
apply_attributes(element, invocationAttrs, context);
|
|
516
|
-
// Component will set its own data-cid during construction
|
|
517
|
-
// No need to add any tracking attributes here
|
|
518
|
-
// Prepare options for component constructor
|
|
519
|
-
// Only pass the content function - all other attributes are already on the DOM
|
|
520
|
-
const options = {};
|
|
521
|
-
if (contentFn) {
|
|
522
|
-
options._innerhtml_function = contentFn;
|
|
523
|
-
}
|
|
524
|
-
// Pass named slots if provided
|
|
525
|
-
if (slots) {
|
|
526
|
-
options._slots = slots;
|
|
527
|
-
}
|
|
528
|
-
// Always pass _component_name when component name differs from class name
|
|
529
|
-
// This happens when:
|
|
530
|
-
// 1. No class registered for component (uses Jqhtml_Component)
|
|
531
|
-
// 2. Class inherited from parent via extends chain (uses parent class but child template)
|
|
532
|
-
if (ComponentClass.name !== name) {
|
|
533
|
-
options._component_name = name;
|
|
534
|
-
}
|
|
535
|
-
// Pass lifecycle truncation flags via options (not DOM attributes, since _ prefix is filtered).
|
|
536
|
-
// Accept both the plain key (cascaded/programmatic) and the '$'-prefixed key (template-authored).
|
|
537
|
-
if (props._load_only === true || props['$_load_only'] === true) {
|
|
538
|
-
options._load_only = true;
|
|
539
|
-
}
|
|
540
|
-
if (props._load_render_only === true || props['$_load_render_only'] === true) {
|
|
541
|
-
options._load_render_only = true;
|
|
542
|
-
}
|
|
543
|
-
// Create component instance - element first, then options
|
|
544
|
-
const instance = new ComponentClass(element, options);
|
|
545
|
-
// Set the instantiator (the component that rendered this one in their template)
|
|
546
|
-
instance._instantiator = context;
|
|
547
|
-
// Boot the component immediately - this runs its full lifecycle
|
|
548
|
-
await instance._boot();
|
|
549
|
-
}
|
|
550
|
-
/**
|
|
551
|
-
* Utility to extract slots from instructions
|
|
552
|
-
*/
|
|
553
|
-
export function extract_slots(instructions) {
|
|
554
|
-
const slots = {};
|
|
555
|
-
for (const instruction of instructions) {
|
|
556
|
-
if (typeof instruction === 'object' && 'slot' in instruction) {
|
|
557
|
-
const [name] = instruction.slot;
|
|
558
|
-
slots[name] = instruction;
|
|
559
|
-
}
|
|
560
|
-
}
|
|
561
|
-
return slots;
|
|
562
|
-
}
|
|
563
|
-
//# sourceMappingURL=instruction-processor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"instruction-processor.js","sourceRoot":"","sources":["../src/instruction-processor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAmC5E,oCAAoC;AACpC,kEAAkE;AAClE,6EAA6E;AAC7E,IAAI,cAAc,GAAG,IAAI,CAAC;AAE1B,MAAM,UAAU,GAAG;IACjB,MAAM,OAAO,GAAG,cAAc,CAAC;IAE/B,yBAAyB;IACzB,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvC,IAAI,KAAK,GAAG,IAAI,CAAC;IAEjB,6BAA6B;IAC7B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC;YAC9B,gCAAgC;YAChC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACvD,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACxB,gDAAgD;YAChD,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YACf,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;aAAM,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC;YACrC,gCAAgC;YAChC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACvD,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACxB,iCAAiC;YACjC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YACf,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,+CAA+C;IACrE,CAAC;IAED,sCAAsC;IACtC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;QACvC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACf,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,YAA2B,EAC3B,MAAW,EACX,OAAyB,EACzB,KAAuC;IAEvC,gEAAgE;IAChE,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,WAAW,GAA4B,EAAE,CAAC;IAChD,MAAM,UAAU,GAAkC,EAAE,CAAC;IAErD,yCAAyC;IACzC,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,2BAA2B,CAAC,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC1F,CAAC;IAED,mDAAmD;IACnD,8CAA8C;IAC9C,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEpC,wDAAwD;IACxD,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACzD,kDAAkD;QAClD,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;QAC1D,IAAI,EAAE,EAAE,CAAC;YACP,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YACtB,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;YAC/B,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,yDAAyD;IACzD,oEAAoE;IACpE,wEAAwE;IACxE,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACzD,kDAAkD;QAClD,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;QAC1D,IAAI,EAAE,EAAE,CAAC;YACP,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YACtB,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;YAC/B,4EAA4E;YAC5E,oDAAoD;YACpD,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,2BAA2B,CAClC,WAAwB,EACxB,IAAc,EACd,WAAoC,EACpC,UAAyC,EACzC,OAAyB,EACzB,KAAuC;IAEvC,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpC,4CAA4C;QAC5C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzB,CAAC;SAAM,IAAI,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,WAAW;QACX,mBAAmB,CAAC,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC;SAAM,IAAI,MAAM,IAAI,WAAW,EAAE,CAAC;QACjC,YAAY;QACZ,yBAAyB,CAAC,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC;SAAM,IAAI,MAAM,IAAI,WAAW,EAAE,CAAC;QACjC,eAAe;QACf,oBAAoB,CAAC,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACnF,CAAC;SAAM,IAAI,QAAQ,IAAI,WAAW,EAAE,CAAC;QACnC,kCAAkC;QAClC,sBAAsB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAC1B,WAA2B,EAC3B,IAAc,EACd,WAAoC,EACpC,UAAyC,EACzC,OAAyB;IAEzB,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC;IAEtD,yDAAyD;IACzD,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAClD,GAAG,KAAK,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;QAC5D,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;QACpB,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,CAC9D,CAAC;IAEF,qBAAqB;IACrB,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;IAEzB,4BAA4B;IAC5B,IAAI,GAAG,GAAkB,IAAI,CAAC;IAC9B,IAAI,aAAa,EAAE,CAAC;QAClB,GAAG,GAAG,GAAG,EAAE,CAAC;QACZ,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC;QAChC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACxC,CAAC;IAED,gDAAgD;IAChD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,GAAG,KAAK,UAAU,IAAI,CAAC,wBAAwB,EAAE,EAAE,CAAC;YACtD,SAAS,CAAE,8DAA8D;QAC3E,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;YACrE,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC;YAC/D,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,EAAE,CAAC;YAC7D,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,EAAE,CAAC;gBACxB,uEAAuE;gBACvE,wEAAwE;gBACxE,iEAAiE;gBACjE,oDAAoD;gBACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACrD,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,KAAK,GAAG,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAChC,WAAiC,EACjC,IAAc,EACd,UAAyC,EACzC,OAAyB;IAEzB,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,cAAc,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC;IAExE,wEAAwE;IACxE,mEAAmE;IACnE,sEAAsE;IACtE,IAAI,KAAK,GAAG,aAAa,CAAC;IAC1B,MAAM,UAAU,GAAI,OAAe,CAAC,IAAI,CAAC;IAEzC,2CAA2C;IAC3C,kFAAkF;IAClF,mFAAmF;IACnF,6DAA6D;IAC7D,MAAM,mBAAmB,GAAG,KAAK,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAE,KAAa,CAAC,kBAAkB,CAAC,CAAC;IAC7H,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAE,KAAa,CAAC,aAAa,CAAC,CAAC;IACxG,MAAM,oBAAoB,GAAG,KAAK,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAE,KAAa,CAAC,oBAAoB,CAAC,CAAC;IAEpI,MAAM,yBAAyB,GAAG,UAAU,EAAE,eAAe,KAAK,IAAI,IAAI,mBAAmB,KAAK,SAAS,CAAC;IAC5G,MAAM,mBAAmB,GAAG,UAAU,EAAE,UAAU,KAAK,IAAI,IAAI,aAAa,KAAK,SAAS,CAAC;IAC3F,MAAM,0BAA0B,GAAG,UAAU,EAAE,iBAAiB,KAAK,IAAI,IAAI,oBAAoB,KAAK,SAAS,CAAC;IAIhH,IAAI,yBAAyB,IAAI,mBAAmB,IAAI,0BAA0B,EAAE,CAAC;QACnF,KAAK,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC;QAC7B,IAAI,yBAAyB,EAAE,CAAC;YAC9B,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC;QAC/B,CAAC;QACD,IAAI,mBAAmB,EAAE,CAAC;YACxB,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;QAC1B,CAAC;QACD,IAAI,0BAA0B,EAAE,CAAC;YAC/B,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC;QACjC,CAAC;IACH,CAAC;IAED,uFAAuF;IACvF,IAAI,SAAoE,CAAC;IACzE,IAAI,KAA8E,CAAC;IAEnF,IAAI,cAAc,EAAE,CAAC;QACnB,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE,CAAC;YACzC,oCAAoC;YACpC,SAAS,GAAG,cAAc,CAAC;QAC7B,CAAC;aAAM,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;YAC9C,uBAAuB;YACvB,KAAK,GAAG,cAAc,CAAC;QACzB,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC;IAElB,sEAAsE;IACtE,MAAM,cAAc,GAAG,mBAAmB,CAAC,aAAa,CAAC,IAAI,gBAAgB,CAAC;IAC9E,MAAM,QAAQ,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IAE7C,2EAA2E;IAC3E,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,GAAG,IAAI,KAAK,CAAC;IAEpD,kCAAkC;IAClC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,cAAc,GAAG,GAAG,CAAC,CAAC;IAE3C,sCAAsC;IACtC,kGAAkG;IAClG,oEAAoE;IACpE,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;QACjC,0EAA0E;QAC1E,yEAAyE;QACzE,yEAAyE;QACzE,IAAI,CAAC,IAAI,CACP,wBAAwB,EAAE;YACxB,CAAC,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,GAAG;YAC7C,CAAC,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,GAAG,CAC3B,CAAC;IACJ,CAAC;IACD,sCAAsC;SACjC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,mEAAmE;IACnE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,GAAG,CAAC,CAAC;IAEjC,2BAA2B;IAC3B,UAAU,CAAC,GAAG,CAAC,GAAG;QAChB,IAAI,EAAE,aAAa;QACnB,KAAK;QACL,SAAS;QACT,KAAK;QACL,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAC3B,WAA4B,EAC5B,IAAc,EACd,WAAoC,EACpC,UAAyC,EACzC,OAAyB,EACzB,WAA6C;IAE7C,MAAM,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC;IAEpC,iDAAiD;IACjD,IAAI,WAAW,IAAI,QAAQ,IAAI,WAAW,EAAE,CAAC;QAC3C,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC;QAEjD,2CAA2C;QAC3C,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAErD,8BAA8B;QAC9B,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,2BAA2B,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;SAAM,IAAI,QAAQ,KAAK,SAAS,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,2BAA2B;QAC3B,MAAM,CAAC,EAAE,AAAD,EAAG,SAAS,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC9C,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,2BAA2B,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,sBAAsB,CAC7B,WAA8B,EAC9B,IAAc;IAEd,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC;IAExD,oBAAoB;IACpB,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;IAEzB,iBAAiB;IACjB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC3D,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC5D,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,aAAa,GAAG,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,EAAE,CAAC;YAC/C,+CAA+C;YAC/C,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEf,0CAA0C;IAC1C,EAAE;IACF,oEAAoE;IACpE,EAAE;IACF,mFAAmF;IACnF,gFAAgF;IAChF,mFAAmF;IACnF,6EAA6E;IAC7E,mEAAmE;IACnE,MAAM,mBAAmB,GAAG,OAAO,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;IAE5D,MAAM,eAAe,GAAG,mBAAmB;QACzC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC;QACjD,CAAC,CAAC,UAAU;aACP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;aACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;aACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAE7B,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAE3B,YAAY;IACZ,IAAI,CAAC,IAAI,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAS,gBAAgB,CACvB,OAAY,EACZ,KAA0B,EAC1B,OAAyB;IAEzB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACnC,qCAAqC;YACrC,SAAS;QACX,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,8CAA8C;YAC9C,uDAAuD;YACvD,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC/B,oCAAoC;YACpC,kDAAkD;YAClD,oEAAoE;YACpE,uCAAuC;YACvC,+CAA+C;YAC/C,yEAAyE;YACzE,sEAAsE;YACtE,yCAAyC;YACzC,UAAU;YACV,aAAa;YACb,sFAAsF;YACtF,MAAM;QACN,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACzC,gBAAgB;YAChB,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,4BAA4B;YACjE,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBAChC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,UAAS,CAAM;oBACnC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAClC,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,8DAA8D,GAAC,GAAG,CAAC,CAAA;YAClF,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,gBAAgB;YAChB,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBAChC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,UAAS,CAAM;oBACnC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAClC,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,8DAA8D,GAAC,GAAG,CAAC,CAAA;YAClF,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,6DAA6D;YAC7D,IAAI,GAAG,KAAK,UAAU,IAAI,CAAC,wBAAwB,EAAE,EAAE,CAAC;gBACtD,SAAS;YACX,CAAC;YACD,gCAAgC;YAChC,MAAM,SAAS,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAC7B,qCAAqC;YACrC,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACjC,0BAA0B;YAC1B,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC;aAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YAC3B,0CAA0C;YAC1C,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAE9C,gBAAgB;YAChB,IAAK,MAAc,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;gBAC3C,OAAO,CAAC,GAAG,CAAC,iDAAiD,EAAE;oBAC7D,QAAQ,EAAE,eAAe;oBACzB,GAAG,EAAE,KAAK;iBACX,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,qCAAqC;gBACrC,MAAM,SAAS,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;gBACnE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,+CAA+C;gBAC/C,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC7D,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC7D,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;oBAClC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACjC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC1B,CAAC;gBACH,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5C,CAAC;YAED,uBAAuB;YACvB,IAAK,MAAc,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;gBAC3C,OAAO,CAAC,GAAG,CAAC,2CAA2C,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAClF,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YAC3B,0CAA0C;YAC1C,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5C,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,mCAAmC;gBACnC,MAAM,SAAS,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;gBACnE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,4BAA4B;gBAC5B,iCAAiC;gBACjC,MAAM,QAAQ,GAA2B,EAAE,CAAC;gBAC5C,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBACtC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;oBACvD,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;wBAChB,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;oBACvB,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,6BAA6B;gBAC7B,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBACtC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;oBACvD,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;wBAChB,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAE,+BAA+B;oBACxD,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,uBAAuB;gBACvB,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;qBACzC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,GAAG,EAAE,CAAC;qBACvC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,0DAA0D;YAC1D,8DAA8D;YAC9D,sDAAsD;YACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;gBACzF,MAAM,SAAS,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC3E,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAC/B,CAAC;iBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACrC,oEAAoE;gBACpE,OAAO,CAAC,IAAI,CAAC,kCAAkC,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC;gBACnE,4BAA4B;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,KAAK,UAAU,oBAAoB,CACjC,OAAY,EACZ,QAAuB;IAEvB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;IAE5D,uEAAuE;IACvE,MAAM,cAAc,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC;IAErE,6CAA6C;IAC7C,0DAA0D;IAC1D,uDAAuD;IACvD,MAAM,eAAe,GAAwB,EAAE,CAAC;IAChD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,eAAe,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,IAAK,MAAc,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,6DAA6D,IAAI,GAAG,EAAE,eAAe,CAAC,CAAC;IACrG,CAAC;IAED,yFAAyF;IACzF,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;IAEpD,0DAA0D;IAC1D,8CAA8C;IAE9C,4CAA4C;IAC5C,+EAA+E;IAC/E,MAAM,OAAO,GAAQ,EAAE,CAAC;IAExB,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAC1C,CAAC;IAED,+BAA+B;IAC/B,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,0EAA0E;IAC1E,qBAAqB;IACrB,+DAA+D;IAC/D,0FAA0F;IAC1F,IAAI,cAAc,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACjC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IACjC,CAAC;IAED,gGAAgG;IAChG,kGAAkG;IAClG,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,IAAK,KAAa,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC;QACxE,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAC5B,CAAC;IACD,IAAI,KAAK,CAAC,iBAAiB,KAAK,IAAI,IAAK,KAAa,CAAC,oBAAoB,CAAC,KAAK,IAAI,EAAE,CAAC;QACtF,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IACnC,CAAC;IAED,0DAA0D;IAC1D,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAEtD,gFAAgF;IAC/E,QAAgB,CAAC,aAAa,GAAG,OAAO,CAAC;IAE1C,gEAAgE;IAChE,MAAO,QAAgB,CAAC,KAAK,EAAE,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,YAA2B;IACvD,MAAM,KAAK,GAAoC,EAAE,CAAC;IAElD,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,MAAM,IAAI,WAAW,EAAE,CAAC;YAC7D,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|