@bitstack/ng-boundary 14.0.6-alpha.2 → 14.0.6-alpha.4

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.
@@ -18,4 +18,4 @@ BsBoundaryContextService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0
18
18
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BsBoundaryContextService, decorators: [{
19
19
  type: Injectable
20
20
  }] });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnMtYm91bmRhcnktY29udGV4dC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYml0c3RhY2stbmctYm91bmRhcnkvc3JjL2xpYi9icy1ib3VuZGFyeS1jb250ZXh0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUd2QyxNQUFNLE9BQU8sd0JBQXdCO0lBRHJDO1FBRVUsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUVsRCxpQkFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7S0FTMUQ7SUFQQyxjQUFjLENBQUMsS0FBYztRQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFDakMsQ0FBQzs7cUhBWFUsd0JBQXdCO3lIQUF4Qix3QkFBd0I7MkZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQnNCb3VuZGFyeUNvbnRleHRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfaXNMYW5kc2NhcGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICByZWFkb25seSBpc0xhbmRzY2FwZSQgPSB0aGlzLl9pc0xhbmRzY2FwZS5hc09ic2VydmFibGUoKTtcblxuICBzZXRJc0xhbmRzY2FwZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2lzTGFuZHNjYXBlLm5leHQodmFsdWUpO1xuICB9XG5cbiAgZ2V0SXNMYW5kc2NhcGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzTGFuZHNjYXBlLnZhbHVlO1xuICB9XG59XG4iXX0=
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnMtYm91bmRhcnktY29udGV4dC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYml0c3RhY2stbmctYm91bmRhcnkvc3JjL2xpYi9icy1ib3VuZGFyeS1jb250ZXh0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sTUFBTSxDQUFDOztBQUdyQyxNQUFNLE9BQU8sd0JBQXdCO0lBRHJDO1FBRVksaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUVsRCxpQkFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7S0FTNUQ7SUFQRyxjQUFjLENBQUMsS0FBYztRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsY0FBYztRQUNWLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFDbkMsQ0FBQzs7cUhBWFEsd0JBQXdCO3lIQUF4Qix3QkFBd0I7MkZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBCc0JvdW5kYXJ5Q29udGV4dFNlcnZpY2Uge1xuICAgIHByaXZhdGUgX2lzTGFuZHNjYXBlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgICByZWFkb25seSBpc0xhbmRzY2FwZSQgPSB0aGlzLl9pc0xhbmRzY2FwZS5hc09ic2VydmFibGUoKTtcblxuICAgIHNldElzTGFuZHNjYXBlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzTGFuZHNjYXBlLm5leHQodmFsdWUpO1xuICAgIH1cblxuICAgIGdldElzTGFuZHNjYXBlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNMYW5kc2NhcGUudmFsdWU7XG4gICAgfVxufVxuIl19
@@ -1,121 +1,306 @@
1
- import { Component, ElementRef, EventEmitter, inject, Input, Output, } from '@angular/core';
2
1
  import { BreakpointObserver } from '@angular/cdk/layout';
3
- import { debounceTime, fromEvent, Subject, takeUntil } from 'rxjs';
2
+ import { Component, ElementRef, EventEmitter, inject, Input, Output, } from '@angular/core';
3
+ import { fromEvent, Subject, takeUntil } from 'rxjs';
4
4
  import { BsBoundaryContextService } from './bs-boundary-context.service';
5
5
  import * as i0 from "@angular/core";
