@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.
Files changed (133) hide show
  1. package/autocomplete/autocomplete-trigger.directive.d.ts +0 -1
  2. package/autocomplete/autocomplete.scss +2 -10
  3. package/code-block/_code-block-theme.scss +35 -54
  4. package/code-block/code-block-highlight.d.ts +44 -0
  5. package/code-block/code-block-tokens.scss +7 -11
  6. package/code-block/code-block.d.ts +187 -0
  7. package/code-block/code-block.module.d.ts +2 -8
  8. package/code-block/code-block.scss +103 -127
  9. package/code-block/public-api.d.ts +3 -2
  10. package/code-block/types.d.ts +27 -0
  11. package/core/error/error-state-matcher.d.ts +3 -0
  12. package/core/locales/index.d.ts +1 -0
  13. package/core/locales/types.d.ts +11 -0
  14. package/core/pop-up/constants.d.ts +9 -0
  15. package/core/select/constants.d.ts +16 -4
  16. package/core/styles/theming/_scrollbar-theme.scss +2 -1
  17. package/esm2022/autocomplete/autocomplete-trigger.directive.mjs +7 -8
  18. package/esm2022/autocomplete/autocomplete.component.mjs +2 -2
  19. package/esm2022/code-block/code-block-highlight.mjs +416 -0
  20. package/esm2022/code-block/code-block.mjs +395 -0
  21. package/esm2022/code-block/code-block.module.mjs +9 -30
  22. package/esm2022/code-block/public-api.mjs +4 -3
  23. package/esm2022/code-block/types.mjs +2 -0
  24. package/esm2022/core/error/error-state-matcher.mjs +15 -2
  25. package/esm2022/core/locales/en-US.mjs +1 -1
  26. package/esm2022/core/locales/es-LA.mjs +1 -1
  27. package/esm2022/core/locales/fa-IR.mjs +1 -1
  28. package/esm2022/core/locales/index.mjs +2 -1
  29. package/esm2022/core/locales/pt-BR.mjs +1 -1
  30. package/esm2022/core/locales/ru-RU.mjs +1 -1
  31. package/esm2022/core/locales/types.mjs +2 -0
  32. package/esm2022/core/locales/zh-CN.mjs +1 -1
  33. package/esm2022/core/pop-up/constants.mjs +6 -1
  34. package/esm2022/core/select/constants.mjs +17 -5
  35. package/esm2022/core/version.mjs +2 -2
  36. package/esm2022/datepicker/calendar-header.component.mjs +1 -1
  37. package/esm2022/form-field/form-field.mjs +8 -8
  38. package/esm2022/loader-overlay/loader-overlay.component.mjs +6 -4
  39. package/esm2022/markdown/markdown.component.mjs +2 -2
  40. package/esm2022/modal/modal.component.mjs +5 -3
  41. package/esm2022/modal/modal.service.mjs +5 -2
  42. package/esm2022/modal/public-api.mjs +5 -5
  43. package/esm2022/select/select.component.mjs +22 -12
  44. package/esm2022/sidepanel/sidepanel-config.mjs +1 -1
  45. package/esm2022/sidepanel/sidepanel-container.component.mjs +9 -3
  46. package/esm2022/timezone/timezone-select.component.mjs +3 -1
  47. package/esm2022/tooltip/tooltip.component.mjs +5 -2
  48. package/esm2022/tree-select/tree-select.component.mjs +12 -7
  49. package/fesm2022/koobiq-components-autocomplete.mjs +9 -10
  50. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  51. package/fesm2022/koobiq-components-code-block.mjs +378 -341
  52. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  53. package/fesm2022/koobiq-components-core.mjs +36 -7
  54. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  55. package/fesm2022/koobiq-components-datepicker.mjs +1 -1
  56. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  57. package/fesm2022/koobiq-components-form-field.mjs +7 -7
  58. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  59. package/fesm2022/koobiq-components-loader-overlay.mjs +5 -3
  60. package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
  61. package/fesm2022/koobiq-components-markdown.mjs +2 -2
  62. package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
  63. package/fesm2022/koobiq-components-modal.mjs +9 -4
  64. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  65. package/fesm2022/koobiq-components-select.mjs +21 -11
  66. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  67. package/fesm2022/koobiq-components-sidepanel.mjs +8 -2
  68. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  69. package/fesm2022/koobiq-components-timezone.mjs +2 -0
  70. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  71. package/fesm2022/koobiq-components-tooltip.mjs +4 -1
  72. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  73. package/fesm2022/koobiq-components-tree-select.mjs +11 -6
  74. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  75. package/form-field/form-field-tokens.scss +1 -1
  76. package/form-field/form-field.d.ts +1 -1
  77. package/form-field/form-field.scss +0 -1
  78. package/loader-overlay/loader-overlay.component.d.ts +1 -0
  79. package/markdown/_markdown-theme.scss +15 -3
  80. package/markdown/markdown-tokens.scss +1 -2
  81. package/markdown/markdown.scss +3 -4
  82. package/modal/modal.component.d.ts +4 -0
  83. package/modal/modal.service.d.ts +4 -0
  84. package/modal/public-api.d.ts +4 -4
  85. package/package.json +4 -4
  86. package/prebuilt-themes/dark-theme.css +1 -1
  87. package/prebuilt-themes/light-theme.css +1 -1
  88. package/prebuilt-themes/theme.css +1 -1
  89. package/schematics/ng-add/index.js +4 -5
  90. package/select/select.component.d.ts +15 -3
  91. package/sidepanel/sidepanel-config.d.ts +4 -0
  92. package/sidepanel/sidepanel-container.component.d.ts +2 -0
  93. package/timezone/timezone-select.component.d.ts +3 -1
  94. package/tooltip/tooltip.component.d.ts +2 -1
  95. package/accordion/README.md +0 -0
  96. package/alert/README.md +0 -0
  97. package/autocomplete/README.md +0 -0
  98. package/badge/README.md +0 -0
  99. package/button/README.md +0 -0
  100. package/button-toggle/README.md +0 -0
  101. package/checkbox/README.md +0 -1
  102. package/code-block/README.md +0 -36
  103. package/code-block/actionbar.component.d.ts +0 -32
  104. package/code-block/actionbar.component.scss +0 -43
  105. package/code-block/code-block-content.d.ts +0 -28
  106. package/code-block/code-block.component.d.ts +0 -98
  107. package/code-block/code-block.types.d.ts +0 -36
  108. package/datepicker/README.md +0 -0
  109. package/divider/README.md +0 -0
  110. package/dl/README.md +0 -0
  111. package/empty-state/README.md +0 -0
  112. package/esm2022/code-block/actionbar.component.mjs +0 -90
  113. package/esm2022/code-block/code-block-content.mjs +0 -393
  114. package/esm2022/code-block/code-block.component.mjs +0 -283
  115. package/esm2022/code-block/code-block.types.mjs +0 -5
  116. package/file-upload/README.md +0 -0
  117. package/form-field/README.md +0 -0
  118. package/icon/README.md +0 -0
  119. package/link/README.md +0 -0
  120. package/list/README.md +0 -0
  121. package/loader-overlay/README.md +0 -0
  122. package/modal/README.md +0 -35
  123. package/navbar/README.md +0 -42
  124. package/popover/README.md +0 -36
  125. package/progress-bar/README.md +0 -0
  126. package/progress-spinner/README.md +0 -0
  127. package/risk-level/README.md +0 -0
  128. package/table/README.md +0 -0
  129. package/tags/README.md +0 -0
  130. package/textarea/README.md +0 -0
  131. package/timepicker/README.md +0 -0
  132. package/timezone/README.md +0 -0
  133. package/tree-select/README.md +0 -0
