@domql/element 2.5.198 → 3.0.0

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 (150) hide show
  1. package/README.md +1 -1
  2. package/__tests__/checkIfOnUpdate.test.js +103 -0
  3. package/__tests__/children.test.js +213 -0
  4. package/__tests__/define.test.js +75 -0
  5. package/__tests__/inheritStateUpdates.test.js +79 -0
  6. package/__tests__/renderElement.test.js +131 -0
  7. package/__tests__/resetElement.test.js +44 -0
  8. package/__tests__/set.test.js +316 -0
  9. package/__tests__/throughExecProps.test.js +86 -0
  10. package/__tests__/throughInitialDefine.test.js +104 -0
  11. package/__tests__/throughInitialExec.test.js +92 -0
  12. package/__tests__/throughUpdatedDefine.test.js +92 -0
  13. package/__tests__/throughUpdatedExec.test.js +110 -0
  14. package/__tests__/tree.test.js +15 -0
  15. package/__tests__/update.test.js +253 -0
  16. package/children.js +105 -0
  17. package/create.js +125 -255
  18. package/dist/cjs/__tests__/checkIfOnUpdate.test.js +73 -0
  19. package/dist/cjs/__tests__/children.test.js +177 -0
  20. package/dist/cjs/__tests__/define.test.js +75 -0
  21. package/dist/cjs/__tests__/inheritStateUpdates.test.js +62 -0
  22. package/dist/cjs/__tests__/renderElement.test.js +138 -0
  23. package/dist/cjs/__tests__/resetElement.test.js +35 -0
  24. package/dist/cjs/__tests__/set.test.js +256 -0
  25. package/dist/cjs/__tests__/throughExecProps.test.js +62 -0
  26. package/dist/cjs/__tests__/throughInitialDefine.test.js +79 -0
  27. package/dist/cjs/__tests__/throughInitialExec.test.js +73 -0
  28. package/dist/cjs/__tests__/throughUpdatedDefine.test.js +69 -0
  29. package/dist/cjs/__tests__/throughUpdatedExec.test.js +84 -0
  30. package/dist/cjs/__tests__/tree.test.js +11 -0
  31. package/dist/cjs/__tests__/update.test.js +219 -0
  32. package/dist/cjs/children.js +87 -0
  33. package/dist/cjs/create.js +74 -215
  34. package/dist/cjs/define.js +1 -2
  35. package/dist/cjs/index.js +3 -3
  36. package/dist/cjs/iterate.js +37 -30
  37. package/dist/cjs/methods/set.js +26 -25
  38. package/dist/cjs/methods/v2.js +7 -17
  39. package/dist/cjs/mixins/attr.js +7 -10
  40. package/dist/cjs/mixins/classList.js +8 -16
  41. package/dist/cjs/mixins/data.js +2 -4
  42. package/dist/cjs/mixins/html.js +2 -4
  43. package/dist/cjs/mixins/index.js +0 -4
  44. package/dist/cjs/mixins/registry.js +7 -67
  45. package/dist/cjs/mixins/scope.js +2 -3
  46. package/dist/cjs/mixins/state.js +4 -7
  47. package/dist/cjs/mixins/style.js +2 -4
  48. package/dist/cjs/mixins/text.js +5 -8
  49. package/dist/cjs/node.js +34 -30
  50. package/dist/cjs/set.js +112 -47
  51. package/dist/cjs/update.js +123 -92
  52. package/dist/cjs/utils/applyParam.js +3 -4
  53. package/dist/cjs/utils/index.js +8 -4
  54. package/dist/cjs/utils/onlyResolveExtends.js +14 -30
  55. package/dist/esm/__tests__/checkIfOnUpdate.test.js +73 -0
  56. package/dist/esm/__tests__/children.test.js +177 -0
  57. package/dist/esm/__tests__/define.test.js +53 -0
  58. package/dist/esm/__tests__/inheritStateUpdates.test.js +62 -0
  59. package/dist/esm/__tests__/renderElement.test.js +116 -0
  60. package/dist/esm/__tests__/resetElement.test.js +35 -0
  61. package/dist/esm/__tests__/set.test.js +256 -0
  62. package/dist/esm/__tests__/throughExecProps.test.js +62 -0
  63. package/dist/esm/__tests__/throughInitialDefine.test.js +79 -0
  64. package/dist/esm/__tests__/throughInitialExec.test.js +73 -0
  65. package/dist/esm/__tests__/throughUpdatedDefine.test.js +69 -0
  66. package/dist/esm/__tests__/throughUpdatedExec.test.js +84 -0
  67. package/dist/esm/__tests__/tree.test.js +11 -0
  68. package/dist/esm/__tests__/update.test.js +219 -0
  69. package/dist/esm/children.js +81 -0
  70. package/dist/esm/create.js +79 -226
  71. package/dist/esm/define.js +1 -2
  72. package/dist/esm/iterate.js +41 -33
  73. package/dist/esm/methods/set.js +5 -4
  74. package/dist/esm/methods/v2.js +7 -17
  75. package/dist/esm/mixins/attr.js +8 -11
  76. package/dist/esm/mixins/classList.js +8 -16
  77. package/dist/esm/mixins/data.js +3 -5
  78. package/dist/esm/mixins/html.js +2 -4
  79. package/dist/esm/mixins/index.js +0 -4
  80. package/dist/esm/mixins/registry.js +7 -67
  81. package/dist/esm/mixins/scope.js +2 -3
  82. package/dist/esm/mixins/state.js +5 -8
  83. package/dist/esm/mixins/style.js +2 -4
  84. package/dist/esm/mixins/text.js +6 -12
  85. package/dist/esm/node.js +25 -31
  86. package/dist/esm/set.js +112 -47
  87. package/dist/esm/update.js +127 -97
  88. package/dist/esm/utils/applyParam.js +3 -4
  89. package/dist/esm/utils/index.js +4 -3
  90. package/dist/esm/utils/onlyResolveExtends.js +22 -31
  91. package/iterate.js +44 -26
  92. package/methods/set.js +5 -4
  93. package/methods/v2.js +5 -4
  94. package/mixins/attr.js +13 -7
  95. package/mixins/classList.js +7 -2
  96. package/mixins/data.js +1 -1
  97. package/mixins/index.js +1 -6
  98. package/mixins/registry.js +6 -53
  99. package/mixins/scope.js +1 -1
  100. package/mixins/state.js +4 -5
  101. package/mixins/text.js +4 -7
  102. package/node.js +31 -28
  103. package/package.json +7 -6
  104. package/set.js +129 -41
  105. package/update.js +169 -89
  106. package/utils/applyParam.js +7 -4
  107. package/utils/index.js +1 -3
  108. package/utils/onlyResolveExtends.js +27 -16
  109. package/cache/index.js +0 -3
  110. package/cache/options.js +0 -4
  111. package/dist/cjs/cache/index.js +0 -24
  112. package/dist/cjs/cache/options.js +0 -26
  113. package/dist/cjs/extend.js +0 -85
  114. package/dist/cjs/methods/index.js +0 -353
  115. package/dist/cjs/mixins/content.js +0 -74
  116. package/dist/cjs/props/create.js +0 -98
  117. package/dist/cjs/props/ignore.js +0 -24
  118. package/dist/cjs/props/index.js +0 -21
  119. package/dist/cjs/props/inherit.js +0 -53
  120. package/dist/cjs/props/update.js +0 -37
  121. package/dist/cjs/utils/component.js +0 -77
  122. package/dist/cjs/utils/extendUtils.js +0 -142
  123. package/dist/cjs/utils/object.js +0 -179
  124. package/dist/cjs/utils/propEvents.js +0 -41
  125. package/dist/esm/cache/index.js +0 -4
  126. package/dist/esm/cache/options.js +0 -6
  127. package/dist/esm/extend.js +0 -71
  128. package/dist/esm/methods/index.js +0 -333
  129. package/dist/esm/mixins/content.js +0 -54
  130. package/dist/esm/props/create.js +0 -78
  131. package/dist/esm/props/ignore.js +0 -4
  132. package/dist/esm/props/index.js +0 -4
  133. package/dist/esm/props/inherit.js +0 -33
  134. package/dist/esm/props/update.js +0 -17
  135. package/dist/esm/utils/component.js +0 -65
  136. package/dist/esm/utils/extendUtils.js +0 -122
  137. package/dist/esm/utils/object.js +0 -159
  138. package/dist/esm/utils/propEvents.js +0 -21
  139. package/extend.js +0 -90
  140. package/methods/index.js +0 -317
  141. package/mixins/content.js +0 -55
  142. package/props/create.js +0 -87
  143. package/props/ignore.js +0 -3
  144. package/props/index.js +0 -6
  145. package/props/inherit.js +0 -35
  146. package/props/update.js +0 -17
  147. package/utils/component.js +0 -68
  148. package/utils/extendUtils.js +0 -134
  149. package/utils/object.js +0 -172
  150. package/utils/propEvents.js +0 -19
