@myrmidon/gve-core 0.0.4 → 0.0.6

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 (50) hide show
  1. package/README.md +45 -77
  2. package/esm2022/lib/components/animation-timeline/animation-timeline.component.mjs +50 -19
  3. package/esm2022/lib/components/animation-timeline-set/animation-timeline-set.component.mjs +32 -8
  4. package/esm2022/lib/components/animation-tween/animation-tween.component.mjs +48 -25
  5. package/esm2022/lib/components/base-text-char/base-text-char.component.mjs +13 -4
  6. package/esm2022/lib/components/base-text-editor/base-text-editor.component.mjs +10 -6
  7. package/esm2022/lib/components/base-text-view/base-text-view.component.mjs +39 -5
  8. package/esm2022/lib/components/batch-operation-editor/batch-operation-editor.component.mjs +111 -0
  9. package/esm2022/lib/components/chain-operation-editor/chain-operation-editor.component.mjs +97 -39
  10. package/esm2022/lib/components/chain-result-view/chain-result-view.component.mjs +48 -13
  11. package/esm2022/lib/components/feature-editor/feature-editor.component.mjs +27 -12
  12. package/esm2022/lib/components/feature-set-editor/feature-set-editor.component.mjs +32 -9
  13. package/esm2022/lib/components/feature-set-view/feature-set-view.component.mjs +28 -8
  14. package/esm2022/lib/components/ln-heights-editor/ln-heights-editor.component.mjs +38 -7
  15. package/esm2022/lib/components/operation-source-editor/operation-source-editor.component.mjs +29 -4
  16. package/esm2022/lib/components/simple-tree/simple-tree.component.mjs +20 -4
  17. package/esm2022/lib/components/snapshot-editor/snapshot-editor.component.mjs +471 -159
  18. package/esm2022/lib/components/steps-map/steps-map.component.mjs +37 -9
  19. package/esm2022/lib/models.mjs +1 -1
  20. package/esm2022/lib/services/gve-api.service.mjs +4 -4
  21. package/esm2022/lib/services/settings.service.mjs +6 -5
  22. package/esm2022/lib/validators/svg-validators.mjs +7 -1
  23. package/esm2022/public-api.mjs +2 -2
  24. package/fesm2022/myrmidon-gve-core.mjs +1159 -487
  25. package/fesm2022/myrmidon-gve-core.mjs.map +1 -1
  26. package/lib/components/animation-timeline/animation-timeline.component.d.ts +31 -9
  27. package/lib/components/animation-timeline-set/animation-timeline-set.component.d.ts +28 -4
  28. package/lib/components/animation-tween/animation-tween.component.d.ts +25 -12
  29. package/lib/components/base-text-char/base-text-char.component.d.ts +16 -0
  30. package/lib/components/base-text-editor/base-text-editor.component.d.ts +5 -1
  31. package/lib/components/base-text-view/base-text-view.component.d.ts +37 -0
  32. package/lib/components/batch-operation-editor/batch-operation-editor.component.d.ts +46 -0
  33. package/lib/components/chain-operation-editor/chain-operation-editor.component.d.ts +53 -5
  34. package/lib/components/chain-result-view/chain-result-view.component.d.ts +21 -4
  35. package/lib/components/feature-editor/feature-editor.component.d.ts +20 -6
  36. package/lib/components/feature-set-editor/feature-set-editor.component.d.ts +27 -4
  37. package/lib/components/feature-set-view/feature-set-view.component.d.ts +23 -3
  38. package/lib/components/ln-heights-editor/ln-heights-editor.component.d.ts +22 -0
  39. package/lib/components/operation-source-editor/operation-source-editor.component.d.ts +31 -0
  40. package/lib/components/simple-tree/simple-tree.component.d.ts +19 -0
  41. package/lib/components/snapshot-editor/snapshot-editor.component.d.ts +184 -19
  42. package/lib/components/steps-map/steps-map.component.d.ts +22 -3
  43. package/lib/models.d.ts +8 -0
  44. package/lib/services/gve-api.service.d.ts +33 -0
  45. package/lib/services/settings.service.d.ts +2 -1
  46. package/lib/validators/svg-validators.d.ts +6 -0
  47. package/package.json +10 -10
  48. package/public-api.d.ts +1 -1
  49. package/esm2022/lib/components/animation-vars/animation-vars.component.mjs +0 -141
  50. package/lib/components/animation-vars/animation-vars.component.d.ts +0 -30
@@ -18,9 +18,13 @@ import * as i5 from "@angular/material/form-field";
18
18
  import * as i6 from "@angular/material/input";
19
19
  import * as i7 from "@angular/material/tooltip";
20
20
  /**
21
+ * 🔑 `gve-base-text-editor`
22
+ *
21
23
  * Editor for snapshot's base text. This can receive a string or an array
22
24
  * of `CharNode` objects, and lets the user edit the text, character by
23
25
  * character, optionally also setting its features.
26
+ *
27
+ * Used by the `gve-snapshot-editor` component.
24
28
  */
25
29
  export class BaseTextEditorComponent {
26
30
  /**
@@ -48,7 +52,7 @@ export class BaseTextEditorComponent {
48
52
  this._dialogService = _dialogService;
49
53
  this._text = [];
50
54
  /**
51
- * Emits the edited text as an array of `CharNode`'s whenever it changes.
55
+ * Emitted for the edited text as an array of `CharNode`'s whenever it changes.
52
56
  */
53
57
  this.textChange = new EventEmitter();
54
58
  this.userText = formBuilder.control('', {
@@ -87,10 +91,10 @@ export class BaseTextEditorComponent {
87
91
  }
88
92
  });
89
93
  }
90
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: BaseTextEditorComponent, deps: [{ token: i1.FormBuilder }, { token: i2.DialogService }], target: i0.ɵɵFactoryTarget.Component }); }
91
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: BaseTextEditorComponent, isStandalone: true, selector: "gve-base-text-editor", inputs: { text: "text" }, outputs: { textChange: "textChange" }, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"setTextFromUser()\">\r\n <!-- text -->\r\n <div>\r\n <mat-form-field class=\"full-width\">\r\n <mat-label>text</mat-label>\r\n <textarea matInput [formControl]=\"userText\" rows=\"5\"></textarea>\r\n <mat-error\r\n *ngIf=\"\r\n $any(userText).errors?.required &&\r\n (userText.dirty || userText.touched)\r\n \"\r\n >text required</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"\r\n $any(userText).errors?.maxLength &&\r\n (userText.dirty || userText.touched)\r\n \"\r\n >text too long</mat-error\r\n >\r\n </mat-form-field>\r\n </div>\r\n <!-- buttons -->\r\n <div class=\"form-row\">\r\n <!-- set -->\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-warn\"\r\n matTooltip=\"Reset characters to newly entered text\"\r\n [disabled]=\"!userText.value\"\r\n (click)=\"setTextFromUser()\"\r\n >\r\n set\r\n </button>\r\n <!-- patch -->\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n matTooltip=\"Patch characters with newly entered text\"\r\n [disabled]=\"!userText.value\"\r\n (click)=\"patchTextFromUser()\"\r\n >\r\n patch\r\n </button>\r\n </div>\r\n\r\n <!-- base text -->\r\n <div id=\"text-view\">\r\n <gve-base-text-view\r\n [text]=\"text\"\r\n (charPick)=\"onSelectedChar($event)\"\r\n (rangePick)=\"textRange = $event\"\r\n />\r\n\r\n <!-- text range -->\r\n @if (textRange) {\r\n <div id=\"text-range\">{{ textRange.at }} \u00D7 {{ textRange.run }}</div>\r\n }\r\n </div>\r\n\r\n <!-- char features -->\r\n @if (selectedChar) {\r\n <fieldset>\r\n <legend>features</legend>\r\n <gve-feature-set-editor\r\n [features]=\"selectedChar.features || []\"\r\n (featuresChange)=\"onFeaturesChange($event)\"\r\n />\r\n </fieldset>\r\n }\r\n</form>\r\n", styles: [".full-width{width:100%}#text-view{margin:8px 0}fieldset{border:1px solid #ccc;padding:10px;margin:10px 0;border-radius:5px}legend{color:silver}.form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: BaseTextViewComponent, selector: "gve-base-text-view", inputs: ["defaultColor", "defaultBorderColor", "selectionColor", "hasLineNumber", "text"], outputs: ["charPick", "rangePick"] }, { kind: "component", type: FeatureSetEditorComponent, selector: "gve-feature-set-editor", inputs: ["isVar", "featNames", "featValues", "noFilter", "features"], outputs: ["featuresChange"] }] }); }
94
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: BaseTextEditorComponent, deps: [{ token: i1.FormBuilder }, { token: i2.DialogService }], target: i0.ɵɵFactoryTarget.Component }); }
95
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: BaseTextEditorComponent, isStandalone: true, selector: "gve-base-text-editor", inputs: { text: "text" }, outputs: { textChange: "textChange" }, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"setTextFromUser()\">\r\n <!-- text -->\r\n <div>\r\n <mat-form-field class=\"full-width\">\r\n <mat-label>text</mat-label>\r\n <textarea matInput [formControl]=\"userText\" rows=\"5\"></textarea>\r\n <mat-error\r\n *ngIf=\"\r\n $any(userText).errors?.required &&\r\n (userText.dirty || userText.touched)\r\n \"\r\n >text required</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"\r\n $any(userText).errors?.maxLength &&\r\n (userText.dirty || userText.touched)\r\n \"\r\n >text too long</mat-error\r\n >\r\n </mat-form-field>\r\n </div>\r\n <!-- buttons -->\r\n <div class=\"form-row\">\r\n <!-- set -->\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-warn\"\r\n matTooltip=\"Reset characters to newly entered text\"\r\n [disabled]=\"!userText.value\"\r\n (click)=\"setTextFromUser()\"\r\n >\r\n set\r\n </button>\r\n <!-- patch: TODO -->\r\n <!-- <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n matTooltip=\"Patch characters with newly entered text\"\r\n [disabled]=\"!userText.value\"\r\n (click)=\"patchTextFromUser()\"\r\n >\r\n patch\r\n </button> -->\r\n </div>\r\n\r\n <!-- base text -->\r\n <div id=\"text-view\">\r\n <gve-base-text-view\r\n [text]=\"text\"\r\n (charPick)=\"onSelectedChar($event)\"\r\n (rangePick)=\"textRange = $event\"\r\n />\r\n\r\n <!-- text range -->\r\n @if (textRange) {\r\n <div id=\"text-range\">{{ textRange.at }} \u00D7 {{ textRange.run }}</div>\r\n }\r\n </div>\r\n\r\n <!-- char features -->\r\n @if (selectedChar) {\r\n <fieldset>\r\n <legend>features</legend>\r\n <gve-feature-set-editor\r\n [features]=\"selectedChar.features || []\"\r\n (featuresChange)=\"onFeaturesChange($event)\"\r\n />\r\n </fieldset>\r\n }\r\n</form>\r\n", styles: [".full-width{width:100%}#text-view{margin:8px 0}fieldset{border:1px solid #ccc;padding:10px;margin:10px 0;border-radius:5px}legend{color:silver}.form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: BaseTextViewComponent, selector: "gve-base-text-view", inputs: ["defaultColor", "defaultBorderColor", "selectionColor", "hasLineNumber", "text"], outputs: ["charPick", "rangePick"] }, { kind: "component", type: FeatureSetEditorComponent, selector: "gve-feature-set-editor", inputs: ["isVar", "featNames", "featValues", "filterThreshold", "features"], outputs: ["featuresChange"] }] }); }
92
96
  }
