@scion/components 15.0.2 → 16.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/dimension/dimension.directive.d.ts +2 -2
  2. package/esm2022/dimension/dimension.directive.mjs +84 -0
  3. package/esm2022/dimension/dimension.module.mjs +39 -0
  4. package/esm2022/sashbox/element-ref.directive.mjs +28 -0
  5. package/esm2022/sashbox/sash-initializer.directive.mjs +33 -0
  6. package/esm2022/sashbox/sash.directive.mjs +145 -0
  7. package/esm2022/sashbox/sashbox.component.mjs +279 -0
  8. package/esm2022/sashbox/sashbox.module.mjs +70 -0
  9. package/esm2022/splitter/splitter.component.mjs +228 -0
  10. package/esm2022/splitter/splitter.module.mjs +43 -0
  11. package/esm2022/throbber/ellipsis-throbber/ellipsis-throbber.component.mjs +26 -0
  12. package/esm2022/throbber/ripple-throbber/ripple-throbber.component.mjs +26 -0
  13. package/esm2022/throbber/roller-throbber/roller-throbber.component.mjs +26 -0
  14. package/esm2022/throbber/spinner-throbber/spinner-throbber.component.mjs +27 -0
  15. package/esm2022/throbber/throbber.component.mjs +68 -0
  16. package/esm2022/throbber/throbber.module.mjs +49 -0
  17. package/esm2022/viewport/native-scrollbar-track-size-provider.service.mjs +115 -0
  18. package/esm2022/viewport/scrollable.directive.mjs +94 -0
  19. package/esm2022/viewport/scrollbar/scrollbar.component.mjs +323 -0
  20. package/esm2022/viewport/viewport.component.mjs +282 -0
  21. package/esm2022/viewport/viewport.module.mjs +51 -0
  22. package/{fesm2015 → fesm2022}/scion-components-dimension.mjs +12 -7
  23. package/{fesm2015 → fesm2022}/scion-components-dimension.mjs.map +1 -1
  24. package/{fesm2020 → fesm2022}/scion-components-sashbox.mjs +47 -42
  25. package/{fesm2020 → fesm2022}/scion-components-sashbox.mjs.map +1 -1
  26. package/{fesm2020 → fesm2022}/scion-components-splitter.mjs +22 -17
  27. package/{fesm2020 → fesm2022}/scion-components-splitter.mjs.map +1 -1
  28. package/{fesm2020 → fesm2022}/scion-components-throbber.mjs +28 -23
  29. package/{fesm2015 → fesm2022}/scion-components-throbber.mjs.map +1 -1
  30. package/{fesm2020 → fesm2022}/scion-components-viewport.mjs +65 -60
  31. package/{fesm2015 → fesm2022}/scion-components-viewport.mjs.map +1 -1
  32. package/package.json +27 -43
  33. package/sashbox/sash-initializer.directive.d.ts +1 -1
  34. package/sashbox/sash.directive.d.ts +1 -1
  35. package/sashbox/sashbox.component.d.ts +1 -1
  36. package/splitter/splitter.component.d.ts +1 -1
  37. package/throbber/throbber.component.d.ts +1 -1
  38. package/viewport/scrollable.directive.d.ts +1 -1
  39. package/viewport/scrollbar/scrollbar.component.d.ts +1 -1
  40. package/viewport/viewport.component.d.ts +2 -2
  41. package/esm2020/dimension/dimension.directive.mjs +0 -83
  42. package/esm2020/dimension/dimension.module.mjs +0 -38
  43. package/esm2020/sashbox/element-ref.directive.mjs +0 -27
  44. package/esm2020/sashbox/sash-initializer.directive.mjs +0 -32
  45. package/esm2020/sashbox/sash.directive.mjs +0 -144
  46. package/esm2020/sashbox/sashbox.component.mjs +0 -278
  47. package/esm2020/sashbox/sashbox.module.mjs +0 -69
  48. package/esm2020/splitter/splitter.component.mjs +0 -227
  49. package/esm2020/splitter/splitter.module.mjs +0 -42
  50. package/esm2020/throbber/ellipsis-throbber/ellipsis-throbber.component.mjs +0 -25
  51. package/esm2020/throbber/ripple-throbber/ripple-throbber.component.mjs +0 -25
  52. package/esm2020/throbber/roller-throbber/roller-throbber.component.mjs +0 -25
  53. package/esm2020/throbber/spinner-throbber/spinner-throbber.component.mjs +0 -26
  54. package/esm2020/throbber/throbber.component.mjs +0 -67
  55. package/esm2020/throbber/throbber.module.mjs +0 -48
  56. package/esm2020/viewport/native-scrollbar-track-size-provider.service.mjs +0 -114
  57. package/esm2020/viewport/scrollable.directive.mjs +0 -93
  58. package/esm2020/viewport/scrollbar/scrollbar.component.mjs +0 -322
  59. package/esm2020/viewport/viewport.component.mjs +0 -281
  60. package/esm2020/viewport/viewport.module.mjs +0 -50
  61. package/fesm2015/scion-components-sashbox.mjs +0 -554
  62. package/fesm2015/scion-components-sashbox.mjs.map +0 -1
  63. package/fesm2015/scion-components-splitter.mjs +0 -284
  64. package/fesm2015/scion-components-splitter.mjs.map +0 -1
  65. package/fesm2015/scion-components-throbber.mjs +0 -214
  66. package/fesm2015/scion-components-viewport.mjs +0 -861
  67. package/fesm2015/scion-components.mjs +0 -4
  68. package/fesm2015/scion-components.mjs.map +0 -1
  69. package/fesm2020/scion-components-dimension.mjs +0 -135
  70. package/fesm2020/scion-components-dimension.mjs.map +0 -1
  71. package/fesm2020/scion-components-throbber.mjs.map +0 -1
  72. package/fesm2020/scion-components-viewport.mjs.map +0 -1
  73. /package/{esm2020 → esm2022}/dimension/public_api.mjs +0 -0
  74. /package/{esm2020 → esm2022}/dimension/scion-components-dimension.mjs +0 -0
  75. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  76. /package/{esm2020 → esm2022}/sashbox/public_api.mjs +0 -0
  77. /package/{esm2020 → esm2022}/sashbox/sashbox-accessor.mjs +0 -0
  78. /package/{esm2020 → esm2022}/sashbox/scion-components-sashbox.mjs +0 -0
  79. /package/{esm2020 → esm2022}/scion-components.mjs +0 -0
  80. /package/{esm2020 → esm2022}/splitter/public_api.mjs +0 -0
  81. /package/{esm2020 → esm2022}/splitter/scion-components-splitter.mjs +0 -0
  82. /package/{esm2020 → esm2022}/throbber/public_api.mjs +0 -0
  83. /package/{esm2020 → esm2022}/throbber/scion-components-throbber.mjs +0 -0
  84. /package/{esm2020 → esm2022}/viewport/public_api.mjs +0 -0
  85. /package/{esm2020 → esm2022}/viewport/scion-components-viewport.mjs +0 -0
  86. /package/{fesm2020 → fesm2022}/scion-components.mjs +0 -0
  87. /package/{fesm2020 → fesm2022}/scion-components.mjs.map +0 -0
