@scion/components 14.0.1 → 14.0.2

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.
@@ -95,7 +95,7 @@ export class SciViewportComponent {
95
95
  }
96
96
  /** @internal */
97
97
  set setViewport(viewport) {
98
- this._viewport = coerceElement(viewport);
98
+ this._viewportElement = coerceElement(viewport);
99
99
  }
100
100
  /** @internal */
101
101
  set setViewportClient(viewportClient) {
@@ -112,7 +112,7 @@ export class SciViewportComponent {
112
112
  return this._scrollbarStyle;
113
113
  }
114
114
  focus() {
115
- this._viewport && this._viewport.focus();
115
+ this._viewportElement?.focus();
116
116
  }
117
117
  onScroll(event) {
118
118
  this.scroll.emit(event);
@@ -123,7 +123,7 @@ export class SciViewportComponent {
123
123
  * @see Element.scrollTop
124
124
  */
125
125
  get scrollTop() {
126
- return this._viewport.scrollTop;
126
+ return this._viewportElement.scrollTop;
127
127
  }
128
128
  /**
129
129
  * Sets the number of pixels that the viewport client is scrolled vertically.
@@ -131,7 +131,7 @@ export class SciViewportComponent {
131
131
  * @see Element.scrollTop
132
132
  */
133
133
  set scrollTop(scrollTop) {
134
- this._viewport.scrollTop = scrollTop;
134
+ this._viewportElement.scrollTop = scrollTop;
135
135
  }
136
136
  /**
137
137
  * Returns the number of pixels that the viewport client is scrolled horizontally.
@@ -139,7 +139,7 @@ export class SciViewportComponent {
139
139
  * @see Element.scrollLeft
140
140
  */
141
141
  get scrollLeft() {
142
- return this._viewport.scrollLeft;
142
+ return this._viewportElement.scrollLeft;
143
143
  }
144
144
  /**
145
145
  * Sets the number of pixels that the viewport client is scrolled horizontally.
@@ -147,7 +147,7 @@ export class SciViewportComponent {
147
147
  * @see Element.scrollLeft
148
148
  */
149
149
  set scrollLeft(scrollLeft) {
150
- this._viewport.scrollLeft = scrollLeft;
150
+ this._viewportElement.scrollLeft = scrollLeft;
151
151
  }
152
152
  /**
153
153
  * Returns the height of the viewport client.
@@ -155,7 +155,7 @@ export class SciViewportComponent {
155
155
  * @see Element.scrollHeight
156
156
  */
157
157
  get scrollHeight() {
158
- return this._viewport.scrollHeight;
158
+ return this._viewportElement.scrollHeight;
159
159
  }
160
160
  /**
161
161
  * Returns the width of the viewport client.
@@ -163,13 +163,13 @@ export class SciViewportComponent {
163
163
  * @see Element.scrollWidth
164
164
  */
165
165
  get scrollWidth() {
166
- return this._viewport.scrollWidth;
166
+ return this._viewportElement.scrollWidth;
167
167
  }
168
168
  /**
169
169
  * Returns the viewport {HTMLElement}.
170
170
  */
171
171
  get viewportElement() {
172
- return this._viewport;
172
+ return this._viewportElement;
173
173
  }
174
174
  /**
175
175
  * Returns the viewport client {HTMLElement}.
@@ -182,16 +182,18 @@ export class SciViewportComponent {
182
182
  *
183
183
  * @param element - the element to be checked
184
184
  * @param fit - control if the element must fully or partially fit into the viewport
185
+ *
186
+ * @throws if the element is not contained in the viewport's slotted content.
185
187
  */
186
188
  isElementInView(element, fit) {
187
189
  const elLeft = this.computeOffset(element, 'left');
188
- const elRight = elLeft + element.offsetWidth;
190
+ const elRight = elLeft + coerceElement(element).offsetWidth;
189
191
  const elTop = this.computeOffset(element, 'top');
190
- const elBottom = elTop + element.offsetHeight;
191
- const vpLeft = this._viewport.scrollLeft;
192
- const vpRight = vpLeft + this._viewport.clientWidth;
193
- const vpTop = this._viewport.scrollTop;
194
- const vpBottom = vpTop + this._viewport.clientHeight;
192
+ const elBottom = elTop + coerceElement(element).offsetHeight;
193
+ const vpLeft = this._viewportElement.scrollLeft;
194
+ const vpRight = vpLeft + this._viewportElement.clientWidth;
195
+ const vpTop = this._viewportElement.scrollTop;
196
+ const vpBottom = vpTop + this._viewportElement.clientHeight;
195
197
  switch (fit) {
196
198
  case 'full':
197
199
  return (elLeft >= vpLeft && elRight <= vpRight) && (elTop >= vpTop && elBottom <= vpBottom);
@@ -206,24 +208,28 @@ export class SciViewportComponent {
206
208
  *
207
209
  * @param element - the element to scroll into the viewport
208
210
  * @param offset - the gap between the element and the viewport
211
+ *
212
+ * @throws if the element is not contained in the viewport's slotted content.
209
213
  */
210
214
  scrollIntoView(element, offset = 50) {
211
- this._viewport.scrollTop = this.computeOffset(element, 'top') - offset;
212
- this._viewport.scrollLeft = this.computeOffset(element, 'left') - offset;
215
+ this._viewportElement.scrollTop = this.computeOffset(element, 'top') - offset;
216
+ this._viewportElement.scrollLeft = this.computeOffset(element, 'left') - offset;
213
217
  }
214
218
  /**
215
219
  * Computes the distance of the element to the viewport's left or top border.
220
+ *
221
+ * @throws if the element is not contained in the viewport's slotted content.
216
222
  */
217
223
  computeOffset(element, border) {
218
- if (!isChildOf(element, this._viewport)) {
219
- throw Error('element not a child of the viewport');
220
- }
221
224
  let offset = 0;
222
- let el = element;
225
+ let el = coerceElement(element);
223
226
  do {
224
227
  offset += (border === 'left' ? el.offsetLeft : el.offsetTop);
225
228
  el = el.offsetParent;
226
- } while (el !== null && el !== this._viewport);
229
+ if (el === null) {
230
+ throw Error(`[ElementNotContainedError] Element not contained in the viewport's slotted content`);
231
+ }
232
+ } while (el !== this.host.nativeElement);
227
233
  return offset;
228
234
  }
229
235
  }
@@ -246,16 +252,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImpor
246
252
  type: HostListener,
247
253
  args: ['focus']
248
254
  }] } });
