@scion/components 15.0.2 → 16.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/dimension/dimension.directive.d.ts +2 -2
  2. package/esm2022/dimension/dimension.directive.mjs +84 -0
  3. package/esm2022/dimension/dimension.module.mjs +39 -0
  4. package/esm2022/sashbox/element-ref.directive.mjs +28 -0
  5. package/esm2022/sashbox/sash-initializer.directive.mjs +33 -0
  6. package/esm2022/sashbox/sash.directive.mjs +145 -0
  7. package/esm2022/sashbox/sashbox.component.mjs +279 -0
  8. package/esm2022/sashbox/sashbox.module.mjs +70 -0
  9. package/esm2022/splitter/splitter.component.mjs +228 -0
  10. package/esm2022/splitter/splitter.module.mjs +43 -0
  11. package/esm2022/throbber/ellipsis-throbber/ellipsis-throbber.component.mjs +26 -0
  12. package/esm2022/throbber/ripple-throbber/ripple-throbber.component.mjs +26 -0
  13. package/esm2022/throbber/roller-throbber/roller-throbber.component.mjs +26 -0
  14. package/esm2022/throbber/spinner-throbber/spinner-throbber.component.mjs +27 -0
  15. package/esm2022/throbber/throbber.component.mjs +68 -0
  16. package/esm2022/throbber/throbber.module.mjs +49 -0
  17. package/esm2022/viewport/native-scrollbar-track-size-provider.service.mjs +115 -0
  18. package/esm2022/viewport/scrollable.directive.mjs +94 -0
  19. package/esm2022/viewport/scrollbar/scrollbar.component.mjs +323 -0
  20. package/esm2022/viewport/viewport.component.mjs +282 -0
  21. package/esm2022/viewport/viewport.module.mjs +51 -0
  22. package/{fesm2015 → fesm2022}/scion-components-dimension.mjs +12 -7
  23. package/{fesm2015 → fesm2022}/scion-components-dimension.mjs.map +1 -1
  24. package/{fesm2020 → fesm2022}/scion-components-sashbox.mjs +47 -42
  25. package/{fesm2020 → fesm2022}/scion-components-sashbox.mjs.map +1 -1
  26. package/{fesm2020 → fesm2022}/scion-components-splitter.mjs +22 -17
  27. package/{fesm2020 → fesm2022}/scion-components-splitter.mjs.map +1 -1
  28. package/{fesm2020 → fesm2022}/scion-components-throbber.mjs +28 -23
  29. package/{fesm2015 → fesm2022}/scion-components-throbber.mjs.map +1 -1
  30. package/{fesm2020 → fesm2022}/scion-components-viewport.mjs +65 -60
  31. package/{fesm2015 → fesm2022}/scion-components-viewport.mjs.map +1 -1
  32. package/package.json +27 -43
  33. package/sashbox/sash-initializer.directive.d.ts +1 -1
  34. package/sashbox/sash.directive.d.ts +1 -1
  35. package/sashbox/sashbox.component.d.ts +1 -1
  36. package/splitter/splitter.component.d.ts +1 -1
  37. package/throbber/throbber.component.d.ts +1 -1
  38. package/viewport/scrollable.directive.d.ts +1 -1
  39. package/viewport/scrollbar/scrollbar.component.d.ts +1 -1
  40. package/viewport/viewport.component.d.ts +2 -2
  41. package/esm2020/dimension/dimension.directive.mjs +0 -83
  42. package/esm2020/dimension/dimension.module.mjs +0 -38
  43. package/esm2020/sashbox/element-ref.directive.mjs +0 -27
  44. package/esm2020/sashbox/sash-initializer.directive.mjs +0 -32
  45. package/esm2020/sashbox/sash.directive.mjs +0 -144
  46. package/esm2020/sashbox/sashbox.component.mjs +0 -278
  47. package/esm2020/sashbox/sashbox.module.mjs +0 -69
  48. package/esm2020/splitter/splitter.component.mjs +0 -227
  49. package/esm2020/splitter/splitter.module.mjs +0 -42
  50. package/esm2020/throbber/ellipsis-throbber/ellipsis-throbber.component.mjs +0 -25
  51. package/esm2020/throbber/ripple-throbber/ripple-throbber.component.mjs +0 -25
  52. package/esm2020/throbber/roller-throbber/roller-throbber.component.mjs +0 -25
  53. package/esm2020/throbber/spinner-throbber/spinner-throbber.component.mjs +0 -26
  54. package/esm2020/throbber/throbber.component.mjs +0 -67
  55. package/esm2020/throbber/throbber.module.mjs +0 -48
  56. package/esm2020/viewport/native-scrollbar-track-size-provider.service.mjs +0 -114
  57. package/esm2020/viewport/scrollable.directive.mjs +0 -93
  58. package/esm2020/viewport/scrollbar/scrollbar.component.mjs +0 -322
  59. package/esm2020/viewport/viewport.component.mjs +0 -281
  60. package/esm2020/viewport/viewport.module.mjs +0 -50
  61. package/fesm2015/scion-components-sashbox.mjs +0 -554
  62. package/fesm2015/scion-components-sashbox.mjs.map +0 -1
  63. package/fesm2015/scion-components-splitter.mjs +0 -284
  64. package/fesm2015/scion-components-splitter.mjs.map +0 -1
  65. package/fesm2015/scion-components-throbber.mjs +0 -214
  66. package/fesm2015/scion-components-viewport.mjs +0 -861
  67. package/fesm2015/scion-components.mjs +0 -4
  68. package/fesm2015/scion-components.mjs.map +0 -1
  69. package/fesm2020/scion-components-dimension.mjs +0 -135
  70. package/fesm2020/scion-components-dimension.mjs.map +0 -1
  71. package/fesm2020/scion-components-throbber.mjs.map +0 -1
  72. package/fesm2020/scion-components-viewport.mjs.map +0 -1
  73. /package/{esm2020 → esm2022}/dimension/public_api.mjs +0 -0
  74. /package/{esm2020 → esm2022}/dimension/scion-components-dimension.mjs +0 -0
  75. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  76. /package/{esm2020 → esm2022}/sashbox/public_api.mjs +0 -0
  77. /package/{esm2020 → esm2022}/sashbox/sashbox-accessor.mjs +0 -0
  78. /package/{esm2020 → esm2022}/sashbox/scion-components-sashbox.mjs +0 -0
  79. /package/{esm2020 → esm2022}/scion-components.mjs +0 -0
  80. /package/{esm2020 → esm2022}/splitter/public_api.mjs +0 -0
  81. /package/{esm2020 → esm2022}/splitter/scion-components-splitter.mjs +0 -0
  82. /package/{esm2020 → esm2022}/throbber/public_api.mjs +0 -0
  83. /package/{esm2020 → esm2022}/throbber/scion-components-throbber.mjs +0 -0
  84. /package/{esm2020 → esm2022}/viewport/public_api.mjs +0 -0
  85. /package/{esm2020 → esm2022}/viewport/scion-components-viewport.mjs +0 -0
  86. /package/{fesm2020 → fesm2022}/scion-components.mjs +0 -0
  87. /package/{fesm2020 → fesm2022}/scion-components.mjs.map +0 -0
