@dooboostore/simple-web-component 1.0.47 → 1.0.49

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 (233) hide show
  1. package/README.md +223 -27
  2. package/dist/cjs/config/config.js +1 -1
  3. package/dist/cjs/config/config.js.map +2 -2
  4. package/dist/cjs/decorators/addEventListener.js +412 -16
  5. package/dist/cjs/decorators/addEventListener.js.map +3 -3
  6. package/dist/cjs/decorators/applyAttribute.js +25 -0
  7. package/dist/cjs/decorators/applyAttribute.js.map +2 -2
  8. package/dist/cjs/decorators/applyClass.js +49 -18
  9. package/dist/cjs/decorators/applyClass.js.map +3 -3
  10. package/dist/cjs/decorators/applyNode.js +67 -1
  11. package/dist/cjs/decorators/applyNode.js.map +3 -3
  12. package/dist/cjs/decorators/applyProperty.js +101 -3
  13. package/dist/cjs/decorators/applyProperty.js.map +2 -2
  14. package/dist/cjs/decorators/applyStyle.js +36 -5
  15. package/dist/cjs/decorators/applyStyle.js.map +2 -2
  16. package/dist/cjs/decorators/changedAttribute.js +39 -0
  17. package/dist/cjs/decorators/changedAttribute.js.map +2 -2
  18. package/dist/cjs/decorators/elementDefine.js +244 -225
  19. package/dist/cjs/decorators/elementDefine.js.map +3 -3
  20. package/dist/cjs/decorators/emitCustomEvent.js +55 -0
  21. package/dist/cjs/decorators/emitCustomEvent.js.map +2 -2
  22. package/dist/cjs/decorators/index.js +5 -1
  23. package/dist/cjs/decorators/index.js.map +2 -2
  24. package/dist/cjs/decorators/intersectionObserver.js +209 -0
  25. package/dist/cjs/decorators/intersectionObserver.js.map +7 -0
  26. package/dist/cjs/decorators/mutationObserver.js +244 -0
  27. package/dist/cjs/decorators/mutationObserver.js.map +7 -0
  28. package/dist/cjs/decorators/query.js +129 -102
  29. package/dist/cjs/decorators/query.js.map +2 -2
  30. package/dist/cjs/decorators/resizeObserver.js +191 -0
  31. package/dist/cjs/decorators/resizeObserver.js.map +7 -0
  32. package/dist/cjs/decorators/setInterval.js +82 -0
  33. package/dist/cjs/decorators/setInterval.js.map +7 -0
  34. package/dist/cjs/decorators/setTimeout.js +82 -0
  35. package/dist/cjs/decorators/setTimeout.js.map +7 -0
  36. package/dist/cjs/decorators/subscribeSwcAppMessageWhileConnected.js +9 -0
  37. package/dist/cjs/decorators/subscribeSwcAppMessageWhileConnected.js.map +2 -2
  38. package/dist/cjs/decorators/subscribeSwcAppRouteChangeWhileConnected.js +9 -0
  39. package/dist/cjs/decorators/subscribeSwcAppRouteChangeWhileConnected.js.map +2 -2
  40. package/dist/cjs/examples/RxJSOperatorsExample.js +285 -0
  41. package/dist/cjs/examples/RxJSOperatorsExample.js.map +7 -0
  42. package/dist/cjs/types/index.js.map +1 -1
  43. package/dist/esm/config/config.js +1 -1
  44. package/dist/esm/config/config.js.map +2 -2
  45. package/dist/esm/decorators/addEventListener.js +413 -16
  46. package/dist/esm/decorators/addEventListener.js.map +3 -3
  47. package/dist/esm/decorators/applyAttribute.js +25 -0
  48. package/dist/esm/decorators/applyAttribute.js.map +2 -2
  49. package/dist/esm/decorators/applyClass.js +49 -18
  50. package/dist/esm/decorators/applyClass.js.map +3 -3
  51. package/dist/esm/decorators/applyNode.js +67 -1
  52. package/dist/esm/decorators/applyNode.js.map +3 -3
  53. package/dist/esm/decorators/applyProperty.js +101 -3
  54. package/dist/esm/decorators/applyProperty.js.map +2 -2
  55. package/dist/esm/decorators/applyStyle.js +36 -5
  56. package/dist/esm/decorators/applyStyle.js.map +2 -2
  57. package/dist/esm/decorators/changedAttribute.js +40 -0
  58. package/dist/esm/decorators/changedAttribute.js.map +2 -2
  59. package/dist/esm/decorators/elementDefine.js +249 -230
  60. package/dist/esm/decorators/elementDefine.js.map +3 -3
  61. package/dist/esm/decorators/emitCustomEvent.js +55 -0
  62. package/dist/esm/decorators/emitCustomEvent.js.map +2 -2
  63. package/dist/esm/decorators/index.js +5 -1
  64. package/dist/esm/decorators/index.js.map +2 -2
  65. package/dist/esm/decorators/intersectionObserver.js +191 -0
  66. package/dist/esm/decorators/intersectionObserver.js.map +7 -0
  67. package/dist/esm/decorators/mutationObserver.js +226 -0
  68. package/dist/esm/decorators/mutationObserver.js.map +7 -0
  69. package/dist/esm/decorators/query.js +129 -102
  70. package/dist/esm/decorators/query.js.map +2 -2
  71. package/dist/esm/decorators/resizeObserver.js +173 -0
  72. package/dist/esm/decorators/resizeObserver.js.map +7 -0
  73. package/dist/esm/decorators/setInterval.js +64 -0
  74. package/dist/esm/decorators/setInterval.js.map +7 -0
  75. package/dist/esm/decorators/setTimeout.js +64 -0
  76. package/dist/esm/decorators/setTimeout.js.map +7 -0
  77. package/dist/esm/decorators/subscribeSwcAppMessageWhileConnected.js +9 -0
  78. package/dist/esm/decorators/subscribeSwcAppMessageWhileConnected.js.map +2 -2
  79. package/dist/esm/decorators/subscribeSwcAppRouteChangeWhileConnected.js +9 -0
  80. package/dist/esm/decorators/subscribeSwcAppRouteChangeWhileConnected.js.map +2 -2
  81. package/dist/esm/examples/RxJSOperatorsExample.js +266 -0
  82. package/dist/esm/examples/RxJSOperatorsExample.js.map +7 -0
  83. package/dist/esm/types/index.js.map +1 -1
  84. package/dist/esm-bundle/dooboostore-simple-web-component.esm.js +2413 -889
  85. package/dist/esm-bundle/dooboostore-simple-web-component.esm.js.map +4 -4
  86. package/dist/types/config/config.d.ts.map +1 -1
  87. package/dist/types/decorators/addEventListener.d.ts +93 -23
  88. package/dist/types/decorators/addEventListener.d.ts.map +1 -1
  89. package/dist/types/decorators/applyAttribute.d.ts +22 -34
  90. package/dist/types/decorators/applyAttribute.d.ts.map +1 -1
  91. package/dist/types/decorators/applyClass.d.ts +34 -34
  92. package/dist/types/decorators/applyClass.d.ts.map +1 -1
  93. package/dist/types/decorators/applyNode.d.ts +30 -20
  94. package/dist/types/decorators/applyNode.d.ts.map +1 -1
  95. package/dist/types/decorators/applyProperty.d.ts +57 -34
  96. package/dist/types/decorators/applyProperty.d.ts.map +1 -1
  97. package/dist/types/decorators/applyStyle.d.ts +25 -12
  98. package/dist/types/decorators/applyStyle.d.ts.map +1 -1
  99. package/dist/types/decorators/changedAttribute.d.ts +11 -0
  100. package/dist/types/decorators/changedAttribute.d.ts.map +1 -1
  101. package/dist/types/decorators/elementDefine.d.ts.map +1 -1
  102. package/dist/types/decorators/emitCustomEvent.d.ts +28 -4
  103. package/dist/types/decorators/emitCustomEvent.d.ts.map +1 -1
  104. package/dist/types/decorators/index.d.ts +5 -1
  105. package/dist/types/decorators/index.d.ts.map +1 -1
  106. package/dist/types/decorators/intersectionObserver.d.ts +49 -0
  107. package/dist/types/decorators/intersectionObserver.d.ts.map +1 -0
  108. package/dist/types/decorators/mutationObserver.d.ts +46 -0
  109. package/dist/types/decorators/mutationObserver.d.ts.map +1 -0
  110. package/dist/types/decorators/query.d.ts +63 -8
  111. package/dist/types/decorators/query.d.ts.map +1 -1
  112. package/dist/types/decorators/resizeObserver.d.ts +48 -0
  113. package/dist/types/decorators/resizeObserver.d.ts.map +1 -0
  114. package/dist/types/decorators/setInterval.d.ts +29 -0
  115. package/dist/types/decorators/setInterval.d.ts.map +1 -0
  116. package/dist/types/decorators/setTimeout.d.ts +29 -0
  117. package/dist/types/decorators/setTimeout.d.ts.map +1 -0
  118. package/dist/types/decorators/subscribeSwcAppMessageWhileConnected.d.ts +7 -1
  119. package/dist/types/decorators/subscribeSwcAppMessageWhileConnected.d.ts.map +1 -1
  120. package/dist/types/decorators/subscribeSwcAppRouteChangeWhileConnected.d.ts +6 -0
  121. package/dist/types/decorators/subscribeSwcAppRouteChangeWhileConnected.d.ts.map +1 -1
  122. package/dist/types/examples/RxJSOperatorsExample.d.ts +94 -0
  123. package/dist/types/examples/RxJSOperatorsExample.d.ts.map +1 -0
  124. package/dist/types/types/index.d.ts +104 -0
  125. package/dist/types/types/index.d.ts.map +1 -1
  126. package/dist/umd-bundle/dooboostore-simple-web-component.umd.js +2413 -889
  127. package/dist/umd-bundle/dooboostore-simple-web-component.umd.js.map +4 -4
  128. package/package.json +8 -6
  129. package/src/config/config.ts +1 -1
  130. package/src/decorators/addEventListener.ts +426 -23
  131. package/src/decorators/applyAttribute.ts +50 -36
  132. package/src/decorators/applyClass.ts +76 -26
  133. package/src/decorators/applyNode.ts +114 -36
  134. package/src/decorators/applyProperty.ts +152 -40
  135. package/src/decorators/applyStyle.ts +64 -17
  136. package/src/decorators/changedAttribute.ts +46 -0
  137. package/src/decorators/elementDefine.ts +301 -317
  138. package/src/decorators/emitCustomEvent.ts +73 -5
  139. package/src/decorators/index.ts +5 -1
  140. package/src/decorators/intersectionObserver.ts +259 -0
  141. package/src/decorators/mutationObserver.ts +304 -0
  142. package/src/decorators/query.ts +182 -117
  143. package/src/decorators/resizeObserver.ts +235 -0
  144. package/src/decorators/setInterval.ts +80 -0
  145. package/src/decorators/setTimeout.ts +80 -0
  146. package/src/decorators/subscribeSwcAppMessageWhileConnected.ts +17 -0
  147. package/src/decorators/subscribeSwcAppRouteChangeWhileConnected.ts +19 -0
  148. package/src/examples/RxJSOperatorsExample.ts +279 -0
  149. package/src/types/index.ts +141 -0
  150. package/dist/cjs/decorators/queryAll.js +0 -181
  151. package/dist/cjs/decorators/queryAll.js.map +0 -7
  152. package/dist/cjs/elements/tt/SwcAppMixin.js +0 -1
  153. package/dist/cjs/elements/tt/SwcAppMixin.js.map +0 -7
  154. package/dist/cjs/elements/tt/SwcAsync.js +0 -1
  155. package/dist/cjs/elements/tt/SwcAsync.js.map +0 -7
  156. package/dist/cjs/elements/tt/SwcAsyncTemplate.js +0 -1
  157. package/dist/cjs/elements/tt/SwcAsyncTemplate.js.map +0 -7
  158. package/dist/cjs/elements/tt/SwcChoose.js +0 -1
  159. package/dist/cjs/elements/tt/SwcChoose.js.map +0 -7
  160. package/dist/cjs/elements/tt/SwcChooseTemplate.js +0 -1
  161. package/dist/cjs/elements/tt/SwcChooseTemplate.js.map +0 -7
  162. package/dist/cjs/elements/tt/SwcIf.js +0 -1
  163. package/dist/cjs/elements/tt/SwcIf.js.map +0 -7
  164. package/dist/cjs/elements/tt/SwcIfTemplate.js +0 -1
  165. package/dist/cjs/elements/tt/SwcIfTemplate.js.map +0 -7
  166. package/dist/cjs/elements/tt/SwcLoop.js +0 -1
  167. package/dist/cjs/elements/tt/SwcLoop.js.map +0 -7
  168. package/dist/cjs/elements/tt/SwcLoopTemplate.js +0 -1
  169. package/dist/cjs/elements/tt/SwcLoopTemplate.js.map +0 -7
  170. package/dist/cjs/elements/tt/SwcSubTemplates.js +0 -1
  171. package/dist/cjs/elements/tt/SwcSubTemplates.js.map +0 -7
  172. package/dist/cjs/elements/tt/register.js +0 -1
  173. package/dist/cjs/elements/tt/register.js.map +0 -7
  174. package/dist/esm/decorators/queryAll.js +0 -162
  175. package/dist/esm/decorators/queryAll.js.map +0 -7
  176. package/dist/esm/elements/tt/SwcAppMixin.js +0 -1
  177. package/dist/esm/elements/tt/SwcAppMixin.js.map +0 -7
  178. package/dist/esm/elements/tt/SwcAsync.js +0 -1
  179. package/dist/esm/elements/tt/SwcAsync.js.map +0 -7
  180. package/dist/esm/elements/tt/SwcAsyncTemplate.js +0 -1
  181. package/dist/esm/elements/tt/SwcAsyncTemplate.js.map +0 -7
  182. package/dist/esm/elements/tt/SwcChoose.js +0 -1
  183. package/dist/esm/elements/tt/SwcChoose.js.map +0 -7
  184. package/dist/esm/elements/tt/SwcChooseTemplate.js +0 -1
  185. package/dist/esm/elements/tt/SwcChooseTemplate.js.map +0 -7
  186. package/dist/esm/elements/tt/SwcIf.js +0 -1
  187. package/dist/esm/elements/tt/SwcIf.js.map +0 -7
  188. package/dist/esm/elements/tt/SwcIfTemplate.js +0 -1
  189. package/dist/esm/elements/tt/SwcIfTemplate.js.map +0 -7
  190. package/dist/esm/elements/tt/SwcLoop.js +0 -1
  191. package/dist/esm/elements/tt/SwcLoop.js.map +0 -7
  192. package/dist/esm/elements/tt/SwcLoopTemplate.js +0 -1
  193. package/dist/esm/elements/tt/SwcLoopTemplate.js.map +0 -7
  194. package/dist/esm/elements/tt/SwcSubTemplates.js +0 -1
  195. package/dist/esm/elements/tt/SwcSubTemplates.js.map +0 -7
  196. package/dist/esm/elements/tt/register.js +0 -1
  197. package/dist/esm/elements/tt/register.js.map +0 -7
  198. package/dist/types/decorators/queryAll.d.ts +0 -22
  199. package/dist/types/decorators/queryAll.d.ts.map +0 -1
  200. package/dist/types/elements/tt/SwcAppMixin.d.ts +0 -1
  201. package/dist/types/elements/tt/SwcAppMixin.d.ts.map +0 -1
  202. package/dist/types/elements/tt/SwcAsync.d.ts +0 -1
  203. package/dist/types/elements/tt/SwcAsync.d.ts.map +0 -1
  204. package/dist/types/elements/tt/SwcAsyncTemplate.d.ts +0 -1
  205. package/dist/types/elements/tt/SwcAsyncTemplate.d.ts.map +0 -1
  206. package/dist/types/elements/tt/SwcChoose.d.ts +0 -1
  207. package/dist/types/elements/tt/SwcChoose.d.ts.map +0 -1
  208. package/dist/types/elements/tt/SwcChooseTemplate.d.ts +0 -1
  209. package/dist/types/elements/tt/SwcChooseTemplate.d.ts.map +0 -1
  210. package/dist/types/elements/tt/SwcIf.d.ts +0 -1
  211. package/dist/types/elements/tt/SwcIf.d.ts.map +0 -1
  212. package/dist/types/elements/tt/SwcIfTemplate.d.ts +0 -1
  213. package/dist/types/elements/tt/SwcIfTemplate.d.ts.map +0 -1
  214. package/dist/types/elements/tt/SwcLoop.d.ts +0 -1
  215. package/dist/types/elements/tt/SwcLoop.d.ts.map +0 -1
  216. package/dist/types/elements/tt/SwcLoopTemplate.d.ts +0 -1
  217. package/dist/types/elements/tt/SwcLoopTemplate.d.ts.map +0 -1
  218. package/dist/types/elements/tt/SwcSubTemplates.d.ts +0 -1
  219. package/dist/types/elements/tt/SwcSubTemplates.d.ts.map +0 -1
  220. package/dist/types/elements/tt/register.d.ts +0 -1
  221. package/dist/types/elements/tt/register.d.ts.map +0 -1
  222. package/src/decorators/queryAll.ts +0 -186
  223. package/src/elements/tt/SwcAppMixin.ts +0 -13
  224. package/src/elements/tt/SwcAsync.ts +0 -139
  225. package/src/elements/tt/SwcAsyncTemplate.ts +0 -126
  226. package/src/elements/tt/SwcChoose.ts +0 -182
  227. package/src/elements/tt/SwcChooseTemplate.ts +0 -229
  228. package/src/elements/tt/SwcIf.ts +0 -145
  229. package/src/elements/tt/SwcIfTemplate.ts +0 -158
  230. package/src/elements/tt/SwcLoop.ts +0 -222
  231. package/src/elements/tt/SwcLoopTemplate.ts +0 -255
  232. package/src/elements/tt/SwcSubTemplates.ts +0 -6
  233. package/src/elements/tt/register.ts +0 -720