249
- /**
250
- * Returns 'true' if the given element is a child element of the parent element.
251
- */
252
- function isChildOf(element, parent) {
253
- while (element.parentElement !== null) {
254
- element = element.parentElement;
255
- if (element === parent) {
256
- return true;
257
- }
258
- }
259
- return false;
260
- }
261
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vY29tcG9uZW50cy92aWV3cG9ydC9zcmMvdmlld3BvcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vY29tcG9uZW50cy92aWV3cG9ydC9zcmMvdmlld3BvcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFjLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFN0gsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7O0FBRXBEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlFRztBQU9ILE1BQU0sT0FBTyxvQkFBb0I7SUF1Qy9CLFlBQW1CLElBQTZCLEVBQVMsZ0NBQXFFO1FBQTNHLFNBQUksR0FBSixJQUFJLENBQXlCO1FBQVMscUNBQWdDLEdBQWhDLGdDQUFnQyxDQUFxQztRQW5DdEgsb0JBQWUsR0FBbUIsUUFBUSxDQUFDO1FBMkJuRDs7OztXQUlHO1FBRUksV0FBTSxHQUFHLElBQUksWUFBWSxFQUFTLENBQUMsQ0FBQyx1REFBdUQ7SUFHbEcsQ0FBQztJQWxDRCxnQkFBZ0I7SUFDaEIsSUFDVyxXQUFXLENBQUMsUUFBb0M7UUFDekQsSUFBSSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGdCQUFnQjtJQUNoQixJQUNXLGlCQUFpQixDQUFDLGNBQTBDO1FBQ3JFLElBQUksQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQyxD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c0JBRDNCLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQVVqQyxjQUFjO3NCQUR4QixLQUFLO2dCQWVDLE1BQU07c0JBRFosTUFBTTtnQkFPQSxLQUFLO3NCQURYLFlBQVk7dUJBQUMsT0FBTzs7QUFzSXZCOztHQUVHO0FBQ0gsU0FBUyxTQUFTLENBQUMsT0FBZ0IsRUFBRSxNQUFlO0lBQ2xELE9BQU8sT0FBTyxDQUFDLGFBQWEsS0FBSyxJQUFJLEVBQUU7UUFDckMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDaEMsSUFBSSxPQUFPLEtBQUssTUFBTSxFQUFFO1lBQ3RCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7S0FDRjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1NjaU5hdGl2ZVNjcm9sbGJhclRyYWNrU2l6ZVByb3ZpZGVyfSBmcm9tICcuL25hdGl2ZS1zY3JvbGxiYXItdHJhY2stc2l6ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7Y29lcmNlRWxlbWVudH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgdmlld3BvcnQgd2l0aCBzbG90dGVkIGNvbnRlbnQgKGA8bmctY29udGVudD5gKSB1c2VkIGFzIHNjcm9sbGFibGUgY29udGVudC4gQnkgZGVmYXVsdCwgY29udGVudCBpcyBhZGRlZCB0byBhIENTUyBncmlkIGxheW91dC5cbiAqXG4gKiBUaGUgdmlld3BvcnQgY29tcG9uZW50IGRpc3BsYXlzIHNjcm9sbGJhcnMgd2hlbiBpdHMgY29udGVudCBvdmVyZmxvd3MuIFNjcm9sbGJhcnMgYXJlIGRpc3BsYXllZCBvbiB0b3Agb2YgdGhlIGNvbnRlbnQsIG5vdCBuZXh0IHRvIGl0LlxuICogVGhlIGNvbXBvbmVudCB1c2VzIHRoZSBuYXRpdmUgc2Nyb2xsYmFycyBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpZiB0aGV5IGFyZSBhbHJlYWR5IHNpdHRpbmcgb24gdG9wLCBvciBmYWxscyBiYWNrIGFuZCByZW5kZXJzIHNjcm9sbGJhcnMgb24gdG9wIG90aGVyd2lzZS5cbiAqIFRoZSB2aWV3cG9ydCByZW1haW5zIG5hdGl2ZWx5IHNjcm9sbGFibGUgd2l0aCB0aGUgbmF0aXZlIHNjcm9sbGJhcnMgc2hpZnRlZCBvdXQgb2YgdGhlIHZpZXdwb3J0J3MgdmlzaWJsZSBhcmVhLiBDb25zZXF1ZW50bHksIHRoZSB2aWV3cG9ydCBrZWVwcyBzdXBwb3J0aW5nXG4gKiBuYXRpdmUgc2Nyb2xsaW5nIGZlYXR1cmVzIHN1Y2ggYXMgdG91Y2ggZ2VzdHVyZXMsIHNjcm9sbCBzcGVlZCBhY2NlbGVyYXRpb24sIG9yIHNjcm9sbGluZyBuZWFyIHRoZSB2aWV3cG9ydCBlZGdlcyBkdXJpbmcgZHJhZy1hbmQtZHJvcCBvcGVyYXRpb25zLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxzY2ktdmlld3BvcnQ+XG4gKiAgIHlvdXIgY29udGVudFxuICogPC9zY2ktdmlld3BvcnQ+XG4gKiBgYGBcbiAqXG4gKiAjIyBBZGRpbmcgdGhlIHZpZXdwb3J0IHRvIGEgbGF5b3V0XG4gKlxuICogVHlwaWNhbGx5IHlvdSB3b3VsZCBhZGQgdGhlIHZpZXdwb3J0IGNvbXBvbmVudCB0byBhIGZsZXhpYmxlIGxheW91dCwgZmlsbGluZyB0aGUgcmVtYWluaW5nIHNwYWNlIHZlcnRpY2FsbHkgYW5kIGhvcml6b250YWxseSwgc3VjaCBhcyBhIGZsZXhib3ggY29udGFpbmVyXG4gKiB3aXRoIHRoZSB2aWV3cG9ydCdzIGBmbGV4YCBDU1MgcHJvcGVydHkgc2V0IHRvIGVpdGhlciBgZmxleDogYXV0b2Agb3IgYGZsZXg6IDEgMSAwYC5cbiAqXG4gKiBUaGUgdmlld3BvcnQgaXMgc2l6ZWQgYWNjb3JkaW5nIHRvIGl0cyBjb250ZW50IHdpZHRoIGFuZCBoZWlnaHQuIEl0IGdyb3dzIHRvIGFic29yYiBhbnkgZnJlZSBzcGFjZSwgdGh1cyBvdmVyZmxvd2luZyBpdHMgY29udGVudCBvbmx5IHdoZW4gZW5jb3VudGVyaW5nXG4gKiBhIGxheW91dCBjb25zdHJhaW50LiBEZXBlbmRpbmcgb24gdGhlIGxheW91dCwgZGlmZmVyZW50IHN0ZXBzIG1heSBiZSBuZWNlc3NhcnkgdG8gcHJldmVudCB0aGUgdmlld3BvcnQgZnJvbSBncm93aW5nIHRvIGluZmluaXR5LlxuICpcbiAqIC0gSWYgcHJhY3RpY2FsLCBnaXZlIHRoZSB2aWV3cG9ydCBhIGZpeGVkIHNpemUgb3IgYSBtYXhpbXVtIHNpemUuXG4gKiAtIElmIHlvdSBhZGQgdGhlIHZpZXdwb3J0IHRvIGEgZmxleGJveCBsYXlvdXQsIG1ha2Ugc3VyZSB0aGF0IGl0IGNhbm5vdCBleGNlZWQgdGhlIGF2YWlsYWJsZSBzcGFjZS4gSW5zdGVhZCwgdGhlIHZpZXdwb3J0IHNob3VsZCBmaWxsIHRoZSByZW1haW5pbmcgc3BhY2UsXG4gKiAgIHZlcnRpY2FsbHkgYW5kIGhvcml6b250YWxseS4gQmUgYXdhcmUgdGhhdCwgYnkgZGVmYXVsdCwgYSBmbGV4IGl0ZW0gZG9lcyBub3Qgc2hyaW5rIGJlbG93IGl0cyBtaW5pbXVtIGNvbnRlbnQgc2l6ZS4gVG8gY2hhbmdlIHRoaXMsIHNldCB0aGUgdmlld3BvcnQnc1xuICogICBgZmxleC1iYXNpc2AgdG8gYDBgIChpbnN0ZWFkIG9mIGBhdXRvYCksIG9yIHVzZSB0aGUgQ1NTIHNob3J0aGFuZCBwcm9wZXJ0eSBgZmxleDogMSAxIDBgLiBUaGUgYGZsZXgtYmFzaXNgIGRlZmluZXMgdGhlIGRlZmF1bHQgc2l6ZSBvZiBhIGZsZXggaXRlbSBiZWZvcmVcbiAqICAgdGhlIHJlbWFpbmluZyBleHRyYSBzcGFjZSBpcyBkaXN0cmlidXRlZC4gSWYgdGhlIHZpZXdwb3J0IGRvZXMgbm90IGFwcGVhciBhZnRlciBzZXR0aW5nIHRoaXMgcHJvcGVydHksIGNoZWNrIGl0cyBwYXJlbnQgZWxlbWVudHMnIGNvbnRlbnQgc2l6ZXMuXG4gKiAgIEFzIGFuIGFsdGVybmF0aXZlIHRvIHNldHRpbmcgYGZsZXg6IDEgMSAwYCwgY2hhbmdlIHRoZSBzZXR0aW5nIHRvIGBmbGV4OiBhdXRvYCBhbmQgaGlkZSB0aGUgb3ZlcmZsb3cgaW4gdGhlIHBhcmVudCBlbGVtZW50LCBhcyBmb2xsb3dzOiBgb3ZlcmZsb3c6IGhpZGRlbmAuXG4gKiAgIEFub3RoZXIgYXBwcm9hY2ggd291bGQgYmUgdG8gc2V0IHRoZSBtaW5pbXVtIGhlaWdodCBvZiBhbGwgcGFyZW50cyB0byBgMGAsIGFzIGZvbGxvd3M6IGBtaW4taGVpZ2h0OiAwYC5cbiAqXG4gKiAgIEZvciB0aGUgY29tcGxldGUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgZmxleCBsYXlvdXQgYW5kIGl0cyBmZWF0dXJlcywgcmVmZXIgdG8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2ZsZXguXG4gKlxuICpcbiAqICMjIExheW91dGluZyB0aGUgdmlld3BvcnQncyBzbG90dGVkIGNvbnRlbnRcbiAqXG4gKiBCeSBkZWZhdWx0LCB0aGUgdmlld3BvcnQncyBjb250ZW50IGlzIGFkZGVkIHRvIGEgQ1NTIGdyaWQgY29udGFpbmVyIHdpdGggYSBzaW5nbGUgY29sdW1uLCBmaWxsaW5nIHJlbWFpbmluZyBzcGFjZSB2ZXJ0aWNhbGx5IGFuZCBob3Jpem9udGFsbHkuXG4gKiBVc2luZyB0aGUgYDo6cGFydChjb250ZW50KWAgcHNldWRvIGVsZW1lbnQgc2VsZWN0b3IsIHlvdSBjYW4gY29uZmlndXJlIHRoZSBncmlkIGNvbnRhaW5lciBvciBhcHBseSBhIGRpZmZlcmVudCBsYXlvdXQsIHN1Y2ggYXMgYSBmbGV4IG9yIGZsb3cgbGF5b3V0LlxuICpcbiAqICMjIyMgRXhhbXBsZSBvZiBhZGRpbmcgc2xvdHRlZCBjb250ZW50IHRvIGEgQ1NTIGZsZXggY29udGFpbmVyLlxuICogYGBgY3NzXG4gKiBzY2ktdmlld3BvcnQ6OnBhcnQoY29udGVudCkge1xuICogICBkaXNwbGF5OiBmbGV4O1xuICogICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICogfVxuICogYGBgXG4gKlxuICogIyMjIyBFeGFtcGxlIG9mIGNvbmZpZ3VyaW5nIENTUyBncmlkIGNvbnRhaW5lciB3aXRoIHR3byBjb2x1bW5zXG4gKiBgYGBjc3NcbiAqIHNjaS12aWV3cG9ydDo6cGFydChjb250ZW50KSB7XG4gKiAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjtcbiAqICAgZ2FwOiAxZW07XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiAjIyBTdHlsaW5nIG9mIHNjcm9sbGJhcnNcbiAqXG4gKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBmb2xsb3dpbmcgQ1NTIHZhcmlhYmxlcyB0byBjb250cm9sIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBzY3JvbGxiYXI6XG4gKlxuICogLSBzY2ktdmlld3BvcnQtc2Nyb2xsYmFyLWNvbG9yOiAgICAgU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNjcm9sbGJhciAoYnkgZGVmYXVsdCwgdXNlcyBgcmdiKDc4LCA3OCwgNzgpYCkuXG4gKlxuICogYGBgY3NzXG4gKiBzY2ktdmlld3BvcnQge1xuICogICAtLXNjaS12aWV3cG9ydC1zY3JvbGxiYXItY29sb3I6IGJsdWU7XG4gKiB9XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2NpLXZpZXdwb3J0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZpZXdwb3J0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdmlld3BvcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uU2hhZG93RG9tLFxufSlcbmV4cG9ydCBjbGFzcyBTY2lWaWV3cG9ydENvbXBvbmVudCB7XG5cbiAgcHJpdmF0ZSBfdmlld3BvcnQhOiBIVE1MRGl2RWxlbWVudDtcbiAgcHJpdmF0ZSBfdmlld3BvcnRDbGllbnQhOiBIVE1MRGl2RWxlbWVudDtcbiAgcHJpdmF0ZSBfc2Nyb2xsYmFyU3R5bGU6IFNjcm9sbGJhclN0eWxlID0gJ29uLXRvcCc7XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBAVmlld0NoaWxkKCd2aWV3cG9ydCcsIHtzdGF0aWM6IHRydWV9KVxuICBwdWJsaWMgc2V0IHNldFZpZXdwb3J0KHZpZXdwb3J0OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pikge1xuICAgIHRoaXMuX3ZpZXdwb3J0ID0gY29lcmNlRWxlbWVudCh2aWV3cG9ydCk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIEBWaWV3Q2hpbGQoJ3ZpZXdwb3J0X2NsaWVudCcsIHtzdGF0aWM6IHRydWV9KVxuICBwdWJsaWMgc2V0IHNldFZpZXdwb3J0Q2xpZW50KHZpZXdwb3J0Q2xpZW50OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pikge1xuICAgIHRoaXMuX3ZpZXdwb3J0Q2xpZW50ID0gY29lcmNlRWxlbWVudCh2aWV3cG9ydENsaWVudCk7XG4gIH1cblxuICAvKipcbiAgICogQ29udHJvbHMgd2hldGhlciB0byB1c2UgbmF0aXZlIHNjcm9sbGJhcnMgb3IsIHdoaWNoIGlzIGJ5IGRlZmF1bHQsIGVtdWxhdGVkIHNjcm9sbGJhcnMgdGhhdCBzaXQgb24gdG9wIG9mIHRoZSB2aWV3cG9ydCBjbGllbnQuXG4gICAqIEluIHRoZSBsYXR0ZXIsIHRoZSB2aWV3cG9ydCBjbGllbnQgcmVtYWlucyBuYXRpdmVseSBzY3JvbGxhYmxlLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzY3JvbGxiYXJTdHlsZShzY3JvbGxiYXJTdHlsZTogU2Nyb2xsYmFyU3R5bGUpIHtcbiAgICB0aGlzLl9zY3JvbGxiYXJTdHlsZSA9IHNjcm9sbGJhclN0eWxlIHx8ICdvbi10b3AnO1xuICB9XG5cbiAgcHVibGljIGdldCBzY3JvbGxiYXJTdHlsZSgpOiBTY3JvbGxiYXJTdHlsZSB7XG4gICAgcmV0dXJuIHRoaXMuX3Njcm9sbGJhclN0eWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIHVwb24gYSBzY3JvbGwgZXZlbnQuXG4gICAqXG4gICAqIFlvdSBjYW4gYWRkIFtzY2lEaW1lbnNpb25dIGRpcmVjdGl2ZSB0byB0aGUgdmlld3BvcnQgb3Igdmlld3BvcnQgY2xpZW50IHRvIGJlIG5vdGlmaWVkIGFib3V0IGxheW91dCBjaGFuZ2VzLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzY3JvbGwgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG5cbiAgY29uc3RydWN0b3IocHVibGljIGhvc3Q6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCBwdWJsaWMgbmF0aXZlU2Nyb2xsYmFyVHJhY2tTaXplUHJvdmlkZXI6IFNjaU5hdGl2ZVNjcm9sbGJhclRyYWNrU2l6ZVByb3ZpZGVyKSB7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdmb2N1cycpXG4gIHB1YmxpYyBmb2N1cygpOiB2b2lkIHsgLy8gZG8gbm90IHJlbmFtZSB0byBleHBvc2UgdGhlIHNhbWUgZm9jdXMgbWV0aG9kIGxpa2UgYEhUTUxFbGVtZW50LmZvY3VzKClgLlxuICAgIHRoaXMuX3ZpZXdwb3J0ICYmIHRoaXMuX3ZpZXdwb3J0LmZvY3VzKCk7XG4gIH1cblxuICBwdWJsaWMgb25TY3JvbGwoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zY3JvbGwuZW1pdChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBpeGVscyB0aGF0IHRoZSB2aWV3cG9ydCBjbGllbnQgaXMgc2Nyb2xsZWQgdmVydGljYWxseS5cbiAgICpcbiAgICogQHNlZSBFbGVtZW50LnNjcm9sbFRvcFxuICAgKi9cbiAgcHVibGljIGdldCBzY3JvbGxUb3AoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdmlld3BvcnQuc2Nyb2xsVG9wO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIG51bWJlciBvZiBwaXhlbHMgdGhhdCB0aGUgdmlld3BvcnQgY2xpZW50IGlzIHNjcm9sbGVkIHZlcnRpY2FsbHkuXG4gICAqXG4gICAqIEBzZWUgRWxlbWVudC5zY3JvbGxUb3BcbiAgICovXG4gIHB1YmxpYyBzZXQgc2Nyb2xsVG9wKHNjcm9sbFRvcDogbnVtYmVyKSB7XG4gICAgdGhpcy5fdmlld3BvcnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBwaXhlbHMgdGhhdCB0aGUgdmlld3BvcnQgY2xpZW50IGlzIHNjcm9sbGVkIGhvcml6b250YWxseS5cbiAgICpcbiAgICogQHNlZSBFbGVtZW50LnNjcm9sbExlZnRcbiAgICovXG4gIHB1YmxpYyBnZXQgc2Nyb2xsTGVmdCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl92aWV3cG9ydC5zY3JvbGxMZWZ0O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIG51bWJlciBvZiBwaXhlbHMgdGhhdCB0aGUgdmlld3BvcnQgY2xpZW50IGlzIHNjcm9sbGVkIGhvcml6b250YWxseS5cbiAgICpcbiAgICogQHNlZSBFbGVtZW50LnNjcm9sbExlZnRcbiAgICovXG4gIHB1YmxpYyBzZXQgc2Nyb2xsTGVmdChzY3JvbGxMZWZ0OiBudW1iZXIpIHtcbiAgICB0aGlzLl92aWV3cG9ydC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlIHZpZXdwb3J0IGNsaWVudC5cbiAgICpcbiAgICogQHNlZSBFbGVtZW50LnNjcm9sbEhlaWdodFxuICAgKi9cbiAgcHVibGljIGdldCBzY3JvbGxIZWlnaHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdmlld3BvcnQuc2Nyb2xsSGVpZ2h0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHdpZHRoIG9mIHRoZSB2aWV3cG9ydCBjbGllbnQuXG4gICAqXG4gICAqIEBzZWUgRWxlbWVudC5zY3JvbGxXaWR0aFxuICAgKi9cbiAgcHVibGljIGdldCBzY3JvbGxXaWR0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl92aWV3cG9ydC5zY3JvbGxXaWR0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB2aWV3cG9ydCB7SFRNTEVsZW1lbnR9LlxuICAgKi9cbiAgcHVibGljIGdldCB2aWV3cG9ydEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLl92aWV3cG9ydDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB2aWV3cG9ydCBjbGllbnQge0hUTUxFbGVtZW50fS5cbiAgICovXG4gIHB1YmxpYyBnZXQgdmlld3BvcnRDbGllbnRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fdmlld3BvcnRDbGllbnQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBpcyBzY3JvbGxlZCBpbnRvIHRoZSB2aWV3cG9ydC5cbiAgICpcbiAgICogQHBhcmFtIGVsZW1lbnQgLSB0aGUgZWxlbWVudCB0byBiZSBjaGVja2VkXG4gICAqIEBwYXJhbSBmaXQgLSBjb250cm9sIGlmIHRoZSBlbGVtZW50IG11c3QgZnVsbHkgb3IgcGFydGlhbGx5IGZpdCBpbnRvIHRoZSB2aWV3cG9ydFxuICAgKi9cbiAgcHVibGljIGlzRWxlbWVudEluVmlldyhlbGVtZW50OiBIVE1MRWxlbWVudCwgZml0OiAnZnVsbCcgfCAncGFydGlhbCcpOiBib29sZWFuIHtcbiAgICBjb25zdCBlbExlZnQgPSB0aGlzLmNvbXB1dGVPZmZzZXQoZWxlbWVudCwgJ2xlZnQnKTtcbiAgICBjb25zdCBlbFJpZ2h0ID0gZWxMZWZ0ICsgZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICBjb25zdCBlbFRvcCA9IHRoaXMuY29tcHV0ZU9mZnNldChlbGVtZW50LCAndG9wJyk7XG4gICAgY29uc3QgZWxCb3R0b20gPSBlbFRvcCArIGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuXG4gICAgY29uc3QgdnBMZWZ0ID0gdGhpcy5fdmlld3BvcnQuc2Nyb2xsTGVmdDtcbiAgICBjb25zdCB2cFJpZ2h0ID0gdnBMZWZ0ICsgdGhpcy5fdmlld3BvcnQuY2xpZW50V2lkdGg7XG4gICAgY29uc3QgdnBUb3AgPSB0aGlzLl92aWV3cG9ydC5zY3JvbGxUb3A7XG4gICAgY29uc3QgdnBCb3R0b20gPSB2cFRvcCArIHRoaXMuX3ZpZXdwb3J0LmNsaWVudEhlaWdodDtcblxuICAgIHN3aXRjaCAoZml0KSB7XG4gICAgICBjYXNlICdmdWxsJzpcbiAgICAgICAgcmV0dXJuIChlbExlZnQgPj0gdnBMZWZ0ICYmIGVsUmlnaHQgPD0gdnBSaWdodCkgJiYgKGVsVG9wID49IHZwVG9wICYmIGVsQm90dG9tIDw9IHZwQm90dG9tKTtcbiAgICAgIGNhc2UgJ3BhcnRpYWwnOlxuICAgICAgICByZXR1cm4gKGVsUmlnaHQgPj0gdnBMZWZ0ICYmIGVsTGVmdCA8PSB2cFJpZ2h0KSAmJiAoZWxCb3R0b20gPj0gdnBUb3AgJiYgZWxUb3AgPD0gdnBCb3R0b20pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoJ1Vuc3VwcG9ydGVkIGZpdCBzdHJhdGVneScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGxzIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBpbnRvIHRoZSB2aWV3cG9ydC5cbiAgICpcbiAgICogQHBhcmFtIGVsZW1lbnQgLSB0aGUgZWxlbWVudCB0byBzY3JvbGwgaW50byB0aGUgdmlld3BvcnRcbiAgICogQHBhcmFtIG9mZnNldCAtIHRoZSBnYXAgYmV0d2VlbiB0aGUgZWxlbWVudCBhbmQgdGhlIHZpZXdwb3J0XG4gICAqL1xuICBwdWJsaWMgc2Nyb2xsSW50b1ZpZXcoZWxlbWVudDogSFRNTEVsZW1lbnQsIG9mZnNldDogbnVtYmVyID0gNTApOiB2b2lkIHtcbiAgICB0aGlzLl92aWV3cG9ydC5zY3JvbGxUb3AgPSB0aGlzLmNvbXB1dGVPZmZzZXQoZWxlbWVudCwgJ3RvcCcpIC0gb2Zmc2V0O1xuICAgIHRoaXMuX3ZpZXdwb3J0LnNjcm9sbExlZnQgPSB0aGlzLmNvbXB1dGVPZmZzZXQoZWxlbWVudCwgJ2xlZnQnKSAtIG9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlcyB0aGUgZGlzdGFuY2Ugb2YgdGhlIGVsZW1lbnQgdG8gdGhlIHZpZXdwb3J0J3MgbGVmdCBvciB0b3AgYm9yZGVyLlxuICAgKi9cbiAgcHVibGljIGNvbXB1dGVPZmZzZXQoZWxlbWVudDogSFRNTEVsZW1lbnQsIGJvcmRlcjogJ2xlZnQnIHwgJ3RvcCcpOiBudW1iZXIge1xuICAgIGlmICghaXNDaGlsZE9mKGVsZW1lbnQsIHRoaXMuX3ZpZXdwb3J0KSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ2VsZW1lbnQgbm90IGEgY2hpbGQgb2YgdGhlIHZpZXdwb3J0Jyk7XG4gICAgfVxuXG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgbGV0IGVsID0gZWxlbWVudDtcbiAgICBkbyB7XG4gICAgICBvZmZzZXQgKz0gKGJvcmRlciA9PT0gJ2xlZnQnID8gZWwub2Zmc2V0TGVmdCA6IGVsLm9mZnNldFRvcCk7XG4gICAgICBlbCA9IGVsLm9mZnNldFBhcmVudCBhcyBIVE1MRWxlbWVudDtcbiAgICB9IHdoaWxlIChlbCAhPT0gbnVsbCAmJiBlbCAhPT0gdGhpcy5fdmlld3BvcnQpO1xuXG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgJ3RydWUnIGlmIHRoZSBnaXZlbiBlbGVtZW50IGlzIGEgY2hpbGQgZWxlbWVudCBvZiB0aGUgcGFyZW50IGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGlzQ2hpbGRPZihlbGVtZW50OiBFbGVtZW50LCBwYXJlbnQ6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgd2hpbGUgKGVsZW1lbnQucGFyZW50RWxlbWVudCAhPT0gbnVsbCkge1xuICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgaWYgKGVsZW1lbnQgPT09IHBhcmVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2Nyb2xsYmFyIHN0eWxlLlxuICovXG5leHBvcnQgdHlwZSBTY3JvbGxiYXJTdHlsZSA9ICduYXRpdmUnIHwgJ29uLXRvcCcgfCAnaGlkZGVuJztcbiIsIjwhLS0gdmlld3BvcnQgYW5kIHZpZXdwb3J0IGNsaWVudCAtLT5cbjxkaXYgI3ZpZXdwb3J0XG4gICAgIGNsYXNzPVwidmlld3BvcnRcIlxuICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgc2NpU2Nyb2xsYWJsZSBbc2NpU2Nyb2xsYWJsZURpc3BsYXlOYXRpdmVTY3JvbGxiYXJdPVwic2Nyb2xsYmFyU3R5bGUgPT09ICduYXRpdmUnXCJcbiAgICAgY2RrU2Nyb2xsYWJsZVxuICAgICAoc2Nyb2xsKT1cIm9uU2Nyb2xsKCRldmVudClcIj5cbiAgPGRpdiAjdmlld3BvcnRfY2xpZW50IGNsYXNzPVwidmlld3BvcnQtY2xpZW50XCIgcGFydD1cImNvbnRlbnRcIj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gcmVuZGVyIGVtdWxhdGVkIHNjcm9sbGJhcnMgd2hpY2ggc2l0IG9uLXRvcCAtLT5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJzY3JvbGxiYXJTdHlsZSA9PT0gJ29uLXRvcCcgJiYgKG5hdGl2ZVNjcm9sbGJhclRyYWNrU2l6ZVByb3ZpZGVyLnRyYWNrU2l6ZSQgfCBhc3luYykgIT09IG51bGxcIj5cbiAgPHNjaS1zY3JvbGxiYXIgW2RpcmVjdGlvbl09XCIndnNjcm9sbCdcIiBbdmlld3BvcnRdPVwidmlld3BvcnRcIj48L3NjaS1zY3JvbGxiYXI+XG4gIDxzY2ktc2Nyb2xsYmFyIFtkaXJlY3Rpb25dPVwiJ2hzY3JvbGwnXCIgW3ZpZXdwb3J0XT1cInZpZXdwb3J0XCI+PC9zY2ktc2Nyb2xsYmFyPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
255
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vY29tcG9uZW50cy92aWV3cG9ydC9zcmMvdmlld3BvcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vY29tcG9uZW50cy92aWV3cG9ydC9zcmMvdmlld3BvcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFjLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFN0gsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7O0FBRXBEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlFRztBQU9ILE1BQU0sT0FBTyxvQkFBb0I7SUF1Qy9CLFlBQW1CLElBQTZCLEVBQVMsZ0NBQXFFO1FBQTNHLFNBQUksR0FBSixJQUFJLENBQXlCO1FBQVMscUNBQWdDLEdBQWhDLGdDQUFnQyxDQUFxQztRQW5DdEgsb0JBQWUsR0FBbUIsUUFBUSxDQUFDO1FBMkJuRDs7OztXQUlHO1FBRUksV0FBTSxHQUFHLElBQUksWUFBWSxFQUFTLENBQUMsQ0FBQyx1REFBdUQ7SUFHbEcsQ0FBQztJQWxDRCxnQkFBZ0I7SUFDaEIsSUFDVyxXQUFXLENBQUMsUUFBb0M7UUFDekQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsZ0JBQWdCO0lBQ2hCLElBQ1csaUJBQWlCLENBQUMsY0FBMEM7UUFDckUsSUFBSSxDQUFDLGVBQWUsR0FBRyxhQUFhLENBQUMsY0FBYyxDQUFD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SSxFQUFDO2dCQU8xQixpQkFBaUI7c0JBRDNCLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQVVqQyxjQUFjO3NCQUR4QixLQUFLO2dCQWVDLE1BQU07c0JBRFosTUFBTTtnQkFPQSxLQUFLO3NCQURYLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1NjaU5hdGl2ZVNjcm9sbGJhclRyYWNrU2l6ZVByb3ZpZGVyfSBmcm9tICcuL25hdGl2ZS1zY3JvbGxiYXItdHJhY2stc2l6ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7Y29lcmNlRWxlbWVudH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgdmlld3BvcnQgd2l0aCBzbG90dGVkIGNvbnRlbnQgKGA8bmctY29udGVudD5gKSB1c2VkIGFzIHNjcm9sbGFibGUgY29udGVudC4gQnkgZGVmYXVsdCwgY29udGVudCBpcyBhZGRlZCB0byBhIENTUyBncmlkIGxheW91dC5cbiAqXG4gKiBUaGUgdmlld3BvcnQgY29tcG9uZW50IGRpc3BsYXlzIHNjcm9sbGJhcnMgd2hlbiBpdHMgY29udGVudCBvdmVyZmxvd3MuIFNjcm9sbGJhcnMgYXJlIGRpc3BsYXllZCBvbiB0b3Agb2YgdGhlIGNvbnRlbnQsIG5vdCBuZXh0IHRvIGl0LlxuICogVGhlIGNvbXBvbmVudCB1c2VzIHRoZSBuYXRpdmUgc2Nyb2xsYmFycyBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpZiB0aGV5IGFyZSBhbHJlYWR5IHNpdHRpbmcgb24gdG9wLCBvciBmYWxscyBiYWNrIGFuZCByZW5kZXJzIHNjcm9sbGJhcnMgb24gdG9wIG90aGVyd2lzZS5cbiAqIFRoZSB2aWV3cG9ydCByZW1haW5zIG5hdGl2ZWx5IHNjcm9sbGFibGUgd2l0aCB0aGUgbmF0aXZlIHNjcm9sbGJhcnMgc2hpZnRlZCBvdXQgb2YgdGhlIHZpZXdwb3J0J3MgdmlzaWJsZSBhcmVhLiBDb25zZXF1ZW50bHksIHRoZSB2aWV3cG9ydCBrZWVwcyBzdXBwb3J0aW5nXG4gKiBuYXRpdmUgc2Nyb2xsaW5nIGZlYXR1cmVzIHN1Y2ggYXMgdG91Y2ggZ2VzdHVyZXMsIHNjcm9sbCBzcGVlZCBhY2NlbGVyYXRpb24sIG9yIHNjcm9sbGluZyBuZWFyIHRoZSB2aWV3cG9ydCBlZGdlcyBkdXJpbmcgZHJhZy1hbmQtZHJvcCBvcGVyYXRpb25zLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxzY2ktdmlld3BvcnQ+XG4gKiAgIHlvdXIgY29udGVudFxuICogPC9zY2ktdmlld3BvcnQ+XG4gKiBgYGBcbiAqXG4gKiAjIyBBZGRpbmcgdGhlIHZpZXdwb3J0IHRvIGEgbGF5b3V0XG4gKlxuICogVHlwaWNhbGx5IHlvdSB3b3VsZCBhZGQgdGhlIHZpZXdwb3J0IGNvbXBvbmVudCB0byBhIGZsZXhpYmxlIGxheW91dCwgZmlsbGluZyB0aGUgcmVtYWluaW5nIHNwYWNlIHZlcnRpY2FsbHkgYW5kIGhvcml6b250YWxseSwgc3VjaCBhcyBhIGZsZXhib3ggY29udGFpbmVyXG4gKiB3aXRoIHRoZSB2aWV3cG9ydCdzIGBmbGV4YCBDU1MgcHJvcGVydHkgc2V0IHRvIGVpdGhlciBgZmxleDogYXV0b2Agb3IgYGZsZXg6IDEgMSAwYC5cbiAqXG4gKiBUaGUgdmlld3BvcnQgaXMgc2l6ZWQgYWNjb3JkaW5nIHRvIGl0cyBjb250ZW50IHdpZHRoIGFuZCBoZWlnaHQuIEl0IGdyb3dzIHRvIGFic29yYiBhbnkgZnJlZSBzcGFjZSwgdGh1cyBvdmVyZmxvd2luZyBpdHMgY29udGVudCBvbmx5IHdoZW4gZW5jb3VudGVyaW5nXG4gKiBhIGxheW91dCBjb25zdHJhaW50LiBEZXBlbmRpbmcgb24gdGhlIGxheW91dCwgZGlmZmVyZW50IHN0ZXBzIG1heSBiZSBuZWNlc3NhcnkgdG8gcHJldmVudCB0aGUgdmlld3BvcnQgZnJvbSBncm93aW5nIHRvIGluZmluaXR5LlxuICpcbiAqIC0gSWYgcHJhY3RpY2FsLCBnaXZlIHRoZSB2aWV3cG9ydCBhIGZpeGVkIHNpemUgb3IgYSBtYXhpbXVtIHNpemUuXG4gKiAtIElmIHlvdSBhZGQgdGhlIHZpZXdwb3J0IHRvIGEgZmxleGJveCBsYXlvdXQsIG1ha2Ugc3VyZSB0aGF0IGl0IGNhbm5vdCBleGNlZWQgdGhlIGF2YWlsYWJsZSBzcGFjZS4gSW5zdGVhZCwgdGhlIHZpZXdwb3J0IHNob3VsZCBmaWxsIHRoZSByZW1haW5pbmcgc3BhY2UsXG4gKiAgIHZlcnRpY2FsbHkgYW5kIGhvcml6b250YWxseS4gQmUgYXdhcmUgdGhhdCwgYnkgZGVmYXVsdCwgYSBmbGV4IGl0ZW0gZG9lcyBub3Qgc2hyaW5rIGJlbG93IGl0cyBtaW5pbXVtIGNvbnRlbnQgc2l6ZS4gVG8gY2hhbmdlIHRoaXMsIHNldCB0aGUgdmlld3BvcnQnc1xuICogICBgZmxleC1iYXNpc2AgdG8gYDBgIChpbnN0ZWFkIG9mIGBhdXRvYCksIG9yIHVzZSB0aGUgQ1NTIHNob3J0aGFuZCBwcm9wZXJ0eSBgZmxleDogMSAxIDBgLiBUaGUgYGZsZXgtYmFzaXNgIGRlZmluZXMgdGhlIGRlZmF1bHQgc2l6ZSBvZiBhIGZsZXggaXRlbSBiZWZvcmVcbiAqICAgdGhlIHJlbWFpbmluZyBleHRyYSBzcGFjZSBpcyBkaXN0cmlidXRlZC4gSWYgdGhlIHZpZXdwb3J0IGRvZXMgbm90IGFwcGVhciBhZnRlciBzZXR0aW5nIHRoaXMgcHJvcGVydHksIGNoZWNrIGl0cyBwYXJlbnQgZWxlbWVudHMnIGNvbnRlbnQgc2l6ZXMuXG4gKiAgIEFzIGFuIGFsdGVybmF0aXZlIHRvIHNldHRpbmcgYGZsZXg6IDEgMSAwYCwgY2hhbmdlIHRoZSBzZXR0aW5nIHRvIGBmbGV4OiBhdXRvYCBhbmQgaGlkZSB0aGUgb3ZlcmZsb3cgaW4gdGhlIHBhcmVudCBlbGVtZW50LCBhcyBmb2xsb3dzOiBgb3ZlcmZsb3c6IGhpZGRlbmAuXG4gKiAgIEFub3RoZXIgYXBwcm9hY2ggd291bGQgYmUgdG8gc2V0IHRoZSBtaW5pbXVtIGhlaWdodCBvZiBhbGwgcGFyZW50cyB0byBgMGAsIGFzIGZvbGxvd3M6IGBtaW4taGVpZ2h0OiAwYC5cbiAqXG4gKiAgIEZvciB0aGUgY29tcGxldGUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgZmxleCBsYXlvdXQgYW5kIGl0cyBmZWF0dXJlcywgcmVmZXIgdG8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2ZsZXguXG4gKlxuICpcbiAqICMjIExheW91dGluZyB0aGUgdmlld3BvcnQncyBzbG90dGVkIGNvbnRlbnRcbiAqXG4gKiBCeSBkZWZhdWx0LCB0aGUgdmlld3BvcnQncyBjb250ZW50IGlzIGFkZGVkIHRvIGEgQ1NTIGdyaWQgY29udGFpbmVyIHdpdGggYSBzaW5nbGUgY29sdW1uLCBmaWxsaW5nIHJlbWFpbmluZyBzcGFjZSB2ZXJ0aWNhbGx5IGFuZCBob3Jpem9udGFsbHkuXG4gKiBVc2luZyB0aGUgYDo6cGFydChjb250ZW50KWAgcHNldWRvIGVsZW1lbnQgc2VsZWN0b3IsIHlvdSBjYW4gY29uZmlndXJlIHRoZSBncmlkIGNvbnRhaW5lciBvciBhcHBseSBhIGRpZmZlcmVudCBsYXlvdXQsIHN1Y2ggYXMgYSBmbGV4IG9yIGZsb3cgbGF5b3V0LlxuICpcbiAqICMjIyMgRXhhbXBsZSBvZiBhZGRpbmcgc2xvdHRlZCBjb250ZW50IHRvIGEgQ1NTIGZsZXggY29udGFpbmVyLlxuICogYGBgY3NzXG4gKiBzY2ktdmlld3BvcnQ6OnBhcnQoY29udGVudCkge1xuICogICBkaXNwbGF5OiBmbGV4O1xuICogICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICogfVxuICogYGBgXG4gKlxuICogIyMjIyBFeGFtcGxlIG9mIGNvbmZpZ3VyaW5nIENTUyBncmlkIGNvbnRhaW5lciB3aXRoIHR3byBjb2x1bW5zXG4gKiBgYGBjc3NcbiAqIHNjaS12aWV3cG9ydDo6cGFydChjb250ZW50KSB7XG4gKiAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjtcbiAqICAgZ2FwOiAxZW07XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiAjIyBTdHlsaW5nIG9mIHNjcm9sbGJhcnNcbiAqXG4gKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBmb2xsb3dpbmcgQ1NTIHZhcmlhYmxlcyB0byBjb250cm9sIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBzY3JvbGxiYXI6XG4gKlxuICogLSBzY2ktdmlld3BvcnQtc2Nyb2xsYmFyLWNvbG9yOiAgICAgU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNjcm9sbGJhciAoYnkgZGVmYXVsdCwgdXNlcyBgcmdiKDc4LCA3OCwgNzgpYCkuXG4gKlxuICogYGBgY3NzXG4gKiBzY2ktdmlld3BvcnQge1xuICogICAtLXNjaS12aWV3cG9ydC1zY3JvbGxiYXItY29sb3I6IGJsdWU7XG4gKiB9XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2NpLXZpZXdwb3J0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZpZXdwb3J0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdmlld3BvcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uU2hhZG93RG9tLFxufSlcbmV4cG9ydCBjbGFzcyBTY2lWaWV3cG9ydENvbXBvbmVudCB7XG5cbiAgcHJpdmF0ZSBfdmlld3BvcnRFbGVtZW50ITogSFRNTERpdkVsZW1lbnQ7XG4gIHByaXZhdGUgX3ZpZXdwb3J0Q2xpZW50ITogSFRNTERpdkVsZW1lbnQ7XG4gIHByaXZhdGUgX3Njcm9sbGJhclN0eWxlOiBTY3JvbGxiYXJTdHlsZSA9ICdvbi10b3AnO1xuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgQFZpZXdDaGlsZCgndmlld3BvcnQnLCB7c3RhdGljOiB0cnVlfSlcbiAgcHVibGljIHNldCBzZXRWaWV3cG9ydCh2aWV3cG9ydDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4pIHtcbiAgICB0aGlzLl92aWV3cG9ydEVsZW1lbnQgPSBjb2VyY2VFbGVtZW50KHZpZXdwb3J0KTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgQFZpZXdDaGlsZCgndmlld3BvcnRfY2xpZW50Jywge3N0YXRpYzogdHJ1ZX0pXG4gIHB1YmxpYyBzZXQgc2V0Vmlld3BvcnRDbGllbnQodmlld3BvcnRDbGllbnQ6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+KSB7XG4gICAgdGhpcy5fdmlld3BvcnRDbGllbnQgPSBjb2VyY2VFbGVtZW50KHZpZXdwb3J0Q2xpZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb250cm9scyB3aGV0aGVyIHRvIHVzZSBuYXRpdmUgc2Nyb2xsYmFycyBvciwgd2hpY2ggaXMgYnkgZGVmYXVsdCwgZW11bGF0ZWQgc2Nyb2xsYmFycyB0aGF0IHNpdCBvbiB0b3Agb2YgdGhlIHZpZXdwb3J0IGNsaWVudC5cbiAgICogSW4gdGhlIGxhdHRlciwgdGhlIHZpZXdwb3J0IGNsaWVudCByZW1haW5zIG5hdGl2ZWx5IHNjcm9sbGFibGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNjcm9sbGJhclN0eWxlKHNjcm9sbGJhclN0eWxlOiBTY3JvbGxiYXJTdHlsZSkge1xuICAgIHRoaXMuX3Njcm9sbGJhclN0eWxlID0gc2Nyb2xsYmFyU3R5bGUgfHwgJ29uLXRvcCc7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNjcm9sbGJhclN0eWxlKCk6IFNjcm9sbGJhclN0eWxlIHtcbiAgICByZXR1cm4gdGhpcy5fc2Nyb2xsYmFyU3R5bGU7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgdXBvbiBhIHNjcm9sbCBldmVudC5cbiAgICpcbiAgICogWW91IGNhbiBhZGQgW3NjaURpbWVuc2lvbl0gZGlyZWN0aXZlIHRvIHRoZSB2aWV3cG9ydCBvciB2aWV3cG9ydCBjbGllbnQgdG8gYmUgbm90aWZpZWQgYWJvdXQgbGF5b3V0IGNoYW5nZXMuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHNjcm9sbCA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaG9zdDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sIHB1YmxpYyBuYXRpdmVTY3JvbGxiYXJUcmFja1NpemVQcm92aWRlcjogU2NpTmF0aXZlU2Nyb2xsYmFyVHJhY2tTaXplUHJvdmlkZXIpIHtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJylcbiAgcHVibGljIGZvY3VzKCk6IHZvaWQgeyAvLyBkbyBub3QgcmVuYW1lIHRvIGV4cG9zZSB0aGUgc2FtZSBmb2N1cyBtZXRob2QgbGlrZSBgSFRNTEVsZW1lbnQuZm9jdXMoKWAuXG4gICAgdGhpcy5fdmlld3BvcnRFbGVtZW50Py5mb2N1cygpO1xuICB9XG5cbiAgcHVibGljIG9uU2Nyb2xsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2Nyb2xsLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBwaXhlbHMgdGhhdCB0aGUgdmlld3BvcnQgY2xpZW50IGlzIHNjcm9sbGVkIHZlcnRpY2FsbHkuXG4gICAqXG4gICAqIEBzZWUgRWxlbWVudC5zY3JvbGxUb3BcbiAgICovXG4gIHB1YmxpYyBnZXQgc2Nyb2xsVG9wKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZXdwb3J0RWxlbWVudC5zY3JvbGxUb3A7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBpeGVscyB0aGF0IHRoZSB2aWV3cG9ydCBjbGllbnQgaXMgc2Nyb2xsZWQgdmVydGljYWxseS5cbiAgICpcbiAgICogQHNlZSBFbGVtZW50LnNjcm9sbFRvcFxuICAgKi9cbiAgcHVibGljIHNldCBzY3JvbGxUb3Aoc2Nyb2xsVG9wOiBudW1iZXIpIHtcbiAgICB0aGlzLl92aWV3cG9ydEVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBwaXhlbHMgdGhhdCB0aGUgdmlld3BvcnQgY2xpZW50IGlzIHNjcm9sbGVkIGhvcml6b250YWxseS5cbiAgICpcbiAgICogQHNlZSBFbGVtZW50LnNjcm9sbExlZnRcbiAgICovXG4gIHB1YmxpYyBnZXQgc2Nyb2xsTGVmdCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl92aWV3cG9ydEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGl4ZWxzIHRoYXQgdGhlIHZpZXdwb3J0IGNsaWVudCBpcyBzY3JvbGxlZCBob3Jpem9udGFsbHkuXG4gICAqXG4gICAqIEBzZWUgRWxlbWVudC5zY3JvbGxMZWZ0XG4gICAqL1xuICBwdWJsaWMgc2V0IHNjcm9sbExlZnQoc2Nyb2xsTGVmdDogbnVtYmVyKSB7XG4gICAgdGhpcy5fdmlld3BvcnRFbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGhlaWdodCBvZiB0aGUgdmlld3BvcnQgY2xpZW50LlxuICAgKlxuICAgKiBAc2VlIEVsZW1lbnQuc2Nyb2xsSGVpZ2h0XG4gICAqL1xuICBwdWJsaWMgZ2V0IHNjcm9sbEhlaWdodCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl92aWV3cG9ydEVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHdpZHRoIG9mIHRoZSB2aWV3cG9ydCBjbGllbnQuXG4gICAqXG4gICAqIEBzZWUgRWxlbWVudC5zY3JvbGxXaWR0aFxuICAgKi9cbiAgcHVibGljIGdldCBzY3JvbGxXaWR0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl92aWV3cG9ydEVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdmlld3BvcnQge0hUTUxFbGVtZW50fS5cbiAgICovXG4gIHB1YmxpYyBnZXQgdmlld3BvcnRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fdmlld3BvcnRFbGVtZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZpZXdwb3J0IGNsaWVudCB7SFRNTEVsZW1lbnR9LlxuICAgKi9cbiAgcHVibGljIGdldCB2aWV3cG9ydENsaWVudEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLl92aWV3cG9ydENsaWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHNwZWNpZmllZCBlbGVtZW50IGlzIHNjcm9sbGVkIGludG8gdGhlIHZpZXdwb3J0LlxuICAgKlxuICAgKiBAcGFyYW0gZWxlbWVudCAtIHRoZSBlbGVtZW50IHRvIGJlIGNoZWNrZWRcbiAgICogQHBhcmFtIGZpdCAtIGNvbnRyb2wgaWYgdGhlIGVsZW1lbnQgbXVzdCBmdWxseSBvciBwYXJ0aWFsbHkgZml0IGludG8gdGhlIHZpZXdwb3J0XG4gICAqXG4gICAqIEB0aHJvd3MgaWYgdGhlIGVsZW1lbnQgaXMgbm90IGNvbnRhaW5lZCBpbiB0aGUgdmlld3BvcnQncyBzbG90dGVkIGNvbnRlbnQuXG4gICAqL1xuICBwdWJsaWMgaXNFbGVtZW50SW5WaWV3KGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgSFRNTEVsZW1lbnQsIGZpdDogJ2Z1bGwnIHwgJ3BhcnRpYWwnKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZWxMZWZ0ID0gdGhpcy5jb21wdXRlT2Zmc2V0KGVsZW1lbnQsICdsZWZ0Jyk7XG4gICAgY29uc3QgZWxSaWdodCA9IGVsTGVmdCArIGNvZXJjZUVsZW1lbnQoZWxlbWVudCkub2Zmc2V0V2lkdGg7XG4gICAgY29uc3QgZWxUb3AgPSB0aGlzLmNvbXB1dGVPZmZzZXQoZWxlbWVudCwgJ3RvcCcpO1xuICAgIGNvbnN0IGVsQm90dG9tID0gZWxUb3AgKyBjb2VyY2VFbGVtZW50KGVsZW1lbnQpLm9mZnNldEhlaWdodDtcblxuICAgIGNvbnN0IHZwTGVmdCA9IHRoaXMuX3ZpZXdwb3J0RWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIGNvbnN0IHZwUmlnaHQgPSB2cExlZnQgKyB0aGlzLl92aWV3cG9ydEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgY29uc3QgdnBUb3AgPSB0aGlzLl92aWV3cG9ydEVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgIGNvbnN0IHZwQm90dG9tID0gdnBUb3AgKyB0aGlzLl92aWV3cG9ydEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuXG4gICAgc3dpdGNoIChmaXQpIHtcbiAgICAgIGNhc2UgJ2Z1bGwnOlxuICAgICAgICByZXR1cm4gKGVsTGVmdCA+PSB2cExlZnQgJiYgZWxSaWdodCA8PSB2cFJpZ2h0KSAmJiAoZWxUb3AgPj0gdnBUb3AgJiYgZWxCb3R0b20gPD0gdnBCb3R0b20pO1xuICAgICAgY2FzZSAncGFydGlhbCc6XG4gICAgICAgIHJldHVybiAoZWxSaWdodCA+PSB2cExlZnQgJiYgZWxMZWZ0IDw9IHZwUmlnaHQpICYmIChlbEJvdHRvbSA+PSB2cFRvcCAmJiBlbFRvcCA8PSB2cEJvdHRvbSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcignVW5zdXBwb3J0ZWQgZml0IHN0cmF0ZWd5Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNjcm9sbHMgdGhlIHNwZWNpZmllZCBlbGVtZW50IGludG8gdGhlIHZpZXdwb3J0LlxuICAgKlxuICAgKiBAcGFyYW0gZWxlbWVudCAtIHRoZSBlbGVtZW50IHRvIHNjcm9sbCBpbnRvIHRoZSB2aWV3cG9ydFxuICAgKiBAcGFyYW0gb2Zmc2V0IC0gdGhlIGdhcCBiZXR3ZWVuIHRoZSBlbGVtZW50IGFuZCB0aGUgdmlld3BvcnRcbiAgICpcbiAgICogQHRocm93cyBpZiB0aGUgZWxlbWVudCBpcyBub3QgY29udGFpbmVkIGluIHRoZSB2aWV3cG9ydCdzIHNsb3R0ZWQgY29udGVudC5cbiAgICovXG4gIHB1YmxpYyBzY3JvbGxJbnRvVmlldyhlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IEhUTUxFbGVtZW50LCBvZmZzZXQ6IG51bWJlciA9IDUwKTogdm9pZCB7XG4gICAgdGhpcy5fdmlld3BvcnRFbGVtZW50LnNjcm9sbFRvcCA9IHRoaXMuY29tcHV0ZU9mZnNldChlbGVtZW50LCAndG9wJykgLSBvZmZzZXQ7XG4gICAgdGhpcy5fdmlld3BvcnRFbGVtZW50LnNjcm9sbExlZnQgPSB0aGlzLmNvbXB1dGVPZmZzZXQoZWxlbWVudCwgJ2xlZnQnKSAtIG9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlcyB0aGUgZGlzdGFuY2Ugb2YgdGhlIGVsZW1lbnQgdG8gdGhlIHZpZXdwb3J0J3MgbGVmdCBvciB0b3AgYm9yZGVyLlxuICAgKlxuICAgKiBAdGhyb3dzIGlmIHRoZSBlbGVtZW50IGlzIG5vdCBjb250YWluZWQgaW4gdGhlIHZpZXdwb3J0J3Mgc2xvdHRlZCBjb250ZW50LlxuICAgKi9cbiAgcHVibGljIGNvbXB1dGVPZmZzZXQoZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBIVE1MRWxlbWVudCwgYm9yZGVyOiAnbGVmdCcgfCAndG9wJyk6IG51bWJlciB7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgbGV0IGVsID0gY29lcmNlRWxlbWVudChlbGVtZW50KTtcbiAgICBkbyB7XG4gICAgICBvZmZzZXQgKz0gKGJvcmRlciA9PT0gJ2xlZnQnID8gZWwub2Zmc2V0TGVmdCA6IGVsLm9mZnNldFRvcCk7XG4gICAgICBlbCA9IGVsLm9mZnNldFBhcmVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGlmIChlbCA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBFcnJvcihgW0VsZW1lbnROb3RDb250YWluZWRFcnJvcl0gRWxlbWVudCBub3QgY29udGFpbmVkIGluIHRoZSB2aWV3cG9ydCdzIHNsb3R0ZWQgY29udGVudGApO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKGVsICE9PSB0aGlzLmhvc3QubmF0aXZlRWxlbWVudCk7XG5cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHNjcm9sbGJhciBzdHlsZS5cbiAqL1xuZXhwb3J0IHR5cGUgU2Nyb2xsYmFyU3R5bGUgPSAnbmF0aXZlJyB8ICdvbi10b3AnIHwgJ2hpZGRlbic7XG4iLCI8IS0tIHZpZXdwb3J0IGFuZCB2aWV3cG9ydCBjbGllbnQgLS0+XG48ZGl2ICN2aWV3cG9ydFxuICAgICBjbGFzcz1cInZpZXdwb3J0XCJcbiAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgIHNjaVNjcm9sbGFibGUgW3NjaVNjcm9sbGFibGVEaXNwbGF5TmF0aXZlU2Nyb2xsYmFyXT1cInNjcm9sbGJhclN0eWxlID09PSAnbmF0aXZlJ1wiXG4gICAgIGNka1Njcm9sbGFibGVcbiAgICAgKHNjcm9sbCk9XCJvblNjcm9sbCgkZXZlbnQpXCI+XG4gIDxkaXYgI3ZpZXdwb3J0X2NsaWVudCBjbGFzcz1cInZpZXdwb3J0LWNsaWVudFwiIHBhcnQ9XCJjb250ZW50XCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIHJlbmRlciBlbXVsYXRlZCBzY3JvbGxiYXJzIHdoaWNoIHNpdCBvbi10b3AgLS0+XG48bmctY29udGFpbmVyICpuZ0lmPVwic2Nyb2xsYmFyU3R5bGUgPT09ICdvbi10b3AnICYmIChuYXRpdmVTY3JvbGxiYXJUcmFja1NpemVQcm92aWRlci50cmFja1NpemUkIHwgYXN5bmMpICE9PSBudWxsXCI+XG4gIDxzY2ktc2Nyb2xsYmFyIFtkaXJlY3Rpb25dPVwiJ3ZzY3JvbGwnXCIgW3ZpZXdwb3J0XT1cInZpZXdwb3J0XCI+PC9zY2ktc2Nyb2xsYmFyPlxuICA8c2NpLXNjcm9sbGJhciBbZGlyZWN0aW9uXT1cIidoc2Nyb2xsJ1wiIFt2aWV3cG9ydF09XCJ2aWV3cG9ydFwiPjwvc2NpLXNjcm9sbGJhcj5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -615,7 +615,7 @@ class SciViewportComponent {
615
615
  }
