@ibyar/core 2.4.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/annotation/decorators.d.ts +4 -11
- package/annotation/decorators.d.ts.map +1 -1
- package/annotation/decorators.js +2 -71
- package/annotation/decorators.js.map +1 -1
- package/annotation/options.d.ts +16 -11
- package/annotation/options.d.ts.map +1 -1
- package/annotation/options.js.map +1 -1
- package/binding/binding.expressions copy.d.ts +43 -0
- package/binding/binding.expressions copy.d.ts.map +1 -0
- package/binding/binding.expressions copy.js +161 -0
- package/binding/binding.expressions copy.js.map +1 -0
- package/binding/signal.expressions.d.ts +50 -0
- package/binding/signal.expressions.d.ts.map +1 -0
- package/binding/signal.expressions.js +182 -0
- package/binding/signal.expressions.js.map +1 -0
- package/component/component.d.ts +15 -11
- package/component/component.d.ts.map +1 -1
- package/component/component.js +34 -0
- package/component/component.js.map +1 -1
- package/component/custom-element.d.ts +10 -17
- package/component/custom-element.d.ts.map +1 -1
- package/component/custom-element.js +1 -2
- package/component/custom-element.js.map +1 -1
- package/component/events.js.map +1 -1
- package/component/initializer.d.ts +79 -0
- package/component/initializer.d.ts.map +1 -0
- package/component/initializer.js +77 -0
- package/component/initializer.js.map +1 -0
- package/component/reflect.d.ts.map +1 -1
- package/component/reflect.js +8 -2
- package/component/reflect.js.map +1 -1
- package/di/inject.d.ts +11 -4
- package/di/inject.d.ts.map +1 -1
- package/di/inject.js +18 -2
- package/di/inject.js.map +1 -1
- package/di/provider.d.ts +8 -5
- package/di/provider.d.ts.map +1 -1
- package/di/provider.js +40 -13
- package/di/provider.js.map +1 -1
- package/directive/directive.d.ts +21 -12
- package/directive/directive.d.ts.map +1 -1
- package/directive/directive.js +76 -27
- package/directive/directive.js.map +1 -1
- package/html/deserialize.d.ts.map +1 -1
- package/html/deserialize.js +7 -0
- package/html/deserialize.js.map +1 -1
- package/html/expression.d.ts.map +1 -1
- package/html/expression.js +41 -8
- package/html/expression.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.d.ts.map +1 -1
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/initializer/input.d.ts +1 -0
- package/initializer/input.d.ts.map +1 -0
- package/initializer/input.js +2 -0
- package/initializer/input.js.map +1 -0
- package/linker/change-detector-ref.d.ts +3 -3
- package/linker/change-detector-ref.d.ts.map +1 -1
- package/linker/change-detector-ref.js +26 -4
- package/linker/change-detector-ref.js.map +1 -1
- package/linker/template-ref.js +3 -3
- package/linker/template-ref.js.map +1 -1
- package/linker/view-container-ref.d.ts +4 -4
- package/linker/view-container-ref.d.ts.map +1 -1
- package/linker/view-container-ref.js +4 -4
- package/linker/view-container-ref.js.map +1 -1
- package/linker/view-ref.d.ts +2 -2
- package/linker/view-ref.js.map +1 -1
- package/package.json +7 -7
- package/pipe/pipe.d.ts +8 -8
- package/pipe/pipe.d.ts.map +1 -1
- package/pipe/pipe.js +2 -2
- package/pipe/pipe.js.map +1 -1
- package/signals/factory.d.ts +19 -0
- package/signals/factory.d.ts.map +1 -0
- package/signals/factory.js +59 -0
- package/signals/factory.js.map +1 -0
- package/signals/initializer.d.ts +26 -0
- package/signals/initializer.d.ts.map +1 -0
- package/signals/initializer.js +19 -0
- package/signals/initializer.js.map +1 -0
- package/signals/input.d.ts +1 -0
- package/signals/input.d.ts.map +1 -0
- package/signals/input.js +2 -0
- package/signals/input.js.map +1 -0
- package/signals/runtime.d.ts +37 -0
- package/signals/runtime.d.ts.map +1 -0
- package/signals/runtime.js +176 -0
- package/signals/runtime.js.map +1 -0
- package/signals/scopes.d.ts +4 -0
- package/signals/scopes.d.ts.map +1 -0
- package/signals/scopes.js +4 -0
- package/signals/scopes.js.map +1 -0
- package/signals/signals.d.ts +9 -12
- package/signals/signals.d.ts.map +1 -1
- package/signals/signals.js +17 -44
- package/signals/signals.js.map +1 -1
- package/utils/elements-util.d.ts +0 -1
- package/utils/elements-util.d.ts.map +1 -1
- package/utils/elements-util.js +0 -9
- package/utils/elements-util.js.map +1 -1
- package/utils/typeof.d.ts +4 -2
- package/utils/typeof.d.ts.map +1 -1
- package/utils/typeof.js.map +1 -1
- package/view/base-view.d.ts +2 -2
- package/view/base-view.d.ts.map +1 -1
- package/view/base-view.js +72 -100
- package/view/base-view.js.map +1 -1
- package/view/form-view.d.ts +2 -2
- package/view/form-view.d.ts.map +1 -1
- package/view/form-view.js.map +1 -1
- package/view/render.d.ts +7 -3
- package/view/render.d.ts.map +1 -1
- package/view/render.js +80 -30
- package/view/render.js.map +1 -1
- package/view/utils.d.ts +2 -2
- package/view/utils.d.ts.map +1 -1
- package/view/utils.js.map +1 -1
- package/view/view.d.ts +3 -3
- package/view/view.d.ts.map +1 -1
- package/view/view.js +3 -3
- package/view/view.js.map +1 -1
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
+
import { Deserializer, InfixExpressionNode, Scope, findReactiveScopeByEventMap, isReactive, isSignal } from '@ibyar/expressions';
|
|
3
|
+
import { isOnDestroy } from '../component/lifecycle.js';
|
|
4
|
+
import { createDestroySubscription } from '../context/subscription.js';
|
|
5
|
+
import { AsyncPipeProvider, AsyncPipeScope, PipeProvider } from '../pipe/pipe.js';
|
|
6
|
+
/**
|
|
7
|
+
* this.input.set(model.property |> pipe);
|
|
8
|
+
* left = this.input.set(value);
|
|
9
|
+
* right = model.property |> pipe;
|
|
10
|
+
*/
|
|
11
|
+
let SignalOneWayAssignmentExpression = (() => {
|
|
12
|
+
let _classDecorators = [Deserializer('SignalOneWayAssignment')];
|
|
13
|
+
let _classDescriptor;
|
|
14
|
+
let _classExtraInitializers = [];
|
|
15
|
+
let _classThis;
|
|
16
|
+
let _classSuper = InfixExpressionNode;
|
|
17
|
+
var SignalOneWayAssignmentExpression = class extends _classSuper {
|
|
18
|
+
static { _classThis = this; }
|
|
19
|
+
static {
|
|
20
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
21
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
22
|
+
SignalOneWayAssignmentExpression = _classThis = _classDescriptor.value;
|
|
23
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
24
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
25
|
+
}
|
|
26
|
+
static fromJSON(node, deserializer) {
|
|
27
|
+
return new SignalOneWayAssignmentExpression(deserializer(node.left), deserializer(node.right));
|
|
28
|
+
}
|
|
29
|
+
static visit(node, visitNode) {
|
|
30
|
+
visitNode(node.left);
|
|
31
|
+
visitNode(node.right);
|
|
32
|
+
}
|
|
33
|
+
rightEvents = this.right.events();
|
|
34
|
+
constructor(left, right) {
|
|
35
|
+
super('=:$', left, right);
|
|
36
|
+
}
|
|
37
|
+
set(stack, value) {
|
|
38
|
+
stack = stack.copyStack();
|
|
39
|
+
stack.pushBlockScopeFor({ '$value$': value });
|
|
40
|
+
return this.left.get(stack);
|
|
41
|
+
}
|
|
42
|
+
get(stack) {
|
|
43
|
+
const rv = this.right.get(stack);
|
|
44
|
+
this.set(stack, rv);
|
|
45
|
+
return rv;
|
|
46
|
+
}
|
|
47
|
+
subscribe(stack, pipelineNames) {
|
|
48
|
+
const subscriptions = [];
|
|
49
|
+
if (pipelineNames?.length) {
|
|
50
|
+
const syncPipeScope = Scope.blockScope();
|
|
51
|
+
const asyncPipeScope = AsyncPipeScope.blockScope();
|
|
52
|
+
let hasAsync = false, hasSync = false;
|
|
53
|
+
pipelineNames.forEach(pipelineName => {
|
|
54
|
+
const scope = stack.findScope(pipelineName);
|
|
55
|
+
const pipe = scope.get(pipelineName);
|
|
56
|
+
if (scope instanceof AsyncPipeProvider) {
|
|
57
|
+
hasAsync = true;
|
|
58
|
+
asyncPipeScope.set(pipelineName, pipe);
|
|
59
|
+
if (isOnDestroy(pipe.prototype)) {
|
|
60
|
+
subscriptions.push(createDestroySubscription(() => asyncPipeScope.unsubscribe(pipelineName)));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else if (scope instanceof PipeProvider) {
|
|
64
|
+
hasSync = true;
|
|
65
|
+
syncPipeScope.set(pipelineName, pipe);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
hasSync && stack.pushScope(syncPipeScope);
|
|
69
|
+
hasAsync && stack.pushScope(asyncPipeScope);
|
|
70
|
+
}
|
|
71
|
+
const tuples = findReactiveScopeByEventMap(this.rightEvents, stack);
|
|
72
|
+
const callback = () => this.get(stack);
|
|
73
|
+
tuples.forEach(tuple => {
|
|
74
|
+
const subscription = tuple[1].subscribe(tuple[0], callback);
|
|
75
|
+
subscriptions.push(subscription);
|
|
76
|
+
});
|
|
77
|
+
return subscriptions;
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
return SignalOneWayAssignmentExpression = _classThis;
|
|
81
|
+
})();
|
|
82
|
+
export { SignalOneWayAssignmentExpression };
|
|
83
|
+
/**
|
|
84
|
+
* `the default behavior is assign the right hand side to the left hand side.`
|
|
85
|
+
*
|
|
86
|
+
* this.input.set(model.property.get());
|
|
87
|
+
* model.property.set(this.input.get());
|
|
88
|
+
*/
|
|
89
|
+
let SignalTwoWayAssignmentExpression = (() => {
|
|
90
|
+
let _classDecorators = [Deserializer('SignalTwoWayAssignment')];
|
|
91
|
+
let _classDescriptor;
|
|
92
|
+
let _classExtraInitializers = [];
|
|
93
|
+
let _classThis;
|
|
94
|
+
let _classSuper = InfixExpressionNode;
|
|
95
|
+
var SignalTwoWayAssignmentExpression = class extends _classSuper {
|
|
96
|
+
static { _classThis = this; }
|
|
97
|
+
static {
|
|
98
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
99
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
100
|
+
SignalTwoWayAssignmentExpression = _classThis = _classDescriptor.value;
|
|
101
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
102
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
103
|
+
}
|
|
104
|
+
static fromJSON(node, deserializer) {
|
|
105
|
+
return new SignalTwoWayAssignmentExpression(deserializer(node.left), deserializer(node.right));
|
|
106
|
+
}
|
|
107
|
+
static visit(node, visitNode) {
|
|
108
|
+
visitNode(node.left);
|
|
109
|
+
visitNode(node.right);
|
|
110
|
+
}
|
|
111
|
+
rightEvents;
|
|
112
|
+
leftEvents;
|
|
113
|
+
constructor(left, right) {
|
|
114
|
+
super('=::$', left, right);
|
|
115
|
+
this.rightEvents = this.right.getCallee().events();
|
|
116
|
+
this.leftEvents = this.left.getCallee().events();
|
|
117
|
+
}
|
|
118
|
+
set(stack, value) {
|
|
119
|
+
return this.setRTL(stack, value);
|
|
120
|
+
}
|
|
121
|
+
get(stack) {
|
|
122
|
+
return this.getRTL(stack);
|
|
123
|
+
}
|
|
124
|
+
setRTL(stack, value) {
|
|
125
|
+
stack = stack.copyStack();
|
|
126
|
+
stack.pushBlockScopeFor({ '$value$': value });
|
|
127
|
+
return this.left.get(stack);
|
|
128
|
+
}
|
|
129
|
+
getRTL(stack) {
|
|
130
|
+
const rv = this.right.get(stack);
|
|
131
|
+
this.setRTL(stack, rv);
|
|
132
|
+
return rv;
|
|
133
|
+
}
|
|
134
|
+
actionRTL(stack) {
|
|
135
|
+
return () => this.getRTL(stack);
|
|
136
|
+
}
|
|
137
|
+
setLTR(stack, value) {
|
|
138
|
+
stack = stack.copyStack();
|
|
139
|
+
stack.pushBlockScopeFor({ '$value$': value });
|
|
140
|
+
return this.right.get(stack);
|
|
141
|
+
}
|
|
142
|
+
getLTR(stack) {
|
|
143
|
+
const lv = this.left.get(stack);
|
|
144
|
+
this.setLTR(stack, lv);
|
|
145
|
+
return lv;
|
|
146
|
+
}
|
|
147
|
+
actionLTR(stack) {
|
|
148
|
+
return () => this.getLTR(stack);
|
|
149
|
+
}
|
|
150
|
+
bindSignal(getter, setter) {
|
|
151
|
+
const value = isReactive(getter) ? getter.get() : getter;
|
|
152
|
+
if (isSignal(setter)) {
|
|
153
|
+
setter.set(value);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
setter = value;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
subscribeToEvents(stack, tuples, actionCallback) {
|
|
160
|
+
const subscriptions = [];
|
|
161
|
+
tuples.forEach(tuple => {
|
|
162
|
+
const subscription = tuple[1].subscribe(tuple[0], actionCallback);
|
|
163
|
+
subscriptions.push(subscription);
|
|
164
|
+
});
|
|
165
|
+
return subscriptions;
|
|
166
|
+
}
|
|
167
|
+
subscribe(stack) {
|
|
168
|
+
// right to left
|
|
169
|
+
const rightTuples = findReactiveScopeByEventMap(this.rightEvents, stack);
|
|
170
|
+
const rtlAction = this.actionRTL(stack);
|
|
171
|
+
const rtlSubscriptions = this.subscribeToEvents(stack, rightTuples, rtlAction);
|
|
172
|
+
// left to right
|
|
173
|
+
const leftTuples = findReactiveScopeByEventMap(this.leftEvents, stack);
|
|
174
|
+
const ltrAction = this.actionLTR(stack);
|
|
175
|
+
const ltrSubscriptions = this.subscribeToEvents(stack, leftTuples, ltrAction);
|
|
176
|
+
return rtlSubscriptions.concat(ltrSubscriptions);
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
return SignalTwoWayAssignmentExpression = _classThis;
|
|
180
|
+
})();
|
|
181
|
+
export { SignalTwoWayAssignmentExpression };
|
|
182
|
+
//# sourceMappingURL=signal.expressions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal.expressions.js","sourceRoot":"","sources":["../../../src/core/binding/signal.expressions.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tCallExpression, Context, Deserializer, ExpressionEventMap,\n\tExpressionNode, InfixExpressionNode, NodeDeserializer,\n\tReactiveScope, Scope, ScopeSubscription, Stack,\n\tValueChangedCallback, VisitNodeType,\n\tfindReactiveScopeByEventMap, isReactive, isSignal\n} from '@ibyar/expressions';\nimport { isOnDestroy } from '../component/lifecycle.js';\nimport { createDestroySubscription } from '../context/subscription.js';\nimport { AsyncPipeProvider, AsyncPipeScope, PipeProvider } from '../pipe/pipe.js';\n\ntype SignalOneWayOperator = '=:$';\ntype SignalTwoWayOperator = '=::$';\ntype SignalBindingOperators = SignalOneWayOperator | SignalTwoWayOperator;\n\nexport interface SignalBindingAssignment extends InfixExpressionNode<SignalBindingOperators> {\n\tsubscribe(stack: Stack, pipelineNames?: string[]): ScopeSubscription<Context>[];\n}\n\n\n/**\n * this.input.set(model.property |> pipe);\n * left = this.input.set(value);\n * right = model.property |> pipe;\n */\n@Deserializer('SignalOneWayAssignment')\nexport class SignalOneWayAssignmentExpression extends InfixExpressionNode<SignalOneWayOperator> implements SignalBindingAssignment {\n\tstatic fromJSON(node: SignalOneWayAssignmentExpression, deserializer: NodeDeserializer): SignalOneWayAssignmentExpression {\n\t\treturn new SignalOneWayAssignmentExpression(\n\t\t\tdeserializer(node.left) as CallExpression,\n\t\t\tdeserializer(node.right)\n\t\t);\n\t}\n\tstatic visit(node: SignalOneWayAssignmentExpression, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.left);\n\t\tvisitNode(node.right);\n\t}\n\n\tdeclare protected left: CallExpression;\n\tprivate rightEvents = this.right.events();\n\tconstructor(left: CallExpression, right: ExpressionNode) {\n\t\tsuper('=:$', left, right);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tstack = stack.copyStack();\n\t\tstack.pushBlockScopeFor({ '$value$': value });\n\t\treturn this.left.get(stack);\n\t}\n\tget(stack: Stack): any {\n\t\tconst rv = this.right.get(stack);\n\t\tthis.set(stack, rv);\n\t\treturn rv;\n\t}\n\tsubscribe(stack: Stack, pipelineNames?: string[]): ScopeSubscription<Context>[] {\n\t\tconst subscriptions: ScopeSubscription<Context>[] = [];\n\t\tif (pipelineNames?.length) {\n\t\t\tconst syncPipeScope = Scope.blockScope();\n\t\t\tconst asyncPipeScope = AsyncPipeScope.blockScope();\n\t\t\tlet hasAsync = false, hasSync = false;\n\t\t\tpipelineNames.forEach(pipelineName => {\n\t\t\t\tconst scope = stack.findScope(pipelineName);\n\t\t\t\tconst pipe = scope.get(pipelineName)!;\n\t\t\t\tif (scope instanceof AsyncPipeProvider) {\n\t\t\t\t\thasAsync = true;\n\t\t\t\t\tasyncPipeScope.set(pipelineName, pipe);\n\t\t\t\t\tif (isOnDestroy(pipe.prototype)) {\n\t\t\t\t\t\tsubscriptions.push(createDestroySubscription(() => asyncPipeScope.unsubscribe(pipelineName)));\n\t\t\t\t\t}\n\t\t\t\t} else if (scope instanceof PipeProvider) {\n\t\t\t\t\thasSync = true;\n\t\t\t\t\tsyncPipeScope.set(pipelineName, pipe);\n\t\t\t\t}\n\t\t\t});\n\t\t\thasSync && stack.pushScope(syncPipeScope);\n\t\t\thasAsync && stack.pushScope(asyncPipeScope);\n\t\t}\n\t\tconst tuples = findReactiveScopeByEventMap(this.rightEvents, stack);\n\t\tconst callback: ValueChangedCallback = () => this.get(stack);\n\t\ttuples.forEach(tuple => {\n\t\t\tconst subscription = tuple[1].subscribe(tuple[0], callback);\n\t\t\tsubscriptions.push(subscription);\n\t\t});\n\t\treturn subscriptions;\n\t}\n}\n\n\n/**\n * `the default behavior is assign the right hand side to the left hand side.`\n * \n * this.input.set(model.property.get());\n * model.property.set(this.input.get());\n */\n@Deserializer('SignalTwoWayAssignment')\nexport class SignalTwoWayAssignmentExpression extends InfixExpressionNode<SignalTwoWayOperator> implements SignalBindingAssignment {\n\tstatic fromJSON(node: SignalTwoWayAssignmentExpression, deserializer: NodeDeserializer): SignalTwoWayAssignmentExpression {\n\t\treturn new SignalTwoWayAssignmentExpression(\n\t\t\tdeserializer(node.left) as CallExpression,\n\t\t\tdeserializer(node.right) as CallExpression\n\t\t);\n\t}\n\tstatic visit(node: SignalTwoWayAssignmentExpression, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.left);\n\t\tvisitNode(node.right);\n\t}\n\n\tdeclare protected left: CallExpression;\n\tdeclare protected right: CallExpression;\n\n\tprivate rightEvents: ExpressionEventMap;\n\tprivate leftEvents: ExpressionEventMap;\n\tconstructor(left: CallExpression, right: CallExpression) {\n\t\tsuper('=::$', left, right);\n\t\tthis.rightEvents = this.right.getCallee().events();\n\t\tthis.leftEvents = this.left.getCallee().events();\n\t}\n\n\tset(stack: Stack, value: any) {\n\t\treturn this.setRTL(stack, value);\n\t}\n\tget(stack: Stack): any {\n\t\treturn this.getRTL(stack);\n\t}\n\n\tprivate setRTL(stack: Stack, value: any) {\n\t\tstack = stack.copyStack();\n\t\tstack.pushBlockScopeFor({ '$value$': value });\n\t\treturn this.left.get(stack);\n\t}\n\tprivate getRTL(stack: Stack): any {\n\t\tconst rv = this.right.get(stack);\n\t\tthis.setRTL(stack, rv);\n\t\treturn rv;\n\t}\n\tprivate actionRTL(stack: Stack): ValueChangedCallback {\n\t\treturn () => this.getRTL(stack);\n\t}\n\n\tprivate setLTR(stack: Stack, value: any) {\n\t\tstack = stack.copyStack();\n\t\tstack.pushBlockScopeFor({ '$value$': value });\n\t\treturn this.right.get(stack);\n\t}\n\tprivate getLTR(stack: Stack): any {\n\t\tconst lv = this.left.get(stack);\n\t\tthis.setLTR(stack, lv);\n\t\treturn lv;\n\t}\n\tprivate actionLTR(stack: Stack): ValueChangedCallback {\n\t\treturn () => this.getLTR(stack);\n\t}\n\n\tprivate bindSignal(getter: any, setter: any) {\n\t\tconst value = isReactive(getter) ? getter.get() : getter;\n\t\tif (isSignal(setter)) {\n\t\t\tsetter.set(value);\n\t\t} else {\n\t\t\tsetter = value;\n\t\t}\n\t}\n\n\tprivate subscribeToEvents(stack: Stack, tuples: [string, ReactiveScope<Context>][], actionCallback: ValueChangedCallback) {\n\t\tconst subscriptions: ScopeSubscription<Context>[] = [];\n\t\ttuples.forEach(tuple => {\n\t\t\tconst subscription = tuple[1].subscribe(tuple[0], actionCallback);\n\t\t\tsubscriptions.push(subscription);\n\t\t});\n\t\treturn subscriptions;\n\t}\n\n\tsubscribe(stack: Stack): ScopeSubscription<Context>[] {\n\n\t\t// right to left\n\t\tconst rightTuples = findReactiveScopeByEventMap(this.rightEvents, stack);\n\t\tconst rtlAction = this.actionRTL(stack);\n\t\tconst rtlSubscriptions = this.subscribeToEvents(stack, rightTuples, rtlAction);\n\n\t\t// left to right \n\t\tconst leftTuples = findReactiveScopeByEventMap(this.leftEvents, stack);\n\t\tconst ltrAction = this.actionLTR(stack);\n\t\tconst ltrSubscriptions = this.subscribeToEvents(stack, leftTuples, ltrAction);\n\n\t\treturn rtlSubscriptions.concat(ltrSubscriptions);\n\t}\n\n}\n"]}
|
package/component/component.d.ts
CHANGED
|
@@ -1,26 +1,27 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type {
|
|
1
|
+
import { type MetadataClass, type MetadataContext } from '@ibyar/decorators';
|
|
2
|
+
import type { Type } from '../utils/typeof.js';
|
|
3
3
|
import type { ZoneType } from '../zone/bootstrap.js';
|
|
4
4
|
import { Tag, DomNode, DomRenderNode, DomElementNode } from '@ibyar/elements';
|
|
5
5
|
import { HTMLComponent, ValueControl } from './custom-element.js';
|
|
6
6
|
import { AttributeDirective, StructuralDirective } from '../directive/directive.js';
|
|
7
7
|
import { ComponentOptions, PipeOptions, InjectableOptions, DirectiveOptions } from '../annotation/options.js';
|
|
8
8
|
import { ChildRef, HostBindingRef, InputPropertyRef, ListenerRef, OutputPropertyRef, PropertyRef } from './reflect.js';
|
|
9
|
+
import { SignalRuntimeMetadata } from '../signals/runtime.js';
|
|
9
10
|
export interface InjectableRef<T> {
|
|
10
|
-
provideIn:
|
|
11
|
-
modelClass:
|
|
11
|
+
provideIn: Type<CustomElementConstructor> | 'root' | 'platform' | 'any';
|
|
12
|
+
modelClass: Type<T>;
|
|
12
13
|
name: string;
|
|
13
14
|
}
|
|
14
15
|
export interface PipeRef<T> {
|
|
15
16
|
name: string;
|
|
16
17
|
asynchronous?: boolean;
|
|
17
|
-
modelClass:
|
|
18
|
+
modelClass: Type<T>;
|
|
18
19
|
}
|
|
19
20
|
export interface DirectiveRef<T> {
|
|
20
21
|
selector: string;
|
|
21
22
|
exportAs?: string;
|
|
22
23
|
zone?: ZoneType;
|
|
23
|
-
modelClass:
|
|
24
|
+
modelClass: Type<StructuralDirective> | Type<AttributeDirective>;
|
|
24
25
|
inputs: PropertyRef[];
|
|
25
26
|
outputs: PropertyRef[];
|
|
26
27
|
view: string;
|
|
@@ -29,6 +30,7 @@ export interface DirectiveRef<T> {
|
|
|
29
30
|
hostListeners: ListenerRef[];
|
|
30
31
|
hostBindings: HostBindingRef[];
|
|
31
32
|
viewBindings?: DomElementNode;
|
|
33
|
+
signals: SignalRuntimeMetadata[];
|
|
32
34
|
}
|
|
33
35
|
export interface ComponentRef<T> {
|
|
34
36
|
selector: string;
|
|
@@ -38,7 +40,7 @@ export interface ComponentRef<T> {
|
|
|
38
40
|
extend: Tag;
|
|
39
41
|
extendCustomElement: boolean;
|
|
40
42
|
viewClass: MetadataClass<HTMLComponent<T>> & CustomElementConstructor;
|
|
41
|
-
modelClass:
|
|
43
|
+
modelClass: Type<T>;
|
|
42
44
|
inputs: InputPropertyRef[];
|
|
43
45
|
outputs: OutputPropertyRef[];
|
|
44
46
|
view: string;
|
|
@@ -52,19 +54,21 @@ export interface ComponentRef<T> {
|
|
|
52
54
|
isShadowDom: boolean;
|
|
53
55
|
shadowRootInit: ShadowRootInit;
|
|
54
56
|
disabledFeatures?: ('internals' | 'shadow')[];
|
|
55
|
-
formAssociated: boolean |
|
|
57
|
+
formAssociated: boolean | Type<ValueControl<any>>;
|
|
56
58
|
zone?: ZoneType;
|
|
59
|
+
signals: SignalRuntimeMetadata[];
|
|
57
60
|
}
|
|
58
61
|
export declare class Components {
|
|
59
62
|
private static EMPTY_LIST;
|
|
60
63
|
private static emptyList;
|
|
61
64
|
private static patchTemplate;
|
|
62
65
|
static defineDirective(modelClass: MetadataClass, opts: DirectiveOptions, metadata: MetadataContext): void;
|
|
63
|
-
static definePipe<T extends
|
|
64
|
-
static defineInjectable<T extends
|
|
65
|
-
static defineComponent<T extends
|
|
66
|
+
static definePipe<T extends Type<any>>(modelClass: MetadataClass<T>, opts: PipeOptions, metadata: MetadataContext): void;
|
|
67
|
+
static defineInjectable<T extends Type<any>>(modelClass: MetadataClass<T>, opts: InjectableOptions, metadata: MetadataContext): void;
|
|
68
|
+
static defineComponent<T extends Type<any>>(modelClass: MetadataClass<T>, opts: ComponentOptions<T>, metadata: MetadataContext): void;
|
|
66
69
|
static defineView<T extends HTMLElement>(viewClass: MetadataClass<T>, opt: {
|
|
67
70
|
selector: string;
|
|
68
71
|
} & ElementDefinitionOptions): void;
|
|
72
|
+
private static scanRuntimeSignals;
|
|
69
73
|
}
|
|
70
74
|
//# sourceMappingURL=component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/core/component/component.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/core/component/component.ts"],"names":[],"mappings":"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"}
|
package/component/component.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
import { metadataHoler } from '@ibyar/decorators';
|
|
1
2
|
import { findByTagName, htmlParser, templateParser, canAttachShadow, directiveRegistry, DomElementNode, DomParentNode, isValidCustomElementName } from '@ibyar/elements';
|
|
2
3
|
import { classRegistryProvider } from '../providers/provider.js';
|
|
3
4
|
import { initCustomElementView } from '../view/view.js';
|
|
4
5
|
import { buildExpressionNodes } from '../html/expression.js';
|
|
6
|
+
import { ReflectComponents } from './reflect.js';
|
|
5
7
|
import { deserializeExpressionNodes } from '../html/deserialize.js';
|
|
6
8
|
import { parseHostNode } from '../html/host.js';
|
|
7
9
|
import { provide } from '../di/inject.js';
|
|
10
|
+
import { RuntimeClassMetadata } from '../signals/runtime.js';
|
|
8
11
|
const DEFAULT_SHADOW_ROOT_INIT = { mode: 'open', delegatesFocus: false, slotAssignment: 'named' };
|
|
9
12
|
export class Components {
|
|
10
13
|
static EMPTY_LIST = Object.freeze([]);
|
|
@@ -23,6 +26,11 @@ export class Components {
|
|
|
23
26
|
}
|
|
24
27
|
}
|
|
25
28
|
static defineDirective(modelClass, opts, metadata) {
|
|
29
|
+
if (!opts.signals) {
|
|
30
|
+
const scanParent = !metadataHoler.has(Object.getPrototypeOf(modelClass));
|
|
31
|
+
opts.signals = RuntimeClassMetadata.scanMetadata(modelClass, scanParent);
|
|
32
|
+
}
|
|
33
|
+
this.scanRuntimeSignals(modelClass, opts, metadata);
|
|
26
34
|
Object.assign(metadata, opts);
|
|
27
35
|
if (metadata.hostListeners?.length || metadata.hostBindings?.length) {
|
|
28
36
|
const hostNode = parseHostNode({
|
|
@@ -61,6 +69,11 @@ export class Components {
|
|
|
61
69
|
provide(modelClass);
|
|
62
70
|
}
|
|
63
71
|
static defineComponent(modelClass, opts, metadata) {
|
|
72
|
+
if (!opts.signals) {
|
|
73
|
+
const scanParent = !metadataHoler.has(Object.getPrototypeOf(modelClass));
|
|
74
|
+
opts.signals = RuntimeClassMetadata.scanMetadata(modelClass, scanParent);
|
|
75
|
+
}
|
|
76
|
+
this.scanRuntimeSignals(modelClass, opts, metadata);
|
|
64
77
|
const componentRef = Object.assign(metadata, opts);
|
|
65
78
|
componentRef.extend = findByTagName(opts.extend);
|
|
66
79
|
componentRef.extendCustomElement = !!opts.extend && isValidCustomElementName(opts.extend);
|
|
@@ -151,5 +164,26 @@ export class Components {
|
|
|
151
164
|
const { selector, ...definition } = opt;
|
|
152
165
|
customElements.define(selector, viewClass, definition);
|
|
153
166
|
}
|
|
167
|
+
static scanRuntimeSignals(modelClass, opts, metadata) {
|
|
168
|
+
if (!opts.signals) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
const signals = opts.signals;
|
|
172
|
+
signals.filter(item => item.signal === 'input')
|
|
173
|
+
.flatMap(item => item.options)
|
|
174
|
+
.forEach(option => ReflectComponents.addInput(metadata, option.name, option.alias));
|
|
175
|
+
signals.filter(item => item.signal === 'formValue')
|
|
176
|
+
.flatMap(item => item.options)
|
|
177
|
+
.forEach(option => ReflectComponents.addInput(metadata, option.name, 'view'));
|
|
178
|
+
signals.filter(item => item.signal === 'output')
|
|
179
|
+
.flatMap(item => item.options)
|
|
180
|
+
.forEach(option => ReflectComponents.addOutput(metadata, option.name, option.alias, {}));
|
|
181
|
+
signals.filter(item => item.signal === 'view')
|
|
182
|
+
.flatMap(item => item.options)
|
|
183
|
+
.forEach(option => ReflectComponents.setComponentView(metadata, option.name));
|
|
184
|
+
signals.filter(item => item.signal === 'viewChild')
|
|
185
|
+
.flatMap(item => item.options)
|
|
186
|
+
.forEach(option => ReflectComponents.addViewChild(metadata, option.name, 'ɵSignal', {}));
|
|
187
|
+
}
|
|
154
188
|
}
|
|
155
189
|
//# sourceMappingURL=component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sourceRoot":"","sources":["../../../src/core/component/component.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MetadataClass, MetadataContext } from '@ibyar/decorators';\nimport type { Class, TypeOf } from '../utils/typeof.js';\nimport type { ZoneType } from '../zone/bootstrap.js';\nimport {\n\tfindByTagName, Tag, htmlParser, templateParser,\n\tDomNode, DomRenderNode, canAttachShadow,\n\tdirectiveRegistry, DomElementNode,\n\tDomParentNode, isValidCustomElementName\n} from '@ibyar/elements';\n\nimport { HTMLComponent, ValueControl } from './custom-element.js';\nimport { classRegistryProvider } from '../providers/provider.js';\nimport { AttributeDirective, StructuralDirective } from '../directive/directive.js';\nimport { initCustomElementView } from '../view/view.js';\nimport { buildExpressionNodes } from '../html/expression.js';\nimport {\n\tComponentOptions, PipeOptions,\n\tInjectableOptions, DirectiveOptions\n} from '../annotation/options.js';\nimport {\n\tChildRef, HostBindingRef, InputPropertyRef,\n\tListenerRef, OutputPropertyRef, PropertyRef\n} from './reflect.js';\nimport { deserializeExpressionNodes } from '../html/deserialize.js';\nimport { parseHostNode } from '../html/host.js';\nimport { provide } from '../di/inject.js';\n\n\nexport interface InjectableRef<T> {\n\tprovideIn: TypeOf<CustomElementConstructor> | 'root' | 'platform' | 'any';\n\tmodelClass: TypeOf<T>;\n\tname: string;\n}\n\nexport interface PipeRef<T> {\n\tname: string;\n\tasynchronous?: boolean;\n\tmodelClass: TypeOf<T>;\n}\nexport interface DirectiveRef<T> {\n\tselector: string;\n\texportAs?: string;\n\tzone?: ZoneType;\n\n\tmodelClass: TypeOf<StructuralDirective> | TypeOf<AttributeDirective>;\n\n\tinputs: PropertyRef[];\n\toutputs: PropertyRef[];\n\tview: string;\n\tviewChild: ChildRef[];\n\tViewChildren: ChildRef[];\n\thostListeners: ListenerRef[];\n\thostBindings: HostBindingRef[];\n\tviewBindings?: DomElementNode;\n}\n\nexport interface ComponentRef<T> {\n\tselector: string;\n\ttemplate: DomNode | DomRenderNode<T>;\n\tcompiledTemplate?: DomNode;\n\tstyles: string;\n\textend: Tag;\n\textendCustomElement: boolean;\n\n\tviewClass: MetadataClass<HTMLComponent<T>> & CustomElementConstructor;\n\tmodelClass: TypeOf<T>;\n\n\tinputs: InputPropertyRef[];\n\toutputs: OutputPropertyRef[];\n\tview: string;\n\tviewChild: ChildRef[];\n\tViewChildren: ChildRef[];\n\thostBindings: HostBindingRef[];\n\thostListeners: ListenerRef[];\n\tviewBindings?: DomElementNode;\n\twindowBindings?: DomElementNode;\n\n\tencapsulation: 'custom' | 'shadow-dom' | 'template' | 'shadow-dom-template' | 'shadow-slot';\n\tisShadowDom: boolean;\n\tshadowRootInit: ShadowRootInit;\n\tdisabledFeatures?: ('internals' | 'shadow')[];\n\tformAssociated: boolean | TypeOf<ValueControl<any>>;\n\tzone?: ZoneType;\n}\n\nconst DEFAULT_SHADOW_ROOT_INIT: ShadowRootInit = { mode: 'open', delegatesFocus: false, slotAssignment: 'named' };\n\nexport class Components {\n\n\tprivate static EMPTY_LIST = Object.freeze<any>([]);\n\tprivate static emptyList<T>(): T[] {\n\t\treturn Components.EMPTY_LIST as T[];\n\t}\n\n\tprivate static patchTemplate(child: DomNode, templates: DomElementNode[]): void {\n\t\tif (child instanceof DomElementNode && child.templateRefName?.name) {\n\t\t\tconst ref = templates.find(node => child.templateRefName?.name === node.templateRefName?.name);\n\t\t\tif (ref?.outputs) {\n\t\t\t\t(child.outputs ??= []).push(...ref.outputs);\n\t\t\t}\n\t\t}\n\t\tif (child instanceof DomParentNode) {\n\t\t\tchild.children?.forEach(node => Components.patchTemplate(node, templates));\n\t\t}\n\t}\n\n\n\tstatic defineDirective(modelClass: MetadataClass, opts: DirectiveOptions, metadata: MetadataContext) {\n\t\tObject.assign(metadata, opts);\n\t\tif (metadata.hostListeners?.length || metadata.hostBindings?.length) {\n\t\t\tconst hostNode = parseHostNode({\n\t\t\t\tprototype: modelClass.prototype,\n\t\t\t\thostBindings: metadata.hostBindings,\n\t\t\t\thostListeners: metadata.hostListeners,\n\t\t\t});\n\t\t\tmetadata.viewBindings = hostNode.host;\n\t\t}\n\t\tmetadata.modelClass = modelClass;\n\t\tclassRegistryProvider.registerDirective(modelClass);\n\t\tconst successors: string[] = [];\n\t\tif (metadata.successor) {\n\t\t\tsuccessors.push(metadata.successor.trim());\n\t\t}\n\t\tif (Array.isArray(metadata.successors)) {\n\t\t\tsuccessors.push(...metadata.successors.map(s => s.trim()));\n\t\t}\n\t\tmetadata.successors = successors;\n\t\tdirectiveRegistry.register(opts.selector, {\n\t\t\tinputs: (metadata.inputs as PropertyRef[])?.map(input => input.viewAttribute),\n\t\t\toutputs: (metadata.outputs as PropertyRef[])?.map(output => output.viewAttribute),\n\t\t\tsuccessors: successors,\n\t\t});\n\t}\n\n\tstatic definePipe<T extends Class>(modelClass: MetadataClass<T>, opts: PipeOptions, metadata: MetadataContext) {\n\t\tObject.assign(metadata, opts);\n\t\tmetadata.modelClass = modelClass;\n\t\tclassRegistryProvider.registerPipe(modelClass);\n\t}\n\n\tstatic defineInjectable<T extends Class>(modelClass: MetadataClass<T>, opts: InjectableOptions, metadata: MetadataContext) {\n\t\tObject.assign(metadata, opts);\n\t\tmetadata.modelClass = modelClass;\n\t\tmetadata.name = modelClass.name;\n\t\tclassRegistryProvider.registerInjectable(modelClass);\n\t\tprovide(modelClass);\n\t}\n\n\tstatic defineComponent<T extends Class>(modelClass: MetadataClass<T>, opts: ComponentOptions<T>, metadata: MetadataContext) {\n\t\tconst componentRef = Object.assign(metadata, opts) as any as ComponentRef<T>;\n\t\tcomponentRef.extend = findByTagName(opts.extend);\n\t\tcomponentRef.extendCustomElement = !!opts.extend && isValidCustomElementName(opts.extend);\n\n\t\tif (typeof componentRef.template === 'string') {\n\t\t\tif (componentRef.styles) {\n\t\t\t\tconst template = `<style>${componentRef.styles}</style>${componentRef.template}`;\n\t\t\t\tcomponentRef.template = htmlParser.toDomRootNode(template);\n\t\t\t} else {\n\t\t\t\tcomponentRef.template = htmlParser.toDomRootNode(componentRef.template);\n\t\t\t}\n\t\t\tbuildExpressionNodes(componentRef.template);\n\t\t} else if (typeof componentRef.template === 'object') {\n\t\t\tbuildExpressionNodes(componentRef.template);\n\t\t} else if (typeof componentRef.compiledTemplate === 'object') {\n\t\t\thtmlParser.deserializeNode(componentRef.compiledTemplate);\n\t\t\tdeserializeExpressionNodes(componentRef.compiledTemplate);\n\t\t\tcomponentRef.template = componentRef.compiledTemplate;\n\t\t\tcomponentRef.compiledTemplate = undefined;\n\t\t}\n\n\t\tif (!componentRef.template && /template/g.test(componentRef.encapsulation)) {\n\t\t\tconst template = document.querySelector('#' + componentRef.selector);\n\t\t\tif (template && template instanceof HTMLTemplateElement) {\n\t\t\t\tcomponentRef.template = templateParser.parse(template);\n\t\t\t\tbuildExpressionNodes(componentRef.template);\n\t\t\t} else {\n\t\t\t\t// didn't find this template in 'index.html' document\n\t\t\t}\n\t\t}\n\n\t\tcomponentRef.inputs ||= Components.emptyList();\n\t\tcomponentRef.outputs ||= Components.emptyList();\n\t\tcomponentRef.viewChild ||= Components.emptyList();\n\t\tcomponentRef.ViewChildren ||= Components.emptyList();\n\t\tcomponentRef.hostBindings ||= Components.emptyList();\n\t\tcomponentRef.hostListeners ||= Components.emptyList();\n\t\tcomponentRef.encapsulation ||= 'custom';\n\t\tcomponentRef.isShadowDom = /shadow/g.test(componentRef.encapsulation);\n\t\tif (componentRef.isShadowDom) {\n\t\t\tcomponentRef.shadowRootInit = Object.assign({}, DEFAULT_SHADOW_ROOT_INIT, (componentRef.shadowRootInit ?? {}));\n\t\t}\n\n\t\tif (componentRef.hostListeners.length || componentRef.hostBindings.length) {\n\t\t\tconst hostNode = parseHostNode({\n\t\t\t\tprototype: modelClass.prototype,\n\t\t\t\tselector: componentRef.selector,\n\t\t\t\thostBindings: componentRef.hostBindings,\n\t\t\t\thostListeners: componentRef.hostListeners,\n\t\t\t});\n\t\t\tcomponentRef.viewBindings = hostNode.host;\n\t\t\tcomponentRef.windowBindings = hostNode.window;\n\n\t\t\tif (typeof componentRef.template === 'function') {\n\t\t\t\tconst creator = componentRef.template;\n\t\t\t\tcomponentRef.template = (model: T) => {\n\t\t\t\t\tconst template = creator(model);\n\t\t\t\t\tif (hostNode.template) {\n\t\t\t\t\t\tComponents.patchTemplate(template, hostNode.template);\n\t\t\t\t\t}\n\t\t\t\t\treturn template;\n\t\t\t\t};\n\t\t\t} else if (hostNode.template) {\n\t\t\t\tComponents.patchTemplate(componentRef.template, hostNode.template);\n\t\t\t}\n\n\t\t}\n\n\t\tif (!(componentRef.formAssociated === true || typeof componentRef.formAssociated === 'function')) {\n\t\t\tcomponentRef.formAssociated = false;\n\t\t}\n\n\t\tif (componentRef.isShadowDom && componentRef.extend.name) {\n\t\t\tcomponentRef.isShadowDom = canAttachShadow(componentRef.extend.name);\n\t\t}\n\n\t\tcomponentRef.modelClass = modelClass;\n\t\tcomponentRef.viewClass = initCustomElementView(modelClass, componentRef);\n\n\t\tclassRegistryProvider.registerComponent(modelClass);\n\t\tclassRegistryProvider.registerView(componentRef.viewClass);\n\n\t\tconst options: ElementDefinitionOptions = {};\n\t\tconst parentTagName = componentRef.extend?.name;\n\t\tif (parentTagName) {\n\t\t\tif (parentTagName !== '!' && parentTagName.indexOf('-') === -1) {\n\t\t\t\toptions.extends = parentTagName;\n\t\t\t}\n\t\t}\n\n\n\t\tcustomElements.define(\n\t\t\tcomponentRef.selector as string,\n\t\t\tcomponentRef.viewClass as CustomElementConstructor,\n\t\t\toptions\n\t\t);\n\n\t}\n\n\tstatic defineView<T extends HTMLElement>(viewClass: MetadataClass<T>, opt: { selector: string } & ElementDefinitionOptions) {\n\t\tclassRegistryProvider.registerView(viewClass);\n\t\tconst { selector, ...definition } = opt;\n\t\tcustomElements.define(\n\t\t\tselector,\n\t\t\tviewClass,\n\t\t\tdefinition,\n\t\t);\n\t}\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"component.js","sourceRoot":"","sources":["../../../src/core/component/component.ts"],"names":[],"mappings":"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","sourcesContent":["import { metadataHoler, type MetadataClass, type MetadataContext } from '@ibyar/decorators';\nimport type { Type } from '../utils/typeof.js';\nimport type { ZoneType } from '../zone/bootstrap.js';\nimport {\n\tfindByTagName, Tag, htmlParser, templateParser,\n\tDomNode, DomRenderNode, canAttachShadow,\n\tdirectiveRegistry, DomElementNode,\n\tDomParentNode, isValidCustomElementName\n} from '@ibyar/elements';\n\nimport { HTMLComponent, ValueControl } from './custom-element.js';\nimport { classRegistryProvider } from '../providers/provider.js';\nimport { AttributeDirective, StructuralDirective } from '../directive/directive.js';\nimport { initCustomElementView } from '../view/view.js';\nimport { buildExpressionNodes } from '../html/expression.js';\nimport {\n\tComponentOptions, PipeOptions,\n\tInjectableOptions, DirectiveOptions\n} from '../annotation/options.js';\nimport {\n\tChildRef, HostBindingRef, InputPropertyRef,\n\tListenerRef, OutputPropertyRef, PropertyRef,\n\tReflectComponents\n} from './reflect.js';\nimport { deserializeExpressionNodes } from '../html/deserialize.js';\nimport { parseHostNode } from '../html/host.js';\nimport { provide } from '../di/inject.js';\nimport { RuntimeClassMetadata, SignalRuntimeMetadata } from '../signals/runtime.js';\n\n\nexport interface InjectableRef<T> {\n\tprovideIn: Type<CustomElementConstructor> | 'root' | 'platform' | 'any';\n\tmodelClass: Type<T>;\n\tname: string;\n}\n\nexport interface PipeRef<T> {\n\tname: string;\n\tasynchronous?: boolean;\n\tmodelClass: Type<T>;\n}\nexport interface DirectiveRef<T> {\n\tselector: string;\n\texportAs?: string;\n\tzone?: ZoneType;\n\n\tmodelClass: Type<StructuralDirective> | Type<AttributeDirective>;\n\n\tinputs: PropertyRef[];\n\toutputs: PropertyRef[];\n\tview: string;\n\tviewChild: ChildRef[];\n\tViewChildren: ChildRef[];\n\thostListeners: ListenerRef[];\n\thostBindings: HostBindingRef[];\n\tviewBindings?: DomElementNode;\n\tsignals: SignalRuntimeMetadata[];\n}\n\nexport interface ComponentRef<T> {\n\tselector: string;\n\ttemplate: DomNode | DomRenderNode<T>;\n\tcompiledTemplate?: DomNode;\n\tstyles: string;\n\textend: Tag;\n\textendCustomElement: boolean;\n\n\tviewClass: MetadataClass<HTMLComponent<T>> & CustomElementConstructor;\n\tmodelClass: Type<T>;\n\n\tinputs: InputPropertyRef[];\n\toutputs: OutputPropertyRef[];\n\tview: string;\n\tviewChild: ChildRef[];\n\tViewChildren: ChildRef[];\n\thostBindings: HostBindingRef[];\n\thostListeners: ListenerRef[];\n\tviewBindings?: DomElementNode;\n\twindowBindings?: DomElementNode;\n\n\tencapsulation: 'custom' | 'shadow-dom' | 'template' | 'shadow-dom-template' | 'shadow-slot';\n\tisShadowDom: boolean;\n\tshadowRootInit: ShadowRootInit;\n\tdisabledFeatures?: ('internals' | 'shadow')[];\n\tformAssociated: boolean | Type<ValueControl<any>>;\n\tzone?: ZoneType;\n\tsignals: SignalRuntimeMetadata[];\n}\n\nconst DEFAULT_SHADOW_ROOT_INIT: ShadowRootInit = { mode: 'open', delegatesFocus: false, slotAssignment: 'named' };\n\nexport class Components {\n\n\tprivate static EMPTY_LIST = Object.freeze<any>([]);\n\tprivate static emptyList<T>(): T[] {\n\t\treturn Components.EMPTY_LIST as T[];\n\t}\n\n\tprivate static patchTemplate(child: DomNode, templates: DomElementNode[]): void {\n\t\tif (child instanceof DomElementNode && child.templateRefName?.name) {\n\t\t\tconst ref = templates.find(node => child.templateRefName?.name === node.templateRefName?.name);\n\t\t\tif (ref?.outputs) {\n\t\t\t\t(child.outputs ??= []).push(...ref.outputs);\n\t\t\t}\n\t\t}\n\t\tif (child instanceof DomParentNode) {\n\t\t\tchild.children?.forEach(node => Components.patchTemplate(node, templates));\n\t\t}\n\t}\n\n\n\tstatic defineDirective(modelClass: MetadataClass, opts: DirectiveOptions, metadata: MetadataContext) {\n\t\tif (!(opts as any as DirectiveRef<Type<any>>).signals) {\n\t\t\tconst scanParent = !metadataHoler.has(Object.getPrototypeOf(modelClass));\n\t\t\t(opts as any as DirectiveRef<Type<any>>).signals = RuntimeClassMetadata.scanMetadata(modelClass, scanParent);\n\t\t}\n\t\tthis.scanRuntimeSignals(modelClass, opts as any as DirectiveRef<Type<any>>, metadata);\n\t\tObject.assign(metadata, opts);\n\t\tif (metadata.hostListeners?.length || metadata.hostBindings?.length) {\n\t\t\tconst hostNode = parseHostNode({\n\t\t\t\tprototype: modelClass.prototype,\n\t\t\t\thostBindings: metadata.hostBindings,\n\t\t\t\thostListeners: metadata.hostListeners,\n\t\t\t});\n\t\t\tmetadata.viewBindings = hostNode.host;\n\t\t}\n\t\tmetadata.modelClass = modelClass;\n\t\tclassRegistryProvider.registerDirective(modelClass);\n\t\tconst successors: string[] = [];\n\t\tif (metadata.successor) {\n\t\t\tsuccessors.push(metadata.successor.trim());\n\t\t}\n\t\tif (Array.isArray(metadata.successors)) {\n\t\t\tsuccessors.push(...metadata.successors.map(s => s.trim()));\n\t\t}\n\t\tmetadata.successors = successors;\n\t\tdirectiveRegistry.register(opts.selector, {\n\t\t\tinputs: (metadata.inputs as PropertyRef[])?.map(input => input.viewAttribute),\n\t\t\toutputs: (metadata.outputs as PropertyRef[])?.map(output => output.viewAttribute),\n\t\t\tsuccessors: successors,\n\t\t});\n\t}\n\n\tstatic definePipe<T extends Type<any>>(modelClass: MetadataClass<T>, opts: PipeOptions, metadata: MetadataContext) {\n\t\tObject.assign(metadata, opts);\n\t\tmetadata.modelClass = modelClass;\n\t\tclassRegistryProvider.registerPipe(modelClass);\n\t}\n\n\tstatic defineInjectable<T extends Type<any>>(modelClass: MetadataClass<T>, opts: InjectableOptions, metadata: MetadataContext) {\n\t\tObject.assign(metadata, opts);\n\t\tmetadata.modelClass = modelClass;\n\t\tmetadata.name = modelClass.name;\n\t\tclassRegistryProvider.registerInjectable(modelClass);\n\t\tprovide(modelClass);\n\t}\n\n\tstatic defineComponent<T extends Type<any>>(modelClass: MetadataClass<T>, opts: ComponentOptions<T>, metadata: MetadataContext) {\n\t\tif (!(opts as any as ComponentRef<T>).signals) {\n\t\t\tconst scanParent = !metadataHoler.has(Object.getPrototypeOf(modelClass));\n\t\t\t(opts as any as ComponentRef<T>).signals = RuntimeClassMetadata.scanMetadata(modelClass, scanParent);\n\t\t}\n\t\tthis.scanRuntimeSignals(modelClass, opts as any as ComponentRef<T>, metadata);\n\t\tconst componentRef = Object.assign(metadata, opts) as any as ComponentRef<T>;\n\t\tcomponentRef.extend = findByTagName(opts.extend);\n\t\tcomponentRef.extendCustomElement = !!opts.extend && isValidCustomElementName(opts.extend);\n\t\tif (typeof componentRef.template === 'string') {\n\t\t\tif (componentRef.styles) {\n\t\t\t\tconst template = `<style>${componentRef.styles}</style>${componentRef.template}`;\n\t\t\t\tcomponentRef.template = htmlParser.toDomRootNode(template);\n\t\t\t} else {\n\t\t\t\tcomponentRef.template = htmlParser.toDomRootNode(componentRef.template);\n\t\t\t}\n\t\t\tbuildExpressionNodes(componentRef.template);\n\t\t} else if (typeof componentRef.template === 'object') {\n\t\t\tbuildExpressionNodes(componentRef.template);\n\t\t} else if (typeof componentRef.compiledTemplate === 'object') {\n\t\t\thtmlParser.deserializeNode(componentRef.compiledTemplate);\n\t\t\tdeserializeExpressionNodes(componentRef.compiledTemplate);\n\t\t\tcomponentRef.template = componentRef.compiledTemplate;\n\t\t\tcomponentRef.compiledTemplate = undefined;\n\t\t}\n\n\t\tif (!componentRef.template && /template/g.test(componentRef.encapsulation)) {\n\t\t\tconst template = document.querySelector('#' + componentRef.selector);\n\t\t\tif (template && template instanceof HTMLTemplateElement) {\n\t\t\t\tcomponentRef.template = templateParser.parse(template);\n\t\t\t\tbuildExpressionNodes(componentRef.template);\n\t\t\t} else {\n\t\t\t\t// didn't find this template in 'index.html' document\n\t\t\t}\n\t\t}\n\n\t\tcomponentRef.inputs ||= Components.emptyList();\n\t\tcomponentRef.outputs ||= Components.emptyList();\n\t\tcomponentRef.viewChild ||= Components.emptyList();\n\t\tcomponentRef.ViewChildren ||= Components.emptyList();\n\t\tcomponentRef.hostBindings ||= Components.emptyList();\n\t\tcomponentRef.hostListeners ||= Components.emptyList();\n\t\tcomponentRef.encapsulation ||= 'custom';\n\t\tcomponentRef.isShadowDom = /shadow/g.test(componentRef.encapsulation);\n\t\tif (componentRef.isShadowDom) {\n\t\t\tcomponentRef.shadowRootInit = Object.assign({}, DEFAULT_SHADOW_ROOT_INIT, (componentRef.shadowRootInit ?? {}));\n\t\t}\n\n\t\tif (componentRef.hostListeners.length || componentRef.hostBindings.length) {\n\t\t\tconst hostNode = parseHostNode({\n\t\t\t\tprototype: modelClass.prototype,\n\t\t\t\tselector: componentRef.selector,\n\t\t\t\thostBindings: componentRef.hostBindings,\n\t\t\t\thostListeners: componentRef.hostListeners,\n\t\t\t});\n\t\t\tcomponentRef.viewBindings = hostNode.host;\n\t\t\tcomponentRef.windowBindings = hostNode.window;\n\n\t\t\tif (typeof componentRef.template === 'function') {\n\t\t\t\tconst creator = componentRef.template;\n\t\t\t\tcomponentRef.template = (model: T) => {\n\t\t\t\t\tconst template = creator(model);\n\t\t\t\t\tif (hostNode.template) {\n\t\t\t\t\t\tComponents.patchTemplate(template, hostNode.template);\n\t\t\t\t\t}\n\t\t\t\t\treturn template;\n\t\t\t\t};\n\t\t\t} else if (hostNode.template) {\n\t\t\t\tComponents.patchTemplate(componentRef.template, hostNode.template);\n\t\t\t}\n\n\t\t}\n\n\t\tif (!(componentRef.formAssociated === true || typeof componentRef.formAssociated === 'function')) {\n\t\t\tcomponentRef.formAssociated = false;\n\t\t}\n\n\t\tif (componentRef.isShadowDom && componentRef.extend.name) {\n\t\t\tcomponentRef.isShadowDom = canAttachShadow(componentRef.extend.name);\n\t\t}\n\n\t\tcomponentRef.modelClass = modelClass;\n\t\tcomponentRef.viewClass = initCustomElementView(modelClass, componentRef);\n\n\t\tclassRegistryProvider.registerComponent(modelClass);\n\t\tclassRegistryProvider.registerView(componentRef.viewClass);\n\n\t\tconst options: ElementDefinitionOptions = {};\n\t\tconst parentTagName = componentRef.extend?.name;\n\t\tif (parentTagName) {\n\t\t\tif (parentTagName !== '!' && parentTagName.indexOf('-') === -1) {\n\t\t\t\toptions.extends = parentTagName;\n\t\t\t}\n\t\t}\n\n\n\t\tcustomElements.define(\n\t\t\tcomponentRef.selector as string,\n\t\t\tcomponentRef.viewClass as CustomElementConstructor,\n\t\t\toptions\n\t\t);\n\n\t}\n\n\tstatic defineView<T extends HTMLElement>(viewClass: MetadataClass<T>, opt: { selector: string } & ElementDefinitionOptions) {\n\t\tclassRegistryProvider.registerView(viewClass);\n\t\tconst { selector, ...definition } = opt;\n\t\tcustomElements.define(\n\t\t\tselector,\n\t\t\tviewClass,\n\t\t\tdefinition,\n\t\t);\n\t}\n\n\tprivate static scanRuntimeSignals<T extends Type<any>>(modelClass: MetadataClass<T>, opts: { signals: SignalRuntimeMetadata[] }, metadata: MetadataContext) {\n\t\tif (!opts.signals) {\n\t\t\treturn;\n\t\t}\n\t\tconst signals = opts.signals;\n\t\tsignals.filter(item => item.signal === 'input')\n\t\t\t.flatMap(item => item.options)\n\t\t\t.forEach(option => ReflectComponents.addInput(metadata, option.name, option.alias));\n\t\tsignals.filter(item => item.signal === 'formValue')\n\t\t\t.flatMap(item => item.options)\n\t\t\t.forEach(option => ReflectComponents.addInput(metadata, option.name, 'view'));\n\t\tsignals.filter(item => item.signal === 'output')\n\t\t\t.flatMap(item => item.options)\n\t\t\t.forEach(option => ReflectComponents.addOutput(metadata, option.name, option.alias, {}));\n\t\tsignals.filter(item => item.signal === 'view')\n\t\t\t.flatMap(item => item.options)\n\t\t\t.forEach(option => ReflectComponents.setComponentView(metadata, option.name));\n\n\t\tsignals.filter(item => item.signal === 'viewChild')\n\t\t\t.flatMap(item => item.options)\n\t\t\t.forEach(option => ReflectComponents.addViewChild(metadata, option.name, 'ɵSignal', {}));\n\t}\n\n}\n"]}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import type { ReactiveScope,
|
|
2
|
-
import type {
|
|
3
|
-
import { EventEmitter } from './events.js';
|
|
1
|
+
import type { ReactiveScope, ReactiveControlScope, Context, SignalScope } from '@ibyar/expressions';
|
|
2
|
+
import type { Type } from '../utils/typeof.js';
|
|
4
3
|
import { ComponentRef } from './component.js';
|
|
5
4
|
import { AuroraZone } from '../zone/zone.js';
|
|
6
5
|
import { PropertyRef } from './reflect.js';
|
|
6
|
+
import { InjectionProvider } from '../di/provider.js';
|
|
7
|
+
import { ChangeDetectorRef } from '../linker/change-detector-ref.js';
|
|
8
|
+
import { ComponentRender } from '../view/render.js';
|
|
7
9
|
export interface CustomElement {
|
|
8
10
|
adoptedCallback(): void;
|
|
9
11
|
attributeChangedCallback(name: string, oldValue: any, newValue: any): void;
|
|
@@ -16,34 +18,25 @@ export type NodeContextType<T> = {
|
|
|
16
18
|
};
|
|
17
19
|
export interface BaseComponent<T> extends CustomElement {
|
|
18
20
|
_model: ModelType<T>;
|
|
19
|
-
_modelScope:
|
|
21
|
+
_modelScope: ReactiveControlScope<T & Context>;
|
|
20
22
|
_signalScope: SignalScope;
|
|
21
23
|
_viewScope: ReactiveScope<{
|
|
22
24
|
'this': BaseComponent<T>;
|
|
23
25
|
}>;
|
|
24
26
|
_zone: AuroraZone;
|
|
27
|
+
_provider: InjectionProvider;
|
|
28
|
+
_detector: ChangeDetectorRef;
|
|
29
|
+
_render: ComponentRender<any>;
|
|
25
30
|
getComponentRef(): ComponentRef<T>;
|
|
26
|
-
hasInputStartWith(viewProp: string): boolean;
|
|
27
|
-
getInputStartWith(viewProp: string): PropertyRef | undefined;
|
|
28
31
|
getInput(viewProp: string): PropertyRef | undefined;
|
|
29
32
|
getInputValue(viewProp: string): any;
|
|
30
33
|
setInputValue(viewProp: string, value: any): void;
|
|
31
|
-
hasInput(viewProp: string): boolean;
|
|
32
|
-
hasProp(propName: string): boolean;
|
|
33
|
-
hasOutput(viewProp: string): boolean;
|
|
34
|
-
getOutput(viewProp: string): PropertyRef | undefined;
|
|
35
|
-
getEventEmitter<V>(viewProp: string): EventEmitter<V> | undefined;
|
|
36
|
-
triggerOutput(eventName: string, value?: any): void;
|
|
37
34
|
onDestroy(callback: () => void): void;
|
|
38
|
-
/**
|
|
39
|
-
* apply change detection
|
|
40
|
-
*/
|
|
41
|
-
detectChanges(): void;
|
|
42
35
|
}
|
|
43
36
|
export interface HTMLComponent<T> extends BaseComponent<T>, HTMLElement {
|
|
44
37
|
}
|
|
45
38
|
export declare function isHTMLComponent(object: any): object is HTMLComponent<any>;
|
|
46
|
-
export declare function isHTMLComponentOfType<T extends object>(object: any, typeClass:
|
|
39
|
+
export declare function isHTMLComponentOfType<T extends object>(object: any, typeClass: Type<T>): object is HTMLComponent<T>;
|
|
47
40
|
export declare function isHTMLElement(element: HTMLElement): element is HTMLElement;
|
|
48
41
|
export declare function isHTMLUnknownElement(element: HTMLElement): element is HTMLElement;
|
|
49
42
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-element.d.ts","sourceRoot":"","sources":["../../../src/core/component/custom-element.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACpG,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"custom-element.d.ts","sourceRoot":"","sources":["../../../src/core/component/custom-element.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export function isHTMLComponent(object) {
|
|
2
|
-
return Reflect.has(object, '_model')
|
|
3
|
-
&& object instanceof HTMLElement;
|
|
2
|
+
return object instanceof HTMLElement && Reflect.has(object, '_model');
|
|
4
3
|
}
|
|
5
4
|
export function isHTMLComponentOfType(object, typeClass) {
|
|
6
5
|
return isHTMLComponent(object)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-element.js","sourceRoot":"","sources":["../../../src/core/component/custom-element.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"custom-element.js","sourceRoot":"","sources":["../../../src/core/component/custom-element.ts"],"names":[],"mappings":"AA0CA,MAAM,UAAU,eAAe,CAAC,MAAW;IAC1C,OAAO,MAAM,YAAY,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAmB,MAAW,EAAE,SAAkB;IACtF,OAAO,eAAe,CAAC,MAAM,CAAC;WAC1B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,SAAS,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAoB;IACjD,OAAO,OAAO,IAAI,OAAO,YAAY,WAAW,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAoB;IACxD,OAAO,OAAO,IAAI,OAAO,YAAY,kBAAkB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC5F,CAAC;AAqHD,MAAM,UAAU,cAAc,CAAC,GAAQ;IACtC,OAAO,GAAG;WACN,OAAO,GAAG,KAAK,QAAQ;WACvB,OAAO,GAAG,CAAC,UAAU,KAAK,UAAU;WACpC,OAAO,GAAG,CAAC,gBAAgB,KAAK,UAAU,CAAC;AAChD,CAAC","sourcesContent":["import type { ReactiveScope, ReactiveControlScope, Context, SignalScope } from '@ibyar/expressions';\nimport type { Type } from '../utils/typeof.js';\nimport { ComponentRef } from './component.js';\nimport { AuroraZone } from '../zone/zone.js';\nimport { PropertyRef } from './reflect.js';\nimport { InjectionProvider } from '../di/provider.js';\nimport { ChangeDetectorRef } from '../linker/change-detector-ref.js';\nimport { ComponentRender } from '../view/render.js';\n\nexport interface CustomElement {\n\tadoptedCallback(): void;\n\tattributeChangedCallback(name: string, oldValue: any, newValue: any): void;\n\tconnectedCallback(): void;\n\tdisconnectedCallback(): void;\n}\n\nexport type ModelType<T> = T & Context;\n\nexport type NodeContextType<T> = { 'this': BaseComponent<T> };\n\nexport interface BaseComponent<T> extends CustomElement {\n\n\t_model: ModelType<T>;\n\t_modelScope: ReactiveControlScope<T & Context>;\n\t_signalScope: SignalScope;\n\t_viewScope: ReactiveScope<{ 'this': BaseComponent<T> }>;\n\t_zone: AuroraZone;\n\t_provider: InjectionProvider;\n\t_detector: ChangeDetectorRef;\n\t_render: ComponentRender<any>;\n\n\tgetComponentRef(): ComponentRef<T>;\n\tgetInput(viewProp: string): PropertyRef | undefined;\n\tgetInputValue(viewProp: string): any;\n\tsetInputValue(viewProp: string, value: any): void;\n\n\tonDestroy(callback: () => void): void;\n\n}\n\nexport interface HTMLComponent<T> extends BaseComponent<T>, HTMLElement { }\n\nexport function isHTMLComponent(object: any): object is HTMLComponent<any> {\n\treturn object instanceof HTMLElement && Reflect.has(object, '_model');\n}\n\nexport function isHTMLComponentOfType<T extends object>(object: any, typeClass: Type<T>): object is HTMLComponent<T> {\n\treturn isHTMLComponent(object)\n\t\t&& Reflect.get(object, '_model') instanceof typeClass;\n}\n\nexport function isHTMLElement(element: HTMLElement): element is HTMLElement {\n\treturn element && element instanceof HTMLElement && !element.tagName?.includes('-');\n}\n\nexport function isHTMLUnknownElement(element: HTMLElement): element is HTMLElement {\n\treturn element && element instanceof HTMLUnknownElement && !element.tagName?.includes('-');\n}\n\n/**\n * Lifecycle callbacks\n * A map, whose keys are the strings \"connectedCallback\", \"disconnectedCallback\", \"adoptedCallback\", \"attributeChangedCallback\", \n * \"formAssociatedCallback\", \"formDisabledCallback\", \"formResetCallback\", and \"formStateRestoreCallback\" \n * https://html.spec.whatwg.org/multipage/custom-elements.html#concept-custom-element-definition-lifecycle-callbacks\n * \n * A form-associated custom element API includes a set of extra lifecycle callbacks to tie in to the form lifecycle.\n * The callbacks are optional: only implement a callback if your element needs to do something at that point in the lifecycle.\n * https://html.spec.whatwg.org/multipage/custom-elements.html#the-elementinternals-interface \n * https://docs.google.com/document/d/1JO8puctCSpW-ZYGU8lF-h4FWRIDQNDVexzHoOQ2iQmY/edit\n */\nexport interface FormAssociatedCustomElement extends CustomElement {\n\n\t/**\n\t * Called when the browser associates the element with a form element,\n\t * or disassociates the element from a form element.\n\t * @param form \n\t */\n\tformAssociatedCallback(form: HTMLFormElement | null): void;\n\n\t/**\n\t * Called after the disabled state of the element changes,\n\t * either because the disabled attribute of this element was added or removed;\n\t * or because the disabled state changed on a <fieldset> that's an ancestor of this element.\n\t * The disabled parameter represents the new disabled state of the element.\n\t * The element may, for example, disable elements in its shadow DOM when it is disabled.\n\t * @param disabled \n\t */\n\tformDisabledCallback(disabled: boolean): void;\n\n\t/**\n\t * Called after the form is reset.\n\t * The element should reset itself to some kind of default state.\n\t * For <input> elements, this usually involves setting the value property to\n\t * match the value attribute set in markup (or in the case of a checkbox,\n\t * setting the checked property to match the checked attribute.\n\t */\n\tformResetCallback(): void;\n\n\t/**\n\t * Called in one of two circumstances:\n\t * When the browser restores the state of the element (for example, after a navigation, or when the browser restarts).\n\t * The mode argument is \"restore\" in this case.\n\t * \n\t * When the browser's input-assist features such as form auto filling sets a value.\n\t * The mode argument is \"autocomplete\" in this case.\n\t * \n\t * The type of the first argument depends on how the setFormValue() method was called.\n\t * For more details, see Restoring form state.\n\t */\n\tformStateRestoreCallback(value: any, mode: 'restore' | 'autocomplete'): void;\n}\n\nexport type WriteValueMode = 'restore' | 'autocomplete' | 'reset';\n\nexport type WriteValueOptions<T> = { value: T | null, mode?: 'restore' | 'autocomplete' } | { value?: undefined, mode: 'reset' };\n\n\nexport interface ValueControl<T = any> {\n\t/**\n\t * reset the value of the\n\t * @param value \n\t * @param mode \n\t */\n\twriteValue(opt: { value?: undefined, mode: 'reset' }): void;\n\n\t/**\n\t * \n\t * When the browser restores the state of the element (for example, after a navigation, or when the browser restarts).\n\t * The mode argument is \"restore\" in this case.\n\t * \n\t * When the browser's input-assist features such as form auto filling sets a value.\n\t * The mode argument is \"autocomplete\" in this case.\n\t * \n\t * @param opt: options contain the `value` to be written and `mode` represented by `restore` or `autocomplete` or `undefined`\n\t */\n\n\twriteValue(opt: { value: T | null, mode?: 'restore' | 'autocomplete' }): void;\n\n\twriteValue(opt: { value?: T | null, mode?: WriteValueMode }): void;\n\n\twriteValue(opt: WriteValueOptions<T>): void;\n\n\t/**\n\t * This method is called when new `ValueControl` assigned to the form associated element.\n\t * \n\t * When implementing the registerOnChange method in your own value accessor, save the given function so your class calls it at the appropriate time.\n\t * \n\t * ```ts\n\t * registerOnChange(fn: (_: any) => void): void {\n\t * \tthis._onChange = fn;\n\t * }\n\t * ```\n\t * \n\t * When the value changes in the UI, call the registered function to allow the forms API to update itself:\n\t * \n\t * ```ts\n\t * \n\t * onChange(event: Event){\n\t * \t\n\t * }\n\t * \n\t * ```\n\t * @param fn the function to be called when a control want to change the value of a form associated element.\n\t */\n\n\tregisterOnChange(fn: (value?: T | null) => void): void;\n\n\t/**\n\t * called when `disabled` attribute change.\n\t * @param isDisabled \n\t */\n\tsetDisabledState?(isDisabled: boolean): void;\n}\n\nexport function isValueControl(obj: any): obj is ValueControl {\n\treturn obj\n\t\t&& typeof obj === 'object'\n\t\t&& typeof obj.writeValue === 'function'\n\t\t&& typeof obj.registerOnChange === 'function';\n}\n\nexport interface BaseFormAssociatedComponent<T extends Object> extends BaseComponent<T>, FormAssociatedCustomElement {\n\treadonly internals: ElementInternals;\n\treadonly form: HTMLFormElement | null;\n\treadonly valueControl?: ValueControl<T>;\n\n\tregisterValueControl(valueControl: ValueControl): void;\n}\n\nexport interface FormAssociatedComponent<T extends Object, V = any> extends BaseFormAssociatedComponent<T>, HTMLComponent<T> {\n\n\tvalue: V | null;\n}\n\nexport type HTMLFormElement = HTMLButtonElement | HTMLDataListElement | HTMLFieldSetElement | HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n\n\nexport interface ConstructorOfView<T> {\n\tnew(): T;\n\treadonly prototype: T;\n}\n"]}
|
package/component/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/core/component/events.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,YAAY;IAEJ;IADZ,kBAAkB,CAAsB;IAChD,YAAoB,YAA6B;QAA7B,iBAAY,GAAZ,YAAY,CAAiB;IAAI,CAAC;IACtD,GAAG,CAAC,YAA+B;QAClC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC9B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC;IACD,WAAW;QACV,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE;gBAChD,YAAY,CAAC,WAAW,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;CACD;AAQD,MAAM,OAAO,YAAY;IAChB,WAAW,GAAoC,IAAI,GAAG,EAAE,CAAC;IACjE,gBAAgB,CAAC;IACjB,IAAI,CAAC,KAAS;QACb,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YACtC,IAAI,CAAC;gBACJ,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,CAAC;oBACJ,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC1B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;gBAC/C,CAAC;YACF,CAAC;oBAAS,CAAC;gBACV,IAAI,CAAC;oBACJ,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACxB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;gBAC/C,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IACD,SAAS,CAAC,IAAU,EAAE,KAAW,EAAE,QAAc;QAChD,MAAM,YAAY,GAAoB,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9D,OAAO,YAAY,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,YAA6B;QACnC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC;CACD","sourcesContent":["export class Subscription<T> {\n\tprivate othersSubscription: Subscription<any>[];\n\tconstructor(private eventEmitter: EventEmitter<T>) { }\n\tadd(subscription: Subscription<any>) {\n\t\tif (!this.othersSubscription) {\n\t\t\tthis.othersSubscription = [];\n\t\t}\n\t\tthis.othersSubscription.push(subscription);\n\t}\n\tunsubscribe(): void {\n\t\tthis.eventEmitter.remove(this);\n\t\tif (this.othersSubscription) {\n\t\t\tthis.othersSubscription.forEach((subscription) => {\n\t\t\t\tsubscription.unsubscribe();\n\t\t\t});\n\t\t}\n\t}\n}\n\ninterface Subscribe {\n\tnext?: any;\n\terror?: any;\n\tcomplete?: any;\n}\n\nexport class EventEmitter<T> {\n\tprivate subscribers: Map<Subscription<T>, Subscribe> = new Map();\n\tconstructor() { }\n\temit(value?: T): void {\n\t\tthis.subscribers.forEach((subscribe) => {\n\t\t\ttry {\n\t\t\t\tsubscribe.next(value);\n\t\t\t} catch (error) {\n\t\t\t\ttry {\n\t\t\t\t\tsubscribe.error?.(error);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error('error: handling event', error);\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\ttry {\n\t\t\t\t\tsubscribe.complete?.();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error('error: handling event', error);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\tsubscribe(next?: any, error?: any, complete?: any): Subscription<T> {\n\t\tconst subscription: Subscription<T> = new Subscription(this);\n\t\tthis.subscribers.set(subscription, { next, error, complete });\n\t\treturn subscription;\n\t}\n\n\tremove(subscription: Subscription<T>) {\n\t\tthis.subscribers.delete(subscription);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/core/component/events.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,YAAY;IAEJ;IADZ,kBAAkB,CAAsB;IAChD,YAAoB,YAA6B;QAA7B,iBAAY,GAAZ,YAAY,CAAiB;IAAI,CAAC;IACtD,GAAG,CAAC,YAA+B;QAClC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC9B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC;IACD,WAAW;QACV,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE;gBAChD,YAAY,CAAC,WAAW,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;CACD;AAQD,MAAM,OAAO,YAAY;IAChB,WAAW,GAAoC,IAAI,GAAG,EAAE,CAAC;IACjE,gBAAgB,CAAC;IACjB,IAAI,CAAC,KAAS;QACb,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YACtC,IAAI,CAAC;gBACJ,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,CAAC;oBACJ,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC1B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;gBAC/C,CAAC;YACF,CAAC;oBAAS,CAAC;gBACV,IAAI,CAAC;oBACJ,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACxB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;gBAC/C,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IACD,SAAS,CAAC,IAAU,EAAE,KAAW,EAAE,QAAc;QAChD,MAAM,YAAY,GAAoB,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9D,OAAO,YAAY,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,YAA6B;QACnC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC;CACD","sourcesContent":["export class Subscription<T> {\n\tprivate othersSubscription: Subscription<any>[];\n\tconstructor(private eventEmitter: EventEmitter<T>) { }\n\tadd(subscription: Subscription<any>) {\n\t\tif (!this.othersSubscription) {\n\t\t\tthis.othersSubscription = [];\n\t\t}\n\t\tthis.othersSubscription.push(subscription);\n\t}\n\tunsubscribe(): void {\n\t\tthis.eventEmitter.remove(this);\n\t\tif (this.othersSubscription) {\n\t\t\tthis.othersSubscription.forEach((subscription) => {\n\t\t\t\tsubscription.unsubscribe();\n\t\t\t});\n\t\t}\n\t}\n}\n\ninterface Subscribe {\n\tnext?: any;\n\terror?: any;\n\tcomplete?: any;\n}\n\nexport class EventEmitter<T> {\n\tprivate subscribers: Map<Subscription<T>, Subscribe> = new Map();\n\tconstructor() { }\n\temit(value?: T): void {\n\t\tthis.subscribers.forEach((subscribe) => {\n\t\t\ttry {\n\t\t\t\tsubscribe.next(value);\n\t\t\t} catch (error) {\n\t\t\t\ttry {\n\t\t\t\t\tsubscribe.error?.(error);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error('error: handling event', error);\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\ttry {\n\t\t\t\t\tsubscribe.complete?.();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error('error: handling event', error);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\tsubscribe(next?: any, error?: any, complete?: any): Subscription<T> {\n\t\tconst subscription: Subscription<T> = new Subscription(this);\n\t\tthis.subscribers.set(subscription, { next, error, complete });\n\t\treturn subscription;\n\t}\n\n\tremove(subscription: Subscription<T>) {\n\t\tthis.subscribers.delete(subscription);\n\t}\n}\n\n"]}
|