@acrodata/gui 2.3.0 → 2.5.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 (44) hide show
  1. package/_index.scss +8 -2
  2. package/button-toggle/button-toggle.d.ts +3 -3
  3. package/codearea/codearea-config.d.ts +14 -0
  4. package/codearea/codearea-dialog.d.ts +31 -0
  5. package/codearea/codearea-dialog.scss +63 -0
  6. package/codearea/codearea.d.ts +41 -0
  7. package/codearea/codearea.scss +49 -0
  8. package/combobox/combobox.d.ts +3 -3
  9. package/esm2022/button-toggle/button-toggle.mjs +6 -6
  10. package/esm2022/button-toggle/icon.mjs +4 -4
  11. package/esm2022/codearea/codearea-config.mjs +20 -0
  12. package/esm2022/codearea/codearea-dialog.mjs +70 -0
  13. package/esm2022/codearea/codearea.mjs +147 -0
  14. package/esm2022/combobox/combobox.mjs +4 -4
  15. package/esm2022/field-group/field-group.mjs +5 -5
  16. package/esm2022/field-label/field-label.mjs +5 -5
  17. package/esm2022/file-uploader/file-uploader-config.mjs +4 -4
  18. package/esm2022/file-uploader/file-uploader.mjs +6 -6
  19. package/esm2022/fill/fill.mjs +6 -6
  20. package/esm2022/gui-form.mjs +9 -7
  21. package/esm2022/gui-icons.mjs +14 -6
  22. package/esm2022/gui-module.mjs +18 -6
  23. package/esm2022/gui-utils.mjs +7 -7
  24. package/esm2022/icon-button-wrapper/icon-button-wrapper.mjs +5 -5
  25. package/esm2022/image-select/image-select.mjs +6 -6
  26. package/esm2022/inline-group/inline-group.mjs +4 -4
  27. package/esm2022/input-number/input-number.mjs +6 -6
  28. package/esm2022/input-text/input-text.mjs +6 -6
  29. package/esm2022/interface.mjs +1 -1
  30. package/esm2022/public-api.mjs +4 -1
  31. package/esm2022/select/select.mjs +6 -6
  32. package/esm2022/slider/slider.mjs +6 -6
  33. package/esm2022/switch/switch.mjs +6 -6
  34. package/esm2022/textarea/textarea.mjs +6 -6
  35. package/fesm2022/acrodata-gui.mjs +457 -227
  36. package/fesm2022/acrodata-gui.mjs.map +1 -1
  37. package/field-label/field-label.scss +4 -0
  38. package/gui-icons.d.ts +3 -3
  39. package/gui-module.d.ts +6 -4
  40. package/icon-button-wrapper/icon-button-wrapper.scss +2 -5
  41. package/interface.d.ts +3 -1
  42. package/package.json +3 -1
  43. package/public-api.d.ts +3 -0
  44. package/select/select.d.ts +3 -3
package/_index.scss CHANGED
@@ -2,7 +2,9 @@
2
2
  @use '@ng-matero/extensions' as mtx;
3
3
 
4
4
  @mixin all-control-themes($theme) {
5
- @include mat.core-theme($theme);
5
+ @include mat.option-theme($theme);
6
+ @include mat.optgroup-theme($theme);
7
+ @include mat.pseudo-checkbox-theme($theme);
6
8
  @include mat.form-field-theme($theme);
7
9
  @include mat.input-theme($theme);
8
10
  @include mat.button-toggle-theme($theme);
@@ -11,6 +13,7 @@
11
13
  @include mat.slider-theme($theme);
12
14
  @include mat.icon-theme($theme);
13
15
  @include mat.icon-button-theme($theme);
16
+ @include mat.button-theme($theme);
14
17
  @include mat.tabs-theme($theme);
15
18
  @include mat.expansion-theme($theme);
16
19
  @include mat.tooltip-theme($theme);
@@ -19,7 +22,9 @@
19
22
  }
20
23
 
