@ti-tecnologico-de-monterrey-oficial/ds-ng 1.5.1318-c → 1.5.1318-e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/i18n/en.json +33 -1
- package/assets/i18n/es.json +34 -2
- package/assets/styles/main.min.css +1 -1
- package/assets/styles/main.min.css.map +1 -1
- package/assets/styles/micro.min.css +1 -0
- package/assets/styles/micro.min.css.map +1 -0
- package/esm2022/assets/i18n/en.json +33 -1
- package/esm2022/assets/i18n/es.json +34 -2
- package/esm2022/lib/components/bmb-account-statement/bmb-account-statement.component.mjs +2 -2
- package/esm2022/lib/components/bmb-calendar/bmb-calendar.component.mjs +9 -4
- package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-template-mobile/bmb-calendar-template-mobile.component.mjs +13 -8
- package/esm2022/lib/components/bmb-check-external-link-button/bmb-check-external-link-button.component.mjs +3 -3
- package/esm2022/lib/components/bmb-checkbox/bmb-checkbox.component.mjs +1 -1
- package/esm2022/lib/components/bmb-datepicker/bmb-datepicker.component.mjs +2 -2
- package/esm2022/lib/components/bmb-digital-id/bmb-digital-id.component.mjs +2 -2
- package/esm2022/lib/components/bmb-dropdown/bmb-dropdown.component.mjs +4 -2
- package/esm2022/lib/components/bmb-dropzone/bmb-dropzone.component.mjs +177 -91
- package/esm2022/lib/components/bmb-filter-card/bmb-filter-card.component.mjs +2 -2
- package/esm2022/lib/components/bmb-input/bmb-input-validator/bmb-input-validator.component.mjs +3 -2
- package/esm2022/lib/components/bmb-input/bmb-input.component.mjs +2 -2
- package/esm2022/lib/components/bmb-input-phone-number/bmb-input-phone-number.component.mjs +2 -2
- package/esm2022/lib/components/bmb-input-tags/bmb-input-tags.component.mjs +2 -2
- package/esm2022/lib/components/bmb-portal/bmb-projected-content/bmb-projected-content.component.mjs +2 -2
- package/esm2022/lib/components/bmb-progress-bar/bmb-progress-bar.component.mjs +30 -9
- package/esm2022/lib/components/bmb-radial/bmb-radial.component.mjs +1 -1
- package/esm2022/lib/components/bmb-search-input/bmb-search-input.component.mjs +1 -1
- package/esm2022/lib/components/bmb-switch/bmb-switch.component.mjs +5 -7
- package/esm2022/lib/components/bmb-tables/bmb-tables.component.mjs +66 -8
- package/esm2022/lib/components/bmb-text-editor/bmb-text-editor-prompt/bmb-text-editor-prompt.component.mjs +51 -0
- package/esm2022/lib/components/bmb-text-editor/bmb-text-editor.component.mjs +66 -24
- package/esm2022/lib/components/bmb-text-link/bmb-text-link.component.mjs +11 -17
- package/esm2022/lib/components/bmb-value-counter/bmb-value-counter.component.mjs +33 -15
- package/esm2022/lib/components/utils/bmb-dropdown-content/bmb-dropdown-content.component.mjs +9 -3
- package/esm2022/lib/directives/bmb-layout/bmb-layout-item.directive.mjs +2 -2
- package/esm2022/lib/directives/bmb-layout/bmb-vertical-layout/bmb-vertical-layout-item.directive.mjs +6 -3
- package/esm2022/lib/services/projection/projection.service.mjs +1 -1
- package/esm2022/lib/utils/formControl.mjs +6 -4
- package/fesm2022/ti-tecnologico-de-monterrey-oficial-ds-ng.mjs +712 -387
- package/fesm2022/ti-tecnologico-de-monterrey-oficial-ds-ng.mjs.map +1 -1
- package/lib/components/bmb-dropdown/bmb-dropdown.component.d.ts +3 -2
- package/lib/components/bmb-dropzone/bmb-dropzone.component.d.ts +39 -20
- package/lib/components/bmb-input/bmb-input-validator/bmb-input-validator.component.d.ts +3 -2
- package/lib/components/bmb-progress-bar/bmb-progress-bar.component.d.ts +8 -2
- package/lib/components/bmb-tables/bmb-tables.component.d.ts +8 -1
- package/lib/components/bmb-text-editor/bmb-text-editor-prompt/bmb-text-editor-prompt.component.d.ts +13 -0
- package/lib/components/bmb-text-editor/bmb-text-editor.component.d.ts +10 -4
- package/lib/components/bmb-text-link/bmb-text-link.component.d.ts +1 -2
- package/lib/components/bmb-value-counter/bmb-value-counter.component.d.ts +10 -4
- package/lib/components/utils/bmb-dropdown-content/bmb-dropdown-content.component.d.ts +2 -1
- package/lib/directives/bmb-layout/bmb-vertical-layout/bmb-vertical-layout-item.directive.d.ts +2 -1
- package/lib/utils/formControl.d.ts +2 -2
- package/package.json +4 -4
- package/esm2022/lib/services/calendar.service.mjs +0 -51
- package/esm2022/lib/services/index.mjs +0 -3
- package/esm2022/lib/services/native-modal.service.mjs +0 -60
- package/esm2022/lib/services/notification.service.mjs +0 -84
- package/esm2022/lib/services/projection.service.mjs +0 -49
- package/esm2022/lib/services/tabs.service.mjs +0 -30
- package/esm2022/lib/services/theme.service.mjs +0 -30
- package/esm2022/lib/services/toast.service.mjs +0 -24
- package/lib/services/calendar.service.d.ts +0 -15
- package/lib/services/index.d.ts +0 -2
- package/lib/services/native-modal.service.d.ts +0 -18
- package/lib/services/notification.service.d.ts +0 -20
- package/lib/services/projection.service.d.ts +0 -31
- package/lib/services/tabs.service.d.ts +0 -13
- package/lib/services/theme.service.d.ts +0 -11
- package/lib/services/toast.service.d.ts +0 -9
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Component, input, output } from '@angular/core';
|
|
2
|
+
import { BmbCardComponent, BmbCardContentComponent, } from '../../bmb-card/bmb-card.component';
|
|
3
|
+
import { BmbFormValidatorComponent } from '../../bmb-form-validator/bmb-form-validator.component';
|
|
4
|
+
import { FormGroup } from '@angular/forms';
|
|
5
|
+
import { BmbButtonDirective } from '../../../directives/bmb-button/button.directive';
|
|
6
|
+
import { BmbInputComponent } from '../../bmb-input/bmb-input.component';
|
|
7
|
+
import { TranslatePipe } from '../../../pipes/translations';
|
|
8
|
+
import { BmbCheckboxComponent } from '../../bmb-checkbox/bmb-checkbox.component';
|
|
9
|
+
import { BmbLayoutDirective } from '../../../directives/bmb-layout/bmb-layout.directive';
|
|
10
|
+
import { BmbLayoutItemDirective } from '../../../directives/bmb-layout/bmb-layout-item.directive';
|
|
11
|
+
import { BmbVerticalLayoutDirective } from '../../../directives/bmb-layout/bmb-vertical-layout/bmb-vertical-layout.directive';
|
|
12
|
+
import { BmbVerticalLayoutItemDirective } from '../../../directives/bmb-layout/bmb-vertical-layout/bmb-vertical-layout-item.directive';
|
|
13
|
+
import { BmbRadialComponent } from '../../bmb-radial/bmb-radial.component';
|
|
14
|
+
import * as i0 from "@angular/core";
|
|
15
|
+
export class BmbTextEditorPromptComponent {
|
|
16
|
+
constructor() {
|
|
17
|
+
this.type = input.required();
|
|
18
|
+
this.formValues = output();
|
|
19
|
+
this.cancelForm = output();
|
|
20
|
+
this.formGroup = new FormGroup({});
|
|
21
|
+
}
|
|
22
|
+
getFormControl(name) {
|
|
23
|
+
return this.formGroup.get(name);
|
|
24
|
+
}
|
|
25
|
+
handleFormGroupState() {
|
|
26
|
+
if (this.formGroup.valid) {
|
|
27
|
+
const values = this.formGroup.getRawValue();
|
|
28
|
+
this.formValues.emit(values);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BmbTextEditorPromptComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
32
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: BmbTextEditorPromptComponent, isStandalone: true, selector: "app-bmb-text-editor-prompt", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { formValues: "formValues", cancelForm: "cancelForm" }, ngImport: i0, template: "<div class=\"bmb_text-editor-prompt\">\n <bmb-card>\n <bmb-card-content padding=\"l\">\n <bmb-form-validator\n [(formGroup)]=\"formGroup\"\n (formGroupState)=\"handleFormGroupState()\"\n >\n <section bmbVerticalLayout margin=\"none\">\n <div bmbVerticalLayoutItem>\n <bmb-input\n inputId=\"prompt_url\"\n name=\"prompt_url\"\n [label]=\"\n type() === 'link'\n ? ('text_editor.prompt.link.link_label' | translate)\n : ('text_editor.prompt.image.image_label' | translate)\n \"\n [isRequired]=\"true\"\n [helperMessage]=\"\n type() === 'link'\n ? ('text_editor.prompt.link.link_helper' | translate)\n : ('text_editor.prompt.image.image_helper' | translate)\n \"\n [placeholder]=\"\n type() === 'link'\n ? ('text_editor.prompt.link.link_placeholder' | translate)\n : ('text_editor.prompt.image.image_placeholder' | translate)\n \"\n />\n </div>\n @switch (type()) {\n @case ('link') {\n <div bmbVerticalLayoutItem>\n <h3>\n {{ 'text_editor.prompt.link.target_helper' | translate }}\n </h3>\n <div bmbLayout margin=\"none\" gapSize=\"none\">\n <bmb-radial\n inputId=\"target_blank\"\n name=\"target\"\n label=\"Blank\"\n value=\"_blank\"\n [control]=\"getFormControl('target')\"\n bmbLayoutItem\n [colSm]=\"2\"\n />\n <bmb-radial\n inputId=\"target_self\"\n name=\"target\"\n label=\"Self\"\n value=\"_self\"\n bmbLayoutItem\n [control]=\"getFormControl('target')\"\n [colSm]=\"2\"\n />\n <bmb-radial\n inputId=\"target_parent\"\n name=\"target\"\n label=\"Parent\"\n value=\"_parent\"\n bmbLayoutItem\n [control]=\"getFormControl('target')\"\n [colSm]=\"2\"\n />\n <bmb-radial\n inputId=\"target_top\"\n name=\"target\"\n label=\"Top\"\n value=\"_top\"\n bmbLayoutItem\n [control]=\"getFormControl('target')\"\n [colSm]=\"2\"\n />\n </div>\n </div>\n <div bmbVerticalLayoutItem>\n <bmb-checkbox\n inputId=\"add_rel\"\n name=\"rel\"\n [checked]=\"true\"\n [label]=\"'text_editor.prompt.link.rel_label' | translate\"\n />\n </div>\n }\n @case ('image') {\n <div bmbVerticalLayoutItem>\n <bmb-input\n inputId=\"prompt_alt\"\n name=\"prompt_alt\"\n [label]=\"'text_editor.prompt.image.alt_label' | translate\"\n [helperMessage]=\"\n 'text_editor.prompt.image.alt_helper' | translate\n \"\n [placeholder]=\"\n 'text_editor.prompt.image.alt_placeholder' | translate\n \"\n />\n </div>\n }\n }\n <footer bmbVerticalLayoutItem>\n <div bmbLayout margin=\"none\" gapSize=\"m\">\n <button\n bmbLayoutItem\n [colSm]=\"4\"\n bmbButton\n appearance=\"primary\"\n type=\"submit\"\n >\n {{ 'text_editor.prompt.primary_button' | translate }}\n </button>\n <button\n bmbLayoutItem\n [colSm]=\"4\"\n bmbButton\n appearance=\"secondary-outlined\"\n type=\"button\"\n (click)=\"cancelForm.emit()\"\n >\n {{ 'text_editor.prompt.secondary_button' | translate }}\n </button>\n </div>\n </footer>\n </section>\n </bmb-form-validator>\n </bmb-card-content>\n </bmb-card>\n</div>\n", styles: [".bmb_text-editor-prompt{width:clamp(300px,90vw,400px)}\n"], dependencies: [{ kind: "component", type: BmbCardComponent, selector: "bmb-card", inputs: ["borderRadius", "margin", "type", "state", "boxShadowStyle", "borderColor", "alternative"] }, { kind: "component", type: BmbFormValidatorComponent, selector: "bmb-form-validator", inputs: ["formGroup"], outputs: ["formGroupChange", "formGroupState"] }, { kind: "directive", type: BmbButtonDirective, selector: "[bmbButton]", inputs: ["icon", "iconSize", "position", "case", "appearance", "size", "isToggleActive", "enableButtonToggle", "isRounded", "isMobile", "iconAlt"] }, { kind: "component", type: BmbCardContentComponent, selector: "bmb-card-content", inputs: ["padding", "colorBackground", "setBorderRadius"] }, { kind: "component", type: BmbInputComponent, selector: "bmb-input", inputs: ["label", "type", "placeholder", "icon", "appearance", "errorMessage", "helperMessage", "disabled", "isRequired", "name", "spellcheck", "jsonFormat", "heightTextArea", "maxlength", "minlength", "pattern", "size", "max", "min", "id", "value", "autocomplete", "tooltip", "rows", "showMaxTextLength", "additionalAction", "tooltipPosition", "isClearable", "customValidation", "showError", "control"], outputs: ["showErrorChange", "controlChange", "isFocus", "isBlur", "onChange", "onKeyDown"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: BmbCheckboxComponent, selector: "bmb-checkbox", inputs: ["name", "id", "disabled", "required", "value", "label", "labelPosition", "ariaDescribedby", "ariaLabel", "ariaLabelledby", "errorMessage", "helperMessage", "customValidation", "control", "checked", "showError", "indeterminate", "inputId"], outputs: ["controlChange", "checkedChange", "showErrorChange", "indeterminateChange", "inputIdChange", "change"] }, { kind: "directive", type: BmbLayoutDirective, selector: "[bmbLayout]", inputs: ["gapSize", "margin", "dynamicCols", "justify", "alignItems", "isContainerQuery"] }, { kind: "directive", type: BmbLayoutItemDirective, selector: "[bmbLayoutItem]", inputs: ["colSm", "colLg", "marginLeft", "marginRight", "colGrow", "isDynamicItem"] }, { kind: "directive", type: BmbVerticalLayoutDirective, selector: "[bmbVerticalLayout]", inputs: ["gapSize", "justify", "alignItems", "layoutHeight"] }, { kind: "directive", type: BmbVerticalLayoutItemDirective, selector: "[bmbVerticalLayoutItem]", inputs: ["rowGrow", "isFullWidth"] }, { kind: "component", type: BmbRadialComponent, selector: "bmb-radial", inputs: ["id", "checked", "disabled", "value", "name", "label", "labelPosition", "ariaDescribedby", "ariaLabel", "ariaLabelledby", "required", "errorMessage", "helperMessage", "showError", "control", "inputId"], outputs: ["showErrorChange", "controlChange", "inputIdChange", "change", "onKeyDown"] }] }); }
|
|
33
|
+
}
|
|
34
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BmbTextEditorPromptComponent, decorators: [{
|
|
35
|
+
type: Component,
|
|
36
|
+
args: [{ selector: 'app-bmb-text-editor-prompt', standalone: true, imports: [
|
|
37
|
+
BmbCardComponent,
|
|
38
|
+
BmbFormValidatorComponent,
|
|
39
|
+
BmbButtonDirective,
|
|
40
|
+
BmbCardContentComponent,
|
|
41
|
+
BmbInputComponent,
|
|
42
|
+
TranslatePipe,
|
|
43
|
+
BmbCheckboxComponent,
|
|
44
|
+
BmbLayoutDirective,
|
|
45
|
+
BmbLayoutItemDirective,
|
|
46
|
+
BmbVerticalLayoutDirective,
|
|
47
|
+
BmbVerticalLayoutItemDirective,
|
|
48
|
+
BmbRadialComponent,
|
|
49
|
+
], template: "<div class=\"bmb_text-editor-prompt\">\n <bmb-card>\n <bmb-card-content padding=\"l\">\n <bmb-form-validator\n [(formGroup)]=\"formGroup\"\n (formGroupState)=\"handleFormGroupState()\"\n >\n <section bmbVerticalLayout margin=\"none\">\n <div bmbVerticalLayoutItem>\n <bmb-input\n inputId=\"prompt_url\"\n name=\"prompt_url\"\n [label]=\"\n type() === 'link'\n ? ('text_editor.prompt.link.link_label' | translate)\n : ('text_editor.prompt.image.image_label' | translate)\n \"\n [isRequired]=\"true\"\n [helperMessage]=\"\n type() === 'link'\n ? ('text_editor.prompt.link.link_helper' | translate)\n : ('text_editor.prompt.image.image_helper' | translate)\n \"\n [placeholder]=\"\n type() === 'link'\n ? ('text_editor.prompt.link.link_placeholder' | translate)\n : ('text_editor.prompt.image.image_placeholder' | translate)\n \"\n />\n </div>\n @switch (type()) {\n @case ('link') {\n <div bmbVerticalLayoutItem>\n <h3>\n {{ 'text_editor.prompt.link.target_helper' | translate }}\n </h3>\n <div bmbLayout margin=\"none\" gapSize=\"none\">\n <bmb-radial\n inputId=\"target_blank\"\n name=\"target\"\n label=\"Blank\"\n value=\"_blank\"\n [control]=\"getFormControl('target')\"\n bmbLayoutItem\n [colSm]=\"2\"\n />\n <bmb-radial\n inputId=\"target_self\"\n name=\"target\"\n label=\"Self\"\n value=\"_self\"\n bmbLayoutItem\n [control]=\"getFormControl('target')\"\n [colSm]=\"2\"\n />\n <bmb-radial\n inputId=\"target_parent\"\n name=\"target\"\n label=\"Parent\"\n value=\"_parent\"\n bmbLayoutItem\n [control]=\"getFormControl('target')\"\n [colSm]=\"2\"\n />\n <bmb-radial\n inputId=\"target_top\"\n name=\"target\"\n label=\"Top\"\n value=\"_top\"\n bmbLayoutItem\n [control]=\"getFormControl('target')\"\n [colSm]=\"2\"\n />\n </div>\n </div>\n <div bmbVerticalLayoutItem>\n <bmb-checkbox\n inputId=\"add_rel\"\n name=\"rel\"\n [checked]=\"true\"\n [label]=\"'text_editor.prompt.link.rel_label' | translate\"\n />\n </div>\n }\n @case ('image') {\n <div bmbVerticalLayoutItem>\n <bmb-input\n inputId=\"prompt_alt\"\n name=\"prompt_alt\"\n [label]=\"'text_editor.prompt.image.alt_label' | translate\"\n [helperMessage]=\"\n 'text_editor.prompt.image.alt_helper' | translate\n \"\n [placeholder]=\"\n 'text_editor.prompt.image.alt_placeholder' | translate\n \"\n />\n </div>\n }\n }\n <footer bmbVerticalLayoutItem>\n <div bmbLayout margin=\"none\" gapSize=\"m\">\n <button\n bmbLayoutItem\n [colSm]=\"4\"\n bmbButton\n appearance=\"primary\"\n type=\"submit\"\n >\n {{ 'text_editor.prompt.primary_button' | translate }}\n </button>\n <button\n bmbLayoutItem\n [colSm]=\"4\"\n bmbButton\n appearance=\"secondary-outlined\"\n type=\"button\"\n (click)=\"cancelForm.emit()\"\n >\n {{ 'text_editor.prompt.secondary_button' | translate }}\n </button>\n </div>\n </footer>\n </section>\n </bmb-form-validator>\n </bmb-card-content>\n </bmb-card>\n</div>\n", styles: [".bmb_text-editor-prompt{width:clamp(300px,90vw,400px)}\n"] }]
|
|
50
|
+
}] });
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm1iLXRleHQtZWRpdG9yLXByb21wdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kcy1uZy9zcmMvbGliL2NvbXBvbmVudHMvYm1iLXRleHQtZWRpdG9yL2JtYi10ZXh0LWVkaXRvci1wcm9tcHQvYm1iLXRleHQtZWRpdG9yLXByb21wdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kcy1uZy9zcmMvbGliL2NvbXBvbmVudHMvYm1iLXRleHQtZWRpdG9yL2JtYi10ZXh0LWVkaXRvci1wcm9tcHQvYm1iLXRleHQtZWRpdG9yLXByb21wdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUNMLGdCQUFnQixFQUNoQix1QkFBdUIsR0FDeEIsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNsRyxPQUFPLEVBQWUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDckYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtGQUFrRixDQUFDO0FBQzlILE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHVGQUF1RixDQUFDO0FBQ3ZJLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOztBQXdCM0UsTUFBTSxPQUFPLDRCQUE0QjtJQXBCekM7UUFxQkUsU0FBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQTRCLENBQUM7UUFFbEQsZUFBVSxHQUFHLE1BQU0sRUFBMkIsQ0FBQztRQUMvQyxlQUFVLEdBQUcsTUFBTSxFQUFRLENBQUM7UUFFNUIsY0FBUyxHQUFjLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBWTFDO0lBVkMsY0FBYyxDQUFDLElBQVk7UUFDekIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQWdCLENBQUM7SUFDakQsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQzsrR0FqQlUsNEJBQTRCO21HQUE1Qiw0QkFBNEIsdVJDdkN6QyxrbEpBZ0lBLGtIRHpHSSxnQkFBZ0IsMEpBQ2hCLHlCQUF5QixzSUFDekIsa0JBQWtCLDRNQUNsQix1QkFBdUIsd0hBQ3ZCLGlCQUFpQixtaUJBQ2pCLGFBQWEsa0RBQ2Isb0JBQW9CLG9hQUNwQixrQkFBa0IsbUpBQ2xCLHNCQUFzQixpSkFDdEIsMEJBQTBCLDhIQUMxQiw4QkFBOEIsd0dBQzlCLGtCQUFrQjs7NEZBS1QsNEJBQTRCO2tCQXBCeEMsU0FBUzsrQkFDRSw0QkFBNEIsY0FDMUIsSUFBSSxXQUNQO3dCQUNQLGdCQUFnQjt3QkFDaEIseUJBQXlCO3dCQUN6QixrQkFBa0I7d0JBQ2xCLHVCQUF1Qjt3QkFDdkIsaUJBQWlCO3dCQUNqQixhQUFhO3dCQUNiLG9CQUFvQjt3QkFDcEIsa0JBQWtCO3dCQUNsQixzQkFBc0I7d0JBQ3RCLDBCQUEwQjt3QkFDMUIsOEJBQThCO3dCQUM5QixrQkFBa0I7cUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbnB1dCwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBCbWJDYXJkQ29tcG9uZW50LFxuICBCbWJDYXJkQ29udGVudENvbXBvbmVudCxcbn0gZnJvbSAnLi4vLi4vYm1iLWNhcmQvYm1iLWNhcmQuY29tcG9uZW50JztcbmltcG9ydCB7IEJtYkZvcm1WYWxpZGF0b3JDb21wb25lbnQgfSBmcm9tICcuLi8uLi9ibWItZm9ybS12YWxpZGF0b3IvYm1iLWZvcm0tdmFsaWRhdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQm1iQnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9ibWItYnV0dG9uL2J1dHRvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQm1iSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9ibWItaW5wdXQvYm1iLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvdHJhbnNsYXRpb25zJztcbmltcG9ydCB7IEJtYkNoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYm1iLWNoZWNrYm94L2JtYi1jaGVja2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQm1iTGF5b3V0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9ibWItbGF5b3V0L2JtYi1sYXlvdXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IEJtYkxheW91dEl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL2JtYi1sYXlvdXQvYm1iLWxheW91dC1pdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBCbWJWZXJ0aWNhbExheW91dERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvYm1iLWxheW91dC9ibWItdmVydGljYWwtbGF5b3V0L2JtYi12ZXJ0aWNhbC1sYXlvdXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IEJtYlZlcnRpY2FsTGF5b3V0SXRlbURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvYm1iLWxheW91dC9ibWItdmVydGljYWwtbGF5b3V0L2JtYi12ZXJ0aWNhbC1sYXlvdXQtaXRlbS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQm1iUmFkaWFsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYm1iLXJhZGlhbC9ibWItcmFkaWFsLmNvbXBvbmVudCc7XG5cbmV4cG9ydCB0eXBlIElCbWJUZXh0RWRpdG9yUHJvbXB0VHlwZSA9ICdsaW5rJyB8ICdpbWFnZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1ibWItdGV4dC1lZGl0b3ItcHJvbXB0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEJtYkNhcmRDb21wb25lbnQsXG4gICAgQm1iRm9ybVZhbGlkYXRvckNvbXBvbmVudCxcbiAgICBCbWJCdXR0b25EaXJlY3RpdmUsXG4gICAgQm1iQ2FyZENvbnRlbnRDb21wb25lbnQsXG4gICAgQm1iSW5wdXRDb21wb25lbnQsXG4gICAgVHJhbnNsYXRlUGlwZSxcbiAgICBCbWJDaGVja2JveENvbXBvbmVudCxcbiAgICBCbWJMYXlvdXREaXJlY3RpdmUsXG4gICAgQm1iTGF5b3V0SXRlbURpcmVjdGl2ZSxcbiAgICBCbWJWZXJ0aWNhbExheW91dERpcmVjdGl2ZSxcbiAgICBCbWJWZXJ0aWNhbExheW91dEl0ZW1EaXJlY3RpdmUsXG4gICAgQm1iUmFkaWFsQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vYm1iLXRleHQtZWRpdG9yLXByb21wdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9ibWItdGV4dC1lZGl0b3ItcHJvbXB0LmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgQm1iVGV4dEVkaXRvclByb21wdENvbXBvbmVudCB7XG4gIHR5cGUgPSBpbnB1dC5yZXF1aXJlZDxJQm1iVGV4dEVkaXRvclByb21wdFR5cGU+KCk7XG5cbiAgZm9ybVZhbHVlcyA9IG91dHB1dDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKTtcbiAgY2FuY2VsRm9ybSA9IG91dHB1dDx2b2lkPigpO1xuXG4gIGZvcm1Hcm91cDogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG5cbiAgZ2V0Rm9ybUNvbnRyb2wobmFtZTogc3RyaW5nKTogRm9ybUNvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQobmFtZSkgYXMgRm9ybUNvbnRyb2w7XG4gIH1cblxuICBoYW5kbGVGb3JtR3JvdXBTdGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAudmFsaWQpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gICAgICB0aGlzLmZvcm1WYWx1ZXMuZW1pdCh2YWx1ZXMpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImJtYl90ZXh0LWVkaXRvci1wcm9tcHRcIj5cbiAgPGJtYi1jYXJkPlxuICAgIDxibWItY2FyZC1jb250ZW50IHBhZGRpbmc9XCJsXCI+XG4gICAgICA8Ym1iLWZvcm0tdmFsaWRhdG9yXG4gICAgICAgIFsoZm9ybUdyb3VwKV09XCJmb3JtR3JvdXBcIlxuICAgICAgICAoZm9ybUdyb3VwU3RhdGUpPVwiaGFuZGxlRm9ybUdyb3VwU3RhdGUoKVwiXG4gICAgICA+XG4gICAgICAgIDxzZWN0aW9uIGJtYlZlcnRpY2FsTGF5b3V0IG1hcmdpbj1cIm5vbmVcIj5cbiAgICAgICAgICA8ZGl2IGJtYlZlcnRpY2FsTGF5b3V0SXRlbT5cbiAgICAgICAgICAgIDxibWItaW5wdXRcbiAgICAgICAgICAgICAgaW5wdXRJZD1cInByb21wdF91cmxcIlxuICAgICAgICAgICAgICBuYW1lPVwicHJvbXB0X3VybFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJcbiAgICAgICAgICAgICAgICB0eXBlKCkgPT09ICdsaW5rJ1xuICAgICAgICAgICAgICAgICAgPyAoJ3RleHRfZWRpdG9yLnByb21wdC5saW5rLmxpbmtfbGFiZWwnIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgICAgOiAoJ3RleHRfZWRpdG9yLnByb21wdC5pbWFnZS5pbWFnZV9sYWJlbCcgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtpc1JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgICAgICBbaGVscGVyTWVzc2FnZV09XCJcbiAgICAgICAgICAgICAgICB0eXBlKCkgPT09ICdsaW5rJ1xuICAgICAgICAgICAgICAgICAgPyAoJ3RleHRfZWRpdG9yLnByb21wdC5saW5rLmxpbmtfaGVscGVyJyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgICAgIDogKCd0ZXh0X2VkaXRvci5wcm9tcHQuaW1hZ2UuaW1hZ2VfaGVscGVyJyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgICAgIHR5cGUoKSA9PT0gJ2xpbmsnXG4gICAgICAgICAgICAgICAgICA/ICgndGV4dF9lZGl0b3IucHJvbXB0LmxpbmsubGlua19wbGFjZWhvbGRlcicgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgICAgICAgICA6ICgndGV4dF9lZGl0b3IucHJvbXB0LmltYWdlLmltYWdlX3BsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQHN3aXRjaCAodHlwZSgpKSB7XG4gICAgICAgICAgICBAY2FzZSAoJ2xpbmsnKSB7XG4gICAgICAgICAgICAgIDxkaXYgYm1iVmVydGljYWxMYXlvdXRJdGVtPlxuICAgICAgICAgICAgICAgIDxoMz5cbiAgICAgICAgICAgICAgICAgIHt7ICd0ZXh0X2VkaXRvci5wcm9tcHQubGluay50YXJnZXRfaGVscGVyJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICAgICAgPGRpdiBibWJMYXlvdXQgbWFyZ2luPVwibm9uZVwiIGdhcFNpemU9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICA8Ym1iLXJhZGlhbFxuICAgICAgICAgICAgICAgICAgICBpbnB1dElkPVwidGFyZ2V0X2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cInRhcmdldFwiXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiQmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgIFtjb250cm9sXT1cImdldEZvcm1Db250cm9sKCd0YXJnZXQnKVwiXG4gICAgICAgICAgICAgICAgICAgIGJtYkxheW91dEl0ZW1cbiAgICAgICAgICAgICAgICAgICAgW2NvbFNtXT1cIjJcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxibWItcmFkaWFsXG4gICAgICAgICAgICAgICAgICAgIGlucHV0SWQ9XCJ0YXJnZXRfc2VsZlwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ0YXJnZXRcIlxuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIlNlbGZcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIl9zZWxmXCJcbiAgICAgICAgICAgICAgICAgICAgYm1iTGF5b3V0SXRlbVxuICAgICAgICAgICAgICAgICAgICBbY29udHJvbF09XCJnZXRGb3JtQ29udHJvbCgndGFyZ2V0JylcIlxuICAgICAgICAgICAgICAgICAgICBbY29sU21dPVwiMlwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPGJtYi1yYWRpYWxcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRJZD1cInRhcmdldF9wYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwidGFyZ2V0XCJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJQYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIl9wYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICBibWJMYXlvdXRJdGVtXG4gICAgICAgICAgICAgICAgICAgIFtjb250cm9sXT1cImdldEZvcm1Db250cm9sKCd0YXJnZXQnKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb2xTbV09XCIyXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8Ym1iLXJhZGlhbFxuICAgICAgICAgICAgICAgICAgICBpbnB1dElkPVwidGFyZ2V0X3RvcFwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ0YXJnZXRcIlxuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIlRvcFwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiX3RvcFwiXG4gICAgICAgICAgICAgICAgICAgIGJtYkxheW91dEl0ZW1cbiAgICAgICAgICAgICAgICAgICAgW2NvbnRyb2xdPVwiZ2V0Rm9ybUNvbnRyb2woJ3RhcmdldCcpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbFNtXT1cIjJcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgYm1iVmVydGljYWxMYXlvdXRJdGVtPlxuICAgICAgICAgICAgICAgIDxibWItY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgIGlucHV0SWQ9XCJhZGRfcmVsXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJyZWxcIlxuICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3RleHRfZWRpdG9yLnByb21wdC5saW5rLnJlbF9sYWJlbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKCdpbWFnZScpIHtcbiAgICAgICAgICAgICAgPGRpdiBibWJWZXJ0aWNhbExheW91dEl0ZW0+XG4gICAgICAgICAgICAgICAgPGJtYi1pbnB1dFxuICAgICAgICAgICAgICAgICAgaW5wdXRJZD1cInByb21wdF9hbHRcIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cInByb21wdF9hbHRcIlxuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIid0ZXh0X2VkaXRvci5wcm9tcHQuaW1hZ2UuYWx0X2xhYmVsJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbaGVscGVyTWVzc2FnZV09XCJcbiAgICAgICAgICAgICAgICAgICAgJ3RleHRfZWRpdG9yLnByb21wdC5pbWFnZS5hbHRfaGVscGVyJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAgICAgJ3RleHRfZWRpdG9yLnByb21wdC5pbWFnZS5hbHRfcGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICA8Zm9vdGVyIGJtYlZlcnRpY2FsTGF5b3V0SXRlbT5cbiAgICAgICAgICAgIDxkaXYgYm1iTGF5b3V0IG1hcmdpbj1cIm5vbmVcIiBnYXBTaXplPVwibVwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgYm1iTGF5b3V0SXRlbVxuICAgICAgICAgICAgICAgIFtjb2xTbV09XCI0XCJcbiAgICAgICAgICAgICAgICBibWJCdXR0b25cbiAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyAndGV4dF9lZGl0b3IucHJvbXB0LnByaW1hcnlfYnV0dG9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGJtYkxheW91dEl0ZW1cbiAgICAgICAgICAgICAgICBbY29sU21dPVwiNFwiXG4gICAgICAgICAgICAgICAgYm1iQnV0dG9uXG4gICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeS1vdXRsaW5lZFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbEZvcm0uZW1pdCgpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7ICd0ZXh0X2VkaXRvci5wcm9tcHQuc2Vjb25kYXJ5X2J1dHRvbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Zvb3Rlcj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9ibWItZm9ybS12YWxpZGF0b3I+XG4gICAgPC9ibWItY2FyZC1jb250ZW50PlxuICA8L2JtYi1jYXJkPlxuPC9kaXY+XG4iXX0=
|
|
@@ -2,11 +2,13 @@ import { ChangeDetectionStrategy, Component, input, signal, ViewChild, ViewEncap
|
|
|
2
2
|
import { FormControl } from '@angular/forms';
|
|
3
3
|
import { BmbButtonDirective } from '../../directives/bmb-button/button.directive';
|
|
4
4
|
import { BmbIconComponent } from '../bmb-icon/bmb-icon.component';
|
|
5
|
+
import { BmbTextEditorPromptComponent, } from './bmb-text-editor-prompt/bmb-text-editor-prompt.component';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
import * as i1 from "@angular/platform-browser";
|
|
8
|
+
import * as i2 from "../../services/projection/projection.service";
|
|
7
9
|
export class BmbTextEditorComponent {
|
|
8
10
|
detectAlignment() {
|
|
9
|
-
const selection =
|
|
11
|
+
const selection = globalThis.getSelection();
|
|
10
12
|
if (selection && selection.rangeCount > 0) {
|
|
11
13
|
const element = selection.getRangeAt(0)
|
|
12
14
|
.commonAncestorContainer;
|
|
@@ -21,19 +23,24 @@ export class BmbTextEditorComponent {
|
|
|
21
23
|
this.execCommand('styleWithCSS', 'true');
|
|
22
24
|
this.execCommand('justify' + alignment.charAt(0).toUpperCase() + alignment.slice(1));
|
|
23
25
|
}
|
|
24
|
-
constructor(sanitizer) {
|
|
26
|
+
constructor(sanitizer, projectionContent) {
|
|
25
27
|
this.sanitizer = sanitizer;
|
|
28
|
+
this.projectionContent = projectionContent;
|
|
26
29
|
this.control = input(new FormControl(''));
|
|
27
30
|
this.sanitizedContent = signal('');
|
|
28
31
|
this.currentAlignment = 'left';
|
|
29
32
|
this.showTableDialog = false;
|
|
30
33
|
this.tableRows = 2;
|
|
31
34
|
this.tableColumns = 2;
|
|
35
|
+
this.userSelection = null;
|
|
32
36
|
}
|
|
33
37
|
ngOnInit() {
|
|
34
|
-
this.sanitizedContent.set(
|
|
38
|
+
this.sanitizedContent.set(
|
|
39
|
+
// NOSONAR: Initial content sanitization
|
|
40
|
+
this.sanitizer.bypassSecurityTrustHtml(this.control().value || ''));
|
|
35
41
|
this.control().valueChanges?.subscribe((value) => {
|
|
36
42
|
if (value === null) {
|
|
43
|
+
// NOSONAR: Clear content sanitization
|
|
37
44
|
this.sanitizedContent.set(this.sanitizer.bypassSecurityTrustHtml(''));
|
|
38
45
|
}
|
|
39
46
|
});
|
|
@@ -48,14 +55,60 @@ export class BmbTextEditorComponent {
|
|
|
48
55
|
}
|
|
49
56
|
}
|
|
50
57
|
execCommand(command, value = null) {
|
|
58
|
+
if (this.userSelection) {
|
|
59
|
+
const selection = globalThis.getSelection();
|
|
60
|
+
if (selection) {
|
|
61
|
+
selection.removeAllRanges();
|
|
62
|
+
selection.addRange(this.userSelection);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
51
65
|
document.execCommand(command, false, value || undefined);
|
|
52
66
|
this.updateContent();
|
|
67
|
+
this.userSelection = null;
|
|
68
|
+
}
|
|
69
|
+
openPrompt(type, event) {
|
|
70
|
+
this.userSelection = globalThis.getSelection()?.getRangeAt(0) || null;
|
|
71
|
+
const buttonNode = event.currentTarget;
|
|
72
|
+
this.projectionContent.openContent({
|
|
73
|
+
content: BmbTextEditorPromptComponent,
|
|
74
|
+
inputContext: { type },
|
|
75
|
+
outputContext: {
|
|
76
|
+
formValues: (values) => this.handleClosePrompt({ ...values, type }),
|
|
77
|
+
cancelForm: () => this.projectionContent.closeContent(),
|
|
78
|
+
},
|
|
79
|
+
targetRef: buttonNode,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
handleClosePrompt(values) {
|
|
83
|
+
if (values['type'] === 'link' && values['prompt_url']) {
|
|
84
|
+
this.insertLink(values);
|
|
85
|
+
}
|
|
86
|
+
else if (values['type'] === 'image' && values['prompt_url']) {
|
|
87
|
+
this.insertImage(values);
|
|
88
|
+
}
|
|
89
|
+
this.projectionContent.closeContent();
|
|
90
|
+
}
|
|
91
|
+
insertLink(values) {
|
|
92
|
+
const selection = globalThis.getSelection();
|
|
93
|
+
if (!selection || selection.rangeCount === 0 || !values['prompt_url']) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
this.execCommand('createLink', values['prompt_url']);
|
|
97
|
+
const range = selection.getRangeAt(0);
|
|
98
|
+
const parentNode = range.commonAncestorContainer.parentNode;
|
|
99
|
+
if (parentNode && parentNode instanceof HTMLAnchorElement) {
|
|
100
|
+
parentNode.target = values['target'] || '_self';
|
|
101
|
+
if (values['rel']) {
|
|
102
|
+
parentNode.rel = 'noopener noreferrer';
|
|
103
|
+
}
|
|
104
|
+
}
|
|
53
105
|
}
|
|
54
|
-
|
|
55
|
-
const
|
|
56
|
-
if (
|
|
57
|
-
|
|
106
|
+
insertImage(values) {
|
|
107
|
+
const selection = globalThis.getSelection();
|
|
108
|
+
if (!selection || selection.rangeCount === 0 || !values['prompt_url']) {
|
|
109
|
+
return;
|
|
58
110
|
}
|
|
111
|
+
this.execCommand('insertImage', values['prompt_url']);
|
|
59
112
|
}
|
|
60
113
|
updateContent() {
|
|
61
114
|
this.control().setValue(this.editor.nativeElement.innerHTML);
|
|
@@ -67,17 +120,6 @@ export class BmbTextEditorComponent {
|
|
|
67
120
|
getCurrentState() {
|
|
68
121
|
return this.control().value;
|
|
69
122
|
}
|
|
70
|
-
insertImage() {
|
|
71
|
-
const url = prompt('Ingrese la URL de la imagen:');
|
|
72
|
-
if (url) {
|
|
73
|
-
if (this.isValidImageUrl(url)) {
|
|
74
|
-
this.execCommand('insertImage', url);
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
alert('La URL de la imagen no es válida.');
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
123
|
isValidImageUrl(url) {
|
|
82
124
|
try {
|
|
83
125
|
new URL(url); // Intenta crear un objeto URL
|
|
@@ -120,7 +162,7 @@ export class BmbTextEditorComponent {
|
|
|
120
162
|
}
|
|
121
163
|
// Método para insertar HTML en el editor
|
|
122
164
|
insertHtml(html) {
|
|
123
|
-
const selection =
|
|
165
|
+
const selection = globalThis.getSelection();
|
|
124
166
|
if (selection && selection.rangeCount > 0) {
|
|
125
167
|
const range = selection.getRangeAt(0);
|
|
126
168
|
const div = document.createElement('div');
|
|
@@ -129,14 +171,14 @@ export class BmbTextEditorComponent {
|
|
|
129
171
|
this.updateContent();
|
|
130
172
|
}
|
|
131
173
|
}
|
|
132
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BmbTextEditorComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
133
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: BmbTextEditorComponent, isStandalone: true, selector: "bmb-text-editor", inputs: { control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "editor", first: true, predicate: ["editor"], descendants: true }], ngImport: i0, template: "<section class=\"bmb_text-editor\">\n <header class=\"bmb_text-editor-header\">\n <span class=\"bmb_text-editor-header-group\">\n <select\n id=\"BmbTextEditorSelect\"\n class=\"bmb_text-editor-header-select\"\n (change)=\"handleChange($event, 'formatBlock')\"\n title=\"Estilo de p\u00E1rrafo\"\n >\n <option value=\"p\">P\u00E1rrafo</option>\n <option value=\"h1\">T\u00EDtulo 1</option>\n <option value=\"h2\">T\u00EDtulo 2</option>\n <option value=\"h3\">T\u00EDtulo 3</option>\n <option value=\"blockquote\">Cita</option>\n </select>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('bold')\"\n title=\"Negrita\"\n >\n <bmb-icon icon=\"format_bold\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('italic')\"\n title=\"Cursiva\"\n >\n <bmb-icon icon=\"format_italic\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('underline')\"\n title=\"Subrayado\"\n >\n <bmb-icon icon=\"format_underlined\" [size]=\"24\" />\n </button>\n <input\n id=\"BmbTextEditorColor\"\n type=\"color\"\n (change)=\"handleChange($event, 'foreColor')\"\n title=\"Color de texto\"\n />\n </span>\n\n <span class=\"bmb_text-editor-header-group\">\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"applyAlignment('left')\"\n [class.active]=\"currentAlignment === 'left'\"\n title=\"Alinear a la izquierda\"\n >\n <bmb-icon icon=\"format_align_left\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"applyAlignment('center')\"\n [class.active]=\"currentAlignment === 'center'\"\n title=\"Centrar\"\n >\n <bmb-icon icon=\"format_align_center\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"applyAlignment('right')\"\n [class.active]=\"currentAlignment === 'right'\"\n title=\"Alinear a la derecha\"\n >\n <bmb-icon icon=\"format_align_right\" [size]=\"24\" />\n </button>\n </span>\n\n <span class=\"bmb_text-editor-header-group\">\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('insertOrderedList')\"\n title=\"Lista numerada\"\n >\n <bmb-icon icon=\"format_list_numbered\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('insertUnorderedList')\"\n title=\"Lista con vi\u00F1etas\"\n >\n <bmb-icon icon=\"format_list_bulleted\" [size]=\"24\" />\n </button>\n </span>\n\n <span class=\"bmb_text-editor-header-group\">\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('indent')\"\n title=\"Aumentar sangr\u00EDa\"\n >\n <bmb-icon icon=\"format_indent_increase\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('outdent')\"\n title=\"Disminuir sangr\u00EDa\"\n >\n <bmb-icon icon=\"format_indent_decrease\" [size]=\"24\" />\n </button>\n </span>\n\n <span class=\"bmb_text-editor-header-group\">\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"insertLink()\"\n title=\"Insertar enlace\"\n >\n <bmb-icon icon=\"link\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"insertImage()\"\n title=\"Insertar imagen\"\n >\n <bmb-icon icon=\"image\" [size]=\"24\" />\n </button>\n <!-- <button bmbButton appearance=\"transparent\" size=\"micro\" type=\"button\" (click)=\"openTableDialog()\" title=\"Insertar tabla\">\n <bmb-icon icon=\"table_chart\" [size]=\"24\"/>\n </button> -->\n </span>\n <span class=\"bmb_text-editor-header-group\">\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"clearFormatting()\"\n title=\"Limpiar formato\"\n >\n <bmb-icon icon=\"format_clear\" [size]=\"24\" />\n </button>\n </span>\n </header>\n\n <div\n class=\"bmb_text-editor-content\"\n #editor\n contenteditable=\"true\"\n (input)=\"updateContent()\"\n [innerHTML]=\"sanitizedContent()\"\n ></div>\n</section>\n\n<!-- Di\u00E1logo para definir filas y columnas -->\n<dialog class=\"dialog-overlay\" [open]=\"showTableDialog\">\n <div class=\"dialog\">\n <h3>Insertar tabla</h3>\n <label for=\"rows\">Filas:</label>\n <input type=\"number\" id=\"rows\" min=\"1\" max=\"10\" />\n\n <label for=\"columns\">Columnas:</label>\n <input type=\"number\" id=\"columns\" min=\"1\" max=\"10\" />\n\n <div class=\"dialog-buttons\">\n <button type=\"button\" (click)=\"insertTable()\">Insertar</button>\n <button type=\"button\" (click)=\"closeTableDialog()\">Cancelar</button>\n </div>\n </div>\n</dialog>\n", styles: ["@font-face{font-family:Poppins-Light;font-style:normal;font-weight:300;src:url(/assets/fonts/Poppins/Poppins-ExtraLight.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Regular;font-style:normal;font-weight:400;src:url(/assets/fonts/Poppins/Poppins-Regular.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Bold;font-style:normal;font-weight:700;src:url(/assets/fonts/Poppins/Poppins-Bold.ttf) format(\"truetype\")}:root,:host{--font-display: \"Poppins-Regular\", sans-serif}.font-thin-1{font-family:Poppins-Thin,sans-serif;font-size:.625rem}.font-light-1{font-family:Poppins-Light,sans-serif;font-size:.625rem}.font-regular-1{font-family:Poppins-Regular,sans-serif;font-size:.625rem}.font-medium-1{font-family:Poppins-Medium,sans-serif;font-size:.625rem}.font-semibold-1{font-family:Poppins-Semibold,sans-serif;font-size:.625rem}.font-bold-1{font-family:Poppins-Bold,sans-serif;font-size:.625rem}.font-thin-2{font-family:Poppins-Thin,sans-serif;font-size:.6875rem}.font-light-2{font-family:Poppins-Light,sans-serif;font-size:.6875rem}.font-regular-2{font-family:Poppins-Regular,sans-serif;font-size:.6875rem}.font-medium-2{font-family:Poppins-Medium,sans-serif;font-size:.6875rem}.font-semibold-2{font-family:Poppins-Semibold,sans-serif;font-size:.6875rem}.font-bold-2{font-family:Poppins-Bold,sans-serif;font-size:.6875rem}.font-thin-3{font-family:Poppins-Thin,sans-serif;font-size:.75rem}.font-light-3{font-family:Poppins-Light,sans-serif;font-size:.75rem}.font-regular-3{font-family:Poppins-Regular,sans-serif;font-size:.75rem}.font-medium-3{font-family:Poppins-Medium,sans-serif;font-size:.75rem}.font-semibold-3{font-family:Poppins-Semibold,sans-serif;font-size:.75rem}.font-bold-3{font-family:Poppins-Bold,sans-serif;font-size:.75rem}.font-thin-4{font-family:Poppins-Thin,sans-serif;font-size:.875rem}.font-light-4{font-family:Poppins-Light,sans-serif;font-size:.875rem}.font-regular-4{font-family:Poppins-Regular,sans-serif;font-size:.875rem}.font-medium-4{font-family:Poppins-Medium,sans-serif;font-size:.875rem}.font-semibold-4{font-family:Poppins-Semibold,sans-serif;font-size:.875rem}.font-bold-4{font-family:Poppins-Bold,sans-serif;font-size:.875rem}.font-thin-4_5{font-family:Poppins-Thin,sans-serif;font-size:.9375rem}.font-light-4_5{font-family:Poppins-Light,sans-serif;font-size:.9375rem}.font-regular-4_5{font-family:Poppins-Regular,sans-serif;font-size:.9375rem}.font-medium-4_5{font-family:Poppins-Medium,sans-serif;font-size:.9375rem}.font-semibold-4_5{font-family:Poppins-Semibold,sans-serif;font-size:.9375rem}.font-bold-4_5{font-family:Poppins-Bold,sans-serif;font-size:.9375rem}.font-thin-5{font-family:Poppins-Thin,sans-serif;font-size:1rem}.font-light-5{font-family:Poppins-Light,sans-serif;font-size:1rem}.font-regular-5{font-family:Poppins-Regular,sans-serif;font-size:1rem}.font-medium-5{font-family:Poppins-Medium,sans-serif;font-size:1rem}.font-semibold-5{font-family:Poppins-Semibold,sans-serif;font-size:1rem}.font-bold-5{font-family:Poppins-Bold,sans-serif;font-size:1rem}.font-thin-6{font-family:Poppins-Thin,sans-serif;font-size:1.125rem}.font-light-6{font-family:Poppins-Light,sans-serif;font-size:1.125rem}.font-regular-6{font-family:Poppins-Regular,sans-serif;font-size:1.125rem}.font-medium-6{font-family:Poppins-Medium,sans-serif;font-size:1.125rem}.font-semibold-6{font-family:Poppins-Semibold,sans-serif;font-size:1.125rem}.font-bold-6{font-family:Poppins-Bold,sans-serif;font-size:1.125rem}.font-thin-7{font-family:Poppins-Thin,sans-serif;font-size:1.25rem}.font-light-7{font-family:Poppins-Light,sans-serif;font-size:1.25rem}.font-regular-7{font-family:Poppins-Regular,sans-serif;font-size:1.25rem}.font-medium-7{font-family:Poppins-Medium,sans-serif;font-size:1.25rem}.font-semibold-7{font-family:Poppins-Semibold,sans-serif;font-size:1.25rem}.font-bold-7{font-family:Poppins-Bold,sans-serif;font-size:1.25rem}.font-thin-8{font-family:Poppins-Thin,sans-serif;font-size:1.375rem}.font-light-8{font-family:Poppins-Light,sans-serif;font-size:1.375rem}.font-regular-8{font-family:Poppins-Regular,sans-serif;font-size:1.375rem}.font-medium-8{font-family:Poppins-Medium,sans-serif;font-size:1.375rem}.font-semibold-8{font-family:Poppins-Semibold,sans-serif;font-size:1.375rem}.font-bold-8{font-family:Poppins-Bold,sans-serif;font-size:1.375rem}.font-thin-9{font-family:Poppins-Thin,sans-serif;font-size:1.5rem}.font-light-9{font-family:Poppins-Light,sans-serif;font-size:1.5rem}.font-regular-9{font-family:Poppins-Regular,sans-serif;font-size:1.5rem}.font-medium-9{font-family:Poppins-Medium,sans-serif;font-size:1.5rem}.font-semibold-9{font-family:Poppins-Semibold,sans-serif;font-size:1.5rem}.font-bold-9{font-family:Poppins-Bold,sans-serif;font-size:1.5rem}.font-thin-10{font-family:Poppins-Thin,sans-serif;font-size:1.625rem}.font-light-10{font-family:Poppins-Light,sans-serif;font-size:1.625rem}.font-regular-10{font-family:Poppins-Regular,sans-serif;font-size:1.625rem}.font-medium-10{font-family:Poppins-Medium,sans-serif;font-size:1.625rem}.font-semibold-10{font-family:Poppins-Semibold,sans-serif;font-size:1.625rem}.font-bold-10{font-family:Poppins-Bold,sans-serif;font-size:1.625rem}.font-thin-11{font-family:Poppins-Thin,sans-serif;font-size:2.25rem}.font-light-11{font-family:Poppins-Light,sans-serif;font-size:2.25rem}.font-regular-11{font-family:Poppins-Regular,sans-serif;font-size:2.25rem}.font-medium-11{font-family:Poppins-Medium,sans-serif;font-size:2.25rem}.font-semibold-11{font-family:Poppins-Semibold,sans-serif;font-size:2.25rem}.font-bold-11{font-family:Poppins-Bold,sans-serif;font-size:2.25rem}.font-thin-12{font-family:Poppins-Thin,sans-serif;font-size:3rem}.font-light-12{font-family:Poppins-Light,sans-serif;font-size:3rem}.font-regular-12{font-family:Poppins-Regular,sans-serif;font-size:3rem}.font-medium-12{font-family:Poppins-Medium,sans-serif;font-size:3rem}.font-semibold-12{font-family:Poppins-Semibold,sans-serif;font-size:3rem}.font-bold-12{font-family:Poppins-Bold,sans-serif;font-size:3rem}.bmb_text-editor{border:.0625rem solid var(--general_contrasts-50);border-radius:var(--bmb-spacing-s);container-type:inline-size;display:flex;flex-flow:column}.bmb_text-editor-header{border-bottom:.0625rem solid var(--general_contrasts-50);padding:var(--bmb-spacing-s);display:flex;flex-wrap:nowrap;align-items:center;gap:var(--bmb-spacing-m);overflow:auto}.bmb_text-editor-header-select{background:transparent;border:0;cursor:pointer;color:var(--general_contrasts-100)}.bmb_text-editor-header-group{display:inline-flex;align-items:center;flex-wrap:nowrap}.bmb_text-editor-header-group:not(:last-child){padding-right:var(--bmb-spacing-m);border-right:.0625rem solid var(--general_contrasts-50)}.bmb_text-editor-content{padding:var(--bmb-spacing-s);background-color:var(--general_contrasts-input-background);min-height:100px;border-radius:0 0 var(--bmb-spacing-s) var(--bmb-spacing-s);flex:1}\n"], dependencies: [{ kind: "directive", type: BmbButtonDirective, selector: "[bmbButton]", inputs: ["icon", "iconSize", "position", "case", "appearance", "size", "isToggleActive", "enableButtonToggle", "isRounded", "isMobile", "iconAlt"] }, { kind: "component", type: BmbIconComponent, selector: "bmb-icon", inputs: ["icon", "materialIcon", "styleIcon", "isFill", "fontWeight", "size", "alt", "dotNotification"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
174
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BmbTextEditorComponent, deps: [{ token: i1.DomSanitizer }, { token: i2.BmbProjectionContentService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
175
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: BmbTextEditorComponent, isStandalone: true, selector: "bmb-text-editor", inputs: { control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "editor", first: true, predicate: ["editor"], descendants: true }], ngImport: i0, template: "<section class=\"bmb_text-editor\">\n <header class=\"bmb_text-editor-header\">\n <span class=\"bmb_text-editor-header-group\">\n <select\n id=\"BmbTextEditorSelect\"\n class=\"bmb_text-editor-header-select\"\n (change)=\"handleChange($event, 'formatBlock')\"\n title=\"Estilo de p\u00E1rrafo\"\n >\n <option value=\"p\">P\u00E1rrafo</option>\n <option value=\"h1\">T\u00EDtulo 1</option>\n <option value=\"h2\">T\u00EDtulo 2</option>\n <option value=\"h3\">T\u00EDtulo 3</option>\n <option value=\"blockquote\">Cita</option>\n </select>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('bold')\"\n title=\"Negrita\"\n >\n <bmb-icon icon=\"format_bold\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('italic')\"\n title=\"Cursiva\"\n >\n <bmb-icon icon=\"format_italic\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('underline')\"\n title=\"Subrayado\"\n >\n <bmb-icon icon=\"format_underlined\" [size]=\"24\" />\n </button>\n <input\n id=\"BmbTextEditorColor\"\n type=\"color\"\n (change)=\"handleChange($event, 'foreColor')\"\n title=\"Color de texto\"\n />\n </span>\n\n <span class=\"bmb_text-editor-header-group\">\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"applyAlignment('left')\"\n [class.active]=\"currentAlignment === 'left'\"\n title=\"Alinear a la izquierda\"\n >\n <bmb-icon icon=\"format_align_left\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"applyAlignment('center')\"\n [class.active]=\"currentAlignment === 'center'\"\n title=\"Centrar\"\n >\n <bmb-icon icon=\"format_align_center\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"applyAlignment('right')\"\n [class.active]=\"currentAlignment === 'right'\"\n title=\"Alinear a la derecha\"\n >\n <bmb-icon icon=\"format_align_right\" [size]=\"24\" />\n </button>\n </span>\n\n <span class=\"bmb_text-editor-header-group\">\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('insertOrderedList')\"\n title=\"Lista numerada\"\n >\n <bmb-icon icon=\"format_list_numbered\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('insertUnorderedList')\"\n title=\"Lista con vi\u00F1etas\"\n >\n <bmb-icon icon=\"format_list_bulleted\" [size]=\"24\" />\n </button>\n </span>\n\n <span class=\"bmb_text-editor-header-group\">\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('indent')\"\n title=\"Aumentar sangr\u00EDa\"\n >\n <bmb-icon icon=\"format_indent_increase\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('outdent')\"\n title=\"Disminuir sangr\u00EDa\"\n >\n <bmb-icon icon=\"format_indent_decrease\" [size]=\"24\" />\n </button>\n </span>\n\n <span class=\"bmb_text-editor-header-group\">\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"openPrompt('link', $event)\"\n title=\"Insertar enlace\"\n >\n <bmb-icon icon=\"link\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"openPrompt('image', $event)\"\n title=\"Insertar imagen\"\n >\n <bmb-icon icon=\"image\" [size]=\"24\" />\n </button>\n <!-- <button bmbButton appearance=\"transparent\" size=\"micro\" type=\"button\" (click)=\"openTableDialog()\" title=\"Insertar tabla\">\n <bmb-icon icon=\"table_chart\" [size]=\"24\"/>\n </button> -->\n </span>\n <span class=\"bmb_text-editor-header-group\">\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"clearFormatting()\"\n title=\"Limpiar formato\"\n >\n <bmb-icon icon=\"format_clear\" [size]=\"24\" />\n </button>\n </span>\n </header>\n\n <div\n class=\"bmb_text-editor-content\"\n #editor\n contenteditable=\"true\"\n (input)=\"updateContent()\"\n [innerHTML]=\"sanitizedContent()\"\n ></div>\n</section>\n\n<!-- Di\u00E1logo para definir filas y columnas -->\n<dialog class=\"dialog-overlay\" [open]=\"showTableDialog\">\n <div class=\"dialog\">\n <h3>Insertar tabla</h3>\n <label for=\"rows\">Filas:</label>\n <input type=\"number\" id=\"rows\" min=\"1\" max=\"10\" />\n\n <label for=\"columns\">Columnas:</label>\n <input type=\"number\" id=\"columns\" min=\"1\" max=\"10\" />\n\n <div class=\"dialog-buttons\">\n <button type=\"button\" (click)=\"insertTable()\">Insertar</button>\n <button type=\"button\" (click)=\"closeTableDialog()\">Cancelar</button>\n </div>\n </div>\n</dialog>\n", styles: ["@font-face{font-family:Poppins-Light;font-style:normal;font-weight:300;src:url(/assets/fonts/Poppins/Poppins-ExtraLight.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Regular;font-style:normal;font-weight:400;src:url(/assets/fonts/Poppins/Poppins-Regular.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Bold;font-style:normal;font-weight:700;src:url(/assets/fonts/Poppins/Poppins-Bold.ttf) format(\"truetype\")}:root,:host{--font-display: \"Poppins-Regular\", sans-serif}.font-thin-1{font-family:Poppins-Thin,sans-serif;font-size:.625rem}.font-light-1{font-family:Poppins-Light,sans-serif;font-size:.625rem}.font-regular-1{font-family:Poppins-Regular,sans-serif;font-size:.625rem}.font-medium-1{font-family:Poppins-Medium,sans-serif;font-size:.625rem}.font-semibold-1{font-family:Poppins-Semibold,sans-serif;font-size:.625rem}.font-bold-1{font-family:Poppins-Bold,sans-serif;font-size:.625rem}.font-thin-2{font-family:Poppins-Thin,sans-serif;font-size:.6875rem}.font-light-2{font-family:Poppins-Light,sans-serif;font-size:.6875rem}.font-regular-2{font-family:Poppins-Regular,sans-serif;font-size:.6875rem}.font-medium-2{font-family:Poppins-Medium,sans-serif;font-size:.6875rem}.font-semibold-2{font-family:Poppins-Semibold,sans-serif;font-size:.6875rem}.font-bold-2{font-family:Poppins-Bold,sans-serif;font-size:.6875rem}.font-thin-3{font-family:Poppins-Thin,sans-serif;font-size:.75rem}.font-light-3{font-family:Poppins-Light,sans-serif;font-size:.75rem}.font-regular-3{font-family:Poppins-Regular,sans-serif;font-size:.75rem}.font-medium-3{font-family:Poppins-Medium,sans-serif;font-size:.75rem}.font-semibold-3{font-family:Poppins-Semibold,sans-serif;font-size:.75rem}.font-bold-3{font-family:Poppins-Bold,sans-serif;font-size:.75rem}.font-thin-4{font-family:Poppins-Thin,sans-serif;font-size:.875rem}.font-light-4{font-family:Poppins-Light,sans-serif;font-size:.875rem}.font-regular-4{font-family:Poppins-Regular,sans-serif;font-size:.875rem}.font-medium-4{font-family:Poppins-Medium,sans-serif;font-size:.875rem}.font-semibold-4{font-family:Poppins-Semibold,sans-serif;font-size:.875rem}.font-bold-4{font-family:Poppins-Bold,sans-serif;font-size:.875rem}.font-thin-4_5{font-family:Poppins-Thin,sans-serif;font-size:.9375rem}.font-light-4_5{font-family:Poppins-Light,sans-serif;font-size:.9375rem}.font-regular-4_5{font-family:Poppins-Regular,sans-serif;font-size:.9375rem}.font-medium-4_5{font-family:Poppins-Medium,sans-serif;font-size:.9375rem}.font-semibold-4_5{font-family:Poppins-Semibold,sans-serif;font-size:.9375rem}.font-bold-4_5{font-family:Poppins-Bold,sans-serif;font-size:.9375rem}.font-thin-5{font-family:Poppins-Thin,sans-serif;font-size:1rem}.font-light-5{font-family:Poppins-Light,sans-serif;font-size:1rem}.font-regular-5{font-family:Poppins-Regular,sans-serif;font-size:1rem}.font-medium-5{font-family:Poppins-Medium,sans-serif;font-size:1rem}.font-semibold-5{font-family:Poppins-Semibold,sans-serif;font-size:1rem}.font-bold-5{font-family:Poppins-Bold,sans-serif;font-size:1rem}.font-thin-6{font-family:Poppins-Thin,sans-serif;font-size:1.125rem}.font-light-6{font-family:Poppins-Light,sans-serif;font-size:1.125rem}.font-regular-6{font-family:Poppins-Regular,sans-serif;font-size:1.125rem}.font-medium-6{font-family:Poppins-Medium,sans-serif;font-size:1.125rem}.font-semibold-6{font-family:Poppins-Semibold,sans-serif;font-size:1.125rem}.font-bold-6{font-family:Poppins-Bold,sans-serif;font-size:1.125rem}.font-thin-7{font-family:Poppins-Thin,sans-serif;font-size:1.25rem}.font-light-7{font-family:Poppins-Light,sans-serif;font-size:1.25rem}.font-regular-7{font-family:Poppins-Regular,sans-serif;font-size:1.25rem}.font-medium-7{font-family:Poppins-Medium,sans-serif;font-size:1.25rem}.font-semibold-7{font-family:Poppins-Semibold,sans-serif;font-size:1.25rem}.font-bold-7{font-family:Poppins-Bold,sans-serif;font-size:1.25rem}.font-thin-8{font-family:Poppins-Thin,sans-serif;font-size:1.375rem}.font-light-8{font-family:Poppins-Light,sans-serif;font-size:1.375rem}.font-regular-8{font-family:Poppins-Regular,sans-serif;font-size:1.375rem}.font-medium-8{font-family:Poppins-Medium,sans-serif;font-size:1.375rem}.font-semibold-8{font-family:Poppins-Semibold,sans-serif;font-size:1.375rem}.font-bold-8{font-family:Poppins-Bold,sans-serif;font-size:1.375rem}.font-thin-9{font-family:Poppins-Thin,sans-serif;font-size:1.5rem}.font-light-9{font-family:Poppins-Light,sans-serif;font-size:1.5rem}.font-regular-9{font-family:Poppins-Regular,sans-serif;font-size:1.5rem}.font-medium-9{font-family:Poppins-Medium,sans-serif;font-size:1.5rem}.font-semibold-9{font-family:Poppins-Semibold,sans-serif;font-size:1.5rem}.font-bold-9{font-family:Poppins-Bold,sans-serif;font-size:1.5rem}.font-thin-10{font-family:Poppins-Thin,sans-serif;font-size:1.625rem}.font-light-10{font-family:Poppins-Light,sans-serif;font-size:1.625rem}.font-regular-10{font-family:Poppins-Regular,sans-serif;font-size:1.625rem}.font-medium-10{font-family:Poppins-Medium,sans-serif;font-size:1.625rem}.font-semibold-10{font-family:Poppins-Semibold,sans-serif;font-size:1.625rem}.font-bold-10{font-family:Poppins-Bold,sans-serif;font-size:1.625rem}.font-thin-11{font-family:Poppins-Thin,sans-serif;font-size:2.25rem}.font-light-11{font-family:Poppins-Light,sans-serif;font-size:2.25rem}.font-regular-11{font-family:Poppins-Regular,sans-serif;font-size:2.25rem}.font-medium-11{font-family:Poppins-Medium,sans-serif;font-size:2.25rem}.font-semibold-11{font-family:Poppins-Semibold,sans-serif;font-size:2.25rem}.font-bold-11{font-family:Poppins-Bold,sans-serif;font-size:2.25rem}.font-thin-12{font-family:Poppins-Thin,sans-serif;font-size:3rem}.font-light-12{font-family:Poppins-Light,sans-serif;font-size:3rem}.font-regular-12{font-family:Poppins-Regular,sans-serif;font-size:3rem}.font-medium-12{font-family:Poppins-Medium,sans-serif;font-size:3rem}.font-semibold-12{font-family:Poppins-Semibold,sans-serif;font-size:3rem}.font-bold-12{font-family:Poppins-Bold,sans-serif;font-size:3rem}.bmb_text-editor{border:.0625rem solid var(--general_contrasts-50);border-radius:var(--bmb-spacing-s);container-type:inline-size;display:flex;flex-flow:column}.bmb_text-editor-header{border-bottom:.0625rem solid var(--general_contrasts-50);padding:var(--bmb-spacing-s);display:flex;flex-wrap:nowrap;align-items:center;gap:var(--bmb-spacing-m);overflow:auto}.bmb_text-editor-header-select{background:transparent;border:0;cursor:pointer;color:var(--general_contrasts-100)}.bmb_text-editor-header-group{display:inline-flex;align-items:center;flex-wrap:nowrap}.bmb_text-editor-header-group:not(:last-child){padding-right:var(--bmb-spacing-m);border-right:.0625rem solid var(--general_contrasts-50)}.bmb_text-editor-content{padding:var(--bmb-spacing-s);background-color:var(--general_contrasts-input-background);min-height:100px;border-radius:0 0 var(--bmb-spacing-s) var(--bmb-spacing-s);flex:1}\n"], dependencies: [{ kind: "directive", type: BmbButtonDirective, selector: "[bmbButton]", inputs: ["icon", "iconSize", "position", "case", "appearance", "size", "isToggleActive", "enableButtonToggle", "isRounded", "isMobile", "iconAlt"] }, { kind: "component", type: BmbIconComponent, selector: "bmb-icon", inputs: ["icon", "materialIcon", "styleIcon", "isFill", "fontWeight", "size", "alt", "dotNotification"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
134
176
|
}
|
|
135
177
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BmbTextEditorComponent, decorators: [{
|
|
136
178
|
type: Component,
|
|
137
|
-
args: [{ selector: 'bmb-text-editor', standalone: true, imports: [BmbButtonDirective, BmbIconComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"bmb_text-editor\">\n <header class=\"bmb_text-editor-header\">\n <span class=\"bmb_text-editor-header-group\">\n <select\n id=\"BmbTextEditorSelect\"\n class=\"bmb_text-editor-header-select\"\n (change)=\"handleChange($event, 'formatBlock')\"\n title=\"Estilo de p\u00E1rrafo\"\n >\n <option value=\"p\">P\u00E1rrafo</option>\n <option value=\"h1\">T\u00EDtulo 1</option>\n <option value=\"h2\">T\u00EDtulo 2</option>\n <option value=\"h3\">T\u00EDtulo 3</option>\n <option value=\"blockquote\">Cita</option>\n </select>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('bold')\"\n title=\"Negrita\"\n >\n <bmb-icon icon=\"format_bold\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('italic')\"\n title=\"Cursiva\"\n >\n <bmb-icon icon=\"format_italic\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('underline')\"\n title=\"Subrayado\"\n >\n <bmb-icon icon=\"format_underlined\" [size]=\"24\" />\n </button>\n <input\n id=\"BmbTextEditorColor\"\n type=\"color\"\n (change)=\"handleChange($event, 'foreColor')\"\n title=\"Color de texto\"\n />\n </span>\n\n <span class=\"bmb_text-editor-header-group\">\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"applyAlignment('left')\"\n [class.active]=\"currentAlignment === 'left'\"\n title=\"Alinear a la izquierda\"\n >\n <bmb-icon icon=\"format_align_left\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"applyAlignment('center')\"\n [class.active]=\"currentAlignment === 'center'\"\n title=\"Centrar\"\n >\n <bmb-icon icon=\"format_align_center\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"applyAlignment('right')\"\n [class.active]=\"currentAlignment === 'right'\"\n title=\"Alinear a la derecha\"\n >\n <bmb-icon icon=\"format_align_right\" [size]=\"24\" />\n </button>\n </span>\n\n <span class=\"bmb_text-editor-header-group\">\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('insertOrderedList')\"\n title=\"Lista numerada\"\n >\n <bmb-icon icon=\"format_list_numbered\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('insertUnorderedList')\"\n title=\"Lista con vi\u00F1etas\"\n >\n <bmb-icon icon=\"format_list_bulleted\" [size]=\"24\" />\n </button>\n </span>\n\n <span class=\"bmb_text-editor-header-group\">\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('indent')\"\n title=\"Aumentar sangr\u00EDa\"\n >\n <bmb-icon icon=\"format_indent_increase\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('outdent')\"\n title=\"Disminuir sangr\u00EDa\"\n >\n <bmb-icon icon=\"format_indent_decrease\" [size]=\"24\" />\n </button>\n </span>\n\n <span class=\"bmb_text-editor-header-group\">\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"insertLink()\"\n title=\"Insertar enlace\"\n >\n <bmb-icon icon=\"link\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"insertImage()\"\n title=\"Insertar imagen\"\n >\n <bmb-icon icon=\"image\" [size]=\"24\" />\n </button>\n <!-- <button bmbButton appearance=\"transparent\" size=\"micro\" type=\"button\" (click)=\"openTableDialog()\" title=\"Insertar tabla\">\n <bmb-icon icon=\"table_chart\" [size]=\"24\"/>\n </button> -->\n </span>\n <span class=\"bmb_text-editor-header-group\">\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"clearFormatting()\"\n title=\"Limpiar formato\"\n >\n <bmb-icon icon=\"format_clear\" [size]=\"24\" />\n </button>\n </span>\n </header>\n\n <div\n class=\"bmb_text-editor-content\"\n #editor\n contenteditable=\"true\"\n (input)=\"updateContent()\"\n [innerHTML]=\"sanitizedContent()\"\n ></div>\n</section>\n\n<!-- Di\u00E1logo para definir filas y columnas -->\n<dialog class=\"dialog-overlay\" [open]=\"showTableDialog\">\n <div class=\"dialog\">\n <h3>Insertar tabla</h3>\n <label for=\"rows\">Filas:</label>\n <input type=\"number\" id=\"rows\" min=\"1\" max=\"10\" />\n\n <label for=\"columns\">Columnas:</label>\n <input type=\"number\" id=\"columns\" min=\"1\" max=\"10\" />\n\n <div class=\"dialog-buttons\">\n <button type=\"button\" (click)=\"insertTable()\">Insertar</button>\n <button type=\"button\" (click)=\"closeTableDialog()\">Cancelar</button>\n </div>\n </div>\n</dialog>\n", styles: ["@font-face{font-family:Poppins-Light;font-style:normal;font-weight:300;src:url(/assets/fonts/Poppins/Poppins-ExtraLight.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Regular;font-style:normal;font-weight:400;src:url(/assets/fonts/Poppins/Poppins-Regular.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Bold;font-style:normal;font-weight:700;src:url(/assets/fonts/Poppins/Poppins-Bold.ttf) format(\"truetype\")}:root,:host{--font-display: \"Poppins-Regular\", sans-serif}.font-thin-1{font-family:Poppins-Thin,sans-serif;font-size:.625rem}.font-light-1{font-family:Poppins-Light,sans-serif;font-size:.625rem}.font-regular-1{font-family:Poppins-Regular,sans-serif;font-size:.625rem}.font-medium-1{font-family:Poppins-Medium,sans-serif;font-size:.625rem}.font-semibold-1{font-family:Poppins-Semibold,sans-serif;font-size:.625rem}.font-bold-1{font-family:Poppins-Bold,sans-serif;font-size:.625rem}.font-thin-2{font-family:Poppins-Thin,sans-serif;font-size:.6875rem}.font-light-2{font-family:Poppins-Light,sans-serif;font-size:.6875rem}.font-regular-2{font-family:Poppins-Regular,sans-serif;font-size:.6875rem}.font-medium-2{font-family:Poppins-Medium,sans-serif;font-size:.6875rem}.font-semibold-2{font-family:Poppins-Semibold,sans-serif;font-size:.6875rem}.font-bold-2{font-family:Poppins-Bold,sans-serif;font-size:.6875rem}.font-thin-3{font-family:Poppins-Thin,sans-serif;font-size:.75rem}.font-light-3{font-family:Poppins-Light,sans-serif;font-size:.75rem}.font-regular-3{font-family:Poppins-Regular,sans-serif;font-size:.75rem}.font-medium-3{font-family:Poppins-Medium,sans-serif;font-size:.75rem}.font-semibold-3{font-family:Poppins-Semibold,sans-serif;font-size:.75rem}.font-bold-3{font-family:Poppins-Bold,sans-serif;font-size:.75rem}.font-thin-4{font-family:Poppins-Thin,sans-serif;font-size:.875rem}.font-light-4{font-family:Poppins-Light,sans-serif;font-size:.875rem}.font-regular-4{font-family:Poppins-Regular,sans-serif;font-size:.875rem}.font-medium-4{font-family:Poppins-Medium,sans-serif;font-size:.875rem}.font-semibold-4{font-family:Poppins-Semibold,sans-serif;font-size:.875rem}.font-bold-4{font-family:Poppins-Bold,sans-serif;font-size:.875rem}.font-thin-4_5{font-family:Poppins-Thin,sans-serif;font-size:.9375rem}.font-light-4_5{font-family:Poppins-Light,sans-serif;font-size:.9375rem}.font-regular-4_5{font-family:Poppins-Regular,sans-serif;font-size:.9375rem}.font-medium-4_5{font-family:Poppins-Medium,sans-serif;font-size:.9375rem}.font-semibold-4_5{font-family:Poppins-Semibold,sans-serif;font-size:.9375rem}.font-bold-4_5{font-family:Poppins-Bold,sans-serif;font-size:.9375rem}.font-thin-5{font-family:Poppins-Thin,sans-serif;font-size:1rem}.font-light-5{font-family:Poppins-Light,sans-serif;font-size:1rem}.font-regular-5{font-family:Poppins-Regular,sans-serif;font-size:1rem}.font-medium-5{font-family:Poppins-Medium,sans-serif;font-size:1rem}.font-semibold-5{font-family:Poppins-Semibold,sans-serif;font-size:1rem}.font-bold-5{font-family:Poppins-Bold,sans-serif;font-size:1rem}.font-thin-6{font-family:Poppins-Thin,sans-serif;font-size:1.125rem}.font-light-6{font-family:Poppins-Light,sans-serif;font-size:1.125rem}.font-regular-6{font-family:Poppins-Regular,sans-serif;font-size:1.125rem}.font-medium-6{font-family:Poppins-Medium,sans-serif;font-size:1.125rem}.font-semibold-6{font-family:Poppins-Semibold,sans-serif;font-size:1.125rem}.font-bold-6{font-family:Poppins-Bold,sans-serif;font-size:1.125rem}.font-thin-7{font-family:Poppins-Thin,sans-serif;font-size:1.25rem}.font-light-7{font-family:Poppins-Light,sans-serif;font-size:1.25rem}.font-regular-7{font-family:Poppins-Regular,sans-serif;font-size:1.25rem}.font-medium-7{font-family:Poppins-Medium,sans-serif;font-size:1.25rem}.font-semibold-7{font-family:Poppins-Semibold,sans-serif;font-size:1.25rem}.font-bold-7{font-family:Poppins-Bold,sans-serif;font-size:1.25rem}.font-thin-8{font-family:Poppins-Thin,sans-serif;font-size:1.375rem}.font-light-8{font-family:Poppins-Light,sans-serif;font-size:1.375rem}.font-regular-8{font-family:Poppins-Regular,sans-serif;font-size:1.375rem}.font-medium-8{font-family:Poppins-Medium,sans-serif;font-size:1.375rem}.font-semibold-8{font-family:Poppins-Semibold,sans-serif;font-size:1.375rem}.font-bold-8{font-family:Poppins-Bold,sans-serif;font-size:1.375rem}.font-thin-9{font-family:Poppins-Thin,sans-serif;font-size:1.5rem}.font-light-9{font-family:Poppins-Light,sans-serif;font-size:1.5rem}.font-regular-9{font-family:Poppins-Regular,sans-serif;font-size:1.5rem}.font-medium-9{font-family:Poppins-Medium,sans-serif;font-size:1.5rem}.font-semibold-9{font-family:Poppins-Semibold,sans-serif;font-size:1.5rem}.font-bold-9{font-family:Poppins-Bold,sans-serif;font-size:1.5rem}.font-thin-10{font-family:Poppins-Thin,sans-serif;font-size:1.625rem}.font-light-10{font-family:Poppins-Light,sans-serif;font-size:1.625rem}.font-regular-10{font-family:Poppins-Regular,sans-serif;font-size:1.625rem}.font-medium-10{font-family:Poppins-Medium,sans-serif;font-size:1.625rem}.font-semibold-10{font-family:Poppins-Semibold,sans-serif;font-size:1.625rem}.font-bold-10{font-family:Poppins-Bold,sans-serif;font-size:1.625rem}.font-thin-11{font-family:Poppins-Thin,sans-serif;font-size:2.25rem}.font-light-11{font-family:Poppins-Light,sans-serif;font-size:2.25rem}.font-regular-11{font-family:Poppins-Regular,sans-serif;font-size:2.25rem}.font-medium-11{font-family:Poppins-Medium,sans-serif;font-size:2.25rem}.font-semibold-11{font-family:Poppins-Semibold,sans-serif;font-size:2.25rem}.font-bold-11{font-family:Poppins-Bold,sans-serif;font-size:2.25rem}.font-thin-12{font-family:Poppins-Thin,sans-serif;font-size:3rem}.font-light-12{font-family:Poppins-Light,sans-serif;font-size:3rem}.font-regular-12{font-family:Poppins-Regular,sans-serif;font-size:3rem}.font-medium-12{font-family:Poppins-Medium,sans-serif;font-size:3rem}.font-semibold-12{font-family:Poppins-Semibold,sans-serif;font-size:3rem}.font-bold-12{font-family:Poppins-Bold,sans-serif;font-size:3rem}.bmb_text-editor{border:.0625rem solid var(--general_contrasts-50);border-radius:var(--bmb-spacing-s);container-type:inline-size;display:flex;flex-flow:column}.bmb_text-editor-header{border-bottom:.0625rem solid var(--general_contrasts-50);padding:var(--bmb-spacing-s);display:flex;flex-wrap:nowrap;align-items:center;gap:var(--bmb-spacing-m);overflow:auto}.bmb_text-editor-header-select{background:transparent;border:0;cursor:pointer;color:var(--general_contrasts-100)}.bmb_text-editor-header-group{display:inline-flex;align-items:center;flex-wrap:nowrap}.bmb_text-editor-header-group:not(:last-child){padding-right:var(--bmb-spacing-m);border-right:.0625rem solid var(--general_contrasts-50)}.bmb_text-editor-content{padding:var(--bmb-spacing-s);background-color:var(--general_contrasts-input-background);min-height:100px;border-radius:0 0 var(--bmb-spacing-s) var(--bmb-spacing-s);flex:1}\n"] }]
|
|
138
|
-
}], ctorParameters: () => [{ type: i1.DomSanitizer }], propDecorators: { editor: [{
|
|
179
|
+
args: [{ selector: 'bmb-text-editor', standalone: true, imports: [BmbButtonDirective, BmbIconComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"bmb_text-editor\">\n <header class=\"bmb_text-editor-header\">\n <span class=\"bmb_text-editor-header-group\">\n <select\n id=\"BmbTextEditorSelect\"\n class=\"bmb_text-editor-header-select\"\n (change)=\"handleChange($event, 'formatBlock')\"\n title=\"Estilo de p\u00E1rrafo\"\n >\n <option value=\"p\">P\u00E1rrafo</option>\n <option value=\"h1\">T\u00EDtulo 1</option>\n <option value=\"h2\">T\u00EDtulo 2</option>\n <option value=\"h3\">T\u00EDtulo 3</option>\n <option value=\"blockquote\">Cita</option>\n </select>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('bold')\"\n title=\"Negrita\"\n >\n <bmb-icon icon=\"format_bold\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('italic')\"\n title=\"Cursiva\"\n >\n <bmb-icon icon=\"format_italic\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('underline')\"\n title=\"Subrayado\"\n >\n <bmb-icon icon=\"format_underlined\" [size]=\"24\" />\n </button>\n <input\n id=\"BmbTextEditorColor\"\n type=\"color\"\n (change)=\"handleChange($event, 'foreColor')\"\n title=\"Color de texto\"\n />\n </span>\n\n <span class=\"bmb_text-editor-header-group\">\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"applyAlignment('left')\"\n [class.active]=\"currentAlignment === 'left'\"\n title=\"Alinear a la izquierda\"\n >\n <bmb-icon icon=\"format_align_left\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"applyAlignment('center')\"\n [class.active]=\"currentAlignment === 'center'\"\n title=\"Centrar\"\n >\n <bmb-icon icon=\"format_align_center\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"applyAlignment('right')\"\n [class.active]=\"currentAlignment === 'right'\"\n title=\"Alinear a la derecha\"\n >\n <bmb-icon icon=\"format_align_right\" [size]=\"24\" />\n </button>\n </span>\n\n <span class=\"bmb_text-editor-header-group\">\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('insertOrderedList')\"\n title=\"Lista numerada\"\n >\n <bmb-icon icon=\"format_list_numbered\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('insertUnorderedList')\"\n title=\"Lista con vi\u00F1etas\"\n >\n <bmb-icon icon=\"format_list_bulleted\" [size]=\"24\" />\n </button>\n </span>\n\n <span class=\"bmb_text-editor-header-group\">\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('indent')\"\n title=\"Aumentar sangr\u00EDa\"\n >\n <bmb-icon icon=\"format_indent_increase\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"execCommand('outdent')\"\n title=\"Disminuir sangr\u00EDa\"\n >\n <bmb-icon icon=\"format_indent_decrease\" [size]=\"24\" />\n </button>\n </span>\n\n <span class=\"bmb_text-editor-header-group\">\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"openPrompt('link', $event)\"\n title=\"Insertar enlace\"\n >\n <bmb-icon icon=\"link\" [size]=\"24\" />\n </button>\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"openPrompt('image', $event)\"\n title=\"Insertar imagen\"\n >\n <bmb-icon icon=\"image\" [size]=\"24\" />\n </button>\n <!-- <button bmbButton appearance=\"transparent\" size=\"micro\" type=\"button\" (click)=\"openTableDialog()\" title=\"Insertar tabla\">\n <bmb-icon icon=\"table_chart\" [size]=\"24\"/>\n </button> -->\n </span>\n <span class=\"bmb_text-editor-header-group\">\n <button\n bmbButton\n appearance=\"transparent\"\n size=\"micro\"\n type=\"button\"\n (click)=\"clearFormatting()\"\n title=\"Limpiar formato\"\n >\n <bmb-icon icon=\"format_clear\" [size]=\"24\" />\n </button>\n </span>\n </header>\n\n <div\n class=\"bmb_text-editor-content\"\n #editor\n contenteditable=\"true\"\n (input)=\"updateContent()\"\n [innerHTML]=\"sanitizedContent()\"\n ></div>\n</section>\n\n<!-- Di\u00E1logo para definir filas y columnas -->\n<dialog class=\"dialog-overlay\" [open]=\"showTableDialog\">\n <div class=\"dialog\">\n <h3>Insertar tabla</h3>\n <label for=\"rows\">Filas:</label>\n <input type=\"number\" id=\"rows\" min=\"1\" max=\"10\" />\n\n <label for=\"columns\">Columnas:</label>\n <input type=\"number\" id=\"columns\" min=\"1\" max=\"10\" />\n\n <div class=\"dialog-buttons\">\n <button type=\"button\" (click)=\"insertTable()\">Insertar</button>\n <button type=\"button\" (click)=\"closeTableDialog()\">Cancelar</button>\n </div>\n </div>\n</dialog>\n", styles: ["@font-face{font-family:Poppins-Light;font-style:normal;font-weight:300;src:url(/assets/fonts/Poppins/Poppins-ExtraLight.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Regular;font-style:normal;font-weight:400;src:url(/assets/fonts/Poppins/Poppins-Regular.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Bold;font-style:normal;font-weight:700;src:url(/assets/fonts/Poppins/Poppins-Bold.ttf) format(\"truetype\")}:root,:host{--font-display: \"Poppins-Regular\", sans-serif}.font-thin-1{font-family:Poppins-Thin,sans-serif;font-size:.625rem}.font-light-1{font-family:Poppins-Light,sans-serif;font-size:.625rem}.font-regular-1{font-family:Poppins-Regular,sans-serif;font-size:.625rem}.font-medium-1{font-family:Poppins-Medium,sans-serif;font-size:.625rem}.font-semibold-1{font-family:Poppins-Semibold,sans-serif;font-size:.625rem}.font-bold-1{font-family:Poppins-Bold,sans-serif;font-size:.625rem}.font-thin-2{font-family:Poppins-Thin,sans-serif;font-size:.6875rem}.font-light-2{font-family:Poppins-Light,sans-serif;font-size:.6875rem}.font-regular-2{font-family:Poppins-Regular,sans-serif;font-size:.6875rem}.font-medium-2{font-family:Poppins-Medium,sans-serif;font-size:.6875rem}.font-semibold-2{font-family:Poppins-Semibold,sans-serif;font-size:.6875rem}.font-bold-2{font-family:Poppins-Bold,sans-serif;font-size:.6875rem}.font-thin-3{font-family:Poppins-Thin,sans-serif;font-size:.75rem}.font-light-3{font-family:Poppins-Light,sans-serif;font-size:.75rem}.font-regular-3{font-family:Poppins-Regular,sans-serif;font-size:.75rem}.font-medium-3{font-family:Poppins-Medium,sans-serif;font-size:.75rem}.font-semibold-3{font-family:Poppins-Semibold,sans-serif;font-size:.75rem}.font-bold-3{font-family:Poppins-Bold,sans-serif;font-size:.75rem}.font-thin-4{font-family:Poppins-Thin,sans-serif;font-size:.875rem}.font-light-4{font-family:Poppins-Light,sans-serif;font-size:.875rem}.font-regular-4{font-family:Poppins-Regular,sans-serif;font-size:.875rem}.font-medium-4{font-family:Poppins-Medium,sans-serif;font-size:.875rem}.font-semibold-4{font-family:Poppins-Semibold,sans-serif;font-size:.875rem}.font-bold-4{font-family:Poppins-Bold,sans-serif;font-size:.875rem}.font-thin-4_5{font-family:Poppins-Thin,sans-serif;font-size:.9375rem}.font-light-4_5{font-family:Poppins-Light,sans-serif;font-size:.9375rem}.font-regular-4_5{font-family:Poppins-Regular,sans-serif;font-size:.9375rem}.font-medium-4_5{font-family:Poppins-Medium,sans-serif;font-size:.9375rem}.font-semibold-4_5{font-family:Poppins-Semibold,sans-serif;font-size:.9375rem}.font-bold-4_5{font-family:Poppins-Bold,sans-serif;font-size:.9375rem}.font-thin-5{font-family:Poppins-Thin,sans-serif;font-size:1rem}.font-light-5{font-family:Poppins-Light,sans-serif;font-size:1rem}.font-regular-5{font-family:Poppins-Regular,sans-serif;font-size:1rem}.font-medium-5{font-family:Poppins-Medium,sans-serif;font-size:1rem}.font-semibold-5{font-family:Poppins-Semibold,sans-serif;font-size:1rem}.font-bold-5{font-family:Poppins-Bold,sans-serif;font-size:1rem}.font-thin-6{font-family:Poppins-Thin,sans-serif;font-size:1.125rem}.font-light-6{font-family:Poppins-Light,sans-serif;font-size:1.125rem}.font-regular-6{font-family:Poppins-Regular,sans-serif;font-size:1.125rem}.font-medium-6{font-family:Poppins-Medium,sans-serif;font-size:1.125rem}.font-semibold-6{font-family:Poppins-Semibold,sans-serif;font-size:1.125rem}.font-bold-6{font-family:Poppins-Bold,sans-serif;font-size:1.125rem}.font-thin-7{font-family:Poppins-Thin,sans-serif;font-size:1.25rem}.font-light-7{font-family:Poppins-Light,sans-serif;font-size:1.25rem}.font-regular-7{font-family:Poppins-Regular,sans-serif;font-size:1.25rem}.font-medium-7{font-family:Poppins-Medium,sans-serif;font-size:1.25rem}.font-semibold-7{font-family:Poppins-Semibold,sans-serif;font-size:1.25rem}.font-bold-7{font-family:Poppins-Bold,sans-serif;font-size:1.25rem}.font-thin-8{font-family:Poppins-Thin,sans-serif;font-size:1.375rem}.font-light-8{font-family:Poppins-Light,sans-serif;font-size:1.375rem}.font-regular-8{font-family:Poppins-Regular,sans-serif;font-size:1.375rem}.font-medium-8{font-family:Poppins-Medium,sans-serif;font-size:1.375rem}.font-semibold-8{font-family:Poppins-Semibold,sans-serif;font-size:1.375rem}.font-bold-8{font-family:Poppins-Bold,sans-serif;font-size:1.375rem}.font-thin-9{font-family:Poppins-Thin,sans-serif;font-size:1.5rem}.font-light-9{font-family:Poppins-Light,sans-serif;font-size:1.5rem}.font-regular-9{font-family:Poppins-Regular,sans-serif;font-size:1.5rem}.font-medium-9{font-family:Poppins-Medium,sans-serif;font-size:1.5rem}.font-semibold-9{font-family:Poppins-Semibold,sans-serif;font-size:1.5rem}.font-bold-9{font-family:Poppins-Bold,sans-serif;font-size:1.5rem}.font-thin-10{font-family:Poppins-Thin,sans-serif;font-size:1.625rem}.font-light-10{font-family:Poppins-Light,sans-serif;font-size:1.625rem}.font-regular-10{font-family:Poppins-Regular,sans-serif;font-size:1.625rem}.font-medium-10{font-family:Poppins-Medium,sans-serif;font-size:1.625rem}.font-semibold-10{font-family:Poppins-Semibold,sans-serif;font-size:1.625rem}.font-bold-10{font-family:Poppins-Bold,sans-serif;font-size:1.625rem}.font-thin-11{font-family:Poppins-Thin,sans-serif;font-size:2.25rem}.font-light-11{font-family:Poppins-Light,sans-serif;font-size:2.25rem}.font-regular-11{font-family:Poppins-Regular,sans-serif;font-size:2.25rem}.font-medium-11{font-family:Poppins-Medium,sans-serif;font-size:2.25rem}.font-semibold-11{font-family:Poppins-Semibold,sans-serif;font-size:2.25rem}.font-bold-11{font-family:Poppins-Bold,sans-serif;font-size:2.25rem}.font-thin-12{font-family:Poppins-Thin,sans-serif;font-size:3rem}.font-light-12{font-family:Poppins-Light,sans-serif;font-size:3rem}.font-regular-12{font-family:Poppins-Regular,sans-serif;font-size:3rem}.font-medium-12{font-family:Poppins-Medium,sans-serif;font-size:3rem}.font-semibold-12{font-family:Poppins-Semibold,sans-serif;font-size:3rem}.font-bold-12{font-family:Poppins-Bold,sans-serif;font-size:3rem}.bmb_text-editor{border:.0625rem solid var(--general_contrasts-50);border-radius:var(--bmb-spacing-s);container-type:inline-size;display:flex;flex-flow:column}.bmb_text-editor-header{border-bottom:.0625rem solid var(--general_contrasts-50);padding:var(--bmb-spacing-s);display:flex;flex-wrap:nowrap;align-items:center;gap:var(--bmb-spacing-m);overflow:auto}.bmb_text-editor-header-select{background:transparent;border:0;cursor:pointer;color:var(--general_contrasts-100)}.bmb_text-editor-header-group{display:inline-flex;align-items:center;flex-wrap:nowrap}.bmb_text-editor-header-group:not(:last-child){padding-right:var(--bmb-spacing-m);border-right:.0625rem solid var(--general_contrasts-50)}.bmb_text-editor-content{padding:var(--bmb-spacing-s);background-color:var(--general_contrasts-input-background);min-height:100px;border-radius:0 0 var(--bmb-spacing-s) var(--bmb-spacing-s);flex:1}\n"] }]
|
|
180
|
+
}], ctorParameters: () => [{ type: i1.DomSanitizer }, { type: i2.BmbProjectionContentService }], propDecorators: { editor: [{
|
|
139
181
|
type: ViewChild,
|
|
140
182
|
args: ['editor']
|
|
141
183
|
}] } });
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm1iLXRleHQtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RzLW5nL3NyYy9saWIvY29tcG9uZW50cy9ibWItdGV4dC1lZGl0b3IvYm1iLXRleHQtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RzLW5nL3NyYy9saWIvY29tcG9uZW50cy9ibWItdGV4dC1lZGl0b3IvYm1iLXRleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7OztBQVdsRSxNQUFNLE9BQU8sc0JBQXNCO0lBV2pDLGVBQWU7UUFDYixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEMsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztpQkFDcEMsdUJBQXNDLENBQUM7WUFDMUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztZQUU1QyxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNsQixNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUM7Z0JBQzFELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFT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QUFDLE1BQU07aUZBSzFCLE1BQU07c0JBQTFCLFNBQVM7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIGlucHV0LFxuICBPbkluaXQsXG4gIHNpZ25hbCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEJtYkJ1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvYm1iLWJ1dHRvbi9idXR0b24uZGlyZWN0aXZlJztcbmltcG9ydCB7IEJtYkljb25Db21wb25lbnQgfSBmcm9tICcuLi9ibWItaWNvbi9ibWItaWNvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdibWItdGV4dC1lZGl0b3InLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQm1iQnV0dG9uRGlyZWN0aXZlLCBCbWJJY29uQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL2JtYi10ZXh0LWVkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9ibWItdGV4dC1lZGl0b3IuY29tcG9uZW50LnNjc3MnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQm1iVGV4dEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCB7XG4gIGNvbnRyb2wgPSBpbnB1dDxGb3JtQ29udHJvbD4obmV3IEZvcm1Db250cm9sKCcnKSk7XG5cbiAgQFZpZXdDaGlsZCgnZWRpdG9yJykgZWRpdG9yITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgc2FuaXRpemVkQ29udGVudCA9IHNpZ25hbDxTYWZlSHRtbD4oJycpO1xuICBjdXJyZW50QWxpZ25tZW50OiBzdHJpbmcgPSAnbGVmdCc7XG4gIHNob3dUYWJsZURpYWxvZzogYm9vbGVhbiA9IGZhbHNlO1xuICB0YWJsZVJvd3M6IG51bWJlciA9IDI7XG4gIHRhYmxlQ29sdW1uczogbnVtYmVyID0gMjtcblxuICBkZXRlY3RBbGlnbm1lbnQoKSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgICAgLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyIGFzIEhUTUxFbGVtZW50O1xuICAgICAgY29uc3QgcGFyZW50RWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcblxuICAgICAgaWYgKHBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgdGV4dEFsaWduID0gcGFyZW50RWxlbWVudC5zdHlsZS50ZXh0QWxpZ24gfHwgJ2xlZnQnO1xuICAgICAgICB0aGlzLmN1cnJlbnRBbGlnbm1lbnQgPSB0ZXh0QWxpZ247XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXBwbHlBbGlnbm1lbnQoYWxpZ25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLmV4ZWNDb21tYW5kKCdzdHlsZVdpdGhDU1MnLCAndHJ1ZScpO1xuICAgIHRoaXMuZXhlY0NvbW1hbmQoXG4gICAgICAnanVzdGlmeScgKyBhbGlnbm1lbnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBhbGlnbm1lbnQuc2xpY2UoMSksXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zYW5pdGl6ZWRDb250ZW50LnNldCh0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChcbiAgICAgIHRoaXMuY29udHJvbCgpLnZhbHVlIHx8ICcnLFxuICAgICkpO1xuXG4gICAgdGhpcy5jb250cm9sKCkudmFsdWVDaGFuZ2VzPy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuc2FuaXRpemVkQ29udGVudC5zZXQodGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoJycpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBoYW5kbGVDaGFuZ2UoZXZlbnQ6IEV2ZW50LCB0eXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQ7XG4gICAgaWYgKHRhcmdldD8udmFsdWUpIHtcbiAgICAgIHRoaXMuZXhlY0NvbW1hbmQodHlwZSwgdGFyZ2V0LnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBleGVjQ29tbWFuZChjb21tYW5kOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKGNvbW1hbmQsIGZhbHNlLCB2YWx1ZSB8fCB1bmRlZmluZWQpO1xuICAgIHRoaXMudXBkYXRlQ29udGVudCgpO1xuICB9XG5cbiAgaW5zZXJ0TGluaygpIHtcbiAgICBjb25zdCB1cmwgPSBwcm9tcHQoJ0luZ3Jlc2UgbGEgVVJMOicpO1xuICAgIGlmICh1cmwpIHtcbiAgICAgIHRoaXMuZXhlY0NvbW1hbmQoJ2NyZWF0ZUxpbmsnLCB1cmwpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUNvbnRlbnQoKSB7XG4gICAgdGhpcy5jb250cm9sKCkuc2V0VmFsdWUodGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpO1xuICB9XG5cbiAgY2xlYXJGb3JtYXR0aW5nKCkge1xuICAgIHRoaXMuZXhlY0NvbW1hbmQoJ3JlbW92ZUZvcm1hdCcpO1xuICAgIHRoaXMuZXhlY0NvbW1hbmQoJ3VubGluaycpO1xuICB9XG5cbiAgZ2V0Q3VycmVudFN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2woKS52YWx1ZTtcbiAgfVxuXG4gIGluc2VydEltYWdlKCkge1xuICAgIGNvbnN0IHVybCA9IHByb21wdCgnSW5ncmVzZSBsYSBVUkwgZGUgbGEgaW1hZ2VuOicpO1xuICAgIGlmICh1cmwpIHtcbiAgICAgIGlmICh0aGlzLmlzVmFsaWRJbWFnZVVybCh1cmwpKSB7XG4gICAgICAgIHRoaXMuZXhlY0NvbW1hbmQoJ2luc2VydEltYWdlJywgdXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsZXJ0KCdMYSBVUkwgZGUgbGEgaW1hZ2VuIG5vIGVzIHbDoWxpZGEuJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNWYWxpZEltYWdlVXJsKHVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIG5ldyBVUkwodXJsKTsgLy8gSW50ZW50YSBjcmVhciB1biBvYmpldG8gVVJMXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIE3DqXRvZG8gcGFyYSBhYnJpciBlbCBkacOhbG9nbyBkZSBsYSB0YWJsYVxuICBvcGVuVGFibGVEaWFsb2coKSB7XG4gICAgdGhpcy5zaG93VGFibGVEaWFsb2cgPSB0cnVlO1xuICB9XG5cbiAgLy8gTcOpdG9kbyBwYXJhIGNlcnJhciBlbCBkacOhbG9nbyBkZSBsYSB0YWJsYVxuICBjbG9zZVRhYmxlRGlhbG9nKCkge1xuICAgIHRoaXMuc2hvd1RhYmxlRGlhbG9nID0gZmFsc2U7XG4gIH1cblxuICAvLyBNw6l0b2RvIHBhcmEgaW5zZXJ0YXIgbGEgdGFibGFcbiAgaW5zZXJ0VGFibGUoKSB7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMudGFibGVSb3dzO1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLnRhYmxlQ29sdW1ucztcblxuICAgIGlmIChyb3dzID4gMCAmJiBjb2x1bW5zID4gMCkge1xuICAgICAgY29uc3QgdGFibGVIdG1sID0gdGhpcy5nZW5lcmF0ZVRhYmxlSHRtbChyb3dzLCBjb2x1bW5zKTtcbiAgICAgIHRoaXMuaW5zZXJ0SHRtbCh0YWJsZUh0bWwpO1xuICAgICAgdGhpcy5jbG9zZVRhYmxlRGlhbG9nKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gTcOpdG9kbyBwYXJhIGdlbmVyYXIgZWwgSFRNTCBkZSBsYSB0YWJsYVxuICBnZW5lcmF0ZVRhYmxlSHRtbChyb3dzOiBudW1iZXIsIGNvbHVtbnM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgbGV0IHRhYmxlSHRtbCA9ICc8dGFibGUgc3R5bGU9XCJib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyB3aWR0aDogMTAwJTtcIj4nO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICB0YWJsZUh0bWwgKz0gJzx0cj4nO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGFibGVIdG1sICs9IGA8dGQgc3R5bGU9XCJib3JkZXI6IDFweCBzb2xpZCAjMDAwOyBwYWRkaW5nOiA4cHg7XCI+Jm5ic3A7PC90ZD5gO1xuICAgICAgfVxuICAgICAgdGFibGVIdG1sICs9ICc8L3RyPic7XG4gICAgfVxuICAgIHRhYmxlSHRtbCArPSAnPC90YWJsZT4nO1xuICAgIHJldHVybiB0YWJsZUh0bWw7XG4gIH1cblxuICAvLyBNw6l0b2RvIHBhcmEgaW5zZXJ0YXIgSFRNTCBlbiBlbCBlZGl0b3JcbiAgaW5zZXJ0SHRtbChodG1sOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcbiAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG4gICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGRpdi5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShkaXYpO1xuICAgICAgdGhpcy51cGRhdGVDb250ZW50KCk7XG4gICAgfVxuICB9XG59XG4iLCI8c2VjdGlvbiBjbGFzcz1cImJtYl90ZXh0LWVkaXRvclwiPlxuICA8aGVhZGVyIGNsYXNzPVwiYm1iX3RleHQtZWRpdG9yLWhlYWRlclwiPlxuICAgIDxzcGFuIGNsYXNzPVwiYm1iX3RleHQtZWRpdG9yLWhlYWRlci1ncm91cFwiPlxuICAgICAgPHNlbGVjdFxuICAgICAgICBpZD1cIkJtYlRleHRFZGl0b3JTZWxlY3RcIlxuICAgICAgICBjbGFzcz1cImJtYl90ZXh0LWVkaXRvci1oZWFkZXItc2VsZWN0XCJcbiAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVDaGFuZ2UoJGV2ZW50LCAnZm9ybWF0QmxvY2snKVwiXG4gICAgICAgIHRpdGxlPVwiRXN0aWxvIGRlIHDDoXJyYWZvXCJcbiAgICAgID5cbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInBcIj5Qw6FycmFmbzwvb3B0aW9uPlxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiaDFcIj5Uw610dWxvIDE8L29wdGlvbj5cbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImgyXCI+VMOtdHVsbyAyPC9vcHRpb24+XG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJoM1wiPlTDrXR1bG8gMzwvb3B0aW9uPlxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmxvY2txdW90ZVwiPkNpdGE8L29wdGlvbj5cbiAgICAgIDwvc2VsZWN0PlxuICAgICAgPGJ1dHRvblxuICAgICAgICBibWJCdXR0b25cbiAgICAgICAgYXBwZWFyYW5jZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgc2l6ZT1cIm1pY3JvXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJleGVjQ29tbWFuZCgnYm9sZCcpXCJcbiAgICAgICAgdGl0bGU9XCJOZWdyaXRhXCJcbiAgICAgID5cbiAgICAgICAgPGJtYi1pY29uIGljb249XCJmb3JtYXRfYm9sZFwiIFtzaXplXT1cIjI0XCIgLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBibWJCdXR0b25cbiAgICAgICAgYXBwZWFyYW5jZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgc2l6ZT1cIm1pY3JvXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJleGVjQ29tbWFuZCgnaXRhbGljJylcIlxuICAgICAgICB0aXRsZT1cIkN1cnNpdmFcIlxuICAgICAgPlxuICAgICAgICA8Ym1iLWljb24gaWNvbj1cImZvcm1hdF9pdGFsaWNcIiBbc2l6ZV09XCIyNFwiIC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgYm1iQnV0dG9uXG4gICAgICAgIGFwcGVhcmFuY2U9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgIHNpemU9XCJtaWNyb1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiZXhlY0NvbW1hbmQoJ3VuZGVybGluZScpXCJcbiAgICAgICAgdGl0bGU9XCJTdWJyYXlhZG9cIlxuICAgICAgPlxuICAgICAgICA8Ym1iLWljb24gaWNvbj1cImZvcm1hdF91bmRlcmxpbmVkXCIgW3NpemVdPVwiMjRcIiAvPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8aW5wdXRcbiAgICAgICAgaWQ9XCJCbWJUZXh0RWRpdG9yQ29sb3JcIlxuICAgICAgICB0eXBlPVwiY29sb3JcIlxuICAgICAgICAoY2hhbmdlKT1cImhhbmRsZUNoYW5nZSgkZXZlbnQsICdmb3JlQ29sb3InKVwiXG4gICAgICAgIHRpdGxlPVwiQ29sb3IgZGUgdGV4dG9cIlxuICAgICAgLz5cbiAgICA8L3NwYW4+XG5cbiAgICA8c3BhbiBjbGFzcz1cImJtYl90ZXh0LWVkaXRvci1oZWFkZXItZ3JvdXBcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgYm1iQnV0dG9uXG4gICAgICAgIGFwcGVhcmFuY2U9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgIHNpemU9XCJtaWNyb1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiYXBwbHlBbGlnbm1lbnQoJ2xlZnQnKVwiXG4gICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiY3VycmVudEFsaWdubWVudCA9PT0gJ2xlZnQnXCJcbiAgICAgICAgdGl0bGU9XCJBbGluZWFyIGEgbGEgaXpxdWllcmRhXCJcbiAgICAgID5cbiAgICAgICAgPGJtYi1pY29uIGljb249XCJmb3JtYXRfYWxpZ25fbGVmdFwiIFtzaXplXT1cIjI0XCIgLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBibWJCdXR0b25cbiAgICAgICAgYXBwZWFyYW5jZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgc2l6ZT1cIm1pY3JvXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJhcHBseUFsaWdubWVudCgnY2VudGVyJylcIlxuICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImN1cnJlbnRBbGlnbm1lbnQgPT09ICdjZW50ZXInXCJcbiAgICAgICAgdGl0bGU9XCJDZW50cmFyXCJcbiAgICAgID5cbiAgICAgICAgPGJtYi1pY29uIGljb249XCJmb3JtYXRfYWxpZ25fY2VudGVyXCIgW3NpemVdPVwiMjRcIiAvPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGJtYkJ1dHRvblxuICAgICAgICBhcHBlYXJhbmNlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICBzaXplPVwibWljcm9cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cImFwcGx5QWxpZ25tZW50KCdyaWdodCcpXCJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJjdXJyZW50QWxpZ25tZW50ID09PSAncmlnaHQnXCJcbiAgICAgICAgdGl0bGU9XCJBbGluZWFyIGEgbGEgZGVyZWNoYVwiXG4gICAgICA+XG4gICAgICAgIDxibWItaWNvbiBpY29uPVwiZm9ybWF0X2FsaWduX3JpZ2h0XCIgW3NpemVdPVwiMjRcIiAvPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9zcGFuPlxuXG4gICAgPHNwYW4gY2xhc3M9XCJibWJfdGV4dC1lZGl0b3ItaGVhZGVyLWdyb3VwXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGJtYkJ1dHRvblxuICAgICAgICBhcHBlYXJhbmNlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICBzaXplPVwibWljcm9cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cImV4ZWNDb21tYW5kKCdpbnNlcnRPcmRlcmVkTGlzdCcpXCJcbiAgICAgICAgdGl0bGU9XCJMaXN0YSBudW1lcmFkYVwiXG4gICAgICA+XG4gICAgICAgIDxibWItaWNvbiBpY29uPVwiZm9ybWF0X2xpc3RfbnVtYmVyZWRcIiBbc2l6ZV09XCIyNFwiIC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgYm1iQnV0dG9uXG4gICAgICAgIGFwcGVhcmFuY2U9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgIHNpemU9XCJtaWNyb1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiZXhlY0NvbW1hbmQoJ2luc2VydFVub3JkZXJlZExpc3QnKVwiXG4gICAgICAgIHRpdGxlPVwiTGlzdGEgY29uIHZpw7FldGFzXCJcbiAgICAgID5cbiAgICAgICAgPGJtYi1pY29uIGljb249XCJmb3JtYXRfbGlzdF9idWxsZXRlZFwiIFtzaXplXT1cIjI0XCIgLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvc3Bhbj5cblxuICAgIDxzcGFuIGNsYXNzPVwiYm1iX3RleHQtZWRpdG9yLWhlYWRlci1ncm91cFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBibWJCdXR0b25cbiAgICAgICAgYXBwZWFyYW5jZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgc2l6ZT1cIm1pY3JvXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJleGVjQ29tbWFuZCgnaW5kZW50JylcIlxuICAgICAgICB0aXRsZT1cIkF1bWVudGFyIHNhbmdyw61hXCJcbiAgICAgID5cbiAgICAgICAgPGJtYi1pY29uIGljb249XCJmb3JtYXRfaW5kZW50X2luY3JlYXNlXCIgW3NpemVdPVwiMjRcIiAvPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGJtYkJ1dHRvblxuICAgICAgICBhcHBlYXJhbmNlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICBzaXplPVwibWljcm9cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cImV4ZWNDb21tYW5kKCdvdXRkZW50JylcIlxuICAgICAgICB0aXRsZT1cIkRpc21pbnVpciBzYW5ncsOtYVwiXG4gICAgICA+XG4gICAgICAgIDxibWItaWNvbiBpY29uPVwiZm9ybWF0X2luZGVudF9kZWNyZWFzZVwiIFtzaXplXT1cIjI0XCIgLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvc3Bhbj5cblxuICAgIDxzcGFuIGNsYXNzPVwiYm1iX3RleHQtZWRpdG9yLWhlYWRlci1ncm91cFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBibWJCdXR0b25cbiAgICAgICAgYXBwZWFyYW5jZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgc2l6ZT1cIm1pY3JvXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJpbnNlcnRMaW5rKClcIlxuICAgICAgICB0aXRsZT1cIkluc2VydGFyIGVubGFjZVwiXG4gICAgICA+XG4gICAgICAgIDxibWItaWNvbiBpY29uPVwibGlua1wiIFtzaXplXT1cIjI0XCIgLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBibWJCdXR0b25cbiAgICAgICAgYXBwZWFyYW5jZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgc2l6ZT1cIm1pY3JvXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJpbnNlcnRJbWFnZSgpXCJcbiAgICAgICAgdGl0bGU9XCJJbnNlcnRhciBpbWFnZW5cIlxuICAgICAgPlxuICAgICAgICA8Ym1iLWljb24gaWNvbj1cImltYWdlXCIgW3NpemVdPVwiMjRcIiAvPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8IS0tIDxidXR0b24gYm1iQnV0dG9uIGFwcGVhcmFuY2U9XCJ0cmFuc3BhcmVudFwiIHNpemU9XCJtaWNyb1wiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib3BlblRhYmxlRGlhbG9nKClcIiB0aXRsZT1cIkluc2VydGFyIHRhYmxhXCI+XG4gICAgICAgIDxibWItaWNvbiBpY29uPVwidGFibGVfY2hhcnRcIiBbc2l6ZV09XCIyNFwiLz5cbiAgICAgIDwvYnV0dG9uPiAtLT5cbiAgICA8L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJibWJfdGV4dC1lZGl0b3ItaGVhZGVyLWdyb3VwXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGJtYkJ1dHRvblxuICAgICAgICBhcHBlYXJhbmNlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICBzaXplPVwibWljcm9cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cImNsZWFyRm9ybWF0dGluZygpXCJcbiAgICAgICAgdGl0bGU9XCJMaW1waWFyIGZvcm1hdG9cIlxuICAgICAgPlxuICAgICAgICA8Ym1iLWljb24gaWNvbj1cImZvcm1hdF9jbGVhclwiIFtzaXplXT1cIjI0XCIgLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvc3Bhbj5cbiAgPC9oZWFkZXI+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwiYm1iX3RleHQtZWRpdG9yLWNvbnRlbnRcIlxuICAgICNlZGl0b3JcbiAgICBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJcbiAgICAoaW5wdXQpPVwidXBkYXRlQ29udGVudCgpXCJcbiAgICBbaW5uZXJIVE1MXT1cInNhbml0aXplZENvbnRlbnQoKVwiXG4gID48L2Rpdj5cbjwvc2VjdGlvbj5cblxuPCEtLSBEacOhbG9nbyBwYXJhIGRlZmluaXIgZmlsYXMgeSBjb2x1bW5hcyAtLT5cbjxkaWFsb2cgY2xhc3M9XCJkaWFsb2ctb3ZlcmxheVwiIFtvcGVuXT1cInNob3dUYWJsZURpYWxvZ1wiPlxuICA8ZGl2IGNsYXNzPVwiZGlhbG9nXCI+XG4gICAgPGgzPkluc2VydGFyIHRhYmxhPC9oMz5cbiAgICA8bGFiZWwgZm9yPVwicm93c1wiPkZpbGFzOjwvbGFiZWw+XG4gICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cInJvd3NcIiBtaW49XCIxXCIgbWF4PVwiMTBcIiAvPlxuXG4gICAgPGxhYmVsIGZvcj1cImNvbHVtbnNcIj5Db2x1bW5hczo8L2xhYmVsPlxuICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJjb2x1bW5zXCIgbWluPVwiMVwiIG1heD1cIjEwXCIgLz5cblxuICAgIDxkaXYgY2xhc3M9XCJkaWFsb2ctYnV0dG9uc1wiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImluc2VydFRhYmxlKClcIj5JbnNlcnRhcjwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNsb3NlVGFibGVEaWFsb2coKVwiPkNhbmNlbGFyPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaWFsb2c+XG4iXX0=
|
|
184
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm1iLXRleHQtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RzLW5nL3NyYy9saWIvY29tcG9uZW50cy9ibWItdGV4dC1lZGl0b3IvYm1iLXRleHQtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RzLW5nL3NyYy9saWIvY29tcG9uZW50cy9ibWItdGV4dC1lZGl0b3IvYm1iLXRleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFbEUsT0FBTyxFQUNMLDRCQUE0QixHQUU3QixNQUFNLDJEQUEyRCxDQUFDOzs7O0FBV25FLE1BQU0sT0FBTyxzQkFBc0I7SUFZakMsZUFBZTtRQUNiLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM1QyxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2lCQUNwQyx1QkFBc0MsQ0FBQztZQUMxQyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBRTVDLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2xCLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQztnQkFDMUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztZQUNwQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsU0FBaUI7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLFdBQVcsQ0FDZCxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUNuRSxDQUFDO0lBQ0osQ0FBQztJQUVELFlBQ21CLFNBQXVCLEVBQ3ZCLGlCQUE4QztRQUQ5QyxjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBNkI7UUFsQ2pFLFlBQU8sR0FBRyxLQUFLLENBQWMsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUlsRCxxQkFBZ0IsR0FBRyxNQUFNLENBQVcsRUFBRSxDQUFDLENBQUM7UUFDeEMscUJBQWdCLEdBQVcsTUFBTSxDQUFDO1FBQ2xDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLGNBQVMsR0FBVyxDQUFDLENBQUM7UUFDdEIsaUJBQVksR0FBVyxDQUFDLENBQUM7UUFDekIsa0JBQWEsR0FBaUIsSUFBSSxDQUFDO0lBMEJoQyxDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHO1FBQ3ZCLHdDQUF3QztRQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQ25FLENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQy9DLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNuQixzQ0FBc0M7Z0JBQ3RDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFZLEVBQUUsSUFBWTtRQUNyQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBMkIsQ0FBQztRQUNqRCxJQUFJLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsT0FBZSxFQUFFLFFBQXVCLElBQUk7UUFDdEQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzVDLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUM1QixTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN6QyxDQUFDO1FBQ0gsQ0FBQztRQUVELFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLElBQUksU0FBUyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXJCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBOEIsRUFBRSxLQUFpQjtRQUMxRCxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO1FBQ3RFLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxhQUE0QixDQUFDO1FBQ3RELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUM7WUFDakMsT0FBTyxFQUFFLDRCQUE0QjtZQUNyQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUU7WUFDdEIsYUFBYSxFQUFFO2dCQUNiLFVBQVUsRUFBRSxDQUFDLE1BQStCLEVBQUUsRUFBRSxDQUM5QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDN0MsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUU7YUFDeEQ7WUFDRCxTQUFTLEVBQUUsVUFBVTtTQUN0QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsTUFBK0I7UUFDL0MsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssTUFBTSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUIsQ0FBQzthQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLE9BQU8sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUM5RCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUErQjtRQUN4QyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFNUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsVUFBVSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ3RFLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBVyxDQUFDLENBQUM7UUFDL0QsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDO1FBQzVELElBQUksVUFBVSxJQUFJLFVBQVUsWUFBWSxpQkFBaUIsRUFBRSxDQUFDO1lBQzFELFVBQVUsQ0FBQyxNQUFNLEdBQUksTUFBTSxDQUFDLFFBQVEsQ0FBWSxJQUFJLE9BQU8sQ0FBQztZQUU1RCxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNsQixVQUFVLENBQUMsR0FBRyxHQUFHLHFCQUFxQixDQUFDO1lBQ3pDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUErQjtRQUN6QyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFNUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsVUFBVSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ3RFLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBVyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFRCxlQUFlLENBQUMsR0FBVztRQUN6QixJQUFJLENBQUM7WUFDSCxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLDhCQUE4QjtZQUM1QyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELDJDQUEyQztJQUMzQyxlQUFlO1FBQ2IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFDOUIsQ0FBQztJQUVELDRDQUE0QztJQUM1QyxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBRUQsZ0NBQWdDO0lBQ2hDLFdBQVc7UUFDVCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzVCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFFbEMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM1QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsaUJBQWlCLENBQUMsSUFBWSxFQUFFLE9BQWU7UUFDN0MsSUFBSSxTQUFTLEdBQUcseURBQXlELENBQUM7UUFDMUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzlCLFNBQVMsSUFBSSxNQUFNLENBQUM7WUFDcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNqQyxTQUFTLElBQUksK0RBQStELENBQUM7WUFDL0UsQ0FBQztZQUNELFNBQVMsSUFBSSxPQUFPLENBQUM7UUFDdkIsQ0FBQztRQUNELFNBQVMsSUFBSSxVQUFVLENBQUM7UUFDeEIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELHlDQUF5QztJQUN6QyxVQUFVLENBQUMsSUFBWTtRQUNyQixNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDNUMsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxQyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDckIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7K0dBdk1VLHNCQUFzQjttR0FBdEIsc0JBQXNCLHVUQzlCbkMsbzhMQXVNQSwyeE5EL0tZLGtCQUFrQiw0TUFBRSxnQkFBZ0I7OzRGQU1uQyxzQkFBc0I7a0JBVGxDLFNBQVM7K0JBQ0UsaUJBQWlCLGNBQ2YsSUFBSSxXQUNQLENBQUMsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUMsaUJBR2hDLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU07MkhBSzFCLE1BQU07c0JBQTFCLFNBQVM7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIGlucHV0LFxuICBPbkluaXQsXG4gIHNpZ25hbCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEJtYkJ1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvYm1iLWJ1dHRvbi9idXR0b24uZGlyZWN0aXZlJztcbmltcG9ydCB7IEJtYkljb25Db21wb25lbnQgfSBmcm9tICcuLi9ibWItaWNvbi9ibWItaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQm1iUHJvamVjdGlvbkNvbnRlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJvamVjdGlvbi9wcm9qZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQm1iVGV4dEVkaXRvclByb21wdENvbXBvbmVudCxcbiAgSUJtYlRleHRFZGl0b3JQcm9tcHRUeXBlLFxufSBmcm9tICcuL2JtYi10ZXh0LWVkaXRvci1wcm9tcHQvYm1iLXRleHQtZWRpdG9yLXByb21wdC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdibWItdGV4dC1lZGl0b3InLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQm1iQnV0dG9uRGlyZWN0aXZlLCBCbWJJY29uQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL2JtYi10ZXh0LWVkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9ibWItdGV4dC1lZGl0b3IuY29tcG9uZW50LnNjc3MnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQm1iVGV4dEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCB7XG4gIGNvbnRyb2wgPSBpbnB1dDxGb3JtQ29udHJvbD4obmV3IEZvcm1Db250cm9sKCcnKSk7XG5cbiAgQFZpZXdDaGlsZCgnZWRpdG9yJykgZWRpdG9yITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgc2FuaXRpemVkQ29udGVudCA9IHNpZ25hbDxTYWZlSHRtbD4oJycpO1xuICBjdXJyZW50QWxpZ25tZW50OiBzdHJpbmcgPSAnbGVmdCc7XG4gIHNob3dUYWJsZURpYWxvZzogYm9vbGVhbiA9IGZhbHNlO1xuICB0YWJsZVJvd3M6IG51bWJlciA9IDI7XG4gIHRhYmxlQ29sdW1uczogbnVtYmVyID0gMjtcbiAgdXNlclNlbGVjdGlvbjogUmFuZ2UgfCBudWxsID0gbnVsbDtcblxuICBkZXRlY3RBbGlnbm1lbnQoKSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gZ2xvYmFsVGhpcy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApXG4gICAgICAgIC5jb21tb25BbmNlc3RvckNvbnRhaW5lciBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG5cbiAgICAgIGlmIChwYXJlbnRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHRleHRBbGlnbiA9IHBhcmVudEVsZW1lbnQuc3R5bGUudGV4dEFsaWduIHx8ICdsZWZ0JztcbiAgICAgICAgdGhpcy5jdXJyZW50QWxpZ25tZW50ID0gdGV4dEFsaWduO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFwcGx5QWxpZ25tZW50KGFsaWdubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5leGVjQ29tbWFuZCgnc3R5bGVXaXRoQ1NTJywgJ3RydWUnKTtcbiAgICB0aGlzLmV4ZWNDb21tYW5kKFxuICAgICAgJ2p1c3RpZnknICsgYWxpZ25tZW50LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgYWxpZ25tZW50LnNsaWNlKDEpLFxuICAgICk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvamVjdGlvbkNvbnRlbnQ6IEJtYlByb2plY3Rpb25Db250ZW50U2VydmljZSxcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc2FuaXRpemVkQ29udGVudC5zZXQoXG4gICAgICAvLyBOT1NPTkFSOiBJbml0aWFsIGNvbnRlbnQgc2FuaXRpemF0aW9uXG4gICAgICB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCh0aGlzLmNvbnRyb2woKS52YWx1ZSB8fCAnJyksXG4gICAgKTtcblxuICAgIHRoaXMuY29udHJvbCgpLnZhbHVlQ2hhbmdlcz8uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIC8vIE5PU09OQVI6IENsZWFyIGNvbnRlbnQgc2FuaXRpemF0aW9uXG4gICAgICAgIHRoaXMuc2FuaXRpemVkQ29udGVudC5zZXQodGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoJycpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBoYW5kbGVDaGFuZ2UoZXZlbnQ6IEV2ZW50LCB0eXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQ7XG4gICAgaWYgKHRhcmdldD8udmFsdWUpIHtcbiAgICAgIHRoaXMuZXhlY0NvbW1hbmQodHlwZSwgdGFyZ2V0LnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBleGVjQ29tbWFuZChjb21tYW5kOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIGlmICh0aGlzLnVzZXJTZWxlY3Rpb24pIHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGdsb2JhbFRoaXMuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHRoaXMudXNlclNlbGVjdGlvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoY29tbWFuZCwgZmFsc2UsIHZhbHVlIHx8IHVuZGVmaW5lZCk7XG4gICAgdGhpcy51cGRhdGVDb250ZW50KCk7XG5cbiAgICB0aGlzLnVzZXJTZWxlY3Rpb24gPSBudWxsO1xuICB9XG5cbiAgb3BlblByb21wdCh0eXBlOiBJQm1iVGV4dEVkaXRvclByb21wdFR5cGUsIGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy51c2VyU2VsZWN0aW9uID0gZ2xvYmFsVGhpcy5nZXRTZWxlY3Rpb24oKT8uZ2V0UmFuZ2VBdCgwKSB8fCBudWxsO1xuICAgIGNvbnN0IGJ1dHRvbk5vZGUgPSBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIHRoaXMucHJvamVjdGlvbkNvbnRlbnQub3BlbkNvbnRlbnQoe1xuICAgICAgY29udGVudDogQm1iVGV4dEVkaXRvclByb21wdENvbXBvbmVudCxcbiAgICAgIGlucHV0Q29udGV4dDogeyB0eXBlIH0sXG4gICAgICBvdXRwdXRDb250ZXh0OiB7XG4gICAgICAgIGZvcm1WYWx1ZXM6ICh2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PlxuICAgICAgICAgIHRoaXMuaGFuZGxlQ2xvc2VQcm9tcHQoeyAuLi52YWx1ZXMsIHR5cGUgfSksXG4gICAgICAgIGNhbmNlbEZvcm06ICgpID0+IHRoaXMucHJvamVjdGlvbkNvbnRlbnQuY2xvc2VDb250ZW50KCksXG4gICAgICB9LFxuICAgICAgdGFyZ2V0UmVmOiBidXR0b25Ob2RlLFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlQ2xvc2VQcm9tcHQodmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICAgIGlmICh2YWx1ZXNbJ3R5cGUnXSA9PT0gJ2xpbmsnICYmIHZhbHVlc1sncHJvbXB0X3VybCddKSB7XG4gICAgICB0aGlzLmluc2VydExpbmsodmFsdWVzKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlc1sndHlwZSddID09PSAnaW1hZ2UnICYmIHZhbHVlc1sncHJvbXB0X3VybCddKSB7XG4gICAgICB0aGlzLmluc2VydEltYWdlKHZhbHVlcyk7XG4gICAgfVxuICAgIHRoaXMucHJvamVjdGlvbkNvbnRlbnQuY2xvc2VDb250ZW50KCk7XG4gIH1cblxuICBpbnNlcnRMaW5rKHZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSBnbG9iYWxUaGlzLmdldFNlbGVjdGlvbigpO1xuXG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDAgfHwgIXZhbHVlc1sncHJvbXB0X3VybCddKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5leGVjQ29tbWFuZCgnY3JlYXRlTGluaycsIHZhbHVlc1sncHJvbXB0X3VybCddIGFzIHN0cmluZyk7XG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcbiAgICBjb25zdCBwYXJlbnROb2RlID0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIucGFyZW50Tm9kZTtcbiAgICBpZiAocGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlIGluc3RhbmNlb2YgSFRNTEFuY2hvckVsZW1lbnQpIHtcbiAgICAgIHBhcmVudE5vZGUudGFyZ2V0ID0gKHZhbHVlc1sndGFyZ2V0J10gYXMgc3RyaW5nKSB8fCAnX3NlbGYnO1xuXG4gICAgICBpZiAodmFsdWVzWydyZWwnXSkge1xuICAgICAgICBwYXJlbnROb2RlLnJlbCA9ICdub29wZW5lciBub3JlZmVycmVyJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpbnNlcnRJbWFnZSh2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gZ2xvYmFsVGhpcy5nZXRTZWxlY3Rpb24oKTtcblxuICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwIHx8ICF2YWx1ZXNbJ3Byb21wdF91cmwnXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZXhlY0NvbW1hbmQoJ2luc2VydEltYWdlJywgdmFsdWVzWydwcm9tcHRfdXJsJ10gYXMgc3RyaW5nKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbnRlbnQoKSB7XG4gICAgdGhpcy5jb250cm9sKCkuc2V0VmFsdWUodGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpO1xuICB9XG5cbiAgY2xlYXJGb3JtYXR0aW5nKCkge1xuICAgIHRoaXMuZXhlY0NvbW1hbmQoJ3JlbW92ZUZvcm1hdCcpO1xuICAgIHRoaXMuZXhlY0NvbW1hbmQoJ3VubGluaycpO1xuICB9XG5cbiAgZ2V0Q3VycmVudFN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2woKS52YWx1ZTtcbiAgfVxuXG4gIGlzVmFsaWRJbWFnZVVybCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBuZXcgVVJMKHVybCk7IC8vIEludGVudGEgY3JlYXIgdW4gb2JqZXRvIFVSTFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvLyBNw6l0b2RvIHBhcmEgYWJyaXIgZWwgZGnDoWxvZ28gZGUgbGEgdGFibGFcbiAgb3BlblRhYmxlRGlhbG9nKCkge1xuICAgIHRoaXMuc2hvd1RhYmxlRGlhbG9nID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIE3DqXRvZG8gcGFyYSBjZXJyYXIgZWwgZGnDoWxvZ28gZGUgbGEgdGFibGFcbiAgY2xvc2VUYWJsZURpYWxvZygpIHtcbiAgICB0aGlzLnNob3dUYWJsZURpYWxvZyA9IGZhbHNlO1xuICB9XG5cbiAgLy8gTcOpdG9kbyBwYXJhIGluc2VydGFyIGxhIHRhYmxhXG4gIGluc2VydFRhYmxlKCkge1xuICAgIGNvbnN0IHJvd3MgPSB0aGlzLnRhYmxlUm93cztcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy50YWJsZUNvbHVtbnM7XG5cbiAgICBpZiAocm93cyA+IDAgJiYgY29sdW1ucyA+IDApIHtcbiAgICAgIGNvbnN0IHRhYmxlSHRtbCA9IHRoaXMuZ2VuZXJhdGVUYWJsZUh0bWwocm93cywgY29sdW1ucyk7XG4gICAgICB0aGlzLmluc2VydEh0bWwodGFibGVIdG1sKTtcbiAgICAgIHRoaXMuY2xvc2VUYWJsZURpYWxvZygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIE3DqXRvZG8gcGFyYSBnZW5lcmFyIGVsIEhUTUwgZGUgbGEgdGFibGFcbiAgZ2VuZXJhdGVUYWJsZUh0bWwocm93czogbnVtYmVyLCBjb2x1bW5zOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGxldCB0YWJsZUh0bWwgPSAnPHRhYmxlIHN0eWxlPVwiYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgd2lkdGg6IDEwMCU7XCI+JztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgdGFibGVIdG1sICs9ICc8dHI+JztcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRhYmxlSHRtbCArPSBgPHRkIHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgIzAwMDsgcGFkZGluZzogOHB4O1wiPiZuYnNwOzwvdGQ+YDtcbiAgICAgIH1cbiAgICAgIHRhYmxlSHRtbCArPSAnPC90cj4nO1xuICAgIH1cbiAgICB0YWJsZUh0bWwgKz0gJzwvdGFibGU+JztcbiAgICByZXR1cm4gdGFibGVIdG1sO1xuICB9XG5cbiAgLy8gTcOpdG9kbyBwYXJhIGluc2VydGFyIEhUTUwgZW4gZWwgZWRpdG9yXG4gIGluc2VydEh0bWwoaHRtbDogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gZ2xvYmFsVGhpcy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcbiAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZGl2LmlubmVySFRNTCA9IGh0bWw7XG4gICAgICByYW5nZS5pbnNlcnROb2RlKGRpdik7XG4gICAgICB0aGlzLnVwZGF0ZUNvbnRlbnQoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxzZWN0aW9uIGNsYXNzPVwiYm1iX3RleHQtZWRpdG9yXCI+XG4gIDxoZWFkZXIgY2xhc3M9XCJibWJfdGV4dC1lZGl0b3ItaGVhZGVyXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJibWJfdGV4dC1lZGl0b3ItaGVhZGVyLWdyb3VwXCI+XG4gICAgICA8c2VsZWN0XG4gICAgICAgIGlkPVwiQm1iVGV4dEVkaXRvclNlbGVjdFwiXG4gICAgICAgIGNsYXNzPVwiYm1iX3RleHQtZWRpdG9yLWhlYWRlci1zZWxlY3RcIlxuICAgICAgICAoY2hhbmdlKT1cImhhbmRsZUNoYW5nZSgkZXZlbnQsICdmb3JtYXRCbG9jaycpXCJcbiAgICAgICAgdGl0bGU9XCJFc3RpbG8gZGUgcMOhcnJhZm9cIlxuICAgICAgPlxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwicFwiPlDDoXJyYWZvPC9vcHRpb24+XG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJoMVwiPlTDrXR1bG8gMTwvb3B0aW9uPlxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiaDJcIj5Uw610dWxvIDI8L29wdGlvbj5cbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImgzXCI+VMOtdHVsbyAzPC9vcHRpb24+XG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJibG9ja3F1b3RlXCI+Q2l0YTwvb3B0aW9uPlxuICAgICAgPC9zZWxlY3Q+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGJtYkJ1dHRvblxuICAgICAgICBhcHBlYXJhbmNlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICBzaXplPVwibWljcm9cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cImV4ZWNDb21tYW5kKCdib2xkJylcIlxuICAgICAgICB0aXRsZT1cIk5lZ3JpdGFcIlxuICAgICAgPlxuICAgICAgICA8Ym1iLWljb24gaWNvbj1cImZvcm1hdF9ib2xkXCIgW3NpemVdPVwiMjRcIiAvPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGJtYkJ1dHRvblxuICAgICAgICBhcHBlYXJhbmNlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICBzaXplPVwibWljcm9cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cImV4ZWNDb21tYW5kKCdpdGFsaWMnKVwiXG4gICAgICAgIHRpdGxlPVwiQ3Vyc2l2YVwiXG4gICAgICA+XG4gICAgICAgIDxibWItaWNvbiBpY29uPVwiZm9ybWF0X2l0YWxpY1wiIFtzaXplXT1cIjI0XCIgLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBibWJCdXR0b25cbiAgICAgICAgYXBwZWFyYW5jZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgc2l6ZT1cIm1pY3JvXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJleGVjQ29tbWFuZCgndW5kZXJsaW5lJylcIlxuICAgICAgICB0aXRsZT1cIlN1YnJheWFkb1wiXG4gICAgICA+XG4gICAgICAgIDxibWItaWNvbiBpY29uPVwiZm9ybWF0X3VuZGVybGluZWRcIiBbc2l6ZV09XCIyNFwiIC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBpZD1cIkJtYlRleHRFZGl0b3JDb2xvclwiXG4gICAgICAgIHR5cGU9XCJjb2xvclwiXG4gICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlQ2hhbmdlKCRldmVudCwgJ2ZvcmVDb2xvcicpXCJcbiAgICAgICAgdGl0bGU9XCJDb2xvciBkZSB0ZXh0b1wiXG4gICAgICAvPlxuICAgIDwvc3Bhbj5cblxuICAgIDxzcGFuIGNsYXNzPVwiYm1iX3RleHQtZWRpdG9yLWhlYWRlci1ncm91cFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBibWJCdXR0b25cbiAgICAgICAgYXBwZWFyYW5jZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgc2l6ZT1cIm1pY3JvXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJhcHBseUFsaWdubWVudCgnbGVmdCcpXCJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJjdXJyZW50QWxpZ25tZW50ID09PSAnbGVmdCdcIlxuICAgICAgICB0aXRsZT1cIkFsaW5lYXIgYSBsYSBpenF1aWVyZGFcIlxuICAgICAgPlxuICAgICAgICA8Ym1iLWljb24gaWNvbj1cImZvcm1hdF9hbGlnbl9sZWZ0XCIgW3NpemVdPVwiMjRcIiAvPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGJtYkJ1dHRvblxuICAgICAgICBhcHBlYXJhbmNlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICBzaXplPVwibWljcm9cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cImFwcGx5QWxpZ25tZW50KCdjZW50ZXInKVwiXG4gICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiY3VycmVudEFsaWdubWVudCA9PT0gJ2NlbnRlcidcIlxuICAgICAgICB0aXRsZT1cIkNlbnRyYXJcIlxuICAgICAgPlxuICAgICAgICA8Ym1iLWljb24gaWNvbj1cImZvcm1hdF9hbGlnbl9jZW50ZXJcIiBbc2l6ZV09XCIyNFwiIC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgYm1iQnV0dG9uXG4gICAgICAgIGFwcGVhcmFuY2U9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgIHNpemU9XCJtaWNyb1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiYXBwbHlBbGlnbm1lbnQoJ3JpZ2h0JylcIlxuICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImN1cnJlbnRBbGlnbm1lbnQgPT09ICdyaWdodCdcIlxuICAgICAgICB0aXRsZT1cIkFsaW5lYXIgYSBsYSBkZXJlY2hhXCJcbiAgICAgID5cbiAgICAgICAgPGJtYi1pY29uIGljb249XCJmb3JtYXRfYWxpZ25fcmlnaHRcIiBbc2l6ZV09XCIyNFwiIC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L3NwYW4+XG5cbiAgICA8c3BhbiBjbGFzcz1cImJtYl90ZXh0LWVkaXRvci1oZWFkZXItZ3JvdXBcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgYm1iQnV0dG9uXG4gICAgICAgIGFwcGVhcmFuY2U9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgIHNpemU9XCJtaWNyb1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiZXhlY0NvbW1hbmQoJ2luc2VydE9yZGVyZWRMaXN0JylcIlxuICAgICAgICB0aXRsZT1cIkxpc3RhIG51bWVyYWRhXCJcbiAgICAgID5cbiAgICAgICAgPGJtYi1pY29uIGljb249XCJmb3JtYXRfbGlzdF9udW1iZXJlZFwiIFtzaXplXT1cIjI0XCIgLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBibWJCdXR0b25cbiAgICAgICAgYXBwZWFyYW5jZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgc2l6ZT1cIm1pY3JvXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJleGVjQ29tbWFuZCgnaW5zZXJ0VW5vcmRlcmVkTGlzdCcpXCJcbiAgICAgICAgdGl0bGU9XCJMaXN0YSBjb24gdmnDsWV0YXNcIlxuICAgICAgPlxuICAgICAgICA8Ym1iLWljb24gaWNvbj1cImZvcm1hdF9saXN0X2J1bGxldGVkXCIgW3NpemVdPVwiMjRcIiAvPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9zcGFuPlxuXG4gICAgPHNwYW4gY2xhc3M9XCJibWJfdGV4dC1lZGl0b3ItaGVhZGVyLWdyb3VwXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGJtYkJ1dHRvblxuICAgICAgICBhcHBlYXJhbmNlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICBzaXplPVwibWljcm9cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cImV4ZWNDb21tYW5kKCdpbmRlbnQnKVwiXG4gICAgICAgIHRpdGxlPVwiQXVtZW50YXIgc2FuZ3LDrWFcIlxuICAgICAgPlxuICAgICAgICA8Ym1iLWljb24gaWNvbj1cImZvcm1hdF9pbmRlbnRfaW5jcmVhc2VcIiBbc2l6ZV09XCIyNFwiIC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgYm1iQnV0dG9uXG4gICAgICAgIGFwcGVhcmFuY2U9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgIHNpemU9XCJtaWNyb1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiZXhlY0NvbW1hbmQoJ291dGRlbnQnKVwiXG4gICAgICAgIHRpdGxlPVwiRGlzbWludWlyIHNhbmdyw61hXCJcbiAgICAgID5cbiAgICAgICAgPGJtYi1pY29uIGljb249XCJmb3JtYXRfaW5kZW50X2RlY3JlYXNlXCIgW3NpemVdPVwiMjRcIiAvPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9zcGFuPlxuXG4gICAgPHNwYW4gY2xhc3M9XCJibWJfdGV4dC1lZGl0b3ItaGVhZGVyLWdyb3VwXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGJtYkJ1dHRvblxuICAgICAgICBhcHBlYXJhbmNlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICBzaXplPVwibWljcm9cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5Qcm9tcHQoJ2xpbmsnLCAkZXZlbnQpXCJcbiAgICAgICAgdGl0bGU9XCJJbnNlcnRhciBlbmxhY2VcIlxuICAgICAgPlxuICAgICAgICA8Ym1iLWljb24gaWNvbj1cImxpbmtcIiBbc2l6ZV09XCIyNFwiIC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgYm1iQnV0dG9uXG4gICAgICAgIGFwcGVhcmFuY2U9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgIHNpemU9XCJtaWNyb1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwib3BlblByb21wdCgnaW1hZ2UnLCAkZXZlbnQpXCJcbiAgICAgICAgdGl0bGU9XCJJbnNlcnRhciBpbWFnZW5cIlxuICAgICAgPlxuICAgICAgICA8Ym1iLWljb24gaWNvbj1cImltYWdlXCIgW3NpemVdPVwiMjRcIiAvPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8IS0tIDxidXR0b24gYm1iQnV0dG9uIGFwcGVhcmFuY2U9XCJ0cmFuc3BhcmVudFwiIHNpemU9XCJtaWNyb1wiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib3BlblRhYmxlRGlhbG9nKClcIiB0aXRsZT1cIkluc2VydGFyIHRhYmxhXCI+XG4gICAgICAgIDxibWItaWNvbiBpY29uPVwidGFibGVfY2hhcnRcIiBbc2l6ZV09XCIyNFwiLz5cbiAgICAgIDwvYnV0dG9uPiAtLT5cbiAgICA8L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJibWJfdGV4dC1lZGl0b3ItaGVhZGVyLWdyb3VwXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGJtYkJ1dHRvblxuICAgICAgICBhcHBlYXJhbmNlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICBzaXplPVwibWljcm9cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cImNsZWFyRm9ybWF0dGluZygpXCJcbiAgICAgICAgdGl0bGU9XCJMaW1waWFyIGZvcm1hdG9cIlxuICAgICAgPlxuICAgICAgICA8Ym1iLWljb24gaWNvbj1cImZvcm1hdF9jbGVhclwiIFtzaXplXT1cIjI0XCIgLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvc3Bhbj5cbiAgPC9oZWFkZXI+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwiYm1iX3RleHQtZWRpdG9yLWNvbnRlbnRcIlxuICAgICNlZGl0b3JcbiAgICBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJcbiAgICAoaW5wdXQpPVwidXBkYXRlQ29udGVudCgpXCJcbiAgICBbaW5uZXJIVE1MXT1cInNhbml0aXplZENvbnRlbnQoKVwiXG4gID48L2Rpdj5cbjwvc2VjdGlvbj5cblxuPCEtLSBEacOhbG9nbyBwYXJhIGRlZmluaXIgZmlsYXMgeSBjb2x1bW5hcyAtLT5cbjxkaWFsb2cgY2xhc3M9XCJkaWFsb2ctb3ZlcmxheVwiIFtvcGVuXT1cInNob3dUYWJsZURpYWxvZ1wiPlxuICA8ZGl2IGNsYXNzPVwiZGlhbG9nXCI+XG4gICAgPGgzPkluc2VydGFyIHRhYmxhPC9oMz5cbiAgICA8bGFiZWwgZm9yPVwicm93c1wiPkZpbGFzOjwvbGFiZWw+XG4gICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cInJvd3NcIiBtaW49XCIxXCIgbWF4PVwiMTBcIiAvPlxuXG4gICAgPGxhYmVsIGZvcj1cImNvbHVtbnNcIj5Db2x1bW5hczo8L2xhYmVsPlxuICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJjb2x1bW5zXCIgbWluPVwiMVwiIG1heD1cIjEwXCIgLz5cblxuICAgIDxkaXYgY2xhc3M9XCJkaWFsb2ctYnV0dG9uc1wiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImluc2VydFRhYmxlKClcIj5JbnNlcnRhcjwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNsb3NlVGFibGVEaWFsb2coKVwiPkNhbmNlbGFyPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaWFsb2c+XG4iXX0=
|