grainjs 1.0.2 → 1.1.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.
Files changed (138) hide show
  1. package/README.md +23 -71
  2. package/dist/cjs/index.js +5 -1
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/cjs/lib/PriorityQueue.d.ts +1 -1
  5. package/dist/cjs/lib/_computed_queue.js +3 -3
  6. package/dist/cjs/lib/_computed_queue.js.map +1 -1
  7. package/dist/cjs/lib/binding.d.ts +11 -4
  8. package/dist/cjs/lib/binding.js +5 -5
  9. package/dist/cjs/lib/binding.js.map +1 -1
  10. package/dist/cjs/lib/computed.d.ts +49 -28
  11. package/dist/cjs/lib/computed.js +38 -52
  12. package/dist/cjs/lib/computed.js.map +1 -1
  13. package/dist/cjs/lib/dispose.d.ts +109 -96
  14. package/dist/cjs/lib/dispose.js +106 -80
  15. package/dist/cjs/lib/dispose.js.map +1 -1
  16. package/dist/cjs/lib/dom.d.ts +38 -18
  17. package/dist/cjs/lib/dom.js +44 -20
  18. package/dist/cjs/lib/dom.js.map +1 -1
  19. package/dist/cjs/lib/domComponent.d.ts +56 -48
  20. package/dist/cjs/lib/domComponent.js +66 -1
  21. package/dist/cjs/lib/domComponent.js.map +1 -1
  22. package/dist/cjs/lib/domComputed.d.ts +31 -21
  23. package/dist/cjs/lib/domComputed.js +14 -11
  24. package/dist/cjs/lib/domComputed.js.map +1 -1
  25. package/dist/cjs/lib/domDispose.d.ts +27 -12
  26. package/dist/cjs/lib/domDispose.js +26 -11
  27. package/dist/cjs/lib/domDispose.js.map +1 -1
  28. package/dist/cjs/lib/domForEach.d.ts +4 -3
  29. package/dist/cjs/lib/domForEach.js +10 -9
  30. package/dist/cjs/lib/domForEach.js.map +1 -1
  31. package/dist/cjs/lib/domImpl.d.ts +33 -10
  32. package/dist/cjs/lib/domImpl.js +28 -9
  33. package/dist/cjs/lib/domImpl.js.map +1 -1
  34. package/dist/cjs/lib/domMethods.d.ts +93 -47
  35. package/dist/cjs/lib/domMethods.js +88 -46
  36. package/dist/cjs/lib/domMethods.js.map +1 -1
  37. package/dist/cjs/lib/domevent.d.ts +87 -62
  38. package/dist/cjs/lib/domevent.js +84 -59
  39. package/dist/cjs/lib/domevent.js.map +1 -1
  40. package/dist/cjs/lib/emit.d.ts +62 -32
  41. package/dist/cjs/lib/emit.js +67 -53
  42. package/dist/cjs/lib/emit.js.map +1 -1
  43. package/dist/cjs/lib/kowrap.d.ts +6 -3
  44. package/dist/cjs/lib/kowrap.js +6 -3
  45. package/dist/cjs/lib/kowrap.js.map +1 -1
  46. package/dist/cjs/lib/obsArray.d.ts +91 -53
  47. package/dist/cjs/lib/obsArray.js +87 -55
  48. package/dist/cjs/lib/obsArray.js.map +1 -1
  49. package/dist/cjs/lib/observable.d.ts +25 -15
  50. package/dist/cjs/lib/observable.js +29 -18
  51. package/dist/cjs/lib/observable.js.map +1 -1
  52. package/dist/cjs/lib/pureComputed.d.ts +12 -15
  53. package/dist/cjs/lib/pureComputed.js +15 -18
  54. package/dist/cjs/lib/pureComputed.js.map +1 -1
  55. package/dist/cjs/lib/styled.d.ts +78 -61
  56. package/dist/cjs/lib/styled.js +26 -79
  57. package/dist/cjs/lib/styled.js.map +1 -1
  58. package/dist/cjs/lib/subscribe.d.ts +41 -37
  59. package/dist/cjs/lib/subscribe.js +31 -40
  60. package/dist/cjs/lib/subscribe.js.map +1 -1
  61. package/dist/cjs/lib/util.js +1 -0
  62. package/dist/cjs/lib/util.js.map +1 -1
  63. package/dist/cjs/lib/widgets/input.d.ts +3 -1
  64. package/dist/cjs/lib/widgets/input.js +6 -4
  65. package/dist/cjs/lib/widgets/input.js.map +1 -1
  66. package/dist/cjs/lib/widgets/select.d.ts +4 -2
  67. package/dist/cjs/lib/widgets/select.js +7 -5
  68. package/dist/cjs/lib/widgets/select.js.map +1 -1
  69. package/dist/esm/lib/_computed_queue.js +3 -3
  70. package/dist/esm/lib/_computed_queue.js.map +1 -1
  71. package/dist/esm/lib/binding.js +2 -2
  72. package/dist/esm/lib/binding.js.map +1 -1
  73. package/dist/esm/lib/computed.js +36 -50
  74. package/dist/esm/lib/computed.js.map +1 -1
  75. package/dist/esm/lib/dispose.js +104 -78
  76. package/dist/esm/lib/dispose.js.map +1 -1
  77. package/dist/esm/lib/dom.js +38 -18
  78. package/dist/esm/lib/dom.js.map +1 -1
  79. package/dist/esm/lib/domComponent.js +65 -0
  80. package/dist/esm/lib/domComponent.js.map +1 -1
  81. package/dist/esm/lib/domComputed.js +10 -7
  82. package/dist/esm/lib/domComputed.js.map +1 -1
  83. package/dist/esm/lib/domDispose.js +26 -11
  84. package/dist/esm/lib/domDispose.js.map +1 -1
  85. package/dist/esm/lib/domForEach.js +3 -2
  86. package/dist/esm/lib/domForEach.js.map +1 -1
  87. package/dist/esm/lib/domImpl.js +26 -7
  88. package/dist/esm/lib/domImpl.js.map +1 -1
  89. package/dist/esm/lib/domMethods.js +77 -35
  90. package/dist/esm/lib/domMethods.js.map +1 -1
  91. package/dist/esm/lib/domevent.js +84 -59
  92. package/dist/esm/lib/domevent.js.map +1 -1
  93. package/dist/esm/lib/emit.js +67 -53
  94. package/dist/esm/lib/emit.js.map +1 -1
  95. package/dist/esm/lib/kowrap.js +5 -2
  96. package/dist/esm/lib/kowrap.js.map +1 -1
  97. package/dist/esm/lib/obsArray.js +82 -50
  98. package/dist/esm/lib/obsArray.js.map +1 -1
  99. package/dist/esm/lib/observable.js +26 -15
  100. package/dist/esm/lib/observable.js.map +1 -1
  101. package/dist/esm/lib/pureComputed.js +15 -18
  102. package/dist/esm/lib/pureComputed.js.map +1 -1
  103. package/dist/esm/lib/styled.js +24 -77
  104. package/dist/esm/lib/styled.js.map +1 -1
  105. package/dist/esm/lib/subscribe.js +27 -36
  106. package/dist/esm/lib/subscribe.js.map +1 -1
  107. package/dist/esm/lib/util.js +1 -0
  108. package/dist/esm/lib/util.js.map +1 -1
  109. package/dist/esm/lib/widgets/input.js +3 -1
  110. package/dist/esm/lib/widgets/input.js.map +1 -1
  111. package/dist/esm/lib/widgets/select.js +3 -1
  112. package/dist/esm/lib/widgets/select.js.map +1 -1
  113. package/dist/grain-full.debug.js +2146 -3062
  114. package/dist/grain-full.debug.js.map +7 -0
  115. package/dist/grain-full.min.js +6 -2
  116. package/dist/grain-full.min.js.map +7 -1
  117. package/lib/binding.ts +9 -2
  118. package/lib/computed.ts +56 -56
  119. package/lib/dispose.ts +110 -85
  120. package/lib/dom.ts +39 -20
  121. package/lib/domComponent.ts +66 -57
  122. package/lib/domComputed.ts +29 -19
  123. package/lib/domDispose.ts +28 -11
  124. package/lib/domForEach.ts +7 -3
  125. package/lib/domImpl.ts +30 -7
  126. package/lib/domMethods.ts +101 -46
  127. package/lib/domevent.ts +85 -60
  128. package/lib/emit.ts +64 -50
  129. package/lib/kowrap.ts +5 -2
  130. package/lib/obsArray.ts +89 -54
  131. package/lib/observable.ts +26 -15
  132. package/lib/pureComputed.ts +16 -22
  133. package/lib/styled.ts +85 -71
  134. package/lib/subscribe.ts +41 -45
  135. package/lib/util.ts +1 -0
  136. package/lib/widgets/input.ts +3 -1
  137. package/lib/widgets/select.ts +3 -1
  138. package/package.json +38 -27
