@scion/components 18.0.0 → 18.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.
- package/README.md +2 -2
- package/dimension/bounding-client-rect.signal.d.ts +23 -0
- package/dimension/dimension.d.ts +10 -0
- package/dimension/dimension.directive.d.ts +11 -29
- package/dimension/dimension.signal.d.ts +19 -0
- package/dimension/package.json +3 -0
- package/dimension/public_api.d.ts +4 -1
- package/esm2022/dimension/bounding-client-rect.signal.mjs +53 -0
- package/esm2022/dimension/dimension.directive.mjs +31 -53
- package/esm2022/dimension/dimension.mjs +11 -0
- package/esm2022/dimension/dimension.signal.mjs +58 -0
- package/esm2022/dimension/public_api.mjs +3 -1
- package/esm2022/sashbox/sashbox.component.mjs +39 -43
- package/esm2022/throbber/throbber.component.mjs +3 -7
- package/esm2022/viewport/scrollbar/scrollbar.component.mjs +4 -4
- package/esm2022/viewport/viewport.component.mjs +4 -5
- package/fesm2022/scion-components-dimension.mjs +134 -53
- package/fesm2022/scion-components-dimension.mjs.map +1 -1
- package/fesm2022/scion-components-sashbox.mjs +38 -42
- package/fesm2022/scion-components-sashbox.mjs.map +1 -1
- package/fesm2022/scion-components-throbber.mjs +2 -6
- package/fesm2022/scion-components-throbber.mjs.map +1 -1
- package/fesm2022/scion-components-viewport.mjs +6 -7
- package/fesm2022/scion-components-viewport.mjs.map +1 -1
- package/package.json +2 -2
- package/sashbox/package.json +3 -0
- package/sashbox/sashbox.component.d.ts +4 -3
- package/splitter/package.json +3 -0
- package/throbber/package.json +3 -0
- package/viewport/package.json +3 -0
|
@@ -12,7 +12,7 @@ import { coerceElement } from '@angular/cdk/coercion';
|
|
|
12
12
|
import { SciScrollableDirective } from './scrollable.directive';
|
|
13
13
|
import { SciScrollbarComponent } from './scrollbar/scrollbar.component';
|
|
14
14
|
import { ScrollingModule } from '@angular/cdk/scrolling';
|
|
15
|
-
import { AsyncPipe
|
|
15
|
+
import { AsyncPipe } from '@angular/common';
|
|
16
16
|
import * as i0 from "@angular/core";
|
|
17
17
|
import * as i1 from "./native-scrollbar-track-size-provider.service";
|
|
18
18
|
import * as i2 from "@angular/cdk/scrolling";
|
|
@@ -261,17 +261,16 @@ export class SciViewportComponent {
|
|
|
261
261
|
return offset;
|
|
262
262
|
}
|
|
263
263
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: SciViewportComponent, deps: [{ token: i0.ElementRef }, { token: i1.SciNativeScrollbarTrackSizeProvider }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
264
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
264
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.1", type: SciViewportComponent, isStandalone: true, selector: "sci-viewport", inputs: { scrollbarStyle: "scrollbarStyle" }, outputs: { scroll: "scroll" }, host: { listeners: { "focus": "focus()" } }, viewQueries: [{ propertyName: "setViewport", first: true, predicate: ["viewport"], descendants: true, static: true }, { propertyName: "setViewportClient", first: true, predicate: ["viewport_client"], descendants: true, static: true }], ngImport: i0, template: "<!-- viewport and viewport client -->\n<div #viewport\n class=\"viewport\"\n tabindex=\"-1\"\n sciScrollable [sciScrollableDisplayNativeScrollbar]=\"scrollbarStyle === 'native'\"\n cdkScrollable\n (scroll)=\"onScroll($event)\">\n <div #viewport_client class=\"viewport-client\" part=\"content\">\n <slot></slot>\n </div>\n</div>\n\n<!-- render emulated scrollbars which sit on-top -->\n@if (scrollbarStyle === 'on-top' && (nativeScrollbarTrackSizeProvider.trackSize$ | async) !== null) {\n <sci-scrollbar [direction]=\"'vscroll'\" [viewport]=\"viewport\" class=\"e2e-vertical\"/>\n <sci-scrollbar [direction]=\"'hscroll'\" [viewport]=\"viewport\" class=\"e2e-horizontal\"/>\n}\n", styles: [":host{display:grid;grid-template-columns:100%;grid-template-rows:100%;position:relative;overflow:hidden;outline:none}:host:host-context(:not(:hover):not(:active)) sci-scrollbar:not(.scrolling){opacity:0}:host>div.viewport{display:grid;position:relative;outline:none;-webkit-overflow-scrolling:touch}:host>div.viewport>div.viewport-client{display:grid}:host>sci-scrollbar{--sci-scrollbar-color: var(--sci-viewport-scrollbar-color);position:absolute;transition-duration:1s;transition-property:opacity;transition-timing-function:ease-out}:host>sci-scrollbar.vertical{top:0;right:0;bottom:0;left:unset;width:12px}:host>sci-scrollbar.horizontal{top:unset;right:0;bottom:0;left:0;height:12px}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i2.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "directive", type: SciScrollableDirective, selector: "[sciScrollable]", inputs: ["sciScrollableDisplayNativeScrollbar"] }, { kind: "component", type: SciScrollbarComponent, selector: "sci-scrollbar", inputs: ["direction", "viewport"] }], encapsulation: i0.ViewEncapsulation.ShadowDom }); }
|
|
265
265
|
}
|
|
266
266
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: SciViewportComponent, decorators: [{
|
|
267
267
|
type: Component,
|
|
268
268
|
args: [{ selector: 'sci-viewport', encapsulation: ViewEncapsulation.ShadowDom, standalone: true, imports: [
|
|
269
|
-
NgIf,
|
|
270
269
|
AsyncPipe,
|
|
271
270
|
ScrollingModule,
|
|
272
271
|
SciScrollableDirective,
|
|
273
272
|
SciScrollbarComponent,
|
|
274
|
-
], template: "<!-- viewport and viewport client -->\n<div #viewport\n class=\"viewport\"\n tabindex=\"-1\"\n sciScrollable [sciScrollableDisplayNativeScrollbar]=\"scrollbarStyle === 'native'\"\n cdkScrollable\n (scroll)=\"onScroll($event)\">\n <div #viewport_client class=\"viewport-client\" part=\"content\">\n <slot></slot>\n </div>\n</div>\n\n<!-- render emulated scrollbars which sit on-top -->\n
|
|
273
|
+
], template: "<!-- viewport and viewport client -->\n<div #viewport\n class=\"viewport\"\n tabindex=\"-1\"\n sciScrollable [sciScrollableDisplayNativeScrollbar]=\"scrollbarStyle === 'native'\"\n cdkScrollable\n (scroll)=\"onScroll($event)\">\n <div #viewport_client class=\"viewport-client\" part=\"content\">\n <slot></slot>\n </div>\n</div>\n\n<!-- render emulated scrollbars which sit on-top -->\n@if (scrollbarStyle === 'on-top' && (nativeScrollbarTrackSizeProvider.trackSize$ | async) !== null) {\n <sci-scrollbar [direction]=\"'vscroll'\" [viewport]=\"viewport\" class=\"e2e-vertical\"/>\n <sci-scrollbar [direction]=\"'hscroll'\" [viewport]=\"viewport\" class=\"e2e-horizontal\"/>\n}\n", styles: [":host{display:grid;grid-template-columns:100%;grid-template-rows:100%;position:relative;overflow:hidden;outline:none}:host:host-context(:not(:hover):not(:active)) sci-scrollbar:not(.scrolling){opacity:0}:host>div.viewport{display:grid;position:relative;outline:none;-webkit-overflow-scrolling:touch}:host>div.viewport>div.viewport-client{display:grid}:host>sci-scrollbar{--sci-scrollbar-color: var(--sci-viewport-scrollbar-color);position:absolute;transition-duration:1s;transition-property:opacity;transition-timing-function:ease-out}:host>sci-scrollbar.vertical{top:0;right:0;bottom:0;left:unset;width:12px}:host>sci-scrollbar.horizontal{top:unset;right:0;bottom:0;left:0;height:12px}\n"] }]
|
|
275
274
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.SciNativeScrollbarTrackSizeProvider }], propDecorators: { setViewport: [{
|
|
276
275
|
type: ViewChild,
|
|
277
276
|
args: ['viewport', { static: true }]
|
|
@@ -286,4 +285,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImpor
|
|
|
286
285
|
type: HostListener,
|
|
287
286
|
args: ['focus']
|
|
288
287
|
}] } });
|
|
289
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vY29tcG9uZW50cy92aWV3cG9ydC9zcmMvdmlld3BvcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vY29tcG9uZW50cy92aWV3cG9ydC9zcmMvdmlld3BvcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFjLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFN0gsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxNQUFNLGlCQUFpQixDQUFDOzs7O0FBRWhEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrRUc7QUFlSCxNQUFNLE9BQU8sb0JBQW9CO0lBTS9CLGdCQUFnQjtJQUNoQixJQUNXLFdBQVcsQ0FBQyxRQUFvQztRQUN6RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsSUFDVyxpQkFBaUIsQ0FBQyxjQUEwQztRQUNyRSxJQUFJLENBQUMsZUFBZSxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztJ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QVM7d0JBQ1QsZUFBZTt3QkFDZixzQkFBc0I7d0JBQ3RCLHFCQUFxQjtxQkFDdEI7aUlBVVUsV0FBVztzQkFEckIsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQU8xQixpQkFBaUI7c0JBRDNCLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQVVqQyxjQUFjO3NCQUR4QixLQUFLO2dCQWVDLE1BQU07c0JBRFosTUFBTTtnQkFPQSxLQUFLO3NCQURYLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1NjaU5hdGl2ZVNjcm9sbGJhclRyYWNrU2l6ZVByb3ZpZGVyfSBmcm9tICcuL25hdGl2ZS1zY3JvbGxiYXItdHJhY2stc2l6ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7Y29lcmNlRWxlbWVudH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7U2NpU2Nyb2xsYWJsZURpcmVjdGl2ZX0gZnJvbSAnLi9zY3JvbGxhYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1NjaVNjcm9sbGJhckNvbXBvbmVudH0gZnJvbSAnLi9zY3JvbGxiYXIvc2Nyb2xsYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQge1Njcm9sbGluZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQge0FzeW5jUGlwZSwgTmdJZn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgdmlld3BvcnQgd2l0aCBzbG90dGVkIGNvbnRlbnQgKGA8bmctY29udGVudD5gKSB1c2VkIGFzIHNjcm9sbGFibGUgY29udGVudC4gQnkgZGVmYXVsdCwgY29udGVudCBpcyBhZGRlZCB0byBhIENTUyBncmlkIGxheW91dC5cbiAqXG4gKiBUaGUgdmlld3BvcnQgY29tcG9uZW50IGRpc3BsYXlzIHNjcm9sbGJhcnMgd2hlbiBpdHMgY29udGVudCBvdmVyZmxvd3MuIFNjcm9sbGJhcnMgYXJlIGRpc3BsYXllZCBvbiB0b3Agb2YgdGhlIGNvbnRlbnQsIG5vdCBuZXh0IHRvIGl0LlxuICogVGhlIGNvbXBvbmVudCB1c2VzIHRoZSBuYXRpdmUgc2Nyb2xsYmFycyBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpZiB0aGV5IGFyZSBhbHJlYWR5IHNpdHRpbmcgb24gdG9wLCBvciBmYWxscyBiYWNrIGFuZCByZW5kZXJzIHNjcm9sbGJhcnMgb24gdG9wIG90aGVyd2lzZS5cbiAqIFRoZSB2aWV3cG9ydCByZW1haW5zIG5hdGl2ZWx5IHNjcm9sbGFibGUgd2l0aCB0aGUgbmF0aXZlIHNjcm9sbGJhcnMgc2hpZnRlZCBvdXQgb2YgdGhlIHZpZXdwb3J0J3MgdmlzaWJsZSBhcmVhLiBDb25zZXF1ZW50bHksIHRoZSB2aWV3cG9ydCBrZWVwcyBzdXBwb3J0aW5nXG4gKiBuYXRpdmUgc2Nyb2xsaW5nIGZlYXR1cmVzIHN1Y2ggYXMgdG91Y2ggZ2VzdHVyZXMsIHNjcm9sbCBzcGVlZCBhY2NlbGVyYXRpb24sIG9yIHNjcm9sbGluZyBuZWFyIHRoZSB2aWV3cG9ydCBlZGdlcyBkdXJpbmcgZHJhZy1hbmQtZHJvcCBvcGVyYXRpb25zLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxzY2ktdmlld3BvcnQ+XG4gKiAgIHlvdXIgY29udGVudFxuICogPC9zY2ktdmlld3BvcnQ+XG4gKiBgYGBcbiAqXG4gKiAjIyBBZGRpbmcgdGhlIHZpZXdwb3J0IHRvIGEgbGF5b3V0XG4gKlxuICogVHlwaWNhbGx5LCB5b3Ugd291bGQgYWRkIHRoZSB2aWV3cG9ydCBjb21wb25lbnQgdG8gYSBmbGV4aWJsZSBsYXlvdXQsIGZpbGxpbmcgdGhlIHJlbWFpbmluZyBzcGFjZSB2ZXJ0aWNhbGx5IGFuZCBob3Jpem9udGFsbHksIHN1Y2ggYXMgYSBmbGV4Ym94IGNvbnRhaW5lclxuICogd2l0aCB0aGUgdmlld3BvcnQncyBgZmxleGAgQ1NTIHByb3BlcnR5IHNldCB0byBlaXRoZXIgYGZsZXg6IGF1dG9gIG9yIGBmbGV4OiAxIDEgMGAuXG4gKlxuICogVGhlIHZpZXdwb3J0IGlzIHNpemVkIGFjY29yZGluZyB0byBpdHMgY29udGVudCB3aWR0aCBhbmQgaGVpZ2h0LiBJdCBncm93cyB0byBhYnNvcmIgYW55IGZyZWUgc3BhY2UsIHRodXMgb3ZlcmZsb3dpbmcgaXRzIGNvbnRlbnQgb25seSB3aGVuIGVuY291bnRlcmluZ1xuICogYSBsYXlvdXQgY29uc3RyYWludC4gRGVwZW5kaW5nIG9uIHRoZSBsYXlvdXQsIGRpZmZlcmVudCBzdGVwcyBtYXkgYmUgbmVjZXNzYXJ5IHRvIHByZXZlbnQgdGhlIHZpZXdwb3J0IGZyb20gZ3Jvd2luZyB0byBpbmZpbml0eS5cbiAqXG4gKiAtIElmIHByYWN0aWNhbCwgZ2l2ZSB0aGUgdmlld3BvcnQgYSBmaXhlZCBzaXplIG9yIGEgbWF4aW11bSBzaXplLlxuICogLSBJZiB5b3UgYWRkIHRoZSB2aWV3cG9ydCB0byBhIGZsZXhib3ggbGF5b3V0LCBtYWtlIHN1cmUgdGhhdCBpdCBjYW5ub3QgZXhjZWVkIHRoZSBhdmFpbGFibGUgc3BhY2UuIEluc3RlYWQsIHRoZSB2aWV3cG9ydCBzaG91bGQgZmlsbCB0aGUgcmVtYWluaW5nIHNwYWNlLFxuICogICB2ZXJ0aWNhbGx5IGFuZCBob3Jpem9udGFsbHkuIEJlIGF3YXJlIHRoYXQsIGJ5IGRlZmF1bHQsIGEgZmxleCBpdGVtIGRvZXMgbm90IHNocmluayBiZWxvdyBpdHMgbWluaW11bSBjb250ZW50IHNpemUuIFRvIGNoYW5nZSB0aGlzLCBzZXQgdGhlIHZpZXdwb3J0J3NcbiAqICAgYGZsZXgtYmFzaXNgIHRvIGAwYCAoaW5zdGVhZCBvZiBgYXV0b2ApLCBvciB1c2UgdGhlIENTUyBzaG9ydGhhbmQgcHJvcGVydHkgYGZsZXg6IDEgMSAwYC4gVGhlIGBmbGV4LWJhc2lzYCBkZWZpbmVzIHRoZSBkZWZhdWx0IHNpemUgb2YgYSBmbGV4IGl0ZW0gYmVmb3JlXG4gKiAgIHRoZSByZW1haW5pbmcgZXh0cmEgc3BhY2UgaXMgZGlzdHJpYnV0ZWQuIElmIHRoZSB2aWV3cG9ydCBkb2VzIG5vdCBhcHBlYXIgYWZ0ZXIgc2V0dGluZyB0aGlzIHByb3BlcnR5LCBjaGVjayBpdHMgcGFyZW50IGVsZW1lbnRzJyBjb250ZW50IHNpemVzLlxuICogICBBcyBhbiBhbHRlcm5hdGl2ZSB0byBzZXR0aW5nIGBmbGV4OiAxIDEgMGAsIGNoYW5nZSB0aGUgc2V0dGluZyB0byBgZmxleDogYXV0b2AgYW5kIGhpZGUgdGhlIG92ZXJmbG93IGluIHRoZSBwYXJlbnQgZWxlbWVudCwgYXMgZm9sbG93czogYG92ZXJmbG93OiBoaWRkZW5gLlxuICogICBBbm90aGVyIGFwcHJvYWNoIHdvdWxkIGJlIHRvIHNldCB0aGUgbWluaW11bSBoZWlnaHQgb2YgYWxsIHBhcmVudHMgdG8gYDBgLCBhcyBmb2xsb3dzOiBgbWluLWhlaWdodDogMGAuXG4gKlxuICogICBGb3IgdGhlIGNvbXBsZXRlIGRvY3VtZW50YXRpb24gb24gdGhlIGZsZXggbGF5b3V0IGFuZCBpdHMgZmVhdHVyZXMsIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9mbGV4LlxuICpcbiAqXG4gKiAjIyBMYXlvdXRpbmcgdGhlIHZpZXdwb3J0J3Mgc2xvdHRlZCBjb250ZW50XG4gKlxuICogQnkgZGVmYXVsdCwgdGhlIHZpZXdwb3J0J3MgY29udGVudCBpcyBhZGRlZCB0byBhIENTUyBncmlkIGNvbnRhaW5lciB3aXRoIGEgc2luZ2xlIGNvbHVtbiwgZmlsbGluZyByZW1haW5pbmcgc3BhY2UgdmVydGljYWxseSBhbmQgaG9yaXpvbnRhbGx5LlxuICogVXNpbmcgdGhlIGA6OnBhcnQoY29udGVudClgIHBzZXVkbyBlbGVtZW50IHNlbGVjdG9yLCB5b3UgY2FuIGNvbmZpZ3VyZSB0aGUgZ3JpZCBjb250YWluZXIgb3IgYXBwbHkgYSBkaWZmZXJlbnQgbGF5b3V0LCBzdWNoIGFzIGEgZmxleCBvciBmbG93IGxheW91dC5cbiAqXG4gKiAjIyMjIEV4YW1wbGUgb2YgYWRkaW5nIHNsb3R0ZWQgY29udGVudCB0byBhIENTUyBmbGV4IGNvbnRhaW5lclxuICogYGBgY3NzXG4gKiBzY2ktdmlld3BvcnQ6OnBhcnQoY29udGVudCkge1xuICogICBkaXNwbGF5OiBmbGV4O1xuICogICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICogfVxuICogYGBgXG4gKlxuICogIyMjIyBFeGFtcGxlIG9mIGNvbmZpZ3VyaW5nIENTUyBncmlkIGNvbnRhaW5lciB3aXRoIHR3byBjb2x1bW5zXG4gKiBgYGBjc3NcbiAqIHNjaS12aWV3cG9ydDo6cGFydChjb250ZW50KSB7XG4gKiAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjtcbiAqICAgZ2FwOiAxZW07XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiAjIyBTdHlsaW5nXG4gKlxuICogVG8gY3VzdG9taXplIHRoZSBkZWZhdWx0IGxvb2sgb2YgU0NJT04gY29tcG9uZW50cyBvciBzdXBwb3J0IGRpZmZlcmVudCB0aGVtZXMsIGNvbmZpZ3VyZSB0aGUgYEBzY2lvbi9jb21wb25lbnRzYCBTQ1NTIG1vZHVsZSBpbiBgc3R5bGVzLnNjc3NgLlxuICogVG8gc3R5bGUgYSBzcGVjaWZpYyBgc2NpLXZpZXdwb3J0YCBjb21wb25lbnQsIHRoZSBmb2xsb3dpbmcgQ1NTIHZhcmlhYmxlcyBjYW4gYmUgc2V0IGRpcmVjdGx5IG9uIHRoZSBjb21wb25lbnQuXG4gKlxuICogLSBzY2ktdmlld3BvcnQtc2Nyb2xsYmFyLWNvbG9yOiAgICAgU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNjcm9sbGJhci5cbiAqXG4gKiBgYGBjc3NcbiAqIHNjaS12aWV3cG9ydCB7XG4gKiAgIC0tc2NpLXZpZXdwb3J0LXNjcm9sbGJhci1jb2xvcjogYmx1ZTtcbiAqIH1cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzY2ktdmlld3BvcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdmlld3BvcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi92aWV3cG9ydC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5TaGFkb3dEb20sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0lmLFxuICAgIEFzeW5jUGlwZSxcbiAgICBTY3JvbGxpbmdNb2R1bGUsXG4gICAgU2NpU2Nyb2xsYWJsZURpcmVjdGl2ZSxcbiAgICBTY2lTY3JvbGxiYXJDb21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNjaVZpZXdwb3J0Q29tcG9uZW50IHtcblxuICBwcml2YXRlIF92aWV3cG9ydEVsZW1lbnQhOiBIVE1MRGl2RWxlbWVudDtcbiAgcHJpdmF0ZSBfdmlld3BvcnRDbGllbnQhOiBIVE1MRGl2RWxlbWVudDtcbiAgcHJpdmF0ZSBfc2Nyb2xsYmFyU3R5bGU6IFNjcm9sbGJhclN0eWxlID0gJ29uLXRvcCc7XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBAVmlld0NoaWxkKCd2aWV3cG9ydCcsIHtzdGF0aWM6IHRydWV9KVxuICBwdWJsaWMgc2V0IHNldFZpZXdwb3J0KHZpZXdwb3J0OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pikge1xuICAgIHRoaXMuX3ZpZXdwb3J0RWxlbWVudCA9IGNvZXJjZUVsZW1lbnQodmlld3BvcnQpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBAVmlld0NoaWxkKCd2aWV3cG9ydF9jbGllbnQnLCB7c3RhdGljOiB0cnVlfSlcbiAgcHVibGljIHNldCBzZXRWaWV3cG9ydENsaWVudCh2aWV3cG9ydENsaWVudDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4pIHtcbiAgICB0aGlzLl92aWV3cG9ydENsaWVudCA9IGNvZXJjZUVsZW1lbnQodmlld3BvcnRDbGllbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgdG8gdXNlIG5hdGl2ZSBzY3JvbGxiYXJzIG9yLCB3aGljaCBpcyBieSBkZWZhdWx0LCBlbXVsYXRlZCBzY3JvbGxiYXJzIHRoYXQgc2l0IG9uIHRvcCBvZiB0aGUgdmlld3BvcnQgY2xpZW50LlxuICAgKiBJbiB0aGUgbGF0dGVyLCB0aGUgdmlld3BvcnQgY2xpZW50IHJlbWFpbnMgbmF0aXZlbHkgc2Nyb2xsYWJsZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2Nyb2xsYmFyU3R5bGUoc2Nyb2xsYmFyU3R5bGU6IFNjcm9sbGJhclN0eWxlKSB7XG4gICAgdGhpcy5fc2Nyb2xsYmFyU3R5bGUgPSBzY3JvbGxiYXJTdHlsZSB8fCAnb24tdG9wJztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2Nyb2xsYmFyU3R5bGUoKTogU2Nyb2xsYmFyU3R5bGUge1xuICAgIHJldHVybiB0aGlzLl9zY3JvbGxiYXJTdHlsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB1cG9uIGEgc2Nyb2xsIGV2ZW50LlxuICAgKlxuICAgKiBZb3UgY2FuIGFkZCBbc2NpRGltZW5zaW9uXSBkaXJlY3RpdmUgdG8gdGhlIHZpZXdwb3J0IG9yIHZpZXdwb3J0IGNsaWVudCB0byBiZSBub3RpZmllZCBhYm91dCBsYXlvdXQgY2hhbmdlcy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2Nyb2xsID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBob3N0OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiwgcHVibGljIG5hdGl2ZVNjcm9sbGJhclRyYWNrU2l6ZVByb3ZpZGVyOiBTY2lOYXRpdmVTY3JvbGxiYXJUcmFja1NpemVQcm92aWRlcikge1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxuICBwdWJsaWMgZm9jdXMoKTogdm9pZCB7IC8vIGRvIG5vdCByZW5hbWUgdG8gZXhwb3NlIHRoZSBzYW1lIGZvY3VzIG1ldGhvZCBsaWtlIGBIVE1MRWxlbWVudC5mb2N1cygpYC5cbiAgICB0aGlzLl92aWV3cG9ydEVsZW1lbnQ/LmZvY3VzKCk7XG4gIH1cblxuICBwdWJsaWMgb25TY3JvbGwoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zY3JvbGwuZW1pdChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBpeGVscyB0aGF0IHRoZSB2aWV3cG9ydCBjbGllbnQgaXMgc2Nyb2xsZWQgdmVydGljYWxseS5cbiAgICpcbiAgICogQHNlZSBFbGVtZW50LnNjcm9sbFRvcFxuICAgKi9cbiAgcHVibGljIGdldCBzY3JvbGxUb3AoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdmlld3BvcnRFbGVtZW50LnNjcm9sbFRvcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGl4ZWxzIHRoYXQgdGhlIHZpZXdwb3J0IGNsaWVudCBpcyBzY3JvbGxlZCB2ZXJ0aWNhbGx5LlxuICAgKlxuICAgKiBAc2VlIEVsZW1lbnQuc2Nyb2xsVG9wXG4gICAqL1xuICBwdWJsaWMgc2V0IHNjcm9sbFRvcChzY3JvbGxUb3A6IG51bWJlcikge1xuICAgIHRoaXMuX3ZpZXdwb3J0RWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBpeGVscyB0aGF0IHRoZSB2aWV3cG9ydCBjbGllbnQgaXMgc2Nyb2xsZWQgaG9yaXpvbnRhbGx5LlxuICAgKlxuICAgKiBAc2VlIEVsZW1lbnQuc2Nyb2xsTGVmdFxuICAgKi9cbiAgcHVibGljIGdldCBzY3JvbGxMZWZ0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZXdwb3J0RWxlbWVudC5zY3JvbGxMZWZ0O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIG51bWJlciBvZiBwaXhlbHMgdGhhdCB0aGUgdmlld3BvcnQgY2xpZW50IGlzIHNjcm9sbGVkIGhvcml6b250YWxseS5cbiAgICpcbiAgICogQHNlZSBFbGVtZW50LnNjcm9sbExlZnRcbiAgICovXG4gIHB1YmxpYyBzZXQgc2Nyb2xsTGVmdChzY3JvbGxMZWZ0OiBudW1iZXIpIHtcbiAgICB0aGlzLl92aWV3cG9ydEVsZW1lbnQuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydCBjbGllbnQuXG4gICAqXG4gICAqIEBzZWUgRWxlbWVudC5zY3JvbGxIZWlnaHRcbiAgICovXG4gIHB1YmxpYyBnZXQgc2Nyb2xsSGVpZ2h0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZXdwb3J0RWxlbWVudC5zY3JvbGxIZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgd2lkdGggb2YgdGhlIHZpZXdwb3J0IGNsaWVudC5cbiAgICpcbiAgICogQHNlZSBFbGVtZW50LnNjcm9sbFdpZHRoXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNjcm9sbFdpZHRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZXdwb3J0RWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB2aWV3cG9ydCB7SFRNTEVsZW1lbnR9LlxuICAgKi9cbiAgcHVibGljIGdldCB2aWV3cG9ydEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLl92aWV3cG9ydEVsZW1lbnQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdmlld3BvcnQgY2xpZW50IHtIVE1MRWxlbWVudH0uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZpZXdwb3J0Q2xpZW50RWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZXdwb3J0Q2xpZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgaXMgc2Nyb2xsZWQgaW50byB0aGUgdmlld3BvcnQuXG4gICAqXG4gICAqIEBwYXJhbSBlbGVtZW50IC0gdGhlIGVsZW1lbnQgdG8gYmUgY2hlY2tlZFxuICAgKiBAcGFyYW0gZml0IC0gY29udHJvbCBpZiB0aGUgZWxlbWVudCBtdXN0IGZ1bGx5IG9yIHBhcnRpYWxseSBmaXQgaW50byB0aGUgdmlld3BvcnRcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIGVsZW1lbnQgaXMgc2Nyb2xsZWQgaW50byB0aGUgdmlld3BvcnQsIG9yIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVibGljIGlzRWxlbWVudEluVmlldyhlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IEhUTUxFbGVtZW50LCBmaXQ6ICdmdWxsJyB8ICdwYXJ0aWFsJyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGVsVG9wID0gdGhpcy5jb21wdXRlT2Zmc2V0KGVsZW1lbnQsICd0b3AnKTtcbiAgICBpZiAoZWxUb3AgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZWxMZWZ0ID0gdGhpcy5jb21wdXRlT2Zmc2V0KGVsZW1lbnQsICdsZWZ0Jyk7XG4gICAgaWYgKGVsTGVmdCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIENvbnNpZGVyIGVsZW1lbnRzIGFzIHNjcm9sbGVkIGludG8gdmlldyB3aGVuIHRoZXJlIGlzIG5vIHZpZXdwb3J0IG92ZXJmbG93LlxuICAgIC8vIFRoZSBjYWxjdWxhdGlvbiBvZiB3aGV0aGVyIGFuIGVsZW1lbnQgaXMgc2Nyb2xsZWQgaW50byB2aWV3IG1heSBiZSB3cm9uZyBieSBhIGZldyBwaXhlbHMgaWYgdGhlIHZpZXdwb3J0IGNvbnRhaW5zIGVsZW1lbnRzIHdpdGggZGVjaW1hbCBzaXplcy5cbiAgICAvLyBUaGlzIGNhbiBoYXBwZW4gYmVjYXVzZSBgb2Zmc2V0TGVmdGAgYW5kIGBvZmZzZXRUb3BgIG9wZXJhdGUgb24gYW4gaW50ZWdlciAobm90IGEgZGVjaW1hbCksIGxvc2luZyBwcmVjaXNpb24gdGhhdCBjYW4gYWNjdW11bGF0ZS5cbiAgICAvLyBUbyBhdm9pZCBpbmNvcnJlY3QgY2FsY3VsYXRpb24gd2hlbiB0aGVyZSBpcyBubyB2aWV3cG9ydCBvdmVyZmxvdywgd2UgY29uc2lkZXIgYWxsIGNvbnRhaW5lZCBlbGVtZW50cyBhcyBzY3JvbGxlZCBpbnRvIHRoZSB2aWV3LlxuICAgIGlmICh0aGlzLl92aWV3cG9ydEVsZW1lbnQuc2Nyb2xsV2lkdGggPD0gdGhpcy5fdmlld3BvcnRFbGVtZW50LmNsaWVudFdpZHRoICYmIHRoaXMuX3ZpZXdwb3J0RWxlbWVudC5zY3JvbGxIZWlnaHQgPD0gdGhpcy5fdmlld3BvcnRFbGVtZW50LmNsaWVudEhlaWdodCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgZWxCb3R0b20gPSBlbFRvcCArIGNvZXJjZUVsZW1lbnQoZWxlbWVudCkub2Zmc2V0SGVpZ2h0O1xuICAgIGNvbnN0IGVsUmlnaHQgPSBlbExlZnQgKyBjb2VyY2VFbGVtZW50KGVsZW1lbnQpLm9mZnNldFdpZHRoO1xuXG4gICAgY29uc3QgdnBUb3AgPSB0aGlzLl92aWV3cG9ydEVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgIGNvbnN0IHZwTGVmdCA9IHRoaXMuX3ZpZXdwb3J0RWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIGNvbnN0IHZwQm90dG9tID0gdnBUb3AgKyB0aGlzLl92aWV3cG9ydEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgIGNvbnN0IHZwUmlnaHQgPSB2cExlZnQgKyB0aGlzLl92aWV3cG9ydEVsZW1lbnQuY2xpZW50V2lkdGg7XG5cbiAgICBpZiAoZml0ID09PSAnZnVsbCcpIHtcbiAgICAgIHJldHVybiAoZWxUb3AgPj0gdnBUb3AgJiYgZWxCb3R0b20gPD0gdnBCb3R0b20pICYmIChlbExlZnQgPj0gdnBMZWZ0ICYmIGVsUmlnaHQgPD0gdnBSaWdodCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIChlbEJvdHRvbSA+PSB2cFRvcCAmJiBlbFRvcCA8PSB2cEJvdHRvbSkgJiYgKGVsUmlnaHQgPj0gdnBMZWZ0ICYmIGVsTGVmdCA8PSB2cFJpZ2h0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xscyB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgaW50byB0aGUgdmlld3BvcnQuXG4gICAqXG4gICAqIEBwYXJhbSBlbGVtZW50IC0gdGhlIGVsZW1lbnQgdG8gc2Nyb2xsIGludG8gdGhlIHZpZXdwb3J0XG4gICAqIEBwYXJhbSBvZmZzZXQgLSB0aGUgZ2FwIGJldHdlZW4gdGhlIGVsZW1lbnQgYW5kIHRoZSB2aWV3cG9ydFxuICAgKi9cbiAgcHVibGljIHNjcm9sbEludG9WaWV3KGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgSFRNTEVsZW1lbnQsIG9mZnNldDogbnVtYmVyID0gNTApOiB2b2lkIHtcbiAgICBjb25zdCB0b3AgPSB0aGlzLmNvbXB1dGVPZmZzZXQoZWxlbWVudCwgJ3RvcCcpO1xuICAgIGlmICh0b3AgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbGVmdCA9IHRoaXMuY29tcHV0ZU9mZnNldChlbGVtZW50LCAnbGVmdCcpO1xuICAgIGlmIChsZWZ0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdmlld3BvcnRFbGVtZW50LnNjcm9sbFRvcCA9IHRvcCAtIG9mZnNldDtcbiAgICB0aGlzLl92aWV3cG9ydEVsZW1lbnQuc2Nyb2xsTGVmdCA9IGxlZnQgLSBvZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZXMgdGhlIGRpc3RhbmNlIG9mIHRoZSBlbGVtZW50IHRvIHRoZSB2aWV3cG9ydCdzIGxlZnQgb3IgdG9wIGJvcmRlci5cbiAgICpcbiAgICogQHJldHVybiBkaXN0YW5jZSBvZiB0aGUgZWxlbWVudCB0byB0aGUgdmlld3BvcnQncyBsZWZ0IG9yIHRvcCBib3JkZXIsIG9yIGBudWxsYCBpZiBub3QgY29udGFpbmVkXG4gICAqICAgICAgICAgaW4gdGhlIHZpZXdwb3J0IG9yIHRoZSBlbGVtZW50IG9yIGFueSBhbmNlc3RvciBoYXMgdGhlIGBkaXNwbGF5YCBwcm9wZXJ0eSBzZXQgdG8gYG5vbmVgLlxuICAgKi9cbiAgcHVibGljIGNvbXB1dGVPZmZzZXQoZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBIVE1MRWxlbWVudCwgYm9yZGVyOiAnbGVmdCcgfCAndG9wJyk6IG51bWJlciB8IG51bGwge1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGxldCBlbCA9IGNvZXJjZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgZG8ge1xuICAgICAgb2Zmc2V0ICs9IChib3JkZXIgPT09ICdsZWZ0JyA/IGVsLm9mZnNldExlZnQgOiBlbC5vZmZzZXRUb3ApO1xuICAgICAgY29uc3Qgb2Zmc2V0UGFyZW50ID0gZWwub2Zmc2V0UGFyZW50O1xuICAgICAgaWYgKG9mZnNldFBhcmVudCA9PT0gbnVsbCkge1xuICAgICAgICAvLyBgb2Zmc2V0UGFyZW50YCBpcyBgbnVsbGAgaW4gdGhlIGZvbGxvd2luZyBzaXR1YXRpb25zOlxuICAgICAgICAvLyAtIFRoZSBlbGVtZW50IG9yIGFueSBhbmNlc3RvciBoYXMgdGhlIGBkaXNwbGF5YCBwcm9wZXJ0eSBzZXQgdG8gYG5vbmVgXG4gICAgICAgIC8vIC0gVGhlIGVsZW1lbnQgaGFzIHRoZSBwb3NpdGlvbiBwcm9wZXJ0eSBzZXQgdG8gZml4ZWQgKEZpcmVmb3ggcmV0dXJucyA8Ym9keT4pLlxuICAgICAgICAvLyAtIFRoZSBlbGVtZW50IGlzIDxib2R5PiBvciA8aHRtbD4uXG4gICAgICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvb2Zmc2V0UGFyZW50LlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICghKG9mZnNldFBhcmVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGVsID0gb2Zmc2V0UGFyZW50O1xuICAgIH0gd2hpbGUgKGVsICE9PSB0aGlzLmhvc3QubmF0aXZlRWxlbWVudCk7XG5cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHNjcm9sbGJhciBzdHlsZS5cbiAqL1xuZXhwb3J0IHR5cGUgU2Nyb2xsYmFyU3R5bGUgPSAnbmF0aXZlJyB8ICdvbi10b3AnIHwgJ2hpZGRlbic7XG4iLCI8IS0tIHZpZXdwb3J0IGFuZCB2aWV3cG9ydCBjbGllbnQgLS0+XG48ZGl2ICN2aWV3cG9ydFxuICAgICBjbGFzcz1cInZpZXdwb3J0XCJcbiAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgIHNjaVNjcm9sbGFibGUgW3NjaVNjcm9sbGFibGVEaXNwbGF5TmF0aXZlU2Nyb2xsYmFyXT1cInNjcm9sbGJhclN0eWxlID09PSAnbmF0aXZlJ1wiXG4gICAgIGNka1Njcm9sbGFibGVcbiAgICAgKHNjcm9sbCk9XCJvblNjcm9sbCgkZXZlbnQpXCI+XG4gIDxkaXYgI3ZpZXdwb3J0X2NsaWVudCBjbGFzcz1cInZpZXdwb3J0LWNsaWVudFwiIHBhcnQ9XCJjb250ZW50XCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIHJlbmRlciBlbXVsYXRlZCBzY3JvbGxiYXJzIHdoaWNoIHNpdCBvbi10b3AgLS0+XG48bmctY29udGFpbmVyICpuZ0lmPVwic2Nyb2xsYmFyU3R5bGUgPT09ICdvbi10b3AnICYmIChuYXRpdmVTY3JvbGxiYXJUcmFja1NpemVQcm92aWRlci50cmFja1NpemUkIHwgYXN5bmMpICE9PSBudWxsXCI+XG4gIDxzY2ktc2Nyb2xsYmFyIFtkaXJlY3Rpb25dPVwiJ3ZzY3JvbGwnXCIgW3ZpZXdwb3J0XT1cInZpZXdwb3J0XCIgY2xhc3M9XCJlMmUtdmVydGljYWxcIj48L3NjaS1zY3JvbGxiYXI+XG4gIDxzY2ktc2Nyb2xsYmFyIFtkaXJlY3Rpb25dPVwiJ2hzY3JvbGwnXCIgW3ZpZXdwb3J0XT1cInZpZXdwb3J0XCIgY2xhc3M9XCJlMmUtaG9yaXpvbnRhbFwiPjwvc2NpLXNjcm9sbGJhcj5cbjwvbmctY29udGFpbmVyPlxuIl19
|
|
288
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vY29tcG9uZW50cy92aWV3cG9ydC9zcmMvdmlld3BvcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vY29tcG9uZW50cy92aWV3cG9ydC9zcmMvdmlld3BvcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFjLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFN0gsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFFMUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtFRztBQWNILE1BQU0sT0FBTyxvQkFBb0I7SUFNL0IsZ0JBQWdCO0lBQ2hCLElBQ1csV0FBVyxDQUFDLFFBQW9DO1FBQ3pELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGdCQUFnQjtJQUNoQixJQUNXLGlCQUFpQixDQUFDLGNBQTBDO1FBQ3JFLElBQUksQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7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QixxQkFBcUI7cUJBQ3RCO2lJQVVVLFdBQVc7c0JBRHJCLFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFPMUIsaUJBQWlCO3NCQUQzQixTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFVakMsY0FBYztzQkFEeEIsS0FBSztnQkFlQyxNQUFNO3NCQURaLE1BQU07Z0JBT0EsS0FBSztzQkFEWCxZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTkgU3dpc3MgRmVkZXJhbCBSYWlsd2F5c1xuICpcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGVcbiAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wXG4gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC9cbiAqXG4gKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjBcbiAqL1xuXG5pbXBvcnQge0NvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtTY2lOYXRpdmVTY3JvbGxiYXJUcmFja1NpemVQcm92aWRlcn0gZnJvbSAnLi9uYXRpdmUtc2Nyb2xsYmFyLXRyYWNrLXNpemUtcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQge2NvZXJjZUVsZW1lbnR9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1NjaVNjcm9sbGFibGVEaXJlY3RpdmV9IGZyb20gJy4vc2Nyb2xsYWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtTY2lTY3JvbGxiYXJDb21wb25lbnR9IGZyb20gJy4vc2Nyb2xsYmFyL3Njcm9sbGJhci5jb21wb25lbnQnO1xuaW1wb3J0IHtTY3JvbGxpbmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHtBc3luY1BpcGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHZpZXdwb3J0IHdpdGggc2xvdHRlZCBjb250ZW50IChgPG5nLWNvbnRlbnQ+YCkgdXNlZCBhcyBzY3JvbGxhYmxlIGNvbnRlbnQuIEJ5IGRlZmF1bHQsIGNvbnRlbnQgaXMgYWRkZWQgdG8gYSBDU1MgZ3JpZCBsYXlvdXQuXG4gKlxuICogVGhlIHZpZXdwb3J0IGNvbXBvbmVudCBkaXNwbGF5cyBzY3JvbGxiYXJzIHdoZW4gaXRzIGNvbnRlbnQgb3ZlcmZsb3dzLiBTY3JvbGxiYXJzIGFyZSBkaXNwbGF5ZWQgb24gdG9wIG9mIHRoZSBjb250ZW50LCBub3QgbmV4dCB0byBpdC5cbiAqIFRoZSBjb21wb25lbnQgdXNlcyB0aGUgbmF0aXZlIHNjcm9sbGJhcnMgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gaWYgdGhleSBhcmUgYWxyZWFkeSBzaXR0aW5nIG9uIHRvcCwgb3IgZmFsbHMgYmFjayBhbmQgcmVuZGVycyBzY3JvbGxiYXJzIG9uIHRvcCBvdGhlcndpc2UuXG4gKiBUaGUgdmlld3BvcnQgcmVtYWlucyBuYXRpdmVseSBzY3JvbGxhYmxlIHdpdGggdGhlIG5hdGl2ZSBzY3JvbGxiYXJzIHNoaWZ0ZWQgb3V0IG9mIHRoZSB2aWV3cG9ydCdzIHZpc2libGUgYXJlYS4gQ29uc2VxdWVudGx5LCB0aGUgdmlld3BvcnQga2VlcHMgc3VwcG9ydGluZ1xuICogbmF0aXZlIHNjcm9sbGluZyBmZWF0dXJlcyBzdWNoIGFzIHRvdWNoIGdlc3R1cmVzLCBzY3JvbGwgc3BlZWQgYWNjZWxlcmF0aW9uLCBvciBzY3JvbGxpbmcgbmVhciB0aGUgdmlld3BvcnQgZWRnZXMgZHVyaW5nIGRyYWctYW5kLWRyb3Agb3BlcmF0aW9ucy5cbiAqXG4gKiBgYGBodG1sXG4gKiA8c2NpLXZpZXdwb3J0PlxuICogICB5b3VyIGNvbnRlbnRcbiAqIDwvc2NpLXZpZXdwb3J0PlxuICogYGBgXG4gKlxuICogIyMgQWRkaW5nIHRoZSB2aWV3cG9ydCB0byBhIGxheW91dFxuICpcbiAqIFR5cGljYWxseSwgeW91IHdvdWxkIGFkZCB0aGUgdmlld3BvcnQgY29tcG9uZW50IHRvIGEgZmxleGlibGUgbGF5b3V0LCBmaWxsaW5nIHRoZSByZW1haW5pbmcgc3BhY2UgdmVydGljYWxseSBhbmQgaG9yaXpvbnRhbGx5LCBzdWNoIGFzIGEgZmxleGJveCBjb250YWluZXJcbiAqIHdpdGggdGhlIHZpZXdwb3J0J3MgYGZsZXhgIENTUyBwcm9wZXJ0eSBzZXQgdG8gZWl0aGVyIGBmbGV4OiBhdXRvYCBvciBgZmxleDogMSAxIDBgLlxuICpcbiAqIFRoZSB2aWV3cG9ydCBpcyBzaXplZCBhY2NvcmRpbmcgdG8gaXRzIGNvbnRlbnQgd2lkdGggYW5kIGhlaWdodC4gSXQgZ3Jvd3MgdG8gYWJzb3JiIGFueSBmcmVlIHNwYWNlLCB0aHVzIG92ZXJmbG93aW5nIGl0cyBjb250ZW50IG9ubHkgd2hlbiBlbmNvdW50ZXJpbmdcbiAqIGEgbGF5b3V0IGNvbnN0cmFpbnQuIERlcGVuZGluZyBvbiB0aGUgbGF5b3V0LCBkaWZmZXJlbnQgc3RlcHMgbWF5IGJlIG5lY2Vzc2FyeSB0byBwcmV2ZW50IHRoZSB2aWV3cG9ydCBmcm9tIGdyb3dpbmcgdG8gaW5maW5pdHkuXG4gKlxuICogLSBJZiBwcmFjdGljYWwsIGdpdmUgdGhlIHZpZXdwb3J0IGEgZml4ZWQgc2l6ZSBvciBhIG1heGltdW0gc2l6ZS5cbiAqIC0gSWYgeW91IGFkZCB0aGUgdmlld3BvcnQgdG8gYSBmbGV4Ym94IGxheW91dCwgbWFrZSBzdXJlIHRoYXQgaXQgY2Fubm90IGV4Y2VlZCB0aGUgYXZhaWxhYmxlIHNwYWNlLiBJbnN0ZWFkLCB0aGUgdmlld3BvcnQgc2hvdWxkIGZpbGwgdGhlIHJlbWFpbmluZyBzcGFjZSxcbiAqICAgdmVydGljYWxseSBhbmQgaG9yaXpvbnRhbGx5LiBCZSBhd2FyZSB0aGF0LCBieSBkZWZhdWx0LCBhIGZsZXggaXRlbSBkb2VzIG5vdCBzaHJpbmsgYmVsb3cgaXRzIG1pbmltdW0gY29udGVudCBzaXplLiBUbyBjaGFuZ2UgdGhpcywgc2V0IHRoZSB2aWV3cG9ydCdzXG4gKiAgIGBmbGV4LWJhc2lzYCB0byBgMGAgKGluc3RlYWQgb2YgYGF1dG9gKSwgb3IgdXNlIHRoZSBDU1Mgc2hvcnRoYW5kIHByb3BlcnR5IGBmbGV4OiAxIDEgMGAuIFRoZSBgZmxleC1iYXNpc2AgZGVmaW5lcyB0aGUgZGVmYXVsdCBzaXplIG9mIGEgZmxleCBpdGVtIGJlZm9yZVxuICogICB0aGUgcmVtYWluaW5nIGV4dHJhIHNwYWNlIGlzIGRpc3RyaWJ1dGVkLiBJZiB0aGUgdmlld3BvcnQgZG9lcyBub3QgYXBwZWFyIGFmdGVyIHNldHRpbmcgdGhpcyBwcm9wZXJ0eSwgY2hlY2sgaXRzIHBhcmVudCBlbGVtZW50cycgY29udGVudCBzaXplcy5cbiAqICAgQXMgYW4gYWx0ZXJuYXRpdmUgdG8gc2V0dGluZyBgZmxleDogMSAxIDBgLCBjaGFuZ2UgdGhlIHNldHRpbmcgdG8gYGZsZXg6IGF1dG9gIGFuZCBoaWRlIHRoZSBvdmVyZmxvdyBpbiB0aGUgcGFyZW50IGVsZW1lbnQsIGFzIGZvbGxvd3M6IGBvdmVyZmxvdzogaGlkZGVuYC5cbiAqICAgQW5vdGhlciBhcHByb2FjaCB3b3VsZCBiZSB0byBzZXQgdGhlIG1pbmltdW0gaGVpZ2h0IG9mIGFsbCBwYXJlbnRzIHRvIGAwYCwgYXMgZm9sbG93czogYG1pbi1oZWlnaHQ6IDBgLlxuICpcbiAqICAgRm9yIHRoZSBjb21wbGV0ZSBkb2N1bWVudGF0aW9uIG9uIHRoZSBmbGV4IGxheW91dCBhbmQgaXRzIGZlYXR1cmVzLCByZWZlciB0byBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvZmxleC5cbiAqXG4gKlxuICogIyMgTGF5b3V0aW5nIHRoZSB2aWV3cG9ydCdzIHNsb3R0ZWQgY29udGVudFxuICpcbiAqIEJ5IGRlZmF1bHQsIHRoZSB2aWV3cG9ydCdzIGNvbnRlbnQgaXMgYWRkZWQgdG8gYSBDU1MgZ3JpZCBjb250YWluZXIgd2l0aCBhIHNpbmdsZSBjb2x1bW4sIGZpbGxpbmcgcmVtYWluaW5nIHNwYWNlIHZlcnRpY2FsbHkgYW5kIGhvcml6b250YWxseS5cbiAqIFVzaW5nIHRoZSBgOjpwYXJ0KGNvbnRlbnQpYCBwc2V1ZG8gZWxlbWVudCBzZWxlY3RvciwgeW91IGNhbiBjb25maWd1cmUgdGhlIGdyaWQgY29udGFpbmVyIG9yIGFwcGx5IGEgZGlmZmVyZW50IGxheW91dCwgc3VjaCBhcyBhIGZsZXggb3IgZmxvdyBsYXlvdXQuXG4gKlxuICogIyMjIyBFeGFtcGxlIG9mIGFkZGluZyBzbG90dGVkIGNvbnRlbnQgdG8gYSBDU1MgZmxleCBjb250YWluZXJcbiAqIGBgYGNzc1xuICogc2NpLXZpZXdwb3J0OjpwYXJ0KGNvbnRlbnQpIHtcbiAqICAgZGlzcGxheTogZmxleDtcbiAqICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAqIH1cbiAqIGBgYFxuICpcbiAqICMjIyMgRXhhbXBsZSBvZiBjb25maWd1cmluZyBDU1MgZ3JpZCBjb250YWluZXIgd2l0aCB0d28gY29sdW1uc1xuICogYGBgY3NzXG4gKiBzY2ktdmlld3BvcnQ6OnBhcnQoY29udGVudCkge1xuICogICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7XG4gKiAgIGdhcDogMWVtO1xuICogfVxuICogYGBgXG4gKlxuICogIyMgU3R5bGluZ1xuICpcbiAqIFRvIGN1c3RvbWl6ZSB0aGUgZGVmYXVsdCBsb29rIG9mIFNDSU9OIGNvbXBvbmVudHMgb3Igc3VwcG9ydCBkaWZmZXJlbnQgdGhlbWVzLCBjb25maWd1cmUgdGhlIGBAc2Npb24vY29tcG9uZW50c2AgU0NTUyBtb2R1bGUgaW4gYHN0eWxlcy5zY3NzYC5cbiAqIFRvIHN0eWxlIGEgc3BlY2lmaWMgYHNjaS12aWV3cG9ydGAgY29tcG9uZW50LCB0aGUgZm9sbG93aW5nIENTUyB2YXJpYWJsZXMgY2FuIGJlIHNldCBkaXJlY3RseSBvbiB0aGUgY29tcG9uZW50LlxuICpcbiAqIC0gc2NpLXZpZXdwb3J0LXNjcm9sbGJhci1jb2xvcjogICAgIFNldHMgdGhlIGNvbG9yIG9mIHRoZSBzY3JvbGxiYXIuXG4gKlxuICogYGBgY3NzXG4gKiBzY2ktdmlld3BvcnQge1xuICogICAtLXNjaS12aWV3cG9ydC1zY3JvbGxiYXItY29sb3I6IGJsdWU7XG4gKiB9XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2NpLXZpZXdwb3J0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZpZXdwb3J0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdmlld3BvcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uU2hhZG93RG9tLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQXN5bmNQaXBlLFxuICAgIFNjcm9sbGluZ01vZHVsZSxcbiAgICBTY2lTY3JvbGxhYmxlRGlyZWN0aXZlLFxuICAgIFNjaVNjcm9sbGJhckNvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2NpVmlld3BvcnRDb21wb25lbnQge1xuXG4gIHByaXZhdGUgX3ZpZXdwb3J0RWxlbWVudCE6IEhUTUxEaXZFbGVtZW50O1xuICBwcml2YXRlIF92aWV3cG9ydENsaWVudCE6IEhUTUxEaXZFbGVtZW50O1xuICBwcml2YXRlIF9zY3JvbGxiYXJTdHlsZTogU2Nyb2xsYmFyU3R5bGUgPSAnb24tdG9wJztcblxuICAvKiogQGludGVybmFsICovXG4gIEBWaWV3Q2hpbGQoJ3ZpZXdwb3J0Jywge3N0YXRpYzogdHJ1ZX0pXG4gIHB1YmxpYyBzZXQgc2V0Vmlld3BvcnQodmlld3BvcnQ6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+KSB7XG4gICAgdGhpcy5fdmlld3BvcnRFbGVtZW50ID0gY29lcmNlRWxlbWVudCh2aWV3cG9ydCk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIEBWaWV3Q2hpbGQoJ3ZpZXdwb3J0X2NsaWVudCcsIHtzdGF0aWM6IHRydWV9KVxuICBwdWJsaWMgc2V0IHNldFZpZXdwb3J0Q2xpZW50KHZpZXdwb3J0Q2xpZW50OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pikge1xuICAgIHRoaXMuX3ZpZXdwb3J0Q2xpZW50ID0gY29lcmNlRWxlbWVudCh2aWV3cG9ydENsaWVudCk7XG4gIH1cblxuICAvKipcbiAgICogQ29udHJvbHMgd2hldGhlciB0byB1c2UgbmF0aXZlIHNjcm9sbGJhcnMgb3IsIHdoaWNoIGlzIGJ5IGRlZmF1bHQsIGVtdWxhdGVkIHNjcm9sbGJhcnMgdGhhdCBzaXQgb24gdG9wIG9mIHRoZSB2aWV3cG9ydCBjbGllbnQuXG4gICAqIEluIHRoZSBsYXR0ZXIsIHRoZSB2aWV3cG9ydCBjbGllbnQgcmVtYWlucyBuYXRpdmVseSBzY3JvbGxhYmxlLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzY3JvbGxiYXJTdHlsZShzY3JvbGxiYXJTdHlsZTogU2Nyb2xsYmFyU3R5bGUpIHtcbiAgICB0aGlzLl9zY3JvbGxiYXJTdHlsZSA9IHNjcm9sbGJhclN0eWxlIHx8ICdvbi10b3AnO1xuICB9XG5cbiAgcHVibGljIGdldCBzY3JvbGxiYXJTdHlsZSgpOiBTY3JvbGxiYXJTdHlsZSB7XG4gICAgcmV0dXJuIHRoaXMuX3Njcm9sbGJhclN0eWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIHVwb24gYSBzY3JvbGwgZXZlbnQuXG4gICAqXG4gICAqIFlvdSBjYW4gYWRkIFtzY2lEaW1lbnNpb25dIGRpcmVjdGl2ZSB0byB0aGUgdmlld3BvcnQgb3Igdmlld3BvcnQgY2xpZW50IHRvIGJlIG5vdGlmaWVkIGFib3V0IGxheW91dCBjaGFuZ2VzLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzY3JvbGwgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG5cbiAgY29uc3RydWN0b3IocHVibGljIGhvc3Q6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCBwdWJsaWMgbmF0aXZlU2Nyb2xsYmFyVHJhY2tTaXplUHJvdmlkZXI6IFNjaU5hdGl2ZVNjcm9sbGJhclRyYWNrU2l6ZVByb3ZpZGVyKSB7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdmb2N1cycpXG4gIHB1YmxpYyBmb2N1cygpOiB2b2lkIHsgLy8gZG8gbm90IHJlbmFtZSB0byBleHBvc2UgdGhlIHNhbWUgZm9jdXMgbWV0aG9kIGxpa2UgYEhUTUxFbGVtZW50LmZvY3VzKClgLlxuICAgIHRoaXMuX3ZpZXdwb3J0RWxlbWVudD8uZm9jdXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBvblNjcm9sbChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNjcm9sbC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGl4ZWxzIHRoYXQgdGhlIHZpZXdwb3J0IGNsaWVudCBpcyBzY3JvbGxlZCB2ZXJ0aWNhbGx5LlxuICAgKlxuICAgKiBAc2VlIEVsZW1lbnQuc2Nyb2xsVG9wXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNjcm9sbFRvcCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl92aWV3cG9ydEVsZW1lbnQuc2Nyb2xsVG9wO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIG51bWJlciBvZiBwaXhlbHMgdGhhdCB0aGUgdmlld3BvcnQgY2xpZW50IGlzIHNjcm9sbGVkIHZlcnRpY2FsbHkuXG4gICAqXG4gICAqIEBzZWUgRWxlbWVudC5zY3JvbGxUb3BcbiAgICovXG4gIHB1YmxpYyBzZXQgc2Nyb2xsVG9wKHNjcm9sbFRvcDogbnVtYmVyKSB7XG4gICAgdGhpcy5fdmlld3BvcnRFbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGl4ZWxzIHRoYXQgdGhlIHZpZXdwb3J0IGNsaWVudCBpcyBzY3JvbGxlZCBob3Jpem9udGFsbHkuXG4gICAqXG4gICAqIEBzZWUgRWxlbWVudC5zY3JvbGxMZWZ0XG4gICAqL1xuICBwdWJsaWMgZ2V0IHNjcm9sbExlZnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdmlld3BvcnRFbGVtZW50LnNjcm9sbExlZnQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBpeGVscyB0aGF0IHRoZSB2aWV3cG9ydCBjbGllbnQgaXMgc2Nyb2xsZWQgaG9yaXpvbnRhbGx5LlxuICAgKlxuICAgKiBAc2VlIEVsZW1lbnQuc2Nyb2xsTGVmdFxuICAgKi9cbiAgcHVibGljIHNldCBzY3JvbGxMZWZ0KHNjcm9sbExlZnQ6IG51bWJlcikge1xuICAgIHRoaXMuX3ZpZXdwb3J0RWxlbWVudC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlIHZpZXdwb3J0IGNsaWVudC5cbiAgICpcbiAgICogQHNlZSBFbGVtZW50LnNjcm9sbEhlaWdodFxuICAgKi9cbiAgcHVibGljIGdldCBzY3JvbGxIZWlnaHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdmlld3BvcnRFbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB3aWR0aCBvZiB0aGUgdmlld3BvcnQgY2xpZW50LlxuICAgKlxuICAgKiBAc2VlIEVsZW1lbnQuc2Nyb2xsV2lkdGhcbiAgICovXG4gIHB1YmxpYyBnZXQgc2Nyb2xsV2lkdGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdmlld3BvcnRFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZpZXdwb3J0IHtIVE1MRWxlbWVudH0uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZpZXdwb3J0RWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZXdwb3J0RWxlbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB2aWV3cG9ydCBjbGllbnQge0hUTUxFbGVtZW50fS5cbiAgICovXG4gIHB1YmxpYyBnZXQgdmlld3BvcnRDbGllbnRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fdmlld3BvcnRDbGllbnQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBpcyBzY3JvbGxlZCBpbnRvIHRoZSB2aWV3cG9ydC5cbiAgICpcbiAgICogQHBhcmFtIGVsZW1lbnQgLSB0aGUgZWxlbWVudCB0byBiZSBjaGVja2VkXG4gICAqIEBwYXJhbSBmaXQgLSBjb250cm9sIGlmIHRoZSBlbGVtZW50IG11c3QgZnVsbHkgb3IgcGFydGlhbGx5IGZpdCBpbnRvIHRoZSB2aWV3cG9ydFxuICAgKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgZWxlbWVudCBpcyBzY3JvbGxlZCBpbnRvIHRoZSB2aWV3cG9ydCwgb3IgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICBwdWJsaWMgaXNFbGVtZW50SW5WaWV3KGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgSFRNTEVsZW1lbnQsIGZpdDogJ2Z1bGwnIHwgJ3BhcnRpYWwnKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZWxUb3AgPSB0aGlzLmNvbXB1dGVPZmZzZXQoZWxlbWVudCwgJ3RvcCcpO1xuICAgIGlmIChlbFRvcCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBlbExlZnQgPSB0aGlzLmNvbXB1dGVPZmZzZXQoZWxlbWVudCwgJ2xlZnQnKTtcbiAgICBpZiAoZWxMZWZ0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQ29uc2lkZXIgZWxlbWVudHMgYXMgc2Nyb2xsZWQgaW50byB2aWV3IHdoZW4gdGhlcmUgaXMgbm8gdmlld3BvcnQgb3ZlcmZsb3cuXG4gICAgLy8gVGhlIGNhbGN1bGF0aW9uIG9mIHdoZXRoZXIgYW4gZWxlbWVudCBpcyBzY3JvbGxlZCBpbnRvIHZpZXcgbWF5IGJlIHdyb25nIGJ5IGEgZmV3IHBpeGVscyBpZiB0aGUgdmlld3BvcnQgY29udGFpbnMgZWxlbWVudHMgd2l0aCBkZWNpbWFsIHNpemVzLlxuICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBiZWNhdXNlIGBvZmZzZXRMZWZ0YCBhbmQgYG9mZnNldFRvcGAgb3BlcmF0ZSBvbiBhbiBpbnRlZ2VyIChub3QgYSBkZWNpbWFsKSwgbG9zaW5nIHByZWNpc2lvbiB0aGF0IGNhbiBhY2N1bXVsYXRlLlxuICAgIC8vIFRvIGF2b2lkIGluY29ycmVjdCBjYWxjdWxhdGlvbiB3aGVuIHRoZXJlIGlzIG5vIHZpZXdwb3J0IG92ZXJmbG93LCB3ZSBjb25zaWRlciBhbGwgY29udGFpbmVkIGVsZW1lbnRzIGFzIHNjcm9sbGVkIGludG8gdGhlIHZpZXcuXG4gICAgaWYgKHRoaXMuX3ZpZXdwb3J0RWxlbWVudC5zY3JvbGxXaWR0aCA8PSB0aGlzLl92aWV3cG9ydEVsZW1lbnQuY2xpZW50V2lkdGggJiYgdGhpcy5fdmlld3BvcnRFbGVtZW50LnNjcm9sbEhlaWdodCA8PSB0aGlzLl92aWV3cG9ydEVsZW1lbnQuY2xpZW50SGVpZ2h0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBlbEJvdHRvbSA9IGVsVG9wICsgY29lcmNlRWxlbWVudChlbGVtZW50KS5vZmZzZXRIZWlnaHQ7XG4gICAgY29uc3QgZWxSaWdodCA9IGVsTGVmdCArIGNvZXJjZUVsZW1lbnQoZWxlbWVudCkub2Zmc2V0V2lkdGg7XG5cbiAgICBjb25zdCB2cFRvcCA9IHRoaXMuX3ZpZXdwb3J0RWxlbWVudC5zY3JvbGxUb3A7XG4gICAgY29uc3QgdnBMZWZ0ID0gdGhpcy5fdmlld3BvcnRFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgY29uc3QgdnBCb3R0b20gPSB2cFRvcCArIHRoaXMuX3ZpZXdwb3J0RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgY29uc3QgdnBSaWdodCA9IHZwTGVmdCArIHRoaXMuX3ZpZXdwb3J0RWxlbWVudC5jbGllbnRXaWR0aDtcblxuICAgIGlmIChmaXQgPT09ICdmdWxsJykge1xuICAgICAgcmV0dXJuIChlbFRvcCA+PSB2cFRvcCAmJiBlbEJvdHRvbSA8PSB2cEJvdHRvbSkgJiYgKGVsTGVmdCA+PSB2cExlZnQgJiYgZWxSaWdodCA8PSB2cFJpZ2h0KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gKGVsQm90dG9tID49IHZwVG9wICYmIGVsVG9wIDw9IHZwQm90dG9tKSAmJiAoZWxSaWdodCA+PSB2cExlZnQgJiYgZWxMZWZ0IDw9IHZwUmlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGxzIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBpbnRvIHRoZSB2aWV3cG9ydC5cbiAgICpcbiAgICogQHBhcmFtIGVsZW1lbnQgLSB0aGUgZWxlbWVudCB0byBzY3JvbGwgaW50byB0aGUgdmlld3BvcnRcbiAgICogQHBhcmFtIG9mZnNldCAtIHRoZSBnYXAgYmV0d2VlbiB0aGUgZWxlbWVudCBhbmQgdGhlIHZpZXdwb3J0XG4gICAqL1xuICBwdWJsaWMgc2Nyb2xsSW50b1ZpZXcoZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBIVE1MRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIgPSA1MCk6IHZvaWQge1xuICAgIGNvbnN0IHRvcCA9IHRoaXMuY29tcHV0ZU9mZnNldChlbGVtZW50LCAndG9wJyk7XG4gICAgaWYgKHRvcCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBsZWZ0ID0gdGhpcy5jb21wdXRlT2Zmc2V0KGVsZW1lbnQsICdsZWZ0Jyk7XG4gICAgaWYgKGxlZnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl92aWV3cG9ydEVsZW1lbnQuc2Nyb2xsVG9wID0gdG9wIC0gb2Zmc2V0O1xuICAgIHRoaXMuX3ZpZXdwb3J0RWxlbWVudC5zY3JvbGxMZWZ0ID0gbGVmdCAtIG9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlcyB0aGUgZGlzdGFuY2Ugb2YgdGhlIGVsZW1lbnQgdG8gdGhlIHZpZXdwb3J0J3MgbGVmdCBvciB0b3AgYm9yZGVyLlxuICAgKlxuICAgKiBAcmV0dXJuIGRpc3RhbmNlIG9mIHRoZSBlbGVtZW50IHRvIHRoZSB2aWV3cG9ydCdzIGxlZnQgb3IgdG9wIGJvcmRlciwgb3IgYG51bGxgIGlmIG5vdCBjb250YWluZWRcbiAgICogICAgICAgICBpbiB0aGUgdmlld3BvcnQgb3IgdGhlIGVsZW1lbnQgb3IgYW55IGFuY2VzdG9yIGhhcyB0aGUgYGRpc3BsYXlgIHByb3BlcnR5IHNldCB0byBgbm9uZWAuXG4gICAqL1xuICBwdWJsaWMgY29tcHV0ZU9mZnNldChlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IEhUTUxFbGVtZW50LCBib3JkZXI6ICdsZWZ0JyB8ICd0b3AnKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgbGV0IGVsID0gY29lcmNlRWxlbWVudChlbGVtZW50KTtcbiAgICBkbyB7XG4gICAgICBvZmZzZXQgKz0gKGJvcmRlciA9PT0gJ2xlZnQnID8gZWwub2Zmc2V0TGVmdCA6IGVsLm9mZnNldFRvcCk7XG4gICAgICBjb25zdCBvZmZzZXRQYXJlbnQgPSBlbC5vZmZzZXRQYXJlbnQ7XG4gICAgICBpZiAob2Zmc2V0UGFyZW50ID09PSBudWxsKSB7XG4gICAgICAgIC8vIGBvZmZzZXRQYXJlbnRgIGlzIGBudWxsYCBpbiB0aGUgZm9sbG93aW5nIHNpdHVhdGlvbnM6XG4gICAgICAgIC8vIC0gVGhlIGVsZW1lbnQgb3IgYW55IGFuY2VzdG9yIGhhcyB0aGUgYGRpc3BsYXlgIHByb3BlcnR5IHNldCB0byBgbm9uZWBcbiAgICAgICAgLy8gLSBUaGUgZWxlbWVudCBoYXMgdGhlIHBvc2l0aW9uIHByb3BlcnR5IHNldCB0byBmaXhlZCAoRmlyZWZveCByZXR1cm5zIDxib2R5PikuXG4gICAgICAgIC8vIC0gVGhlIGVsZW1lbnQgaXMgPGJvZHk+IG9yIDxodG1sPi5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9vZmZzZXRQYXJlbnQuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKCEob2Zmc2V0UGFyZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgZWwgPSBvZmZzZXRQYXJlbnQ7XG4gICAgfSB3aGlsZSAoZWwgIT09IHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50KTtcblxuICAgIHJldHVybiBvZmZzZXQ7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2Nyb2xsYmFyIHN0eWxlLlxuICovXG5leHBvcnQgdHlwZSBTY3JvbGxiYXJTdHlsZSA9ICduYXRpdmUnIHwgJ29uLXRvcCcgfCAnaGlkZGVuJztcbiIsIjwhLS0gdmlld3BvcnQgYW5kIHZpZXdwb3J0IGNsaWVudCAtLT5cbjxkaXYgI3ZpZXdwb3J0XG4gICAgIGNsYXNzPVwidmlld3BvcnRcIlxuICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgc2NpU2Nyb2xsYWJsZSBbc2NpU2Nyb2xsYWJsZURpc3BsYXlOYXRpdmVTY3JvbGxiYXJdPVwic2Nyb2xsYmFyU3R5bGUgPT09ICduYXRpdmUnXCJcbiAgICAgY2RrU2Nyb2xsYWJsZVxuICAgICAoc2Nyb2xsKT1cIm9uU2Nyb2xsKCRldmVudClcIj5cbiAgPGRpdiAjdmlld3BvcnRfY2xpZW50IGNsYXNzPVwidmlld3BvcnQtY2xpZW50XCIgcGFydD1cImNvbnRlbnRcIj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gcmVuZGVyIGVtdWxhdGVkIHNjcm9sbGJhcnMgd2hpY2ggc2l0IG9uLXRvcCAtLT5cbkBpZiAoc2Nyb2xsYmFyU3R5bGUgPT09ICdvbi10b3AnICYmIChuYXRpdmVTY3JvbGxiYXJUcmFja1NpemVQcm92aWRlci50cmFja1NpemUkIHwgYXN5bmMpICE9PSBudWxsKSB7XG4gIDxzY2ktc2Nyb2xsYmFyIFtkaXJlY3Rpb25dPVwiJ3ZzY3JvbGwnXCIgW3ZpZXdwb3J0XT1cInZpZXdwb3J0XCIgY2xhc3M9XCJlMmUtdmVydGljYWxcIi8+XG4gIDxzY2ktc2Nyb2xsYmFyIFtkaXJlY3Rpb25dPVwiJ2hzY3JvbGwnXCIgW3ZpZXdwb3J0XT1cInZpZXdwb3J0XCIgY2xhc3M9XCJlMmUtaG9yaXpvbnRhbFwiLz5cbn1cbiJdfQ==
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { input, output, inject, ElementRef, NgZone, Directive, NgModule, assertNotInReactiveContext, assertInInjectionContext, Injector, computed, isSignal, signal, effect, untracked } from '@angular/core';
|
|
3
|
+
import { fromResize$, fromBoundingClientRect$ } from '@scion/toolkit/observable';
|
|
4
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
5
|
+
import { subscribeInside, observeInside } from '@scion/toolkit/operators';
|
|
6
|
+
import { subscribeOn, animationFrameScheduler, observeOn } from 'rxjs';
|
|
7
|
+
import { coerceElement } from '@angular/cdk/coercion';
|
|
8
|
+
import { Objects } from '@scion/toolkit/util';
|
|
6
9
|
|
|
7
10
|
/*
|
|
8
|
-
* Copyright (c) 2018-
|
|
11
|
+
* Copyright (c) 2018-2024 Swiss Federal Railways
|
|
9
12
|
*
|
|
10
13
|
* This program and the accompanying materials are made
|
|
11
14
|
* available under the terms of the Eclipse Public License 2.0
|
|
@@ -14,74 +17,51 @@ import { fromDimension$, captureElementDimension } from '@scion/toolkit/observab
|
|
|
14
17
|
* SPDX-License-Identifier: EPL-2.0
|
|
15
18
|
*/
|
|
16
19
|
/**
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* See {@link fromDimension$} Observable for more information.
|
|
20
|
+
* Observes the size of the host element.
|
|
20
21
|
*
|
|
21
22
|
* ---
|
|
22
23
|
* Usage:
|
|
23
24
|
*
|
|
25
|
+
* ```html
|
|
24
26
|
* <div sciDimension (sciDimensionChange)="onDimensionChange($event)"></div>
|
|
27
|
+
* ```
|
|
25
28
|
*/
|
|
26
29
|
class SciDimensionDirective {
|
|
27
|
-
constructor(
|
|
28
|
-
this._ngZone = _ngZone;
|
|
29
|
-
this._destroy$ = new Subject();
|
|
30
|
+
constructor() {
|
|
30
31
|
/**
|
|
31
|
-
*
|
|
32
|
+
* Controls if to output outside the Angular zone. Defaults to `false`.
|
|
32
33
|
*/
|
|
33
|
-
this.
|
|
34
|
+
this.emitOutsideAngular = input(false);
|
|
34
35
|
/**
|
|
35
|
-
*
|
|
36
|
-
* If emitted outside of the Angular zone no change detection cycle is triggered.
|
|
37
|
-
*
|
|
38
|
-
* By default, if not specified, emits inside the Angular zone.
|
|
36
|
+
* Outputs the size of the element.
|
|
39
37
|
*/
|
|
40
|
-
this.
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
.
|
|
50
|
-
.
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
else {
|
|
55
|
-
this._ngZone.run(() => this.dimensionChange.emit(dimension));
|
|
56
|
-
}
|
|
38
|
+
this.dimensionChange = output({ alias: 'sciDimensionChange' });
|
|
39
|
+
const host = inject((ElementRef)).nativeElement;
|
|
40
|
+
const zone = inject(NgZone);
|
|
41
|
+
fromResize$(host)
|
|
42
|
+
.pipe(subscribeInside(continueFn => zone.runOutsideAngular(continueFn)), observeInside(continueFn => this.emitOutsideAngular() ? continueFn() : zone.run(continueFn)), subscribeOn(animationFrameScheduler), // do not block resize callback (ResizeObserver loop completed with undelivered notifications)
|
|
43
|
+
observeOn(animationFrameScheduler), // do not block resize callback (ResizeObserver loop completed with undelivered notifications)
|
|
44
|
+
takeUntilDestroyed())
|
|
45
|
+
.subscribe(() => {
|
|
46
|
+
this.dimensionChange.emit({
|
|
47
|
+
clientWidth: host.clientWidth,
|
|
48
|
+
offsetWidth: host.offsetWidth,
|
|
49
|
+
clientHeight: host.clientHeight,
|
|
50
|
+
offsetHeight: host.offsetHeight,
|
|
51
|
+
element: host,
|
|
57
52
|
});
|
|
58
53
|
});
|
|
59
54
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
*/
|
|
63
|
-
get dimension() {
|
|
64
|
-
return captureElementDimension(this._host);
|
|
65
|
-
}
|
|
66
|
-
ngOnDestroy() {
|
|
67
|
-
this._destroy$.next();
|
|
68
|
-
}
|
|
69
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: SciDimensionDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
70
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.1", type: SciDimensionDirective, isStandalone: true, selector: "[sciDimension]", inputs: { emitOutsideAngular: "emitOutsideAngular" }, outputs: { dimensionChange: "sciDimensionChange" }, exportAs: ["sciDimension"], ngImport: i0 }); }
|
|
55
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: SciDimensionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
56
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.1", type: SciDimensionDirective, isStandalone: true, selector: "[sciDimension]", inputs: { emitOutsideAngular: { classPropertyName: "emitOutsideAngular", publicName: "emitOutsideAngular", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dimensionChange: "sciDimensionChange" }, ngImport: i0 }); }
|
|
71
57
|
}
|
|
72
58
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: SciDimensionDirective, decorators: [{
|
|
73
59
|
type: Directive,
|
|
74
60
|
args: [{
|
|
75
61
|
selector: '[sciDimension]',
|
|
76
|
-
exportAs: 'sciDimension',
|
|
77
62
|
standalone: true,
|
|
78
63
|
}]
|
|
79
|
-
}], ctorParameters: () => [
|
|
80
|
-
type: Output,
|
|
81
|
-
args: ['sciDimensionChange']
|
|
82
|
-
}], emitOutsideAngular: [{
|
|
83
|
-
type: Input
|
|
84
|
-
}] } });
|
|
64
|
+
}], ctorParameters: () => [] });
|
|
85
65
|
|
|
86
66
|
/*
|
|
87
67
|
* Copyright (c) 2018-2019 Swiss Federal Railways
|
|
@@ -114,6 +94,107 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImpor
|
|
|
114
94
|
}]
|
|
115
95
|
}] });
|
|
116
96
|
|
|
97
|
+
/*
|
|
98
|
+
* Copyright (c) 2018-2024 Swiss Federal Railways
|
|
99
|
+
*
|
|
100
|
+
* This program and the accompanying materials are made
|
|
101
|
+
* available under the terms of the Eclipse Public License 2.0
|
|
102
|
+
* which is available at https://www.eclipse.org/legal/epl-2.0/
|
|
103
|
+
*
|
|
104
|
+
* SPDX-License-Identifier: EPL-2.0
|
|
105
|
+
*/
|
|
106
|
+
function dimension(elementLike, options) {
|
|
107
|
+
assertNotInReactiveContext(dimension, 'Invoking `dimension` causes new subscriptions every time. Move `dimension` outside of the reactive context and read the signal value where needed.');
|
|
108
|
+
if (!options?.injector) {
|
|
109
|
+
assertInInjectionContext(dimension);
|
|
110
|
+
}
|
|
111
|
+
const injector = options?.injector ?? inject(Injector);
|
|
112
|
+
const zone = injector.get(NgZone);
|
|
113
|
+
const element = computed(() => coerceElement(isSignal(elementLike) ? elementLike() : elementLike));
|
|
114
|
+
const onResize = signal(undefined, { equal: () => false });
|
|
115
|
+
// Subscribe to element size changes.
|
|
116
|
+
effect(onCleanup => {
|
|
117
|
+
const el = element();
|
|
118
|
+
if (!el) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
untracked(() => {
|
|
122
|
+
const subscription = fromResize$(el)
|
|
123
|
+
.pipe(subscribeInside(fn => zone.runOutsideAngular(fn)), observeOn(animationFrameScheduler))
|
|
124
|
+
.subscribe(() => {
|
|
125
|
+
NgZone.assertNotInAngularZone();
|
|
126
|
+
onResize.set();
|
|
127
|
+
});
|
|
128
|
+
onCleanup(() => subscription.unsubscribe());
|
|
129
|
+
});
|
|
130
|
+
}, { injector });
|
|
131
|
+
// Create signal that recomputes each time the size changes.
|
|
132
|
+
return computed(() => {
|
|
133
|
+
const el = element();
|
|
134
|
+
if (!el) {
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
137
|
+
// Track element size.
|
|
138
|
+
onResize();
|
|
139
|
+
return {
|
|
140
|
+
clientWidth: el.clientWidth,
|
|
141
|
+
offsetWidth: el.offsetWidth,
|
|
142
|
+
clientHeight: el.clientHeight,
|
|
143
|
+
offsetHeight: el.offsetHeight,
|
|
144
|
+
element: el,
|
|
145
|
+
};
|
|
146
|
+
}, { equal: Objects.isEqual });
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/*
|
|
150
|
+
* Copyright (c) 2018-2024 Swiss Federal Railways
|
|
151
|
+
*
|
|
152
|
+
* This program and the accompanying materials are made
|
|
153
|
+
* available under the terms of the Eclipse Public License 2.0
|
|
154
|
+
* which is available at https://www.eclipse.org/legal/epl-2.0/
|
|
155
|
+
*
|
|
156
|
+
* SPDX-License-Identifier: EPL-2.0
|
|
157
|
+
*/
|
|
158
|
+
function boundingClientRect(elementLike, options) {
|
|
159
|
+
assertNotInReactiveContext(boundingClientRect, 'Invoking `boundingClientRect` causes new subscriptions every time. Move `boundingClientRect` outside of the reactive context and read the signal value where needed.');
|
|
160
|
+
if (!options?.injector) {
|
|
161
|
+
assertInInjectionContext(boundingClientRect);
|
|
162
|
+
}
|
|
163
|
+
const injector = options?.injector ?? inject(Injector);
|
|
164
|
+
const zone = injector.get(NgZone);
|
|
165
|
+
const element = computed(() => coerceElement(isSignal(elementLike) ? elementLike() : elementLike));
|
|
166
|
+
const onBoundingBoxChange = signal(undefined, { equal: () => false });
|
|
167
|
+
// Subscribe to element bounding box changes.
|
|
168
|
+
effect(onCleanup => {
|
|
169
|
+
const el = element();
|
|
170
|
+
if (!el) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
untracked(() => {
|
|
174
|
+
const subscription = fromBoundingClientRect$(el)
|
|
175
|
+
.pipe(subscribeInside(fn => zone.runOutsideAngular(fn)))
|
|
176
|
+
.subscribe(() => {
|
|
177
|
+
NgZone.assertNotInAngularZone();
|
|
178
|
+
onBoundingBoxChange.set();
|
|
179
|
+
});
|
|
180
|
+
onCleanup(() => subscription.unsubscribe());
|
|
181
|
+
});
|
|
182
|
+
}, { injector });
|
|
183
|
+
// Create signal that recomputes each time the bounding box changes.
|
|
184
|
+
return computed(() => {
|
|
185
|
+
const el = element();
|
|
186
|
+
if (!el) {
|
|
187
|
+
return undefined;
|
|
188
|
+
}
|
|
189
|
+
// Track bounding box.
|
|
190
|
+
onBoundingBoxChange();
|
|
191
|
+
return el.getBoundingClientRect();
|
|
192
|
+
}, { equal: isEqualDomRect });
|
|
193
|
+
}
|
|
194
|
+
function isEqualDomRect(a, b) {
|
|
195
|
+
return a?.top === b?.top && a?.right === b?.right && a?.bottom === b?.bottom && a?.left === b?.left;
|
|
196
|
+
}
|
|
197
|
+
|
|
117
198
|
/*
|
|
118
199
|
* Copyright (c) 2018-2019 Swiss Federal Railways
|
|
119
200
|
*
|
|
@@ -133,5 +214,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImpor
|
|
|
133
214
|
* Generated bundle index. Do not edit.
|
|
134
215
|
*/
|
|
135
216
|
|
|
136
|
-
export { SciDimensionDirective, SciDimensionModule };
|
|
217
|
+
export { SciDimensionDirective, SciDimensionModule, boundingClientRect, dimension };
|
|
137
218
|
//# sourceMappingURL=scion-components-dimension.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scion-components-dimension.mjs","sources":["../../../../projects/scion/components/dimension/src/dimension.directive.ts","../../../../projects/scion/components/dimension/src/dimension.module.ts","../../../../projects/scion/components/dimension/src/public_api.ts","../../../../projects/scion/components/dimension/src/scion-components-dimension.ts"],"sourcesContent":["/*\n * Copyright (c) 2018-2019 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Directive, ElementRef, EventEmitter, Input, NgZone, OnDestroy, OnInit, Output} from '@angular/core';\nimport {Subject} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\nimport {captureElementDimension, Dimension, fromDimension$} from '@scion/toolkit/observable';\n\n/**\n * Allows observing changes to host element's size.\n *\n * See {@link fromDimension$} Observable for more information.\n *\n * ---\n * Usage:\n *\n * <div sciDimension (sciDimensionChange)=\"onDimensionChange($event)\"></div>\n */\n@Directive({\n selector: '[sciDimension]',\n exportAs: 'sciDimension',\n standalone: true,\n})\nexport class SciDimensionDirective implements OnInit, OnDestroy {\n\n private readonly _host: HTMLElement;\n private _destroy$ = new Subject<void>();\n\n /**\n * Upon subscription, it emits the host element's dimension, and then continuously emits when the dimension of the host element changes.\n */\n @Output('sciDimensionChange') // eslint-disable-line @angular-eslint/no-output-rename\n public dimensionChange = new EventEmitter<SciDimension>();\n\n /**\n * Controls if to emit a dimension change inside or outside of the Angular zone.\n * If emitted outside of the Angular zone no change detection cycle is triggered.\n *\n * By default, if not specified, emits inside the Angular zone.\n */\n @Input()\n public emitOutsideAngular = false;\n\n constructor(host: ElementRef<HTMLElement>, private _ngZone: NgZone) {\n this._host = host.nativeElement;\n }\n\n public ngOnInit(): void {\n this.installDimensionListener();\n }\n\n private installDimensionListener(): void {\n this._ngZone.runOutsideAngular(() => {\n fromDimension$(this._host)\n .pipe(takeUntil(this._destroy$))\n .subscribe((dimension: SciDimension) => {\n if (this.emitOutsideAngular) {\n this.dimensionChange.emit(dimension);\n }\n else {\n this._ngZone.run(() => this.dimensionChange.emit(dimension));\n }\n });\n });\n }\n\n /**\n * Returns the current dimension of its host element.\n */\n public get dimension(): SciDimension {\n return captureElementDimension(this._host);\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n }\n}\n\n/**\n * Represents the dimension of an element.\n */\nexport type SciDimension = Dimension;\n","/*\n * Copyright (c) 2018-2019 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {NgModule} from '@angular/core';\nimport {SciDimensionDirective} from './dimension.directive';\n\n/**\n * Provides a directive for observing changes to the size of the host element.\n *\n * @see fromDimension$\n */\n@NgModule({\n imports: [\n SciDimensionDirective,\n ],\n exports: [\n SciDimensionDirective,\n ],\n})\nexport class SciDimensionModule {\n}\n","/*\n * Copyright (c) 2018-2019 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\n/*\n * Secondary entrypoint: '@scion/components/dimension'\n *\n * @see https://github.com/ng-packagr/ng-packagr/blob/master/docs/secondary-entrypoints.md\n */\nexport {SciDimensionModule} from './dimension.module';\nexport {SciDimensionDirective, SciDimension} from './dimension.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scion-components-dimension.mjs","sources":["../../../../projects/scion/components/dimension/src/dimension.directive.ts","../../../../projects/scion/components/dimension/src/dimension.module.ts","../../../../projects/scion/components/dimension/src/dimension.signal.ts","../../../../projects/scion/components/dimension/src/bounding-client-rect.signal.ts","../../../../projects/scion/components/dimension/src/public_api.ts","../../../../projects/scion/components/dimension/src/scion-components-dimension.ts"],"sourcesContent":["/*\n * Copyright (c) 2018-2024 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Directive, ElementRef, inject, input, NgZone, output} from '@angular/core';\nimport {fromResize$} from '@scion/toolkit/observable';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {observeInside, subscribeInside} from '@scion/toolkit/operators';\nimport {animationFrameScheduler, observeOn, subscribeOn} from 'rxjs';\nimport {SciDimension} from './dimension';\n\n/**\n * Observes the size of the host element.\n *\n * ---\n * Usage:\n *\n * ```html\n * <div sciDimension (sciDimensionChange)=\"onDimensionChange($event)\"></div>\n * ```\n */\n@Directive({\n selector: '[sciDimension]',\n standalone: true,\n})\nexport class SciDimensionDirective {\n\n /**\n * Controls if to output outside the Angular zone. Defaults to `false`.\n */\n public emitOutsideAngular = input(false);\n\n /**\n * Outputs the size of the element.\n */\n public dimensionChange = output<SciDimension>({alias: 'sciDimensionChange'});\n\n constructor() {\n const host = inject(ElementRef<HTMLElement>).nativeElement;\n const zone = inject(NgZone);\n\n fromResize$(host)\n .pipe(\n subscribeInside(continueFn => zone.runOutsideAngular(continueFn)),\n observeInside(continueFn => this.emitOutsideAngular() ? continueFn() : zone.run(continueFn)),\n subscribeOn(animationFrameScheduler), // do not block resize callback (ResizeObserver loop completed with undelivered notifications)\n observeOn(animationFrameScheduler), // do not block resize callback (ResizeObserver loop completed with undelivered notifications)\n takeUntilDestroyed(),\n )\n .subscribe(() => {\n this.dimensionChange.emit({\n clientWidth: host.clientWidth,\n offsetWidth: host.offsetWidth,\n clientHeight: host.clientHeight,\n offsetHeight: host.offsetHeight,\n element: host,\n });\n });\n }\n}\n","/*\n * Copyright (c) 2018-2019 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {NgModule} from '@angular/core';\nimport {SciDimensionDirective} from './dimension.directive';\n\n/**\n * Provides a directive for observing changes to the size of the host element.\n *\n * @see fromDimension$\n */\n@NgModule({\n imports: [\n SciDimensionDirective,\n ],\n exports: [\n SciDimensionDirective,\n ],\n})\nexport class SciDimensionModule {\n}\n","/*\n * Copyright (c) 2018-2024 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {assertInInjectionContext, assertNotInReactiveContext, computed, effect, ElementRef, inject, Injector, isSignal, NgZone, signal, Signal, untracked} from '@angular/core';\nimport {SciDimension} from './dimension';\nimport {coerceElement} from '@angular/cdk/coercion';\nimport {Objects} from '@scion/toolkit/util';\nimport {fromResize$} from '@scion/toolkit/observable';\nimport {animationFrameScheduler, observeOn} from 'rxjs';\nimport {subscribeInside} from '@scion/toolkit/operators';\n\n/**\n * Creates a signal observing the size of an element.\n *\n * The element can be passed as a signal, enabling observation of view children in the component constructor.\n *\n * The signal subscribes to the native {@link ResizeObserver} to monitor element size changes. Destroying the injection context will unsubscribe the observer.\n *\n * Usage:\n * - Must be called within an injection context or an injector provided. Destroying the injector will unsubscribe the signal.\n * - Must not be called within a reactive context to avoid repeated subscriptions.\n */\nexport function dimension(elementLike: HTMLElement | ElementRef<HTMLElement> | Signal<HTMLElement | ElementRef<HTMLElement>>, options?: {injector?: Injector}): Signal<SciDimension>;\nexport function dimension(elementLike: HTMLElement | ElementRef<HTMLElement> | Signal<HTMLElement | ElementRef<HTMLElement> | undefined>, options?: {injector?: Injector}): Signal<SciDimension | undefined>;\nexport function dimension(elementLike: HTMLElement | ElementRef<HTMLElement> | Signal<HTMLElement | ElementRef<HTMLElement> | undefined>, options?: {injector?: Injector}): Signal<SciDimension | undefined> {\n assertNotInReactiveContext(dimension, 'Invoking `dimension` causes new subscriptions every time. Move `dimension` outside of the reactive context and read the signal value where needed.');\n if (!options?.injector) {\n assertInInjectionContext(dimension);\n }\n\n const injector = options?.injector ?? inject(Injector);\n const zone = injector.get(NgZone);\n const element = computed(() => coerceElement(isSignal(elementLike) ? elementLike() : elementLike));\n const onResize = signal<void>(undefined, {equal: () => false});\n\n // Subscribe to element size changes.\n effect(onCleanup => {\n const el = element();\n if (!el) {\n return;\n }\n\n untracked(() => {\n const subscription = fromResize$(el)\n .pipe(\n subscribeInside(fn => zone.runOutsideAngular(fn)),\n observeOn(animationFrameScheduler), // do not block resize callback (ResizeObserver loop completed with undelivered notifications)\n )\n .subscribe(() => {\n NgZone.assertNotInAngularZone();\n onResize.set();\n });\n onCleanup(() => subscription.unsubscribe());\n });\n }, {injector});\n\n // Create signal that recomputes each time the size changes.\n return computed(() => {\n const el = element();\n if (!el) {\n return undefined;\n }\n\n // Track element size.\n onResize();\n\n return {\n clientWidth: el.clientWidth,\n offsetWidth: el.offsetWidth,\n clientHeight: el.clientHeight,\n offsetHeight: el.offsetHeight,\n element: el,\n };\n }, {equal: Objects.isEqual});\n}\n","/*\n * Copyright (c) 2018-2024 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {assertInInjectionContext, assertNotInReactiveContext, computed, effect, ElementRef, inject, Injector, isSignal, NgZone, signal, Signal, untracked} from '@angular/core';\nimport {coerceElement} from '@angular/cdk/coercion';\nimport {fromBoundingClientRect$} from '@scion/toolkit/observable';\nimport {subscribeInside} from '@scion/toolkit/operators';\n\n/**\n * Creates a signal observing the bounding box of an element.\n *\n * The bounding box includes the element's position relative to the top-left of the viewport and its size.\n * Refer to https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect for more details.\n *\n * The element can be passed as a signal, enabling observation of view children in the component constructor.\n *\n * There is no native browser API to observe the position of an element. The signal uses {@link IntersectionObserver} and\n * {@link ResizeObserver} to detect position changes. For tracking only size changes, use the {@link dimension} signal instead.\n *\n * Usage:\n * - Must be called within an injection context or an injector provided. Destroying the injector will unsubscribe the signal.\n * - Must not be called within a reactive context to avoid repeated subscriptions.\n * - The element and the document root (`<html>`) must be positioned `relative` or `absolute`. If not, a warning is logged, and positioning changed to `relative`.\n */\nexport function boundingClientRect(elementLike: HTMLElement | ElementRef<HTMLElement> | Signal<HTMLElement | ElementRef<HTMLElement>>, options?: {injector?: Injector}): Signal<DOMRect>;\nexport function boundingClientRect(elementLike: HTMLElement | ElementRef<HTMLElement> | Signal<HTMLElement | ElementRef<HTMLElement> | undefined>, options?: {injector?: Injector}): Signal<DOMRect | undefined>;\nexport function boundingClientRect(elementLike: HTMLElement | ElementRef<HTMLElement> | Signal<HTMLElement | ElementRef<HTMLElement> | undefined>, options?: {injector?: Injector}): Signal<DOMRect | undefined> {\n assertNotInReactiveContext(boundingClientRect, 'Invoking `boundingClientRect` causes new subscriptions every time. Move `boundingClientRect` outside of the reactive context and read the signal value where needed.');\n if (!options?.injector) {\n assertInInjectionContext(boundingClientRect);\n }\n\n const injector = options?.injector ?? inject(Injector);\n const zone = injector.get(NgZone);\n const element = computed(() => coerceElement(isSignal(elementLike) ? elementLike() : elementLike));\n const onBoundingBoxChange = signal<void>(undefined, {equal: () => false});\n\n // Subscribe to element bounding box changes.\n effect(onCleanup => {\n const el = element();\n if (!el) {\n return;\n }\n\n untracked(() => {\n const subscription = fromBoundingClientRect$(el)\n .pipe(subscribeInside(fn => zone.runOutsideAngular(fn)))\n .subscribe(() => {\n NgZone.assertNotInAngularZone();\n onBoundingBoxChange.set();\n });\n onCleanup(() => subscription.unsubscribe());\n });\n }, {injector});\n\n // Create signal that recomputes each time the bounding box changes.\n return computed(() => {\n const el = element();\n if (!el) {\n return undefined;\n }\n\n // Track bounding box.\n onBoundingBoxChange();\n\n return el.getBoundingClientRect();\n }, {equal: isEqualDomRect});\n}\n\nfunction isEqualDomRect(a: DOMRect | undefined, b: DOMRect | undefined): boolean {\n return a?.top === b?.top && a?.right === b?.right && a?.bottom === b?.bottom && a?.left === b?.left;\n}\n","/*\n * Copyright (c) 2018-2019 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\n/*\n * Secondary entrypoint: '@scion/components/dimension'\n *\n * @see https://github.com/ng-packagr/ng-packagr/blob/master/docs/secondary-entrypoints.md\n */\nexport {SciDimensionModule} from './dimension.module';\nexport {SciDimensionDirective} from './dimension.directive';\nexport {dimension} from './dimension.signal';\nexport {boundingClientRect} from './bounding-client-rect.signal';\nexport {SciDimension} from './dimension';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|