@@ -0,0 +1,282 @@
1
+ /*
2
+ * Copyright (c) 2018-2019 Swiss Federal Railways
3
+ *
4
+ * This program and the accompanying materials are made
5
+ * available under the terms of the Eclipse Public License 2.0
6
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
7
+ *
8
+ * SPDX-License-Identifier: EPL-2.0
9
+ */
10
+ import { Component, EventEmitter, HostListener, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
11
+ import { coerceElement } from '@angular/cdk/coercion';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "./native-scrollbar-track-size-provider.service";
14
+ import * as i2 from "@angular/common";
15
+ import * as i3 from "@angular/cdk/scrolling";
16
+ import * as i4 from "./scrollbar/scrollbar.component";
17
+ import * as i5 from "./scrollable.directive";
18
+ /**
19
+ * Represents a viewport with slotted content (`<ng-content>`) used as scrollable content. By default, content is added to a CSS grid layout.
20
+ *
21
+ * The viewport component displays scrollbars when its content overflows. Scrollbars are displayed on top of the content, not next to it.
22
+ * The component uses the native scrollbars of the operating system if they are already sitting on top, or falls back and renders scrollbars on top otherwise.
23
+ * The viewport remains natively scrollable with the native scrollbars shifted out of the viewport's visible area. Consequently, the viewport keeps supporting
24
+ * native scrolling features such as touch gestures, scroll speed acceleration, or scrolling near the viewport edges during drag-and-drop operations.
25
+ *
26
+ * ```html
27
+ * <sci-viewport>
28
+ * your content
29
+ * </sci-viewport>
30
+ * ```
31
+ *
32
+ * ## Adding the viewport to a layout
33
+ *
34
+ * Typically you would add the viewport component to a flexible layout, filling the remaining space vertically and horizontally, such as a flexbox container
35
+ * with the viewport's `flex` CSS property set to either `flex: auto` or `flex: 1 1 0`.
36
+ *
37
+ * The viewport is sized according to its content width and height. It grows to absorb any free space, thus overflowing its content only when encountering
38
+ * a layout constraint. Depending on the layout, different steps may be necessary to prevent the viewport from growing to infinity.
39
+ *
40
+ * - If practical, give the viewport a fixed size or a maximum size.
41
+ * - If you add the viewport to a flexbox layout, make sure that it cannot exceed the available space. Instead, the viewport should fill the remaining space,
42
+ * vertically and horizontally. Be aware that, by default, a flex item does not shrink below its minimum content size. To change this, set the viewport's
43
+ * `flex-basis` to `0` (instead of `auto`), or use the CSS shorthand property `flex: 1 1 0`. The `flex-basis` defines the default size of a flex item before
44
+ * the remaining extra space is distributed. If the viewport does not appear after setting this property, check its parent elements' content sizes.
45
+ * As an alternative to setting `flex: 1 1 0`, change the setting to `flex: auto` and hide the overflow in the parent element, as follows: `overflow: hidden`.
46
+ * Another approach would be to set the minimum height of all parents to `0`, as follows: `min-height: 0`.
47
+ *
48
+ * For the complete documentation on the flex layout and its features, refer to https://developer.mozilla.org/en-US/docs/Web/CSS/flex.
49
+ *
50
+ *
51
+ * ## Layouting the viewport's slotted content
52
+ *
53
+ * By default, the viewport's content is added to a CSS grid container with a single column, filling remaining space vertically and horizontally.
54
+ * Using the `::part(content)` pseudo element selector, you can configure the grid container or apply a different layout, such as a flex or flow layout.
55
+ *
56
+ * #### Example of adding slotted content to a CSS flex container.
57
+ * ```css
58
+ * sci-viewport::part(content) {
59
+ * display: flex;
60
+ * flex-direction: column;
61
+ * }
62
+ * ```
63
+ *
64
+ * #### Example of configuring CSS grid container with two columns
65
+ * ```css
66
+ * sci-viewport::part(content) {
67
+ * grid-template-columns: 1fr 1fr;
68
+ * gap: 1em;
69
+ * }
70
+ * ```
71
+ *
72
+ * ## Styling of scrollbars
73
+ *
74
+ * You can override the following CSS variables to control the appearance of the scrollbar:
75
+ *
76
+ * - sci-viewport-scrollbar-color: Sets the color of the scrollbar (by default, uses `rgb(78, 78, 78)`).
77
+ *
78
+ * ```css
79
+ * sci-viewport {
80
+ * --sci-viewport-scrollbar-color: blue;
81
+ * }
82
+ * ```
83
+ */
84
+ class SciViewportComponent {
85
+ /** @internal */
86
+ set setViewport(viewport) {
87
+ this._viewportElement = coerceElement(viewport);
88
+ }
89
+ /** @internal */
90
+ set setViewportClient(viewportClient) {
91
+ this._viewportClient = coerceElement(viewportClient);
92
+ }
93
+ /**
94
+ * Controls whether to use native scrollbars or, which is by default, emulated scrollbars that sit on top of the viewport client.
95
+ * In the latter, the viewport client remains natively scrollable.
96
+ */
97
+ set scrollbarStyle(scrollbarStyle) {
98
+ this._scrollbarStyle = scrollbarStyle || 'on-top';
99
+ }
100
+ get scrollbarStyle() {
101
+ return this._scrollbarStyle;
102
+ }
103
+ constructor(host, nativeScrollbarTrackSizeProvider) {
104
+ this.host = host;
105
+ this.nativeScrollbarTrackSizeProvider = nativeScrollbarTrackSizeProvider;
106
+ this._scrollbarStyle = 'on-top';
107
+ /**
108
+ * Emits upon a scroll event.
109
+ *
110
+ * You can add [sciDimension] directive to the viewport or viewport client to be notified about layout changes.
111
+ */
112
+ this.scroll = new EventEmitter(); // eslint-disable-line @angular-eslint/no-output-native
113
+ }
114
+ focus() {
115
+ this._viewportElement?.focus();
116
+ }
117
+ onScroll(event) {
118
+ this.scroll.emit(event);
119
+ }
120
+ /**
121
+ * Returns the number of pixels that the viewport client is scrolled vertically.
122
+ *
123
+ * @see Element.scrollTop
124
+ */
125
+ get scrollTop() {
126
+ return this._viewportElement.scrollTop;
127
+ }
128
+ /**
129
+ * Sets the number of pixels that the viewport client is scrolled vertically.
130
+ *
131
+ * @see Element.scrollTop
132
+ */
133
+ set scrollTop(scrollTop) {
134
+ this._viewportElement.scrollTop = scrollTop;
135
+ }
136
+ /**
137
+ * Returns the number of pixels that the viewport client is scrolled horizontally.
138
+ *
139
+ * @see Element.scrollLeft
140
+ */
141
+ get scrollLeft() {
142
+ return this._viewportElement.scrollLeft;
143
+ }
144
+ /**
145
+ * Sets the number of pixels that the viewport client is scrolled horizontally.
146
+ *
147
+ * @see Element.scrollLeft
148
+ */
149
+ set scrollLeft(scrollLeft) {
150
+ this._viewportElement.scrollLeft = scrollLeft;
151
+ }
152
+ /**
153
+ * Returns the height of the viewport client.
154
+ *
155
+ * @see Element.scrollHeight
156
+ */
157
+ get scrollHeight() {
158
+ return this._viewportElement.scrollHeight;
159
+ }
160
+ /**
161
+ * Returns the width of the viewport client.
162
+ *
163
+ * @see Element.scrollWidth
164
+ */
165
+ get scrollWidth() {
166
+ return this._viewportElement.scrollWidth;
167
+ }
168
+ /**
169
+ * Returns the viewport {HTMLElement}.
170
+ */
171
+ get viewportElement() {
172
+ return this._viewportElement;
173
+ }
174
+ /**
175
+ * Returns the viewport client {HTMLElement}.
176
+ */
177
+ get viewportClientElement() {
178
+ return this._viewportClient;
179
+ }
180
+ /**
181
+ * Checks if the specified element is scrolled into the viewport.
182
+ *
183
+ * @param element - the element to be checked
184
+ * @param fit - control if the element must fully or partially fit into the viewport
185
+ * @return `true` if the element is scrolled into the viewport, or `false` otherwise.
186
+ */
187
+ isElementInView(element, fit) {
188
+ const elTop = this.computeOffset(element, 'top');
189
+ if (elTop === null) {
190
+ return false;
191
+ }
192
+ const elLeft = this.computeOffset(element, 'left');
193
+ if (elLeft === null) {
194
+ return false;
195
+ }
196
+ // Consider elements as scrolled into view when there is no viewport overflow.
197
+ // The calculation of whether an element is scrolled into view may be wrong by a few pixels if the viewport contains elements with decimal sizes.
198
+ // This can happen because `offsetLeft` and `offsetTop` operate on an integer (not a decimal), losing precision that can accumulate.
199
+ // To avoid incorrect calculation when there is no viewport overflow, we consider all contained elements as scrolled into the view.
200
+ if (this._viewportElement.scrollWidth <= this._viewportElement.clientWidth && this._viewportElement.scrollHeight <= this._viewportElement.clientHeight) {
201
+ return true;
202
+ }
203
+ const elBottom = elTop + coerceElement(element).offsetHeight;
204
+ const elRight = elLeft + coerceElement(element).offsetWidth;
205
+ const vpTop = this._viewportElement.scrollTop;
206
+ const vpLeft = this._viewportElement.scrollLeft;
207
+ const vpBottom = vpTop + this._viewportElement.clientHeight;
208
+ const vpRight = vpLeft + this._viewportElement.clientWidth;
209
+ if (fit === 'full') {
210
+ return (elTop >= vpTop && elBottom <= vpBottom) && (elLeft >= vpLeft && elRight <= vpRight);
211
+ }
212
+ else {
213
+ return (elBottom >= vpTop && elTop <= vpBottom) && (elRight >= vpLeft && elLeft <= vpRight);
214
+ }
215
+ }
216
+ /**
217
+ * Scrolls the specified element into the viewport.
218
+ *
219
+ * @param element - the element to scroll into the viewport
220
+ * @param offset - the gap between the element and the viewport
221
+ */
222
+ scrollIntoView(element, offset = 50) {
223
+ const top = this.computeOffset(element, 'top');
224
+ if (top === null) {
225
+ return;
226
+ }
227
+ const left = this.computeOffset(element, 'left');
228
+ if (left === null) {
229
+ return;
230
+ }
231
+ this._viewportElement.scrollTop = top - offset;
232
+ this._viewportElement.scrollLeft = left - offset;
233
+ }
234
+ /**
235
+ * Computes the distance of the element to the viewport's left or top border.
236
+ *
237
+ * @return distance of the element to the viewport's left or top border, or `null` if not contained
238
+ * in the viewport or the element or any ancestor has the `display` property set to `none`.
239
+ */
240
+ computeOffset(element, border) {
241
+ let offset = 0;
242
+ let el = coerceElement(element);
243
+ do {
244
+ offset += (border === 'left' ? el.offsetLeft : el.offsetTop);
245
+ const offsetParent = el.offsetParent;
246
+ if (offsetParent === null) {
247
+ // `offsetParent` is `null` in the following situations:
248
+ // - The element or any ancestor has the `display` property set to `none`
249
+ // - The element has the position property set to fixed (Firefox returns <body>).
250
+ // - The element is <body> or <html>.
251
+ // See https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent.
252
+ return null;
253
+ }
254
+ if (!(offsetParent instanceof HTMLElement)) {
255
+ return null;
256
+ }
257
+ el = offsetParent;
258
+ } while (el !== this.host.nativeElement);
259
+ return offset;
260
+ }
261
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: SciViewportComponent, deps: [{ token: i0.ElementRef }, { token: i1.SciNativeScrollbarTrackSizeProvider }], target: i0.ɵɵFactoryTarget.Component }); }
262
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: SciViewportComponent, 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{--sci-viewport-scrollbar-color: rgb(78, 78, 78);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: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "component", type: i4.SciScrollbarComponent, selector: "sci-scrollbar", inputs: ["direction", "viewport"] }, { kind: "directive", type: i5.SciScrollableDirective, selector: "[sciScrollable]", inputs: ["sciScrollableDisplayNativeScrollbar"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], encapsulation: i0.ViewEncapsulation.ShadowDom }); }
263
+ }
264
+ export { SciViewportComponent };
265
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: SciViewportComponent, decorators: [{
266
+ type: Component,
267
+ args: [{ selector: 'sci-viewport', encapsulation: ViewEncapsulation.ShadowDom, 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{--sci-viewport-scrollbar-color: rgb(78, 78, 78);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"] }]
268
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.SciNativeScrollbarTrackSizeProvider }]; }, propDecorators: { setViewport: [{
269
+ type: ViewChild,
270
+ args: ['viewport', { static: true }]
271
+ }], setViewportClient: [{
272
+ type: ViewChild,
273
+ args: ['viewport_client', { static: true }]
274
+ }], scrollbarStyle: [{
275
+ type: Input
276
+ }], scroll: [{
277
+ type: Output
278
+ }], focus: [{
279
+ type: HostListener,
280
+ args: ['focus']
281
+ }] } });
282
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vY29tcG9uZW50cy92aWV3cG9ydC9zcmMvdmlld3BvcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vY29tcG9uZW50cy92aWV3cG9ydC9zcmMvdmlld3BvcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFjLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFN0gsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7O0FBRXBEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlFRztBQUNILE1BTWEsb0JBQW9CO0lBTS9CLGdCQUFnQjtJQUNoQixJQUNXLFdBQVcsQ0FBQyxRQUFvQztRQUN6RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsSUFDVyxpQkFBaUIsQ0FBQyxjQUEwQztRQUNyRSxJQUFJLENBQUMsZUFBZSxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFDVyxjQUFjLENBQUMsY0FBOEI7UUFDdEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLElBQUksUUFBUSxDQUFDO0lBQ3BELENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDdkIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFVRCxZQUFtQixJQUE2QixFQUFTLGdDQUFx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LENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdELE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUM7WUFDckMsSUFBSSxZQUFZLEtBQUssSUFBSSxFQUFFO2dCQUN6Qix3REFBd0Q7Z0JBQ3hELHlFQUF5RTtnQkFDekUsaUZBQWlGO2dCQUNqRixxQ0FBcUM7Z0JBQ3JDLGlGQUFpRjtnQkFDakYsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELElBQUksQ0FBQyxDQUFDLFlBQVksWUFBWSxXQUFXLENBQUMsRUFBRTtnQkFDMUMsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELEVBQUUsR0FBRyxZQUFZLENBQUM7U0FDbkIsUUFBUSxFQUFFLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7UUFFekMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs4R0EvTVUsb0JBQW9CO2tHQUFwQixvQkFBb0IsMFpDdEZqQyxnd0JBaUJBOztTRHFFYSxvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDRSxjQUFjLGlCQUdULGlCQUFpQixDQUFDLFNBQVM7bUpBVS9CLFdBQVc7c0JBRHJCLFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFPMUIsaUJBQWlCO3NCQUQzQixTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFVakMsY0FBYztzQkFEeEIsS0FBSztnQkFlQyxNQUFNO3NCQURaLE1BQU07Z0JBT0EsS0FBSztzQkFEWCxZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTkgU3dpc3MgRmVkZXJhbCBSYWlsd2F5c1xuICpcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGVcbiAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wXG4gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC9cbiAqXG4gKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjBcbiAqL1xuXG5pbXBvcnQge0NvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtTY2lOYXRpdmVTY3JvbGxiYXJUcmFja1NpemVQcm92aWRlcn0gZnJvbSAnLi9uYXRpdmUtc2Nyb2xsYmFyLXRyYWNrLXNpemUtcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQge2NvZXJjZUVsZW1lbnR9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHZpZXdwb3J0IHdpdGggc2xvdHRlZCBjb250ZW50IChgPG5nLWNvbnRlbnQ+YCkgdXNlZCBhcyBzY3JvbGxhYmxlIGNvbnRlbnQuIEJ5IGRlZmF1bHQsIGNvbnRlbnQgaXMgYWRkZWQgdG8gYSBDU1MgZ3JpZCBsYXlvdXQuXG4gKlxuICogVGhlIHZpZXdwb3J0IGNvbXBvbmVudCBkaXNwbGF5cyBzY3JvbGxiYXJzIHdoZW4gaXRzIGNvbnRlbnQgb3ZlcmZsb3dzLiBTY3JvbGxiYXJzIGFyZSBkaXNwbGF5ZWQgb24gdG9wIG9mIHRoZSBjb250ZW50LCBub3QgbmV4dCB0byBpdC5cbiAqIFRoZSBjb21wb25lbnQgdXNlcyB0aGUgbmF0aXZlIHNjcm9sbGJhcnMgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gaWYgdGhleSBhcmUgYWxyZWFkeSBzaXR0aW5nIG9uIHRvcCwgb3IgZmFsbHMgYmFjayBhbmQgcmVuZGVycyBzY3JvbGxiYXJzIG9uIHRvcCBvdGhlcndpc2UuXG4gKiBUaGUgdmlld3BvcnQgcmVtYWlucyBuYXRpdmVseSBzY3JvbGxhYmxlIHdpdGggdGhlIG5hdGl2ZSBzY3JvbGxiYXJzIHNoaWZ0ZWQgb3V0IG9mIHRoZSB2aWV3cG9ydCdzIHZpc2libGUgYXJlYS4gQ29uc2VxdWVudGx5LCB0aGUgdmlld3BvcnQga2VlcHMgc3VwcG9ydGluZ1xuICogbmF0aXZlIHNjcm9sbGluZyBmZWF0dXJlcyBzdWNoIGFzIHRvdWNoIGdlc3R1cmVzLCBzY3JvbGwgc3BlZWQgYWNjZWxlcmF0aW9uLCBvciBzY3JvbGxpbmcgbmVhciB0aGUgdmlld3BvcnQgZWRnZXMgZHVyaW5nIGRyYWctYW5kLWRyb3Agb3BlcmF0aW9ucy5cbiAqXG4gKiBgYGBodG1sXG4gKiA8c2NpLXZpZXdwb3J0PlxuICogICB5b3VyIGNvbnRlbnRcbiAqIDwvc2NpLXZpZXdwb3J0PlxuICogYGBgXG4gKlxuICogIyMgQWRkaW5nIHRoZSB2aWV3cG9ydCB0byBhIGxheW91dFxuICpcbiAqIFR5cGljYWxseSB5b3Ugd291bGQgYWRkIHRoZSB2aWV3cG9ydCBjb21wb25lbnQgdG8gYSBmbGV4aWJsZSBsYXlvdXQsIGZpbGxpbmcgdGhlIHJlbWFpbmluZyBzcGFjZSB2ZXJ0aWNhbGx5IGFuZCBob3Jpem9udGFsbHksIHN1Y2ggYXMgYSBmbGV4Ym94IGNvbnRhaW5lclxuICogd2l0aCB0aGUgdmlld3BvcnQncyBgZmxleGAgQ1NTIHByb3BlcnR5IHNldCB0byBlaXRoZXIgYGZsZXg6IGF1dG9gIG9yIGBmbGV4OiAxIDEgMGAuXG4gKlxuICogVGhlIHZpZXdwb3J0IGlzIHNpemVkIGFjY29yZGluZyB0byBpdHMgY29udGVudCB3aWR0aCBhbmQgaGVpZ2h0LiBJdCBncm93cyB0byBhYnNvcmIgYW55IGZyZWUgc3BhY2UsIHRodXMgb3ZlcmZsb3dpbmcgaXRzIGNvbnRlbnQgb25seSB3aGVuIGVuY291bnRlcmluZ1xuICogYSBsYXlvdXQgY29uc3RyYWludC4gRGVwZW5kaW5nIG9uIHRoZSBsYXlvdXQsIGRpZmZlcmVudCBzdGVwcyBtYXkgYmUgbmVjZXNzYXJ5IHRvIHByZXZlbnQgdGhlIHZpZXdwb3J0IGZyb20gZ3Jvd2luZyB0byBpbmZpbml0eS5cbiAqXG4gKiAtIElmIHByYWN0aWNhbCwgZ2l2ZSB0aGUgdmlld3BvcnQgYSBmaXhlZCBzaXplIG9yIGEgbWF4aW11bSBzaXplLlxuICogLSBJZiB5b3UgYWRkIHRoZSB2aWV3cG9ydCB0byBhIGZsZXhib3ggbGF5b3V0LCBtYWtlIHN1cmUgdGhhdCBpdCBjYW5ub3QgZXhjZWVkIHRoZSBhdmFpbGFibGUgc3BhY2UuIEluc3RlYWQsIHRoZSB2aWV3cG9ydCBzaG91bGQgZmlsbCB0aGUgcmVtYWluaW5nIHNwYWNlLFxuICogICB2ZXJ0aWNhbGx5IGFuZCBob3Jpem9udGFsbHkuIEJlIGF3YXJlIHRoYXQsIGJ5IGRlZmF1bHQsIGEgZmxleCBpdGVtIGRvZXMgbm90IHNocmluayBiZWxvdyBpdHMgbWluaW11bSBjb250ZW50IHNpemUuIFRvIGNoYW5nZSB0aGlzLCBzZXQgdGhlIHZpZXdwb3J0J3NcbiAqICAgYGZsZXgtYmFzaXNgIHRvIGAwYCAoaW5zdGVhZCBvZiBgYXV0b2ApLCBvciB1c2UgdGhlIENTUyBzaG9ydGhhbmQgcHJvcGVydHkgYGZsZXg6IDEgMSAwYC4gVGhlIGBmbGV4LWJhc2lzYCBkZWZpbmVzIHRoZSBkZWZhdWx0IHNpemUgb2YgYSBmbGV4IGl0ZW0gYmVmb3JlXG4gKiAgIHRoZSByZW1haW5pbmcgZXh0cmEgc3BhY2UgaXMgZGlzdHJpYnV0ZWQuIElmIHRoZSB2aWV3cG9ydCBkb2VzIG5vdCBhcHBlYXIgYWZ0ZXIgc2V0dGluZyB0aGlzIHByb3BlcnR5LCBjaGVjayBpdHMgcGFyZW50IGVsZW1lbnRzJyBjb250ZW50IHNpemVzLlxuICogICBBcyBhbiBhbHRlcm5hdGl2ZSB0byBzZXR0aW5nIGBmbGV4OiAxIDEgMGAsIGNoYW5nZSB0aGUgc2V0dGluZyB0byBgZmxleDogYXV0b2AgYW5kIGhpZGUgdGhlIG92ZXJmbG93IGluIHRoZSBwYXJlbnQgZWxlbWVudCwgYXMgZm9sbG93czogYG92ZXJmbG93OiBoaWRkZW5gLlxuICogICBBbm90aGVyIGFwcHJvYWNoIHdvdWxkIGJlIHRvIHNldCB0aGUgbWluaW11bSBoZWlnaHQgb2YgYWxsIHBhcmVudHMgdG8gYDBgLCBhcyBmb2xsb3dzOiBgbWluLWhlaWdodDogMGAuXG4gKlxuICogICBGb3IgdGhlIGNvbXBsZXRlIGRvY3VtZW50YXRpb24gb24gdGhlIGZsZXggbGF5b3V0IGFuZCBpdHMgZmVhdHVyZXMsIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9mbGV4LlxuICpcbiAqXG4gKiAjIyBMYXlvdXRpbmcgdGhlIHZpZXdwb3J0J3Mgc2xvdHRlZCBjb250ZW50XG4gKlxuICogQnkgZGVmYXVsdCwgdGhlIHZpZXdwb3J0J3MgY29udGVudCBpcyBhZGRlZCB0byBhIENTUyBncmlkIGNvbnRhaW5lciB3aXRoIGEgc2luZ2xlIGNvbHVtbiwgZmlsbGluZyByZW1haW5pbmcgc3BhY2UgdmVydGljYWxseSBhbmQgaG9yaXpvbnRhbGx5LlxuICogVXNpbmcgdGhlIGA6OnBhcnQoY29udGVudClgIHBzZXVkbyBlbGVtZW50IHNlbGVjdG9yLCB5b3UgY2FuIGNvbmZpZ3VyZSB0aGUgZ3JpZCBjb250YWluZXIgb3IgYXBwbHkgYSBkaWZmZXJlbnQgbGF5b3V0LCBzdWNoIGFzIGEgZmxleCBvciBmbG93IGxheW91dC5cbiAqXG4gKiAjIyMjIEV4YW1wbGUgb2YgYWRkaW5nIHNsb3R0ZWQgY29udGVudCB0byBhIENTUyBmbGV4IGNvbnRhaW5lci5cbiAqIGBgYGNzc1xuICogc2NpLXZpZXdwb3J0OjpwYXJ0KGNvbnRlbnQpIHtcbiAqICAgZGlzcGxheTogZmxleDtcbiAqICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAqIH1cbiAqIGBgYFxuICpcbiAqICMjIyMgRXhhbXBsZSBvZiBjb25maWd1cmluZyBDU1MgZ3JpZCBjb250YWluZXIgd2l0aCB0d28gY29sdW1uc1xuICogYGBgY3NzXG4gKiBzY2ktdmlld3BvcnQ6OnBhcnQoY29udGVudCkge1xuICogICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7XG4gKiAgIGdhcDogMWVtO1xuICogfVxuICogYGBgXG4gKlxuICogIyMgU3R5bGluZyBvZiBzY3JvbGxiYXJzXG4gKlxuICogWW91IGNhbiBvdmVycmlkZSB0aGUgZm9sbG93aW5nIENTUyB2YXJpYWJsZXMgdG8gY29udHJvbCB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgc2Nyb2xsYmFyOlxuICpcbiAqIC0gc2NpLXZpZXdwb3J0LXNjcm9sbGJhci1jb2xvcjogICAgIFNldHMgdGhlIGNvbG9yIG9mIHRoZSBzY3JvbGxiYXIgKGJ5IGRlZmF1bHQsIHVzZXMgYHJnYig3OCwgNzgsIDc4KWApLlxuICpcbiAqIGBgYGNzc1xuICogc2NpLXZpZXdwb3J0IHtcbiAqICAgLS1zY2ktdmlld3BvcnQtc2Nyb2xsYmFyLWNvbG9yOiBibHVlO1xuICogfVxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NjaS12aWV3cG9ydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi92aWV3cG9ydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ZpZXdwb3J0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLlNoYWRvd0RvbSxcbn0pXG5leHBvcnQgY2xhc3MgU2NpVmlld3BvcnRDb21wb25lbnQge1xuXG4gIHByaXZhdGUgX3ZpZXdwb3J0RWxlbWVudCE6IEhUTUxEaXZFbGVtZW50O1xuICBwcml2YXRlIF92aWV3cG9ydENsaWVudCE6IEhUTUxEaXZFbGVtZW50O1xuICBwcml2YXRlIF9zY3JvbGxiYXJTdHlsZTogU2Nyb2xsYmFyU3R5bGUgPSAnb24tdG9wJztcblxuICAvKiogQGludGVybmFsICovXG4gIEBWaWV3Q2hpbGQoJ3ZpZXdwb3J0Jywge3N0YXRpYzogdHJ1ZX0pXG4gIHB1YmxpYyBzZXQgc2V0Vmlld3BvcnQodmlld3BvcnQ6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+KSB7XG4gICAgdGhpcy5fdmlld3BvcnRFbGVtZW50ID0gY29lcmNlRWxlbWVudCh2aWV3cG9ydCk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIEBWaWV3Q2hpbGQoJ3ZpZXdwb3J0X2NsaWVudCcsIHtzdGF0aWM6IHRydWV9KVxuICBwdWJsaWMgc2V0IHNldFZpZXdwb3J0Q2xpZW50KHZpZXdwb3J0Q2xpZW50OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pikge1xuICAgIHRoaXMuX3ZpZXdwb3J0Q2xpZW50ID0gY29lcmNlRWxlbWVudCh2aWV3cG9ydENsaWVudCk7XG4gIH1cblxuICAvKipcbiAgICogQ29udHJvbHMgd2hldGhlciB0byB1c2UgbmF0aXZlIHNjcm9sbGJhcnMgb3IsIHdoaWNoIGlzIGJ5IGRlZmF1bHQsIGVtdWxhdGVkIHNjcm9sbGJhcnMgdGhhdCBzaXQgb24gdG9wIG9mIHRoZSB2aWV3cG9ydCBjbGllbnQuXG4gICAqIEluIHRoZSBsYXR0ZXIsIHRoZSB2aWV3cG9ydCBjbGllbnQgcmVtYWlucyBuYXRpdmVseSBzY3JvbGxhYmxlLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzY3JvbGxiYXJTdHlsZShzY3JvbGxiYXJTdHlsZTogU2Nyb2xsYmFyU3R5bGUpIHtcbiAgICB0aGlzLl9zY3JvbGxiYXJTdHlsZSA9IHNjcm9sbGJhclN0eWxlIHx8ICdvbi10b3AnO1xuICB9XG5cbiAgcHVibGljIGdldCBzY3JvbGxiYXJTdHlsZSgpOiBTY3JvbGxiYXJTdHlsZSB7XG4gICAgcmV0dXJuIHRoaXMuX3Njcm9sbGJhclN0eWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIHVwb24gYSBzY3JvbGwgZXZlbnQuXG4gICAqXG4gICAqIFlvdSBjYW4gYWRkIFtzY2lEaW1lbnNpb25dIGRpcmVjdGl2ZSB0byB0aGUgdmlld3BvcnQgb3Igdmlld3BvcnQgY2xpZW50IHRvIGJlIG5vdGlmaWVkIGFib3V0IGxheW91dCBjaGFuZ2VzLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzY3JvbGwgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG5cbiAgY29uc3RydWN0b3IocHVibGljIGhvc3Q6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCBwdWJsaWMgbmF0aXZlU2Nyb2xsYmFyVHJhY2tTaXplUHJvdmlkZXI6IFNjaU5hdGl2ZVNjcm9sbGJhclRyYWNrU2l6ZVByb3ZpZGVyKSB7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdmb2N1cycpXG4gIHB1YmxpYyBmb2N1cygpOiB2b2lkIHsgLy8gZG8gbm90IHJlbmFtZSB0byBleHBvc2UgdGhlIHNhbWUgZm9jdXMgbWV0aG9kIGxpa2UgYEhUTUxFbGVtZW50LmZvY3VzKClgLlxuICAgIHRoaXMuX3ZpZXdwb3J0RWxlbWVudD8uZm9jdXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBvblNjcm9sbChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNjcm9sbC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGl4ZWxzIHRoYXQgdGhlIHZpZXdwb3J0IGNsaWVudCBpcyBzY3JvbGxlZCB2ZXJ0aWNhbGx5LlxuICAgKlxuICAgKiBAc2VlIEVsZW1lbnQuc2Nyb2xsVG9wXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNjcm9sbFRvcCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl92aWV3cG9ydEVsZW1lbnQuc2Nyb2xsVG9wO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIG51bWJlciBvZiBwaXhlbHMgdGhhdCB0aGUgdmlld3BvcnQgY2xpZW50IGlzIHNjcm9sbGVkIHZlcnRpY2FsbHkuXG4gICAqXG4gICAqIEBzZWUgRWxlbWVudC5zY3JvbGxUb3BcbiAgICovXG4gIHB1YmxpYyBzZXQgc2Nyb2xsVG9wKHNjcm9sbFRvcDogbnVtYmVyKSB7XG4gICAgdGhpcy5fdmlld3BvcnRFbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGl4ZWxzIHRoYXQgdGhlIHZpZXdwb3J0IGNsaWVudCBpcyBzY3JvbGxlZCBob3Jpem9udGFsbHkuXG4gICAqXG4gICAqIEBzZWUgRWxlbWVudC5zY3JvbGxMZWZ0XG4gICAqL1xuICBwdWJsaWMgZ2V0IHNjcm9sbExlZnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdmlld3BvcnRFbGVtZW50LnNjcm9sbExlZnQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBpeGVscyB0aGF0IHRoZSB2aWV3cG9ydCBjbGllbnQgaXMgc2Nyb2xsZWQgaG9yaXpvbnRhbGx5LlxuICAgKlxuICAgKiBAc2VlIEVsZW1lbnQuc2Nyb2xsTGVmdFxuICAgKi9cbiAgcHVibGljIHNldCBzY3JvbGxMZWZ0KHNjcm9sbExlZnQ6IG51bWJlcikge1xuICAgIHRoaXMuX3ZpZXdwb3J0RWxlbWVudC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlIHZpZXdwb3J0IGNsaWVudC5cbiAgICpcbiAgICogQHNlZSBFbGVtZW50LnNjcm9sbEhlaWdodFxuICAgKi9cbiAgcHVibGljIGdldCBzY3JvbGxIZWlnaHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdmlld3BvcnRFbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB3aWR0aCBvZiB0aGUgdmlld3BvcnQgY2xpZW50LlxuICAgKlxuICAgKiBAc2VlIEVsZW1lbnQuc2Nyb2xsV2lkdGhcbiAgICovXG4gIHB1YmxpYyBnZXQgc2Nyb2xsV2lkdGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdmlld3BvcnRFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZpZXdwb3J0IHtIVE1MRWxlbWVudH0uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZpZXdwb3J0RWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZXdwb3J0RWxlbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB2aWV3cG9ydCBjbGllbnQge0hUTUxFbGVtZW50fS5cbiAgICovXG4gIHB1YmxpYyBnZXQgdmlld3BvcnRDbGllbnRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fdmlld3BvcnRDbGllbnQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBpcyBzY3JvbGxlZCBpbnRvIHRoZSB2aWV3cG9ydC5cbiAgICpcbiAgICogQHBhcmFtIGVsZW1lbnQgLSB0aGUgZWxlbWVudCB0byBiZSBjaGVja2VkXG4gICAqIEBwYXJhbSBmaXQgLSBjb250cm9sIGlmIHRoZSBlbGVtZW50IG11c3QgZnVsbHkgb3IgcGFydGlhbGx5IGZpdCBpbnRvIHRoZSB2aWV3cG9ydFxuICAgKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgZWxlbWVudCBpcyBzY3JvbGxlZCBpbnRvIHRoZSB2aWV3cG9ydCwgb3IgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICBwdWJsaWMgaXNFbGVtZW50SW5WaWV3KGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgSFRNTEVsZW1lbnQsIGZpdDogJ2Z1bGwnIHwgJ3BhcnRpYWwnKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZWxUb3AgPSB0aGlzLmNvbXB1dGVPZmZzZXQoZWxlbWVudCwgJ3RvcCcpO1xuICAgIGlmIChlbFRvcCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBlbExlZnQgPSB0aGlzLmNvbXB1dGVPZmZzZXQoZWxlbWVudCwgJ2xlZnQnKTtcbiAgICBpZiAoZWxMZWZ0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQ29uc2lkZXIgZWxlbWVudHMgYXMgc2Nyb2xsZWQgaW50byB2aWV3IHdoZW4gdGhlcmUgaXMgbm8gdmlld3BvcnQgb3ZlcmZsb3cuXG4gICAgLy8gVGhlIGNhbGN1bGF0aW9uIG9mIHdoZXRoZXIgYW4gZWxlbWVudCBpcyBzY3JvbGxlZCBpbnRvIHZpZXcgbWF5IGJlIHdyb25nIGJ5IGEgZmV3IHBpeGVscyBpZiB0aGUgdmlld3BvcnQgY29udGFpbnMgZWxlbWVudHMgd2l0aCBkZWNpbWFsIHNpemVzLlxuICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBiZWNhdXNlIGBvZmZzZXRMZWZ0YCBhbmQgYG9mZnNldFRvcGAgb3BlcmF0ZSBvbiBhbiBpbnRlZ2VyIChub3QgYSBkZWNpbWFsKSwgbG9zaW5nIHByZWNpc2lvbiB0aGF0IGNhbiBhY2N1bXVsYXRlLlxuICAgIC8vIFRvIGF2b2lkIGluY29ycmVjdCBjYWxjdWxhdGlvbiB3aGVuIHRoZXJlIGlzIG5vIHZpZXdwb3J0IG92ZXJmbG93LCB3ZSBjb25zaWRlciBhbGwgY29udGFpbmVkIGVsZW1lbnRzIGFzIHNjcm9sbGVkIGludG8gdGhlIHZpZXcuXG4gICAgaWYgKHRoaXMuX3ZpZXdwb3J0RWxlbWVudC5zY3JvbGxXaWR0aCA8PSB0aGlzLl92aWV3cG9ydEVsZW1lbnQuY2xpZW50V2lkdGggJiYgdGhpcy5fdmlld3BvcnRFbGVtZW50LnNjcm9sbEhlaWdodCA8PSB0aGlzLl92aWV3cG9ydEVsZW1lbnQuY2xpZW50SGVpZ2h0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBlbEJvdHRvbSA9IGVsVG9wICsgY29lcmNlRWxlbWVudChlbGVtZW50KS5vZmZzZXRIZWlnaHQ7XG4gICAgY29uc3QgZWxSaWdodCA9IGVsTGVmdCArIGNvZXJjZUVsZW1lbnQoZWxlbWVudCkub2Zmc2V0V2lkdGg7XG5cbiAgICBjb25zdCB2cFRvcCA9IHRoaXMuX3ZpZXdwb3J0RWxlbWVudC5zY3JvbGxUb3A7XG4gICAgY29uc3QgdnBMZWZ0ID0gdGhpcy5fdmlld3BvcnRFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgY29uc3QgdnBCb3R0b20gPSB2cFRvcCArIHRoaXMuX3ZpZXdwb3J0RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgY29uc3QgdnBSaWdodCA9IHZwTGVmdCArIHRoaXMuX3ZpZXdwb3J0RWxlbWVudC5jbGllbnRXaWR0aDtcblxuICAgIGlmIChmaXQgPT09ICdmdWxsJykge1xuICAgICAgcmV0dXJuIChlbFRvcCA+PSB2cFRvcCAmJiBlbEJvdHRvbSA8PSB2cEJvdHRvbSkgJiYgKGVsTGVmdCA+PSB2cExlZnQgJiYgZWxSaWdodCA8PSB2cFJpZ2h0KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gKGVsQm90dG9tID49IHZwVG9wICYmIGVsVG9wIDw9IHZwQm90dG9tKSAmJiAoZWxSaWdodCA+PSB2cExlZnQgJiYgZWxMZWZ0IDw9IHZwUmlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGxzIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBpbnRvIHRoZSB2aWV3cG9ydC5cbiAgICpcbiAgICogQHBhcmFtIGVsZW1lbnQgLSB0aGUgZWxlbWVudCB0byBzY3JvbGwgaW50byB0aGUgdmlld3BvcnRcbiAgICogQHBhcmFtIG9mZnNldCAtIHRoZSBnYXAgYmV0d2VlbiB0aGUgZWxlbWVudCBhbmQgdGhlIHZpZXdwb3J0XG4gICAqL1xuICBwdWJsaWMgc2Nyb2xsSW50b1ZpZXcoZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBIVE1MRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIgPSA1MCk6IHZvaWQge1xuICAgIGNvbnN0IHRvcCA9IHRoaXMuY29tcHV0ZU9mZnNldChlbGVtZW50LCAndG9wJyk7XG4gICAgaWYgKHRvcCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBsZWZ0ID0gdGhpcy5jb21wdXRlT2Zmc2V0KGVsZW1lbnQsICdsZWZ0Jyk7XG4gICAgaWYgKGxlZnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl92aWV3cG9ydEVsZW1lbnQuc2Nyb2xsVG9wID0gdG9wIC0gb2Zmc2V0O1xuICAgIHRoaXMuX3ZpZXdwb3J0RWxlbWVudC5zY3JvbGxMZWZ0ID0gbGVmdCAtIG9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlcyB0aGUgZGlzdGFuY2Ugb2YgdGhlIGVsZW1lbnQgdG8gdGhlIHZpZXdwb3J0J3MgbGVmdCBvciB0b3AgYm9yZGVyLlxuICAgKlxuICAgKiBAcmV0dXJuIGRpc3RhbmNlIG9mIHRoZSBlbGVtZW50IHRvIHRoZSB2aWV3cG9ydCdzIGxlZnQgb3IgdG9wIGJvcmRlciwgb3IgYG51bGxgIGlmIG5vdCBjb250YWluZWRcbiAgICogICAgICAgICBpbiB0aGUgdmlld3BvcnQgb3IgdGhlIGVsZW1lbnQgb3IgYW55IGFuY2VzdG9yIGhhcyB0aGUgYGRpc3BsYXlgIHByb3BlcnR5IHNldCB0byBgbm9uZWAuXG4gICAqL1xuICBwdWJsaWMgY29tcHV0ZU9mZnNldChlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IEhUTUxFbGVtZW50LCBib3JkZXI6ICdsZWZ0JyB8ICd0b3AnKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgbGV0IGVsID0gY29lcmNlRWxlbWVudChlbGVtZW50KTtcbiAgICBkbyB7XG4gICAgICBvZmZzZXQgKz0gKGJvcmRlciA9PT0gJ2xlZnQnID8gZWwub2Zmc2V0TGVmdCA6IGVsLm9mZnNldFRvcCk7XG4gICAgICBjb25zdCBvZmZzZXRQYXJlbnQgPSBlbC5vZmZzZXRQYXJlbnQ7XG4gICAgICBpZiAob2Zmc2V0UGFyZW50ID09PSBudWxsKSB7XG4gICAgICAgIC8vIGBvZmZzZXRQYXJlbnRgIGlzIGBudWxsYCBpbiB0aGUgZm9sbG93aW5nIHNpdHVhdGlvbnM6XG4gICAgICAgIC8vIC0gVGhlIGVsZW1lbnQgb3IgYW55IGFuY2VzdG9yIGhhcyB0aGUgYGRpc3BsYXlgIHByb3BlcnR5IHNldCB0byBgbm9uZWBcbiAgICAgICAgLy8gLSBUaGUgZWxlbWVudCBoYXMgdGhlIHBvc2l0aW9uIHByb3BlcnR5IHNldCB0byBmaXhlZCAoRmlyZWZveCByZXR1cm5zIDxib2R5PikuXG4gICAgICAgIC8vIC0gVGhlIGVsZW1lbnQgaXMgPGJvZHk+IG9yIDxodG1sPi5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9vZmZzZXRQYXJlbnQuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKCEob2Zmc2V0UGFyZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgZWwgPSBvZmZzZXRQYXJlbnQ7XG4gICAgfSB3aGlsZSAoZWwgIT09IHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50KTtcblxuICAgIHJldHVybiBvZmZzZXQ7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2Nyb2xsYmFyIHN0eWxlLlxuICovXG5leHBvcnQgdHlwZSBTY3JvbGxiYXJTdHlsZSA9ICduYXRpdmUnIHwgJ29uLXRvcCcgfCAnaGlkZGVuJztcbiIsIjwhLS0gdmlld3BvcnQgYW5kIHZpZXdwb3J0IGNsaWVudCAtLT5cbjxkaXYgI3ZpZXdwb3J0XG4gICAgIGNsYXNzPVwidmlld3BvcnRcIlxuICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgc2NpU2Nyb2xsYWJsZSBbc2NpU2Nyb2xsYWJsZURpc3BsYXlOYXRpdmVTY3JvbGxiYXJdPVwic2Nyb2xsYmFyU3R5bGUgPT09ICduYXRpdmUnXCJcbiAgICAgY2RrU2Nyb2xsYWJsZVxuICAgICAoc2Nyb2xsKT1cIm9uU2Nyb2xsKCRldmVudClcIj5cbiAgPGRpdiAjdmlld3BvcnRfY2xpZW50IGNsYXNzPVwidmlld3BvcnQtY2xpZW50XCIgcGFydD1cImNvbnRlbnRcIj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gcmVuZGVyIGVtdWxhdGVkIHNjcm9sbGJhcnMgd2hpY2ggc2l0IG9uLXRvcCAtLT5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJzY3JvbGxiYXJTdHlsZSA9PT0gJ29uLXRvcCcgJiYgKG5hdGl2ZVNjcm9sbGJhclRyYWNrU2l6ZVByb3ZpZGVyLnRyYWNrU2l6ZSQgfCBhc3luYykgIT09IG51bGxcIj5cbiAgPHNjaS1zY3JvbGxiYXIgW2RpcmVjdGlvbl09XCIndnNjcm9sbCdcIiBbdmlld3BvcnRdPVwidmlld3BvcnRcIiBjbGFzcz1cImUyZS12ZXJ0aWNhbFwiPjwvc2NpLXNjcm9sbGJhcj5cbiAgPHNjaS1zY3JvbGxiYXIgW2RpcmVjdGlvbl09XCInaHNjcm9sbCdcIiBbdmlld3BvcnRdPVwidmlld3BvcnRcIiBjbGFzcz1cImUyZS1ob3Jpem9udGFsXCI+PC9zY2ktc2Nyb2xsYmFyPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -0,0 +1,51 @@
1
+ /*
2
+ * Copyright (c) 2018-2019 Swiss Federal Railways
3
+ *
4
+ * This program and the accompanying materials are made
5
+ * available under the terms of the Eclipse Public License 2.0
6
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
7
+ *
8
+ * SPDX-License-Identifier: EPL-2.0
9
+ */
10
+ import { NgModule } from '@angular/core';
11
+ import { CommonModule } from '@angular/common';
12
+ import { SciViewportComponent } from './viewport.component';
13
+ import { SciScrollbarComponent } from './scrollbar/scrollbar.component';
14
+ import { SciScrollableDirective } from './scrollable.directive';
15
+ import { ScrollingModule } from '@angular/cdk/scrolling';
16
+ import * as i0 from "@angular/core";
17
+ /**
18
+ * Provides a viewport component with scrollbars that sit on top of the viewport client.
19
+ */
20
+ class SciViewportModule {
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: SciViewportModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
22
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.1", ngImport: i0, type: SciViewportModule, declarations: [SciViewportComponent,
23
+ SciScrollbarComponent,
24
+ SciScrollableDirective], imports: [CommonModule,
25
+ ScrollingModule], exports: [SciViewportComponent,
26
+ SciScrollbarComponent,
27
+ SciScrollableDirective] }); }
28
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: SciViewportModule, imports: [CommonModule,
29
+ ScrollingModule] }); }
30
+ }
31
+ export { SciViewportModule };
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: SciViewportModule, decorators: [{
33
+ type: NgModule,
34
+ args: [{
35
+ imports: [
36
+ CommonModule,
37
+ ScrollingModule,
38
+ ],
39
+ declarations: [
40
+ SciViewportComponent,
41
+ SciScrollbarComponent,
42
+ SciScrollableDirective,
43
+ ],
44
+ exports: [
45
+ SciViewportComponent,
46
+ SciScrollbarComponent,
47
+ SciScrollableDirective,
48
+ ],
49
+ }]
50
+ }] });
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vY29tcG9uZW50cy92aWV3cG9ydC9zcmMvdmlld3BvcnQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDdEUsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDOUQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHdCQUF3QixDQUFDOztBQUV2RDs7R0FFRztBQUNILE1BZ0JhLGlCQUFpQjs4R0FBakIsaUJBQWlCOytHQUFqQixpQkFBaUIsaUJBVjFCLG9CQUFvQjtZQUNwQixxQkFBcUI7WUFDckIsc0JBQXNCLGFBTnRCLFlBQVk7WUFDWixlQUFlLGFBUWYsb0JBQW9CO1lBQ3BCLHFCQUFxQjtZQUNyQixzQkFBc0I7K0dBR2IsaUJBQWlCLFlBZDFCLFlBQVk7WUFDWixlQUFlOztTQWFOLGlCQUFpQjsyRkFBakIsaUJBQWlCO2tCQWhCN0IsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixlQUFlO3FCQUNoQjtvQkFDRCxZQUFZLEVBQUU7d0JBQ1osb0JBQW9CO3dCQUNwQixxQkFBcUI7d0JBQ3JCLHNCQUFzQjtxQkFDdkI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLG9CQUFvQjt3QkFDcEIscUJBQXFCO3dCQUNyQixzQkFBc0I7cUJBQ3ZCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5IFN3aXNzIEZlZGVyYWwgUmFpbHdheXNcbiAqXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlXG4gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMFxuICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvXG4gKlxuICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7U2NpVmlld3BvcnRDb21wb25lbnR9IGZyb20gJy4vdmlld3BvcnQuY29tcG9uZW50JztcbmltcG9ydCB7U2NpU2Nyb2xsYmFyQ29tcG9uZW50fSBmcm9tICcuL3Njcm9sbGJhci9zY3JvbGxiYXIuY29tcG9uZW50JztcbmltcG9ydCB7U2NpU2Nyb2xsYWJsZURpcmVjdGl2ZX0gZnJvbSAnLi9zY3JvbGxhYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1Njcm9sbGluZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5cbi8qKlxuICogUHJvdmlkZXMgYSB2aWV3cG9ydCBjb21wb25lbnQgd2l0aCBzY3JvbGxiYXJzIHRoYXQgc2l0IG9uIHRvcCBvZiB0aGUgdmlld3BvcnQgY2xpZW50LlxuICovXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFNjcm9sbGluZ01vZHVsZSxcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgU2NpVmlld3BvcnRDb21wb25lbnQsXG4gICAgU2NpU2Nyb2xsYmFyQ29tcG9uZW50LFxuICAgIFNjaVNjcm9sbGFibGVEaXJlY3RpdmUsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBTY2lWaWV3cG9ydENvbXBvbmVudCxcbiAgICBTY2lTY3JvbGxiYXJDb21wb25lbnQsXG4gICAgU2NpU2Nyb2xsYWJsZURpcmVjdGl2ZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2NpVmlld3BvcnRNb2R1bGUge1xufVxuIl19
@@ -67,10 +67,10 @@ class SciDimensionDirective {
67
67
  ngOnDestroy() {
68
68
  this._destroy$.next();
69
69
  }
70
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: SciDimensionDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive }); }
71
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.1", type: SciDimensionDirective, selector: "[sciDimension]", inputs: { emitOutsideAngular: "emitOutsideAngular" }, outputs: { dimensionChange: "sciDimensionChange" }, exportAs: ["sciDimension"], ngImport: i0 }); }
70
72
  }
