@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.
@@ -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, NgIf } from '@angular/common';
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: "14.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<ng-container *ngIf=\"scrollbarStyle === 'on-top' && (nativeScrollbarTrackSizeProvider.trackSize$ | async) !== null\">\n <sci-scrollbar [direction]=\"'vscroll'\" [viewport]=\"viewport\" class=\"e2e-vertical\"></sci-scrollbar>\n <sci-scrollbar [direction]=\"'hscroll'\" [viewport]=\"viewport\" class=\"e2e-horizontal\"></sci-scrollbar>\n</ng-container>\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: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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 }); }
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<ng-container *ngIf=\"scrollbarStyle === 'on-top' && (nativeScrollbarTrackSizeProvider.trackSize$ | async) !== null\">\n <sci-scrollbar [direction]=\"'vscroll'\" [viewport]=\"viewport\" class=\"e2e-vertical\"></sci-scrollbar>\n <sci-scrollbar [direction]=\"'hscroll'\" [viewport]=\"viewport\" class=\"e2e-horizontal\"></sci-scrollbar>\n</ng-container>\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"] }]
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 { EventEmitter, Directive, Output, Input, NgModule } from '@angular/core';
3
- import { Subject } from 'rxjs';
4
- import { takeUntil } from 'rxjs/operators';
5
- import { fromDimension$, captureElementDimension } from '@scion/toolkit/observable';
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-2019 Swiss Federal Railways
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
- * Allows observing changes to host element's size.
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(host, _ngZone) {
28
- this._ngZone = _ngZone;
29
- this._destroy$ = new Subject();
30
+ constructor() {
30
31
  /**
31
- * Upon subscription, it emits the host element's dimension, and then continuously emits when the dimension of the host element changes.
32
+ * Controls if to output outside the Angular zone. Defaults to `false`.
32
33
  */
33
- this.dimensionChange = new EventEmitter();
34
+ this.emitOutsideAngular = input(false);
34
35
  /**
35
- * Controls if to emit a dimension change inside or outside of the Angular zone.
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.emitOutsideAngular = false;
41
- this._host = host.nativeElement;
42
- }
43
- ngOnInit() {
44
- this.installDimensionListener();
45
- }
46
- installDimensionListener() {
47
- this._ngZone.runOutsideAngular(() => {
48
- fromDimension$(this._host)
49
- .pipe(takeUntil(this._destroy$))
50
- .subscribe((dimension) => {
51
- if (this.emitOutsideAngular) {
52
- this.dimensionChange.emit(dimension);
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
- * Returns the current dimension of its host element.
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: () => [{ type: i0.ElementRef }, { type: i0.NgZone }], propDecorators: { dimensionChange: [{
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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"}