93
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: BaseTextEditorComponent, decorators: [{
97
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: BaseTextEditorComponent, decorators: [{
94
98
  type: Component,
95
99
  args: [{ selector: 'gve-base-text-editor', standalone: true, imports: [
96
100
  CommonModule,
@@ -102,10 +106,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
102
106
  MatTooltipModule,
103
107
  BaseTextViewComponent,
104
108
  FeatureSetEditorComponent,
105
- ], template: "<form [formGroup]=\"form\" (submit)=\"setTextFromUser()\">\r\n <!-- text -->\r\n <div>\r\n <mat-form-field class=\"full-width\">\r\n <mat-label>text</mat-label>\r\n <textarea matInput [formControl]=\"userText\" rows=\"5\"></textarea>\r\n <mat-error\r\n *ngIf=\"\r\n $any(userText).errors?.required &&\r\n (userText.dirty || userText.touched)\r\n \"\r\n >text required</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"\r\n $any(userText).errors?.maxLength &&\r\n (userText.dirty || userText.touched)\r\n \"\r\n >text too long</mat-error\r\n >\r\n </mat-form-field>\r\n </div>\r\n <!-- buttons -->\r\n <div class=\"form-row\">\r\n <!-- set -->\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-warn\"\r\n matTooltip=\"Reset characters to newly entered text\"\r\n [disabled]=\"!userText.value\"\r\n (click)=\"setTextFromUser()\"\r\n >\r\n set\r\n </button>\r\n <!-- patch -->\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n matTooltip=\"Patch characters with newly entered text\"\r\n [disabled]=\"!userText.value\"\r\n (click)=\"patchTextFromUser()\"\r\n >\r\n patch\r\n </button>\r\n </div>\r\n\r\n <!-- base text -->\r\n <div id=\"text-view\">\r\n <gve-base-text-view\r\n [text]=\"text\"\r\n (charPick)=\"onSelectedChar($event)\"\r\n (rangePick)=\"textRange = $event\"\r\n />\r\n\r\n <!-- text range -->\r\n @if (textRange) {\r\n <div id=\"text-range\">{{ textRange.at }} \u00D7 {{ textRange.run }}</div>\r\n }\r\n </div>\r\n\r\n <!-- char features -->\r\n @if (selectedChar) {\r\n <fieldset>\r\n <legend>features</legend>\r\n <gve-feature-set-editor\r\n [features]=\"selectedChar.features || []\"\r\n (featuresChange)=\"onFeaturesChange($event)\"\r\n />\r\n </fieldset>\r\n }\r\n</form>\r\n", styles: [".full-width{width:100%}#text-view{margin:8px 0}fieldset{border:1px solid #ccc;padding:10px;margin:10px 0;border-radius:5px}legend{color:silver}.form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}\n"] }]
109
+ ], template: "<form [formGroup]=\"form\" (submit)=\"setTextFromUser()\">\r\n <!-- text -->\r\n <div>\r\n <mat-form-field class=\"full-width\">\r\n <mat-label>text</mat-label>\r\n <textarea matInput [formControl]=\"userText\" rows=\"5\"></textarea>\r\n <mat-error\r\n *ngIf=\"\r\n $any(userText).errors?.required &&\r\n (userText.dirty || userText.touched)\r\n \"\r\n >text required</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"\r\n $any(userText).errors?.maxLength &&\r\n (userText.dirty || userText.touched)\r\n \"\r\n >text too long</mat-error\r\n >\r\n </mat-form-field>\r\n </div>\r\n <!-- buttons -->\r\n <div class=\"form-row\">\r\n <!-- set -->\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-warn\"\r\n matTooltip=\"Reset characters to newly entered text\"\r\n [disabled]=\"!userText.value\"\r\n (click)=\"setTextFromUser()\"\r\n >\r\n set\r\n </button>\r\n <!-- patch: TODO -->\r\n <!-- <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n matTooltip=\"Patch characters with newly entered text\"\r\n [disabled]=\"!userText.value\"\r\n (click)=\"patchTextFromUser()\"\r\n >\r\n patch\r\n </button> -->\r\n </div>\r\n\r\n <!-- base text -->\r\n <div id=\"text-view\">\r\n <gve-base-text-view\r\n [text]=\"text\"\r\n (charPick)=\"onSelectedChar($event)\"\r\n (rangePick)=\"textRange = $event\"\r\n />\r\n\r\n <!-- text range -->\r\n @if (textRange) {\r\n <div id=\"text-range\">{{ textRange.at }} \u00D7 {{ textRange.run }}</div>\r\n }\r\n </div>\r\n\r\n <!-- char features -->\r\n @if (selectedChar) {\r\n <fieldset>\r\n <legend>features</legend>\r\n <gve-feature-set-editor\r\n [features]=\"selectedChar.features || []\"\r\n (featuresChange)=\"onFeaturesChange($event)\"\r\n />\r\n </fieldset>\r\n }\r\n</form>\r\n", styles: [".full-width{width:100%}#text-view{margin:8px 0}fieldset{border:1px solid #ccc;padding:10px;margin:10px 0;border-radius:5px}legend{color:silver}.form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}\n"] }]
106
110
  }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.DialogService }], propDecorators: { text: [{
107
111
  type: Input
108
112
  }], textChange: [{
109
113
  type: Output
110
114
  }] } });
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS10ZXh0LWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJtaWRvbi9ndmUtY29yZS9zcmMvbGliL2NvbXBvbmVudHMvYmFzZS10ZXh0LWVkaXRvci9iYXNlLXRleHQtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2d2ZS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9iYXNlLXRleHQtZWRpdG9yL2Jhc2UtdGV4dC1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUlMLG1CQUFtQixFQUNuQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU3RCxPQUFPLEVBR0wsbUJBQW1CLEdBQ3BCLE1BQU0sNkJBQTZCLENBQUM7QUFJckMsT0FBTyxFQUNMLHFCQUFxQixHQUV0QixNQUFNLDRDQUE0QyxDQUFDO0FBQ3BELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOzs7Ozs7Ozs7QUFFL0Y7Ozs7R0FJRztBQWtCSCxNQUFNLE9BQU8s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LDhCQUNiLGNBQWMsMFdBQ2QsZ0JBQWdCLDZUQUNoQixxQkFBcUIsOExBQ3JCLHlCQUF5Qjs7MkZBS2hCLHVCQUF1QjtrQkFqQm5DLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLHFCQUFxQjt3QkFDckIseUJBQXlCO3FCQUMxQjs0R0FZVSxJQUFJO3NCQURkLEtBQUs7Z0JBc0JVLFVBQVU7c0JBRHpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEZvcm1CdWlsZGVyLFxyXG4gIEZvcm1Db250cm9sLFxyXG4gIEZvcm1Hcm91cCxcclxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5cclxuaW1wb3J0IHtcclxuICBDaGFyTm9kZSxcclxuICBGZWF0dXJlLFxyXG4gIFNuYXBzaG90Vmlld1NlcnZpY2UsXHJcbn0gZnJvbSAnQG15cm1pZG9uL2d2ZS1zbmFwc2hvdC12aWV3JztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ0BteXJtaWRvbi9uZy1tYXQtdG9vbHMnO1xyXG5cclxuaW1wb3J0IHsgQmFzZVRleHRDaGFyRXZlbnQgfSBmcm9tICcuLi9iYXNlLXRleHQtY2hhci9iYXNlLXRleHQtY2hhci5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VUZXh0Vmlld0NvbXBvbmVudCxcclxuICBWYXJCYXNlVGV4dFJhbmdlLFxyXG59IGZyb20gJy4uL2Jhc2UtdGV4dC12aWV3L2Jhc2UtdGV4dC12aWV3LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZlYXR1cmVTZXRFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuLi9mZWF0dXJlLXNldC1lZGl0b3IvZmVhdHVyZS1zZXQtZWRpdG9yLmNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICogRWRpdG9yIGZvciBzbmFwc2hvdCdzIGJhc2UgdGV4dC4gVGhpcyBjYW4gcmVjZWl2ZSBhIHN0cmluZyBvciBhbiBhcnJheVxyXG4gKiBvZiBgQ2hhck5vZGVgIG9iamVjdHMsIGFuZCBsZXRzIHRoZSB1c2VyIGVkaXQgdGhlIHRleHQsIGNoYXJhY3RlciBieVxyXG4gKiBjaGFyYWN0ZXIsIG9wdGlvbmFsbHkgYWxzbyBzZXR0aW5nIGl0cyBmZWF0dXJlcy5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZ3ZlLWJhc2UtdGV4dC1lZGl0b3InLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgICBCYXNlVGV4dFZpZXdDb21wb25lbnQsXHJcbiAgICBGZWF0dXJlU2V0RWRpdG9yQ29tcG9uZW50LFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Jhc2UtdGV4dC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9iYXNlLXRleHQtZWRpdG9yLmNvbXBvbmVudC5jc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFzZVRleHRFZGl0b3JDb21wb25lbnQge1xyXG4gIHByaXZhdGUgX3RleHQ6IENoYXJOb2RlW10gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHRleHQgdG8gZWRpdC4gSW4gaW5wdXQgdGhpcyBjYW4gYmUgYSBzdHJpbmcsIGFuIGFycmF5IG9mIGBDaGFyTm9kZWBcclxuICAgKiBvYmplY3RzLiBJbiBvdXRwdXQgdGhpcyB3aWxsIGJlIGFuIGFycmF5IG9mIGBDaGFyTm9kZWAgb2JqZWN0cy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgdGV4dCgpOiBDaGFyTm9kZVtdIHtcclxuICAgIHJldHVybiB0aGlzLl90ZXh0O1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHRleHQodmFsdWU6IHN0cmluZyB8IENoYXJOb2RlW10gfCB1bmRlZmluZWQgfCBudWxsKSB7XHJcbiAgICB0aGlzLnJlc2V0U2VsZWN0ZWRDaGFyKCk7XHJcbiAgICBpZiAodGhpcy5fdGV4dCA9PT0gdmFsdWUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICB0aGlzLl90ZXh0ID0gW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl90ZXh0ID0gQXJyYXkuaXNBcnJheSh2YWx1ZSlcclxuICAgICAgICA/IHZhbHVlXHJcbiAgICAgICAgOiBTbmFwc2hvdFZpZXdTZXJ2aWNlLnN0cmluZ1RvQmFzZUNoYXJzKHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXRzIHRoZSBlZGl0ZWQgdGV4dCBhcyBhbiBhcnJheSBvZiBgQ2hhck5vZGVgJ3Mgd2hlbmV2ZXIgaXQgY2hhbmdlcy5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgcmVhZG9ubHkgdGV4dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hhck5vZGVbXT4oKTtcclxuXHJcbiAgcHVibGljIHVzZXJUZXh0OiBGb3JtQ29udHJvbDxzdHJpbmc+O1xyXG4gIHB1YmxpYyBmb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RlZENoYXI/OiBDaGFyTm9kZTtcclxuICBwdWJsaWMgc2VsZWN0ZWRDaGFyTGFiZWw/OiBzdHJpbmc7XHJcbiAgcHVibGljIHRleHRSYW5nZT86IFZhckJhc2VUZXh0UmFuZ2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSBfZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSkge1xyXG4gICAgdGhpcy51c2VyVGV4dCA9IGZvcm1CdWlsZGVyLmNvbnRyb2woJycsIHtcclxuICAgICAgbm9uTnVsbGFibGU6IHRydWUsXHJcbiAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCgxMDAwMCldLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmZvcm0gPSBmb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIHVzZXJUZXh0OiB0aGlzLnVzZXJUZXh0LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2V0U2VsZWN0ZWRDaGFyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZENoYXIgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ2hhckxhYmVsID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uU2VsZWN0ZWRDaGFyKGV2ZW50OiBCYXNlVGV4dENoYXJFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZENoYXIgPSB0aGlzLl90ZXh0LmZpbmQoKGMpID0+IGMuaWQgPT09IGV2ZW50LmNoYXIuaWQpO1xyXG4gICAgdGhpcy5zZWxlY3RlZENoYXJMYWJlbCA9IGV2ZW50LmNoYXIubGFiZWw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25GZWF0dXJlc0NoYW5nZShmZWF0dXJlczogRmVhdHVyZVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ2hhciEuZmVhdHVyZXMgPSBmZWF0dXJlcztcclxuICAgIHRoaXMudGV4dENoYW5nZS5lbWl0KHRoaXMuX3RleHQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uUmFuZ2VQaWNrKHJhbmdlOiBWYXJCYXNlVGV4dFJhbmdlKSB7XHJcbiAgICB0aGlzLnRleHRSYW5nZSA9IHJhbmdlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHBhdGNoVGV4dEZyb21Vc2VyKCk6IHZvaWQge1xyXG4gICAgLy8gVE9ET1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFRleHRGcm9tVXNlcigpOiB2b2lkIHtcclxuICAgIHRoaXMuX2RpYWxvZ1NlcnZpY2VcclxuICAgICAgLmNvbmZpcm0oJ0NvbmZpcm0nLCAnUmVzZXQgdGV4dD8nKVxyXG4gICAgICAuc3Vic2NyaWJlKCh5ZXM6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAoeWVzKSB7XHJcbiAgICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnVzZXJUZXh0LnZhbHVlO1xyXG4gICAgICAgICAgdGhpcy50ZXh0Q2hhbmdlLmVtaXQodGhpcy5fdGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgKHN1Ym1pdCk9XCJzZXRUZXh0RnJvbVVzZXIoKVwiPlxyXG4gIDwhLS0gdGV4dCAtLT5cclxuICA8ZGl2PlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiPlxyXG4gICAgICA8bWF0LWxhYmVsPnRleHQ8L21hdC1sYWJlbD5cclxuICAgICAgPHRleHRhcmVhIG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJ1c2VyVGV4dFwiIHJvd3M9XCI1XCI+PC90ZXh0YXJlYT5cclxuICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAkYW55KHVzZXJUZXh0KS5lcnJvcnM/LnJlcXVpcmVkICYmXHJcbiAgICAgICAgICAodXNlclRleHQuZGlydHkgfHwgdXNlclRleHQudG91Y2hlZClcclxuICAgICAgICBcIlxyXG4gICAgICAgID50ZXh0IHJlcXVpcmVkPC9tYXQtZXJyb3JcclxuICAgICAgPlxyXG4gICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICRhbnkodXNlclRleHQpLmVycm9ycz8ubWF4TGVuZ3RoICYmXHJcbiAgICAgICAgICAodXNlclRleHQuZGlydHkgfHwgdXNlclRleHQudG91Y2hlZClcclxuICAgICAgICBcIlxyXG4gICAgICAgID50ZXh0IHRvbyBsb25nPC9tYXQtZXJyb3JcclxuICAgICAgPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuICA8IS0tIGJ1dHRvbnMgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICA8IS0tIHNldCAtLT5cclxuICAgIDxidXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIG1hdC1mbGF0LWJ1dHRvblxyXG4gICAgICBjbGFzcz1cIm1hdC13YXJuXCJcclxuICAgICAgbWF0VG9vbHRpcD1cIlJlc2V0IGNoYXJhY3RlcnMgdG8gbmV3bHkgZW50ZXJlZCB0ZXh0XCJcclxuICAgICAgW2Rpc2FibGVkXT1cIiF1c2VyVGV4dC52YWx1ZVwiXHJcbiAgICAgIChjbGljayk9XCJzZXRUZXh0RnJvbVVzZXIoKVwiXHJcbiAgICA+XHJcbiAgICAgIHNldFxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8IS0tIHBhdGNoIC0tPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgbWF0LWZsYXQtYnV0dG9uXHJcbiAgICAgIGNsYXNzPVwibWF0LXByaW1hcnlcIlxyXG4gICAgICBtYXRUb29sdGlwPVwiUGF0Y2ggY2hhcmFjdGVycyB3aXRoIG5ld2x5IGVudGVyZWQgdGV4dFwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCIhdXNlclRleHQudmFsdWVcIlxyXG4gICAgICAoY2xpY2spPVwicGF0Y2hUZXh0RnJvbVVzZXIoKVwiXHJcbiAgICA+XHJcbiAgICAgIHBhdGNoXHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBiYXNlIHRleHQgLS0+XHJcbiAgPGRpdiBpZD1cInRleHQtdmlld1wiPlxyXG4gICAgPGd2ZS1iYXNlLXRleHQtdmlld1xyXG4gICAgICBbdGV4dF09XCJ0ZXh0XCJcclxuICAgICAgKGNoYXJQaWNrKT1cIm9uU2VsZWN0ZWRDaGFyKCRldmVudClcIlxyXG4gICAgICAocmFuZ2VQaWNrKT1cInRleHRSYW5nZSA9ICRldmVudFwiXHJcbiAgICAvPlxyXG5cclxuICAgIDwhLS0gdGV4dCByYW5nZSAtLT5cclxuICAgIEBpZiAodGV4dFJhbmdlKSB7XHJcbiAgICA8ZGl2IGlkPVwidGV4dC1yYW5nZVwiPnt7IHRleHRSYW5nZS5hdCB9fSDDlyB7eyB0ZXh0UmFuZ2UucnVuIH19PC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gY2hhciBmZWF0dXJlcyAtLT5cclxuICBAaWYgKHNlbGVjdGVkQ2hhcikge1xyXG4gIDxmaWVsZHNldD5cclxuICAgIDxsZWdlbmQ+ZmVhdHVyZXM8L2xlZ2VuZD5cclxuICAgIDxndmUtZmVhdHVyZS1zZXQtZWRpdG9yXHJcbiAgICAgIFtmZWF0dXJlc109XCJzZWxlY3RlZENoYXIuZmVhdHVyZXMgfHwgW11cIlxyXG4gICAgICAoZmVhdHVyZXNDaGFuZ2UpPVwib25GZWF0dXJlc0NoYW5nZSgkZXZlbnQpXCJcclxuICAgIC8+XHJcbiAgPC9maWVsZHNldD5cclxuICB9XHJcbjwvZm9ybT5cclxuIl19
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS10ZXh0LWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJtaWRvbi9ndmUtY29yZS9zcmMvbGliL2NvbXBvbmVudHMvYmFzZS10ZXh0LWVkaXRvci9iYXNlLXRleHQtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2d2ZS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9iYXNlLXRleHQtZWRpdG9yL2Jhc2UtdGV4dC1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUlMLG1CQUFtQixFQUNuQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU3RCxPQUFPLEVBR0wsbUJBQW1CLEdBQ3BCLE1BQU0sNkJBQTZCLENBQUM7QUFJckMsT0FBTyxFQUNMLHFCQUFxQixHQUV0QixNQUFNLDRDQUE0QyxDQUFDO0FBQ3BELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOzs7Ozs7Ozs7QUFFL0Y7Ozs7Ozs7O0dBUUc7QUFrQkgsTUFBTSxP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YUFBYSw4QkFDYixjQUFjLDBXQUNkLGdCQUFnQiw2VEFDaEIscUJBQXFCLDhMQUNyQix5QkFBeUI7OzRGQUtoQix1QkFBdUI7a0JBakJuQyxTQUFTOytCQUNFLHNCQUFzQixjQUNwQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2Ysa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUNoQixxQkFBcUI7d0JBQ3JCLHlCQUF5QjtxQkFDMUI7NEdBWVUsSUFBSTtzQkFEZCxLQUFLO2dCQXNCVSxVQUFVO3NCQUR6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBGb3JtQnVpbGRlcixcclxuICBGb3JtQ29udHJvbCxcclxuICBGb3JtR3JvdXAsXHJcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICBWYWxpZGF0b3JzLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQ2hhck5vZGUsXHJcbiAgRmVhdHVyZSxcclxuICBTbmFwc2hvdFZpZXdTZXJ2aWNlLFxyXG59IGZyb20gJ0BteXJtaWRvbi9ndmUtc25hcHNob3Qtdmlldyc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAbXlybWlkb24vbmctbWF0LXRvb2xzJztcclxuXHJcbmltcG9ydCB7IEJhc2VUZXh0Q2hhckV2ZW50IH0gZnJvbSAnLi4vYmFzZS10ZXh0LWNoYXIvYmFzZS10ZXh0LWNoYXIuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBCYXNlVGV4dFZpZXdDb21wb25lbnQsXHJcbiAgVmFyQmFzZVRleHRSYW5nZSxcclxufSBmcm9tICcuLi9iYXNlLXRleHQtdmlldy9iYXNlLXRleHQtdmlldy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGZWF0dXJlU2V0RWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vZmVhdHVyZS1zZXQtZWRpdG9yL2ZlYXR1cmUtc2V0LWVkaXRvci5jb21wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIPCflJEgYGd2ZS1iYXNlLXRleHQtZWRpdG9yYFxyXG4gKlxyXG4gKiBFZGl0b3IgZm9yIHNuYXBzaG90J3MgYmFzZSB0ZXh0LiBUaGlzIGNhbiByZWNlaXZlIGEgc3RyaW5nIG9yIGFuIGFycmF5XHJcbiAqIG9mIGBDaGFyTm9kZWAgb2JqZWN0cywgYW5kIGxldHMgdGhlIHVzZXIgZWRpdCB0aGUgdGV4dCwgY2hhcmFjdGVyIGJ5XHJcbiAqIGNoYXJhY3Rlciwgb3B0aW9uYWxseSBhbHNvIHNldHRpbmcgaXRzIGZlYXR1cmVzLlxyXG4gKlxyXG4gKiBVc2VkIGJ5IHRoZSBgZ3ZlLXNuYXBzaG90LWVkaXRvcmAgY29tcG9uZW50LlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdndmUtYmFzZS10ZXh0LWVkaXRvcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIEJhc2VUZXh0Vmlld0NvbXBvbmVudCxcclxuICAgIEZlYXR1cmVTZXRFZGl0b3JDb21wb25lbnQsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vYmFzZS10ZXh0LWVkaXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2Jhc2UtdGV4dC1lZGl0b3IuY29tcG9uZW50LmNzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYXNlVGV4dEVkaXRvckNvbXBvbmVudCB7XHJcbiAgcHJpdmF0ZSBfdGV4dDogQ2hhck5vZGVbXSA9IFtdO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgdGV4dCB0byBlZGl0LiBJbiBpbnB1dCB0aGlzIGNhbiBiZSBhIHN0cmluZywgYW4gYXJyYXkgb2YgYENoYXJOb2RlYFxyXG4gICAqIG9iamVjdHMuIEluIG91dHB1dCB0aGlzIHdpbGwgYmUgYW4gYXJyYXkgb2YgYENoYXJOb2RlYCBvYmplY3RzLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCB0ZXh0KCk6IENoYXJOb2RlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RleHQ7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgdGV4dCh2YWx1ZTogc3RyaW5nIHwgQ2hhck5vZGVbXSB8IHVuZGVmaW5lZCB8IG51bGwpIHtcclxuICAgIHRoaXMucmVzZXRTZWxlY3RlZENoYXIoKTtcclxuICAgIGlmICh0aGlzLl90ZXh0ID09PSB2YWx1ZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX3RleHQgPSBbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3RleHQgPSBBcnJheS5pc0FycmF5KHZhbHVlKVxyXG4gICAgICAgID8gdmFsdWVcclxuICAgICAgICA6IFNuYXBzaG90Vmlld1NlcnZpY2Uuc3RyaW5nVG9CYXNlQ2hhcnModmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHRlZCBmb3IgdGhlIGVkaXRlZCB0ZXh0IGFzIGFuIGFycmF5IG9mIGBDaGFyTm9kZWAncyB3aGVuZXZlciBpdCBjaGFuZ2VzLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyByZWFkb25seSB0ZXh0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDaGFyTm9kZVtdPigpO1xyXG5cclxuICBwdWJsaWMgdXNlclRleHQ6IEZvcm1Db250cm9sPHN0cmluZz47XHJcbiAgcHVibGljIGZvcm06IEZvcm1Hcm91cDtcclxuXHJcbiAgcHVibGljIHNlbGVjdGVkQ2hhcj86IENoYXJOb2RlO1xyXG4gIHB1YmxpYyBzZWxlY3RlZENoYXJMYWJlbD86IHN0cmluZztcclxuICBwdWJsaWMgdGV4dFJhbmdlPzogVmFyQmFzZVRleHRSYW5nZTtcclxuXHJcbiAgY29uc3RydWN0b3IoZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLCBwcml2YXRlIF9kaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLnVzZXJUZXh0ID0gZm9ybUJ1aWxkZXIuY29udHJvbCgnJywge1xyXG4gICAgICBub25OdWxsYWJsZTogdHJ1ZSxcclxuICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwMDAwKV0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZm9ybSA9IGZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgdXNlclRleHQ6IHRoaXMudXNlclRleHQsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXRTZWxlY3RlZENoYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ2hhciA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc2VsZWN0ZWRDaGFyTGFiZWwgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25TZWxlY3RlZENoYXIoZXZlbnQ6IEJhc2VUZXh0Q2hhckV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ2hhciA9IHRoaXMuX3RleHQuZmluZCgoYykgPT4gYy5pZCA9PT0gZXZlbnQuY2hhci5pZCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ2hhckxhYmVsID0gZXZlbnQuY2hhci5sYWJlbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkZlYXR1cmVzQ2hhbmdlKGZlYXR1cmVzOiBGZWF0dXJlW10pOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRDaGFyIS5mZWF0dXJlcyA9IGZlYXR1cmVzO1xyXG4gICAgdGhpcy50ZXh0Q2hhbmdlLmVtaXQodGhpcy5fdGV4dCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25SYW5nZVBpY2socmFuZ2U6IFZhckJhc2VUZXh0UmFuZ2UpIHtcclxuICAgIHRoaXMudGV4dFJhbmdlID0gcmFuZ2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcGF0Y2hUZXh0RnJvbVVzZXIoKTogdm9pZCB7XHJcbiAgICAvLyBUT0RPXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0VGV4dEZyb21Vc2VyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGlhbG9nU2VydmljZVxyXG4gICAgICAuY29uZmlybSgnQ29uZmlybScsICdSZXNldCB0ZXh0PycpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHllczogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmICh5ZXMpIHtcclxuICAgICAgICAgIHRoaXMudGV4dCA9IHRoaXMudXNlclRleHQudmFsdWU7XHJcbiAgICAgICAgICB0aGlzLnRleHRDaGFuZ2UuZW1pdCh0aGlzLl90ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAoc3VibWl0KT1cInNldFRleHRGcm9tVXNlcigpXCI+XHJcbiAgPCEtLSB0ZXh0IC0tPlxyXG4gIDxkaXY+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmdWxsLXdpZHRoXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+dGV4dDwvbWF0LWxhYmVsPlxyXG4gICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cInVzZXJUZXh0XCIgcm93cz1cIjVcIj48L3RleHRhcmVhPlxyXG4gICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICRhbnkodXNlclRleHQpLmVycm9ycz8ucmVxdWlyZWQgJiZcclxuICAgICAgICAgICh1c2VyVGV4dC5kaXJ0eSB8fCB1c2VyVGV4dC50b3VjaGVkKVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgPnRleHQgcmVxdWlyZWQ8L21hdC1lcnJvclxyXG4gICAgICA+XHJcbiAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgJGFueSh1c2VyVGV4dCkuZXJyb3JzPy5tYXhMZW5ndGggJiZcclxuICAgICAgICAgICh1c2VyVGV4dC5kaXJ0eSB8fCB1c2VyVGV4dC50b3VjaGVkKVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgPnRleHQgdG9vIGxvbmc8L21hdC1lcnJvclxyXG4gICAgICA+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gYnV0dG9ucyAtLT5cclxuICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cclxuICAgIDwhLS0gc2V0IC0tPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgbWF0LWZsYXQtYnV0dG9uXHJcbiAgICAgIGNsYXNzPVwibWF0LXdhcm5cIlxyXG4gICAgICBtYXRUb29sdGlwPVwiUmVzZXQgY2hhcmFjdGVycyB0byBuZXdseSBlbnRlcmVkIHRleHRcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiIXVzZXJUZXh0LnZhbHVlXCJcclxuICAgICAgKGNsaWNrKT1cInNldFRleHRGcm9tVXNlcigpXCJcclxuICAgID5cclxuICAgICAgc2V0XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDwhLS0gcGF0Y2g6IFRPRE8gLS0+XHJcbiAgICA8IS0tIDxidXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIG1hdC1mbGF0LWJ1dHRvblxyXG4gICAgICBjbGFzcz1cIm1hdC1wcmltYXJ5XCJcclxuICAgICAgbWF0VG9vbHRpcD1cIlBhdGNoIGNoYXJhY3RlcnMgd2l0aCBuZXdseSBlbnRlcmVkIHRleHRcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiIXVzZXJUZXh0LnZhbHVlXCJcclxuICAgICAgKGNsaWNrKT1cInBhdGNoVGV4dEZyb21Vc2VyKClcIlxyXG4gICAgPlxyXG4gICAgICBwYXRjaFxyXG4gICAgPC9idXR0b24+IC0tPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIGJhc2UgdGV4dCAtLT5cclxuICA8ZGl2IGlkPVwidGV4dC12aWV3XCI+XHJcbiAgICA8Z3ZlLWJhc2UtdGV4dC12aWV3XHJcbiAgICAgIFt0ZXh0XT1cInRleHRcIlxyXG4gICAgICAoY2hhclBpY2spPVwib25TZWxlY3RlZENoYXIoJGV2ZW50KVwiXHJcbiAgICAgIChyYW5nZVBpY2spPVwidGV4dFJhbmdlID0gJGV2ZW50XCJcclxuICAgIC8+XHJcblxyXG4gICAgPCEtLSB0ZXh0IHJhbmdlIC0tPlxyXG4gICAgQGlmICh0ZXh0UmFuZ2UpIHtcclxuICAgIDxkaXYgaWQ9XCJ0ZXh0LXJhbmdlXCI+e3sgdGV4dFJhbmdlLmF0IH19IMOXIHt7IHRleHRSYW5nZS5ydW4gfX08L2Rpdj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBjaGFyIGZlYXR1cmVzIC0tPlxyXG4gIEBpZiAoc2VsZWN0ZWRDaGFyKSB7XHJcbiAgPGZpZWxkc2V0PlxyXG4gICAgPGxlZ2VuZD5mZWF0dXJlczwvbGVnZW5kPlxyXG4gICAgPGd2ZS1mZWF0dXJlLXNldC1lZGl0b3JcclxuICAgICAgW2ZlYXR1cmVzXT1cInNlbGVjdGVkQ2hhci5mZWF0dXJlcyB8fCBbXVwiXHJcbiAgICAgIChmZWF0dXJlc0NoYW5nZSk9XCJvbkZlYXR1cmVzQ2hhbmdlKCRldmVudClcIlxyXG4gICAgLz5cclxuICA8L2ZpZWxkc2V0PlxyXG4gIH1cclxuPC9mb3JtPlxyXG4iXX0=
@@ -4,18 +4,52 @@ import { BaseTextCharComponent, } from '../base-text-char/base-text-char.compone
4
4
  import { SnapshotViewService } from '@myrmidon/gve-snapshot-view';
