@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.
Files changed (63) hide show
  1. package/README.md +482 -33
  2. package/dist/cjs/constants.js +14 -0
  3. package/dist/cjs/constants.js.map +1 -0
  4. package/dist/cjs/dom/bind-each.js +90 -0
  5. package/dist/cjs/dom/bind-each.js.map +1 -0
  6. package/dist/cjs/dom/bind.js +29 -0
  7. package/dist/cjs/dom/bind.js.map +1 -0
  8. package/dist/cjs/dom/binding-cleanup.js +162 -0
  9. package/dist/cjs/dom/binding-cleanup.js.map +1 -0
  10. package/dist/cjs/dom/dom.js +184 -0
  11. package/dist/cjs/dom/dom.js.map +1 -0
  12. package/dist/cjs/dom/helpers.js +33 -0
  13. package/dist/cjs/dom/helpers.js.map +1 -0
  14. package/dist/cjs/dom/index.js +14 -0
  15. package/dist/cjs/dom/index.js.map +1 -0
  16. package/dist/cjs/dom/tag.js +207 -0
  17. package/dist/cjs/dom/tag.js.map +1 -0
  18. package/dist/cjs/element.js +265 -0
  19. package/dist/cjs/element.js.map +1 -0
  20. package/dist/cjs/events.js +204 -0
  21. package/dist/cjs/events.js.map +1 -0
  22. package/dist/cjs/ext.js +20 -0
  23. package/dist/cjs/ext.js.map +1 -0
  24. package/dist/cjs/index.js +37 -313
  25. package/dist/cjs/index.js.map +1 -1
  26. package/dist/cjs/reactive/computed.js +36 -0
  27. package/dist/cjs/reactive/computed.js.map +1 -0
  28. package/dist/cjs/reactive/effect.js +197 -0
  29. package/dist/cjs/reactive/effect.js.map +1 -0
  30. package/dist/cjs/reactive/reactive.js +106 -0
  31. package/dist/cjs/reactive/reactive.js.map +1 -0
  32. package/dist/mjs/constants.js +10 -0
  33. package/dist/mjs/constants.js.map +1 -0
  34. package/dist/mjs/dom/bind-each.js +86 -0
  35. package/dist/mjs/dom/bind-each.js.map +1 -0
  36. package/dist/mjs/dom/bind.js +26 -0
  37. package/dist/mjs/dom/bind.js.map +1 -0
  38. package/dist/mjs/dom/binding-cleanup.js +156 -0
  39. package/dist/mjs/dom/binding-cleanup.js.map +1 -0
  40. package/dist/mjs/dom/dom.js +169 -0
  41. package/dist/mjs/dom/dom.js.map +1 -0
  42. package/dist/mjs/dom/helpers.js +29 -0
  43. package/dist/mjs/dom/helpers.js.map +1 -0
  44. package/dist/mjs/dom/index.js +12 -0
  45. package/dist/mjs/dom/index.js.map +1 -0
  46. package/dist/mjs/dom/tag.js +203 -0
  47. package/dist/mjs/dom/tag.js.map +1 -0
  48. package/dist/mjs/element.js +260 -0
  49. package/dist/mjs/element.js.map +1 -0
  50. package/dist/mjs/events.js +202 -0
  51. package/dist/mjs/events.js.map +1 -0
  52. package/dist/mjs/ext.js +18 -0
  53. package/dist/mjs/ext.js.map +1 -0
  54. package/dist/mjs/index.js +11 -314
  55. package/dist/mjs/index.js.map +1 -1
  56. package/dist/mjs/reactive/computed.js +33 -0
  57. package/dist/mjs/reactive/computed.js.map +1 -0
  58. package/dist/mjs/reactive/effect.js +187 -0
  59. package/dist/mjs/reactive/effect.js.map +1 -0
  60. package/dist/mjs/reactive/reactive.js +102 -0
  61. package/dist/mjs/reactive/reactive.js.map +1 -0
  62. package/dist/types.d.ts +489 -14
  63. package/package.json +9 -1
package/dist/cjs/index.js CHANGED
@@ -1,319 +1,43 @@
1
1
  'use strict';
2
2
 
3
- let ListenCounter = 1;
4
- class EventEmitter {
5
- _events;
6
- _listenId;
7
- _listeningTo;
8
- on(eventName, callback, context) {
9
- const events = this._getOrCreateEvents(eventName);
10
- events.push({ callback, context: context || undefined, ctx: context || this });
11
- return this;
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
- class UIElement extends EventEmitter {
157
- __element;
158
- __events;
159
- __commands;
160
- __destroyed;
161
- // Element members
162
- get element() { return this.__element; }
163
- setElement(elem) {
164
- if (!elem)
165
- throw new Error("Not set value elem.");
166
- if (this.__element || UIElement.hasElement(elem))
167
- throw new Error("UIElement already defined");
168
- this.__element = elem;
169
- elem[constants.ElemPropertyName] = this;
170
- elem.dataset[constants.ElemAttributeName] = this.typeName;
171
- this._onRenderElement(elem);
172
- }
173
- // static members
174
- static hasElement(elem) {
175
- return !!elem.dataset[constants.ElemAttributeName];
176
- }
177
- // Command members
178
- registerCommand(name, execute, canExecute) {
179
- if (this.__destroyed)
180
- return this;
181
- const commands = this.__commands || (this.__commands = {});
182
- const nornalizedName = name.toLowerCase();
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
@@ -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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"}