package/dist/cjs/node.js CHANGED
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
19
  };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
  var node_exports = {};
20
30
  __export(node_exports, {
@@ -25,65 +35,59 @@ module.exports = __toCommonJS(node_exports);
25
35
  var import_utils = require("@domql/utils");
26
36
  var import_event = require("@domql/event");
27
37
  var import_render = require("@domql/render");
28
- var import_methods = require("./methods/index.js");
29
38
  var import_create = require("./create.js");
30
39
  var import_iterate = require("./iterate.js");
31
40
  var import_mixins = require("./mixins/index.js");
32
41
  var import_applyParam = require("./utils/applyParam.js");
33
- var import_propEvents = require("./utils/propEvents.js");
42
+ var import_children = __toESM(require("./children.js"), 1);
43
+ var import_set = require("./set.js");
34
44
  const ENV = "development";
35
- const createNode = async (element, options) => {
45
+ const createNode = async (element, opts) => {
36
46
  let { node, tag, __ref: ref } = element;
47
+ if (!ref.__if) return element;
37
48
  let isNewNode;
38
49
  if (!node) {
39
50
  isNewNode = true;
40
- if (!ref.__if)
41
- return element;
42
51
  if (tag === "shadow") {
43
52
  node = element.node = element.parent.node.attachShadow({ mode: "open" });
44
- } else
45
- node = element.node = (0, import_render.cacheNode)(element);
46
- (0, import_event.triggerEventOn)("attachNode", element, options);
53
+ } else node = element.node = (0, import_render.cacheNode)(element);
54
+ await (0, import_event.triggerEventOn)("attachNode", element, opts);
47
55
  }
48
- if (ENV === "test" || ENV === "development" || options.alowRefReference) {
56
+ if (ENV === "test" || ENV === "development" || opts.alowRefReference) {
49
57
  node.ref = element;
50
- if ((0, import_utils.isFunction)(node.setAttribute))
51
- node.setAttribute("key", element.key);
52
- }
53
- (0, import_iterate.throughExecProps)(element);
54
- (0, import_iterate.throughInitialDefine)(element);
55
- (0, import_iterate.throughInitialExec)(element);
56
- if (element.tag !== "string" && element.tag !== "fragment") {
57
- (0, import_propEvents.propagateEventsFromProps)(element);
58
- if (isNewNode && (0, import_utils.isObject)(element.on)) {
59
- (0, import_event.applyEventsOnNode)(element, options);
60
- }
58
+ if ((0, import_utils.isFunction)(node.setAttribute)) node.setAttribute("key", element.key);
61
59
  }
60
+ await (0, import_iterate.throughExecProps)(element);
61
+ await (0, import_iterate.throughInitialDefine)(element);
62
+ await (0, import_iterate.throughInitialExec)(element);
63
+ await (0, import_event.applyEventsOnNode)(element, { isNewNode, ...opts });
62
64
  for (const param in element) {
63
65
  const value = element[param];
64
- if (!Object.hasOwnProperty.call(element, param))
65
- continue;
66
- if ((0, import_utils.isUndefined)(value) || (0, import_methods.isMethod)(param, element) || (0, import_utils.isVariant)(param) || (0, import_utils.isObject)(import_mixins.REGISTRY[param]))
66
+ if (!Object.hasOwnProperty.call(element, param) || (0, import_utils.isUndefined)(value) || (0, import_utils.isMethod)(param, element) || (0, import_utils.isObject)(import_mixins.REGISTRY[param])) {
67
67
  continue;
68
- const isElement = (0, import_applyParam.applyParam)(param, element, options);
68
+ }
69
+ const isElement = await (0, import_applyParam.applyParam)(param, element, opts);
69
70
  if (isElement) {
70
71
  const { hasDefine, hasContextDefine } = isElement;
71
72
  if (element[param] && !hasDefine && !hasContextDefine) {
72
73
  const createAsync = async () => {
73
- await (0, import_create.create)((0, import_utils.exec)(value, element), element, param, options);
74
+ await (0, import_create.create)(value, element, param, opts);
74
75
  };
75
- if (element.props && element.props.lazyLoad || options.lazyLoad) {
76
+ if (element.props && element.props.lazyLoad || opts.lazyLoad) {
76
77
  window.requestAnimationFrame(async () => {
77
78
  await createAsync();
78
- if (!options.preventUpdateListener) {
79
- (0, import_event.triggerEventOn)("lazyLoad", element, options);
79
+ if (!opts.preventUpdateListener) {
80
+ await (0, import_event.triggerEventOn)("lazyLoad", element, opts);
80
81
  }
81
82
  });
82
- } else
83
- await createAsync();
83
+ } else await createAsync();
84
84
  }
85
85
  }
86
86
  }
87
+ const content = element.children ? await (0, import_children.default)(element.children, element, opts) : element.content || element.content;
88
+ if (content) {
89
+ await (0, import_set.setContent)(content, element, opts);
90
+ }
87
91
  return element;
88
92
  };
89
93
  var node_default = createNode;
package/dist/cjs/set.js CHANGED
@@ -19,81 +19,146 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  var set_exports = {};
20
20
  __export(set_exports, {
21
21
  default: () => set_default,
22
+ removeContent: () => removeContent,
22
23
  reset: () => reset,
23
- resetElement: () => resetElement,
24
- set: () => set
24
+ resetContent: () => resetContent,
25
+ set: () => set,
26
+ setContent: () => setContent,
27
+ setContentKey: () => setContentKey,
28
+ updateContent: () => updateContent
25
29
  });
26
30
  module.exports = __toCommonJS(set_exports);
27
31
  var import_utils = require("@domql/utils");
28
- var import_options = require("./cache/options.js");
29
32
  var import_create = require("./create.js");
30
- var import_mixins = require("./mixins/index.js");
31
- var import_content = require("./mixins/content.js");
32
33
  var import_event = require("@domql/event");
33
- const resetElement = async (params, element, options) => {
34
- if (!options.preventRemove)
35
- (0, import_content.removeContent)(element, options);
34
+ const setContentKey = (element, opts = {}) => {
36
35
  const { __ref: ref } = element;
37
- await (0, import_create.create)(params, element, ref.contentElementKey || "content", {
38
- ignoreChildExtend: true,
39
- ...import_mixins.registry.defaultOptions,
40
- ...import_options.OPTIONS.create,
41
- ...options
42
- });
36
+ const contentElementKey = opts.contentElementKey;
37
+ if (!ref.contentElementKey || contentElementKey !== ref.contentElementKey) {
38
+ ref.contentElementKey = contentElementKey || "content";
39
+ }
40
+ return ref.contentElementKey;
43
41
  };
44
- const reset = (options) => {
42
+ const reset = async (options) => {
45
43
  const element = void 0;
46
- (0, import_create.create)(element, element.parent, void 0, {
47
- ignoreChildExtend: true,
48
- ...import_mixins.registry.defaultOptions,
49
- ...import_options.OPTIONS.create,
44
+ await (0, import_create.create)(element, element.parent, void 0, {
45
+ ignoreChildExtends: true,
46
+ ...import_utils.OPTIONS.defaultOptions,
47
+ ...import_utils.OPTIONS.create,
50
48
  ...options
51
49
  });
52
50
  };
51
+ const resetContent = async (params, element, opts) => {
52
+ var _a;
53
+ const contentElementKey = setContentKey(element, opts);
54
+ if ((_a = element[contentElementKey]) == null ? void 0 : _a.node) removeContent(element, opts);
55
+ const contentElem = await (0, import_create.create)(
56
+ params,
57
+ element,
58
+ contentElementKey || "content",
59
+ {
60
+ ignoreChildExtends: true,
61
+ ...import_utils.OPTIONS.defaultOptions,
62
+ ...import_utils.OPTIONS.create,
63
+ ...opts
64
+ }
65
+ );
66
+ if (contentElementKey !== "content") opts.contentElementKey = "content";
67
+ return contentElem;
68
+ };
69
+ const updateContent = async function(params, opts) {
70
+ const element = this;
71
+ const contentElementKey = setContentKey(element, opts);
72
+ if (!element[contentElementKey]) return;
73
+ if (element[contentElementKey].update) {
74
+ await element[contentElementKey].update(params, opts);
75
+ }
76
+ };
77
+ async function setContent(param, element, opts) {
78
+ const content = await (0, import_utils.execPromise)(param, element);
79
+ if (content && element) {
80
+ set.call(element, content, opts);
81
+ }
82
+ }
83
+ const removeContent = function(el, opts = {}) {
84
+ var _a;
85
+ const element = el || this;
86
+ const contentElementKey = setContentKey(element, opts);
87
+ if (opts.contentElementKey !== "content") {
88
+ opts.contentElementKey = "content";
89
+ }
90
+ const content = element[contentElementKey];
91
+ if (!content) return;
92
+ if (content.tag === "fragment" && ((_a = content.__ref) == null ? void 0 : _a.__children)) {
93
+ content.__ref.__children.forEach((key) => {
94
+ const child = content[key];
95
+ if (child.node && child.node.parentNode) {
96
+ child.node.parentNode.removeChild(child.node);
97
+ }
98
+ if ((0, import_utils.isFunction)(child.remove)) {
99
+ child.remove();
100
+ }
101
+ });
102
+ } else {
103
+ if (content.node && content.node.parentNode) {
104
+ content.node.parentNode.removeChild(content.node);
105
+ }
106
+ if ((0, import_utils.isFunction)(content.remove)) {
107
+ content.remove();
108
+ }
109
+ }
110
+ delete element[contentElementKey];
111
+ };
53
112
  const set = async function(params, options = {}, el) {
54
113
  var _a;
55
114
  const element = el || this;
56
115
  const { __ref: ref } = element;
57
- const content = (0, import_utils.setContentKey)(element, options);
116
+ const contentElementKey = setContentKey(element, options);
117
+ const content = element[contentElementKey];
58
118
  const __contentRef = content && content.__ref;
59
119
  const lazyLoad = element.props && element.props.lazyLoad;
60
- const hasCollection = element.$collection || element.$stateCollection || element.$propsCollection;
61
- if (options.preventContentUpdate === true && !hasCollection)
62
- return;
63
- if (ref.__noCollectionDifference || __contentRef && __contentRef.__cached && (0, import_utils.deepContains)(params, content)) {
120
+ const hasChildren = element.children;
121
+ if (options.preventContentUpdate === true && !hasChildren) return;
122
+ const childHasChanged = !ref.__noChildrenDifference;
123
+ const childrenIsDifferentFromCache = childHasChanged && __contentRef && Object.keys(params).length === Object.keys(content).length && (0, import_utils.deepContains)(params, content);
124
+ if ((content == null ? void 0 : content.update) && !childHasChanged && !childrenIsDifferentFromCache) {
64
125
  if (!options.preventBeforeUpdateListener && !options.preventListeners) {
65
- const beforeUpdateReturns = await (0, import_event.triggerEventOnUpdate)("beforeUpdate", params, element, options);
66
- if (beforeUpdateReturns === false)
67
- return element;
126
+ const beforeUpdateReturns = await (0, import_event.triggerEventOnUpdate)(
127
+ "beforeUpdate",
128
+ params,
129
+ element,
130
+ options
131
+ );
132
+ if (beforeUpdateReturns === false) return element;
68
133
  }
69
- if (content == null ? void 0 : content.update)
70
- content.update();
71
- if (!options.preventUpdateListener)
134
+ await content.update(params);
135
+ if (!options.preventUpdateListener && !options.preventListeners) {
72
136
  await (0, import_event.triggerEventOn)("update", element, options);
137
+ }
73
138
  return;
74
139
  }
75
- if (params) {
76
- let { childExtend, props } = params;
77
- if (!props)
78
- props = params.props = {};
79
- if (!childExtend && element.childExtend) {
80
- params.childExtend = element.childExtend;
81
- props.ignoreChildExtend = true;
140
+ if (!params) return element;
141
+ let { childExtends, props, tag } = params;
142
+ if (!props) props = params.props = {};
143
+ if (tag === "fragment") {
144
+ if (!childExtends && element.childExtends) {
145
+ params.childExtends = element.childExtends;
146
+ props.ignoreChildExtends = true;
82
147
  }
83
148
  if (!(props == null ? void 0 : props.childProps) && ((_a = element.props) == null ? void 0 : _a.childProps)) {
84
149
  props.childProps = element.props.childProps;
85
150
  props.ignoreChildProps = true;
86
151
  }
87
- if (lazyLoad) {
88
- window.requestAnimationFrame(async () => {
89
- await resetElement(params, element, options);
90
- if (!options.preventUpdateListener) {
91
- (0, import_event.triggerEventOn)("lazyLoad", element, options);
92
- }
93
- });
94
- } else
95
- await resetElement(params, element, options);
96
152
  }
97
- return element;
153
+ if (lazyLoad) {
154
+ window.requestAnimationFrame(async () => {
155
+ await resetContent(params, element, options);
156
+ if (!options.preventUpdateListener) {
157
+ await (0, import_event.triggerEventOn)("lazyLoad", element, options);
158
+ }
159
+ });
160
+ } else {
161
+ await resetContent(params, element, options);
162
+ }
98
163
  };
99
164
  var set_default = set;
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
19
  };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
  var update_exports = {};
20
30
  __export(update_exports, {
@@ -24,75 +34,77 @@ __export(update_exports, {
24
34
  module.exports = __toCommonJS(update_exports);
25
35
  var import_utils = require("@domql/utils");
26
36
  var import_event = require("@domql/event");
27
- var import_methods = require("./methods/index.js");
28
- var import_props = require("./props/index.js");
29
37
  var import_state = require("@domql/state");
30
38
  var import_create = require("./create.js");
31
39
  var import_iterate = require("./iterate.js");
32
40
  var import_mixins = require("./mixins/index.js");
33
41
  var import_applyParam = require("./utils/applyParam.js");
34
- var import_options = require("./cache/options.js");
35
42
  var import_utils2 = require("./utils/index.js");
36
- const snapshot = {
37
- snapshotId: import_utils.createSnapshotId
38
- };
43
+ var import_set = require("./set.js");
44
+ var import_children = __toESM(require("./children.js"), 1);
39
45
  const UPDATE_DEFAULT_OPTIONS = {
40
46
  stackChanges: false,
41
47
  cleanExec: true,
42
48
  preventRecursive: false,
43
49
  currentSnapshot: false,
44
50
  calleeElement: false,
45
- excludes: import_utils2.METHODS_EXL
51
+ exclude: import_utils2.METHODS_EXL
46
52
  };
47
53
  const update = async function(params = {}, opts) {
48
54
  const calleeElementCache = opts == null ? void 0 : opts.calleeElement;
49
- const options = (0, import_utils.deepClone)((0, import_utils.isObject)(opts) ? (0, import_utils2.deepMerge)(opts, UPDATE_DEFAULT_OPTIONS) : UPDATE_DEFAULT_OPTIONS, { exclude: ["calleeElement"] });
55
+ const options = (0, import_utils.deepClone)(
56
+ (0, import_utils.isObject)(opts) ? (0, import_utils.deepMerge)(opts, UPDATE_DEFAULT_OPTIONS) : UPDATE_DEFAULT_OPTIONS,
57
+ { exclude: ["calleeElement"] }
58
+ );
50
59
  options.calleeElement = calleeElementCache;
51
60
  const element = this;
52
- const { parent, node, key } = element;
53
- const { excludes, preventInheritAtCurrentState } = options;
54
61
  let ref = element.__ref;
55
- if (!ref)
56
- ref = element.__ref = {};
57
- const [snapshotOnCallee, calleeElement, snapshotHasUpdated] = captureSnapshot(element, options);
58
- if (snapshotHasUpdated)
59
- return;
60
- if (!options.preventListeners)
62
+ if (!ref) ref = element.__ref = {};
63
+ const [snapshotOnCallee, calleeElement, snapshotHasUpdated] = (0, import_utils.captureSnapshot)(
64
+ element,
65
+ options
66
+ );
67
+ if (snapshotHasUpdated) return;
68
+ if (!options.preventListeners) {
61
69
  await (0, import_event.triggerEventOnUpdate)("startUpdate", params, element, options);
62
- if (preventInheritAtCurrentState && preventInheritAtCurrentState.__element === element)
70
+ }
71
+ const { parent, node, key } = element;
72
+ const { exclude, preventInheritAtCurrentState } = options;
73
+ if (preventInheritAtCurrentState && preventInheritAtCurrentState.__element === element) {
63
74
  return;
64
- if (!excludes)
65
- (0, import_utils.merge)(options, UPDATE_DEFAULT_OPTIONS);
75
+ }
76
+ if (!exclude) (0, import_utils.merge)(options, UPDATE_DEFAULT_OPTIONS);
66
77
  if ((0, import_utils.isString)(params) || (0, import_utils.isNumber)(params)) {
67
78
  params = { text: params };
68
79
  }
80
+ params = (0, import_utils.propertizeElement)(params);
69
81
  const inheritState = await inheritStateUpdates(element, options);
70
- if (inheritState === false)
71
- return;
72
- const ifFails = checkIfOnUpdate(element, parent, options);
73
- if (ifFails)
74
- return;
82
+ if (inheritState === false) return;
83
+ const ifFails = await checkIfOnUpdate(element, parent, options);
84
+ if (ifFails) return;
75
85
  if (ref.__if && !options.preventPropsUpdate) {
76
86
  const hasParentProps = parent.props && (parent.props[key] || parent.props.childProps);
77
- const hasFunctionInProps = ref.__props.filter((v) => (0, import_utils.isFunction)(v));
87
+ const hasFunctionInProps = ref.__propsStack.filter((v) => (0, import_utils.isFunction)(v));
78
88
  const props = params.props || hasParentProps || hasFunctionInProps.length;
79
- if (props)
80
- (0, import_props.updateProps)(props, element, parent);
89
+ if (props) (0, import_utils.updateProps)(props, element, parent);
81
90
  }
82
91
  if (!options.preventBeforeUpdateListener && !options.preventListeners) {
83
- const beforeUpdateReturns = await (0, import_event.triggerEventOnUpdate)("beforeUpdate", params, element, options);
84
- if (beforeUpdateReturns === false)
85
- return element;
92
+ const beforeUpdateReturns = await (0, import_event.triggerEventOnUpdate)(
93
+ "beforeUpdate",
94
+ params,
95
+ element,
96
+ options
97
+ );
98
+ if (beforeUpdateReturns === false) return element;
86
99
  }
87
- (0, import_utils.overwriteDeep)(element, params, { exclude: import_utils2.METHODS_EXL });
100
+ (0, import_utils.overwriteDeep)(element, params);
88
101
  (0, import_iterate.throughExecProps)(element);
89
102
  (0, import_iterate.throughUpdatedExec)(element, { ignore: UPDATE_DEFAULT_OPTIONS });
90
103
  (0, import_iterate.throughUpdatedDefine)(element);
91
104
  if (!options.isForced && !options.preventListeners) {
92
- (0, import_event.triggerEventOn)("beforeClassAssign", element, options);
105
+ await (0, import_event.triggerEventOn)("beforeClassAssign", element, options);
93
106
  }
94
- if (!ref.__if)
95
- return false;
107
+ if (!ref.__if) return false;
96
108
  if (!node) {
97
109
  return;
98
110
  }
@@ -107,78 +119,75 @@ const update = async function(params = {}, opts) {
107
119
  preventUpdateAfterCount
108
120
  } = options;
109
121
  if (preventUpdateAfter) {
110
- if ((0, import_utils.isNumber)(preventUpdateAfterCount) && preventUpdateAfter <= preventUpdateAfterCount)
122
+ if ((0, import_utils.isNumber)(preventUpdateAfterCount) && preventUpdateAfter <= preventUpdateAfterCount) {
111
123
  return;
112
- else if (options.preventUpdateAfterCount === void 0)
124
+ } else if (options.preventUpdateAfterCount === void 0) {
113
125
  options.preventUpdateAfterCount = 1;
114
- else
115
- options.preventUpdateAfterCount++;
126
+ } else options.preventUpdateAfterCount++;
116
127
  }
117
128
  for (const param in element) {
118
129
  const prop = element[param];
119
- if (!Object.hasOwnProperty.call(element, param))
120
- continue;
130
+ if (!Object.hasOwnProperty.call(element, param)) continue;
121
131
  const isInPreventUpdate = (0, import_utils.isArray)(preventUpdate) && preventUpdate.includes(param);
122
132
  const isInPreventDefineUpdate = (0, import_utils.isArray)(preventDefineUpdate) && preventDefineUpdate.includes(param);
123
- const hasCollection = element.$collection || element.$stateCollection || element.$propsCollection;
124
- if ((0, import_utils.isUndefined)(prop) || isInPreventUpdate || isInPreventDefineUpdate || preventDefineUpdate === true || preventDefineUpdate === param || preventContentUpdate && param === "content" && !hasCollection || (preventStateUpdate && param) === "state" || (0, import_methods.isMethod)(param, element) || (0, import_utils.isObject)(import_mixins.REGISTRY[param]) || (0, import_utils.isVariant)(param))
133
+ if ((0, import_utils.isUndefined)(prop) || isInPreventUpdate || isInPreventDefineUpdate || preventDefineUpdate === true || preventDefineUpdate === param || (preventStateUpdate && param) === "state" || (0, import_utils.isMethod)(param, element) || (0, import_utils.isObject)(import_mixins.REGISTRY[param])) {
125
134
  continue;
126
- if (preventStateUpdate === "once")
127
- options.preventStateUpdate = false;
128
- const isElement = (0, import_applyParam.applyParam)(param, element, options);
135
+ }
136
+ if (preventStateUpdate === "once") options.preventStateUpdate = false;
137
+ const isElement = await (0, import_applyParam.applyParam)(param, element, options);
129
138
  if (isElement) {
130
139
  const { hasDefine, hasContextDefine } = isElement;
131
140
  const canUpdate = (0, import_utils.isObject)(prop) && !hasDefine && !hasContextDefine && !preventRecursive;
132
- if (!canUpdate)
133
- continue;
141
+ if (!canUpdate) continue;
134
142
  const lazyLoad = element.props.lazyLoad || options.lazyLoad;
135
143
  if (options.onEachUpdate) {
136
144
  options.onEachUpdate(param, element, element.state, element.context);
137
145
  }
138
- const childUpdateCall = () => update.call(prop, params[prop], {
146
+ const childUpdateCall = async () => await update.call(prop, params[prop], {
139
147
  ...options,
140
148
  currentSnapshot: snapshotOnCallee,
141
149
  calleeElement
142
150
  });
143
- lazyLoad ? import_utils.window.requestAnimationFrame(() => {
144
- childUpdateCall();
145
- if (!options.preventUpdateListener) {
146
- (0, import_event.triggerEventOn)("lazyLoad", element, options);
147
- }
148
- }) : childUpdateCall();
151
+ if (lazyLoad) {
152
+ import_utils.window.requestAnimationFrame(async () => {
153
+ await childUpdateCall();
154
+ if (!options.preventUpdateListener) {
155
+ await (0, import_event.triggerEventOn)("lazyLoad", element, options);
156
+ }
157
+ });
158
+ } else await childUpdateCall();
149
159
  }
150
160
  }
151
- if (!preventUpdateListener)
152
- (0, import_event.triggerEventOn)("update", element, options);
153
- };
154
- const captureSnapshot = (element, options) => {
155
- const ref = element.__ref;
156
- const { currentSnapshot, calleeElement } = options;
157
- const isCallee = calleeElement === element;
158
- if (!calleeElement || isCallee) {
159
- const createdStanpshot = snapshot.snapshotId();
160
- ref.__currentSnapshot = createdStanpshot;
161
- return [createdStanpshot, element];
161
+ if (!preventContentUpdate) {
162
+ const children = params.children || element.children;
163
+ const content = children ? await (0, import_children.default)(children, element, opts) : element.children || params.content;
164
+ if (content) {
165
+ await (0, import_set.setContent)(content, element, options);
166
+ }
162
167
  }
163
- const snapshotOnCallee = calleeElement.__ref.__currentSnapshot;
164
- if (currentSnapshot < snapshotOnCallee) {
165
- return [snapshotOnCallee, calleeElement, true];
168
+ if (!preventUpdateListener) {
169
+ await (0, import_event.triggerEventOn)("update", element, options);
166
170
  }
167
- return [snapshotOnCallee, calleeElement];
168
171
  };
169
- const checkIfOnUpdate = (element, parent, options) => {
172
+ const checkIfOnUpdate = async (element, parent, options) => {
170
173
  var _a, _b, _c;
171
- if (!(0, import_utils.isFunction)(element.if) && !(0, import_utils.isFunction)((_a = element.props) == null ? void 0 : _a.if) || !parent)
174
+ if (!(0, import_utils.isFunction)(element.if) && !(0, import_utils.isFunction)((_a = element.props) == null ? void 0 : _a.if) || !parent) {
172
175
  return;
176
+ }
173
177
  const ref = element.__ref;
174
- const ifPassed = (element.if || ((_b = element.props) == null ? void 0 : _b.if))(element, element.state, element.context, options);
178
+ const ifPassed = (element.if || ((_b = element.props) == null ? void 0 : _b.if))(
179
+ element,
180
+ element.state,
181
+ element.context,
182
+ options
183
+ );
175
184
  const itWasFalse = ref.__if !== true;
176
185
  if (ifPassed) {
177
186
  ref.__if = true;
178
187
  if (itWasFalse) {
179
188
  delete element.__hash;
180
189
  delete element.__text;
181
- delete element.extend;
190
+ delete element.extends;
182
191
  if (!ref.__hasRootState) {
183
192
  delete element.state;
184
193
  }
@@ -192,10 +201,11 @@ const checkIfOnUpdate = (element, parent, options) => {
192
201
  delete element.node;
193
202
  }
194
203
  const contentKey = ref.contentElementKey;
195
- if (element.$collection || element.$stateCollection || element.$propsCollection) {
204
+ if (element.children) {
196
205
  element.removeContent();
197
- } else if ((_c = element[contentKey]) == null ? void 0 : _c.parseDeep)
206
+ } else if ((_c = element[contentKey]) == null ? void 0 : _c.parseDeep) {
198
207
  element[contentKey] = element[contentKey].parseDeep();
208
+ }
199
209
  const previousElement = element.previousElement();
200
210
  const previousNode = previousElement == null ? void 0 : previousElement.node;
201
211
  const hasPrevious = previousNode == null ? void 0 : previousNode.parentNode;
@@ -208,9 +218,19 @@ const checkIfOnUpdate = (element, parent, options) => {
208
218
  };
209
219
  delete element.__ref;
210
220
  delete element.parent;
211
- const createdElement = (0, import_create.create)(element, parent, element.key, import_options.OPTIONS.create, attachOptions);
221
+ const createdElement = await (0, import_create.create)(
222
+ element,
223
+ parent,
224
+ element.key,
225
+ import_utils.OPTIONS.create,
226
+ attachOptions
227
+ );
212
228
  if (options.preventUpdate !== true && element.on && (0, import_utils.isFunction)(element.on.update)) {
213
- (0, import_event.applyEvent)(element.on.update, createdElement, createdElement.state);
229
+ await (0, import_event.applyEvent)(
230
+ element.on.update,
231
+ createdElement,
232
+ createdElement.state
233
+ );
214
234
  }
215
235
  return createdElement;
216
236
  }
@@ -224,8 +244,7 @@ const inheritStateUpdates = async (element, options) => {
224
244
  const stateKey = ref.__state;
225
245
  const { parent, state } = element;
226
246
  const { preventUpdateTriggerStateUpdate, isHoisted, execStateFunction } = options;
227
- if (preventUpdateTriggerStateUpdate)
228
- return;
247
+ if (preventUpdateTriggerStateUpdate) return;
229
248
  if (!stateKey && !ref.__hasRootState) {
230
249
  element.state = parent && parent.state || {};
231
250
  return;
@@ -233,29 +252,41 @@ const inheritStateUpdates = async (element, options) => {
233
252
  const shouldForceFunctionState = (0, import_utils.isFunction)(stateKey) && !isHoisted && execStateFunction;
234
253
  if (shouldForceFunctionState) {
235
254
  const execState = (0, import_utils.exec)(stateKey, element);
236
- state.set(execState, { ...options, preventUpdate: true, preventStateUpdateListener: false, updatedByStateFunction: true });
255
+ state.set(execState, {
256
+ ...options,
257
+ preventUpdate: true,
258
+ preventStateUpdateListener: false,
259
+ updatedByStateFunction: true
260
+ });
237
261
  return;
238
262
  }
239
- const keyInParentState = (0, import_state.findInheritedState)(element, element.parent);
240
- if (!keyInParentState || options.preventInheritedStateUpdate)
241
- return;
263
+ const keyInParentState = (0, import_utils.findInheritedState)(element, element.parent);
264
+ if (!keyInParentState || options.preventInheritedStateUpdate) return;
242
265
  if (!options.preventBeforeStateUpdateListener && !options.preventListeners) {
243
- const initStateReturns = await (0, import_event.triggerEventOnUpdate)("beforeStateUpdate", keyInParentState, element, options);
244
- if (initStateReturns === false)
245
- return element;
266
+ const initStateReturns = await (0, import_event.triggerEventOnUpdate)(
267
+ "beforeStateUpdate",
268
+ keyInParentState,
269
+ element,
270
+ options
271
+ );
272
+ if (initStateReturns === false) return element;
246
273
  }
247
- const newState = createStateUpdate(element, parent, options);
274
+ const newState = await createStateUpdate(element, parent, options);
248
275
  if (!options.preventStateUpdateListener && !options.preventListeners) {
249
- await (0, import_event.triggerEventOnUpdate)("stateUpdate", newState.parse(), element, options);
276
+ await (0, import_event.triggerEventOnUpdate)(
277
+ "stateUpdate",
278
+ newState.parse(),
279
+ element,
280
+ options
281
+ );
250
282
  }
251
283
  };
252
- const createStateUpdate = (element, parent, options) => {
284
+ const createStateUpdate = async (element, parent, options) => {
253
285
  const __stateChildren = element.state.__children;
254
- const newState = (0, import_state.createState)(element, parent);
286
+ const newState = await (0, import_state.createState)(element, parent);
255
287
  element.state = newState;
256
288
  for (const child in __stateChildren) {
257
- if (newState[child])
258
- newState.__children[child] = __stateChildren[child];
289
+ if (newState[child]) newState.__children[child] = __stateChildren[child];
259
290
  Object.getPrototypeOf(__stateChildren[child]).parent = newState;
260
291
  }
261
292
  return newState;