5
5
  import * as i0 from "@angular/core";
6
6
  /**
7
+ * 🔑 `gve-base-text-view`
8
+ *
7
9
  * A component to display a selectable base text.
10
+ * Used by the chain result view component and the base text editor component.
11
+ *
12
+ * - ▶️ `defaultColor` (`string`): the default color for the text.
13
+ * - ▶️ `defaultBorderColor` (`string`): the default border color for the text.
14
+ * - ▶️ `selectionColor` (`string`): the color for the selected text.
15
+ * - ▶️ `hasLineNumber` (`boolean`): true if line numbers should be displayed next to each line.
16
+ * - ▶️ `text` (`string` | `CharNode[]`): the text to display.
17
+ * - 🔥 `charPick` (`BaseTextCharEvent`): emitted when a character is picked.
18
+ * - 🔥 `rangePick` (`VarBaseTextRange`): emitted when a range is picked.
8
19
  */
9
20
  export class BaseTextViewComponent {
10
21
  constructor() {
22
+ /**
23
+ * The default color for the text.
24
+ */
11
25
  this.defaultColor = '#DBDBDB';
26
+ /**
27
+ * The default border color for the text.
28
+ */
12
29
  this.defaultBorderColor = '#DBDBDB';
30
+ /**
31
+ * The color for the selected text.
32
+ */
13
33
  this.selectionColor = '#3E92CC';
34
+ /**
35
+ * True if line numbers should be displayed next to each line.
36
+ */
14
37
  this.hasLineNumber = false;
38
+ /**
39
+ * Emitted when a character is picked.
40
+ */
15
41
  this.charPick = new EventEmitter();
42
+ /**
43
+ * Emitted when a range is picked. This is preceded by a character pick event.
44
+ * The range is defined by the starting character and the number of characters.
45
+ * The range is inclusive.
46
+ */
16
47
  this.rangePick = new EventEmitter();
17
48
  this.lines = [];
18
49
  }
50
+ /**
51
+ * The text to display.
52
+ */
19
53
  get text() {
20
54
  return this._text;
21
55
  }
@@ -101,12 +135,12 @@ export class BaseTextViewComponent {
101
135
  }
102
136
  this._lastSelectedChar = event.char;
103
137
  }
