@koobiq/components 18.9.1 → 18.11.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.
- package/autocomplete/autocomplete-trigger.directive.d.ts +0 -1
- package/autocomplete/autocomplete.scss +2 -10
- package/code-block/_code-block-theme.scss +35 -54
- package/code-block/code-block-highlight.d.ts +44 -0
- package/code-block/code-block-tokens.scss +7 -11
- package/code-block/code-block.d.ts +187 -0
- package/code-block/code-block.module.d.ts +2 -8
- package/code-block/code-block.scss +103 -127
- package/code-block/public-api.d.ts +3 -2
- package/code-block/types.d.ts +27 -0
- package/core/error/error-state-matcher.d.ts +3 -0
- package/core/locales/index.d.ts +1 -0
- package/core/locales/types.d.ts +11 -0
- package/core/pop-up/constants.d.ts +9 -0
- package/core/select/constants.d.ts +16 -4
- package/core/styles/theming/_scrollbar-theme.scss +2 -1
- package/esm2022/autocomplete/autocomplete-trigger.directive.mjs +7 -8
- package/esm2022/autocomplete/autocomplete.component.mjs +2 -2
- package/esm2022/code-block/code-block-highlight.mjs +416 -0
- package/esm2022/code-block/code-block.mjs +395 -0
- package/esm2022/code-block/code-block.module.mjs +9 -30
- package/esm2022/code-block/public-api.mjs +4 -3
- package/esm2022/code-block/types.mjs +2 -0
- package/esm2022/core/error/error-state-matcher.mjs +15 -2
- package/esm2022/core/locales/en-US.mjs +1 -1
- package/esm2022/core/locales/es-LA.mjs +1 -1
- package/esm2022/core/locales/fa-IR.mjs +1 -1
- package/esm2022/core/locales/index.mjs +2 -1
- package/esm2022/core/locales/pt-BR.mjs +1 -1
- package/esm2022/core/locales/ru-RU.mjs +1 -1
- package/esm2022/core/locales/types.mjs +2 -0
- package/esm2022/core/locales/zh-CN.mjs +1 -1
- package/esm2022/core/pop-up/constants.mjs +6 -1
- package/esm2022/core/select/constants.mjs +17 -5
- package/esm2022/core/version.mjs +2 -2
- package/esm2022/datepicker/calendar-header.component.mjs +1 -1
- package/esm2022/form-field/form-field.mjs +8 -8
- package/esm2022/loader-overlay/loader-overlay.component.mjs +6 -4
- package/esm2022/markdown/markdown.component.mjs +2 -2
- package/esm2022/modal/modal.component.mjs +5 -3
- package/esm2022/modal/modal.service.mjs +5 -2
- package/esm2022/modal/public-api.mjs +5 -5
- package/esm2022/select/select.component.mjs +22 -12
- package/esm2022/sidepanel/sidepanel-config.mjs +1 -1
- package/esm2022/sidepanel/sidepanel-container.component.mjs +9 -3
- package/esm2022/timezone/timezone-select.component.mjs +3 -1
- package/esm2022/tooltip/tooltip.component.mjs +5 -2
- package/esm2022/tree-select/tree-select.component.mjs +12 -7
- package/fesm2022/koobiq-components-autocomplete.mjs +9 -10
- package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
- package/fesm2022/koobiq-components-code-block.mjs +378 -341
- package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
- package/fesm2022/koobiq-components-core.mjs +36 -7
- package/fesm2022/koobiq-components-core.mjs.map +1 -1
- package/fesm2022/koobiq-components-datepicker.mjs +1 -1
- package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
- package/fesm2022/koobiq-components-form-field.mjs +7 -7
- package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
- package/fesm2022/koobiq-components-loader-overlay.mjs +5 -3
- package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
- package/fesm2022/koobiq-components-markdown.mjs +2 -2
- package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
- package/fesm2022/koobiq-components-modal.mjs +9 -4
- package/fesm2022/koobiq-components-modal.mjs.map +1 -1
- package/fesm2022/koobiq-components-select.mjs +21 -11
- package/fesm2022/koobiq-components-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-sidepanel.mjs +8 -2
- package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
- package/fesm2022/koobiq-components-timezone.mjs +2 -0
- package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
- package/fesm2022/koobiq-components-tooltip.mjs +4 -1
- package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree-select.mjs +11 -6
- package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
- package/form-field/form-field-tokens.scss +1 -1
- package/form-field/form-field.d.ts +1 -1
- package/form-field/form-field.scss +0 -1
- package/loader-overlay/loader-overlay.component.d.ts +1 -0
- package/markdown/_markdown-theme.scss +15 -3
- package/markdown/markdown-tokens.scss +1 -2
- package/markdown/markdown.scss +3 -4
- package/modal/modal.component.d.ts +4 -0
- package/modal/modal.service.d.ts +4 -0
- package/modal/public-api.d.ts +4 -4
- package/package.json +4 -4
- package/prebuilt-themes/dark-theme.css +1 -1
- package/prebuilt-themes/light-theme.css +1 -1
- package/prebuilt-themes/theme.css +1 -1
- package/schematics/ng-add/index.js +4 -5
- package/select/select.component.d.ts +15 -3
- package/sidepanel/sidepanel-config.d.ts +4 -0
- package/sidepanel/sidepanel-container.component.d.ts +2 -0
- package/timezone/timezone-select.component.d.ts +3 -1
- package/tooltip/tooltip.component.d.ts +2 -1
- package/accordion/README.md +0 -0
- package/alert/README.md +0 -0
- package/autocomplete/README.md +0 -0
- package/badge/README.md +0 -0
- package/button/README.md +0 -0
- package/button-toggle/README.md +0 -0
- package/checkbox/README.md +0 -1
- package/code-block/README.md +0 -36
- package/code-block/actionbar.component.d.ts +0 -32
- package/code-block/actionbar.component.scss +0 -43
- package/code-block/code-block-content.d.ts +0 -28
- package/code-block/code-block.component.d.ts +0 -98
- package/code-block/code-block.types.d.ts +0 -36
- package/datepicker/README.md +0 -0
- package/divider/README.md +0 -0
- package/dl/README.md +0 -0
- package/empty-state/README.md +0 -0
- package/esm2022/code-block/actionbar.component.mjs +0 -90
- package/esm2022/code-block/code-block-content.mjs +0 -393
- package/esm2022/code-block/code-block.component.mjs +0 -283
- package/esm2022/code-block/code-block.types.mjs +0 -5
- package/file-upload/README.md +0 -0
- package/form-field/README.md +0 -0
- package/icon/README.md +0 -0
- package/link/README.md +0 -0
- package/list/README.md +0 -0
- package/loader-overlay/README.md +0 -0
- package/modal/README.md +0 -35
- package/navbar/README.md +0 -42
- package/popover/README.md +0 -36
- package/progress-bar/README.md +0 -0
- package/progress-spinner/README.md +0 -0
- package/risk-level/README.md +0 -0
- package/table/README.md +0 -0
- package/tags/README.md +0 -0
- package/textarea/README.md +0 -0
- package/timepicker/README.md +0 -0
- package/timezone/README.md +0 -0
- package/tree-select/README.md +0 -0
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
import { A11yModule, FocusMonitor } from '@angular/cdk/a11y';
|
|
2
|
+
import { Clipboard } from '@angular/cdk/clipboard';
|
|
3
|
+
import { Platform } from '@angular/cdk/platform';
|
|
4
|
+
import { CdkScrollable, CdkScrollableModule } from '@angular/cdk/scrolling';
|
|
5
|
+
import { DOCUMENT } from '@angular/common';
|
|
6
|
+
import { booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, ElementRef, EventEmitter, inject, InjectionToken, Input, numberAttribute, Output, Renderer2, SecurityContext, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
7
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
8
|
+
import { DomSanitizer } from '@angular/platform-browser';
|
|
9
|
+
import { KbqButtonModule, KbqButtonStyles } from '@koobiq/components/button';
|
|
10
|
+
import { KBQ_LOCALE_SERVICE, KbqComponentColors, ruRULocaleData } from '@koobiq/components/core';
|
|
11
|
+
import { KbqIconModule } from '@koobiq/components/icon';
|
|
12
|
+
import { KbqTabsModule } from '@koobiq/components/tabs';
|
|
13
|
+
import { KbqToolTipModule, KbqTooltipTrigger } from '@koobiq/components/tooltip';
|
|
14
|
+
import { debounceTime, fromEvent, merge } from 'rxjs';
|
|
15
|
+
import { KbqCodeBlockHighlight } from './code-block-highlight';
|
|
16
|
+
import * as i0 from "@angular/core";
|
|
17
|
+
import * as i1 from "@koobiq/components/tabs";
|
|
18
|
+
import * as i2 from "@koobiq/components/button";
|
|
19
|
+
import * as i3 from "@angular/cdk/a11y";
|
|
20
|
+
import * as i4 from "@angular/cdk/scrolling";
|
|
21
|
+
import * as i5 from "@koobiq/components/tooltip";
|
|
22
|
+
import * as i6 from "@koobiq/components/icon";
|
|
23
|
+
/** Localization configuration provider. */
|
|
24
|
+
export const KBQ_CODE_BLOCK_LOCALE_CONFIGURATION = new InjectionToken('KBQ_CODE_BLOCK_LOCALE_CONFIGURATION', { factory: () => ruRULocaleData.codeBlock });
|
|
25
|
+
/** Utility provider for `KBQ_CODE_BLOCK_LOCALE_CONFIGURATION`. */
|
|
26
|
+
export const kbqCodeBlockLocaleConfigurationProvider = (configuration) => ({
|
|
27
|
+
provide: KBQ_CODE_BLOCK_LOCALE_CONFIGURATION,
|
|
28
|
+
useValue: configuration
|
|
29
|
+
});
|
|
30
|
+
/** Fallback file name for code block if file name is not specified. */
|
|
31
|
+
export const KBQ_CODE_BLOCK_FALLBACK_FILE_NAME = new InjectionToken('KBQ_CODE_BLOCK_FALLBACK_FILE_NAME', {
|
|
32
|
+
factory: () => 'code'
|
|
33
|
+
});
|
|
34
|
+
/** Utility provider for `KBQ_CODE_BLOCK_FALLBACK_FILE_NAME`. */
|
|
35
|
+
export const kbqCodeBlockFallbackFileNameProvider = (fileName) => ({
|
|
36
|
+
provide: KBQ_CODE_BLOCK_FALLBACK_FILE_NAME,
|
|
37
|
+
useValue: fileName
|
|
38
|
+
});
|
|
39
|
+
/**
|
|
40
|
+
* Component which highlights blocks of code.
|
|
41
|
+
*/
|
|
42
|
+
export class KbqCodeBlock {
|
|
43
|
+
get calculatedMaxHeight() {
|
|
44
|
+
return this.maxHeight > 0 && !this.viewAll ? this.maxHeight : null;
|
|
45
|
+
}
|
|
46
|
+
/** @deprecated Will be removed in next major release, use `canDownload` instead. */
|
|
47
|
+
set canLoad(value) {
|
|
48
|
+
this.canDownload = value;
|
|
49
|
+
}
|
|
50
|
+
/** @deprecated Will be removed in next major release, use `files` instead. */
|
|
51
|
+
set codeFiles(files) {
|
|
52
|
+
this.files = files;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* @TODO Mark as `required`, after removing `codeFiles`
|
|
56
|
+
*
|
|
57
|
+
* Files to display.
|
|
58
|
+
*/
|
|
59
|
+
set files(files) {
|
|
60
|
+
this._files = files;
|
|
61
|
+
if (this._files.length < this.activeFileIndex) {
|
|
62
|
+
this.onSelectedTabChange(0);
|
|
63
|
+
}
|
|
64
|
+
if (this._files.length === 1 && !this._files[0].filename) {
|
|
65
|
+
this.hideTabs = true;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
get files() {
|
|
69
|
+
return this._files;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Whether to hide header tabs.
|
|
73
|
+
* Always `true` if there is only one file without filename.
|
|
74
|
+
* Makes actionbar floating if tabs are hidden.
|
|
75
|
+
*/
|
|
76
|
+
set hideTabs(value) {
|
|
77
|
+
this._hideTabs = value;
|
|
78
|
+
this.setupActionbarDisplay();
|
|
79
|
+
}
|
|
80
|
+
get hideTabs() {
|
|
81
|
+
return this._hideTabs;
|
|
82
|
+
}
|
|
83
|
+
/** Component locale configuration. */
|
|
84
|
+
get localeConfiguration() {
|
|
85
|
+
return this._localeConfiguration;
|
|
86
|
+
}
|
|
87
|
+
/** Code content tab index. */
|
|
88
|
+
get codeContentTabIndex() {
|
|
89
|
+
return this.canCodeContentBeFocused ? 0 : -1;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Determines whether the code content can be focused.
|
|
93
|
+
*
|
|
94
|
+
* This checks if the scrollable code content element is present,
|
|
95
|
+
* has a scroll, and the calculated maximum height is not set.
|
|
96
|
+
*/
|
|
97
|
+
get canCodeContentBeFocused() {
|
|
98
|
+
const element = this.scrollableCodeContent?.getElementRef().nativeElement;
|
|
99
|
+
return element && this.hasScroll(element) && !this.calculatedMaxHeight;
|
|
100
|
+
}
|
|
101
|
+
constructor() {
|
|
102
|
+
/** Whether to display line numbers. */
|
|
103
|
+
this.lineNumbers = false;
|
|
104
|
+
/** Whether the code block should be filled. */
|
|
105
|
+
this.filled = false;
|
|
106
|
+
/** Added soft wrap toggle button. */
|
|
107
|
+
this.canToggleSoftWrap = false;
|
|
108
|
+
/** Whether sequences of whitespace should be preserved. */
|
|
109
|
+
this.softWrap = false;
|
|
110
|
+
/** Event emitted when `softWrap` is changed. */
|
|
111
|
+
this.softWrapChange = new EventEmitter();
|
|
112
|
+
/**
|
|
113
|
+
* Allows to view all the code, otherwise it will be hidden.
|
|
114
|
+
* Works only with `maxHeight` property.
|
|
115
|
+
*/
|
|
116
|
+
this.viewAll = false;
|
|
117
|
+
/** Event emitted when `viewAll` is changed. */
|
|
118
|
+
this.viewAllChange = new EventEmitter();
|
|
119
|
+
/** Added download code button. */
|
|
120
|
+
this.canDownload = false;
|
|
121
|
+
/** Added copy code button. */
|
|
122
|
+
this.canCopy = true;
|
|
123
|
+
this._files = [];
|
|
124
|
+
/** Defines which file (index) is active. */
|
|
125
|
+
this.activeFileIndex = 0;
|
|
126
|
+
this.activeFileIndexChange = new EventEmitter();
|
|
127
|
+
/** Whether to hide border. */
|
|
128
|
+
this.noBorder = false;
|
|
129
|
+
this._hideTabs = false;
|
|
130
|
+
this._localeConfiguration = inject(KBQ_CODE_BLOCK_LOCALE_CONFIGURATION);
|
|
131
|
+
this.componentColor = KbqComponentColors;
|
|
132
|
+
this.buttonStyle = KbqButtonStyles;
|
|
133
|
+
this.elementRef = inject(ElementRef);
|
|
134
|
+
this.changeDetectorRef = inject(ChangeDetectorRef);
|
|
135
|
+
this.localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });
|
|
136
|
+
this.destroyRef = inject(DestroyRef);
|
|
137
|
+
this.renderer = inject(Renderer2);
|
|
138
|
+
this.platform = inject(Platform);
|
|
139
|
+
this.focusMonitor = inject(FocusMonitor);
|
|
140
|
+
this.clipboard = inject(Clipboard);
|
|
141
|
+
this.domSanitizer = inject(DomSanitizer);
|
|
142
|
+
this.document = inject(DOCUMENT);
|
|
143
|
+
this.fallbackFileName = inject(KBQ_CODE_BLOCK_FALLBACK_FILE_NAME);
|
|
144
|
+
this.updateLocaleParams = () => {
|
|
145
|
+
this._localeConfiguration = this.localeService?.getParams('codeBlock');
|
|
146
|
+
this.changeDetectorRef.markForCheck();
|
|
147
|
+
};
|
|
148
|
+
this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(this.updateLocaleParams);
|
|
149
|
+
}
|
|
150
|
+
ngAfterViewInit() {
|
|
151
|
+
this.handleScroll();
|
|
152
|
+
this.handleHover();
|
|
153
|
+
// Setup initial actionbar display state
|
|
154
|
+
this.setupActionbarDisplay();
|
|
155
|
+
this.copyButtonTooltip?.visibleChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((isVisible) => {
|
|
156
|
+
if (isVisible) {
|
|
157
|
+
this.copyButtonTooltip.content = this.localeConfiguration.copyTooltip;
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Toggles the `viewAll` property.
|
|
163
|
+
*
|
|
164
|
+
* When `viewAll` is set to `true`, the content of the code block will be
|
|
165
|
+
* displayed in its entirety. When set to `false`, the content will be
|
|
166
|
+
* limited to the `maxHeight` property. If the content exceeds the
|
|
167
|
+
* `maxHeight`, it will be scrolled to the top and the `viewAll` button
|
|
168
|
+
* will be displayed.
|
|
169
|
+
*/
|
|
170
|
+
toggleViewAll() {
|
|
171
|
+
this.viewAll = !this.viewAll;
|
|
172
|
+
if (!this.viewAll) {
|
|
173
|
+
this.scrollableCodeContent.scrollTo({ top: 0, behavior: 'instant' });
|
|
174
|
+
}
|
|
175
|
+
this.viewAllChange.emit(this.viewAll);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Toggles `softWrap` property.
|
|
179
|
+
*
|
|
180
|
+
* When `softWrap` is set to `true`, the content of the code block will be
|
|
181
|
+
* wrapped if it exceeds the height of the component. When set to `false`
|
|
182
|
+
* the content will not be wrapped.
|
|
183
|
+
*/
|
|
184
|
+
toggleSoftWrap() {
|
|
185
|
+
this.softWrap = !this.softWrap;
|
|
186
|
+
this.softWrapChange.emit(this.softWrap);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Handles the change of the selected tab by updating the active file index
|
|
190
|
+
* and scrolling to the top of the scrollable content.
|
|
191
|
+
*
|
|
192
|
+
* @param index - The index of the newly selected tab.
|
|
193
|
+
*/
|
|
194
|
+
onSelectedTabChange(index) {
|
|
195
|
+
if (this.activeFileIndex !== index) {
|
|
196
|
+
this.activeFileIndex = index;
|
|
197
|
+
this.activeFileIndexChange.emit(this.activeFileIndex);
|
|
198
|
+
this.scrollableCodeContent.scrollTo({ top: 0, behavior: 'instant' });
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Handles the hover event on the code block element and updates the actionbar display accordingly.
|
|
203
|
+
*/
|
|
204
|
+
handleHover() {
|
|
205
|
+
merge(fromEvent(this.elementRef.nativeElement, 'mouseenter'), fromEvent(this.elementRef.nativeElement, 'mouseleave'))
|
|
206
|
+
.pipe(debounceTime(100), takeUntilDestroyed(this.destroyRef))
|
|
207
|
+
.subscribe((event) => {
|
|
208
|
+
this.setupActionbarDisplay(event?.type === 'mouseenter');
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Handles the scroll event on the scrollable code content element and updates the header shadow accordingly.
|
|
213
|
+
*/
|
|
214
|
+
handleScroll() {
|
|
215
|
+
this.scrollableCodeContent
|
|
216
|
+
.elementScrolled()
|
|
217
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
218
|
+
.subscribe(() => {
|
|
219
|
+
this.setupHeaderShadow(this.scrollableCodeContent.measureScrollOffset('top') > 0);
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Adds or removes the shadow class from the code block based on the specified condition.
|
|
224
|
+
*
|
|
225
|
+
* @param shouldShowShadow - A boolean indicating whether to add or remove the shadow class.
|
|
226
|
+
*/
|
|
227
|
+
setupHeaderShadow(shouldShowShadow) {
|
|
228
|
+
const className = 'kbq-code-block_header-with-shadow';
|
|
229
|
+
if (shouldShowShadow) {
|
|
230
|
+
this.renderer.addClass(this.elementRef.nativeElement, className);
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
this.renderer.removeClass(this.elementRef.nativeElement, className);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Adds or removes the actionbar display class from the code block based on the specified condition.
|
|
238
|
+
*
|
|
239
|
+
* The actionbar is always visible on mobile devices and when the tabs are visible.
|
|
240
|
+
* Otherwise, the actionbar is only visible when the mouse is hovered over the code block.
|
|
241
|
+
*
|
|
242
|
+
* @param shouldShowActionbar - A boolean indicating whether the actionbar should be visible.
|
|
243
|
+
*/
|
|
244
|
+
setupActionbarDisplay(shouldShowActionbar) {
|
|
245
|
+
const className = 'kbq-code-block_show-actionbar';
|
|
246
|
+
// Should always show actionbar on Mobile devices
|
|
247
|
+
if (this.platform.IOS || this.platform.ANDROID) {
|
|
248
|
+
this.renderer.addClass(this.elementRef.nativeElement, className);
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
// Should always show actionbar when tabs are visible
|
|
252
|
+
if (!this.hideTabs) {
|
|
253
|
+
this.renderer.addClass(this.elementRef.nativeElement, className);
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
if (typeof shouldShowActionbar === 'undefined') {
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
if (shouldShowActionbar) {
|
|
260
|
+
this.renderer.addClass(this.elementRef.nativeElement, className);
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
this.renderer.removeClass(this.elementRef.nativeElement, className);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/** Whether the element has scroll. */
|
|
267
|
+
hasScroll({ scrollHeight, scrollWidth, clientHeight, clientWidth }) {
|
|
268
|
+
return scrollHeight > clientHeight || scrollWidth > clientWidth;
|
|
269
|
+
}
|
|
270
|
+
/** Handles the enter keydown event on `viewAll` button. */
|
|
271
|
+
onViewAllEnterKeydown() {
|
|
272
|
+
this.toggleViewAll();
|
|
273
|
+
if (this.canCodeContentBeFocused) {
|
|
274
|
+
this.focusMonitor.focusVia(this.scrollableCodeContent.getElementRef().nativeElement, 'keyboard');
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Copies the file code to the clipboard.
|
|
279
|
+
*
|
|
280
|
+
* If the copy was successful, the copy button tooltip content is updated
|
|
281
|
+
* to show the "copied" message.
|
|
282
|
+
*/
|
|
283
|
+
copyCode() {
|
|
284
|
+
const file = this.files[this.activeFileIndex];
|
|
285
|
+
if (this.clipboard.copy(file.content) && this.copyButtonTooltip) {
|
|
286
|
+
this.copyButtonTooltip.content = this.localeConfiguration.copiedTooltip;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Opens the file link in a new window.
|
|
291
|
+
*/
|
|
292
|
+
openLink() {
|
|
293
|
+
const window = this.getWindow();
|
|
294
|
+
const file = this.files[this.activeFileIndex];
|
|
295
|
+
const safeURL = this.domSanitizer.sanitize(SecurityContext.URL, file.link);
|
|
296
|
+
if (safeURL) {
|
|
297
|
+
window?.open(safeURL.toString(), '_blank');
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Downloads the file as a blob.
|
|
302
|
+
*
|
|
303
|
+
* Creates a link with a blob as href and the file name as download attribute.
|
|
304
|
+
* Then simulates a click event on the link to initiate the download.
|
|
305
|
+
*/
|
|
306
|
+
downloadCode() {
|
|
307
|
+
const file = this.files[this.activeFileIndex];
|
|
308
|
+
const blob = new Blob([file.content], { type: 'text/plain' });
|
|
309
|
+
const url = URL.createObjectURL(blob);
|
|
310
|
+
const link = this.document.createElement('a');
|
|
311
|
+
link.setAttribute('href', url);
|
|
312
|
+
link.setAttribute('download', file.filename || this.fallbackFileName);
|
|
313
|
+
link.click();
|
|
314
|
+
}
|
|
315
|
+
/** Use defaultView of injected document if available or fallback to global window reference */
|
|
316
|
+
getWindow() {
|
|
317
|
+
return this.document?.defaultView || window;
|
|
318
|
+
}
|
|
319
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqCodeBlock, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
320
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: KbqCodeBlock, isStandalone: true, selector: "kbq-code-block", inputs: { lineNumbers: ["lineNumbers", "lineNumbers", booleanAttribute], filled: ["filled", "filled", booleanAttribute], canToggleSoftWrap: ["canToggleSoftWrap", "canToggleSoftWrap", booleanAttribute], softWrap: ["softWrap", "softWrap", booleanAttribute], viewAll: ["viewAll", "viewAll", booleanAttribute], maxHeight: ["maxHeight", "maxHeight", numberAttribute], canLoad: ["canLoad", "canLoad", booleanAttribute], canDownload: ["canDownload", "canDownload", booleanAttribute], canCopy: ["canCopy", "canCopy", booleanAttribute], codeFiles: "codeFiles", files: "files", activeFileIndex: ["activeFileIndex", "activeFileIndex", numberAttribute], noBorder: ["noBorder", "noBorder", booleanAttribute], hideTabs: ["hideTabs", "hideTabs", booleanAttribute] }, outputs: { softWrapChange: "softWrapChange", viewAllChange: "viewAllChange", activeFileIndexChange: "activeFileIndexChange" }, host: { properties: { "class.kbq-code-block_filled": "filled", "class.kbq-code-block_outline": "!filled", "class.kbq-code-block_hide-line-numbers": "!lineNumbers", "class.kbq-code-block_hide-tabs": "hideTabs", "class.kbq-code-block_no-border": "noBorder || filled", "class.kbq-code-block_soft-wrap": "softWrap", "class.kbq-code-block_view-all": "viewAll" }, classAttribute: "kbq-code-block" }, viewQueries: [{ propertyName: "copyButtonTooltip", first: true, predicate: ["copyButtonTooltip"], descendants: true }, { propertyName: "scrollableCodeContent", first: true, predicate: CdkScrollable, descendants: true }], exportAs: ["kbqCodeBlock"], ngImport: i0, template: "@let file = files[activeFileIndex];\n\n<div class=\"kbq-code-block__header\">\n @if (!hideTabs) {\n <div class=\"kbq-code-block__header-tabs\">\n <div kbqTabNavBar transparent [tabNavPanel]=\"tabPanel\">\n @for (file of files; track file; let index = $index) {\n <div\n kbqTabLink\n [active]=\"activeFileIndex === index\"\n [disabled]=\"files.length === 1\"\n (click)=\"onSelectedTabChange(index)\"\n >\n {{ file.filename || fallbackFileName }}\n </div>\n }\n </div>\n </div>\n }\n\n <div class=\"kbq-code-block__actionbar\">\n @if (hideTabs) {\n <div class=\"kbq-code-block__actionbar__fade-gradient\"></div>\n }\n\n <div class=\"kbq-code-block__actionbar__button-stack\">\n @if (canToggleSoftWrap) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__soft-wrap-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n [kbqTooltip]=\"\n softWrap ? localeConfiguration.softWrapOffTooltip : localeConfiguration.softWrapOnTooltip\n \"\n (click)=\"toggleSoftWrap()\"\n >\n @if (softWrap) {\n <i kbq-icon=\"kbq-wrap-text-slash_16\"></i>\n } @else {\n <i kbq-icon=\"kbq-wrap-text_16\"></i>\n }\n </button>\n }\n\n @if (canDownload) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__download-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n [kbqTooltip]=\"localeConfiguration.downloadTooltip\"\n (click)=\"downloadCode()\"\n >\n <i kbq-icon=\"kbq-arrow-down-to-line_16\"></i>\n </button>\n }\n\n @if (canCopy) {\n <div #copyButtonTooltip=\"kbqTooltip\" [kbqTooltip]=\"localeConfiguration.copyTooltip\">\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__copy-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n (click)=\"copyCode()\"\n >\n <i kbq-icon=\"kbq-file-multiple-o_16\"></i>\n </button>\n </div>\n }\n\n @if (file.link) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__link-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n [kbqTooltip]=\"localeConfiguration.openExternalSystemTooltip\"\n (click)=\"openLink()\"\n >\n <i kbq-icon=\"kbq-arrow-up-right-from-square_16\"></i>\n </button>\n }\n </div>\n </div>\n</div>\n\n<pre\n #tabPanel=\"kbqTabNavPanel\"\n cdkMonitorElementFocus\n cdkScrollable\n kbqTabNavPanel\n class=\"kbq-code-block__content kbq-scrollbar\"\n [style.max-height.px]=\"calculatedMaxHeight\"\n [tabIndex]=\"codeContentTabIndex\"\n><code kbqCodeBlockHighlight class=\"kbq-code-block__code\" [file]=\"file\"></code></pre>\n\n@if (maxHeight) {\n <div\n class=\"kbq-code-block__view-all\"\n [class.kbq-code-block__view-all_collapsed]=\"!viewAll\"\n [class.kbq-code-block__view-all_expanded]=\"viewAll\"\n >\n <div class=\"kbq-code-block__view-all__wrapper\">\n <button\n kbq-button\n class=\"kbq-code-block__view-all__button\"\n [color]=\"componentColor.Theme\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n (click)=\"toggleViewAll()\"\n (keydown.enter)=\"onViewAllEnterKeydown()\"\n >\n @if (viewAll) {\n <i kbq-icon=\"kbq-chevron-up_16\"></i>\n {{ localeConfiguration.viewLessText }}\n } @else {\n <i kbq-icon=\"kbq-chevron-down_16\"></i>\n {{ localeConfiguration.viewAllText }}\n }\n </button>\n </div>\n </div>\n}\n", styles: [".kbq-code-block{display:flex;flex-direction:column;position:relative;overflow:hidden;border-width:var(--kbq-code-block-size-container-border-width);border-style:solid;border-radius:var(--kbq-code-block-size-container-border-radius);box-sizing:border-box;hyphens:none;-ms-hyphens:none;-moz-hyphens:none;-webkit-hyphens:none}.kbq-code-block .kbq-code-block__header{display:flex;align-items:center;padding:var(--kbq-size-s) var(--kbq-size-m)}.kbq-code-block .kbq-code-block__header .kbq-code-block__header-tabs{overflow:hidden;flex-grow:1}.kbq-code-block .kbq-code-block__actionbar{display:flex;justify-content:right;align-items:center;z-index:1}.kbq-code-block .kbq-code-block__actionbar .kbq-code-block__actionbar__button-stack{display:flex;gap:var(--kbq-code-block-size-actionbar-content-gap-horizontal)}.kbq-code-block .kbq-code-block__actionbar .kbq-code-block__actionbar__fade-gradient{align-self:stretch;width:var(--kbq-code-block-size-actionbar-fade-gradient-width)}.kbq-code-block:has(.kbq-code-block__view-all) .kbq-code-block__content .kbq-code-block__code{padding-bottom:var(--kbq-size-3xl)!important}.kbq-code-block .kbq-code-block__content{flex-grow:1;margin:0;flex-direction:column;border-width:var(--kbq-code-block-size-container-border-width);border-style:solid;border-radius:var(--kbq-code-block-size-container-border-radius)}.kbq-code-block .kbq-code-block__content .kbq-code-block__code{tab-size:var(--kbq-code-block-tab-size);padding:var(--kbq-code-block-size-with-header-content-padding-top) var(--kbq-code-block-size-with-header-content-padding-horizontal) var(--kbq-code-block-size-with-header-content-padding-bottom) var(--kbq-code-block-size-with-header-content-padding-horizontal)}.kbq-code-block .kbq-code-block__content .kbq-code-block__code:focus-visible{outline:none}.kbq-code-block .kbq-code-block__content .hljs{display:block}.kbq-code-block .kbq-code-block__content .hljs-ln-numbers{padding-right:var(--kbq-code-block-size-with-header-content-content-gap-horizontal);vertical-align:baseline;text-align:right}.kbq-code-block .kbq-code-block__content .hljs-ln{border-collapse:unset}.kbq-code-block .kbq-code-block__content .hljs-ln .hljs{padding:0}.kbq-code-block .kbq-code-block__content .hljs-ln-n:before{white-space:nowrap}.kbq-code-block.kbq-code-block_hide-line-numbers .hljs-ln-line.hljs-ln-numbers{display:none}.kbq-code-block.kbq-code-block_soft-wrap .kbq-code-block__code{white-space:pre-wrap}.kbq-code-block.kbq-code-block_view-all .kbq-code-block__content{max-height:unset;overflow:auto}.kbq-code-block.kbq-code-block_hide-tabs .kbq-code-block__header{padding:0}.kbq-code-block.kbq-code-block_hide-tabs .kbq-code-block__actionbar{display:none;position:absolute;top:0;right:0;padding:var(--kbq-size-s) var(--kbq-size-m)}.kbq-code-block.kbq-code-block_hide-tabs .kbq-code-block__content{position:relative}.kbq-code-block.kbq-code-block_hide-tabs .kbq-code-block__content .kbq-code-block__code{padding:var(--kbq-code-block-size-no-header-content-padding-vertical) var(--kbq-code-block-size-no-header-content-padding-horizontal)}.kbq-code-block.kbq-code-block_hide-tabs .kbq-code-block__content .hljs-ln-numbers{padding-right:var(--kbq-code-block-size-no-header-content-content-gap-horizontal)}.kbq-code-block.kbq-code-block_show-actionbar .kbq-code-block__actionbar{display:flex}.kbq-code-block:not(:has(.kbq-code-block__view-all)) .kbq-code-block__content{overflow:auto}.kbq-code-block .kbq-code-block__view-all{display:flex;justify-content:center;width:100%;position:absolute;bottom:0;border-radius:var(--kbq-code-block-size-container-border-radius)}.kbq-code-block .kbq-code-block__view-all .kbq-code-block__view-all__wrapper{border-radius:var(--kbq-size-border-radius)}.kbq-code-block .kbq-code-block__view-all.kbq-code-block__view-all_collapsed{padding-top:var(--kbq-code-block-size-collapse-collapsed-padding-top);padding-bottom:var(--kbq-code-block-size-collapse-collapsed-padding-bottom)}.kbq-code-block .kbq-code-block__view-all.kbq-code-block__view-all_expanded{padding-top:var(--kbq-code-block-size-collapse-expanded-padding-top);margin-bottom:var(--kbq-code-block-size-collapse-expanded-padding-bottom)}.kbq-code-block.kbq-code-block_no-border{border-color:transparent!important}.kbq-code-block .hljs-addition{background-color:var(--kbq-code-block-hljs-addition-background);color:var(--kbq-code-block-hljs-addition-color)}.kbq-code-block .hljs-attr{background-color:var(--kbq-code-block-hljs-attr-background);color:var(--kbq-code-block-hljs-attr-color)}.kbq-code-block .hljs-attribute{background-color:var(--kbq-code-block-hljs-attribute-background);color:var(--kbq-code-block-hljs-attribute-color)}.kbq-code-block .hljs-built_in{background-color:var(--kbq-code-block-hljs-built-in-background);color:var(--kbq-code-block-hljs-built-in-color)}.kbq-code-block .hljs-bullet{background-color:var(--kbq-code-block-hljs-bullet-background);color:var(--kbq-code-block-hljs-bullet-color)}.kbq-code-block .hljs-char-escape{background-color:var(--kbq-code-block-hljs-char-escape-background);color:var(--kbq-code-block-hljs-char-escape-color)}.kbq-code-block .hljs-class{background-color:var(--kbq-code-block-hljs-class-background);color:var(--kbq-code-block-hljs-class-color)}.kbq-code-block .hljs-code{background-color:var(--kbq-code-block-hljs-code-background);color:var(--kbq-code-block-hljs-code-color)}.kbq-code-block .hljs-comment{background-color:var(--kbq-code-block-hljs-comment-background);color:var(--kbq-code-block-hljs-comment-color)}.kbq-code-block .hljs-deletion{background-color:var(--kbq-code-block-hljs-deletion-background);color:var(--kbq-code-block-hljs-deletion-color)}.kbq-code-block .hljs-doctag{background-color:var(--kbq-code-block-hljs-doctag-background);color:var(--kbq-code-block-hljs-doctag-color)}.kbq-code-block .hljs-emphasis{background-color:var(--kbq-code-block-hljs-emphasis-background);color:var(--kbq-code-block-hljs-emphasis-color)}.kbq-code-block .hljs-formula{background-color:var(--kbq-code-block-hljs-formula-background);color:var(--kbq-code-block-hljs-formula-color)}.kbq-code-block .hljs-function{background-color:var(--kbq-code-block-hljs-function-background);color:var(--kbq-code-block-hljs-function-color)}.kbq-code-block .hljs-keyword{background-color:var(--kbq-code-block-hljs-keyword-background);color:var(--kbq-code-block-hljs-keyword-color)}.kbq-code-block .hljs-link{background-color:var(--kbq-code-block-hljs-link-background);color:var(--kbq-code-block-hljs-link-color)}.kbq-code-block .hljs-literal{background-color:var(--kbq-code-block-hljs-literal-background);color:var(--kbq-code-block-hljs-literal-color)}.kbq-code-block .hljs-meta{background-color:var(--kbq-code-block-hljs-meta-background);color:var(--kbq-code-block-hljs-meta-color)}.kbq-code-block .hljs-meta-keyword{background-color:var(--kbq-code-block-hljs-meta-keyword-background);color:var(--kbq-code-block-hljs-meta-keyword-color)}.kbq-code-block .hljs-meta-string{background-color:var(--kbq-code-block-hljs-meta-string-background);color:var(--kbq-code-block-hljs-meta-string-color)}.kbq-code-block .hljs-meta-prompt{background-color:var(--kbq-code-block-hljs-meta-prompt-background);color:var(--kbq-code-block-hljs-meta-prompt-color)}.kbq-code-block .hljs-name{background-color:var(--kbq-code-block-hljs-name-background);color:var(--kbq-code-block-hljs-name-color)}.kbq-code-block .hljs-number{background-color:var(--kbq-code-block-hljs-number-background);color:var(--kbq-code-block-hljs-number-color)}.kbq-code-block .hljs-operator{background-color:var(--kbq-code-block-hljs-operator-background);color:var(--kbq-code-block-hljs-operator-color)}.kbq-code-block .hljs-params{background-color:var(--kbq-code-block-hljs-params-background);color:var(--kbq-code-block-hljs-params-color)}.kbq-code-block .hljs-property{background-color:var(--kbq-code-block-hljs-property-background);color:var(--kbq-code-block-hljs-property-color)}.kbq-code-block .hljs-punctuation{background-color:var(--kbq-code-block-hljs-punctuation-background);color:var(--kbq-code-block-hljs-punctuation-color)}.kbq-code-block .hljs-quote{background-color:var(--kbq-code-block-hljs-quote-background);color:var(--kbq-code-block-hljs-quote-color)}.kbq-code-block .hljs-regexp{background-color:var(--kbq-code-block-hljs-regexp-background);color:var(--kbq-code-block-hljs-regexp-color)}.kbq-code-block .hljs-section{background-color:var(--kbq-code-block-hljs-section-background);color:var(--kbq-code-block-hljs-section-color)}.kbq-code-block .hljs-selector-attr{background-color:var(--kbq-code-block-hljs-selector-attr-background);color:var(--kbq-code-block-hljs-selector-attr-color)}.kbq-code-block .hljs-selector-class{background-color:var(--kbq-code-block-hljs-selector-class-background);color:var(--kbq-code-block-hljs-selector-class-color)}.kbq-code-block .hljs-selector-id{background-color:var(--kbq-code-block-hljs-selector-id-background);color:var(--kbq-code-block-hljs-selector-id-color)}.kbq-code-block .hljs-selector-pseudo{background-color:var(--kbq-code-block-hljs-selector-pseudo-background);color:var(--kbq-code-block-hljs-selector-pseudo-color)}.kbq-code-block .hljs-selector-tag{background-color:var(--kbq-code-block-hljs-selector-tag-background);color:var(--kbq-code-block-hljs-selector-tag-color)}.kbq-code-block .hljs-string{background-color:var(--kbq-code-block-hljs-string-background);color:var(--kbq-code-block-hljs-string-color)}.kbq-code-block .hljs-strong{background-color:var(--kbq-code-block-hljs-strong-background);color:var(--kbq-code-block-hljs-strong-color)}.kbq-code-block .hljs-subst{background-color:var(--kbq-code-block-hljs-subst-background);color:var(--kbq-code-block-hljs-subst-color)}.kbq-code-block .hljs-symbol{background-color:var(--kbq-code-block-hljs-symbol-background);color:var(--kbq-code-block-hljs-symbol-color)}.kbq-code-block .hljs-tag{background-color:var(--kbq-code-block-hljs-tag-background);color:var(--kbq-code-block-hljs-tag-color)}.kbq-code-block .hljs-template-tag{background-color:var(--kbq-code-block-hljs-template-tag-background);color:var(--kbq-code-block-hljs-template-tag-color)}.kbq-code-block .hljs-template-variable{background-color:var(--kbq-code-block-hljs-template-variable-background);color:var(--kbq-code-block-hljs-template-variable-color)}.kbq-code-block .hljs-title{background-color:var(--kbq-code-block-hljs-title-background);color:var(--kbq-code-block-hljs-title-color)}.kbq-code-block .hljs-title-class{background-color:var(--kbq-code-block-hljs-title-class-background);color:var(--kbq-code-block-hljs-title-class-color)}.kbq-code-block .hljs-title-class-inherited{background-color:var(--kbq-code-block-hljs-title-class-inherited-background);color:var(--kbq-code-block-hljs-title-class-inherited-color)}.kbq-code-block .hljs-title-function{background-color:var(--kbq-code-block-hljs-title-function-background);color:var(--kbq-code-block-hljs-title-function-color)}.kbq-code-block .hljs-title-function-invoke{background-color:var(--kbq-code-block-hljs-title-function-invoke-background);color:var(--kbq-code-block-hljs-title-function-invoke-color)}.kbq-code-block .hljs-type{background-color:var(--kbq-code-block-hljs-type-background);color:var(--kbq-code-block-hljs-type-color)}.kbq-code-block .hljs-variable{background-color:var(--kbq-code-block-hljs-variable-background);color:var(--kbq-code-block-hljs-variable-color)}.kbq-code-block .hljs-variable-constant{background-color:var(--kbq-code-block-hljs-variable-constant-background);color:var(--kbq-code-block-hljs-variable-constant-color)}.kbq-code-block .hljs-variable-language{background-color:var(--kbq-code-block-hljs-variable-language-background);color:var(--kbq-code-block-hljs-variable-language-color)}.kbq-code-block .hljs-ln-n{color:var(--kbq-code-block-hljs-line-numbers-color)}.kbq-code-block.kbq-code-block_outline{background:var(--kbq-code-block-outline-container-background);border-color:var(--kbq-code-block-outline-container-border-color)}.kbq-code-block.kbq-code-block_outline .kbq-code-block__header{background:var(--kbq-code-block-outline-header-background)}.kbq-code-block.kbq-code-block_outline .kbq-code-block__actionbar{background:var(--kbq-code-block-outline-actionbar-background)}.kbq-code-block.kbq-code-block_outline.kbq-code-block_header-with-shadow .kbq-code-block__header{box-shadow:var(--kbq-code-block-outline-header-scroll-shadow)}.kbq-code-block.kbq-code-block_outline.kbq-code-block_hide-tabs .kbq-code-block__actionbar{background:transparent}.kbq-code-block.kbq-code-block_outline.kbq-code-block_hide-tabs .kbq-code-block__actionbar .kbq-code-block__actionbar__fade-gradient{background:var(--kbq-code-block-outline-actionbar-fade-gradient)}.kbq-code-block.kbq-code-block_outline.kbq-code-block_hide-tabs .kbq-code-block__actionbar .kbq-code-block__actionbar__button-stack{background:var(--kbq-code-block-outline-actionbar-background)}.kbq-code-block.kbq-code-block_outline .kbq-code-block__view-all .kbq-code-block__view-all__wrapper{background:var(--kbq-code-block-outline-collapse-button-expand-background);opacity:90%}.kbq-code-block.kbq-code-block_outline .kbq-code-block__view-all.kbq-code-block__view-all_expanded{background:var(--kbq-code-block-outline-collapse-expanded-background)}.kbq-code-block.kbq-code-block_outline .kbq-code-block__view-all.kbq-code-block__view-all_collapsed{background:var(--kbq-code-block-outline-collapse-collapsed-background)}.kbq-code-block.kbq-code-block_filled{background:var(--kbq-code-block-filled-container-background);border-color:var(--kbq-code-block-filled-container-border-color)}.kbq-code-block.kbq-code-block_filled .kbq-code-block__header{background:var(--kbq-code-block-filled-header-background)}.kbq-code-block.kbq-code-block_filled .kbq-code-block__actionbar{background:var(--kbq-code-block-filled-actionbar-background)}.kbq-code-block.kbq-code-block_filled.kbq-code-block_header-with-shadow .kbq-code-block__header{box-shadow:var(--kbq-code-block-filled-header-scroll-shadow)}.kbq-code-block.kbq-code-block_filled.kbq-code-block_hide-tabs .kbq-code-block__actionbar{background:transparent}.kbq-code-block.kbq-code-block_filled.kbq-code-block_hide-tabs .kbq-code-block__actionbar .kbq-code-block__actionbar__fade-gradient{background:var(--kbq-code-block-filled-actionbar-fade-gradient)}.kbq-code-block.kbq-code-block_filled.kbq-code-block_hide-tabs .kbq-code-block__actionbar .kbq-code-block__actionbar__button-stack{background:var(--kbq-code-block-filled-actionbar-background)}.kbq-code-block.kbq-code-block_filled .kbq-code-block__view-all .kbq-code-block__view-all__wrapper{background:var(--kbq-code-block-filled-collapse-button-expand-background);opacity:90%}.kbq-code-block.kbq-code-block_filled .kbq-code-block__view-all.kbq-code-block__view-all_expanded{background:var(--kbq-code-block-filled-collapse-expanded-background)}.kbq-code-block.kbq-code-block_filled .kbq-code-block__view-all.kbq-code-block__view-all_collapsed{background:var(--kbq-code-block-filled-collapse-collapsed-background)}.kbq-code-block .kbq-code-block__content{border-color:transparent}.kbq-code-block .kbq-code-block__content.cdk-keyboard-focused{outline:none;border-color:var(--kbq-states-line-focus-theme)}.kbq-code-block{font-size:var(--kbq-typography-mono-codeblock-font-size);font-weight:var(--kbq-typography-mono-codeblock-font-weight);line-height:var(--kbq-typography-mono-codeblock-line-height);font-family:var(--kbq-typography-mono-codeblock-font-family);text-transform:var(--kbq-typography-mono-codeblock-text-transform);font-feature-settings:var(--kbq-typography-mono-codeblock-font-feature-settings);letter-spacing:var(--kbq-typography-mono-codeblock-letter-spacing)}.kbq-code-block .kbq-code-block__content,.kbq-code-block .kbq-code-block__content .kbq-code-block__code{font:inherit}\n", ".kbq-code-block{--kbq-code-block-size-container-border-width: 1px;--kbq-code-block-size-container-border-radius: var(--kbq-size-m);--kbq-code-block-size-with-header-content-padding-top: var(--kbq-size-xxs);--kbq-code-block-size-with-header-content-padding-bottom: var(--kbq-size-l);--kbq-code-block-size-with-header-content-padding-horizontal: var(--kbq-size-xl);--kbq-code-block-size-with-header-content-content-gap-horizontal: var(--kbq-size-m);--kbq-code-block-size-no-header-content-padding-vertical: 14px;--kbq-code-block-size-no-header-content-padding-horizontal: var(--kbq-size-xl);--kbq-code-block-size-no-header-content-content-gap-horizontal: var(--kbq-size-m);--kbq-code-block-size-header-content-gap-horizontal: var(--kbq-size-l);--kbq-code-block-size-actionbar-content-gap-horizontal: var(--kbq-size-3xs);--kbq-code-block-size-actionbar-fade-gradient-width: var(--kbq-size-3xl);--kbq-code-block-size-collapse-expanded-padding-top: 0;--kbq-code-block-size-collapse-expanded-padding-bottom: var(--kbq-size-l);--kbq-code-block-size-collapse-collapsed-padding-top: var(--kbq-size-3xl);--kbq-code-block-size-collapse-collapsed-padding-bottom: var(--kbq-size-l);--kbq-code-block-font-hljs-addition-font-style: null;--kbq-code-block-font-hljs-addition-font-weight: null;--kbq-code-block-font-hljs-attr-font-style: null;--kbq-code-block-font-hljs-attr-font-weight: null;--kbq-code-block-font-hljs-attribute-font-style: null;--kbq-code-block-font-hljs-attribute-font-weight: null;--kbq-code-block-font-hljs-built-in-font-style: null;--kbq-code-block-font-hljs-built-in-font-weight: null;--kbq-code-block-font-hljs-bullet-font-style: null;--kbq-code-block-font-hljs-bullet-font-weight: null;--kbq-code-block-font-hljs-char-escape-font-style: null;--kbq-code-block-font-hljs-char-escape-font-weight: null;--kbq-code-block-font-hljs-class-font-style: null;--kbq-code-block-font-hljs-class-font-weight: null;--kbq-code-block-font-hljs-code-font-style: null;--kbq-code-block-font-hljs-code-font-weight: null;--kbq-code-block-font-hljs-comment-font-style: null;--kbq-code-block-font-hljs-comment-font-weight: null;--kbq-code-block-font-hljs-deletion-font-style: null;--kbq-code-block-font-hljs-deletion-font-weight: null;--kbq-code-block-font-hljs-doctag-font-style: null;--kbq-code-block-font-hljs-doctag-font-weight: null;--kbq-code-block-font-hljs-emphasis-font-style: null;--kbq-code-block-font-hljs-emphasis-font-weight: null;--kbq-code-block-font-hljs-formula-font-style: null;--kbq-code-block-font-hljs-formula-font-weight: null;--kbq-code-block-font-hljs-function-font-style: null;--kbq-code-block-font-hljs-function-font-weight: null;--kbq-code-block-font-hljs-keyword-font-style: null;--kbq-code-block-font-hljs-keyword-font-weight: null;--kbq-code-block-font-hljs-link-font-style: null;--kbq-code-block-font-hljs-link-font-weight: null;--kbq-code-block-font-hljs-literal-font-style: null;--kbq-code-block-font-hljs-literal-font-weight: null;--kbq-code-block-font-hljs-meta-font-style: null;--kbq-code-block-font-hljs-meta-font-weight: null;--kbq-code-block-font-hljs-meta-keyword-font-style: null;--kbq-code-block-font-hljs-meta-keyword-font-weight: null;--kbq-code-block-font-hljs-meta-string-font-style: null;--kbq-code-block-font-hljs-meta-string-font-weight: null;--kbq-code-block-font-hljs-meta-prompt-font-style: null;--kbq-code-block-font-hljs-meta-prompt-font-weight: null;--kbq-code-block-font-hljs-name-font-style: null;--kbq-code-block-font-hljs-name-font-weight: null;--kbq-code-block-font-hljs-number-font-style: null;--kbq-code-block-font-hljs-number-font-weight: null;--kbq-code-block-font-hljs-operator-font-style: null;--kbq-code-block-font-hljs-operator-font-weight: null;--kbq-code-block-font-hljs-params-font-style: null;--kbq-code-block-font-hljs-params-font-weight: null;--kbq-code-block-font-hljs-property-font-style: null;--kbq-code-block-font-hljs-property-font-weight: null;--kbq-code-block-font-hljs-punctuation-font-style: null;--kbq-code-block-font-hljs-punctuation-font-weight: null;--kbq-code-block-font-hljs-quote-font-style: null;--kbq-code-block-font-hljs-quote-font-weight: null;--kbq-code-block-font-hljs-regexp-font-style: null;--kbq-code-block-font-hljs-regexp-font-weight: null;--kbq-code-block-font-hljs-section-font-style: null;--kbq-code-block-font-hljs-section-font-weight: null;--kbq-code-block-font-hljs-selector-attr-font-style: null;--kbq-code-block-font-hljs-selector-attr-font-weight: null;--kbq-code-block-font-hljs-selector-class-font-style: null;--kbq-code-block-font-hljs-selector-class-font-weight: null;--kbq-code-block-font-hljs-selector-id-font-style: null;--kbq-code-block-font-hljs-selector-id-font-weight: null;--kbq-code-block-font-hljs-selector-pseudo-font-style: null;--kbq-code-block-font-hljs-selector-pseudo-font-weight: null;--kbq-code-block-font-hljs-selector-tag-font-style: null;--kbq-code-block-font-hljs-selector-tag-font-weight: null;--kbq-code-block-font-hljs-string-font-style: null;--kbq-code-block-font-hljs-string-font-weight: null;--kbq-code-block-font-hljs-strong-font-style: null;--kbq-code-block-font-hljs-strong-font-weight: null;--kbq-code-block-font-hljs-subst-font-style: null;--kbq-code-block-font-hljs-subst-font-weight: null;--kbq-code-block-font-hljs-symbol-font-style: null;--kbq-code-block-font-hljs-symbol-font-weight: null;--kbq-code-block-font-hljs-tag-font-style: null;--kbq-code-block-font-hljs-tag-font-weight: null;--kbq-code-block-font-hljs-template-tag-font-style: null;--kbq-code-block-font-hljs-template-tag-font-weight: null;--kbq-code-block-font-hljs-template-variable-font-style: null;--kbq-code-block-font-hljs-template-variable-font-weight: null;--kbq-code-block-font-hljs-title-font-style: null;--kbq-code-block-font-hljs-title-font-weight: null;--kbq-code-block-font-hljs-title-class-font-style: normal;--kbq-code-block-font-hljs-title-class-font-weight: 500;--kbq-code-block-font-hljs-title-class-inherited-font-style: null;--kbq-code-block-font-hljs-title-class-inherited-font-weight: null;--kbq-code-block-font-hljs-title-function-font-style: null;--kbq-code-block-font-hljs-title-function-font-weight: null;--kbq-code-block-font-hljs-title-function-invoke-font-style: null;--kbq-code-block-font-hljs-title-function-invoke-font-weight: null;--kbq-code-block-font-hljs-type-font-style: null;--kbq-code-block-font-hljs-type-font-weight: null;--kbq-code-block-font-hljs-variable-font-style: null;--kbq-code-block-font-hljs-variable-font-weight: null;--kbq-code-block-font-hljs-variable-constant-font-style: null;--kbq-code-block-font-hljs-variable-constant-font-weight: null;--kbq-code-block-font-hljs-variable-language-font-style: null;--kbq-code-block-font-hljs-variable-language-font-weight: null;--kbq-code-block-filled-container-background: var(--kbq-background-bg-secondary);--kbq-code-block-filled-container-border-color: transparent;--kbq-code-block-filled-header-background: var(--kbq-background-bg-secondary);--kbq-code-block-filled-header-scroll-shadow: var(--kbq-shadow-overflow-normal-bottom);--kbq-code-block-filled-actionbar-fade-gradient: linear-gradient( 90deg, transparent, var(--kbq-background-bg-secondary) );--kbq-code-block-filled-actionbar-background: var(--kbq-background-bg-secondary);--kbq-code-block-filled-collapse-expanded-background: transparent;--kbq-code-block-filled-collapse-collapsed-background: linear-gradient( 180deg, transparent, var(--kbq-background-bg-secondary) 100% );--kbq-code-block-filled-collapse-button-expand-background: var(--kbq-background-bg-secondary);--kbq-code-block-outline-container-background: var(--kbq-background-card);--kbq-code-block-outline-container-border-color: var(--kbq-divider-color, var(--kbq-line-contrast-less));--kbq-code-block-outline-header-background: var(--kbq-background-card);--kbq-code-block-outline-header-scroll-shadow: var(--kbq-shadow-overflow-normal-bottom);--kbq-code-block-outline-actionbar-fade-gradient: linear-gradient(90deg, transparent, var(--kbq-background-card));--kbq-code-block-outline-actionbar-background: var(--kbq-background-card);--kbq-code-block-outline-collapse-expanded-background: transparent;--kbq-code-block-outline-collapse-collapsed-background: linear-gradient( 180deg, transparent, var(--kbq-background-bg) 100% );--kbq-code-block-outline-collapse-button-expand-background: var(--kbq-background-card);--kbq-code-block-hljs-addition-background: var(--kbq-palette-green-95);--kbq-code-block-hljs-addition-color: var(--kbq-palette-green-25);--kbq-code-block-hljs-attr-background: null;--kbq-code-block-hljs-attr-color: null;--kbq-code-block-hljs-attribute-background: null;--kbq-code-block-hljs-attribute-color: null;--kbq-code-block-hljs-built-in-background: null;--kbq-code-block-hljs-built-in-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-bullet-background: null;--kbq-code-block-hljs-bullet-color: null;--kbq-code-block-hljs-char-escape-background: null;--kbq-code-block-hljs-char-escape-color: null;--kbq-code-block-hljs-class-background: null;--kbq-code-block-hljs-class-color: null;--kbq-code-block-hljs-code-background: null;--kbq-code-block-hljs-code-color: null;--kbq-code-block-hljs-comment-background: null;--kbq-code-block-hljs-comment-color: var(--kbq-palette-grey-60);--kbq-code-block-hljs-deletion-background: var(--kbq-palette-red-95);--kbq-code-block-hljs-deletion-color: var(--kbq-palette-red-35);--kbq-code-block-hljs-doctag-background: null;--kbq-code-block-hljs-doctag-color: null;--kbq-code-block-hljs-emphasis-background: null;--kbq-code-block-hljs-emphasis-color: null;--kbq-code-block-hljs-formula-background: null;--kbq-code-block-hljs-formula-color: null;--kbq-code-block-hljs-function-background: null;--kbq-code-block-hljs-function-color: null;--kbq-code-block-hljs-keyword-background: null;--kbq-code-block-hljs-keyword-color: null;--kbq-code-block-hljs-line-numbers-color: var(--kbq-foreground-contrast-secondary);--kbq-code-block-hljs-link-background: null;--kbq-code-block-hljs-link-color: null;--kbq-code-block-hljs-literal-background: null;--kbq-code-block-hljs-literal-color: var(--kbq-palette-purple-30);--kbq-code-block-hljs-meta-background: null;--kbq-code-block-hljs-meta-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-meta-keyword-background: null;--kbq-code-block-hljs-meta-keyword-color: null;--kbq-code-block-hljs-meta-string-background: null;--kbq-code-block-hljs-meta-string-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-meta-prompt-background: null;--kbq-code-block-hljs-meta-prompt-color: null;--kbq-code-block-hljs-name-background: null;--kbq-code-block-hljs-name-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-number-background: null;--kbq-code-block-hljs-number-color: var(--kbq-palette-purple-30);--kbq-code-block-hljs-operator-background: null;--kbq-code-block-hljs-operator-color: null;--kbq-code-block-hljs-params-background: null;--kbq-code-block-hljs-params-color: null;--kbq-code-block-hljs-property-background: null;--kbq-code-block-hljs-property-color: null;--kbq-code-block-hljs-punctuation-background: null;--kbq-code-block-hljs-punctuation-color: null;--kbq-code-block-hljs-quote-background: null;--kbq-code-block-hljs-quote-color: null;--kbq-code-block-hljs-regexp-background: null;--kbq-code-block-hljs-regexp-color: var(--kbq-palette-green-25);--kbq-code-block-hljs-section-background: null;--kbq-code-block-hljs-section-color: null;--kbq-code-block-hljs-selector-attr-background: null;--kbq-code-block-hljs-selector-attr-color: null;--kbq-code-block-hljs-selector-class-background: null;--kbq-code-block-hljs-selector-class-color: null;--kbq-code-block-hljs-selector-id-background: null;--kbq-code-block-hljs-selector-id-color: null;--kbq-code-block-hljs-selector-pseudo-background: null;--kbq-code-block-hljs-selector-pseudo-color: null;--kbq-code-block-hljs-selector-tag-background: null;--kbq-code-block-hljs-selector-tag-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-string-background: null;--kbq-code-block-hljs-string-color: var(--kbq-palette-green-25);--kbq-code-block-hljs-strong-background: null;--kbq-code-block-hljs-strong-color: null;--kbq-code-block-hljs-subst-background: null;--kbq-code-block-hljs-subst-color: null;--kbq-code-block-hljs-symbol-background: null;--kbq-code-block-hljs-symbol-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-tag-background: null;--kbq-code-block-hljs-tag-color: null;--kbq-code-block-hljs-template-tag-background: null;--kbq-code-block-hljs-template-tag-color: null;--kbq-code-block-hljs-template-variable-background: null;--kbq-code-block-hljs-template-variable-color: null;--kbq-code-block-hljs-title-background: null;--kbq-code-block-hljs-title-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-title-class-background: null;--kbq-code-block-hljs-title-class-color: null;--kbq-code-block-hljs-title-class-inherited-background: null;--kbq-code-block-hljs-title-class-inherited-color: null;--kbq-code-block-hljs-title-function-background: null;--kbq-code-block-hljs-title-function-color: null;--kbq-code-block-hljs-title-function-invoke-background: null;--kbq-code-block-hljs-title-function-invoke-color: null;--kbq-code-block-hljs-type-background: null;--kbq-code-block-hljs-type-color: null;--kbq-code-block-hljs-variable-background: null;--kbq-code-block-hljs-variable-color: null;--kbq-code-block-hljs-variable-constant-background: null;--kbq-code-block-hljs-variable-constant-color: null;--kbq-code-block-hljs-variable-language-background: null;--kbq-code-block-hljs-variable-language-color: null;--kbq-code-block-tab-size: 4}\n"], dependencies: [{ kind: "ngmodule", type: KbqTabsModule }, { kind: "component", type: i1.KbqTabNavBar, selector: "[kbqTabNavBar], [kbq-tab-nav-bar]", inputs: ["transparent", "onSurface", "underlined", "tabNavPanel"], exportAs: ["kbqTabNavBar"] }, { kind: "directive", type: i1.KbqTabLink, selector: "[kbqTabLink], [kbq-tab-link]", inputs: ["id", "active", "disabled", "tabIndex"], exportAs: ["kbqTabLink"] }, { kind: "directive", type: i1.KbqTabNavPanel, selector: "[kbqTabNavPanel]", inputs: ["id"], exportAs: ["kbqTabNavPanel"] }, { kind: "ngmodule", type: KbqButtonModule }, { kind: "component", type: i2.KbqButton, selector: "[kbq-button]", inputs: ["color", "tabIndex", "kbqStyle", "disabled"] }, { kind: "directive", type: i2.KbqButtonCssStyler, selector: "[kbq-button]" }, { kind: "directive", type: KbqCodeBlockHighlight, selector: "code[kbqCodeBlockHighlight]", inputs: ["file", "startFrom", "singleLine"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i3.CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }, { kind: "ngmodule", type: CdkScrollableModule }, { kind: "directive", type: i4.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "ngmodule", type: KbqToolTipModule }, { kind: "directive", type: i5.KbqTooltipTrigger, selector: "[kbqTooltip]", inputs: ["kbqVisible", "kbqPlacement", "kbqRelativeToPointer", "kbqPlacementPriority", "kbqTooltip", "kbqTooltipDisabled", "kbqEnterDelay", "kbqLeaveDelay", "kbqTrigger", "kbqTooltipClass", "kbqTooltipContext", "kbqTooltipColor", "kbqTooltipArrow", "kbqTooltipOffset"], outputs: ["kbqPlacementChange", "kbqVisibleChange"], exportAs: ["kbqTooltip"] }, { kind: "ngmodule", type: KbqIconModule }, { kind: "component", type: i6.KbqIcon, selector: "[kbq-icon]", inputs: ["color", "small", "autoColor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
321
|
+
}
|
|
322
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqCodeBlock, decorators: [{
|
|
323
|
+
type: Component,
|
|
324
|
+
args: [{ standalone: true, imports: [
|
|
325
|
+
KbqTabsModule,
|
|
326
|
+
KbqButtonModule,
|
|
327
|
+
KbqCodeBlockHighlight,
|
|
328
|
+
A11yModule,
|
|
329
|
+
CdkScrollableModule,
|
|
330
|
+
KbqToolTipModule,
|
|
331
|
+
KbqIconModule
|
|
332
|
+
], selector: 'kbq-code-block', exportAs: 'kbqCodeBlock', host: {
|
|
333
|
+
class: 'kbq-code-block',
|
|
334
|
+
'[class.kbq-code-block_filled]': 'filled',
|
|
335
|
+
'[class.kbq-code-block_outline]': '!filled',
|
|
336
|
+
'[class.kbq-code-block_hide-line-numbers]': '!lineNumbers',
|
|
337
|
+
'[class.kbq-code-block_hide-tabs]': 'hideTabs',
|
|
338
|
+
'[class.kbq-code-block_no-border]': 'noBorder || filled',
|
|
339
|
+
'[class.kbq-code-block_soft-wrap]': 'softWrap',
|
|
340
|
+
'[class.kbq-code-block_view-all]': 'viewAll'
|
|
341
|
+
}, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "@let file = files[activeFileIndex];\n\n<div class=\"kbq-code-block__header\">\n @if (!hideTabs) {\n <div class=\"kbq-code-block__header-tabs\">\n <div kbqTabNavBar transparent [tabNavPanel]=\"tabPanel\">\n @for (file of files; track file; let index = $index) {\n <div\n kbqTabLink\n [active]=\"activeFileIndex === index\"\n [disabled]=\"files.length === 1\"\n (click)=\"onSelectedTabChange(index)\"\n >\n {{ file.filename || fallbackFileName }}\n </div>\n }\n </div>\n </div>\n }\n\n <div class=\"kbq-code-block__actionbar\">\n @if (hideTabs) {\n <div class=\"kbq-code-block__actionbar__fade-gradient\"></div>\n }\n\n <div class=\"kbq-code-block__actionbar__button-stack\">\n @if (canToggleSoftWrap) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__soft-wrap-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n [kbqTooltip]=\"\n softWrap ? localeConfiguration.softWrapOffTooltip : localeConfiguration.softWrapOnTooltip\n \"\n (click)=\"toggleSoftWrap()\"\n >\n @if (softWrap) {\n <i kbq-icon=\"kbq-wrap-text-slash_16\"></i>\n } @else {\n <i kbq-icon=\"kbq-wrap-text_16\"></i>\n }\n </button>\n }\n\n @if (canDownload) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__download-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n [kbqTooltip]=\"localeConfiguration.downloadTooltip\"\n (click)=\"downloadCode()\"\n >\n <i kbq-icon=\"kbq-arrow-down-to-line_16\"></i>\n </button>\n }\n\n @if (canCopy) {\n <div #copyButtonTooltip=\"kbqTooltip\" [kbqTooltip]=\"localeConfiguration.copyTooltip\">\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__copy-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n (click)=\"copyCode()\"\n >\n <i kbq-icon=\"kbq-file-multiple-o_16\"></i>\n </button>\n </div>\n }\n\n @if (file.link) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__link-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n [kbqTooltip]=\"localeConfiguration.openExternalSystemTooltip\"\n (click)=\"openLink()\"\n >\n <i kbq-icon=\"kbq-arrow-up-right-from-square_16\"></i>\n </button>\n }\n </div>\n </div>\n</div>\n\n<pre\n #tabPanel=\"kbqTabNavPanel\"\n cdkMonitorElementFocus\n cdkScrollable\n kbqTabNavPanel\n class=\"kbq-code-block__content kbq-scrollbar\"\n [style.max-height.px]=\"calculatedMaxHeight\"\n [tabIndex]=\"codeContentTabIndex\"\n><code kbqCodeBlockHighlight class=\"kbq-code-block__code\" [file]=\"file\"></code></pre>\n\n@if (maxHeight) {\n <div\n class=\"kbq-code-block__view-all\"\n [class.kbq-code-block__view-all_collapsed]=\"!viewAll\"\n [class.kbq-code-block__view-all_expanded]=\"viewAll\"\n >\n <div class=\"kbq-code-block__view-all__wrapper\">\n <button\n kbq-button\n class=\"kbq-code-block__view-all__button\"\n [color]=\"componentColor.Theme\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n (click)=\"toggleViewAll()\"\n (keydown.enter)=\"onViewAllEnterKeydown()\"\n >\n @if (viewAll) {\n <i kbq-icon=\"kbq-chevron-up_16\"></i>\n {{ localeConfiguration.viewLessText }}\n } @else {\n <i kbq-icon=\"kbq-chevron-down_16\"></i>\n {{ localeConfiguration.viewAllText }}\n }\n </button>\n </div>\n </div>\n}\n", styles: [".kbq-code-block{display:flex;flex-direction:column;position:relative;overflow:hidden;border-width:var(--kbq-code-block-size-container-border-width);border-style:solid;border-radius:var(--kbq-code-block-size-container-border-radius);box-sizing:border-box;hyphens:none;-ms-hyphens:none;-moz-hyphens:none;-webkit-hyphens:none}.kbq-code-block .kbq-code-block__header{display:flex;align-items:center;padding:var(--kbq-size-s) var(--kbq-size-m)}.kbq-code-block .kbq-code-block__header .kbq-code-block__header-tabs{overflow:hidden;flex-grow:1}.kbq-code-block .kbq-code-block__actionbar{display:flex;justify-content:right;align-items:center;z-index:1}.kbq-code-block .kbq-code-block__actionbar .kbq-code-block__actionbar__button-stack{display:flex;gap:var(--kbq-code-block-size-actionbar-content-gap-horizontal)}.kbq-code-block .kbq-code-block__actionbar .kbq-code-block__actionbar__fade-gradient{align-self:stretch;width:var(--kbq-code-block-size-actionbar-fade-gradient-width)}.kbq-code-block:has(.kbq-code-block__view-all) .kbq-code-block__content .kbq-code-block__code{padding-bottom:var(--kbq-size-3xl)!important}.kbq-code-block .kbq-code-block__content{flex-grow:1;margin:0;flex-direction:column;border-width:var(--kbq-code-block-size-container-border-width);border-style:solid;border-radius:var(--kbq-code-block-size-container-border-radius)}.kbq-code-block .kbq-code-block__content .kbq-code-block__code{tab-size:var(--kbq-code-block-tab-size);padding:var(--kbq-code-block-size-with-header-content-padding-top) var(--kbq-code-block-size-with-header-content-padding-horizontal) var(--kbq-code-block-size-with-header-content-padding-bottom) var(--kbq-code-block-size-with-header-content-padding-horizontal)}.kbq-code-block .kbq-code-block__content .kbq-code-block__code:focus-visible{outline:none}.kbq-code-block .kbq-code-block__content .hljs{display:block}.kbq-code-block .kbq-code-block__content .hljs-ln-numbers{padding-right:var(--kbq-code-block-size-with-header-content-content-gap-horizontal);vertical-align:baseline;text-align:right}.kbq-code-block .kbq-code-block__content .hljs-ln{border-collapse:unset}.kbq-code-block .kbq-code-block__content .hljs-ln .hljs{padding:0}.kbq-code-block .kbq-code-block__content .hljs-ln-n:before{white-space:nowrap}.kbq-code-block.kbq-code-block_hide-line-numbers .hljs-ln-line.hljs-ln-numbers{display:none}.kbq-code-block.kbq-code-block_soft-wrap .kbq-code-block__code{white-space:pre-wrap}.kbq-code-block.kbq-code-block_view-all .kbq-code-block__content{max-height:unset;overflow:auto}.kbq-code-block.kbq-code-block_hide-tabs .kbq-code-block__header{padding:0}.kbq-code-block.kbq-code-block_hide-tabs .kbq-code-block__actionbar{display:none;position:absolute;top:0;right:0;padding:var(--kbq-size-s) var(--kbq-size-m)}.kbq-code-block.kbq-code-block_hide-tabs .kbq-code-block__content{position:relative}.kbq-code-block.kbq-code-block_hide-tabs .kbq-code-block__content .kbq-code-block__code{padding:var(--kbq-code-block-size-no-header-content-padding-vertical) var(--kbq-code-block-size-no-header-content-padding-horizontal)}.kbq-code-block.kbq-code-block_hide-tabs .kbq-code-block__content .hljs-ln-numbers{padding-right:var(--kbq-code-block-size-no-header-content-content-gap-horizontal)}.kbq-code-block.kbq-code-block_show-actionbar .kbq-code-block__actionbar{display:flex}.kbq-code-block:not(:has(.kbq-code-block__view-all)) .kbq-code-block__content{overflow:auto}.kbq-code-block .kbq-code-block__view-all{display:flex;justify-content:center;width:100%;position:absolute;bottom:0;border-radius:var(--kbq-code-block-size-container-border-radius)}.kbq-code-block .kbq-code-block__view-all .kbq-code-block__view-all__wrapper{border-radius:var(--kbq-size-border-radius)}.kbq-code-block .kbq-code-block__view-all.kbq-code-block__view-all_collapsed{padding-top:var(--kbq-code-block-size-collapse-collapsed-padding-top);padding-bottom:var(--kbq-code-block-size-collapse-collapsed-padding-bottom)}.kbq-code-block .kbq-code-block__view-all.kbq-code-block__view-all_expanded{padding-top:var(--kbq-code-block-size-collapse-expanded-padding-top);margin-bottom:var(--kbq-code-block-size-collapse-expanded-padding-bottom)}.kbq-code-block.kbq-code-block_no-border{border-color:transparent!important}.kbq-code-block .hljs-addition{background-color:var(--kbq-code-block-hljs-addition-background);color:var(--kbq-code-block-hljs-addition-color)}.kbq-code-block .hljs-attr{background-color:var(--kbq-code-block-hljs-attr-background);color:var(--kbq-code-block-hljs-attr-color)}.kbq-code-block .hljs-attribute{background-color:var(--kbq-code-block-hljs-attribute-background);color:var(--kbq-code-block-hljs-attribute-color)}.kbq-code-block .hljs-built_in{background-color:var(--kbq-code-block-hljs-built-in-background);color:var(--kbq-code-block-hljs-built-in-color)}.kbq-code-block .hljs-bullet{background-color:var(--kbq-code-block-hljs-bullet-background);color:var(--kbq-code-block-hljs-bullet-color)}.kbq-code-block .hljs-char-escape{background-color:var(--kbq-code-block-hljs-char-escape-background);color:var(--kbq-code-block-hljs-char-escape-color)}.kbq-code-block .hljs-class{background-color:var(--kbq-code-block-hljs-class-background);color:var(--kbq-code-block-hljs-class-color)}.kbq-code-block .hljs-code{background-color:var(--kbq-code-block-hljs-code-background);color:var(--kbq-code-block-hljs-code-color)}.kbq-code-block .hljs-comment{background-color:var(--kbq-code-block-hljs-comment-background);color:var(--kbq-code-block-hljs-comment-color)}.kbq-code-block .hljs-deletion{background-color:var(--kbq-code-block-hljs-deletion-background);color:var(--kbq-code-block-hljs-deletion-color)}.kbq-code-block .hljs-doctag{background-color:var(--kbq-code-block-hljs-doctag-background);color:var(--kbq-code-block-hljs-doctag-color)}.kbq-code-block .hljs-emphasis{background-color:var(--kbq-code-block-hljs-emphasis-background);color:var(--kbq-code-block-hljs-emphasis-color)}.kbq-code-block .hljs-formula{background-color:var(--kbq-code-block-hljs-formula-background);color:var(--kbq-code-block-hljs-formula-color)}.kbq-code-block .hljs-function{background-color:var(--kbq-code-block-hljs-function-background);color:var(--kbq-code-block-hljs-function-color)}.kbq-code-block .hljs-keyword{background-color:var(--kbq-code-block-hljs-keyword-background);color:var(--kbq-code-block-hljs-keyword-color)}.kbq-code-block .hljs-link{background-color:var(--kbq-code-block-hljs-link-background);color:var(--kbq-code-block-hljs-link-color)}.kbq-code-block .hljs-literal{background-color:var(--kbq-code-block-hljs-literal-background);color:var(--kbq-code-block-hljs-literal-color)}.kbq-code-block .hljs-meta{background-color:var(--kbq-code-block-hljs-meta-background);color:var(--kbq-code-block-hljs-meta-color)}.kbq-code-block .hljs-meta-keyword{background-color:var(--kbq-code-block-hljs-meta-keyword-background);color:var(--kbq-code-block-hljs-meta-keyword-color)}.kbq-code-block .hljs-meta-string{background-color:var(--kbq-code-block-hljs-meta-string-background);color:var(--kbq-code-block-hljs-meta-string-color)}.kbq-code-block .hljs-meta-prompt{background-color:var(--kbq-code-block-hljs-meta-prompt-background);color:var(--kbq-code-block-hljs-meta-prompt-color)}.kbq-code-block .hljs-name{background-color:var(--kbq-code-block-hljs-name-background);color:var(--kbq-code-block-hljs-name-color)}.kbq-code-block .hljs-number{background-color:var(--kbq-code-block-hljs-number-background);color:var(--kbq-code-block-hljs-number-color)}.kbq-code-block .hljs-operator{background-color:var(--kbq-code-block-hljs-operator-background);color:var(--kbq-code-block-hljs-operator-color)}.kbq-code-block .hljs-params{background-color:var(--kbq-code-block-hljs-params-background);color:var(--kbq-code-block-hljs-params-color)}.kbq-code-block .hljs-property{background-color:var(--kbq-code-block-hljs-property-background);color:var(--kbq-code-block-hljs-property-color)}.kbq-code-block .hljs-punctuation{background-color:var(--kbq-code-block-hljs-punctuation-background);color:var(--kbq-code-block-hljs-punctuation-color)}.kbq-code-block .hljs-quote{background-color:var(--kbq-code-block-hljs-quote-background);color:var(--kbq-code-block-hljs-quote-color)}.kbq-code-block .hljs-regexp{background-color:var(--kbq-code-block-hljs-regexp-background);color:var(--kbq-code-block-hljs-regexp-color)}.kbq-code-block .hljs-section{background-color:var(--kbq-code-block-hljs-section-background);color:var(--kbq-code-block-hljs-section-color)}.kbq-code-block .hljs-selector-attr{background-color:var(--kbq-code-block-hljs-selector-attr-background);color:var(--kbq-code-block-hljs-selector-attr-color)}.kbq-code-block .hljs-selector-class{background-color:var(--kbq-code-block-hljs-selector-class-background);color:var(--kbq-code-block-hljs-selector-class-color)}.kbq-code-block .hljs-selector-id{background-color:var(--kbq-code-block-hljs-selector-id-background);color:var(--kbq-code-block-hljs-selector-id-color)}.kbq-code-block .hljs-selector-pseudo{background-color:var(--kbq-code-block-hljs-selector-pseudo-background);color:var(--kbq-code-block-hljs-selector-pseudo-color)}.kbq-code-block .hljs-selector-tag{background-color:var(--kbq-code-block-hljs-selector-tag-background);color:var(--kbq-code-block-hljs-selector-tag-color)}.kbq-code-block .hljs-string{background-color:var(--kbq-code-block-hljs-string-background);color:var(--kbq-code-block-hljs-string-color)}.kbq-code-block .hljs-strong{background-color:var(--kbq-code-block-hljs-strong-background);color:var(--kbq-code-block-hljs-strong-color)}.kbq-code-block .hljs-subst{background-color:var(--kbq-code-block-hljs-subst-background);color:var(--kbq-code-block-hljs-subst-color)}.kbq-code-block .hljs-symbol{background-color:var(--kbq-code-block-hljs-symbol-background);color:var(--kbq-code-block-hljs-symbol-color)}.kbq-code-block .hljs-tag{background-color:var(--kbq-code-block-hljs-tag-background);color:var(--kbq-code-block-hljs-tag-color)}.kbq-code-block .hljs-template-tag{background-color:var(--kbq-code-block-hljs-template-tag-background);color:var(--kbq-code-block-hljs-template-tag-color)}.kbq-code-block .hljs-template-variable{background-color:var(--kbq-code-block-hljs-template-variable-background);color:var(--kbq-code-block-hljs-template-variable-color)}.kbq-code-block .hljs-title{background-color:var(--kbq-code-block-hljs-title-background);color:var(--kbq-code-block-hljs-title-color)}.kbq-code-block .hljs-title-class{background-color:var(--kbq-code-block-hljs-title-class-background);color:var(--kbq-code-block-hljs-title-class-color)}.kbq-code-block .hljs-title-class-inherited{background-color:var(--kbq-code-block-hljs-title-class-inherited-background);color:var(--kbq-code-block-hljs-title-class-inherited-color)}.kbq-code-block .hljs-title-function{background-color:var(--kbq-code-block-hljs-title-function-background);color:var(--kbq-code-block-hljs-title-function-color)}.kbq-code-block .hljs-title-function-invoke{background-color:var(--kbq-code-block-hljs-title-function-invoke-background);color:var(--kbq-code-block-hljs-title-function-invoke-color)}.kbq-code-block .hljs-type{background-color:var(--kbq-code-block-hljs-type-background);color:var(--kbq-code-block-hljs-type-color)}.kbq-code-block .hljs-variable{background-color:var(--kbq-code-block-hljs-variable-background);color:var(--kbq-code-block-hljs-variable-color)}.kbq-code-block .hljs-variable-constant{background-color:var(--kbq-code-block-hljs-variable-constant-background);color:var(--kbq-code-block-hljs-variable-constant-color)}.kbq-code-block .hljs-variable-language{background-color:var(--kbq-code-block-hljs-variable-language-background);color:var(--kbq-code-block-hljs-variable-language-color)}.kbq-code-block .hljs-ln-n{color:var(--kbq-code-block-hljs-line-numbers-color)}.kbq-code-block.kbq-code-block_outline{background:var(--kbq-code-block-outline-container-background);border-color:var(--kbq-code-block-outline-container-border-color)}.kbq-code-block.kbq-code-block_outline .kbq-code-block__header{background:var(--kbq-code-block-outline-header-background)}.kbq-code-block.kbq-code-block_outline .kbq-code-block__actionbar{background:var(--kbq-code-block-outline-actionbar-background)}.kbq-code-block.kbq-code-block_outline.kbq-code-block_header-with-shadow .kbq-code-block__header{box-shadow:var(--kbq-code-block-outline-header-scroll-shadow)}.kbq-code-block.kbq-code-block_outline.kbq-code-block_hide-tabs .kbq-code-block__actionbar{background:transparent}.kbq-code-block.kbq-code-block_outline.kbq-code-block_hide-tabs .kbq-code-block__actionbar .kbq-code-block__actionbar__fade-gradient{background:var(--kbq-code-block-outline-actionbar-fade-gradient)}.kbq-code-block.kbq-code-block_outline.kbq-code-block_hide-tabs .kbq-code-block__actionbar .kbq-code-block__actionbar__button-stack{background:var(--kbq-code-block-outline-actionbar-background)}.kbq-code-block.kbq-code-block_outline .kbq-code-block__view-all .kbq-code-block__view-all__wrapper{background:var(--kbq-code-block-outline-collapse-button-expand-background);opacity:90%}.kbq-code-block.kbq-code-block_outline .kbq-code-block__view-all.kbq-code-block__view-all_expanded{background:var(--kbq-code-block-outline-collapse-expanded-background)}.kbq-code-block.kbq-code-block_outline .kbq-code-block__view-all.kbq-code-block__view-all_collapsed{background:var(--kbq-code-block-outline-collapse-collapsed-background)}.kbq-code-block.kbq-code-block_filled{background:var(--kbq-code-block-filled-container-background);border-color:var(--kbq-code-block-filled-container-border-color)}.kbq-code-block.kbq-code-block_filled .kbq-code-block__header{background:var(--kbq-code-block-filled-header-background)}.kbq-code-block.kbq-code-block_filled .kbq-code-block__actionbar{background:var(--kbq-code-block-filled-actionbar-background)}.kbq-code-block.kbq-code-block_filled.kbq-code-block_header-with-shadow .kbq-code-block__header{box-shadow:var(--kbq-code-block-filled-header-scroll-shadow)}.kbq-code-block.kbq-code-block_filled.kbq-code-block_hide-tabs .kbq-code-block__actionbar{background:transparent}.kbq-code-block.kbq-code-block_filled.kbq-code-block_hide-tabs .kbq-code-block__actionbar .kbq-code-block__actionbar__fade-gradient{background:var(--kbq-code-block-filled-actionbar-fade-gradient)}.kbq-code-block.kbq-code-block_filled.kbq-code-block_hide-tabs .kbq-code-block__actionbar .kbq-code-block__actionbar__button-stack{background:var(--kbq-code-block-filled-actionbar-background)}.kbq-code-block.kbq-code-block_filled .kbq-code-block__view-all .kbq-code-block__view-all__wrapper{background:var(--kbq-code-block-filled-collapse-button-expand-background);opacity:90%}.kbq-code-block.kbq-code-block_filled .kbq-code-block__view-all.kbq-code-block__view-all_expanded{background:var(--kbq-code-block-filled-collapse-expanded-background)}.kbq-code-block.kbq-code-block_filled .kbq-code-block__view-all.kbq-code-block__view-all_collapsed{background:var(--kbq-code-block-filled-collapse-collapsed-background)}.kbq-code-block .kbq-code-block__content{border-color:transparent}.kbq-code-block .kbq-code-block__content.cdk-keyboard-focused{outline:none;border-color:var(--kbq-states-line-focus-theme)}.kbq-code-block{font-size:var(--kbq-typography-mono-codeblock-font-size);font-weight:var(--kbq-typography-mono-codeblock-font-weight);line-height:var(--kbq-typography-mono-codeblock-line-height);font-family:var(--kbq-typography-mono-codeblock-font-family);text-transform:var(--kbq-typography-mono-codeblock-text-transform);font-feature-settings:var(--kbq-typography-mono-codeblock-font-feature-settings);letter-spacing:var(--kbq-typography-mono-codeblock-letter-spacing)}.kbq-code-block .kbq-code-block__content,.kbq-code-block .kbq-code-block__content .kbq-code-block__code{font:inherit}\n", ".kbq-code-block{--kbq-code-block-size-container-border-width: 1px;--kbq-code-block-size-container-border-radius: var(--kbq-size-m);--kbq-code-block-size-with-header-content-padding-top: var(--kbq-size-xxs);--kbq-code-block-size-with-header-content-padding-bottom: var(--kbq-size-l);--kbq-code-block-size-with-header-content-padding-horizontal: var(--kbq-size-xl);--kbq-code-block-size-with-header-content-content-gap-horizontal: var(--kbq-size-m);--kbq-code-block-size-no-header-content-padding-vertical: 14px;--kbq-code-block-size-no-header-content-padding-horizontal: var(--kbq-size-xl);--kbq-code-block-size-no-header-content-content-gap-horizontal: var(--kbq-size-m);--kbq-code-block-size-header-content-gap-horizontal: var(--kbq-size-l);--kbq-code-block-size-actionbar-content-gap-horizontal: var(--kbq-size-3xs);--kbq-code-block-size-actionbar-fade-gradient-width: var(--kbq-size-3xl);--kbq-code-block-size-collapse-expanded-padding-top: 0;--kbq-code-block-size-collapse-expanded-padding-bottom: var(--kbq-size-l);--kbq-code-block-size-collapse-collapsed-padding-top: var(--kbq-size-3xl);--kbq-code-block-size-collapse-collapsed-padding-bottom: var(--kbq-size-l);--kbq-code-block-font-hljs-addition-font-style: null;--kbq-code-block-font-hljs-addition-font-weight: null;--kbq-code-block-font-hljs-attr-font-style: null;--kbq-code-block-font-hljs-attr-font-weight: null;--kbq-code-block-font-hljs-attribute-font-style: null;--kbq-code-block-font-hljs-attribute-font-weight: null;--kbq-code-block-font-hljs-built-in-font-style: null;--kbq-code-block-font-hljs-built-in-font-weight: null;--kbq-code-block-font-hljs-bullet-font-style: null;--kbq-code-block-font-hljs-bullet-font-weight: null;--kbq-code-block-font-hljs-char-escape-font-style: null;--kbq-code-block-font-hljs-char-escape-font-weight: null;--kbq-code-block-font-hljs-class-font-style: null;--kbq-code-block-font-hljs-class-font-weight: null;--kbq-code-block-font-hljs-code-font-style: null;--kbq-code-block-font-hljs-code-font-weight: null;--kbq-code-block-font-hljs-comment-font-style: null;--kbq-code-block-font-hljs-comment-font-weight: null;--kbq-code-block-font-hljs-deletion-font-style: null;--kbq-code-block-font-hljs-deletion-font-weight: null;--kbq-code-block-font-hljs-doctag-font-style: null;--kbq-code-block-font-hljs-doctag-font-weight: null;--kbq-code-block-font-hljs-emphasis-font-style: null;--kbq-code-block-font-hljs-emphasis-font-weight: null;--kbq-code-block-font-hljs-formula-font-style: null;--kbq-code-block-font-hljs-formula-font-weight: null;--kbq-code-block-font-hljs-function-font-style: null;--kbq-code-block-font-hljs-function-font-weight: null;--kbq-code-block-font-hljs-keyword-font-style: null;--kbq-code-block-font-hljs-keyword-font-weight: null;--kbq-code-block-font-hljs-link-font-style: null;--kbq-code-block-font-hljs-link-font-weight: null;--kbq-code-block-font-hljs-literal-font-style: null;--kbq-code-block-font-hljs-literal-font-weight: null;--kbq-code-block-font-hljs-meta-font-style: null;--kbq-code-block-font-hljs-meta-font-weight: null;--kbq-code-block-font-hljs-meta-keyword-font-style: null;--kbq-code-block-font-hljs-meta-keyword-font-weight: null;--kbq-code-block-font-hljs-meta-string-font-style: null;--kbq-code-block-font-hljs-meta-string-font-weight: null;--kbq-code-block-font-hljs-meta-prompt-font-style: null;--kbq-code-block-font-hljs-meta-prompt-font-weight: null;--kbq-code-block-font-hljs-name-font-style: null;--kbq-code-block-font-hljs-name-font-weight: null;--kbq-code-block-font-hljs-number-font-style: null;--kbq-code-block-font-hljs-number-font-weight: null;--kbq-code-block-font-hljs-operator-font-style: null;--kbq-code-block-font-hljs-operator-font-weight: null;--kbq-code-block-font-hljs-params-font-style: null;--kbq-code-block-font-hljs-params-font-weight: null;--kbq-code-block-font-hljs-property-font-style: null;--kbq-code-block-font-hljs-property-font-weight: null;--kbq-code-block-font-hljs-punctuation-font-style: null;--kbq-code-block-font-hljs-punctuation-font-weight: null;--kbq-code-block-font-hljs-quote-font-style: null;--kbq-code-block-font-hljs-quote-font-weight: null;--kbq-code-block-font-hljs-regexp-font-style: null;--kbq-code-block-font-hljs-regexp-font-weight: null;--kbq-code-block-font-hljs-section-font-style: null;--kbq-code-block-font-hljs-section-font-weight: null;--kbq-code-block-font-hljs-selector-attr-font-style: null;--kbq-code-block-font-hljs-selector-attr-font-weight: null;--kbq-code-block-font-hljs-selector-class-font-style: null;--kbq-code-block-font-hljs-selector-class-font-weight: null;--kbq-code-block-font-hljs-selector-id-font-style: null;--kbq-code-block-font-hljs-selector-id-font-weight: null;--kbq-code-block-font-hljs-selector-pseudo-font-style: null;--kbq-code-block-font-hljs-selector-pseudo-font-weight: null;--kbq-code-block-font-hljs-selector-tag-font-style: null;--kbq-code-block-font-hljs-selector-tag-font-weight: null;--kbq-code-block-font-hljs-string-font-style: null;--kbq-code-block-font-hljs-string-font-weight: null;--kbq-code-block-font-hljs-strong-font-style: null;--kbq-code-block-font-hljs-strong-font-weight: null;--kbq-code-block-font-hljs-subst-font-style: null;--kbq-code-block-font-hljs-subst-font-weight: null;--kbq-code-block-font-hljs-symbol-font-style: null;--kbq-code-block-font-hljs-symbol-font-weight: null;--kbq-code-block-font-hljs-tag-font-style: null;--kbq-code-block-font-hljs-tag-font-weight: null;--kbq-code-block-font-hljs-template-tag-font-style: null;--kbq-code-block-font-hljs-template-tag-font-weight: null;--kbq-code-block-font-hljs-template-variable-font-style: null;--kbq-code-block-font-hljs-template-variable-font-weight: null;--kbq-code-block-font-hljs-title-font-style: null;--kbq-code-block-font-hljs-title-font-weight: null;--kbq-code-block-font-hljs-title-class-font-style: normal;--kbq-code-block-font-hljs-title-class-font-weight: 500;--kbq-code-block-font-hljs-title-class-inherited-font-style: null;--kbq-code-block-font-hljs-title-class-inherited-font-weight: null;--kbq-code-block-font-hljs-title-function-font-style: null;--kbq-code-block-font-hljs-title-function-font-weight: null;--kbq-code-block-font-hljs-title-function-invoke-font-style: null;--kbq-code-block-font-hljs-title-function-invoke-font-weight: null;--kbq-code-block-font-hljs-type-font-style: null;--kbq-code-block-font-hljs-type-font-weight: null;--kbq-code-block-font-hljs-variable-font-style: null;--kbq-code-block-font-hljs-variable-font-weight: null;--kbq-code-block-font-hljs-variable-constant-font-style: null;--kbq-code-block-font-hljs-variable-constant-font-weight: null;--kbq-code-block-font-hljs-variable-language-font-style: null;--kbq-code-block-font-hljs-variable-language-font-weight: null;--kbq-code-block-filled-container-background: var(--kbq-background-bg-secondary);--kbq-code-block-filled-container-border-color: transparent;--kbq-code-block-filled-header-background: var(--kbq-background-bg-secondary);--kbq-code-block-filled-header-scroll-shadow: var(--kbq-shadow-overflow-normal-bottom);--kbq-code-block-filled-actionbar-fade-gradient: linear-gradient( 90deg, transparent, var(--kbq-background-bg-secondary) );--kbq-code-block-filled-actionbar-background: var(--kbq-background-bg-secondary);--kbq-code-block-filled-collapse-expanded-background: transparent;--kbq-code-block-filled-collapse-collapsed-background: linear-gradient( 180deg, transparent, var(--kbq-background-bg-secondary) 100% );--kbq-code-block-filled-collapse-button-expand-background: var(--kbq-background-bg-secondary);--kbq-code-block-outline-container-background: var(--kbq-background-card);--kbq-code-block-outline-container-border-color: var(--kbq-divider-color, var(--kbq-line-contrast-less));--kbq-code-block-outline-header-background: var(--kbq-background-card);--kbq-code-block-outline-header-scroll-shadow: var(--kbq-shadow-overflow-normal-bottom);--kbq-code-block-outline-actionbar-fade-gradient: linear-gradient(90deg, transparent, var(--kbq-background-card));--kbq-code-block-outline-actionbar-background: var(--kbq-background-card);--kbq-code-block-outline-collapse-expanded-background: transparent;--kbq-code-block-outline-collapse-collapsed-background: linear-gradient( 180deg, transparent, var(--kbq-background-bg) 100% );--kbq-code-block-outline-collapse-button-expand-background: var(--kbq-background-card);--kbq-code-block-hljs-addition-background: var(--kbq-palette-green-95);--kbq-code-block-hljs-addition-color: var(--kbq-palette-green-25);--kbq-code-block-hljs-attr-background: null;--kbq-code-block-hljs-attr-color: null;--kbq-code-block-hljs-attribute-background: null;--kbq-code-block-hljs-attribute-color: null;--kbq-code-block-hljs-built-in-background: null;--kbq-code-block-hljs-built-in-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-bullet-background: null;--kbq-code-block-hljs-bullet-color: null;--kbq-code-block-hljs-char-escape-background: null;--kbq-code-block-hljs-char-escape-color: null;--kbq-code-block-hljs-class-background: null;--kbq-code-block-hljs-class-color: null;--kbq-code-block-hljs-code-background: null;--kbq-code-block-hljs-code-color: null;--kbq-code-block-hljs-comment-background: null;--kbq-code-block-hljs-comment-color: var(--kbq-palette-grey-60);--kbq-code-block-hljs-deletion-background: var(--kbq-palette-red-95);--kbq-code-block-hljs-deletion-color: var(--kbq-palette-red-35);--kbq-code-block-hljs-doctag-background: null;--kbq-code-block-hljs-doctag-color: null;--kbq-code-block-hljs-emphasis-background: null;--kbq-code-block-hljs-emphasis-color: null;--kbq-code-block-hljs-formula-background: null;--kbq-code-block-hljs-formula-color: null;--kbq-code-block-hljs-function-background: null;--kbq-code-block-hljs-function-color: null;--kbq-code-block-hljs-keyword-background: null;--kbq-code-block-hljs-keyword-color: null;--kbq-code-block-hljs-line-numbers-color: var(--kbq-foreground-contrast-secondary);--kbq-code-block-hljs-link-background: null;--kbq-code-block-hljs-link-color: null;--kbq-code-block-hljs-literal-background: null;--kbq-code-block-hljs-literal-color: var(--kbq-palette-purple-30);--kbq-code-block-hljs-meta-background: null;--kbq-code-block-hljs-meta-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-meta-keyword-background: null;--kbq-code-block-hljs-meta-keyword-color: null;--kbq-code-block-hljs-meta-string-background: null;--kbq-code-block-hljs-meta-string-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-meta-prompt-background: null;--kbq-code-block-hljs-meta-prompt-color: null;--kbq-code-block-hljs-name-background: null;--kbq-code-block-hljs-name-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-number-background: null;--kbq-code-block-hljs-number-color: var(--kbq-palette-purple-30);--kbq-code-block-hljs-operator-background: null;--kbq-code-block-hljs-operator-color: null;--kbq-code-block-hljs-params-background: null;--kbq-code-block-hljs-params-color: null;--kbq-code-block-hljs-property-background: null;--kbq-code-block-hljs-property-color: null;--kbq-code-block-hljs-punctuation-background: null;--kbq-code-block-hljs-punctuation-color: null;--kbq-code-block-hljs-quote-background: null;--kbq-code-block-hljs-quote-color: null;--kbq-code-block-hljs-regexp-background: null;--kbq-code-block-hljs-regexp-color: var(--kbq-palette-green-25);--kbq-code-block-hljs-section-background: null;--kbq-code-block-hljs-section-color: null;--kbq-code-block-hljs-selector-attr-background: null;--kbq-code-block-hljs-selector-attr-color: null;--kbq-code-block-hljs-selector-class-background: null;--kbq-code-block-hljs-selector-class-color: null;--kbq-code-block-hljs-selector-id-background: null;--kbq-code-block-hljs-selector-id-color: null;--kbq-code-block-hljs-selector-pseudo-background: null;--kbq-code-block-hljs-selector-pseudo-color: null;--kbq-code-block-hljs-selector-tag-background: null;--kbq-code-block-hljs-selector-tag-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-string-background: null;--kbq-code-block-hljs-string-color: var(--kbq-palette-green-25);--kbq-code-block-hljs-strong-background: null;--kbq-code-block-hljs-strong-color: null;--kbq-code-block-hljs-subst-background: null;--kbq-code-block-hljs-subst-color: null;--kbq-code-block-hljs-symbol-background: null;--kbq-code-block-hljs-symbol-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-tag-background: null;--kbq-code-block-hljs-tag-color: null;--kbq-code-block-hljs-template-tag-background: null;--kbq-code-block-hljs-template-tag-color: null;--kbq-code-block-hljs-template-variable-background: null;--kbq-code-block-hljs-template-variable-color: null;--kbq-code-block-hljs-title-background: null;--kbq-code-block-hljs-title-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-title-class-background: null;--kbq-code-block-hljs-title-class-color: null;--kbq-code-block-hljs-title-class-inherited-background: null;--kbq-code-block-hljs-title-class-inherited-color: null;--kbq-code-block-hljs-title-function-background: null;--kbq-code-block-hljs-title-function-color: null;--kbq-code-block-hljs-title-function-invoke-background: null;--kbq-code-block-hljs-title-function-invoke-color: null;--kbq-code-block-hljs-type-background: null;--kbq-code-block-hljs-type-color: null;--kbq-code-block-hljs-variable-background: null;--kbq-code-block-hljs-variable-color: null;--kbq-code-block-hljs-variable-constant-background: null;--kbq-code-block-hljs-variable-constant-color: null;--kbq-code-block-hljs-variable-language-background: null;--kbq-code-block-hljs-variable-language-color: null;--kbq-code-block-tab-size: 4}\n"] }]
|
|
342
|
+
}], ctorParameters: () => [], propDecorators: { copyButtonTooltip: [{
|
|
343
|
+
type: ViewChild,
|
|
344
|
+
args: ['copyButtonTooltip']
|
|
345
|
+
}], scrollableCodeContent: [{
|
|
346
|
+
type: ViewChild,
|
|
347
|
+
args: [CdkScrollable]
|
|
348
|
+
}], lineNumbers: [{
|
|
349
|
+
type: Input,
|
|
350
|
+
args: [{ transform: booleanAttribute }]
|
|
351
|
+
}], filled: [{
|
|
352
|
+
type: Input,
|
|
353
|
+
args: [{ transform: booleanAttribute }]
|
|
354
|
+
}], canToggleSoftWrap: [{
|
|
355
|
+
type: Input,
|
|
356
|
+
args: [{ transform: booleanAttribute }]
|
|
357
|
+
}], softWrap: [{
|
|
358
|
+
type: Input,
|
|
359
|
+
args: [{ transform: booleanAttribute }]
|
|
360
|
+
}], softWrapChange: [{
|
|
361
|
+
type: Output
|
|
362
|
+
}], viewAll: [{
|
|
363
|
+
type: Input,
|
|
364
|
+
args: [{ transform: booleanAttribute }]
|
|
365
|
+
}], viewAllChange: [{
|
|
366
|
+
type: Output
|
|
367
|
+
}], maxHeight: [{
|
|
368
|
+
type: Input,
|
|
369
|
+
args: [{ transform: numberAttribute }]
|
|
370
|
+
}], canLoad: [{
|
|
371
|
+
type: Input,
|
|
372
|
+
args: [{ transform: booleanAttribute }]
|
|
373
|
+
}], canDownload: [{
|
|
374
|
+
type: Input,
|
|
375
|
+
args: [{ transform: booleanAttribute }]
|
|
376
|
+
}], canCopy: [{
|
|
377
|
+
type: Input,
|
|
378
|
+
args: [{ transform: booleanAttribute }]
|
|
379
|
+
}], codeFiles: [{
|
|
380
|
+
type: Input
|
|
381
|
+
}], files: [{
|
|
382
|
+
type: Input
|
|
383
|
+
}], activeFileIndex: [{
|
|
384
|
+
type: Input,
|
|
385
|
+
args: [{ transform: numberAttribute }]
|
|
386
|
+
}], activeFileIndexChange: [{
|
|
387
|
+
type: Output
|
|
388
|
+
}], noBorder: [{
|
|
389
|
+
type: Input,
|
|
390
|
+
args: [{ transform: booleanAttribute }]
|
|
391
|
+
}], hideTabs: [{
|
|
392
|
+
type: Input,
|
|
393
|
+
args: [{ transform: booleanAttribute }]
|
|
394
|
+
}] } });
|
|
395
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1ibG9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvY29kZS1ibG9jay9jb2RlLWJsb2NrLnRzIiwiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9jb2RlLWJsb2NrL2NvZGUtYmxvY2suaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBRUgsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUNMLGVBQWUsRUFDZixNQUFNLEVBRU4sU0FBUyxFQUNULGVBQWUsRUFDZixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdFLE9BQU8sRUFDSCxrQkFBa0IsRUFFbEIsa0JBQWtCLEVBQ2xCLGNBQWMsRUFDakIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7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LFdBQVc7c0JBQWxELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBR0UsT0FBTztzQkFBOUMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFJbEMsU0FBUztzQkFEWixLQUFLO2dCQVdGLEtBQUs7c0JBRFIsS0FBSztnQkFvQmlDLGVBQWU7c0JBQXJELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQUVsQixxQkFBcUI7c0JBQXZDLE1BQU07Z0JBR2lDLFFBQVE7c0JBQS9DLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBUWxDLFFBQVE7c0JBRFgsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEExMXlNb2R1bGUsIEZvY3VzTW9uaXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IENsaXBib2FyZCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jbGlwYm9hcmQnO1xuaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHsgQ2RrU2Nyb2xsYWJsZSwgQ2RrU2Nyb2xsYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgaW5qZWN0LFxuICAgIEluamVjdGlvblRva2VuLFxuICAgIElucHV0LFxuICAgIG51bWJlckF0dHJpYnV0ZSxcbiAgICBPdXRwdXQsXG4gICAgUHJvdmlkZXIsXG4gICAgUmVuZGVyZXIyLFxuICAgIFNlY3VyaXR5Q29udGV4dCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEticUJ1dHRvbk1vZHVsZSwgS2JxQnV0dG9uU3R5bGVzIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQge1xuICAgIEtCUV9MT0NBTEVfU0VSVklDRSxcbiAgICBLYnFDb2RlQmxvY2tMb2NhbGVDb25maWd1cmF0aW9uLFxuICAgIEticUNvbXBvbmVudENvbG9ycyxcbiAgICBydVJVTG9jYWxlRGF0YVxufSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvY29yZSc7XG5pbXBvcnQgeyBLYnFJY29uTW9kdWxlIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2ljb24nO1xuaW1wb3J0IHsgS2JxVGFic01vZHVsZSB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy90YWJzJztcbmltcG9ydCB7IEticVRvb2xUaXBNb2R1bGUsIEticVRvb2x0aXBUcmlnZ2VyIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmcm9tRXZlbnQsIG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBLYnFDb2RlQmxvY2tIaWdobGlnaHQgfSBmcm9tICcuL2NvZGUtYmxvY2staGlnaGxpZ2h0JztcbmltcG9ydCB7IEticUNvZGVCbG9ja0ZpbGUgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqIExvY2FsaXphdGlvbiBjb25maWd1cmF0aW9uIHByb3ZpZGVyLiAqL1xuZXhwb3J0IGNvbnN0IEtCUV9DT0RFX0JMT0NLX0xPQ0FMRV9DT05GSUdVUkFUSU9OID0gbmV3IEluamVjdGlvblRva2VuPEticUNvZGVCbG9ja0xvY2FsZUNvbmZpZ3VyYXRpb24+KFxuICAgICdLQlFfQ09ERV9CTE9DS19MT0NBTEVfQ09ORklHVVJBVElPTicsXG4gICAgeyBmYWN0b3J5OiAoKSA9PiBydVJVTG9jYWxlRGF0YS5jb2RlQmxvY2sgfVxuKTtcblxuLyoqIFV0aWxpdHkgcHJvdmlkZXIgZm9yIGBLQlFfQ09ERV9CTE9DS19MT0NBTEVfQ09ORklHVVJBVElPTmAuICovXG5leHBvcnQgY29uc3Qga2JxQ29kZUJsb2NrTG9jYWxlQ29uZmlndXJhdGlvblByb3ZpZGVyID0gKGNvbmZpZ3VyYXRpb246IEticUNvZGVCbG9ja0xvY2FsZUNvbmZpZ3VyYXRpb24pOiBQcm92aWRlciA9PiAoe1xuICAgIHByb3ZpZGU6IEtCUV9DT0RFX0JMT0NLX0xPQ0FMRV9DT05GSUdVUkFUSU9OLFxuICAgIHVzZVZhbHVlOiBjb25maWd1cmF0aW9uXG59KTtcblxuLyoqIEZhbGxiYWNrIGZpbGUgbmFtZSBmb3IgY29kZSBibG9jayBpZiBmaWxlIG5hbWUgaXMgbm90IHNwZWNpZmllZC4gKi9cbmV4cG9ydCBjb25zdCBLQlFfQ09ERV9CTE9DS19GQUxMQkFDS19GSUxFX05BTUUgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPignS0JRX0NPREVfQkxPQ0tfRkFMTEJBQ0tfRklMRV9OQU1FJywge1xuICAgIGZhY3Rvcnk6ICgpID0+ICdjb2RlJ1xufSk7XG5cbi8qKiBVdGlsaXR5IHByb3ZpZGVyIGZvciBgS0JRX0NPREVfQkxPQ0tfRkFMTEJBQ0tfRklMRV9OQU1FYC4gKi9cbmV4cG9ydCBjb25zdCBrYnFDb2RlQmxvY2tGYWxsYmFja0ZpbGVOYW1lUHJvdmlkZXIgPSAoZmlsZU5hbWU6IHN0cmluZyk6IFByb3ZpZGVyID0+ICh7XG4gICAgcHJvdmlkZTogS0JRX0NPREVfQkxPQ0tfRkFMTEJBQ0tfRklMRV9OQU1FLFxuICAgIHVzZVZhbHVlOiBmaWxlTmFtZVxufSk7XG5cbi8qKlxuICogQ29tcG9uZW50IHdoaWNoIGhpZ2hsaWdodHMgYmxvY2tzIG9mIGNvZGUuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBLYnFUYWJzTW9kdWxlLFxuICAgICAgICBLYnFCdXR0b25Nb2R1bGUsXG4gICAgICAgIEticUNvZGVCbG9ja0hpZ2hsaWdodCxcbiAgICAgICAgQTExeU1vZHVsZSxcbiAgICAgICAgQ2RrU2Nyb2xsYWJsZU1vZHVsZSxcbiAgICAgICAgS2JxVG9vbFRpcE1vZHVsZSxcbiAgICAgICAgS2JxSWNvbk1vZHVsZVxuICAgIF0sXG4gICAgc2VsZWN0b3I6ICdrYnEtY29kZS1ibG9jaycsXG4gICAgZXhwb3J0QXM6ICdrYnFDb2RlQmxvY2snLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb2RlLWJsb2NrLmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NvZGUtYmxvY2suc2NzcycsICcuL2NvZGUtYmxvY2stdG9rZW5zLnNjc3MnXSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAna2JxLWNvZGUtYmxvY2snLFxuICAgICAgICAnW2NsYXNzLmticS1jb2RlLWJsb2NrX2ZpbGxlZF0nOiAnZmlsbGVkJyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtY29kZS1ibG9ja19vdXRsaW5lXSc6ICchZmlsbGVkJyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtY29kZS1ibG9ja19oaWRlLWxpbmUtbnVtYmVyc10nOiAnIWxpbmVOdW1iZXJzJyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtY29kZS1ibG9ja19oaWRlLXRhYnNdJzogJ2hpZGVUYWJzJyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtY29kZS1ibG9ja19uby1ib3JkZXJdJzogJ25vQm9yZGVyIHx8IGZpbGxlZCcsXG4gICAgICAgICdbY2xhc3Mua2JxLWNvZGUtYmxvY2tfc29mdC13cmFwXSc6ICdzb2Z0V3JhcCcsXG4gICAgICAgICdbY2xhc3Mua2JxLWNvZGUtYmxvY2tfdmlldy1hbGxdJzogJ3ZpZXdBbGwnXG4gICAgfSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEticUNvZGVCbG9jayBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICAgIEBWaWV3Q2hpbGQoJ2NvcHlCdXR0b25Ub29sdGlwJykgcHJpdmF0ZSByZWFkb25seSBjb3B5QnV0dG9uVG9vbHRpcD86IEticVRvb2x0aXBUcmlnZ2VyO1xuICAgIEBWaWV3Q2hpbGQoQ2RrU2Nyb2xsYWJsZSkgcmVhZG9ubHkgc2Nyb2xsYWJsZUNvZGVDb250ZW50OiBDZGtTY3JvbGxhYmxlO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gZGlzcGxheSBsaW5lIG51bWJlcnMuICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGxpbmVOdW1iZXJzID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0aGUgY29kZSBibG9jayBzaG91bGQgYmUgZmlsbGVkLiAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBmaWxsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBBZGRlZCBzb2Z0IHdyYXAgdG9nZ2xlIGJ1dHRvbi4gICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNhblRvZ2dsZVNvZnRXcmFwOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciBzZXF1ZW5jZXMgb2Ygd2hpdGVzcGFjZSBzaG91bGQgYmUgcHJlc2VydmVkLiAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzb2Z0V3JhcDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBgc29mdFdyYXBgIGlzIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHNvZnRXcmFwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHRvIHZpZXcgYWxsIHRoZSBjb2RlLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBoaWRkZW4uXG4gICAgICogV29ya3Mgb25seSB3aXRoIGBtYXhIZWlnaHRgIHByb3BlcnR5LlxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSB2aWV3QWxsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGB2aWV3QWxsYCBpcyBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSB2aWV3QWxsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqXG4gICAgICogTWF4aW11bSBoZWlnaHQgb2YgdGhlIGNvZGUgYmxvY2sgY29udGVudCwgb3RoZXIgcGFydHMgd2lsbCBiZSBoaWRkZW4uXG4gICAgICogQ2FuIGJlIHRvZ2dsZWQgYnkgYHZpZXdBbGxgIHByb3BlcnR5LlxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIG1heEhlaWdodDogbnVtYmVyO1xuXG4gICAgcHJvdGVjdGVkIGdldCBjYWxjdWxhdGVkTWF4SGVpZ2h0KCk6IG51bWJlciB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXhIZWlnaHQgPiAwICYmICF0aGlzLnZpZXdBbGwgPyB0aGlzLm1heEhlaWdodCA6IG51bGw7XG4gICAgfVxuXG4gICAgLyoqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBpbiBuZXh0IG1ham9yIHJlbGVhc2UsIHVzZSBgY2FuRG93bmxvYWRgIGluc3RlYWQuICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgc2V0IGNhbkxvYWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5jYW5Eb3dubG9hZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBBZGRlZCBkb3dubG9hZCBjb2RlIGJ1dHRvbi4gKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY2FuRG93bmxvYWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBBZGRlZCBjb3B5IGNvZGUgYnV0dG9uLiAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjYW5Db3B5OiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlbW92ZWQgaW4gbmV4dCBtYWpvciByZWxlYXNlLCB1c2UgYGZpbGVzYCBpbnN0ZWFkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNvZGVGaWxlcyhmaWxlczogS2JxQ29kZUJsb2NrRmlsZVtdKSB7XG4gICAgICAgIHRoaXMuZmlsZXMgPSBmaWxlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAVE9ETyBNYXJrIGFzIGByZXF1aXJlZGAsIGFmdGVyIHJlbW92aW5nIGBjb2RlRmlsZXNgXG4gICAgICpcbiAgICAgKiBGaWxlcyB0byBkaXNwbGF5LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGZpbGVzKGZpbGVzOiBLYnFDb2RlQmxvY2tGaWxlW10pIHtcbiAgICAgICAgdGhpcy5fZmlsZXMgPSBmaWxlcztcblxuICAgICAgICBpZiAodGhpcy5fZmlsZXMubGVuZ3RoIDwgdGhpcy5hY3RpdmVGaWxlSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3RlZFRhYkNoYW5nZSgwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maWxlcy5sZW5ndGggPT09IDEgJiYgIXRoaXMuX2ZpbGVzWzBdLmZpbGVuYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGVUYWJzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBmaWxlcygpOiBLYnFDb2RlQmxvY2tGaWxlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZmlsZXM6IEticUNvZGVCbG9ja0ZpbGVbXSA9IFtdO1xuXG4gICAgLyoqIERlZmluZXMgd2hpY2ggZmlsZSAoaW5kZXgpIGlzIGFjdGl2ZS4gKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBhY3RpdmVGaWxlSW5kZXggPSAwO1xuXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGFjdGl2ZUZpbGVJbmRleENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gaGlkZSBib3JkZXIuICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIG5vQm9yZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGhpZGUgaGVhZGVyIHRhYnMuXG4gICAgICogQWx3YXlzIGB0cnVlYCBpZiB0aGVyZSBpcyBvbmx5IG9uZSBmaWxlIHdpdGhvdXQgZmlsZW5hbWUuXG4gICAgICogTWFrZXMgYWN0aW9uYmFyIGZsb2F0aW5nIGlmIHRhYnMgYXJlIGhpZGRlbi5cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBzZXQgaGlkZVRhYnModmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5faGlkZVRhYnMgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLnNldHVwQWN0aW9uYmFyRGlzcGxheSgpO1xuICAgIH1cblxuICAgIGdldCBoaWRlVGFicygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZGVUYWJzO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2hpZGVUYWJzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogQ29tcG9uZW50IGxvY2FsZSBjb25maWd1cmF0aW9uLiAqL1xuICAgIHByb3RlY3RlZCBnZXQgbG9jYWxlQ29uZmlndXJhdGlvbigpOiBLYnFDb2RlQmxvY2tMb2NhbGVDb25maWd1cmF0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZUNvbmZpZ3VyYXRpb247XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbG9jYWxlQ29uZmlndXJhdGlvbjogS2JxQ29kZUJsb2NrTG9jYWxlQ29uZmlndXJhdGlvbiA9IGluamVjdChLQlFfQ09ERV9CTE9DS19MT0NBTEVfQ09ORklHVVJBVElPTik7XG5cbiAgICAvKiogQ29kZSBjb250ZW50IHRhYiBpbmRleC4gKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IGNvZGVDb250ZW50VGFiSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FuQ29kZUNvbnRlbnRCZUZvY3VzZWQgPyAwIDogLTE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb2RlIGNvbnRlbnQgY2FuIGJlIGZvY3VzZWQuXG4gICAgICpcbiAgICAgKiBUaGlzIGNoZWNrcyBpZiB0aGUgc2Nyb2xsYWJsZSBjb2RlIGNvbnRlbnQgZWxlbWVudCBpcyBwcmVzZW50LFxuICAgICAqIGhhcyBhIHNjcm9sbCwgYW5kIHRoZSBjYWxjdWxhdGVkIG1heGltdW0gaGVpZ2h0IGlzIG5vdCBzZXQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXQgY2FuQ29kZUNvbnRlbnRCZUZvY3VzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnNjcm9sbGFibGVDb2RlQ29udGVudD8uZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHJldHVybiBlbGVtZW50ICYmIHRoaXMuaGFzU2Nyb2xsKGVsZW1lbnQpICYmICF0aGlzLmNhbGN1bGF0ZWRNYXhIZWlnaHQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbXBvbmVudENvbG9yID0gS2JxQ29tcG9uZW50Q29sb3JzO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBidXR0b25TdHlsZSA9IEticUJ1dHRvblN0eWxlcztcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsZVNlcnZpY2UgPSBpbmplY3QoS0JRX0xPQ0FMRV9TRVJWSUNFLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwbGF0Zm9ybSA9IGluamVjdChQbGF0Zm9ybSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmb2N1c01vbml0b3IgPSBpbmplY3QoRm9jdXNNb25pdG9yKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNsaXBib2FyZCA9IGluamVjdChDbGlwYm9hcmQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9tU2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudCA9IGluamVjdDxEb2N1bWVudD4oRE9DVU1FTlQpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBmYWxsYmFja0ZpbGVOYW1lID0gaW5qZWN0KEtCUV9DT0RFX0JMT0NLX0ZBTExCQUNLX0ZJTEVfTkFNRSk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5sb2NhbGVTZXJ2aWNlPy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSh0aGlzLnVwZGF0ZUxvY2FsZVBhcmFtcyk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhhbmRsZVNjcm9sbCgpO1xuICAgICAgICB0aGlzLmhhbmRsZUhvdmVyKCk7XG5cbiAgICAgICAgLy8gU2V0dXAgaW5pdGlhbCBhY3Rpb25iYXIgZGlzcGxheSBzdGF0ZVxuICAgICAgICB0aGlzLnNldHVwQWN0aW9uYmFyRGlzcGxheSgpO1xuXG4gICAgICAgIHRoaXMuY29weUJ1dHRvblRvb2x0aXA/LnZpc2libGVDaGFuZ2UucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKChpc1Zpc2libGUpID0+IHtcbiAgICAgICAgICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvcHlCdXR0b25Ub29sdGlwIS5jb250ZW50ID0gdGhpcy5sb2NhbGVDb25maWd1cmF0aW9uLmNvcHlUb29sdGlwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSBgdmlld0FsbGAgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBXaGVuIGB2aWV3QWxsYCBpcyBzZXQgdG8gYHRydWVgLCB0aGUgY29udGVudCBvZiB0aGUgY29kZSBibG9jayB3aWxsIGJlXG4gICAgICogZGlzcGxheWVkIGluIGl0cyBlbnRpcmV0eS4gV2hlbiBzZXQgdG8gYGZhbHNlYCwgdGhlIGNvbnRlbnQgd2lsbCBiZVxuICAgICAqIGxpbWl0ZWQgdG8gdGhlIGBtYXhIZWlnaHRgIHByb3BlcnR5LiBJZiB0aGUgY29udGVudCBleGNlZWRzIHRoZVxuICAgICAqIGBtYXhIZWlnaHRgLCBpdCB3aWxsIGJlIHNjcm9sbGVkIHRvIHRoZSB0b3AgYW5kIHRoZSBgdmlld0FsbGAgYnV0dG9uXG4gICAgICogd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAgICovXG4gICAgdG9nZ2xlVmlld0FsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aWV3QWxsID0gIXRoaXMudmlld0FsbDtcblxuICAgICAgICBpZiAoIXRoaXMudmlld0FsbCkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxhYmxlQ29kZUNvbnRlbnQuc2Nyb2xsVG8oeyB0b3A6IDAsIGJlaGF2aW9yOiAnaW5zdGFudCcgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZpZXdBbGxDaGFuZ2UuZW1pdCh0aGlzLnZpZXdBbGwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgYHNvZnRXcmFwYCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIFdoZW4gYHNvZnRXcmFwYCBpcyBzZXQgdG8gYHRydWVgLCB0aGUgY29udGVudCBvZiB0aGUgY29kZSBibG9jayB3aWxsIGJlXG4gICAgICogd3JhcHBlZCBpZiBpdCBleGNlZWRzIHRoZSBoZWlnaHQgb2YgdGhlIGNvbXBvbmVudC4gV2hlbiBzZXQgdG8gYGZhbHNlYFxuICAgICAqIHRoZSBjb250ZW50IHdpbGwgbm90IGJlIHdyYXBwZWQuXG4gICAgICovXG4gICAgdG9nZ2xlU29mdFdyYXAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc29mdFdyYXAgPSAhdGhpcy5zb2Z0V3JhcDtcbiAgICAgICAgdGhpcy5zb2Z0V3JhcENoYW5nZS5lbWl0KHRoaXMuc29mdFdyYXApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgdGhlIGNoYW5nZSBvZiB0aGUgc2VsZWN0ZWQgdGFiIGJ5IHVwZGF0aW5nIHRoZSBhY3RpdmUgZmlsZSBpbmRleFxuICAgICAqIGFuZCBzY3JvbGxpbmcgdG8gdGhlIHRvcCBvZiB0aGUgc2Nyb2xsYWJsZSBjb250ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBuZXdseSBzZWxlY3RlZCB0YWIuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9uU2VsZWN0ZWRUYWJDaGFuZ2UoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVGaWxlSW5kZXggIT09IGluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUZpbGVJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVGaWxlSW5kZXhDaGFuZ2UuZW1pdCh0aGlzLmFjdGl2ZUZpbGVJbmRleCk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbGFibGVDb2RlQ29udGVudC5zY3JvbGxUbyh7IHRvcDogMCwgYmVoYXZpb3I6ICdpbnN0YW50JyB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgdGhlIGhvdmVyIGV2ZW50IG9uIHRoZSBjb2RlIGJsb2NrIGVsZW1lbnQgYW5kIHVwZGF0ZXMgdGhlIGFjdGlvbmJhciBkaXNwbGF5IGFjY29yZGluZ2x5LlxuICAgICAqL1xuICAgIHByaXZhdGUgaGFuZGxlSG92ZXIoKTogdm9pZCB7XG4gICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnbW91c2VlbnRlcicpLFxuICAgICAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnbW91c2VsZWF2ZScpXG4gICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMDApLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR1cEFjdGlvbmJhckRpc3BsYXkoZXZlbnQ/LnR5cGUgPT09ICdtb3VzZWVudGVyJyk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIHRoZSBzY3JvbGwgZXZlbnQgb24gdGhlIHNjcm9sbGFibGUgY29kZSBjb250ZW50IGVsZW1lbnQgYW5kIHVwZGF0ZXMgdGhlIGhlYWRlciBzaGFkb3cgYWNjb3JkaW5nbHkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBoYW5kbGVTY3JvbGwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2Nyb2xsYWJsZUNvZGVDb250ZW50XG4gICAgICAgICAgICAuZWxlbWVudFNjcm9sbGVkKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR1cEhlYWRlclNoYWRvdyh0aGlzLnNjcm9sbGFibGVDb2RlQ29udGVudC5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCd0b3AnKSA+IDApO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBvciByZW1vdmVzIHRoZSBzaGFkb3cgY2xhc3MgZnJvbSB0aGUgY29kZSBibG9jayBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIGNvbmRpdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzaG91bGRTaG93U2hhZG93IC0gQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBhZGQgb3IgcmVtb3ZlIHRoZSBzaGFkb3cgY2xhc3MuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXR1cEhlYWRlclNoYWRvdyhzaG91bGRTaG93U2hhZG93OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9ICdrYnEtY29kZS1ibG9ja19oZWFkZXItd2l0aC1zaGFkb3cnO1xuXG4gICAgICAgIGlmIChzaG91bGRTaG93U2hhZG93KSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgb3IgcmVtb3ZlcyB0aGUgYWN0aW9uYmFyIGRpc3BsYXkgY2xhc3MgZnJvbSB0aGUgY29kZSBibG9jayBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIGNvbmRpdGlvbi5cbiAgICAgKlxuICAgICAqIFRoZSBhY3Rpb25iYXIgaXMgYWx3YXlzIHZpc2libGUgb24gbW9iaWxlIGRldmljZXMgYW5kIHdoZW4gdGhlIHRhYnMgYXJlIHZpc2libGUuXG4gICAgICogT3RoZXJ3aXNlLCB0aGUgYWN0aW9uYmFyIGlzIG9ubHkgdmlzaWJsZSB3aGVuIHRoZSBtb3VzZSBpcyBob3ZlcmVkIG92ZXIgdGhlIGNvZGUgYmxvY2suXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2hvdWxkU2hvd0FjdGlvbmJhciAtIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGFjdGlvbmJhciBzaG91bGQgYmUgdmlzaWJsZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldHVwQWN0aW9uYmFyRGlzcGxheShzaG91bGRTaG93QWN0aW9uYmFyPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSAna2JxLWNvZGUtYmxvY2tfc2hvdy1hY3Rpb25iYXInO1xuXG4gICAgICAgIC8vIFNob3VsZCBhbHdheXMgc2hvdyBhY3Rpb25iYXIgb24gTW9iaWxlIGRldmljZXNcbiAgICAgICAgaWYgKHRoaXMucGxhdGZvcm0uSU9TIHx8IHRoaXMucGxhdGZvcm0uQU5EUk9JRCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgY2xhc3NOYW1lKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNob3VsZCBhbHdheXMgc2hvdyBhY3Rpb25iYXIgd2hlbiB0YWJzIGFyZSB2aXNpYmxlXG4gICAgICAgIGlmICghdGhpcy5oaWRlVGFicykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgY2xhc3NOYW1lKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2Ygc2hvdWxkU2hvd0FjdGlvbmJhciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaG91bGRTaG93QWN0aW9uYmFyKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRoZSBlbGVtZW50IGhhcyBzY3JvbGwuICovXG4gICAgcHJpdmF0ZSBoYXNTY3JvbGwoeyBzY3JvbGxIZWlnaHQsIHNjcm9sbFdpZHRoLCBjbGllbnRIZWlnaHQsIGNsaWVudFdpZHRoIH06IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzY3JvbGxIZWlnaHQgPiBjbGllbnRIZWlnaHQgfHwgc2Nyb2xsV2lkdGggPiBjbGllbnRXaWR0aDtcbiAgICB9XG5cbiAgICAvKiogSGFuZGxlcyB0aGUgZW50ZXIga2V5ZG93biBldmVudCBvbiBgdmlld0FsbGAgYnV0dG9uLiAqL1xuICAgIHByb3RlY3RlZCBvblZpZXdBbGxFbnRlcktleWRvd24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG9nZ2xlVmlld0FsbCgpO1xuICAgICAgICBpZiAodGhpcy5jYW5Db2RlQ29udGVudEJlRm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5zY3JvbGxhYmxlQ29kZUNvbnRlbnQuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQsICdrZXlib2FyZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVMb2NhbGVQYXJhbXMgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuX2xvY2FsZUNvbmZpZ3VyYXRpb24gPSB0aGlzLmxvY2FsZVNlcnZpY2U/LmdldFBhcmFtcygnY29kZUJsb2NrJyk7XG5cbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ29waWVzIHRoZSBmaWxlIGNvZGUgdG8gdGhlIGNsaXBib2FyZC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBjb3B5IHdhcyBzdWNjZXNzZnVsLCB0aGUgY29weSBidXR0b24gdG9vbHRpcCBjb250ZW50IGlzIHVwZGF0ZWRcbiAgICAgKiB0byBzaG93IHRoZSBcImNvcGllZFwiIG1lc3NhZ2UuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNvcHlDb2RlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWxlID0gdGhpcy5maWxlc1t0aGlzLmFjdGl2ZUZpbGVJbmRleF07XG4gICAgICAgIGlmICh0aGlzLmNsaXBib2FyZC5jb3B5KGZpbGUuY29udGVudCkgJiYgdGhpcy5jb3B5QnV0dG9uVG9vbHRpcCkge1xuICAgICAgICAgICAgdGhpcy5jb3B5QnV0dG9uVG9vbHRpcC5jb250ZW50ID0gdGhpcy5sb2NhbGVDb25maWd1cmF0aW9uLmNvcGllZFRvb2x0aXA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVucyB0aGUgZmlsZSBsaW5rIGluIGEgbmV3IHdpbmRvdy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb3BlbkxpbmsoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHdpbmRvdyA9IHRoaXMuZ2V0V2luZG93KCk7XG4gICAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLmZpbGVzW3RoaXMuYWN0aXZlRmlsZUluZGV4XTtcbiAgICAgICAgY29uc3Qgc2FmZVVSTCA9IHRoaXMuZG9tU2FuaXRpemVyLnNhbml0aXplKFNlY3VyaXR5Q29udGV4dC5VUkwsIGZpbGUubGluayEpO1xuICAgICAgICBpZiAoc2FmZVVSTCkge1xuICAgICAgICAgICAgd2luZG93Py5vcGVuKHNhZmVVUkwudG9TdHJpbmcoKSwgJ19ibGFuaycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRG93bmxvYWRzIHRoZSBmaWxlIGFzIGEgYmxvYi5cbiAgICAgKlxuICAgICAqIENyZWF0ZXMgYSBsaW5rIHdpdGggYSBibG9iIGFzIGhyZWYgYW5kIHRoZSBmaWxlIG5hbWUgYXMgZG93bmxvYWQgYXR0cmlidXRlLlxuICAgICAqIFRoZW4gc2ltdWxhdGVzIGEgY2xpY2sgZXZlbnQgb24gdGhlIGxpbmsgdG8gaW5pdGlhdGUgdGhlIGRvd25sb2FkLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBkb3dubG9hZENvZGUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLmZpbGVzW3RoaXMuYWN0aXZlRmlsZUluZGV4XTtcbiAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtmaWxlLmNvbnRlbnRdLCB7IHR5cGU6ICd0ZXh0L3BsYWluJyB9KTtcbiAgICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgY29uc3QgbGluayA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHVybCk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGUuZmlsZW5hbWUgfHwgdGhpcy5mYWxsYmFja0ZpbGVOYW1lKTtcbiAgICAgICAgbGluay5jbGljaygpO1xuICAgIH1cblxuICAgIC8qKiBVc2UgZGVmYXVsdFZpZXcgb2YgaW5qZWN0ZWQgZG9jdW1lbnQgaWYgYXZhaWxhYmxlIG9yIGZhbGxiYWNrIHRvIGdsb2JhbCB3aW5kb3cgcmVmZXJlbmNlICovXG4gICAgcHJpdmF0ZSBnZXRXaW5kb3coKTogV2luZG93IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50Py5kZWZhdWx0VmlldyB8fCB3aW5kb3c7XG4gICAgfVxufVxuIiwiQGxldCBmaWxlID0gZmlsZXNbYWN0aXZlRmlsZUluZGV4XTtcblxuPGRpdiBjbGFzcz1cImticS1jb2RlLWJsb2NrX19oZWFkZXJcIj5cbiAgICBAaWYgKCFoaWRlVGFicykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwia2JxLWNvZGUtYmxvY2tfX2hlYWRlci10YWJzXCI+XG4gICAgICAgICAgICA8ZGl2IGticVRhYk5hdkJhciB0cmFuc3BhcmVudCBbdGFiTmF2UGFuZWxdPVwidGFiUGFuZWxcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChmaWxlIG9mIGZpbGVzOyB0cmFjayBmaWxlOyBsZXQgaW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAga2JxVGFiTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJhY3RpdmVGaWxlSW5kZXggPT09IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWxlcy5sZW5ndGggPT09IDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0ZWRUYWJDaGFuZ2UoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZmlsZS5maWxlbmFtZSB8fCBmYWxsYmFja0ZpbGVOYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8ZGl2IGNsYXNzPVwia2JxLWNvZGUtYmxvY2tfX2FjdGlvbmJhclwiPlxuICAgICAgICBAaWYgKGhpZGVUYWJzKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2JxLWNvZGUtYmxvY2tfX2FjdGlvbmJhcl9fZmFkZS1ncmFkaWVudFwiPjwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImticS1jb2RlLWJsb2NrX19hY3Rpb25iYXJfX2J1dHRvbi1zdGFja1wiPlxuICAgICAgICAgICAgQGlmIChjYW5Ub2dnbGVTb2Z0V3JhcCkge1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAga2JxLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImticS1jb2RlLWJsb2NrX19hY3Rpb25iYXJfX3NvZnQtd3JhcC1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiY29tcG9uZW50Q29sb3IuQ29udHJhc3RcIlxuICAgICAgICAgICAgICAgICAgICBba2JxU3R5bGVdPVwiYnV0dG9uU3R5bGUuVHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICBba2JxVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvZnRXcmFwID8gbG9jYWxlQ29uZmlndXJhdGlvbi5zb2Z0V3JhcE9mZlRvb2x0aXAgOiBsb2NhbGVDb25maWd1cmF0aW9uLnNvZnRXcmFwT25Ub29sdGlwXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTb2Z0V3JhcCgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoc29mdFdyYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGticS1pY29uPVwia2JxLXdyYXAtdGV4dC1zbGFzaF8xNlwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBrYnEtaWNvbj1cImticS13cmFwLXRleHRfMTZcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChjYW5Eb3dubG9hZCkge1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAga2JxLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImticS1jb2RlLWJsb2NrX19hY3Rpb25iYXJfX2Rvd25sb2FkLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJjb21wb25lbnRDb2xvci5Db250cmFzdFwiXG4gICAgICAgICAgICAgICAgICAgIFtrYnFTdHlsZV09XCJidXR0b25TdHlsZS5UcmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgIFtrYnFUb29sdGlwXT1cImxvY2FsZUNvbmZpZ3VyYXRpb24uZG93bmxvYWRUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkQ29kZSgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxpIGticS1pY29uPVwia2JxLWFycm93LWRvd24tdG8tbGluZV8xNlwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChjYW5Db3B5KSB7XG4gICAgICAgICAgICAgICAgPGRpdiAjY29weUJ1dHRvblRvb2x0aXA9XCJrYnFUb29sdGlwXCIgW2ticVRvb2x0aXBdPVwibG9jYWxlQ29uZmlndXJhdGlvbi5jb3B5VG9vbHRpcFwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBrYnEtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImticS1jb2RlLWJsb2NrX19hY3Rpb25iYXJfX2NvcHktYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJjb21wb25lbnRDb2xvci5Db250cmFzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBba2JxU3R5bGVdPVwiYnV0dG9uU3R5bGUuVHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvcHlDb2RlKClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBrYnEtaWNvbj1cImticS1maWxlLW11bHRpcGxlLW9fMTZcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGZpbGUubGluaykge1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAga2JxLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImticS1jb2RlLWJsb2NrX19hY3Rpb25iYXJfX2xpbmstYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImNvbXBvbmVudENvbG9yLkNvbnRyYXN0XCJcbiAgICAgICAgICAgICAgICAgICAgW2ticVN0eWxlXT1cImJ1dHRvblN0eWxlLlRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2ticVRvb2x0aXBdPVwibG9jYWxlQ29uZmlndXJhdGlvbi5vcGVuRXh0ZXJuYWxTeXN0ZW1Ub29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5MaW5rKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGkga2JxLWljb249XCJrYnEtYXJyb3ctdXAtcmlnaHQtZnJvbS1zcXVhcmVfMTZcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxwcmVcbiAgICAjdGFiUGFuZWw9XCJrYnFUYWJOYXZQYW5lbFwiXG4gICAgY2RrTW9uaXRvckVsZW1lbnRGb2N1c1xuICAgIGNka1Njcm9sbGFibGVcbiAgICBrYnFUYWJOYXZQYW5lbFxuICAgIGNsYXNzPVwia2JxLWNvZGUtYmxvY2tfX2NvbnRlbnQga2JxLXNjcm9sbGJhclwiXG4gICAgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwiY2FsY3VsYXRlZE1heEhlaWdodFwiXG4gICAgW3RhYkluZGV4XT1cImNvZGVDb250ZW50VGFiSW5kZXhcIlxuPjxjb2RlIGticUNvZGVCbG9ja0hpZ2hsaWdodCBjbGFzcz1cImticS1jb2RlLWJsb2NrX19jb2RlXCIgW2ZpbGVdPVwiZmlsZVwiPjwvY29kZT48L3ByZT5cblxuQGlmIChtYXhIZWlnaHQpIHtcbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwia2JxLWNvZGUtYmxvY2tfX3ZpZXctYWxsXCJcbiAgICAgICAgW2NsYXNzLmticS1jb2RlLWJsb2NrX192aWV3LWFsbF9jb2xsYXBzZWRdPVwiIXZpZXdBbGxcIlxuICAgICAgICBbY2xhc3Mua2JxLWNvZGUtYmxvY2tfX3ZpZXctYWxsX2V4cGFuZGVkXT1cInZpZXdBbGxcIlxuICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImticS1jb2RlLWJsb2NrX192aWV3LWFsbF9fd3JhcHBlclwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGticS1idXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImticS1jb2RlLWJsb2NrX192aWV3LWFsbF9fYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbY29sb3JdPVwiY29tcG9uZW50Q29sb3IuVGhlbWVcIlxuICAgICAgICAgICAgICAgIFtrYnFTdHlsZV09XCJidXR0b25TdHlsZS5UcmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVZpZXdBbGwoKVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25WaWV3QWxsRW50ZXJLZXlkb3duKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBpZiAodmlld0FsbCkge1xuICAgICAgICAgICAgICAgICAgICA8aSBrYnEtaWNvbj1cImticS1jaGV2cm9uLXVwXzE2XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyBsb2NhbGVDb25maWd1cmF0aW9uLnZpZXdMZXNzVGV4dCB9fVxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICA8aSBrYnEtaWNvbj1cImticS1jaGV2cm9uLWRvd25fMTZcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIHt7IGxvY2FsZUNvbmZpZ3VyYXRpb24udmlld0FsbFRleHQgfX1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG59XG4iXX0=
|