@runopencode/rx-stencil 0.3.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 (126) hide show
  1. package/LICENSE +18 -0
  2. package/README.md +42 -0
  3. package/dist/cjs/index-825eaf13.js +1207 -0
  4. package/dist/cjs/index-825eaf13.js.map +1 -0
  5. package/dist/cjs/index.cjs.js +672 -0
  6. package/dist/cjs/index.cjs.js.map +1 -0
  7. package/dist/cjs/loader.cjs.js +24 -0
  8. package/dist/cjs/loader.cjs.js.map +1 -0
  9. package/dist/cjs/rx-async.cjs.entry.js +71 -0
  10. package/dist/cjs/rx-async.cjs.entry.js.map +1 -0
  11. package/dist/cjs/rx-stencil.cjs.js +28 -0
  12. package/dist/cjs/rx-stencil.cjs.js.map +1 -0
  13. package/dist/cjs/set-property-e9b49bec.js +1171 -0
  14. package/dist/cjs/set-property-e9b49bec.js.map +1 -0
  15. package/dist/collection/collection-manifest.json +12 -0
  16. package/dist/collection/components/async/async.js +66 -0
  17. package/dist/collection/components/async/async.js.map +1 -0
  18. package/dist/collection/components/async/async.scss +3 -0
  19. package/dist/collection/index.js +3 -0
  20. package/dist/collection/index.js.map +1 -0
  21. package/dist/collection/rx/decorator/index.js +3 -0
  22. package/dist/collection/rx/decorator/index.js.map +1 -0
  23. package/dist/collection/rx/decorator/query-selector-all.js +41 -0
  24. package/dist/collection/rx/decorator/query-selector-all.js.map +1 -0
  25. package/dist/collection/rx/decorator/query-selector.js +54 -0
  26. package/dist/collection/rx/decorator/query-selector.js.map +1 -0
  27. package/dist/collection/rx/index.js +5 -0
  28. package/dist/collection/rx/index.js.map +1 -0
  29. package/dist/collection/rx/observable/index.js +5 -0
  30. package/dist/collection/rx/observable/index.js.map +1 -0
  31. package/dist/collection/rx/observable/mutation-observable.js +13 -0
  32. package/dist/collection/rx/observable/mutation-observable.js.map +1 -0
  33. package/dist/collection/rx/observable/properties-observable.js +14 -0
  34. package/dist/collection/rx/observable/properties-observable.js.map +1 -0
  35. package/dist/collection/rx/observable/property-observable.js +28 -0
  36. package/dist/collection/rx/observable/property-observable.js.map +1 -0
  37. package/dist/collection/rx/observable/render-observable.js +24 -0
  38. package/dist/collection/rx/observable/render-observable.js.map +1 -0
  39. package/dist/collection/rx/operator/index.js +4 -0
  40. package/dist/collection/rx/operator/index.js.map +1 -0
  41. package/dist/collection/rx/operator/schedule-render.js +23 -0
  42. package/dist/collection/rx/operator/schedule-render.js.map +1 -0
  43. package/dist/collection/rx/operator/to-property.js +19 -0
  44. package/dist/collection/rx/operator/to-property.js.map +1 -0
  45. package/dist/collection/rx/operator/until-disconnected.js +105 -0
  46. package/dist/collection/rx/operator/until-disconnected.js.map +1 -0
  47. package/dist/collection/rx/subscriber/index.js +2 -0
  48. package/dist/collection/rx/subscriber/index.js.map +1 -0
  49. package/dist/collection/rx/subscriber/set-property.js +16 -0
  50. package/dist/collection/rx/subscriber/set-property.js.map +1 -0
  51. package/dist/collection/utils/get-property-descriptor.js +18 -0
  52. package/dist/collection/utils/get-property-descriptor.js.map +1 -0
  53. package/dist/collection/utils/index.js +2 -0
  54. package/dist/collection/utils/index.js.map +1 -0
  55. package/dist/components/index.d.ts +27 -0
  56. package/dist/components/index.js +661 -0
  57. package/dist/components/index.js.map +1 -0
  58. package/dist/components/rx-async.d.ts +11 -0
  59. package/dist/components/rx-async.js +86 -0
  60. package/dist/components/rx-async.js.map +1 -0
  61. package/dist/components/set-property.js +1153 -0
  62. package/dist/components/set-property.js.map +1 -0
  63. package/dist/esm/index-9f5c1c1c.js +1178 -0
  64. package/dist/esm/index-9f5c1c1c.js.map +1 -0
  65. package/dist/esm/index.js +660 -0
  66. package/dist/esm/index.js.map +1 -0
  67. package/dist/esm/loader.js +20 -0
  68. package/dist/esm/loader.js.map +1 -0
  69. package/dist/esm/polyfills/core-js.js +11 -0
  70. package/dist/esm/polyfills/css-shim.js +1 -0
  71. package/dist/esm/polyfills/dom.js +79 -0
  72. package/dist/esm/polyfills/es5-html-element.js +1 -0
  73. package/dist/esm/polyfills/index.js +34 -0
  74. package/dist/esm/polyfills/system.js +6 -0
  75. package/dist/esm/rx-async.entry.js +67 -0
  76. package/dist/esm/rx-async.entry.js.map +1 -0
  77. package/dist/esm/rx-stencil.js +23 -0
  78. package/dist/esm/rx-stencil.js.map +1 -0
  79. package/dist/esm/set-property-adc341f7.js +1153 -0
  80. package/dist/esm/set-property-adc341f7.js.map +1 -0
  81. package/dist/index.cjs.js +1 -0
  82. package/dist/index.js +1 -0
  83. package/dist/rx-stencil/index.esm.js +2 -0
  84. package/dist/rx-stencil/index.esm.js.map +1 -0
  85. package/dist/rx-stencil/p-3ccfcb54.js +3 -0
  86. package/dist/rx-stencil/p-3ccfcb54.js.map +1 -0
  87. package/dist/rx-stencil/p-55056215.js +2 -0
  88. package/dist/rx-stencil/p-55056215.js.map +1 -0
  89. package/dist/rx-stencil/p-b1ed83f6.entry.js +2 -0
  90. package/dist/rx-stencil/p-b1ed83f6.entry.js.map +1 -0
  91. package/dist/rx-stencil/rx-stencil.esm.js +2 -0
  92. package/dist/rx-stencil/rx-stencil.esm.js.map +1 -0
  93. package/dist/types/components/async/async.d.ts +10 -0
  94. package/dist/types/components.d.ts +41 -0
  95. package/dist/types/index.d.ts +2 -0
  96. package/dist/types/rx/decorator/index.d.ts +2 -0
  97. package/dist/types/rx/decorator/query-selector-all.d.ts +22 -0
  98. package/dist/types/rx/decorator/query-selector.d.ts +30 -0
  99. package/dist/types/rx/index.d.ts +4 -0
  100. package/dist/types/rx/observable/index.d.ts +4 -0
  101. package/dist/types/rx/observable/mutation-observable.d.ts +2 -0
  102. package/dist/types/rx/observable/properties-observable.d.ts +6 -0
  103. package/dist/types/rx/observable/property-observable.d.ts +6 -0
  104. package/dist/types/rx/observable/render-observable.d.ts +8 -0
  105. package/dist/types/rx/operator/index.d.ts +3 -0
  106. package/dist/types/rx/operator/schedule-render.d.ts +12 -0
  107. package/dist/types/rx/operator/to-property.d.ts +9 -0
  108. package/dist/types/rx/operator/until-disconnected.d.ts +7 -0
  109. package/dist/types/rx/subscriber/index.d.ts +1 -0
  110. package/dist/types/rx/subscriber/set-property.d.ts +16 -0
  111. package/dist/types/stencil-public-runtime.d.ts +1640 -0
  112. package/dist/types/utils/get-property-descriptor.d.ts +7 -0
  113. package/dist/types/utils/index.d.ts +1 -0
  114. package/docs/components.md +69 -0
  115. package/docs/creation-operators.md +138 -0
  116. package/docs/pipeable-operators.md +36 -0
  117. package/docs/query-selector-all-decorator.md +154 -0
  118. package/docs/query-selector-decorator.md +116 -0
  119. package/docs/subscribers.md +49 -0
  120. package/loader/cdn.js +3 -0
  121. package/loader/index.cjs.js +3 -0
  122. package/loader/index.d.ts +21 -0
  123. package/loader/index.es2017.js +3 -0
  124. package/loader/index.js +4 -0
  125. package/loader/package.json +11 -0
  126. package/package.json +48 -0