104
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: BaseTextViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
105
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: BaseTextViewComponent, isStandalone: true, selector: "gve-base-text-view", inputs: { defaultColor: "defaultColor", defaultBorderColor: "defaultBorderColor", selectionColor: "selectionColor", hasLineNumber: "hasLineNumber", text: "text" }, outputs: { charPick: "charPick", rangePick: "rangePick" }, ngImport: i0, template: "<div id=\"text\">\r\n @for (line of lines; track line) {\r\n <div class=\"line\">\r\n @if (hasLineNumber) {\r\n <div class=\"nr\">\r\n {{ lines.indexOf(line) + 1 }}\r\n </div>\r\n } @for (c of line; track c.id) {\r\n <gve-base-text-char [char]=\"c\" (charPick)=\"onCharPick($event)\" />\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".line{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.line *{flex:0 0 auto}.nr{font-size:.8em;font-weight:700;color:silver;margin:0 4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: BaseTextCharComponent, selector: "gve-base-text-char", inputs: ["char"], outputs: ["charPick"] }] }); }
138
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: BaseTextViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
139
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: BaseTextViewComponent, isStandalone: true, selector: "gve-base-text-view", inputs: { defaultColor: "defaultColor", defaultBorderColor: "defaultBorderColor", selectionColor: "selectionColor", hasLineNumber: "hasLineNumber", text: "text" }, outputs: { charPick: "charPick", rangePick: "rangePick" }, ngImport: i0, template: "<div id=\"text\">\r\n @for (line of lines; track $index) {\r\n <div class=\"line\">\r\n @if (hasLineNumber) {\r\n <div class=\"nr\">\r\n {{ lines.indexOf(line) + 1 }}\r\n </div>\r\n } @for (c of line; track c.id) {\r\n <gve-base-text-char [char]=\"c\" (charPick)=\"onCharPick($event)\" />\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".line{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.line *{flex:0 0 auto}.nr{font-size:.8em;font-weight:700;color:silver;margin:0 4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: BaseTextCharComponent, selector: "gve-base-text-char", inputs: ["char"], outputs: ["charPick"] }] }); }
106
140
  }
