@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
@@ -0,0 +1,202 @@
1
+ let ListenCounter = 1;
2
+ /**
3
+ * Minimal event emitter with support for one-off listeners and cross-emitter listening.
4
+ *
5
+ * The optional `TEvents` type parameter is an event map (`{ eventName: (args) => void }`)
6
+ * that gives subclasses strongly-typed event names, callback signatures and `trigger` arguments.
7
+ * When omitted it defaults to a loose map, so untyped usage keeps working.
8
+ */
9
+ class EventEmitter {
10
+ _events;
11
+ _listenId;
12
+ _listeningTo;
13
+ on(eventName, callback, context) {
14
+ const events = this._getOrCreateEvents(eventName);
15
+ events.push({ callback, context: context || undefined, ctx: context || this });
16
+ return this;
17
+ }
18
+ once(eventName, callback, context) {
19
+ const wrapper = (...args) => {
20
+ this.off(eventName, wrapper, context);
21
+ callback.apply(context || this, args);
22
+ };
23
+ return this.on(eventName, wrapper, context);
24
+ }
25
+ off(eventName, callback, context) {
26
+ if (!eventName && !callback && !context)
27
+ throw new Error("Require off arguments.");
28
+ const events = this._events;
29
+ if (!events)
30
+ return this;
31
+ callback = callback || undefined;
32
+ context = context || undefined;
33
+ const eventNames = eventName ? [eventName.toLowerCase()] : Object.keys(events);
34
+ for (let i = 0; i < eventNames.length; i++) {
35
+ const name = eventNames[i];
36
+ const currentCallbacks = events[name];
37
+ if (!currentCallbacks)
38
+ continue;
39
+ // reset callback list
40
+ const newCallbacks = events[name] = [];
41
+ if (callback || context) {
42
+ currentCallbacks.forEach(c => {
43
+ const callbackMatch = !callback || c.callback === callback;
44
+ const contextMatch = !context || c.context === context;
45
+ if (callbackMatch && contextMatch)
46
+ return;
47
+ newCallbacks.push(c);
48
+ });
49
+ }
50
+ if (!newCallbacks.length)
51
+ delete events[name];
52
+ }
53
+ return this;
54
+ }
55
+ /**
56
+ * Listen to an event on another emitter, tracking the subscription so it can be released via `stopListening`.
57
+ * @param source Emitter to subscribe to.
58
+ * @param eventName Event name to listen for.
59
+ * @param callback Handler invoked when the event is triggered.
60
+ */
61
+ listenTo(source, eventName, callback) {
62
+ this._addListeningTo(source, eventName, callback, callback);
63
+ source.on(eventName, callback, this);
64
+ return this;
65
+ }
66
+ /**
67
+ * Listen once to an event on another emitter; the subscription is tracked and auto-removed after it fires.
68
+ * @param source Emitter to subscribe to.
69
+ * @param eventName Event name to listen for.
70
+ * @param callback Handler invoked once when the event is triggered.
71
+ */
72
+ listenToOnce(source, eventName, callback) {
73
+ // Use our own one-shot wrapper instead of source.once so that, when it fires,
74
+ // we can drop this exact subscription from BOTH sides — the source and our
75
+ // own _listeningTo registry — keeping the two in sync (no dangling tracking).
76
+ const wrapper = (...args) => {
77
+ source.off(eventName, wrapper, this);
78
+ this._removeListeningSubscription(source, eventName, wrapper);
79
+ callback.apply(this, args);
80
+ };
81
+ this._addListeningTo(source, eventName, wrapper, callback);
82
+ source.on(eventName, wrapper, this);
83
+ return this;
84
+ }
85
+ /**
86
+ * Release subscriptions previously established with `listenTo`/`listenToOnce`.
87
+ * Omitted arguments broaden the match (e.g. no `source` releases all tracked emitters).
88
+ * @param source Limit to a specific emitter, or omit for all.
89
+ * @param eventName Limit to a specific event, or omit for all.
90
+ * @param callback Limit to a specific handler, or omit for all.
91
+ */
92
+ stopListening(source, eventName, callback) {
93
+ if (!this._listeningTo)
94
+ return this;
95
+ // A source we never listened to has no tracked subscriptions — nothing to do.
96
+ const listenings = source
97
+ ? (source._listenId && this._listeningTo[source._listenId] ? [this._listeningTo[source._listenId]] : [])
98
+ : Object.values(this._listeningTo);
99
+ const targetEvent = eventName ? eventName.toLowerCase() : undefined;
100
+ listenings.forEach(listening => {
101
+ // snapshot: the loop splices listening.subscriptions
102
+ listening.subscriptions.slice().forEach(sub => {
103
+ if (targetEvent && sub.eventName !== targetEvent)
104
+ return;
105
+ // match the user-supplied callback against both the registered
106
+ // callback and the original (so a listenToOnce can be stopped by
107
+ // the callback the caller passed, not the internal wrapper)
108
+ if (callback && sub.callback !== callback && sub.origin !== callback)
109
+ return;
110
+ listening.emitter.off(sub.eventName, sub.callback, this);
111
+ const index = listening.subscriptions.indexOf(sub);
112
+ if (index >= 0)
113
+ listening.subscriptions.splice(index, 1);
114
+ });
115
+ if (!listening.subscriptions.length && listening.emitter._listenId)
116
+ delete this._listeningTo[listening.emitter._listenId];
117
+ });
118
+ if (!this._listeningTo || Object.keys(this._listeningTo).length === 0)
119
+ delete this._listeningTo;
120
+ return this;
121
+ }
122
+ _addListeningTo(source, eventName, callback, origin) {
123
+ const listeningTo = this._listeningTo || (this._listeningTo = {});
124
+ const listenId = source._listenId || (source._listenId = `l${ListenCounter++}`);
125
+ const listenTo = listeningTo[listenId] || (listeningTo[listenId] = { emitter: source, subscriptions: [] });
126
+ // one entry per subscription (not per event name) so each can be removed
127
+ // independently — e.g. a listenToOnce dropping itself without disturbing
128
+ // a co-registered persistent listenTo on the same source+event.
129
+ listenTo.subscriptions.push({ eventName: eventName.toLowerCase(), callback, origin });
130
+ }
131
+ /** Remove a single tracked subscription (matched by event + registered callback). @internal */
132
+ _removeListeningSubscription(source, eventName, callback) {
133
+ const listenId = source._listenId;
134
+ if (!this._listeningTo || !listenId)
135
+ return;
136
+ const listening = this._listeningTo[listenId];
137
+ if (!listening)
138
+ return;
139
+ eventName = eventName.toLowerCase();
140
+ const index = listening.subscriptions.findIndex(s => s.eventName === eventName && s.callback === callback);
141
+ if (index >= 0)
142
+ listening.subscriptions.splice(index, 1);
143
+ if (!listening.subscriptions.length)
144
+ delete this._listeningTo[listenId];
145
+ if (Object.keys(this._listeningTo).length === 0)
146
+ delete this._listeningTo;
147
+ }
148
+ stopAllListeners() {
149
+ if (!this._events)
150
+ return;
151
+ Object.values(this._events).forEach(callbacks => {
152
+ callbacks.forEach(callback => {
153
+ if (callback.context instanceof EventEmitter)
154
+ callback.context.stopListening(this);
155
+ });
156
+ });
157
+ delete this._events;
158
+ }
159
+ trigger(eventName, ...args) {
160
+ eventName = eventName.toLowerCase();
161
+ if (eventName === "all")
162
+ throw new Error('Not allow trigger all event.');
163
+ if (!this._events)
164
+ return this;
165
+ const events = this._getEvents(eventName);
166
+ const allEvents = this._getEvents("all");
167
+ this._triggerEvent(events, ...args);
168
+ this._triggerEvent(allEvents, ...args);
169
+ return this;
170
+ }
171
+ _triggerEvent(events, ...args) {
172
+ if (!events || !events.length)
173
+ return;
174
+ // snapshot so callbacks added/removed during dispatch don't affect this trigger
175
+ const snapshot = events.slice();
176
+ for (let i = 0; i < snapshot.length; i++) {
177
+ const event = snapshot[i];
178
+ event.callback.apply(event.ctx, args);
179
+ }
180
+ }
181
+ _getOrCreateEvents(eventName) {
182
+ eventName = eventName.toLowerCase();
183
+ const events = this._events || (this._events = {});
184
+ return events[eventName] || (events[eventName] = []);
185
+ }
186
+ _getEvents(eventName) {
187
+ if (!eventName)
188
+ return;
189
+ const events = this._events;
190
+ if (!events)
191
+ return;
192
+ return events[eventName];
193
+ }
194
+ /** Release every subscription: both events this emitter listens to and listeners registered on it. */
195
+ stopEvents() {
196
+ this.stopListening();
197
+ this.stopAllListeners();
198
+ }
199
+ }
200
+
201
+ export { EventEmitter };
202
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sources":["../../../source/events.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ let __inited = false;
2
+ /**
3
+ * Install the `HTMLElement.prototype.ui(factory)` convenience binder. Opt-in (no longer a
4
+ * side effect on import) so bundlers can tree-shake it away for consumers that don't use it.
5
+ * Idempotent and a no-op in a non-DOM environment.
6
+ */
7
+ function enableElementExtensions() {
8
+ if (__inited || typeof HTMLElement === "undefined")
9
+ return;
10
+ __inited = true;
11
+ HTMLElement.prototype.ui = function (factory) {
12
+ factory(this);
13
+ return this;
14
+ };
15
+ }
16
+
17
+ export { enableElementExtensions };
18
+ //# sourceMappingURL=ext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ext.js","sources":["../../../source/ext.ts"],"sourcesContent":[null],"names":[],"mappings":"AAiBA,IAAI,QAAQ,GAAG,KAAK;AAEpB;;;;AAIG;SACa,uBAAuB,GAAA;AACtC,IAAA,IAAI,QAAQ,IAAI,OAAO,WAAW,KAAK,WAAW;QACjD;IACD,QAAQ,GAAG,IAAI;AAEf,IAAA,WAAW,CAAC,SAAS,CAAC,EAAE,GAAG,UAAU,OAAyC,EAAA;QAC7E,OAAO,CAAC,IAAI,CAAC;AACb,QAAA,OAAO,IAAI;AACZ,IAAA,CAAC;AACF;;;;"}
package/dist/mjs/index.js CHANGED
@@ -1,315 +1,12 @@
1
- let ListenCounter = 1;
2
- class EventEmitter {
3
- _events;
4
- _listenId;
5
- _listeningTo;
6
- on(eventName, callback, context) {
7
- const events = this._getOrCreateEvents(eventName);
8
- events.push({ callback, context: context || undefined, ctx: context || this });
9
- return this;
10
- }
11
- once(eventName, callback, context) {
12
- const wrapper = (...args) => {
13
- this.off(eventName, wrapper, context);
14
- callback.apply(context || this, args);
15
- };
16
- return this.on(eventName, wrapper, context);
17
- }
18
- off(eventName, callback, context) {
19
- if (!eventName && !callback && !context)
20
- throw new Error("Require off arguments.");
21
- const events = this._events;
22
- if (!events)
23
- return this;
24
- callback = callback || undefined;
25
- context = context || undefined;
26
- const eventNames = eventName ? [eventName.toLowerCase()] : Object.keys(events);
27
- for (let i = 0; i < eventNames.length; i++) {
28
- const name = eventNames[i];
29
- const currentCallbacks = events[name];
30
- if (!currentCallbacks)
31
- continue;
32
- // reset callback list
33
- const newCallbacks = events[name] = [];
34
- if (callback || context) {
35
- currentCallbacks.forEach(c => {
36
- const callbackMatch = !callback || c.callback === callback;
37
- const contextMatch = !context || c.context === context;
38
- if (callbackMatch && contextMatch)
39
- return;
40
- newCallbacks.push(c);
41
- });
42
- }
43
- if (!newCallbacks.length)
44
- delete events[name];
45
- }
46
- return this;
47
- }
48
- listenTo(source, eventName, callback) {
49
- this._addListeningTo(source, eventName);
50
- source.on(eventName, callback, this);
51
- return this;
52
- }
53
- listenToOnce(source, eventName, callback) {
54
- this._addListeningTo(source, eventName);
55
- source.once(eventName, callback, this);
56
- return this;
57
- }
58
- stopListening(source, eventName, callback) {
59
- if (!this._listeningTo)
60
- return this;
61
- let sourceListening;
62
- if (source) {
63
- if (!source._listenId)
64
- throw new Error("Emmiter is not set id.");
65
- sourceListening = this._listeningTo[source._listenId];
66
- }
67
- const sources = sourceListening ? [sourceListening] : Object.values(this._listeningTo);
68
- sources.forEach(source => {
69
- const removeEventNames = eventName ? [eventName] : source.events;
70
- removeEventNames.forEach(eventName => {
71
- source.emmiter.off(eventName, callback, this);
72
- const index = source.events.indexOf(eventName);
73
- if (index >= 0)
74
- source.events.splice(index, 1);
75
- });
76
- if (!source.events.length && source.emmiter._listenId && this._listeningTo)
77
- delete this._listeningTo[source.emmiter._listenId];
78
- });
79
- if (!this._listeningTo || Object.keys(this._listeningTo).length === 0)
80
- delete this._listeningTo;
81
- return this;
82
- }
83
- _addListeningTo(source, eventName) {
84
- const listeningTo = this._listeningTo || (this._listeningTo = {});
85
- const listenId = source._listenId || (source._listenId = `l${ListenCounter++}`);
86
- const listenTo = listeningTo[listenId] || (listeningTo[listenId] = { emmiter: source, events: [] });
87
- eventName = eventName.toLowerCase();
88
- if (listenTo.events.indexOf(eventName) !== -1)
89
- throw new Error(`Event ${eventName} already listening.`);
90
- listenTo.events.push(eventName);
91
- }
92
- stopAllListeners() {
93
- if (!this._events)
94
- return;
95
- Object.values(this._events).forEach(callbacks => {
96
- callbacks.forEach(callback => {
97
- if (callback.context instanceof EventEmitter)
98
- callback.context.stopListening(this);
99
- });
100
- });
101
- delete this._events;
102
- }
103
- trigger(eventName, ...args) {
104
- eventName = eventName.toLowerCase();
105
- if (eventName === "all")
106
- throw new Error('Not allow trigger all event.');
107
- if (!this._events)
108
- return this;
109
- const events = this._getEvents(eventName);
110
- const allEvents = this._getEvents("all");
111
- this._triggerEvent(events, ...args);
112
- this._triggerEvent(allEvents, ...args);
113
- return this;
114
- }
115
- _triggerEvent(events, ...args) {
116
- if (!events || !events.length)
117
- return;
118
- for (let i = 0; i < events.length; i++) {
119
- const event = events[i];
120
- event.callback.apply(event.ctx, args);
121
- }
122
- }
123
- _getOrCreateEvents(eventName) {
124
- eventName = eventName.toLowerCase();
125
- const events = this._events || (this._events = {});
126
- return events[eventName] || (events[eventName] = []);
127
- }
128
- _getEvents(eventName) {
129
- if (!eventName)
130
- return;
131
- const events = this._events;
132
- if (!events)
133
- return;
134
- return events[eventName];
135
- }
136
- stopEvents() {
137
- this.stopListening();
138
- this.stopAllListeners();
139
- }
140
- }
141
-
142
- const constants = {
143
- ElemAttributeName: "uiElement",
144
- ElemPropertyName: "uielement",
145
- CommandAttributeName: "command",
146
- CommandExecutingCssClassName: "executing"
147
- };
148
-
149
- var constants$1 = /*#__PURE__*/Object.freeze({
150
- __proto__: null,
151
- default: constants
152
- });
153
-
154
- class UIElement extends EventEmitter {
155
- __element;
156
- __events;
157
- __commands;
158
- __destroyed;
159
- // Element members
160
- get element() { return this.__element; }
161
- setElement(elem) {
162
- if (!elem)
163
- throw new Error("Not set value elem.");
164
- if (this.__element || UIElement.hasElement(elem))
165
- throw new Error("UIElement already defined");
166
- this.__element = elem;
167
- elem[constants.ElemPropertyName] = this;
168
- elem.dataset[constants.ElemAttributeName] = this.typeName;
169
- this._onRenderElement(elem);
170
- }
171
- // static members
172
- static hasElement(elem) {
173
- return !!elem.dataset[constants.ElemAttributeName];
174
- }
175
- // Command members
176
- registerCommand(name, execute, canExecute) {
177
- if (this.__destroyed)
178
- return this;
179
- const commands = this.__commands || (this.__commands = {});
180
- const nornalizedName = name.toLowerCase();
181
- if (nornalizedName in commands)
182
- throw new Error(`Command "${name}" already registered.`);
183
- commands[nornalizedName] = {
184
- name: name,
185
- execute,
186
- canExecute
187
- };
188
- return this;
189
- }
190
- hasCommand(name) {
191
- return this.__commands && name.toLowerCase() in this.__commands;
192
- }
193
- /** @internal */
194
- __execCommand(name, target) {
195
- if (this.__destroyed || !this.__element || !this.__commands)
196
- throw new Error("UIElement is not set HTMLElement.");
197
- const key = name.toLowerCase();
198
- const command = this.__commands[key];
199
- if (!command)
200
- throw new Error(`Command "${name}" is not registered.`);
201
- const context = {
202
- target,
203
- uiElem: this
204
- };
205
- if (command.isExecuting)
206
- return { status: "already", context };
207
- command.isExecuting = true;
208
- if (!this._onCanExecCommand(name, target)) {
209
- delete command.isExecuting;
210
- return { status: "disallow", context };
211
- }
212
- if (command.canExecute && !command.canExecute(context)) {
213
- delete command.isExecuting;
214
- return { status: "disallow", context };
215
- }
216
- this.trigger("command", { element: this, name: command.name });
217
- let isAsync;
218
- try {
219
- const commandResult = command.execute(context);
220
- if (commandResult && commandResult instanceof Promise) {
221
- isAsync = true;
222
- target.classList.add(constants.CommandExecutingCssClassName);
223
- commandResult
224
- .finally(() => {
225
- target.classList.remove(constants.CommandExecutingCssClassName);
226
- delete command.isExecuting;
227
- });
228
- }
229
- }
230
- finally {
231
- if (!isAsync)
232
- delete command.isExecuting;
233
- }
234
- return { status: "success", context: context };
235
- }
236
- _onRenderElement(_elem) { }
237
- _onCanExecCommand(_name, _elem) {
238
- return true;
239
- }
240
- onDestroy(callback) {
241
- if (!this.__element || !callback)
242
- return;
243
- if (callback instanceof UIElement)
244
- callback.listenTo(this, "destroy", () => callback.destroy());
245
- else if (callback instanceof Element)
246
- this.on("destroy", () => callback.remove());
247
- else if (typeof callback === "function")
248
- this.on("destroy", () => callback());
249
- else
250
- throw new Error("Unsupported callback type.");
251
- }
252
- toString() { return this.typeName; }
253
- destroy() {
254
- if (this.__destroyed)
255
- return;
256
- this.__destroyed = true;
257
- this.trigger("destroy", this);
258
- super.stopEvents();
259
- const elem = this.__element;
260
- if (elem) {
261
- delete elem.dataset[constants.ElemAttributeName];
262
- delete elem[constants.ElemPropertyName];
263
- }
264
- delete this.__element;
265
- delete this.__events;
266
- delete this.__commands;
267
- }
268
- }
269
- const findUiElementByCommand = (elem, commandName) => {
270
- let current = elem;
271
- while (current) {
272
- if (current.dataset[constants.ElemAttributeName]) {
273
- const uiElem = current[constants.ElemPropertyName];
274
- if (uiElem.hasCommand(commandName))
275
- return uiElem;
276
- }
277
- current = current.parentElement;
278
- }
279
- return null;
280
- };
281
- const commandClickHandler = (e) => {
282
- let commandElem = e.target;
283
- while (commandElem) {
284
- if (commandElem.dataset[constants.CommandAttributeName])
285
- break;
286
- if (commandElem === e.currentTarget)
287
- return;
288
- commandElem = commandElem.parentElement;
289
- }
290
- if (!commandElem)
291
- return;
292
- const commandName = commandElem.dataset[constants.CommandAttributeName];
293
- if (!commandName)
294
- throw new Error("Command data attribute is not have value.");
295
- const uiElem = findUiElementByCommand(commandElem, commandName);
296
- if (uiElem) {
297
- const result = uiElem.__execCommand(commandName, commandElem);
298
- if (result.status == "success" && result.context.transparent)
299
- return;
300
- }
301
- else
302
- console.warn(`Not find handler for command "${commandName}".`);
303
- e.preventDefault();
304
- e.stopPropagation();
305
- e.stopImmediatePropagation();
306
- };
307
- window.addEventListener("click", commandClickHandler, false);
308
-
309
- HTMLElement.prototype.ui = function (factory) {
310
- factory(this);
311
- return this;
312
- };
313
-
314
- export { EventEmitter, constants$1 as UICONSTANTS, UIElement };
1
+ export { EventEmitter } from './events.js';
2
+ export { UIElement, UIElementBound, destroyUI, initUICommands } from './element.js';
3
+ export { enableElementExtensions } from './ext.js';
4
+ export { EffectScope, ITERATE_KEY, ReactiveEffect, effect, effectScope, nextTick, track, trigger, untrack } from './reactive/effect.js';
5
+ export { isReactive, reactive, toRaw } from './reactive/reactive.js';
6
+ export { ComputedRef, computed } from './reactive/computed.js';
7
+ export { DOM } from './dom/index.js';
8
+ import * as constants from './constants.js';
9
+ export { constants as UICONSTANTS };
10
+ export { Binding, bind } from './dom/bind.js';
11
+ export { BindingEach, appendBindingEach, bindEach } from './dom/bind-each.js';
315
12
  //# 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,33 @@