6
+ /**
7
+ * ============================================================
8
+ * BsBoundary Component - AWD 自適應邊界容器
9
+ * ============================================================
10
+ *
11
+ * 功能說明:
12
+ * 1. 提供響應式邊界容器,自動適應不同設備尺寸
13
+ * 2. 支援 5 種方向模式:auto, portrait, landscape, portraitLockRotation, landscapeLockRotation
14
+ * 3. 使用 CSS 變數實現動態計算,支援 px2vw() 函數
15
+ * 4. 相容 Chrome 74+,使用 JavaScript 計算邊界尺寸
16
+ *
17
+ * 使用範例:
18
+ * ```html
19
+ * <bs-boundary [orientation]="'auto'" [isFixedCenter]="true">
20
+ * <div class="content">...</div>
21
+ * </bs-boundary>
22
+ * ```
23
+ *
24
+ * CSS 變數設定:
25
+ * ```scss
26
+ * bs-boundary {
27
+ * --design-width: 375; // 設計稿寬度
28
+ * --design-height: 667; // 設計稿高度
29
+ * }
30
+ * ```
31
+ */
6
32
  export class BsBoundary {
7
33
  constructor() {
34
+ // ============================================================
35
+ // Inputs & Outputs
36
+ // ============================================================
37
+ /**
38
+ * 是否將內容固定在視窗中央
39
+ * @default false
40
+ */
8
41
  this.isFixedCenter = false;
42
+ /**
43
+ * 是否禁用指標事件
44
+ * @default false
45
+ */
9
46
  this.pointerEventsNone = false;
10
- this.lockOrientation = 'auto';
47
+ /**
48
+ * 方向模式
49
+ * - auto: 自動檢測方向
50
+ * - portrait: 鎖定直向
51
+ * - landscape: 鎖定橫向
52
+ * - portraitLockRotation: 強制直向(橫向設備時旋轉 -90°)
53
+ * - landscapeLockRotation: 強制橫向(直向設備時旋轉 90°)
54
+ * @default 'auto'
55
+ */
56
+ this.orientation = 'auto';
57
+ /**
58
+ * 方向變化事件
59
+ * @emits true: landscape(橫屏)
60
+ * @emits false: portrait(直屏)
61
+ */
11
62
  this.orientationChange = new EventEmitter();
63
+ // ============================================================
64
+ // Private Dependencies
65
+ // ============================================================
12
66
  this.breakpointObserver = inject(BreakpointObserver);
13
67
  this.boundaryContext = inject(BsBoundaryContextService);
14
68
  this.elementRef = inject(ElementRef);
15
69
  this.destroy$ = new Subject();
70
+ // ============================================================
71
+ // Public Properties
72
+ // ============================================================
73
+ /**
74
+ * 實際設備方向(基於視口尺寸)
75
+ * true: 直向 (height > width)
76
+ * false: 橫向 (width >= height)
77
+ */
78
+ this.actualIsPortrait = false;
16
79
  }
80
+ // ============================================================
81
+ // Getters
82
+ // ============================================================
83
+ /**
84
+ * 判斷當前是否為橫向模式
85
+ * 根據 orientation 設定和實際設備方向判斷
86
+ */
17
87
  get isLandscape() {
88
+ // landscapeLockRotation: 強制橫屏模式
89
+ if (this.orientation === 'landscapeLockRotation') {
90
+ return true;
91
+ }
92
+ // portraitLockRotation: 強制直屏模式
93
+ if (this.orientation === 'portraitLockRotation') {
94
+ return false;
95
+ }
96
+ // landscape: 鎖定橫向
97
+ if (this.orientation === 'landscape') {
98
+ return true;
99
+ }
100
+ // portrait: 鎖定直向
101
+ if (this.orientation === 'portrait') {
102
+ return false;
103
+ }
104
+ // auto: 自動檢測
18
105
  return this.boundaryContext.getIsLandscape();
19
106
  }
107
+ // ============================================================
108
+ // Lifecycle Hooks
109
+ // ============================================================
20
110
  ngOnInit() {
111
+ this.updateActualOrientation();
21
112
  this.setupBreakpointObserver();
22
113
  this.setupResizeObserver();
23
- // 延遲執行以確保 CSS 變數已經設定
24
- setTimeout(() => this.updateBoundaryCalculations(), 0);
114
+ }
115
+ ngAfterViewInit() {
116
+ // 在 view 初始化後計算(確保 CSS 已完全應用)
117
+ this.updateBoundaryCalculations();
25
118
  }
26
119
  ngOnDestroy() {
27
120
  this.destroy$.next();
28
121
  this.destroy$.complete();
29
122
  }
123
+ // ============================================================
124
+ // Observers Setup - 監聽器設定
125
+ // ============================================================
30
126
  /**
31
- * 監控方向變化
127
+ * 設定方向變化監控
128
+ *
129
+ * 工作原理:
130
+ * - lock 模式(portrait/landscape):直接設定固定方向,不監聽變化
131
+ * - lockRotation 模式:設定固定方向,但需監聽實際設備方向以觸發旋轉
132
+ * - auto 模式:使用 BreakpointObserver 監聽設備方向變化
32
133
  */
33
134
  setupBreakpointObserver() {
34
- if (this.lockOrientation === 'landscape') {
135
+ // landscape landscapeLockRotation: 鎖定為橫向
136
+ if (this.orientation === 'landscape' || this.orientation === 'landscapeLockRotation') {
35
137
  this.boundaryContext.setIsLandscape(true);
36
138
  this.orientationChange.emit(true);
37
- // 鎖定方向後也需要更新計算
38
- setTimeout(() => this.updateBoundaryCalculations(), 0);
39
139
  return;
40
140
  }
41
- if (this.lockOrientation === 'portrait') {
141
+ // portrait portraitLockRotation: 鎖定為直向
142
+ if (this.orientation === 'portrait' || this.orientation === 'portraitLockRotation') {
42
143
  this.boundaryContext.setIsLandscape(false);
43
144
  this.orientationChange.emit(false);
44
- // 鎖定方向後也需要更新計算
45
- setTimeout(() => this.updateBoundaryCalculations(), 0);
46
145
  return;
47
146
  }
147
+ // auto 模式:監聽實際的設備方向(用於 orientationChange 事件)
48
148
  this.breakpointObserver
49
149
  .observe('(orientation: landscape)')
50
150
  .pipe(takeUntil(this.destroy$))
51
151
  .subscribe(result => {
52
152
  this.boundaryContext.setIsLandscape(result.matches);
53
153
  this.orientationChange.emit(result.matches);
154
+ // 方向變化時重新計算邊界
54
155
  this.updateBoundaryCalculations();
55
156
  });
56
157
  }
57
158
  /**
58
- * 監控視口大小變化
159
+ * 設定視窗大小變化監控
160
+ *
161
+ * 功能:
162
+ * - 監聽 window resize 事件
163
+ * - 更新實際設備方向
164
+ * - 重新計算邊界尺寸
59
165
  */
60
166
  setupResizeObserver() {
61
167
  fromEvent(window, 'resize')
62
- .pipe(debounceTime(100), takeUntil(this.destroy$))
168
+ .pipe(
169
+ // debounceTime(150), // 可選:防抖優化性能
170
+ takeUntil(this.destroy$))
63
171
  .subscribe(() => {
172
+ this.updateActualOrientation();
64
173
  this.updateBoundaryCalculations();
65
174
  });
66
175
  }
176
+ // ============================================================
177
+ // Calculation Methods - 計算方法
178
+ // ============================================================
179
+ /**
180
+ * 更新實際設備方向(基於視口尺寸)
181
+ *
182
+ * 工作原理:
183
+ * - 只在 lockRotation 模式下需要檢測實際方向
184
+ * - 通過比較 window.innerHeight 和 window.innerWidth 判斷
185
+ * - 結果用於觸發 CSS 旋轉變換
186
+ */
187
+ updateActualOrientation() {
188
+ // 只有在 lockRotation 模式下才需要檢測實際方向
189
+ if (this.orientation !== 'landscapeLockRotation' && this.orientation !== 'portraitLockRotation') {
190
+ this.actualIsPortrait = false;
191
+ return;
192
+ }
193
+ // 檢測實際視口方向:高度 > 寬度 = 直向
194
+ this.actualIsPortrait = window.innerHeight > window.innerWidth;
195
+ }
67
196
  /**
68
- * 更新邊界計算(支援 Chrome 74,不使用 CSS min/max 函數)
197
+ * 更新邊界計算(支援 Chrome 74,使用 JavaScript 模擬 min 函數)
198
+ *
199
+ * 工作原理:
200
+ * 1. 讀取基礎 CSS 變數(vw100, vh100, design-width, design-height)
201
+ * 2. 處理 lockRotation 模式的視口尺寸交換
202
+ * 3. 計算邊界最大值和實際邊界尺寸
203
+ * 4. 計算 px2vw 轉換比例
204
+ * 5. 設定 CSS 變數供樣式使用
205
+ *
206
+ * 設定的 CSS 變數:
207
+ * - --boundary-width: 實際邊界寬度(px)
208
+ * - --boundary-height: 實際邊界高度(px)
209
+ * - --px2vw-ratio: px 轉 vw 的比例係數
69
210
  */
70
211
  updateBoundaryCalculations() {
71
212
  const hostElement = this.elementRef.nativeElement;
72
213
  const computedStyle = getComputedStyle(hostElement);
73
- // 讀取 CSS 變數
74
- const designWidth = parseFloat(computedStyle.getPropertyValue('--design-width') || '1920');
75
- const designHeight = parseFloat(computedStyle.getPropertyValue('--design-height') || '1080');
76
- const vw100 = parseFloat(computedStyle.getPropertyValue('--vw100') || `${window.innerWidth}`);
77
- const vh100 = parseFloat(computedStyle.getPropertyValue('--vh100') || `${window.innerHeight}`);
78
- // 計算比例
214
+ // ========================================
215
+ // Step 1: 讀取基礎 CSS 變數
216
+ // ========================================
217
+ let vw100 = parseFloat(computedStyle.getPropertyValue('--vw100')) || window.innerWidth;
218
+ let vh100 = parseFloat(computedStyle.getPropertyValue('--vh100')) || window.innerHeight;
219
+ const designWidth = parseFloat(computedStyle.getPropertyValue('--design-width'));
220
+ const designHeight = parseFloat(computedStyle.getPropertyValue('--design-height'));
221
+ // 檢查基礎變數是否準備好
222
+ if (isNaN(designWidth)) {
223
+ console.error('[BsBoundary][BS001] CSS variable --design-width is not set or invalid');
224
+ return;
225
+ }
226
+ if (isNaN(designHeight)) {
227
+ console.error('[BsBoundary][BS002] CSS variable --design-height is not set or invalid');
228
+ return;
229
+ }
230
+ if (designWidth === 0) {
231
+ console.error('[BsBoundary][BS003] CSS variable --design-width cannot be zero');
232
+ return;
233
+ }
234
+ if (designHeight === 0) {
235
+ console.error('[BsBoundary][BS004] CSS variable --design-height cannot be zero');
236
+ return;
237
+ }
238
+ // ========================================
239
+ // Step 2: 處理 lockRotation 模式的視口尺寸交換
240
+ // ========================================
241
+ // landscapeLockRotation + 實際直向:交換視口尺寸
242
+ // 原因:旋轉後,內容的寬度對應設備的高度,內容的高度對應設備的寬度
243
+ if (this.orientation === 'landscapeLockRotation' && this.actualIsPortrait) {
244
+ [vw100, vh100] = [vh100, vw100];
245
+ }
246
+ // portraitLockRotation + 實際橫向:交換視口尺寸
247
+ if (this.orientation === 'portraitLockRotation' && !this.actualIsPortrait) {
248
+ [vw100, vh100] = [vh100, vw100];
249
+ }
250
+ // ========================================
251
+ // Step 3: 計算比例和邊界最大值
252
+ // ========================================
79
253
  const landscapeRatio = designWidth / designHeight;
80
254
  const portraitRatio = designHeight / designWidth;
81
- // 根據方向計算邊界最大值
255
+ // 根據方向模式計算邊界最大值
82
256
  const isLandscape = this.isLandscape;
83
257
  const boundaryMaxWidth = isLandscape
84
- ? vh100 * portraitRatio
85
- : vh100 * landscapeRatio;
258
+ ? vh100 * portraitRatio // 橫向:高度 * 高寬比
259
+ : vh100 * landscapeRatio; // 直向:高度 * 寬高比
86
260
  const boundaryMaxHeight = isLandscape
87
- ? vw100 * landscapeRatio
88
- : vw100 * portraitRatio;
89
- // 計算實際邊界寬高(模擬 CSS min 函數)
261
+ ? vw100 * landscapeRatio // 橫向:寬度 * 寬高比
262
+ : vw100 * portraitRatio; // 直向:寬度 * 高寬比
263
+ // ========================================
264
+ // Step 4: 計算實際邊界尺寸(使用 Math.min 模擬 CSS min())
265
+ // ========================================
266
+ // Chrome 79 才支援 CSS min() 函數,所以在 JavaScript 中計算
90
267
  const boundaryWidth = Math.min(vw100, boundaryMaxWidth);
91
268
  const boundaryHeight = Math.min(vh100, boundaryMaxHeight);
92
- // 計算設計基準
269
+ // ========================================
270
+ // Step 5: 計算 px2vw 轉換比例
271
+ // ========================================
272
+ // 橫向模式使用 design-height 作為基準,直向模式使用 design-width 作為基準
93
273
  const designBaseWidth = isLandscape ? designHeight : designWidth;
94
- const designBaseHeight = isLandscape ? designWidth : designHeight;
95
- // 計算 px2vw 比例
96
274
  const px2vwRatio = boundaryWidth / designBaseWidth;
97
- // 設定 CSS 變數到 host 元素
275
+ // ========================================
276
+ // Step 6: 設定 CSS 變數
277
+ // ========================================
98
278
  hostElement.style.setProperty('--boundary-width', `${boundaryWidth}px`);
99
279
  hostElement.style.setProperty('--boundary-height', `${boundaryHeight}px`);
100
280
  hostElement.style.setProperty('--px2vw-ratio', `${px2vwRatio}`);
101
281
  }
102
282
  }
103
283
  BsBoundary.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BsBoundary, deps: [], target: i0.ɵɵFactoryTarget.Component });