@@ -1,43 +1,3 @@
1
- /**
2
- * domevent provides a way to listen to DOM events, similar to JQuery's `on()` function. Its
3
- * methods are also exposed via the dom.js module, as `dom.on()`, etc.
4
- *
5
- * It is typically used as an argument to the dom() function:
6
- *
7
- * dom('div', dom.on('click', (event, elem) => { ... }));
8
- *
9
- * When the div is disposed, the listener is automatically removed.
10
- *
11
- * The underlying interface to listen to an event is this:
12
- *
13
- * let listener = dom.onElem(elem, 'click', (event, elem) => { ... });
14
- *
15
- * The callback is called with the event and the element to which it was attached. Unlike in
16
- * JQuery, the callback's return value is ignored. Use event.stopPropagation() and
17
- * event.preventDefault() explicitly if needed.
18
- *
19
- * To stop listening:
20
- *
21
- * listener.dispose();
22
- *
23
- * Disposing the listener returned by .onElem() is the only way to stop listening to an event. You
24
- * can use autoDispose to stop listening automatically when subscribing in a Disposable object:
25
- *
26
- * this.autoDispose(domevent.onElem(document, 'mouseup', callback));
27
- *
28
- * To listen to descendants of an element matching the given selector (what JQuery calls
29
- * "delegated events", see http://api.jquery.com/on/):
30
- *
31
- * dom('div', dom.onMatch('.selector', 'click', (event, elem) => { ... }));
32
- * or
33
- * let lis = domevent.onMatchElem(elem, '.selector', 'click', (event, el) => { ... });
34
- *
35
- * In this usage, the element passed to the callback will be a DOM element matching the given
36
- * selector. If there are multiple matches, the callback is only called for the innermost one.
37
- *
38
- * If you need to remove the callback on first call, here's a useful pattern:
39
- * let lis = domevent.onElem(elem, 'mouseup', e => { lis.dispose(); other_work(); });
40
- */
41
1
  function _findMatch(inner, outer, selector) {
42
2
  for (let el = inner; el && el !== outer; el = el.parentElement) {
43
3
  if (el.matches(selector)) {
@@ -73,40 +33,100 @@ class DomEventMatchListener extends DomEventListener {
73
33
  }
74
34
  }
75
35
  /**
76
- * Listen to a DOM event. The `on()` variant takes no `elem` argument, and may be used as an
77
- * argument to dom() function.
78
- * @param {DOMElement} elem: DOM Element to listen to.
79
- * @param {String} eventType: Event type to listen for (e.g. 'click').
80
- * @param {Function} callback: Callback to call as `callback(event, elem)`, where elem is `elem`.
81
- * @param [Boolean] options.useCapture: Add the listener in the capture phase. This should very
36
+ * Listen to a DOM event, returning the listener object.
37
+ * ```ts
38
+ * const listener = dom.onElem(elem, 'click', (event, elem) => { ... });
39
+ * ```
40
+ *
41
+ * To stop listening:
42
+ * ```ts
43
+ * listener.dispose();
44
+ * ```
45
+ *
46
+ * Disposing the listener returned by `onElem()` is the only way to stop listening to an event. You
47
+ * can use `autoDispose` to stop listening automatically when subscribing in a `Disposable` object:
48
+ * ```ts
49
+ * this.autoDispose(domevent.onElem(document, 'mouseup', callback));
50
+ * ```
51
+ *
52
+ * If you need "once" semantics, i.e. to remove the callback on first call, here's a useful pattern:
53
+ * ```ts
54
+ * const lis = domevent.onElem(elem, 'mouseup', e => { lis.dispose(); other_work(); });
55
+ * ```
56
+ *
57
+ * @param elem - DOM Element to listen to.
58
+ * @param eventType - Event type to listen for (e.g. `'click'`).
59
+ * @param callback - Callback to call as `callback(event, elem)`, where elem is `elem`.
60
+ * @param options - `useCapture: boolean`: Add the listener in the capture phase. This should very
82
61
  * rarely be useful (e.g. JQuery doesn't even offer it as an option).
83
- * @returns {Object} Listener object whose .dispose() method will remove the event listener.
62
+ * @returns Listener object whose `.dispose()` method will remove the event listener.
84
63
  */
85
64
  export function onElem(elem, eventType, callback, { useCapture = false } = {}) {
86
65
  return new DomEventListener(elem, eventType, callback, useCapture);
87
66
  }
67
+ /**
68
+ * Listen to a DOM event. It is typically used as an argument to the `dom()` function:
69
+ * ```ts
70
+ * dom('div', dom.on('click', (event, elem) => { ... }));
71
+ * ```
72
+ *
73
+ * When the div is disposed, the listener is automatically removed.
74
+ *
75
+ * The callback is called with the event and the element to which it was attached. Unlike in, say,
76
+ * JQuery, the callback's return value is ignored. Use `event.stopPropagation()` and
77
+ * `event.preventDefault()` explicitly if needed.
78
+ *
79
+ * To listen to descendants of an element matching the given selector (what JQuery calls
80
+ * "delegated events", see http://api.jquery.com/on/), see [`onMatch`](#onMatch).
81
+ *
82
+ * @param eventType - Event type to listen for (e.g. `'click'`).
83
+ * @param callback - Callback to call as `callback(event, elem)`, where `elem` is the element this
84
+ * listener is attached to.
85
+ * @param options - `useCapture?: boolean`: Add the listener in the capture phase.
86
+ */
88
87
  export function on(eventType, callback, { useCapture = false } = {}) {
89
88
  // tslint:disable-next-line:no-unused-expression
90
89
  return (elem) => { new DomEventListener(elem, eventType, callback, useCapture); };
91
90
  }
92
91
  /**
93
- * Listen to a DOM event on descendants of the given elem matching the given selector. The
94
- * `onMatch()` variant takes no `elem` argument, and may be used as an argument to dom().
95
- * @param {DOMElement} elem: DOM Element to whose descendants to listen.
96
- * @param {String} selector: CSS selector string to filter elements that trigger this event.
92
+ * Listen to a DOM event on descendants of the given elem matching the given selector.
93
+ *
94
+ * ```ts
95
+ * const let lis = domevent.onMatchElem(elem, '.selector', 'click', (event, el) => { ... });
96
+ * ```
97
+ *
98
+ * @param elem - DOM Element to whose descendants to listen.
99
+ * @param selector - CSS selector string to filter elements that trigger this event.
97
100
  * JQuery calls it "delegated events" (http://api.jquery.com/on/). The callback will only be
98
101
  * called when the event occurs for an element matching the given selector. If there are
99
102
  * multiple elements matching the selector, the callback is only called for the innermost one.
100
- * @param {String} eventType: Event type to listen for (e.g. 'click').
101
- * @param {Function} callback: Callback to call as `callback(event, elem)`, where elem is a
103
+ * @param eventType - Event type to listen for (e.g. 'click').
104
+ * @param callback - Callback to call as `callback(event, elem)`, where elem is a
102
105
  * descendent of `elem` which matches `selector`.
103
- * @param [Boolean] options.useCapture: Add the listener in the capture phase. This should very
104
- * rarely be useful (e.g. JQuery doesn't even offer it as an option).
105
- * @returns {Object} Listener object whose .dispose() method will remove the event listener.
106
+ * @param options - `useCapture?: boolean`: Add the listener in the capture phase.
107
+ * @returns Listener object whose `.dispose()` method will remove the event listener.
106
108
  */
107
109
  export function onMatchElem(elem, selector, eventType, callback, { useCapture = false } = {}) {
108
110
  return new DomEventMatchListener(elem, eventType, callback, useCapture, selector);
109
111
  }
112
+ /**
113
+ * Listen to a DOM event on descendants of the given element matching the given selector.
114
+ *
115
+ * This is similar to JQuery's [delegated events](https://api.jquery.com/on/#direct-and-delegated-events)
116
+ *
117
+ * ```ts
118
+ * dom('div', dom.onMatch('.selector', 'click', (event, elem) => { ... }));
119
+ * ```
120
+ *
121
+ * In this usage, the element passed to the callback will be a DOM element matching the given
122
+ * selector. If there are multiple matches, the callback is only called for the innermost one.
123
+ *
124
+ * @param selector - CSS selector string to filter elements that trigger this event.
125
+ * @param eventType - Event type to listen for (e.g. `'click'`).
126
+ * @param callback - Callback to call as `callback(event, elem)`, where `elem` is an element
127
+ * matching `selector`.
128
+ * @param options - `useCapture?: boolean`: Add the listener in the capture phase.
129
+ */
110
130
  export function onMatch(selector, eventType, callback, { useCapture = false } = {}) {
111
131
  // tslint:disable-next-line:no-unused-expression
112
132
  return (elem) => { new DomEventMatchListener(elem, eventType, callback, useCapture, selector); };
@@ -115,8 +135,6 @@ export function onMatch(selector, eventType, callback, { useCapture = false } =
115
135
  * Listen to key events (typically 'keydown' or 'keypress'), with specified per-key callbacks.
116
136
  * Key names are listed at https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values
117
137
  *
118
- * Methods onKeyPress() and onKeyDown() are intended to be used as arguments to dom().
119
- *
120
138
  * By default, handled events are stopped from bubbling with stopPropagation() and
121
139
  * preventDefault(). If, however, you register a key with a "$" suffix (i.e. "Enter$" instead of
122
140
  * "Enter"), then the event is allowed to bubble normally.
@@ -125,7 +143,7 @@ export function onMatch(selector, eventType, callback, { useCapture = false } =
125
143
  * to allow this element to receive keyboard events.
126
144
  *
127
145
  * For example:
128
- *
146
+ * ```
129
147
  * dom('input', ...
130
148
  * dom.onKeyDown({
131
149
  * Enter: (e, elem) => console.log("Enter pressed"),
@@ -133,6 +151,7 @@ export function onMatch(selector, eventType, callback, { useCapture = false } =
133
151
  * Delete$: (e, elem) => console.log("Delete pressed, will bubble"),
134
152
  * })
135
153
  * )
154
+ * ```
136
155
  */
137
156
  export function onKeyElem(elem, evType, keyHandlers) {
138
157
  if (!(elem.tabIndex >= 0)) { // If tabIndex property is undefined or -1,
@@ -150,9 +169,15 @@ export function onKeyElem(elem, evType, keyHandlers) {
150
169
  }
151
170
  });
152
171
  }
172
+ /**
173
+ * Add listeners to `"keypress"` events. See [`onKeyElem`](#onKeyElem) for details.
174
+ */
153
175
  export function onKeyPress(keyHandlers) {
154
176
  return (elem) => { onKeyElem(elem, 'keypress', keyHandlers); };
155
177
  }
178
+ /**
179
+ * Add listeners to `"keydown"` events. See [`onKeyElem`](#onKeyElem) for details.
180
+ */
156
181
  export function onKeyDown(keyHandlers) {
157
182
  return (elem) => { onKeyElem(elem, 'keydown', keyHandlers); };
158
183
  }
@@ -1 +1 @@
1
- {"version":3,"file":"domevent.js","sourceRoot":"","sources":["../../../lib/domevent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"domevent.js","sourceRoot":"","sources":["../../../lib/domevent.ts"],"names":[],"mappings":"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"}
@@ -1,41 +1,7 @@
1
- /**
2
- * emit.js implements an Emitter class which emits events to a list of listeners. Listeners are
3
- * simply functions to call, and "emitting an event" just calls those functions.
4
- *
5
- * This is similar to Backbone events, with more focus on efficiency. Both inserting and removing
6
- * listeners is constant time.
7
- *
8
- * To create an emitter:
9
- * let emitter = new Emitter();
10
- *
11
- * To add a listener:
12
- * let listener = fooEmitter.addListener(callback);
13
- * To remove a listener:
14
- * listener.dispose();
15
- *
16
- * The only way to remove a listener is to dispose the Listener object returned by addListener().
17
- * You can often use autoDispose to do this automatically when subscribing in a constructor:
18
- * this.autoDispose(fooEmitter.addListener(this.onFoo, this));
19
- *
20
- * To emit an event, call emit() with any number of arguments:
21
- * emitter.emit("hello", "world");
22
- */
23
- // Note about a possible alternative implementation.
24
- //
25
- // We could implement the same interface using an array of listeners. Certain issues apply, in
26
- // particular with removing listeners from inside emit(), and in ensuring that removals are
27
- // constant time on average. Such an implementation was attempted and timed. The result is that
28
- // compared to the linked-list implementation here, add/remove combination could be made nearly
29
- // twice faster (on average), while emit and add/remove/emit are consistently slightly slower.
30
- //
31
- // The implementation here was chosen based on those timings, and as the simpler one. For example,
32
- // on one setup (macbook, node4, 5-listener queue), add+remove take 0.1us, while add+remove+emit
33
- // take 3.82us. (In array-based implementation with same set up, add+remove is 0.06us, while
34
- // add+remove+emit is 4.80us.)
35
- // The private property name to hold next/prev pointers.
36
1
  function _noop() { }
37
2
  /**
38
3
  * This is an implementation of a doubly-linked list, with just the minimal functionality we need.
4
+ * @internal
39
5
  */
40
6
  export class LLink {
41
7
  constructor() {
@@ -64,7 +30,7 @@ export class LLink {
64
30
  node._prev = node._next = null;
65
31
  }
66
32
  _disposeList() {
67
- let node = this;
33
+ let node = this; // eslint-disable-line @typescript-eslint/no-this-alias
68
34
  let next = node._next;
69
35
  while (next !== null) {
70
36
  node._next = node._prev = null;
@@ -73,20 +39,65 @@ export class LLink {
73
39
  }
74
40
  }
75
41
  }
42
+ /**
43
+ * An `Emitter` emits events to a list of listeners. Listeners are
44
+ * simply functions to call, and "emitting an event" just calls those functions.
45
+ *
46
+ * This is similar to Backbone events, with more focus on efficiency. Both inserting and removing
47
+ * listeners is constant time.
48
+ *
49
+ * To create an emitter:
50
+ * ```ts
51
+ * const emitter = new Emitter();
52
+ * ```
53
+ *
54
+ * To add a listener:
55
+ * ```ts
56
+ * const listener = fooEmitter.addListener(callback);
57
+ * ```
58
+ *
59
+ * To remove a listener:
60
+ * ```ts
61
+ * listener.dispose();
62
+ * ```
63
+ *
64
+ * The only way to remove a listener is to dispose the `Listener` object returned by `addListener()`.
65
+ * You can often use autoDispose to do this automatically when subscribing in a constructor:
66
+ * ```ts
67
+ * this.autoDispose(fooEmitter.addListener(this.onFoo, this));
68
+ * ```
69
+ *
70
+ * To emit an event, call `emit()` with any number of arguments:
71
+ * ```ts
72
+ * emitter.emit("hello", "world");
73
+ * ```
74
+ *
75
+ * @privateRemarks
76
+ *
77
+ * Note about a possible alternative implementation.
78
+ *
79
+ * We could implement the same interface using an array of listeners. Certain issues apply, in
80
+ * particular with removing listeners from inside emit(), and in ensuring that removals are
81
+ * constant time on average. Such an implementation was attempted and timed. The result is that
82
+ * compared to the linked-list implementation here, add/remove combination could be made nearly
83
+ * twice faster (on average), while emit and add/remove/emit are consistently slightly slower.
84
+ *
85
+ * The implementation here was chosen based on those timings, and as the simpler one. For example,
86
+ * on one setup (macbook, node4, 5-listener queue), add+remove take 0.1us, while add+remove+emit
87
+ * take 3.82us. (In array-based implementation with same set up, add+remove is 0.06us, while
88
+ * add+remove+emit is 4.80us.)
89
+ */
76
90
  export class Emitter extends LLink {
77
- /**
78
- * Constructs an Emitter object.
79
- */
80
91
  constructor() {
81
- super();
92
+ super(...arguments);
82
93
  this._changeCB = _noop;
83
94
  this._changeCBContext = undefined;
84
95
  }
85
96
  /**
86
97
  * Adds a listening callback to the list of functions to call on emit().
87
- * @param {Function} callback: Function to call.
88
- * @param {Object} optContext: Context for the function.
89
- * @returns {Listener} Listener object. Its dispose() method removes the callback from the list.
98
+ * @param callback - Function to call.
99
+ * @param optContext - Context for the function.
100
+ * @returns Listener object. Its dispose() method removes the callback from the list.
90
101
  */
91
102
  addListener(callback, optContext) {
92
103
  return new Listener(this, callback, optContext);
@@ -99,7 +110,7 @@ export class Emitter extends LLink {
99
110
  }
100
111
  /**
101
112
  * Sets the single callback that would get called when a listener is added or removed.
102
- * @param {Function} changeCB(hasListeners): Function to call after a listener is added or
113
+ * @param changeCB - Function to call after a listener is added or
103
114
  * removed. It's called with a boolean indicating whether this Emitter has any listeners.
104
115
  * Pass in `null` to unset the callback. Note that it can be called multiple times in a row
105
116
  * with hasListeners `true`.
@@ -110,6 +121,7 @@ export class Emitter extends LLink {
110
121
  }
111
122
  /**
112
123
  * Helper used by Listener class, but not intended for public usage.
124
+ * @internal
113
125
  */
114
126
  _triggerChangeCB() {
115
127
  this._changeCB.call(this._changeCBContext, this.hasListeners());
@@ -131,10 +143,18 @@ export class Emitter extends LLink {
131
143
  }
132
144
  }
133
145
  /**
134
- * Listener object wraps a callback added to an Emitter, allowing for O(1) removal when the
135
- * listener is disposed.
146
+ * The `Listener` object wraps a callback added to an Emitter, allowing for O(1) removal when the
147
+ * listener is disposed. It implements `IDisposable`.
136
148
  */
137
149
  export class Listener extends LLink {
150
+ /** @internal */
151
+ static callAll(begin, end, args) {
152
+ while (begin !== end) {
153
+ const lis = begin;
154
+ lis.callback.call(lis.context, ...args);
155
+ begin = lis._next;
156
+ }
157
+ }
138
158
  constructor(emitter, callback, context) {
139
159
  super();
140
160
  this.emitter = emitter;
@@ -143,13 +163,7 @@ export class Listener extends LLink {
143
163
  this._insertBefore(emitter, this);
144
164
  emitter._triggerChangeCB();
145
165
  }
146
- static callAll(begin, end, args) {
147
- while (begin !== end) {
148
- const lis = begin;
149
- lis.callback.call(lis.context, ...args);
150
- begin = lis._next;
151
- }
152
- }
166
+ /** @internal */
153
167
  dispose() {
154
168
  if (this.isDisposed()) {
155
169
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"emit.js","sourceRoot":"","sources":["../../../lib/emit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"emit.js","sourceRoot":"","sources":["../../../lib/emit.ts"],"names":[],"mappings":"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"}
@@ -37,10 +37,10 @@ export function fromKo(koObs) {
37
37
  return fromKoWrappers.get(koObs) || fromKoWrappers.set(koObs, new KoWrapObs(koObs)).get(koObs);
38
38
  }
39
39
  /**
40
- * An Observable that wraps a Knockout observable, created via fromKo(). It keeps minimal overhead
40
+ * An Observable that wraps a Knockout observable, created via `fromKo()`. It keeps minimal overhead
41
41
  * when unused by only subscribing to the wrapped observable while it itself has subscriptions.
42
42
  *
43
- * This way, when unused, the only reference is from the wrapper to the wrapped object. KoWrapObs
43
+ * This way, when unused, the only reference is from the wrapper to the wrapped object. `KoWrapObs`
44
44
  * should not be disposed; its lifetime is tied to that of the wrapped object.
45
45
  */
46
46
  export class KoWrapObs extends Observable {
@@ -61,8 +61,11 @@ export class KoWrapObs extends Observable {
61
61
  }
62
62
  });
63
63
  }
64
+ /** @override */
64
65
  get() { return this._koObs.peek(); }
66
+ /** @override */
65
67
  set(value) { bundleChanges(() => this._koObs(value)); }
68
+ /** @override */
66
69
  dispose() { throw new Error("KoWrapObs should not be disposed"); }
67
70
  }
68
71
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"kowrap.js","sourceRoot":"","sources":["../../../lib/kowrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kowrap.js","sourceRoot":"","sources":["../../../lib/kowrap.ts"],"names":[],"mappings":"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"}