@koobiq/components 18.10.0 → 18.12.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 (162) hide show
  1. package/autocomplete/autocomplete-trigger.directive.d.ts +0 -1
  2. package/autocomplete/autocomplete.scss +2 -10
  3. package/button/button-tokens.scss +1 -1
  4. package/code-block/_code-block-theme.scss +35 -54
  5. package/code-block/code-block-highlight.d.ts +44 -0
  6. package/code-block/code-block-tokens.scss +7 -11
  7. package/code-block/code-block.d.ts +187 -0
  8. package/code-block/code-block.module.d.ts +2 -8
  9. package/code-block/code-block.scss +103 -127
  10. package/code-block/public-api.d.ts +3 -2
  11. package/code-block/types.d.ts +27 -0
  12. package/core/common-behaviors/error-state.d.ts +3 -3
  13. package/core/error/error-state-matcher.d.ts +3 -0
  14. package/core/locales/index.d.ts +1 -0
  15. package/core/locales/types.d.ts +11 -0
  16. package/core/pop-up/constants.d.ts +9 -0
  17. package/core/select/constants.d.ts +16 -4
  18. package/core/styles/theming/_scrollbar-theme.scss +2 -1
  19. package/esm2022/autocomplete/autocomplete-trigger.directive.mjs +7 -8
  20. package/esm2022/autocomplete/autocomplete.component.mjs +2 -2
  21. package/esm2022/button/button.component.mjs +2 -2
  22. package/esm2022/code-block/code-block-highlight.mjs +416 -0
  23. package/esm2022/code-block/code-block.mjs +395 -0
  24. package/esm2022/code-block/code-block.module.mjs +9 -30
  25. package/esm2022/code-block/public-api.mjs +4 -3
  26. package/esm2022/code-block/types.mjs +2 -0
  27. package/esm2022/core/common-behaviors/error-state.mjs +1 -1
  28. package/esm2022/core/error/error-state-matcher.mjs +15 -2
  29. package/esm2022/core/locales/en-US.mjs +1 -1
  30. package/esm2022/core/locales/es-LA.mjs +1 -1
  31. package/esm2022/core/locales/fa-IR.mjs +1 -1
  32. package/esm2022/core/locales/index.mjs +2 -1
  33. package/esm2022/core/locales/pt-BR.mjs +1 -1
  34. package/esm2022/core/locales/ru-RU.mjs +1 -1
  35. package/esm2022/core/locales/types.mjs +2 -0
  36. package/esm2022/core/locales/zh-CN.mjs +1 -1
  37. package/esm2022/core/pop-up/constants.mjs +6 -1
  38. package/esm2022/core/select/constants.mjs +17 -5
  39. package/esm2022/core/version.mjs +2 -2
  40. package/esm2022/datepicker/calendar-header.component.mjs +1 -1
  41. package/esm2022/file-upload/file-upload.mjs +40 -2
  42. package/esm2022/file-upload/multiple-file-upload.component.mjs +43 -47
  43. package/esm2022/file-upload/single-file-upload.component.mjs +41 -45
  44. package/esm2022/form-field/form-field.mjs +6 -6
  45. package/esm2022/form-field/hint.mjs +2 -2
  46. package/esm2022/form-field/password-hint.mjs +2 -2
  47. package/esm2022/loader-overlay/loader-overlay.component.mjs +6 -4
  48. package/esm2022/modal/modal.component.mjs +5 -3
  49. package/esm2022/modal/modal.service.mjs +6 -3
  50. package/esm2022/modal/modal.type.mjs +1 -1
  51. package/esm2022/modal/public-api.mjs +5 -5
  52. package/esm2022/scrollbar/scrollbar.directive.mjs +6 -3
  53. package/esm2022/select/select.component.mjs +22 -12
  54. package/esm2022/sidepanel/sidepanel-config.mjs +1 -1
  55. package/esm2022/sidepanel/sidepanel-container.component.mjs +6 -3
  56. package/esm2022/timezone/timezone-select.component.mjs +3 -1
  57. package/esm2022/toast/toast-container.component.mjs +3 -3
  58. package/esm2022/toast/toast.component.mjs +18 -9
  59. package/esm2022/toast/toast.module.mjs +14 -50
  60. package/esm2022/toast/toast.service.mjs +5 -2
  61. package/esm2022/tooltip/tooltip.component.mjs +5 -2
  62. package/esm2022/tree-select/tree-select.component.mjs +15 -40
  63. package/fesm2022/koobiq-components-autocomplete.mjs +9 -10
  64. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  65. package/fesm2022/koobiq-components-button.mjs +2 -2
  66. package/fesm2022/koobiq-components-button.mjs.map +1 -1
  67. package/fesm2022/koobiq-components-code-block.mjs +378 -341
  68. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  69. package/fesm2022/koobiq-components-core.mjs +36 -7
  70. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  71. package/fesm2022/koobiq-components-datepicker.mjs +1 -1
  72. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  73. package/fesm2022/koobiq-components-file-upload.mjs +107 -76
  74. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  75. package/fesm2022/koobiq-components-form-field.mjs +9 -9
  76. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  77. package/fesm2022/koobiq-components-loader-overlay.mjs +5 -3
  78. package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
  79. package/fesm2022/koobiq-components-modal.mjs +10 -5
  80. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  81. package/fesm2022/koobiq-components-scrollbar.mjs +5 -2
  82. package/fesm2022/koobiq-components-scrollbar.mjs.map +1 -1
  83. package/fesm2022/koobiq-components-select.mjs +21 -11
  84. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  85. package/fesm2022/koobiq-components-sidepanel.mjs +5 -2
  86. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  87. package/fesm2022/koobiq-components-timezone.mjs +2 -0
  88. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  89. package/fesm2022/koobiq-components-toast.mjs +138 -161
  90. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  91. package/fesm2022/koobiq-components-tooltip.mjs +4 -1
  92. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  93. package/fesm2022/koobiq-components-tree-select.mjs +14 -39
  94. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  95. package/file-upload/_file-upload-theme.scss +16 -2
  96. package/file-upload/file-upload.d.ts +29 -2
  97. package/file-upload/multiple-file-upload.component.d.ts +18 -18
  98. package/file-upload/single-file-upload.component.d.ts +17 -16
  99. package/form-field/_hint-theme.scss +1 -1
  100. package/form-field/form-field.d.ts +1 -1
  101. package/form-field/form-field.scss +0 -1
  102. package/loader-overlay/loader-overlay.component.d.ts +1 -0
  103. package/modal/modal.component.d.ts +4 -0
  104. package/modal/modal.service.d.ts +4 -0
  105. package/modal/modal.type.d.ts +6 -1
  106. package/modal/public-api.d.ts +4 -4
  107. package/package.json +4 -4
  108. package/prebuilt-themes/dark-theme.css +1 -1
  109. package/prebuilt-themes/light-theme.css +1 -1
  110. package/prebuilt-themes/theme.css +1 -1
  111. package/schematics/ng-add/index.js +3 -4
  112. package/scrollbar/scrollbar.directive.d.ts +2 -1
  113. package/select/select.component.d.ts +15 -3
  114. package/sidepanel/sidepanel-config.d.ts +2 -0
  115. package/sidepanel/sidepanel-container.component.d.ts +1 -0
  116. package/timezone/timezone-select.component.d.ts +3 -1
  117. package/toast/toast-container.component.d.ts +1 -1
  118. package/toast/toast.component.d.ts +2 -2
  119. package/toast/toast.module.d.ts +1 -7
  120. package/toast/toast.service.d.ts +1 -1
  121. package/tooltip/tooltip.component.d.ts +2 -1
  122. package/tree-select/_tree-select-theme.scss +4 -0
  123. package/tree-select/tree-select.component.d.ts +1 -12
  124. package/accordion/README.md +0 -0
  125. package/alert/README.md +0 -0
  126. package/autocomplete/README.md +0 -0
  127. package/badge/README.md +0 -0
  128. package/button/README.md +0 -0
  129. package/button-toggle/README.md +0 -0
  130. package/checkbox/README.md +0 -1
  131. package/code-block/README.md +0 -36
  132. package/code-block/actionbar.component.d.ts +0 -32
  133. package/code-block/actionbar.component.scss +0 -43
  134. package/code-block/code-block-content.d.ts +0 -28
  135. package/code-block/code-block.component.d.ts +0 -98
  136. package/code-block/code-block.types.d.ts +0 -36
  137. package/datepicker/README.md +0 -0
  138. package/divider/README.md +0 -0
  139. package/dl/README.md +0 -0
  140. package/empty-state/README.md +0 -0
  141. package/esm2022/code-block/actionbar.component.mjs +0 -90
  142. package/esm2022/code-block/code-block-content.mjs +0 -393
  143. package/esm2022/code-block/code-block.component.mjs +0 -283
  144. package/esm2022/code-block/code-block.types.mjs +0 -5
  145. package/file-upload/README.md +0 -0
  146. package/form-field/README.md +0 -0
  147. package/icon/README.md +0 -0
  148. package/link/README.md +0 -0
  149. package/list/README.md +0 -0
  150. package/loader-overlay/README.md +0 -0
  151. package/modal/README.md +0 -35
  152. package/navbar/README.md +0 -42
  153. package/popover/README.md +0 -36
  154. package/progress-bar/README.md +0 -0
  155. package/progress-spinner/README.md +0 -0
  156. package/risk-level/README.md +0 -0
  157. package/table/README.md +0 -0
  158. package/tags/README.md +0 -0
  159. package/textarea/README.md +0 -0
  160. package/timepicker/README.md +0 -0
  161. package/timezone/README.md +0 -0
  162. package/tree-select/README.md +0 -0
