@domql/element 3.1.2 → 3.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/README.md +4 -6
  2. package/children.js +45 -18
  3. package/create.js +58 -46
  4. package/define.js +1 -1
  5. package/dist/cjs/children.js +43 -13
  6. package/dist/cjs/create.js +57 -27
  7. package/dist/cjs/define.js +1 -1
  8. package/dist/cjs/event/animationFrame.js +96 -0
  9. package/dist/cjs/event/can.js +28 -0
  10. package/dist/cjs/event/index.js +20 -0
  11. package/dist/cjs/event/on.js +84 -0
  12. package/dist/cjs/event/store.js +27 -0
  13. package/dist/cjs/extend.js +88 -0
  14. package/dist/cjs/index.js +9 -6
  15. package/dist/cjs/iterate.js +89 -33
  16. package/dist/cjs/methods/set.js +5 -0
  17. package/dist/cjs/methods/v2.js +1 -1
  18. package/dist/cjs/mixins/attr.js +3 -2
  19. package/dist/cjs/mixins/classList.js +11 -1
  20. package/dist/cjs/mixins/content.js +72 -0
  21. package/dist/cjs/mixins/html.js +1 -2
  22. package/dist/cjs/mixins/registry.js +2 -2
  23. package/dist/cjs/mixins/scope.js +1 -1
  24. package/dist/cjs/mixins/state.js +4 -4
  25. package/dist/cjs/mixins/style.js +11 -2
  26. package/dist/cjs/mixins/text.js +9 -5
  27. package/dist/cjs/node.js +22 -19
  28. package/dist/cjs/render/append.js +72 -0
  29. package/dist/cjs/render/cache.js +80 -0
  30. package/dist/cjs/render/create.js +25 -0
  31. package/dist/cjs/render/index.js +20 -0
  32. package/dist/cjs/set.js +33 -40
  33. package/dist/cjs/update.js +100 -69
  34. package/dist/cjs/utils/applyParam.js +7 -7
  35. package/dist/cjs/utils/extendUtils.js +132 -0
  36. package/dist/cjs/utils/index.js +2 -0
  37. package/dist/cjs/utils/propEvents.js +56 -0
  38. package/dist/esm/children.js +44 -14
  39. package/dist/esm/create.js +58 -27
  40. package/dist/esm/define.js +1 -1
  41. package/dist/esm/event/animationFrame.js +76 -0
  42. package/dist/esm/event/can.js +8 -0
  43. package/dist/esm/event/index.js +3 -0
  44. package/dist/esm/event/on.js +64 -0
  45. package/dist/esm/event/store.js +7 -0
  46. package/dist/esm/extend.js +74 -0
  47. package/dist/esm/index.js +8 -6
  48. package/dist/esm/iterate.js +90 -35
  49. package/dist/esm/methods/set.js +10 -0
  50. package/dist/esm/methods/v2.js +1 -1
  51. package/dist/esm/mixins/attr.js +4 -3
  52. package/dist/esm/mixins/classList.js +11 -1
  53. package/dist/esm/mixins/content.js +52 -0
  54. package/dist/esm/mixins/html.js +1 -2
  55. package/dist/esm/mixins/registry.js +1 -1
  56. package/dist/esm/mixins/scope.js +1 -1
  57. package/dist/esm/mixins/state.js +5 -5
  58. package/dist/esm/mixins/style.js +12 -3
  59. package/dist/esm/mixins/text.js +10 -6
  60. package/dist/esm/node.js +22 -19
  61. package/dist/esm/render/append.js +52 -0
  62. package/dist/esm/render/cache.js +60 -0
  63. package/dist/esm/render/create.js +5 -0
  64. package/dist/esm/render/index.js +3 -0
  65. package/dist/esm/set.js +34 -41
  66. package/dist/esm/update.js +100 -71
  67. package/dist/esm/utils/applyParam.js +8 -8
  68. package/dist/esm/utils/extendUtils.js +119 -0
  69. package/dist/esm/utils/index.js +1 -0
  70. package/dist/esm/utils/propEvents.js +36 -0
  71. package/dist/iife/index.js +4718 -0
  72. package/extend.js +95 -0
  73. package/index.js +9 -6
  74. package/iterate.js +100 -38
  75. package/node.js +25 -23
  76. package/package.json +44 -20
  77. package/set.js +28 -32
  78. package/update.js +111 -82
  79. package/__tests__/checkIfOnUpdate.test.js +0 -103
  80. package/__tests__/children.test.js +0 -213
  81. package/__tests__/define.test.js +0 -75
  82. package/__tests__/inheritStateUpdates.test.js +0 -79
  83. package/__tests__/renderElement.test.js +0 -131
  84. package/__tests__/resetElement.test.js +0 -44
  85. package/__tests__/set.test.js +0 -316
  86. package/__tests__/throughExecProps.test.js +0 -86
  87. package/__tests__/throughInitialDefine.test.js +0 -104
  88. package/__tests__/throughInitialExec.test.js +0 -92
  89. package/__tests__/throughUpdatedDefine.test.js +0 -92
  90. package/__tests__/throughUpdatedExec.test.js +0 -110
  91. package/__tests__/tree.test.js +0 -15
  92. package/__tests__/update.test.js +0 -256
  93. package/dist/cjs/__tests__/checkIfOnUpdate.test.js +0 -73
  94. package/dist/cjs/__tests__/children.test.js +0 -177
  95. package/dist/cjs/__tests__/define.test.js +0 -75
  96. package/dist/cjs/__tests__/inheritStateUpdates.test.js +0 -62
  97. package/dist/cjs/__tests__/renderElement.test.js +0 -138
  98. package/dist/cjs/__tests__/resetElement.test.js +0 -35
  99. package/dist/cjs/__tests__/set.test.js +0 -256
  100. package/dist/cjs/__tests__/throughExecProps.test.js +0 -62
  101. package/dist/cjs/__tests__/throughInitialDefine.test.js +0 -79
  102. package/dist/cjs/__tests__/throughInitialExec.test.js +0 -73
  103. package/dist/cjs/__tests__/throughUpdatedDefine.test.js +0 -69
  104. package/dist/cjs/__tests__/throughUpdatedExec.test.js +0 -84
  105. package/dist/cjs/__tests__/tree.test.js +0 -11
  106. package/dist/cjs/__tests__/update.test.js +0 -222
  107. package/dist/cjs/package.json +0 -4
  108. package/dist/esm/__tests__/checkIfOnUpdate.test.js +0 -73
  109. package/dist/esm/__tests__/children.test.js +0 -177
  110. package/dist/esm/__tests__/define.test.js +0 -53
  111. package/dist/esm/__tests__/inheritStateUpdates.test.js +0 -62
  112. package/dist/esm/__tests__/renderElement.test.js +0 -116
  113. package/dist/esm/__tests__/resetElement.test.js +0 -35
  114. package/dist/esm/__tests__/set.test.js +0 -256
  115. package/dist/esm/__tests__/throughExecProps.test.js +0 -62
  116. package/dist/esm/__tests__/throughInitialDefine.test.js +0 -79
  117. package/dist/esm/__tests__/throughInitialExec.test.js +0 -73
  118. package/dist/esm/__tests__/throughUpdatedDefine.test.js +0 -69
  119. package/dist/esm/__tests__/throughUpdatedExec.test.js +0 -84
  120. package/dist/esm/__tests__/tree.test.js +0 -11
  121. package/dist/esm/__tests__/update.test.js +0 -222
  122. package/methods/set.js +0 -63
  123. package/methods/v2.js +0 -83
  124. package/mixins/attr.js +0 -32
  125. package/mixins/classList.js +0 -54
  126. package/mixins/data.js +0 -26
  127. package/mixins/html.js +0 -21
  128. package/mixins/index.js +0 -23
  129. package/mixins/registry.js +0 -46
  130. package/mixins/scope.js +0 -23
  131. package/mixins/state.js +0 -19
  132. package/mixins/style.js +0 -16
  133. package/mixins/text.js +0 -26
  134. package/utils/applyParam.js +0 -34
  135. package/utils/index.js +0 -3
