@brandup/ui 1.0.44 → 2.0.2
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 +482 -33
- package/dist/cjs/constants.js +14 -0
- package/dist/cjs/constants.js.map +1 -0
- package/dist/cjs/dom/bind-each.js +90 -0
- package/dist/cjs/dom/bind-each.js.map +1 -0
- package/dist/cjs/dom/bind.js +29 -0
- package/dist/cjs/dom/bind.js.map +1 -0
- package/dist/cjs/dom/binding-cleanup.js +162 -0
- package/dist/cjs/dom/binding-cleanup.js.map +1 -0
- package/dist/cjs/dom/dom.js +184 -0
- package/dist/cjs/dom/dom.js.map +1 -0
- package/dist/cjs/dom/helpers.js +33 -0
- package/dist/cjs/dom/helpers.js.map +1 -0
- package/dist/cjs/dom/index.js +14 -0
- package/dist/cjs/dom/index.js.map +1 -0
- package/dist/cjs/dom/tag.js +207 -0
- package/dist/cjs/dom/tag.js.map +1 -0
- package/dist/cjs/element.js +265 -0
- package/dist/cjs/element.js.map +1 -0
- package/dist/cjs/events.js +204 -0
- package/dist/cjs/events.js.map +1 -0
- package/dist/cjs/ext.js +20 -0
- package/dist/cjs/ext.js.map +1 -0
- package/dist/cjs/index.js +37 -313
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/reactive/computed.js +36 -0
- package/dist/cjs/reactive/computed.js.map +1 -0
- package/dist/cjs/reactive/effect.js +197 -0
- package/dist/cjs/reactive/effect.js.map +1 -0
- package/dist/cjs/reactive/reactive.js +106 -0
- package/dist/cjs/reactive/reactive.js.map +1 -0
- package/dist/mjs/constants.js +10 -0
- package/dist/mjs/constants.js.map +1 -0
- package/dist/mjs/dom/bind-each.js +86 -0
- package/dist/mjs/dom/bind-each.js.map +1 -0
- package/dist/mjs/dom/bind.js +26 -0
- package/dist/mjs/dom/bind.js.map +1 -0
- package/dist/mjs/dom/binding-cleanup.js +156 -0
- package/dist/mjs/dom/binding-cleanup.js.map +1 -0
- package/dist/mjs/dom/dom.js +169 -0
- package/dist/mjs/dom/dom.js.map +1 -0
- package/dist/mjs/dom/helpers.js +29 -0
- package/dist/mjs/dom/helpers.js.map +1 -0
- package/dist/mjs/dom/index.js +12 -0
- package/dist/mjs/dom/index.js.map +1 -0
- package/dist/mjs/dom/tag.js +203 -0
- package/dist/mjs/dom/tag.js.map +1 -0
- package/dist/mjs/element.js +260 -0
- package/dist/mjs/element.js.map +1 -0
- package/dist/mjs/events.js +202 -0
- package/dist/mjs/events.js.map +1 -0
- package/dist/mjs/ext.js +18 -0
- package/dist/mjs/ext.js.map +1 -0
- package/dist/mjs/index.js +11 -314
- package/dist/mjs/index.js.map +1 -1
- package/dist/mjs/reactive/computed.js +33 -0
- package/dist/mjs/reactive/computed.js.map +1 -0
- package/dist/mjs/reactive/effect.js +187 -0
- package/dist/mjs/reactive/effect.js.map +1 -0
- package/dist/mjs/reactive/reactive.js +102 -0
- package/dist/mjs/reactive/reactive.js.map +1 -0
- package/dist/types.d.ts +489 -14
- package/package.json +9 -1
package/dist/cjs/index.js
CHANGED
|
@@ -1,319 +1,43 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
once(eventName, callback, context) {
|
|
14
|
-
const wrapper = (...args) => {
|
|
15
|
-
this.off(eventName, wrapper, context);
|
|
16
|
-
callback.apply(context || this, args);
|
|
17
|
-
};
|
|
18
|
-
return this.on(eventName, wrapper, context);
|
|
19
|
-
}
|
|
20
|
-
off(eventName, callback, context) {
|
|
21
|
-
if (!eventName && !callback && !context)
|
|
22
|
-
throw new Error("Require off arguments.");
|
|
23
|
-
const events = this._events;
|
|
24
|
-
if (!events)
|
|
25
|
-
return this;
|
|
26
|
-
callback = callback || undefined;
|
|
27
|
-
context = context || undefined;
|
|
28
|
-
const eventNames = eventName ? [eventName.toLowerCase()] : Object.keys(events);
|
|
29
|
-
for (let i = 0; i < eventNames.length; i++) {
|
|
30
|
-
const name = eventNames[i];
|
|
31
|
-
const currentCallbacks = events[name];
|
|
32
|
-
if (!currentCallbacks)
|
|
33
|
-
continue;
|
|
34
|
-
// reset callback list
|
|
35
|
-
const newCallbacks = events[name] = [];
|
|
36
|
-
if (callback || context) {
|
|
37
|
-
currentCallbacks.forEach(c => {
|
|
38
|
-
const callbackMatch = !callback || c.callback === callback;
|
|
39
|
-
const contextMatch = !context || c.context === context;
|
|
40
|
-
if (callbackMatch && contextMatch)
|
|
41
|
-
return;
|
|
42
|
-
newCallbacks.push(c);
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
if (!newCallbacks.length)
|
|
46
|
-
delete events[name];
|
|
47
|
-
}
|
|
48
|
-
return this;
|
|
49
|
-
}
|
|
50
|
-
listenTo(source, eventName, callback) {
|
|
51
|
-
this._addListeningTo(source, eventName);
|
|
52
|
-
source.on(eventName, callback, this);
|
|
53
|
-
return this;
|
|
54
|
-
}
|
|
55
|
-
listenToOnce(source, eventName, callback) {
|
|
56
|
-
this._addListeningTo(source, eventName);
|
|
57
|
-
source.once(eventName, callback, this);
|
|
58
|
-
return this;
|
|
59
|
-
}
|
|
60
|
-
stopListening(source, eventName, callback) {
|
|
61
|
-
if (!this._listeningTo)
|
|
62
|
-
return this;
|
|
63
|
-
let sourceListening;
|
|
64
|
-
if (source) {
|
|
65
|
-
if (!source._listenId)
|
|
66
|
-
throw new Error("Emmiter is not set id.");
|
|
67
|
-
sourceListening = this._listeningTo[source._listenId];
|
|
68
|
-
}
|
|
69
|
-
const sources = sourceListening ? [sourceListening] : Object.values(this._listeningTo);
|
|
70
|
-
sources.forEach(source => {
|
|
71
|
-
const removeEventNames = eventName ? [eventName] : source.events;
|
|
72
|
-
removeEventNames.forEach(eventName => {
|
|
73
|
-
source.emmiter.off(eventName, callback, this);
|
|
74
|
-
const index = source.events.indexOf(eventName);
|
|
75
|
-
if (index >= 0)
|
|
76
|
-
source.events.splice(index, 1);
|
|
77
|
-
});
|
|
78
|
-
if (!source.events.length && source.emmiter._listenId && this._listeningTo)
|
|
79
|
-
delete this._listeningTo[source.emmiter._listenId];
|
|
80
|
-
});
|
|
81
|
-
if (!this._listeningTo || Object.keys(this._listeningTo).length === 0)
|
|
82
|
-
delete this._listeningTo;
|
|
83
|
-
return this;
|
|
84
|
-
}
|
|
85
|
-
_addListeningTo(source, eventName) {
|
|
86
|
-
const listeningTo = this._listeningTo || (this._listeningTo = {});
|
|
87
|
-
const listenId = source._listenId || (source._listenId = `l${ListenCounter++}`);
|
|
88
|
-
const listenTo = listeningTo[listenId] || (listeningTo[listenId] = { emmiter: source, events: [] });
|
|
89
|
-
eventName = eventName.toLowerCase();
|
|
90
|
-
if (listenTo.events.indexOf(eventName) !== -1)
|
|
91
|
-
throw new Error(`Event ${eventName} already listening.`);
|
|
92
|
-
listenTo.events.push(eventName);
|
|
93
|
-
}
|
|
94
|
-
stopAllListeners() {
|
|
95
|
-
if (!this._events)
|
|
96
|
-
return;
|
|
97
|
-
Object.values(this._events).forEach(callbacks => {
|
|
98
|
-
callbacks.forEach(callback => {
|
|
99
|
-
if (callback.context instanceof EventEmitter)
|
|
100
|
-
callback.context.stopListening(this);
|
|
101
|
-
});
|
|
102
|
-
});
|
|
103
|
-
delete this._events;
|
|
104
|
-
}
|
|
105
|
-
trigger(eventName, ...args) {
|
|
106
|
-
eventName = eventName.toLowerCase();
|
|
107
|
-
if (eventName === "all")
|
|
108
|
-
throw new Error('Not allow trigger all event.');
|
|
109
|
-
if (!this._events)
|
|
110
|
-
return this;
|
|
111
|
-
const events = this._getEvents(eventName);
|
|
112
|
-
const allEvents = this._getEvents("all");
|
|
113
|
-
this._triggerEvent(events, ...args);
|
|
114
|
-
this._triggerEvent(allEvents, ...args);
|
|
115
|
-
return this;
|
|
116
|
-
}
|
|
117
|
-
_triggerEvent(events, ...args) {
|
|
118
|
-
if (!events || !events.length)
|
|
119
|
-
return;
|
|
120
|
-
for (let i = 0; i < events.length; i++) {
|
|
121
|
-
const event = events[i];
|
|
122
|
-
event.callback.apply(event.ctx, args);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
_getOrCreateEvents(eventName) {
|
|
126
|
-
eventName = eventName.toLowerCase();
|
|
127
|
-
const events = this._events || (this._events = {});
|
|
128
|
-
return events[eventName] || (events[eventName] = []);
|
|
129
|
-
}
|
|
130
|
-
_getEvents(eventName) {
|
|
131
|
-
if (!eventName)
|
|
132
|
-
return;
|
|
133
|
-
const events = this._events;
|
|
134
|
-
if (!events)
|
|
135
|
-
return;
|
|
136
|
-
return events[eventName];
|
|
137
|
-
}
|
|
138
|
-
stopEvents() {
|
|
139
|
-
this.stopListening();
|
|
140
|
-
this.stopAllListeners();
|
|
141
|
-
}
|
|
142
|
-
}
|
|
3
|
+
var events = require('./events.js');
|
|
4
|
+
var element = require('./element.js');
|
|
5
|
+
var ext = require('./ext.js');
|
|
6
|
+
var effect = require('./reactive/effect.js');
|
|
7
|
+
var reactive = require('./reactive/reactive.js');
|
|
8
|
+
var computed = require('./reactive/computed.js');
|
|
9
|
+
var index = require('./dom/index.js');
|
|
10
|
+
var constants = require('./constants.js');
|
|
11
|
+
var bind = require('./dom/bind.js');
|
|
12
|
+
var bindEach = require('./dom/bind-each.js');
|
|
143
13
|
|
|
144
|
-
const constants = {
|
|
145
|
-
ElemAttributeName: "uiElement",
|
|
146
|
-
ElemPropertyName: "uielement",
|
|
147
|
-
CommandAttributeName: "command",
|
|
148
|
-
CommandExecutingCssClassName: "executing"
|
|
149
|
-
};
|
|
150
14
|
|
|
151
|
-
var constants$1 = /*#__PURE__*/Object.freeze({
|
|
152
|
-
__proto__: null,
|
|
153
|
-
default: constants
|
|
154
|
-
});
|
|
155
15
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
if (nornalizedName in commands)
|
|
184
|
-
throw new Error(`Command "${name}" already registered.`);
|
|
185
|
-
commands[nornalizedName] = {
|
|
186
|
-
name: name,
|
|
187
|
-
execute,
|
|
188
|
-
canExecute
|
|
189
|
-
};
|
|
190
|
-
return this;
|
|
191
|
-
}
|
|
192
|
-
hasCommand(name) {
|
|
193
|
-
return this.__commands && name.toLowerCase() in this.__commands;
|
|
194
|
-
}
|
|
195
|
-
/** @internal */
|
|
196
|
-
__execCommand(name, target) {
|
|
197
|
-
if (this.__destroyed || !this.__element || !this.__commands)
|
|
198
|
-
throw new Error("UIElement is not set HTMLElement.");
|
|
199
|
-
const key = name.toLowerCase();
|
|
200
|
-
const command = this.__commands[key];
|
|
201
|
-
if (!command)
|
|
202
|
-
throw new Error(`Command "${name}" is not registered.`);
|
|
203
|
-
const context = {
|
|
204
|
-
target,
|
|
205
|
-
uiElem: this
|
|
206
|
-
};
|
|
207
|
-
if (command.isExecuting)
|
|
208
|
-
return { status: "already", context };
|
|
209
|
-
command.isExecuting = true;
|
|
210
|
-
if (!this._onCanExecCommand(name, target)) {
|
|
211
|
-
delete command.isExecuting;
|
|
212
|
-
return { status: "disallow", context };
|
|
213
|
-
}
|
|
214
|
-
if (command.canExecute && !command.canExecute(context)) {
|
|
215
|
-
delete command.isExecuting;
|
|
216
|
-
return { status: "disallow", context };
|
|
217
|
-
}
|
|
218
|
-
this.trigger("command", { element: this, name: command.name });
|
|
219
|
-
let isAsync;
|
|
220
|
-
try {
|
|
221
|
-
const commandResult = command.execute(context);
|
|
222
|
-
if (commandResult && commandResult instanceof Promise) {
|
|
223
|
-
isAsync = true;
|
|
224
|
-
target.classList.add(constants.CommandExecutingCssClassName);
|
|
225
|
-
commandResult
|
|
226
|
-
.finally(() => {
|
|
227
|
-
target.classList.remove(constants.CommandExecutingCssClassName);
|
|
228
|
-
delete command.isExecuting;
|
|
229
|
-
});
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
finally {
|
|
233
|
-
if (!isAsync)
|
|
234
|
-
delete command.isExecuting;
|
|
235
|
-
}
|
|
236
|
-
return { status: "success", context: context };
|
|
237
|
-
}
|
|
238
|
-
_onRenderElement(_elem) { }
|
|
239
|
-
_onCanExecCommand(_name, _elem) {
|
|
240
|
-
return true;
|
|
241
|
-
}
|
|
242
|
-
onDestroy(callback) {
|
|
243
|
-
if (!this.__element || !callback)
|
|
244
|
-
return;
|
|
245
|
-
if (callback instanceof UIElement)
|
|
246
|
-
callback.listenTo(this, "destroy", () => callback.destroy());
|
|
247
|
-
else if (callback instanceof Element)
|
|
248
|
-
this.on("destroy", () => callback.remove());
|
|
249
|
-
else if (typeof callback === "function")
|
|
250
|
-
this.on("destroy", () => callback());
|
|
251
|
-
else
|
|
252
|
-
throw new Error("Unsupported callback type.");
|
|
253
|
-
}
|
|
254
|
-
toString() { return this.typeName; }
|
|
255
|
-
destroy() {
|
|
256
|
-
if (this.__destroyed)
|
|
257
|
-
return;
|
|
258
|
-
this.__destroyed = true;
|
|
259
|
-
this.trigger("destroy", this);
|
|
260
|
-
super.stopEvents();
|
|
261
|
-
const elem = this.__element;
|
|
262
|
-
if (elem) {
|
|
263
|
-
delete elem.dataset[constants.ElemAttributeName];
|
|
264
|
-
delete elem[constants.ElemPropertyName];
|
|
265
|
-
}
|
|
266
|
-
delete this.__element;
|
|
267
|
-
delete this.__events;
|
|
268
|
-
delete this.__commands;
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
const findUiElementByCommand = (elem, commandName) => {
|
|
272
|
-
let current = elem;
|
|
273
|
-
while (current) {
|
|
274
|
-
if (current.dataset[constants.ElemAttributeName]) {
|
|
275
|
-
const uiElem = current[constants.ElemPropertyName];
|
|
276
|
-
if (uiElem.hasCommand(commandName))
|
|
277
|
-
return uiElem;
|
|
278
|
-
}
|
|
279
|
-
current = current.parentElement;
|
|
280
|
-
}
|
|
281
|
-
return null;
|
|
282
|
-
};
|
|
283
|
-
const commandClickHandler = (e) => {
|
|
284
|
-
let commandElem = e.target;
|
|
285
|
-
while (commandElem) {
|
|
286
|
-
if (commandElem.dataset[constants.CommandAttributeName])
|
|
287
|
-
break;
|
|
288
|
-
if (commandElem === e.currentTarget)
|
|
289
|
-
return;
|
|
290
|
-
commandElem = commandElem.parentElement;
|
|
291
|
-
}
|
|
292
|
-
if (!commandElem)
|
|
293
|
-
return;
|
|
294
|
-
const commandName = commandElem.dataset[constants.CommandAttributeName];
|
|
295
|
-
if (!commandName)
|
|
296
|
-
throw new Error("Command data attribute is not have value.");
|
|
297
|
-
const uiElem = findUiElementByCommand(commandElem, commandName);
|
|
298
|
-
if (uiElem) {
|
|
299
|
-
const result = uiElem.__execCommand(commandName, commandElem);
|
|
300
|
-
if (result.status == "success" && result.context.transparent)
|
|
301
|
-
return;
|
|
302
|
-
}
|
|
303
|
-
else
|
|
304
|
-
console.warn(`Not find handler for command "${commandName}".`);
|
|
305
|
-
e.preventDefault();
|
|
306
|
-
e.stopPropagation();
|
|
307
|
-
e.stopImmediatePropagation();
|
|
308
|
-
};
|
|
309
|
-
window.addEventListener("click", commandClickHandler, false);
|
|
310
|
-
|
|
311
|
-
HTMLElement.prototype.ui = function (factory) {
|
|
312
|
-
factory(this);
|
|
313
|
-
return this;
|
|
314
|
-
};
|
|
315
|
-
|
|
316
|
-
exports.EventEmitter = EventEmitter;
|
|
317
|
-
exports.UICONSTANTS = constants$1;
|
|
318
|
-
exports.UIElement = UIElement;
|
|
16
|
+
exports.EventEmitter = events.EventEmitter;
|
|
17
|
+
exports.UIElement = element.UIElement;
|
|
18
|
+
exports.UIElementBound = element.UIElementBound;
|
|
19
|
+
exports.destroyUI = element.destroyUI;
|
|
20
|
+
exports.initUICommands = element.initUICommands;
|
|
21
|
+
exports.enableElementExtensions = ext.enableElementExtensions;
|
|
22
|
+
exports.EffectScope = effect.EffectScope;
|
|
23
|
+
exports.ITERATE_KEY = effect.ITERATE_KEY;
|
|
24
|
+
exports.ReactiveEffect = effect.ReactiveEffect;
|
|
25
|
+
exports.effect = effect.effect;
|
|
26
|
+
exports.effectScope = effect.effectScope;
|
|
27
|
+
exports.nextTick = effect.nextTick;
|
|
28
|
+
exports.track = effect.track;
|
|
29
|
+
exports.trigger = effect.trigger;
|
|
30
|
+
exports.untrack = effect.untrack;
|
|
31
|
+
exports.isReactive = reactive.isReactive;
|
|
32
|
+
exports.reactive = reactive.reactive;
|
|
33
|
+
exports.toRaw = reactive.toRaw;
|
|
34
|
+
exports.ComputedRef = computed.ComputedRef;
|
|
35
|
+
exports.computed = computed.computed;
|
|
36
|
+
exports.DOM = index.DOM;
|
|
37
|
+
exports.UICONSTANTS = constants;
|
|
38
|
+
exports.Binding = bind.Binding;
|
|
39
|
+
exports.bind = bind.bind;
|
|
40
|
+
exports.BindingEach = bindEach.BindingEach;
|
|
41
|
+
exports.appendBindingEach = bindEach.appendBindingEach;
|
|
42
|
+
exports.bindEach = bindEach.bindEach;
|
|
319
43
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../source/events.ts","../../source/constants.ts","../../source/element.ts","../../source/ext.ts"],"sourcesContent":[null,null,null,null],"names":["UICONSTANTS"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var effect = require('./effect.js');
|
|
4
|
+
|
|
5
|
+
/** A lazily-evaluated, cached reactive value derived from other reactive state. */
|
|
6
|
+
class ComputedRef {
|
|
7
|
+
__value;
|
|
8
|
+
__dirty = true;
|
|
9
|
+
__effect;
|
|
10
|
+
constructor(getter) {
|
|
11
|
+
this.__effect = new effect.ReactiveEffect(getter, () => {
|
|
12
|
+
// a dependency changed: mark dirty and notify effects that read this computed
|
|
13
|
+
if (!this.__dirty) {
|
|
14
|
+
this.__dirty = true;
|
|
15
|
+
effect.trigger(this, "value");
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
/** The current value; recomputed on read only when its dependencies have changed. */
|
|
20
|
+
get value() {
|
|
21
|
+
if (this.__dirty) {
|
|
22
|
+
this.__value = this.__effect.run();
|
|
23
|
+
this.__dirty = false;
|
|
24
|
+
}
|
|
25
|
+
effect.track(this, "value");
|
|
26
|
+
return this.__value;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/** Create a {@link ComputedRef} from a getter. */
|
|
30
|
+
function computed(getter) {
|
|
31
|
+
return new ComputedRef(getter);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
exports.ComputedRef = ComputedRef;
|
|
35
|
+
exports.computed = computed;
|
|
36
|
+
//# sourceMappingURL=computed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computed.js","sources":["../../../../source/reactive/computed.ts"],"sourcesContent":[null],"names":["ReactiveEffect","trigger","track"],"mappings":";;;;AAEA;MACa,WAAW,CAAA;AACf,IAAA,OAAO;IACP,OAAO,GAAG,IAAI;AACL,IAAA,QAAQ;AAEzB,IAAA,WAAA,CAAY,MAAe,EAAA;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAIA,qBAAc,CAAC,MAAM,EAAE,MAAK;;AAE/C,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AAClB,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,gBAAAC,cAAO,CAAC,IAAI,EAAE,OAAO,CAAC;YACvB;AACD,QAAA,CAAC,CAAC;IACH;;AAGA,IAAA,IAAI,KAAK,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;AAClC,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACrB;AACA,QAAAC,YAAK,CAAC,IAAI,EAAE,OAAO,CAAC;QACpB,OAAO,IAAI,CAAC,OAAO;IACpB;AACA;AAED;AACM,SAAU,QAAQ,CAAI,MAAe,EAAA;AAC1C,IAAA,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC;AAC/B;;;;;"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/** Key used to track iteration/length dependencies (object key enumeration, array growth). */
|
|
4
|
+
const ITERATE_KEY = Symbol("iterate");
|
|
5
|
+
/**
|
|
6
|
+
* A reactive effect: a function whose reactive reads are tracked, so it re-runs
|
|
7
|
+
* whenever any of those reactive dependencies change.
|
|
8
|
+
*/
|
|
9
|
+
class ReactiveEffect {
|
|
10
|
+
__fn;
|
|
11
|
+
/** Dependency sets this effect is currently subscribed to. @internal */
|
|
12
|
+
deps = [];
|
|
13
|
+
__active = true;
|
|
14
|
+
/** Called instead of `run` when a dependency changes (used by `computed`). */
|
|
15
|
+
scheduler;
|
|
16
|
+
/** Invoked once when the effect is stopped. */
|
|
17
|
+
onStop;
|
|
18
|
+
constructor(__fn, scheduler) {
|
|
19
|
+
this.__fn = __fn;
|
|
20
|
+
this.scheduler = scheduler;
|
|
21
|
+
activeScope?.add(this);
|
|
22
|
+
}
|
|
23
|
+
/** Whether the effect is still active (not stopped). */
|
|
24
|
+
get active() { return this.__active; }
|
|
25
|
+
/** Run the effect, (re)collecting its dependencies. */
|
|
26
|
+
run() {
|
|
27
|
+
if (!this.__active)
|
|
28
|
+
return this.__fn();
|
|
29
|
+
cleanupEffect(this);
|
|
30
|
+
const prevEffect = activeEffect;
|
|
31
|
+
activeEffect = this;
|
|
32
|
+
try {
|
|
33
|
+
return this.__fn();
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
activeEffect = prevEffect;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/** Stop the effect: remove its subscriptions and run `onStop`. */
|
|
40
|
+
stop() {
|
|
41
|
+
if (!this.__active)
|
|
42
|
+
return;
|
|
43
|
+
cleanupEffect(this);
|
|
44
|
+
this.__active = false;
|
|
45
|
+
this.onStop?.();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
let activeEffect;
|
|
49
|
+
let activeScope;
|
|
50
|
+
const targetMap = new WeakMap();
|
|
51
|
+
/** Record the active effect (if any) as depending on `target[key]`. @internal */
|
|
52
|
+
function track(target, key) {
|
|
53
|
+
if (!activeEffect)
|
|
54
|
+
return;
|
|
55
|
+
let depsMap = targetMap.get(target);
|
|
56
|
+
if (!depsMap)
|
|
57
|
+
targetMap.set(target, depsMap = new Map());
|
|
58
|
+
let dep = depsMap.get(key);
|
|
59
|
+
if (!dep)
|
|
60
|
+
depsMap.set(key, dep = new Set());
|
|
61
|
+
if (!dep.has(activeEffect)) {
|
|
62
|
+
dep.add(activeEffect);
|
|
63
|
+
activeEffect.deps.push(dep);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/** Re-run (or schedule) every effect that depends on `target[key]`. @internal */
|
|
67
|
+
function trigger(target, key) {
|
|
68
|
+
const depsMap = targetMap.get(target);
|
|
69
|
+
if (!depsMap)
|
|
70
|
+
return;
|
|
71
|
+
const dep = depsMap.get(key);
|
|
72
|
+
if (!dep)
|
|
73
|
+
return;
|
|
74
|
+
// copy first: running an effect re-collects deps and would mutate the live set
|
|
75
|
+
const effects = new Set();
|
|
76
|
+
dep.forEach(e => { if (e !== activeEffect)
|
|
77
|
+
effects.add(e); });
|
|
78
|
+
effects.forEach(e => {
|
|
79
|
+
if (e.scheduler)
|
|
80
|
+
e.scheduler();
|
|
81
|
+
else
|
|
82
|
+
queueEffect(e);
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
const jobQueue = new Set();
|
|
86
|
+
const resolvedPromise = Promise.resolve();
|
|
87
|
+
let isFlushPending = false;
|
|
88
|
+
let currentFlush = null;
|
|
89
|
+
/** Queue an effect to run on the next microtask, deduplicated so multiple sync changes batch into one run. */
|
|
90
|
+
function queueEffect(effect) {
|
|
91
|
+
jobQueue.add(effect);
|
|
92
|
+
if (!isFlushPending) {
|
|
93
|
+
isFlushPending = true;
|
|
94
|
+
currentFlush = resolvedPromise.then(flushJobs);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function flushJobs() {
|
|
98
|
+
isFlushPending = false;
|
|
99
|
+
let guard = 0;
|
|
100
|
+
while (jobQueue.size) {
|
|
101
|
+
if (++guard > 10000) {
|
|
102
|
+
jobQueue.clear();
|
|
103
|
+
throw new Error("Reactive effect flush exceeded the iteration limit (cyclic update?).");
|
|
104
|
+
}
|
|
105
|
+
const jobs = Array.from(jobQueue);
|
|
106
|
+
jobQueue.clear();
|
|
107
|
+
for (const effect of jobs) {
|
|
108
|
+
if (effect.active)
|
|
109
|
+
effect.run();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
currentFlush = null;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Resolves after the currently pending batch of reactive effects has flushed.
|
|
116
|
+
* Effect re-runs (and the DOM updates they drive) are batched on the microtask queue,
|
|
117
|
+
* so await `nextTick()` to observe their results.
|
|
118
|
+
*/
|
|
119
|
+
function nextTick(fn) {
|
|
120
|
+
const p = currentFlush || resolvedPromise;
|
|
121
|
+
return fn ? p.then(fn).then(() => { }) : p.then(() => { });
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Execute `fn` without tracking any reactive reads.
|
|
125
|
+
* Use inside a reactive context when you want to read state without creating a dependency.
|
|
126
|
+
*/
|
|
127
|
+
function untrack(fn) {
|
|
128
|
+
const prev = activeEffect;
|
|
129
|
+
activeEffect = undefined;
|
|
130
|
+
try {
|
|
131
|
+
return fn();
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
activeEffect = prev;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
function cleanupEffect(effect) {
|
|
138
|
+
const { deps } = effect;
|
|
139
|
+
deps.forEach(dep => dep.delete(effect));
|
|
140
|
+
deps.length = 0;
|
|
141
|
+
}
|
|
142
|
+
/** Create and immediately run a reactive effect. Returns the {@link ReactiveEffect}. */
|
|
143
|
+
function effect(fn, scheduler) {
|
|
144
|
+
const e = new ReactiveEffect(fn, scheduler);
|
|
145
|
+
e.run();
|
|
146
|
+
return e;
|
|
147
|
+
}
|
|
148
|
+
/** A disposable container that collects effects (and nested scopes) so they can be stopped together. */
|
|
149
|
+
class EffectScope {
|
|
150
|
+
__effects = [];
|
|
151
|
+
__scopes = [];
|
|
152
|
+
__active = true;
|
|
153
|
+
/** Whether the scope is still active (not stopped). */
|
|
154
|
+
get active() { return this.__active; }
|
|
155
|
+
/** @internal */
|
|
156
|
+
add(effect) { this.__effects.push(effect); }
|
|
157
|
+
/** @internal */
|
|
158
|
+
addScope(scope) { this.__scopes.push(scope); }
|
|
159
|
+
/** Run `fn` with this scope active; effects created during the call register to it. */
|
|
160
|
+
run(fn) {
|
|
161
|
+
const prev = activeScope;
|
|
162
|
+
activeScope = this;
|
|
163
|
+
try {
|
|
164
|
+
return fn();
|
|
165
|
+
}
|
|
166
|
+
finally {
|
|
167
|
+
activeScope = prev;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/** Stop all effects and nested scopes collected by this scope. */
|
|
171
|
+
stop() {
|
|
172
|
+
if (!this.__active)
|
|
173
|
+
return;
|
|
174
|
+
this.__active = false;
|
|
175
|
+
this.__effects.forEach(e => e.stop());
|
|
176
|
+
this.__effects.length = 0;
|
|
177
|
+
this.__scopes.forEach(s => s.stop());
|
|
178
|
+
this.__scopes.length = 0;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/** Create a new {@link EffectScope}, nested in the current scope if one is active. */
|
|
182
|
+
function effectScope() {
|
|
183
|
+
const scope = new EffectScope();
|
|
184
|
+
activeScope?.addScope(scope);
|
|
185
|
+
return scope;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
exports.EffectScope = EffectScope;
|
|
189
|
+
exports.ITERATE_KEY = ITERATE_KEY;
|
|
190
|
+
exports.ReactiveEffect = ReactiveEffect;
|
|
191
|
+
exports.effect = effect;
|
|
192
|
+
exports.effectScope = effectScope;
|
|
193
|
+
exports.nextTick = nextTick;
|
|
194
|
+
exports.track = track;
|
|
195
|
+
exports.trigger = trigger;
|
|
196
|
+
exports.untrack = untrack;
|
|
197
|
+
//# sourceMappingURL=effect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effect.js","sources":["../../../../source/reactive/effect.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|