@ti-tecnologico-de-monterrey-oficial/ds-ng 1.5.1317-c → 1.5.1317-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.
Files changed (68) hide show
  1. package/assets/i18n/en.json +33 -1
  2. package/assets/i18n/es.json +34 -2
  3. package/assets/styles/main.min.css +1 -1
  4. package/assets/styles/main.min.css.map +1 -1
  5. package/assets/styles/micro.min.css +1 -0
  6. package/assets/styles/micro.min.css.map +1 -0
  7. package/esm2022/assets/i18n/en.json +33 -1
  8. package/esm2022/assets/i18n/es.json +34 -2
  9. package/esm2022/lib/components/bmb-account-statement/bmb-account-statement.component.mjs +2 -2
  10. package/esm2022/lib/components/bmb-calendar/bmb-calendar.component.mjs +9 -4
  11. package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-template-mobile/bmb-calendar-template-mobile.component.mjs +13 -8
  12. package/esm2022/lib/components/bmb-check-external-link-button/bmb-check-external-link-button.component.mjs +3 -3
  13. package/esm2022/lib/components/bmb-checkbox/bmb-checkbox.component.mjs +1 -1
  14. package/esm2022/lib/components/bmb-datepicker/bmb-datepicker.component.mjs +2 -2
  15. package/esm2022/lib/components/bmb-digital-id/bmb-digital-id.component.mjs +2 -2
  16. package/esm2022/lib/components/bmb-dropdown/bmb-dropdown.component.mjs +4 -2
  17. package/esm2022/lib/components/bmb-dropzone/bmb-dropzone.component.mjs +177 -91
  18. package/esm2022/lib/components/bmb-filter-card/bmb-filter-card.component.mjs +2 -2
  19. package/esm2022/lib/components/bmb-input/bmb-input-validator/bmb-input-validator.component.mjs +3 -2
  20. package/esm2022/lib/components/bmb-input/bmb-input.component.mjs +2 -2
  21. package/esm2022/lib/components/bmb-input-phone-number/bmb-input-phone-number.component.mjs +2 -2
  22. package/esm2022/lib/components/bmb-input-tags/bmb-input-tags.component.mjs +2 -2
  23. package/esm2022/lib/components/bmb-portal/bmb-projected-content/bmb-projected-content.component.mjs +2 -2
  24. package/esm2022/lib/components/bmb-progress-bar/bmb-progress-bar.component.mjs +30 -9
  25. package/esm2022/lib/components/bmb-radial/bmb-radial.component.mjs +1 -1
  26. package/esm2022/lib/components/bmb-search-input/bmb-search-input.component.mjs +1 -1
  27. package/esm2022/lib/components/bmb-switch/bmb-switch.component.mjs +5 -7
  28. package/esm2022/lib/components/bmb-tables/bmb-tables.component.mjs +66 -8
  29. package/esm2022/lib/components/bmb-text-editor/bmb-text-editor-prompt/bmb-text-editor-prompt.component.mjs +51 -0
  30. package/esm2022/lib/components/bmb-text-editor/bmb-text-editor.component.mjs +66 -24
  31. package/esm2022/lib/components/bmb-text-link/bmb-text-link.component.mjs +11 -17
  32. package/esm2022/lib/components/bmb-value-counter/bmb-value-counter.component.mjs +33 -15
  33. package/esm2022/lib/components/utils/bmb-dropdown-content/bmb-dropdown-content.component.mjs +9 -3
  34. package/esm2022/lib/directives/bmb-layout/bmb-layout-item.directive.mjs +2 -2
  35. package/esm2022/lib/directives/bmb-layout/bmb-vertical-layout/bmb-vertical-layout-item.directive.mjs +6 -3
  36. package/esm2022/lib/services/projection/projection.service.mjs +1 -1
  37. package/esm2022/lib/utils/formControl.mjs +6 -4
  38. package/fesm2022/ti-tecnologico-de-monterrey-oficial-ds-ng.mjs +712 -387
  39. package/fesm2022/ti-tecnologico-de-monterrey-oficial-ds-ng.mjs.map +1 -1
  40. package/lib/components/bmb-dropdown/bmb-dropdown.component.d.ts +3 -2
  41. package/lib/components/bmb-dropzone/bmb-dropzone.component.d.ts +39 -20
  42. package/lib/components/bmb-input/bmb-input-validator/bmb-input-validator.component.d.ts +3 -2
  43. package/lib/components/bmb-progress-bar/bmb-progress-bar.component.d.ts +8 -2
  44. package/lib/components/bmb-tables/bmb-tables.component.d.ts +8 -1
  45. package/lib/components/bmb-text-editor/bmb-text-editor-prompt/bmb-text-editor-prompt.component.d.ts +13 -0
  46. package/lib/components/bmb-text-editor/bmb-text-editor.component.d.ts +10 -4
  47. package/lib/components/bmb-text-link/bmb-text-link.component.d.ts +1 -2
  48. package/lib/components/bmb-value-counter/bmb-value-counter.component.d.ts +10 -4
  49. package/lib/components/utils/bmb-dropdown-content/bmb-dropdown-content.component.d.ts +2 -1
  50. package/lib/directives/bmb-layout/bmb-vertical-layout/bmb-vertical-layout-item.directive.d.ts +2 -1
  51. package/lib/utils/formControl.d.ts +2 -2
  52. package/package.json +4 -4
  53. package/esm2022/lib/services/calendar.service.mjs +0 -51
  54. package/esm2022/lib/services/index.mjs +0 -3
  55. package/esm2022/lib/services/native-modal.service.mjs +0 -60
  56. package/esm2022/lib/services/notification.service.mjs +0 -84
  57. package/esm2022/lib/services/projection.service.mjs +0 -49
  58. package/esm2022/lib/services/tabs.service.mjs +0 -30
  59. package/esm2022/lib/services/theme.service.mjs +0 -30
  60. package/esm2022/lib/services/toast.service.mjs +0 -24
  61. package/lib/services/calendar.service.d.ts +0 -15
  62. package/lib/services/index.d.ts +0 -2
  63. package/lib/services/native-modal.service.d.ts +0 -18
  64. package/lib/services/notification.service.d.ts +0 -20
  65. package/lib/services/projection.service.d.ts +0 -31
  66. package/lib/services/tabs.service.d.ts +0 -13
  67. package/lib/services/theme.service.d.ts +0 -11
  68. 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: "17.3.12", ngImport: i0, type: BmbTextEditorPromptComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