@@ -44,7 +44,7 @@ const log = function(...args) {
44
44
  args.forEach((v) => console.log(`%c${v}:
45
45
  `, "font-weight: bold", element[v]));
46
46
  } else {
47
- console.log(__ref == null ? void 0 : __ref.path);
47
+ console.log(__ref?.path);
48
48
  const keys2 = element.keys();
49
49
  keys2.forEach((v) => console.log(`%c${v}:
50
50
  `, "font-weight: bold", element[v]));
@@ -1,15 +1,16 @@
1
- import { deepMerge, exec, isNot, isNull, isUndefined } from "@domql/utils";
1
+ import { deepMerge, exec, isNot } from "@domql/utils";
2
2
  import { report } from "@domql/report";
3
3
  function attr(params, element, node) {
4
4
  const { __ref: ref, props } = element;
5
5
  const { __attr } = ref;
6
- if (isNot("object")) report("HTMLInvalidAttr", params);
6
+ if (isNot(params)("object")) report("HTMLInvalidAttr", params);
7
7
  if (params) {
8
8
  const attrs = exec(params, element);
9
9
  if (props.attr) deepMerge(attrs, props.attr);
10
10
  for (const attr2 in attrs) {
11
11
  const val = exec(attrs[attr2], element);
12
- if (val !== false && !isUndefined(val) && !isNull(val) && node.setAttribute) {
12
+ if (val === __attr[attr2]) continue;
13
+ if (val !== false && val !== void 0 && val !== null && node.setAttribute) {
13
14
  node.setAttribute(attr2, val);
14
15
  } else if (node.removeAttribute) node.removeAttribute(attr2);
15
16
  __attr[attr2] = val;
@@ -29,7 +29,17 @@ const classList = (params, element) => {
29
29
  };
30
30
  const applyClassListOnNode = (params, element, node) => {
31
31
  const className = classList(params, element);
32
- node.classList = className;
32
+ const { __ref } = element;
33
+ if (className === __ref.__className) return className;
34
+ __ref.__className = className;
35
+ if (node && typeof node.setAttribute === "function") {
36
+ node.setAttribute("class", className);
37
+ } else if (node) {
38
+ try {
39
+ node.className = className;
40
+ } catch (e) {
41
+ }
42
+ }
33
43
  return className;
34
44
  };
35
45
  function applyClasslist(params, element, node) {
@@ -0,0 +1,52 @@
1
+ import { isFunction, setContentKey } from "@domql/utils";
2
+ import { set } from "../set.js";
3
+ const updateContent = function(params, options) {
4
+ const element = this;
5
+ const ref = element.__ref;
6
+ const contentKey = ref.contentElementKey;
7
+ if (!element[contentKey]) return;
8
+ if (element[contentKey].update) element[contentKey].update(params, options);
9
+ };
10
+ const removeContent = function(el, opts = {}) {
11
+ const element = el || this;
12
+ const { __ref: ref } = element;
13
+ const contentElementKey = setContentKey(element, opts);
14
+ if (opts.contentElementKey !== "content") opts.contentElementKey = "content";
15
+ if (element[contentElementKey]) {
16
+ if (element[contentElementKey].node && element.node) {
17
+ if (element[contentElementKey].tag === "fragment")
18
+ element.node.innerHTML = "";
19
+ else {
20
+ const contentNode = element[contentElementKey].node;
21
+ if (contentNode.parentNode === element.node)
22
+ element.node.removeChild(element[contentElementKey].node);
23
+ }
24
+ }
25
+ const { __cached } = ref;
26
+ if (__cached && __cached[contentElementKey]) {
27
+ if (__cached[contentElementKey].tag === "fragment")
28
+ __cached[contentElementKey].parent.node.innerHTML = "";
29
+ else if (__cached[contentElementKey] && isFunction(__cached[contentElementKey].remove))
30
+ __cached[contentElementKey].remove();
31
+ }
32
+ ref.__children.splice(ref.__children.indexOf(element[contentElementKey]), 1);
33
+ delete element[contentElementKey];
34
+ }
35
+ };
36
+ function setContent(param, element, node, opts) {
37
+ const contentElementKey = setContentKey(element, opts);
38
+ if (param && element) {
39
+ if (element[contentElementKey]?.update) {
40
+ element[contentElementKey].update({}, opts);
41
+ } else {
42
+ set.call(element, param, opts);
43
+ }
44
+ }
45
+ }
46
+ var content_default = setContent;
47
+ export {
48
+ content_default as default,
49
+ removeContent,
50
+ setContent,
51
+ updateContent
52
+ };
@@ -1,7 +1,6 @@
1
1
  import { exec } from "@domql/utils";
2
2
  function html(param, element, node) {
3
- var _a;
4
- const prop = exec(param, element) || exec((_a = element == null ? void 0 : element.props) == null ? void 0 : _a.html, element);
3
+ const prop = exec(element?.props?.html || param, element);
5
4
  const { __ref } = element;
6
5
  if (prop !== __ref.__html) {
7
6
  if (node.nodeName === "SVG") node.textContent = prop;
@@ -1,4 +1,4 @@
1
- import attr from "./attr.js";
1
+ import { attr } from "./attr.js";
2
2
  import { classList } from "./classList.js";
3
3
  import data from "./data.js";
4
4
  import html from "./html.js";
@@ -1,5 +1,5 @@
1
1
  import { isFunction, isObject } from "@domql/utils";
2
- async function scope(params, element, node) {
2
+ function scope(params, element, node) {
3
3
  if (!isObject(params)) return;
4
4
  for (const scopeItem in params) {
5
5
  const value = params[scopeItem];
@@ -1,10 +1,10 @@
1
- import { execPromise, isObject, STATE_METHODS } from "@domql/utils";
2
- async function state(params, element, node) {
3
- const state2 = await execPromise(params, element);
1
+ import { exec, isObject, STATE_METHODS } from "@domql/utils";
2
+ function state(params, element, node) {
3
+ const state2 = exec(params, element);
4
4
  if (isObject(state2)) {
5
5
  for (const param in state2) {
6
- if (STATE_METHODS.includes(param)) continue;
7
- if (!Object.hasOwnProperty.call(state2, param)) continue;
6
+ if (STATE_METHODS.has(param)) continue;
7
+ if (!Object.prototype.hasOwnProperty.call(state2, param)) continue;
8
8
  }
9
9
  }
10
10
  return element;
@@ -1,9 +1,18 @@
1
- import { isObject, map } from "@domql/utils";
1
+ import { exec, isObject } from "@domql/utils";
2
2
  import { report } from "@domql/report";
3
3
  function style(params, element, node) {
4
4
  if (params) {
5
- if (isObject(params)) map(node.style, params, element);
6
- else report("HTMLInvalidStyles", params);
5
+ if (isObject(params)) {
6
+ const { __ref } = element;
7
+ if (!__ref.__style) __ref.__style = {};
8
+ const cache = __ref.__style;
9
+ for (const prop in params) {
10
+ const val = exec(params[prop], element);
11
+ if (val === cache[prop]) continue;
12
+ cache[prop] = val;
13
+ node.style[prop] = val;
14
+ }
15
+ } else report("HTMLInvalidStyles", params);
7
16
  }
8
17
  }
9
18
  var style_default = style;
@@ -1,18 +1,22 @@
1
1
  import { create } from "../create.js";
2
- import { exec, isString } from "@domql/utils";
3
- async function text(param, element, node) {
4
- let prop = exec(param || element.props.text, element);
2
+ import { exec, isString, SVG_TAGS } from "@domql/utils";
3
+ function text(param, element, node) {
4
+ let prop = exec(element.props.text || param, element);
5
5
  if (isString(prop) && prop.includes("{{")) {
6
- prop = element.call("replaceLiteralsWithObjectFields", prop);
6
+ prop = element.call("replaceLiteralsWithObjectFields", prop, element.state);
7
7
  }
8
8
  if (element.tag === "string") {
9
9
  node.nodeValue = prop;
10
- } else if (param !== void 0 || param !== null) {
10
+ } else if (param !== void 0 && param !== null) {
11
+ if (SVG_TAGS.has(element.tag)) {
12
+ if (node) node.textContent = prop;
13
+ return;
14
+ }
11
15
  if (element.__text) {
12
16
  if (element.__text.text === prop) return;
13
17
  element.__text.text = prop;
14
18
  if (element.__text.node) element.__text.node.nodeValue = prop;
15
- } else await create({ tag: "string", text: prop }, element, "__text");
19
+ } else create({ tag: "string", text: prop }, element, "__text");
16
20
  }
17
21
  }
18
22
  var text_default = text;
package/dist/esm/node.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { isFunction, isMethod, isObject, isUndefined } from "@domql/utils";
2
- import { applyEventsOnNode, triggerEventOn } from "@domql/event";
3
- import { cacheNode } from "@domql/render";
2
+ import { applyEventsOnNode, triggerEventOn } from "./event/index.js";
3
+ import { propagateEventsFromProps, propagateEventsFromElement } from "./utils/propEvents.js";
4
+ import { cacheNode } from "./render/index.js";
4
5
  import { create } from "./create.js";
5
6
  import {
6
7
  throughExecProps,
@@ -11,8 +12,8 @@ import { REGISTRY } from "./mixins/index.js";
11
12
  import { applyParam } from "./utils/applyParam.js";
12
13
  import setChildren from "./children.js";
13
14
  import { setContent } from "./set.js";
14
- const ENV = "development";
15
- const createNode = async (element, opts) => {
15
+ const ENV = process.env.NODE_ENV;
16
+ const createNode = (element, opts) => {
16
17
  let { node, tag, __ref: ref } = element;
17
18
  if (!ref.__if) return element;
18
19
  let isNewNode;
@@ -21,42 +22,44 @@ const createNode = async (element, opts) => {
21
22
  if (tag === "shadow") {
22
23
  node = element.node = element.parent.node.attachShadow({ mode: "open" });
23
24
  } else node = element.node = cacheNode(element);
24
- await triggerEventOn("attachNode", element, opts);
25
+ triggerEventOn("attachNode", element, opts);
25
26
  }
26
27
  if (ENV === "test" || ENV === "development" || opts.alowRefReference) {
27
28
  node.ref = element;
28
29
  if (isFunction(node.setAttribute)) node.setAttribute("key", element.key);
29
30
  }
30
- await throughExecProps(element);
31
- await throughInitialDefine(element);
32
- await throughInitialExec(element);
33
- await applyEventsOnNode(element, { isNewNode, ...opts });
31
+ throughExecProps(element);
32
+ throughInitialDefine(element);
33
+ throughInitialExec(element);
34
+ propagateEventsFromProps(element);
35
+ propagateEventsFromElement(element);
36
+ applyEventsOnNode(element, { isNewNode, ...opts });
34
37
  for (const param in element) {
35
38
  const value = element[param];
36
- if (!Object.hasOwnProperty.call(element, param) || isUndefined(value) || isMethod(param, element) || isObject(REGISTRY[param])) {
39
+ if (!Object.prototype.hasOwnProperty.call(element, param) || value === void 0 || isMethod(param, element) || isObject(REGISTRY[param]) || param.length > 2 && param.charCodeAt(0) === 111 && param.charCodeAt(1) === 110 && param.charCodeAt(2) >= 65 && param.charCodeAt(2) <= 90) {
37
40
  continue;
38
41
  }
39
- const isElement = await applyParam(param, element, opts);
42
+ const isElement = applyParam(param, element, opts);
40
43
  if (isElement) {
41
44
  const { hasDefine, hasContextDefine } = isElement;
42
45
  if (element[param] && !hasDefine && !hasContextDefine) {
43
- const createAsync = async () => {
44
- await create(value, element, param, opts);
46
+ const createAsync = () => {
47
+ create(value, element, param, opts);
45
48
  };
46
49
  if (element.props && element.props.lazyLoad || opts.lazyLoad) {
47
- window.requestAnimationFrame(async () => {
48
- await createAsync();
50
+ window.requestAnimationFrame(() => {
51
+ createAsync();
49
52
  if (!opts.preventUpdateListener) {
50
- await triggerEventOn("lazyLoad", element, opts);
53
+ triggerEventOn("lazyLoad", element, opts);
51
54
  }
52
55
  });
53
- } else await createAsync();
56
+ } else createAsync();
54
57
  }
55
58
  }
56
59
  }
57
- const content = element.children ? await setChildren(element.children, element, opts) : element.content || element.content;
60
+ const content = element.children ? setChildren(element.children, element, opts) : element.children || element.content;
58
61
  if (content) {
59
- await setContent(content, element, opts);
62
+ setContent(content, element, opts);
60
63
  }
61
64
  return element;
62
65
  };
@@ -0,0 +1,52 @@
1
+ const appendNode = (node, parentNode) => {
2
+ try {
3
+ parentNode.appendChild(node);
4
+ return node;
5
+ } catch (e) {
6
+ console.error("Does not support to append", parentNode, node);
7
+ }
8
+ };
9
+ const insertNodeAfter = (node, siblingNode, parentNode) => {
10
+ if (!node) {
11
+ throw new Error("Node is required");
12
+ }
13
+ const parent = parentNode || siblingNode?.parentNode;
14
+ if (siblingNode?.nextSibling) {
15
+ parent?.insertBefore(node, siblingNode.nextSibling);
16
+ } else if (siblingNode?.insertAdjacentElement) {
17
+ siblingNode.insertAdjacentElement("afterend", node);
18
+ } else {
19
+ parent?.insertBefore(node, siblingNode);
20
+ }
21
+ };
22
+ const insertNodeBefore = (node, siblingNode, parentNode) => {
23
+ if (!node) {
24
+ throw new Error("Node is required");
25
+ }
26
+ const parent = parentNode || siblingNode.parentNode;
27
+ parent?.insertBefore(node, siblingNode);
28
+ };
29
+ const assignNode = (element, parent, key, attachOptions) => {
30
+ if (!element) {
31
+ throw new Error("Element is required");
32
+ }
33
+ if (!parent) {
34
+ throw new Error("Parent is required");
35
+ }
36
+ parent[key || element.key] = element;
37
+ if (element.tag !== "shadow") {
38
+ if (attachOptions && attachOptions.position) {
39
+ ;
40
+ (attachOptions.position === "before" ? insertNodeBefore : insertNodeAfter)(element.node, attachOptions.node || parent.node);
41
+ } else {
42
+ appendNode(element.node, parent.node, element);
43
+ }
44
+ }
45
+ return element;
46
+ };
47
+ export {
48
+ appendNode,
49
+ assignNode,
50
+ insertNodeAfter,
51
+ insertNodeBefore
52
+ };
@@ -0,0 +1,60 @@
1
+ import { report } from "@domql/report";
2
+ import { canRenderTag } from "../event/index.js";
3
+ import { exec, isObject, isString, isValidHtmlTag, SVG_TAGS, document } from "@domql/utils";
4
+ const SVG_NS = "http://www.w3.org/2000/svg";
5
+ const createHTMLNode = (element) => {
6
+ const { tag, context } = element;
7
+ const doc = context.document || document;
8
+ if (tag) {
9
+ if (tag === "string") return doc.createTextNode(element.text);
10
+ else if (tag === "fragment") {
11
+ return doc.createDocumentFragment();
12
+ } else if (SVG_TAGS.has(tag)) {
13
+ if (tag === "svg" || element.parent?.node?.namespaceURI === SVG_NS) {
14
+ return doc.createElementNS(SVG_NS, tag);
15
+ }
16
+ return doc.createElement(tag);
17
+ } else return doc.createElement(tag);
18
+ } else {
19
+ return doc.createElement("div");
20
+ }
21
+ };
22
+ const detectTag = (element) => {
23
+ let { tag, key, props } = element;
24
+ tag = exec(tag, element);
25
+ if (tag === true) tag = key;
26
+ if (isObject(props) && isString(props.tag)) {
27
+ const tagExists = isValidHtmlTag(props.tag);
28
+ if (tagExists) return props.tag;
29
+ }
30
+ if (isString(tag)) {
31
+ if (isValidHtmlTag(tag)) return tag;
32
+ } else {
33
+ let keyAsTag = key.toLowerCase();
34
+ if (keyAsTag.includes(".")) keyAsTag = keyAsTag.split(".")[0];
35
+ if (keyAsTag.includes("_")) keyAsTag = keyAsTag.split("_")[0];
36
+ if (isValidHtmlTag(keyAsTag)) return keyAsTag;
37
+ }
38
+ return "div";
39
+ };
40
+ const cacheNode = (element) => {
41
+ const { context } = element;
42
+ const win = context.window || window;
43
+ const tag = element.tag = detectTag(element);
44
+ if (!canRenderTag(tag)) {
45
+ return report("HTMLInvalidTag", element.tag, element);
46
+ }
47
+ if (!win.nodeCaches) win.nodeCaches = {};
48
+ const isSvgContext = SVG_TAGS.has(tag) && (tag === "svg" || element.parent?.node?.namespaceURI === SVG_NS);
49
+ const cacheKey = isSvgContext ? "svg:" + tag : tag;
50
+ let cachedTag = win.nodeCaches[cacheKey];
51
+ if (!cachedTag) cachedTag = win.nodeCaches[cacheKey] = createHTMLNode(element);
52
+ const clonedNode = cachedTag.cloneNode(true);
53
+ if (tag === "string") clonedNode.nodeValue = element.text;
54
+ return clonedNode;
55
+ };
56
+ export {
57
+ cacheNode,
58
+ createHTMLNode,
59
+ detectTag
60
+ };
@@ -0,0 +1,5 @@
1
+ const createNode = (element) => {
2
+ };
3
+ export {
4
+ createNode
5
+ };
@@ -0,0 +1,3 @@
1
+ export * from "./create.js";
2
+ export * from "./cache.js";
3
+ export * from "./append.js";
package/dist/esm/set.js CHANGED
@@ -1,6 +1,6 @@
1
- import { deepContains, execPromise, isFunction, OPTIONS } from "@domql/utils";
1
+ import { deepContains, exec, isFunction, OPTIONS } from "@domql/utils";
2
2
  import { create } from "./create.js";
3
- import { triggerEventOn, triggerEventOnUpdate } from "@domql/event";
3
+ import { triggerEventOn, triggerEventOnUpdate } from "./event/index.js";
4
4
  const setContentKey = (element, opts = {}) => {
5
5
  const { __ref: ref } = element;
6
6
  const contentElementKey = opts.contentElementKey;
@@ -9,49 +9,42 @@ const setContentKey = (element, opts = {}) => {
9
9
  }
10
10
  return ref.contentElementKey;
11
11
  };
12
- const reset = async (options) => {
13
- const element = void 0;
14
- await create(element, element.parent, void 0, {
12
+ function reset(options) {
13
+ const element = this;
14
+ create(element, element.parent, void 0, {
15
15
  ignoreChildExtends: true,
16
16
  ...OPTIONS.defaultOptions,
17
17
  ...OPTIONS.create,
18
18
  ...options
19
19
  });
20
- };
21
- const resetContent = async (params, element, opts) => {
22
- var _a;
20
+ }
21
+ const resetContent = (params, element, opts) => {
23
22
  const contentElementKey = setContentKey(element, opts);
24
- if ((_a = element[contentElementKey]) == null ? void 0 : _a.node) removeContent(element, opts);
25
- const contentElem = await create(
26
- params,
27
- element,
28
- contentElementKey || "content",
29
- {
30
- ignoreChildExtends: true,
31
- ...OPTIONS.defaultOptions,
32
- ...OPTIONS.create,
33
- ...opts
34
- }
35
- );
23
+ if (element[contentElementKey]?.node) removeContent(element, opts);
24
+ const contentElem = create(params, element, contentElementKey || "content", {
25
+ ignoreChildExtends: true,
26
+ ...OPTIONS.defaultOptions,
27
+ ...OPTIONS.create,
28
+ ...opts
29
+ });
36
30
  if (contentElementKey !== "content") opts.contentElementKey = "content";
37
31
  return contentElem;
38
32
  };
39
- const updateContent = async function(params, opts) {
33
+ const updateContent = function(params, opts) {
40
34
  const element = this;
41
35
  const contentElementKey = setContentKey(element, opts);
42
36
  if (!element[contentElementKey]) return;
43
37
  if (element[contentElementKey].update) {
44
- await element[contentElementKey].update(params, opts);
38
+ element[contentElementKey].update(params, opts);
45
39
  }
46
40
  };
47
- async function setContent(param, element, opts) {
48
- const content = await execPromise(param, element);
41
+ function setContent(param, element, opts) {
42
+ const content = exec(param, element);
49
43
  if (content && element) {
50
- await set.call(element, content, opts);
44
+ set.call(element, content, opts);
51
45
  }
52
46
  }
53
47
  const removeContent = function(el, opts = {}) {
54
- var _a;
55
48
  const element = el || this;
56
49
  const contentElementKey = setContentKey(element, opts);
57
50
  if (opts.contentElementKey !== "content") {
@@ -59,16 +52,17 @@ const removeContent = function(el, opts = {}) {
59
52
  }
60
53
  const content = element[contentElementKey];
61
54
  if (!content) return;
62
- if (content.tag === "fragment" && ((_a = content.__ref) == null ? void 0 : _a.__children)) {
63
- content.__ref.__children.forEach((key) => {
64
- const child = content[key];
55
+ if (content.tag === "fragment" && content.__ref?.__children) {
56
+ const __children = content.__ref.__children;
57
+ for (let i = 0; i < __children.length; i++) {
58
+ const child = content[__children[i]];
65
59
  if (child.node && child.node.parentNode) {
66
60
  child.node.parentNode.removeChild(child.node);
67
61
  }
68
62
  if (isFunction(child.remove)) {
69
63
  child.remove();
70
64
  }
71
- });
65
+ }
72
66
  } else {
73
67
  if (content.node && content.node.parentNode) {
74
68
  content.node.parentNode.removeChild(content.node);
@@ -79,8 +73,7 @@ const removeContent = function(el, opts = {}) {
79
73
  }
80
74
  delete element[contentElementKey];
81
75
  };
82
- const set = async function(params, options = {}, el) {
83
- var _a;
76
+ const set = function(params, options = {}, el) {
84
77
  const element = el || this;
85
78
  const { __ref: ref } = element;
86
79
  const contentElementKey = setContentKey(element, options);
@@ -91,9 +84,9 @@ const set = async function(params, options = {}, el) {
91
84
  if (options.preventContentUpdate === true && !hasChildren) return;
92
85
  const childHasChanged = !ref.__noChildrenDifference;
93
86
  const childrenIsDifferentFromCache = childHasChanged && __contentRef && Object.keys(params).length === Object.keys(content).length && deepContains(params, content);
94
- if ((content == null ? void 0 : content.update) && !childHasChanged && !childrenIsDifferentFromCache) {
87
+ if (content?.update && !childHasChanged && !childrenIsDifferentFromCache) {
95
88
  if (!options.preventBeforeUpdateListener && !options.preventListeners) {
96
- const beforeUpdateReturns = await triggerEventOnUpdate(
89
+ const beforeUpdateReturns = triggerEventOnUpdate(
97
90
  "beforeUpdate",
98
91
  params,
99
92
  element,
@@ -101,9 +94,9 @@ const set = async function(params, options = {}, el) {
101
94
  );
102
95
  if (beforeUpdateReturns === false) return element;
103
96
  }
104
- await content.update(params);
97
+ content.update(params);
105
98
  if (!options.preventUpdateListener && !options.preventListeners) {
106
- await triggerEventOn("update", element, options);
99
+ triggerEventOn("update", element, options);
107
100
  }
108
101
  return;
109
102
  }
@@ -115,20 +108,20 @@ const set = async function(params, options = {}, el) {
115
108
  params.childExtends = element.childExtends;
116
109
  props.ignoreChildExtends = true;
117
110
  }
118
- if (!(props == null ? void 0 : props.childProps) && ((_a = element.props) == null ? void 0 : _a.childProps)) {
111
+ if (!props?.childProps && element.props?.childProps) {
119
112
  props.childProps = element.props.childProps;
120
113
  props.ignoreChildProps = true;
121
114
  }
122
115
  }
123
116
  if (lazyLoad) {
124
- window.requestAnimationFrame(async () => {
125
- await resetContent(params, element, options);
117
+ window.requestAnimationFrame(() => {
118
+ resetContent(params, element, options);
126
119
  if (!options.preventUpdateListener) {
127
- await triggerEventOn("lazyLoad", element, options);
120
+ triggerEventOn("lazyLoad", element, options);
128
121
  }
129
122
  });
130
123
  } else {
131
- await resetContent(params, element, options);
124
+ resetContent(params, element, options);
132
125
  }
133
126
  };
134
127
  var set_default = set;