616
616
  /** @internal */
617
617
  set setViewport(viewport) {
618
- this._viewport = coerceElement(viewport);
618
+ this._viewportElement = coerceElement(viewport);
619
619
  }
620
620
  /** @internal */
621
621
  set setViewportClient(viewportClient) {
@@ -632,7 +632,8 @@ class SciViewportComponent {
632
632
  return this._scrollbarStyle;
633
633
  }
634
634
  focus() {
635
- this._viewport && this._viewport.focus();
635
+ var _a;
636
+ (_a = this._viewportElement) === null || _a === void 0 ? void 0 : _a.focus();
636
637
  }
637
638
  onScroll(event) {
638
639
  this.scroll.emit(event);
@@ -643,7 +644,7 @@ class SciViewportComponent {
643
644
  * @see Element.scrollTop
644
645
  */
645
646
  get scrollTop() {
646
- return this._viewport.scrollTop;
647
+ return this._viewportElement.scrollTop;
647
648
  }
648
649
  /**
649
650
  * Sets the number of pixels that the viewport client is scrolled vertically.
@@ -651,7 +652,7 @@ class SciViewportComponent {
651
652
  * @see Element.scrollTop
652
653
  */
653
654
  set scrollTop(scrollTop) {
654
- this._viewport.scrollTop = scrollTop;
655
+ this._viewportElement.scrollTop = scrollTop;
655
656
  }
656
657
  /**
657
658
  * Returns the number of pixels that the viewport client is scrolled horizontally.
@@ -659,7 +660,7 @@ class SciViewportComponent {
659
660
  * @see Element.scrollLeft
660
661
  */
661
662
  get scrollLeft() {
662
- return this._viewport.scrollLeft;
663
+ return this._viewportElement.scrollLeft;
663
664
  }
664
665
  /**
665
666
  * Sets the number of pixels that the viewport client is scrolled horizontally.
@@ -667,7 +668,7 @@ class SciViewportComponent {
667
668
  * @see Element.scrollLeft
668
669
  */
669
670
  set scrollLeft(scrollLeft) {
670
- this._viewport.scrollLeft = scrollLeft;
671
+ this._viewportElement.scrollLeft = scrollLeft;
671
672
  }
672
673
  /**
673
674
  * Returns the height of the viewport client.
@@ -675,7 +676,7 @@ class SciViewportComponent {
675
676
  * @see Element.scrollHeight
676
677
  */
677
678
  get scrollHeight() {
678
- return this._viewport.scrollHeight;
679
+ return this._viewportElement.scrollHeight;
679
680
  }
680
681
  /**
681
682
  * Returns the width of the viewport client.
@@ -683,13 +684,13 @@ class SciViewportComponent {
683
684
  * @see Element.scrollWidth
684
685
  */
685
686
  get scrollWidth() {
686
- return this._viewport.scrollWidth;
687
+ return this._viewportElement.scrollWidth;
687
688
  }
688
689
  /**
689
690
  * Returns the viewport {HTMLElement}.
690
691
  */
691
692
  get viewportElement() {
692
- return this._viewport;
693
+ return this._viewportElement;
693
694
  }
694
695
  /**
695
696
  * Returns the viewport client {HTMLElement}.
@@ -702,16 +703,18 @@ class SciViewportComponent {
702
703
  *
703
704
  * @param element - the element to be checked
704
705
  * @param fit - control if the element must fully or partially fit into the viewport
706
+ *
707
+ * @throws if the element is not contained in the viewport's slotted content.
705
708
  */
706
709
  isElementInView(element, fit) {
707
710
  const elLeft = this.computeOffset(element, 'left');
708
- const elRight = elLeft + element.offsetWidth;
711
+ const elRight = elLeft + coerceElement(element).offsetWidth;
709
712
  const elTop = this.computeOffset(element, 'top');
710
- const elBottom = elTop + element.offsetHeight;
711
- const vpLeft = this._viewport.scrollLeft;
712
- const vpRight = vpLeft + this._viewport.clientWidth;
713
- const vpTop = this._viewport.scrollTop;
714
- const vpBottom = vpTop + this._viewport.clientHeight;
713
+ const elBottom = elTop + coerceElement(element).offsetHeight;
714
+ const vpLeft = this._viewportElement.scrollLeft;
715
+ const vpRight = vpLeft + this._viewportElement.clientWidth;
716
+ const vpTop = this._viewportElement.scrollTop;
717
+ const vpBottom = vpTop + this._viewportElement.clientHeight;
715
718
  switch (fit) {
716
719
  case 'full':
717
720
  return (elLeft >= vpLeft && elRight <= vpRight) && (elTop >= vpTop && elBottom <= vpBottom);
@@ -726,24 +729,28 @@ class SciViewportComponent {
726
729
  *
727
730
  * @param element - the element to scroll into the viewport
728
731
  * @param offset - the gap between the element and the viewport
732
+ *
733
+ * @throws if the element is not contained in the viewport's slotted content.
729
734
  */
730
735
  scrollIntoView(element, offset = 50) {
731
- this._viewport.scrollTop = this.computeOffset(element, 'top') - offset;
732
- this._viewport.scrollLeft = this.computeOffset(element, 'left') - offset;
736
+ this._viewportElement.scrollTop = this.computeOffset(element, 'top') - offset;
737
+ this._viewportElement.scrollLeft = this.computeOffset(element, 'left') - offset;
733
738
  }
734
739
  /**
735
740
  * Computes the distance of the element to the viewport's left or top border.
741
+ *
742
+ * @throws if the element is not contained in the viewport's slotted content.
736
743
  */
737
744
  computeOffset(element, border) {
738
- if (!isChildOf(element, this._viewport)) {
739
- throw Error('element not a child of the viewport');
740
- }
741
745
  let offset = 0;
742
- let el = element;
746
+ let el = coerceElement(element);
743
747
  do {
744
748
  offset += (border === 'left' ? el.offsetLeft : el.offsetTop);
745
749
  el = el.offsetParent;
746
- } while (el !== null && el !== this._viewport);
750
+ if (el === null) {
751
+ throw Error(`[ElementNotContainedError] Element not contained in the viewport's slotted content`);
752
+ }
753
+ } while (el !== this.host.nativeElement);
747
754
  return offset;
748
755
  }
749
756
  }
@@ -766,18 +773,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImpor
766
773
  type: HostListener,
767
774
  args: ['focus']
768
775
  }] } });
769
- /**
770
- * Returns 'true' if the given element is a child element of the parent element.
771
- */
772
- function isChildOf(element, parent) {
773
- while (element.parentElement !== null) {
774
- element = element.parentElement;
775
- if (element === parent) {
776
- return true;
777
- }
778
- }
779
- return false;
780
- }
781
776
 