32
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", 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: "17.3.12", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm1iLXRleHQtZWRpdG9yLXByb21wdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kcy1uZy9zcmMvbGliL2NvbXBvbmVudHMvYm1iLXRleHQtZWRpdG9yL2JtYi10ZXh0LWVkaXRvci1wcm9tcHQvYm1iLXRleHQtZWRpdG9yLXByb21wdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kcy1uZy9zcmMvbGliL2NvbXBvbmVudHMvYm1iLXRleHQtZWRpdG9yL2JtYi10ZXh0LWVkaXRvci1wcm9tcHQvYm1iLXRleHQtZWRpdG9yLXByb21wdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUNMLGdCQUFnQixFQUNoQix1QkFBdUIsR0FDeEIsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNsRyxPQUFPLEVBQWUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDckYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtGQUFrRixDQUFDO0FBQzlILE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHVGQUF1RixDQUFDO0FBQ3ZJLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOztBQXdCM0UsTUFBTSxPQUFPLDRCQUE0QjtJQXBCekM7UUFxQkUsU0FBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQTRCLENBQUM7UUFFbEQsZUFBVSxHQUFHLE1BQU0sRUFBMkIsQ0FBQztRQUMvQyxlQUFVLEdBQUcsTUFBTSxFQUFRLENBQUM7UUFFNUIsY0FBUyxHQUFjLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBWTFDO0lBVkMsY0FBYyxDQUFDLElBQVk7UUFDekIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQWdCLENBQUM7SUFDakQsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFO1lBQ3hCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDOUI7SUFDSCxDQUFDOytHQWpCVSw0QkFBNEI7bUdBQTVCLDRCQUE0Qix1UkN2Q3pDLGtsSkFnSUEsa0hEekdJLGdCQUFnQiwwSkFDaEIseUJBQXlCLHNJQUN6QixrQkFBa0IsNE1BQ2xCLHVCQUF1Qix3SEFDdkIsaUJBQWlCLG1pQkFDakIsYUFBYSxrREFDYixvQkFBb0Isb2FBQ3BCLGtCQUFrQixtSkFDbEIsc0JBQXNCLGlKQUN0QiwwQkFBMEIsOEhBQzFCLDhCQUE4Qix3R0FDOUIsa0JBQWtCOzs0RkFLVCw0QkFBNEI7a0JBcEJ4QyxTQUFTOytCQUNFLDRCQUE0QixjQUMxQixJQUFJLFdBQ1A7d0JBQ1AsZ0JBQWdCO3dCQUNoQix5QkFBeUI7d0JBQ3pCLGtCQUFrQjt3QkFDbEIsdUJBQXVCO3dCQUN2QixpQkFBaUI7d0JBQ2pCLGFBQWE7d0JBQ2Isb0JBQW9CO3dCQUNwQixrQkFBa0I7d0JBQ2xCLHNCQUFzQjt3QkFDdEIsMEJBQTBCO3dCQUMxQiw4QkFBOEI7d0JBQzlCLGtCQUFrQjtxQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEJtYkNhcmRDb21wb25lbnQsXG4gIEJtYkNhcmRDb250ZW50Q29tcG9uZW50LFxufSBmcm9tICcuLi8uLi9ibWItY2FyZC9ibWItY2FyZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQm1iRm9ybVZhbGlkYXRvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2JtYi1mb3JtLXZhbGlkYXRvci9ibWItZm9ybS12YWxpZGF0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCbWJCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL2JtYi1idXR0b24vYnV0dG9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBCbWJJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2JtYi1pbnB1dC9ibWItaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcy90cmFuc2xhdGlvbnMnO1xuaW1wb3J0IHsgQm1iQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi8uLi9ibWItY2hlY2tib3gvYm1iLWNoZWNrYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCbWJMYXlvdXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL2JtYi1sYXlvdXQvYm1iLWxheW91dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQm1iTGF5b3V0SXRlbURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvYm1iLWxheW91dC9ibWItbGF5b3V0LWl0ZW0uZGlyZWN0aXZlJztcbmltcG9ydCB7IEJtYlZlcnRpY2FsTGF5b3V0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9ibWItbGF5b3V0L2JtYi12ZXJ0aWNhbC1sYXlvdXQvYm1iLXZlcnRpY2FsLWxheW91dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQm1iVmVydGljYWxMYXlvdXRJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9ibWItbGF5b3V0L2JtYi12ZXJ0aWNhbC1sYXlvdXQvYm1iLXZlcnRpY2FsLWxheW91dC1pdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBCbWJSYWRpYWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi9ibWItcmFkaWFsL2JtYi1yYWRpYWwuY29tcG9uZW50JztcblxuZXhwb3J0IHR5cGUgSUJtYlRleHRFZGl0b3JQcm9tcHRUeXBlID0gJ2xpbmsnIHwgJ2ltYWdlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWJtYi10ZXh0LWVkaXRvci1wcm9tcHQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQm1iQ2FyZENvbXBvbmVudCxcbiAgICBCbWJGb3JtVmFsaWRhdG9yQ29tcG9uZW50LFxuICAgIEJtYkJ1dHRvbkRpcmVjdGl2ZSxcbiAgICBCbWJDYXJkQ29udGVudENvbXBvbmVudCxcbiAgICBCbWJJbnB1dENvbXBvbmVudCxcbiAgICBUcmFuc2xhdGVQaXBlLFxuICAgIEJtYkNoZWNrYm94Q29tcG9uZW50LFxuICAgIEJtYkxheW91dERpcmVjdGl2ZSxcbiAgICBCbWJMYXlvdXRJdGVtRGlyZWN0aXZlLFxuICAgIEJtYlZlcnRpY2FsTGF5b3V0RGlyZWN0aXZlLFxuICAgIEJtYlZlcnRpY2FsTGF5b3V0SXRlbURpcmVjdGl2ZSxcbiAgICBCbWJSYWRpYWxDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9ibWItdGV4dC1lZGl0b3ItcHJvbXB0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2JtYi10ZXh0LWVkaXRvci1wcm9tcHQuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBCbWJUZXh0RWRpdG9yUHJvbXB0Q29tcG9uZW50IHtcbiAgdHlwZSA9IGlucHV0LnJlcXVpcmVkPElCbWJUZXh0RWRpdG9yUHJvbXB0VHlwZT4oKTtcblxuICBmb3JtVmFsdWVzID0gb3V0cHV0PFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpO1xuICBjYW5jZWxGb3JtID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgZm9ybUdyb3VwOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcblxuICBnZXRGb3JtQ29udHJvbChuYW1lOiBzdHJpbmcpOiBGb3JtQ29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldChuYW1lKSBhcyBGb3JtQ29udHJvbDtcbiAgfVxuXG4gIGhhbmRsZUZvcm1Hcm91cFN0YXRlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm1Hcm91cC52YWxpZCkge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcbiAgICAgIHRoaXMuZm9ybVZhbHVlcy5lbWl0KHZhbHVlcyk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYm1iX3RleHQtZWRpdG9yLXByb21wdFwiPlxuICA8Ym1iLWNhcmQ+XG4gICAgPGJtYi1jYXJkLWNvbnRlbnQgcGFkZGluZz1cImxcIj5cbiAgICAgIDxibWItZm9ybS12YWxpZGF0b3JcbiAgICAgICAgWyhmb3JtR3JvdXApXT1cImZvcm1Hcm91cFwiXG4gICAgICAgIChmb3JtR3JvdXBTdGF0ZSk9XCJoYW5kbGVGb3JtR3JvdXBTdGF0ZSgpXCJcbiAgICAgID5cbiAgICAgICAgPHNlY3Rpb24gYm1iVmVydGljYWxMYXlvdXQgbWFyZ2luPVwibm9uZVwiPlxuICAgICAgICAgIDxkaXYgYm1iVmVydGljYWxMYXlvdXRJdGVtPlxuICAgICAgICAgICAgPGJtYi1pbnB1dFxuICAgICAgICAgICAgICBpbnB1dElkPVwicHJvbXB0X3VybFwiXG4gICAgICAgICAgICAgIG5hbWU9XCJwcm9tcHRfdXJsXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIlxuICAgICAgICAgICAgICAgIHR5cGUoKSA9PT0gJ2xpbmsnXG4gICAgICAgICAgICAgICAgICA/ICgndGV4dF9lZGl0b3IucHJvbXB0LmxpbmsubGlua19sYWJlbCcgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgICAgICAgICA6ICgndGV4dF9lZGl0b3IucHJvbXB0LmltYWdlLmltYWdlX2xhYmVsJyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2lzUmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtoZWxwZXJNZXNzYWdlXT1cIlxuICAgICAgICAgICAgICAgIHR5cGUoKSA9PT0gJ2xpbmsnXG4gICAgICAgICAgICAgICAgICA/ICgndGV4dF9lZGl0b3IucHJvbXB0LmxpbmsubGlua19oZWxwZXInIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgICAgOiAoJ3RleHRfZWRpdG9yLnByb21wdC5pbWFnZS5pbWFnZV9oZWxwZXInIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAgICAgICAgICAgdHlwZSgpID09PSAnbGluaydcbiAgICAgICAgICAgICAgICAgID8gKCd0ZXh0X2VkaXRvci5wcm9tcHQubGluay5saW5rX3BsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgICAgIDogKCd0ZXh0X2VkaXRvci5wcm9tcHQuaW1hZ2UuaW1hZ2VfcGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBAc3dpdGNoICh0eXBlKCkpIHtcbiAgICAgICAgICAgIEBjYXNlICgnbGluaycpIHtcbiAgICAgICAgICAgICAgPGRpdiBibWJWZXJ0aWNhbExheW91dEl0ZW0+XG4gICAgICAgICAgICAgICAgPGgzPlxuICAgICAgICAgICAgICAgICAge3sgJ3RleHRfZWRpdG9yLnByb21wdC5saW5rLnRhcmdldF9oZWxwZXInIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICA8ZGl2IGJtYkxheW91dCBtYXJnaW49XCJub25lXCIgZ2FwU2l6ZT1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgIDxibWItcmFkaWFsXG4gICAgICAgICAgICAgICAgICAgIGlucHV0SWQ9XCJ0YXJnZXRfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwidGFyZ2V0XCJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJCbGFua1wiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbnRyb2xdPVwiZ2V0Rm9ybUNvbnRyb2woJ3RhcmdldCcpXCJcbiAgICAgICAgICAgICAgICAgICAgYm1iTGF5b3V0SXRlbVxuICAgICAgICAgICAgICAgICAgICBbY29sU21dPVwiMlwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPGJtYi1yYWRpYWxcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRJZD1cInRhcmdldF9zZWxmXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cInRhcmdldFwiXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiU2VsZlwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiX3NlbGZcIlxuICAgICAgICAgICAgICAgICAgICBibWJMYXlvdXRJdGVtXG4gICAgICAgICAgICAgICAgICAgIFtjb250cm9sXT1cImdldEZvcm1Db250cm9sKCd0YXJnZXQnKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb2xTbV09XCIyXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8Ym1iLXJhZGlhbFxuICAgICAgICAgICAgICAgICAgICBpbnB1dElkPVwidGFyZ2V0X3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ0YXJnZXRcIlxuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIlBhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiX3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgIGJtYkxheW91dEl0ZW1cbiAgICAgICAgICAgICAgICAgICAgW2NvbnRyb2xdPVwiZ2V0Rm9ybUNvbnRyb2woJ3RhcmdldCcpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbFNtXT1cIjJcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxibWItcmFkaWFsXG4gICAgICAgICAgICAgICAgICAgIGlucHV0SWQ9XCJ0YXJnZXRfdG9wXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cInRhcmdldFwiXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiVG9wXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJfdG9wXCJcbiAgICAgICAgICAgICAgICAgICAgYm1iTGF5b3V0SXRlbVxuICAgICAgICAgICAgICAgICAgICBbY29udHJvbF09XCJnZXRGb3JtQ29udHJvbCgndGFyZ2V0JylcIlxuICAgICAgICAgICAgICAgICAgICBbY29sU21dPVwiMlwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBibWJWZXJ0aWNhbExheW91dEl0ZW0+XG4gICAgICAgICAgICAgICAgPGJtYi1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgaW5wdXRJZD1cImFkZF9yZWxcIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cInJlbFwiXG4gICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIndGV4dF9lZGl0b3IucHJvbXB0LmxpbmsucmVsX2xhYmVsJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoJ2ltYWdlJykge1xuICAgICAgICAgICAgICA8ZGl2IGJtYlZlcnRpY2FsTGF5b3V0SXRlbT5cbiAgICAgICAgICAgICAgICA8Ym1iLWlucHV0XG4gICAgICAgICAgICAgICAgICBpbnB1dElkPVwicHJvbXB0X2FsdFwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwicHJvbXB0X2FsdFwiXG4gICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3RleHRfZWRpdG9yLnByb21wdC5pbWFnZS5hbHRfbGFiZWwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIFtoZWxwZXJNZXNzYWdlXT1cIlxuICAgICAgICAgICAgICAgICAgICAndGV4dF9lZGl0b3IucHJvbXB0LmltYWdlLmFsdF9oZWxwZXInIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgICAgICAgICAndGV4dF9lZGl0b3IucHJvbXB0LmltYWdlLmFsdF9wbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIDxmb290ZXIgYm1iVmVydGljYWxMYXlvdXRJdGVtPlxuICAgICAgICAgICAgPGRpdiBibWJMYXlvdXQgbWFyZ2luPVwibm9uZVwiIGdhcFNpemU9XCJtXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBibWJMYXlvdXRJdGVtXG4gICAgICAgICAgICAgICAgW2NvbFNtXT1cIjRcIlxuICAgICAgICAgICAgICAgIGJtYkJ1dHRvblxuICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7ICd0ZXh0X2VkaXRvci5wcm9tcHQucHJpbWFyeV9idXR0b24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgYm1iTGF5b3V0SXRlbVxuICAgICAgICAgICAgICAgIFtjb2xTbV09XCI0XCJcbiAgICAgICAgICAgICAgICBibWJCdXR0b25cbiAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwic2Vjb25kYXJ5LW91dGxpbmVkXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsRm9ybS5lbWl0KClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgJ3RleHRfZWRpdG9yLnByb21wdC5zZWNvbmRhcnlfYnV0dG9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZm9vdGVyPlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L2JtYi1mb3JtLXZhbGlkYXRvcj5cbiAgICA8L2JtYi1jYXJkLWNvbnRlbnQ+XG4gIDwvYm1iLWNhcmQ+XG48L2Rpdj5cbiJdfQ==
@@ -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 = window.getSelection();
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(this.sanitizer.bypassSecurityTrustHtml(this.control().value || ''));
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
- insertLink() {
55
- const url = prompt('Ingrese la URL:');
56
- if (url) {
57
- this.execCommand('createLink', url);
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 = window.getSelection();
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: "17.3.12", ngImport: i0, type: BmbTextEditorComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
133
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.12", 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: "17.3.12", 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: "17.3.12", 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: "17.3.12", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm1iLXRleHQtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RzLW5nL3NyYy9saWIvY29tcG9uZW50cy9ibWItdGV4dC1lZGl0b3IvYm1iLXRleHQtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RzLW5nL3NyYy9saWIvY29tcG9uZW50cy9ibWItdGV4dC1lZGl0b3IvYm1iLXRleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7OztBQVdsRSxNQUFNLE9BQU8sc0JBQXNCO0lBV2pDLGVBQWU7UUFDYixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEMsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUU7WUFDekMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7aUJBQ3BDLHVCQUFzQyxDQUFDO1lBQzFDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7WUFFNUMsSUFBSSxhQUFhLEVBQUU7Z0JBQ2pCLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQztnQkFDMUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQzthQUNu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Q0FBQztZQUNwQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNoQyxTQUFTLElBQUksK0RBQStELENBQUM7YUFDOUU7WUFDRCxTQUFTLElBQUksT0FBTyxDQUFDO1NBQ3RCO1FBQ0QsU0FBUyxJQUFJLFVBQVUsQ0FBQztRQUN4QixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQseUNBQXlDO0lBQ3pDLFVBQVUsQ0FBQyxJQUFZO1FBQ3JCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QyxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRTtZQUN6QyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDckIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDdEI7SUFDSCxDQUFDOytHQXBKVSxzQkFBc0I7bUdBQXRCLHNCQUFzQix1VEN6Qm5DLHc2TEF1TUEsMnhORHBMWSxrQkFBa0IsNE1BQUUsZ0JBQWdCOzs0RkFNbkMsc0JBQXNCO2tCQVRsQyxTQUFTOytCQUNFLGlCQUFpQixjQUNmLElBQUksV0FDUCxDQUFDLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLGlCQUdoQyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNO2lGQUsxQixNQUFNO3NCQUExQixTQUFTO3VCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBpbnB1dCxcbiAgT25Jbml0LFxuICBzaWduYWwsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBCbWJCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2JtYi1idXR0b24vYnV0dG9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBCbWJJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vYm1iLWljb24vYm1iLWljb24uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYm1iLXRleHQtZWRpdG9yJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0JtYkJ1dHRvbkRpcmVjdGl2ZSwgQm1iSWNvbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9ibWItdGV4dC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vYm1iLXRleHQtZWRpdG9yLmNvbXBvbmVudC5zY3NzJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEJtYlRleHRFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQge1xuICBjb250cm9sID0gaW5wdXQ8Rm9ybUNvbnRyb2w+KG5ldyBGb3JtQ29udHJvbCgnJykpO1xuXG4gIEBWaWV3Q2hpbGQoJ2VkaXRvcicpIGVkaXRvciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIHNhbml0aXplZENvbnRlbnQgPSBzaWduYWw8U2FmZUh0bWw+KCcnKTtcbiAgY3VycmVudEFsaWdubWVudDogc3RyaW5nID0gJ2xlZnQnO1xuICBzaG93VGFibGVEaWFsb2c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdGFibGVSb3dzOiBudW1iZXIgPSAyO1xuICB0YWJsZUNvbHVtbnM6IG51bWJlciA9IDI7XG5cbiAgZGV0ZWN0QWxpZ25tZW50KCkge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApXG4gICAgICAgIC5jb21tb25BbmNlc3RvckNvbnRhaW5lciBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG5cbiAgICAgIGlmIChwYXJlbnRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHRleHRBbGlnbiA9IHBhcmVudEVsZW1lbnQuc3R5bGUudGV4dEFsaWduIHx8ICdsZWZ0JztcbiAgICAgICAgdGhpcy5jdXJyZW50QWxpZ25tZW50ID0gdGV4dEFsaWduO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFwcGx5QWxpZ25tZW50KGFsaWdubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5leGVjQ29tbWFuZCgnc3R5bGVXaXRoQ1NTJywgJ3RydWUnKTtcbiAgICB0aGlzLmV4ZWNDb21tYW5kKFxuICAgICAgJ2p1c3RpZnknICsgYWxpZ25tZW50LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgYWxpZ25tZW50LnNsaWNlKDEpLFxuICAgICk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc2FuaXRpemVkQ29udGVudC5zZXQodGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoXG4gICAgICB0aGlzLmNvbnRyb2woKS52YWx1ZSB8fCAnJyxcbiAgICApKTtcblxuICAgIHRoaXMuY29udHJvbCgpLnZhbHVlQ2hhbmdlcz8uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICB0aGlzLnNhbml0aXplZENvbnRlbnQuc2V0KHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKCcnKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgaGFuZGxlQ2hhbmdlKGV2ZW50OiBFdmVudCwgdHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50O1xuICAgIGlmICh0YXJnZXQ/LnZhbHVlKSB7XG4gICAgICB0aGlzLmV4ZWNDb21tYW5kKHR5cGUsIHRhcmdldC52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZXhlY0NvbW1hbmQoY29tbWFuZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZChjb21tYW5kLCBmYWxzZSwgdmFsdWUgfHwgdW5kZWZpbmVkKTtcbiAgICB0aGlzLnVwZGF0ZUNvbnRlbnQoKTtcbiAgfVxuXG4gIGluc2VydExpbmsoKSB7XG4gICAgY29uc3QgdXJsID0gcHJvbXB0KCdJbmdyZXNlIGxhIFVSTDonKTtcbiAgICBpZiAodXJsKSB7XG4gICAgICB0aGlzLmV4ZWNDb21tYW5kKCdjcmVhdGVMaW5rJywgdXJsKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVDb250ZW50KCkge1xuICAgIHRoaXMuY29udHJvbCgpLnNldFZhbHVlKHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcbiAgfVxuXG4gIGNsZWFyRm9ybWF0dGluZygpIHtcbiAgICB0aGlzLmV4ZWNDb21tYW5kKCdyZW1vdmVGb3JtYXQnKTtcbiAgICB0aGlzLmV4ZWNDb21tYW5kKCd1bmxpbmsnKTtcbiAgfVxuXG4gIGdldEN1cnJlbnRTdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sKCkudmFsdWU7XG4gIH1cblxuICBpbnNlcnRJbWFnZSgpIHtcbiAgICBjb25zdCB1cmwgPSBwcm9tcHQoJ0luZ3Jlc2UgbGEgVVJMIGRlIGxhIGltYWdlbjonKTtcbiAgICBpZiAodXJsKSB7XG4gICAgICBpZiAodGhpcy5pc1ZhbGlkSW1hZ2VVcmwodXJsKSkge1xuICAgICAgICB0aGlzLmV4ZWNDb21tYW5kKCdpbnNlcnRJbWFnZScsIHVybCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGVydCgnTGEgVVJMIGRlIGxhIGltYWdlbiBubyBlcyB2w6FsaWRhLicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzVmFsaWRJbWFnZVVybCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBuZXcgVVJMKHVybCk7IC8vIEludGVudGEgY3JlYXIgdW4gb2JqZXRvIFVSTFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvLyBNw6l0b2RvIHBhcmEgYWJyaXIgZWwgZGnDoWxvZ28gZGUgbGEgdGFibGFcbiAgb3BlblRhYmxlRGlhbG9nKCkge1xuICAgIHRoaXMuc2hvd1RhYmxlRGlhbG9nID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIE3DqXRvZG8gcGFyYSBjZXJyYXIgZWwgZGnDoWxvZ28gZGUgbGEgdGFibGFcbiAgY2xvc2VUYWJsZURpYWxvZygpIHtcbiAgICB0aGlzLnNob3dUYWJsZURpYWxvZyA9IGZhbHNlO1xuICB9XG5cbiAgLy8gTcOpdG9kbyBwYXJhIGluc2VydGFyIGxhIHRhYmxhXG4gIGluc2VydFRhYmxlKCkge1xuICAgIGNvbnN0IHJvd3MgPSB0aGlzLnRhYmxlUm93cztcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy50YWJsZUNvbHVtbnM7XG5cbiAgICBpZiAocm93cyA+IDAgJiYgY29sdW1ucyA+IDApIHtcbiAgICAgIGNvbnN0IHRhYmxlSHRtbCA9IHRoaXMuZ2VuZXJhdGVUYWJsZUh0bWwocm93cywgY29sdW1ucyk7XG4gICAgICB0aGlzLmluc2VydEh0bWwodGFibGVIdG1sKTtcbiAgICAgIHRoaXMuY2xvc2VUYWJsZURpYWxvZygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIE3DqXRvZG8gcGFyYSBnZW5lcmFyIGVsIEhUTUwgZGUgbGEgdGFibGFcbiAgZ2VuZXJhdGVUYWJsZUh0bWwocm93czogbnVtYmVyLCBjb2x1bW5zOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGxldCB0YWJsZUh0bWwgPSAnPHRhYmxlIHN0eWxlPVwiYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgd2lkdGg6IDEwMCU7XCI+JztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgdGFibGVIdG1sICs9ICc8dHI+JztcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRhYmxlSHRtbCArPSBgPHRkIHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgIzAwMDsgcGFkZGluZzogOHB4O1wiPiZuYnNwOzwvdGQ+YDtcbiAgICAgIH1cbiAgICAgIHRhYmxlSHRtbCArPSAnPC90cj4nO1xuICAgIH1cbiAgICB0YWJsZUh0bWwgKz0gJzwvdGFibGU+JztcbiAgICByZXR1cm4gdGFibGVIdG1sO1xuICB9XG5cbiAgLy8gTcOpdG9kbyBwYXJhIGluc2VydGFyIEhUTUwgZW4gZWwgZWRpdG9yXG4gIGluc2VydEh0bWwoaHRtbDogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7XG4gICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBkaXYuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgIHJhbmdlLmluc2VydE5vZGUoZGl2KTtcbiAgICAgIHRoaXMudXBkYXRlQ29udGVudCgpO1xuICAgIH1cbiAgfVxufVxuIiwiPHNlY3Rpb24gY2xhc3M9XCJibWJfdGV4dC1lZGl0b3JcIj5cbiAgPGhlYWRlciBjbGFzcz1cImJtYl90ZXh0LWVkaXRvci1oZWFkZXJcIj5cbiAgICA8c3BhbiBjbGFzcz1cImJtYl90ZXh0LWVkaXRvci1oZWFkZXItZ3JvdXBcIj5cbiAgICAgIDxzZWxlY3RcbiAgICAgICAgaWQ9XCJCbWJUZXh0RWRpdG9yU2VsZWN0XCJcbiAgICAgICAgY2xhc3M9XCJibWJfdGV4dC1lZGl0b3ItaGVhZGVyLXNlbGVjdFwiXG4gICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlQ2hhbmdlKCRldmVudCwgJ2Zvcm1hdEJsb2NrJylcIlxuICAgICAgICB0aXRsZT1cIkVzdGlsbyBkZSBww6FycmFmb1wiXG4gICAgICA+XG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJwXCI+UMOhcnJhZm88L29wdGlvbj5cbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImgxXCI+VMOtdHVsbyAxPC9vcHRpb24+XG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJoMlwiPlTDrXR1bG8gMjwvb3B0aW9uPlxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiaDNcIj5Uw610dWxvIDM8L29wdGlvbj5cbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJsb2NrcXVvdGVcIj5DaXRhPC9vcHRpb24+XG4gICAgICA8L3NlbGVjdD5cbiAgICAgIDxidXR0b25cbiAgICAgICAgYm1iQnV0dG9uXG4gICAgICAgIGFwcGVhcmFuY2U9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgIHNpemU9XCJtaWNyb1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiZXhlY0NvbW1hbmQoJ2JvbGQnKVwiXG4gICAgICAgIHRpdGxlPVwiTmVncml0YVwiXG4gICAgICA+XG4gICAgICAgIDxibWItaWNvbiBpY29uPVwiZm9ybWF0X2JvbGRcIiBbc2l6ZV09XCIyNFwiIC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgYm1iQnV0dG9uXG4gICAgICAgIGFwcGVhcmFuY2U9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgIHNpemU9XCJtaWNyb1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiZXhlY0NvbW1hbmQoJ2l0YWxpYycpXCJcbiAgICAgICAgdGl0bGU9XCJDdXJzaXZhXCJcbiAgICAgID5cbiAgICAgICAgPGJtYi1pY29uIGljb249XCJmb3JtYXRfaXRhbGljXCIgW3NpemVdPVwiMjRcIiAvPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGJtYkJ1dHRvblxuICAgICAgICBhcHBlYXJhbmNlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICBzaXplPVwibWljcm9cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cImV4ZWNDb21tYW5kKCd1bmRlcmxpbmUnKVwiXG4gICAgICAgIHRpdGxlPVwiU3VicmF5YWRvXCJcbiAgICAgID5cbiAgICAgICAgPGJtYi1pY29uIGljb249XCJmb3JtYXRfdW5kZXJsaW5lZFwiIFtzaXplXT1cIjI0XCIgLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPVwiQm1iVGV4dEVkaXRvckNvbG9yXCJcbiAgICAgICAgdHlwZT1cImNvbG9yXCJcbiAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVDaGFuZ2UoJGV2ZW50LCAnZm9yZUNvbG9yJylcIlxuICAgICAgICB0aXRsZT1cIkNvbG9yIGRlIHRleHRvXCJcbiAgICAgIC8+XG4gICAgPC9zcGFuPlxuXG4gICAgPHNwYW4gY2xhc3M9XCJibWJfdGV4dC1lZGl0b3ItaGVhZGVyLWdyb3VwXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGJtYkJ1dHRvblxuICAgICAgICBhcHBlYXJhbmNlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICBzaXplPVwibWljcm9cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cImFwcGx5QWxpZ25tZW50KCdsZWZ0JylcIlxuICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImN1cnJlbnRBbGlnbm1lbnQgPT09ICdsZWZ0J1wiXG4gICAgICAgIHRpdGxlPVwiQWxpbmVhciBhIGxhIGl6cXVpZXJkYVwiXG4gICAgICA+XG4gICAgICAgIDxibWItaWNvbiBpY29uPVwiZm9ybWF0X2FsaWduX2xlZnRcIiBbc2l6ZV09XCIyNFwiIC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgYm1iQnV0dG9uXG4gICAgICAgIGFwcGVhcmFuY2U9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgIHNpemU9XCJtaWNyb1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiYXBwbHlBbGlnbm1lbnQoJ2NlbnRlcicpXCJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJjdXJyZW50QWxpZ25tZW50ID09PSAnY2VudGVyJ1wiXG4gICAgICAgIHRpdGxlPVwiQ2VudHJhclwiXG4gICAgICA+XG4gICAgICAgIDxibWItaWNvbiBpY29uPVwiZm9ybWF0X2FsaWduX2NlbnRlclwiIFtzaXplXT1cIjI0XCIgLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBibWJCdXR0b25cbiAgICAgICAgYXBwZWFyYW5jZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgc2l6ZT1cIm1pY3JvXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJhcHBseUFsaWdubWVudCgncmlnaHQnKVwiXG4gICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiY3VycmVudEFsaWdubWVudCA9PT0gJ3JpZ2h0J1wiXG4gICAgICAgIHRpdGxlPVwiQWxpbmVhciBhIGxhIGRlcmVjaGFcIlxuICAgICAgPlxuICAgICAgICA8Ym1iLWljb24gaWNvbj1cImZvcm1hdF9hbGlnbl9yaWdodFwiIFtzaXplXT1cIjI0XCIgLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvc3Bhbj5cblxuICAgIDxzcGFuIGNsYXNzPVwiYm1iX3RleHQtZWRpdG9yLWhlYWRlci1ncm91cFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBibWJCdXR0b25cbiAgICAgICAgYXBwZWFyYW5jZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgc2l6ZT1cIm1pY3JvXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJleGVjQ29tbWFuZCgnaW5zZXJ0T3JkZXJlZExpc3QnKVwiXG4gICAgICAgIHRpdGxlPVwiTGlzdGEgbnVtZXJhZGFcIlxuICAgICAgPlxuICAgICAgICA8Ym1iLWljb24gaWNvbj1cImZvcm1hdF9saXN0X251bWJlcmVkXCIgW3NpemVdPVwiMjRcIiAvPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGJtYkJ1dHRvblxuICAgICAgICBhcHBlYXJhbmNlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICBzaXplPVwibWljcm9cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cImV4ZWNDb21tYW5kKCdpbnNlcnRVbm9yZGVyZWRMaXN0JylcIlxuICAgICAgICB0aXRsZT1cIkxpc3RhIGNvbiB2acOxZXRhc1wiXG4gICAgICA+XG4gICAgICAgIDxibWItaWNvbiBpY29uPVwiZm9ybWF0X2xpc3RfYnVsbGV0ZWRcIiBbc2l6ZV09XCIyNFwiIC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L3NwYW4+XG5cbiAgICA8c3BhbiBjbGFzcz1cImJtYl90ZXh0LWVkaXRvci1oZWFkZXItZ3JvdXBcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgYm1iQnV0dG9uXG4gICAgICAgIGFwcGVhcmFuY2U9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgIHNpemU9XCJtaWNyb1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiZXhlY0NvbW1hbmQoJ2luZGVudCcpXCJcbiAgICAgICAgdGl0bGU9XCJBdW1lbnRhciBzYW5ncsOtYVwiXG4gICAgICA+XG4gICAgICAgIDxibWItaWNvbiBpY29uPVwiZm9ybWF0X2luZGVudF9pbmNyZWFzZVwiIFtzaXplXT1cIjI0XCIgLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBibWJCdXR0b25cbiAgICAgICAgYXBwZWFyYW5jZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgc2l6ZT1cIm1pY3JvXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJleGVjQ29tbWFuZCgnb3V0ZGVudCcpXCJcbiAgICAgICAgdGl0bGU9XCJEaXNtaW51aXIgc2FuZ3LDrWFcIlxuICAgICAgPlxuICAgICAgICA8Ym1iLWljb24gaWNvbj1cImZvcm1hdF9pbmRlbnRfZGVjcmVhc2VcIiBbc2l6ZV09XCIyNFwiIC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L3NwYW4+XG5cbiAgICA8c3BhbiBjbGFzcz1cImJtYl90ZXh0LWVkaXRvci1oZWFkZXItZ3JvdXBcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgYm1iQnV0dG9uXG4gICAgICAgIGFwcGVhcmFuY2U9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgIHNpemU9XCJtaWNyb1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiaW5zZXJ0TGluaygpXCJcbiAgICAgICAgdGl0bGU9XCJJbnNlcnRhciBlbmxhY2VcIlxuICAgICAgPlxuICAgICAgICA8Ym1iLWljb24gaWNvbj1cImxpbmtcIiBbc2l6ZV09XCIyNFwiIC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgYm1iQnV0dG9uXG4gICAgICAgIGFwcGVhcmFuY2U9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgIHNpemU9XCJtaWNyb1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiaW5zZXJ0SW1hZ2UoKVwiXG4gICAgICAgIHRpdGxlPVwiSW5zZXJ0YXIgaW1hZ2VuXCJcbiAgICAgID5cbiAgICAgICAgPGJtYi1pY29uIGljb249XCJpbWFnZVwiIFtzaXplXT1cIjI0XCIgLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPCEtLSA8YnV0dG9uIGJtYkJ1dHRvbiBhcHBlYXJhbmNlPVwidHJhbnNwYXJlbnRcIiBzaXplPVwibWljcm9cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9wZW5UYWJsZURpYWxvZygpXCIgdGl0bGU9XCJJbnNlcnRhciB0YWJsYVwiPlxuICAgICAgICA8Ym1iLWljb24gaWNvbj1cInRhYmxlX2NoYXJ0XCIgW3NpemVdPVwiMjRcIi8+XG4gICAgICA8L2J1dHRvbj4gLS0+XG4gICAgPC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwiYm1iX3RleHQtZWRpdG9yLWhlYWRlci1ncm91cFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBibWJCdXR0b25cbiAgICAgICAgYXBwZWFyYW5jZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgc2l6ZT1cIm1pY3JvXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJjbGVhckZvcm1hdHRpbmcoKVwiXG4gICAgICAgIHRpdGxlPVwiTGltcGlhciBmb3JtYXRvXCJcbiAgICAgID5cbiAgICAgICAgPGJtYi1pY29uIGljb249XCJmb3JtYXRfY2xlYXJcIiBbc2l6ZV09XCIyNFwiIC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L3NwYW4+XG4gIDwvaGVhZGVyPlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cImJtYl90ZXh0LWVkaXRvci1jb250ZW50XCJcbiAgICAjZWRpdG9yXG4gICAgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXG4gICAgKGlucHV0KT1cInVwZGF0ZUNvbnRlbnQoKVwiXG4gICAgW2lubmVySFRNTF09XCJzYW5pdGl6ZWRDb250ZW50KClcIlxuICA+PC9kaXY+XG48L3NlY3Rpb24+XG5cbjwhLS0gRGnDoWxvZ28gcGFyYSBkZWZpbmlyIGZpbGFzIHkgY29sdW1uYXMgLS0+XG48ZGlhbG9nIGNsYXNzPVwiZGlhbG9nLW92ZXJsYXlcIiBbb3Blbl09XCJzaG93VGFibGVEaWFsb2dcIj5cbiAgPGRpdiBjbGFzcz1cImRpYWxvZ1wiPlxuICAgIDxoMz5JbnNlcnRhciB0YWJsYTwvaDM+XG4gICAgPGxhYmVsIGZvcj1cInJvd3NcIj5GaWxhczo8L2xhYmVsPlxuICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJyb3dzXCIgbWluPVwiMVwiIG1heD1cIjEwXCIgLz5cblxuICAgIDxsYWJlbCBmb3I9XCJjb2x1bW5zXCI+Q29sdW1uYXM6PC9sYWJlbD5cbiAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwiY29sdW1uc1wiIG1pbj1cIjFcIiBtYXg9XCIxMFwiIC8+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWJ1dHRvbnNcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJpbnNlcnRUYWJsZSgpXCI+SW5zZXJ0YXI8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjbG9zZVRhYmxlRGlhbG9nKClcIj5DYW5jZWxhcjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGlhbG9nPlxuIl19
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm1iLXRleHQtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RzLW5nL3NyYy9saWIvY29tcG9uZW50cy9ibWItdGV4dC1lZGl0b3IvYm1iLXRleHQtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RzLW5nL3NyYy9saWIvY29tcG9uZW50cy9ibWItdGV4dC1lZGl0b3IvYm1iLXRleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFbEUsT0FBTyxFQUNMLDRCQUE0QixHQUU3QixNQUFNLDJEQUEyRCxDQUFDOzs7O0FBV25FLE1BQU0sT0FBTyxzQkFBc0I7SUFZakMsZUFBZTtRQUNiLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM1QyxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRTtZQUN6QyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztpQkFDcEMsdUJBQXNDLENBQUM7WUFDMUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztZQUU1QyxJQUFJLGFBQWEsRUFBRTtnQkFDakIsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksTUFBTSxD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QVk7UUFDckIsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzVDLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFO1lBQ3pDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQyxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNyQixLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN0QjtJQUNILENBQUM7K0dBdk1VLHNCQUFzQjttR0FBdEIsc0JBQXNCLHVUQzlCbkMsbzhMQXVNQSwyeE5EL0tZLGtCQUFrQiw0TUFBRSxnQkFBZ0I7OzRGQU1uQyxzQkFBc0I7a0JBVGxDLFNBQVM7K0JBQ0UsaUJBQWlCLGNBQ2YsSUFBSSxXQUNQLENBQUMsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUMsaUJBR2hDLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU07MkhBSzFCLE1BQU07c0JBQTFCLFNBQVM7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIGlucHV0LFxuICBPbkluaXQsXG4gIHNpZ25hbCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEJtYkJ1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvYm1iLWJ1dHRvbi9idXR0b24uZGlyZWN0aXZlJztcbmltcG9ydCB7IEJtYkljb25Db21wb25lbnQgfSBmcm9tICcuLi9ibWItaWNvbi9ibWItaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQm1iUHJvamVjdGlvbkNvbnRlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJvamVjdGlvbi9wcm9qZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQm1iVGV4dEVkaXRvclByb21wdENvbXBvbmVudCxcbiAgSUJtYlRleHRFZGl0b3JQcm9tcHRUeXBlLFxufSBmcm9tICcuL2JtYi10ZXh0LWVkaXRvci1wcm9tcHQvYm1iLXRleHQtZWRpdG9yLXByb21wdC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdibWItdGV4dC1lZGl0b3InLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQm1iQnV0dG9uRGlyZWN0aXZlLCBCbWJJY29uQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL2JtYi10ZXh0LWVkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9ibWItdGV4dC1lZGl0b3IuY29tcG9uZW50LnNjc3MnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQm1iVGV4dEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCB7XG4gIGNvbnRyb2wgPSBpbnB1dDxGb3JtQ29udHJvbD4obmV3IEZvcm1Db250cm9sKCcnKSk7XG5cbiAgQFZpZXdDaGlsZCgnZWRpdG9yJykgZWRpdG9yITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgc2FuaXRpemVkQ29udGVudCA9IHNpZ25hbDxTYWZlSHRtbD4oJycpO1xuICBjdXJyZW50QWxpZ25tZW50OiBzdHJpbmcgPSAnbGVmdCc7XG4gIHNob3dUYWJsZURpYWxvZzogYm9vbGVhbiA9IGZhbHNlO1xuICB0YWJsZVJvd3M6IG51bWJlciA9IDI7XG4gIHRhYmxlQ29sdW1uczogbnVtYmVyID0gMjtcbiAgdXNlclNlbGVjdGlvbjogUmFuZ2UgfCBudWxsID0gbnVsbDtcblxuICBkZXRlY3RBbGlnbm1lbnQoKSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gZ2xvYmFsVGhpcy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApXG4gICAgICAgIC5jb21tb25BbmNlc3RvckNvbnRhaW5lciBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG5cbiAgICAgIGlmIChwYXJlbnRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHRleHRBbGlnbiA9IHBhcmVudEVsZW1lbnQuc3R5bGUudGV4dEFsaWduIHx8ICdsZWZ0JztcbiAgICAgICAgdGhpcy5jdXJyZW50QWxpZ25tZW50ID0gdGV4dEFsaWduO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFwcGx5QWxpZ25tZW50KGFsaWdubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5leGVjQ29tbWFuZCgnc3R5bGVXaXRoQ1NTJywgJ3RydWUnKTtcbiAgICB0aGlzLmV4ZWNDb21tYW5kKFxuICAgICAgJ2p1c3RpZnknICsgYWxpZ25tZW50LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgYWxpZ25tZW50LnNsaWNlKDEpLFxuICAgICk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvamVjdGlvbkNvbnRlbnQ6IEJtYlByb2plY3Rpb25Db250ZW50U2VydmljZSxcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc2FuaXRpemVkQ29udGVudC5zZXQoXG4gICAgICAvLyBOT1NPTkFSOiBJbml0aWFsIGNvbnRlbnQgc2FuaXRpemF0aW9uXG4gICAgICB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCh0aGlzLmNvbnRyb2woKS52YWx1ZSB8fCAnJyksXG4gICAgKTtcblxuICAgIHRoaXMuY29udHJvbCgpLnZhbHVlQ2hhbmdlcz8uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIC8vIE5PU09OQVI6IENsZWFyIGNvbnRlbnQgc2FuaXRpemF0aW9uXG4gICAgICAgIHRoaXMuc2FuaXRpemVkQ29udGVudC5zZXQodGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoJycpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBoYW5kbGVDaGFuZ2UoZXZlbnQ6IEV2ZW50LCB0eXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQ7XG4gICAgaWYgKHRhcmdldD8udmFsdWUpIHtcbiAgICAgIHRoaXMuZXhlY0NvbW1hbmQodHlwZSwgdGFyZ2V0LnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBleGVjQ29tbWFuZChjb21tYW5kOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIGlmICh0aGlzLnVzZXJTZWxlY3Rpb24pIHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGdsb2JhbFRoaXMuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHRoaXMudXNlclNlbGVjdGlvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoY29tbWFuZCwgZmFsc2UsIHZhbHVlIHx8IHVuZGVmaW5lZCk7XG4gICAgdGhpcy51cGRhdGVDb250ZW50KCk7XG5cbiAgICB0aGlzLnVzZXJTZWxlY3Rpb24gPSBudWxsO1xuICB9XG5cbiAgb3BlblByb21wdCh0eXBlOiBJQm1iVGV4dEVkaXRvclByb21wdFR5cGUsIGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy51c2VyU2VsZWN0aW9uID0gZ2xvYmFsVGhpcy5nZXRTZWxlY3Rpb24oKT8uZ2V0UmFuZ2VBdCgwKSB8fCBudWxsO1xuICAgIGNvbnN0IGJ1dHRvbk5vZGUgPSBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIHRoaXMucHJvamVjdGlvbkNvbnRlbnQub3BlbkNvbnRlbnQoe1xuICAgICAgY29udGVudDogQm1iVGV4dEVkaXRvclByb21wdENvbXBvbmVudCxcbiAgICAgIGlucHV0Q29udGV4dDogeyB0eXBlIH0sXG4gICAgICBvdXRwdXRDb250ZXh0OiB7XG4gICAgICAgIGZvcm1WYWx1ZXM6ICh2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+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=