@@ -1 +0,0 @@
1
- Please see the official documentation at #
@@ -1,36 +0,0 @@
1
- # Popover component
2
-
3
- ## API
4
-
5
- | Property | Description | Type | Default | |
6
- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- | ----------- | --- |
7
- | kbqPlacement | Место для показа относительно элемента, к которому он привязан. Возможные значения: top, bottom, left, right | string | bottom | |
8
- | kbqTrigger | Триггер для показа Возможные значения: hover, manual, click, focus | string | hover | |
9
- | kbqVisible | Ручное управление показом, используется только при kbqTrigger="manual" | boolean | false | |
10
- | kbqPopoverHeader | Содержимое шапки Обрати внимание: если используешь строку, то используй аккуратно, желательно предварительно сделать escape строки, чтобы избежать потенциальной XSS уязвимости. | string | ng-template | – |
11
- | kbqPopoverContent | Содержимое компонента Обрати внимание: если используешь строку, то используй аккуратно, желательно предварительно сделать escape строки, чтобы избежать потенциальной XSS уязвимости. | string | ng-template | – |
12
- | kbqPopoverFooter | Содержимое подвала Обрати внимание: если используешь строку, то используй аккуратно, желательно предварительно сделать escape строки, чтобы избежать потенциальной XSS уязвимости. | string | ng-template | – |
13
- | kbqPopoverDisabled | Флаг для запрета показа | boolean | false | |
14
- | kbqPopoverClass | Добавление своих классов | string | string[] | – |
15
- | kbqVisibleChange | Callback на изменение видимости компонента | EventEmitter<boolean> | – | |
16
-
17
- ## Example
18
-
19
- <!-- cspell:ignore Э́йяфьядлайё̀кюдль, Эйяфьядлайёкюдль -->
20
-
21
- ```html
22
- <ng-template #customContent>
23
- Э́йяфьядлайё̀кюдль — шестой по величине ледник Исландии. Расположен на юге Исландии в 125 км к востоку от Рейкьявика.
24
- Под этим ледником находится одноимённый вулкан конической формы.
25
- </ng-template>
26
-
27
- <button
28
- kbqPopover
29
- [kbqTrigger]="'hover'"
30
- [kbqPlacement]="'top'"
31
- [kbqPopoverHeader]="'Это header'"
32
- [kbqPopoverContent]="customContent"
33
- >
34
- Найти Эйяфьядлайёкюдль
35
- </button>
36
- ```
@@ -1,32 +0,0 @@
1
- import { AfterViewInit, ChangeDetectorRef, EventEmitter } from '@angular/core';
2
- import { KbqLocaleService } from '@koobiq/components/core';
3
- import { KbqTooltipTrigger } from '@koobiq/components/tooltip';
4
- import { KbqCodeBlockConfiguration, KbqCodeBlockFile } from './code-block.types';
5
- import * as i0 from "@angular/core";
6
- export declare class KbqActionBarComponent implements AfterViewInit {
7
- private changeDetectorRef;
8
- protected configuration?: KbqCodeBlockConfiguration | undefined;
9
- protected localeService?: KbqLocaleService | undefined;
10
- copyTooltip: KbqTooltipTrigger;
11
- codeFiles: KbqCodeBlockFile[];
12
- selectedTabIndex: number;
13
- multiLine: boolean;
14
- softWrap: boolean;
15
- canLoad: boolean;
16
- toggleSoftWrap: EventEmitter<void>;
17
- downloadCode: EventEmitter<void>;
18
- copyCode: EventEmitter<void>;
19
- openExternalSystem: EventEmitter<void>;
20
- copyTooltipText: string;
21
- /**
22
- * @docs-private
23
- */
24
- config: KbqCodeBlockConfiguration;
25
- constructor(changeDetectorRef: ChangeDetectorRef, configuration?: KbqCodeBlockConfiguration | undefined, localeService?: KbqLocaleService | undefined);
26
- ngAfterViewInit(): void;
27
- onCopy(): void;
28
- private updateLocaleParams;
29
- private initDefaultParams;
30
- static ɵfac: i0.ɵɵFactoryDeclaration<KbqActionBarComponent, [null, { optional: true; }, { optional: true; }]>;
31
- static ɵcmp: i0.ɵɵComponentDeclaration<KbqActionBarComponent, "kbq-actionbar-block", never, { "codeFiles": { "alias": "codeFiles"; "required": false; }; "selectedTabIndex": { "alias": "selectedTabIndex"; "required": false; }; "multiLine": { "alias": "multiLine"; "required": false; }; "softWrap": { "alias": "softWrap"; "required": false; }; "canLoad": { "alias": "canLoad"; "required": false; }; }, { "toggleSoftWrap": "toggleSoftWrap"; "downloadCode": "downloadCode"; "copyCode": "copyCode"; "openExternalSystem": "openExternalSystem"; }, never, never, false, never>;
32
- }
@@ -1,43 +0,0 @@
1
- @use '../core/styles/common/tokens' as *;
2
-
3
- $actionbar-indents: var(--kbq-code-block-size-actionbar-padding-vertical)
4
- var(--kbq-code-block-size-actionbar-padding-horizontal);
5
-
6
- .kbq-code-block-actionbar {
7
- display: flex;
8
- justify-content: right;
9
- align-items: center;
10
-
11
- position: absolute;
12
-
13
- // position to top to the height of tab-header
14
- top: -48px;
15
- right: 0;
16
-
17
- margin: $actionbar-indents;
18
-
19
- .kbq-actionbar-block__button-stack {
20
- gap: var(--kbq-code-block-size-actionbar-content-gap-horizontal);
21
- }
22
-
23
- .kbq-code-block__fade-gradient {
24
- display: none;
25
-
26
- width: var(--kbq-code-block-size-actionbar-fade-gradient-width);
27
- }
28
-
29
- &.kbq-actionbar-block_floating {
30
- top: 0;
31
- margin: unset;
32
- background: transparent !important;
33
-
34
- .kbq-code-block__fade-gradient {
35
- display: block;
36
- align-self: stretch;
37
- }
38
-
39
- .kbq-actionbar-block__button-stack {
40
- padding: $actionbar-indents;
41
- }
42
- }
43
- }
@@ -1,28 +0,0 @@
1
- import { KbqCodeBlockFile } from './code-block.types';
2
- import * as i0 from "@angular/core";
3
- export declare class KbqCodeBlockContent {
4
- protected readonly document: Document;
5
- private readonly nativeElement;
6
- private readonly renderer;
7
- private readonly domSanitizer;
8
- /** The code file. */
9
- set file({ language, content }: KbqCodeBlockFile);
10
- /** The starting line number. */
11
- startFrom: number;
12
- /** Whether to display line numbers for single line code block. */
13
- singleLine: boolean;
14
- constructor();
15
- /** Use defaultView of injected document if available or fallback to global window reference */
16
- private getWindow;
17
- private initLineNumbersPlugin;
18
- /**
19
- * This method is not intended for editing.
20
- * Changes may lead to unpredictable behavior.
21
- * Source code: https://github.com/wcoder/highlightjs-line-numbers.js/blob/v2.9.0/src/highlightjs-line-numbers.js
22
- */
23
- private highlightJSLineNumbersPlugin;
24
- static ɵfac: i0.ɵɵFactoryDeclaration<KbqCodeBlockContent, never>;
25
- static ɵdir: i0.ɵɵDirectiveDeclaration<KbqCodeBlockContent, "[kbqCodeBlockContent]", never, { "file": { "alias": "file"; "required": true; }; "startFrom": { "alias": "startFrom"; "required": false; }; "singleLine": { "alias": "singleLine"; "required": false; }; }, {}, never, never, true, never>;
26
- static ngAcceptInputType_startFrom: unknown;
27
- static ngAcceptInputType_singleLine: unknown;
28
- }
@@ -1,98 +0,0 @@
1
- import { FocusMonitor } from '@angular/cdk/a11y';
2
- import { Clipboard } from '@angular/cdk/clipboard';
3
- import { AfterViewInit, ChangeDetectorRef, ElementRef, OnDestroy, Renderer2 } from '@angular/core';
4
- import { KbqLocaleService } from '@koobiq/components/core';
5
- import { KbqTabChangeEvent, KbqTabGroup } from '@koobiq/components/tabs';
6
- import { Subject } from 'rxjs';
7
- import { KbqCodeBlockConfiguration, KbqCodeBlockFile } from './code-block.types';
8
- import * as i0 from "@angular/core";
9
- export declare const COPIED_MESSAGE_TOOLTIP_TIMEOUT = 100;
10
- export declare const DEFAULT_EXTENSION = "txt";
11
- export declare const LANGUAGES_EXTENSIONS: {
12
- html: string;
13
- css: string;
14
- php: string;
15
- java: string;
16
- bash: string;
17
- javascript: string;
18
- typescript: string;
19
- python: string;
20
- ruby: string;
21
- c: string;
22
- 'c++': string;
23
- 'c#': string;
24
- csharp: string;
25
- lua: string;
26
- xml: string;
27
- json: string;
28
- };
29
- export declare class KbqCodeBlockComponent implements AfterViewInit, OnDestroy {
30
- private elementRef;
31
- private changeDetectorRef;
32
- private clipboard;
33
- private renderer;
34
- private focusMonitor;
35
- protected configuration?: KbqCodeBlockConfiguration | undefined;
36
- protected localeService?: KbqLocaleService | undefined;
37
- protected readonly document: Document;
38
- tabGroup: KbqTabGroup;
39
- lineNumbers: boolean;
40
- filled: boolean;
41
- maxHeight: number;
42
- softWrap: boolean;
43
- canLoad: boolean;
44
- get codeFiles(): KbqCodeBlockFile[];
45
- set codeFiles(files: KbqCodeBlockFile[]);
46
- private _codeFiles;
47
- get noHeader(): any;
48
- get singleFile(): boolean;
49
- selectedTabIndex: number;
50
- copied: boolean;
51
- viewAll: boolean;
52
- multiLine: boolean;
53
- isTopOverflow: boolean;
54
- hasKeyboardFocus: boolean;
55
- /**
56
- * @docs-private
57
- */
58
- actionbarHidden?: boolean;
59
- /**
60
- * @docs-private
61
- */
62
- config: KbqCodeBlockConfiguration;
63
- readonly resizeStream: Subject<Event>;
64
- readonly currentCodeBlock: Subject<HTMLElement>;
65
- private readonly resizeDebounceInterval;
66
- private resizeSubscription;
67
- private codeBlockSubscription;
68
- private hoverSubscription;
69
- constructor(elementRef: ElementRef, changeDetectorRef: ChangeDetectorRef, clipboard: Clipboard, renderer: Renderer2, focusMonitor: FocusMonitor, configuration?: KbqCodeBlockConfiguration | undefined, localeService?: KbqLocaleService | undefined);
70
- ngAfterViewInit(): void;
71
- ngOnDestroy(): void;
72
- updateHeader: () => void;
73
- toggleSoftWrap(): void;
74
- toggleViewAll(): void;
75
- downloadCode(): void;
76
- copyCode(): void;
77
- openExternalSystem(): void;
78
- onHighlighted(): void;
79
- getMaxHeight(): string;
80
- onSelectTab($event: KbqTabChangeEvent): void;
81
- checkOverflow(currentCodeContentElement: HTMLElement): void;
82
- onShowMoreClick(currentCodeContentElement: HTMLPreElement): void;
83
- canShowFocus(currentCodeContent: HTMLPreElement): boolean;
84
- onEnter(currentCodeBlock: HTMLPreElement): void;
85
- /** @docs-private */
86
- showActionBarIfNecessary(): void;
87
- /** @docs-private */
88
- hideActionBarIfNoHeader(event?: FocusEvent | null): void;
89
- private updateLocaleParams;
90
- private initDefaultParams;
91
- private updateMultiline;
92
- private getFullFileName;
93
- private subscribeToHover;
94
- /** Use defaultView of injected document if available or fallback to global window reference */
95
- private getWindow;
96
- static ɵfac: i0.ɵɵFactoryDeclaration<KbqCodeBlockComponent, [null, null, null, null, null, { optional: true; }, { optional: true; }]>;
97
- static ɵcmp: i0.ɵɵComponentDeclaration<KbqCodeBlockComponent, "kbq-code-block", ["kbqCodeBlock"], { "lineNumbers": { "alias": "lineNumbers"; "required": false; }; "filled": { "alias": "filled"; "required": false; }; "maxHeight": { "alias": "maxHeight"; "required": false; }; "softWrap": { "alias": "softWrap"; "required": false; }; "canLoad": { "alias": "canLoad"; "required": false; }; "codeFiles": { "alias": "codeFiles"; "required": false; }; }, {}, never, never, false, never>;
98
- }
@@ -1,36 +0,0 @@
1
- import { InjectionToken } from '@angular/core';
2
- export declare const KBQ_CODE_BLOCK_CONFIGURATION: InjectionToken<any>;
3
- export declare const KBQ_CODE_BLOCK_DEFAULT_CONFIGURATION: {
4
- softWrapOnTooltip: string;
5
- softWrapOffTooltip: string;
6
- downloadTooltip: string;
7
- copiedTooltip: string;
8
- copyTooltip: string;
9
- viewAllText: string;
10
- viewLessText: string;
11
- openExternalSystemTooltip: string;
12
- };
13
- export interface KbqCodeBlockConfiguration {
14
- softWrapOnTooltip: string;
15
- softWrapOffTooltip: string;
16
- downloadTooltip: string;
17
- copiedTooltip: string;
18
- copyTooltip: string;
19
- viewAllText: string;
20
- viewLessText: string;
21
- openExternalSystemTooltip: string;
22
- }
23
- /** Code block file type. */
24
- export type KbqCodeBlockFile = {
25
- filename: string;
26
- content: string;
27
- /**
28
- * File language
29
- *
30
- * @link https://highlightjs.readthedocs.io/en/stable/supported-languages.html
31
- */
32
- language: string;
33
- link?: string;
34
- };
35
- /** @deprecated Will be removed in next major release, use `KbqCodeBlockFile` instead. */
36
- export type KbqCodeFile = KbqCodeBlockFile;
File without changes
package/divider/README.md DELETED
File without changes
package/dl/README.md DELETED
File without changes
File without changes
@@ -1,90 +0,0 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, Optional, Output, ViewChild, ViewEncapsulation } from '@angular/core';
2
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
- import { KBQ_LOCALE_SERVICE, KbqLocaleService } from '@koobiq/components/core';
4
- import { KbqTooltipTrigger } from '@koobiq/components/tooltip';
5
- import { filter } from 'rxjs/operators';
6
- import { KBQ_CODE_BLOCK_CONFIGURATION, KBQ_CODE_BLOCK_DEFAULT_CONFIGURATION } from './code-block.types';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@koobiq/components/button";
9
- import * as i2 from "@koobiq/components/tooltip";
10
- import * as i3 from "@koobiq/components/icon";
11
- import * as i4 from "@koobiq/components/core";
12
- export class KbqActionBarComponent {
13
- constructor(changeDetectorRef, configuration, localeService) {
14
- this.changeDetectorRef = changeDetectorRef;
15
- this.configuration = configuration;
16
- this.localeService = localeService;
17
- this.selectedTabIndex = 0;
18
- this.toggleSoftWrap = new EventEmitter();
19
- this.downloadCode = new EventEmitter();
20
- this.copyCode = new EventEmitter();
21
- this.openExternalSystem = new EventEmitter();
22
- this.updateLocaleParams = () => {
23
- this.config = this.configuration || this.localeService?.getParams('codeBlock');
24
- this.copyTooltipText = this.config.copyTooltip;
25
- this.changeDetectorRef.markForCheck();
26
- };
27
- this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(this.updateLocaleParams);
28
- if (!this.localeService) {
29
- this.initDefaultParams();
30
- }
31
- }
32
- ngAfterViewInit() {
33
- this.copyTooltipText = this.config.copyTooltip;
34
- this.copyTooltip.visibleChange.pipe(filter((state) => !state)).subscribe(() => {
35
- if (this.copyTooltipText === this.config.copiedTooltip) {
36
- this.copyTooltipText = this.config.copyTooltip;
37
- }
38
- });
39
- }
40
- onCopy() {
41
- this.copyCode.emit();
42
- setTimeout(() => {
43
- this.copyTooltipText = this.config.copiedTooltip;
44
- this.copyTooltip.show();
45
- });
46
- }
47
- initDefaultParams() {
48
- this.config = KBQ_CODE_BLOCK_DEFAULT_CONFIGURATION;
49
- }
50
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqActionBarComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: KBQ_CODE_BLOCK_CONFIGURATION, optional: true }, { token: KBQ_LOCALE_SERVICE, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
51
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: KbqActionBarComponent, selector: "kbq-actionbar-block", inputs: { codeFiles: "codeFiles", selectedTabIndex: "selectedTabIndex", multiLine: "multiLine", softWrap: "softWrap", canLoad: "canLoad" }, outputs: { toggleSoftWrap: "toggleSoftWrap", downloadCode: "downloadCode", copyCode: "copyCode", openExternalSystem: "openExternalSystem" }, host: { classAttribute: "kbq-code-block-actionbar" }, viewQueries: [{ propertyName: "copyTooltip", first: true, predicate: ["copyTooltip"], descendants: true }], ngImport: i0, template: "<div class=\"kbq-code-block__fade-gradient\"></div>\n\n<div class=\"kbq-actionbar-block__button-stack layout-row\">\n @if (multiLine) {\n <button\n kbq-button\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltip]=\"softWrap ? config.softWrapOffTooltip : config.softWrapOnTooltip\"\n (click)=\"toggleSoftWrap.emit()\"\n >\n @if (!softWrap) {\n <i kbq-icon=\"kbq-wrap-text_16\"></i>\n }\n @if (softWrap) {\n <i kbq-icon=\"kbq-wrap-text-slash_16\"></i>\n }\n </button>\n }\n\n @if (canLoad) {\n <button\n kbq-button\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltip]=\"config.downloadTooltip\"\n (click)=\"downloadCode.emit()\"\n >\n <i kbq-icon=\"kbq-arrow-down-to-line_16\"></i>\n </button>\n }\n\n <button\n #copyTooltip=\"kbqTooltip\"\n kbq-button\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltip]=\"copyTooltipText\"\n (click)=\"onCopy()\"\n >\n <i kbq-icon=\"kbq-file-multiple-o_16\"></i>\n </button>\n\n @if (codeFiles[selectedTabIndex].link) {\n <button\n kbq-button\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltip]=\"config.openExternalSystemTooltip\"\n (click)=\"openExternalSystem.emit()\"\n >\n <i kbq-icon=\"kbq-arrow-up-right-from-square_16\"></i>\n </button>\n }\n</div>\n", styles: [".kbq-code-block-actionbar{display:flex;justify-content:right;align-items:center;position:absolute;top:-48px;right:0;margin:var(--kbq-code-block-size-actionbar-padding-vertical) var(--kbq-code-block-size-actionbar-padding-horizontal)}.kbq-code-block-actionbar .kbq-actionbar-block__button-stack{gap:var(--kbq-code-block-size-actionbar-content-gap-horizontal)}.kbq-code-block-actionbar .kbq-code-block__fade-gradient{display:none;width:var(--kbq-code-block-size-actionbar-fade-gradient-width)}.kbq-code-block-actionbar.kbq-actionbar-block_floating{top:0;margin:unset;background:transparent!important}.kbq-code-block-actionbar.kbq-actionbar-block_floating .kbq-code-block__fade-gradient{display:block;align-self:stretch}.kbq-code-block-actionbar.kbq-actionbar-block_floating .kbq-actionbar-block__button-stack{padding:var(--kbq-code-block-size-actionbar-padding-vertical) var(--kbq-code-block-size-actionbar-padding-horizontal)}\n"], dependencies: [{ kind: "component", type: i1.KbqButton, selector: "[kbq-button]", inputs: ["color", "tabIndex", "kbqStyle", "disabled"] }, { kind: "directive", type: i1.KbqButtonCssStyler, selector: "[kbq-button]" }, { kind: "directive", type: i2.KbqTooltipTrigger, selector: "[kbqTooltip]", inputs: ["kbqVisible", "kbqPlacement", "kbqRelativeToPointer", "kbqPlacementPriority", "kbqTooltip", "kbqTooltipDisabled", "kbqEnterDelay", "kbqLeaveDelay", "kbqTrigger", "kbqTooltipClass", "kbqTooltipContext", "kbqTooltipColor", "kbqTooltipArrow", "kbqTooltipOffset"], outputs: ["kbqPlacementChange", "kbqVisibleChange"], exportAs: ["kbqTooltip"] }, { kind: "component", type: i3.KbqIcon, selector: "[kbq-icon]", inputs: ["color", "small", "autoColor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
52
- }
53
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqActionBarComponent, decorators: [{
54
- type: Component,
55
- args: [{ selector: 'kbq-actionbar-block', host: {
56
- class: 'kbq-code-block-actionbar'
57
- }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"kbq-code-block__fade-gradient\"></div>\n\n<div class=\"kbq-actionbar-block__button-stack layout-row\">\n @if (multiLine) {\n <button\n kbq-button\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltip]=\"softWrap ? config.softWrapOffTooltip : config.softWrapOnTooltip\"\n (click)=\"toggleSoftWrap.emit()\"\n >\n @if (!softWrap) {\n <i kbq-icon=\"kbq-wrap-text_16\"></i>\n }\n @if (softWrap) {\n <i kbq-icon=\"kbq-wrap-text-slash_16\"></i>\n }\n </button>\n }\n\n @if (canLoad) {\n <button\n kbq-button\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltip]=\"config.downloadTooltip\"\n (click)=\"downloadCode.emit()\"\n >\n <i kbq-icon=\"kbq-arrow-down-to-line_16\"></i>\n </button>\n }\n\n <button\n #copyTooltip=\"kbqTooltip\"\n kbq-button\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltip]=\"copyTooltipText\"\n (click)=\"onCopy()\"\n >\n <i kbq-icon=\"kbq-file-multiple-o_16\"></i>\n </button>\n\n @if (codeFiles[selectedTabIndex].link) {\n <button\n kbq-button\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltip]=\"config.openExternalSystemTooltip\"\n (click)=\"openExternalSystem.emit()\"\n >\n <i kbq-icon=\"kbq-arrow-up-right-from-square_16\"></i>\n </button>\n }\n</div>\n", styles: [".kbq-code-block-actionbar{display:flex;justify-content:right;align-items:center;position:absolute;top:-48px;right:0;margin:var(--kbq-code-block-size-actionbar-padding-vertical) var(--kbq-code-block-size-actionbar-padding-horizontal)}.kbq-code-block-actionbar .kbq-actionbar-block__button-stack{gap:var(--kbq-code-block-size-actionbar-content-gap-horizontal)}.kbq-code-block-actionbar .kbq-code-block__fade-gradient{display:none;width:var(--kbq-code-block-size-actionbar-fade-gradient-width)}.kbq-code-block-actionbar.kbq-actionbar-block_floating{top:0;margin:unset;background:transparent!important}.kbq-code-block-actionbar.kbq-actionbar-block_floating .kbq-code-block__fade-gradient{display:block;align-self:stretch}.kbq-code-block-actionbar.kbq-actionbar-block_floating .kbq-actionbar-block__button-stack{padding:var(--kbq-code-block-size-actionbar-padding-vertical) var(--kbq-code-block-size-actionbar-padding-horizontal)}\n"] }]
58
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
59
- type: Optional
60
- }, {
61
- type: Inject,
62
- args: [KBQ_CODE_BLOCK_CONFIGURATION]
63
- }] }, { type: i4.KbqLocaleService, decorators: [{
64
- type: Optional
65
- }, {
66
- type: Inject,
67
- args: [KBQ_LOCALE_SERVICE]
68
- }] }], propDecorators: { copyTooltip: [{
69
- type: ViewChild,
70
- args: ['copyTooltip']
71
- }], codeFiles: [{
72
- type: Input
73
- }], selectedTabIndex: [{
74
- type: Input
75
- }], multiLine: [{
76
- type: Input
77
- }], softWrap: [{
78
- type: Input
79
- }], canLoad: [{
80
- type: Input
81
- }], toggleSoftWrap: [{
82
- type: Output
83
- }], downloadCode: [{
84
- type: Output
85
- }], copyCode: [{
86
- type: Output
87
- }], openExternalSystem: [{
88
- type: Output
89
- }] } });
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvY29kZS1ibG9jay9hY3Rpb25iYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9jb2RlLWJsb2NrL2FjdGlvbmJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQ0gsNEJBQTRCLEVBQzVCLG9DQUFvQyxFQUd2QyxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7QUFZNUIsTUFBTSxPQUFPLHFCQUFxQjtJQW9COUIsWUFDWSxpQkFBb0MsRUFDZ0IsYUFBeUMsRUFDbkQsYUFBZ0M7UUFGMUUsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNnQixrQkFBYSxHQUFiLGFBQWEsQ0FBNEI7UUFDbkQsa0JBQWEsR0FBYixhQUFhLENBQW1CO1FBbkI3RSxxQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFLcEIsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzFDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN4QyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNwQyx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBdUNoRCx1QkFBa0IsR0FBRyxHQUFHLEVBQUU7WUFDOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRS9FLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFFL0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFDLENBQUMsQ0FBQztRQWhDRSxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUUxRixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzdCLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFFL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDMUUsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFDbkQsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE1BQU07UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRXJCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO1lBQ2pELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBVU8saUJBQWlCO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsb0NBQW9DLENBQUM7SUFDdkQsQ0FBQztpSUE3RFEscUJBQXFCLG1EQXNCTiw0QkFBNEIsNkJBQzVCLGtCQUFrQjtxSEF2QmpDLHFCQUFxQixzZkNsQ2xDLGtvREF1REE7OzJGRHJCYSxxQkFBcUI7a0JBVmpDLFNBQVM7K0JBQ0kscUJBQXFCLFFBR3pCO3dCQUNGLEtBQUssRUFBRSwwQkFBMEI7cUJBQ3BDLGlCQUNjLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU07OzBCQXdCMUMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyw0QkFBNEI7OzBCQUMvQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGtCQUFrQjt5Q0F0QmhCLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFFZixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgS0JRX0xPQ0FMRV9TRVJWSUNFLCBLYnFMb2NhbGVTZXJ2aWNlIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2NvcmUnO1xuaW1wb3J0IHsgS2JxVG9vbHRpcFRyaWdnZXIgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvdG9vbHRpcCc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICAgIEtCUV9DT0RFX0JMT0NLX0NPTkZJR1VSQVRJT04sXG4gICAgS0JRX0NPREVfQkxPQ0tfREVGQVVMVF9DT05GSUdVUkFUSU9OLFxuICAgIEticUNvZGVCbG9ja0NvbmZpZ3VyYXRpb24sXG4gICAgS2JxQ29kZUJsb2NrRmlsZVxufSBmcm9tICcuL2NvZGUtYmxvY2sudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ticS1hY3Rpb25iYXItYmxvY2snLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hY3Rpb25iYXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2FjdGlvbmJhci5jb21wb25lbnQuc2NzcyddLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdrYnEtY29kZS1ibG9jay1hY3Rpb25iYXInXG4gICAgfSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEticUFjdGlvbkJhckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICAgIEBWaWV3Q2hpbGQoJ2NvcHlUb29sdGlwJykgY29weVRvb2x0aXA6IEticVRvb2x0aXBUcmlnZ2VyO1xuXG4gICAgQElucHV0KCkgY29kZUZpbGVzOiBLYnFDb2RlQmxvY2tGaWxlW107XG4gICAgQElucHV0KCkgc2VsZWN0ZWRUYWJJbmRleCA9IDA7XG4gICAgQElucHV0KCkgbXVsdGlMaW5lOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNvZnRXcmFwOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNhbkxvYWQ6IGJvb2xlYW47XG5cbiAgICBAT3V0cHV0KCkgdG9nZ2xlU29mdFdyYXAgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgQE91dHB1dCgpIGRvd25sb2FkQ29kZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBAT3V0cHV0KCkgY29weUNvZGUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgQE91dHB1dCgpIG9wZW5FeHRlcm5hbFN5c3RlbSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIGNvcHlUb29sdGlwVGV4dDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBjb25maWc6IEticUNvZGVCbG9ja0NvbmZpZ3VyYXRpb247XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoS0JRX0NPREVfQkxPQ0tfQ09ORklHVVJBVElPTikgcHJvdGVjdGVkIGNvbmZpZ3VyYXRpb24/OiBLYnFDb2RlQmxvY2tDb25maWd1cmF0aW9uLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEtCUV9MT0NBTEVfU0VSVklDRSkgcHJvdGVjdGVkIGxvY2FsZVNlcnZpY2U/OiBLYnFMb2NhbGVTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMubG9jYWxlU2VydmljZT8uY2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUodGhpcy51cGRhdGVMb2NhbGVQYXJhbXMpO1xuXG4gICAgICAgIGlmICghdGhpcy5sb2NhbGVTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLmluaXREZWZhdWx0UGFyYW1zKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29weVRvb2x0aXBUZXh0ID0gdGhpcy5jb25maWcuY29weVRvb2x0aXA7XG5cbiAgICAgICAgdGhpcy5jb3B5VG9vbHRpcC52aXNpYmxlQ2hhbmdlLnBpcGUoZmlsdGVyKChzdGF0ZSkgPT4gIXN0YXRlKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvcHlUb29sdGlwVGV4dCA9PT0gdGhpcy5jb25maWcuY29waWVkVG9vbHRpcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29weVRvb2x0aXBUZXh0ID0gdGhpcy5jb25maWcuY29weVRvb2x0aXA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uQ29weSgpIHtcbiAgICAgICAgdGhpcy5jb3B5Q29kZS5lbWl0KCk7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvcHlUb29sdGlwVGV4dCA9IHRoaXMuY29uZmlnLmNvcGllZFRvb2x0aXA7XG4gICAgICAgICAgICB0aGlzLmNvcHlUb29sdGlwLnNob3coKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVMb2NhbGVQYXJhbXMgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuY29uZmlnID0gdGhpcy5jb25maWd1cmF0aW9uIHx8IHRoaXMubG9jYWxlU2VydmljZT8uZ2V0UGFyYW1zKCdjb2RlQmxvY2snKTtcblxuICAgICAgICB0aGlzLmNvcHlUb29sdGlwVGV4dCA9IHRoaXMuY29uZmlnLmNvcHlUb29sdGlwO1xuXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgaW5pdERlZmF1bHRQYXJhbXMoKSB7XG4gICAgICAgIHRoaXMuY29uZmlnID0gS0JRX0NPREVfQkxPQ0tfREVGQVVMVF9DT05GSUdVUkFUSU9OO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJrYnEtY29kZS1ibG9ja19fZmFkZS1ncmFkaWVudFwiPjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwia2JxLWFjdGlvbmJhci1ibG9ja19fYnV0dG9uLXN0YWNrIGxheW91dC1yb3dcIj5cbiAgICBAaWYgKG11bHRpTGluZSkge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBrYnEtYnV0dG9uXG4gICAgICAgICAgICBbY29sb3JdPVwiJ2NvbnRyYXN0J1wiXG4gICAgICAgICAgICBba2JxU3R5bGVdPVwiJ3RyYW5zcGFyZW50J1wiXG4gICAgICAgICAgICBba2JxVG9vbHRpcF09XCJzb2Z0V3JhcCA/IGNvbmZpZy5zb2Z0V3JhcE9mZlRvb2x0aXAgOiBjb25maWcuc29mdFdyYXBPblRvb2x0aXBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNvZnRXcmFwLmVtaXQoKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoIXNvZnRXcmFwKSB7XG4gICAgICAgICAgICAgICAgPGkga2JxLWljb249XCJrYnEtd3JhcC10ZXh0XzE2XCI+PC9pPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChzb2Z0V3JhcCkge1xuICAgICAgICAgICAgICAgIDxpIGticS1pY29uPVwia2JxLXdyYXAtdGV4dC1zbGFzaF8xNlwiPjwvaT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9idXR0b24+XG4gICAgfVxuXG4gICAgQGlmIChjYW5Mb2FkKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGticS1idXR0b25cbiAgICAgICAgICAgIFtjb2xvcl09XCInY29udHJhc3QnXCJcbiAgICAgICAgICAgIFtrYnFTdHlsZV09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgIFtrYnFUb29sdGlwXT1cImNvbmZpZy5kb3dubG9hZFRvb2x0aXBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkQ29kZS5lbWl0KClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aSBrYnEtaWNvbj1cImticS1hcnJvdy1kb3duLXRvLWxpbmVfMTZcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIH1cblxuICAgIDxidXR0b25cbiAgICAgICAgI2NvcHlUb29sdGlwPVwia2JxVG9vbHRpcFwiXG4gICAgICAgIGticS1idXR0b25cbiAgICAgICAgW2NvbG9yXT1cIidjb250cmFzdCdcIlxuICAgICAgICBba2JxU3R5bGVdPVwiJ3RyYW5zcGFyZW50J1wiXG4gICAgICAgIFtrYnFUb29sdGlwXT1cImNvcHlUb29sdGlwVGV4dFwiXG4gICAgICAgIChjbGljayk9XCJvbkNvcHkoKVwiXG4gICAgPlxuICAgICAgICA8aSBrYnEtaWNvbj1cImticS1maWxlLW11bHRpcGxlLW9fMTZcIj48L2k+XG4gICAgPC9idXR0b24+XG5cbiAgICBAaWYgKGNvZGVGaWxlc1tzZWxlY3RlZFRhYkluZGV4XS5saW5rKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGticS1idXR0b25cbiAgICAgICAgICAgIFtjb2xvcl09XCInY29udHJhc3QnXCJcbiAgICAgICAgICAgIFtrYnFTdHlsZV09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgIFtrYnFUb29sdGlwXT1cImNvbmZpZy5vcGVuRXh0ZXJuYWxTeXN0ZW1Ub29sdGlwXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuRXh0ZXJuYWxTeXN0ZW0uZW1pdCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGkga2JxLWljb249XCJrYnEtYXJyb3ctdXAtcmlnaHQtZnJvbS1zcXVhcmVfMTZcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIH1cbjwvZGl2PlxuIl19