@@ -8,7 +8,7 @@ import { KbqToastData } from './toast.type';
8
8
  import * as i0 from "@angular/core";
9
9
  export declare class KbqToastCloseButton {
10
10
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqToastCloseButton, never>;
11
- static ɵdir: i0.ɵɵDirectiveDeclaration<KbqToastCloseButton, "[kbq-toast-close-button]", never, {}, {}, never, never, false, never>;
11
+ static ɵdir: i0.ɵɵDirectiveDeclaration<KbqToastCloseButton, "[kbq-toast-close-button]", never, {}, {}, never, never, true, never>;
12
12
  }
13
13
  export declare class KbqToastComponent implements OnDestroy {
14
14
  readonly data: KbqToastData;
@@ -35,5 +35,5 @@ export declare class KbqToastComponent implements OnDestroy {
35
35
  private runFocusMonitor;
36
36
  private stopFocusMonitor;
37
37
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqToastComponent, never>;
38
- static ɵcmp: i0.ɵɵComponentDeclaration<KbqToastComponent, "kbq-toast", never, {}, {}, never, never, false, never>;
38
+ static ɵcmp: i0.ɵɵComponentDeclaration<KbqToastComponent, "kbq-toast", never, {}, {}, never, never, true, never>;
39
39
  }
@@ -1,14 +1,8 @@
1
1
  import * as i0 from "@angular/core";
2
2
  import * as i1 from "./toast.component";
3
3
  import * as i2 from "./toast-container.component";
4
- import * as i3 from "@angular/cdk/overlay";
5
- import * as i4 from "@koobiq/components/title";
6
- import * as i5 from "@angular/cdk/a11y";
7
- import * as i6 from "@koobiq/components/icon";
8
- import * as i7 from "@koobiq/components/button";
9
- import * as i8 from "@angular/common";
10
4
  export declare class KbqToastModule {
11
5
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqToastModule, never>;
12
- static ɵmod: i0.ɵɵNgModuleDeclaration<KbqToastModule, [typeof i1.KbqToastComponent, typeof i2.KbqToastContainerComponent, typeof i1.KbqToastCloseButton], [typeof i3.OverlayModule, typeof i4.KbqTitleModule, typeof i5.A11yModule, typeof i6.KbqIconModule, typeof i7.KbqButtonModule, typeof i8.NgTemplateOutlet, typeof i8.NgClass], [typeof i1.KbqToastComponent, typeof i2.KbqToastContainerComponent, typeof i1.KbqToastCloseButton]>;
6
+ static ɵmod: i0.ɵɵNgModuleDeclaration<KbqToastModule, never, [typeof i1.KbqToastComponent, typeof i1.KbqToastCloseButton, typeof i2.KbqToastContainerComponent], [typeof i1.KbqToastComponent, typeof i1.KbqToastCloseButton, typeof i2.KbqToastContainerComponent]>;
13
7
  static ɵinj: i0.ɵɵInjectorDeclaration<KbqToastModule>;
14
8
  }
@@ -5,7 +5,7 @@ import { BehaviorSubject } from 'rxjs';
5
5
  import { KbqToastComponent } from './toast.component';
6
6
  import { KbqToastConfig, KbqToastData } from './toast.type';
7
7
  import * as i0 from "@angular/core";
8
- export declare const KBQ_TOAST_FACTORY: InjectionToken<unknown>;
8
+ export declare const KBQ_TOAST_FACTORY: InjectionToken<typeof KbqToastComponent>;
9
9
  export declare const defaultToastConfig: KbqToastConfig;
10
10
  export declare class KbqToastService<T extends KbqToastComponent = KbqToastComponent> implements OnDestroy {
11
11
  private overlay;
@@ -1,7 +1,7 @@
1
1
  import { FocusMonitor } from '@angular/cdk/a11y';
2
2
  import { Overlay, OverlayConfig, ScrollStrategy } from '@angular/cdk/overlay';
3
3
  import { ElementRef, EventEmitter, InjectionToken, OnDestroy, TemplateRef, Type } from '@angular/core';
4
- import { KbqComponentColors, KbqPopUp, KbqPopUpTrigger, PopUpPlacements } from '@koobiq/components/core';
4
+ import { KbqComponentColors, KbqParentPopup, KbqPopUp, KbqPopUpTrigger, PopUpPlacements } from '@koobiq/components/core';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare enum TooltipModifier {
7
7
  Default = "default",
@@ -40,6 +40,7 @@ export declare const KBQ_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER: {
40
40
  };
41
41
  export declare class KbqTooltipTrigger extends KbqPopUpTrigger<KbqTooltipComponent> implements OnDestroy {
42
42
  protected scrollStrategy: () => ScrollStrategy;
43
+ protected parentPopup: KbqParentPopup | null;
43
44
  protected focusMonitor: FocusMonitor;
44
45
  get tooltipVisible(): boolean;
45
46
  set tooltipVisible(value: boolean);
@@ -31,6 +31,10 @@
31
31
  .kbq-select__search-container {
32
32
  border-bottom-color: var(--kbq-divider-color, var(--kbq-line-contrast-less));
33
33
  }
34
+
35
+ .kbq-select__no-options-message {
36
+ color: var(--kbq-foreground-contrast-secondary);
37
+ }
34
38
  }
35
39
 
36
40
  @mixin kbq-tree-select-typography() {
@@ -159,15 +159,7 @@ export declare class KbqTreeSelect extends KbqTreeSelectMixinBase implements Aft
159
159
  get autoSelect(): boolean;
160
160
  set autoSelect(value: boolean);
161
161
  private _autoSelect;
162
- /**
163
- * Function to compare the option values with the selected values. The first argument
164
- * is a value from an option. The second is a value from the selection. A boolean
165
- * should be returned.
166
- */
167
- get compareWith(): (o1: any, o2: any) => boolean;
168
- set compareWith(fn: (o1: any, o2: any) => boolean);
169
162
  get value(): any;
170
- private _value;
171
163
  get id(): string;
172
164
  set id(value: string);
173
165
  private _id;
@@ -291,7 +283,6 @@ export declare class KbqTreeSelect extends KbqTreeSelectMixinBase implements Aft
291
283
  private handleClosedKeydown;
292
284
  private handleOpenKeydown;
293
285
  private refreshTriggerValues;
294
- private initializeSelection;
295
286
  /**
296
287
  * Sets the selected option based on a value. If no option can be
297
288
  * found with the designated value, the select trigger is cleared.
@@ -315,10 +306,8 @@ export declare class KbqTreeSelect extends KbqTreeSelectMixinBase implements Aft
315
306
  * content width in order to constrain the panel within the viewport.
316
307
  */
317
308
  private calculateOverlayOffsetX;
318
- /** Comparison function to specify which option is displayed. Defaults to object equality. */
319
- private _compareWith;
320
309
  private subscribeOnSearchChanges;
321
310
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqTreeSelect, [null, null, null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; self: true; }, { optional: true; }]>;
322
- static ɵcmp: i0.ɵɵComponentDeclaration<KbqTreeSelect, "kbq-tree-select", ["kbqTreeSelect"], { "disabled": { "alias": "disabled"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "hiddenItemsText": { "alias": "hiddenItemsText"; "required": false; }; "panelClass": { "alias": "panelClass"; "required": false; }; "backdropClass": { "alias": "backdropClass"; "required": false; }; "errorStateMatcher": { "alias": "errorStateMatcher"; "required": false; }; "sortComparator": { "alias": "sortComparator"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "autoSelect": { "alias": "autoSelect"; "required": false; }; "compareWith": { "alias": "compareWith"; "required": false; }; "id": { "alias": "id"; "required": false; }; "hasBackdrop": { "alias": "hasBackdrop"; "required": false; }; "panelWidth": { "alias": "panelWidth"; "required": false; }; "hiddenItemsTextFormatter": { "alias": "hiddenItemsTextFormatter"; "required": false; }; }, { "openedChange": "openedChange"; "openedStream": "opened"; "closedStream": "closed"; "selectionChange": "selectionChange"; "valueChange": "valueChange"; }, ["cleaner", "customTrigger", "customMatcher", "customTagTemplateRef", "tree", "search"], ["kbq-select-matcher, [kbq-select-matcher]", "kbq-select-trigger", "kbq-cleaner", "[kbqSelectSearch]", "[kbq-select-search-empty-result]", "kbq-tree-selection", "kbq-select-footer,[kbq-tree-select-footer]"], false, never>;
311
+ static ɵcmp: i0.ɵɵComponentDeclaration<KbqTreeSelect, "kbq-tree-select", ["kbqTreeSelect"], { "disabled": { "alias": "disabled"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "hiddenItemsText": { "alias": "hiddenItemsText"; "required": false; }; "panelClass": { "alias": "panelClass"; "required": false; }; "backdropClass": { "alias": "backdropClass"; "required": false; }; "errorStateMatcher": { "alias": "errorStateMatcher"; "required": false; }; "sortComparator": { "alias": "sortComparator"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "autoSelect": { "alias": "autoSelect"; "required": false; }; "id": { "alias": "id"; "required": false; }; "hasBackdrop": { "alias": "hasBackdrop"; "required": false; }; "panelWidth": { "alias": "panelWidth"; "required": false; }; "hiddenItemsTextFormatter": { "alias": "hiddenItemsTextFormatter"; "required": false; }; }, { "openedChange": "openedChange"; "openedStream": "opened"; "closedStream": "closed"; "selectionChange": "selectionChange"; "valueChange": "valueChange"; }, ["cleaner", "customTrigger", "customMatcher", "customTagTemplateRef", "tree", "search"], ["kbq-select-matcher, [kbq-select-matcher]", "kbq-select-trigger", "kbq-cleaner", "[kbqSelectSearch]", "[kbq-select-search-empty-result]", "kbq-tree-selection", "kbq-select-footer,[kbq-tree-select-footer]"], false, never>;
323
312
  }
324
313
  export {};
File without changes
package/alert/README.md DELETED
File without changes
File without changes
package/badge/README.md DELETED
File without changes
package/button/README.md DELETED
File without changes
File without changes
@@ -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