21
24
  @mixin all-control-colors($theme) {
22
- @include mat.core-color($theme);
25
+ @include mat.option-color($theme);
26
+ @include mat.optgroup-color($theme);
27
+ @include mat.pseudo-checkbox-color($theme);
23
28
  @include mat.form-field-color($theme);
24
29
  @include mat.input-color($theme);
25
30
  @include mat.button-toggle-color($theme);
@@ -28,6 +33,7 @@
28
33
  @include mat.slider-color($theme);
29
34
  @include mat.icon-color($theme);
30
35
  @include mat.icon-button-color($theme);
36
+ @include mat.button-color($theme);
31
37
  @include mat.tabs-color($theme);
32
38
  @include mat.expansion-color($theme);
33
39
  @include mat.tooltip-color($theme);
@@ -6,12 +6,12 @@ export declare class GuiButtonToggle implements ControlValueAccessor {
6
6
  private cdr;
7
7
  config: Partial<GuiControl>;
8
8
  disabled: boolean;
9
- value: GuiBasicValue;
9
+ value: GuiBasicValue | GuiBasicValue[];
10
10
  private onChange;
11
11
  private onTouched;
12
12
  constructor(cdr: ChangeDetectorRef);
13
- writeValue(value: GuiBasicValue): void;
14
- registerOnChange(fn: (value: GuiBasicValue) => void): void;
13
+ writeValue(value: GuiBasicValue | GuiBasicValue[]): void;
14
+ registerOnChange(fn: (value: GuiBasicValue | GuiBasicValue[]) => void): void;
15
15
  registerOnTouched(fn: () => void): void;
16
16
  setDisabledState(isDisabled: boolean): void;
17
17
  onValueChange(): void;
@@ -0,0 +1,14 @@
1
+ import { Theme } from '@acrodata/code-editor';
2
+ import { LanguageDescription } from '@codemirror/language';
3
+ import { Extension } from '@codemirror/state';
4
+ import { Subject } from 'rxjs';
5
+ import { GuiCodeareaDialogData } from './codearea-dialog';
6
+ import * as i0 from "@angular/core";
7
+ export declare class GuiCodeareaConfig {
8
+ readonly changes: Subject<void>;
9
+ theme: Theme;
10
+ languages: LanguageDescription[];
11
+ extensions: Extension[] | ((data: GuiCodeareaDialogData) => Extension[]);
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<GuiCodeareaConfig, never>;
13
+ static ɵprov: i0.ɵɵInjectableDeclaration<GuiCodeareaConfig>;
14
+ }
@@ -0,0 +1,31 @@
1
+ import { DialogRef } from '@angular/cdk/dialog';
2
+ import { ChangeDetectorRef, DestroyRef } from '@angular/core';
3
+ import { GuiIconsRegistry } from '../gui-icons';
4
+ import { GuiCodeareaConfig } from './codearea-config';
5
+ import * as i0 from "@angular/core";
6
+ export interface GuiCodeareaDialogData {
7
+ value: string;
8
+ disabled?: boolean;
9
+ readonly?: boolean;
10
+ language?: string;
11
+ title?: string;
12
+ }
13
+ export declare class GuiCodeareaDialog {
14
+ private dialogRef;
15
+ data: GuiCodeareaDialogData;
16
+ private cdr;
17
+ private destroyRef;
18
+ private codeareaCfg;
19
+ get languages(): import("@codemirror/language").LanguageDescription[];
20
+ get theme(): import("@acrodata/code-editor").Theme;
21
+ get extensions(): import("@codemirror/state").Extension[];
22
+ langDesc: import("@codemirror/language").LanguageDescription | undefined;
23
+ title: string;
24
+ lineWrapping: boolean;
25
+ constructor(dialogRef: DialogRef<string, GuiCodeareaDialog>, data: GuiCodeareaDialogData, cdr: ChangeDetectorRef, destroyRef: DestroyRef, codeareaCfg: GuiCodeareaConfig, iconsRegistry: GuiIconsRegistry);
26
+ toggleLineWrapping(): void;
27
+ save(): void;
28
+ close(): void;
29
+ static ɵfac: i0.ɵɵFactoryDeclaration<GuiCodeareaDialog, never>;
30
+ static ɵcmp: i0.ɵɵComponentDeclaration<GuiCodeareaDialog, "gui-codearea-dialog", never, {}, {}, never, never, true, never>;
31
+ }
@@ -0,0 +1,63 @@
1
+ .gui-codearea-dialog-panel {
2
+ --rnd-dialog-container-color: var(--mdc-dialog-container-color);
3
+ }
4
+
5
+ .gui-codearea-dialog {
6
+ --mdc-outlined-button-label-text-size: 0.75rem;
7
+ --mdc-outlined-button-container-height: 1.5rem;
8
+ --mat-outlined-button-horizontal-padding: 0.75rem;
9
+ --mat-outlined-button-touch-target-display: none;
10
+ --mdc-filled-button-label-text-size: 0.75rem;
11
+ --mdc-filled-button-container-height: 1.5rem;
12
+ --mat-filled-button-horizontal-padding: 0.75rem;
13
+ --mat-filled-button-touch-target-display: none;
14
+
15
+ display: flex;
16
+ flex-direction: column;
17
+ height: 100%;
18
+ overflow: hidden;
19
+ border-radius: inherit;
20
+ font-size: 0.75rem;
21
+ }
22
+
23
+ .gui-codearea-dialog-header {
24
+ display: flex;
25
+ gap: 0.5rem;
26
+ align-items: center;
27
+ padding: 0.5rem;
28
+ cursor: grab;
29
+ border-bottom: 1px solid rgba(0, 0, 0, 0.24);
30
+ box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.24);
31
+
32
+ &.dragging {
33
+ cursor: grabbing;
34
+ }
35
+ }
36
+
37
+ .gui-codearea-dialog-title {
38
+ overflow: hidden;
39
+ text-overflow: ellipsis;
40
+ white-space: nowrap;
41
+ }
42
+
43
+ .gui-codearea-dialog-spacer {
44
+ flex: 1;
45
+ }
46
+
47
+ .gui-codearea-dialog-content {
48
+ position: relative;
49
+ flex: 1;
50
+ overflow: auto;
51
+
52
+ .code-editor {
53
+ height: 100%;
54
+ overflow: auto;
55
+ border: 1px solid transparent;
56
+ }
57
+
58
+ &:hover {
59
+ .gui-codearea-btns {
60
+ display: block;
61
+ }
62
+ }
63
+ }
@@ -0,0 +1,41 @@
1
+ import { Setup } from '@acrodata/code-editor';
2
+ import { RndDialog } from '@acrodata/rnd-dialog';
3
+ import { ChangeDetectorRef, DestroyRef } from '@angular/core';
4
+ import { ControlValueAccessor } from '@angular/forms';
5
+ import { GuiIconsRegistry } from '../gui-icons';
6
+ import { GuiControl } from '../interface';
7
+ import { GuiCodeareaConfig } from './codearea-config';
8
+ import { GuiCodeareaDialogData } from './codearea-dialog';
9
+ import * as i0 from "@angular/core";
10
+ export declare class GuiCodearea implements ControlValueAccessor {
11
+ private rndDialog;
12
+ private cdr;
13
+ private destroyRef;
14
+ private codeareaCfg;
15
+ config: Partial<GuiControl>;
16
+ disabled: boolean;
17
+ setup: Setup;
18
+ get height(): string | number;
19
+ set height(value: string | number);
20
+ private _height;
21
+ get language(): string;
22
+ set language(value: string);
23
+ private _language;
24
+ get languages(): import("@codemirror/language").LanguageDescription[];
25
+ get theme(): import("@acrodata/code-editor").Theme;
26
+ get dialogData(): GuiCodeareaDialogData;
27
+ get extensions(): import("@codemirror/state").Extension[];
28
+ value: string;
29
+ private oldValue;
30
+ private onChange;
31
+ private onTouched;
32
+ constructor(rndDialog: RndDialog, cdr: ChangeDetectorRef, destroyRef: DestroyRef, codeareaCfg: GuiCodeareaConfig, iconsRegistry: GuiIconsRegistry);
33
+ writeValue(value: any): void;
34
+ registerOnChange(fn: (value: string) => void): void;
35
+ registerOnTouched(fn: () => void): void;
36
+ setDisabledState(isDisabled: boolean): void;
37
+ onValueChange(): void;
38
+ onExpand(): void;
39
+ static ɵfac: i0.ɵɵFactoryDeclaration<GuiCodearea, never>;
40
+ static ɵcmp: i0.ɵɵComponentDeclaration<GuiCodearea, "gui-codearea", never, { "config": { "alias": "config"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "setup": { "alias": "setup"; "required": false; }; "height": { "alias": "height"; "required": false; }; "language": { "alias": "language"; "required": false; }; }, {}, never, never, true, never>;
41
+ }
@@ -0,0 +1,49 @@
1
+ .gui-codearea {
2
+ position: relative;
3
+ overflow: auto;
4
+ border: 1px solid var(--mdc-outlined-text-field-outline-color);
5
+ border-radius: var(--mdc-outlined-text-field-container-shape);
6
+
7
+ .code-editor {
8
+ width: 100%;
9
+ min-height: 1.5rem;
10
+ overflow: auto;
11
+ resize: vertical;
12
+ }
13
+
14
+ &:hover {
15
+ .gui-codearea-btns {
16
+ display: block;
17
+ }
18
+ }
19
+ }
20
+
21
+ .gui-codearea-btns {
22
+ position: absolute;
23
+ top: 0;
24
+ right: 0;
25
+ display: none;
26
+ margin: 2px;
27
+
28
+ [dir='rtl'] & {
29
+ left: 0;
30
+ right: auto;
31
+ }
32
+
33
+ .gui-icon-button-wrapper {
34
+ .mat-mdc-icon-button,
35
+ .mat-icon {
36
+ width: 1.25rem;
37
+ height: 1.25rem;
38
+ }
39
+ }
40
+
41
+ .mat-mdc-icon-button {
42
+ backdrop-filter: blur(8px);
43
+ border-radius: 0.25rem;
44
+
45
+ .mat-mdc-button-persistent-ripple {
46
+ border-radius: inherit;
47
+ }
48
+ }
49
+ }
@@ -9,13 +9,13 @@ export declare class GuiCombobox implements ControlValueAccessor, AfterViewInit
9
9
  config: Partial<GuiControl>;
10
10
  disabled: boolean;
11
11
  appendTo: string;
12
- value: GuiBasicValue;
12
+ value: GuiBasicValue | GuiBasicValue[];
13
13
  private onChange;
14
14
  private onTouched;
15
15
  constructor(cdr: ChangeDetectorRef);
16
16
  ngAfterViewInit(): void;
17
- writeValue(value: string | number): void;
18
- registerOnChange(fn: (value: GuiBasicValue) => void): void;
17
+ writeValue(value: GuiBasicValue | GuiBasicValue[]): void;
18
+ registerOnChange(fn: (value: GuiBasicValue | GuiBasicValue[]) => void): void;
19
19
  registerOnTouched(fn: () => void): void;
20
20
  setDisabledState(isDisabled: boolean): void;
21
21
  onValueChange(): void;
@@ -33,16 +33,16 @@ export class GuiButtonToggle {
33
33
  onValueChange() {
34
34
  this.onChange(this.value);
35
35
  }
36
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GuiButtonToggle, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
37
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: GuiButtonToggle, isStandalone: true, selector: "gui-button-toggle", inputs: { config: "config", disabled: "disabled" }, host: { classAttribute: "gui-field gui-button-toggle" }, providers: [
36
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GuiButtonToggle, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
37
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: GuiButtonToggle, isStandalone: true, selector: "gui-button-toggle", inputs: { config: "config", disabled: "disabled" }, host: { classAttribute: "gui-field gui-button-toggle" }, providers: [
38
38
  {
39
39
  provide: NG_VALUE_ACCESSOR,
40
40
  useExisting: forwardRef(() => GuiButtonToggle),
41
41
  multi: true,
42
42
  },
43
- ], ngImport: i0, template: "<mat-button-toggle-group [(ngModel)]=\"value\" [disabled]=\"disabled\" [multiple]=\"config.multiple\"\n (change)=\"onValueChange()\" hideSingleSelectionIndicator hideMultipleSelectionIndicator>\n @for (opt of config.options; track opt) {\n <mat-button-toggle disableRipple\n [class.gui-icon-toggle]=\"config.useIcon\"\n [flex]=\"opt.col\"\n [value]=\"opt.value\"\n [disabled]=\"opt.disabled\"\n [title]=\"config.useIcon ? opt.label : ''\">\n @if (config.useIcon) {\n <gui-icon [src]=\"opt.src!\" />\n } @else {\n {{opt.label}}\n }\n </mat-button-toggle>\n }\n</mat-button-toggle-group>\n@if (config.parentType==='inline') {\n <mat-hint>\n <gui-field-label [config]=\"config\" />\n </mat-hint>\n}\n", styles: [".gui-button-toggle{--mat-standard-button-toggle-shape: .25rem;--mat-standard-button-toggle-height: 1.5rem;--mat-standard-button-toggle-label-text-size: .75rem;--mat-standard-button-toggle-label-text-weight: 400;--mat-standard-button-toggle-label-text-line-height: var(--mat-standard-button-toggle-height)}.gui-button-toggle .mat-button-toggle-group{flex-wrap:wrap;border-width:0}.gui-button-toggle .mat-button-toggle-group-appearance-standard .mat-button-toggle-appearance-standard+.mat-button-toggle-appearance-standard{border-width:0}.gui-button-toggle .mat-button-toggle-appearance-standard{background-color:var(--mdc-filled-text-field-container-color)}.gui-icon-toggle.mat-button-toggle .mat-button-toggle-label-content{padding:0;line-height:normal}.gui-icon-toggle.mat-button-toggle-checked img{opacity:.64}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "directive", type: MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: GuiFlexDirective, selector: "[flex]", inputs: ["flex"] }, { kind: "component", type: GuiIcon, selector: "gui-icon", inputs: ["src"] }, { kind: "component", type: GuiFieldLabel, selector: "gui-field-label", inputs: ["config", "index"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
43
+ ], ngImport: i0, template: "<mat-button-toggle-group\n [(ngModel)]=\"value\"\n [disabled]=\"disabled\"\n [multiple]=\"config.multiple\"\n (change)=\"onValueChange()\"\n hideSingleSelectionIndicator\n hideMultipleSelectionIndicator\n>\n @for (opt of config.options; track opt) {\n <mat-button-toggle\n disableRipple\n [class.gui-icon-toggle]=\"config.useIcon\"\n [flex]=\"opt.col\"\n [value]=\"opt.value\"\n [disabled]=\"opt.disabled\"\n [title]=\"config.useIcon ? opt.label : ''\"\n >\n @if (config.useIcon) {\n <gui-icon [src]=\"opt.src!\" />\n } @else {\n {{ opt.label }}\n }\n </mat-button-toggle>\n }\n</mat-button-toggle-group>\n@if (config.parentType === 'inline') {\n <mat-hint>\n <gui-field-label [config]=\"config\" />\n </mat-hint>\n}\n", styles: [".gui-button-toggle{--mat-standard-button-toggle-shape: .25rem;--mat-standard-button-toggle-height: 1.5rem;--mat-standard-button-toggle-label-text-size: .75rem;--mat-standard-button-toggle-label-text-weight: 400;--mat-standard-button-toggle-label-text-line-height: var(--mat-standard-button-toggle-height)}.gui-button-toggle .mat-button-toggle-group{flex-wrap:wrap;border-width:0}.gui-button-toggle .mat-button-toggle-group-appearance-standard .mat-button-toggle-appearance-standard+.mat-button-toggle-appearance-standard{border-width:0}.gui-button-toggle .mat-button-toggle-appearance-standard{background-color:var(--mdc-filled-text-field-container-color)}.gui-icon-toggle.mat-button-toggle .mat-button-toggle-label-content{padding:0;line-height:normal}.gui-icon-toggle.mat-button-toggle-checked img{opacity:.64}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "directive", type: MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: GuiFlexDirective, selector: "[flex]", inputs: ["flex"] }, { kind: "component", type: GuiIcon, selector: "gui-icon", inputs: ["src"] }, { kind: "component", type: GuiFieldLabel, selector: "gui-field-label", inputs: ["config", "index"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
44
44
  }
45
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GuiButtonToggle, decorators: [{
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GuiButtonToggle, decorators: [{
46
46
  type: Component,
47
47
  args: [{ selector: 'gui-button-toggle', host: {
48
48
  class: 'gui-field gui-button-toggle',
@@ -60,10 +60,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
60
60
  GuiFlexDirective,
61
61
  GuiIcon,
62
62
  GuiFieldLabel,
63
- ], template: "<mat-button-toggle-group [(ngModel)]=\"value\" [disabled]=\"disabled\" [multiple]=\"config.multiple\"\n (change)=\"onValueChange()\" hideSingleSelectionIndicator hideMultipleSelectionIndicator>\n @for (opt of config.options; track opt) {\n <mat-button-toggle disableRipple\n [class.gui-icon-toggle]=\"config.useIcon\"\n [flex]=\"opt.col\"\n [value]=\"opt.value\"\n [disabled]=\"opt.disabled\"\n [title]=\"config.useIcon ? opt.label : ''\">\n @if (config.useIcon) {\n <gui-icon [src]=\"opt.src!\" />\n } @else {\n {{opt.label}}\n }\n </mat-button-toggle>\n }\n</mat-button-toggle-group>\n@if (config.parentType==='inline') {\n <mat-hint>\n <gui-field-label [config]=\"config\" />\n </mat-hint>\n}\n", styles: [".gui-button-toggle{--mat-standard-button-toggle-shape: .25rem;--mat-standard-button-toggle-height: 1.5rem;--mat-standard-button-toggle-label-text-size: .75rem;--mat-standard-button-toggle-label-text-weight: 400;--mat-standard-button-toggle-label-text-line-height: var(--mat-standard-button-toggle-height)}.gui-button-toggle .mat-button-toggle-group{flex-wrap:wrap;border-width:0}.gui-button-toggle .mat-button-toggle-group-appearance-standard .mat-button-toggle-appearance-standard+.mat-button-toggle-appearance-standard{border-width:0}.gui-button-toggle .mat-button-toggle-appearance-standard{background-color:var(--mdc-filled-text-field-container-color)}.gui-icon-toggle.mat-button-toggle .mat-button-toggle-label-content{padding:0;line-height:normal}.gui-icon-toggle.mat-button-toggle-checked img{opacity:.64}\n"] }]
63
+ ], template: "<mat-button-toggle-group\n [(ngModel)]=\"value\"\n [disabled]=\"disabled\"\n [multiple]=\"config.multiple\"\n (change)=\"onValueChange()\"\n hideSingleSelectionIndicator\n hideMultipleSelectionIndicator\n>\n @for (opt of config.options; track opt) {\n <mat-button-toggle\n disableRipple\n [class.gui-icon-toggle]=\"config.useIcon\"\n [flex]=\"opt.col\"\n [value]=\"opt.value\"\n [disabled]=\"opt.disabled\"\n [title]=\"config.useIcon ? opt.label : ''\"\n >\n @if (config.useIcon) {\n <gui-icon [src]=\"opt.src!\" />\n } @else {\n {{ opt.label }}\n }\n </mat-button-toggle>\n }\n</mat-button-toggle-group>\n@if (config.parentType === 'inline') {\n <mat-hint>\n <gui-field-label [config]=\"config\" />\n </mat-hint>\n}\n", styles: [".gui-button-toggle{--mat-standard-button-toggle-shape: .25rem;--mat-standard-button-toggle-height: 1.5rem;--mat-standard-button-toggle-label-text-size: .75rem;--mat-standard-button-toggle-label-text-weight: 400;--mat-standard-button-toggle-label-text-line-height: var(--mat-standard-button-toggle-height)}.gui-button-toggle .mat-button-toggle-group{flex-wrap:wrap;border-width:0}.gui-button-toggle .mat-button-toggle-group-appearance-standard .mat-button-toggle-appearance-standard+.mat-button-toggle-appearance-standard{border-width:0}.gui-button-toggle .mat-button-toggle-appearance-standard{background-color:var(--mdc-filled-text-field-container-color)}.gui-icon-toggle.mat-button-toggle .mat-button-toggle-label-content{padding:0;line-height:normal}.gui-icon-toggle.mat-button-toggle-checked img{opacity:.64}\n"] }]
64
64
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { config: [{
65
65
  type: Input
66
66
  }], disabled: [{
67
67
  type: Input
68
68
  }] } });
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLXRvZ2dsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9idXR0b24tdG9nZ2xlL2J1dHRvbi10b2dnbGUudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvYnV0dG9uLXRvZ2dsZS9idXR0b24tdG9nZ2xlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFDTCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQzs7O0FBNkJqQyxNQUFNLE9BQU8sZUFBZTtJQVMxQixZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQVJqQyxXQUFNLEdBQXdCLEVBQUUsQ0FBQztRQUNqQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRTFCLFVBQUssR0FBa0IsRUFBRSxDQUFDO1FBRWxCLGFBQVEsR0FBbUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQ3BELGNBQVMsR0FBZSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFFSSxDQUFDO0lBRTlDLFVBQVUsQ0FBQyxLQUFvQjtRQUM3QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFrQztRQUNqRCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBYztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBbUI7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7UUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7OEdBL0JVLGVBQWU7a0dBQWYsZUFBZSw2S0FsQmY7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQztnQkFDOUMsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLDBCQy9CSCwrdkJBc0JBLHUyQkRZSSxXQUFXLCtWQUNYLG9CQUFvQixrVEFDcEIsZUFBZSw2UUFDZixPQUFPLDhFQUNQLGdCQUFnQixxRUFDaEIsT0FBTyxzRUFDUCxhQUFhOzsyRkFHSixlQUFlO2tCQTNCM0IsU0FBUzsrQkFDRSxtQkFBbUIsUUFHdkI7d0JBQ0osS0FBSyxFQUFFLDZCQUE2QjtxQkFDckMsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxhQUNwQzt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQzs0QkFDOUMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0YsY0FDVyxJQUFJLFdBQ1A7d0JBQ1AsV0FBVzt3QkFDWCxvQkFBb0I7d0JBQ3BCLGVBQWU7d0JBQ2YsT0FBTzt3QkFDUCxnQkFBZ0I7d0JBQ2hCLE9BQU87d0JBQ1AsYUFBYTtxQkFDZDtzRkFHUSxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJ1dHRvblRvZ2dsZSwgTWF0QnV0dG9uVG9nZ2xlR3JvdXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24tdG9nZ2xlJztcbmltcG9ydCB7IE1hdEhpbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IEd1aUZpZWxkTGFiZWwgfSBmcm9tICcuLi9maWVsZC1sYWJlbC9maWVsZC1sYWJlbCc7XG5pbXBvcnQgeyBHdWlGbGV4RGlyZWN0aXZlIH0gZnJvbSAnLi4vZ3VpLXV0aWxzJztcbmltcG9ydCB7IEd1aUJhc2ljVmFsdWUsIEd1aUNvbnRyb2wgfSBmcm9tICcuLi9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgR3VpSWNvbiB9IGZyb20gJy4vaWNvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2d1aS1idXR0b24tdG9nZ2xlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2J1dHRvbi10b2dnbGUuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9idXR0b24tdG9nZ2xlLnNjc3MnLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdndWktZmllbGQgZ3VpLWJ1dHRvbi10b2dnbGUnLFxuICB9LFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBHdWlCdXR0b25Ub2dnbGUpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEZvcm1zTW9kdWxlLFxuICAgIE1hdEJ1dHRvblRvZ2dsZUdyb3VwLFxuICAgIE1hdEJ1dHRvblRvZ2dsZSxcbiAgICBNYXRIaW50LFxuICAgIEd1aUZsZXhEaXJlY3RpdmUsXG4gICAgR3VpSWNvbixcbiAgICBHdWlGaWVsZExhYmVsLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBHdWlCdXR0b25Ub2dnbGUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBJbnB1dCgpIGNvbmZpZzogUGFydGlhbDxHdWlDb250cm9sPiA9IHt9O1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIHZhbHVlOiBHdWlCYXNpY1ZhbHVlID0gJyc7XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZTogKHZhbHVlOiBHdWlCYXNpY1ZhbHVlKSA9PiB2b2lkID0gKCkgPT4ge307XG4gIHByaXZhdGUgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IEd1aUJhc2ljVmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IEd1aUJhc2ljVmFsdWUpID0+IHZvaWQpIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uVmFsdWVDaGFuZ2UoKSB7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgfVxufVxuIiwiPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIFsobmdNb2RlbCldPVwidmFsdWVcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbbXVsdGlwbGVdPVwiY29uZmlnLm11bHRpcGxlXCJcbiAgKGNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlKClcIiBoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIGhpZGVNdWx0aXBsZVNlbGVjdGlvbkluZGljYXRvcj5cbiAgQGZvciAob3B0IG9mIGNvbmZpZy5vcHRpb25zOyB0cmFjayBvcHQpIHtcbiAgICA8bWF0LWJ1dHRvbi10b2dnbGUgZGlzYWJsZVJpcHBsZVxuICAgICAgW2NsYXNzLmd1aS1pY29uLXRvZ2dsZV09XCJjb25maWcudXNlSWNvblwiXG4gICAgICBbZmxleF09XCJvcHQuY29sXCJcbiAgICAgIFt2YWx1ZV09XCJvcHQudmFsdWVcIlxuICAgICAgW2Rpc2FibGVkXT1cIm9wdC5kaXNhYmxlZFwiXG4gICAgICBbdGl0bGVdPVwiY29uZmlnLnVzZUljb24gPyBvcHQubGFiZWwgOiAnJ1wiPlxuICAgICAgQGlmIChjb25maWcudXNlSWNvbikge1xuICAgICAgICA8Z3VpLWljb24gW3NyY109XCJvcHQuc3JjIVwiIC8+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAge3tvcHQubGFiZWx9fVxuICAgICAgfVxuICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gIH1cbjwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XG5AaWYgKGNvbmZpZy5wYXJlbnRUeXBlPT09J2lubGluZScpIHtcbiAgPG1hdC1oaW50PlxuICAgIDxndWktZmllbGQtbGFiZWwgW2NvbmZpZ109XCJjb25maWdcIiAvPlxuICA8L21hdC1oaW50PlxufVxuIl19
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLXRvZ2dsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9idXR0b24tdG9nZ2xlL2J1dHRvbi10b2dnbGUudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvYnV0dG9uLXRvZ2dsZS9idXR0b24tdG9nZ2xlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFDTCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQzs7O0FBNkJqQyxNQUFNLE9BQU8sZUFBZTtJQVMxQixZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQVJqQyxXQUFNLEdBQXdCLEVBQUUsQ0FBQztRQUNqQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRTFCLFVBQUssR0FBb0MsRUFBRSxDQUFDO1FBRXBDLGFBQVEsR0FBcUQsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQ3RFLGNBQVMsR0FBZSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFFSSxDQUFDO0lBRTlDLFVBQVUsQ0FBQyxLQUFzQztRQUMvQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFvRDtRQUNuRSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBYztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBbUI7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7UUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7K0dBL0JVLGVBQWU7bUdBQWYsZUFBZSw2S0FsQmY7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQztnQkFDOUMsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLDBCQy9CSCxpeUJBOEJBLHUyQkRJSSxXQUFXLCtWQUNYLG9CQUFvQixrVEFDcEIsZUFBZSw2UUFDZixPQUFPLDhFQUNQLGdCQUFnQixxRUFDaEIsT0FBTyxzRUFDUCxhQUFhOzs0RkFHSixlQUFlO2tCQTNCM0IsU0FBUzsrQkFDRSxtQkFBbUIsUUFHdkI7d0JBQ0osS0FBSyxFQUFFLDZCQUE2QjtxQkFDckMsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxhQUNwQzt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQzs0QkFDOUMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0YsY0FDVyxJQUFJLFdBQ1A7d0JBQ1AsV0FBVzt3QkFDWCxvQkFBb0I7d0JBQ3BCLGVBQWU7d0JBQ2YsT0FBTzt3QkFDUCxnQkFBZ0I7d0JBQ2hCLE9BQU87d0JBQ1AsYUFBYTtxQkFDZDtzRkFHUSxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJ1dHRvblRvZ2dsZSwgTWF0QnV0dG9uVG9nZ2xlR3JvdXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24tdG9nZ2xlJztcbmltcG9ydCB7IE1hdEhpbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IEd1aUZpZWxkTGFiZWwgfSBmcm9tICcuLi9maWVsZC1sYWJlbC9maWVsZC1sYWJlbCc7XG5pbXBvcnQgeyBHdWlGbGV4RGlyZWN0aXZlIH0gZnJvbSAnLi4vZ3VpLXV0aWxzJztcbmltcG9ydCB7IEd1aUJhc2ljVmFsdWUsIEd1aUNvbnRyb2wgfSBmcm9tICcuLi9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgR3VpSWNvbiB9IGZyb20gJy4vaWNvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2d1aS1idXR0b24tdG9nZ2xlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2J1dHRvbi10b2dnbGUuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9idXR0b24tdG9nZ2xlLnNjc3MnLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdndWktZmllbGQgZ3VpLWJ1dHRvbi10b2dnbGUnLFxuICB9LFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBHdWlCdXR0b25Ub2dnbGUpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEZvcm1zTW9kdWxlLFxuICAgIE1hdEJ1dHRvblRvZ2dsZUdyb3VwLFxuICAgIE1hdEJ1dHRvblRvZ2dsZSxcbiAgICBNYXRIaW50LFxuICAgIEd1aUZsZXhEaXJlY3RpdmUsXG4gICAgR3VpSWNvbixcbiAgICBHdWlGaWVsZExhYmVsLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBHdWlCdXR0b25Ub2dnbGUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBJbnB1dCgpIGNvbmZpZzogUGFydGlhbDxHdWlDb250cm9sPiA9IHt9O1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIHZhbHVlOiBHdWlCYXNpY1ZhbHVlIHwgR3VpQmFzaWNWYWx1ZVtdID0gJyc7XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZTogKHZhbHVlOiBHdWlCYXNpY1ZhbHVlIHwgR3VpQmFzaWNWYWx1ZVtdKSA9PiB2b2lkID0gKCkgPT4ge307XG4gIHByaXZhdGUgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IEd1aUJhc2ljVmFsdWUgfCBHdWlCYXNpY1ZhbHVlW10pIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IEd1aUJhc2ljVmFsdWUgfCBHdWlCYXNpY1ZhbHVlW10pID0+IHZvaWQpIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uVmFsdWVDaGFuZ2UoKSB7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgfVxufVxuIiwiPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwXG4gIFsobmdNb2RlbCldPVwidmFsdWVcIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbbXVsdGlwbGVdPVwiY29uZmlnLm11bHRpcGxlXCJcbiAgKGNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlKClcIlxuICBoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yXG4gIGhpZGVNdWx0aXBsZVNlbGVjdGlvbkluZGljYXRvclxuPlxuICBAZm9yIChvcHQgb2YgY29uZmlnLm9wdGlvbnM7IHRyYWNrIG9wdCkge1xuICAgIDxtYXQtYnV0dG9uLXRvZ2dsZVxuICAgICAgZGlzYWJsZVJpcHBsZVxuICAgICAgW2NsYXNzLmd1aS1pY29uLXRvZ2dsZV09XCJjb25maWcudXNlSWNvblwiXG4gICAgICBbZmxleF09XCJvcHQuY29sXCJcbiAgICAgIFt2YWx1ZV09XCJvcHQudmFsdWVcIlxuICAgICAgW2Rpc2FibGVkXT1cIm9wdC5kaXNhYmxlZFwiXG4gICAgICBbdGl0bGVdPVwiY29uZmlnLnVzZUljb24gPyBvcHQubGFiZWwgOiAnJ1wiXG4gICAgPlxuICAgICAgQGlmIChjb25maWcudXNlSWNvbikge1xuICAgICAgICA8Z3VpLWljb24gW3NyY109XCJvcHQuc3JjIVwiIC8+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAge3sgb3B0LmxhYmVsIH19XG4gICAgICB9XG4gICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgfVxuPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbkBpZiAoY29uZmlnLnBhcmVudFR5cGUgPT09ICdpbmxpbmUnKSB7XG4gIDxtYXQtaGludD5cbiAgICA8Z3VpLWZpZWxkLWxhYmVsIFtjb25maWddPVwiY29uZmlnXCIgLz5cbiAgPC9tYXQtaGludD5cbn1cbiJdfQ==
@@ -7,8 +7,8 @@ export class GuiIcon {
7
7
  isUrl() {
8
8
  return /^(https?:\/\/|\.?\/)\w+/.test(this.src);
9
9
  }
10
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GuiIcon, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
11
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: GuiIcon, isStandalone: true, selector: "gui-icon", inputs: { src: "src" }, host: { classAttribute: "gui-icon" }, ngImport: i0, template: `
10
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GuiIcon, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
11
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: GuiIcon, isStandalone: true, selector: "gui-icon", inputs: { src: "src" }, host: { classAttribute: "gui-icon" }, ngImport: i0, template: `
12
12
  @if (isUrl()) {
13
13
  <img [src]="src" alt="" />
14
14
  } @else {
@@ -16,7 +16,7 @@ export class GuiIcon {
16
16
  }
17
17
  `, isInline: true, styles: [".gui-icon{display:inline-flex}.gui-icon img,.gui-icon i{display:block;width:var(--mat-standard-button-toggle-height);height:var(--mat-standard-button-toggle-height);line-height:var(--mat-standard-button-toggle-height)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
18
18
  }
19
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GuiIcon, decorators: [{
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GuiIcon, decorators: [{
20
20
  type: Component,
21
21
  args: [{ selector: 'gui-icon', template: `
22
22
  @if (isUrl()) {
@@ -30,4 +30,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
30
30
  }], propDecorators: { src: [{
31
31
  type: Input
32
32
  }] } });
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9idXR0b24tdG9nZ2xlL2ljb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBbUI3RixNQUFNLE9BQU8sT0FBTztJQWpCcEI7UUFrQlcsUUFBRyxHQUFHLEVBQUUsQ0FBQztLQUtuQjtJQUhDLEtBQUs7UUFDSCxPQUFPLHlCQUF5QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsQ0FBQzs4R0FMVSxPQUFPO2tHQUFQLE9BQU8sa0lBZlI7Ozs7OztHQU1UOzsyRkFTVSxPQUFPO2tCQWpCbkIsU0FBUzsrQkFDRSxVQUFVLFlBQ1Y7Ozs7OztHQU1ULFFBRUs7d0JBQ0osS0FBSyxFQUFFLFVBQVU7cUJBQ2xCLGlCQUNjLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSTs4QkFHUCxHQUFHO3NCQUFYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ3VpLWljb24nLFxuICB0ZW1wbGF0ZTogYFxuICAgIEBpZiAoaXNVcmwoKSkge1xuICAgICAgPGltZyBbc3JjXT1cInNyY1wiIGFsdD1cIlwiIC8+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8aSBbY2xhc3NdPVwic3JjXCI+PC9pPlxuICAgIH1cbiAgYCxcbiAgc3R5bGVVcmw6ICcuL2ljb24uc2NzcycsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2d1aS1pY29uJyxcbiAgfSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEd1aUljb24ge1xuICBASW5wdXQoKSBzcmMgPSAnJztcblxuICBpc1VybCgpIHtcbiAgICByZXR1cm4gL14oaHR0cHM/OlxcL1xcL3xcXC4/XFwvKVxcdysvLnRlc3QodGhpcy5zcmMpO1xuICB9XG59XG4iXX0=
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9idXR0b24tdG9nZ2xlL2ljb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBbUI3RixNQUFNLE9BQU8sT0FBTztJQWpCcEI7UUFrQlcsUUFBRyxHQUFHLEVBQUUsQ0FBQztLQUtuQjtJQUhDLEtBQUs7UUFDSCxPQUFPLHlCQUF5QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsQ0FBQzsrR0FMVSxPQUFPO21HQUFQLE9BQU8sa0lBZlI7Ozs7OztHQU1UOzs0RkFTVSxPQUFPO2tCQWpCbkIsU0FBUzsrQkFDRSxVQUFVLFlBQ1Y7Ozs7OztHQU1ULFFBRUs7d0JBQ0osS0FBSyxFQUFFLFVBQVU7cUJBQ2xCLGlCQUNjLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSTs4QkFHUCxHQUFHO3NCQUFYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ3VpLWljb24nLFxuICB0ZW1wbGF0ZTogYFxuICAgIEBpZiAoaXNVcmwoKSkge1xuICAgICAgPGltZyBbc3JjXT1cInNyY1wiIGFsdD1cIlwiIC8+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8aSBbY2xhc3NdPVwic3JjXCI+PC9pPlxuICAgIH1cbiAgYCxcbiAgc3R5bGVVcmw6ICcuL2ljb24uc2NzcycsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2d1aS1pY29uJyxcbiAgfSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEd1aUljb24ge1xuICBASW5wdXQoKSBzcmMgPSAnJztcblxuICBpc1VybCgpIHtcbiAgICByZXR1cm4gL14oaHR0cHM/OlxcL1xcL3xcXC4/XFwvKVxcdysvLnRlc3QodGhpcy5zcmMpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,20 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export class GuiCodeareaConfig {
5
+ constructor() {
6
+ this.changes = new Subject();
7
+ this.theme = 'light';
8
+ this.languages = [];
9
+ this.extensions = [];
10
+ }
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GuiCodeareaConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
12
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GuiCodeareaConfig, providedIn: 'root' }); }
13
+ }
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GuiCodeareaConfig, decorators: [{
15
+ type: Injectable,
16
+ args: [{
17
+ providedIn: 'root',
18
+ }]
19
+ }] });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWFyZWEtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3VpL2NvZGVhcmVhL2NvZGVhcmVhLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBTS9CLE1BQU0sT0FBTyxpQkFBaUI7SUFIOUI7UUFJVyxZQUFPLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFFdEQsVUFBSyxHQUFVLE9BQU8sQ0FBQztRQUV2QixjQUFTLEdBQTBCLEVBQUUsQ0FBQztRQUV0QyxlQUFVLEdBQWlFLEVBQUUsQ0FBQztLQUMvRTsrR0FSWSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQUZoQixNQUFNOzs0RkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGhlbWUgfSBmcm9tICdAYWNyb2RhdGEvY29kZS1lZGl0b3InO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGFuZ3VhZ2VEZXNjcmlwdGlvbiB9IGZyb20gJ0Bjb2RlbWlycm9yL2xhbmd1YWdlJztcbmltcG9ydCB7IEV4dGVuc2lvbiB9IGZyb20gJ0Bjb2RlbWlycm9yL3N0YXRlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEd1aUNvZGVhcmVhRGlhbG9nRGF0YSB9IGZyb20gJy4vY29kZWFyZWEtZGlhbG9nJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEd1aUNvZGVhcmVhQ29uZmlnIHtcbiAgcmVhZG9ubHkgY2hhbmdlczogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgdGhlbWU6IFRoZW1lID0gJ2xpZ2h0JztcblxuICBsYW5ndWFnZXM6IExhbmd1YWdlRGVzY3JpcHRpb25bXSA9IFtdO1xuXG4gIGV4dGVuc2lvbnM6IEV4dGVuc2lvbltdIHwgKChkYXRhOiBHdWlDb2RlYXJlYURpYWxvZ0RhdGEpID0+IEV4dGVuc2lvbltdKSA9IFtdO1xufVxuIl19
@@ -0,0 +1,70 @@
1
+ import { CodeEditor } from '@acrodata/code-editor';
2
+ import { RndDialogDragHandle } from '@acrodata/rnd-dialog';
3
+ import { DIALOG_DATA } from '@angular/cdk/dialog';
4
+ import { ChangeDetectionStrategy, Component, Inject, ViewEncapsulation, } from '@angular/core';
5
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
+ import { FormsModule } from '@angular/forms';
7
+ import { MatButton, MatIconButton } from '@angular/material/button';
8
+ import { MatIcon } from '@angular/material/icon';
9
+ import { GuiIconButtonWrapper } from '../icon-button-wrapper/icon-button-wrapper';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@angular/cdk/dialog";
12
+ import * as i2 from "./codearea-config";
13
+ import * as i3 from "../gui-icons";
14
+ import * as i4 from "@angular/forms";
15
+ export class GuiCodeareaDialog {
16
+ get languages() {
17
+ return this.codeareaCfg.languages;
18
+ }
19
+ get theme() {
20
+ return this.codeareaCfg.theme;
21
+ }
22
+ get extensions() {
23
+ return typeof this.codeareaCfg.extensions === 'function'
24
+ ? this.codeareaCfg.extensions(this.data)
25
+ : this.codeareaCfg.extensions;
26
+ }
27
+ constructor(dialogRef, data, cdr, destroyRef, codeareaCfg, iconsRegistry) {
28
+ this.dialogRef = dialogRef;
29
+ this.data = data;
30
+ this.cdr = cdr;
31
+ this.destroyRef = destroyRef;
32
+ this.codeareaCfg = codeareaCfg;
33
+ this.langDesc = this.codeareaCfg.languages.find(lang => this.data.language && lang.alias.includes(this.data.language.toLowerCase()));
34
+ this.title = `${this.data.title || ''} (${this.langDesc?.name || 'Plain Text'})`;
35
+ this.lineWrapping = false;
36
+ iconsRegistry.add('wrap');
37
+ this.codeareaCfg.changes.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
38
+ this.cdr.markForCheck();
39
+ });
40
+ }
41
+ toggleLineWrapping() {
42
+ this.lineWrapping = !this.lineWrapping;
43
+ }
44
+ save() {
45
+ this.dialogRef.close(this.data.value);
46
+ }
47
+ close() {
48
+ this.dialogRef.close();
49
+ }
50
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GuiCodeareaDialog, deps: [{ token: i1.DialogRef }, { token: DIALOG_DATA }, { token: i0.ChangeDetectorRef }, { token: i0.DestroyRef }, { token: i2.GuiCodeareaConfig }, { token: i3.GuiIconsRegistry }], target: i0.ɵɵFactoryTarget.Component }); }
51
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: GuiCodeareaDialog, isStandalone: true, selector: "gui-codearea-dialog", host: { classAttribute: "gui-codearea-dialog" }, ngImport: i0, template: "<div\n class=\"gui-codearea-dialog-header\"\n [class.dragging]=\"dragHandle.isDragging\"\n rndDialogDragHandle\n #dragHandle=\"rndDialogDragHandle\"\n>\n <span class=\"gui-codearea-dialog-title\" [title]=\"title\">{{ title }}</span>\n\n <span class=\"gui-codearea-dialog-spacer\"></span>\n\n <button mat-stroked-button (click)=\"close()\">Close</button>\n <button mat-flat-button (click)=\"save()\">Save</button>\n</div>\n\n<div class=\"gui-codearea-dialog-content\">\n <code-editor\n [(ngModel)]=\"data.value\"\n [disabled]=\"data.disabled || false\"\n [readonly]=\"data.readonly || false\"\n [language]=\"data.language || ''\"\n [languages]=\"languages\"\n [theme]=\"theme\"\n [extensions]=\"extensions\"\n [lineWrapping]=\"lineWrapping\"\n indentWithTab\n />\n\n <div class=\"gui-codearea-btns\">\n <gui-icon-button-wrapper>\n <button mat-icon-button type=\"button\" (click)=\"toggleLineWrapping()\">\n <mat-icon svgIcon=\"wrap\" />\n </button>\n </gui-icon-button-wrapper>\n </div>\n</div>\n", styles: [".gui-codearea-dialog-panel{--rnd-dialog-container-color: var(--mdc-dialog-container-color)}.gui-codearea-dialog{--mdc-outlined-button-label-text-size: .75rem;--mdc-outlined-button-container-height: 1.5rem;--mat-outlined-button-horizontal-padding: .75rem;--mat-outlined-button-touch-target-display: none;--mdc-filled-button-label-text-size: .75rem;--mdc-filled-button-container-height: 1.5rem;--mat-filled-button-horizontal-padding: .75rem;--mat-filled-button-touch-target-display: none;display:flex;flex-direction:column;height:100%;overflow:hidden;border-radius:inherit;font-size:.75rem}.gui-codearea-dialog-header{display:flex;gap:.5rem;align-items:center;padding:.5rem;cursor:grab;border-bottom:1px solid rgba(0,0,0,.24);box-shadow:0 1px #ffffff3d}.gui-codearea-dialog-header.dragging{cursor:grabbing}.gui-codearea-dialog-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gui-codearea-dialog-spacer{flex:1}.gui-codearea-dialog-content{position:relative;flex:1;overflow:auto}.gui-codearea-dialog-content .code-editor{height:100%;overflow:auto;border:1px solid transparent}.gui-codearea-dialog-content:hover .gui-codearea-btns{display:block}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: RndDialogDragHandle, selector: "[rnd-dialog-drag-handle], [rndDialogDragHandle]", exportAs: ["rndDialogDragHandle"] }, { kind: "component", type: CodeEditor, selector: "code-editor", inputs: ["root", "autoFocus", "value", "disabled", "readonly", "theme", "placeholder", "indentWithTab", "indentUnit", "lineWrapping", "highlightWhitespace", "languages", "language", "setup", "extensions"], outputs: ["change", "focus", "blur"] }, { kind: "component", type: GuiIconButtonWrapper, selector: "gui-icon-button-wrapper" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
52
+ }
53
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GuiCodeareaDialog, decorators: [{
54
+ type: Component,
55
+ args: [{ selector: 'gui-codearea-dialog', standalone: true, imports: [
56
+ FormsModule,
57
+ MatButton,
58
+ MatIconButton,
59
+ MatIcon,
60
+ RndDialogDragHandle,
61
+ CodeEditor,
62
+ GuiIconButtonWrapper,
63
+ ], host: {
64
+ class: 'gui-codearea-dialog',
65
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"gui-codearea-dialog-header\"\n [class.dragging]=\"dragHandle.isDragging\"\n rndDialogDragHandle\n #dragHandle=\"rndDialogDragHandle\"\n>\n <span class=\"gui-codearea-dialog-title\" [title]=\"title\">{{ title }}</span>\n\n <span class=\"gui-codearea-dialog-spacer\"></span>\n\n <button mat-stroked-button (click)=\"close()\">Close</button>\n <button mat-flat-button (click)=\"save()\">Save</button>\n</div>\n\n<div class=\"gui-codearea-dialog-content\">\n <code-editor\n [(ngModel)]=\"data.value\"\n [disabled]=\"data.disabled || false\"\n [readonly]=\"data.readonly || false\"\n [language]=\"data.language || ''\"\n [languages]=\"languages\"\n [theme]=\"theme\"\n [extensions]=\"extensions\"\n [lineWrapping]=\"lineWrapping\"\n indentWithTab\n />\n\n <div class=\"gui-codearea-btns\">\n <gui-icon-button-wrapper>\n <button mat-icon-button type=\"button\" (click)=\"toggleLineWrapping()\">\n <mat-icon svgIcon=\"wrap\" />\n </button>\n </gui-icon-button-wrapper>\n </div>\n</div>\n", styles: [".gui-codearea-dialog-panel{--rnd-dialog-container-color: var(--mdc-dialog-container-color)}.gui-codearea-dialog{--mdc-outlined-button-label-text-size: .75rem;--mdc-outlined-button-container-height: 1.5rem;--mat-outlined-button-horizontal-padding: .75rem;--mat-outlined-button-touch-target-display: none;--mdc-filled-button-label-text-size: .75rem;--mdc-filled-button-container-height: 1.5rem;--mat-filled-button-horizontal-padding: .75rem;--mat-filled-button-touch-target-display: none;display:flex;flex-direction:column;height:100%;overflow:hidden;border-radius:inherit;font-size:.75rem}.gui-codearea-dialog-header{display:flex;gap:.5rem;align-items:center;padding:.5rem;cursor:grab;border-bottom:1px solid rgba(0,0,0,.24);box-shadow:0 1px #ffffff3d}.gui-codearea-dialog-header.dragging{cursor:grabbing}.gui-codearea-dialog-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gui-codearea-dialog-spacer{flex:1}.gui-codearea-dialog-content{position:relative;flex:1;overflow:auto}.gui-codearea-dialog-content .code-editor{height:100%;overflow:auto;border:1px solid transparent}.gui-codearea-dialog-content:hover .gui-codearea-btns{display:block}\n"] }]
66
+ }], ctorParameters: () => [{ type: i1.DialogRef }, { type: undefined, decorators: [{
67
+ type: Inject,
68
+ args: [DIALOG_DATA]
69
+ }] }, { type: i0.ChangeDetectorRef }, { type: i0.DestroyRef }, { type: i2.GuiCodeareaConfig }, { type: i3.GuiIconsRegistry }] });
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWFyZWEtZGlhbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3VpL2NvZGVhcmVhL2NvZGVhcmVhLWRpYWxvZy50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9jb2RlYXJlYS9jb2RlYXJlYS1kaWFsb2cuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBYSxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULE1BQU0sRUFDTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWpELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOzs7Ozs7QUErQmxGLE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxLQUFLLFVBQVU7WUFDdEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDeEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO0lBQ2xDLENBQUM7SUFVRCxZQUNVLFNBQStDLEVBQzNCLElBQTJCLEVBQy9DLEdBQXNCLEVBQ3RCLFVBQXNCLEVBQ3RCLFdBQThCLEVBQ3RDLGFBQStCO1FBTHZCLGNBQVMsR0FBVCxTQUFTLENBQXNDO1FBQzNCLFNBQUksR0FBSixJQUFJLENBQXVCO1FBQy9DLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsZ0JBQVcsR0FBWCxXQUFXLENBQW1CO1FBYnhDLGFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ3hDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FDcEYsQ0FBQztRQUVGLFVBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxZQUFZLEdBQUcsQ0FBQztRQUU1RSxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQVVuQixhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2hGLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekIsQ0FBQzsrR0FoRFUsaUJBQWlCLDJDQXlCbEIsV0FBVzttR0F6QlYsaUJBQWlCLGdJQy9DOUIsbWlDQW1DQSxnc0NESkksV0FBVywrVkFDWCxTQUFTLGlMQUNULGFBQWEsNkZBQ2IsT0FBTywySUFDUCxtQkFBbUIsK0hBQ25CLFVBQVUsNFNBQ1Ysb0JBQW9COzs0RkFVWCxpQkFBaUI7a0JBcEI3QixTQUFTOytCQUNFLHFCQUFxQixjQUNuQixJQUFJLFdBQ1A7d0JBQ1AsV0FBVzt3QkFDWCxTQUFTO3dCQUNULGFBQWE7d0JBQ2IsT0FBTzt3QkFDUCxtQkFBbUI7d0JBQ25CLFVBQVU7d0JBQ1Ysb0JBQW9CO3FCQUNyQixRQUdLO3dCQUNKLEtBQUssRUFBRSxxQkFBcUI7cUJBQzdCLGlCQUNjLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU07OzBCQTJCNUMsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29kZUVkaXRvciB9IGZyb20gJ0BhY3JvZGF0YS9jb2RlLWVkaXRvcic7XG5pbXBvcnQgeyBSbmREaWFsb2dEcmFnSGFuZGxlIH0gZnJvbSAnQGFjcm9kYXRhL3JuZC1kaWFsb2cnO1xuaW1wb3J0IHsgRElBTE9HX0RBVEEsIERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kaWFsb2cnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIERlc3Ryb3lSZWYsXG4gIEluamVjdCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRCdXR0b24sIE1hdEljb25CdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgR3VpSWNvbnNSZWdpc3RyeSB9IGZyb20gJy4uL2d1aS1pY29ucyc7XG5pbXBvcnQgeyBHdWlJY29uQnV0dG9uV3JhcHBlciB9IGZyb20gJy4uL2ljb24tYnV0dG9uLXdyYXBwZXIvaWNvbi1idXR0b24td3JhcHBlcic7XG5pbXBvcnQgeyBHdWlDb2RlYXJlYUNvbmZpZyB9IGZyb20gJy4vY29kZWFyZWEtY29uZmlnJztcblxuZXhwb3J0IGludGVyZmFjZSBHdWlDb2RlYXJlYURpYWxvZ0RhdGEge1xuICB2YWx1ZTogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHJlYWRvbmx5PzogYm9vbGVhbjtcbiAgbGFuZ3VhZ2U/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdndWktY29kZWFyZWEtZGlhbG9nJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEZvcm1zTW9kdWxlLFxuICAgIE1hdEJ1dHRvbixcbiAgICBNYXRJY29uQnV0dG9uLFxuICAgIE1hdEljb24sXG4gICAgUm5kRGlhbG9nRHJhZ0hhbmRsZSxcbiAgICBDb2RlRWRpdG9yLFxuICAgIEd1aUljb25CdXR0b25XcmFwcGVyLFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vY29kZWFyZWEtZGlhbG9nLmh0bWwnLFxuICBzdHlsZVVybDogJy4vY29kZWFyZWEtZGlhbG9nLnNjc3MnLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdndWktY29kZWFyZWEtZGlhbG9nJyxcbiAgfSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEd1aUNvZGVhcmVhRGlhbG9nIHtcbiAgZ2V0IGxhbmd1YWdlcygpIHtcbiAgICByZXR1cm4gdGhpcy5jb2RlYXJlYUNmZy5sYW5ndWFnZXM7XG4gIH1cblxuICBnZXQgdGhlbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29kZWFyZWFDZmcudGhlbWU7XG4gIH1cblxuICBnZXQgZXh0ZW5zaW9ucygpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuY29kZWFyZWFDZmcuZXh0ZW5zaW9ucyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyB0aGlzLmNvZGVhcmVhQ2ZnLmV4dGVuc2lvbnModGhpcy5kYXRhKVxuICAgICAgOiB0aGlzLmNvZGVhcmVhQ2ZnLmV4dGVuc2lvbnM7XG4gIH1cblxuICBsYW5nRGVzYyA9IHRoaXMuY29kZWFyZWFDZmcubGFuZ3VhZ2VzLmZpbmQoXG4gICAgbGFuZyA9PiB0aGlzLmRhdGEubGFuZ3VhZ2UgJiYgbGFuZy5hbGlhcy5pbmNsdWRlcyh0aGlzLmRhdGEubGFuZ3VhZ2UudG9Mb3dlckNhc2UoKSlcbiAgKTtcblxuICB0aXRsZSA9IGAke3RoaXMuZGF0YS50aXRsZSB8fCAnJ30gKCR7dGhpcy5sYW5nRGVzYz8ubmFtZSB8fCAnUGxhaW4gVGV4dCd9KWA7XG5cbiAgbGluZVdyYXBwaW5nID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkaWFsb2dSZWY6IERpYWxvZ1JlZjxzdHJpbmcsIEd1aUNvZGVhcmVhRGlhbG9nPixcbiAgICBASW5qZWN0KERJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogR3VpQ29kZWFyZWFEaWFsb2dEYXRhLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGRlc3Ryb3lSZWY6IERlc3Ryb3lSZWYsXG4gICAgcHJpdmF0ZSBjb2RlYXJlYUNmZzogR3VpQ29kZWFyZWFDb25maWcsXG4gICAgaWNvbnNSZWdpc3RyeTogR3VpSWNvbnNSZWdpc3RyeVxuICApIHtcbiAgICBpY29uc1JlZ2lzdHJ5LmFkZCgnd3JhcCcpO1xuXG4gICAgdGhpcy5jb2RlYXJlYUNmZy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZUxpbmVXcmFwcGluZygpIHtcbiAgICB0aGlzLmxpbmVXcmFwcGluZyA9ICF0aGlzLmxpbmVXcmFwcGluZztcbiAgfVxuXG4gIHNhdmUoKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5kYXRhLnZhbHVlKTtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJndWktY29kZWFyZWEtZGlhbG9nLWhlYWRlclwiXG4gIFtjbGFzcy5kcmFnZ2luZ109XCJkcmFnSGFuZGxlLmlzRHJhZ2dpbmdcIlxuICBybmREaWFsb2dEcmFnSGFuZGxlXG4gICNkcmFnSGFuZGxlPVwicm5kRGlhbG9nRHJhZ0hhbmRsZVwiXG4+XG4gIDxzcGFuIGNsYXNzPVwiZ3VpLWNvZGVhcmVhLWRpYWxvZy10aXRsZVwiIFt0aXRsZV09XCJ0aXRsZVwiPnt7IHRpdGxlIH19PC9zcGFuPlxuXG4gIDxzcGFuIGNsYXNzPVwiZ3VpLWNvZGVhcmVhLWRpYWxvZy1zcGFjZXJcIj48L3NwYW4+XG5cbiAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cImNsb3NlKClcIj5DbG9zZTwvYnV0dG9uPlxuICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiAoY2xpY2spPVwic2F2ZSgpXCI+U2F2ZTwvYnV0dG9uPlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJndWktY29kZWFyZWEtZGlhbG9nLWNvbnRlbnRcIj5cbiAgPGNvZGUtZWRpdG9yXG4gICAgWyhuZ01vZGVsKV09XCJkYXRhLnZhbHVlXCJcbiAgICBbZGlzYWJsZWRdPVwiZGF0YS5kaXNhYmxlZCB8fCBmYWxzZVwiXG4gICAgW3JlYWRvbmx5XT1cImRhdGEucmVhZG9ubHkgfHwgZmFsc2VcIlxuICAgIFtsYW5ndWFnZV09XCJkYXRhLmxhbmd1YWdlIHx8ICcnXCJcbiAgICBbbGFuZ3VhZ2VzXT1cImxhbmd1YWdlc1wiXG4gICAgW3RoZW1lXT1cInRoZW1lXCJcbiAgICBbZXh0ZW5zaW9uc109XCJleHRlbnNpb25zXCJcbiAgICBbbGluZVdyYXBwaW5nXT1cImxpbmVXcmFwcGluZ1wiXG4gICAgaW5kZW50V2l0aFRhYlxuICAvPlxuXG4gIDxkaXYgY2xhc3M9XCJndWktY29kZWFyZWEtYnRuc1wiPlxuICAgIDxndWktaWNvbi1idXR0b24td3JhcHBlcj5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwidG9nZ2xlTGluZVdyYXBwaW5nKClcIj5cbiAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJ3cmFwXCIgLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZ3VpLWljb24tYnV0dG9uLXdyYXBwZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=