@@ -0,0 +1,672 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const index = require('./index-825eaf13.js');
6
+ const setProperty = require('./set-property-e9b49bec.js');
7
+
8
+ const dateTimestampProvider = {
9
+ now() {
10
+ return (dateTimestampProvider.delegate || Date).now();
11
+ },
12
+ delegate: undefined,
13
+ };
14
+
15
+ class ReplaySubject extends setProperty.Subject {
16
+ constructor(_bufferSize = Infinity, _windowTime = Infinity, _timestampProvider = dateTimestampProvider) {
17
+ super();
18
+ this._bufferSize = _bufferSize;
19
+ this._windowTime = _windowTime;
20
+ this._timestampProvider = _timestampProvider;
21
+ this._buffer = [];
22
+ this._infiniteTimeWindow = true;
23
+ this._infiniteTimeWindow = _windowTime === Infinity;
24
+ this._bufferSize = Math.max(1, _bufferSize);
25
+ this._windowTime = Math.max(1, _windowTime);
26
+ }
27
+ next(value) {
28
+ const { isStopped, _buffer, _infiniteTimeWindow, _timestampProvider, _windowTime } = this;
29
+ if (!isStopped) {
30
+ _buffer.push(value);
31
+ !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime);
32
+ }
33
+ this._trimBuffer();
34
+ super.next(value);
35
+ }
36
+ _subscribe(subscriber) {
37
+ this._throwIfClosed();
38
+ this._trimBuffer();
39
+ const subscription = this._innerSubscribe(subscriber);
40
+ const { _infiniteTimeWindow, _buffer } = this;
41
+ const copy = _buffer.slice();
42
+ for (let i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) {
43
+ subscriber.next(copy[i]);
44
+ }
45
+ this._checkFinalizedStatuses(subscriber);
46
+ return subscription;
47
+ }
48
+ _trimBuffer() {
49
+ const { _bufferSize, _timestampProvider, _buffer, _infiniteTimeWindow } = this;
50
+ const adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize;
51
+ _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize);
52
+ if (!_infiniteTimeWindow) {
53
+ const now = _timestampProvider.now();
54
+ let last = 0;
55
+ for (let i = 1; i < _buffer.length && _buffer[i] <= now; i += 2) {
56
+ last = i;
57
+ }
58
+ last && _buffer.splice(0, last + 1);
59
+ }
60
+ }
61
+ }
62
+
63
+ function map(project, thisArg) {
64
+ return setProperty.operate((source, subscriber) => {
65
+ let index = 0;
66
+ source.subscribe(setProperty.createOperatorSubscriber(subscriber, (value) => {
67
+ subscriber.next(project.call(thisArg, value, index++));
68
+ }));
69
+ });
70
+ }
71
+
72
+ const { isArray: isArray$1 } = Array;
73
+ function callOrApply(fn, args) {
74
+ return isArray$1(args) ? fn(...args) : fn(args);
75
+ }
76
+ function mapOneOrManyArgs(fn) {
77
+ return map(args => callOrApply(fn, args));
78
+ }
79
+
80
+ const { isArray } = Array;
81
+ const { getPrototypeOf, prototype: objectProto, keys: getKeys } = Object;
82
+ function argsArgArrayOrObject(args) {
83
+ if (args.length === 1) {
84
+ const first = args[0];
85
+ if (isArray(first)) {
86
+ return { args: first, keys: null };
87
+ }
88
+ if (isPOJO(first)) {
89
+ const keys = getKeys(first);
90
+ return {
91
+ args: keys.map((key) => first[key]),
92
+ keys,
93
+ };
94
+ }
95
+ }
96
+ return { args: args, keys: null };
97
+ }
98
+ function isPOJO(obj) {
99
+ return obj && typeof obj === 'object' && getPrototypeOf(obj) === objectProto;
100
+ }
101
+
102
+ function createObject(keys, values) {
103
+ return keys.reduce((result, key, i) => ((result[key] = values[i]), result), {});
104
+ }
105
+
106
+ function combineLatest(...args) {
107
+ const scheduler = setProperty.popScheduler(args);
108
+ const resultSelector = setProperty.popResultSelector(args);
109
+ const { args: observables, keys } = argsArgArrayOrObject(args);
110
+ if (observables.length === 0) {
111
+ return setProperty.from([], scheduler);
112
+ }
113
+ const result = new setProperty.Observable(combineLatestInit(observables, scheduler, keys
114
+ ?
115
+ (values) => createObject(keys, values)
116
+ :
117
+ setProperty.identity));
118
+ return resultSelector ? result.pipe(mapOneOrManyArgs(resultSelector)) : result;
119
+ }
120
+ function combineLatestInit(observables, scheduler, valueTransform = setProperty.identity) {
121
+ return (subscriber) => {
122
+ maybeSchedule(scheduler, () => {
123
+ const { length } = observables;
124
+ const values = new Array(length);
125
+ let active = length;
126
+ let remainingFirstValues = length;
127
+ for (let i = 0; i < length; i++) {
128
+ maybeSchedule(scheduler, () => {
129
+ const source = setProperty.from(observables[i], scheduler);
130
+ let hasFirstValue = false;
131
+ source.subscribe(setProperty.createOperatorSubscriber(subscriber, (value) => {
132
+ values[i] = value;
133
+ if (!hasFirstValue) {
134
+ hasFirstValue = true;
135
+ remainingFirstValues--;
136
+ }
137
+ if (!remainingFirstValues) {
138
+ subscriber.next(valueTransform(values.slice()));
139
+ }
140
+ }, () => {
141
+ if (!--active) {
142
+ subscriber.complete();
143
+ }
144
+ }));
145
+ }, subscriber);
146
+ }
147
+ }, subscriber);
148
+ };
149
+ }
150
+ function maybeSchedule(scheduler, execute, subscription) {
151
+ if (scheduler) {
152
+ setProperty.executeSchedule(subscription, scheduler, execute);
153
+ }
154
+ else {
155
+ execute();
156
+ }
157
+ }
158
+
159
+ function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) {
160
+ const buffer = [];
161
+ let active = 0;
162
+ let index = 0;
163
+ let isComplete = false;
164
+ const checkComplete = () => {
165
+ if (isComplete && !buffer.length && !active) {
166
+ subscriber.complete();
167
+ }
168
+ };
169
+ const outerNext = (value) => (active < concurrent ? doInnerSub(value) : buffer.push(value));
170
+ const doInnerSub = (value) => {
171
+ expand && subscriber.next(value);
172
+ active++;
173
+ let innerComplete = false;
174
+ setProperty.innerFrom(project(value, index++)).subscribe(setProperty.createOperatorSubscriber(subscriber, (innerValue) => {
175
+ onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue);
176
+ if (expand) {
177
+ outerNext(innerValue);
178
+ }
179
+ else {
180
+ subscriber.next(innerValue);
181
+ }
182
+ }, () => {
183
+ innerComplete = true;
184
+ }, undefined, () => {
185
+ if (innerComplete) {
186
+ try {
187
+ active--;
188
+ while (buffer.length && active < concurrent) {
189
+ const bufferedValue = buffer.shift();
190
+ if (innerSubScheduler) {
191
+ setProperty.executeSchedule(subscriber, innerSubScheduler, () => doInnerSub(bufferedValue));
192
+ }
193
+ else {
194
+ doInnerSub(bufferedValue);
195
+ }
196
+ }
197
+ checkComplete();
198
+ }
199
+ catch (err) {
200
+ subscriber.error(err);
201
+ }
202
+ }
203
+ }));
204
+ };
205
+ source.subscribe(setProperty.createOperatorSubscriber(subscriber, outerNext, () => {
206
+ isComplete = true;
207
+ checkComplete();
208
+ }));
209
+ return () => {
210
+ additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer();
211
+ };
212
+ }
213
+
214
+ function mergeMap(project, resultSelector, concurrent = Infinity) {
215
+ if (setProperty.isFunction(resultSelector)) {
216
+ return mergeMap((a, i) => map((b, ii) => resultSelector(a, b, i, ii))(setProperty.innerFrom(project(a, i))), concurrent);
217
+ }
218
+ else if (typeof resultSelector === 'number') {
219
+ concurrent = resultSelector;
220
+ }
221
+ return setProperty.operate((source, subscriber) => mergeInternals(source, subscriber, project, concurrent));
222
+ }
223
+
224
+ function mergeAll(concurrent = Infinity) {
225
+ return mergeMap(setProperty.identity, concurrent);
226
+ }
227
+
228
+ function concatAll() {
229
+ return mergeAll(1);
230
+ }
231
+
232
+ function concat(...args) {
233
+ return concatAll()(setProperty.from(args, setProperty.popScheduler(args)));
234
+ }
235
+
236
+ function filter(predicate, thisArg) {
237
+ return setProperty.operate((source, subscriber) => {
238
+ let index = 0;
239
+ source.subscribe(setProperty.createOperatorSubscriber(subscriber, (value) => predicate.call(thisArg, value, index++) && subscriber.next(value)));
240
+ });
241
+ }
242
+
243
+ function share(options = {}) {
244
+ const { connector = () => new setProperty.Subject(), resetOnError = true, resetOnComplete = true, resetOnRefCountZero = true } = options;
245
+ return (wrapperSource) => {
246
+ let connection;
247
+ let resetConnection;
248
+ let subject;
249
+ let refCount = 0;
250
+ let hasCompleted = false;
251
+ let hasErrored = false;
252
+ const cancelReset = () => {
253
+ resetConnection === null || resetConnection === void 0 ? void 0 : resetConnection.unsubscribe();
254
+ resetConnection = undefined;
255
+ };
256
+ const reset = () => {
257
+ cancelReset();
258
+ connection = subject = undefined;
259
+ hasCompleted = hasErrored = false;
260
+ };
261
+ const resetAndUnsubscribe = () => {
262
+ const conn = connection;
263
+ reset();
264
+ conn === null || conn === void 0 ? void 0 : conn.unsubscribe();
265
+ };
266
+ return setProperty.operate((source, subscriber) => {
267
+ refCount++;
268
+ if (!hasErrored && !hasCompleted) {
269
+ cancelReset();
270
+ }
271
+ const dest = (subject = subject !== null && subject !== void 0 ? subject : connector());
272
+ subscriber.add(() => {
273
+ refCount--;
274
+ if (refCount === 0 && !hasErrored && !hasCompleted) {
275
+ resetConnection = handleReset(resetAndUnsubscribe, resetOnRefCountZero);
276
+ }
277
+ });
278
+ dest.subscribe(subscriber);
279
+ if (!connection &&
280
+ refCount > 0) {
281
+ connection = new setProperty.SafeSubscriber({
282
+ next: (value) => dest.next(value),
283
+ error: (err) => {
284
+ hasErrored = true;
285
+ cancelReset();
286
+ resetConnection = handleReset(reset, resetOnError, err);
287
+ dest.error(err);
288
+ },
289
+ complete: () => {
290
+ hasCompleted = true;
291
+ cancelReset();
292
+ resetConnection = handleReset(reset, resetOnComplete);
293
+ dest.complete();
294
+ },
295
+ });
296
+ setProperty.innerFrom(source).subscribe(connection);
297
+ }
298
+ })(wrapperSource);
299
+ };
300
+ }
301
+ function handleReset(reset, on, ...args) {
302
+ if (on === true) {
303
+ reset();
304
+ return;
305
+ }
306
+ if (on === false) {
307
+ return;
308
+ }
309
+ const onSubscriber = new setProperty.SafeSubscriber({
310
+ next: () => {
311
+ onSubscriber.unsubscribe();
312
+ reset();
313
+ },
314
+ });
315
+ return setProperty.innerFrom(on(...args)).subscribe(onSubscriber);
316
+ }
317
+
318
+ function shareReplay(configOrBufferSize, windowTime, scheduler) {
319
+ let bufferSize;
320
+ let refCount = false;
321
+ if (configOrBufferSize && typeof configOrBufferSize === 'object') {
322
+ ({ bufferSize = Infinity, windowTime = Infinity, refCount = false, scheduler } = configOrBufferSize);
323
+ }
324
+ else {
325
+ bufferSize = (configOrBufferSize !== null && configOrBufferSize !== void 0 ? configOrBufferSize : Infinity);
326
+ }
327
+ return share({
328
+ connector: () => new ReplaySubject(bufferSize, windowTime, scheduler),
329
+ resetOnError: true,
330
+ resetOnComplete: false,
331
+ resetOnRefCountZero: refCount,
332
+ });
333
+ }
334
+
335
+ function startWith(...values) {
336
+ const scheduler = setProperty.popScheduler(values);
337
+ return setProperty.operate((source, subscriber) => {
338
+ (scheduler ? concat(values, source, scheduler) : concat(values, source)).subscribe(subscriber);
339
+ });
340
+ }
341
+
342
+ function takeUntil(notifier) {
343
+ return setProperty.operate((source, subscriber) => {
344
+ setProperty.innerFrom(notifier).subscribe(setProperty.createOperatorSubscriber(subscriber, () => subscriber.complete(), setProperty.noop));
345
+ !subscriber.closed && source.subscribe(subscriber);
346
+ });
347
+ }
348
+
349
+ function tap(observerOrNext, error, complete) {
350
+ const tapObserver = setProperty.isFunction(observerOrNext) || error || complete
351
+ ?
352
+ { next: observerOrNext, error, complete }
353
+ : observerOrNext;
354
+ return tapObserver
355
+ ? setProperty.operate((source, subscriber) => {
356
+ var _a;
357
+ (_a = tapObserver.subscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver);
358
+ let isUnsub = true;
359
+ source.subscribe(setProperty.createOperatorSubscriber(subscriber, (value) => {
360
+ var _a;
361
+ (_a = tapObserver.next) === null || _a === void 0 ? void 0 : _a.call(tapObserver, value);
362
+ subscriber.next(value);
363
+ }, () => {
364
+ var _a;
365
+ isUnsub = false;
366
+ (_a = tapObserver.complete) === null || _a === void 0 ? void 0 : _a.call(tapObserver);
367
+ subscriber.complete();
368
+ }, (err) => {
369
+ var _a;
370
+ isUnsub = false;
371
+ (_a = tapObserver.error) === null || _a === void 0 ? void 0 : _a.call(tapObserver, err);
372
+ subscriber.error(err);
373
+ }, () => {
374
+ var _a, _b;
375
+ if (isUnsub) {
376
+ (_a = tapObserver.unsubscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver);
377
+ }
378
+ (_b = tapObserver.finalize) === null || _b === void 0 ? void 0 : _b.call(tapObserver);
379
+ }));
380
+ })
381
+ :
382
+ setProperty.identity;
383
+ }
384
+
385
+ function mutationObservable(target, options) {
386
+ return new setProperty.Observable((observer) => {
387
+ let mutation = new MutationObserver((mutations) => {
388
+ observer.next(mutations);
389
+ });
390
+ mutation.observe(target, options);
391
+ return () => {
392
+ mutation.disconnect();
393
+ };
394
+ });
395
+ }
396
+
397
+ /**
398
+ * Returns an observable that emits an array of values from the given properties.
399
+ */
400
+ function propertiesObservable(cmp, ...properties) {
401
+ if (0 === properties.length) {
402
+ throw new Error('At least one property must be specified.');
403
+ }
404
+ return combineLatest(properties.map((property) => {
405
+ return setProperty.propertyObservable(cmp, property);
406
+ }));
407
+ }
408
+
409
+ /**
410
+ * Returns an observable that emits when the component render()
411
+ * function is called. Value will be emitted after the next
412
+ * microtask (next tick).
413
+ */
414
+ function renderObservable(cmp) {
415
+ if ('function' !== typeof cmp.render) {
416
+ throw new Error('Component does not have a render function.');
417
+ }
418
+ return new setProperty.Observable((subscriber) => {
419
+ let previousRender = cmp.render;
420
+ cmp.render = function () {
421
+ Promise.resolve().then(() => {
422
+ subscriber.next();
423
+ });
424
+ return previousRender.call(this);
425
+ };
426
+ return () => {
427
+ cmp.render = previousRender;
428
+ };
429
+ });
430
+ }
431
+
432
+ /**
433
+ * Observe all sub nodes of the given node and notify
434
+ * when any of them is removed and/or added.
435
+ *
436
+ * {@internal}
437
+ */
438
+ function observeSubNodes(target) {
439
+ return mutationObservable(target, {
440
+ subtree: true,
441
+ childList: true,
442
+ }).pipe(filter((records) => {
443
+ for (let i = 0; i < records.length; i++) {
444
+ if ('childList' !== records[i].type) {
445
+ continue;
446
+ }
447
+ if (records[i].addedNodes.length || records[i].removedNodes.length) {
448
+ return true;
449
+ }
450
+ }
451
+ return false;
452
+ }), map(() => {
453
+ /* noop */
454
+ }));
455
+ }
456
+ /**
457
+ * Property decorator inspired by Angular's @ViewChild/@ContentChild.
458
+ *
459
+ * After each render, the decorated property will be set to the first element
460
+ * matching the given selector. If no element is found, the property will be
461
+ * set to null.
462
+ */
463
+ function QuerySelector(selector, options) {
464
+ return (target, property) => {
465
+ let descriptor = {
466
+ set: function () {
467
+ throw new Error(`Property "${property}" is read-only.`);
468
+ },
469
+ get: function () {
470
+ let observableProperty = `__rx__query_selector__observable__shadow_root__${(options === null || options === void 0 ? void 0 : options.shadowRoot) ? 'yes' : 'no'}__mutation_observer__${(options === null || options === void 0 ? void 0 : options.mutationObserver) ? 'yes' : 'no'}__selector__${selector}__`;
471
+ if (!this[observableProperty]) {
472
+ let root = (options === null || options === void 0 ? void 0 : options.shadowRoot) ? index.getElement(this).shadowRoot : index.getElement(this);
473
+ let observable = (options === null || options === void 0 ? void 0 : options.mutationObserver) ? observeSubNodes(root) : renderObservable(this);
474
+ this[observableProperty] = observable.pipe(startWith(), map(() => root.querySelector(selector)), setProperty.distinctUntilChanged(), shareReplay(1));
475
+ }
476
+ return this[observableProperty];
477
+ },
478
+ };
479
+ Object.defineProperty(target, property, descriptor);
480
+ };
481
+ }
482
+
483
+ /**
484
+ * Property decorator inspired by Angular's @ViewChild/@ContentChild.
485
+ *
486
+ * After each render, the decorated property will be set to the first element
487
+ * matching the given selector. If no element is found, the property will be
488
+ * set to null.
489
+ */
490
+ function QuerySelectorAll(selector, options) {
491
+ return (target, property) => {
492
+ let descriptor = {
493
+ set: function () {
494
+ throw new Error(`Property "${property}" is read-only.`);
495
+ },
496
+ get: function () {
497
+ let observableProperty = `__rx__query_selector_all__observable__shadow_root__${(options === null || options === void 0 ? void 0 : options.shadowRoot) ? 'yes' : 'no'}__mutation_observer__${(options === null || options === void 0 ? void 0 : options.mutationObserver) ? 'yes' : 'no'}__selector__${selector}__`;
498
+ if (!this[observableProperty]) {
499
+ let root = (options === null || options === void 0 ? void 0 : options.shadowRoot) ? index.getElement(this).shadowRoot : index.getElement(this);
500
+ let observable = (options === null || options === void 0 ? void 0 : options.mutationObserver) ? observeSubNodes(root) : renderObservable(this);
501
+ this[observableProperty] = observable.pipe(startWith(), map(() => Array.from(root.querySelectorAll(selector))), setProperty.distinctUntilChanged((previous, current) => {
502
+ if (previous.length !== current.length) {
503
+ return false;
504
+ }
505
+ for (let i = 0; i < previous.length; i++) {
506
+ if (previous[i] !== current[i]) {
507
+ return false;
508
+ }
509
+ }
510
+ return true;
511
+ }), shareReplay(1));
512
+ }
513
+ return this[observableProperty];
514
+ },
515
+ };
516
+ Object.defineProperty(target, property, descriptor);
517
+ };
518
+ }
519
+
520
+ /**
521
+ * Schedule a render of the component. This is useful when you
522
+ * want to force a render of the component as result of changing
523
+ * the values of the component which are not tracked by Stencil,
524
+ * observables, for example.
525
+ *
526
+ * By default, the render is scheduled on the next tick, but you
527
+ * can disable this behavior by passing `false` as second argument.
528
+ */
529
+ function scheduleRender(cmp, nextTick = true) {
530
+ return (source) => {
531
+ return source.pipe(tap(() => {
532
+ if (!nextTick) {
533
+ index.forceUpdate(cmp);
534
+ return;
535
+ }
536
+ Promise.resolve().then(() => index.forceUpdate(cmp));
537
+ }));
538
+ };
539
+ }
540
+
541
+ /**
542
+ * Use this function to tap into a value stream and flush value to
543
+ * component property. You may also use this function as subscription
544
+ * function (function will detect that value is passed instead of
545
+ * observable).
546
+ */
547
+ function toProperty(cmp, property) {
548
+ // ensure that the property is defined on the component.
549
+ setProperty.getPropertyDescriptor(cmp, property);
550
+ // @ts-ignore
551
+ return (source) => {
552
+ return source.pipe(tap((value) => {
553
+ cmp[property] = value;
554
+ }));
555
+ };
556
+ }
557
+
558
+ /**
559
+ * A map of component observables that are being watched for
560
+ * disconnect callback invocation. A weak map is being used
561
+ * so that the component instance can be garbage collected.
562
+ *
563
+ * {@internal}
564
+ */
565
+ let disconnectObservables = new WeakMap();
566
+ /**
567
+ * Creates an observable that emits a value when the component
568
+ * is disconnected from DOM and method `disconnectedCallback()`
569
+ * is invoked. StencilJS will supress the invocation of this
570
+ * method if it is not defined on the component.
571
+ *
572
+ * {@internal}
573
+ */
574
+ let createUsingDisconnectedCallback = function (cmp) {
575
+ let previousDisconnected = cmp.disconnectedCallback;
576
+ if (!previousDisconnected) {
577
+ throw new Error(`Component "${cmp.constructor.name}" does not have a "disconnectedCallback()" method defined.`);
578
+ }
579
+ let disconnectedSubject$ = new setProperty.Subject();
580
+ cmp.disconnectedCallback = function () {
581
+ if (previousDisconnected) {
582
+ previousDisconnected.call(cmp);
583
+ }
584
+ disconnectedSubject$.next();
585
+ };
586
+ return disconnectedSubject$.asObservable();
587
+ };
588
+ /**
589
+ * Mutation observer is our next heuristic. We will monitor parent
590
+ * node of the component and emit a value when the component is
591
+ * disconnected from DOM. This will only work, of course, if the
592
+ * component is not the root node of the application and component
593
+ * is already within DOM.
594
+ *
595
+ * {@internal}
596
+ */
597
+ let createUsingMutationObserver = function (cmp) {
598
+ let element = index.getElement(cmp);
599
+ if (null === element.parentNode) {
600
+ throw new Error(`Component "${cmp.constructor.name}" is not within DOM.`);
601
+ }
602
+ return new setProperty.Observable((observer) => {
603
+ let mutationObserver = new MutationObserver((mutations) => {
604
+ mutations.forEach((record) => {
605
+ for (let node of Array.from(record.removedNodes)) {
606
+ if (node !== element) {
607
+ continue;
608
+ }
609
+ observer.next();
610
+ observer.complete();
611
+ }
612
+ });
613
+ });
614
+ mutationObserver.observe(element.parentNode, {
615
+ childList: true,
616
+ subtree: true,
617
+ });
618
+ return () => {
619
+ mutationObserver.disconnect();
620
+ // we can not re-use this observable, so we have to delete it
621
+ disconnectObservables.delete(cmp);
622
+ };
623
+ });
624
+ };
625
+ /**
626
+ * Creates an observable that emits a value when the component
627
+ * is disconnected from DOM.
628
+ *
629
+ * {@internal}
630
+ */
631
+ function createDisconnectObservable(cmp) {
632
+ let functions = [
633
+ createUsingDisconnectedCallback,
634
+ createUsingMutationObserver,
635
+ ];
636
+ for (let fn of functions) {
637
+ try {
638
+ disconnectObservables.set(cmp, fn(cmp));
639
+ return;
640
+ }
641
+ catch (e) {
642
+ // noop
643
+ }
644
+ }
645
+ throw new Error(`Could not create disconnect observable for component "${cmp.constructor.name}".`);
646
+ }
647
+ /**
648
+ * Operator that unsubscribes from the source observable when
649
+ * the component is disconnected from DOM.
650
+ */
651
+ function untilDisconnected(cmp) {
652
+ return (source) => {
653
+ if (!disconnectObservables.has(cmp)) {
654
+ createDisconnectObservable(cmp);
655
+ }
656
+ let disconnectObservable$ = disconnectObservables.get(cmp);
657
+ return source.pipe(takeUntil(disconnectObservable$));
658
+ };
659
+ }
660
+
661
+ exports.propertyObservable = setProperty.propertyObservable;
662
+ exports.setProperty = setProperty.setProperty;
663
+ exports.QuerySelector = QuerySelector;
664
+ exports.QuerySelectorAll = QuerySelectorAll;
665
+ exports.mutationObservable = mutationObservable;
666
+ exports.propertiesObservable = propertiesObservable;
667
+ exports.renderObservable = renderObservable;
668
+ exports.scheduleRender = scheduleRender;
669
+ exports.toProperty = toProperty;
670
+ exports.untilDisconnected = untilDisconnected;
671
+
672
+ //# sourceMappingURL=index.cjs.js.map