@@ -24,14 +24,15 @@ __export(elementDefine_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(elementDefine_exports);
26
26
  var import_core = require("@dooboostore/core");
27
- var import_operators = require("@dooboostore/core/message/operators");
28
27
  var import_addEventListener = require("./addEventListener");
28
+ var import_mutationObserver = require("./mutationObserver");
29
+ var import_resizeObserver = require("./resizeObserver");
30
+ var import_intersectionObserver = require("./intersectionObserver");
29
31
  var import_lifecycles = require("./lifecycles");
30
32
  var import_emitCustomEvent = require("./emitCustomEvent");
31
33
  var import_changedAttribute = require("./changedAttribute");
32
34
  var import_applyAttribute = require("./applyAttribute");
33
35
  var import_query = require("./query");
34
- var import_queryAll = require("./queryAll");
35
36
  var import_Utils = require("../utils/Utils");
36
37
  var import_config = require("../config/config");
37
38
  var import_Inject = require("@dooboostore/simple-boot/decorators/inject/Inject");
@@ -40,6 +41,10 @@ var import_core_web = require("@dooboostore/core-web");
40
41
  var import_SwcAppMixin = require("../elements/SwcAppMixin");
41
42
  var import_state = require("./state");
42
43
  var import_applyProperty = require("./applyProperty");
44
+ var import_subscribeSwcAppMessageWhileConnected = require("./subscribeSwcAppMessageWhileConnected");
45
+ var import_subscribeSwcAppRouteChangeWhileConnected = require("./subscribeSwcAppRouteChangeWhileConnected");
46
+ var import_setInterval = require("./setInterval");
47
+ var import_setTimeout = require("./setTimeout");
43
48
  const ELEMENT_CONFIG_KEY = Symbol.for("simple-web-component:element-config");
44
49
  const getElementConfig = (target) => {
45
50
  const constructor = target instanceof Function ? target : target.constructor;
@@ -49,7 +54,6 @@ const ensureInit = (inst) => {
49
54
  if (!inst.__swc_initialized) {
50
55
  inst._swcId = inst?.getAttribute?.("swc-use-ssr") ?? "s" + Math.random().toString(36).substring(2, 11).toLowerCase();
51
56
  inst._emitHandlers = /* @__PURE__ */ new Map();
52
- inst._boundListeners = [];
53
57
  inst.__swc_initialized = true;
54
58
  const target = inst instanceof Function ? inst : inst.constructor;
55
59
  const attributeAllList = (0, import_applyAttribute.findAllAttributeMetadata)(target).filter((it) => it.type === "property");
@@ -64,7 +68,7 @@ const ensureInit = (inst) => {
64
68
  delete inst[meta.propertyKey];
65
69
  });
66
70
  }
67
- const queryAllList = (0, import_queryAll.getQueryAllMetadata)(target);
71
+ const queryAllList = (0, import_query.getQueryAllMetadata)(target);
68
72
  if (queryAllList) {
69
73
  queryAllList.forEach((meta) => {
70
74
  delete inst[meta.propertyKey];
@@ -248,10 +252,6 @@ const elementDefine = (name, config = {}) => (constructor) => {
248
252
  }
249
253
  metadata.extends = extendsTagName;
250
254
  }
251
- const emitCustomEventList = (0, import_emitCustomEvent.getEmitCustomEventMetadataList)(constructor) || [];
252
- const emitHostCustomEventList = emitCustomEventList.filter((meta) => meta.selector === "$this" || meta.selector === "");
253
- const addEventListenerList = (0, import_addEventListener.getAddEventListenerMetadata)(constructor) || [];
254
- const attrChangeMap = (0, import_changedAttribute.findAllAttributeChangedMetadata)(constructor);
255
255
  const attributeList = (0, import_applyAttribute.findAllAttributeMetadata)(constructor);
256
256
  const applyAttributeMap = (0, import_applyAttribute.findAllAttributeApplyMetadata)(constructor);
257
257
  const swcLifecycleAttributes = ["swc-on-constructor", "swc-on-connected", "swc-on-disconnected", "swc-on-before-connected", "swc-on-after-connected", "swc-on-before-disconnected", "swc-on-after-disconnected", "swc-on-before-adopted", "swc-on-after-adopted", "swc-on-attribute-changed"];
@@ -259,10 +259,222 @@ const elementDefine = (name, config = {}) => (constructor) => {
259
259
  const attributeApplyNames = Array.from(applyAttributeMap.values()).map((it) => it.targetAttributeName).filter(Boolean);
260
260
  const hostAttributes = attributeList.filter((it) => it.selector === "$this").map((it) => it.propertyKey || String(it.propertyKey));
261
261
  const originalStaticObservedAttributes = constructor.observedAttributes ?? [];
262
- const mergedObservedAttributes = [.../* @__PURE__ */ new Set([...metadata.observedAttributes ?? [], ...originalStaticObservedAttributes, ...attrChangeMap.keys(), ...attributeApplyNames, ...hostAttributes, ...emitHostCustomEventList.map((it) => it.options.attributeName).filter(Boolean), ...swcLifecycleAttributes, ...swcOnEvents])];
263
262
  const proto = constructor.prototype;
264
263
  setupPrototype(proto, win);
265
264
  let helperHostSet = null;
265
+ const eventCycler = new import_addEventListener.EventListenerLifeCycler();
266
+ const cyclers = [
267
+ eventCycler,
268
+ new import_changedAttribute.ChangedAttributeLifeCycler(),
269
+ new import_emitCustomEvent.EmitCustomEventLifeCycler(),
270
+ new import_resizeObserver.ResizeObserverLifeCycler(),
271
+ new import_intersectionObserver.IntersectionObserverLifeCycler(),
272
+ new import_mutationObserver.MutationObserverLifeCycler(),
273
+ new import_subscribeSwcAppMessageWhileConnected.MessageSubscribeLifeCycler(),
274
+ new import_subscribeSwcAppRouteChangeWhileConnected.RouteSubscribeLifeCycler(),
275
+ new import_setInterval.SetIntervalLifeCycler(),
276
+ new import_setTimeout.SetTimeoutLifeCycler()
277
+ ];
278
+ const cyclerObservedAttributes = cyclers.flatMap((c) => c.getObservedAttributeNames?.(constructor) ?? []);
279
+ const mergedObservedAttributes = [.../* @__PURE__ */ new Set([...metadata.observedAttributes ?? [], ...originalStaticObservedAttributes, ...cyclerObservedAttributes, ...attributeApplyNames, ...hostAttributes, ...swcLifecycleAttributes, ...swcOnEvents])];
280
+ const buildObservers = async (helperHostSet2) => {
281
+ const inst = helperHostSet2.$this;
282
+ const observers = [];
283
+ let resizeObserverSet = [];
284
+ let mutationObserverSet = [];
285
+ let intersectionObserverSet = [];
286
+ const resolveDelegateRoots = (delegateRoot) => {
287
+ const r = delegateRoot || "auto";
288
+ const roots = [];
289
+ if (r === "auto") roots.push(inst.shadowRoot || inst);
290
+ else if (r === "light") roots.push(inst);
291
+ else if (r === "shadow" && inst.shadowRoot) roots.push(inst.shadowRoot);
292
+ else if (r === "all") {
293
+ roots.push(inst);
294
+ if (inst.shadowRoot) roots.push(inst.shadowRoot);
295
+ }
296
+ return roots;
297
+ };
298
+ for (const c of cyclers) {
299
+ const result = await c.onConnected?.(helperHostSet2, resizeObserverSet);
300
+ if (!result) continue;
301
+ if (result.resizeObserverSet?.length) resizeObserverSet = [...resizeObserverSet, ...result.resizeObserverSet];
302
+ if (result.mutationObserverSet?.length) mutationObserverSet = [...mutationObserverSet, ...result.mutationObserverSet];
303
+ if (result.intersectionObserverSet?.length) intersectionObserverSet = [...intersectionObserverSet, ...result.intersectionObserverSet];
304
+ }
305
+ const resizeDelegates = (resizeObserverSet ?? []).filter((t) => t.delegate && typeof t.target === "string");
306
+ let resizeObserve;
307
+ let resizeUnobserve;
308
+ const resizeObserved = /* @__PURE__ */ new WeakSet();
309
+ if (resizeObserverSet?.length) {
310
+ const roCallbacks = [...new Set(resizeObserverSet.map((e) => e.callback))];
311
+ const ro = new win.ResizeObserver((entries, obs) => {
312
+ for (const cb of roCallbacks) cb(entries, obs);
313
+ });
314
+ for (const e of resizeObserverSet) {
315
+ if (e.delegate) continue;
316
+ if (typeof e.target === "string") {
317
+ const scope = resolveDelegateRoots(e.delegateRoot);
318
+ for (const sr of scope) {
319
+ sr.querySelectorAll(e.target).forEach((el) => {
320
+ if (!resizeObserved.has(el)) {
321
+ ro.observe(el, e.options);
322
+ resizeObserved.add(el);
323
+ }
324
+ });
325
+ }
326
+ continue;
327
+ }
328
+ ro.observe(e.target, e.options);
329
+ if (e.target instanceof Element) resizeObserved.add(e.target);
330
+ }
331
+ resizeObserve = (el, opts) => {
332
+ if (resizeObserved.has(el)) return;
333
+ ro.observe(el, opts);
334
+ resizeObserved.add(el);
335
+ };
336
+ resizeUnobserve = (el) => {
337
+ if (!resizeObserved.has(el)) return;
338
+ ro.unobserve(el);
339
+ resizeObserved.delete(el);
340
+ };
341
+ observers.push(ro);
342
+ }
343
+ const intersectionDelegates = [];
344
+ for (const group of intersectionObserverSet) {
345
+ const ioCallbacks = [...new Set(group.observeTargets.map((e) => e.callback))];
346
+ const io = new win.IntersectionObserver((entries, obs) => {
347
+ for (const cb of ioCallbacks) cb(entries, obs);
348
+ }, group.options);
349
+ const ioObserved = /* @__PURE__ */ new WeakSet();
350
+ for (const e of group.observeTargets) {
351
+ if (e.delegate) {
352
+ const target = e.target;
353
+ const observe = (el) => {
354
+ if (ioObserved.has(el)) return;
355
+ io.observe(el);
356
+ ioObserved.add(el);
357
+ };
358
+ const unobserve = (el) => {
359
+ if (!ioObserved.has(el)) return;
360
+ io.unobserve(el);
361
+ ioObserved.delete(el);
362
+ };
363
+ intersectionDelegates.push({ target, delegateRoot: e.delegateRoot, observe, unobserve });
364
+ continue;
365
+ }
366
+ if (typeof e.target === "string") {
367
+ const scope = resolveDelegateRoots(e.delegateRoot);
368
+ for (const sr of scope) {
369
+ sr.querySelectorAll(e.target).forEach((el) => {
370
+ if (!ioObserved.has(el)) {
371
+ io.observe(el);
372
+ ioObserved.add(el);
373
+ }
374
+ });
375
+ }
376
+ continue;
377
+ }
378
+ io.observe(e.target);
379
+ if (e.target instanceof Element) ioObserved.add(e.target);
380
+ }
381
+ observers.push(io);
382
+ }
383
+ const handleResizeDelegate = (n, observe) => {
384
+ if (!resizeObserve || !resizeUnobserve || n.nodeType !== 1) return;
385
+ const el = n;
386
+ for (const d of resizeDelegates) {
387
+ const isThis = d.target === "$this" || d.target === "";
388
+ const matchesSel = (node) => {
389
+ if (!node || node.nodeType !== 1) return false;
390
+ if (isThis) return true;
391
+ return node.matches?.(d.target) || !!node.closest?.(d.target);
392
+ };
393
+ if (matchesSel(el)) {
394
+ observe ? resizeObserve(el, d.options) : resizeUnobserve(el);
395
+ } else if (!isThis) {
396
+ el.querySelectorAll(d.target).forEach((sub) => {
397
+ observe ? resizeObserve(sub, d.options) : resizeUnobserve(sub);
398
+ });
399
+ }
400
+ }
401
+ };
402
+ const handleIntersectionDelegate = (n, observe) => {
403
+ if (n.nodeType !== 1) return;
404
+ const el = n;
405
+ for (const d of intersectionDelegates) {
406
+ const isThis = d.target === "$this" || d.target === "";
407
+ const matchesSel = (node) => {
408
+ if (!node || node.nodeType !== 1) return false;
409
+ if (isThis) return true;
410
+ return node.matches?.(d.target) || !!node.closest?.(d.target);
411
+ };
412
+ if (matchesSel(el)) {
413
+ observe ? d.observe(el) : d.unobserve(el);
414
+ } else if (!isThis) {
415
+ el.querySelectorAll(d.target).forEach((sub) => {
416
+ observe ? d.observe(sub) : d.unobserve(sub);
417
+ });
418
+ }
419
+ }
420
+ };
421
+ if (mutationObserverSet?.length || resizeDelegates.length > 0 || intersectionDelegates.length > 0) {
422
+ const callbacks = [...new Set((mutationObserverSet ?? []).map((e) => e.callback))];
423
+ const mo = new win.MutationObserver((mutations, obs) => {
424
+ for (const mut of mutations) {
425
+ Array.from(mut.addedNodes || []).forEach((n) => {
426
+ handleResizeDelegate(n, true);
427
+ handleIntersectionDelegate(n, true);
428
+ });
429
+ Array.from(mut.removedNodes || []).forEach((n) => {
430
+ handleResizeDelegate(n, false);
431
+ handleIntersectionDelegate(n, false);
432
+ });
433
+ }
434
+ for (const cb of callbacks) cb(mutations, obs);
435
+ });
436
+ const moObserveTargets = /* @__PURE__ */ new Map();
437
+ const mergeMutationInit = (existing, next) => {
438
+ if (!existing) return next;
439
+ const mergedFilter = existing.attributeFilter || next.attributeFilter ? [.../* @__PURE__ */ new Set([...existing.attributeFilter ?? [], ...next.attributeFilter ?? []])] : void 0;
440
+ return {
441
+ childList: existing.childList || next.childList,
442
+ attributes: existing.attributes || next.attributes,
443
+ characterData: existing.characterData || next.characterData,
444
+ subtree: existing.subtree || next.subtree,
445
+ attributeOldValue: existing.attributeOldValue || next.attributeOldValue,
446
+ characterDataOldValue: existing.characterDataOldValue || next.characterDataOldValue,
447
+ attributeFilter: mergedFilter
448
+ };
449
+ };
450
+ const addObserveTarget = (target, options) => {
451
+ moObserveTargets.set(target, mergeMutationInit(moObserveTargets.get(target), options));
452
+ };
453
+ for (const e of mutationObserverSet ?? []) {
454
+ if (e.delegate) continue;
455
+ const init = e.options ?? { childList: true };
456
+ if (typeof e.target === "string") {
457
+ const scope = resolveDelegateRoots(e.delegateRoot);
458
+ for (const sr of scope) {
459
+ sr.querySelectorAll(e.target).forEach((el) => addObserveTarget(el, init));
460
+ }
461
+ continue;
462
+ }
463
+ addObserveTarget(e.target, init);
464
+ }
465
+ for (const d of resizeDelegates) {
466
+ for (const r of resolveDelegateRoots(d.delegateRoot)) addObserveTarget(r, { childList: true, subtree: true });
467
+ }
468
+ for (const d of intersectionDelegates) {
469
+ for (const r of resolveDelegateRoots(d.delegateRoot)) addObserveTarget(r, { childList: true, subtree: true });
470
+ }
471
+ for (const [target, options] of moObserveTargets) {
472
+ mo.observe(target, options);
473
+ }
474
+ observers.push(mo);
475
+ }
476
+ inst.__swc_observers = observers;
477
+ };
266
478
  const originalConnected = proto.connectedCallback;
267
479
  proto.connectedCallback = async function() {
268
480
  ensureInit(this);
@@ -278,14 +490,12 @@ const elementDefine = (name, config = {}) => (constructor) => {
278
490
  }
279
491
  const conf = getElementConfig(this);
280
492
  const currentWin = this._resolveWindow(conf);
281
- const bMethods = (0, import_lifecycles.findAllOnConnectedBeforeMetadata)(this);
282
- for (const m of bMethods) await this._invokeLifecycleMethod(m.propertyKey, helperHostSet);
493
+ for (const m of (0, import_lifecycles.findAllOnConnectedBeforeMetadata)(this)) await this._invokeLifecycleMethod(m.propertyKey, helperHostSet);
283
494
  this._executeSwcScript("swc-on-before-connected", helperHostSet);
284
495
  const targetConnectedList = useSsr ? [] : (0, import_lifecycles.findAllOnConnectedMetadata)(constructor);
285
496
  const shadowMode = conf?.useShadow || targetConnectedList.find((it) => it.options.useShadow)?.options.useShadow;
286
497
  if (shadowMode && !this.shadowRoot) {
287
498
  const mode = shadowMode === true ? "open" : shadowMode;
288
- console.log("tagName=", this.tagName, "mode", mode, this.shadowRoot);
289
499
  this.attachShadow({ mode });
290
500
  }
291
501
  const stateContext = { ...helperHostSet };
@@ -294,7 +504,6 @@ const elementDefine = (name, config = {}) => (constructor) => {
294
504
  });
295
505
  const shadowChildren = [];
296
506
  const lightChildren = [];
297
- console.log("targetConnectList", this.tagName, targetConnectedList.length);
298
507
  if (targetConnectedList.length > 0) {
299
508
  for (const meta of targetConnectedList) {
300
509
  let res = await this._invokeLifecycleMethod(meta.propertyKey, helperHostSet);
@@ -335,188 +544,14 @@ const elementDefine = (name, config = {}) => (constructor) => {
335
544
  });
336
545
  globalDelegatedRoots.add(root);
337
546
  }
338
- const delegateListeners = [];
339
- const nonDelegateListeners = [];
340
- addEventListenerList.forEach((meta) => {
341
- const isStringSelector = typeof meta.selector === "string";
342
- if (meta.options.delegate && isStringSelector && meta.selector !== "$window" && meta.selector !== "$document" && meta.selector !== "$host" && meta.selector !== "$appHost" && meta.selector !== "$firstHost" && meta.selector !== "$lastHost" && meta.selector !== "$firstAppHost" && meta.selector !== "$lastAppHost" && meta.selector !== "$hosts" && meta.selector !== "$appHosts" && meta.selector !== "$this" && meta.selector !== "") {
343
- delegateListeners.push(meta);
344
- } else {
345
- nonDelegateListeners.push(meta);
346
- }
347
- });
348
- const delegatesByTypeAndRoot = /* @__PURE__ */ new Map();
349
- delegateListeners.forEach((meta) => {
350
- const r = meta.options.root || "auto";
351
- const rootKey = `${meta.type}:${r}`;
352
- if (!delegatesByTypeAndRoot.has(rootKey)) {
353
- delegatesByTypeAndRoot.set(rootKey, []);
354
- }
355
- delegatesByTypeAndRoot.get(rootKey).push(meta);
356
- });
357
- delegatesByTypeAndRoot.forEach((metaList, typeRootKey) => {
358
- const [type, rStr] = typeRootKey.split(":");
359
- const r = rStr === "auto" ? "auto" : rStr;
360
- const opts = { capture: metaList[0].options.capture, once: metaList[0].options.once, passive: metaList[0].options.passive };
361
- const bindRoots = [];
362
- if (r === "auto") bindRoots.push(this.shadowRoot || this);
363
- else if (r === "light") bindRoots.push(this);
364
- else if (r === "shadow" && this.shadowRoot) bindRoots.push(this.shadowRoot);
365
- else if (r === "all") {
366
- bindRoots.push(this);
367
- if (this.shadowRoot) bindRoots.push(this.shadowRoot);
368
- }
369
- bindRoots.forEach((br) => {
370
- const sortedMetaList = [...metaList].sort((a, b) => {
371
- const aStop = a.options.stopPropagation ? 1 : 0;
372
- const bStop = b.options.stopPropagation ? 1 : 0;
373
- return bStop - aStop;
374
- });
375
- const unifiedHandler = async (event) => {
376
- for (const meta of sortedMetaList) {
377
- const { selector, options } = meta;
378
- const matchedEl = event.target?.closest(selector);
379
- if (matchedEl && br.contains(matchedEl)) {
380
- if (options.filter) {
381
- const helper = import_Utils.SwcUtils.getHelperAndHostSet(currentWin, matchedEl);
382
- if (!options.filter(event, helper)) {
383
- continue;
384
- }
385
- }
386
- if (options.stopPropagation) event.stopPropagation();
387
- if (options.stopImmediatePropagation) event.stopImmediatePropagation();
388
- if (options.preventDefault) event.preventDefault();
389
- const currentHostSet = import_Utils.SwcUtils.getHostSet(this);
390
- const args = { event, ...currentHostSet, $el: matchedEl, $root: br };
391
- await this[meta.propertyKey](event, { ...currentHostSet, $matchedElement: matchedEl }, args);
392
- if (event.cancelBubble) break;
393
- }
394
- }
395
- };
396
- br.addEventListener(type, unifiedHandler, opts);
397
- this._boundListeners.push({ target: br, type, handler: unifiedHandler, options: opts });
398
- });
399
- });
400
- nonDelegateListeners.forEach((meta) => {
401
- const { selector, type, options } = meta;
402
- const opts = { capture: options.capture, once: options.once, passive: options.passive };
403
- const bindTargets = [];
404
- const r = options.root || "auto";
405
- let resolvedSelector = null;
406
- if (typeof selector === "function") {
407
- const hostSet = import_Utils.SwcUtils.getHelperAndHostSet(currentWin, this);
408
- const result = selector(this, hostSet);
409
- if (typeof result === "string") {
410
- resolvedSelector = result;
411
- } else if (result instanceof currentWin.Element) {
412
- bindTargets.push(result);
413
- } else if (result instanceof currentWin.NodeList) {
414
- bindTargets.push(...Array.from(result));
415
- } else if (Array.isArray(result)) {
416
- bindTargets.push(...result);
417
- }
418
- } else {
419
- resolvedSelector = selector;
420
- }
421
- const applyRootOption = (target) => {
422
- if (!target) return;
423
- if (r === "auto") {
424
- bindTargets.push(target.shadowRoot || target);
425
- } else {
426
- if (r === "light" || r === "all") bindTargets.push(target);
427
- if ((r === "shadow" || r === "all") && target.shadowRoot) bindTargets.push(target.shadowRoot);
428
- }
429
- };
430
- if (resolvedSelector) {
431
- if (resolvedSelector === "$window") bindTargets.push(currentWin);
432
- else if (resolvedSelector === "$document") bindTargets.push(currentWin.document);
433
- else if (resolvedSelector === "$host") applyRootOption(helperHostSet.$host);
434
- else if (resolvedSelector === "$parentHost") applyRootOption(helperHostSet.$parentHost);
435
- else if (resolvedSelector === "$appHost") applyRootOption(helperHostSet.$appHost);
436
- else if (resolvedSelector === "$firstHost") applyRootOption(helperHostSet.$firstHost);
437
- else if (resolvedSelector === "$lastHost") applyRootOption(helperHostSet.$lastHost);
438
- else if (resolvedSelector === "$firstAppHost") applyRootOption(helperHostSet.$firstAppHost);
439
- else if (resolvedSelector === "$lastAppHost") applyRootOption(helperHostSet.$lastAppHost);
440
- else if (resolvedSelector === "$hosts") helperHostSet.$hosts.forEach(applyRootOption);
441
- else if (resolvedSelector === "$appHosts") helperHostSet.$appHosts.forEach(applyRootOption);
442
- else if (resolvedSelector === "$this" || !resolvedSelector) applyRootOption(this);
443
- else {
444
- const searchRoots = [];
445
- if (r === "auto") searchRoots.push(this.shadowRoot || this);
446
- else if (r === "light") searchRoots.push(this);
447
- else if (r === "shadow" && this.shadowRoot) searchRoots.push(this.shadowRoot);
448
- else if (r === "all") {
449
- searchRoots.push(this);
450
- if (this.shadowRoot) searchRoots.push(this.shadowRoot);
451
- }
452
- searchRoots.forEach((sr) => {
453
- sr.querySelectorAll(resolvedSelector).forEach((el) => bindTargets.push(el));
454
- });
455
- }
456
- }
457
- bindTargets.forEach((t) => {
458
- const handler = async (event) => {
459
- if (options.filter) {
460
- const helper = import_Utils.SwcUtils.getHelperAndHostSet(currentWin, t);
461
- if (!options.filter(event, { currentThis: this, helper })) {
462
- return;
463
- }
464
- }
465
- if (options.stopPropagation) event.stopPropagation();
466
- if (options.stopImmediatePropagation) event.stopImmediatePropagation();
467
- if (options.preventDefault) event.preventDefault();
468
- const currentHostSet = import_Utils.SwcUtils.getHostSet(this);
469
- const args = { event, ...currentHostSet, $el: t, $root: t };
470
- await this[meta.propertyKey](event, { currentHostSet, $matchedElement: event.currentTarget }, args);
471
- };
472
- const eventSubject = new import_core.Subject();
473
- let eventStream = eventSubject;
474
- if (options.debounceTime !== void 0 && options.debounceTime > 0) {
475
- eventStream = eventStream.pipe((0, import_operators.debounceTime)(options.debounceTime));
476
- }
477
- if (options.throttleTime !== void 0 && options.throttleTime > 0) {
478
- eventStream = eventStream.pipe((0, import_operators.throttleTime)(options.throttleTime));
479
- }
480
- if (options.distinctUntilChanged !== void 0 && options.distinctUntilChanged !== false) {
481
- if (typeof options.distinctUntilChanged === "function") {
482
- eventStream = eventStream.pipe((0, import_operators.distinctUntilChanged)(options.distinctUntilChanged));
483
- } else {
484
- eventStream = eventStream.pipe((0, import_operators.distinctUntilChanged)());
485
- }
486
- }
487
- const subscription = eventStream.subscribe({
488
- next: (event) => {
489
- handler(event).catch((err) => console.error("Event handler error:", err));
490
- },
491
- error: (err) => console.error("Event stream error:", err)
492
- });
493
- const wrappedHandler = (event) => {
494
- eventSubject.next(event);
495
- };
496
- t.addEventListener(type, wrappedHandler, opts);
497
- this._boundListeners.push({ target: t, type, handler: wrappedHandler, options: opts, subscription });
498
- });
499
- });
547
+ await buildObservers(import_Utils.SwcUtils.getHelperAndHostSet(win, this));
500
548
  if (originalConnected) await originalConnected.apply(this);
501
- const aMethods = (0, import_lifecycles.findAllOnConnectedAfterMetadata)(this);
502
- for (const m of aMethods) await this._invokeLifecycleMethod(m.propertyKey, helperHostSet);
549
+ for (const m of (0, import_lifecycles.findAllOnConnectedAfterMetadata)(this)) await this._invokeLifecycleMethod(m.propertyKey, helperHostSet);
503
550
  this._executeSwcScript("swc-on-connected", helperHostSet);
504
551
  this._executeSwcScript("swc-on-after-connected", helperHostSet);
505
552
  this.__swc_connected = true;
506
- for (let [name2, metaList] of Array.from(attrChangeMap)) {
507
- for (const meta of metaList) {
508
- if (meta.options.while === "connected") {
509
- const val = (0, import_applyAttribute.getAttributeValue)(this, name2, { type: meta.options.type });
510
- if (val !== null) {
511
- await this[meta.propertyKey](val, null, name2, helperHostSet);
512
- }
513
- }
514
- }
515
- }
516
553
  } finally {
517
- for (let m of (0, import_lifecycles.findAllLifecycleMetadata)(this, import_lifecycles.ON_CONNECTED_COMPLETED_METADATA_KEY)) {
518
- await this._invokeLifecycleMethod(m.propertyKey, helperHostSet);
519
- }
554
+ for (const m of (0, import_lifecycles.findAllLifecycleMetadata)(this, import_lifecycles.ON_CONNECTED_COMPLETED_METADATA_KEY)) await this._invokeLifecycleMethod(m.propertyKey, helperHostSet);
520
555
  if (appHost && typeof appHost._connectedDone === "function") {
521
556
  await appHost._connectedDone(this);
522
557
  }
@@ -524,26 +559,24 @@ const elementDefine = (name, config = {}) => (constructor) => {
524
559
  };
525
560
  const originalDisconnected = proto.disconnectedCallback;
526
561
  proto.disconnectedCallback = function() {
527
- const appHost = helperHostSet.$appHost;
562
+ const appHost = helperHostSet?.$appHost;
528
563
  if (appHost && typeof appHost._disconnected === "function") {
529
564
  appHost._disconnected(this);
530
565
  }
531
566
  this._executeSwcScript("swc-on-before-disconnected", helperHostSet);
532
- const bMethods = (0, import_lifecycles.findAllLifecycleMetadata)(this, import_lifecycles.ON_BEFORE_DISCONNECTED_METADATA_KEY);
533
- for (const m of bMethods) this._invokeLifecycleMethod(m.propertyKey, helperHostSet);
534
- if (this._boundListeners) {
535
- this._boundListeners.forEach((l) => {
536
- l.target.removeEventListener(l.type, l.handler, l.options);
537
- if (l.subscription && typeof l.subscription.unsubscribe === "function") {
538
- l.subscription.unsubscribe();
539
- }
540
- });
541
- this._boundListeners = [];
567
+ for (const m of (0, import_lifecycles.findAllLifecycleMetadata)(this, import_lifecycles.ON_BEFORE_DISCONNECTED_METADATA_KEY)) this._invokeLifecycleMethod(m.propertyKey, helperHostSet);
568
+ for (const c of cyclers) c.onDisconnected?.(helperHostSet);
569
+ for (const o of this.__swc_observers ?? []) {
570
+ try {
571
+ o?.disconnect?.();
572
+ } catch (e) {
573
+ console.error("[SWC] observer disconnect error:", e);
574
+ }
542
575
  }
576
+ this.__swc_observers = [];
543
577
  new import_core_web.ElementApply(this, { id: this._swcId }).removeAllEventListener();
544
578
  if (originalDisconnected) originalDisconnected.apply(this);
545
- const aMethods = (0, import_lifecycles.findAllLifecycleMetadata)(this, import_lifecycles.ON_AFTER_DISCONNECTED_METADATA_KEY);
546
- for (const m of aMethods) this._invokeLifecycleMethod(m.propertyKey, helperHostSet);
579
+ for (const m of (0, import_lifecycles.findAllLifecycleMetadata)(this, import_lifecycles.ON_AFTER_DISCONNECTED_METADATA_KEY)) this._invokeLifecycleMethod(m.propertyKey, helperHostSet);
547
580
  this._executeSwcScript("swc-on-disconnected", helperHostSet);
548
581
  this._executeSwcScript("swc-on-after-disconnected", helperHostSet);
549
582
  this.__swc_connected = false;
@@ -552,35 +585,34 @@ const elementDefine = (name, config = {}) => (constructor) => {
552
585
  proto.adoptedCallback = function() {
553
586
  const hostSet = import_Utils.SwcUtils.getHostSet(this);
554
587
  this._executeSwcScript("swc-on-before-adopted", hostSet);
555
- const bMethods = (0, import_lifecycles.findAllLifecycleMetadata)(this, import_lifecycles.ON_BEFORE_ADOPTED_METADATA_KEY);
556
- for (const m of bMethods) this._invokeLifecycleMethod(m.propertyKey, hostSet);
588
+ for (const m of (0, import_lifecycles.findAllLifecycleMetadata)(this, import_lifecycles.ON_BEFORE_ADOPTED_METADATA_KEY)) this._invokeLifecycleMethod(m.propertyKey, hostSet);
589
+ for (const c of cyclers) c.onAdopted?.(helperHostSet);
557
590
  if (originalAdopted) originalAdopted.apply(this);
558
- const aMethods = (0, import_lifecycles.findAllLifecycleMetadata)(this, import_lifecycles.ON_AFTER_ADOPTED_METADATA_KEY);
559
- for (const m of aMethods) this._invokeLifecycleMethod(m.propertyKey, hostSet);
591
+ for (const m of (0, import_lifecycles.findAllLifecycleMetadata)(this, import_lifecycles.ON_AFTER_ADOPTED_METADATA_KEY)) this._invokeLifecycleMethod(m.propertyKey, hostSet);
560
592
  this._executeSwcScript("swc-on-adopted", hostSet);
561
593
  this._executeSwcScript("swc-on-after-adopted", hostSet);
562
594
  };
563
595
  const originalAttributeChanged = proto.attributeChangedCallback;
564
596
  proto.attributeChangedCallback = function(name2, old, newVal) {
565
597
  if (originalAttributeChanged) originalAttributeChanged.apply(this, [name2, old, newVal]);
566
- const hSet = import_Utils.SwcUtils.getHostSet(this);
598
+ const helperAndHostSet = import_Utils.SwcUtils.getHelperAndHostSet(win, this);
567
599
  let processedVal = newVal;
568
600
  if (newVal !== null) {
569
601
  const ae = new import_core.ActionExpression(newVal);
570
602
  const expr = ae.getFirstExpression("callReturn");
571
603
  if (expr) {
572
604
  const win2 = this._resolveWindow?.() || (typeof window !== "undefined" ? window : void 0);
573
- const helperAndHostSet = import_Utils.SwcUtils.getHelperAndHostSet(win2, this);
605
+ const exprHelperAndHostSet = import_Utils.SwcUtils.getHelperAndHostSet(win2, this);
574
606
  const script = import_core_web.ConvertUtils.decodeHtmlEntity(expr.script, win2.document);
575
607
  try {
576
608
  const result = import_core.FunctionUtils.executeReturn({
577
609
  script,
578
610
  context: this,
579
- args: helperAndHostSet
611
+ args: exprHelperAndHostSet
580
612
  });
581
613
  processedVal = result;
582
614
  } catch (e) {
583
- console.error(`[SWC] Failed to execute directive {{= ${expr.script} }} on attribute ${name2}: ${helperAndHostSet}`, e);
615
+ console.error(`[SWC] Failed to execute directive {{= ${expr.script} }} on attribute ${name2}: ${exprHelperAndHostSet}`, e);
584
616
  processedVal = newVal;
585
617
  }
586
618
  }
@@ -591,20 +623,7 @@ const elementDefine = (name, config = {}) => (constructor) => {
591
623
  this._bindAttributeEvent(this, name2, newVal, eventName);
592
624
  }
593
625
  }
594
- const hostCustomEventMeta = emitHostCustomEventList.find((it) => it.options.attributeName === name2);
595
- if (hostCustomEventMeta && newVal !== null) {
596
- this._bindAttributeEvent(this, name2, newVal, hostCustomEventMeta.type);
597
- }
598
- const metaList = attrChangeMap.get(name2);
599
- if (metaList && Array.isArray(metaList)) {
600
- for (const meta of metaList) {
601
- if (meta.options.while === "connected" && !this.__swc_connected) {
602
- continue;
603
- }
604
- const convertedVal = (0, import_changedAttribute.convertAttributeValue)(processedVal, meta.options.type);
605
- this[meta.propertyKey](convertedVal, old, name2, hSet);
606
- }
607
- }
626
+ for (const c of cyclers) c.onAttributeChanged?.(helperAndHostSet, name2, old, processedVal);
608
627
  };
609
628
  Object.defineProperty(constructor, "observedAttributes", {
610
629
  get: () => mergedObservedAttributes,