1
+ import { ReactiveEffect, trigger, track } from './effect.js';
2
+
3
+ /** A lazily-evaluated, cached reactive value derived from other reactive state. */
4
+ class ComputedRef {
5
+ __value;
6
+ __dirty = true;
7
+ __effect;
8
+ constructor(getter) {
9
+ this.__effect = new ReactiveEffect(getter, () => {
10
+ // a dependency changed: mark dirty and notify effects that read this computed
11
+ if (!this.__dirty) {
12
+ this.__dirty = true;
13
+ trigger(this, "value");
14
+ }
15
+ });
16
+ }
17
+ /** The current value; recomputed on read only when its dependencies have changed. */
18
+ get value() {
19
+ if (this.__dirty) {
20
+ this.__value = this.__effect.run();
21
+ this.__dirty = false;
22
+ }
23
+ track(this, "value");
24
+ return this.__value;
25
+ }
26
+ }
27
+ /** Create a {@link ComputedRef} from a getter. */
28
+ function computed(getter) {
29
+ return new ComputedRef(getter);
30
+ }
31
+
32
+ export { ComputedRef, computed };
33
+ //# sourceMappingURL=computed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computed.js","sources":["../../../../source/reactive/computed.ts"],"sourcesContent":[null],"names":[],"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,IAAI,cAAc,CAAC,MAAM,EAAE,MAAK;;AAE/C,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AAClB,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,gBAAA,OAAO,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,QAAA,KAAK,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;;;;"}