@dooboostore/simple-web-component 1.0.19 → 1.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2759 -201
- package/dist/cjs/decorators/addEventListener.js +8 -4
- package/dist/cjs/decorators/addEventListener.js.map +2 -2
- package/dist/cjs/decorators/{appendChild.js → applyNode.js} +26 -18
- package/dist/cjs/decorators/applyNode.js.map +7 -0
- package/dist/cjs/decorators/attribute.js +162 -0
- package/dist/cjs/decorators/attribute.js.map +7 -0
- package/dist/cjs/decorators/{changedAttribute.js → changedAttributeHost.js} +11 -11
- package/dist/cjs/decorators/changedAttributeHost.js.map +7 -0
- package/dist/cjs/decorators/classList.js +15 -5
- package/dist/cjs/decorators/classList.js.map +2 -2
- package/dist/cjs/decorators/elementDefine.js +124 -46
- package/dist/cjs/decorators/elementDefine.js.map +3 -3
- package/dist/cjs/decorators/emitCustomEvent.js +8 -7
- package/dist/cjs/decorators/emitCustomEvent.js.map +2 -2
- package/dist/cjs/decorators/index.js +3 -3
- package/dist/cjs/decorators/index.js.map +2 -2
- package/dist/cjs/decorators/lifecycles.js +8 -4
- package/dist/cjs/decorators/lifecycles.js.map +2 -2
- package/dist/cjs/decorators/onConnectedInnerHtml.js +4 -4
- package/dist/cjs/decorators/onConnectedInnerHtml.js.map +2 -2
- package/dist/cjs/decorators/query.js +9 -5
- package/dist/cjs/decorators/query.js.map +2 -2
- package/dist/cjs/decorators/queryAll.js +9 -5
- package/dist/cjs/decorators/queryAll.js.map +2 -2
- package/dist/cjs/decorators/setAttribute.js +51 -21
- package/dist/cjs/decorators/setAttribute.js.map +2 -2
- package/dist/cjs/decorators/style.js +4 -4
- package/dist/cjs/decorators/style.js.map +2 -2
- package/dist/cjs/elements/SwcAppEngine.js +8 -8
- package/dist/cjs/elements/SwcAppEngine.js.map +3 -3
- package/dist/cjs/elements/SwcAppMixin.js +28 -1
- package/dist/cjs/elements/SwcAppMixin.js.map +2 -2
- package/dist/cjs/elements/SwcAsync.js +6 -6
- package/dist/cjs/elements/SwcAsync.js.map +2 -2
- package/dist/cjs/elements/SwcChoose.js +6 -6
- package/dist/cjs/elements/SwcChoose.js.map +2 -2
- package/dist/cjs/elements/SwcIf.js +6 -6
- package/dist/cjs/elements/SwcIf.js.map +2 -2
- package/dist/cjs/elements/SwcLoop.js +6 -6
- package/dist/cjs/elements/SwcLoop.js.map +2 -2
- package/dist/cjs/elements/register.js +19 -18
- package/dist/cjs/elements/register.js.map +2 -2
- package/dist/cjs/index.js +6 -17
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/router/ElementRouter.js +7 -7
- package/dist/cjs/router/ElementRouter.js.map +2 -2
- package/dist/cjs/types.js.map +2 -2
- package/dist/esm/decorators/addEventListener.js +5 -1
- package/dist/esm/decorators/addEventListener.js.map +2 -2
- package/dist/esm/decorators/{appendChild.js → applyNode.js} +23 -15
- package/dist/esm/decorators/applyNode.js.map +7 -0
- package/dist/esm/decorators/attribute.js +143 -0
- package/dist/esm/decorators/attribute.js.map +7 -0
- package/dist/esm/decorators/{changedAttribute.js → changedAttributeHost.js} +4 -4
- package/dist/esm/decorators/changedAttributeHost.js.map +7 -0
- package/dist/esm/decorators/classList.js +12 -2
- package/dist/esm/decorators/classList.js.map +2 -2
- package/dist/esm/decorators/elementDefine.js +119 -41
- package/dist/esm/decorators/elementDefine.js.map +2 -2
- package/dist/esm/decorators/emitCustomEvent.js +5 -4
- package/dist/esm/decorators/emitCustomEvent.js.map +2 -2
- package/dist/esm/decorators/index.js +3 -3
- package/dist/esm/decorators/index.js.map +1 -1
- package/dist/esm/decorators/lifecycles.js +5 -1
- package/dist/esm/decorators/lifecycles.js.map +2 -2
- package/dist/esm/decorators/onConnectedInnerHtml.js +1 -1
- package/dist/esm/decorators/onConnectedInnerHtml.js.map +1 -1
- package/dist/esm/decorators/query.js +6 -2
- package/dist/esm/decorators/query.js.map +2 -2
- package/dist/esm/decorators/queryAll.js +6 -2
- package/dist/esm/decorators/queryAll.js.map +2 -2
- package/dist/esm/decorators/setAttribute.js +47 -17
- package/dist/esm/decorators/setAttribute.js.map +2 -2
- package/dist/esm/decorators/style.js +1 -1
- package/dist/esm/decorators/style.js.map +1 -1
- package/dist/esm/elements/SwcAppEngine.js +4 -4
- package/dist/esm/elements/SwcAppEngine.js.map +2 -2
- package/dist/esm/elements/SwcAppMixin.js +28 -1
- package/dist/esm/elements/SwcAppMixin.js.map +2 -2
- package/dist/esm/elements/SwcAsync.js +3 -3
- package/dist/esm/elements/SwcAsync.js.map +2 -2
- package/dist/esm/elements/SwcChoose.js +3 -3
- package/dist/esm/elements/SwcChoose.js.map +2 -2
- package/dist/esm/elements/SwcIf.js +3 -3
- package/dist/esm/elements/SwcIf.js.map +2 -2
- package/dist/esm/elements/SwcLoop.js +3 -3
- package/dist/esm/elements/SwcLoop.js.map +2 -2
- package/dist/esm/elements/register.js +7 -6
- package/dist/esm/elements/register.js.map +2 -2
- package/dist/esm/index.js +6 -17
- package/dist/esm/index.js.map +2 -2
- package/dist/esm/router/ElementRouter.js +2 -2
- package/dist/esm/router/ElementRouter.js.map +1 -1
- package/dist/esm/types.js.map +2 -2
- package/dist/esm-bundle/dooboostore-simple-web-component.esm.js +5444 -3317
- package/dist/esm-bundle/dooboostore-simple-web-component.esm.js.map +4 -4
- package/dist/types/decorators/addEventListener.d.ts +6 -0
- package/dist/types/decorators/addEventListener.d.ts.map +1 -1
- package/dist/types/decorators/applyNode.d.ts +38 -0
- package/dist/types/decorators/applyNode.d.ts.map +1 -0
- package/dist/types/decorators/attribute.d.ts +29 -0
- package/dist/types/decorators/attribute.d.ts.map +1 -0
- package/dist/types/decorators/{changedAttribute.d.ts → changedAttributeHost.d.ts} +6 -2
- package/dist/types/decorators/changedAttributeHost.d.ts.map +1 -0
- package/dist/types/decorators/classList.d.ts +25 -0
- package/dist/types/decorators/classList.d.ts.map +1 -1
- package/dist/types/decorators/elementDefine.d.ts.map +1 -1
- package/dist/types/decorators/emitCustomEvent.d.ts +14 -2
- package/dist/types/decorators/emitCustomEvent.d.ts.map +1 -1
- package/dist/types/decorators/index.d.ts +3 -3
- package/dist/types/decorators/index.d.ts.map +1 -1
- package/dist/types/decorators/lifecycles.d.ts +2 -0
- package/dist/types/decorators/lifecycles.d.ts.map +1 -1
- package/dist/types/decorators/query.d.ts +6 -0
- package/dist/types/decorators/query.d.ts.map +1 -1
- package/dist/types/decorators/queryAll.d.ts +6 -0
- package/dist/types/decorators/queryAll.d.ts.map +1 -1
- package/dist/types/decorators/setAttribute.d.ts +8 -0
- package/dist/types/decorators/setAttribute.d.ts.map +1 -1
- package/dist/types/elements/SwcAppEngine.d.ts +5 -4
- package/dist/types/elements/SwcAppEngine.d.ts.map +1 -1
- package/dist/types/elements/SwcAppMixin.d.ts +1 -1
- package/dist/types/elements/SwcAppMixin.d.ts.map +1 -1
- package/dist/types/elements/register.d.ts +1 -1
- package/dist/types/elements/register.d.ts.map +1 -1
- package/dist/types/index.d.ts +3 -14
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/router/ElementRouter.d.ts +1 -1
- package/dist/types/router/ElementRouter.d.ts.map +1 -1
- package/dist/types/types.d.ts +3 -1
- package/dist/types/types.d.ts.map +1 -1
- package/dist/umd-bundle/dooboostore-simple-web-component.umd.js +5444 -3317
- package/dist/umd-bundle/dooboostore-simple-web-component.umd.js.map +4 -4
- package/package.json +10 -5
- package/src/decorators/addEventListener.ts +10 -1
- package/src/decorators/applyNode.ts +127 -0
- package/src/decorators/attribute.ts +192 -0
- package/src/decorators/{changedAttribute.ts → changedAttributeHost.ts} +6 -2
- package/src/decorators/classList.ts +33 -1
- package/src/decorators/elementDefine.ts +148 -47
- package/src/decorators/emitCustomEvent.ts +14 -6
- package/src/decorators/index.ts +3 -3
- package/src/decorators/lifecycles.ts +4 -2
- package/src/decorators/onConnectedInnerHtml.ts +1 -1
- package/src/decorators/query.ts +10 -1
- package/src/decorators/queryAll.ts +10 -1
- package/src/decorators/setAttribute.ts +57 -17
- package/src/decorators/style.ts +1 -1
- package/src/elements/SwcAppEngine.ts +10 -8
- package/src/elements/SwcAppMixin.ts +34 -2
- package/src/elements/SwcAsync.ts +3 -3
- package/src/elements/SwcChoose.ts +3 -3
- package/src/elements/SwcIf.ts +3 -3
- package/src/elements/SwcLoop.ts +3 -3
- package/src/elements/register.ts +8 -6
- package/src/index.ts +8 -16
- package/src/router/ElementRouter.ts +2 -2
- package/src/types.ts +3 -1
- package/dist/cjs/decorators/appendChild.js.map +0 -7
- package/dist/cjs/decorators/changedAttribute.js.map +0 -7
- package/dist/cjs/decorators/replaceChildren.js +0 -79
- package/dist/cjs/decorators/replaceChildren.js.map +0 -7
- package/dist/esm/decorators/appendChild.js.map +0 -7
- package/dist/esm/decorators/changedAttribute.js.map +0 -7
- package/dist/esm/decorators/replaceChildren.js +0 -60
- package/dist/esm/decorators/replaceChildren.js.map +0 -7
- package/dist/types/decorators/appendChild.d.ts +0 -17
- package/dist/types/decorators/appendChild.d.ts.map +0 -1
- package/dist/types/decorators/changedAttribute.d.ts.map +0 -1
- package/dist/types/decorators/replaceChildren.d.ts +0 -9
- package/dist/types/decorators/replaceChildren.d.ts.map +0 -1
- package/src/decorators/appendChild.ts +0 -86
- package/src/decorators/replaceChildren.ts +0 -64
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { ReflectUtils } from "@dooboostore/core";
|
|
2
|
+
import { getElementConfig } from "./elementDefine.js";
|
|
3
|
+
import { SwcUtils } from "../utils/Utils.js";
|
|
4
|
+
const ATTRIBUTE_METADATA_KEY = Symbol("simple-web-component:attribute");
|
|
5
|
+
const convertValue = (val, type) => {
|
|
6
|
+
if (val === null || val === void 0) return val;
|
|
7
|
+
if (type === Number) return Number(val);
|
|
8
|
+
if (type === Boolean) return val === "false" || val === "0" ? false : true;
|
|
9
|
+
return val;
|
|
10
|
+
};
|
|
11
|
+
const resolveTargetEls = (inst, selector, options, currentWin) => {
|
|
12
|
+
const r = options.root || "auto";
|
|
13
|
+
const results = [];
|
|
14
|
+
const applyRoot = (target) => {
|
|
15
|
+
if (!target) return;
|
|
16
|
+
if (r === "auto") {
|
|
17
|
+
results.push(target);
|
|
18
|
+
} else {
|
|
19
|
+
if (r === "light" || r === "all") results.push(target);
|
|
20
|
+
if ((r === "shadow" || r === "all") && target.shadowRoot) results.push(target.shadowRoot);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
if (selector === ":host" || !selector) {
|
|
24
|
+
applyRoot(inst);
|
|
25
|
+
} else if (selector === ":window") {
|
|
26
|
+
results.push(currentWin);
|
|
27
|
+
} else if (selector === ":document") {
|
|
28
|
+
results.push(currentWin.document);
|
|
29
|
+
} else {
|
|
30
|
+
const hostSet = SwcUtils.getHostSet(inst);
|
|
31
|
+
if (selector === ":parentHost") applyRoot(hostSet.$parentHost);
|
|
32
|
+
else if (selector === ":appHost") applyRoot(hostSet.$appHost);
|
|
33
|
+
else if (selector === ":firstHost") applyRoot(hostSet.$firstHost);
|
|
34
|
+
else if (selector === ":lastHost") applyRoot(hostSet.$lastHost);
|
|
35
|
+
else if (selector === ":firstAppHost") applyRoot(hostSet.$firstAppHost);
|
|
36
|
+
else if (selector === ":lastAppHost") applyRoot(hostSet.$lastAppHost);
|
|
37
|
+
else {
|
|
38
|
+
if (r === "shadow") {
|
|
39
|
+
const found = inst.shadowRoot?.querySelectorAll(selector);
|
|
40
|
+
if (found) results.push(...found);
|
|
41
|
+
} else if (r === "light") {
|
|
42
|
+
const found = inst.querySelectorAll(selector);
|
|
43
|
+
if (found) results.push(...found);
|
|
44
|
+
} else if (r === "all") {
|
|
45
|
+
const sMatch = inst.shadowRoot?.querySelectorAll(selector);
|
|
46
|
+
const lMatch = inst.querySelectorAll(selector);
|
|
47
|
+
if (sMatch) results.push(...sMatch);
|
|
48
|
+
if (lMatch) results.push(...lMatch);
|
|
49
|
+
} else {
|
|
50
|
+
const found = (inst.shadowRoot || inst).querySelectorAll(selector);
|
|
51
|
+
if (found) results.push(...found);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return results;
|
|
56
|
+
};
|
|
57
|
+
function attribute(selector, options = {}) {
|
|
58
|
+
return (target, propertyKey) => {
|
|
59
|
+
const constructor = target.constructor;
|
|
60
|
+
const privateKey = Symbol(String(propertyKey));
|
|
61
|
+
const designType = Reflect.getMetadata("design:type", target, propertyKey);
|
|
62
|
+
let metaList = ReflectUtils.getOwnMetadata(ATTRIBUTE_METADATA_KEY, constructor);
|
|
63
|
+
if (!metaList) {
|
|
64
|
+
metaList = [];
|
|
65
|
+
ReflectUtils.defineMetadata(ATTRIBUTE_METADATA_KEY, metaList, constructor);
|
|
66
|
+
}
|
|
67
|
+
metaList.push({ propertyKey, selector, options, privateKey });
|
|
68
|
+
const applySetAttribute = (inst, targets, attrName, nv) => {
|
|
69
|
+
targets.forEach((it) => {
|
|
70
|
+
console.log("----->", it);
|
|
71
|
+
if (it && typeof it.setAttribute === "function") {
|
|
72
|
+
if (nv === null) {
|
|
73
|
+
it.removeAttribute(attrName);
|
|
74
|
+
} else {
|
|
75
|
+
it.setAttribute(attrName, String(nv));
|
|
76
|
+
}
|
|
77
|
+
} else {
|
|
78
|
+
inst[privateKey] = nv;
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
};
|
|
82
|
+
Object.defineProperty(target, propertyKey, {
|
|
83
|
+
get() {
|
|
84
|
+
const attrName = options.name || String(propertyKey);
|
|
85
|
+
const conf = getElementConfig(this);
|
|
86
|
+
const currentWin = this._resolveWindow?.(conf) || (typeof window !== "undefined" ? window : void 0);
|
|
87
|
+
const targetType = options.type || designType;
|
|
88
|
+
console.log("type-->", propertyKey, targetType);
|
|
89
|
+
if (this.__swc_syncing_init || options.connectedInitialize && !this.__swc_connected) {
|
|
90
|
+
return convertValue(this[privateKey], targetType);
|
|
91
|
+
}
|
|
92
|
+
const targets = resolveTargetEls(this, selector, options, currentWin);
|
|
93
|
+
const primaryTarget = targets[0];
|
|
94
|
+
if (primaryTarget && typeof primaryTarget.hasAttribute === "function") {
|
|
95
|
+
if (primaryTarget.hasAttribute(attrName)) {
|
|
96
|
+
const domVal = primaryTarget.getAttribute(attrName);
|
|
97
|
+
return convertValue(domVal, targetType);
|
|
98
|
+
}
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
return convertValue(this[privateKey], targetType);
|
|
102
|
+
},
|
|
103
|
+
set(nv) {
|
|
104
|
+
const targetType = options.type || designType;
|
|
105
|
+
console.log("---set", propertyKey, targetType, nv, this, this.__swc_syncing_init);
|
|
106
|
+
const attrName = options.name || String(propertyKey);
|
|
107
|
+
const conf = getElementConfig(this);
|
|
108
|
+
const currentWin = this._resolveWindow?.(conf) || (typeof window !== "undefined" ? window : void 0);
|
|
109
|
+
if (this.__swc_syncing_init) {
|
|
110
|
+
if (options.connectedInitialize === true) {
|
|
111
|
+
const targets2 = resolveTargetEls(this, selector, options, currentWin);
|
|
112
|
+
applySetAttribute(this, targets2, attrName, nv);
|
|
113
|
+
} else {
|
|
114
|
+
this[privateKey] = nv;
|
|
115
|
+
}
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
if (!this.__swc_connected) {
|
|
119
|
+
this[privateKey] = nv;
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const targets = resolveTargetEls(this, selector, options, currentWin);
|
|
123
|
+
applySetAttribute(this, targets, attrName, nv);
|
|
124
|
+
},
|
|
125
|
+
enumerable: true,
|
|
126
|
+
configurable: true
|
|
127
|
+
});
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
const findAllAttributeMetadata = (target) => {
|
|
131
|
+
return ReflectUtils.findAllMetadata(ATTRIBUTE_METADATA_KEY, target).flat();
|
|
132
|
+
};
|
|
133
|
+
function attributeHost(attrName, options = {}) {
|
|
134
|
+
return attribute(":host", { ...options, name: attrName });
|
|
135
|
+
}
|
|
136
|
+
export {
|
|
137
|
+
ATTRIBUTE_METADATA_KEY,
|
|
138
|
+
attribute,
|
|
139
|
+
attributeHost,
|
|
140
|
+
findAllAttributeMetadata,
|
|
141
|
+
resolveTargetEls
|
|
142
|
+
};
|
|
143
|
+
//# sourceMappingURL=attribute.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/decorators/attribute.ts"],
|
|
4
|
+
"sourcesContent": ["import { ReflectUtils } from '@dooboostore/core';\nimport { ensureInit, getElementConfig } from './elementDefine';\nimport { SwcUtils } from '../utils/Utils';\nimport { SpecialSelector, SwcQueryOptions } from '../types';\n\nexport interface AttributeOptions extends SwcQueryOptions {\n name?: string;\n connectedInitialize?: boolean;\n type?: typeof Number | typeof Boolean | typeof String;\n}\n\nexport interface AttributeMetadata {\n propertyKey: string | symbol;\n selector: string;\n options: AttributeOptions;\n privateKey: symbol; // Added to bypass getter during initialization\n}\n\nexport const ATTRIBUTE_METADATA_KEY = Symbol('simple-web-component:attribute');\n\n/**\n * Helper to perform type conversion from string to target type\n */\nconst convertValue = (val: string | null, type: any): any => {\n if (val === null || val === undefined) return val;\n if (type === Number) return Number(val);\n if (type === Boolean) return val === 'false' || val === '0' ? false : true;\n return val;\n};\n\n/**\n * Helper to resolve target elements based on selector and root options\n */\nexport const resolveTargetEls = (inst: any, selector: string, options: AttributeOptions, currentWin: any): HTMLElement[] => {\n const r = options.root || 'auto';\n const results: HTMLElement[] = [];\n\n const applyRoot = (target: any) => {\n if (!target) return;\n if (r === 'auto') {\n // Attributes belong to the ELEMENT, not the ShadowRoot.\n // So for :host and direct attribute sync, we mostly want the element itself.\n results.push(target);\n } else {\n if (r === 'light' || r === 'all') results.push(target);\n if ((r === 'shadow' || r === 'all') && target.shadowRoot) results.push(target.shadowRoot);\n }\n };\n\n if (selector === ':host' || !selector) {\n applyRoot(inst);\n } else if (selector === ':window') {\n results.push(currentWin);\n } else if (selector === ':document') {\n results.push(currentWin.document);\n } else {\n const hostSet = SwcUtils.getHostSet(inst);\n if (selector === ':parentHost') applyRoot(hostSet.$parentHost);\n else if (selector === ':appHost') applyRoot(hostSet.$appHost as any);\n else if (selector === ':firstHost') applyRoot(hostSet.$firstHost);\n else if (selector === ':lastHost') applyRoot(hostSet.$lastHost);\n else if (selector === ':firstAppHost') applyRoot(hostSet.$firstAppHost as any);\n else if (selector === ':lastAppHost') applyRoot(hostSet.$lastAppHost as any);\n else {\n if (r === 'shadow') {\n const found = inst.shadowRoot?.querySelectorAll(selector);\n if (found) results.push(...found);\n } else if (r === 'light') {\n const found = inst.querySelectorAll(selector);\n if (found) results.push(...found);\n } else if (r === 'all') {\n const sMatch = inst.shadowRoot?.querySelectorAll(selector);\n const lMatch = inst.querySelectorAll(selector);\n if (sMatch) results.push(...sMatch);\n if (lMatch) results.push(...lMatch);\n } else {\n const found = (inst.shadowRoot || inst).querySelectorAll(selector);\n if (found) results.push(...found);\n }\n }\n }\n return results;\n};\n\n/**\n * @attribute decorator to sync a field value with an element's attribute.\n */\nexport function attribute(selector: string, options: AttributeOptions = {}): PropertyDecorator {\n return (target: Object, propertyKey: string | symbol) => {\n const constructor = target.constructor;\n const privateKey = Symbol(String(propertyKey));\n\n const designType = (Reflect as any).getMetadata('design:type', target, propertyKey);\n\n let metaList = ReflectUtils.getOwnMetadata(ATTRIBUTE_METADATA_KEY, constructor) as AttributeMetadata[];\n if (!metaList) {\n metaList = [];\n ReflectUtils.defineMetadata(ATTRIBUTE_METADATA_KEY, metaList, constructor);\n }\n metaList.push({ propertyKey, selector, options, privateKey });\n\n // Helper function to apply setAttribute to targets\n const applySetAttribute = (inst: any, targets: HTMLElement[], attrName: string, nv: any) => {\n targets.forEach(it => {\n console.log('----->', it)\n if (it && typeof (it as any).setAttribute === 'function') {\n if (nv === null) {\n (it as any).removeAttribute(attrName);\n } else {\n (it as any).setAttribute(attrName, String(nv));\n }\n } else {\n inst[privateKey] = nv;\n }\n });\n };\n\n Object.defineProperty(target, propertyKey, {\n get(this: any) {\n const attrName = options.name || String(propertyKey);\n const conf = getElementConfig(this);\n const currentWin = this._resolveWindow?.(conf) || ((typeof window !== 'undefined' ? window : undefined) as any);\n const targetType = options.type || designType;\n\n console.log('type-->', propertyKey, targetType);\n // During early init phase, if syncing memory to DOM, return memory.\n if (this.__swc_syncing_init || (options.connectedInitialize && !this.__swc_connected)) {\n return convertValue(this[privateKey], targetType);\n }\n\n const targets = resolveTargetEls(this, selector, options, currentWin);\n const primaryTarget = targets[0];\n\n if (primaryTarget && typeof (primaryTarget as any).hasAttribute === 'function') {\n if ((primaryTarget as any).hasAttribute(attrName)) {\n const domVal = (primaryTarget as any).getAttribute(attrName);\n return convertValue(domVal, targetType);\n }\n return null;\n }\n\n return convertValue(this[privateKey], targetType);\n },\n set(this: any, nv: any) {\n const targetType = options.type || designType;\n console.log('---set', propertyKey, targetType, nv, this, this.__swc_syncing_init);\n\n const attrName = options.name || String(propertyKey);\n const conf = getElementConfig(this);\n const currentWin = this._resolveWindow?.(conf) || ((typeof window !== 'undefined' ? window : undefined) as any);\n\n // During initialization/syncing phase\n if (this.__swc_syncing_init) {\n // If connectedInitialize is enabled, force setAttribute (JS -> DOM)\n if (options.connectedInitialize === true) {\n const targets = resolveTargetEls(this, selector, options, currentWin);\n applySetAttribute(this, targets, attrName, nv);\n } else {\n // Otherwise just update memory\n this[privateKey] = nv;\n }\n return;\n }\n\n // Before connected, save to memory only\n if (!this.__swc_connected) {\n this[privateKey] = nv;\n return;\n }\n\n // After connected, normal setAttribute\n const targets = resolveTargetEls(this, selector, options, currentWin);\n applySetAttribute(this, targets, attrName, nv);\n },\n enumerable: true,\n configurable: true\n });\n };\n}\n\nexport const findAllAttributeMetadata = (target: any): AttributeMetadata[] => {\n return ReflectUtils.findAllMetadata<AttributeMetadata[]>(ATTRIBUTE_METADATA_KEY, target).flat();\n};\n\n/**\n * @hostAttribute decorator - simplified version of @attribute for :host selector\n * Usage: @hostAttribute('data-product-id')\n * Usage: @hostAttribute('disabled', { type: Boolean })\n */\nexport function attributeHost(attrName: string, options: AttributeOptions = {}): PropertyDecorator {\n return attribute(':host', { ...options, name: attrName });\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["targets"]
|
|
7
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { ReflectUtils } from "@dooboostore/core
|
|
1
|
+
import { ReflectUtils } from "@dooboostore/core";
|
|
2
2
|
const ON_ATTRIBUTE_CHANGED_METADATA_KEY = Symbol("simple-web-component:on-attribute-changed");
|
|
3
|
-
function
|
|
3
|
+
function changedAttributeHost(attributeName) {
|
|
4
4
|
return (target, propertyKey) => {
|
|
5
5
|
const constructor = target.constructor;
|
|
6
6
|
let meta = ReflectUtils.getOwnMetadata(ON_ATTRIBUTE_CHANGED_METADATA_KEY, constructor);
|
|
@@ -26,8 +26,8 @@ const findAllAttributeChangedMetadata = (target) => {
|
|
|
26
26
|
};
|
|
27
27
|
export {
|
|
28
28
|
ON_ATTRIBUTE_CHANGED_METADATA_KEY,
|
|
29
|
-
|
|
29
|
+
changedAttributeHost,
|
|
30
30
|
findAllAttributeChangedMetadata,
|
|
31
31
|
getChangedAttributeMetadata
|
|
32
32
|
};
|
|
33
|
-
//# sourceMappingURL=
|
|
33
|
+
//# sourceMappingURL=changedAttributeHost.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/decorators/changedAttributeHost.ts"],
|
|
4
|
+
"sourcesContent": ["import { ReflectUtils } from '@dooboostore/core';\n\nexport const ON_ATTRIBUTE_CHANGED_METADATA_KEY = Symbol('simple-web-component:on-attribute-changed');\n\n/**\n * @changedAttributeHost decorator - fires when any attribute on :host changes\n * Usage: @changedAttributeHost('data-product-id')\n */\nexport function changedAttributeHost(attributeName?: string): MethodDecorator {\n return (target: Object, propertyKey: string | symbol) => {\n const constructor = target.constructor;\n let meta = ReflectUtils.getOwnMetadata(ON_ATTRIBUTE_CHANGED_METADATA_KEY, constructor) as Map<string, (string | symbol)[]>;\n if (!meta) {\n meta = new Map<string, (string | symbol)[]>();\n ReflectUtils.defineMetadata(ON_ATTRIBUTE_CHANGED_METADATA_KEY, meta, constructor);\n }\n\n const name = attributeName || String(propertyKey);\n let methods = meta.get(name);\n if (!methods) {\n methods = [];\n meta.set(name, methods);\n }\n if (!methods.includes(propertyKey)) methods.push(propertyKey);\n };\n}\n\nexport const getChangedAttributeMetadata = (target: any): Map<string, (string | symbol)[]> | undefined => {\n const constructor = target instanceof Function ? target : target.constructor;\n return ReflectUtils.getMetadata(ON_ATTRIBUTE_CHANGED_METADATA_KEY, constructor);\n};\n\nexport const findAllAttributeChangedMetadata = (target: any): Map<string, (string | symbol)[]> => {\n return ReflectUtils.findAllMapMetadata<string, string | symbol>(ON_ATTRIBUTE_CHANGED_METADATA_KEY, target);\n};\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,oBAAoB;AAEtB,MAAM,oCAAoC,OAAO,2CAA2C;AAM5F,SAAS,qBAAqB,eAAyC;AAC5E,SAAO,CAAC,QAAgB,gBAAiC;AACvD,UAAM,cAAc,OAAO;AAC3B,QAAI,OAAO,aAAa,eAAe,mCAAmC,WAAW;AACrF,QAAI,CAAC,MAAM;AACT,aAAO,oBAAI,IAAiC;AAC5C,mBAAa,eAAe,mCAAmC,MAAM,WAAW;AAAA,IAClF;AAEA,UAAM,OAAO,iBAAiB,OAAO,WAAW;AAChD,QAAI,UAAU,KAAK,IAAI,IAAI;AAC3B,QAAI,CAAC,SAAS;AACZ,gBAAU,CAAC;AACX,WAAK,IAAI,MAAM,OAAO;AAAA,IACxB;AACA,QAAI,CAAC,QAAQ,SAAS,WAAW,EAAG,SAAQ,KAAK,WAAW;AAAA,EAC9D;AACF;AAEO,MAAM,8BAA8B,CAAC,WAA8D;AACxG,QAAM,cAAc,kBAAkB,WAAW,SAAS,OAAO;AACjE,SAAO,aAAa,YAAY,mCAAmC,WAAW;AAChF;AAEO,MAAM,kCAAkC,CAAC,WAAkD;AAChG,SAAO,aAAa,mBAA4C,mCAAmC,MAAM;AAC3G;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ReflectUtils } from "@dooboostore/core
|
|
1
|
+
import { ReflectUtils } from "@dooboostore/core";
|
|
2
2
|
import { ensureInit } from "./elementDefine.js";
|
|
3
3
|
import { SwcUtils } from "../utils/Utils.js";
|
|
4
4
|
const CLASS_LIST_METADATA_KEY = Symbol("simple-web-component:class-list");
|
|
@@ -63,6 +63,11 @@ const updateClassList = createClassListDecorator("update");
|
|
|
63
63
|
const addClassList = createClassListDecorator("add");
|
|
64
64
|
const removeClassList = createClassListDecorator("remove");
|
|
65
65
|
const toggleClassList = createClassListDecorator("toggle");
|
|
66
|
+
const setClassListHost = createClassListDecorator("set").bind(null, ":host");
|
|
67
|
+
const updateClassListHost = createClassListDecorator("update").bind(null, ":host");
|
|
68
|
+
const addClassListHost = createClassListDecorator("add").bind(null, ":host");
|
|
69
|
+
const removeClassListHost = createClassListDecorator("remove").bind(null, ":host");
|
|
70
|
+
const toggleClassListHost = createClassListDecorator("toggle").bind(null, ":host");
|
|
66
71
|
const findAllClassListMetadata = (target) => {
|
|
67
72
|
const result = /* @__PURE__ */ new Map();
|
|
68
73
|
const maps = ReflectUtils.findAllMetadata(CLASS_LIST_METADATA_KEY, target);
|
|
@@ -76,10 +81,15 @@ const findAllClassListMetadata = (target) => {
|
|
|
76
81
|
export {
|
|
77
82
|
CLASS_LIST_METADATA_KEY,
|
|
78
83
|
addClassList,
|
|
84
|
+
addClassListHost,
|
|
79
85
|
findAllClassListMetadata,
|
|
80
86
|
removeClassList,
|
|
87
|
+
removeClassListHost,
|
|
81
88
|
setClassList,
|
|
89
|
+
setClassListHost,
|
|
82
90
|
toggleClassList,
|
|
83
|
-
|
|
91
|
+
toggleClassListHost,
|
|
92
|
+
updateClassList,
|
|
93
|
+
updateClassListHost
|
|
84
94
|
};
|
|
85
95
|
//# sourceMappingURL=classList.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/decorators/classList.ts"],
|
|
4
|
-
"sourcesContent": ["import { ReflectUtils } from '@dooboostore/core
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import { ReflectUtils } from '@dooboostore/core';\nimport { ensureInit } from './elementDefine';\nimport { SwcUtils } from '../utils/Utils';\n\nexport const CLASS_LIST_METADATA_KEY = Symbol('simple-web-component:class-list');\n\nexport type ClassListAction = 'set' | 'update' | 'add' | 'remove' | 'toggle';\n\nexport interface ClassListMetadata {\n propertyKey: string | symbol;\n selector: string;\n action: ClassListAction;\n}\n\nfunction createClassListDecorator(action: ClassListAction) {\n return (selector: string): MethodDecorator => {\n return (target: Object, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n const constructor = target.constructor;\n let metaList = ReflectUtils.getOwnMetadata(CLASS_LIST_METADATA_KEY, constructor) as Map<string | symbol, ClassListMetadata>;\n if (!metaList) {\n metaList = new Map<string | symbol, ClassListMetadata>();\n ReflectUtils.defineMetadata(CLASS_LIST_METADATA_KEY, metaList, constructor);\n }\n metaList.set(propertyKey, { propertyKey, selector, action });\n\n const original = descriptor.value;\n descriptor.value = async function (...args: any[]) {\n ensureInit(this);\n const res = await original.apply(this, args);\n if (res !== undefined) {\n const hostSet = SwcUtils.getHostSet(this as any);\n\n let targetEl: HTMLElement | null = null;\n if (selector === ':host' || !selector) targetEl = this as any;\n else if (selector === ':parentHost') targetEl = hostSet.$parentHost;\n else if (selector === ':appHost') targetEl = hostSet.$appHost;\n else targetEl = (this.shadowRoot || (this as any)).querySelector(selector);\n\n if (targetEl) {\n if (action === 'set') {\n let classes = '';\n if (typeof res === 'object' && res !== null && !Array.isArray(res)) {\n classes = Object.entries(res)\n .filter(([_, force]) => !!force)\n .map(([cls]) => cls)\n .join(' ');\n } else {\n classes = Array.isArray(res) ? res.join(' ') : String(res);\n }\n targetEl.className = classes;\n } else if (action === 'update') {\n if (typeof res === 'object' && res !== null && !Array.isArray(res)) {\n Object.entries(res).forEach(([cls, force]) => {\n targetEl!.classList.toggle(cls, !!force);\n });\n } else if (res !== undefined && res !== null) {\n const classes = Array.isArray(res) ? res.map(String) : [String(res)];\n targetEl.classList.add(...classes);\n }\n } else if (action === 'add') {\n const classes = Array.isArray(res) ? res.map(String) : [String(res)];\n targetEl.classList.add(...classes);\n } else if (action === 'remove') {\n const classes = Array.isArray(res) ? res.map(String) : [String(res)];\n targetEl.classList.remove(...classes);\n } else if (action === 'toggle') {\n const classes = Array.isArray(res) ? res.map(String) : [String(res)];\n classes.forEach(c => targetEl!.classList.toggle(c));\n }\n }\n }\n return res;\n };\n };\n };\n}\n\n/**\n * @setClassList decorator to surgically replace all classes on a target element.\n * Returns: string | string[]\n */\nexport const setClassList = createClassListDecorator('set');\n\n/**\n * @updateClassList decorator to surgically update specific classes.\n * Returns: Record<string, boolean> (toggle with force) | string | string[] (add)\n */\nexport const updateClassList = createClassListDecorator('update');\n\n/**\n * @addClassList decorator to surgically add classes to a target element.\n * Returns: string | string[]\n */\nexport const addClassList = createClassListDecorator('add');\n\n/**\n * @removeClassList decorator to surgically remove classes from a target element.\n * Returns: string | string[]\n */\nexport const removeClassList = createClassListDecorator('remove');\n\n/**\n * @toggleClassList decorator to surgically toggle classes on a target element.\n * Returns: string | string[]\n */\nexport const toggleClassList = createClassListDecorator('toggle');\n\n// Host-specific versions (for :host selector)\n\n/**\n * @setClassListHost decorator to set classes on :host element.\n * Returns: string | string[]\n */\nexport const setClassListHost = createClassListDecorator('set').bind(null, ':host');\n\n/**\n * @updateClassListHost decorator to update specific classes on :host.\n * Returns: Record<string, boolean> (toggle with force) | string | string[] (add)\n */\nexport const updateClassListHost = createClassListDecorator('update').bind(null, ':host');\n\n/**\n * @addClassListHost decorator to add classes to :host element.\n * Returns: string | string[]\n */\nexport const addClassListHost = createClassListDecorator('add').bind(null, ':host');\n\n/**\n * @removeClassListHost decorator to remove classes from :host element.\n * Returns: string | string[]\n */\nexport const removeClassListHost = createClassListDecorator('remove').bind(null, ':host');\n\n/**\n * @toggleClassListHost decorator to toggle classes on :host element.\n * Returns: string | string[]\n */\nexport const toggleClassListHost = createClassListDecorator('toggle').bind(null, ':host');\n\nexport const findAllClassListMetadata = (target: any): Map<string | symbol, ClassListMetadata> => {\n const result = new Map<string | symbol, ClassListMetadata>();\n const maps = ReflectUtils.findAllMetadata<Map<string | symbol, ClassListMetadata>>(CLASS_LIST_METADATA_KEY, target);\n maps.forEach(map => {\n if (map instanceof Map) {\n map.forEach((v, k) => result.set(k, v));\n }\n });\n return result;\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { ReflectUtils } from "@dooboostore/core
|
|
2
|
-
import { FunctionUtils } from "@dooboostore/core
|
|
1
|
+
import { ReflectUtils } from "@dooboostore/core";
|
|
2
|
+
import { FunctionUtils } from "@dooboostore/core";
|
|
3
3
|
import { getOnConnectedInnerHtmlMetadata } from "./onConnectedInnerHtml.js";
|
|
4
4
|
import { getAddEventListenerMetadata } from "./addEventListener.js";
|
|
5
|
-
import { ON_BEFORE_CONNECTED_METADATA_KEY, ON_AFTER_CONNECTED_METADATA_KEY, ON_BEFORE_DISCONNECTED_METADATA_KEY, ON_AFTER_DISCONNECTED_METADATA_KEY, ON_BEFORE_ADOPTED_METADATA_KEY, ON_AFTER_ADOPTED_METADATA_KEY, findAllLifecycleMetadata } from "./lifecycles.js";
|
|
5
|
+
import { ON_CONSTRUCTOR_METADATA_KEY, ON_BEFORE_CONNECTED_METADATA_KEY, ON_AFTER_CONNECTED_METADATA_KEY, ON_BEFORE_DISCONNECTED_METADATA_KEY, ON_AFTER_DISCONNECTED_METADATA_KEY, ON_BEFORE_ADOPTED_METADATA_KEY, ON_AFTER_ADOPTED_METADATA_KEY, findAllLifecycleMetadata } from "./lifecycles.js";
|
|
6
6
|
import { getEmitCustomEventMetadataList } from "./emitCustomEvent.js";
|
|
7
|
-
import { findAllAttributeChangedMetadata } from "./
|
|
7
|
+
import { findAllAttributeChangedMetadata } from "./changedAttributeHost.js";
|
|
8
8
|
import { findAllSetAttributeMetadata } from "./setAttribute.js";
|
|
9
|
+
import { findAllAttributeMetadata } from "./attribute.js";
|
|
9
10
|
import { SwcUtils } from "../utils/Utils.js";
|
|
10
11
|
import { HTML_TAG_ENTRIES, DOM_EVENT_NAMES } from "../config/config.js";
|
|
11
12
|
import { SituationTypeContainer, SituationTypeContainers } from "@dooboostore/simple-boot/decorators/inject/Inject";
|
|
@@ -23,6 +24,10 @@ const ensureInit = (inst) => {
|
|
|
23
24
|
inst.__swc_initialized = true;
|
|
24
25
|
const hostSet = SwcUtils.getHostSet(inst);
|
|
25
26
|
inst._executeSwcScript?.("swc-on-constructor", hostSet);
|
|
27
|
+
const cMethods = findAllLifecycleMetadata(inst, ON_CONSTRUCTOR_METADATA_KEY);
|
|
28
|
+
if (cMethods) {
|
|
29
|
+
for (const m of cMethods) inst._invokeLifecycleMethod(m, hostSet);
|
|
30
|
+
}
|
|
26
31
|
}
|
|
27
32
|
};
|
|
28
33
|
const globalDelegatedRoots = /* @__PURE__ */ new WeakSet();
|
|
@@ -121,7 +126,9 @@ const setupPrototype = (proto) => {
|
|
|
121
126
|
const oldHandler = handlers.get(attrName);
|
|
122
127
|
if (oldHandler) el.removeEventListener(eventName, oldHandler);
|
|
123
128
|
const handler = async (event) => {
|
|
124
|
-
|
|
129
|
+
console.log("execute handler", event);
|
|
130
|
+
const parent = SwcUtils.findNearestSwcHost(el);
|
|
131
|
+
const hostSet = SwcUtils.getHostSet(parent || el);
|
|
125
132
|
const conf = getElementConfig(this);
|
|
126
133
|
const currentWin = this._resolveWindow(conf);
|
|
127
134
|
const helpers = SwcUtils.getHelperSet(currentWin);
|
|
@@ -140,13 +147,18 @@ const setupPrototype = (proto) => {
|
|
|
140
147
|
};
|
|
141
148
|
proto.__swc_executeAttributeEvent = async function(el, attrName, script, event) {
|
|
142
149
|
ensureInit(this);
|
|
143
|
-
|
|
150
|
+
console.log("execute handler2", event);
|
|
151
|
+
const parent = SwcUtils.findNearestSwcHost(el);
|
|
152
|
+
const hostSet = SwcUtils.getHostSet(parent || el);
|
|
144
153
|
const conf = getElementConfig(this);
|
|
145
154
|
const currentWin = this._resolveWindow(conf);
|
|
146
155
|
const currentHelpers = SwcUtils.getHelperSet(currentWin);
|
|
156
|
+
const detail = event.detail;
|
|
147
157
|
const args = {
|
|
148
158
|
event,
|
|
149
|
-
$
|
|
159
|
+
$event: event,
|
|
160
|
+
$data: detail,
|
|
161
|
+
$detail: detail,
|
|
150
162
|
...hostSet,
|
|
151
163
|
...currentHelpers,
|
|
152
164
|
$el: el,
|
|
@@ -173,11 +185,14 @@ const elementDefine = (name, config = {}) => (constructor) => {
|
|
|
173
185
|
metadata.extends = extendsTagName;
|
|
174
186
|
}
|
|
175
187
|
const emitCustomEventList = getEmitCustomEventMetadataList(constructor) || [];
|
|
188
|
+
const emitHostCustomEventList = emitCustomEventList.filter((meta) => meta.selector === ":host" || meta.selector === "");
|
|
176
189
|
const addEventListenerList = getAddEventListenerMetadata(constructor) || [];
|
|
190
|
+
const addHostEventListenerList = addEventListenerList.filter((meta) => meta.selector === ":host" || meta.selector === "");
|
|
177
191
|
const attrChangeMap = findAllAttributeChangedMetadata(constructor);
|
|
192
|
+
const attributeList = findAllAttributeMetadata(constructor);
|
|
178
193
|
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"];
|
|
179
194
|
const swcOnEvents = DOM_EVENT_NAMES.map((e) => `swc-on-${e}`);
|
|
180
|
-
const mergedObservedAttributes = [.../* @__PURE__ */ new Set([...metadata.observedAttributes ?? [], ...attrChangeMap.keys(), ...Array.from(findAllSetAttributeMetadata(constructor).values()).map((it) => it.name), ...
|
|
195
|
+
const mergedObservedAttributes = [.../* @__PURE__ */ new Set([...metadata.observedAttributes ?? [], ...attrChangeMap.keys(), ...Array.from(findAllSetAttributeMetadata(constructor).values()).map((it) => it.name), ...attributeList.map((it) => it.options.name || String(it.propertyKey)), ...emitHostCustomEventList.map((it) => it.options.attributeName).filter(Boolean), ...swcLifecycleAttributes, ...swcOnEvents])];
|
|
181
196
|
const connectedInnerHtmlList = getOnConnectedInnerHtmlMetadata(constructor) || [];
|
|
182
197
|
const proto = constructor.prototype;
|
|
183
198
|
setupPrototype(proto);
|
|
@@ -195,7 +210,20 @@ const elementDefine = (name, config = {}) => (constructor) => {
|
|
|
195
210
|
if (bMethods) {
|
|
196
211
|
for (const m of bMethods) this._invokeLifecycleMethod(m, hostSet);
|
|
197
212
|
}
|
|
198
|
-
|
|
213
|
+
attributeList.forEach((meta) => {
|
|
214
|
+
const attrName = meta.options.name || String(meta.propertyKey);
|
|
215
|
+
if (meta.options.connectedInitialize === true) {
|
|
216
|
+
this.__swc_syncing_init = true;
|
|
217
|
+
try {
|
|
218
|
+
const memoryVal = this[meta.privateKey];
|
|
219
|
+
if (memoryVal !== void 0) {
|
|
220
|
+
this[meta.propertyKey] = memoryVal;
|
|
221
|
+
}
|
|
222
|
+
} finally {
|
|
223
|
+
this.__swc_syncing_init = false;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
});
|
|
199
227
|
if (connectedInnerHtmlList.length > 0) {
|
|
200
228
|
let sContent = "", lContent = "";
|
|
201
229
|
for (const meta of connectedInnerHtmlList) {
|
|
@@ -215,7 +243,62 @@ const elementDefine = (name, config = {}) => (constructor) => {
|
|
|
215
243
|
});
|
|
216
244
|
globalDelegatedRoots.add(root);
|
|
217
245
|
}
|
|
246
|
+
const delegateListeners = [];
|
|
247
|
+
const nonDelegateListeners = [];
|
|
218
248
|
addEventListenerList.forEach((meta) => {
|
|
249
|
+
if (meta.options.delegate && meta.selector !== ":window" && meta.selector !== ":document" && meta.selector !== ":parentHost" && meta.selector !== ":appHost" && meta.selector !== ":firstHost" && meta.selector !== ":lastHost" && meta.selector !== ":firstAppHost" && meta.selector !== ":lastAppHost" && meta.selector !== ":hosts" && meta.selector !== ":appHosts" && meta.selector !== ":host" && meta.selector !== "") {
|
|
250
|
+
delegateListeners.push(meta);
|
|
251
|
+
} else {
|
|
252
|
+
nonDelegateListeners.push(meta);
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
const delegatesByTypeAndRoot = /* @__PURE__ */ new Map();
|
|
256
|
+
delegateListeners.forEach((meta) => {
|
|
257
|
+
const r = meta.options.root || "auto";
|
|
258
|
+
const rootKey = `${meta.type}:${r}`;
|
|
259
|
+
if (!delegatesByTypeAndRoot.has(rootKey)) {
|
|
260
|
+
delegatesByTypeAndRoot.set(rootKey, []);
|
|
261
|
+
}
|
|
262
|
+
delegatesByTypeAndRoot.get(rootKey).push(meta);
|
|
263
|
+
});
|
|
264
|
+
delegatesByTypeAndRoot.forEach((metaList, typeRootKey) => {
|
|
265
|
+
const [type, rStr] = typeRootKey.split(":");
|
|
266
|
+
const r = rStr === "auto" ? "auto" : rStr;
|
|
267
|
+
const opts = { capture: metaList[0].options.capture, once: metaList[0].options.once, passive: metaList[0].options.passive };
|
|
268
|
+
const bindRoots = [];
|
|
269
|
+
if (r === "auto") bindRoots.push(this.shadowRoot || this);
|
|
270
|
+
else if (r === "light") bindRoots.push(this);
|
|
271
|
+
else if (r === "shadow" && this.shadowRoot) bindRoots.push(this.shadowRoot);
|
|
272
|
+
else if (r === "all") {
|
|
273
|
+
bindRoots.push(this);
|
|
274
|
+
if (this.shadowRoot) bindRoots.push(this.shadowRoot);
|
|
275
|
+
}
|
|
276
|
+
bindRoots.forEach((br) => {
|
|
277
|
+
const sortedMetaList = [...metaList].sort((a, b) => {
|
|
278
|
+
const aStop = a.options.stopPropagation ? 1 : 0;
|
|
279
|
+
const bStop = b.options.stopPropagation ? 1 : 0;
|
|
280
|
+
return bStop - aStop;
|
|
281
|
+
});
|
|
282
|
+
const unifiedHandler = async (event) => {
|
|
283
|
+
for (const meta of sortedMetaList) {
|
|
284
|
+
const { selector, options } = meta;
|
|
285
|
+
const matchedEl = event.target.closest(selector);
|
|
286
|
+
if (matchedEl && br.contains(matchedEl)) {
|
|
287
|
+
if (options.stopPropagation) event.stopPropagation();
|
|
288
|
+
if (options.stopImmediatePropagation) event.stopImmediatePropagation();
|
|
289
|
+
if (options.preventDefault) event.preventDefault();
|
|
290
|
+
const currentHostSet = SwcUtils.getHostSet(this);
|
|
291
|
+
const args = { event, ...currentHostSet, $el: matchedEl, $root: br };
|
|
292
|
+
await this[meta.propertyKey](event, currentHostSet, matchedEl, args);
|
|
293
|
+
if (event.cancelBubble) break;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
br.addEventListener(type, unifiedHandler, opts);
|
|
298
|
+
this._boundListeners.push({ target: br, type, handler: unifiedHandler, options: opts });
|
|
299
|
+
});
|
|
300
|
+
});
|
|
301
|
+
nonDelegateListeners.forEach((meta) => {
|
|
219
302
|
const { selector, type, options } = meta;
|
|
220
303
|
const opts = { capture: options.capture, once: options.once, passive: options.passive };
|
|
221
304
|
const bindTargets = [];
|
|
@@ -240,33 +323,7 @@ const elementDefine = (name, config = {}) => (constructor) => {
|
|
|
240
323
|
else if (selector === ":hosts") hostSet.$hosts.forEach(applyRootOption);
|
|
241
324
|
else if (selector === ":appHosts") hostSet.$appHosts.forEach(applyRootOption);
|
|
242
325
|
else if (selector === ":host" || !selector) applyRootOption(this);
|
|
243
|
-
else
|
|
244
|
-
const bindRoots = [];
|
|
245
|
-
if (r === "auto") bindRoots.push(this.shadowRoot || this);
|
|
246
|
-
else if (r === "light") bindRoots.push(this);
|
|
247
|
-
else if (r === "shadow" && this.shadowRoot) bindRoots.push(this.shadowRoot);
|
|
248
|
-
else if (r === "all") {
|
|
249
|
-
bindRoots.push(this);
|
|
250
|
-
if (this.shadowRoot) bindRoots.push(this.shadowRoot);
|
|
251
|
-
}
|
|
252
|
-
bindRoots.forEach((br) => {
|
|
253
|
-
const handler = async (event) => {
|
|
254
|
-
const matchedEl = event.target.closest(selector);
|
|
255
|
-
if (matchedEl && br.contains(matchedEl)) {
|
|
256
|
-
if (options.stopPropagation) event.stopPropagation();
|
|
257
|
-
if (options.stopImmediatePropagation) event.stopImmediatePropagation();
|
|
258
|
-
if (options.preventDefault) event.preventDefault();
|
|
259
|
-
const currentHostSet = SwcUtils.getHostSet(this);
|
|
260
|
-
const args = { event, ...currentHostSet, $el: matchedEl, $root: br };
|
|
261
|
-
await this._invokeLifecycleMethod(meta.propertyKey, currentHostSet, [event, currentHostSet, matchedEl, args]);
|
|
262
|
-
}
|
|
263
|
-
};
|
|
264
|
-
br.addEventListener(type, handler, opts);
|
|
265
|
-
if (options.removeOnDisconnected === true || br !== this && br !== this.shadowRoot) {
|
|
266
|
-
this._boundListeners.push({ target: br, type, handler, options: opts });
|
|
267
|
-
}
|
|
268
|
-
});
|
|
269
|
-
} else {
|
|
326
|
+
else {
|
|
270
327
|
const searchRoots = [];
|
|
271
328
|
if (r === "auto") searchRoots.push(this.shadowRoot || this);
|
|
272
329
|
else if (r === "light") searchRoots.push(this);
|
|
@@ -286,7 +343,7 @@ const elementDefine = (name, config = {}) => (constructor) => {
|
|
|
286
343
|
if (options.preventDefault) event.preventDefault();
|
|
287
344
|
const currentHostSet = SwcUtils.getHostSet(this);
|
|
288
345
|
const args = { event, ...currentHostSet, $el: t, $root: t };
|
|
289
|
-
await this
|
|
346
|
+
await this[meta.propertyKey](event, currentHostSet, args);
|
|
290
347
|
};
|
|
291
348
|
t.addEventListener(type, handler, opts);
|
|
292
349
|
if (options.removeOnDisconnected === true || t === currentWin || t === currentWin.document) {
|
|
@@ -294,6 +351,22 @@ const elementDefine = (name, config = {}) => (constructor) => {
|
|
|
294
351
|
}
|
|
295
352
|
});
|
|
296
353
|
});
|
|
354
|
+
addHostEventListenerList.forEach((meta) => {
|
|
355
|
+
const { type, options } = meta;
|
|
356
|
+
const opts = { capture: options.capture, once: options.once, passive: options.passive };
|
|
357
|
+
const handler = async (event) => {
|
|
358
|
+
if (options.stopPropagation) event.stopPropagation();
|
|
359
|
+
if (options.stopImmediatePropagation) event.stopImmediatePropagation();
|
|
360
|
+
if (options.preventDefault) event.preventDefault();
|
|
361
|
+
const currentHostSet = SwcUtils.getHostSet(this);
|
|
362
|
+
const args = { event, ...currentHostSet, $el: this, $root: this.getRootNode() };
|
|
363
|
+
await this[meta.propertyKey](event, currentHostSet, args);
|
|
364
|
+
};
|
|
365
|
+
this.addEventListener(type, handler, opts);
|
|
366
|
+
if (options.removeOnDisconnected === true) {
|
|
367
|
+
this._boundListeners.push({ target: this, type, handler, options: opts });
|
|
368
|
+
}
|
|
369
|
+
});
|
|
297
370
|
if (originalConnected) originalConnected.apply(this);
|
|
298
371
|
const aMethods = findAllLifecycleMetadata(this, ON_AFTER_CONNECTED_METADATA_KEY);
|
|
299
372
|
if (aMethods) {
|
|
@@ -301,6 +374,7 @@ const elementDefine = (name, config = {}) => (constructor) => {
|
|
|
301
374
|
}
|
|
302
375
|
this._executeSwcScript("swc-on-connected", hostSet);
|
|
303
376
|
this._executeSwcScript("swc-on-after-connected", hostSet);
|
|
377
|
+
this.__swc_connected = true;
|
|
304
378
|
};
|
|
305
379
|
const originalDisconnected = proto.disconnectedCallback;
|
|
306
380
|
proto.disconnectedCallback = function() {
|
|
@@ -321,6 +395,7 @@ const elementDefine = (name, config = {}) => (constructor) => {
|
|
|
321
395
|
}
|
|
322
396
|
this._executeSwcScript("swc-on-disconnected", hostSet);
|
|
323
397
|
this._executeSwcScript("swc-on-after-disconnected", hostSet);
|
|
398
|
+
this.__swc_connected = false;
|
|
324
399
|
};
|
|
325
400
|
const originalAdopted = proto.adoptedCallback;
|
|
326
401
|
proto.adoptedCallback = function() {
|
|
@@ -341,17 +416,20 @@ const elementDefine = (name, config = {}) => (constructor) => {
|
|
|
341
416
|
const originalAttributeChanged = proto.attributeChangedCallback;
|
|
342
417
|
proto.attributeChangedCallback = function(name2, old, newVal) {
|
|
343
418
|
if (originalAttributeChanged) originalAttributeChanged.apply(this, [name2, old, newVal]);
|
|
419
|
+
const hSet = SwcUtils.getHostSet(this);
|
|
344
420
|
if (name2.startsWith("swc-on-") && !swcLifecycleAttributes.includes(name2)) {
|
|
345
421
|
if (newVal !== null) {
|
|
346
|
-
const
|
|
347
|
-
const eventName = customEventMeta ? customEventMeta.type : name2.substring(7);
|
|
422
|
+
const eventName = name2.substring(7);
|
|
348
423
|
this._bindAttributeEvent(this, name2, newVal, eventName);
|
|
349
424
|
}
|
|
350
425
|
}
|
|
426
|
+
const hostCustomEventMeta = emitHostCustomEventList.find((it) => it.options.attributeName === name2);
|
|
427
|
+
if (hostCustomEventMeta && newVal !== null) {
|
|
428
|
+
this._bindAttributeEvent(this, name2, newVal, hostCustomEventMeta.type);
|
|
429
|
+
}
|
|
351
430
|
const mKeys = attrChangeMap.get(name2);
|
|
352
431
|
if (mKeys && Array.isArray(mKeys)) {
|
|
353
|
-
const
|
|
354
|
-
for (const key of mKeys) this._invokeLifecycleMethod(key, hSet, [newVal, old, name2]);
|
|
432
|
+
for (const key of mKeys) this[key](newVal, old, name2, hSet);
|
|
355
433
|
}
|
|
356
434
|
};
|
|
357
435
|
Object.defineProperty(constructor, "observedAttributes", {
|