107
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: BaseTextViewComponent, decorators: [{
141
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: BaseTextViewComponent, decorators: [{
108
142
  type: Component,
109
- args: [{ selector: 'gve-base-text-view', standalone: true, imports: [CommonModule, BaseTextCharComponent], template: "<div id=\"text\">\r\n @for (line of lines; track line) {\r\n <div class=\"line\">\r\n @if (hasLineNumber) {\r\n <div class=\"nr\">\r\n {{ lines.indexOf(line) + 1 }}\r\n </div>\r\n } @for (c of line; track c.id) {\r\n <gve-base-text-char [char]=\"c\" (charPick)=\"onCharPick($event)\" />\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".line{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.line *{flex:0 0 auto}.nr{font-size:.8em;font-weight:700;color:silver;margin:0 4px}\n"] }]
143
+ args: [{ selector: 'gve-base-text-view', standalone: true, imports: [CommonModule, BaseTextCharComponent], template: "<div id=\"text\">\r\n @for (line of lines; track $index) {\r\n <div class=\"line\">\r\n @if (hasLineNumber) {\r\n <div class=\"nr\">\r\n {{ lines.indexOf(line) + 1 }}\r\n </div>\r\n } @for (c of line; track c.id) {\r\n <gve-base-text-char [char]=\"c\" (charPick)=\"onCharPick($event)\" />\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".line{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.line *{flex:0 0 auto}.nr{font-size:.8em;font-weight:700;color:silver;margin:0 4px}\n"] }]
110
144
  }], propDecorators: { defaultColor: [{
111
145
  type: Input
112
146
  }], defaultBorderColor: [{
@@ -122,4 +156,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
122
156
  }], rangePick: [{
123
157
  type: Output
124
158
  }] } });
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS10ZXh0LXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vZ3ZlLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL2Jhc2UtdGV4dC12aWV3L2Jhc2UtdGV4dC12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2d2ZS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9iYXNlLXRleHQtdmlldy9iYXNlLXRleHQtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2RSxPQUFPLEVBRUwscUJBQXFCLEdBRXRCLE1BQU0sNENBQTRDLENBQUM7QUFDcEQsT0FBTyxFQUFZLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7O0FBTzVFOztHQUVHO0FBUUgsTUFBTSxPQUFPLHFCQUFxQjtJQVBsQztRQVlTLGlCQUFZLEdBQUcsU0FBUyxDQUFDO1FBR3pCLHVCQUFrQixHQUFHLFNBQVMsQ0FBQztRQUcvQixtQkFBYyxHQUFHLFNBQVMsQ0FBQztRQUczQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQVl0QixhQUFRLEdBQ2IsSUFBSSxZQUFZLEVBQXFCLENBQUM7UUFHakMsY0FBUyxHQUNkLElBQUksWUFBWSxFQUFvQixDQUFDO1FBRWhDLFVBQUssR0FBcUIsRUFBRSxDQUFDO0tBMkZyQztJQTVHQyxJQUNXLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUNELElBQVcsSUFBSSxDQUFDLEtBQTZDO1FBQzNELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FB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QUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQ3RDLENBQUM7OEdBM0hVLHFCQUFxQjtrR0FBckIscUJBQXFCLDZTQ3pCbEMsZ1dBYUEsMk1EUVksWUFBWSwrQkFBRSxxQkFBcUI7OzJGQUlsQyxxQkFBcUI7a0JBUGpDLFNBQVM7K0JBQ0Usb0JBQW9CLGNBQ2xCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxxQkFBcUIsQ0FBQzs4QkFTdkMsWUFBWTtzQkFEbEIsS0FBSztnQkFJQyxrQkFBa0I7c0JBRHhCLEtBQUs7Z0JBSUMsY0FBYztzQkFEcEIsS0FBSztnQkFJQyxhQUFhO3NCQURuQixLQUFLO2dCQUlLLElBQUk7c0JBRGQsS0FBSztnQkFVQyxRQUFRO3NCQURkLE1BQU07Z0JBS0EsU0FBUztzQkFEZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZVRleHRDaGFyLFxyXG4gIEJhc2VUZXh0Q2hhckNvbXBvbmVudCxcclxuICBCYXNlVGV4dENoYXJFdmVudCxcclxufSBmcm9tICcuLi9iYXNlLXRleHQtY2hhci9iYXNlLXRleHQtY2hhci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaGFyTm9kZSwgU25hcHNob3RWaWV3U2VydmljZSB9IGZyb20gJ0BteXJtaWRvbi9ndmUtc25hcHNob3Qtdmlldyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFZhckJhc2VUZXh0UmFuZ2Uge1xyXG4gIGF0OiBudW1iZXI7XHJcbiAgcnVuOiBudW1iZXI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIGNvbXBvbmVudCB0byBkaXNwbGF5IGEgc2VsZWN0YWJsZSBiYXNlIHRleHQuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2d2ZS1iYXNlLXRleHQtdmlldycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBCYXNlVGV4dENoYXJDb21wb25lbnRdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9iYXNlLXRleHQtdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2Jhc2UtdGV4dC12aWV3LmNvbXBvbmVudC5jc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFzZVRleHRWaWV3Q29tcG9uZW50IHtcclxuICBwcml2YXRlIF90ZXh0Pzogc3RyaW5nIHwgQ2hhck5vZGVbXTtcclxuICBwcml2YXRlIF9sYXN0U2VsZWN0ZWRDaGFyPzogQmFzZVRleHRDaGFyO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBkZWZhdWx0Q29sb3IgPSAnI0RCREJEQic7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGRlZmF1bHRCb3JkZXJDb2xvciA9ICcjREJEQkRCJztcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2VsZWN0aW9uQ29sb3IgPSAnIzNFOTJDQyc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGhhc0xpbmVOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IHRleHQoKTogc3RyaW5nIHwgQ2hhck5vZGVbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGV4dDtcclxuICB9XHJcbiAgcHVibGljIHNldCB0ZXh0KHZhbHVlOiBzdHJpbmcgfCBDaGFyTm9kZVtdIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xyXG4gICAgdGhpcy5fdGV4dCA9IHZhbHVlIHx8IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuYnVpbGRMaW5lcygpO1xyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGNoYXJQaWNrOiBFdmVudEVtaXR0ZXI8QmFzZVRleHRDaGFyRXZlbnQ+ID1cclxuICAgIG5ldyBFdmVudEVtaXR0ZXI8QmFzZVRleHRDaGFyRXZlbnQ+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyByYW5nZVBpY2s6IEV2ZW50RW1pdHRlcjxWYXJCYXNlVGV4dFJhbmdlPiA9XHJcbiAgICBuZXcgRXZlbnRFbWl0dGVyPFZhckJhc2VUZXh0UmFuZ2U+KCk7XHJcblxyXG4gIHB1YmxpYyBsaW5lczogQmFzZVRleHRDaGFyW11bXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIGJ1aWxkTGluZXMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuX3RleHQpIHtcclxuICAgICAgdGhpcy5saW5lcyA9IFtdO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbmV3TGluZXM6IEJhc2VUZXh0Q2hhcltdW10gPSBbXTtcclxuICAgIG5ld0xpbmVzLnB1c2goW10pO1xyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuX3RleHQpKSB7XHJcbiAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5fdGV4dCBhcyBDaGFyTm9kZVtdO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgY2hhcjogQmFzZVRleHRDaGFyID0ge1xyXG4gICAgICAgICAgaWQ6IG5vZGVzW2ldLmlkLFxyXG4gICAgICAgICAgdmFsdWU6IG5vZGVzW2ldLmRhdGEsXHJcbiAgICAgICAgICBsYWJlbDogbm9kZXNbaV0ubGFiZWwsXHJcbiAgICAgICAgICBjb2xvcjogdGhpcy5kZWZhdWx0Q29sb3IsXHJcbiAgICAgICAgICBib3JkZXJDb2xvcjogdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IsXHJcbiAgICAgICAgICBlbVNpemU6IDEuNSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIG5ld0xpbmVzW25ld0xpbmVzLmxlbmd0aCAtIDFdLnB1c2goY2hhcik7XHJcblxyXG4gICAgICAgIGlmIChjaGFyLnZhbHVlID09PSAnXFxuJykge1xyXG4gICAgICAgICAgbmV3TGluZXMucHVzaChbXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3RleHQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBjaGFyOiBCYXNlVGV4dENoYXIgPSB7XHJcbiAgICAgICAgICBpZDogaSArIDEsXHJcbiAgICAgICAgICB2YWx1ZTogdGhpcy5fdGV4dFtpXSxcclxuICAgICAgICAgIGxhYmVsOiBTbmFwc2hvdFZpZXdTZXJ2aWNlLnRyYW5zbGF0ZVNwZWNpYWxDaGFyKHRoaXMuX3RleHRbaV0pLFxyXG4gICAgICAgICAgY29sb3I6IHRoaXMuZGVmYXVsdENvbG9yLFxyXG4gICAgICAgICAgYm9yZGVyQ29sb3I6IHRoaXMuZGVmYXVsdEJvcmRlckNvbG9yLFxyXG4gICAgICAgICAgZW1TaXplOiAxLjUsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBuZXdMaW5lc1tuZXdMaW5lcy5sZW5ndGggLSAxXS5wdXNoKGNoYXIpO1xyXG5cclxuICAgICAgICBpZiAoY2hhci52YWx1ZSA9PT0gJ1xcbicpIHtcclxuICAgICAgICAgIG5ld0xpbmVzLnB1c2goW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubGluZXMgPSBuZXdMaW5lcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXRDb2xvcnMoKTogdm9pZCB7XHJcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgdGhpcy5saW5lcykge1xyXG4gICAgICBmb3IgKGNvbnN0IGMgb2YgbGluZSkge1xyXG4gICAgICAgIGMuY29sb3IgPSB0aGlzLmRlZmF1bHRDb2xvcjtcclxuICAgICAgICBjLmJvcmRlckNvbG9yID0gdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3I7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNoYXJQaWNrKGV2ZW50OiBCYXNlVGV4dENoYXJFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXNldENvbG9ycygpO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5fbGFzdFNlbGVjdGVkQ2hhciAmJlxyXG4gICAgICB0aGlzLl9sYXN0U2VsZWN0ZWRDaGFyICE9PSBldmVudC5jaGFyICYmXHJcbiAgICAgIGV2ZW50LmV2ZW50LmN0cmxLZXlcclxuICAgICkge1xyXG4gICAgICBjb25zdCBtaW5JZCA9IE1hdGgubWluKHRoaXMuX2xhc3RTZWxlY3RlZENoYXIuaWQsIGV2ZW50LmNoYXIuaWQpO1xyXG4gICAgICBjb25zdCBtYXhJZCA9IE1hdGgubWF4KHRoaXMuX2xhc3RTZWxlY3RlZENoYXIuaWQsIGV2ZW50LmNoYXIuaWQpO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBsaW5lIG9mIHRoaXMubGluZXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGMgb2YgbGluZSkge1xyXG4gICAgICAgICAgaWYgKGMuaWQgPj0gbWluSWQgJiYgYy5pZCA8PSBtYXhJZCkge1xyXG4gICAgICAgICAgICBjLmNvbG9yID0gdGhpcy5zZWxlY3Rpb25Db2xvcjtcclxuICAgICAgICAgICAgYy5ib3JkZXJDb2xvciA9IHRoaXMuc2VsZWN0aW9uQ29sb3I7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNoYXJQaWNrLmVtaXQoZXZlbnQpO1xyXG4gICAgICB0aGlzLnJhbmdlUGljay5lbWl0KHsgYXQ6IG1pbklkLCBydW46IG1heElkIC0gbWluSWQgKyAxIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBzZWxlY3QgY3VycmVudCBjaGFyXHJcbiAgICAgIGV2ZW50LmNoYXIuY29sb3IgPSB0aGlzLnNlbGVjdGlvbkNvbG9yO1xyXG4gICAgICBldmVudC5jaGFyLmJvcmRlckNvbG9yID0gdGhpcy5zZWxlY3Rpb25Db2xvcjtcclxuICAgICAgdGhpcy5jaGFyUGljay5lbWl0KGV2ZW50KTtcclxuICAgICAgdGhpcy5yYW5nZVBpY2suZW1pdCh7IGF0OiBldmVudC5jaGFyLmlkLCBydW46IDEgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fbGFzdFNlbGVjdGVkQ2hhciA9IGV2ZW50LmNoYXI7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgaWQ9XCJ0ZXh0XCI+XHJcbiAgQGZvciAobGluZSBvZiBsaW5lczsgdHJhY2sgbGluZSkge1xyXG4gIDxkaXYgY2xhc3M9XCJsaW5lXCI+XHJcbiAgICBAaWYgKGhhc0xpbmVOdW1iZXIpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJuclwiPlxyXG4gICAgICB7eyBsaW5lcy5pbmRleE9mKGxpbmUpICsgMSB9fVxyXG4gICAgPC9kaXY+XHJcbiAgICB9IEBmb3IgKGMgb2YgbGluZTsgdHJhY2sgYy5pZCkge1xyXG4gICAgPGd2ZS1iYXNlLXRleHQtY2hhciBbY2hhcl09XCJjXCIgKGNoYXJQaWNrKT1cIm9uQ2hhclBpY2soJGV2ZW50KVwiIC8+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbiAgfVxyXG48L2Rpdj5cclxuIl19
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS10ZXh0LXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vZ3ZlLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL2Jhc2UtdGV4dC12aWV3L2Jhc2UtdGV4dC12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2d2ZS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9iYXNlLXRleHQtdmlldy9iYXNlLXRleHQtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2RSxPQUFPLEVBRUwscUJBQXFCLEdBRXRCLE1BQU0sNENBQTRDLENBQUM7QUFDcEQsT0FBTyxFQUFZLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7O0FBVTVFOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFRSCxNQUFNLE9BQU8scUJBQXFCO0lBUGxDO1FBV0U7O1dBRUc7UUFFSSxpQkFBWSxHQUFHLFNBQVMsQ0FBQztRQUVoQzs7V0FFRztRQUVJLHVCQUFrQixHQUFHLFNBQVMsQ0FBQztRQUV0Qzs7V0FFRztRQUVJLG1CQUFjLEdBQUcsU0FBUyxDQUFDO1FBRWxDOztXQUVHO1FBRUksa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFjN0I7O1dBRUc7UUFFSSxhQUFRLEdBQ2IsSUFBSSxZQUFZLEVBQXFCLENBQUM7UUFFeEM7Ozs7V0FJRztRQUVJLGNBQVMsR0FDZCxJQUFJLFlBQVksRUFBb0IsQ0FBQztRQUVoQyxVQUFLLEdBQXFCLEVBQUUsQ0FBQztLQTJGckM7SUF2SEM7O09BRUc7SUFDSCxJQUNXLElBQUk7UUFDYixP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WUFDTixzQkFBc0I7WUFDdEIsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUN2QyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQzdDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFFRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztJQUN0QyxDQUFDOytHQWxKVSxxQkFBcUI7bUdBQXJCLHFCQUFxQiw2U0N2Q2xDLGtXQWFBLDJNRHNCWSxZQUFZLCtCQUFFLHFCQUFxQjs7NEZBSWxDLHFCQUFxQjtrQkFQakMsU0FBUzsrQkFDRSxvQkFBb0IsY0FDbEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLHFCQUFxQixDQUFDOzhCQVl2QyxZQUFZO3NCQURsQixLQUFLO2dCQU9DLGtCQUFrQjtzQkFEeEIsS0FBSztnQkFPQyxjQUFjO3NCQURwQixLQUFLO2dCQU9DLGFBQWE7c0JBRG5CLEtBQUs7Z0JBT0ssSUFBSTtzQkFEZCxLQUFLO2dCQWFDLFFBQVE7c0JBRGQsTUFBTTtnQkFVQSxTQUFTO3NCQURmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlVGV4dENoYXIsXHJcbiAgQmFzZVRleHRDaGFyQ29tcG9uZW50LFxyXG4gIEJhc2VUZXh0Q2hhckV2ZW50LFxyXG59IGZyb20gJy4uL2Jhc2UtdGV4dC1jaGFyL2Jhc2UtdGV4dC1jaGFyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoYXJOb2RlLCBTbmFwc2hvdFZpZXdTZXJ2aWNlIH0gZnJvbSAnQG15cm1pZG9uL2d2ZS1zbmFwc2hvdC12aWV3JztcclxuXHJcbi8qKlxyXG4gKiBBIHJhbmdlIGluIHRoZSBiYXNlIHRleHQuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFZhckJhc2VUZXh0UmFuZ2Uge1xyXG4gIGF0OiBudW1iZXI7XHJcbiAgcnVuOiBudW1iZXI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDwn5SRIGBndmUtYmFzZS10ZXh0LXZpZXdgXHJcbiAqXHJcbiAqIEEgY29tcG9uZW50IHRvIGRpc3BsYXkgYSBzZWxlY3RhYmxlIGJhc2UgdGV4dC5cclxuICogVXNlZCBieSB0aGUgY2hhaW4gcmVzdWx0IHZpZXcgY29tcG9uZW50IGFuZCB0aGUgYmFzZSB0ZXh0IGVkaXRvciBjb21wb25lbnQuXHJcbiAqXHJcbiAqIC0g4pa277iPIGBkZWZhdWx0Q29sb3JgIChgc3RyaW5nYCk6IHRoZSBkZWZhdWx0IGNvbG9yIGZvciB0aGUgdGV4dC5cclxuICogLSDilrbvuI8gYGRlZmF1bHRCb3JkZXJDb2xvcmAgKGBzdHJpbmdgKTogdGhlIGRlZmF1bHQgYm9yZGVyIGNvbG9yIGZvciB0aGUgdGV4dC5cclxuICogLSDilrbvuI8gYHNlbGVjdGlvbkNvbG9yYCAoYHN0cmluZ2ApOiB0aGUgY29sb3IgZm9yIHRoZSBzZWxlY3RlZCB0ZXh0LlxyXG4gKiAtIOKWtu+4jyBgaGFzTGluZU51bWJlcmAgKGBib29sZWFuYCk6IHRydWUgaWYgbGluZSBudW1iZXJzIHNob3VsZCBiZSBkaXNwbGF5ZWQgbmV4dCB0byBlYWNoIGxpbmUuXHJcbiAqIC0g4pa277iPIGB0ZXh0YCAoYHN0cmluZ2AgfCBgQ2hhck5vZGVbXWApOiB0aGUgdGV4dCB0byBkaXNwbGF5LlxyXG4gKiAtIPCflKUgYGNoYXJQaWNrYCAoYEJhc2VUZXh0Q2hhckV2ZW50YCk6IGVtaXR0ZWQgd2hlbiBhIGNoYXJhY3RlciBpcyBwaWNrZWQuXHJcbiAqIC0g8J+UpSBgcmFuZ2VQaWNrYCAoYFZhckJhc2VUZXh0UmFuZ2VgKTogZW1pdHRlZCB3aGVuIGEgcmFuZ2UgaXMgcGlja2VkLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdndmUtYmFzZS10ZXh0LXZpZXcnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQmFzZVRleHRDaGFyQ29tcG9uZW50XSxcclxuICB0ZW1wbGF0ZVVybDogJy4vYmFzZS10ZXh0LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9iYXNlLXRleHQtdmlldy5jb21wb25lbnQuY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEJhc2VUZXh0Vmlld0NvbXBvbmVudCB7XHJcbiAgcHJpdmF0ZSBfdGV4dD86IHN0cmluZyB8IENoYXJOb2RlW107XHJcbiAgcHJpdmF0ZSBfbGFzdFNlbGVjdGVkQ2hhcj86IEJhc2VUZXh0Q2hhcjtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGRlZmF1bHQgY29sb3IgZm9yIHRoZSB0ZXh0LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGRlZmF1bHRDb2xvciA9ICcjREJEQkRCJztcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGRlZmF1bHQgYm9yZGVyIGNvbG9yIGZvciB0aGUgdGV4dC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBkZWZhdWx0Qm9yZGVyQ29sb3IgPSAnI0RCREJEQic7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBjb2xvciBmb3IgdGhlIHNlbGVjdGVkIHRleHQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2VsZWN0aW9uQ29sb3IgPSAnIzNFOTJDQyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRydWUgaWYgbGluZSBudW1iZXJzIHNob3VsZCBiZSBkaXNwbGF5ZWQgbmV4dCB0byBlYWNoIGxpbmUuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgaGFzTGluZU51bWJlciA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgdGV4dCB0byBkaXNwbGF5LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCB0ZXh0KCk6IHN0cmluZyB8IENoYXJOb2RlW10gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RleHQ7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgdGV4dCh2YWx1ZTogc3RyaW5nIHwgQ2hhck5vZGVbXSB8IHVuZGVmaW5lZCB8IG51bGwpIHtcclxuICAgIHRoaXMuX3RleHQgPSB2YWx1ZSB8fCB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmJ1aWxkTGluZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXR0ZWQgd2hlbiBhIGNoYXJhY3RlciBpcyBwaWNrZWQuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGNoYXJQaWNrOiBFdmVudEVtaXR0ZXI8QmFzZVRleHRDaGFyRXZlbnQ+ID1cclxuICAgIG5ldyBFdmVudEVtaXR0ZXI8QmFzZVRleHRDaGFyRXZlbnQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXR0ZWQgd2hlbiBhIHJhbmdlIGlzIHBpY2tlZC4gVGhpcyBpcyBwcmVjZWRlZCBieSBhIGNoYXJhY3RlciBwaWNrIGV2ZW50LlxyXG4gICAqIFRoZSByYW5nZSBpcyBkZWZpbmVkIGJ5IHRoZSBzdGFydGluZyBjaGFyYWN0ZXIgYW5kIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycy5cclxuICAgKiBUaGUgcmFuZ2UgaXMgaW5jbHVzaXZlLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyByYW5nZVBpY2s6IEV2ZW50RW1pdHRlcjxWYXJCYXNlVGV4dFJhbmdlPiA9XHJcbiAgICBuZXcgRXZlbnRFbWl0dGVyPFZhckJhc2VUZXh0UmFuZ2U+KCk7XHJcblxyXG4gIHB1YmxpYyBsaW5lczogQmFzZVRleHRDaGFyW11bXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIGJ1aWxkTGluZXMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuX3RleHQpIHtcclxuICAgICAgdGhpcy5saW5lcyA9IFtdO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbmV3TGluZXM6IEJhc2VUZXh0Q2hhcltdW10gPSBbXTtcclxuICAgIG5ld0xpbmVzLnB1c2goW10pO1xyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuX3RleHQpKSB7XHJcbiAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5fdGV4dCBhcyBDaGFyTm9kZVtdO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgY2hhcjogQmFzZVRleHRDaGFyID0ge1xyXG4gICAgICAgICAgaWQ6IG5vZGVzW2ldLmlkLFxyXG4gICAgICAgICAgdmFsdWU6IG5vZGVzW2ldLmRhdGEsXHJcbiAgICAgICAgICBsYWJlbDogbm9kZXNbaV0ubGFiZWwsXHJcbiAgICAgICAgICBjb2xvcjogdGhpcy5kZWZhdWx0Q29sb3IsXHJcbiAgICAgICAgICBib3JkZXJDb2xvcjogdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IsXHJcbiAgICAgICAgICBlbVNpemU6IDEuNSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIG5ld0xpbmVzW25ld0xpbmVzLmxlbmd0aCAtIDFdLnB1c2goY2hhcik7XHJcblxyXG4gICAgICAgIGlmIChjaGFyLnZhbHVlID09PSAnXFxuJykge1xyXG4gICAgICAgICAgbmV3TGluZXMucHVzaChbXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3RleHQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBjaGFyOiBCYXNlVGV4dENoYXIgPSB7XHJcbiAgICAgICAgICBpZDogaSArIDEsXHJcbiAgICAgICAgICB2YWx1ZTogdGhpcy5fdGV4dFtpXSxcclxuICAgICAgICAgIGxhYmVsOiBTbmFwc2hvdFZpZXdTZXJ2aWNlLnRyYW5zbGF0ZVNwZWNpYWxDaGFyKHRoaXMuX3RleHRbaV0pLFxyXG4gICAgICAgICAgY29sb3I6IHRoaXMuZGVmYXVsdENvbG9yLFxyXG4gICAgICAgICAgYm9yZGVyQ29sb3I6IHRoaXMuZGVmYXVsdEJvcmRlckNvbG9yLFxyXG4gICAgICAgICAgZW1TaXplOiAxLjUsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBuZXdMaW5lc1tuZXdMaW5lcy5sZW5ndGggLSAxXS5wdXNoKGNoYXIpO1xyXG5cclxuICAgICAgICBpZiAoY2hhci52YWx1ZSA9PT0gJ1xcbicpIHtcclxuICAgICAgICAgIG5ld0xpbmVzLnB1c2goW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubGluZXMgPSBuZXdMaW5lcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXRDb2xvcnMoKTogdm9pZCB7XHJcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgdGhpcy5saW5lcykge1xyXG4gICAgICBmb3IgKGNvbnN0IGMgb2YgbGluZSkge1xyXG4gICAgICAgIGMuY29sb3IgPSB0aGlzLmRlZmF1bHRDb2xvcjtcclxuICAgICAgICBjLmJvcmRlckNvbG9yID0gdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3I7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNoYXJQaWNrKGV2ZW50OiBCYXNlVGV4dENoYXJFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXNldENvbG9ycygpO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5fbGFzdFNlbGVjdGVkQ2hhciAmJlxyXG4gICAgICB0aGlzLl9sYXN0U2VsZWN0ZWRDaGFyICE9PSBldmVudC5jaGFyICYmXHJcbiAgICAgIGV2ZW50LmV2ZW50LmN0cmxLZXlcclxuICAgICkge1xyXG4gICAgICBjb25zdCBtaW5JZCA9IE1hdGgubWluKHRoaXMuX2xhc3RTZWxlY3RlZENoYXIuaWQsIGV2ZW50LmNoYXIuaWQpO1xyXG4gICAgICBjb25zdCBtYXhJZCA9IE1hdGgubWF4KHRoaXMuX2xhc3RTZWxlY3RlZENoYXIuaWQsIGV2ZW50LmNoYXIuaWQpO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBsaW5lIG9mIHRoaXMubGluZXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGMgb2YgbGluZSkge1xyXG4gICAgICAgICAgaWYgKGMuaWQgPj0gbWluSWQgJiYgYy5pZCA8PSBtYXhJZCkge1xyXG4gICAgICAgICAgICBjLmNvbG9yID0gdGhpcy5zZWxlY3Rpb25Db2xvcjtcclxuICAgICAgICAgICAgYy5ib3JkZXJDb2xvciA9IHRoaXMuc2VsZWN0aW9uQ29sb3I7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNoYXJQaWNrLmVtaXQoZXZlbnQpO1xyXG4gICAgICB0aGlzLnJhbmdlUGljay5lbWl0KHsgYXQ6IG1pbklkLCBydW46IG1heElkIC0gbWluSWQgKyAxIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBzZWxlY3QgY3VycmVudCBjaGFyXHJcbiAgICAgIGV2ZW50LmNoYXIuY29sb3IgPSB0aGlzLnNlbGVjdGlvbkNvbG9yO1xyXG4gICAgICBldmVudC5jaGFyLmJvcmRlckNvbG9yID0gdGhpcy5zZWxlY3Rpb25Db2xvcjtcclxuICAgICAgdGhpcy5jaGFyUGljay5lbWl0KGV2ZW50KTtcclxuICAgICAgdGhpcy5yYW5nZVBpY2suZW1pdCh7IGF0OiBldmVudC5jaGFyLmlkLCBydW46IDEgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fbGFzdFNlbGVjdGVkQ2hhciA9IGV2ZW50LmNoYXI7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgaWQ9XCJ0ZXh0XCI+XHJcbiAgQGZvciAobGluZSBvZiBsaW5lczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgPGRpdiBjbGFzcz1cImxpbmVcIj5cclxuICAgIEBpZiAoaGFzTGluZU51bWJlcikge1xyXG4gICAgPGRpdiBjbGFzcz1cIm5yXCI+XHJcbiAgICAgIHt7IGxpbmVzLmluZGV4T2YobGluZSkgKyAxIH19XHJcbiAgICA8L2Rpdj5cclxuICAgIH0gQGZvciAoYyBvZiBsaW5lOyB0cmFjayBjLmlkKSB7XHJcbiAgICA8Z3ZlLWJhc2UtdGV4dC1jaGFyIFtjaGFyXT1cImNcIiAoY2hhclBpY2spPVwib25DaGFyUGljaygkZXZlbnQpXCIgLz5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuICB9XHJcbjwvZGl2PlxyXG4iXX0=
@@ -0,0 +1,111 @@
1
+ import { Component, EventEmitter, Inject, Input, Optional, Output, } from '@angular/core';
2
+ import { ReactiveFormsModule, Validators, } from '@angular/forms';
3
+ import { MatButtonModule } from '@angular/material/button';
4
+ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
5
+ import { MatFormFieldModule } from '@angular/material/form-field';
6
+ import { MatIconModule } from '@angular/material/icon';
7
+ import { MatInputModule } from '@angular/material/input';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/forms";
10
+ import * as i2 from "../../services/gve-api.service";
11
+ import * as i3 from "@angular/material/dialog";
12
+ import * as i4 from "@angular/material/button";
13
+ import * as i5 from "@angular/material/form-field";
14
+ import * as i6 from "@angular/material/input";
15
+ /**
16
+ * 🔑 `gve-batch-operation-editor`
17
+ *
18
+ * A component to edit a batch of operations. This component can be used both in a dialog
19
+ * and as a standalone component.
20
+ *
21
+ * - ▶️ `preset` (`string`): the optional preset text to parse.
22
+ * - 🔥 `operationsChange` (`CharChainOperation[]`): event emitted when operations change.
23
+ */
24
+ export class BatchOperationEditorComponent {
25
+ /**
26
+ * The preset text to parse if any. Usually you start with a blank
27
+ * text, but sometimes you might want to pre-set it.
28
+ */
29
+ get preset() {
30
+ return this._preset;
31
+ }
32
+ set preset(value) {
33
+ if (this._preset === value) {
34
+ return;
35
+ }
36
+ this._preset = value || undefined;
37
+ this.parseOperations();
38
+ }
39
+ constructor(formBuilder, _api,
40
+ // this component can be used as a dialog
41
+ dialogRef, data) {
42
+ this._api = _api;
43
+ this.dialogRef = dialogRef;
44
+ this.data = data;
45
+ /**
46
+ * Emitted when operations change.
47
+ */
48
+ this.operationsChange = new EventEmitter();
49
+ this.text = formBuilder.control(null, [
50
+ Validators.required,
51
+ Validators.maxLength(2000),
52
+ ]);
53
+ this.form = formBuilder.group({
54
+ inputOps: this.text,
55
+ });
56
+ }
57
+ ngOnInit() {
58
+ if (this.data?.payload?.preset) {
59
+ this.preset = this.data.payload.preset;
60
+ this.parseOperations();
61
+ }
62
+ }
63
+ parseOperations() {
64
+ if (this.busy || !this.text.value) {
65
+ return;
66
+ }
67
+ this.busy = true;
68
+ this.parseError = undefined;
69
+ this._api.parseOperations(this.text.value).subscribe({
70
+ next: (wrapper) => {
71
+ this.operationsChange.emit(wrapper.result);
72
+ if (!this.preset) {
73
+ this.dialogRef?.close(wrapper.result);
74
+ }
75
+ },
76
+ error: (error) => {
77
+ this.parseError = error.message;
78
+ },
79
+ complete: () => {
80
+ this.busy = false;
81
+ },
82
+ });
83
+ }
84
+ close() {
85
+ this.dialogRef?.close();
86
+ }
87
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: BatchOperationEditorComponent, deps: [{ token: i1.FormBuilder }, { token: i2.GveApiService }, { token: i3.MatDialogRef, optional: true }, { token: MAT_DIALOG_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
88
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: BatchOperationEditorComponent, isStandalone: true, selector: "gve-batch-operation-editor", inputs: { preset: "preset" }, outputs: { operationsChange: "operationsChange" }, ngImport: i0, template: "<div [style.padding]=\"dialogRef ? '8px' : '0'\">\r\n @if (dialogRef) {\r\n <div id=\"heading\">\r\n <h2>Add Operations</h2>\r\n </div>\r\n }\r\n <fieldset>\r\n <div id=\"batch-input\">\r\n <div>\r\n <mat-form-field class=\"full-width\">\r\n <mat-label>operations</mat-label>\r\n <textarea\r\n class=\"code\"\r\n matInput\r\n [formControl]=\"text\"\r\n rows=\"8\"\r\n spellcheck=\"false\"\r\n ></textarea>\r\n </mat-form-field>\r\n @if (parseError) {\r\n <div class=\"error\">{{ parseError }}</div>\r\n }\r\n </div>\r\n </div>\r\n <div id=\"batch-help\">\r\n <ul>\r\n <li>\r\n <strong>replace</strong>:\r\n <code>ATxRUN<strong>=</strong>\"VALUE\"</code>\r\n </li>\r\n <li>\r\n <strong>delete</strong>:\r\n <code>ATxRUN<strong>-</strong></code>\r\n </li>\r\n <li>\r\n <strong>add-before</strong>:\r\n <code>ATxRUN<strong>+[</strong>\"VALUE\"</code>\r\n </li>\r\n <li>\r\n <strong>add-after</strong>:\r\n <code>ATxRUN<strong>+]</strong>\"VALUE\"</code>\r\n </li>\r\n <li>\r\n <strong>move-before</strong>:\r\n <code>ATxRUN<strong>&gt;[</strong>TO</code>\r\n </li>\r\n <li>\r\n <strong>move-after</strong>:\r\n <code>ATxRUN<strong>&gt;]</strong>TO</code>\r\n </li>\r\n <li>\r\n <strong>swap</strong>:\r\n <code>ATxRUN<strong>&lt;&gt;</strong>TOxRUN</code>\r\n </li>\r\n <li>\r\n <strong>annotate</strong>:\r\n <code>ATxRUN<strong>:</strong></code>\r\n </li>\r\n </ul>\r\n <p>For all the operations:</p>\r\n <ul>\r\n <li>\r\n prefix <code>(ITAG:OTAG)</code> to define input and/or output tags,\r\n separated by colon.\r\n </li>\r\n <li>\r\n prepend <code>&#x40;</code> to AT to use character indexes (0-N)\r\n rather than IDs.\r\n </li>\r\n <li>RUN (where applicable) defaults to 1.</li>\r\n <li>\r\n append features like <code>[NAME OPERATOR VALUE]</code>, separated by\r\n space, where:\r\n </li>\r\n <li>\r\n <ol>\r\n <li>\r\n NAME is an arbitrary string. Prefixes:\r\n <code>*</code>=global features, <code>!</code>=remove feature (no\r\n value). Suffixes: <code>^</code>=short-lived (like\r\n <code>*version^=alpha</code>).\r\n </li>\r\n <li>\r\n OPERATOR is <code>=</code> (multiple), <code>:=</code> (single),\r\n <code>==</code> (first-single).\r\n </li>\r\n <li>\r\n VALUE is a string. If it includes spaces, wrap it in\r\n <code>\"\"</code>.\r\n </li>\r\n </ol>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"form-row-center\">\r\n @if (dialogRef) {\r\n <button\r\n type=\"button\"\r\n class=\"mat-warn\"\r\n mat-flat-button\r\n matTooltip=\"Close dialog\"\r\n (click)=\"close()\"\r\n >\r\n close\r\n </button>\r\n }\r\n <button\r\n type=\"button\"\r\n class=\"mat-primary\"\r\n mat-flat-button\r\n matTooltip=\"Parse text into operations\"\r\n [disabled]=\"!text.value || busy\"\r\n (click)=\"parseOperations()\"\r\n >\r\n batch add\r\n </button>\r\n </div>\r\n </fieldset>\r\n</div>\r\n", styles: [".full-width{width:100%}.error{color:red}.form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row-center{display:flex;gap:8px;align-items:center;justify-content:center;flex-wrap:wrap}.form-row,.form-row-center *{flex:0 0 auto}div#heading{margin:8px;text-align:center}div#batch-help strong{color:#ff8c00}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }] }); }
89
+ }
90
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: BatchOperationEditorComponent, decorators: [{
91
+ type: Component,
92
+ args: [{ selector: 'gve-batch-operation-editor', standalone: true, imports: [
93
+ ReactiveFormsModule,
94
+ MatButtonModule,
95
+ MatFormFieldModule,
96
+ MatIconModule,
97
+ MatInputModule,
98
+ ], template: "<div [style.padding]=\"dialogRef ? '8px' : '0'\">\r\n @if (dialogRef) {\r\n <div id=\"heading\">\r\n <h2>Add Operations</h2>\r\n </div>\r\n }\r\n <fieldset>\r\n <div id=\"batch-input\">\r\n <div>\r\n <mat-form-field class=\"full-width\">\r\n <mat-label>operations</mat-label>\r\n <textarea\r\n class=\"code\"\r\n matInput\r\n [formControl]=\"text\"\r\n rows=\"8\"\r\n spellcheck=\"false\"\r\n ></textarea>\r\n </mat-form-field>\r\n @if (parseError) {\r\n <div class=\"error\">{{ parseError }}</div>\r\n }\r\n </div>\r\n </div>\r\n <div id=\"batch-help\">\r\n <ul>\r\n <li>\r\n <strong>replace</strong>:\r\n <code>ATxRUN<strong>=</strong>\"VALUE\"</code>\r\n </li>\r\n <li>\r\n <strong>delete</strong>:\r\n <code>ATxRUN<strong>-</strong></code>\r\n </li>\r\n <li>\r\n <strong>add-before</strong>:\r\n <code>ATxRUN<strong>+[</strong>\"VALUE\"</code>\r\n </li>\r\n <li>\r\n <strong>add-after</strong>:\r\n <code>ATxRUN<strong>+]</strong>\"VALUE\"</code>\r\n </li>\r\n <li>\r\n <strong>move-before</strong>:\r\n <code>ATxRUN<strong>&gt;[</strong>TO</code>\r\n </li>\r\n <li>\r\n <strong>move-after</strong>:\r\n <code>ATxRUN<strong>&gt;]</strong>TO</code>\r\n </li>\r\n <li>\r\n <strong>swap</strong>:\r\n <code>ATxRUN<strong>&lt;&gt;</strong>TOxRUN</code>\r\n </li>\r\n <li>\r\n <strong>annotate</strong>:\r\n <code>ATxRUN<strong>:</strong></code>\r\n </li>\r\n </ul>\r\n <p>For all the operations:</p>\r\n <ul>\r\n <li>\r\n prefix <code>(ITAG:OTAG)</code> to define input and/or output tags,\r\n separated by colon.\r\n </li>\r\n <li>\r\n prepend <code>&#x40;</code> to AT to use character indexes (0-N)\r\n rather than IDs.\r\n </li>\r\n <li>RUN (where applicable) defaults to 1.</li>\r\n <li>\r\n append features like <code>[NAME OPERATOR VALUE]</code>, separated by\r\n space, where:\r\n </li>\r\n <li>\r\n <ol>\r\n <li>\r\n NAME is an arbitrary string. Prefixes:\r\n <code>*</code>=global features, <code>!</code>=remove feature (no\r\n value). Suffixes: <code>^</code>=short-lived (like\r\n <code>*version^=alpha</code>).\r\n </li>\r\n <li>\r\n OPERATOR is <code>=</code> (multiple), <code>:=</code> (single),\r\n <code>==</code> (first-single).\r\n </li>\r\n <li>\r\n VALUE is a string. If it includes spaces, wrap it in\r\n <code>\"\"</code>.\r\n </li>\r\n </ol>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"form-row-center\">\r\n @if (dialogRef) {\r\n <button\r\n type=\"button\"\r\n class=\"mat-warn\"\r\n mat-flat-button\r\n matTooltip=\"Close dialog\"\r\n (click)=\"close()\"\r\n >\r\n close\r\n </button>\r\n }\r\n <button\r\n type=\"button\"\r\n class=\"mat-primary\"\r\n mat-flat-button\r\n matTooltip=\"Parse text into operations\"\r\n [disabled]=\"!text.value || busy\"\r\n (click)=\"parseOperations()\"\r\n >\r\n batch add\r\n </button>\r\n </div>\r\n </fieldset>\r\n</div>\r\n", styles: [".full-width{width:100%}.error{color:red}.form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row-center{display:flex;gap:8px;align-items:center;justify-content:center;flex-wrap:wrap}.form-row,.form-row-center *{flex:0 0 auto}div#heading{margin:8px;text-align:center}div#batch-help strong{color:#ff8c00}\n"] }]
99
+ }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.GveApiService }, { type: i3.MatDialogRef, decorators: [{
100
+ type: Optional
101
+ }] }, { type: undefined, decorators: [{
102
+ type: Optional
103
+ }, {
104
+ type: Inject,
105
+ args: [MAT_DIALOG_DATA]
106
+ }] }], propDecorators: { preset: [{
107
+ type: Input
108
+ }], operationsChange: [{
109
+ type: Output
110
+ }] } });
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2gtb3BlcmF0aW9uLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJtaWRvbi9ndmUtY29yZS9zcmMvbGliL2NvbXBvbmVudHMvYmF0Y2gtb3BlcmF0aW9uLWVkaXRvci9iYXRjaC1vcGVyYXRpb24tZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2d2ZS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9iYXRjaC1vcGVyYXRpb24tZWRpdG9yL2JhdGNoLW9wZXJhdGlvbi1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFJTCxtQkFBbUIsRUFDbkIsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7QUFPekQ7Ozs7Ozs7O0dBUUc7QUFjSCxNQUFNLE9BQU8sNkJBQTZCO0lBUXhDOzs7T0FHRztJQUNILElBQ1csTUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBVyxNQUFNLENBQUMsS0FBZ0M7UUFDaEQsSUFBSSxJQUFJLENBQUMsT0FBTyxL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QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEZvcm1CdWlsZGVyLFxyXG4gIEZvcm1Db250cm9sLFxyXG4gIEZvcm1Hcm91cCxcclxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuXHJcbmltcG9ydCB7IENoYXJDaGFpbk9wZXJhdGlvbiB9IGZyb20gJ0BteXJtaWRvbi9ndmUtc25hcHNob3Qtdmlldyc7XHJcblxyXG5pbXBvcnQgeyBQYXlsb2FkTWF0RGlhbG9nQ29uZmlnIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgR3ZlQXBpU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2d2ZS1hcGkuc2VydmljZSc7XHJcblxyXG4vKipcclxuICog8J+UkSBgZ3ZlLWJhdGNoLW9wZXJhdGlvbi1lZGl0b3JgXHJcbiAqXHJcbiAqIEEgY29tcG9uZW50IHRvIGVkaXQgYSBiYXRjaCBvZiBvcGVyYXRpb25zLiBUaGlzIGNvbXBvbmVudCBjYW4gYmUgdXNlZCBib3RoIGluIGEgZGlhbG9nXHJcbiAqIGFuZCBhcyBhIHN0YW5kYWxvbmUgY29tcG9uZW50LlxyXG4gKlxyXG4gKiAtIOKWtu+4jyBgcHJlc2V0YCAoYHN0cmluZ2ApOiB0aGUgb3B0aW9uYWwgcHJlc2V0IHRleHQgdG8gcGFyc2UuXHJcbiAqIC0g8J+UpSBgb3BlcmF0aW9uc0NoYW5nZWAgKGBDaGFyQ2hhaW5PcGVyYXRpb25bXWApOiBldmVudCBlbWl0dGVkIHdoZW4gb3BlcmF0aW9ucyBjaGFuZ2UuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2d2ZS1iYXRjaC1vcGVyYXRpb24tZWRpdG9yJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vYmF0Y2gtb3BlcmF0aW9uLWVkaXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2JhdGNoLW9wZXJhdGlvbi1lZGl0b3IuY29tcG9uZW50LmNzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYXRjaE9wZXJhdGlvbkVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcHJpdmF0ZSBfcHJlc2V0Pzogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgYnVzeT86IGJvb2xlYW47XHJcbiAgcHVibGljIHBhcnNlRXJyb3I/OiBzdHJpbmc7XHJcbiAgcHVibGljIHRleHQ6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xyXG4gIHB1YmxpYyBmb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBwcmVzZXQgdGV4dCB0byBwYXJzZSBpZiBhbnkuIFVzdWFsbHkgeW91IHN0YXJ0IHdpdGggYSBibGFua1xyXG4gICAqIHRleHQsIGJ1dCBzb21ldGltZXMgeW91IG1pZ2h0IHdhbnQgdG8gcHJlLXNldCBpdC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgcHJlc2V0KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ByZXNldDtcclxuICB9XHJcbiAgcHVibGljIHNldCBwcmVzZXQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpIHtcclxuICAgIGlmICh0aGlzLl9wcmVzZXQgPT09IHZhbHVlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX3ByZXNldCA9IHZhbHVlIHx8IHVuZGVmaW5lZDtcclxuICAgIHRoaXMucGFyc2VPcGVyYXRpb25zKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0dGVkIHdoZW4gb3BlcmF0aW9ucyBjaGFuZ2UuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIHJlYWRvbmx5IG9wZXJhdGlvbnNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxDaGFyQ2hhaW5PcGVyYXRpb25bXT4gPVxyXG4gICAgbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgX2FwaTogR3ZlQXBpU2VydmljZSxcclxuICAgIC8vIHRoaXMgY29tcG9uZW50IGNhbiBiZSB1c2VkIGFzIGEgZGlhbG9nXHJcbiAgICBAT3B0aW9uYWwoKVxyXG4gICAgcHVibGljIGRpYWxvZ1JlZj86IE1hdERpYWxvZ1JlZjxCYXRjaE9wZXJhdGlvbkVkaXRvckNvbXBvbmVudD4sXHJcbiAgICBAT3B0aW9uYWwoKVxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpXHJcbiAgICBwdWJsaWMgZGF0YT86IFBheWxvYWRNYXREaWFsb2dDb25maWc8eyBwcmVzZXQ/OiBzdHJpbmcgfT5cclxuICApIHtcclxuICAgIHRoaXMudGV4dCA9IGZvcm1CdWlsZGVyLmNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgW1xyXG4gICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCgyMDAwKSxcclxuICAgIF0pO1xyXG4gICAgdGhpcy5mb3JtID0gZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBpbnB1dE9wczogdGhpcy50ZXh0LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhPy5wYXlsb2FkPy5wcmVzZXQpIHtcclxuICAgICAgdGhpcy5wcmVzZXQgPSB0aGlzLmRhdGEucGF5bG9hZC5wcmVzZXQ7XHJcbiAgICAgIHRoaXMucGFyc2VPcGVyYXRpb25zKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcGFyc2VPcGVyYXRpb25zKCkge1xyXG4gICAgaWYgKHRoaXMuYnVzeSB8fCAhdGhpcy50ZXh0LnZhbHVlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuYnVzeSA9IHRydWU7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgdGhpcy5fYXBpLnBhcnNlT3BlcmF0aW9ucyh0aGlzLnRleHQudmFsdWUhKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAod3JhcHBlcikgPT4ge1xyXG4gICAgICAgIHRoaXMub3BlcmF0aW9uc0NoYW5nZS5lbWl0KHdyYXBwZXIucmVzdWx0KTtcclxuICAgICAgICBpZiAoIXRoaXMucHJlc2V0KSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1JlZj8uY2xvc2Uod3JhcHBlci5yZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IGVycm9yLm1lc3NhZ2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlhbG9nUmVmPy5jbG9zZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IFtzdHlsZS5wYWRkaW5nXT1cImRpYWxvZ1JlZiA/ICc4cHgnIDogJzAnXCI+XHJcbiAgQGlmIChkaWFsb2dSZWYpIHtcclxuICA8ZGl2IGlkPVwiaGVhZGluZ1wiPlxyXG4gICAgPGgyPkFkZCBPcGVyYXRpb25zPC9oMj5cclxuICA8L2Rpdj5cclxuICB9XHJcbiAgPGZpZWxkc2V0PlxyXG4gICAgPGRpdiBpZD1cImJhdGNoLWlucHV0XCI+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD5vcGVyYXRpb25zPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8dGV4dGFyZWFcclxuICAgICAgICAgICAgY2xhc3M9XCJjb2RlXCJcclxuICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInRleHRcIlxyXG4gICAgICAgICAgICByb3dzPVwiOFwiXHJcbiAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICA+PC90ZXh0YXJlYT5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIEBpZiAocGFyc2VFcnJvcikge1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJlcnJvclwiPnt7IHBhcnNlRXJyb3IgfX08L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGlkPVwiYmF0Y2gtaGVscFwiPlxyXG4gICAgICA8dWw+XHJcbiAgICAgICAgPGxpPlxyXG4gICAgICAgICAgPHN0cm9uZz5yZXBsYWNlPC9zdHJvbmc+OlxyXG4gICAgICAgICAgPGNvZGU+QVR4UlVOPHN0cm9uZz49PC9zdHJvbmc+XCJWQUxVRVwiPC9jb2RlPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPlxyXG4gICAgICAgICAgPHN0cm9uZz5kZWxldGU8L3N0cm9uZz46XHJcbiAgICAgICAgICA8Y29kZT5BVHhSVU48c3Ryb25nPi08L3N0cm9uZz48L2NvZGU+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+XHJcbiAgICAgICAgICA8c3Ryb25nPmFkZC1iZWZvcmU8L3N0cm9uZz46XHJcbiAgICAgICAgICA8Y29kZT5BVHhSVU48c3Ryb25nPitbPC9zdHJvbmc+XCJWQUxVRVwiPC9jb2RlPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPlxyXG4gICAgICAgICAgPHN0cm9uZz5hZGQtYWZ0ZXI8L3N0cm9uZz46XHJcbiAgICAgICAgICA8Y29kZT5BVHhSVU48c3Ryb25nPitdPC9zdHJvbmc+XCJWQUxVRVwiPC9jb2RlPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPlxyXG4gICAgICAgICAgPHN0cm9uZz5tb3ZlLWJlZm9yZTwvc3Ryb25nPjpcclxuICAgICAgICAgIDxjb2RlPkFUeFJVTjxzdHJvbmc+Jmd0O1s8L3N0cm9uZz5UTzwvY29kZT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5cclxuICAgICAgICAgIDxzdHJvbmc+bW92ZS1hZnRlcjwvc3Ryb25nPjpcclxuICAgICAgICAgIDxjb2RlPkFUeFJVTjxzdHJvbmc+Jmd0O108L3N0cm9uZz5UTzwvY29kZT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5cclxuICAgICAgICAgIDxzdHJvbmc+c3dhcDwvc3Ryb25nPjpcclxuICAgICAgICAgIDxjb2RlPkFUeFJVTjxzdHJvbmc+Jmx0OyZndDs8L3N0cm9uZz5UT3hSVU48L2NvZGU+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+XHJcbiAgICAgICAgICA8c3Ryb25nPmFubm90YXRlPC9zdHJvbmc+OlxyXG4gICAgICAgICAgPGNvZGU+QVR4UlVOPHN0cm9uZz46PC9zdHJvbmc+PC9jb2RlPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgIDwvdWw+XHJcbiAgICAgIDxwPkZvciBhbGwgdGhlIG9wZXJhdGlvbnM6PC9wPlxyXG4gICAgICA8dWw+XHJcbiAgICAgICAgPGxpPlxyXG4gICAgICAgICAgcHJlZml4IDxjb2RlPihJVEFHOk9UQUcpPC9jb2RlPiB0byBkZWZpbmUgaW5wdXQgYW5kL29yIG91dHB1dCB0YWdzLFxyXG4gICAgICAgICAgc2VwYXJhdGVkIGJ5IGNvbG9uLlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPlxyXG4gICAgICAgICAgcHJlcGVuZCA8Y29kZT4mI3g0MDs8L2NvZGU+IHRvIEFUIHRvIHVzZSBjaGFyYWN0ZXIgaW5kZXhlcyAoMC1OKVxyXG4gICAgICAgICAgcmF0aGVyIHRoYW4gSURzLlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPlJVTiAod2hlcmUgYXBwbGljYWJsZSkgZGVmYXVsdHMgdG8gMS48L2xpPlxyXG4gICAgICAgIDxsaT5cclxuICAgICAgICAgIGFwcGVuZCBmZWF0dXJlcyBsaWtlIDxjb2RlPltOQU1FIE9QRVJBVE9SIFZBTFVFXTwvY29kZT4sIHNlcGFyYXRlZCBieVxyXG4gICAgICAgICAgc3BhY2UsIHdoZXJlOlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPlxyXG4gICAgICAgICAgPG9sPlxyXG4gICAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgICAgTkFNRSBpcyBhbiBhcmJpdHJhcnkgc3RyaW5nLiBQcmVmaXhlczpcclxuICAgICAgICAgICAgICA8Y29kZT4qPC9jb2RlPj1nbG9iYWwgZmVhdHVyZXMsIDxjb2RlPiE8L2NvZGU+PXJlbW92ZSBmZWF0dXJlIChub1xyXG4gICAgICAgICAgICAgIHZhbHVlKS4gU3VmZml4ZXM6IDxjb2RlPl48L2NvZGU+PXNob3J0LWxpdmVkIChsaWtlXHJcbiAgICAgICAgICAgICAgPGNvZGU+KnZlcnNpb25ePWFscGhhPC9jb2RlPikuXHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgICBPUEVSQVRPUiBpcyA8Y29kZT49PC9jb2RlPiAobXVsdGlwbGUpLCA8Y29kZT46PTwvY29kZT4gKHNpbmdsZSksXHJcbiAgICAgICAgICAgICAgPGNvZGU+PT08L2NvZGU+IChmaXJzdC1zaW5nbGUpLlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgICAgVkFMVUUgaXMgYSBzdHJpbmcuIElmIGl0IGluY2x1ZGVzIHNwYWNlcywgd3JhcCBpdCBpblxyXG4gICAgICAgICAgICAgIDxjb2RlPlwiXCI8L2NvZGU+LlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPC9vbD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICA8L3VsPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3ctY2VudGVyXCI+XHJcbiAgICAgIEBpZiAoZGlhbG9nUmVmKSB7XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBjbGFzcz1cIm1hdC13YXJuXCJcclxuICAgICAgICBtYXQtZmxhdC1idXR0b25cclxuICAgICAgICBtYXRUb29sdGlwPVwiQ2xvc2UgZGlhbG9nXCJcclxuICAgICAgICAoY2xpY2spPVwiY2xvc2UoKVwiXHJcbiAgICAgID5cclxuICAgICAgICBjbG9zZVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgfVxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgY2xhc3M9XCJtYXQtcHJpbWFyeVwiXHJcbiAgICAgICAgbWF0LWZsYXQtYnV0dG9uXHJcbiAgICAgICAgbWF0VG9vbHRpcD1cIlBhcnNlIHRleHQgaW50byBvcGVyYXRpb25zXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiIXRleHQudmFsdWUgfHwgYnVzeVwiXHJcbiAgICAgICAgKGNsaWNrKT1cInBhcnNlT3BlcmF0aW9ucygpXCJcclxuICAgICAgPlxyXG4gICAgICAgIGJhdGNoIGFkZFxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZmllbGRzZXQ+XHJcbjwvZGl2PlxyXG4iXX0=