@@ -0,0 +1,279 @@
1
+ /*
2
+ * Copyright (c) 2018-2019 Swiss Federal Railways
3
+ *
4
+ * This program and the accompanying materials are made
5
+ * available under the terms of the Eclipse Public License 2.0
6
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
7
+ *
8
+ * SPDX-License-Identifier: EPL-2.0
9
+ */
10
+ import { Component, ContentChildren, EventEmitter, forwardRef, HostBinding, Input, NgZone, Output } from '@angular/core';
11
+ import { startWith, takeUntil } from 'rxjs/operators';
12
+ import { BehaviorSubject, Subject } from 'rxjs';
13
+ import { SciSashDirective } from './sash.directive';
14
+ import { SciSashBoxAccessor } from './sashbox-accessor';
15
+ import * as i0 from "@angular/core";
16
+ import * as i1 from "@angular/common";
17
+ import * as i2 from "@scion/components/splitter";
18
+ import * as i3 from "./sash-initializer.directive";
19
+ import * as i4 from "./element-ref.directive";
20
+ /**
21
+ * The <sci-sashbox> is like a CSS flexbox container that lays out its content children (sashes) in a row (which is by default)
22
+ * or column arrangement (as specified by the direction property). A splitter is added between each child to allow the user to
23
+ * shrink or stretch the individual sashes.
24
+ *
25
+ * Sashes are modelled as content children inside a <ng-template> decorated with the 'sciSash' directive.
26
+ * A sash can have a fixed size with an explicit unit, or a unitless proportion to distibute remaining space.
27
+ * A proportional sash has the ability to grow or shrink if necessary.
28
+ *
29
+ *
30
+ * ### Usage:
31
+ *
32
+ * ```html
33
+ * <sci-sashbox direction="row">
34
+ * <ng-template sciSash size="1">
35
+ * ...
36
+ * </ng-template>
37
+ *
38
+ * <ng-template sciSash size="2">
39
+ * ...
40
+ * </ng-template>
41
+ *
42
+ * <ng-template sciSash size="1">
43
+ * ...
44
+ * </ng-template>
45
+ * </sci-sashbox>
46
+ * ```
47
+ *
48
+ * ### Theme override:
49
+ * The default style of the sashbox is made up of shades of gray.
50
+ * You can control the appearance by overriding the following CSS variables:
51
+ *
52
+ * - --sci-sashbox-gap: Sets the gaps (gutters) between sashes.
53
+ * - --sci-sashbox-splitter-bgcolor: Sets the background color of the splitter.
54
+ * - --sci-sashbox-splitter-bgcolor_hover: Sets the background color of the splitter when hovering it.
55
+ * - --sci-sashbox-splitter-size: Sets the size of the splitter along the main axis.
56
+ * - --sci-sashbox-splitter-size_hover: Sets the size of the splitter along the main axis when hovering it.
57
+ * - --sci-sashbox-splitter-touch-target-size: Sets the touch target size to move the splitter (accessibility).
58
+ * - --sci-sashbox-splitter-cross-axis-size: Sets the splitter size along the cross axis.
59
+ * - --sci-sashbox-splitter-border-radius: Sets the border radius of the splitter.
60
+ * - --sci-sashbox-splitter-opacity_active: Sets the opacity of the splitter while the user moves the splitter.
61
+ * - --sci-sashbox-splitter-opacity_hover: Sets the opacity of the splitter when hovering it.
62
+ *
63
+ * Example:
64
+ *
65
+ * ```scss
66
+ * sci-sashbox {
67
+ * --sci-sashbox-splitter-bgcolor: black;
68
+ * --sci-sashbox-splitter-bgcolor_hover: black;
69
+ * }
70
+ * ```
71
+ */
72
+ class SciSashboxComponent {
73
+ /** @internal */
74
+ set setSashes(queryList) {
75
+ queryList.changes
76
+ .pipe(startWith(queryList), takeUntil(this._destroy$))
77
+ .subscribe((sashes) => {
78
+ this.sashes$.next(sashes.toArray());
79
+ });
80
+ }
81
+ constructor(_host, _zone) {
82
+ this._host = _host;
83
+ this._zone = _zone;
84
+ this._destroy$ = new Subject();
85
+ this.sashes$ = new BehaviorSubject([]);
86
+ this.sashing = false;
87
+ /**
88
+ * Specifies if to lay out sashes in a row (which is by default) or column arrangement.
89
+ */
90
+ this.direction = 'row';
91
+ /**
92
+ * Emits when start sashing.
93
+ */
94
+ this.sashStart = new EventEmitter();
95
+ /**
96
+ * Emits the absolute sash sizes (px) when finished sashing.
97
+ */
98
+ this.sashEnd = new EventEmitter();
99
+ }
100
+ onSashStart() {
101
+ this.sashing = true;
102
+ this.sashStart.emit();
103
+ // set the effective sash size as the flex-basis for non-fixed sashes (as sashing operates on pixel deltas)
104
+ this.sashes.forEach(sash => {
105
+ if (!sash.isFixedSize) {
106
+ sash.flexGrow = 0;
107
+ sash.flexShrink = 0;
108
+ sash.flexBasis = `${sash.computedSize}px`;
109
+ }
110
+ });
111
+ }
112
+ onSashEnd() {
113
+ this.sashing = false;
114
+ // unset the flex-basis for non-fixed sashes and set the flex-grow accordingly
115
+ const pixelToFlexGrowFactor = computePixelToFlexGrowFactor(this.sashes);
116
+ const absoluteSashSizes = this.sashes.map(sash => sash.computedSize);
117
+ this.sashes.forEach((sash, i) => {
118
+ if (!sash.isFixedSize) {
119
+ sash.flexGrow = pixelToFlexGrowFactor * absoluteSashSizes[i];
120
+ sash.flexShrink = 1;
121
+ sash.flexBasis = '0';
122
+ }
123
+ });
124
+ this.sashEnd.emit(absoluteSashSizes);
125
+ }
126
+ onSash(splitter, sashIndex, moveEvent) {
127
+ const distance = moveEvent.distance;
128
+ if (distance === 0) {
129
+ return;
130
+ }
131
+ NgZone.assertNotInAngularZone();
132
+ // compute the splitter position
133
+ const splitterRect = splitter.getBoundingClientRect();
134
+ const splitterStart = (this.isRowDirection ? splitterRect.left : splitterRect.top);
135
+ const splitterEnd = (this.isRowDirection ? splitterRect.left + splitterRect.width : splitterRect.top + splitterRect.height);
136
+ // ignore the event if outside of the splitter's action scope
137
+ const eventPos = moveEvent.position.clientPos;
138
+ // i.e. the sash should not grow if moved the mouse pointer beyond the left bounds of the sash, and if now moving the mouse pointer back toward the current sash.
139
+ if (distance > 0 && eventPos < splitterStart) {
140
+ return;
141
+ }
142
+ // i.e. the sash should not shrink if moved the mouse pointer beyond the right bounds of the sash, and if now moving the mouse pointer back toward the current sash.
143
+ if (distance < 0 && eventPos > splitterEnd) {
144
+ return;
145
+ }
146
+ // compute the new sash sizes
147
+ const sash1 = this.sashes[sashIndex];
148
+ const sash2 = this.sashes[sashIndex + 1];
149
+ const sashSize1 = sash1.computedSize;
150
+ const sashSize2 = sash2.computedSize;
151
+ const maxSashSize = sashSize1 + sashSize2;
152
+ const computedNewSashSize1 = Math.round(sashSize1 + distance);
153
+ const computedNewSashSize2 = Math.round(sashSize2 - distance);
154
+ if (sash1.minSize !== undefined && distance < 0 && computedNewSashSize1 < this.toPixel(sash1.minSize)) {
155
+ return;
156
+ }
157
+ if (sash2.minSize !== undefined && distance > 0 && computedNewSashSize2 < this.toPixel(sash2.minSize)) {
158
+ return;
159
+ }
160
+ const validNewSashSize1 = between(computedNewSashSize1, { min: 0, max: maxSashSize });
161
+ const validNewSashSize2 = between(computedNewSashSize2, { min: 0, max: maxSashSize });
162
+ // continue only if both sashes adjacent to the splitter change their size (as the event would change other sashes otherwise)
163
+ if (validNewSashSize1 !== computedNewSashSize1) {
164
+ return;
165
+ }
166
+ if (validNewSashSize2 !== computedNewSashSize2) {
167
+ return;
168
+ }
169
+ // set the new computed sash sizes
170
+ this._zone.run(() => {
171
+ sash1.flexBasis = `${computedNewSashSize1}px`;
172
+ sash2.flexBasis = `${computedNewSashSize2}px`;
173
+ });
174
+ }
175
+ onSashReset(sashIndex) {
176
+ const sash1 = this.sashes[sashIndex];
177
+ const sash2 = this.sashes[sashIndex + 1];
178
+ const equalSashSize = (sash1.computedSize + sash2.computedSize) / 2;
179
+ const pixelToFlexGrowFactor = computePixelToFlexGrowFactor(this.sashes);
180
+ const absoluteSashSizesAfterReset = this.sashes.map((sash, index) => {
181
+ if (index === sashIndex || index === sashIndex + 1) {
182
+ return equalSashSize;
183
+ }
184
+ return sash.computedSize;
185
+ });
186
+ [sash1, sash2].forEach(sash => {
187
+ if (sash.isFixedSize) {
188
+ sash.flexBasis = `${equalSashSize}px`;
189
+ }
190
+ else {
191
+ sash.flexGrow = pixelToFlexGrowFactor * equalSashSize;
192
+ }
193
+ });
194
+ this.sashStart.emit();
195
+ this.sashEnd.emit(absoluteSashSizesAfterReset);
196
+ }
197
+ get isColumnDirection() {
198
+ return this.direction === 'column';
199
+ }
200
+ get isRowDirection() {
201
+ return this.direction === 'row';
202
+ }
203
+ get sashes() {
204
+ return this.sashes$.value;
205
+ }
206
+ ngOnDestroy() {
207
+ this._destroy$.next();
208
+ }
209
+ toPixel(value) {
210
+ if (typeof value === 'number') {
211
+ return value;
212
+ }
213
+ if (value.endsWith('%')) {
214
+ const hostBounds = this._host.nativeElement.getBoundingClientRect();
215
+ const hostSize = (this.isRowDirection ? hostBounds.width : hostBounds.height);
216
+ return parseInt(value, 10) * hostSize / 100;
217
+ }
218
+ return parseInt(value, 10);
219
+ }
220
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: SciSashboxComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
221
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: SciSashboxComponent, selector: "sci-sashbox", inputs: { direction: "direction" }, outputs: { sashStart: "sashStart", sashEnd: "sashEnd" }, host: { properties: { "class.sashing": "this.sashing", "class.column": "this.isColumnDirection", "class.row": "this.isRowDirection" } }, providers: [{
222
+ provide: SciSashBoxAccessor,
223
+ useFactory: provideSashBoxAccessor,
224
+ deps: [forwardRef(() => SciSashboxComponent)],
225
+ }], queries: [{ propertyName: "setSashes", predicate: SciSashDirective }], ngImport: i0, template: "<ng-container *ngFor=\"let sash of sashes$ | async; index as i; first as first; last as last;\">\n <div class=\"sash\"\n [class.first]=\"first\"\n [class.last]=\"last\"\n [sciSashInitializer]=\"sash\"\n [style.flex-grow]=\"sash.flexGrowNormalized$ | async\"\n [style.flex-shrink]=\"sash.flexShrink\"\n [style.flex-basis]=\"sash.flexBasis\">\n <ng-container *ngTemplateOutlet=\"sash.sashTemplate\"></ng-container>\n </div>\n\n <sci-splitter *ngIf=\"!last\"\n sciElementRef #sciElementRef=\"sciElementRef\"\n [orientation]=\"isRowDirection ? 'vertical' : 'horizontal'\"\n (start)=\"onSashStart()\"\n (move)=\"onSash(sciElementRef.nativeElement, i, $event)\"\n (end)=\"onSashEnd()\"\n (reset)=\"onSashReset(i)\">\n </sci-splitter>\n</ng-container>\n", styles: [":host{--sci-sashbox-gap: 10px;--sci-sashbox-splitter-bgcolor: #d2d2d2;--sci-sashbox-splitter-bgcolor_hover: var(--sci-sashbox-splitter-bgcolor);--sci-sashbox-splitter-size: 1px;--sci-sashbox-splitter-size_hover: 8px;--sci-sashbox-splitter-touch-target-size: 15px;--sci-sashbox-splitter-cross-axis-size: 100%;--sci-sashbox-splitter-border-radius: 0;--sci-sashbox-splitter-opacity_active: 1;--sci-sashbox-splitter-opacity_hover: .3;display:flex;align-items:stretch;box-sizing:border-box;overflow:hidden;z-index:0}:host *{box-sizing:border-box}:host.column{flex-direction:column}:host.row{flex-direction:row}:host>div.sash{overflow:hidden;display:grid;grid-auto-rows:100%;grid-auto-columns:100%}:host.row>div.sash{margin:0 var(--sci-sashbox-gap)}:host.row>div.sash.first{margin-left:0}:host.row>div.sash.last{margin-right:0}:host.column>div.sash{margin:var(--sci-sashbox-gap) 0}:host.column>div.sash.first{margin-top:0}:host.column>div.sash.last{margin-bottom:0}:host.sashing>div.sash{pointer-events:none}:host>sci-splitter{--sci-splitter-bgcolor: var(--sci-sashbox-splitter-bgcolor);--sci-splitter-bgcolor_hover: var(--sci-sashbox-splitter-bgcolor_hover);--sci-splitter-size: var(--sci-sashbox-splitter-size);--sci-splitter-size_hover: var(--sci-sashbox-splitter-size_hover);--sci-splitter-touch-target-size: var(--sci-sashbox-splitter-touch-target-size);--sci-splitter-cross-axis-size: var(--sci-sashbox-splitter-cross-axis-size);--sci-splitter-border-radius: var(--sci-sashbox-splitter-border-radius);--sci-splitter-opacity_active: var(--sci-sashbox-splitter-opacity_active);--sci-splitter-opacity_hover: var(--sci-sashbox-splitter-opacity_hover);flex:none;z-index:1}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.SciSplitterComponent, selector: "sci-splitter", inputs: ["orientation"], outputs: ["start", "move", "end", "reset"] }, { kind: "directive", type: i3.SciSashInitializerDirective, selector: "div[sciSashInitializer].sash", inputs: ["sciSashInitializer"] }, { kind: "directive", type: i4.SciElementRefDirective, selector: "[sciElementRef]", exportAs: ["sciElementRef"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
226
+ }
227
+ export { SciSashboxComponent };
228
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: SciSashboxComponent, decorators: [{
229
+ type: Component,
230
+ args: [{ selector: 'sci-sashbox', providers: [{
231
+ provide: SciSashBoxAccessor,
232
+ useFactory: provideSashBoxAccessor,
233
+ deps: [forwardRef(() => SciSashboxComponent)],
234
+ }], template: "<ng-container *ngFor=\"let sash of sashes$ | async; index as i; first as first; last as last;\">\n <div class=\"sash\"\n [class.first]=\"first\"\n [class.last]=\"last\"\n [sciSashInitializer]=\"sash\"\n [style.flex-grow]=\"sash.flexGrowNormalized$ | async\"\n [style.flex-shrink]=\"sash.flexShrink\"\n [style.flex-basis]=\"sash.flexBasis\">\n <ng-container *ngTemplateOutlet=\"sash.sashTemplate\"></ng-container>\n </div>\n\n <sci-splitter *ngIf=\"!last\"\n sciElementRef #sciElementRef=\"sciElementRef\"\n [orientation]=\"isRowDirection ? 'vertical' : 'horizontal'\"\n (start)=\"onSashStart()\"\n (move)=\"onSash(sciElementRef.nativeElement, i, $event)\"\n (end)=\"onSashEnd()\"\n (reset)=\"onSashReset(i)\">\n </sci-splitter>\n</ng-container>\n", styles: [":host{--sci-sashbox-gap: 10px;--sci-sashbox-splitter-bgcolor: #d2d2d2;--sci-sashbox-splitter-bgcolor_hover: var(--sci-sashbox-splitter-bgcolor);--sci-sashbox-splitter-size: 1px;--sci-sashbox-splitter-size_hover: 8px;--sci-sashbox-splitter-touch-target-size: 15px;--sci-sashbox-splitter-cross-axis-size: 100%;--sci-sashbox-splitter-border-radius: 0;--sci-sashbox-splitter-opacity_active: 1;--sci-sashbox-splitter-opacity_hover: .3;display:flex;align-items:stretch;box-sizing:border-box;overflow:hidden;z-index:0}:host *{box-sizing:border-box}:host.column{flex-direction:column}:host.row{flex-direction:row}:host>div.sash{overflow:hidden;display:grid;grid-auto-rows:100%;grid-auto-columns:100%}:host.row>div.sash{margin:0 var(--sci-sashbox-gap)}:host.row>div.sash.first{margin-left:0}:host.row>div.sash.last{margin-right:0}:host.column>div.sash{margin:var(--sci-sashbox-gap) 0}:host.column>div.sash.first{margin-top:0}:host.column>div.sash.last{margin-bottom:0}:host.sashing>div.sash{pointer-events:none}:host>sci-splitter{--sci-splitter-bgcolor: var(--sci-sashbox-splitter-bgcolor);--sci-splitter-bgcolor_hover: var(--sci-sashbox-splitter-bgcolor_hover);--sci-splitter-size: var(--sci-sashbox-splitter-size);--sci-splitter-size_hover: var(--sci-sashbox-splitter-size_hover);--sci-splitter-touch-target-size: var(--sci-sashbox-splitter-touch-target-size);--sci-splitter-cross-axis-size: var(--sci-sashbox-splitter-cross-axis-size);--sci-splitter-border-radius: var(--sci-sashbox-splitter-border-radius);--sci-splitter-opacity_active: var(--sci-sashbox-splitter-opacity_active);--sci-splitter-opacity_hover: var(--sci-sashbox-splitter-opacity_hover);flex:none;z-index:1}\n"] }]
235
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { sashing: [{
236
+ type: HostBinding,
237
+ args: ['class.sashing']
238
+ }], direction: [{
239
+ type: Input
240
+ }], sashStart: [{
241
+ type: Output
242
+ }], sashEnd: [{
243
+ type: Output
244
+ }], setSashes: [{
245
+ type: ContentChildren,
246
+ args: [SciSashDirective]
247
+ }], isColumnDirection: [{
248
+ type: HostBinding,
249
+ args: ['class.column']
250
+ }], isRowDirection: [{
251
+ type: HostBinding,
252
+ args: ['class.row']
253
+ }] } });
254
+ function between(value, minmax) {
255
+ return Math.min(minmax.max, Math.max(minmax.min, value));
256
+ }
257
+ /**
258
+ * Returns the factor to compute the flex-grow proportion from the pixel size of a sash.
259
+ */
260
+ function computePixelToFlexGrowFactor(sashes) {
261
+ const flexibleSashes = sashes.filter(sash => !sash.isFixedSize);
262
+ const proportionSum = flexibleSashes.reduce((sum, sash) => sum + Number(sash.size), 0);
263
+ const pixelSum = flexibleSashes.reduce((sum, sash) => sum + sash.computedSize, 0);
264
+ return proportionSum / pixelSum;
265
+ }
266
+ export function provideSashBoxAccessor(component) {
267
+ return new class {
268
+ get direction() {
269
+ return component.direction;
270
+ }
271
+ get sashes$() {
272
+ return component.sashes$;
273
+ }
274
+ get sashes() {
275
+ return component.sashes$.value;
276
+ }
277
+ };
278
+ }
279
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FzaGJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi9jb21wb25lbnRzL3Nhc2hib3gvc3JjL3Nhc2hib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vY29tcG9uZW50cy9zYXNoYm94L3NyYy9zYXNoYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxlQUFlLEVBQWMsWUFBWSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBYSxNQUFNLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDekosT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEVBQUMsZUFBZSxFQUFjLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUUxRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7O0FBRXREOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtREc7QUFDSCxNQVVhLG1CQUFtQjtJQTJCOUIsZ0JBQWdCO0lBQ2hCLElBQ1csU0FBUyxDQUFDLFNBQXNDO1FBQ3pELFNBQVMsQ0FBQyxPQUFPO2FBQ2QsSUFBSSxDQUNILFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFDcEIsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUI7YUFDQSxTQUFTLENBQUMsQ0FBQyxNQUFtQyxFQUFFLEVBQUU7WUFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDdEMs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QztBQUVEOztHQUVHO0FBQ0gsU0FBUyw0QkFBNEIsQ0FBQyxNQUEwQjtJQUM5RCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFaEUsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVsRixPQUFPLGFBQWEsR0FBRyxRQUFRLENBQUM7QUFDbEMsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxTQUE4QjtJQUNuRSxPQUFPLElBQUk7UUFFVCxJQUFXLFNBQVM7WUFDbEIsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDO1FBQzdCLENBQUM7UUFFRCxJQUFXLE9BQU87WUFDaEIsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQzNCLENBQUM7UUFFRCxJQUFXLE1BQU07WUFDZixPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ2pDLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSG9zdEJpbmRpbmcsIElucHV0LCBOZ1pvbmUsIE9uRGVzdHJveSwgT3V0cHV0LCBRdWVyeUxpc3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtzdGFydFdpdGgsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtTcGxpdHRlck1vdmVFdmVudH0gZnJvbSAnQHNjaW9uL2NvbXBvbmVudHMvc3BsaXR0ZXInO1xuaW1wb3J0IHtTY2lTYXNoRGlyZWN0aXZlfSBmcm9tICcuL3Nhc2guZGlyZWN0aXZlJztcbmltcG9ydCB7U2NpU2FzaEJveEFjY2Vzc29yfSBmcm9tICcuL3Nhc2hib3gtYWNjZXNzb3InO1xuXG4vKipcbiAqIFRoZSA8c2NpLXNhc2hib3g+IGlzIGxpa2UgYSBDU1MgZmxleGJveCBjb250YWluZXIgdGhhdCBsYXlzIG91dCBpdHMgY29udGVudCBjaGlsZHJlbiAoc2FzaGVzKSBpbiBhIHJvdyAod2hpY2ggaXMgYnkgZGVmYXVsdClcbiAqIG9yIGNvbHVtbiBhcnJhbmdlbWVudCAoYXMgc3BlY2lmaWVkIGJ5IHRoZSBkaXJlY3Rpb24gcHJvcGVydHkpLiBBIHNwbGl0dGVyIGlzIGFkZGVkIGJldHdlZW4gZWFjaCBjaGlsZCB0byBhbGxvdyB0aGUgdXNlciB0b1xuICogc2hyaW5rIG9yIHN0cmV0Y2ggdGhlIGluZGl2aWR1YWwgc2FzaGVzLlxuICpcbiAqIFNhc2hlcyBhcmUgbW9kZWxsZWQgYXMgY29udGVudCBjaGlsZHJlbiBpbnNpZGUgYSA8bmctdGVtcGxhdGU+IGRlY29yYXRlZCB3aXRoIHRoZSAnc2NpU2FzaCcgZGlyZWN0aXZlLlxuICogQSBzYXNoIGNhbiBoYXZlIGEgZml4ZWQgc2l6ZSB3aXRoIGFuIGV4cGxpY2l0IHVuaXQsIG9yIGEgdW5pdGxlc3MgcHJvcG9ydGlvbiB0byBkaXN0aWJ1dGUgcmVtYWluaW5nIHNwYWNlLlxuICogQSBwcm9wb3J0aW9uYWwgc2FzaCBoYXMgdGhlIGFiaWxpdHkgdG8gZ3JvdyBvciBzaHJpbmsgaWYgbmVjZXNzYXJ5LlxuICpcbiAqXG4gKiAjIyMgVXNhZ2U6XG4gKlxuICogYGBgaHRtbFxuICogPHNjaS1zYXNoYm94IGRpcmVjdGlvbj1cInJvd1wiPlxuICogICA8bmctdGVtcGxhdGUgc2NpU2FzaCBzaXplPVwiMVwiPlxuICogICAgIC4uLlxuICogICA8L25nLXRlbXBsYXRlPlxuICpcbiAqICAgPG5nLXRlbXBsYXRlIHNjaVNhc2ggc2l6ZT1cIjJcIj5cbiAqICAgICAuLi5cbiAqICAgPC9uZy10ZW1wbGF0ZT5cbiAqXG4gKiAgIDxuZy10ZW1wbGF0ZSBzY2lTYXNoIHNpemU9XCIxXCI+XG4gKiAgICAgLi4uXG4gKiAgIDwvbmctdGVtcGxhdGU+XG4gKiA8L3NjaS1zYXNoYm94PlxuICogYGBgXG4gKlxuICogIyMjIFRoZW1lIG92ZXJyaWRlOlxuICogVGhlIGRlZmF1bHQgc3R5bGUgb2YgdGhlIHNhc2hib3ggaXMgbWFkZSB1cCBvZiBzaGFkZXMgb2YgZ3JheS5cbiAqIFlvdSBjYW4gY29udHJvbCB0aGUgYXBwZWFyYW5jZSBieSBvdmVycmlkaW5nIHRoZSBmb2xsb3dpbmcgQ1NTIHZhcmlhYmxlczpcbiAqXG4gKiAtIC0tc2NpLXNhc2hib3gtZ2FwOiBTZXRzIHRoZSBnYXBzIChndXR0ZXJzKSBiZXR3ZWVuIHNhc2hlcy5cbiAqIC0gLS1zY2ktc2FzaGJveC1zcGxpdHRlci1iZ2NvbG9yOiBTZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBzcGxpdHRlci5cbiAqIC0gLS1zY2ktc2FzaGJveC1zcGxpdHRlci1iZ2NvbG9yX2hvdmVyOiBTZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBzcGxpdHRlciB3aGVuIGhvdmVyaW5nIGl0LlxuICogLSAtLXNjaS1zYXNoYm94LXNwbGl0dGVyLXNpemU6IFNldHMgdGhlIHNpemUgb2YgdGhlIHNwbGl0dGVyIGFsb25nIHRoZSBtYWluIGF4aXMuXG4gKiAtIC0tc2NpLXNhc2hib3gtc3BsaXR0ZXItc2l6ZV9ob3ZlcjogU2V0cyB0aGUgc2l6ZSBvZiB0aGUgc3BsaXR0ZXIgYWxvbmcgdGhlIG1haW4gYXhpcyB3aGVuIGhvdmVyaW5nIGl0LlxuICogLSAtLXNjaS1zYXNoYm94LXNwbGl0dGVyLXRvdWNoLXRhcmdldC1zaXplOiBTZXRzIHRoZSB0b3VjaCB0YXJnZXQgc2l6ZSB0byBtb3ZlIHRoZSBzcGxpdHRlciAoYWNjZXNzaWJpbGl0eSkuXG4gKiAtIC0tc2NpLXNhc2hib3gtc3BsaXR0ZXItY3Jvc3MtYXhpcy1zaXplOiBTZXRzIHRoZSBzcGxpdHRlciBzaXplIGFsb25nIHRoZSBjcm9zcyBheGlzLlxuICogLSAtLXNjaS1zYXNoYm94LXNwbGl0dGVyLWJvcmRlci1yYWRpdXM6IFNldHMgdGhlIGJvcmRlciByYWRpdXMgb2YgdGhlIHNwbGl0dGVyLlxuICogLSAtLXNjaS1zYXNoYm94LXNwbGl0dGVyLW9wYWNpdHlfYWN0aXZlOiBTZXRzIHRoZSBvcGFjaXR5IG9mIHRoZSBzcGxpdHRlciB3aGlsZSB0aGUgdXNlciBtb3ZlcyB0aGUgc3BsaXR0ZXIuXG4gKiAtIC0tc2NpLXNhc2hib3gtc3BsaXR0ZXItb3BhY2l0eV9ob3ZlcjogU2V0cyB0aGUgb3BhY2l0eSBvZiB0aGUgc3BsaXR0ZXIgd2hlbiBob3ZlcmluZyBpdC5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYHNjc3NcbiAqIHNjaS1zYXNoYm94IHtcbiAqICAgLS1zY2ktc2FzaGJveC1zcGxpdHRlci1iZ2NvbG9yOiBibGFjaztcbiAqICAgLS1zY2ktc2FzaGJveC1zcGxpdHRlci1iZ2NvbG9yX2hvdmVyOiBibGFjaztcbiAqIH1cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzY2ktc2FzaGJveCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zYXNoYm94LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2FzaGJveC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogU2NpU2FzaEJveEFjY2Vzc29yLFxuICAgIHVzZUZhY3Rvcnk6IHByb3ZpZGVTYXNoQm94QWNjZXNzb3IsXG4gICAgZGVwczogW2ZvcndhcmRSZWYoKCkgPT4gU2NpU2FzaGJveENvbXBvbmVudCldLFxuICB9XSxcbn0pXG5leHBvcnQgY2xhc3MgU2NpU2FzaGJveENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHB1YmxpYyBzYXNoZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTY2lTYXNoRGlyZWN0aXZlW10+KFtdKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNhc2hpbmcnKVxuICBwdWJsaWMgc2FzaGluZyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaWYgdG8gbGF5IG91dCBzYXNoZXMgaW4gYSByb3cgKHdoaWNoIGlzIGJ5IGRlZmF1bHQpIG9yIGNvbHVtbiBhcnJhbmdlbWVudC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkaXJlY3Rpb246ICdjb2x1bW4nIHwgJ3JvdycgPSAncm93JztcblxuICAvKipcbiAgICogRW1pdHMgd2hlbiBzdGFydCBzYXNoaW5nLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzYXNoU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBhYnNvbHV0ZSBzYXNoIHNpemVzIChweCkgd2hlbiBmaW5pc2hlZCBzYXNoaW5nLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzYXNoRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXJbXT4oKTtcblxuICAvKiogQGludGVybmFsICovXG4gIEBDb250ZW50Q2hpbGRyZW4oU2NpU2FzaERpcmVjdGl2ZSlcbiAgcHVibGljIHNldCBzZXRTYXNoZXMocXVlcnlMaXN0OiBRdWVyeUxpc3Q8U2NpU2FzaERpcmVjdGl2ZT4pIHtcbiAgICBxdWVyeUxpc3QuY2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aChxdWVyeUxpc3QpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoc2FzaGVzOiBRdWVyeUxpc3Q8U2NpU2FzaERpcmVjdGl2ZT4pID0+IHtcbiAgICAgICAgdGhpcy5zYXNoZXMkLm5leHQoc2FzaGVzLnRvQXJyYXkoKSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2hvc3Q6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCBwcml2YXRlIF96b25lOiBOZ1pvbmUpIHtcbiAgfVxuXG4gIHB1YmxpYyBvblNhc2hTdGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLnNhc2hpbmcgPSB0cnVlO1xuICAgIHRoaXMuc2FzaFN0YXJ0LmVtaXQoKTtcblxuICAgIC8vIHNldCB0aGUgZWZmZWN0aXZlIHNhc2ggc2l6ZSBhcyB0aGUgZmxleC1iYXNpcyBmb3Igbm9uLWZpeGVkIHNhc2hlcyAoYXMgc2FzaGluZyBvcGVyYXRlcyBvbiBwaXhlbCBkZWx0YXMpXG4gICAgdGhpcy5zYXNoZXMuZm9yRWFjaChzYXNoID0+IHtcbiAgICAgIGlmICghc2FzaC5pc0ZpeGVkU2l6ZSkge1xuICAgICAgICBzYXNoLmZsZXhHcm93ID0gMDtcbiAgICAgICAgc2FzaC5mbGV4U2hyaW5rID0gMDtcbiAgICAgICAgc2FzaC5mbGV4QmFzaXMgPSBgJHtzYXNoLmNvbXB1dGVkU2l6ZX1weGA7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25TYXNoRW5kKCk6IHZvaWQge1xuICAgIHRoaXMuc2FzaGluZyA9IGZhbHNlO1xuXG4gICAgLy8gdW5zZXQgdGhlIGZsZXgtYmFzaXMgZm9yIG5vbi1maXhlZCBzYXNoZXMgYW5kIHNldCB0aGUgZmxleC1ncm93IGFjY29yZGluZ2x5XG4gICAgY29uc3QgcGl4ZWxUb0ZsZXhHcm93RmFjdG9yID0gY29tcHV0ZVBpeGVsVG9GbGV4R3Jvd0ZhY3Rvcih0aGlzLnNhc2hlcyk7XG4gICAgY29uc3QgYWJzb2x1dGVTYXNoU2l6ZXMgPSB0aGlzLnNhc2hlcy5tYXAoc2FzaCA9PiBzYXNoLmNvbXB1dGVkU2l6ZSk7XG5cbiAgICB0aGlzLnNhc2hlcy5mb3JFYWNoKChzYXNoLCBpKSA9PiB7XG4gICAgICBpZiAoIXNhc2guaXNGaXhlZFNpemUpIHtcbiAgICAgICAgc2FzaC5mbGV4R3JvdyA9IHBpeGVsVG9GbGV4R3Jvd0ZhY3RvciAqIGFic29sdXRlU2FzaFNpemVzW2ldO1xuICAgICAgICBzYXNoLmZsZXhTaHJpbmsgPSAxO1xuICAgICAgICBzYXNoLmZsZXhCYXNpcyA9ICcwJztcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnNhc2hFbmQuZW1pdChhYnNvbHV0ZVNhc2hTaXplcyk7XG4gIH1cblxuICBwdWJsaWMgb25TYXNoKHNwbGl0dGVyOiBIVE1MRWxlbWVudCwgc2FzaEluZGV4OiBudW1iZXIsIG1vdmVFdmVudDogU3BsaXR0ZXJNb3ZlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBkaXN0YW5jZSA9IG1vdmVFdmVudC5kaXN0YW5jZTtcbiAgICBpZiAoZGlzdGFuY2UgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBOZ1pvbmUuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpO1xuXG4gICAgLy8gY29tcHV0ZSB0aGUgc3BsaXR0ZXIgcG9zaXRpb25cbiAgICBjb25zdCBzcGxpdHRlclJlY3QgPSBzcGxpdHRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBzcGxpdHRlclN0YXJ0ID0gKHRoaXMuaXNSb3dEaXJlY3Rpb24gPyBzcGxpdHRlclJlY3QubGVmdCA6IHNwbGl0dGVyUmVjdC50b3ApO1xuICAgIGNvbnN0IHNwbGl0dGVyRW5kID0gKHRoaXMuaXNSb3dEaXJlY3Rpb24gPyBzcGxpdHRlclJlY3QubGVmdCArIHNwbGl0dGVyUmVjdC53aWR0aCA6IHNwbGl0dGVyUmVjdC50b3AgKyBzcGxpdHRlclJlY3QuaGVpZ2h0KTtcblxuICAgIC8vIGlnbm9yZSB0aGUgZXZlbnQgaWYgb3V0c2lkZSBvZiB0aGUgc3BsaXR0ZXIncyBhY3Rpb24gc2NvcGVcbiAgICBjb25zdCBldmVudFBvcyA9IG1vdmVFdmVudC5wb3NpdGlvbi5jbGllbnRQb3M7XG4gICAgLy8gaS5lLiB0aGUgc2FzaCBzaG91bGQgbm90IGdyb3cgaWYgbW92ZWQgdGhlIG1vdXNlIHBvaW50ZXIgYmV5b25kIHRoZSBsZWZ0IGJvdW5kcyBvZiB0aGUgc2FzaCwgYW5kIGlmIG5vdyBtb3ZpbmcgdGhlIG1vdXNlIHBvaW50ZXIgYmFjayB0b3dhcmQgdGhlIGN1cnJlbnQgc2FzaC5cbiAgICBpZiAoZGlzdGFuY2UgPiAwICYmIGV2ZW50UG9zIDwgc3BsaXR0ZXJTdGFydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGkuZS4gdGhlIHNhc2ggc2hvdWxkIG5vdCBzaHJpbmsgaWYgbW92ZWQgdGhlIG1vdXNlIHBvaW50ZXIgYmV5b25kIHRoZSByaWdodCBib3VuZHMgb2YgdGhlIHNhc2gsIGFuZCBpZiBub3cgbW92aW5nIHRoZSBtb3VzZSBwb2ludGVyIGJhY2sgdG93YXJkIHRoZSBjdXJyZW50IHNhc2guXG4gICAgaWYgKGRpc3RhbmNlIDwgMCAmJiBldmVudFBvcyA+IHNwbGl0dGVyRW5kKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY29tcHV0ZSB0aGUgbmV3IHNhc2ggc2l6ZXNcbiAgICBjb25zdCBzYXNoMSA9IHRoaXMuc2FzaGVzW3Nhc2hJbmRleF07XG4gICAgY29uc3Qgc2FzaDIgPSB0aGlzLnNhc2hlc1tzYXNoSW5kZXggKyAxXTtcblxuICAgIGNvbnN0IHNhc2hTaXplMSA9IHNhc2gxLmNvbXB1dGVkU2l6ZTtcbiAgICBjb25zdCBzYXNoU2l6ZTIgPSBzYXNoMi5jb21wdXRlZFNpemU7XG4gICAgY29uc3QgbWF4U2FzaFNpemUgPSBzYXNoU2l6ZTEgKyBzYXNoU2l6ZTI7XG4gICAgY29uc3QgY29tcHV0ZWROZXdTYXNoU2l6ZTEgPSBNYXRoLnJvdW5kKHNhc2hTaXplMSArIGRpc3RhbmNlKTtcbiAgICBjb25zdCBjb21wdXRlZE5ld1Nhc2hTaXplMiA9IE1hdGgucm91bmQoc2FzaFNpemUyIC0gZGlzdGFuY2UpO1xuXG4gICAgaWYgKHNhc2gxLm1pblNpemUgIT09IHVuZGVmaW5lZCAmJiBkaXN0YW5jZSA8IDAgJiYgY29tcHV0ZWROZXdTYXNoU2l6ZTEgPCB0aGlzLnRvUGl4ZWwoc2FzaDEubWluU2l6ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHNhc2gyLm1pblNpemUgIT09IHVuZGVmaW5lZCAmJiBkaXN0YW5jZSA+IDAgJiYgY29tcHV0ZWROZXdTYXNoU2l6ZTIgPCB0aGlzLnRvUGl4ZWwoc2FzaDIubWluU2l6ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZE5ld1Nhc2hTaXplMSA9IGJldHdlZW4oY29tcHV0ZWROZXdTYXNoU2l6ZTEsIHttaW46IDAsIG1heDogbWF4U2FzaFNpemV9KTtcbiAgICBjb25zdCB2YWxpZE5ld1Nhc2hTaXplMiA9IGJldHdlZW4oY29tcHV0ZWROZXdTYXNoU2l6ZTIsIHttaW46IDAsIG1heDogbWF4U2FzaFNpemV9KTtcblxuICAgIC8vIGNvbnRpbnVlIG9ubHkgaWYgYm90aCBzYXNoZXMgYWRqYWNlbnQgdG8gdGhlIHNwbGl0dGVyIGNoYW5nZSB0aGVpciBzaXplIChhcyB0aGUgZXZlbnQgd291bGQgY2hhbmdlIG90aGVyIHNhc2hlcyBvdGhlcndpc2UpXG4gICAgaWYgKHZhbGlkTmV3U2FzaFNpemUxICE9PSBjb21wdXRlZE5ld1Nhc2hTaXplMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodmFsaWROZXdTYXNoU2l6ZTIgIT09IGNvbXB1dGVkTmV3U2FzaFNpemUyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgY29tcHV0ZWQgc2FzaCBzaXplc1xuICAgIHRoaXMuX3pvbmUucnVuKCgpID0+IHtcbiAgICAgIHNhc2gxLmZsZXhCYXNpcyA9IGAke2NvbXB1dGVkTmV3U2FzaFNpemUxfXB4YDtcbiAgICAgIHNhc2gyLmZsZXhCYXNpcyA9IGAke2NvbXB1dGVkTmV3U2FzaFNpemUyfXB4YDtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblNhc2hSZXNldChzYXNoSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHNhc2gxID0gdGhpcy5zYXNoZXNbc2FzaEluZGV4XTtcbiAgICBjb25zdCBzYXNoMiA9IHRoaXMuc2FzaGVzW3Nhc2hJbmRleCArIDFdO1xuICAgIGNvbnN0IGVxdWFsU2FzaFNpemUgPSAoc2FzaDEuY29tcHV0ZWRTaXplICsgc2FzaDIuY29tcHV0ZWRTaXplKSAvIDI7XG4gICAgY29uc3QgcGl4ZWxUb0ZsZXhHcm93RmFjdG9yID0gY29tcHV0ZVBpeGVsVG9GbGV4R3Jvd0ZhY3Rvcih0aGlzLnNhc2hlcyk7XG4gICAgY29uc3QgYWJzb2x1dGVTYXNoU2l6ZXNBZnRlclJlc2V0ID0gdGhpcy5zYXNoZXMubWFwKChzYXNoLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID09PSBzYXNoSW5kZXggfHwgaW5kZXggPT09IHNhc2hJbmRleCArIDEpIHtcbiAgICAgICAgcmV0dXJuIGVxdWFsU2FzaFNpemU7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2FzaC5jb21wdXRlZFNpemU7XG4gICAgfSk7XG5cbiAgICBbc2FzaDEsIHNhc2gyXS5mb3JFYWNoKHNhc2ggPT4ge1xuICAgICAgaWYgKHNhc2guaXNGaXhlZFNpemUpIHtcbiAgICAgICAgc2FzaC5mbGV4QmFzaXMgPSBgJHtlcXVhbFNhc2hTaXplfXB4YDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBzYXNoLmZsZXhHcm93ID0gcGl4ZWxUb0ZsZXhHcm93RmFjdG9yICogZXF1YWxTYXNoU2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuc2FzaFN0YXJ0LmVtaXQoKTtcbiAgICB0aGlzLnNhc2hFbmQuZW1pdChhYnNvbHV0ZVNhc2hTaXplc0FmdGVyUmVzZXQpO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jb2x1bW4nKVxuICBwdWJsaWMgZ2V0IGlzQ29sdW1uRGlyZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRpcmVjdGlvbiA9PT0gJ2NvbHVtbic7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnJvdycpXG4gIHB1YmxpYyBnZXQgaXNSb3dEaXJlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlyZWN0aW9uID09PSAncm93JztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHNhc2hlcygpOiBTY2lTYXNoRGlyZWN0aXZlW10ge1xuICAgIHJldHVybiB0aGlzLnNhc2hlcyQudmFsdWU7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b1BpeGVsKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmICh2YWx1ZS5lbmRzV2l0aCgnJScpKSB7XG4gICAgICBjb25zdCBob3N0Qm91bmRzID0gdGhpcy5faG9zdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgaG9zdFNpemUgPSAodGhpcy5pc1Jvd0RpcmVjdGlvbiA/IGhvc3RCb3VuZHMud2lkdGggOiBob3N0Qm91bmRzLmhlaWdodCk7XG4gICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKSAqIGhvc3RTaXplIC8gMTAwO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBiZXR3ZWVuKHZhbHVlOiBudW1iZXIsIG1pbm1heDoge21pbjogbnVtYmVyOyBtYXg6IG51bWJlcn0pOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5taW4obWlubWF4Lm1heCwgTWF0aC5tYXgobWlubWF4Lm1pbiwgdmFsdWUpKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmYWN0b3IgdG8gY29tcHV0ZSB0aGUgZmxleC1ncm93IHByb3BvcnRpb24gZnJvbSB0aGUgcGl4ZWwgc2l6ZSBvZiBhIHNhc2guXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVQaXhlbFRvRmxleEdyb3dGYWN0b3Ioc2FzaGVzOiBTY2lTYXNoRGlyZWN0aXZlW10pOiBudW1iZXIge1xuICBjb25zdCBmbGV4aWJsZVNhc2hlcyA9IHNhc2hlcy5maWx0ZXIoc2FzaCA9PiAhc2FzaC5pc0ZpeGVkU2l6ZSk7XG5cbiAgY29uc3QgcHJvcG9ydGlvblN1bSA9IGZsZXhpYmxlU2FzaGVzLnJlZHVjZSgoc3VtLCBzYXNoKSA9PiBzdW0gKyBOdW1iZXIoc2FzaC5zaXplKSwgMCk7XG4gIGNvbnN0IHBpeGVsU3VtID0gZmxleGlibGVTYXNoZXMucmVkdWNlKChzdW0sIHNhc2gpID0+IHN1bSArIHNhc2guY29tcHV0ZWRTaXplLCAwKTtcblxuICByZXR1cm4gcHJvcG9ydGlvblN1bSAvIHBpeGVsU3VtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVNhc2hCb3hBY2Nlc3Nvcihjb21wb25lbnQ6IFNjaVNhc2hib3hDb21wb25lbnQpOiBTY2lTYXNoQm94QWNjZXNzb3Ige1xuICByZXR1cm4gbmV3IGNsYXNzIGltcGxlbWVudHMgU2NpU2FzaEJveEFjY2Vzc29yIHtcblxuICAgIHB1YmxpYyBnZXQgZGlyZWN0aW9uKCk6ICdjb2x1bW4nIHwgJ3Jvdycge1xuICAgICAgcmV0dXJuIGNvbXBvbmVudC5kaXJlY3Rpb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzYXNoZXMkKCk6IE9ic2VydmFibGU8U2NpU2FzaERpcmVjdGl2ZVtdPiB7XG4gICAgICByZXR1cm4gY29tcG9uZW50LnNhc2hlcyQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzYXNoZXMoKTogU2NpU2FzaERpcmVjdGl2ZVtdIHtcbiAgICAgIHJldHVybiBjb21wb25lbnQuc2FzaGVzJC52YWx1ZTtcbiAgICB9XG4gIH07XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzYXNoIG9mIHNhc2hlcyQgfCBhc3luYzsgaW5kZXggYXMgaTsgZmlyc3QgYXMgZmlyc3Q7IGxhc3QgYXMgbGFzdDtcIj5cbiAgPGRpdiBjbGFzcz1cInNhc2hcIlxuICAgICAgIFtjbGFzcy5maXJzdF09XCJmaXJzdFwiXG4gICAgICAgW2NsYXNzLmxhc3RdPVwibGFzdFwiXG4gICAgICAgW3NjaVNhc2hJbml0aWFsaXplcl09XCJzYXNoXCJcbiAgICAgICBbc3R5bGUuZmxleC1ncm93XT1cInNhc2guZmxleEdyb3dOb3JtYWxpemVkJCB8IGFzeW5jXCJcbiAgICAgICBbc3R5bGUuZmxleC1zaHJpbmtdPVwic2FzaC5mbGV4U2hyaW5rXCJcbiAgICAgICBbc3R5bGUuZmxleC1iYXNpc109XCJzYXNoLmZsZXhCYXNpc1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzYXNoLnNhc2hUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICA8c2NpLXNwbGl0dGVyICpuZ0lmPVwiIWxhc3RcIlxuICAgICAgICAgICAgICAgIHNjaUVsZW1lbnRSZWYgI3NjaUVsZW1lbnRSZWY9XCJzY2lFbGVtZW50UmVmXCJcbiAgICAgICAgICAgICAgICBbb3JpZW50YXRpb25dPVwiaXNSb3dEaXJlY3Rpb24gPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnXCJcbiAgICAgICAgICAgICAgICAoc3RhcnQpPVwib25TYXNoU3RhcnQoKVwiXG4gICAgICAgICAgICAgICAgKG1vdmUpPVwib25TYXNoKHNjaUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgaSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGVuZCk9XCJvblNhc2hFbmQoKVwiXG4gICAgICAgICAgICAgICAgKHJlc2V0KT1cIm9uU2FzaFJlc2V0KGkpXCI+XG4gIDwvc2NpLXNwbGl0dGVyPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -0,0 +1,70 @@
1
+ /*
2
+ * Copyright (c) 2018-2019 Swiss Federal Railways
3
+ *
4
+ * This program and the accompanying materials are made
5
+ * available under the terms of the Eclipse Public License 2.0
6
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
7
+ *
8
+ * SPDX-License-Identifier: EPL-2.0
9
+ */
10
+ import { NgModule } from '@angular/core';
11
+ import { CommonModule } from '@angular/common';
12
+ import { SciSashboxComponent } from './sashbox.component';
13
+ import { SciSashDirective } from './sash.directive';
14
+ import { SciSashInitializerDirective } from './sash-initializer.directive';
15
+ import { SciSplitterModule } from '@scion/components/splitter';
16
+ import { SciElementRefDirective } from './element-ref.directive';
17
+ import * as i0 from "@angular/core";
18
+ /**
19
+ * Provides a sashbox component that lays out its children in a row or column arrangement and places a splitter between each child.
20
+ *
21
+ * ### Usage:
22
+ *
23
+ * ```html
24
+ * <sci-sashbox direction="row">
25
+ * <ng-template sciSash size="1">
26
+ * ...
27
+ * </ng-template>
28
+ *
29
+ * <ng-template sciSash size="2">
30
+ * ...
31
+ * </ng-template>
32
+ *
33
+ * <ng-template sciSash size="1">
34
+ * ...
35
+ * </ng-template>
36
+ * </sci-sashbox>
37
+ * ```
38
+ */
39
+ class SciSashboxModule {
40
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: SciSashboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
41
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.1", ngImport: i0, type: SciSashboxModule, declarations: [SciSashboxComponent,
42
+ SciSashDirective,
43
+ SciSashInitializerDirective,
44
+ SciElementRefDirective], imports: [CommonModule,
45
+ SciSplitterModule], exports: [SciSashboxComponent,
46
+ SciSashDirective] }); }
47
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: SciSashboxModule, imports: [CommonModule,
48
+ SciSplitterModule] }); }
49
+ }
50
+ export { SciSashboxModule };
51
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: SciSashboxModule, decorators: [{
52
+ type: NgModule,
53
+ args: [{
54
+ declarations: [
55
+ SciSashboxComponent,
56
+ SciSashDirective,
57
+ SciSashInitializerDirective,
58
+ SciElementRefDirective,
59
+ ],
60
+ imports: [
61
+ CommonModule,
62
+ SciSplitterModule,
63
+ ],
64
+ exports: [
65
+ SciSashboxComponent,
66
+ SciSashDirective,
67
+ ],
68
+ }]
69
+ }] });
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FzaGJveC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi9jb21wb25lbnRzL3Nhc2hib3gvc3JjL3Nhc2hib3gubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDekUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0seUJBQXlCLENBQUM7O0FBRS9EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BZ0JhLGdCQUFnQjs4R0FBaEIsZ0JBQWdCOytHQUFoQixnQkFBZ0IsaUJBZHpCLG1CQUFtQjtZQUNuQixnQkFBZ0I7WUFDaEIsMkJBQTJCO1lBQzNCLHNCQUFzQixhQUd0QixZQUFZO1lBQ1osaUJBQWlCLGFBR2pCLG1CQUFtQjtZQUNuQixnQkFBZ0I7K0dBR1AsZ0JBQWdCLFlBUnpCLFlBQVk7WUFDWixpQkFBaUI7O1NBT1IsZ0JBQWdCOzJGQUFoQixnQkFBZ0I7a0JBaEI1QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixtQkFBbUI7d0JBQ25CLGdCQUFnQjt3QkFDaEIsMkJBQTJCO3dCQUMzQixzQkFBc0I7cUJBQ3ZCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGlCQUFpQjtxQkFDbEI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3FCQUNqQjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuICovXG5cbmltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1NjaVNhc2hib3hDb21wb25lbnR9IGZyb20gJy4vc2FzaGJveC5jb21wb25lbnQnO1xuaW1wb3J0IHtTY2lTYXNoRGlyZWN0aXZlfSBmcm9tICcuL3Nhc2guZGlyZWN0aXZlJztcbmltcG9ydCB7U2NpU2FzaEluaXRpYWxpemVyRGlyZWN0aXZlfSBmcm9tICcuL3Nhc2gtaW5pdGlhbGl6ZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7U2NpU3BsaXR0ZXJNb2R1bGV9IGZyb20gJ0BzY2lvbi9jb21wb25lbnRzL3NwbGl0dGVyJztcbmltcG9ydCB7U2NpRWxlbWVudFJlZkRpcmVjdGl2ZX0gZnJvbSAnLi9lbGVtZW50LXJlZi5kaXJlY3RpdmUnO1xuXG4vKipcbiAqIFByb3ZpZGVzIGEgc2FzaGJveCBjb21wb25lbnQgdGhhdCBsYXlzIG91dCBpdHMgY2hpbGRyZW4gaW4gYSByb3cgb3IgY29sdW1uIGFycmFuZ2VtZW50IGFuZCBwbGFjZXMgYSBzcGxpdHRlciBiZXR3ZWVuIGVhY2ggY2hpbGQuXG4gKlxuICogIyMjIFVzYWdlOlxuICpcbiAqIGBgYGh0bWxcbiAqIDxzY2ktc2FzaGJveCBkaXJlY3Rpb249XCJyb3dcIj5cbiAqICAgPG5nLXRlbXBsYXRlIHNjaVNhc2ggc2l6ZT1cIjFcIj5cbiAqICAgICAuLi5cbiAqICAgPC9uZy10ZW1wbGF0ZT5cbiAqXG4gKiAgIDxuZy10ZW1wbGF0ZSBzY2lTYXNoIHNpemU9XCIyXCI+XG4gKiAgICAgLi4uXG4gKiAgIDwvbmctdGVtcGxhdGU+XG4gKlxuICogICA8bmctdGVtcGxhdGUgc2NpU2FzaCBzaXplPVwiMVwiPlxuICogICAgIC4uLlxuICogICA8L25nLXRlbXBsYXRlPlxuICogPC9zY2ktc2FzaGJveD5cbiAqIGBgYFxuICovXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBTY2lTYXNoYm94Q29tcG9uZW50LFxuICAgIFNjaVNhc2hEaXJlY3RpdmUsXG4gICAgU2NpU2FzaEluaXRpYWxpemVyRGlyZWN0aXZlLFxuICAgIFNjaUVsZW1lbnRSZWZEaXJlY3RpdmUsXG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgU2NpU3BsaXR0ZXJNb2R1bGUsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBTY2lTYXNoYm94Q29tcG9uZW50LFxuICAgIFNjaVNhc2hEaXJlY3RpdmUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNjaVNhc2hib3hNb2R1bGUge1xufVxuIl19