@angular/cdk 16.1.0-next.0 → 16.1.0-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/observers/private/index.mjs +9 -0
- package/esm2022/observers/private/private_public_index.mjs +5 -0
- package/esm2022/observers/private/shared-resize-observer.mjs +126 -0
- package/esm2022/table/table.mjs +3 -3
- package/esm2022/version.mjs +1 -1
- package/fesm2022/cdk.mjs +1 -1
- package/fesm2022/cdk.mjs.map +1 -1
- package/fesm2022/observers/private.mjs +125 -0
- package/fesm2022/observers/private.mjs.map +1 -0
- package/fesm2022/table.mjs +2 -2
- package/fesm2022/table.mjs.map +1 -1
- package/observers/private/index.d.ts +33 -0
- package/package.json +7 -1
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-add/index.mjs +1 -1
- package/schematics/update-tool/component-resource-collector.js +2 -2
- package/schematics/update-tool/component-resource-collector.mjs +2 -2
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { inject, NgZone, Injectable } from '@angular/core';
|
|
3
|
+
import { Subject, Observable } from 'rxjs';
|
|
4
|
+
import { filter, shareReplay, takeUntil } from 'rxjs/operators';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Handler that logs "ResizeObserver loop limit exceeded" errors.
|
|
8
|
+
* These errors are not shown in the Chrome console, so we log them to ensure developers are aware.
|
|
9
|
+
* @param e The error
|
|
10
|
+
*/
|
|
11
|
+
const loopLimitExceededErrorHandler = (e) => {
|
|
12
|
+
if (e instanceof Error && e.message === 'ResizeObserver loop limit exceeded') {
|
|
13
|
+
console.error(`${e.message}. This could indicate a performance issue with your app. See https://github.com/WICG/resize-observer/blob/master/explainer.md#error-handling`);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* A shared ResizeObserver to be used for a particular box type (content-box, border-box, or
|
|
18
|
+
* device-pixel-content-box)
|
|
19
|
+
*/
|
|
20
|
+
class SingleBoxSharedResizeObserver {
|
|
21
|
+
constructor(
|
|
22
|
+
/** The box type to observe for resizes. */
|
|
23
|
+
_box) {
|
|
24
|
+
this._box = _box;
|
|
25
|
+
/** Stream that emits when the shared observer is destroyed. */
|
|
26
|
+
this._destroyed = new Subject();
|
|
27
|
+
/** Stream of all events from the ResizeObserver. */
|
|
28
|
+
this._resizeSubject = new Subject();
|
|
29
|
+
/** A map of elements to streams of their resize events. */
|
|
30
|
+
this._elementObservables = new Map();
|
|
31
|
+
if (typeof ResizeObserver !== 'undefined') {
|
|
32
|
+
this._resizeObserver = new ResizeObserver(entries => this._resizeSubject.next(entries));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Gets a stream of resize events for the given element.
|
|
37
|
+
* @param target The element to observe.
|
|
38
|
+
* @return The stream of resize events for the element.
|
|
39
|
+
*/
|
|
40
|
+
observe(target) {
|
|
41
|
+
if (!this._elementObservables.has(target)) {
|
|
42
|
+
this._elementObservables.set(target, new Observable(observer => {
|
|
43
|
+
const subscription = this._resizeSubject.subscribe(observer);
|
|
44
|
+
this._resizeObserver?.observe(target, { box: this._box });
|
|
45
|
+
return () => {
|
|
46
|
+
this._resizeObserver?.unobserve(target);
|
|
47
|
+
subscription.unsubscribe();
|
|
48
|
+
this._elementObservables.delete(target);
|
|
49
|
+
};
|
|
50
|
+
}).pipe(filter(entries => entries.some(entry => entry.target === target)),
|
|
51
|
+
// Share a replay of the last event so that subsequent calls to observe the same element
|
|
52
|
+
// receive initial sizing info like the first one. Also enable ref counting so the
|
|
53
|
+
// element will be automatically unobserved when there are no more subscriptions.
|
|
54
|
+
shareReplay({ bufferSize: 1, refCount: true }), takeUntil(this._destroyed)));
|
|
55
|
+
}
|
|
56
|
+
return this._elementObservables.get(target);
|
|
57
|
+
}
|
|
58
|
+
/** Destroys this instance. */
|
|
59
|
+
destroy() {
|
|
60
|
+
this._destroyed.next();
|
|
61
|
+
this._destroyed.complete();
|
|
62
|
+
this._resizeSubject.complete();
|
|
63
|
+
this._elementObservables.clear();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Allows observing resize events on multiple elements using a shared set of ResizeObserver.
|
|
68
|
+
* Sharing a ResizeObserver instance is recommended for better performance (see
|
|
69
|
+
* https://github.com/WICG/resize-observer/issues/59).
|
|
70
|
+
*
|
|
71
|
+
* Rather than share a single `ResizeObserver`, this class creates one `ResizeObserver` per type
|
|
72
|
+
* of observed box ('content-box', 'border-box', and 'device-pixel-content-box'). This avoids
|
|
73
|
+
* later calls to `observe` with a different box type from influencing the events dispatched to
|
|
74
|
+
* earlier calls.
|
|
75
|
+
*/
|
|
76
|
+
class SharedResizeObserver {
|
|
77
|
+
constructor() {
|
|
78
|
+
/** Map of box type to shared resize observer. */
|
|
79
|
+
this._observers = new Map();
|
|
80
|
+
/** The Angular zone. */
|
|
81
|
+
this._ngZone = inject(NgZone);
|
|
82
|
+
if (typeof ResizeObserver !== 'undefined' && (typeof ngDevMode === 'undefined' || ngDevMode)) {
|
|
83
|
+
this._ngZone.runOutsideAngular(() => {
|
|
84
|
+
window.addEventListener('error', loopLimitExceededErrorHandler);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
ngOnDestroy() {
|
|
89
|
+
for (const [, observer] of this._observers) {
|
|
90
|
+
observer.destroy();
|
|
91
|
+
}
|
|
92
|
+
this._observers.clear();
|
|
93
|
+
if (typeof ResizeObserver !== 'undefined' && (typeof ngDevMode === 'undefined' || ngDevMode)) {
|
|
94
|
+
window.removeEventListener('error', loopLimitExceededErrorHandler);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Gets a stream of resize events for the given target element and box type.
|
|
99
|
+
* @param target The element to observe for resizes.
|
|
100
|
+
* @param options Options to pass to the `ResizeObserver`
|
|
101
|
+
* @return The stream of resize events for the element.
|
|
102
|
+
*/
|
|
103
|
+
observe(target, options) {
|
|
104
|
+
const box = options?.box || 'content-box';
|
|
105
|
+
if (!this._observers.has(box)) {
|
|
106
|
+
this._observers.set(box, new SingleBoxSharedResizeObserver(box));
|
|
107
|
+
}
|
|
108
|
+
return this._observers.get(box).observe(target);
|
|
109
|
+
}
|
|
110
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: SharedResizeObserver, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
111
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: SharedResizeObserver, providedIn: 'root' }); }
|
|
112
|
+
}
|
|
113
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: SharedResizeObserver, decorators: [{
|
|
114
|
+
type: Injectable,
|
|
115
|
+
args: [{
|
|
116
|
+
providedIn: 'root',
|
|
117
|
+
}]
|
|
118
|
+
}], ctorParameters: function () { return []; } });
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Generated bundle index. Do not edit.
|
|
122
|
+
*/
|
|
123
|
+
|
|
124
|
+
export { SharedResizeObserver };
|
|
125
|
+
//# sourceMappingURL=private.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"private.mjs","sources":["../../../../../../../src/cdk/observers/private/shared-resize-observer.ts","../../../../../../../src/cdk/observers/private/private_public_index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {inject, Injectable, NgZone, OnDestroy} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\nimport {filter, shareReplay, takeUntil} from 'rxjs/operators';\n\n/**\n * Handler that logs \"ResizeObserver loop limit exceeded\" errors.\n * These errors are not shown in the Chrome console, so we log them to ensure developers are aware.\n * @param e The error\n */\nconst loopLimitExceededErrorHandler = (e: unknown) => {\n if (e instanceof Error && e.message === 'ResizeObserver loop limit exceeded') {\n console.error(\n `${e.message}. This could indicate a performance issue with your app. See https://github.com/WICG/resize-observer/blob/master/explainer.md#error-handling`,\n );\n }\n};\n\n/**\n * A shared ResizeObserver to be used for a particular box type (content-box, border-box, or\n * device-pixel-content-box)\n */\nclass SingleBoxSharedResizeObserver {\n /** Stream that emits when the shared observer is destroyed. */\n private _destroyed = new Subject<void>();\n /** Stream of all events from the ResizeObserver. */\n private _resizeSubject = new Subject<ResizeObserverEntry[]>();\n /** ResizeObserver used to observe element resize events. */\n private _resizeObserver?: ResizeObserver;\n /** A map of elements to streams of their resize events. */\n private _elementObservables = new Map<Element, Observable<ResizeObserverEntry[]>>();\n\n constructor(\n /** The box type to observe for resizes. */\n private _box: ResizeObserverBoxOptions,\n ) {\n if (typeof ResizeObserver !== 'undefined') {\n this._resizeObserver = new ResizeObserver(entries => this._resizeSubject.next(entries));\n }\n }\n\n /**\n * Gets a stream of resize events for the given element.\n * @param target The element to observe.\n * @return The stream of resize events for the element.\n */\n observe(target: Element): Observable<ResizeObserverEntry[]> {\n if (!this._elementObservables.has(target)) {\n this._elementObservables.set(\n target,\n new Observable<ResizeObserverEntry[]>(observer => {\n const subscription = this._resizeSubject.subscribe(observer);\n this._resizeObserver?.observe(target, {box: this._box});\n return () => {\n this._resizeObserver?.unobserve(target);\n subscription.unsubscribe();\n this._elementObservables.delete(target);\n };\n }).pipe(\n filter(entries => entries.some(entry => entry.target === target)),\n // Share a replay of the last event so that subsequent calls to observe the same element\n // receive initial sizing info like the first one. Also enable ref counting so the\n // element will be automatically unobserved when there are no more subscriptions.\n shareReplay({bufferSize: 1, refCount: true}),\n takeUntil(this._destroyed),\n ),\n );\n }\n return this._elementObservables.get(target)!;\n }\n\n /** Destroys this instance. */\n destroy() {\n this._destroyed.next();\n this._destroyed.complete();\n this._resizeSubject.complete();\n this._elementObservables.clear();\n }\n}\n\n/**\n * Allows observing resize events on multiple elements using a shared set of ResizeObserver.\n * Sharing a ResizeObserver instance is recommended for better performance (see\n * https://github.com/WICG/resize-observer/issues/59).\n *\n * Rather than share a single `ResizeObserver`, this class creates one `ResizeObserver` per type\n * of observed box ('content-box', 'border-box', and 'device-pixel-content-box'). This avoids\n * later calls to `observe` with a different box type from influencing the events dispatched to\n * earlier calls.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SharedResizeObserver implements OnDestroy {\n /** Map of box type to shared resize observer. */\n private _observers = new Map<ResizeObserverBoxOptions, SingleBoxSharedResizeObserver>();\n\n /** The Angular zone. */\n private _ngZone = inject(NgZone);\n\n constructor() {\n if (typeof ResizeObserver !== 'undefined' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n this._ngZone.runOutsideAngular(() => {\n window.addEventListener('error', loopLimitExceededErrorHandler);\n });\n }\n }\n\n ngOnDestroy() {\n for (const [, observer] of this._observers) {\n observer.destroy();\n }\n this._observers.clear();\n if (typeof ResizeObserver !== 'undefined' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n window.removeEventListener('error', loopLimitExceededErrorHandler);\n }\n }\n\n /**\n * Gets a stream of resize events for the given target element and box type.\n * @param target The element to observe for resizes.\n * @param options Options to pass to the `ResizeObserver`\n * @return The stream of resize events for the element.\n */\n observe(target: Element, options?: ResizeObserverOptions): Observable<ResizeObserverEntry[]> {\n const box = options?.box || 'content-box';\n if (!this._observers.has(box)) {\n this._observers.set(box, new SingleBoxSharedResizeObserver(box));\n }\n return this._observers.get(box)!.observe(target);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/fesm2022/table.mjs
CHANGED
|
@@ -1939,7 +1939,7 @@ class CdkTable {
|
|
|
1939
1939
|
this._isShowingNoDataRow = shouldShow;
|
|
1940
1940
|
}
|
|
1941
1941
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: CdkTable, deps: [{ token: i0.IterableDiffers }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: 'role', attribute: true }, { token: i1.Directionality, optional: true }, { token: DOCUMENT }, { token: i2.Platform }, { token: _VIEW_REPEATER_STRATEGY }, { token: _COALESCED_STYLE_SCHEDULER }, { token: i3.ViewportRuler }, { token: STICKY_POSITIONING_LISTENER, optional: true, skipSelf: true }, { token: i0.NgZone, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1942
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: CdkTable, selector: "cdk-table, table[cdk-table]", inputs: { trackBy: "trackBy", dataSource: "dataSource", multiTemplateDataRows: "multiTemplateDataRows", fixedLayout: "fixedLayout" }, outputs: { contentChanged: "contentChanged" }, host: { attributes: { "ngSkipHydration": "
|
|
1942
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: CdkTable, selector: "cdk-table, table[cdk-table]", inputs: { trackBy: "trackBy", dataSource: "dataSource", multiTemplateDataRows: "multiTemplateDataRows", fixedLayout: "fixedLayout" }, outputs: { contentChanged: "contentChanged" }, host: { attributes: { "ngSkipHydration": "" }, properties: { "class.cdk-table-fixed-layout": "fixedLayout" }, classAttribute: "cdk-table" }, providers: [
|
|
1943
1943
|
{ provide: CDK_TABLE, useExisting: CdkTable },
|
|
1944
1944
|
{ provide: _VIEW_REPEATER_STRATEGY, useClass: _DisposeViewRepeaterStrategy },
|
|
1945
1945
|
{ provide: _COALESCED_STYLE_SCHEDULER, useClass: _CoalescedStyleScheduler },
|
|
@@ -1952,7 +1952,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImpor
|
|
|
1952
1952
|
args: [{ selector: 'cdk-table, table[cdk-table]', exportAs: 'cdkTable', template: CDK_TABLE_TEMPLATE, host: {
|
|
1953
1953
|
'class': 'cdk-table',
|
|
1954
1954
|
'[class.cdk-table-fixed-layout]': 'fixedLayout',
|
|
1955
|
-
'ngSkipHydration': '
|
|
1955
|
+
'ngSkipHydration': '',
|
|
1956
1956
|
}, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, providers: [
|
|
1957
1957
|
{ provide: CDK_TABLE, useExisting: CdkTable },
|
|
1958
1958
|
{ provide: _VIEW_REPEATER_STRATEGY, useClass: _DisposeViewRepeaterStrategy },
|