71
- SciDimensionDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciDimensionDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
72
- SciDimensionDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: SciDimensionDirective, selector: "[sciDimension]", inputs: { emitOutsideAngular: "emitOutsideAngular" }, outputs: { dimensionChange: "sciDimensionChange" }, exportAs: ["sciDimension"], ngImport: i0 });
73
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciDimensionDirective, decorators: [{
73
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: SciDimensionDirective, decorators: [{
74
74
  type: Directive,
75
75
  args: [{
76
76
  selector: '[sciDimension]',
@@ -98,11 +98,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
98
98
  * @see fromDimension$
99
99
  */
100
100
  class SciDimensionModule {
101
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: SciDimensionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
102
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.1", ngImport: i0, type: SciDimensionModule, declarations: [SciDimensionDirective], imports: [CommonModule], exports: [SciDimensionDirective] }); }
103
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: SciDimensionModule, imports: [CommonModule] }); }
101
104
  }
102
- SciDimensionModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciDimensionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
103
- SciDimensionModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: SciDimensionModule, declarations: [SciDimensionDirective], imports: [CommonModule], exports: [SciDimensionDirective] });
104
- SciDimensionModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciDimensionModule, imports: [CommonModule] });
105
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciDimensionModule, decorators: [{
105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: SciDimensionModule, decorators: [{
106
106
  type: NgModule,
107
107
  args: [{
108
108
  imports: [
@@ -126,6 +126,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
126
126
  *
127
127
  * SPDX-License-Identifier: EPL-2.0
128
128
  */
129
+ /*
130
+ * Secondary entrypoint: '@scion/components/dimension'
131
+ *
132
+ * @see https://github.com/ng-packagr/ng-packagr/blob/master/docs/secondary-entrypoints.md
133
+ */
129
134
 
130
135
  /**
131
136
  * Generated bundle index. Do not edit.
@@ -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})\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 {CommonModule} from '@angular/common';\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 CommonModule,\n ],\n declarations: [\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/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})\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 {CommonModule} from '@angular/common';\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 CommonModule,\n ],\n declarations: [\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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"}