104
- BsBoundary.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: BsBoundary, isStandalone: true, selector: "bs-boundary", inputs: { isFixedCenter: "isFixedCenter", pointerEventsNone: "pointerEventsNone", lockOrientation: "lockOrientation", forwardStyle: "forwardStyle" }, outputs: { orientationChange: "orientationChange" }, host: { properties: { "class.landscape": "isLandscape" } }, providers: [BsBoundaryContextService], ngImport: i0, template: "<div\n class=\"boundary-wrapper\"\n [class.fixed-center]=\"isFixedCenter\"\n [class.pointerEventsNone]=\"pointerEventsNone\"\n [style]=\"forwardStyle\"\n>\n <ng-content></ng-content>\n</div>\n", styles: [":host{--landscape-ratio: calc(var(--design-width) / var(--design-height));--portrait-ratio: calc(var(--design-height) / var(--design-width))}.boundary-wrapper{width:var(--vw100);height:var(--vh100);max-width:calc(var(--vh100) * var(--landscape-ratio));max-height:calc(var(--vw100) * var(--portrait-ratio))}.boundary-wrapper.pointerEventsNone{pointer-events:none}:host.landscape .boundary-wrapper{max-width:calc(var(--vh100) * var(--portrait-ratio));max-height:calc(var(--vw100) * var(--landscape-ratio))}.fixed-center{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;z-index:99}\n"] });
284
+ BsBoundary.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: BsBoundary, isStandalone: true, selector: "bs-boundary", inputs: { isFixedCenter: "isFixedCenter", pointerEventsNone: "pointerEventsNone", orientation: "orientation", forwardStyle: "forwardStyle" }, outputs: { orientationChange: "orientationChange" }, host: { properties: { "class.landscape": "isLandscape && orientation === \"landscape\"", "class.portrait": "!isLandscape && orientation === \"portrait\"", "class.landscape-lock-rotation": "orientation === \"landscapeLockRotation\"", "class.portrait-lock-rotation": "orientation === \"portraitLockRotation\"", "class.actual-portrait": "actualIsPortrait", "class.actual-landscape": "!actualIsPortrait" } }, providers: [BsBoundaryContextService], ngImport: i0, template: "<div\n class=\"boundary-wrapper\"\n [class.fixed-center]=\"isFixedCenter\"\n [class.pointerEventsNone]=\"pointerEventsNone\"\n [style]=\"forwardStyle\"\n>\n <ng-content></ng-content>\n</div>\n", styles: [":host{--landscape-ratio: calc(var(--design-width) / var(--design-height));--portrait-ratio: calc(var(--design-height) / var(--design-width));--boundary-max-width: calc(var(--vh100) * var(--landscape-ratio));--boundary-max-height: calc(var(--vw100) * var(--portrait-ratio));--design-base-width: var(--design-width);--design-base-height: var(--design-height);--px2vw-ratio: calc(var(--vw100) / var(--design-base-width))}.boundary-wrapper{width:var(--vw100);height:var(--vh100);max-width:var(--boundary-max-width);max-height:var(--boundary-max-height)}.boundary-wrapper.pointerEventsNone{pointer-events:none}:host.portrait{--boundary-max-width: calc(var(--vh100) * var(--landscape-ratio));--boundary-max-height: calc(var(--vw100) * var(--portrait-ratio));--design-base-width: var(--design-width);--design-base-height: var(--design-height);--px2vw-ratio: calc(var(--vw100) / var(--design-base-width))}:host.landscape{--boundary-max-width: calc(var(--vh100) * var(--portrait-ratio));--boundary-max-height: calc(var(--vw100) * var(--landscape-ratio));--design-base-width: var(--design-height);--design-base-height: var(--design-width);--px2vw-ratio: calc(var(--vh100) * var(--portrait-ratio) / var(--design-base-width))}@media (orientation: landscape){:host:not(.landscape):not(.portrait):not(.landscape-lock-rotation):not(.portrait-lock-rotation){--boundary-max-width: calc(var(--vh100) * var(--portrait-ratio));--boundary-max-height: calc(var(--vw100) * var(--landscape-ratio));--design-base-width: var(--design-height);--design-base-height: var(--design-width);--px2vw-ratio: calc(var(--vh100) * var(--portrait-ratio) / var(--design-base-width))}}.fixed-center{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;z-index:99}:host.landscape-lock-rotation{--boundary-max-width: calc(var(--vh100) * var(--portrait-ratio));--boundary-max-height: calc(var(--vw100) * var(--landscape-ratio));--design-base-width: var(--design-height);--design-base-height: var(--design-width);--px2vw-ratio: calc(var(--vh100) * var(--portrait-ratio) / var(--design-base-width))}:host.landscape-lock-rotation.actual-portrait .boundary-wrapper{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%) rotate(90deg);transform-origin:center;width:var(--boundary-width);height:var(--boundary-height);max-width:none;max-height:none}:host.portrait-lock-rotation{--boundary-max-width: calc(var(--vh100) * var(--landscape-ratio));--boundary-max-height: calc(var(--vw100) * var(--portrait-ratio));--design-base-width: var(--design-width);--design-base-height: var(--design-height);--px2vw-ratio: calc(var(--vw100) / var(--design-base-width))}:host.portrait-lock-rotation.actual-landscape .boundary-wrapper{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%) rotate(-90deg);transform-origin:center;width:var(--boundary-width);height:var(--boundary-height);max-width:none;max-height:none}\n"] });
105
285
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BsBoundary, decorators: [{
106
286
  type: Component,
107
287
  args: [{ selector: 'bs-boundary', standalone: true, providers: [BsBoundaryContextService], host: {
108
- '[class.landscape]': 'isLandscape'
109
- }, template: "<div\n class=\"boundary-wrapper\"\n [class.fixed-center]=\"isFixedCenter\"\n [class.pointerEventsNone]=\"pointerEventsNone\"\n [style]=\"forwardStyle\"\n>\n <ng-content></ng-content>\n</div>\n", styles: [":host{--landscape-ratio: calc(var(--design-width) / var(--design-height));--portrait-ratio: calc(var(--design-height) / var(--design-width))}.boundary-wrapper{width:var(--vw100);height:var(--vh100);max-width:calc(var(--vh100) * var(--landscape-ratio));max-height:calc(var(--vw100) * var(--portrait-ratio))}.boundary-wrapper.pointerEventsNone{pointer-events:none}:host.landscape .boundary-wrapper{max-width:calc(var(--vh100) * var(--portrait-ratio));max-height:calc(var(--vw100) * var(--landscape-ratio))}.fixed-center{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;z-index:99}\n"] }]
288
+ '[class.landscape]': 'isLandscape && orientation === "landscape"',
289
+ '[class.portrait]': '!isLandscape && orientation === "portrait"',
290
+ '[class.landscape-lock-rotation]': 'orientation === "landscapeLockRotation"',
291
+ '[class.portrait-lock-rotation]': 'orientation === "portraitLockRotation"',
292
+ '[class.actual-portrait]': 'actualIsPortrait',
293
+ '[class.actual-landscape]': '!actualIsPortrait'
294
+ }, template: "<div\n class=\"boundary-wrapper\"\n [class.fixed-center]=\"isFixedCenter\"\n [class.pointerEventsNone]=\"pointerEventsNone\"\n [style]=\"forwardStyle\"\n>\n <ng-content></ng-content>\n</div>\n", styles: [":host{--landscape-ratio: calc(var(--design-width) / var(--design-height));--portrait-ratio: calc(var(--design-height) / var(--design-width));--boundary-max-width: calc(var(--vh100) * var(--landscape-ratio));--boundary-max-height: calc(var(--vw100) * var(--portrait-ratio));--design-base-width: var(--design-width);--design-base-height: var(--design-height);--px2vw-ratio: calc(var(--vw100) / var(--design-base-width))}.boundary-wrapper{width:var(--vw100);height:var(--vh100);max-width:var(--boundary-max-width);max-height:var(--boundary-max-height)}.boundary-wrapper.pointerEventsNone{pointer-events:none}:host.portrait{--boundary-max-width: calc(var(--vh100) * var(--landscape-ratio));--boundary-max-height: calc(var(--vw100) * var(--portrait-ratio));--design-base-width: var(--design-width);--design-base-height: var(--design-height);--px2vw-ratio: calc(var(--vw100) / var(--design-base-width))}:host.landscape{--boundary-max-width: calc(var(--vh100) * var(--portrait-ratio));--boundary-max-height: calc(var(--vw100) * var(--landscape-ratio));--design-base-width: var(--design-height);--design-base-height: var(--design-width);--px2vw-ratio: calc(var(--vh100) * var(--portrait-ratio) / var(--design-base-width))}@media (orientation: landscape){:host:not(.landscape):not(.portrait):not(.landscape-lock-rotation):not(.portrait-lock-rotation){--boundary-max-width: calc(var(--vh100) * var(--portrait-ratio));--boundary-max-height: calc(var(--vw100) * var(--landscape-ratio));--design-base-width: var(--design-height);--design-base-height: var(--design-width);--px2vw-ratio: calc(var(--vh100) * var(--portrait-ratio) / var(--design-base-width))}}.fixed-center{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;z-index:99}:host.landscape-lock-rotation{--boundary-max-width: calc(var(--vh100) * var(--portrait-ratio));--boundary-max-height: calc(var(--vw100) * var(--landscape-ratio));--design-base-width: var(--design-height);--design-base-height: var(--design-width);--px2vw-ratio: calc(var(--vh100) * var(--portrait-ratio) / var(--design-base-width))}:host.landscape-lock-rotation.actual-portrait .boundary-wrapper{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%) rotate(90deg);transform-origin:center;width:var(--boundary-width);height:var(--boundary-height);max-width:none;max-height:none}:host.portrait-lock-rotation{--boundary-max-width: calc(var(--vh100) * var(--landscape-ratio));--boundary-max-height: calc(var(--vw100) * var(--portrait-ratio));--design-base-width: var(--design-width);--design-base-height: var(--design-height);--px2vw-ratio: calc(var(--vw100) / var(--design-base-width))}:host.portrait-lock-rotation.actual-landscape .boundary-wrapper{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%) rotate(-90deg);transform-origin:center;width:var(--boundary-width);height:var(--boundary-height);max-width:none;max-height:none}\n"] }]
110
295
  }], propDecorators: { isFixedCenter: [{
111
296
  type: Input
112
297
  }], pointerEventsNone: [{
113
298
  type: Input
114
- }], lockOrientation: [{
299
+ }], orientation: [{
115
300
  type: Input
116
301
  }], forwardStyle: [{
117
302
  type: Input
118
303
  }], orientationChange: [{
119
304
  type: Output
120
305
  }] } });
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnMtYm91bmRhcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9iaXRzdGFjay1uZy1ib3VuZGFyeS9zcmMvbGliL2JzLWJvdW5kYXJ5LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvYml0c3RhY2stbmctYm91bmRhcnkvc3JjL2xpYi90ZW1wbGF0ZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLCtCQUErQixDQUFDOztBQVl2RSxNQUFNLE9BQU8sVUFBVTtJQVZ2QjtRQVlhLGtCQUFhLEdBQWEsS0FBSyxDQUFDO1FBQ2hDLHNCQUFpQixHQUFhLEtBQUssQ0FBQztRQUNwQyxvQkFBZSxHQUFzQixNQUFNLENBQUM7UUFHM0Msc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUVsRCx1QkFBa0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNoRCxvQkFBZSxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ25ELGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7S0F3RzFDO0lBdEdHLElBQUksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyx1QkFBdUIsRUFB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QUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7O3VHQW5IUSxVQUFVOzJGQUFWLFVBQVUsaVVBTFIsQ0FBQyx3QkFBd0IsQ0FBQywwQkNuQnpDLHdNQVFBOzJGRGdCYSxVQUFVO2tCQVZ0QixTQUFTOytCQUNJLGFBQWEsY0FFWCxJQUFJLGFBRUwsQ0FBQyx3QkFBd0IsQ0FBQyxRQUMvQjt3QkFDRixtQkFBbUIsRUFBRSxhQUFhO3FCQUNyQzs4QkFJUSxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUksaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGluamVjdCxcbiAgSW5wdXQsIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUT3JpZW50YXRpb25Nb2RlfSBmcm9tICcuL21vZGVsJztcbmltcG9ydCB7QnJlYWtwb2ludE9ic2VydmVyfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBmcm9tRXZlbnQsIFN1YmplY3QsIHRha2VVbnRpbH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0JzQm91bmRhcnlDb250ZXh0U2VydmljZX0gZnJvbSAnLi9icy1ib3VuZGFyeS1jb250ZXh0LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JzLWJvdW5kYXJ5JyxcbiAgICB0ZW1wbGF0ZVVybDogJ3RlbXBsYXRlLmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc3R5bGVVcmxzOiBbJy4vc3R5bGVzLnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtCc0JvdW5kYXJ5Q29udGV4dFNlcnZpY2VdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzcy5sYW5kc2NhcGVdJzogJ2lzTGFuZHNjYXBlJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgQnNCb3VuZGFyeSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIEBJbnB1dCgpIGlzRml4ZWRDZW50ZXI/OiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcG9pbnRlckV2ZW50c05vbmU/OiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgbG9ja09yaWVudGF0aW9uPzogVE9yaWVudGF0aW9uTW9kZSA9ICdhdXRvJztcbiAgICBASW5wdXQoKSBmb3J3YXJkU3R5bGU/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gICAgQE91dHB1dCgpIG9yaWVudGF0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXIgPSBpbmplY3QoQnJlYWtwb2ludE9ic2VydmVyKTtcbiAgICBwcml2YXRlIGJvdW5kYXJ5Q29udGV4dCA9IGluamVjdChCc0JvdW5kYXJ5Q29udGV4dFNlcnZpY2UpO1xuICAgIHByaXZhdGUgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGdldCBpc0xhbmRzY2FwZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm91bmRhcnlDb250ZXh0LmdldElzTGFuZHNjYXBlKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0dXBCcmVha3BvaW50T2JzZXJ2ZXIoKTtcbiAgICAgICAgdGhpcy5zZXR1cFJlc2l6ZU9ic2VydmVyKCk7XG4gICAgICAgIC8vIOW7tumBsuWft+ihjOS7peeiuuS/nSBDU1Mg6K6K5pW45bey57aT6Kit5a6aXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVCb3VuZGFyeUNhbGN1bGF0aW9ucygpLCAwKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnm6PmjqfmlrnlkJHororljJZcbiAgICAgKi9cbiAgICBzZXR1cEJyZWFrcG9pbnRPYnNlcnZlcigpIHtcbiAgICAgICAgaWYgKHRoaXMubG9ja09yaWVudGF0aW9uID09PSAnbGFuZHNjYXBlJykge1xuICAgICAgICAgICAgdGhpcy5ib3VuZGFyeUNvbnRleHQuc2V0SXNMYW5kc2NhcGUodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLm9yaWVudGF0aW9uQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgICAvLyDpjpblrprmlrnlkJHlvozkuZ/pnIDopoHmm7TmlrDoqIjnrpdcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVCb3VuZGFyeUNhbGN1bGF0aW9ucygpLCAwKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxvY2tPcmllbnRhdGlvbiA9PT0gJ3BvcnRyYWl0Jykge1xuICAgICAgICAgICAgdGhpcy5ib3VuZGFyeUNvbnRleHQuc2V0SXNMYW5kc2NhcGUoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5vcmllbnRhdGlvbkNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICAgICAgICAgIC8vIOmOluWumuaWueWQkeW+jOS5n+mcgOimgeabtOaWsOioiOeul1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZUJvdW5kYXJ5Q2FsY3VsYXRpb25zKCksIDApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5icmVha3BvaW50T2JzZXJ2ZXJcbiAgICAgICAgICAgIC5vYnNlcnZlKCcob3JpZW50YXRpb246IGxhbmRzY2FwZSknKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm91bmRhcnlDb250ZXh0LnNldElzTGFuZHNjYXBlKHJlc3VsdC5tYXRjaGVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWVudGF0aW9uQ2hhbmdlLmVtaXQocmVzdWx0Lm1hdGNoZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQm91bmRhcnlDYWxjdWxhdGlvbnMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOebo+aOp+imluWPo+Wkp+Wwj+iuiuWMllxuICAgICAqL1xuICAgIHNldHVwUmVzaXplT2JzZXJ2ZXIoKSB7XG4gICAgICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUJvdW5kYXJ5Q2FsY3VsYXRpb25zKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmm7TmlrDpgornlYzoqIjnrpfvvIjmlK/mj7QgQ2hyb21lIDc077yM5LiN5L2/55SoIENTUyBtaW4vbWF4IOWHveaVuO+8iVxuICAgICAqL1xuICAgIHVwZGF0ZUJvdW5kYXJ5Q2FsY3VsYXRpb25zKCkge1xuICAgICAgICBjb25zdCBob3N0RWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShob3N0RWxlbWVudCk7XG5cbiAgICAgICAgLy8g6K6A5Y+WIENTUyDorormlbhcbiAgICAgICAgY29uc3QgZGVzaWduV2lkdGggPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1kZXNpZ24td2lkdGgnKSB8fCAnMTkyMCcpO1xuICAgICAgICBjb25zdCBkZXNpZ25IZWlnaHQgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1kZXNpZ24taGVpZ2h0JykgfHwgJzEwODAnKTtcbiAgICAgICAgY29uc3QgdncxMDAgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnLS12dzEwMCcpIHx8IGAke3dpbmRvdy5pbm5lcldpZHRofWApO1xuICAgICAgICBjb25zdCB2aDEwMCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCctLXZoMTAwJykgfHwgYCR7d2luZG93LmlubmVySGVpZ2h0fWApO1xuXG4gICAgICAgIC8vIOioiOeul+avlOS+i1xuICAgICAgICBjb25zdCBsYW5kc2NhcGVSYXRpbyA9IGRlc2lnbldpZHRoIC8gZGVzaWduSGVpZ2h0O1xuICAgICAgICBjb25zdCBwb3J0cmFpdFJhdGlvID0gZGVzaWduSGVpZ2h0IC8gZGVzaWduV2lkdGg7XG5cbiAgICAgICAgLy8g5qC55pOa5pa55ZCR6KiI566X6YKK55WM5pyA5aSn5YC8XG4gICAgICAgIGNvbnN0IGlzTGFuZHNjYXBlID0gdGhpcy5pc0xhbmRzY2FwZTtcbiAgICAgICAgY29uc3QgYm91bmRhcnlNYXhXaWR0aCA9IGlzTGFuZHNjYXBlXG4gICAgICAgICAgICA/IHZoMTAwICogcG9ydHJhaXRSYXRpb1xuICAgICAgICAgICAgOiB2aDEwMCAqIGxhbmRzY2FwZVJhdGlvO1xuICAgICAgICBjb25zdCBib3VuZGFyeU1heEhlaWdodCA9IGlzTGFuZHNjYXBlXG4gICAgICAgICAgICA/IHZ3MTAwICogbGFuZHNjYXBlUmF0aW9cbiAgICAgICAgICAgIDogdncxMDAgKiBwb3J0cmFpdFJhdGlvO1xuXG4gICAgICAgIC8vIOioiOeul+Wvpumam+mCiueVjOWvrOmrmO+8iOaooeaTrCBDU1MgbWluIOWHveaVuO+8iVxuICAgICAgICBjb25zdCBib3VuZGFyeVdpZHRoID0gTWF0aC5taW4odncxMDAsIGJvdW5kYXJ5TWF4V2lkdGgpO1xuICAgICAgICBjb25zdCBib3VuZGFyeUhlaWdodCA9IE1hdGgubWluKHZoMTAwLCBib3VuZGFyeU1heEhlaWdodCk7XG5cbiAgICAgICAgLy8g6KiI566X6Kit6KiI5Z+65rqWXG4gICAgICAgIGNvbnN0IGRlc2lnbkJhc2VXaWR0aCA9IGlzTGFuZHNjYXBlID8gZGVzaWduSGVpZ2h0IDogZGVzaWduV2lkdGg7XG4gICAgICAgIGNvbnN0IGRlc2lnbkJhc2VIZWlnaHQgPSBpc0xhbmRzY2FwZSA/IGRlc2lnbldpZHRoIDogZGVzaWduSGVpZ2h0O1xuXG4gICAgICAgIC8vIOioiOeulyBweDJ2dyDmr5TkvotcbiAgICAgICAgY29uc3QgcHgydndSYXRpbyA9IGJvdW5kYXJ5V2lkdGggLyBkZXNpZ25CYXNlV2lkdGg7XG5cbiAgICAgICAgLy8g6Kit5a6aIENTUyDorormlbjliLAgaG9zdCDlhYPntKBcbiAgICAgICAgaG9zdEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tYm91bmRhcnktd2lkdGgnLCBgJHtib3VuZGFyeVdpZHRofXB4YCk7XG4gICAgICAgIGhvc3RFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWJvdW5kYXJ5LWhlaWdodCcsIGAke2JvdW5kYXJ5SGVpZ2h0fXB4YCk7XG4gICAgICAgIGhvc3RFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXB4MnZ3LXJhdGlvJywgYCR7cHgydndSYXRpb31gKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiYm91bmRhcnktd3JhcHBlclwiXG4gIFtjbGFzcy5maXhlZC1jZW50ZXJdPVwiaXNGaXhlZENlbnRlclwiXG4gIFtjbGFzcy5wb2ludGVyRXZlbnRzTm9uZV09XCJwb2ludGVyRXZlbnRzTm9uZVwiXG4gIFtzdHlsZV09XCJmb3J3YXJkU3R5bGVcIlxuPlxuICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG4iXX0=
306
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnMtYm91bmRhcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9iaXRzdGFjay1uZy1ib3VuZGFyeS9zcmMvbGliL2JzLWJvdW5kYXJ5LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvYml0c3RhY2stbmctYm91bmRhcnkvc3JjL2xpYi90ZW1wbGF0ZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFFSCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFakUsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sK0JBQStCLENBQUM7O0FBR3ZFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBZ0JILE1BQU0sT0FBTyxVQUFVO0lBZnZCO1FBaUJJLCtEQUErRDtRQUMvRCxtQkFBbUI7UUFDbkIsK0RBQStEO1FBRS9EOzs7V0FHRztRQUNNLGtCQUFhLEdBQWEsS0FBSyxDQUFDO1FBRXpDOzs7V0FHRztRQUNNLHNCQUFpQixHQUFhLEtBQUssQ0FBQztRQUU3Qzs7Ozs7Ozs7V0FRRztRQUNNLGdCQUFXLEdBQXNCLE1BQU0sQ0FBQztRQU9qRDs7OztXQUlHO1FBQ08sc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUUxRCwrREFBK0Q7UUFDL0QsdUJBQXVCO1FBQ3ZCLCtEQUErRDtRQUV2RCx1QkFBa0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNoRCxvQkFBZSxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ25ELGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxD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ZUFBZSxFQUFFLEdBQUcsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNwRSxDQUFDOzt1R0E5UlEsVUFBVTsyRkFBVixVQUFVLGtwQkFWUixDQUFDLHdCQUF3QixDQUFDLDBCQy9DekMseU1BUUE7MkZEaURhLFVBQVU7a0JBZnRCLFNBQVM7K0JBQ0ksYUFBYSxjQUVYLElBQUksYUFFTCxDQUFDLHdCQUF3QixDQUFDLFFBQy9CO3dCQUNGLG1CQUFtQixFQUFFLDRDQUE0Qzt3QkFDakUsa0JBQWtCLEVBQUUsNENBQTRDO3dCQUNoRSxpQ0FBaUMsRUFBRSx5Q0FBeUM7d0JBQzVFLGdDQUFnQyxFQUFFLHdDQUF3Qzt3QkFDMUUseUJBQXlCLEVBQUUsa0JBQWtCO3dCQUM3QywwQkFBMEIsRUFBRSxtQkFBbUI7cUJBQ2xEOzhCQVlRLGFBQWE7c0JBQXJCLEtBQUs7Z0JBTUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQVdHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS0csWUFBWTtzQkFBcEIsS0FBSztnQkFPSSxpQkFBaUI7c0JBQTFCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JyZWFrcG9pbnRPYnNlcnZlcn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCwgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGZyb21FdmVudCwgU3ViamVjdCwgdGFrZVVudGlsfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtCc0JvdW5kYXJ5Q29udGV4dFNlcnZpY2V9IGZyb20gJy4vYnMtYm91bmRhcnktY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7VE9yaWVudGF0aW9uTW9kZX0gZnJvbSAnLi9tb2RlbCc7XG5cbi8qKlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBCc0JvdW5kYXJ5IENvbXBvbmVudCAtIEFXRCDoh6rpganmh4npgornlYzlrrnlmahcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICpcbiAqIOWKn+iDveiqquaYju+8mlxuICogMS4g5o+Q5L6b6Z+/5oeJ5byP6YKK55WM5a655Zmo77yM6Ieq5YuV6YGp5oeJ5LiN5ZCM6Kit5YKZ5bC65a+4XG4gKiAyLiDmlK/mj7QgNSDnqK7mlrnlkJHmqKHlvI/vvJphdXRvLCBwb3J0cmFpdCwgbGFuZHNjYXBlLCBwb3J0cmFpdExvY2tSb3RhdGlvbiwgbGFuZHNjYXBlTG9ja1JvdGF0aW9uXG4gKiAzLiDkvb/nlKggQ1NTIOiuiuaVuOWvpuePvuWLleaFi+ioiOeul++8jOaUr+aPtCBweDJ2dygpIOWHveaVuFxuICogNC4g55u45a65IENocm9tZSA3NCvvvIzkvb/nlKggSmF2YVNjcmlwdCDoqIjnrpfpgornlYzlsLrlr7hcbiAqXG4gKiDkvb/nlKjnr4TkvovvvJpcbiAqIGBgYGh0bWxcbiAqIDxicy1ib3VuZGFyeSBbb3JpZW50YXRpb25dPVwiJ2F1dG8nXCIgW2lzRml4ZWRDZW50ZXJdPVwidHJ1ZVwiPlxuICogICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPi4uLjwvZGl2PlxuICogPC9icy1ib3VuZGFyeT5cbiAqIGBgYFxuICpcbiAqIENTUyDorormlbjoqK3lrprvvJpcbiAqIGBgYHNjc3NcbiAqIGJzLWJvdW5kYXJ5IHtcbiAqICAgLS1kZXNpZ24td2lkdGg6IDM3NTsgICAvLyDoqK3oqIjnqL/lr6zluqZcbiAqICAgLS1kZXNpZ24taGVpZ2h0OiA2Njc7ICAvLyDoqK3oqIjnqL/pq5jluqZcbiAqIH1cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JzLWJvdW5kYXJ5JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGVtcGxhdGUuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzdHlsZVVybHM6IFsnLi9zdHlsZXMuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW0JzQm91bmRhcnlDb250ZXh0U2VydmljZV0sXG4gICAgaG9zdDoge1xuICAgICAgICAnW2NsYXNzLmxhbmRzY2FwZV0nOiAnaXNMYW5kc2NhcGUgJiYgb3JpZW50YXRpb24gPT09IFwibGFuZHNjYXBlXCInLFxuICAgICAgICAnW2NsYXNzLnBvcnRyYWl0XSc6ICchaXNMYW5kc2NhcGUgJiYgb3JpZW50YXRpb24gPT09IFwicG9ydHJhaXRcIicsXG4gICAgICAgICdbY2xhc3MubGFuZHNjYXBlLWxvY2stcm90YXRpb25dJzogJ29yaWVudGF0aW9uID09PSBcImxhbmRzY2FwZUxvY2tSb3RhdGlvblwiJyxcbiAgICAgICAgJ1tjbGFzcy5wb3J0cmFpdC1sb2NrLXJvdGF0aW9uXSc6ICdvcmllbnRhdGlvbiA9PT0gXCJwb3J0cmFpdExvY2tSb3RhdGlvblwiJyxcbiAgICAgICAgJ1tjbGFzcy5hY3R1YWwtcG9ydHJhaXRdJzogJ2FjdHVhbElzUG9ydHJhaXQnLFxuICAgICAgICAnW2NsYXNzLmFjdHVhbC1sYW5kc2NhcGVdJzogJyFhY3R1YWxJc1BvcnRyYWl0J1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgQnNCb3VuZGFyeSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIElucHV0cyAmIE91dHB1dHNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuWwh+WFp+WuueWbuuWumuWcqOimlueql+S4reWkrlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KCkgaXNGaXhlZENlbnRlcj86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuemgeeUqOaMh+aomeS6i+S7tlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KCkgcG9pbnRlckV2ZW50c05vbmU/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDmlrnlkJHmqKHlvI9cbiAgICAgKiAtIGF1dG86IOiHquWLleaqoua4rOaWueWQkVxuICAgICAqIC0gcG9ydHJhaXQ6IOmOluWumuebtOWQkVxuICAgICAqIC0gbGFuZHNjYXBlOiDpjpblrprmqavlkJFcbiAgICAgKiAtIHBvcnRyYWl0TG9ja1JvdGF0aW9uOiDlvLfliLbnm7TlkJHvvIjmqavlkJHoqK3lgpnmmYLml4vovYkgLTkwwrDvvIlcbiAgICAgKiAtIGxhbmRzY2FwZUxvY2tSb3RhdGlvbjog5by35Yi25qmr5ZCR77yI55u05ZCR6Kit5YKZ5pmC5peL6L2JIDkwwrDvvIlcbiAgICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICAgKi9cbiAgICBASW5wdXQoKSBvcmllbnRhdGlvbj86IFRPcmllbnRhdGlvbk1vZGUgPSAnYXV0byc7XG5cbiAgICAvKipcbiAgICAgKiDlkJHlhaflsaTlrrnlmajovYnnmbznmoToh6roqILmqKPlvI9cbiAgICAgKi9cbiAgICBASW5wdXQoKSBmb3J3YXJkU3R5bGU/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gICAgLyoqXG4gICAgICog5pa55ZCR6K6K5YyW5LqL5Lu2XG4gICAgICogQGVtaXRzIHRydWU6IGxhbmRzY2FwZe+8iOapq+Wxj++8iVxuICAgICAqIEBlbWl0cyBmYWxzZTogcG9ydHJhaXTvvIjnm7TlsY/vvIlcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb3JpZW50YXRpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBQcml2YXRlIERlcGVuZGVuY2llc1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXIgPSBpbmplY3QoQnJlYWtwb2ludE9ic2VydmVyKTtcbiAgICBwcml2YXRlIGJvdW5kYXJ5Q29udGV4dCA9IGluamVjdChCc0JvdW5kYXJ5Q29udGV4dFNlcnZpY2UpO1xuICAgIHByaXZhdGUgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFB1YmxpYyBQcm9wZXJ0aWVzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICAvKipcbiAgICAgKiDlr6bpmpvoqK3lgpnmlrnlkJHvvIjln7rmlrzoppblj6PlsLrlr7jvvIlcbiAgICAgKiB0cnVlOiDnm7TlkJEgKGhlaWdodCA+IHdpZHRoKVxuICAgICAqIGZhbHNlOiDmqavlkJEgKHdpZHRoID49IGhlaWdodClcbiAgICAgKi9cbiAgICBhY3R1YWxJc1BvcnRyYWl0ID0gZmFsc2U7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBHZXR0ZXJzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICAvKipcbiAgICAgKiDliKTmlrfnlbbliY3mmK/lkKbngrrmqavlkJHmqKHlvI9cbiAgICAgKiDmoLnmk5ogb3JpZW50YXRpb24g6Kit5a6a5ZKM5a+m6Zqb6Kit5YKZ5pa55ZCR5Yik5pa3XG4gICAgICovXG4gICAgZ2V0IGlzTGFuZHNjYXBlKCk6IGJvb2xlYW4ge1xuICAgICAgICAvLyBsYW5kc2NhcGVMb2NrUm90YXRpb246IOW8t+WItuapq+Wxj+aooeW8j1xuICAgICAgICBpZiAodGhpcy5vcmllbnRhdGlvbiA9PT0gJ2xhbmRzY2FwZUxvY2tSb3RhdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHBvcnRyYWl0TG9ja1JvdGF0aW9uOiDlvLfliLbnm7TlsY/mqKHlvI9cbiAgICAgICAgaWYgKHRoaXMub3JpZW50YXRpb24gPT09ICdwb3J0cmFpdExvY2tSb3RhdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBsYW5kc2NhcGU6IOmOluWumuapq+WQkVxuICAgICAgICBpZiAodGhpcy5vcmllbnRhdGlvbiA9PT0gJ2xhbmRzY2FwZScpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHBvcnRyYWl0OiDpjpblrprnm7TlkJFcbiAgICAgICAgaWYgKHRoaXMub3JpZW50YXRpb24gPT09ICdwb3J0cmFpdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhdXRvOiDoh6rli5XmqqLmuKxcbiAgICAgICAgcmV0dXJuIHRoaXMuYm91bmRhcnlDb250ZXh0LmdldElzTGFuZHNjYXBlKCk7XG4gICAgfVxuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gTGlmZWN5Y2xlIEhvb2tzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGVBY3R1YWxPcmllbnRhdGlvbigpO1xuICAgICAgICB0aGlzLnNldHVwQnJlYWtwb2ludE9ic2VydmVyKCk7XG4gICAgICAgIHRoaXMuc2V0dXBSZXNpemVPYnNlcnZlcigpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8g5ZyoIHZpZXcg5Yid5aeL5YyW5b6M6KiI566X77yI56K65L+dIENTUyDlt7Llrozlhajmh4nnlKjvvIlcbiAgICAgICAgdGhpcy51cGRhdGVCb3VuZGFyeUNhbGN1bGF0aW9ucygpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIE9ic2VydmVycyBTZXR1cCAtIOebo+iBveWZqOioreWumlxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgLyoqXG4gICAgICog6Kit5a6a5pa55ZCR6K6K5YyW55uj5o6nXG4gICAgICpcbiAgICAgKiDlt6XkvZzljp/nkIbvvJpcbiAgICAgKiAtIGxvY2sg5qih5byP77yIcG9ydHJhaXQvbGFuZHNjYXBl77yJ77ya55u05o6l6Kit5a6a5Zu65a6a5pa55ZCR77yM5LiN55uj6IG96K6K5YyWXG4gICAgICogLSBsb2NrUm90YXRpb24g5qih5byP77ya6Kit5a6a5Zu65a6a5pa55ZCR77yM5L2G6ZyA55uj6IG95a+m6Zqb6Kit5YKZ5pa55ZCR5Lul6Ke455m85peL6L2JXG4gICAgICogLSBhdXRvIOaooeW8j++8muS9v+eUqCBCcmVha3BvaW50T2JzZXJ2ZXIg55uj6IG96Kit5YKZ5pa55ZCR6K6K5YyWXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXR1cEJyZWFrcG9pbnRPYnNlcnZlcigpIHtcbiAgICAgICAgLy8gbGFuZHNjYXBlIOaIliBsYW5kc2NhcGVMb2NrUm90YXRpb246IOmOluWumueCuuapq+WQkVxuICAgICAgICBpZiAodGhpcy5vcmllbnRhdGlvbiA9PT0gJ2xhbmRzY2FwZScgfHwgdGhpcy5vcmllbnRhdGlvbiA9PT0gJ2xhbmRzY2FwZUxvY2tSb3RhdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuYm91bmRhcnlDb250ZXh0LnNldElzTGFuZHNjYXBlKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5vcmllbnRhdGlvbkNoYW5nZS5lbWl0KHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcG9ydHJhaXQg5oiWIHBvcnRyYWl0TG9ja1JvdGF0aW9uOiDpjpblrprngrrnm7TlkJFcbiAgICAgICAgaWYgKHRoaXMub3JpZW50YXRpb24gPT09ICdwb3J0cmFpdCcgfHwgdGhpcy5vcmllbnRhdGlvbiA9PT0gJ3BvcnRyYWl0TG9ja1JvdGF0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5ib3VuZGFyeUNvbnRleHQuc2V0SXNMYW5kc2NhcGUoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5vcmllbnRhdGlvbkNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGF1dG8g5qih5byP77ya55uj6IG95a+m6Zqb55qE6Kit5YKZ5pa55ZCR77yI55So5pa8IG9yaWVudGF0aW9uQ2hhbmdlIOS6i+S7tu+8iVxuICAgICAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlclxuICAgICAgICAgICAgLm9ic2VydmUoJyhvcmllbnRhdGlvbjogbGFuZHNjYXBlKScpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib3VuZGFyeUNvbnRleHQuc2V0SXNMYW5kc2NhcGUocmVzdWx0Lm1hdGNoZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMub3JpZW50YXRpb25DaGFuZ2UuZW1pdChyZXN1bHQubWF0Y2hlcyk7XG4gICAgICAgICAgICAgICAgLy8g5pa55ZCR6K6K5YyW5pmC6YeN5paw6KiI566X6YKK55WMXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVCb3VuZGFyeUNhbGN1bGF0aW9ucygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6Kit5a6a6KaW56qX5aSn5bCP6K6K5YyW55uj5o6nXG4gICAgICpcbiAgICAgKiDlip/og73vvJpcbiAgICAgKiAtIOebo+iBvSB3aW5kb3cgcmVzaXplIOS6i+S7tlxuICAgICAqIC0g5pu05paw5a+m6Zqb6Kit5YKZ5pa55ZCRXG4gICAgICogLSDph43mlrDoqIjnrpfpgornlYzlsLrlr7hcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldHVwUmVzaXplT2JzZXJ2ZXIoKSB7XG4gICAgICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgLy8gZGVib3VuY2VUaW1lKDE1MCksIC8vIOWPr+mBuO+8mumYsuaKluWEquWMluaAp+iDvVxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVBY3R1YWxPcmllbnRhdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQm91bmRhcnlDYWxjdWxhdGlvbnMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIENhbGN1bGF0aW9uIE1ldGhvZHMgLSDoqIjnrpfmlrnms5VcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgIC8qKlxuICAgICAqIOabtOaWsOWvpumam+ioreWCmeaWueWQke+8iOWfuuaWvOimluWPo+WwuuWvuO+8iVxuICAgICAqXG4gICAgICog5bel5L2c5Y6f55CG77yaXG4gICAgICogLSDlj6rlnKggbG9ja1JvdGF0aW9uIOaooeW8j+S4i+mcgOimgeaqoua4rOWvpumam+aWueWQkVxuICAgICAqIC0g6YCa6YGO5q+U6LyDIHdpbmRvdy5pbm5lckhlaWdodCDlkowgd2luZG93LmlubmVyV2lkdGgg5Yik5pa3XG4gICAgICogLSDntZDmnpznlKjmlrzop7jnmbwgQ1NTIOaXi+i9ieiuiuaPm1xuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlQWN0dWFsT3JpZW50YXRpb24oKSB7XG4gICAgICAgIC8vIOWPquacieWcqCBsb2NrUm90YXRpb24g5qih5byP5LiL5omN6ZyA6KaB5qqi5ris5a+m6Zqb5pa55ZCRXG4gICAgICAgIGlmICh0aGlzLm9yaWVudGF0aW9uICE9PSAnbGFuZHNjYXBlTG9ja1JvdGF0aW9uJyAmJiB0aGlzLm9yaWVudGF0aW9uICE9PSAncG9ydHJhaXRMb2NrUm90YXRpb24nKSB7XG4gICAgICAgICAgICB0aGlzLmFjdHVhbElzUG9ydHJhaXQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOaqoua4rOWvpumam+imluWPo+aWueWQke+8mumrmOW6piA+IOWvrOW6piA9IOebtOWQkVxuICAgICAgICB0aGlzLmFjdHVhbElzUG9ydHJhaXQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgPiB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmm7TmlrDpgornlYzoqIjnrpfvvIjmlK/mj7QgQ2hyb21lIDc077yM5L2/55SoIEphdmFTY3JpcHQg5qih5pOsIG1pbiDlh73mlbjvvIlcbiAgICAgKlxuICAgICAqIOW3peS9nOWOn+eQhu+8mlxuICAgICAqIDEuIOiugOWPluWfuuekjiBDU1Mg6K6K5pW477yIdncxMDAsIHZoMTAwLCBkZXNpZ24td2lkdGgsIGRlc2lnbi1oZWlnaHTvvIlcbiAgICAgKiAyLiDomZXnkIYgbG9ja1JvdGF0aW9uIOaooeW8j+eahOimluWPo+WwuuWvuOS6pOaPm1xuICAgICAqIDMuIOioiOeul+mCiueVjOacgOWkp+WAvOWSjOWvpumam+mCiueVjOWwuuWvuFxuICAgICAqIDQuIOioiOeulyBweDJ2dyDovYnmj5vmr5TkvotcbiAgICAgKiA1LiDoqK3lrpogQ1NTIOiuiuaVuOS+m+aoo+W8j+S9v+eUqFxuICAgICAqXG4gICAgICog6Kit5a6a55qEIENTUyDorormlbjvvJpcbiAgICAgKiAtIC0tYm91bmRhcnktd2lkdGg6IOWvpumam+mCiueVjOWvrOW6pu+8iHB477yJXG4gICAgICogLSAtLWJvdW5kYXJ5LWhlaWdodDog5a+m6Zqb6YKK55WM6auY5bqm77yIcHjvvIlcbiAgICAgKiAtIC0tcHgydnctcmF0aW86IHB4IOi9iSB2dyDnmoTmr5Tkvovkv4LmlbhcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZUJvdW5kYXJ5Q2FsY3VsYXRpb25zKCkge1xuICAgICAgICBjb25zdCBob3N0RWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShob3N0RWxlbWVudCk7XG5cbiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAvLyBTdGVwIDE6IOiugOWPluWfuuekjiBDU1Mg6K6K5pW4XG4gICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgbGV0IHZ3MTAwID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJy0tdncxMDAnKSkgfHwgd2luZG93LmlubmVyV2lkdGg7XG4gICAgICAgIGxldCB2aDEwMCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCctLXZoMTAwJykpIHx8IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICAgICAgY29uc3QgZGVzaWduV2lkdGggPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1kZXNpZ24td2lkdGgnKSk7XG4gICAgICAgIGNvbnN0IGRlc2lnbkhlaWdodCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCctLWRlc2lnbi1oZWlnaHQnKSk7XG5cbiAgICAgICAgLy8g5qqi5p+l5Z+656SO6K6K5pW45piv5ZCm5rqW5YKZ5aW9XG4gICAgICAgIGlmIChpc05hTihkZXNpZ25XaWR0aCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tCc0JvdW5kYXJ5XVtCUzAwMV0gQ1NTIHZhcmlhYmxlIC0tZGVzaWduLXdpZHRoIGlzIG5vdCBzZXQgb3IgaW52YWxpZCcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc05hTihkZXNpZ25IZWlnaHQpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbQnNCb3VuZGFyeV1bQlMwMDJdIENTUyB2YXJpYWJsZSAtLWRlc2lnbi1oZWlnaHQgaXMgbm90IHNldCBvciBpbnZhbGlkJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlc2lnbldpZHRoID09PSAwKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbQnNCb3VuZGFyeV1bQlMwMDNdIENTUyB2YXJpYWJsZSAtLWRlc2lnbi13aWR0aCBjYW5ub3QgYmUgemVybycpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZXNpZ25IZWlnaHQgPT09IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tCc0JvdW5kYXJ5XVtCUzAwNF0gQ1NTIHZhcmlhYmxlIC0tZGVzaWduLWhlaWdodCBjYW5ub3QgYmUgemVybycpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAvLyBTdGVwIDI6IOiZleeQhiBsb2NrUm90YXRpb24g5qih5byP55qE6KaW5Y+j5bC65a+45Lqk5o+bXG4gICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gbGFuZHNjYXBlTG9ja1JvdGF0aW9uICsg5a+m6Zqb55u05ZCR77ya5Lqk5o+b6KaW5Y+j5bC65a+4XG4gICAgICAgIC8vIOWOn+WboO+8muaXi+i9ieW+jO+8jOWFp+WuueeahOWvrOW6puWwjeaHieioreWCmeeahOmrmOW6pu+8jOWFp+WuueeahOmrmOW6puWwjeaHieioreWCmeeahOWvrOW6plxuICAgICAgICBpZiAodGhpcy5vcmllbnRhdGlvbiA9PT0gJ2xhbmRzY2FwZUxvY2tSb3RhdGlvbicgJiYgdGhpcy5hY3R1YWxJc1BvcnRyYWl0KSB7XG4gICAgICAgICAgICBbdncxMDAsIHZoMTAwXSA9IFt2aDEwMCwgdncxMDBdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcG9ydHJhaXRMb2NrUm90YXRpb24gKyDlr6bpmpvmqavlkJHvvJrkuqTmj5voppblj6PlsLrlr7hcbiAgICAgICAgaWYgKHRoaXMub3JpZW50YXRpb24gPT09ICdwb3J0cmFpdExvY2tSb3RhdGlvbicgJiYgIXRoaXMuYWN0dWFsSXNQb3J0cmFpdCkge1xuICAgICAgICAgICAgW3Z3MTAwLCB2aDEwMF0gPSBbdmgxMDAsIHZ3MTAwXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gU3RlcCAzOiDoqIjnrpfmr5TkvovlkozpgornlYzmnIDlpKflgLxcbiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICBjb25zdCBsYW5kc2NhcGVSYXRpbyA9IGRlc2lnbldpZHRoIC8gZGVzaWduSGVpZ2h0O1xuICAgICAgICBjb25zdCBwb3J0cmFpdFJhdGlvID0gZGVzaWduSGVpZ2h0IC8gZGVzaWduV2lkdGg7XG5cbiAgICAgICAgLy8g5qC55pOa5pa55ZCR5qih5byP6KiI566X6YKK55WM5pyA5aSn5YC8XG4gICAgICAgIGNvbnN0IGlzTGFuZHNjYXBlID0gdGhpcy5pc0xhbmRzY2FwZTtcbiAgICAgICAgY29uc3QgYm91bmRhcnlNYXhXaWR0aCA9IGlzTGFuZHNjYXBlXG4gICAgICAgICAgICA/IHZoMTAwICogcG9ydHJhaXRSYXRpbyAgLy8g5qmr5ZCR77ya6auY5bqmICog6auY5a+s5q+UXG4gICAgICAgICAgICA6IHZoMTAwICogbGFuZHNjYXBlUmF0aW87IC8vIOebtOWQke+8mumrmOW6piAqIOWvrOmrmOavlFxuICAgICAgICBjb25zdCBib3VuZGFyeU1heEhlaWdodCA9IGlzTGFuZHNjYXBlXG4gICAgICAgICAgICA/IHZ3MTAwICogbGFuZHNjYXBlUmF0aW8gIC8vIOapq+WQke+8muWvrOW6piAqIOWvrOmrmOavlFxuICAgICAgICAgICAgOiB2dzEwMCAqIHBvcnRyYWl0UmF0aW87ICAvLyDnm7TlkJHvvJrlr6zluqYgKiDpq5jlr6zmr5RcblxuICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIC8vIFN0ZXAgNDog6KiI566X5a+m6Zqb6YKK55WM5bC65a+477yI5L2/55SoIE1hdGgubWluIOaooeaTrCBDU1MgbWluKCnvvIlcbiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAvLyBDaHJvbWUgNzkg5omN5pSv5o+0IENTUyBtaW4oKSDlh73mlbjvvIzmiYDku6XlnKggSmF2YVNjcmlwdCDkuK3oqIjnrpdcbiAgICAgICAgY29uc3QgYm91bmRhcnlXaWR0aCA9IE1hdGgubWluKHZ3MTAwLCBib3VuZGFyeU1heFdpZHRoKTtcbiAgICAgICAgY29uc3QgYm91bmRhcnlIZWlnaHQgPSBNYXRoLm1pbih2aDEwMCwgYm91bmRhcnlNYXhIZWlnaHQpO1xuXG4gICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gU3RlcCA1OiDoqIjnrpcgcHgydncg6L2J5o+b5q+U5L6LXG4gICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8g5qmr5ZCR5qih5byP5L2/55SoIGRlc2lnbi1oZWlnaHQg5L2c54K65Z+65rqW77yM55u05ZCR5qih5byP5L2/55SoIGRlc2lnbi13aWR0aCDkvZzngrrln7rmupZcbiAgICAgICAgY29uc3QgZGVzaWduQmFzZVdpZHRoID0gaXNMYW5kc2NhcGUgPyBkZXNpZ25IZWlnaHQgOiBkZXNpZ25XaWR0aDtcbiAgICAgICAgY29uc3QgcHgydndSYXRpbyA9IGJvdW5kYXJ5V2lkdGggLyBkZXNpZ25CYXNlV2lkdGg7XG5cbiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAvLyBTdGVwIDY6IOioreWumiBDU1Mg6K6K5pW4XG4gICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgaG9zdEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tYm91bmRhcnktd2lkdGgnLCBgJHtib3VuZGFyeVdpZHRofXB4YCk7XG4gICAgICAgIGhvc3RFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWJvdW5kYXJ5LWhlaWdodCcsIGAke2JvdW5kYXJ5SGVpZ2h0fXB4YCk7XG4gICAgICAgIGhvc3RFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXB4MnZ3LXJhdGlvJywgYCR7cHgydndSYXRpb31gKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiYm91bmRhcnktd3JhcHBlclwiXG4gIFtjbGFzcy5maXhlZC1jZW50ZXJdPVwiaXNGaXhlZENlbnRlclwiXG4gIFtjbGFzcy5wb2ludGVyRXZlbnRzTm9uZV09XCJwb2ludGVyRXZlbnRzTm9uZVwiXG4gIFtzdHlsZV09XCJmb3J3YXJkU3R5bGVcIlxuPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9iaXRzdGFjay1uZy1ib3VuZGFyeS9zcmMvbGliL21vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBUT3JpZW50YXRpb25Nb2RlID0gJ2F1dG8nIHwgJ3BvcnRyYWl0JyB8ICdsYW5kc2NhcGUnO1xuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9iaXRzdGFjay1uZy1ib3VuZGFyeS9zcmMvbGliL21vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBUT3JpZW50YXRpb25Nb2RlID0gJ2F1dG8nIHwgJ3BvcnRyYWl0JyB8ICdsYW5kc2NhcGUnIHwgJ2xhbmRzY2FwZUxvY2tSb3RhdGlvbicgfCAncG9ydHJhaXRMb2NrUm90YXRpb24nO1xuIl19