domql 1.5.73 → 1.5.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.
@@ -0,0 +1,1813 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.js
21
+ var src_exports = {};
22
+ __export(src_exports, {
23
+ default: () => src_default
24
+ });
25
+ module.exports = __toCommonJS(src_exports);
26
+
27
+ // node_modules/@domql/globals/index.js
28
+ var window = globalThis;
29
+ var document2 = window.document;
30
+
31
+ // src/element/nodes.js
32
+ var nodes_default = {
33
+ root: [
34
+ "body",
35
+ "html"
36
+ ],
37
+ head: [
38
+ "title",
39
+ "base",
40
+ "meta",
41
+ "style"
42
+ ],
43
+ body: [
44
+ "html",
45
+ "body",
46
+ "string",
47
+ "fragment",
48
+ "a",
49
+ "abbr",
50
+ "acronym",
51
+ "address",
52
+ "applet",
53
+ "area",
54
+ "article",
55
+ "aside",
56
+ "audio",
57
+ "b",
58
+ "basefont",
59
+ "bdi",
60
+ "bdo",
61
+ "big",
62
+ "blockquote",
63
+ "br",
64
+ "button",
65
+ "canvas",
66
+ "caption",
67
+ "center",
68
+ "cite",
69
+ "code",
70
+ "col",
71
+ "colgroup",
72
+ "data",
73
+ "datalist",
74
+ "dd",
75
+ "del",
76
+ "details",
77
+ "dfn",
78
+ "dialog",
79
+ "dir",
80
+ "div",
81
+ "dl",
82
+ "dt",
83
+ "em",
84
+ "embed",
85
+ "fieldset",
86
+ "figcaption",
87
+ "figure",
88
+ "font",
89
+ "footer",
90
+ "form",
91
+ "frame",
92
+ "frameset",
93
+ "h1",
94
+ "h2",
95
+ "h3",
96
+ "h4",
97
+ "h5",
98
+ "h6",
99
+ "head",
100
+ "header",
101
+ "hr",
102
+ "i",
103
+ "iframe",
104
+ "img",
105
+ "input",
106
+ "ins",
107
+ "kbd",
108
+ "label",
109
+ "legend",
110
+ "li",
111
+ "link",
112
+ "main",
113
+ "map",
114
+ "mark",
115
+ "meter",
116
+ "nav",
117
+ "noframes",
118
+ "noscript",
119
+ "object",
120
+ "ol",
121
+ "optgroup",
122
+ "option",
123
+ "output",
124
+ "p",
125
+ "param",
126
+ "picture",
127
+ "pre",
128
+ "progress",
129
+ "q",
130
+ "rp",
131
+ "rt",
132
+ "ruby",
133
+ "s",
134
+ "samp",
135
+ "script",
136
+ "section",
137
+ "select",
138
+ "small",
139
+ "source",
140
+ "span",
141
+ "strike",
142
+ "strong",
143
+ "sub",
144
+ "summary",
145
+ "sup",
146
+ "table",
147
+ "tbody",
148
+ "td",
149
+ "template",
150
+ "textarea",
151
+ "tfoot",
152
+ "th",
153
+ "thead",
154
+ "time",
155
+ "tr",
156
+ "track",
157
+ "tt",
158
+ "u",
159
+ "ul",
160
+ "var",
161
+ "video",
162
+ "wbr",
163
+ "svg",
164
+ "path"
165
+ ]
166
+ };
167
+
168
+ // src/utils/report.js
169
+ var errors = {
170
+ en: {
171
+ DocumentNotDefined: {
172
+ title: "Document is undefined",
173
+ description: "To tweak with DOM, you should use browser."
174
+ },
175
+ OverwriteToBuiltin: {
176
+ title: "Overwriting to builtin method",
177
+ description: "Overwriting a builtin method in the global define is not possible, please choose different name"
178
+ },
179
+ BrowserNotDefined: {
180
+ title: "Can't recognize environment",
181
+ description: "Environment should be browser application, that can run Javascript"
182
+ },
183
+ SetQuickPreferancesIsNotObject: {
184
+ title: "Quick preferances object is required",
185
+ description: 'Please pass a plain object with "lang", "culture" and "area" properties'
186
+ },
187
+ InvalidParams: {
188
+ title: "Params are invalid",
189
+ description: 'Please pass a plain object with "lang", "culture" and "area" properties'
190
+ },
191
+ CantCreateWithoutNode: {
192
+ title: "You must provide node",
193
+ description: "Can't create DOM element without setting node or text"
194
+ },
195
+ HTMLInvalidTag: {
196
+ title: "Element tag name (or DOM nodeName) is invalid",
197
+ description: "To create element, you must provide valid DOM node. See full list of them at here: http://www.w3schools.com/tags/"
198
+ },
199
+ HTMLInvalidAttr: {
200
+ title: "Attibutes object is invalid",
201
+ description: "Please pass a valid plain object to apply as an attributes for a DOM node"
202
+ },
203
+ HTMLInvalidData: {
204
+ title: "Data object is invalid",
205
+ description: "Please pass a valid plain object to apply as an dataset for a DOM node"
206
+ },
207
+ HTMLInvalidStyles: {
208
+ title: "Styles object is invalid",
209
+ description: "Please pass a valid plain object to apply as an style for a DOM node"
210
+ },
211
+ HTMLInvalidText: {
212
+ title: "Text string is invalid",
213
+ description: "Please pass a valid string to apply text to DOM node"
214
+ }
215
+ }
216
+ };
217
+ var report = (err, arg, element) => {
218
+ const currentLang = "en";
219
+ let errObj;
220
+ if (err && typeof err === "string")
221
+ errObj = errors[currentLang][err];
222
+ return new Error(
223
+ `"${err}", "${arg}"
224
+
225
+ `,
226
+ `${errObj.description}`,
227
+ element ? `
228
+
229
+ ${element}` : ""
230
+ );
231
+ };
232
+
233
+ // src/utils/object.js
234
+ var isTagRegistered = (arg) => nodes_default.body.indexOf(arg);
235
+ var isObject = (arg) => {
236
+ if (arg === null)
237
+ return false;
238
+ return typeof arg === "object" && arg.constructor === Object;
239
+ };
240
+ var isString = (arg) => typeof arg === "string";
241
+ var isNumber = (arg) => typeof arg === "number";
242
+ var isFunction = (arg) => typeof arg === "function";
243
+ var isArray = (arg) => Array.isArray(arg);
244
+ var isObjectLike = (arg) => {
245
+ if (arg === null)
246
+ return false;
247
+ return typeof arg === "object";
248
+ };
249
+ var isNode = (obj) => {
250
+ return typeof window.Node === "object" ? obj instanceof window.Node : obj && typeof obj === "object" && typeof obj.nodeType === "number" && typeof obj.nodeName === "string";
251
+ };
252
+ var exec = (param, element, state) => {
253
+ if (isFunction(param))
254
+ return param(element, state || element.state);
255
+ return param;
256
+ };
257
+ var map = (obj, extention, element) => {
258
+ for (const e in extention) {
259
+ obj[e] = exec(extention[e], element);
260
+ }
261
+ };
262
+ var merge = (element, obj) => {
263
+ for (const e in obj) {
264
+ const elementProp = element[e];
265
+ const objProp = obj[e];
266
+ if (elementProp === void 0) {
267
+ element[e] = objProp;
268
+ }
269
+ }
270
+ return element;
271
+ };
272
+ var deepMerge = (element, extend) => {
273
+ for (const e in extend) {
274
+ const elementProp = element[e];
275
+ const extendProp = extend[e];
276
+ if (e === "parent" || e === "props" || e === "state")
277
+ continue;
278
+ if (elementProp === void 0) {
279
+ element[e] = extendProp;
280
+ } else if (isObjectLike(elementProp) && isObject(extendProp)) {
281
+ deepMerge(elementProp, extendProp);
282
+ }
283
+ }
284
+ return element;
285
+ };
286
+ var deepClone = (obj, excluding = ["parent", "node", "__element", "state", "__root", "context"]) => {
287
+ const o = {};
288
+ for (const prop in obj) {
289
+ if (excluding.indexOf(prop) > -1)
290
+ continue;
291
+ let objProp = obj[prop];
292
+ if (prop === "extend" && isArray(objProp)) {
293
+ objProp = mergeArray(objProp);
294
+ }
295
+ if (isObjectLike(objProp)) {
296
+ o[prop] = deepClone(objProp);
297
+ } else
298
+ o[prop] = objProp;
299
+ }
300
+ return o;
301
+ };
302
+ var isEqualDeep = (param, element) => {
303
+ if (param === element)
304
+ return true;
305
+ if (!param || !element)
306
+ return false;
307
+ for (const prop in param) {
308
+ const paramProp = param[prop];
309
+ const elementProp = element[prop];
310
+ if (isObjectLike(paramProp)) {
311
+ const isEqual = isEqualDeep(paramProp, elementProp);
312
+ if (!isEqual)
313
+ return false;
314
+ } else {
315
+ const isEqual = paramProp === elementProp;
316
+ if (!isEqual)
317
+ return false;
318
+ }
319
+ }
320
+ return true;
321
+ };
322
+ var overwrite = (element, params, options) => {
323
+ const changes = {};
324
+ for (const e in params) {
325
+ if (e === "props" || e === "state")
326
+ continue;
327
+ const elementProp = element[e];
328
+ const paramsProp = params[e];
329
+ if (paramsProp !== void 0) {
330
+ element.__cached[e] = changes[e] = elementProp;
331
+ element[e] = paramsProp;
332
+ }
333
+ if (options.cleanExec)
334
+ delete element.__exec[e];
335
+ }
336
+ return changes;
337
+ };
338
+ var overwriteDeep = (obj, params, excluding = ["node", "__root"]) => {
339
+ for (const e in params) {
340
+ if (excluding.indexOf(e) > -1)
341
+ continue;
342
+ const objProp = obj[e];
343
+ const paramsProp = params[e];
344
+ if (isObjectLike(objProp) && isObjectLike(paramsProp)) {
345
+ overwriteDeep(objProp, paramsProp);
346
+ } else if (paramsProp !== void 0) {
347
+ obj[e] = paramsProp;
348
+ }
349
+ }
350
+ return obj;
351
+ };
352
+ var mergeArray = (arr) => {
353
+ return arr.reduce((a, c) => deepMerge(a, deepClone(c)), {});
354
+ };
355
+
356
+ // src/utils/node.js
357
+ var createID = function() {
358
+ let index = 0;
359
+ function newId() {
360
+ index++;
361
+ return index;
362
+ }
363
+ return newId;
364
+ }();
365
+ var createSnapshotId = createID;
366
+
367
+ // node_modules/@domql/utils/types.js
368
+ var isObject2 = (arg) => {
369
+ if (arg === null)
370
+ return false;
371
+ return typeof arg === "object" && arg.constructor === Object;
372
+ };
373
+ var isString2 = (arg) => typeof arg === "string";
374
+ var isNumber2 = (arg) => typeof arg === "number";
375
+ var isFunction2 = (arg) => typeof arg === "function";
376
+ var isBoolean = (arg) => arg === true || arg === false;
377
+ var isNull = (arg) => arg === null;
378
+ var isArray2 = (arg) => Array.isArray(arg);
379
+ var isObjectLike2 = (arg) => {
380
+ if (arg === null)
381
+ return false;
382
+ return typeof arg === "object";
383
+ };
384
+ var isNode2 = (obj) => {
385
+ return typeof window.Node === "object" ? obj instanceof window.Node : obj && typeof obj === "object" && typeof obj.nodeType === "number" && typeof obj.nodeName === "string";
386
+ };
387
+ var isHtmlElement = (obj) => {
388
+ return typeof window.HTMLElement === "object" ? obj instanceof window.HTMLElement : obj && typeof obj === "object" && obj !== null && obj.nodeType === 1 && typeof obj.nodeName === "string";
389
+ };
390
+ var isDefined = (arg) => {
391
+ return isObject2(arg) || isObjectLike2(arg) || isString2(arg) || isNumber2(arg) || isFunction2(arg) || isArray2(arg) || isObjectLike2(arg) || isBoolean(arg) || isNull(arg);
392
+ };
393
+ var isUndefined = (arg) => {
394
+ return arg === void 0;
395
+ };
396
+ var TYPES = {
397
+ boolean: isBoolean,
398
+ array: isArray2,
399
+ object: isObject2,
400
+ string: isString2,
401
+ number: isNumber2,
402
+ null: isNull,
403
+ function: isFunction2,
404
+ objectLike: isObjectLike2,
405
+ node: isNode2,
406
+ htmlElement: isHtmlElement,
407
+ defined: isDefined
408
+ };
409
+ var is = (arg) => {
410
+ return (...args) => {
411
+ return args.map((val) => TYPES[val](arg)).filter((v) => v).length > 0;
412
+ };
413
+ };
414
+ var isNot = (arg) => {
415
+ return (...args) => {
416
+ return args.map((val) => TYPES[val](arg)).filter((v) => v).length === 0;
417
+ };
418
+ };
419
+
420
+ // node_modules/@domql/utils/object.js
421
+ var diff = (obj, original, cache) => {
422
+ const changes = cache || {};
423
+ for (const e in obj) {
424
+ if (e === "ref")
425
+ continue;
426
+ const originalProp = original[e];
427
+ const objProp = obj[e];
428
+ if (isObjectLike2(originalProp) && isObjectLike2(objProp)) {
429
+ changes[e] = {};
430
+ diff(originalProp, objProp, changes[e]);
431
+ } else if (objProp !== void 0) {
432
+ changes[e] = objProp;
433
+ }
434
+ }
435
+ return changes;
436
+ };
437
+
438
+ // node_modules/@domql/utils/node.js
439
+ var createID2 = function* () {
440
+ let index = 1;
441
+ while (index < index + 1) {
442
+ yield index++;
443
+ }
444
+ }();
445
+
446
+ // src/utils/extendUtils.js
447
+ var generateHash = () => Math.random().toString(36).substring(2);
448
+ var extendStackRegistry = {};
449
+ var getHashedExtend = (extend) => {
450
+ return extendStackRegistry[extend.__hash];
451
+ };
452
+ var setHashedExtend = (extend, stack) => {
453
+ const hash = generateHash();
454
+ extend.__hash = hash;
455
+ extendStackRegistry[hash] = stack;
456
+ return stack;
457
+ };
458
+ var getExtendStackRegistry = (extend, stack) => {
459
+ if (extend.__hash) {
460
+ return stack.concat(getHashedExtend(extend));
461
+ }
462
+ return setHashedExtend(extend, stack);
463
+ };
464
+ var extractArrayExtend = (extend, stack) => {
465
+ extend.forEach((each) => flattenExtend(each, stack));
466
+ return stack;
467
+ };
468
+ var deepExtend = (extend, stack) => {
469
+ const extendOflattenExtend = extend.extend;
470
+ if (extendOflattenExtend) {
471
+ flattenExtend(extendOflattenExtend, stack);
472
+ }
473
+ return stack;
474
+ };
475
+ var flattenExtend = (extend, stack) => {
476
+ if (!extend)
477
+ return stack;
478
+ if (isArray2(extend))
479
+ return extractArrayExtend(extend, stack);
480
+ stack.push(extend);
481
+ if (extend.extend)
482
+ deepExtend(extend, stack);
483
+ return stack;
484
+ };
485
+ var deepCloneExtend = (obj) => {
486
+ const o = {};
487
+ for (const prop in obj) {
488
+ if (["parent", "node", "__element", "__root", "__key"].indexOf(prop) > -1)
489
+ continue;
490
+ const objProp = obj[prop];
491
+ if (isObject2(objProp)) {
492
+ o[prop] = deepCloneExtend(objProp);
493
+ } else if (isArray2(objProp)) {
494
+ o[prop] = objProp.map((x) => x);
495
+ } else
496
+ o[prop] = objProp;
497
+ }
498
+ return o;
499
+ };
500
+ var deepMergeExtend = (element, extend) => {
501
+ for (const e in extend) {
502
+ if (["parent", "node", "__element", "__root", "__key"].indexOf(e) > -1)
503
+ continue;
504
+ const elementProp = element[e];
505
+ const extendProp = extend[e];
506
+ if (elementProp === void 0) {
507
+ element[e] = extendProp;
508
+ } else if (isObject2(elementProp) && isObject2(extendProp)) {
509
+ deepMergeExtend(elementProp, extendProp);
510
+ } else if (isArray2(elementProp) && isArray2(extendProp)) {
511
+ element[e] = elementProp.concat(extendProp);
512
+ } else if (isArray2(elementProp) && isObject2(extendProp)) {
513
+ const obj = deepMergeExtend({}, elementProp);
514
+ element[e] = deepMergeExtend(obj, extendProp);
515
+ } else if (elementProp === void 0 && isFunction2(extendProp)) {
516
+ element[e] = extendProp;
517
+ }
518
+ }
519
+ return element;
520
+ };
521
+ var cloneAndMergeArrayExtend = (stack) => {
522
+ return stack.reduce((a, c) => {
523
+ return deepMergeExtend(a, deepCloneExtend(c));
524
+ }, {});
525
+ };
526
+ var jointStacks = (extendStack, childExtendStack) => {
527
+ return [].concat(extendStack.slice(0, 1)).concat(childExtendStack.slice(0, 1)).concat(extendStack.slice(1)).concat(childExtendStack.slice(1));
528
+ };
529
+ var getExtendStack = (extend) => {
530
+ if (!extend)
531
+ return [];
532
+ if (extend.__hash)
533
+ return getHashedExtend(extend) || [];
534
+ const stack = flattenExtend(extend, []);
535
+ return getExtendStackRegistry(extend, stack);
536
+ };
537
+
538
+ // src/element/root.js
539
+ var root = {
540
+ key: ":root",
541
+ node: document2 ? document2.body : report("DocumentNotDefined", document2)
542
+ };
543
+ var root_default = root;
544
+
545
+ // src/element/tree.js
546
+ var tree_default = root_default;
547
+
548
+ // src/event/on.js
549
+ var on_exports = {};
550
+ __export(on_exports, {
551
+ attachNode: () => attachNode,
552
+ beforeClassAssign: () => beforeClassAssign,
553
+ init: () => init,
554
+ initStateUpdated: () => initStateUpdated,
555
+ initUpdate: () => initUpdate,
556
+ render: () => render,
557
+ stateCreated: () => stateCreated,
558
+ stateInit: () => stateInit,
559
+ stateUpdated: () => stateUpdated,
560
+ update: () => update
561
+ });
562
+ var beforeClassAssign = (param, element, state) => {
563
+ return param(element, state);
564
+ };
565
+ var init = (param, element, state) => {
566
+ return param(element, state);
567
+ };
568
+ var render = (param, element, state) => {
569
+ return param(element, state);
570
+ };
571
+ var initUpdate = (param, element, state) => {
572
+ return param(element, state);
573
+ };
574
+ var attachNode = (param, element, state) => {
575
+ return param(element, state);
576
+ };
577
+ var stateInit = (param, element, state) => {
578
+ return param(element, state);
579
+ };
580
+ var stateCreated = (param, element, state) => {
581
+ return param(element, state);
582
+ };
583
+ var initStateUpdated = (param, element, state, changes) => {
584
+ return param(element, state, changes);
585
+ };
586
+ var stateUpdated = (param, element, state, changes) => {
587
+ return param(element, state, changes);
588
+ };
589
+ var update = (param, element, state) => {
590
+ return param(element, state);
591
+ };
592
+
593
+ // src/event/can.js
594
+ var can_exports = {};
595
+ __export(can_exports, {
596
+ render: () => render2
597
+ });
598
+ var render2 = (element) => {
599
+ const tag = element.tag || "div";
600
+ const isValid = nodes_default.body.indexOf(tag) > -1;
601
+ return isValid || report("HTMLInvalidTag");
602
+ };
603
+
604
+ // src/element/cache.js
605
+ var cachedElements = {};
606
+ var createNode = (element) => {
607
+ const { tag } = element;
608
+ if (tag) {
609
+ if (tag === "string")
610
+ return document2.createTextNode(element.text);
611
+ else if (tag === "fragment") {
612
+ return document2.createDocumentFragment();
613
+ } else if (tag === "svg" || tag === "path") {
614
+ return document2.createElementNS("http://www.w3.org/2000/svg", tag);
615
+ } else
616
+ return document2.createElement(tag);
617
+ } else {
618
+ return document2.createElement("div");
619
+ }
620
+ };
621
+ var detectTag = (element) => {
622
+ let { tag, key } = element;
623
+ tag = exec(tag, element);
624
+ if (tag === true)
625
+ tag = key;
626
+ if (isString(tag)) {
627
+ const tagExists = isTagRegistered(tag) > -1;
628
+ if (tagExists)
629
+ return tag;
630
+ } else {
631
+ const isKeyATag = isTagRegistered(key) > -1;
632
+ if (isKeyATag)
633
+ return key;
634
+ }
635
+ return "div";
636
+ };
637
+ var cache_default = (element) => {
638
+ const tag = element.tag = detectTag(element);
639
+ if (!can_exports.render(element)) {
640
+ return report("HTMLInvalidTag");
641
+ }
642
+ let cachedTag = cachedElements[tag];
643
+ if (!cachedTag)
644
+ cachedTag = cachedElements[tag] = createNode(element);
645
+ const clonedNode = cachedTag.cloneNode(true);
646
+ if (tag === "string")
647
+ clonedNode.nodeValue = element.text;
648
+ return clonedNode;
649
+ };
650
+
651
+ // src/element/mixins/attr.js
652
+ var attr_default = (params, element, node) => {
653
+ const { __attr } = element;
654
+ if (isNot("object"))
655
+ report("HTMLInvalidAttr", params);
656
+ if (params) {
657
+ for (const attr in params) {
658
+ const val = exec(params[attr], element);
659
+ if (val && node.setAttribute)
660
+ node.setAttribute(attr, val);
661
+ else if (node.removeAttribute)
662
+ node.removeAttribute(attr);
663
+ __attr[attr] = val;
664
+ }
665
+ }
666
+ console.groupEnd(params, __attr);
667
+ };
668
+
669
+ // src/element/mixins/classList.js
670
+ var assignClass = (element) => {
671
+ const { key } = element;
672
+ if (element.class === true)
673
+ element.class = key;
674
+ else if (!element.class && typeof key === "string" && key.charAt(0) === "_" && key.charAt(1) !== "_") {
675
+ element.class = key.slice(1);
676
+ }
677
+ };
678
+ var classify = (obj, element) => {
679
+ let className = "";
680
+ for (const item in obj) {
681
+ const param = obj[item];
682
+ if (typeof param === "boolean" && param)
683
+ className += ` ${item}`;
684
+ else if (typeof param === "string")
685
+ className += ` ${param}`;
686
+ else if (typeof param === "function") {
687
+ className += ` ${exec(param, element)}`;
688
+ }
689
+ }
690
+ return className;
691
+ };
692
+ var classList_default = (params, element, node, live) => {
693
+ if (!params)
694
+ return;
695
+ const { key, __className } = element;
696
+ if (params === true)
697
+ params = element.class = { key };
698
+ if (isString(params))
699
+ params = element.class = { default: params };
700
+ if (isObject(params))
701
+ params = classify(params, element);
702
+ const className = params.replace(/\s+/g, " ").trim();
703
+ node.classList = className;
704
+ return className;
705
+ };
706
+
707
+ // src/element/options.js
708
+ var options_default = {};
709
+
710
+ // src/element/set.js
711
+ var removeContentElement = function(el) {
712
+ const element = el || this;
713
+ if (element.content) {
714
+ if (element.content.node) {
715
+ if (element.content.tag === "fragment")
716
+ element.node.innerHTML = "";
717
+ else
718
+ element.node.removeChild(element.content.node);
719
+ }
720
+ const { __cached } = element;
721
+ if (__cached && __cached.content) {
722
+ if (__cached.content.tag === "fragment")
723
+ __cached.content.parent.node.innerHTML = "";
724
+ else if (__cached.content && isFunction(__cached.content.remove))
725
+ __cached.content.remove();
726
+ }
727
+ delete element.content;
728
+ }
729
+ };
730
+ var set = function(params, options, el) {
731
+ const element = el || this;
732
+ const isEqual = isEqualDeep(params, element.content);
733
+ if (isEqual && element.content.__cached)
734
+ return element;
735
+ removeContentElement(element);
736
+ if (params) {
737
+ const { childExtend } = params;
738
+ if (!childExtend && element.childExtend)
739
+ params.childExtend = element.childExtend;
740
+ create_default(params, element, "content", {
741
+ ignoreChildExtend: true,
742
+ ...registry_default.defaultOptions,
743
+ ...options_default.create
744
+ });
745
+ }
746
+ return element;
747
+ };
748
+ var set_default = set;
749
+
750
+ // src/element/mixins/content.js
751
+ var content_default = (param, element, node, options) => {
752
+ if (param && element) {
753
+ if (param.__hash === element.content.__hash && element.content.update) {
754
+ const { define } = element;
755
+ element.content.update(param);
756
+ } else {
757
+ set_default.call(element, param, options);
758
+ }
759
+ }
760
+ };
761
+
762
+ // src/element/mixins/data.js
763
+ var data_default = (params, element, node) => {
764
+ if (params && params.showOnNode) {
765
+ if (!isObject(params))
766
+ report("HTMLInvalidData", params);
767
+ for (const dataset in params) {
768
+ if (dataset !== "showOnNode") {
769
+ node.dataset[dataset] = exec(params[dataset], element);
770
+ }
771
+ }
772
+ }
773
+ };
774
+
775
+ // src/element/mixins/html.js
776
+ var html_default = (param, element, node) => {
777
+ const prop = exec(param, element);
778
+ if (prop !== element.__html) {
779
+ if (node.nodeName === "SVG")
780
+ node.textContent = prop;
781
+ else
782
+ node.innerHTML = prop;
783
+ element.__html = prop;
784
+ }
785
+ };
786
+
787
+ // src/element/mixins/style.js
788
+ var style_default = (params, element, node) => {
789
+ if (params) {
790
+ if (isObject(params))
791
+ map(node.style, params, element);
792
+ else
793
+ report("HTMLInvalidStyles", params);
794
+ }
795
+ };
796
+
797
+ // src/element/mixins/text.js
798
+ var text_default = (param, element, node) => {
799
+ const prop = exec(param, element);
800
+ if (element.tag === "string") {
801
+ if (element.text === prop)
802
+ return;
803
+ node.nodeValue = prop;
804
+ } else if (param !== void 0 || param !== null) {
805
+ if (element.__text) {
806
+ if (element.__text.text === prop)
807
+ return;
808
+ element.__text.text = prop;
809
+ if (element.__text.node)
810
+ element.__text.node.nodeValue = prop;
811
+ } else
812
+ create_default({ tag: "string", text: prop }, element, "__text");
813
+ }
814
+ };
815
+
816
+ // src/element/state.js
817
+ var IGNORE_STATE_PARAMS = [
818
+ "update",
819
+ "parse",
820
+ "clean",
821
+ "create",
822
+ "parent",
823
+ "__element",
824
+ "__depends",
825
+ "__ref",
826
+ "__root",
827
+ "__components",
828
+ "__projectSystem",
829
+ "__projectState",
830
+ "__projectLibrary",
831
+ "projectStateUpdate",
832
+ "projectSystemUpdate"
833
+ ];
834
+ var parseState = function() {
835
+ const state = this;
836
+ const parseState2 = {};
837
+ for (const param in state) {
838
+ if (!IGNORE_STATE_PARAMS.includes(param)) {
839
+ parseState2[param] = state[param];
840
+ }
841
+ }
842
+ return parseState2;
843
+ };
844
+ var cleanState = function() {
845
+ const state = this;
846
+ for (const param in state) {
847
+ if (!IGNORE_STATE_PARAMS.includes(param)) {
848
+ delete state[param];
849
+ }
850
+ }
851
+ return state;
852
+ };
853
+ var projectSystemUpdate = function(obj, options = {}) {
854
+ const state = this;
855
+ if (!state)
856
+ return;
857
+ const rootState = (state.__element.__root || state.__element).state;
858
+ rootState.update({ PROJECT_SYSTEM: obj }, options);
859
+ return state;
860
+ };
861
+ var projectStateUpdate = function(obj, options = {}) {
862
+ const state = this;
863
+ if (!state)
864
+ return;
865
+ const rootState = (state.__element.__root || state.__element).state;
866
+ rootState.update({ PROJECT_STATE: obj }, options);
867
+ return state;
868
+ };
869
+ var updateState = function(obj, options = {}) {
870
+ const state = this;
871
+ const element = state.__element;
872
+ state.parent = element.parent.state;
873
+ if (!state.__element)
874
+ createState(element, element.parent);
875
+ if (element.on && isFunction2(element.on.initStateUpdated)) {
876
+ const initReturns = on_exports.initStateUpdated(element.on.initStateUpdated, element, state, obj);
877
+ if (initReturns === false)
878
+ return;
879
+ }
880
+ const stateKey = element.__state;
881
+ if (stateKey) {
882
+ if (state.parent && state.parent[stateKey]) {
883
+ const keyInParentState = state.parent[stateKey];
884
+ if (keyInParentState && !options.stopStatePropogation) {
885
+ if (element.__stateType === "string") {
886
+ return state.parent.update({ [stateKey]: obj.value }, options);
887
+ }
888
+ return state.parent.update({ [stateKey]: obj }, options);
889
+ }
890
+ }
891
+ } else {
892
+ overwriteDeep(state, obj, IGNORE_STATE_PARAMS);
893
+ }
894
+ if (!options.preventUpdate) {
895
+ element.update({}, options);
896
+ } else if (options.preventUpdate === "recursive") {
897
+ element.update({}, { ...options, preventUpdate: true });
898
+ }
899
+ if (state.__depends) {
900
+ for (const el in state.__depends) {
901
+ const findElement = state.__depends[el];
902
+ findElement.clean().update(state.parse(), options);
903
+ }
904
+ }
905
+ if (!options.preventUpdateListener && element.on && isFunction2(element.on.stateUpdated)) {
906
+ on_exports.stateUpdated(element.on.stateUpdated, element, state, obj);
907
+ }
908
+ };
909
+ var createState = function(element, parent) {
910
+ let { state, __root } = element;
911
+ if (isFunction2(state))
912
+ state = exec(state, element);
913
+ if (is(state)("string", "number")) {
914
+ element.__state = state;
915
+ state = {};
916
+ }
917
+ if (state === true) {
918
+ element.__state = element.key;
919
+ state = {};
920
+ }
921
+ if (!state) {
922
+ if (parent && parent.state)
923
+ return parent.state;
924
+ return {};
925
+ } else {
926
+ element.__hasRootState = true;
927
+ }
928
+ if (element.on && isFunction2(element.on.stateInit)) {
929
+ on_exports.stateInit(element.on.stateInit, element, element.state);
930
+ }
931
+ let stateKey = element.__state;
932
+ if (stateKey) {
933
+ let parentState = parent.state;
934
+ let parentStateKey;
935
+ const parents = stateKey.split("../");
936
+ for (let i = 1; i < parents.length; i++) {
937
+ stateKey = parents[i];
938
+ parentState = parentState.parent;
939
+ }
940
+ if (stateKey.includes(".")) {
941
+ [parentStateKey, stateKey] = stateKey.split(".");
942
+ parentState = parentState[parentStateKey];
943
+ }
944
+ if (parentState && parentState[stateKey]) {
945
+ const keyInParentState = parentState[stateKey];
946
+ if (is(keyInParentState)("object", "array")) {
947
+ state = deepClone(keyInParentState);
948
+ } else if (is(keyInParentState)("string", "number")) {
949
+ state = { value: keyInParentState };
950
+ element.__stateType = "string";
951
+ } else if (isUndefined(keyInParentState)) {
952
+ console.warn(stateKey, "is not in present", "replacing with ", {});
953
+ state = {};
954
+ }
955
+ }
956
+ }
957
+ const { __ref } = state;
958
+ if (__ref) {
959
+ state = deepClone(__ref, IGNORE_STATE_PARAMS);
960
+ if (isObject2(__ref.__depends)) {
961
+ __ref.__depends[element.key] = state;
962
+ } else
963
+ __ref.__depends = { [element.key]: state };
964
+ } else {
965
+ state = deepClone(state, IGNORE_STATE_PARAMS);
966
+ }
967
+ element.state = state;
968
+ state.clean = cleanState;
969
+ state.parse = parseState;
970
+ state.update = updateState;
971
+ state.create = createState;
972
+ state.parent = element.parent.state;
973
+ state.__element = element;
974
+ state.__root = __root ? __root.state : state;
975
+ state.projectSystemUpdate = projectSystemUpdate;
976
+ state.projectStateUpdate = projectStateUpdate;
977
+ state.__components = (state.__root || state).COMPONENTS;
978
+ state.__projectSystem = (state.__root || state).PROJECT_SYSTEM;
979
+ state.__projectState = (state.__root || state).PROJECT_STATE;
980
+ state.__projectLibrary = (state.__root || state).PROJECT_LIBRARY;
981
+ if (element.on && isFunction2(element.on.stateCreated)) {
982
+ on_exports.stateCreated(element.on.stateCreated, element, state);
983
+ }
984
+ return state;
985
+ };
986
+ var state_default = createState;
987
+
988
+ // src/element/mixins/state.js
989
+ var state_default2 = (params, element, node) => {
990
+ const state = exec(params, element);
991
+ if (isObject(state)) {
992
+ for (const param in state) {
993
+ if (IGNORE_STATE_PARAMS.includes(param))
994
+ continue;
995
+ element.state[param] = exec(state[param], element);
996
+ }
997
+ }
998
+ return element;
999
+ };
1000
+
1001
+ // src/element/mixins/registry.js
1002
+ var registry_default = {
1003
+ attr: attr_default,
1004
+ style: style_default,
1005
+ text: text_default,
1006
+ html: html_default,
1007
+ content: content_default,
1008
+ data: data_default,
1009
+ class: classList_default,
1010
+ state: state_default2,
1011
+ extend: {},
1012
+ childExtend: {},
1013
+ childExtendRecursive: {},
1014
+ props: {},
1015
+ path: {},
1016
+ if: {},
1017
+ define: {},
1018
+ transform: {},
1019
+ __hash: {},
1020
+ __componentKey: {},
1021
+ __cached: {},
1022
+ __defined: {},
1023
+ __exec: {},
1024
+ __changes: {},
1025
+ __trash: {},
1026
+ __root: {},
1027
+ __props: {},
1028
+ __extend: {},
1029
+ __ifFragment: {},
1030
+ __children: {},
1031
+ __ifFalsy: {},
1032
+ __text: {},
1033
+ __element: {},
1034
+ __html: {},
1035
+ __class: {},
1036
+ __className: {},
1037
+ __classNames: {},
1038
+ __attr: {},
1039
+ __state: {},
1040
+ __stateType: {},
1041
+ __currentSnapshot: {},
1042
+ __hasRootState: {},
1043
+ nextElement: {},
1044
+ previousElement: {},
1045
+ key: {},
1046
+ tag: {},
1047
+ query: {},
1048
+ parent: {},
1049
+ node: {},
1050
+ set: {},
1051
+ update: {},
1052
+ setProps: {},
1053
+ remove: {},
1054
+ removeContent: {},
1055
+ lookup: {},
1056
+ spotByPath: {},
1057
+ keys: {},
1058
+ log: {},
1059
+ parse: {},
1060
+ parseDeep: {},
1061
+ on: {},
1062
+ component: {},
1063
+ context: {}
1064
+ };
1065
+ var parseFilters = {
1066
+ elementKeys: [
1067
+ "tag",
1068
+ "text",
1069
+ "style",
1070
+ "attr",
1071
+ "class",
1072
+ "state",
1073
+ "class",
1074
+ "data",
1075
+ "content",
1076
+ "html"
1077
+ ],
1078
+ propsKeys: ["__element"],
1079
+ stateKeys: []
1080
+ };
1081
+
1082
+ // src/element/methods.js
1083
+ var ENV = "development";
1084
+ var lookup = function(key) {
1085
+ const element = this;
1086
+ let { parent } = element;
1087
+ while (parent.key !== key) {
1088
+ if (parent[key])
1089
+ return parent[key];
1090
+ parent = parent.parent;
1091
+ if (!parent)
1092
+ return;
1093
+ }
1094
+ return parent;
1095
+ };
1096
+ var spotByPath = function(path) {
1097
+ const element = this;
1098
+ const arr = [].concat(path);
1099
+ let active = root_default[arr[0]];
1100
+ if (!arr || !arr.length)
1101
+ return console.log(arr, "on", element.key, "is undefined");
1102
+ while (active.key === arr[0]) {
1103
+ arr.shift();
1104
+ if (!arr.length)
1105
+ break;
1106
+ active = active[arr[0]];
1107
+ if (!active)
1108
+ return;
1109
+ }
1110
+ return active;
1111
+ };
1112
+ var remove = function(params) {
1113
+ const element = this;
1114
+ if (isFunction(element.node.remove))
1115
+ element.node.remove();
1116
+ else if (ENV === "test" || ENV === "development") {
1117
+ console.warn("This item cant be removed");
1118
+ element.log();
1119
+ }
1120
+ delete element.parent[element.key];
1121
+ };
1122
+ var setProps = function(param, options) {
1123
+ const element = this;
1124
+ if (!param || !element.props)
1125
+ return;
1126
+ element.update({ props: param }, options);
1127
+ return element.props;
1128
+ };
1129
+ var keys = function() {
1130
+ const element = this;
1131
+ const keys2 = [];
1132
+ for (const param in element) {
1133
+ if (registry_default[param] && !parseFilters.elementKeys.includes(param))
1134
+ continue;
1135
+ keys2.push(param);
1136
+ }
1137
+ return keys2;
1138
+ };
1139
+ var parse = function() {
1140
+ const element = this;
1141
+ const obj = {};
1142
+ const keyList = keys.call(element);
1143
+ keyList.forEach((v) => obj[v] = element[v]);
1144
+ return obj;
1145
+ };
1146
+ var parseDeep = function() {
1147
+ const element = this;
1148
+ const obj = parse.call(element);
1149
+ for (const k in obj) {
1150
+ if (isObjectLike(obj[k])) {
1151
+ obj[k] = parseDeep.call(obj[k]);
1152
+ }
1153
+ }
1154
+ return obj;
1155
+ };
1156
+ var log = function(...args) {
1157
+ const element = this;
1158
+ console.group(element.key);
1159
+ if (args.length) {
1160
+ args.forEach((v) => console.log(`%c${v}:
1161
+ `, "font-weight: bold", element[v]));
1162
+ } else {
1163
+ console.log(element.path);
1164
+ const keys2 = element.keys();
1165
+ keys2.forEach((v) => console.log(`%c${v}:
1166
+ `, "font-weight: bold", element[v]));
1167
+ }
1168
+ console.groupEnd(element.key);
1169
+ return element;
1170
+ };
1171
+ var isMethod = function(param) {
1172
+ return param === "set" || param === "update" || param === "remove" || param === "removeContent" || param === "lookup" || param === "spotByPath" || param === "keys" || param === "parse" || param === "setProps" || param === "parseDeep" || param === "if" || param === "log" || param === "nextElement" || param === "previousElement";
1173
+ };
1174
+ var nextElement = function() {
1175
+ const element = this;
1176
+ const { key, parent } = element;
1177
+ const { __children } = parent;
1178
+ const currentIndex = __children.indexOf(key);
1179
+ const nextChild = __children[currentIndex + 1];
1180
+ console.log(nextChild);
1181
+ return parent[nextChild];
1182
+ };
1183
+ var previousElement = function(el) {
1184
+ const element = el || this;
1185
+ const { key, parent } = element;
1186
+ const { __children } = parent;
1187
+ if (!__children)
1188
+ return;
1189
+ const currentIndex = __children.indexOf(key);
1190
+ return parent[__children[currentIndex - 1]];
1191
+ };
1192
+
1193
+ // src/element/iterate.js
1194
+ var applyEvents = (element) => {
1195
+ const { node, on } = element;
1196
+ for (const param in on) {
1197
+ if (param === "init" || param === "render" || param === "update")
1198
+ continue;
1199
+ const appliedFunction = element.on[param];
1200
+ if (isFunction(appliedFunction)) {
1201
+ node.addEventListener(
1202
+ param,
1203
+ (event) => appliedFunction(event, element, element.state),
1204
+ true
1205
+ );
1206
+ }
1207
+ }
1208
+ };
1209
+ var throughInitialExec = (element) => {
1210
+ for (const param in element) {
1211
+ const prop = element[param];
1212
+ if (isFunction(prop) && !isMethod(param)) {
1213
+ element.__exec[param] = prop;
1214
+ element[param] = prop(element, element.state);
1215
+ }
1216
+ }
1217
+ };
1218
+ var throughUpdatedExec = (element, options) => {
1219
+ const { __exec } = element;
1220
+ const changes = {};
1221
+ for (const param in __exec) {
1222
+ const prop = element[param];
1223
+ const newExec = __exec[param](element, element.state);
1224
+ if (prop && prop.node && (isString(newExec) || isNumber(newExec))) {
1225
+ overwrite(prop, { text: newExec }, options);
1226
+ } else if (newExec !== prop) {
1227
+ element.__cached[param] = changes[param] = prop;
1228
+ element[param] = newExec;
1229
+ }
1230
+ }
1231
+ return changes;
1232
+ };
1233
+ var throughInitialDefine = (element, options) => {
1234
+ const { define } = element;
1235
+ let obj = {};
1236
+ if (isObject(define)) {
1237
+ obj = { ...define };
1238
+ }
1239
+ if (isObject(options.define)) {
1240
+ obj = { ...obj, ...options.define };
1241
+ }
1242
+ for (const param in obj) {
1243
+ let prop = element[param];
1244
+ if (isFunction(prop) && !isMethod(param)) {
1245
+ element.__exec[param] = prop;
1246
+ element[param] = prop = exec(prop, element);
1247
+ }
1248
+ element.__cached[param] = prop;
1249
+ element[param] = obj[param](prop, element, element.state);
1250
+ }
1251
+ return element;
1252
+ };
1253
+ var throughUpdatedDefine = (element, options) => {
1254
+ const { define, __exec } = element;
1255
+ const changes = {};
1256
+ let obj = {};
1257
+ if (isObject(define)) {
1258
+ obj = { ...define };
1259
+ }
1260
+ if (isObject(options.define)) {
1261
+ obj = { ...obj, ...options.define };
1262
+ }
1263
+ for (const param in obj) {
1264
+ const execParam = __exec[param];
1265
+ if (execParam)
1266
+ element.__cached[param] = execParam(element, element.state);
1267
+ const cached = exec(element.__cached[param], element);
1268
+ element[param] = obj[param](cached, element, element.state);
1269
+ }
1270
+ return changes;
1271
+ };
1272
+
1273
+ // src/element/node.js
1274
+ var ENV2 = "development";
1275
+ var createNode2 = (element, options) => {
1276
+ let { node, tag } = element;
1277
+ let isNewNode;
1278
+ if (!node) {
1279
+ isNewNode = true;
1280
+ if (element.__ifFalsy)
1281
+ return element;
1282
+ if (tag === "shadow") {
1283
+ node = element.node = element.parent.node.attachShadow({ mode: "open" });
1284
+ } else
1285
+ node = element.node = cache_default(element);
1286
+ if (element.on && isFunction(element.on.attachNode)) {
1287
+ attachNode(element.on.attachNode, element, element.state);
1288
+ }
1289
+ }
1290
+ if (ENV2 === "test" || ENV2 === "development") {
1291
+ node.ref = element;
1292
+ if (isFunction(node.setAttribute))
1293
+ node.setAttribute("key", element.key);
1294
+ }
1295
+ if (element.__ifFalsy)
1296
+ return element;
1297
+ if (element.tag !== "string" || element.tag !== "fragment") {
1298
+ throughInitialDefine(element, options);
1299
+ throughInitialExec(element);
1300
+ if (isNewNode && isObject(element.on))
1301
+ applyEvents(element);
1302
+ for (const param in element) {
1303
+ const prop = element[param];
1304
+ if (isMethod(param) || isObject(registry_default[param]) || prop === void 0)
1305
+ continue;
1306
+ const hasDefined = element.define && element.define[param];
1307
+ const DOMQLProperty = registry_default[param];
1308
+ const hasOptionsDefine = options.define && options.define[param];
1309
+ if (DOMQLProperty && !hasOptionsDefine) {
1310
+ if (isFunction(DOMQLProperty))
1311
+ DOMQLProperty(prop, element, node, options);
1312
+ } else if (element[param] && !hasDefined && !hasOptionsDefine) {
1313
+ create_default(exec(prop, element), element, param, options);
1314
+ }
1315
+ }
1316
+ }
1317
+ return element;
1318
+ };
1319
+ var node_default = createNode2;
1320
+
1321
+ // src/element/assign.js
1322
+ var appendNode = (node, parentNode) => {
1323
+ parentNode.appendChild(node);
1324
+ return node;
1325
+ };
1326
+ var assignNode = (element, parent, key) => {
1327
+ parent[key || element.key] = element;
1328
+ if (element.tag !== "shadow") {
1329
+ appendNode(element.node, parent.node);
1330
+ }
1331
+ return element;
1332
+ };
1333
+
1334
+ // src/element/extend.js
1335
+ var ENV3 = "development";
1336
+ var applyExtend = (element, parent, options = {}) => {
1337
+ if (isFunction(element))
1338
+ element = exec(element, parent);
1339
+ let { extend, props, context } = element;
1340
+ const COMPONENTS = context.components || options.components;
1341
+ if (isString(extend))
1342
+ extend = COMPONENTS[extend];
1343
+ const extendStack = getExtendStack(extend);
1344
+ if (ENV3 !== "test" || ENV3 !== "development")
1345
+ delete element.extend;
1346
+ let childExtendStack = [];
1347
+ if (parent) {
1348
+ element.parent = parent;
1349
+ if (!options.ignoreChildExtend) {
1350
+ if (props && props.ignoreChildExtend)
1351
+ return;
1352
+ childExtendStack = getExtendStack(parent.childExtend);
1353
+ if (parent.childExtendRecursive) {
1354
+ const childExtendRecursiveStack = getExtendStack(parent.childExtendRecursive);
1355
+ childExtendStack = childExtendStack.concat(childExtendRecursiveStack);
1356
+ element.childExtendRecursive = parent.childExtendRecursive;
1357
+ }
1358
+ }
1359
+ }
1360
+ const extendLength = extendStack.length;
1361
+ const childExtendLength = childExtendStack.length;
1362
+ let stack = [];
1363
+ if (extendLength && childExtendLength) {
1364
+ stack = jointStacks(extendStack, childExtendStack);
1365
+ } else if (extendLength) {
1366
+ stack = extendStack;
1367
+ } else if (childExtendLength) {
1368
+ stack = childExtendStack;
1369
+ } else if (!options.extend)
1370
+ return element;
1371
+ if (options.extend) {
1372
+ const defaultOptionsExtend = getExtendStack(options.extend);
1373
+ stack = [].concat(stack, defaultOptionsExtend);
1374
+ }
1375
+ element.__extend = stack;
1376
+ let mergedExtend = cloneAndMergeArrayExtend(stack);
1377
+ const component = exec(element.component || mergedExtend.component, element);
1378
+ if (component && COMPONENTS && COMPONENTS[component]) {
1379
+ const componentExtend = cloneAndMergeArrayExtend(getExtendStack(COMPONENTS[component]));
1380
+ mergedExtend = deepMergeExtend(componentExtend, mergedExtend);
1381
+ }
1382
+ return deepMergeExtend(element, mergedExtend);
1383
+ };
1384
+
1385
+ // src/element/props.js
1386
+ var initProps = (element, parent) => {
1387
+ const { props } = element;
1388
+ const propsStack = [];
1389
+ const isMatch = isString(props) && props.indexOf("match") > -1;
1390
+ const matchParent = parent.props && parent.props[element.key];
1391
+ const matchParentChild = parent.props && parent.props.childProps;
1392
+ const objectizeStringProperty = (propValue) => {
1393
+ if (isString(propValue))
1394
+ return { inheritedString: propValue };
1395
+ return propValue;
1396
+ };
1397
+ if (matchParent && props !== "match")
1398
+ propsStack.push(matchParent);
1399
+ if (matchParentChild)
1400
+ propsStack.push(matchParentChild);
1401
+ if (isObject(props)) {
1402
+ propsStack.push(props);
1403
+ }
1404
+ if (props === "inherit") {
1405
+ if (parent.props)
1406
+ propsStack.push(parent.props);
1407
+ } else if (isMatch) {
1408
+ const hasArg = props.split(" ");
1409
+ let matchParentValue;
1410
+ if (hasArg[1] && parent.props[hasArg[1]]) {
1411
+ const secondArgasParentMatchProp = parent.props[hasArg[1]];
1412
+ propsStack.push(
1413
+ objectizeStringProperty(secondArgasParentMatchProp)
1414
+ );
1415
+ } else if (matchParent) {
1416
+ propsStack.push(
1417
+ objectizeStringProperty(matchParent)
1418
+ );
1419
+ }
1420
+ propsStack.push(matchParentValue);
1421
+ } else if (props)
1422
+ propsStack.push(props);
1423
+ if (isArray(element.__extend)) {
1424
+ element.__extend.map((extend) => {
1425
+ if (extend.props)
1426
+ propsStack.push(extend.props);
1427
+ return extend.props;
1428
+ });
1429
+ }
1430
+ return propsStack;
1431
+ };
1432
+ var inheritProps = (element, parent) => {
1433
+ element.props = parent && parent.props || { update: update2, __element: element };
1434
+ };
1435
+ var syncProps = (props, element) => {
1436
+ element.props = {};
1437
+ const mergedProps = { update: update2, __element: element };
1438
+ props.forEach((v) => {
1439
+ if (v === "update" || v === "__element")
1440
+ return;
1441
+ element.props = deepMerge(mergedProps, deepClone(exec(v, element)));
1442
+ });
1443
+ element.props = mergedProps;
1444
+ return element.props;
1445
+ };
1446
+ var createProps = function(element, parent, cached) {
1447
+ const propsStack = cached || initProps(element, parent);
1448
+ if (propsStack.length) {
1449
+ element.__props = propsStack;
1450
+ syncProps(propsStack, element);
1451
+ element.props.update = update2;
1452
+ } else
1453
+ inheritProps(element, parent);
1454
+ return element;
1455
+ };
1456
+ var updateProps = (newProps, element, parent) => {
1457
+ let propsStack = element.__props;
1458
+ if (newProps)
1459
+ propsStack = element.__props = [].concat(newProps, propsStack);
1460
+ if (propsStack)
1461
+ syncProps(propsStack, element);
1462
+ else
1463
+ inheritProps(element, parent);
1464
+ return element;
1465
+ };
1466
+ function update2(props, options) {
1467
+ const element = this.__element;
1468
+ element.update({ props }, options);
1469
+ }
1470
+ var props_default = createProps;
1471
+
1472
+ // src/element/update.js
1473
+ var snapshot = {
1474
+ snapshotId: createSnapshotId
1475
+ };
1476
+ var UPDATE_DEFAULT_OPTIONS = {
1477
+ stackChanges: false,
1478
+ cleanExec: true,
1479
+ preventRecursive: false,
1480
+ currentSnapshot: false,
1481
+ calleeElement: false
1482
+ };
1483
+ var update3 = function(params = {}, options = UPDATE_DEFAULT_OPTIONS) {
1484
+ const element = this;
1485
+ const { define, parent, node } = element;
1486
+ const { currentSnapshot, calleeElement } = options;
1487
+ if (!calleeElement) {
1488
+ element.__currentSnapshot = snapshot.snapshotId();
1489
+ }
1490
+ const snapshotOnCallee = element.__currentSnapshot || calleeElement && calleeElement.__currentSnapshot;
1491
+ if (snapshotOnCallee && currentSnapshot < snapshotOnCallee) {
1492
+ }
1493
+ if (isString(params) || isNumber(params)) {
1494
+ params = { text: params };
1495
+ }
1496
+ if (isFunction(element.if)) {
1497
+ const ifPassed = element.if(element, element.state);
1498
+ if (ifPassed)
1499
+ delete element.__ifFalsy;
1500
+ if (element.__ifFalsy && ifPassed) {
1501
+ createNode2(element);
1502
+ appendNode(element.node, element.__ifFragment);
1503
+ } else if (element.node && !ifPassed) {
1504
+ element.node.remove();
1505
+ element.__ifFalsy = true;
1506
+ }
1507
+ }
1508
+ if (element.__state) {
1509
+ const keyInParentState = parent.state[element.__state];
1510
+ if (keyInParentState) {
1511
+ const newState = element.__stateType === "string" ? state_default(element, parent) : state_default(element, parent);
1512
+ const changes = diff(newState.parse(), element.state.parse());
1513
+ if (element.on && isFunction(element.on.initStateUpdated)) {
1514
+ const initReturns = on_exports.initStateUpdated(element.on.initStateUpdated, element, element.state, changes);
1515
+ if (initReturns === false)
1516
+ return;
1517
+ }
1518
+ element.state = newState;
1519
+ if (!options.preventUpdateListener && element.on && isFunction(element.on.stateUpdated)) {
1520
+ on_exports.stateUpdated(element.on.stateUpdated, element, element.state, changes);
1521
+ }
1522
+ }
1523
+ } else if (!element.__hasRootState)
1524
+ element.state = parent && parent.state || {};
1525
+ if (!element.__ifFalsy && !options.preventPropsUpdate)
1526
+ updateProps(params.props, element, parent);
1527
+ if (element.on && isFunction(element.on.initUpdate) && !options.ignoreInitUpdate) {
1528
+ const whatinitreturns = on_exports.initUpdate(element.on.initUpdate, element, element.state);
1529
+ if (whatinitreturns === false)
1530
+ return;
1531
+ }
1532
+ const overwriteChanges = overwrite(element, params, UPDATE_DEFAULT_OPTIONS);
1533
+ const execChanges = throughUpdatedExec(element, UPDATE_DEFAULT_OPTIONS);
1534
+ const definedChanges = throughUpdatedDefine(element, options);
1535
+ if (options.stackChanges && element.__stackChanges) {
1536
+ const stackChanges = merge(definedChanges, merge(execChanges, overwriteChanges));
1537
+ element.__stackChanges.push(stackChanges);
1538
+ }
1539
+ if (element.__ifFalsy)
1540
+ return false;
1541
+ if (!node) {
1542
+ return;
1543
+ }
1544
+ for (const param in element) {
1545
+ const prop = element[param];
1546
+ if (options.preventDefineUpdate === true || options.preventDefineUpdate === param || options.preventContentUpdate && param === "content" || (options.preventStateUpdate && param) === "state" || isMethod(param) || isObject(registry_default[param]) || prop === void 0)
1547
+ continue;
1548
+ if (options.preventStateUpdate === "once")
1549
+ options.preventStateUpdate = false;
1550
+ const hasDefined = define && define[param];
1551
+ const ourParam = registry_default[param];
1552
+ const hasOptionsDefine = options.define && options.define[param];
1553
+ if (ourParam && !hasOptionsDefine) {
1554
+ if (isFunction(ourParam)) {
1555
+ ourParam(prop, element, node);
1556
+ }
1557
+ } else if (prop && isObject(prop) && !hasDefined && !hasOptionsDefine) {
1558
+ if (!options.preventRecursive) {
1559
+ const childUpdateCall = () => update3.call(prop, params[prop], {
1560
+ ...options,
1561
+ currentSnapshot: snapshotOnCallee,
1562
+ calleeElement: element
1563
+ });
1564
+ if (element.props.lazyLoad || options.lazyLoad) {
1565
+ window.requestAnimationFrame(() => childUpdateCall());
1566
+ } else
1567
+ childUpdateCall();
1568
+ }
1569
+ }
1570
+ }
1571
+ if (!options.preventUpdate && element.on && isFunction(element.on.update)) {
1572
+ on_exports.update(element.on.update, element, element.state);
1573
+ }
1574
+ };
1575
+ var update_default = update3;
1576
+
1577
+ // src/element/create.js
1578
+ var ENV4 = "development";
1579
+ var create = (element, parent, key, options = options_default.create || {}) => {
1580
+ if (options && !options_default.create)
1581
+ options_default.create = options;
1582
+ if (element === void 0) {
1583
+ if (ENV4 === "test" || ENV4 === "development") {
1584
+ console.warn(key, "element is undefined in", parent && parent.path);
1585
+ }
1586
+ element = {};
1587
+ }
1588
+ if (element === null)
1589
+ return;
1590
+ if (element === true)
1591
+ element = { text: true };
1592
+ if (element.__hash) {
1593
+ element = { extend: element };
1594
+ }
1595
+ if (!parent)
1596
+ parent = root_default;
1597
+ if (isNode(parent))
1598
+ parent = root_default[`${key}_parent`] = { key: ":root", node: parent };
1599
+ if (isString(element) || isNumber(element)) {
1600
+ const extendTag = element.extend && element.extend.tag;
1601
+ const childExtendTag = parent.childExtend && parent.childExtend.tag;
1602
+ const isKeyValidHTMLTag = nodes_default.body.indexOf(key) > -1 && key;
1603
+ element = {
1604
+ text: element,
1605
+ tag: extendTag || childExtendTag || isKeyValidHTMLTag || "string"
1606
+ };
1607
+ }
1608
+ const assignedKey = (element.key || key || createID()).toString();
1609
+ const { extend, props, state, childExtend, childProps } = element;
1610
+ if (isKeyComponent(assignedKey)) {
1611
+ const hasComponentAttrs = extend || childExtend || props || state || element.on;
1612
+ const componentKey = assignedKey.split("_")[0];
1613
+ if (!hasComponentAttrs || childProps) {
1614
+ parent[assignedKey] = element = {
1615
+ extend: componentKey || assignedKey,
1616
+ props: { ...element }
1617
+ };
1618
+ } else if (!extend || extend === true) {
1619
+ parent[assignedKey] = element = {
1620
+ ...element,
1621
+ extend: componentKey || assignedKey
1622
+ };
1623
+ }
1624
+ }
1625
+ if (assignedKey.slice(0, 1) === "@") {
1626
+ if (props) {
1627
+ props.display = "none";
1628
+ if (props[assignedKey])
1629
+ props[assignedKey].display = props.display;
1630
+ else
1631
+ props[assignedKey] = { display: props.display || "block" };
1632
+ } else {
1633
+ parent[assignedKey] = element = {
1634
+ ...element,
1635
+ props: {
1636
+ display: "none",
1637
+ [assignedKey]: { display: "block" }
1638
+ }
1639
+ };
1640
+ }
1641
+ }
1642
+ if (options.context && !root_default.context)
1643
+ root_default.context = options.context;
1644
+ element.context = root_default.context;
1645
+ const { context } = element;
1646
+ if (context.components) {
1647
+ const { components } = context;
1648
+ const { extend: extend2 } = element;
1649
+ const execExtend = exec(extend2, element);
1650
+ if (isString(execExtend)) {
1651
+ if (components[execExtend])
1652
+ element.extend = components[execExtend];
1653
+ else {
1654
+ if (ENV4 === "test" || ENV4 === "development") {
1655
+ console.warn(execExtend, "is not in library", components, element);
1656
+ console.warn("replacing with ", {});
1657
+ }
1658
+ element.extend = {};
1659
+ }
1660
+ }
1661
+ }
1662
+ if (options.onlyResolveExtends) {
1663
+ applyExtend(element, parent, options);
1664
+ if (!element.__exec)
1665
+ element.__exec = {};
1666
+ if (!element.__attr)
1667
+ element.__attr = {};
1668
+ if (!element.__ifFalsy)
1669
+ props_default(element, parent);
1670
+ element.key = assignedKey;
1671
+ throughInitialExec(element);
1672
+ for (const param in element) {
1673
+ const prop = element[param];
1674
+ if (isMethod(param) || isObject(registry_default[param]) || prop === void 0)
1675
+ continue;
1676
+ const hasDefined = element.define && element.define[param];
1677
+ const ourParam = registry_default[param];
1678
+ const hasOptionsDefine = options.define && options.define[param];
1679
+ if (ourParam && !hasOptionsDefine) {
1680
+ continue;
1681
+ } else if (element[param] && !hasDefined && !hasOptionsDefine) {
1682
+ create(exec(prop, element), element, param, options);
1683
+ }
1684
+ }
1685
+ delete element.parent;
1686
+ delete element.__element;
1687
+ delete element.__props;
1688
+ delete element.props.__element;
1689
+ delete element.props.update;
1690
+ delete element.update;
1691
+ return element;
1692
+ }
1693
+ applyExtend(element, parent, options);
1694
+ if (Object.keys(options).length) {
1695
+ registry_default.defaultOptions = options;
1696
+ if (options.ignoreChildExtend)
1697
+ delete options.ignoreChildExtend;
1698
+ }
1699
+ element.key = assignedKey;
1700
+ if (!element.transform)
1701
+ element.transform = {};
1702
+ if (!element.__cached)
1703
+ element.__cached = {};
1704
+ if (!element.__exec)
1705
+ element.__exec = {};
1706
+ if (!element.__class)
1707
+ element.__class = {};
1708
+ if (!element.__classNames)
1709
+ element.__classNames = {};
1710
+ if (!element.__attr)
1711
+ element.__attr = {};
1712
+ if (!element.__changes)
1713
+ element.__changes = [];
1714
+ if (!element.__children)
1715
+ element.__children = [];
1716
+ const hasRoot = parent && parent.key === ":root";
1717
+ if (!element.__root)
1718
+ element.__root = hasRoot ? element : parent.__root;
1719
+ if (ENV4 === "test" || ENV4 === "development") {
1720
+ if (!parent.path)
1721
+ parent.path = [];
1722
+ element.path = parent.path.concat(assignedKey);
1723
+ }
1724
+ element.set = set_default;
1725
+ element.update = update_default;
1726
+ element.remove = remove;
1727
+ element.removeContent = removeContentElement;
1728
+ element.setProps = setProps;
1729
+ element.lookup = lookup;
1730
+ element.spotByPath = spotByPath;
1731
+ element.parse = parse;
1732
+ element.parseDeep = parseDeep;
1733
+ element.keys = keys;
1734
+ element.nextElement = nextElement;
1735
+ element.previousElement = previousElement;
1736
+ if (ENV4 === "test" || ENV4 === "development") {
1737
+ element.log = log;
1738
+ }
1739
+ element.state = state_default(element, parent);
1740
+ if (isFunction(element.if)) {
1741
+ if (!element.if(element, element.state)) {
1742
+ const ifFragment = cache_default({ tag: "fragment" });
1743
+ element.__ifFragment = appendNode(ifFragment, parent.node);
1744
+ element.__ifFalsy = true;
1745
+ }
1746
+ }
1747
+ if (element.node && !element.__ifFalsy) {
1748
+ return assignNode(element, parent, assignedKey);
1749
+ }
1750
+ if (!element.__ifFalsy)
1751
+ props_default(element, parent);
1752
+ if (element.on && isFunction(element.on.init)) {
1753
+ on_exports.init(element.on.init, element, element.state);
1754
+ }
1755
+ if (element.on && isFunction(element.on.beforeClassAssign)) {
1756
+ on_exports.beforeClassAssign(element.on.beforeClassAssign, element, element.state);
1757
+ }
1758
+ assignClass(element);
1759
+ node_default(element, options);
1760
+ if (element.__ifFalsy)
1761
+ return element;
1762
+ assignNode(element, parent, key);
1763
+ if (element.on && isFunction(element.on.render)) {
1764
+ on_exports.render(element.on.render, element, element.state);
1765
+ }
1766
+ if (parent.__children)
1767
+ parent.__children.push(element.key);
1768
+ return element;
1769
+ };
1770
+ var isKeyComponent = (key) => {
1771
+ const isFirstKeyString = isString(key);
1772
+ if (!isFirstKeyString)
1773
+ return;
1774
+ const firstCharKey = key.slice(0, 1);
1775
+ return /^[A-Z]*$/.test(firstCharKey);
1776
+ };
1777
+ var create_default = create;
1778
+
1779
+ // src/element/define.js
1780
+ var define_default = (params, options = {}) => {
1781
+ const { overwrite: overwrite2 } = options;
1782
+ for (const param in params) {
1783
+ if (registry_default[param] && !overwrite2) {
1784
+ report("OverwriteToBuiltin", param);
1785
+ } else
1786
+ registry_default[param] = params[param];
1787
+ }
1788
+ };
1789
+
1790
+ // src/element/parse.js
1791
+ var parse2 = (element) => {
1792
+ const virtualTree = {
1793
+ node: document.createElement("div")
1794
+ };
1795
+ if (element && element.node)
1796
+ assignNode(element, virtualTree);
1797
+ else
1798
+ create_default(element, virtualTree);
1799
+ return virtualTree.node.innerHTML;
1800
+ };
1801
+ var parse_default = parse2;
1802
+
1803
+ // src/index.js
1804
+ var ENV5 = "development";
1805
+ if (ENV5 === "test" || ENV5 === "development")
1806
+ window.tree = tree_default;
1807
+ var src_default = {
1808
+ create: create_default,
1809
+ parse: parse_default,
1810
+ set: set_default,
1811
+ define: define_default,
1812
+ tree: tree_default
1813
+ };