782
777
  /*
783
778
  * Copyright (c) 2018-2019 Swiss Federal Railways
@@ -1 +1 @@
1
- {"version":3,"file":"scion-components-viewport.mjs","sources":["../../../../projects/scion/components/viewport/src/native-scrollbar-track-size-provider.service.ts","../../../../projects/scion/components/viewport/src/scrollbar/scrollbar.component.ts","../../../../projects/scion/components/viewport/src/scrollbar/scrollbar.component.html","../../../../projects/scion/components/viewport/src/scrollable.directive.ts","../../../../projects/scion/components/viewport/src/viewport.component.ts","../../../../projects/scion/components/viewport/src/viewport.component.html","../../../../projects/scion/components/viewport/src/viewport.module.ts","../../../../projects/scion/components/viewport/src/public_api.ts","../../../../projects/scion/components/viewport/src/scion-components-viewport.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 {Inject, Injectable, NgZone, OnDestroy} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {BehaviorSubject, fromEvent, Observable, Subject} from 'rxjs';\nimport {debounceTime, distinctUntilChanged, map, startWith, takeUntil} from 'rxjs/operators';\n\n/**\n * Provides the native scrollbar tracksize.\n *\n * @dynamic ignore 'strictMetadataEmit' errors due to the usage of {@link Document} as ambient type for DI.\n */\n@Injectable({providedIn: 'root'})\nexport class SciNativeScrollbarTrackSizeProvider implements OnDestroy {\n\n private readonly _trackSize$ = new BehaviorSubject<NativeScrollbarTrackSize | null>(null);\n private readonly _destroy$ = new Subject<void>();\n\n constructor(@Inject(DOCUMENT) private _document: Document, private _zone: NgZone) {\n this.installNativeScrollbarTrackSizeListener();\n }\n\n /**\n * Returns an {Observable} which emits the native scrollbar track size, if any, or else `null`.\n *\n * Upon subscription, it emits the track size immediately, and then continuously emits when the track size changes.\n */\n public get trackSize$(): Observable<NativeScrollbarTrackSize | null> {\n return this._trackSize$;\n }\n\n /**\n * Returns the native scrollbar track size, if any, or else `null`.\n */\n public get trackSize(): NativeScrollbarTrackSize | null {\n return this._trackSize$.getValue();\n }\n\n /**\n * Computes the native scrollbar track size.\n *\n * @returns native track size, or `null` if the native scrollbars sit on top of the content.\n */\n private computeTrackSize(): NativeScrollbarTrackSize | null {\n // create temporary viewport and viewport client with native scrollbars to compute scrolltrack width\n const viewportDiv = this._document.createElement('div');\n setStyle(viewportDiv, {\n position: 'absolute',\n overflow: 'scroll',\n height: '100px',\n width: '100px',\n border: 0,\n visibility: 'hidden',\n });\n\n const viewportClientDiv = this._document.createElement('div');\n setStyle(viewportClientDiv, {\n height: '100%',\n width: '100%',\n border: 0,\n });\n\n viewportDiv.appendChild(viewportClientDiv);\n this._document.body.appendChild(viewportDiv);\n\n const trackSize: NativeScrollbarTrackSize = {\n hScrollbarTrackHeight: viewportDiv.offsetHeight - viewportClientDiv.offsetHeight,\n vScrollbarTrackWidth: viewportDiv.offsetWidth - viewportClientDiv.offsetWidth,\n };\n\n // destroy temporary viewport\n this._document.body.removeChild(viewportDiv);\n if (trackSize.hScrollbarTrackHeight === 0 && trackSize.vScrollbarTrackWidth === 0) {\n return null;\n }\n\n return trackSize;\n }\n\n private installNativeScrollbarTrackSizeListener(): void {\n // We compute the size of the native scrollbar track when the browser fires the onresize window event.\n // This event is also fired on page zoom or when displaying a hidden document. Hidden documents do not have\n // a scrollbar track size until being displayed, e.g., after showing hidden iframes.\n this._zone.runOutsideAngular(() => {\n fromEvent(window, 'resize')\n .pipe(\n debounceTime(5),\n startWith(null), // trigger the initial computation\n map(() => this.computeTrackSize()),\n distinctUntilChanged((t1, t2) => JSON.stringify(t1) === JSON.stringify(t2)),\n takeUntil(this._destroy$),\n )\n .subscribe(trackSize => {\n this._zone.run(() => this._trackSize$.next(trackSize));\n });\n });\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n }\n}\n\n/**\n * Applies the given style(s) to the given element.\n *\n * Specify styles to be modified by passing a dictionary containing CSS property names (hyphen case).\n * To remove a style, set its value to `null`.\n *\n * @ignore\n */\nfunction setStyle(element: HTMLElement, style: {[style: string]: any | null}): void {\n Object.keys(style).forEach(key => element.style.setProperty(key, style[key]));\n}\n\n/**\n * Represents the native scrollbar track size.\n */\nexport interface NativeScrollbarTrackSize {\n hScrollbarTrackHeight: number;\n vScrollbarTrackWidth: number;\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 {DOCUMENT} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, ElementRef, HostBinding, Inject, Input, NgZone, OnDestroy, ViewChild} from '@angular/core';\nimport {fromEvent, merge, Observable, of, Subject, timer} from 'rxjs';\nimport {debounceTime, first, map, startWith, switchMap, takeUntil, takeWhile, withLatestFrom} from 'rxjs/operators';\nimport {fromDimension$, fromMutation$} from '@scion/toolkit/observable';\nimport {filterArray, subscribeInside} from '@scion/toolkit/operators';\n\n/**\n * Renders a vertical or horizontal scrollbar.\n *\n * The scrollbar features the following functionality:\n * - allows to move the thumb by mouse or touch\n * - enlarges the thumb if the mouse pointer is near the thumb\n * - allows paging on mousedown on the scroll track\n *\n * ### CSS styling:\n *\n * You can override the following CSS variables:\n *\n * - sci-scrollbar-color: Sets the color of the scrollbar (by default, uses `rgb(78, 78, 78)`).\n *\n * Example:\n *\n * ```css\n *\n * sci-scrollbar {\n * --sci-scrollbar-color: blue;\n * }\n * ```\n */\n@Component({\n selector: 'sci-scrollbar',\n templateUrl: './scrollbar.component.html',\n styleUrls: ['./scrollbar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SciScrollbarComponent implements OnDestroy {\n\n /**\n * Timeout for debouncing viewport resize events that trigger the scroll position computation.\n *\n * Debouncing is particularly important in the context of Angular animations, since they continuously\n * trigger resize events. Debouncing prevents the scrollbar from flickering, for example, when the user\n * expands a panel that contains a viewport.\n *\n * @internal\n */\n public static readonly VIEWPORT_RESIZE_DEBOUNCE_TIME = 50;\n\n private _destroy$ = new Subject<void>();\n private _viewport!: HTMLElement;\n private _viewportChange$ = new Subject<void>();\n private _lastDragPosition: number | null = null;\n\n private _overflow = false;\n private _thumbSizeFr = 0;\n private _thumbPositionFr = 0;\n\n /* @docs-private */\n @ViewChild('thumb_handle', {static: true})\n public thumbElement!: ElementRef<HTMLDivElement>;\n\n @HostBinding('class.vertical')\n public get vertical(): boolean {\n return this.direction === 'vscroll';\n }\n\n @HostBinding('class.horizontal')\n public get horizontal(): boolean {\n return this.direction === 'hscroll';\n }\n\n @HostBinding('class.scrolling')\n public get scrolling(): boolean {\n return this._lastDragPosition !== null;\n }\n\n /**\n * Specifies the direction of the scrollbar.\n *\n * By default, if not specified, renders a vertical scrollbar.\n */\n @Input()\n public direction: 'vscroll' | 'hscroll' = 'vscroll';\n\n /**\n * The viewport to provide scrollbars for.\n */\n @Input('viewport') // eslint-disable-line @angular-eslint/no-input-rename\n public set setViewport(viewport: HTMLElement) {\n this._viewport = viewport;\n this._viewportChange$.next();\n }\n\n constructor(private _host: ElementRef<HTMLElement>,\n @Inject(DOCUMENT) private _document: any,\n private _zone: NgZone) {\n this._viewportChange$\n .pipe(\n switchMap(() => {\n if (!this._viewport) {\n return of(undefined);\n }\n return merge(\n this.viewportScrollChange$(),\n this.viewportDimensionChange$({debounceTime: SciScrollbarComponent.VIEWPORT_RESIZE_DEBOUNCE_TIME}),\n this.viewportClientDimensionChange$({debounceTime: SciScrollbarComponent.VIEWPORT_RESIZE_DEBOUNCE_TIME}),\n );\n }),\n subscribeInside(continueFn => this._zone.runOutsideAngular(continueFn)),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n if (this._viewport) {\n this.renderScrollPosition();\n }\n else {\n this.unsetScrollPosition();\n }\n });\n }\n\n /**\n * Computes the scroll position and updates CSS variables to render the scroll position in the UI.\n */\n private renderScrollPosition(): void {\n NgZone.assertNotInAngularZone();\n const viewportSize = this.viewportSize;\n const viewportClientSize = this.viewportClientSize;\n const thumbPositionFr = this.scrollPosition / viewportClientSize;\n const thumbSizeFr = viewportSize / viewportClientSize;\n const overflow = viewportClientSize > viewportSize;\n\n if (thumbPositionFr !== this._thumbPositionFr || thumbSizeFr !== this._thumbSizeFr) {\n this._thumbPositionFr = thumbPositionFr;\n this._thumbSizeFr = thumbSizeFr;\n this.setCssVariable('--ɵsci-scrollbar-thumb-position-fr', thumbPositionFr);\n this.setCssVariable('--ɵsci-scrollbar-thumb-size-fr', thumbSizeFr);\n }\n\n if (overflow !== this._overflow) {\n this._overflow = overflow;\n overflow ? this._host.nativeElement.classList.add('overflow') : this._host.nativeElement.classList.remove('overflow');\n }\n }\n\n /**\n * Clears CSS variables used for rendering the scroll position in the UI.\n */\n private unsetScrollPosition(): void {\n NgZone.assertNotInAngularZone();\n this._thumbPositionFr = 0;\n this._thumbSizeFr = 0;\n this._overflow = false;\n this.setCssVariable('--ɵsci-scrollbar-thumb-position-fr', 0);\n this.setCssVariable('--ɵsci-scrollbar-thumb-size-fr', 0);\n this._host.nativeElement.classList.remove('overflow');\n }\n\n /* @docs-private */\n public onTouchStart(event: TouchEvent): void {\n event.preventDefault();\n this._lastDragPosition = this.vertical ? event.touches[0].screenY : event.touches[0].screenX;\n }\n\n /* @docs-private */\n public onTouchMove(event: TouchEvent): void {\n event.preventDefault();\n\n const newDragPositionPx = this.vertical ? event.touches[0].screenY : event.touches[0].screenX;\n const scrollbarPanPx = newDragPositionPx - this._lastDragPosition!;\n const viewportPanPx = this.toViewportPanPx(scrollbarPanPx);\n this._lastDragPosition = newDragPositionPx;\n this.moveViewportClient(viewportPanPx);\n }\n\n /* @docs-private */\n public onTouchEnd(event: TouchEvent): void {\n event.preventDefault();\n this._lastDragPosition = null;\n }\n\n /* @docs-private */\n public onMouseDown(mousedownEvent: MouseEvent): void {\n if (mousedownEvent.button !== 0) {\n return;\n }\n\n mousedownEvent.preventDefault();\n this._lastDragPosition = this.vertical ? mousedownEvent.screenY : mousedownEvent.screenX;\n\n // Listen for 'mousemove' events\n this._zone.runOutsideAngular(() => {\n const mousemoveListener = merge(fromEvent<MouseEvent>(this._document, 'mousemove'), fromEvent<MouseEvent>(this._document, 'sci-mousemove'))\n .pipe(takeUntil(this._destroy$))\n .subscribe(mousemoveEvent => {\n mousemoveEvent.preventDefault();\n\n const newDragPositionPx = this.vertical ? mousemoveEvent.screenY : mousemoveEvent.screenX;\n const scrollbarPanPx = newDragPositionPx - this._lastDragPosition!;\n const viewportPanPx = this.toViewportPanPx(scrollbarPanPx);\n this._lastDragPosition = newDragPositionPx;\n this.moveViewportClient(viewportPanPx);\n });\n\n // Listen for 'mouseup' events; use 'capture phase' and 'stop propagation' to not close overlays\n merge(fromEvent<MouseEvent>(this._document, 'mouseup', {capture: true}), fromEvent<MouseEvent>(this._document, 'sci-mouseup'))\n .pipe(first(), takeUntil(this._destroy$))\n .subscribe(mouseupEvent => {\n mouseupEvent.stopPropagation();\n mousemoveListener.unsubscribe();\n this._lastDragPosition = null;\n });\n });\n }\n\n /* @docs-private */\n public onScrollTrackMouseDown(event: MouseEvent, direction: 'up' | 'down'): void {\n const signum = (direction === 'up' ? -1 : +1);\n this.scrollWhileMouseDown(this.toViewportPanPx(signum * this.thumbSize), event);\n }\n\n /**\n * Projects the given scrollbar scroll pixels into viewport scroll pixels.\n */\n private toViewportPanPx(scrollbarPanPx: number): number {\n const scrollRangePx = this.trackSize - this.thumbSize;\n const scrollRatio = scrollbarPanPx / scrollRangePx;\n return scrollRatio * (this.viewportClientSize - this.viewportSize);\n }\n\n /**\n * Moves the viewport client by the specified numbers of pixels.\n */\n private moveViewportClient(viewportPanPx: number): void {\n if (this.vertical) {\n this._viewport.scrollTop += viewportPanPx;\n }\n else {\n this._viewport.scrollLeft += viewportPanPx;\n }\n }\n\n /**\n * Indicates if the content overflows.\n */\n public get overflow(): boolean {\n return this._overflow;\n }\n\n /**\n * Scrolls continuously while holding the mouse pressed, or until the mouse leaves the scrolltrack.\n */\n private scrollWhileMouseDown(viewportScrollPx: number, mousedownEvent: MouseEvent): void {\n // The `EventTarget` type of `Event.target` is not yet compatible with `FromEventTarget` used in `fromEvent`.\n // This will be fixed in rxjs version 7.0.0. Refer to https://github.com/ReactiveX/rxjs/commit/5f022d784570684632e6fd5ae247fc259ee34c4b\n // for more details.\n const scrollTrackElement = mousedownEvent.target as Element;\n\n // scroll continuously every 50ms after an initial delay of 250ms\n timer(250, 50)\n .pipe(\n // continue chain with latest mouse event\n withLatestFrom(merge(of(mousedownEvent), fromEvent<MouseEvent>(scrollTrackElement, 'mousemove')), (tick, event) => event),\n // start immediately\n startWith(mousedownEvent),\n // stop scrolling if the thumb hits the mouse pointer position\n takeWhile((event: MouseEvent) => scrollTrackElement === this._document.elementFromPoint(event.clientX, event.clientY)),\n debounceTime(10),\n // stop scrolling on mouseout or mouseup\n takeUntil(merge(fromEvent(scrollTrackElement, 'mouseout'), fromEvent(scrollTrackElement, 'mouseup'))),\n )\n .subscribe(() => {\n this.moveViewportClient(viewportScrollPx);\n });\n }\n\n /**\n * Emits whenever the viewport scrolls.\n */\n private viewportScrollChange$(): Observable<void> {\n return fromEvent(this._viewport, 'scroll', {passive: true}).pipe(map(() => undefined));\n }\n\n /**\n * Emits on subscription, and then each time the size of the viewport changes.\n */\n private viewportDimensionChange$(options: {debounceTime: number}): Observable<void> {\n return fromDimension$(this._viewport)\n .pipe(\n // Debouncing is particularly important in the context of Angular animations, since they continuously\n // trigger resize events. Debouncing prevents the scrollbar from flickering, for example, when the user\n // expands a panel that contains a viewport.\n debounceTime(options.debounceTime),\n map(() => undefined),\n );\n }\n\n /**\n * Emits on subscription, and then each time the size or style property of the viewport client changes.\n */\n private viewportClientDimensionChange$(options: {debounceTime: number}): Observable<void> {\n return this.children$(this._viewport)\n .pipe(\n switchMap(children => merge(...children.map(child => merge(\n fromDimension$(child),\n // Observe style mutations since some transformations change the scroll position without necessarily triggering a dimension change,\n // e.g., `scale` or `translate` used by some virtual scroll implementations\n fromMutation$(child, {subtree: false, childList: false, attributeFilter: ['style']})),\n ))),\n // Debouncing is particularly important in the context of Angular animations, since they continuously\n // trigger resize events. Debouncing prevents the scrollbar from flickering, for example, when the user\n // expands a panel that contains a viewport.\n debounceTime(options.debounceTime),\n map(() => undefined),\n );\n }\n\n /**\n * Emits the children of the passed element, and then each time child elements are added or removed.\n */\n private children$(element: HTMLElement): Observable<HTMLElement[]> {\n return fromMutation$(element, {subtree: false, childList: true})\n .pipe(\n startWith(undefined as void),\n map(() => Array.from(element.children)),\n filterArray((child: Element): child is HTMLElement => child instanceof HTMLElement),\n );\n }\n\n private setCssVariable(key: string, value: any): void {\n this._host.nativeElement.style.setProperty(key, value);\n }\n\n private get viewportSize(): number {\n return this._viewport ? (this.vertical ? this._viewport.clientHeight : this._viewport.clientWidth) : 0;\n }\n\n private get viewportClientSize(): number {\n return this._viewport ? (this.vertical ? this._viewport.scrollHeight : this._viewport.scrollWidth) : 0;\n }\n\n private get scrollPosition(): number {\n return this._viewport ? (this.vertical ? this._viewport.scrollTop : this._viewport.scrollLeft) : 0;\n }\n\n private get thumbSize(): number {\n const thumbElement = this.thumbElement.nativeElement;\n return this.vertical ? thumbElement.clientHeight : thumbElement.clientWidth;\n }\n\n private get trackSize(): number {\n const trackElement = this._host.nativeElement;\n return this.vertical ? trackElement.clientHeight : trackElement.clientWidth;\n }\n\n /* @docs-private */\n public ngOnDestroy(): void {\n this._destroy$.next();\n }\n}\n","<!-- scrolltrack to move the viewport client upwards (paging) -->\n<div class=\"scrolltrack-start\" (mousedown)=\"onScrollTrackMouseDown($event, 'up')\"></div>\n\n<!-- scrollthumb -->\n<div #thumb_handle\n class=\"thumb-handle\"\n [class.vertical]=\"vertical\"\n [class.horizontal]=\"horizontal\"\n (mousedown)=\"onMouseDown($event)\"\n (touchstart)=\"onTouchStart($event)\"\n (touchmove)=\"onTouchMove($event)\"\n (touchend)=\"onTouchEnd($event)\"\n (touchcancel)=\"onTouchEnd($event)\">\n <div class=\"thumb\"\n [class.vertical]=\"vertical\"\n [class.horizontal]=\"horizontal\">\n </div>\n</div>\n\n<!-- scrolltrack to move the viewport client downwards (paging) -->\n<div class=\"scrolltrack-end\" (mousedown)=\"onScrollTrackMouseDown($event, 'down')\"></div>\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 {Directive, ElementRef, Input, OnChanges, OnDestroy, Renderer2, SimpleChanges} from '@angular/core';\nimport {NativeScrollbarTrackSize, SciNativeScrollbarTrackSizeProvider} from './native-scrollbar-track-size-provider.service';\nimport {map, takeUntil} from 'rxjs/operators';\nimport {merge, Subject} from 'rxjs';\nimport {Dictionary} from '@scion/toolkit/util';\n\n/**\n * Makes the host element natively scrollable and hides native scrollbars by default, unless native scrollbars\n * already sit on top of the viewport (e.g. in OS X).\n *\n * Because there is no cross-browser API to hide scrollbars without losing native scroll support, we set 'overflow'\n * to 'scroll' but shift the native scrollbars out of the visible viewport area. The shift offset is computed upfront.\n *\n * This directive expects its host element to be the only child in document flow in its parent DOM element. It makes the host element\n * fill up the entire space (width and height set to 100%). The parent element must have its CSS `overflow` property set to `hidden`\n * to hide the pushed out native scrollbars.\n */\n@Directive({\n selector: '[sciScrollable]',\n})\nexport class SciScrollableDirective implements OnChanges, OnDestroy {\n\n private _destroy$ = new Subject<void>();\n private _inputChange$ = new Subject<void>();\n\n /**\n * Controls whether to display native scrollbars.\n * Has no effect if the native scrollbar sits on top of the content, e.g. in OS X.\n */\n @Input('sciScrollableDisplayNativeScrollbar') // eslint-disable-line @angular-eslint/no-input-rename\n public isDisplayNativeScrollbar: boolean = false;\n\n constructor(private _host: ElementRef<HTMLDivElement>,\n private _renderer: Renderer2,\n nativeScrollbarTrackSizeProvider: SciNativeScrollbarTrackSizeProvider) {\n merge(\n nativeScrollbarTrackSizeProvider.trackSize$,\n this._inputChange$.pipe(map(() => nativeScrollbarTrackSizeProvider.trackSize)),\n )\n .pipe(takeUntil(this._destroy$))\n .subscribe(nativeScrollbarTrackSize => {\n if (nativeScrollbarTrackSize === null) { // the native scrollbar sits on top of the content\n this.useNativeScrollbars();\n }\n else {\n this.isDisplayNativeScrollbar ? this.useNativeScrollbars() : this.shiftNativeScrollbars(nativeScrollbarTrackSize);\n }\n });\n }\n\n /**\n * Uses the native scrollbars when content overflows.\n */\n private useNativeScrollbars(): void {\n this.setStyle(this._host.nativeElement, {\n overflow: 'auto',\n width: '100%',\n height: '100%',\n marginRight: 0,\n marginBottom: 0,\n });\n }\n\n /**\n * Shifts the native scrollbars out of the visible viewport area.\n */\n private shiftNativeScrollbars(nativeScrollbarTrackSize: NativeScrollbarTrackSize): void {\n this.setStyle(this._host.nativeElement, {\n overflow: 'scroll',\n width: `calc(100% + ${nativeScrollbarTrackSize.vScrollbarTrackWidth}px`,\n height: `calc(100% + ${nativeScrollbarTrackSize.hScrollbarTrackHeight}px`,\n marginRight: `-${nativeScrollbarTrackSize.vScrollbarTrackWidth}px`,\n marginBottom: `-${nativeScrollbarTrackSize.hScrollbarTrackHeight}px`,\n });\n }\n\n private setStyle(element: Element, style: Dictionary): void {\n Object.keys(style).forEach(key => this._renderer.setStyle(element, key, style[key]));\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this._inputChange$.next();\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\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 {Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild, ViewEncapsulation} from '@angular/core';\nimport {SciNativeScrollbarTrackSizeProvider} from './native-scrollbar-track-size-provider.service';\nimport {coerceElement} from '@angular/cdk/coercion';\n\n/**\n * Represents a viewport with slotted content (`<ng-content>`) used as scrollable content. By default, content is added to a CSS grid layout.\n *\n * The viewport component displays scrollbars when its content overflows. Scrollbars are displayed on top of the content, not next to it.\n * 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.\n * The viewport remains natively scrollable with the native scrollbars shifted out of the viewport's visible area. Consequently, the viewport keeps supporting\n * native scrolling features such as touch gestures, scroll speed acceleration, or scrolling near the viewport edges during drag-and-drop operations.\n *\n * ```html\n * <sci-viewport>\n * your content\n * </sci-viewport>\n * ```\n *\n * ## Adding the viewport to a layout\n *\n * Typically you would add the viewport component to a flexible layout, filling the remaining space vertically and horizontally, such as a flexbox container\n * with the viewport's `flex` CSS property set to either `flex: auto` or `flex: 1 1 0`.\n *\n * 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\n * a layout constraint. Depending on the layout, different steps may be necessary to prevent the viewport from growing to infinity.\n *\n * - If practical, give the viewport a fixed size or a maximum size.\n * - 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,\n * 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\n * `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\n * the remaining extra space is distributed. If the viewport does not appear after setting this property, check its parent elements' content sizes.\n * 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`.\n * Another approach would be to set the minimum height of all parents to `0`, as follows: `min-height: 0`.\n *\n * For the complete documentation on the flex layout and its features, refer to https://developer.mozilla.org/en-US/docs/Web/CSS/flex.\n *\n *\n * ## Layouting the viewport's slotted content\n *\n * By default, the viewport's content is added to a CSS grid container with a single column, filling remaining space vertically and horizontally.\n * 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.\n *\n * #### Example of adding slotted content to a CSS flex container.\n * ```css\n * sci-viewport::part(content) {\n * display: flex;\n * flex-direction: column;\n * }\n * ```\n *\n * #### Example of configuring CSS grid container with two columns\n * ```css\n * sci-viewport::part(content) {\n * grid-template-columns: 1fr 1fr;\n * gap: 1em;\n * }\n * ```\n *\n * ## Styling of scrollbars\n *\n * You can override the following CSS variables to control the appearance of the scrollbar:\n *\n * - sci-viewport-scrollbar-color: Sets the color of the scrollbar (by default, uses `rgb(78, 78, 78)`).\n *\n * ```css\n * sci-viewport {\n * --sci-viewport-scrollbar-color: blue;\n * }\n * ```\n */\n@Component({\n selector: 'sci-viewport',\n templateUrl: './viewport.component.html',\n styleUrls: ['./viewport.component.scss'],\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class SciViewportComponent {\n\n private _viewport!: HTMLDivElement;\n private _viewportClient!: HTMLDivElement;\n private _scrollbarStyle: ScrollbarStyle = 'on-top';\n\n /** @internal */\n @ViewChild('viewport', {static: true})\n public set setViewport(viewport: ElementRef<HTMLDivElement>) {\n this._viewport = coerceElement(viewport);\n }\n\n /** @internal */\n @ViewChild('viewport_client', {static: true})\n public set setViewportClient(viewportClient: ElementRef<HTMLDivElement>) {\n this._viewportClient = coerceElement(viewportClient);\n }\n\n /**\n * Controls whether to use native scrollbars or, which is by default, emulated scrollbars that sit on top of the viewport client.\n * In the latter, the viewport client remains natively scrollable.\n */\n @Input()\n public set scrollbarStyle(scrollbarStyle: ScrollbarStyle) {\n this._scrollbarStyle = scrollbarStyle || 'on-top';\n }\n\n public get scrollbarStyle(): ScrollbarStyle {\n return this._scrollbarStyle;\n }\n\n /**\n * Emits upon a scroll event.\n *\n * You can add [sciDimension] directive to the viewport or viewport client to be notified about layout changes.\n */\n @Output()\n public scroll = new EventEmitter<Event>(); // eslint-disable-line @angular-eslint/no-output-native\n\n constructor(public host: ElementRef<HTMLElement>, public nativeScrollbarTrackSizeProvider: SciNativeScrollbarTrackSizeProvider) {\n }\n\n @HostListener('focus')\n public focus(): void { // do not rename to expose the same focus method like `HTMLElement.focus()`.\n this._viewport && this._viewport.focus();\n }\n\n public onScroll(event: Event): void {\n this.scroll.emit(event);\n }\n\n /**\n * Returns the number of pixels that the viewport client is scrolled vertically.\n *\n * @see Element.scrollTop\n */\n public get scrollTop(): number {\n return this._viewport.scrollTop;\n }\n\n /**\n * Sets the number of pixels that the viewport client is scrolled vertically.\n *\n * @see Element.scrollTop\n */\n public set scrollTop(scrollTop: number) {\n this._viewport.scrollTop = scrollTop;\n }\n\n /**\n * Returns the number of pixels that the viewport client is scrolled horizontally.\n *\n * @see Element.scrollLeft\n */\n public get scrollLeft(): number {\n return this._viewport.scrollLeft;\n }\n\n /**\n * Sets the number of pixels that the viewport client is scrolled horizontally.\n *\n * @see Element.scrollLeft\n */\n public set scrollLeft(scrollLeft: number) {\n this._viewport.scrollLeft = scrollLeft;\n }\n\n /**\n * Returns the height of the viewport client.\n *\n * @see Element.scrollHeight\n */\n public get scrollHeight(): number {\n return this._viewport.scrollHeight;\n }\n\n /**\n * Returns the width of the viewport client.\n *\n * @see Element.scrollWidth\n */\n public get scrollWidth(): number {\n return this._viewport.scrollWidth;\n }\n\n /**\n * Returns the viewport {HTMLElement}.\n */\n public get viewportElement(): HTMLElement {\n return this._viewport;\n }\n\n /**\n * Returns the viewport client {HTMLElement}.\n */\n public get viewportClientElement(): HTMLElement {\n return this._viewportClient;\n }\n\n /**\n * Checks if the specified element is scrolled into the viewport.\n *\n * @param element - the element to be checked\n * @param fit - control if the element must fully or partially fit into the viewport\n */\n public isElementInView(element: HTMLElement, fit: 'full' | 'partial'): boolean {\n const elLeft = this.computeOffset(element, 'left');\n const elRight = elLeft + element.offsetWidth;\n const elTop = this.computeOffset(element, 'top');\n const elBottom = elTop + element.offsetHeight;\n\n const vpLeft = this._viewport.scrollLeft;\n const vpRight = vpLeft + this._viewport.clientWidth;\n const vpTop = this._viewport.scrollTop;\n const vpBottom = vpTop + this._viewport.clientHeight;\n\n switch (fit) {\n case 'full':\n return (elLeft >= vpLeft && elRight <= vpRight) && (elTop >= vpTop && elBottom <= vpBottom);\n case 'partial':\n return (elRight >= vpLeft && elLeft <= vpRight) && (elBottom >= vpTop && elTop <= vpBottom);\n default:\n throw Error('Unsupported fit strategy');\n }\n }\n\n /**\n * Scrolls the specified element into the viewport.\n *\n * @param element - the element to scroll into the viewport\n * @param offset - the gap between the element and the viewport\n */\n public scrollIntoView(element: HTMLElement, offset: number = 50): void {\n this._viewport.scrollTop = this.computeOffset(element, 'top') - offset;\n this._viewport.scrollLeft = this.computeOffset(element, 'left') - offset;\n }\n\n /**\n * Computes the distance of the element to the viewport's left or top border.\n */\n public computeOffset(element: HTMLElement, border: 'left' | 'top'): number {\n if (!isChildOf(element, this._viewport)) {\n throw Error('element not a child of the viewport');\n }\n\n let offset = 0;\n let el = element;\n do {\n offset += (border === 'left' ? el.offsetLeft : el.offsetTop);\n el = el.offsetParent as HTMLElement;\n } while (el !== null && el !== this._viewport);\n\n return offset;\n }\n}\n\n/**\n * Returns 'true' if the given element is a child element of the parent element.\n */\nfunction isChildOf(element: Element, parent: Element): boolean {\n while (element.parentElement !== null) {\n element = element.parentElement;\n if (element === parent) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Represents a scrollbar style.\n */\nexport type ScrollbarStyle = 'native' | 'on-top' | 'hidden';\n","<!-- 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\"></sci-scrollbar>\n <sci-scrollbar [direction]=\"'hscroll'\" [viewport]=\"viewport\"></sci-scrollbar>\n</ng-container>\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 {SciViewportComponent} from './viewport.component';\nimport {SciScrollbarComponent} from './scrollbar/scrollbar.component';\nimport {SciScrollableDirective} from './scrollable.directive';\nimport {ScrollingModule} from '@angular/cdk/scrolling';\n\n/**\n * Provides a viewport component with scrollbars that sit on top of the viewport client.\n */\n@NgModule({\n imports: [\n CommonModule,\n ScrollingModule,\n ],\n declarations: [\n SciViewportComponent,\n SciScrollbarComponent,\n SciScrollableDirective,\n ],\n exports: [\n SciViewportComponent,\n SciScrollbarComponent,\n SciScrollableDirective,\n ],\n})\nexport class SciViewportModule {\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/viewport'\n *\n * @see https://github.com/ng-packagr/ng-packagr/blob/master/docs/secondary-entrypoints.md\n */\nexport {SciViewportModule} from './viewport.module';\nexport * from './viewport.component';\nexport * from './scrollable.directive';\nexport * from './scrollbar/scrollbar.component';\nexport * from './native-scrollbar-track-size-provider.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.SciNativeScrollbarTrackSizeProvider","i4.SciScrollbarComponent","i5.SciScrollableDirective"],"mappings":"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"}
1
+ {"version":3,"file":"scion-components-viewport.mjs","sources":["../../../../projects/scion/components/viewport/src/native-scrollbar-track-size-provider.service.ts","../../../../projects/scion/components/viewport/src/scrollbar/scrollbar.component.ts","../../../../projects/scion/components/viewport/src/scrollbar/scrollbar.component.html","../../../../projects/scion/components/viewport/src/scrollable.directive.ts","../../../../projects/scion/components/viewport/src/viewport.component.ts","../../../../projects/scion/components/viewport/src/viewport.component.html","../../../../projects/scion/components/viewport/src/viewport.module.ts","../../../../projects/scion/components/viewport/src/public_api.ts","../../../../projects/scion/components/viewport/src/scion-components-viewport.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 {Inject, Injectable, NgZone, OnDestroy} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {BehaviorSubject, fromEvent, Observable, Subject} from 'rxjs';\nimport {debounceTime, distinctUntilChanged, map, startWith, takeUntil} from 'rxjs/operators';\n\n/**\n * Provides the native scrollbar tracksize.\n *\n * @dynamic ignore 'strictMetadataEmit' errors due to the usage of {@link Document} as ambient type for DI.\n */\n@Injectable({providedIn: 'root'})\nexport class SciNativeScrollbarTrackSizeProvider implements OnDestroy {\n\n private readonly _trackSize$ = new BehaviorSubject<NativeScrollbarTrackSize | null>(null);\n private readonly _destroy$ = new Subject<void>();\n\n constructor(@Inject(DOCUMENT) private _document: Document, private _zone: NgZone) {\n this.installNativeScrollbarTrackSizeListener();\n }\n\n /**\n * Returns an {Observable} which emits the native scrollbar track size, if any, or else `null`.\n *\n * Upon subscription, it emits the track size immediately, and then continuously emits when the track size changes.\n */\n public get trackSize$(): Observable<NativeScrollbarTrackSize | null> {\n return this._trackSize$;\n }\n\n /**\n * Returns the native scrollbar track size, if any, or else `null`.\n */\n public get trackSize(): NativeScrollbarTrackSize | null {\n return this._trackSize$.getValue();\n }\n\n /**\n * Computes the native scrollbar track size.\n *\n * @returns native track size, or `null` if the native scrollbars sit on top of the content.\n */\n private computeTrackSize(): NativeScrollbarTrackSize | null {\n // create temporary viewport and viewport client with native scrollbars to compute scrolltrack width\n const viewportDiv = this._document.createElement('div');\n setStyle(viewportDiv, {\n position: 'absolute',\n overflow: 'scroll',\n height: '100px',\n width: '100px',\n border: 0,\n visibility: 'hidden',\n });\n\n const viewportClientDiv = this._document.createElement('div');\n setStyle(viewportClientDiv, {\n height: '100%',\n width: '100%',\n border: 0,\n });\n\n viewportDiv.appendChild(viewportClientDiv);\n this._document.body.appendChild(viewportDiv);\n\n const trackSize: NativeScrollbarTrackSize = {\n hScrollbarTrackHeight: viewportDiv.offsetHeight - viewportClientDiv.offsetHeight,\n vScrollbarTrackWidth: viewportDiv.offsetWidth - viewportClientDiv.offsetWidth,\n };\n\n // destroy temporary viewport\n this._document.body.removeChild(viewportDiv);\n if (trackSize.hScrollbarTrackHeight === 0 && trackSize.vScrollbarTrackWidth === 0) {\n return null;\n }\n\n return trackSize;\n }\n\n private installNativeScrollbarTrackSizeListener(): void {\n // We compute the size of the native scrollbar track when the browser fires the onresize window event.\n // This event is also fired on page zoom or when displaying a hidden document. Hidden documents do not have\n // a scrollbar track size until being displayed, e.g., after showing hidden iframes.\n this._zone.runOutsideAngular(() => {\n fromEvent(window, 'resize')\n .pipe(\n debounceTime(5),\n startWith(null), // trigger the initial computation\n map(() => this.computeTrackSize()),\n distinctUntilChanged((t1, t2) => JSON.stringify(t1) === JSON.stringify(t2)),\n takeUntil(this._destroy$),\n )\n .subscribe(trackSize => {\n this._zone.run(() => this._trackSize$.next(trackSize));\n });\n });\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n }\n}\n\n/**\n * Applies the given style(s) to the given element.\n *\n * Specify styles to be modified by passing a dictionary containing CSS property names (hyphen case).\n * To remove a style, set its value to `null`.\n *\n * @ignore\n */\nfunction setStyle(element: HTMLElement, style: {[style: string]: any | null}): void {\n Object.keys(style).forEach(key => element.style.setProperty(key, style[key]));\n}\n\n/**\n * Represents the native scrollbar track size.\n */\nexport interface NativeScrollbarTrackSize {\n hScrollbarTrackHeight: number;\n vScrollbarTrackWidth: number;\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 {DOCUMENT} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, ElementRef, HostBinding, Inject, Input, NgZone, OnDestroy, ViewChild} from '@angular/core';\nimport {fromEvent, merge, Observable, of, Subject, timer} from 'rxjs';\nimport {debounceTime, first, map, startWith, switchMap, takeUntil, takeWhile, withLatestFrom} from 'rxjs/operators';\nimport {fromDimension$, fromMutation$} from '@scion/toolkit/observable';\nimport {filterArray, subscribeInside} from '@scion/toolkit/operators';\n\n/**\n * Renders a vertical or horizontal scrollbar.\n *\n * The scrollbar features the following functionality:\n * - allows to move the thumb by mouse or touch\n * - enlarges the thumb if the mouse pointer is near the thumb\n * - allows paging on mousedown on the scroll track\n *\n * ### CSS styling:\n *\n * You can override the following CSS variables:\n *\n * - sci-scrollbar-color: Sets the color of the scrollbar (by default, uses `rgb(78, 78, 78)`).\n *\n * Example:\n *\n * ```css\n *\n * sci-scrollbar {\n * --sci-scrollbar-color: blue;\n * }\n * ```\n */\n@Component({\n selector: 'sci-scrollbar',\n templateUrl: './scrollbar.component.html',\n styleUrls: ['./scrollbar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SciScrollbarComponent implements OnDestroy {\n\n /**\n * Timeout for debouncing viewport resize events that trigger the scroll position computation.\n *\n * Debouncing is particularly important in the context of Angular animations, since they continuously\n * trigger resize events. Debouncing prevents the scrollbar from flickering, for example, when the user\n * expands a panel that contains a viewport.\n *\n * @internal\n */\n public static readonly VIEWPORT_RESIZE_DEBOUNCE_TIME = 50;\n\n private _destroy$ = new Subject<void>();\n private _viewport!: HTMLElement;\n private _viewportChange$ = new Subject<void>();\n private _lastDragPosition: number | null = null;\n\n private _overflow = false;\n private _thumbSizeFr = 0;\n private _thumbPositionFr = 0;\n\n /* @docs-private */\n @ViewChild('thumb_handle', {static: true})\n public thumbElement!: ElementRef<HTMLDivElement>;\n\n @HostBinding('class.vertical')\n public get vertical(): boolean {\n return this.direction === 'vscroll';\n }\n\n @HostBinding('class.horizontal')\n public get horizontal(): boolean {\n return this.direction === 'hscroll';\n }\n\n @HostBinding('class.scrolling')\n public get scrolling(): boolean {\n return this._lastDragPosition !== null;\n }\n\n /**\n * Specifies the direction of the scrollbar.\n *\n * By default, if not specified, renders a vertical scrollbar.\n */\n @Input()\n public direction: 'vscroll' | 'hscroll' = 'vscroll';\n\n /**\n * The viewport to provide scrollbars for.\n */\n @Input('viewport') // eslint-disable-line @angular-eslint/no-input-rename\n public set setViewport(viewport: HTMLElement) {\n this._viewport = viewport;\n this._viewportChange$.next();\n }\n\n constructor(private _host: ElementRef<HTMLElement>,\n @Inject(DOCUMENT) private _document: any,\n private _zone: NgZone) {\n this._viewportChange$\n .pipe(\n switchMap(() => {\n if (!this._viewport) {\n return of(undefined);\n }\n return merge(\n this.viewportScrollChange$(),\n this.viewportDimensionChange$({debounceTime: SciScrollbarComponent.VIEWPORT_RESIZE_DEBOUNCE_TIME}),\n this.viewportClientDimensionChange$({debounceTime: SciScrollbarComponent.VIEWPORT_RESIZE_DEBOUNCE_TIME}),\n );\n }),\n subscribeInside(continueFn => this._zone.runOutsideAngular(continueFn)),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n if (this._viewport) {\n this.renderScrollPosition();\n }\n else {\n this.unsetScrollPosition();\n }\n });\n }\n\n /**\n * Computes the scroll position and updates CSS variables to render the scroll position in the UI.\n */\n private renderScrollPosition(): void {\n NgZone.assertNotInAngularZone();\n const viewportSize = this.viewportSize;\n const viewportClientSize = this.viewportClientSize;\n const thumbPositionFr = this.scrollPosition / viewportClientSize;\n const thumbSizeFr = viewportSize / viewportClientSize;\n const overflow = viewportClientSize > viewportSize;\n\n if (thumbPositionFr !== this._thumbPositionFr || thumbSizeFr !== this._thumbSizeFr) {\n this._thumbPositionFr = thumbPositionFr;\n this._thumbSizeFr = thumbSizeFr;\n this.setCssVariable('--ɵsci-scrollbar-thumb-position-fr', thumbPositionFr);\n this.setCssVariable('--ɵsci-scrollbar-thumb-size-fr', thumbSizeFr);\n }\n\n if (overflow !== this._overflow) {\n this._overflow = overflow;\n overflow ? this._host.nativeElement.classList.add('overflow') : this._host.nativeElement.classList.remove('overflow');\n }\n }\n\n /**\n * Clears CSS variables used for rendering the scroll position in the UI.\n */\n private unsetScrollPosition(): void {\n NgZone.assertNotInAngularZone();\n this._thumbPositionFr = 0;\n this._thumbSizeFr = 0;\n this._overflow = false;\n this.setCssVariable('--ɵsci-scrollbar-thumb-position-fr', 0);\n this.setCssVariable('--ɵsci-scrollbar-thumb-size-fr', 0);\n this._host.nativeElement.classList.remove('overflow');\n }\n\n /* @docs-private */\n public onTouchStart(event: TouchEvent): void {\n event.preventDefault();\n this._lastDragPosition = this.vertical ? event.touches[0].screenY : event.touches[0].screenX;\n }\n\n /* @docs-private */\n public onTouchMove(event: TouchEvent): void {\n event.preventDefault();\n\n const newDragPositionPx = this.vertical ? event.touches[0].screenY : event.touches[0].screenX;\n const scrollbarPanPx = newDragPositionPx - this._lastDragPosition!;\n const viewportPanPx = this.toViewportPanPx(scrollbarPanPx);\n this._lastDragPosition = newDragPositionPx;\n this.moveViewportClient(viewportPanPx);\n }\n\n /* @docs-private */\n public onTouchEnd(event: TouchEvent): void {\n event.preventDefault();\n this._lastDragPosition = null;\n }\n\n /* @docs-private */\n public onMouseDown(mousedownEvent: MouseEvent): void {\n if (mousedownEvent.button !== 0) {\n return;\n }\n\n mousedownEvent.preventDefault();\n this._lastDragPosition = this.vertical ? mousedownEvent.screenY : mousedownEvent.screenX;\n\n // Listen for 'mousemove' events\n this._zone.runOutsideAngular(() => {\n const mousemoveListener = merge(fromEvent<MouseEvent>(this._document, 'mousemove'), fromEvent<MouseEvent>(this._document, 'sci-mousemove'))\n .pipe(takeUntil(this._destroy$))\n .subscribe(mousemoveEvent => {\n mousemoveEvent.preventDefault();\n\n const newDragPositionPx = this.vertical ? mousemoveEvent.screenY : mousemoveEvent.screenX;\n const scrollbarPanPx = newDragPositionPx - this._lastDragPosition!;\n const viewportPanPx = this.toViewportPanPx(scrollbarPanPx);\n this._lastDragPosition = newDragPositionPx;\n this.moveViewportClient(viewportPanPx);\n });\n\n // Listen for 'mouseup' events; use 'capture phase' and 'stop propagation' to not close overlays\n merge(fromEvent<MouseEvent>(this._document, 'mouseup', {capture: true}), fromEvent<MouseEvent>(this._document, 'sci-mouseup'))\n .pipe(first(), takeUntil(this._destroy$))\n .subscribe(mouseupEvent => {\n mouseupEvent.stopPropagation();\n mousemoveListener.unsubscribe();\n this._lastDragPosition = null;\n });\n });\n }\n\n /* @docs-private */\n public onScrollTrackMouseDown(event: MouseEvent, direction: 'up' | 'down'): void {\n const signum = (direction === 'up' ? -1 : +1);\n this.scrollWhileMouseDown(this.toViewportPanPx(signum * this.thumbSize), event);\n }\n\n /**\n * Projects the given scrollbar scroll pixels into viewport scroll pixels.\n */\n private toViewportPanPx(scrollbarPanPx: number): number {\n const scrollRangePx = this.trackSize - this.thumbSize;\n const scrollRatio = scrollbarPanPx / scrollRangePx;\n return scrollRatio * (this.viewportClientSize - this.viewportSize);\n }\n\n /**\n * Moves the viewport client by the specified numbers of pixels.\n */\n private moveViewportClient(viewportPanPx: number): void {\n if (this.vertical) {\n this._viewport.scrollTop += viewportPanPx;\n }\n else {\n this._viewport.scrollLeft += viewportPanPx;\n }\n }\n\n /**\n * Indicates if the content overflows.\n */\n public get overflow(): boolean {\n return this._overflow;\n }\n\n /**\n * Scrolls continuously while holding the mouse pressed, or until the mouse leaves the scrolltrack.\n */\n private scrollWhileMouseDown(viewportScrollPx: number, mousedownEvent: MouseEvent): void {\n // The `EventTarget` type of `Event.target` is not yet compatible with `FromEventTarget` used in `fromEvent`.\n // This will be fixed in rxjs version 7.0.0. Refer to https://github.com/ReactiveX/rxjs/commit/5f022d784570684632e6fd5ae247fc259ee34c4b\n // for more details.\n const scrollTrackElement = mousedownEvent.target as Element;\n\n // scroll continuously every 50ms after an initial delay of 250ms\n timer(250, 50)\n .pipe(\n // continue chain with latest mouse event\n withLatestFrom(merge(of(mousedownEvent), fromEvent<MouseEvent>(scrollTrackElement, 'mousemove')), (tick, event) => event),\n // start immediately\n startWith(mousedownEvent),\n // stop scrolling if the thumb hits the mouse pointer position\n takeWhile((event: MouseEvent) => scrollTrackElement === this._document.elementFromPoint(event.clientX, event.clientY)),\n debounceTime(10),\n // stop scrolling on mouseout or mouseup\n takeUntil(merge(fromEvent(scrollTrackElement, 'mouseout'), fromEvent(scrollTrackElement, 'mouseup'))),\n )\n .subscribe(() => {\n this.moveViewportClient(viewportScrollPx);\n });\n }\n\n /**\n * Emits whenever the viewport scrolls.\n */\n private viewportScrollChange$(): Observable<void> {\n return fromEvent(this._viewport, 'scroll', {passive: true}).pipe(map(() => undefined));\n }\n\n /**\n * Emits on subscription, and then each time the size of the viewport changes.\n */\n private viewportDimensionChange$(options: {debounceTime: number}): Observable<void> {\n return fromDimension$(this._viewport)\n .pipe(\n // Debouncing is particularly important in the context of Angular animations, since they continuously\n // trigger resize events. Debouncing prevents the scrollbar from flickering, for example, when the user\n // expands a panel that contains a viewport.\n debounceTime(options.debounceTime),\n map(() => undefined),\n );\n }\n\n /**\n * Emits on subscription, and then each time the size or style property of the viewport client changes.\n */\n private viewportClientDimensionChange$(options: {debounceTime: number}): Observable<void> {\n return this.children$(this._viewport)\n .pipe(\n switchMap(children => merge(...children.map(child => merge(\n fromDimension$(child),\n // Observe style mutations since some transformations change the scroll position without necessarily triggering a dimension change,\n // e.g., `scale` or `translate` used by some virtual scroll implementations\n fromMutation$(child, {subtree: false, childList: false, attributeFilter: ['style']})),\n ))),\n // Debouncing is particularly important in the context of Angular animations, since they continuously\n // trigger resize events. Debouncing prevents the scrollbar from flickering, for example, when the user\n // expands a panel that contains a viewport.\n debounceTime(options.debounceTime),\n map(() => undefined),\n );\n }\n\n /**\n * Emits the children of the passed element, and then each time child elements are added or removed.\n */\n private children$(element: HTMLElement): Observable<HTMLElement[]> {\n return fromMutation$(element, {subtree: false, childList: true})\n .pipe(\n startWith(undefined as void),\n map(() => Array.from(element.children)),\n filterArray((child: Element): child is HTMLElement => child instanceof HTMLElement),\n );\n }\n\n private setCssVariable(key: string, value: any): void {\n this._host.nativeElement.style.setProperty(key, value);\n }\n\n private get viewportSize(): number {\n return this._viewport ? (this.vertical ? this._viewport.clientHeight : this._viewport.clientWidth) : 0;\n }\n\n private get viewportClientSize(): number {\n return this._viewport ? (this.vertical ? this._viewport.scrollHeight : this._viewport.scrollWidth) : 0;\n }\n\n private get scrollPosition(): number {\n return this._viewport ? (this.vertical ? this._viewport.scrollTop : this._viewport.scrollLeft) : 0;\n }\n\n private get thumbSize(): number {\n const thumbElement = this.thumbElement.nativeElement;\n return this.vertical ? thumbElement.clientHeight : thumbElement.clientWidth;\n }\n\n private get trackSize(): number {\n const trackElement = this._host.nativeElement;\n return this.vertical ? trackElement.clientHeight : trackElement.clientWidth;\n }\n\n /* @docs-private */\n public ngOnDestroy(): void {\n this._destroy$.next();\n }\n}\n","<!-- scrolltrack to move the viewport client upwards (paging) -->\n<div class=\"scrolltrack-start\" (mousedown)=\"onScrollTrackMouseDown($event, 'up')\"></div>\n\n<!-- scrollthumb -->\n<div #thumb_handle\n class=\"thumb-handle\"\n [class.vertical]=\"vertical\"\n [class.horizontal]=\"horizontal\"\n (mousedown)=\"onMouseDown($event)\"\n (touchstart)=\"onTouchStart($event)\"\n (touchmove)=\"onTouchMove($event)\"\n (touchend)=\"onTouchEnd($event)\"\n (touchcancel)=\"onTouchEnd($event)\">\n <div class=\"thumb\"\n [class.vertical]=\"vertical\"\n [class.horizontal]=\"horizontal\">\n </div>\n</div>\n\n<!-- scrolltrack to move the viewport client downwards (paging) -->\n<div class=\"scrolltrack-end\" (mousedown)=\"onScrollTrackMouseDown($event, 'down')\"></div>\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 {Directive, ElementRef, Input, OnChanges, OnDestroy, Renderer2, SimpleChanges} from '@angular/core';\nimport {NativeScrollbarTrackSize, SciNativeScrollbarTrackSizeProvider} from './native-scrollbar-track-size-provider.service';\nimport {map, takeUntil} from 'rxjs/operators';\nimport {merge, Subject} from 'rxjs';\nimport {Dictionary} from '@scion/toolkit/util';\n\n/**\n * Makes the host element natively scrollable and hides native scrollbars by default, unless native scrollbars\n * already sit on top of the viewport (e.g. in OS X).\n *\n * Because there is no cross-browser API to hide scrollbars without losing native scroll support, we set 'overflow'\n * to 'scroll' but shift the native scrollbars out of the visible viewport area. The shift offset is computed upfront.\n *\n * This directive expects its host element to be the only child in document flow in its parent DOM element. It makes the host element\n * fill up the entire space (width and height set to 100%). The parent element must have its CSS `overflow` property set to `hidden`\n * to hide the pushed out native scrollbars.\n */\n@Directive({\n selector: '[sciScrollable]',\n})\nexport class SciScrollableDirective implements OnChanges, OnDestroy {\n\n private _destroy$ = new Subject<void>();\n private _inputChange$ = new Subject<void>();\n\n /**\n * Controls whether to display native scrollbars.\n * Has no effect if the native scrollbar sits on top of the content, e.g. in OS X.\n */\n @Input('sciScrollableDisplayNativeScrollbar') // eslint-disable-line @angular-eslint/no-input-rename\n public isDisplayNativeScrollbar: boolean = false;\n\n constructor(private _host: ElementRef<HTMLDivElement>,\n private _renderer: Renderer2,\n nativeScrollbarTrackSizeProvider: SciNativeScrollbarTrackSizeProvider) {\n merge(\n nativeScrollbarTrackSizeProvider.trackSize$,\n this._inputChange$.pipe(map(() => nativeScrollbarTrackSizeProvider.trackSize)),\n )\n .pipe(takeUntil(this._destroy$))\n .subscribe(nativeScrollbarTrackSize => {\n if (nativeScrollbarTrackSize === null) { // the native scrollbar sits on top of the content\n this.useNativeScrollbars();\n }\n else {\n this.isDisplayNativeScrollbar ? this.useNativeScrollbars() : this.shiftNativeScrollbars(nativeScrollbarTrackSize);\n }\n });\n }\n\n /**\n * Uses the native scrollbars when content overflows.\n */\n private useNativeScrollbars(): void {\n this.setStyle(this._host.nativeElement, {\n overflow: 'auto',\n width: '100%',\n height: '100%',\n marginRight: 0,\n marginBottom: 0,\n });\n }\n\n /**\n * Shifts the native scrollbars out of the visible viewport area.\n */\n private shiftNativeScrollbars(nativeScrollbarTrackSize: NativeScrollbarTrackSize): void {\n this.setStyle(this._host.nativeElement, {\n overflow: 'scroll',\n width: `calc(100% + ${nativeScrollbarTrackSize.vScrollbarTrackWidth}px`,\n height: `calc(100% + ${nativeScrollbarTrackSize.hScrollbarTrackHeight}px`,\n marginRight: `-${nativeScrollbarTrackSize.vScrollbarTrackWidth}px`,\n marginBottom: `-${nativeScrollbarTrackSize.hScrollbarTrackHeight}px`,\n });\n }\n\n private setStyle(element: Element, style: Dictionary): void {\n Object.keys(style).forEach(key => this._renderer.setStyle(element, key, style[key]));\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this._inputChange$.next();\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\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 {Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild, ViewEncapsulation} from '@angular/core';\nimport {SciNativeScrollbarTrackSizeProvider} from './native-scrollbar-track-size-provider.service';\nimport {coerceElement} from '@angular/cdk/coercion';\n\n/**\n * Represents a viewport with slotted content (`<ng-content>`) used as scrollable content. By default, content is added to a CSS grid layout.\n *\n * The viewport component displays scrollbars when its content overflows. Scrollbars are displayed on top of the content, not next to it.\n * 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.\n * The viewport remains natively scrollable with the native scrollbars shifted out of the viewport's visible area. Consequently, the viewport keeps supporting\n * native scrolling features such as touch gestures, scroll speed acceleration, or scrolling near the viewport edges during drag-and-drop operations.\n *\n * ```html\n * <sci-viewport>\n * your content\n * </sci-viewport>\n * ```\n *\n * ## Adding the viewport to a layout\n *\n * Typically you would add the viewport component to a flexible layout, filling the remaining space vertically and horizontally, such as a flexbox container\n * with the viewport's `flex` CSS property set to either `flex: auto` or `flex: 1 1 0`.\n *\n * 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\n * a layout constraint. Depending on the layout, different steps may be necessary to prevent the viewport from growing to infinity.\n *\n * - If practical, give the viewport a fixed size or a maximum size.\n * - 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,\n * 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\n * `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\n * the remaining extra space is distributed. If the viewport does not appear after setting this property, check its parent elements' content sizes.\n * 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`.\n * Another approach would be to set the minimum height of all parents to `0`, as follows: `min-height: 0`.\n *\n * For the complete documentation on the flex layout and its features, refer to https://developer.mozilla.org/en-US/docs/Web/CSS/flex.\n *\n *\n * ## Layouting the viewport's slotted content\n *\n * By default, the viewport's content is added to a CSS grid container with a single column, filling remaining space vertically and horizontally.\n * 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.\n *\n * #### Example of adding slotted content to a CSS flex container.\n * ```css\n * sci-viewport::part(content) {\n * display: flex;\n * flex-direction: column;\n * }\n * ```\n *\n * #### Example of configuring CSS grid container with two columns\n * ```css\n * sci-viewport::part(content) {\n * grid-template-columns: 1fr 1fr;\n * gap: 1em;\n * }\n * ```\n *\n * ## Styling of scrollbars\n *\n * You can override the following CSS variables to control the appearance of the scrollbar:\n *\n * - sci-viewport-scrollbar-color: Sets the color of the scrollbar (by default, uses `rgb(78, 78, 78)`).\n *\n * ```css\n * sci-viewport {\n * --sci-viewport-scrollbar-color: blue;\n * }\n * ```\n */\n@Component({\n selector: 'sci-viewport',\n templateUrl: './viewport.component.html',\n styleUrls: ['./viewport.component.scss'],\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class SciViewportComponent {\n\n private _viewportElement!: HTMLDivElement;\n private _viewportClient!: HTMLDivElement;\n private _scrollbarStyle: ScrollbarStyle = 'on-top';\n\n /** @internal */\n @ViewChild('viewport', {static: true})\n public set setViewport(viewport: ElementRef<HTMLDivElement>) {\n this._viewportElement = coerceElement(viewport);\n }\n\n /** @internal */\n @ViewChild('viewport_client', {static: true})\n public set setViewportClient(viewportClient: ElementRef<HTMLDivElement>) {\n this._viewportClient = coerceElement(viewportClient);\n }\n\n /**\n * Controls whether to use native scrollbars or, which is by default, emulated scrollbars that sit on top of the viewport client.\n * In the latter, the viewport client remains natively scrollable.\n */\n @Input()\n public set scrollbarStyle(scrollbarStyle: ScrollbarStyle) {\n this._scrollbarStyle = scrollbarStyle || 'on-top';\n }\n\n public get scrollbarStyle(): ScrollbarStyle {\n return this._scrollbarStyle;\n }\n\n /**\n * Emits upon a scroll event.\n *\n * You can add [sciDimension] directive to the viewport or viewport client to be notified about layout changes.\n */\n @Output()\n public scroll = new EventEmitter<Event>(); // eslint-disable-line @angular-eslint/no-output-native\n\n constructor(public host: ElementRef<HTMLElement>, public nativeScrollbarTrackSizeProvider: SciNativeScrollbarTrackSizeProvider) {\n }\n\n @HostListener('focus')\n public focus(): void { // do not rename to expose the same focus method like `HTMLElement.focus()`.\n this._viewportElement?.focus();\n }\n\n public onScroll(event: Event): void {\n this.scroll.emit(event);\n }\n\n /**\n * Returns the number of pixels that the viewport client is scrolled vertically.\n *\n * @see Element.scrollTop\n */\n public get scrollTop(): number {\n return this._viewportElement.scrollTop;\n }\n\n /**\n * Sets the number of pixels that the viewport client is scrolled vertically.\n *\n * @see Element.scrollTop\n */\n public set scrollTop(scrollTop: number) {\n this._viewportElement.scrollTop = scrollTop;\n }\n\n /**\n * Returns the number of pixels that the viewport client is scrolled horizontally.\n *\n * @see Element.scrollLeft\n */\n public get scrollLeft(): number {\n return this._viewportElement.scrollLeft;\n }\n\n /**\n * Sets the number of pixels that the viewport client is scrolled horizontally.\n *\n * @see Element.scrollLeft\n */\n public set scrollLeft(scrollLeft: number) {\n this._viewportElement.scrollLeft = scrollLeft;\n }\n\n /**\n * Returns the height of the viewport client.\n *\n * @see Element.scrollHeight\n */\n public get scrollHeight(): number {\n return this._viewportElement.scrollHeight;\n }\n\n /**\n * Returns the width of the viewport client.\n *\n * @see Element.scrollWidth\n */\n public get scrollWidth(): number {\n return this._viewportElement.scrollWidth;\n }\n\n /**\n * Returns the viewport {HTMLElement}.\n */\n public get viewportElement(): HTMLElement {\n return this._viewportElement;\n }\n\n /**\n * Returns the viewport client {HTMLElement}.\n */\n public get viewportClientElement(): HTMLElement {\n return this._viewportClient;\n }\n\n /**\n * Checks if the specified element is scrolled into the viewport.\n *\n * @param element - the element to be checked\n * @param fit - control if the element must fully or partially fit into the viewport\n *\n * @throws if the element is not contained in the viewport's slotted content.\n */\n public isElementInView(element: ElementRef<HTMLElement> | HTMLElement, fit: 'full' | 'partial'): boolean {\n const elLeft = this.computeOffset(element, 'left');\n const elRight = elLeft + coerceElement(element).offsetWidth;\n const elTop = this.computeOffset(element, 'top');\n const elBottom = elTop + coerceElement(element).offsetHeight;\n\n const vpLeft = this._viewportElement.scrollLeft;\n const vpRight = vpLeft + this._viewportElement.clientWidth;\n const vpTop = this._viewportElement.scrollTop;\n const vpBottom = vpTop + this._viewportElement.clientHeight;\n\n switch (fit) {\n case 'full':\n return (elLeft >= vpLeft && elRight <= vpRight) && (elTop >= vpTop && elBottom <= vpBottom);\n case 'partial':\n return (elRight >= vpLeft && elLeft <= vpRight) && (elBottom >= vpTop && elTop <= vpBottom);\n default:\n throw Error('Unsupported fit strategy');\n }\n }\n\n /**\n * Scrolls the specified element into the viewport.\n *\n * @param element - the element to scroll into the viewport\n * @param offset - the gap between the element and the viewport\n *\n * @throws if the element is not contained in the viewport's slotted content.\n */\n public scrollIntoView(element: ElementRef<HTMLElement> | HTMLElement, offset: number = 50): void {\n this._viewportElement.scrollTop = this.computeOffset(element, 'top') - offset;\n this._viewportElement.scrollLeft = this.computeOffset(element, 'left') - offset;\n }\n\n /**\n * Computes the distance of the element to the viewport's left or top border.\n *\n * @throws if the element is not contained in the viewport's slotted content.\n */\n public computeOffset(element: ElementRef<HTMLElement> | HTMLElement, border: 'left' | 'top'): number {\n let offset = 0;\n let el = coerceElement(element);\n do {\n offset += (border === 'left' ? el.offsetLeft : el.offsetTop);\n el = el.offsetParent as HTMLElement;\n if (el === null) {\n throw Error(`[ElementNotContainedError] Element not contained in the viewport's slotted content`);\n }\n } while (el !== this.host.nativeElement);\n\n return offset;\n }\n}\n\n/**\n * Represents a scrollbar style.\n */\nexport type ScrollbarStyle = 'native' | 'on-top' | 'hidden';\n","<!-- 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\"></sci-scrollbar>\n <sci-scrollbar [direction]=\"'hscroll'\" [viewport]=\"viewport\"></sci-scrollbar>\n</ng-container>\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 {SciViewportComponent} from './viewport.component';\nimport {SciScrollbarComponent} from './scrollbar/scrollbar.component';\nimport {SciScrollableDirective} from './scrollable.directive';\nimport {ScrollingModule} from '@angular/cdk/scrolling';\n\n/**\n * Provides a viewport component with scrollbars that sit on top of the viewport client.\n */\n@NgModule({\n imports: [\n CommonModule,\n ScrollingModule,\n ],\n declarations: [\n SciViewportComponent,\n SciScrollbarComponent,\n SciScrollableDirective,\n ],\n exports: [\n SciViewportComponent,\n SciScrollbarComponent,\n SciScrollableDirective,\n ],\n})\nexport class SciViewportModule {\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/viewport'\n *\n * @see https://github.com/ng-packagr/ng-packagr/blob/master/docs/secondary-entrypoints.md\n */\nexport {SciViewportModule} from './viewport.module';\nexport * from './viewport.component';\nexport * from './scrollable.directive';\nexport * from './scrollbar/scrollbar.component';\nexport * from './native-scrollbar-track-size-provider.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.SciNativeScrollbarTrackSizeProvider","i4.SciScrollbarComponent","i5.SciScrollableDirective"],"mappings":";;;;;;;;;;;;AAAA;;;;;;;;AAQG;AAOH;;;;AAIG;MAEU,mCAAmC,CAAA;IAK9C,WAAsC,CAAA,SAAmB,EAAU,KAAa,EAAA;AAA1C,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAU;AAAU,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAQ;QAH/D,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAkC,IAAI,CAAC,CAAC;AACzE,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAQ,CAAC;QAG/C,IAAI,CAAC,uCAAuC,EAAE,CAAC;KAChD;AAED;;;;AAIG;AACH,IAAA,IAAW,UAAU,GAAA;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;AAED;;AAEG;AACH,IAAA,IAAW,SAAS,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;KACpC;AAED;;;;AAIG;IACK,gBAAgB,GAAA;;QAEtB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACxD,QAAQ,CAAC,WAAW,EAAE;AACpB,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,MAAM,EAAE,OAAO;AACf,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,UAAU,EAAE,QAAQ;AACrB,SAAA,CAAC,CAAC;QAEH,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9D,QAAQ,CAAC,iBAAiB,EAAE;AAC1B,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,CAAC;AACV,SAAA,CAAC,CAAC;AAEH,QAAA,WAAW,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AAE7C,QAAA,MAAM,SAAS,GAA6B;AAC1C,YAAA,qBAAqB,EAAE,WAAW,CAAC,YAAY,GAAG,iBAAiB,CAAC,YAAY;AAChF,YAAA,oBAAoB,EAAE,WAAW,CAAC,WAAW,GAAG,iBAAiB,CAAC,WAAW;SAC9E,CAAC;;QAGF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,SAAS,CAAC,qBAAqB,KAAK,CAAC,IAAI,SAAS,CAAC,oBAAoB,KAAK,CAAC,EAAE;AACjF,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAED,QAAA,OAAO,SAAS,CAAC;KAClB;IAEO,uCAAuC,GAAA;;;;AAI7C,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAK;AAChC,YAAA,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC;iBACxB,IAAI,CACH,YAAY,CAAC,CAAC,CAAC,EACf,SAAS,CAAC,IAAI,CAAC;AACf,YAAA,GAAG,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAClC,oBAAoB,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAC3E,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;iBACA,SAAS,CAAC,SAAS,IAAG;AACrB,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACzD,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;KACJ;IAEM,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;KACvB;;AAvFU,mCAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mCAAmC,kBAK1B,QAAQ,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AALjB,mCAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mCAAmC,cADvB,MAAM,EAAA,CAAA,CAAA;2FAClB,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAD/C,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAA;;wBAMmB,QAAQ,EAAA,UAAA,EAAA,CAAA;8BAA5C,MAAM;+BAAC,QAAQ,CAAA;;;AAqF9B;;;;;;;AAOG;AACH,SAAS,QAAQ,CAAC,OAAoB,EAAE,KAAoC,EAAA;IAC1E,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAChF;;ACzHA;;;;;;;;AAQG;AASH;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAOU,qBAAqB,CAAA;AA0DhC,IAAA,WAAA,CAAoB,KAA8B,EACZ,SAAc,EAChC,KAAa,EAAA;AAFb,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAyB;AACZ,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAK;AAChC,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAQ;AA/CzB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAQ,CAAC;AAEhC,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,OAAO,EAAQ,CAAC;AACvC,QAAA,IAAiB,CAAA,iBAAA,GAAkB,IAAI,CAAC;AAExC,QAAA,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;AAClB,QAAA,IAAY,CAAA,YAAA,GAAG,CAAC,CAAC;AACjB,QAAA,IAAgB,CAAA,gBAAA,GAAG,CAAC,CAAC;AAqB7B;;;;AAIG;AAEI,QAAA,IAAS,CAAA,SAAA,GAA0B,SAAS,CAAC;AAclD,QAAA,IAAI,CAAC,gBAAgB;AAClB,aAAA,IAAI,CACH,SAAS,CAAC,MAAK;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,gBAAA,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;AACtB,aAAA;AACD,YAAA,OAAO,KAAK,CACV,IAAI,CAAC,qBAAqB,EAAE,EAC5B,IAAI,CAAC,wBAAwB,CAAC,EAAC,YAAY,EAAE,qBAAqB,CAAC,6BAA6B,EAAC,CAAC,EAClG,IAAI,CAAC,8BAA8B,CAAC,EAAC,YAAY,EAAE,qBAAqB,CAAC,6BAA6B,EAAC,CAAC,CACzG,CAAC;SACH,CAAC,EACF,eAAe,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,EACvE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;aACA,SAAS,CAAC,MAAK;YACd,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC7B,aAAA;AACI,iBAAA;gBACH,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC5B,aAAA;AACH,SAAC,CAAC,CAAC;KACN;AA1DD,IAAA,IACW,QAAQ,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC;KACrC;AAED,IAAA,IACW,UAAU,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC;KACrC;AAED,IAAA,IACW,SAAS,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,iBAAiB,KAAK,IAAI,CAAC;KACxC;AAUD;;AAEG;IACH,IACW,WAAW,CAAC,QAAqB,EAAA;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC1B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;KAC9B;AA8BD;;AAEG;IACK,oBAAoB,GAAA;QAC1B,MAAM,CAAC,sBAAsB,EAAE,CAAC;AAChC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;AACvC,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;AACnD,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,GAAG,kBAAkB,CAAC;AACjE,QAAA,MAAM,WAAW,GAAG,YAAY,GAAG,kBAAkB,CAAC;AACtD,QAAA,MAAM,QAAQ,GAAG,kBAAkB,GAAG,YAAY,CAAC;QAEnD,IAAI,eAAe,KAAK,IAAI,CAAC,gBAAgB,IAAI,WAAW,KAAK,IAAI,CAAC,YAAY,EAAE;AAClF,YAAA,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;AACxC,YAAA,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;AAChC,YAAA,IAAI,CAAC,cAAc,CAAC,oCAAoC,EAAE,eAAe,CAAC,CAAC;AAC3E,YAAA,IAAI,CAAC,cAAc,CAAC,gCAAgC,EAAE,WAAW,CAAC,CAAC;AACpE,SAAA;AAED,QAAA,IAAI,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE;AAC/B,YAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC1B,YAAA,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACvH,SAAA;KACF;AAED;;AAEG;IACK,mBAAmB,GAAA;QACzB,MAAM,CAAC,sBAAsB,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,cAAc,CAAC,oCAAoC,EAAE,CAAC,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,cAAc,CAAC,gCAAgC,EAAE,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;KACvD;;AAGM,IAAA,YAAY,CAAC,KAAiB,EAAA;QACnC,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;KAC9F;;AAGM,IAAA,WAAW,CAAC,KAAiB,EAAA;QAClC,KAAK,CAAC,cAAc,EAAE,CAAC;QAEvB,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAC9F,QAAA,MAAM,cAAc,GAAG,iBAAiB,GAAG,IAAI,CAAC,iBAAkB,CAAC;QACnE,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;AAC3C,QAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;KACxC;;AAGM,IAAA,UAAU,CAAC,KAAiB,EAAA;QACjC,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;KAC/B;;AAGM,IAAA,WAAW,CAAC,cAA0B,EAAA;AAC3C,QAAA,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/B,OAAO;AACR,SAAA;QAED,cAAc,CAAC,cAAc,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC;;AAGzF,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAK;YAChC,MAAM,iBAAiB,GAAG,KAAK,CAAC,SAAS,CAAa,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,SAAS,CAAa,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AACxI,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iBAC/B,SAAS,CAAC,cAAc,IAAG;gBAC1B,cAAc,CAAC,cAAc,EAAE,CAAC;AAEhC,gBAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC;AAC1F,gBAAA,MAAM,cAAc,GAAG,iBAAiB,GAAG,IAAI,CAAC,iBAAkB,CAAC;gBACnE,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;AAC3D,gBAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;AAC3C,gBAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;AACzC,aAAC,CAAC,CAAC;;YAGL,KAAK,CAAC,SAAS,CAAa,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,EAAE,SAAS,CAAa,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;iBAC3H,IAAI,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iBACxC,SAAS,CAAC,YAAY,IAAG;gBACxB,YAAY,CAAC,eAAe,EAAE,CAAC;gBAC/B,iBAAiB,CAAC,WAAW,EAAE,CAAC;AAChC,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAChC,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;KACJ;;IAGM,sBAAsB,CAAC,KAAiB,EAAE,SAAwB,EAAA;AACvE,QAAA,MAAM,MAAM,IAAI,SAAS,KAAK,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;KACjF;AAED;;AAEG;AACK,IAAA,eAAe,CAAC,cAAsB,EAAA;QAC5C,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACtD,QAAA,MAAM,WAAW,GAAG,cAAc,GAAG,aAAa,CAAC;QACnD,OAAO,WAAW,IAAI,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;KACpE;AAED;;AAEG;AACK,IAAA,kBAAkB,CAAC,aAAqB,EAAA;QAC9C,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,aAAa,CAAC;AAC3C,SAAA;AACI,aAAA;AACH,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,IAAI,aAAa,CAAC;AAC5C,SAAA;KACF;AAED;;AAEG;AACH,IAAA,IAAW,QAAQ,GAAA;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;AAED;;AAEG;IACK,oBAAoB,CAAC,gBAAwB,EAAE,cAA0B,EAAA;;;;AAI/E,QAAA,MAAM,kBAAkB,GAAG,cAAc,CAAC,MAAiB,CAAC;;AAG5D,QAAA,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;aACX,IAAI;;QAEH,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,SAAS,CAAa,kBAAkB,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,KAAK,CAAC;;QAEzH,SAAS,CAAC,cAAc,CAAC;;QAEzB,SAAS,CAAC,CAAC,KAAiB,KAAK,kBAAkB,KAAK,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,EACtH,YAAY,CAAC,EAAE,CAAC;;AAEhB,QAAA,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,UAAU,CAAC,EAAE,SAAS,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC,CAAC,CACtG;aACA,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;AAC5C,SAAC,CAAC,CAAC;KACN;AAED;;AAEG;IACK,qBAAqB,GAAA;QAC3B,OAAO,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC;KACxF;AAED;;AAEG;AACK,IAAA,wBAAwB,CAAC,OAA+B,EAAA;AAC9D,QAAA,OAAO,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;aAClC,IAAI;;;;AAIH,QAAA,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,EAClC,GAAG,CAAC,MAAM,SAAS,CAAC,CACrB,CAAC;KACL;AAED;;AAEG;AACK,IAAA,8BAA8B,CAAC,OAA+B,EAAA;AACpE,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;aAClC,IAAI,CACH,SAAS,CAAC,QAAQ,IAAI,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CACxD,cAAc,CAAC,KAAK,CAAC;;;QAGrB,aAAa,CAAC,KAAK,EAAE,EAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,OAAO,CAAC,EAAC,CAAC,CAAC,CACtF,CAAC,CAAC;;;;AAIH,QAAA,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,EAClC,GAAG,CAAC,MAAM,SAAS,CAAC,CACrB,CAAC;KACL;AAED;;AAEG;AACK,IAAA,SAAS,CAAC,OAAoB,EAAA;AACpC,QAAA,OAAO,aAAa,CAAC,OAAO,EAAE,EAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAC,CAAC;AAC7D,aAAA,IAAI,CACH,SAAS,CAAC,SAAiB,CAAC,EAC5B,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EACvC,WAAW,CAAC,CAAC,KAAc,KAA2B,KAAK,YAAY,WAAW,CAAC,CACpF,CAAC;KACL;IAEO,cAAc,CAAC,GAAW,EAAE,KAAU,EAAA;AAC5C,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;KACxD;AAED,IAAA,IAAY,YAAY,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,IAAI,CAAC,CAAC;KACxG;AAED,IAAA,IAAY,kBAAkB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,IAAI,CAAC,CAAC;KACxG;AAED,IAAA,IAAY,cAAc,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,IAAI,CAAC,CAAC;KACpG;AAED,IAAA,IAAY,SAAS,GAAA;AACnB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;AACrD,QAAA,OAAO,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,YAAY,GAAG,YAAY,CAAC,WAAW,CAAC;KAC7E;AAED,IAAA,IAAY,SAAS,GAAA;AACnB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;AAC9C,QAAA,OAAO,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,YAAY,GAAG,YAAY,CAAC,WAAW,CAAC;KAC7E;;IAGM,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;KACvB;;AAjUD;;;;;;;;AAQG;AACoB,qBAA6B,CAAA,6BAAA,GAAG,EAAG,CAAA;AAX/C,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,4CA2DZ,QAAQ,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA3DjB,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,wYC9ClC,4yBAqBA,EAAA,MAAA,EAAA,CAAA,o+CAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDyBa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;+BACE,eAAe,EAAA,eAAA,EAGR,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,4yBAAA,EAAA,MAAA,EAAA,CAAA,o+CAAA,CAAA,EAAA,CAAA;;;8BA6DlC,MAAM;+BAAC,QAAQ,CAAA;;yBAnCrB,YAAY,EAAA,CAAA;sBADlB,SAAS;gBAAC,IAAA,EAAA,CAAA,cAAc,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAA;gBAI9B,QAAQ,EAAA,CAAA;sBADlB,WAAW;uBAAC,gBAAgB,CAAA;gBAMlB,UAAU,EAAA,CAAA;sBADpB,WAAW;uBAAC,kBAAkB,CAAA;gBAMpB,SAAS,EAAA,CAAA;sBADnB,WAAW;uBAAC,iBAAiB,CAAA;gBAWvB,SAAS,EAAA,CAAA;sBADf,KAAK;gBAOK,WAAW,EAAA,CAAA;sBADrB,KAAK;uBAAC,UAAU,CAAA;;;AElGnB;;;;;;;;AAQG;AAQH;;;;;;;;;;AAUG;MAIU,sBAAsB,CAAA;AAYjC,IAAA,WAAA,CAAoB,KAAiC,EACjC,SAAoB,EAC5B,gCAAqE,EAAA;AAF7D,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAA4B;AACjC,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAXhC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAQ,CAAC;AAChC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ,CAAC;AAE5C;;;AAGG;AAEI,QAAA,IAAwB,CAAA,wBAAA,GAAY,KAAK,CAAC;QAK/C,KAAK,CACH,gCAAgC,CAAC,UAAU,EAC3C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,gCAAgC,CAAC,SAAS,CAAC,CAAC,CAC/E;AACE,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC/B,SAAS,CAAC,wBAAwB,IAAG;AACpC,YAAA,IAAI,wBAAwB,KAAK,IAAI,EAAE;gBACrC,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC5B,aAAA;AACI,iBAAA;AACH,gBAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,wBAAwB,CAAC,CAAC;AACnH,aAAA;AACH,SAAC,CAAC,CAAC;KACN;AAED;;AAEG;IACK,mBAAmB,GAAA;QACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;AACtC,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,YAAY,EAAE,CAAC;AAChB,SAAA,CAAC,CAAC;KACJ;AAED;;AAEG;AACK,IAAA,qBAAqB,CAAC,wBAAkD,EAAA;QAC9E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;AACtC,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,KAAK,EAAE,CAAA,YAAA,EAAe,wBAAwB,CAAC,oBAAoB,CAAI,EAAA,CAAA;AACvE,YAAA,MAAM,EAAE,CAAA,YAAA,EAAe,wBAAwB,CAAC,qBAAqB,CAAI,EAAA,CAAA;AACzE,YAAA,WAAW,EAAE,CAAA,CAAA,EAAI,wBAAwB,CAAC,oBAAoB,CAAI,EAAA,CAAA;AAClE,YAAA,YAAY,EAAE,CAAA,CAAA,EAAI,wBAAwB,CAAC,qBAAqB,CAAI,EAAA,CAAA;AACrE,SAAA,CAAC,CAAC;KACJ;IAEO,QAAQ,CAAC,OAAgB,EAAE,KAAiB,EAAA;AAClD,QAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KACtF;AAEM,IAAA,WAAW,CAAC,OAAsB,EAAA;AACvC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;KAC3B;IAEM,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;KACvB;;mHAlEU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,mCAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;uGAAtB,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,wBAAA,EAAA,CAAA,qCAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;iBAC5B,CAAA;wKAWQ,wBAAwB,EAAA,CAAA;sBAD9B,KAAK;uBAAC,qCAAqC,CAAA;;;ACvC9C;;;;;;;;AAQG;AAMH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiEG;MAOU,oBAAoB,CAAA;IAuC/B,WAAmB,CAAA,IAA6B,EAAS,gCAAqE,EAAA;AAA3G,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAyB;AAAS,QAAA,IAAgC,CAAA,gCAAA,GAAhC,gCAAgC,CAAqC;AAnCtH,QAAA,IAAe,CAAA,eAAA,GAAmB,QAAQ,CAAC;AA2BnD;;;;AAIG;QAEI,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAS,CAAC;KAGzC;;IAjCD,IACW,WAAW,CAAC,QAAoC,EAAA;AACzD,QAAA,IAAI,CAAC,gBAAgB,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;KACjD;;IAGD,IACW,iBAAiB,CAAC,cAA0C,EAAA;AACrE,QAAA,IAAI,CAAC,eAAe,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;KACtD;AAED;;;AAGG;IACH,IACW,cAAc,CAAC,cAA8B,EAAA;AACtD,QAAA,IAAI,CAAC,eAAe,GAAG,cAAc,IAAI,QAAQ,CAAC;KACnD;AAED,IAAA,IAAW,cAAc,GAAA;QACvB,OAAO,IAAI,CAAC,eAAe,CAAC;KAC7B;IAcM,KAAK,GAAA;;AACV,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,gBAAgB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,EAAE,CAAC;KAChC;AAEM,IAAA,QAAQ,CAAC,KAAY,EAAA;AAC1B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACzB;AAED;;;;AAIG;AACH,IAAA,IAAW,SAAS,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;KACxC;AAED;;;;AAIG;IACH,IAAW,SAAS,CAAC,SAAiB,EAAA;AACpC,QAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,SAAS,CAAC;KAC7C;AAED;;;;AAIG;AACH,IAAA,IAAW,UAAU,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;KACzC;AAED;;;;AAIG;IACH,IAAW,UAAU,CAAC,UAAkB,EAAA;AACtC,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,GAAG,UAAU,CAAC;KAC/C;AAED;;;;AAIG;AACH,IAAA,IAAW,YAAY,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;KAC3C;AAED;;;;AAIG;AACH,IAAA,IAAW,WAAW,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;KAC1C;AAED;;AAEG;AACH,IAAA,IAAW,eAAe,GAAA;QACxB,OAAO,IAAI,CAAC,gBAAgB,CAAC;KAC9B;AAED;;AAEG;AACH,IAAA,IAAW,qBAAqB,GAAA;QAC9B,OAAO,IAAI,CAAC,eAAe,CAAC;KAC7B;AAED;;;;;;;AAOG;IACI,eAAe,CAAC,OAA8C,EAAE,GAAuB,EAAA;QAC5F,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC;AAE7D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;QAChD,MAAM,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;AAC3D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;QAC9C,MAAM,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;AAE5D,QAAA,QAAQ,GAAG;AACT,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,CAAC,MAAM,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,MAAM,KAAK,IAAI,KAAK,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC;AAC9F,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,CAAC,OAAO,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO,MAAM,QAAQ,IAAI,KAAK,IAAI,KAAK,IAAI,QAAQ,CAAC,CAAC;AAC9F,YAAA;AACE,gBAAA,MAAM,KAAK,CAAC,0BAA0B,CAAC,CAAC;AAC3C,SAAA;KACF;AAED;;;;;;;AAOG;AACI,IAAA,cAAc,CAAC,OAA8C,EAAE,MAAA,GAAiB,EAAE,EAAA;AACvF,QAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC;AAC9E,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC;KACjF;AAED;;;;AAIG;IACI,aAAa,CAAC,OAA8C,EAAE,MAAsB,EAAA;QACzF,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,QAAA,IAAI,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QAChC,GAAG;AACD,YAAA,MAAM,KAAK,MAAM,KAAK,MAAM,GAAG,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAC7D,YAAA,EAAE,GAAG,EAAE,CAAC,YAA2B,CAAC;YACpC,IAAI,EAAE,KAAK,IAAI,EAAE;AACf,gBAAA,MAAM,KAAK,CAAC,CAAoF,kFAAA,CAAA,CAAC,CAAC;AACnG,aAAA;AACF,SAAA,QAAQ,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAEzC,QAAA,OAAO,MAAM,CAAC;KACf;;iHAlLU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,mCAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,0ZCtFjC,gtBAiBA,EAAA,MAAA,EAAA,CAAA,quCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,qCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,CAAA,CAAA;2FDqEa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;+BACE,cAAc,EAAA,aAAA,EAGT,iBAAiB,CAAC,SAAS,EAAA,QAAA,EAAA,gtBAAA,EAAA,MAAA,EAAA,CAAA,quCAAA,CAAA,EAAA,CAAA;gJAU/B,WAAW,EAAA,CAAA;sBADrB,SAAS;gBAAC,IAAA,EAAA,CAAA,UAAU,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAA;gBAO1B,iBAAiB,EAAA,CAAA;sBAD3B,SAAS;gBAAC,IAAA,EAAA,CAAA,iBAAiB,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAA;gBAUjC,cAAc,EAAA,CAAA;sBADxB,KAAK;gBAeC,MAAM,EAAA,CAAA;sBADZ,MAAM;gBAOA,KAAK,EAAA,CAAA;sBADX,YAAY;uBAAC,OAAO,CAAA;;;AEhIvB;;;;;;;;AAQG;AASH;;AAEG;MAiBU,iBAAiB,CAAA;;8GAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAjB,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,iBAV1B,oBAAoB;QACpB,qBAAqB;AACrB,QAAA,sBAAsB,aANtB,YAAY;AACZ,QAAA,eAAe,aAQf,oBAAoB;QACpB,qBAAqB;QACrB,sBAAsB,CAAA,EAAA,CAAA,CAAA;AAGb,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,YAd1B,YAAY;QACZ,eAAe,CAAA,EAAA,CAAA,CAAA;2FAaN,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAhB7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,eAAe;AAChB,qBAAA;AACD,oBAAA,YAAY,EAAE;wBACZ,oBAAoB;wBACpB,qBAAqB;wBACrB,sBAAsB;AACvB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,oBAAoB;wBACpB,qBAAqB;wBACrB,sBAAsB;AACvB,qBAAA;iBACF,CAAA;;;ACnCD;;;;;;;;AAQG;;ACRH;;AAEG;;;;"}
@@ -611,7 +611,7 @@ class SciViewportComponent {
611
611
  }
612
612
  /** @internal */
613
613
  set setViewport(viewport) {
614
- this._viewport = coerceElement(viewport);
614
+ this._viewportElement = coerceElement(viewport);
615
615
  }
616
616
  /** @internal */
617
617
  set setViewportClient(viewportClient) {
@@ -628,7 +628,7 @@ class SciViewportComponent {
628
628
  return this._scrollbarStyle;
629
629
  }
630
630
  focus() {
631
- this._viewport && this._viewport.focus();
631
+ this._viewportElement?.focus();
632
632
  }
633
633
  onScroll(event) {
634
634
  this.scroll.emit(event);
@@ -639,7 +639,7 @@ class SciViewportComponent {
639
639
  * @see Element.scrollTop
640
640
  */
641
641
  get scrollTop() {
642
- return this._viewport.scrollTop;
642
+ return this._viewportElement.scrollTop;
643
643
  }
644
644
  /**
645
645
  * Sets the number of pixels that the viewport client is scrolled vertically.
@@ -647,7 +647,7 @@ class SciViewportComponent {
647
647
  * @see Element.scrollTop
648
648
  */
649
649
  set scrollTop(scrollTop) {
650
- this._viewport.scrollTop = scrollTop;
650
+ this._viewportElement.scrollTop = scrollTop;
651
651
  }
652
652
  /**
653
653
  * Returns the number of pixels that the viewport client is scrolled horizontally.
@@ -655,7 +655,7 @@ class SciViewportComponent {
655
655
  * @see Element.scrollLeft
656
656
  */
657
657
  get scrollLeft() {
658
- return this._viewport.scrollLeft;
658
+ return this._viewportElement.scrollLeft;
659
659
  }
660
660
  /**
661
661
  * Sets the number of pixels that the viewport client is scrolled horizontally.
@@ -663,7 +663,7 @@ class SciViewportComponent {
663
663
  * @see Element.scrollLeft
664
664
  */
665
665
  set scrollLeft(scrollLeft) {
666
- this._viewport.scrollLeft = scrollLeft;
666
+ this._viewportElement.scrollLeft = scrollLeft;
667
667
  }
668
668
  /**
669
669
  * Returns the height of the viewport client.
@@ -671,7 +671,7 @@ class SciViewportComponent {
671
671
  * @see Element.scrollHeight
672
672
  */
673
673
  get scrollHeight() {
674
- return this._viewport.scrollHeight;
674
+ return this._viewportElement.scrollHeight;
675
675
  }
676
676
  /**
677
677
  * Returns the width of the viewport client.
@@ -679,13 +679,13 @@ class SciViewportComponent {
679
679
  * @see Element.scrollWidth
680
680
  */
681
681
  get scrollWidth() {
682
- return this._viewport.scrollWidth;
682
+ return this._viewportElement.scrollWidth;
683
683
  }
684
684
  /**
685
685
  * Returns the viewport {HTMLElement}.
686
686
  */
687
687
  get viewportElement() {
688
- return this._viewport;
688
+ return this._viewportElement;
689
689
  }
690
690
  /**
691
691
  * Returns the viewport client {HTMLElement}.
@@ -698,16 +698,18 @@ class SciViewportComponent {
698
698
  *
699
699
  * @param element - the element to be checked
700
700
  * @param fit - control if the element must fully or partially fit into the viewport
701
+ *
702
+ * @throws if the element is not contained in the viewport's slotted content.
701
703
  */
702
704
  isElementInView(element, fit) {
703
705
  const elLeft = this.computeOffset(element, 'left');
704
- const elRight = elLeft + element.offsetWidth;
706
+ const elRight = elLeft + coerceElement(element).offsetWidth;
705
707
  const elTop = this.computeOffset(element, 'top');
706
- const elBottom = elTop + element.offsetHeight;
707
- const vpLeft = this._viewport.scrollLeft;
708
- const vpRight = vpLeft + this._viewport.clientWidth;
709
- const vpTop = this._viewport.scrollTop;
710
- const vpBottom = vpTop + this._viewport.clientHeight;
708
+ const elBottom = elTop + coerceElement(element).offsetHeight;
709
+ const vpLeft = this._viewportElement.scrollLeft;
710
+ const vpRight = vpLeft + this._viewportElement.clientWidth;
711
+ const vpTop = this._viewportElement.scrollTop;
712
+ const vpBottom = vpTop + this._viewportElement.clientHeight;
711
713
  switch (fit) {
712
714
  case 'full':
713
715
  return (elLeft >= vpLeft && elRight <= vpRight) && (elTop >= vpTop && elBottom <= vpBottom);
@@ -722,24 +724,28 @@ class SciViewportComponent {
722
724
  *
723
725
  * @param element - the element to scroll into the viewport
724
726
  * @param offset - the gap between the element and the viewport
727
+ *
728
+ * @throws if the element is not contained in the viewport's slotted content.
725
729
  */
726
730
  scrollIntoView(element, offset = 50) {
727
- this._viewport.scrollTop = this.computeOffset(element, 'top') - offset;
728
- this._viewport.scrollLeft = this.computeOffset(element, 'left') - offset;
731
+ this._viewportElement.scrollTop = this.computeOffset(element, 'top') - offset;
732
+ this._viewportElement.scrollLeft = this.computeOffset(element, 'left') - offset;
729
733
  }
730
734
  /**
731
735
  * Computes the distance of the element to the viewport's left or top border.
736
+ *
737
+ * @throws if the element is not contained in the viewport's slotted content.
732
738
  */
733
739
  computeOffset(element, border) {
734
- if (!isChildOf(element, this._viewport)) {
735
- throw Error('element not a child of the viewport');
736
- }
737
740
  let offset = 0;
738
- let el = element;
741
+ let el = coerceElement(element);
739
742
  do {
740
743
  offset += (border === 'left' ? el.offsetLeft : el.offsetTop);
741
744
  el = el.offsetParent;
742
- } while (el !== null && el !== this._viewport);
745
+ if (el === null) {
746
+ throw Error(`[ElementNotContainedError] Element not contained in the viewport's slotted content`);
747
+ }
748
+ } while (el !== this.host.nativeElement);
743
749
  return offset;
744
750
  }
745
751
  }
@@ -762,18 +768,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImpor
762
768
  type: HostListener,
763
769
  args: ['focus']
764
770
  }] } });
765
- /**
766
- * Returns 'true' if the given element is a child element of the parent element.
767
- */
768
- function isChildOf(element, parent) {
769
- while (element.parentElement !== null) {
770
- element = element.parentElement;
771
- if (element === parent) {
772
- return true;
773
- }
774
- }
775
- return false;
776
- }
777
771
 
778
772
  /*
779
773
  * Copyright (c) 2018-2019 Swiss Federal Railways
@@ -1 +1 @@
1
- {"version":3,"file":"scion-components-viewport.mjs","sources":["../../../../projects/scion/components/viewport/src/native-scrollbar-track-size-provider.service.ts","../../../../projects/scion/components/viewport/src/scrollbar/scrollbar.component.ts","../../../../projects/scion/components/viewport/src/scrollbar/scrollbar.component.html","../../../../projects/scion/components/viewport/src/scrollable.directive.ts","../../../../projects/scion/components/viewport/src/viewport.component.ts","../../../../projects/scion/components/viewport/src/viewport.component.html","../../../../projects/scion/components/viewport/src/viewport.module.ts","../../../../projects/scion/components/viewport/src/public_api.ts","../../../../projects/scion/components/viewport/src/scion-components-viewport.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 {Inject, Injectable, NgZone, OnDestroy} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {BehaviorSubject, fromEvent, Observable, Subject} from 'rxjs';\nimport {debounceTime, distinctUntilChanged, map, startWith, takeUntil} from 'rxjs/operators';\n\n/**\n * Provides the native scrollbar tracksize.\n *\n * @dynamic ignore 'strictMetadataEmit' errors due to the usage of {@link Document} as ambient type for DI.\n */\n@Injectable({providedIn: 'root'})\nexport class SciNativeScrollbarTrackSizeProvider implements OnDestroy {\n\n private readonly _trackSize$ = new BehaviorSubject<NativeScrollbarTrackSize | null>(null);\n private readonly _destroy$ = new Subject<void>();\n\n constructor(@Inject(DOCUMENT) private _document: Document, private _zone: NgZone) {\n this.installNativeScrollbarTrackSizeListener();\n }\n\n /**\n * Returns an {Observable} which emits the native scrollbar track size, if any, or else `null`.\n *\n * Upon subscription, it emits the track size immediately, and then continuously emits when the track size changes.\n */\n public get trackSize$(): Observable<NativeScrollbarTrackSize | null> {\n return this._trackSize$;\n }\n\n /**\n * Returns the native scrollbar track size, if any, or else `null`.\n */\n public get trackSize(): NativeScrollbarTrackSize | null {\n return this._trackSize$.getValue();\n }\n\n /**\n * Computes the native scrollbar track size.\n *\n * @returns native track size, or `null` if the native scrollbars sit on top of the content.\n */\n private computeTrackSize(): NativeScrollbarTrackSize | null {\n // create temporary viewport and viewport client with native scrollbars to compute scrolltrack width\n const viewportDiv = this._document.createElement('div');\n setStyle(viewportDiv, {\n position: 'absolute',\n overflow: 'scroll',\n height: '100px',\n width: '100px',\n border: 0,\n visibility: 'hidden',\n });\n\n const viewportClientDiv = this._document.createElement('div');\n setStyle(viewportClientDiv, {\n height: '100%',\n width: '100%',\n border: 0,\n });\n\n viewportDiv.appendChild(viewportClientDiv);\n this._document.body.appendChild(viewportDiv);\n\n const trackSize: NativeScrollbarTrackSize = {\n hScrollbarTrackHeight: viewportDiv.offsetHeight - viewportClientDiv.offsetHeight,\n vScrollbarTrackWidth: viewportDiv.offsetWidth - viewportClientDiv.offsetWidth,\n };\n\n // destroy temporary viewport\n this._document.body.removeChild(viewportDiv);\n if (trackSize.hScrollbarTrackHeight === 0 && trackSize.vScrollbarTrackWidth === 0) {\n return null;\n }\n\n return trackSize;\n }\n\n private installNativeScrollbarTrackSizeListener(): void {\n // We compute the size of the native scrollbar track when the browser fires the onresize window event.\n // This event is also fired on page zoom or when displaying a hidden document. Hidden documents do not have\n // a scrollbar track size until being displayed, e.g., after showing hidden iframes.\n this._zone.runOutsideAngular(() => {\n fromEvent(window, 'resize')\n .pipe(\n debounceTime(5),\n startWith(null), // trigger the initial computation\n map(() => this.computeTrackSize()),\n distinctUntilChanged((t1, t2) => JSON.stringify(t1) === JSON.stringify(t2)),\n takeUntil(this._destroy$),\n )\n .subscribe(trackSize => {\n this._zone.run(() => this._trackSize$.next(trackSize));\n });\n });\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n }\n}\n\n/**\n * Applies the given style(s) to the given element.\n *\n * Specify styles to be modified by passing a dictionary containing CSS property names (hyphen case).\n * To remove a style, set its value to `null`.\n *\n * @ignore\n */\nfunction setStyle(element: HTMLElement, style: {[style: string]: any | null}): void {\n Object.keys(style).forEach(key => element.style.setProperty(key, style[key]));\n}\n\n/**\n * Represents the native scrollbar track size.\n */\nexport interface NativeScrollbarTrackSize {\n hScrollbarTrackHeight: number;\n vScrollbarTrackWidth: number;\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 {DOCUMENT} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, ElementRef, HostBinding, Inject, Input, NgZone, OnDestroy, ViewChild} from '@angular/core';\nimport {fromEvent, merge, Observable, of, Subject, timer} from 'rxjs';\nimport {debounceTime, first, map, startWith, switchMap, takeUntil, takeWhile, withLatestFrom} from 'rxjs/operators';\nimport {fromDimension$, fromMutation$} from '@scion/toolkit/observable';\nimport {filterArray, subscribeInside} from '@scion/toolkit/operators';\n\n/**\n * Renders a vertical or horizontal scrollbar.\n *\n * The scrollbar features the following functionality:\n * - allows to move the thumb by mouse or touch\n * - enlarges the thumb if the mouse pointer is near the thumb\n * - allows paging on mousedown on the scroll track\n *\n * ### CSS styling:\n *\n * You can override the following CSS variables:\n *\n * - sci-scrollbar-color: Sets the color of the scrollbar (by default, uses `rgb(78, 78, 78)`).\n *\n * Example:\n *\n * ```css\n *\n * sci-scrollbar {\n * --sci-scrollbar-color: blue;\n * }\n * ```\n */\n@Component({\n selector: 'sci-scrollbar',\n templateUrl: './scrollbar.component.html',\n styleUrls: ['./scrollbar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SciScrollbarComponent implements OnDestroy {\n\n /**\n * Timeout for debouncing viewport resize events that trigger the scroll position computation.\n *\n * Debouncing is particularly important in the context of Angular animations, since they continuously\n * trigger resize events. Debouncing prevents the scrollbar from flickering, for example, when the user\n * expands a panel that contains a viewport.\n *\n * @internal\n */\n public static readonly VIEWPORT_RESIZE_DEBOUNCE_TIME = 50;\n\n private _destroy$ = new Subject<void>();\n private _viewport!: HTMLElement;\n private _viewportChange$ = new Subject<void>();\n private _lastDragPosition: number | null = null;\n\n private _overflow = false;\n private _thumbSizeFr = 0;\n private _thumbPositionFr = 0;\n\n /* @docs-private */\n @ViewChild('thumb_handle', {static: true})\n public thumbElement!: ElementRef<HTMLDivElement>;\n\n @HostBinding('class.vertical')\n public get vertical(): boolean {\n return this.direction === 'vscroll';\n }\n\n @HostBinding('class.horizontal')\n public get horizontal(): boolean {\n return this.direction === 'hscroll';\n }\n\n @HostBinding('class.scrolling')\n public get scrolling(): boolean {\n return this._lastDragPosition !== null;\n }\n\n /**\n * Specifies the direction of the scrollbar.\n *\n * By default, if not specified, renders a vertical scrollbar.\n */\n @Input()\n public direction: 'vscroll' | 'hscroll' = 'vscroll';\n\n /**\n * The viewport to provide scrollbars for.\n */\n @Input('viewport') // eslint-disable-line @angular-eslint/no-input-rename\n public set setViewport(viewport: HTMLElement) {\n this._viewport = viewport;\n this._viewportChange$.next();\n }\n\n constructor(private _host: ElementRef<HTMLElement>,\n @Inject(DOCUMENT) private _document: any,\n private _zone: NgZone) {\n this._viewportChange$\n .pipe(\n switchMap(() => {\n if (!this._viewport) {\n return of(undefined);\n }\n return merge(\n this.viewportScrollChange$(),\n this.viewportDimensionChange$({debounceTime: SciScrollbarComponent.VIEWPORT_RESIZE_DEBOUNCE_TIME}),\n this.viewportClientDimensionChange$({debounceTime: SciScrollbarComponent.VIEWPORT_RESIZE_DEBOUNCE_TIME}),\n );\n }),\n subscribeInside(continueFn => this._zone.runOutsideAngular(continueFn)),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n if (this._viewport) {\n this.renderScrollPosition();\n }\n else {\n this.unsetScrollPosition();\n }\n });\n }\n\n /**\n * Computes the scroll position and updates CSS variables to render the scroll position in the UI.\n */\n private renderScrollPosition(): void {\n NgZone.assertNotInAngularZone();\n const viewportSize = this.viewportSize;\n const viewportClientSize = this.viewportClientSize;\n const thumbPositionFr = this.scrollPosition / viewportClientSize;\n const thumbSizeFr = viewportSize / viewportClientSize;\n const overflow = viewportClientSize > viewportSize;\n\n if (thumbPositionFr !== this._thumbPositionFr || thumbSizeFr !== this._thumbSizeFr) {\n this._thumbPositionFr = thumbPositionFr;\n this._thumbSizeFr = thumbSizeFr;\n this.setCssVariable('--ɵsci-scrollbar-thumb-position-fr', thumbPositionFr);\n this.setCssVariable('--ɵsci-scrollbar-thumb-size-fr', thumbSizeFr);\n }\n\n if (overflow !== this._overflow) {\n this._overflow = overflow;\n overflow ? this._host.nativeElement.classList.add('overflow') : this._host.nativeElement.classList.remove('overflow');\n }\n }\n\n /**\n * Clears CSS variables used for rendering the scroll position in the UI.\n */\n private unsetScrollPosition(): void {\n NgZone.assertNotInAngularZone();\n this._thumbPositionFr = 0;\n this._thumbSizeFr = 0;\n this._overflow = false;\n this.setCssVariable('--ɵsci-scrollbar-thumb-position-fr', 0);\n this.setCssVariable('--ɵsci-scrollbar-thumb-size-fr', 0);\n this._host.nativeElement.classList.remove('overflow');\n }\n\n /* @docs-private */\n public onTouchStart(event: TouchEvent): void {\n event.preventDefault();\n this._lastDragPosition = this.vertical ? event.touches[0].screenY : event.touches[0].screenX;\n }\n\n /* @docs-private */\n public onTouchMove(event: TouchEvent): void {\n event.preventDefault();\n\n const newDragPositionPx = this.vertical ? event.touches[0].screenY : event.touches[0].screenX;\n const scrollbarPanPx = newDragPositionPx - this._lastDragPosition!;\n const viewportPanPx = this.toViewportPanPx(scrollbarPanPx);\n this._lastDragPosition = newDragPositionPx;\n this.moveViewportClient(viewportPanPx);\n }\n\n /* @docs-private */\n public onTouchEnd(event: TouchEvent): void {\n event.preventDefault();\n this._lastDragPosition = null;\n }\n\n /* @docs-private */\n public onMouseDown(mousedownEvent: MouseEvent): void {\n if (mousedownEvent.button !== 0) {\n return;\n }\n\n mousedownEvent.preventDefault();\n this._lastDragPosition = this.vertical ? mousedownEvent.screenY : mousedownEvent.screenX;\n\n // Listen for 'mousemove' events\n this._zone.runOutsideAngular(() => {\n const mousemoveListener = merge(fromEvent<MouseEvent>(this._document, 'mousemove'), fromEvent<MouseEvent>(this._document, 'sci-mousemove'))\n .pipe(takeUntil(this._destroy$))\n .subscribe(mousemoveEvent => {\n mousemoveEvent.preventDefault();\n\n const newDragPositionPx = this.vertical ? mousemoveEvent.screenY : mousemoveEvent.screenX;\n const scrollbarPanPx = newDragPositionPx - this._lastDragPosition!;\n const viewportPanPx = this.toViewportPanPx(scrollbarPanPx);\n this._lastDragPosition = newDragPositionPx;\n this.moveViewportClient(viewportPanPx);\n });\n\n // Listen for 'mouseup' events; use 'capture phase' and 'stop propagation' to not close overlays\n merge(fromEvent<MouseEvent>(this._document, 'mouseup', {capture: true}), fromEvent<MouseEvent>(this._document, 'sci-mouseup'))\n .pipe(first(), takeUntil(this._destroy$))\n .subscribe(mouseupEvent => {\n mouseupEvent.stopPropagation();\n mousemoveListener.unsubscribe();\n this._lastDragPosition = null;\n });\n });\n }\n\n /* @docs-private */\n public onScrollTrackMouseDown(event: MouseEvent, direction: 'up' | 'down'): void {\n const signum = (direction === 'up' ? -1 : +1);\n this.scrollWhileMouseDown(this.toViewportPanPx(signum * this.thumbSize), event);\n }\n\n /**\n * Projects the given scrollbar scroll pixels into viewport scroll pixels.\n */\n private toViewportPanPx(scrollbarPanPx: number): number {\n const scrollRangePx = this.trackSize - this.thumbSize;\n const scrollRatio = scrollbarPanPx / scrollRangePx;\n return scrollRatio * (this.viewportClientSize - this.viewportSize);\n }\n\n /**\n * Moves the viewport client by the specified numbers of pixels.\n */\n private moveViewportClient(viewportPanPx: number): void {\n if (this.vertical) {\n this._viewport.scrollTop += viewportPanPx;\n }\n else {\n this._viewport.scrollLeft += viewportPanPx;\n }\n }\n\n /**\n * Indicates if the content overflows.\n */\n public get overflow(): boolean {\n return this._overflow;\n }\n\n /**\n * Scrolls continuously while holding the mouse pressed, or until the mouse leaves the scrolltrack.\n */\n private scrollWhileMouseDown(viewportScrollPx: number, mousedownEvent: MouseEvent): void {\n // The `EventTarget` type of `Event.target` is not yet compatible with `FromEventTarget` used in `fromEvent`.\n // This will be fixed in rxjs version 7.0.0. Refer to https://github.com/ReactiveX/rxjs/commit/5f022d784570684632e6fd5ae247fc259ee34c4b\n // for more details.\n const scrollTrackElement = mousedownEvent.target as Element;\n\n // scroll continuously every 50ms after an initial delay of 250ms\n timer(250, 50)\n .pipe(\n // continue chain with latest mouse event\n withLatestFrom(merge(of(mousedownEvent), fromEvent<MouseEvent>(scrollTrackElement, 'mousemove')), (tick, event) => event),\n // start immediately\n startWith(mousedownEvent),\n // stop scrolling if the thumb hits the mouse pointer position\n takeWhile((event: MouseEvent) => scrollTrackElement === this._document.elementFromPoint(event.clientX, event.clientY)),\n debounceTime(10),\n // stop scrolling on mouseout or mouseup\n takeUntil(merge(fromEvent(scrollTrackElement, 'mouseout'), fromEvent(scrollTrackElement, 'mouseup'))),\n )\n .subscribe(() => {\n this.moveViewportClient(viewportScrollPx);\n });\n }\n\n /**\n * Emits whenever the viewport scrolls.\n */\n private viewportScrollChange$(): Observable<void> {\n return fromEvent(this._viewport, 'scroll', {passive: true}).pipe(map(() => undefined));\n }\n\n /**\n * Emits on subscription, and then each time the size of the viewport changes.\n */\n private viewportDimensionChange$(options: {debounceTime: number}): Observable<void> {\n return fromDimension$(this._viewport)\n .pipe(\n // Debouncing is particularly important in the context of Angular animations, since they continuously\n // trigger resize events. Debouncing prevents the scrollbar from flickering, for example, when the user\n // expands a panel that contains a viewport.\n debounceTime(options.debounceTime),\n map(() => undefined),\n );\n }\n\n /**\n * Emits on subscription, and then each time the size or style property of the viewport client changes.\n */\n private viewportClientDimensionChange$(options: {debounceTime: number}): Observable<void> {\n return this.children$(this._viewport)\n .pipe(\n switchMap(children => merge(...children.map(child => merge(\n fromDimension$(child),\n // Observe style mutations since some transformations change the scroll position without necessarily triggering a dimension change,\n // e.g., `scale` or `translate` used by some virtual scroll implementations\n fromMutation$(child, {subtree: false, childList: false, attributeFilter: ['style']})),\n ))),\n // Debouncing is particularly important in the context of Angular animations, since they continuously\n // trigger resize events. Debouncing prevents the scrollbar from flickering, for example, when the user\n // expands a panel that contains a viewport.\n debounceTime(options.debounceTime),\n map(() => undefined),\n );\n }\n\n /**\n * Emits the children of the passed element, and then each time child elements are added or removed.\n */\n private children$(element: HTMLElement): Observable<HTMLElement[]> {\n return fromMutation$(element, {subtree: false, childList: true})\n .pipe(\n startWith(undefined as void),\n map(() => Array.from(element.children)),\n filterArray((child: Element): child is HTMLElement => child instanceof HTMLElement),\n );\n }\n\n private setCssVariable(key: string, value: any): void {\n this._host.nativeElement.style.setProperty(key, value);\n }\n\n private get viewportSize(): number {\n return this._viewport ? (this.vertical ? this._viewport.clientHeight : this._viewport.clientWidth) : 0;\n }\n\n private get viewportClientSize(): number {\n return this._viewport ? (this.vertical ? this._viewport.scrollHeight : this._viewport.scrollWidth) : 0;\n }\n\n private get scrollPosition(): number {\n return this._viewport ? (this.vertical ? this._viewport.scrollTop : this._viewport.scrollLeft) : 0;\n }\n\n private get thumbSize(): number {\n const thumbElement = this.thumbElement.nativeElement;\n return this.vertical ? thumbElement.clientHeight : thumbElement.clientWidth;\n }\n\n private get trackSize(): number {\n const trackElement = this._host.nativeElement;\n return this.vertical ? trackElement.clientHeight : trackElement.clientWidth;\n }\n\n /* @docs-private */\n public ngOnDestroy(): void {\n this._destroy$.next();\n }\n}\n","<!-- scrolltrack to move the viewport client upwards (paging) -->\n<div class=\"scrolltrack-start\" (mousedown)=\"onScrollTrackMouseDown($event, 'up')\"></div>\n\n<!-- scrollthumb -->\n<div #thumb_handle\n class=\"thumb-handle\"\n [class.vertical]=\"vertical\"\n [class.horizontal]=\"horizontal\"\n (mousedown)=\"onMouseDown($event)\"\n (touchstart)=\"onTouchStart($event)\"\n (touchmove)=\"onTouchMove($event)\"\n (touchend)=\"onTouchEnd($event)\"\n (touchcancel)=\"onTouchEnd($event)\">\n <div class=\"thumb\"\n [class.vertical]=\"vertical\"\n [class.horizontal]=\"horizontal\">\n </div>\n</div>\n\n<!-- scrolltrack to move the viewport client downwards (paging) -->\n<div class=\"scrolltrack-end\" (mousedown)=\"onScrollTrackMouseDown($event, 'down')\"></div>\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 {Directive, ElementRef, Input, OnChanges, OnDestroy, Renderer2, SimpleChanges} from '@angular/core';\nimport {NativeScrollbarTrackSize, SciNativeScrollbarTrackSizeProvider} from './native-scrollbar-track-size-provider.service';\nimport {map, takeUntil} from 'rxjs/operators';\nimport {merge, Subject} from 'rxjs';\nimport {Dictionary} from '@scion/toolkit/util';\n\n/**\n * Makes the host element natively scrollable and hides native scrollbars by default, unless native scrollbars\n * already sit on top of the viewport (e.g. in OS X).\n *\n * Because there is no cross-browser API to hide scrollbars without losing native scroll support, we set 'overflow'\n * to 'scroll' but shift the native scrollbars out of the visible viewport area. The shift offset is computed upfront.\n *\n * This directive expects its host element to be the only child in document flow in its parent DOM element. It makes the host element\n * fill up the entire space (width and height set to 100%). The parent element must have its CSS `overflow` property set to `hidden`\n * to hide the pushed out native scrollbars.\n */\n@Directive({\n selector: '[sciScrollable]',\n})\nexport class SciScrollableDirective implements OnChanges, OnDestroy {\n\n private _destroy$ = new Subject<void>();\n private _inputChange$ = new Subject<void>();\n\n /**\n * Controls whether to display native scrollbars.\n * Has no effect if the native scrollbar sits on top of the content, e.g. in OS X.\n */\n @Input('sciScrollableDisplayNativeScrollbar') // eslint-disable-line @angular-eslint/no-input-rename\n public isDisplayNativeScrollbar: boolean = false;\n\n constructor(private _host: ElementRef<HTMLDivElement>,\n private _renderer: Renderer2,\n nativeScrollbarTrackSizeProvider: SciNativeScrollbarTrackSizeProvider) {\n merge(\n nativeScrollbarTrackSizeProvider.trackSize$,\n this._inputChange$.pipe(map(() => nativeScrollbarTrackSizeProvider.trackSize)),\n )\n .pipe(takeUntil(this._destroy$))\n .subscribe(nativeScrollbarTrackSize => {\n if (nativeScrollbarTrackSize === null) { // the native scrollbar sits on top of the content\n this.useNativeScrollbars();\n }\n else {\n this.isDisplayNativeScrollbar ? this.useNativeScrollbars() : this.shiftNativeScrollbars(nativeScrollbarTrackSize);\n }\n });\n }\n\n /**\n * Uses the native scrollbars when content overflows.\n */\n private useNativeScrollbars(): void {\n this.setStyle(this._host.nativeElement, {\n overflow: 'auto',\n width: '100%',\n height: '100%',\n marginRight: 0,\n marginBottom: 0,\n });\n }\n\n /**\n * Shifts the native scrollbars out of the visible viewport area.\n */\n private shiftNativeScrollbars(nativeScrollbarTrackSize: NativeScrollbarTrackSize): void {\n this.setStyle(this._host.nativeElement, {\n overflow: 'scroll',\n width: `calc(100% + ${nativeScrollbarTrackSize.vScrollbarTrackWidth}px`,\n height: `calc(100% + ${nativeScrollbarTrackSize.hScrollbarTrackHeight}px`,\n marginRight: `-${nativeScrollbarTrackSize.vScrollbarTrackWidth}px`,\n marginBottom: `-${nativeScrollbarTrackSize.hScrollbarTrackHeight}px`,\n });\n }\n\n private setStyle(element: Element, style: Dictionary): void {\n Object.keys(style).forEach(key => this._renderer.setStyle(element, key, style[key]));\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this._inputChange$.next();\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\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 {Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild, ViewEncapsulation} from '@angular/core';\nimport {SciNativeScrollbarTrackSizeProvider} from './native-scrollbar-track-size-provider.service';\nimport {coerceElement} from '@angular/cdk/coercion';\n\n/**\n * Represents a viewport with slotted content (`<ng-content>`) used as scrollable content. By default, content is added to a CSS grid layout.\n *\n * The viewport component displays scrollbars when its content overflows. Scrollbars are displayed on top of the content, not next to it.\n * 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.\n * The viewport remains natively scrollable with the native scrollbars shifted out of the viewport's visible area. Consequently, the viewport keeps supporting\n * native scrolling features such as touch gestures, scroll speed acceleration, or scrolling near the viewport edges during drag-and-drop operations.\n *\n * ```html\n * <sci-viewport>\n * your content\n * </sci-viewport>\n * ```\n *\n * ## Adding the viewport to a layout\n *\n * Typically you would add the viewport component to a flexible layout, filling the remaining space vertically and horizontally, such as a flexbox container\n * with the viewport's `flex` CSS property set to either `flex: auto` or `flex: 1 1 0`.\n *\n * 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\n * a layout constraint. Depending on the layout, different steps may be necessary to prevent the viewport from growing to infinity.\n *\n * - If practical, give the viewport a fixed size or a maximum size.\n * - 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,\n * 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\n * `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\n * the remaining extra space is distributed. If the viewport does not appear after setting this property, check its parent elements' content sizes.\n * 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`.\n * Another approach would be to set the minimum height of all parents to `0`, as follows: `min-height: 0`.\n *\n * For the complete documentation on the flex layout and its features, refer to https://developer.mozilla.org/en-US/docs/Web/CSS/flex.\n *\n *\n * ## Layouting the viewport's slotted content\n *\n * By default, the viewport's content is added to a CSS grid container with a single column, filling remaining space vertically and horizontally.\n * 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.\n *\n * #### Example of adding slotted content to a CSS flex container.\n * ```css\n * sci-viewport::part(content) {\n * display: flex;\n * flex-direction: column;\n * }\n * ```\n *\n * #### Example of configuring CSS grid container with two columns\n * ```css\n * sci-viewport::part(content) {\n * grid-template-columns: 1fr 1fr;\n * gap: 1em;\n * }\n * ```\n *\n * ## Styling of scrollbars\n *\n * You can override the following CSS variables to control the appearance of the scrollbar:\n *\n * - sci-viewport-scrollbar-color: Sets the color of the scrollbar (by default, uses `rgb(78, 78, 78)`).\n *\n * ```css\n * sci-viewport {\n * --sci-viewport-scrollbar-color: blue;\n * }\n * ```\n */\n@Component({\n selector: 'sci-viewport',\n templateUrl: './viewport.component.html',\n styleUrls: ['./viewport.component.scss'],\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class SciViewportComponent {\n\n private _viewport!: HTMLDivElement;\n private _viewportClient!: HTMLDivElement;\n private _scrollbarStyle: ScrollbarStyle = 'on-top';\n\n /** @internal */\n @ViewChild('viewport', {static: true})\n public set setViewport(viewport: ElementRef<HTMLDivElement>) {\n this._viewport = coerceElement(viewport);\n }\n\n /** @internal */\n @ViewChild('viewport_client', {static: true})\n public set setViewportClient(viewportClient: ElementRef<HTMLDivElement>) {\n this._viewportClient = coerceElement(viewportClient);\n }\n\n /**\n * Controls whether to use native scrollbars or, which is by default, emulated scrollbars that sit on top of the viewport client.\n * In the latter, the viewport client remains natively scrollable.\n */\n @Input()\n public set scrollbarStyle(scrollbarStyle: ScrollbarStyle) {\n this._scrollbarStyle = scrollbarStyle || 'on-top';\n }\n\n public get scrollbarStyle(): ScrollbarStyle {\n return this._scrollbarStyle;\n }\n\n /**\n * Emits upon a scroll event.\n *\n * You can add [sciDimension] directive to the viewport or viewport client to be notified about layout changes.\n */\n @Output()\n public scroll = new EventEmitter<Event>(); // eslint-disable-line @angular-eslint/no-output-native\n\n constructor(public host: ElementRef<HTMLElement>, public nativeScrollbarTrackSizeProvider: SciNativeScrollbarTrackSizeProvider) {\n }\n\n @HostListener('focus')\n public focus(): void { // do not rename to expose the same focus method like `HTMLElement.focus()`.\n this._viewport && this._viewport.focus();\n }\n\n public onScroll(event: Event): void {\n this.scroll.emit(event);\n }\n\n /**\n * Returns the number of pixels that the viewport client is scrolled vertically.\n *\n * @see Element.scrollTop\n */\n public get scrollTop(): number {\n return this._viewport.scrollTop;\n }\n\n /**\n * Sets the number of pixels that the viewport client is scrolled vertically.\n *\n * @see Element.scrollTop\n */\n public set scrollTop(scrollTop: number) {\n this._viewport.scrollTop = scrollTop;\n }\n\n /**\n * Returns the number of pixels that the viewport client is scrolled horizontally.\n *\n * @see Element.scrollLeft\n */\n public get scrollLeft(): number {\n return this._viewport.scrollLeft;\n }\n\n /**\n * Sets the number of pixels that the viewport client is scrolled horizontally.\n *\n * @see Element.scrollLeft\n */\n public set scrollLeft(scrollLeft: number) {\n this._viewport.scrollLeft = scrollLeft;\n }\n\n /**\n * Returns the height of the viewport client.\n *\n * @see Element.scrollHeight\n */\n public get scrollHeight(): number {\n return this._viewport.scrollHeight;\n }\n\n /**\n * Returns the width of the viewport client.\n *\n * @see Element.scrollWidth\n */\n public get scrollWidth(): number {\n return this._viewport.scrollWidth;\n }\n\n /**\n * Returns the viewport {HTMLElement}.\n */\n public get viewportElement(): HTMLElement {\n return this._viewport;\n }\n\n /**\n * Returns the viewport client {HTMLElement}.\n */\n public get viewportClientElement(): HTMLElement {\n return this._viewportClient;\n }\n\n /**\n * Checks if the specified element is scrolled into the viewport.\n *\n * @param element - the element to be checked\n * @param fit - control if the element must fully or partially fit into the viewport\n */\n public isElementInView(element: HTMLElement, fit: 'full' | 'partial'): boolean {\n const elLeft = this.computeOffset(element, 'left');\n const elRight = elLeft + element.offsetWidth;\n const elTop = this.computeOffset(element, 'top');\n const elBottom = elTop + element.offsetHeight;\n\n const vpLeft = this._viewport.scrollLeft;\n const vpRight = vpLeft + this._viewport.clientWidth;\n const vpTop = this._viewport.scrollTop;\n const vpBottom = vpTop + this._viewport.clientHeight;\n\n switch (fit) {\n case 'full':\n return (elLeft >= vpLeft && elRight <= vpRight) && (elTop >= vpTop && elBottom <= vpBottom);\n case 'partial':\n return (elRight >= vpLeft && elLeft <= vpRight) && (elBottom >= vpTop && elTop <= vpBottom);\n default:\n throw Error('Unsupported fit strategy');\n }\n }\n\n /**\n * Scrolls the specified element into the viewport.\n *\n * @param element - the element to scroll into the viewport\n * @param offset - the gap between the element and the viewport\n */\n public scrollIntoView(element: HTMLElement, offset: number = 50): void {\n this._viewport.scrollTop = this.computeOffset(element, 'top') - offset;\n this._viewport.scrollLeft = this.computeOffset(element, 'left') - offset;\n }\n\n /**\n * Computes the distance of the element to the viewport's left or top border.\n */\n public computeOffset(element: HTMLElement, border: 'left' | 'top'): number {\n if (!isChildOf(element, this._viewport)) {\n throw Error('element not a child of the viewport');\n }\n\n let offset = 0;\n let el = element;\n do {\n offset += (border === 'left' ? el.offsetLeft : el.offsetTop);\n el = el.offsetParent as HTMLElement;\n } while (el !== null && el !== this._viewport);\n\n return offset;\n }\n}\n\n/**\n * Returns 'true' if the given element is a child element of the parent element.\n */\nfunction isChildOf(element: Element, parent: Element): boolean {\n while (element.parentElement !== null) {\n element = element.parentElement;\n if (element === parent) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Represents a scrollbar style.\n */\nexport type ScrollbarStyle = 'native' | 'on-top' | 'hidden';\n","<!-- 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\"></sci-scrollbar>\n <sci-scrollbar [direction]=\"'hscroll'\" [viewport]=\"viewport\"></sci-scrollbar>\n</ng-container>\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 {SciViewportComponent} from './viewport.component';\nimport {SciScrollbarComponent} from './scrollbar/scrollbar.component';\nimport {SciScrollableDirective} from './scrollable.directive';\nimport {ScrollingModule} from '@angular/cdk/scrolling';\n\n/**\n * Provides a viewport component with scrollbars that sit on top of the viewport client.\n */\n@NgModule({\n imports: [\n CommonModule,\n ScrollingModule,\n ],\n declarations: [\n SciViewportComponent,\n SciScrollbarComponent,\n SciScrollableDirective,\n ],\n exports: [\n SciViewportComponent,\n SciScrollbarComponent,\n SciScrollableDirective,\n ],\n})\nexport class SciViewportModule {\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/viewport'\n *\n * @see https://github.com/ng-packagr/ng-packagr/blob/master/docs/secondary-entrypoints.md\n */\nexport {SciViewportModule} from './viewport.module';\nexport * from './viewport.component';\nexport * from './scrollable.directive';\nexport * from './scrollbar/scrollbar.component';\nexport * from './native-scrollbar-track-size-provider.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.SciNativeScrollbarTrackSizeProvider","i4.SciScrollbarComponent","i5.SciScrollableDirective"],"mappings":"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"}
1
+ {"version":3,"file":"scion-components-viewport.mjs","sources":["../../../../projects/scion/components/viewport/src/native-scrollbar-track-size-provider.service.ts","../../../../projects/scion/components/viewport/src/scrollbar/scrollbar.component.ts","../../../../projects/scion/components/viewport/src/scrollbar/scrollbar.component.html","../../../../projects/scion/components/viewport/src/scrollable.directive.ts","../../../../projects/scion/components/viewport/src/viewport.component.ts","../../../../projects/scion/components/viewport/src/viewport.component.html","../../../../projects/scion/components/viewport/src/viewport.module.ts","../../../../projects/scion/components/viewport/src/public_api.ts","../../../../projects/scion/components/viewport/src/scion-components-viewport.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 {Inject, Injectable, NgZone, OnDestroy} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {BehaviorSubject, fromEvent, Observable, Subject} from 'rxjs';\nimport {debounceTime, distinctUntilChanged, map, startWith, takeUntil} from 'rxjs/operators';\n\n/**\n * Provides the native scrollbar tracksize.\n *\n * @dynamic ignore 'strictMetadataEmit' errors due to the usage of {@link Document} as ambient type for DI.\n */\n@Injectable({providedIn: 'root'})\nexport class SciNativeScrollbarTrackSizeProvider implements OnDestroy {\n\n private readonly _trackSize$ = new BehaviorSubject<NativeScrollbarTrackSize | null>(null);\n private readonly _destroy$ = new Subject<void>();\n\n constructor(@Inject(DOCUMENT) private _document: Document, private _zone: NgZone) {\n this.installNativeScrollbarTrackSizeListener();\n }\n\n /**\n * Returns an {Observable} which emits the native scrollbar track size, if any, or else `null`.\n *\n * Upon subscription, it emits the track size immediately, and then continuously emits when the track size changes.\n */\n public get trackSize$(): Observable<NativeScrollbarTrackSize | null> {\n return this._trackSize$;\n }\n\n /**\n * Returns the native scrollbar track size, if any, or else `null`.\n */\n public get trackSize(): NativeScrollbarTrackSize | null {\n return this._trackSize$.getValue();\n }\n\n /**\n * Computes the native scrollbar track size.\n *\n * @returns native track size, or `null` if the native scrollbars sit on top of the content.\n */\n private computeTrackSize(): NativeScrollbarTrackSize | null {\n // create temporary viewport and viewport client with native scrollbars to compute scrolltrack width\n const viewportDiv = this._document.createElement('div');\n setStyle(viewportDiv, {\n position: 'absolute',\n overflow: 'scroll',\n height: '100px',\n width: '100px',\n border: 0,\n visibility: 'hidden',\n });\n\n const viewportClientDiv = this._document.createElement('div');\n setStyle(viewportClientDiv, {\n height: '100%',\n width: '100%',\n border: 0,\n });\n\n viewportDiv.appendChild(viewportClientDiv);\n this._document.body.appendChild(viewportDiv);\n\n const trackSize: NativeScrollbarTrackSize = {\n hScrollbarTrackHeight: viewportDiv.offsetHeight - viewportClientDiv.offsetHeight,\n vScrollbarTrackWidth: viewportDiv.offsetWidth - viewportClientDiv.offsetWidth,\n };\n\n // destroy temporary viewport\n this._document.body.removeChild(viewportDiv);\n if (trackSize.hScrollbarTrackHeight === 0 && trackSize.vScrollbarTrackWidth === 0) {\n return null;\n }\n\n return trackSize;\n }\n\n private installNativeScrollbarTrackSizeListener(): void {\n // We compute the size of the native scrollbar track when the browser fires the onresize window event.\n // This event is also fired on page zoom or when displaying a hidden document. Hidden documents do not have\n // a scrollbar track size until being displayed, e.g., after showing hidden iframes.\n this._zone.runOutsideAngular(() => {\n fromEvent(window, 'resize')\n .pipe(\n debounceTime(5),\n startWith(null), // trigger the initial computation\n map(() => this.computeTrackSize()),\n distinctUntilChanged((t1, t2) => JSON.stringify(t1) === JSON.stringify(t2)),\n takeUntil(this._destroy$),\n )\n .subscribe(trackSize => {\n this._zone.run(() => this._trackSize$.next(trackSize));\n });\n });\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n }\n}\n\n/**\n * Applies the given style(s) to the given element.\n *\n * Specify styles to be modified by passing a dictionary containing CSS property names (hyphen case).\n * To remove a style, set its value to `null`.\n *\n * @ignore\n */\nfunction setStyle(element: HTMLElement, style: {[style: string]: any | null}): void {\n Object.keys(style).forEach(key => element.style.setProperty(key, style[key]));\n}\n\n/**\n * Represents the native scrollbar track size.\n */\nexport interface NativeScrollbarTrackSize {\n hScrollbarTrackHeight: number;\n vScrollbarTrackWidth: number;\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 {DOCUMENT} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, ElementRef, HostBinding, Inject, Input, NgZone, OnDestroy, ViewChild} from '@angular/core';\nimport {fromEvent, merge, Observable, of, Subject, timer} from 'rxjs';\nimport {debounceTime, first, map, startWith, switchMap, takeUntil, takeWhile, withLatestFrom} from 'rxjs/operators';\nimport {fromDimension$, fromMutation$} from '@scion/toolkit/observable';\nimport {filterArray, subscribeInside} from '@scion/toolkit/operators';\n\n/**\n * Renders a vertical or horizontal scrollbar.\n *\n * The scrollbar features the following functionality:\n * - allows to move the thumb by mouse or touch\n * - enlarges the thumb if the mouse pointer is near the thumb\n * - allows paging on mousedown on the scroll track\n *\n * ### CSS styling:\n *\n * You can override the following CSS variables:\n *\n * - sci-scrollbar-color: Sets the color of the scrollbar (by default, uses `rgb(78, 78, 78)`).\n *\n * Example:\n *\n * ```css\n *\n * sci-scrollbar {\n * --sci-scrollbar-color: blue;\n * }\n * ```\n */\n@Component({\n selector: 'sci-scrollbar',\n templateUrl: './scrollbar.component.html',\n styleUrls: ['./scrollbar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SciScrollbarComponent implements OnDestroy {\n\n /**\n * Timeout for debouncing viewport resize events that trigger the scroll position computation.\n *\n * Debouncing is particularly important in the context of Angular animations, since they continuously\n * trigger resize events. Debouncing prevents the scrollbar from flickering, for example, when the user\n * expands a panel that contains a viewport.\n *\n * @internal\n */\n public static readonly VIEWPORT_RESIZE_DEBOUNCE_TIME = 50;\n\n private _destroy$ = new Subject<void>();\n private _viewport!: HTMLElement;\n private _viewportChange$ = new Subject<void>();\n private _lastDragPosition: number | null = null;\n\n private _overflow = false;\n private _thumbSizeFr = 0;\n private _thumbPositionFr = 0;\n\n /* @docs-private */\n @ViewChild('thumb_handle', {static: true})\n public thumbElement!: ElementRef<HTMLDivElement>;\n\n @HostBinding('class.vertical')\n public get vertical(): boolean {\n return this.direction === 'vscroll';\n }\n\n @HostBinding('class.horizontal')\n public get horizontal(): boolean {\n return this.direction === 'hscroll';\n }\n\n @HostBinding('class.scrolling')\n public get scrolling(): boolean {\n return this._lastDragPosition !== null;\n }\n\n /**\n * Specifies the direction of the scrollbar.\n *\n * By default, if not specified, renders a vertical scrollbar.\n */\n @Input()\n public direction: 'vscroll' | 'hscroll' = 'vscroll';\n\n /**\n * The viewport to provide scrollbars for.\n */\n @Input('viewport') // eslint-disable-line @angular-eslint/no-input-rename\n public set setViewport(viewport: HTMLElement) {\n this._viewport = viewport;\n this._viewportChange$.next();\n }\n\n constructor(private _host: ElementRef<HTMLElement>,\n @Inject(DOCUMENT) private _document: any,\n private _zone: NgZone) {\n this._viewportChange$\n .pipe(\n switchMap(() => {\n if (!this._viewport) {\n return of(undefined);\n }\n return merge(\n this.viewportScrollChange$(),\n this.viewportDimensionChange$({debounceTime: SciScrollbarComponent.VIEWPORT_RESIZE_DEBOUNCE_TIME}),\n this.viewportClientDimensionChange$({debounceTime: SciScrollbarComponent.VIEWPORT_RESIZE_DEBOUNCE_TIME}),\n );\n }),\n subscribeInside(continueFn => this._zone.runOutsideAngular(continueFn)),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n if (this._viewport) {\n this.renderScrollPosition();\n }\n else {\n this.unsetScrollPosition();\n }\n });\n }\n\n /**\n * Computes the scroll position and updates CSS variables to render the scroll position in the UI.\n */\n private renderScrollPosition(): void {\n NgZone.assertNotInAngularZone();\n const viewportSize = this.viewportSize;\n const viewportClientSize = this.viewportClientSize;\n const thumbPositionFr = this.scrollPosition / viewportClientSize;\n const thumbSizeFr = viewportSize / viewportClientSize;\n const overflow = viewportClientSize > viewportSize;\n\n if (thumbPositionFr !== this._thumbPositionFr || thumbSizeFr !== this._thumbSizeFr) {\n this._thumbPositionFr = thumbPositionFr;\n this._thumbSizeFr = thumbSizeFr;\n this.setCssVariable('--ɵsci-scrollbar-thumb-position-fr', thumbPositionFr);\n this.setCssVariable('--ɵsci-scrollbar-thumb-size-fr', thumbSizeFr);\n }\n\n if (overflow !== this._overflow) {\n this._overflow = overflow;\n overflow ? this._host.nativeElement.classList.add('overflow') : this._host.nativeElement.classList.remove('overflow');\n }\n }\n\n /**\n * Clears CSS variables used for rendering the scroll position in the UI.\n */\n private unsetScrollPosition(): void {\n NgZone.assertNotInAngularZone();\n this._thumbPositionFr = 0;\n this._thumbSizeFr = 0;\n this._overflow = false;\n this.setCssVariable('--ɵsci-scrollbar-thumb-position-fr', 0);\n this.setCssVariable('--ɵsci-scrollbar-thumb-size-fr', 0);\n this._host.nativeElement.classList.remove('overflow');\n }\n\n /* @docs-private */\n public onTouchStart(event: TouchEvent): void {\n event.preventDefault();\n this._lastDragPosition = this.vertical ? event.touches[0].screenY : event.touches[0].screenX;\n }\n\n /* @docs-private */\n public onTouchMove(event: TouchEvent): void {\n event.preventDefault();\n\n const newDragPositionPx = this.vertical ? event.touches[0].screenY : event.touches[0].screenX;\n const scrollbarPanPx = newDragPositionPx - this._lastDragPosition!;\n const viewportPanPx = this.toViewportPanPx(scrollbarPanPx);\n this._lastDragPosition = newDragPositionPx;\n this.moveViewportClient(viewportPanPx);\n }\n\n /* @docs-private */\n public onTouchEnd(event: TouchEvent): void {\n event.preventDefault();\n this._lastDragPosition = null;\n }\n\n /* @docs-private */\n public onMouseDown(mousedownEvent: MouseEvent): void {\n if (mousedownEvent.button !== 0) {\n return;\n }\n\n mousedownEvent.preventDefault();\n this._lastDragPosition = this.vertical ? mousedownEvent.screenY : mousedownEvent.screenX;\n\n // Listen for 'mousemove' events\n this._zone.runOutsideAngular(() => {\n const mousemoveListener = merge(fromEvent<MouseEvent>(this._document, 'mousemove'), fromEvent<MouseEvent>(this._document, 'sci-mousemove'))\n .pipe(takeUntil(this._destroy$))\n .subscribe(mousemoveEvent => {\n mousemoveEvent.preventDefault();\n\n const newDragPositionPx = this.vertical ? mousemoveEvent.screenY : mousemoveEvent.screenX;\n const scrollbarPanPx = newDragPositionPx - this._lastDragPosition!;\n const viewportPanPx = this.toViewportPanPx(scrollbarPanPx);\n this._lastDragPosition = newDragPositionPx;\n this.moveViewportClient(viewportPanPx);\n });\n\n // Listen for 'mouseup' events; use 'capture phase' and 'stop propagation' to not close overlays\n merge(fromEvent<MouseEvent>(this._document, 'mouseup', {capture: true}), fromEvent<MouseEvent>(this._document, 'sci-mouseup'))\n .pipe(first(), takeUntil(this._destroy$))\n .subscribe(mouseupEvent => {\n mouseupEvent.stopPropagation();\n mousemoveListener.unsubscribe();\n this._lastDragPosition = null;\n });\n });\n }\n\n /* @docs-private */\n public onScrollTrackMouseDown(event: MouseEvent, direction: 'up' | 'down'): void {\n const signum = (direction === 'up' ? -1 : +1);\n this.scrollWhileMouseDown(this.toViewportPanPx(signum * this.thumbSize), event);\n }\n\n /**\n * Projects the given scrollbar scroll pixels into viewport scroll pixels.\n */\n private toViewportPanPx(scrollbarPanPx: number): number {\n const scrollRangePx = this.trackSize - this.thumbSize;\n const scrollRatio = scrollbarPanPx / scrollRangePx;\n return scrollRatio * (this.viewportClientSize - this.viewportSize);\n }\n\n /**\n * Moves the viewport client by the specified numbers of pixels.\n */\n private moveViewportClient(viewportPanPx: number): void {\n if (this.vertical) {\n this._viewport.scrollTop += viewportPanPx;\n }\n else {\n this._viewport.scrollLeft += viewportPanPx;\n }\n }\n\n /**\n * Indicates if the content overflows.\n */\n public get overflow(): boolean {\n return this._overflow;\n }\n\n /**\n * Scrolls continuously while holding the mouse pressed, or until the mouse leaves the scrolltrack.\n */\n private scrollWhileMouseDown(viewportScrollPx: number, mousedownEvent: MouseEvent): void {\n // The `EventTarget` type of `Event.target` is not yet compatible with `FromEventTarget` used in `fromEvent`.\n // This will be fixed in rxjs version 7.0.0. Refer to https://github.com/ReactiveX/rxjs/commit/5f022d784570684632e6fd5ae247fc259ee34c4b\n // for more details.\n const scrollTrackElement = mousedownEvent.target as Element;\n\n // scroll continuously every 50ms after an initial delay of 250ms\n timer(250, 50)\n .pipe(\n // continue chain with latest mouse event\n withLatestFrom(merge(of(mousedownEvent), fromEvent<MouseEvent>(scrollTrackElement, 'mousemove')), (tick, event) => event),\n // start immediately\n startWith(mousedownEvent),\n // stop scrolling if the thumb hits the mouse pointer position\n takeWhile((event: MouseEvent) => scrollTrackElement === this._document.elementFromPoint(event.clientX, event.clientY)),\n debounceTime(10),\n // stop scrolling on mouseout or mouseup\n takeUntil(merge(fromEvent(scrollTrackElement, 'mouseout'), fromEvent(scrollTrackElement, 'mouseup'))),\n )\n .subscribe(() => {\n this.moveViewportClient(viewportScrollPx);\n });\n }\n\n /**\n * Emits whenever the viewport scrolls.\n */\n private viewportScrollChange$(): Observable<void> {\n return fromEvent(this._viewport, 'scroll', {passive: true}).pipe(map(() => undefined));\n }\n\n /**\n * Emits on subscription, and then each time the size of the viewport changes.\n */\n private viewportDimensionChange$(options: {debounceTime: number}): Observable<void> {\n return fromDimension$(this._viewport)\n .pipe(\n // Debouncing is particularly important in the context of Angular animations, since they continuously\n // trigger resize events. Debouncing prevents the scrollbar from flickering, for example, when the user\n // expands a panel that contains a viewport.\n debounceTime(options.debounceTime),\n map(() => undefined),\n );\n }\n\n /**\n * Emits on subscription, and then each time the size or style property of the viewport client changes.\n */\n private viewportClientDimensionChange$(options: {debounceTime: number}): Observable<void> {\n return this.children$(this._viewport)\n .pipe(\n switchMap(children => merge(...children.map(child => merge(\n fromDimension$(child),\n // Observe style mutations since some transformations change the scroll position without necessarily triggering a dimension change,\n // e.g., `scale` or `translate` used by some virtual scroll implementations\n fromMutation$(child, {subtree: false, childList: false, attributeFilter: ['style']})),\n ))),\n // Debouncing is particularly important in the context of Angular animations, since they continuously\n // trigger resize events. Debouncing prevents the scrollbar from flickering, for example, when the user\n // expands a panel that contains a viewport.\n debounceTime(options.debounceTime),\n map(() => undefined),\n );\n }\n\n /**\n * Emits the children of the passed element, and then each time child elements are added or removed.\n */\n private children$(element: HTMLElement): Observable<HTMLElement[]> {\n return fromMutation$(element, {subtree: false, childList: true})\n .pipe(\n startWith(undefined as void),\n map(() => Array.from(element.children)),\n filterArray((child: Element): child is HTMLElement => child instanceof HTMLElement),\n );\n }\n\n private setCssVariable(key: string, value: any): void {\n this._host.nativeElement.style.setProperty(key, value);\n }\n\n private get viewportSize(): number {\n return this._viewport ? (this.vertical ? this._viewport.clientHeight : this._viewport.clientWidth) : 0;\n }\n\n private get viewportClientSize(): number {\n return this._viewport ? (this.vertical ? this._viewport.scrollHeight : this._viewport.scrollWidth) : 0;\n }\n\n private get scrollPosition(): number {\n return this._viewport ? (this.vertical ? this._viewport.scrollTop : this._viewport.scrollLeft) : 0;\n }\n\n private get thumbSize(): number {\n const thumbElement = this.thumbElement.nativeElement;\n return this.vertical ? thumbElement.clientHeight : thumbElement.clientWidth;\n }\n\n private get trackSize(): number {\n const trackElement = this._host.nativeElement;\n return this.vertical ? trackElement.clientHeight : trackElement.clientWidth;\n }\n\n /* @docs-private */\n public ngOnDestroy(): void {\n this._destroy$.next();\n }\n}\n","<!-- scrolltrack to move the viewport client upwards (paging) -->\n<div class=\"scrolltrack-start\" (mousedown)=\"onScrollTrackMouseDown($event, 'up')\"></div>\n\n<!-- scrollthumb -->\n<div #thumb_handle\n class=\"thumb-handle\"\n [class.vertical]=\"vertical\"\n [class.horizontal]=\"horizontal\"\n (mousedown)=\"onMouseDown($event)\"\n (touchstart)=\"onTouchStart($event)\"\n (touchmove)=\"onTouchMove($event)\"\n (touchend)=\"onTouchEnd($event)\"\n (touchcancel)=\"onTouchEnd($event)\">\n <div class=\"thumb\"\n [class.vertical]=\"vertical\"\n [class.horizontal]=\"horizontal\">\n </div>\n</div>\n\n<!-- scrolltrack to move the viewport client downwards (paging) -->\n<div class=\"scrolltrack-end\" (mousedown)=\"onScrollTrackMouseDown($event, 'down')\"></div>\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 {Directive, ElementRef, Input, OnChanges, OnDestroy, Renderer2, SimpleChanges} from '@angular/core';\nimport {NativeScrollbarTrackSize, SciNativeScrollbarTrackSizeProvider} from './native-scrollbar-track-size-provider.service';\nimport {map, takeUntil} from 'rxjs/operators';\nimport {merge, Subject} from 'rxjs';\nimport {Dictionary} from '@scion/toolkit/util';\n\n/**\n * Makes the host element natively scrollable and hides native scrollbars by default, unless native scrollbars\n * already sit on top of the viewport (e.g. in OS X).\n *\n * Because there is no cross-browser API to hide scrollbars without losing native scroll support, we set 'overflow'\n * to 'scroll' but shift the native scrollbars out of the visible viewport area. The shift offset is computed upfront.\n *\n * This directive expects its host element to be the only child in document flow in its parent DOM element. It makes the host element\n * fill up the entire space (width and height set to 100%). The parent element must have its CSS `overflow` property set to `hidden`\n * to hide the pushed out native scrollbars.\n */\n@Directive({\n selector: '[sciScrollable]',\n})\nexport class SciScrollableDirective implements OnChanges, OnDestroy {\n\n private _destroy$ = new Subject<void>();\n private _inputChange$ = new Subject<void>();\n\n /**\n * Controls whether to display native scrollbars.\n * Has no effect if the native scrollbar sits on top of the content, e.g. in OS X.\n */\n @Input('sciScrollableDisplayNativeScrollbar') // eslint-disable-line @angular-eslint/no-input-rename\n public isDisplayNativeScrollbar: boolean = false;\n\n constructor(private _host: ElementRef<HTMLDivElement>,\n private _renderer: Renderer2,\n nativeScrollbarTrackSizeProvider: SciNativeScrollbarTrackSizeProvider) {\n merge(\n nativeScrollbarTrackSizeProvider.trackSize$,\n this._inputChange$.pipe(map(() => nativeScrollbarTrackSizeProvider.trackSize)),\n )\n .pipe(takeUntil(this._destroy$))\n .subscribe(nativeScrollbarTrackSize => {\n if (nativeScrollbarTrackSize === null) { // the native scrollbar sits on top of the content\n this.useNativeScrollbars();\n }\n else {\n this.isDisplayNativeScrollbar ? this.useNativeScrollbars() : this.shiftNativeScrollbars(nativeScrollbarTrackSize);\n }\n });\n }\n\n /**\n * Uses the native scrollbars when content overflows.\n */\n private useNativeScrollbars(): void {\n this.setStyle(this._host.nativeElement, {\n overflow: 'auto',\n width: '100%',\n height: '100%',\n marginRight: 0,\n marginBottom: 0,\n });\n }\n\n /**\n * Shifts the native scrollbars out of the visible viewport area.\n */\n private shiftNativeScrollbars(nativeScrollbarTrackSize: NativeScrollbarTrackSize): void {\n this.setStyle(this._host.nativeElement, {\n overflow: 'scroll',\n width: `calc(100% + ${nativeScrollbarTrackSize.vScrollbarTrackWidth}px`,\n height: `calc(100% + ${nativeScrollbarTrackSize.hScrollbarTrackHeight}px`,\n marginRight: `-${nativeScrollbarTrackSize.vScrollbarTrackWidth}px`,\n marginBottom: `-${nativeScrollbarTrackSize.hScrollbarTrackHeight}px`,\n });\n }\n\n private setStyle(element: Element, style: Dictionary): void {\n Object.keys(style).forEach(key => this._renderer.setStyle(element, key, style[key]));\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this._inputChange$.next();\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\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 {Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild, ViewEncapsulation} from '@angular/core';\nimport {SciNativeScrollbarTrackSizeProvider} from './native-scrollbar-track-size-provider.service';\nimport {coerceElement} from '@angular/cdk/coercion';\n\n/**\n * Represents a viewport with slotted content (`<ng-content>`) used as scrollable content. By default, content is added to a CSS grid layout.\n *\n * The viewport component displays scrollbars when its content overflows. Scrollbars are displayed on top of the content, not next to it.\n * 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.\n * The viewport remains natively scrollable with the native scrollbars shifted out of the viewport's visible area. Consequently, the viewport keeps supporting\n * native scrolling features such as touch gestures, scroll speed acceleration, or scrolling near the viewport edges during drag-and-drop operations.\n *\n * ```html\n * <sci-viewport>\n * your content\n * </sci-viewport>\n * ```\n *\n * ## Adding the viewport to a layout\n *\n * Typically you would add the viewport component to a flexible layout, filling the remaining space vertically and horizontally, such as a flexbox container\n * with the viewport's `flex` CSS property set to either `flex: auto` or `flex: 1 1 0`.\n *\n * 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\n * a layout constraint. Depending on the layout, different steps may be necessary to prevent the viewport from growing to infinity.\n *\n * - If practical, give the viewport a fixed size or a maximum size.\n * - 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,\n * 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\n * `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\n * the remaining extra space is distributed. If the viewport does not appear after setting this property, check its parent elements' content sizes.\n * 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`.\n * Another approach would be to set the minimum height of all parents to `0`, as follows: `min-height: 0`.\n *\n * For the complete documentation on the flex layout and its features, refer to https://developer.mozilla.org/en-US/docs/Web/CSS/flex.\n *\n *\n * ## Layouting the viewport's slotted content\n *\n * By default, the viewport's content is added to a CSS grid container with a single column, filling remaining space vertically and horizontally.\n * 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.\n *\n * #### Example of adding slotted content to a CSS flex container.\n * ```css\n * sci-viewport::part(content) {\n * display: flex;\n * flex-direction: column;\n * }\n * ```\n *\n * #### Example of configuring CSS grid container with two columns\n * ```css\n * sci-viewport::part(content) {\n * grid-template-columns: 1fr 1fr;\n * gap: 1em;\n * }\n * ```\n *\n * ## Styling of scrollbars\n *\n * You can override the following CSS variables to control the appearance of the scrollbar:\n *\n * - sci-viewport-scrollbar-color: Sets the color of the scrollbar (by default, uses `rgb(78, 78, 78)`).\n *\n * ```css\n * sci-viewport {\n * --sci-viewport-scrollbar-color: blue;\n * }\n * ```\n */\n@Component({\n selector: 'sci-viewport',\n templateUrl: './viewport.component.html',\n styleUrls: ['./viewport.component.scss'],\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class SciViewportComponent {\n\n private _viewportElement!: HTMLDivElement;\n private _viewportClient!: HTMLDivElement;\n private _scrollbarStyle: ScrollbarStyle = 'on-top';\n\n /** @internal */\n @ViewChild('viewport', {static: true})\n public set setViewport(viewport: ElementRef<HTMLDivElement>) {\n this._viewportElement = coerceElement(viewport);\n }\n\n /** @internal */\n @ViewChild('viewport_client', {static: true})\n public set setViewportClient(viewportClient: ElementRef<HTMLDivElement>) {\n this._viewportClient = coerceElement(viewportClient);\n }\n\n /**\n * Controls whether to use native scrollbars or, which is by default, emulated scrollbars that sit on top of the viewport client.\n * In the latter, the viewport client remains natively scrollable.\n */\n @Input()\n public set scrollbarStyle(scrollbarStyle: ScrollbarStyle) {\n this._scrollbarStyle = scrollbarStyle || 'on-top';\n }\n\n public get scrollbarStyle(): ScrollbarStyle {\n return this._scrollbarStyle;\n }\n\n /**\n * Emits upon a scroll event.\n *\n * You can add [sciDimension] directive to the viewport or viewport client to be notified about layout changes.\n */\n @Output()\n public scroll = new EventEmitter<Event>(); // eslint-disable-line @angular-eslint/no-output-native\n\n constructor(public host: ElementRef<HTMLElement>, public nativeScrollbarTrackSizeProvider: SciNativeScrollbarTrackSizeProvider) {\n }\n\n @HostListener('focus')\n public focus(): void { // do not rename to expose the same focus method like `HTMLElement.focus()`.\n this._viewportElement?.focus();\n }\n\n public onScroll(event: Event): void {\n this.scroll.emit(event);\n }\n\n /**\n * Returns the number of pixels that the viewport client is scrolled vertically.\n *\n * @see Element.scrollTop\n */\n public get scrollTop(): number {\n return this._viewportElement.scrollTop;\n }\n\n /**\n * Sets the number of pixels that the viewport client is scrolled vertically.\n *\n * @see Element.scrollTop\n */\n public set scrollTop(scrollTop: number) {\n this._viewportElement.scrollTop = scrollTop;\n }\n\n /**\n * Returns the number of pixels that the viewport client is scrolled horizontally.\n *\n * @see Element.scrollLeft\n */\n public get scrollLeft(): number {\n return this._viewportElement.scrollLeft;\n }\n\n /**\n * Sets the number of pixels that the viewport client is scrolled horizontally.\n *\n * @see Element.scrollLeft\n */\n public set scrollLeft(scrollLeft: number) {\n this._viewportElement.scrollLeft = scrollLeft;\n }\n\n /**\n * Returns the height of the viewport client.\n *\n * @see Element.scrollHeight\n */\n public get scrollHeight(): number {\n return this._viewportElement.scrollHeight;\n }\n\n /**\n * Returns the width of the viewport client.\n *\n * @see Element.scrollWidth\n */\n public get scrollWidth(): number {\n return this._viewportElement.scrollWidth;\n }\n\n /**\n * Returns the viewport {HTMLElement}.\n */\n public get viewportElement(): HTMLElement {\n return this._viewportElement;\n }\n\n /**\n * Returns the viewport client {HTMLElement}.\n */\n public get viewportClientElement(): HTMLElement {\n return this._viewportClient;\n }\n\n /**\n * Checks if the specified element is scrolled into the viewport.\n *\n * @param element - the element to be checked\n * @param fit - control if the element must fully or partially fit into the viewport\n *\n * @throws if the element is not contained in the viewport's slotted content.\n */\n public isElementInView(element: ElementRef<HTMLElement> | HTMLElement, fit: 'full' | 'partial'): boolean {\n const elLeft = this.computeOffset(element, 'left');\n const elRight = elLeft + coerceElement(element).offsetWidth;\n const elTop = this.computeOffset(element, 'top');\n const elBottom = elTop + coerceElement(element).offsetHeight;\n\n const vpLeft = this._viewportElement.scrollLeft;\n const vpRight = vpLeft + this._viewportElement.clientWidth;\n const vpTop = this._viewportElement.scrollTop;\n const vpBottom = vpTop + this._viewportElement.clientHeight;\n\n switch (fit) {\n case 'full':\n return (elLeft >= vpLeft && elRight <= vpRight) && (elTop >= vpTop && elBottom <= vpBottom);\n case 'partial':\n return (elRight >= vpLeft && elLeft <= vpRight) && (elBottom >= vpTop && elTop <= vpBottom);\n default:\n throw Error('Unsupported fit strategy');\n }\n }\n\n /**\n * Scrolls the specified element into the viewport.\n *\n * @param element - the element to scroll into the viewport\n * @param offset - the gap between the element and the viewport\n *\n * @throws if the element is not contained in the viewport's slotted content.\n */\n public scrollIntoView(element: ElementRef<HTMLElement> | HTMLElement, offset: number = 50): void {\n this._viewportElement.scrollTop = this.computeOffset(element, 'top') - offset;\n this._viewportElement.scrollLeft = this.computeOffset(element, 'left') - offset;\n }\n\n /**\n * Computes the distance of the element to the viewport's left or top border.\n *\n * @throws if the element is not contained in the viewport's slotted content.\n */\n public computeOffset(element: ElementRef<HTMLElement> | HTMLElement, border: 'left' | 'top'): number {\n let offset = 0;\n let el = coerceElement(element);\n do {\n offset += (border === 'left' ? el.offsetLeft : el.offsetTop);\n el = el.offsetParent as HTMLElement;\n if (el === null) {\n throw Error(`[ElementNotContainedError] Element not contained in the viewport's slotted content`);\n }\n } while (el !== this.host.nativeElement);\n\n return offset;\n }\n}\n\n/**\n * Represents a scrollbar style.\n */\nexport type ScrollbarStyle = 'native' | 'on-top' | 'hidden';\n","<!-- 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\"></sci-scrollbar>\n <sci-scrollbar [direction]=\"'hscroll'\" [viewport]=\"viewport\"></sci-scrollbar>\n</ng-container>\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 {SciViewportComponent} from './viewport.component';\nimport {SciScrollbarComponent} from './scrollbar/scrollbar.component';\nimport {SciScrollableDirective} from './scrollable.directive';\nimport {ScrollingModule} from '@angular/cdk/scrolling';\n\n/**\n * Provides a viewport component with scrollbars that sit on top of the viewport client.\n */\n@NgModule({\n imports: [\n CommonModule,\n ScrollingModule,\n ],\n declarations: [\n SciViewportComponent,\n SciScrollbarComponent,\n SciScrollableDirective,\n ],\n exports: [\n SciViewportComponent,\n SciScrollbarComponent,\n SciScrollableDirective,\n ],\n})\nexport class SciViewportModule {\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/viewport'\n *\n * @see https://github.com/ng-packagr/ng-packagr/blob/master/docs/secondary-entrypoints.md\n */\nexport {SciViewportModule} from './viewport.module';\nexport * from './viewport.component';\nexport * from './scrollable.directive';\nexport * from './scrollbar/scrollbar.component';\nexport * from './native-scrollbar-track-size-provider.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.SciNativeScrollbarTrackSizeProvider","i4.SciScrollbarComponent","i5.SciScrollableDirective"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scion/components",
3
- "version": "14.0.1",
3
+ "version": "14.0.2",
4
4
  "description": "Provides a collection of Angular components and directives primarily for use in SCION libraries such as `@scion/workbench` and `@scion/microfrontend-platform`. This library is not a comprehensive component library as its focus is on SCION requirements.",
5
5
  "license": "EPL-2.0",
6
6
  "private": false,
@@ -70,7 +70,7 @@ import * as i0 from "@angular/core";
70
70
  export declare class SciViewportComponent {
71
71
  host: ElementRef<HTMLElement>;
72
72
  nativeScrollbarTrackSizeProvider: SciNativeScrollbarTrackSizeProvider;
73
- private _viewport;
73
+ private _viewportElement;
74
74
  private _viewportClient;
75
75
  private _scrollbarStyle;
76
76
  /**
@@ -137,19 +137,25 @@ export declare class SciViewportComponent {
137
137
  *
138
138
  * @param element - the element to be checked
139
139
  * @param fit - control if the element must fully or partially fit into the viewport
140
+ *
141
+ * @throws if the element is not contained in the viewport's slotted content.
140
142
  */
141
- isElementInView(element: HTMLElement, fit: 'full' | 'partial'): boolean;
143
+ isElementInView(element: ElementRef<HTMLElement> | HTMLElement, fit: 'full' | 'partial'): boolean;
142
144
  /**
143
145
  * Scrolls the specified element into the viewport.
144
146
  *
145
147
  * @param element - the element to scroll into the viewport
146
148
  * @param offset - the gap between the element and the viewport
149
+ *
150
+ * @throws if the element is not contained in the viewport's slotted content.
147
151
  */
148
- scrollIntoView(element: HTMLElement, offset?: number): void;
152
+ scrollIntoView(element: ElementRef<HTMLElement> | HTMLElement, offset?: number): void;
149
153
  /**
150
154
  * Computes the distance of the element to the viewport's left or top border.
155
+ *
156
+ * @throws if the element is not contained in the viewport's slotted content.
151
157
  */
152
- computeOffset(element: HTMLElement, border: 'left' | 'top'): number;
158
+ computeOffset(element: ElementRef<HTMLElement> | HTMLElement, border: 'left' | 'top'): number;
153
159
  static ɵfac: i0.ɵɵFactoryDeclaration<SciViewportComponent, never>;
154
160
  static ɵcmp: i0.ɵɵComponentDeclaration<SciViewportComponent, "sci-viewport", never, { "scrollbarStyle": "scrollbarStyle"; }, { "scroll": "scroll"; }, never, never, false>;
155
161
  }