asksuite-citrus 1.5.11 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/assets/citrus-i18n/en.json +2 -0
  2. package/assets/citrus-i18n/es.json +2 -0
  3. package/assets/citrus-i18n/pt.json +2 -0
  4. package/esm2022/lib/asksuite-citrus.module.mjs +14 -4
  5. package/esm2022/lib/classes/richtext-wrapper.mjs +274 -0
  6. package/esm2022/lib/classes/toolbox-bubble.mjs +46 -0
  7. package/esm2022/lib/classes/toolbox-topbar.mjs +34 -0
  8. package/esm2022/lib/classes/toolbox.mjs +107 -0
  9. package/esm2022/lib/components/autocomplete/autocomplete.component.mjs +2 -2
  10. package/esm2022/lib/components/avatar/avatar.component.mjs +2 -2
  11. package/esm2022/lib/components/box/box.component.mjs +2 -2
  12. package/esm2022/lib/components/button/button.component.mjs +2 -2
  13. package/esm2022/lib/components/character-counter/character-counter.component.mjs +2 -2
  14. package/esm2022/lib/components/checkbox/checkbox.component.mjs +2 -2
  15. package/esm2022/lib/components/chips/chips.component.mjs +2 -2
  16. package/esm2022/lib/components/date-picker/date-picker-calendar/date-picker-calendar.component.mjs +2 -2
  17. package/esm2022/lib/components/date-picker/date-picker.component.mjs +2 -2
  18. package/esm2022/lib/components/dropdown-container/dropdown-container.component.mjs +2 -2
  19. package/esm2022/lib/components/input/input.component.mjs +2 -2
  20. package/esm2022/lib/components/modal/modal.component.mjs +2 -2
  21. package/esm2022/lib/components/pagination/pagination.component.mjs +2 -2
  22. package/esm2022/lib/components/richtext-toolbox-core/richtext-toolbox-core.component.mjs +82 -0
  23. package/esm2022/lib/components/richtext-url-prompt/richtext-url-prompt-state.service.mjs +16 -0
  24. package/esm2022/lib/components/richtext-url-prompt/richtext-url-prompt.component.mjs +66 -0
  25. package/esm2022/lib/components/select/select.component.mjs +2 -2
  26. package/esm2022/lib/components/table/table.component.mjs +2 -2
  27. package/esm2022/lib/components/toast/toast.component.mjs +3 -3
  28. package/esm2022/lib/constants/richtext-toolbox.constants.mjs +40 -0
  29. package/esm2022/lib/constants/url-regex.constant.mjs +2 -0
  30. package/esm2022/lib/directives/button/ask-button.directive.mjs +3 -8
  31. package/esm2022/lib/directives/index.mjs +2 -1
  32. package/esm2022/lib/directives/richtext-toolbox/richtext-toolbox.directive.mjs +163 -0
  33. package/esm2022/lib/helpers/are-objects-equal.helper.mjs +4 -0
  34. package/esm2022/lib/interfaces/richtext-toolbox.interface.mjs +2 -0
  35. package/esm2022/public-api.mjs +3 -1
  36. package/fesm2022/asksuite-citrus.mjs +865 -60
  37. package/fesm2022/asksuite-citrus.mjs.map +1 -1
  38. package/lib/asksuite-citrus.module.d.ts +10 -7
  39. package/lib/classes/richtext-wrapper.d.ts +48 -0
  40. package/lib/classes/toolbox-bubble.d.ts +13 -0
  41. package/lib/classes/toolbox-topbar.d.ts +8 -0
  42. package/lib/classes/toolbox.d.ts +31 -0
  43. package/lib/components/richtext-toolbox-core/richtext-toolbox-core.component.d.ts +25 -0
  44. package/lib/components/richtext-url-prompt/richtext-url-prompt-state.service.d.ts +6 -0
  45. package/lib/components/richtext-url-prompt/richtext-url-prompt.component.d.ts +19 -0
  46. package/lib/components/toast/toast.component.d.ts +1 -2
  47. package/lib/constants/richtext-toolbox.constants.d.ts +4 -0
  48. package/lib/constants/url-regex.constant.d.ts +1 -0
  49. package/lib/directives/button/ask-button.directive.d.ts +1 -1
  50. package/lib/directives/index.d.ts +1 -0
  51. package/lib/directives/richtext-toolbox/richtext-toolbox.directive.d.ts +39 -0
  52. package/lib/helpers/are-objects-equal.helper.d.ts +1 -0
  53. package/lib/interfaces/richtext-toolbox.interface.d.ts +54 -0
  54. package/package.json +3 -2
  55. package/public-api.d.ts +1 -0
  56. package/styles/ask-mixins.scss +45 -0
  57. package/styles/font-weights.scss +1 -0
  58. package/styles/quill.scss +18 -0
  59. package/styles/styles.scss +2 -30
@@ -1,12 +1,14 @@
1
1
  {
2
2
  "APPLY": "Apply",
3
3
  "CANCEL": "Cancel",
4
+ "CLEAR": "Clear",
4
5
  "CUSTOM_PERIOD": "Custom period",
5
6
  "LAST_30_DAYS": "Last 30 days",
6
7
  "LAST_7_DAYS": "Last 7 days",
7
8
  "LAST_QUARTER": "Last quarter",
8
9
  "NO_OPTIONS": "No option",
9
10
  "RESULTS_PER_PAGE": "Results per page",
11
+ "SAVE": "Save",
10
12
  "SEE_LESS": "See less",
11
13
  "SEE_MORE": "View more",
12
14
  "SELECT_ALL": "Select all",
@@ -1,12 +1,14 @@
1
1
  {
2
2
  "APPLY": "Aplicar",
3
3
  "CANCEL": "Cancelar",
4
+ "CLEAR": "Borrar",
4
5
  "CUSTOM_PERIOD": "Período personalizado",
5
6
  "LAST_30_DAYS": "Últimos 30 días",
6
7
  "LAST_7_DAYS": "Los últimos 7 días",
7
8
  "LAST_QUARTER": "Último cuarto",
8
9
  "NO_OPTIONS": "Ninguna opción",
9
10
  "RESULTS_PER_PAGE": "Resultados por página",
11
+ "SAVE": "Guardar",
10
12
  "SEE_LESS": "Ver menos",
11
13
  "SEE_MORE": "Ver más",
12
14
  "SELECT_ALL": "Seleccionar todo",
@@ -1,12 +1,14 @@
1
1
  {
2
2
  "APPLY": "Aplicar",
3
3
  "CANCEL": "Cancelar",
4
+ "CLEAR": "Limpar",
4
5
  "CUSTOM_PERIOD": "Período customizado",
5
6
  "LAST_30_DAYS": "Últimos 30 dias",
6
7
  "LAST_7_DAYS": "Últimos 7 dias",
7
8
  "LAST_QUARTER": "Último trimestre",
8
9
  "NO_OPTIONS": "Nenhuma opção",
9
10
  "RESULTS_PER_PAGE": "Resultados por página",
11
+ "SAVE": "Salvar",
10
12
  "SEE_LESS": "Ver menos",
11
13
  "SEE_MORE": "Ver mais",
12
14
  "SELECT_ALL": "Selecionar todas",
@@ -19,7 +19,7 @@ import { SkeletonComponent } from './components/skeleton/skeleton.component';
19
19
  import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
20
20
  import { ToastComponent } from './components/toast/toast.component';
21
21
  import { SpinnerComponent } from "./directives/spinner/spinner.component";
22
- import { AskButtonDirective, AskTooltipDirective, AutofocusDirective, BadgeDirective, ScrollDirective, SpinnerDirective, AskDropdownDirective } from "./directives";
22
+ import { AskButtonDirective, AskTooltipDirective, AutofocusDirective, BadgeDirective, ScrollDirective, SpinnerDirective, AskDropdownDirective, RichtextToolboxDirective } from "./directives";
23
23
  import { ModalBodyDirective, ModalComponent, ModalFooterDirective, ModalHeaderDirective } from './components/modal';
24
24
  import { CharacterCounterComponent } from './components/character-counter/character-counter.component';
25
25
  import { AccordionComponent } from "./components/accordion/accordion.component";
@@ -27,6 +27,8 @@ import { ExtendablePanelComponent } from "./components/accordion/extendable-pane
27
27
  import { TableComponent } from './components/table/table.component';
28
28
  import { PaginationComponent } from './components/pagination/pagination.component';
29
29
  import { PaginatePipe } from './pipes/paginate/paginate.pipe';
30
+ import { RichtextUrlPromptComponent } from './components/richtext-url-prompt/richtext-url-prompt.component';
31
+ import { RichtextToolboxCoreComponent } from './components/richtext-toolbox-core/richtext-toolbox-core.component';
30
32
  import * as i0 from "@angular/core";
31
33
  import * as i1 from "@ngx-translate/core";
32
34
  export class AsksuiteCitrusModule {
@@ -61,7 +63,10 @@ export class AsksuiteCitrusModule {
61
63
  ExtendablePanelComponent,
62
64
  TableComponent,
63
65
  PaginationComponent,
64
- PaginatePipe], imports: [CommonModule,
66
+ PaginatePipe,
67
+ RichtextToolboxDirective,
68
+ RichtextUrlPromptComponent,
69
+ RichtextToolboxCoreComponent], imports: [CommonModule,
65
70
  FormsModule,
66
71
  ReactiveFormsModule,
67
72
  CdkOverlayOrigin,
@@ -94,7 +99,8 @@ export class AsksuiteCitrusModule {
94
99
  ExtendablePanelComponent,
95
100
  TableComponent,
96
101
  PaginationComponent,
97
- PaginatePipe] }); }
102
+ PaginatePipe,
103
+ RichtextToolboxDirective] }); }
98
104
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: AsksuiteCitrusModule, imports: [CommonModule,
99
105
  FormsModule,
100
106
  ReactiveFormsModule,
@@ -138,6 +144,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
138
144
  TableComponent,
139
145
  PaginationComponent,
140
146
  PaginatePipe,
147
+ RichtextToolboxDirective,
148
+ RichtextUrlPromptComponent,
149
+ RichtextToolboxCoreComponent,
141
150
  ],
142
151
  imports: [
143
152
  CommonModule,
@@ -179,7 +188,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
179
188
  TableComponent,
180
189
  PaginationComponent,
181
190
  PaginatePipe,
191
+ RichtextToolboxDirective,
182
192
  ],
183
193
  }]
184
194
  }] });
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNrc3VpdGUtY2l0cnVzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Fza3N1aXRlLWNpdHJ1cy9zcmMvbGliL2Fza3N1aXRlLWNpdHJ1cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDMUcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDekYsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDaEIsYUFBYSxHQUNkLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhFQUE4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YXIvY29yZSc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2lucHV0L2lucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQm94Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2JveC9ib3guY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQXZhdGFyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2F2YXRhci9hdmF0YXIuY29tcG9uZW50JztcbmltcG9ydCB7IERyb3Bkb3duQ29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2Ryb3Bkb3duLWNvbnRhaW5lci9kcm9wZG93bi1jb250YWluZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEF1dG9jb21wbGV0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBDZGtDb25uZWN0ZWRPdmVybGF5LFxuICBDZGtPdmVybGF5T3JpZ2luLFxuICBPdmVybGF5TW9kdWxlLFxufSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDaGlwc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jaGlwcy9jaGlwcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVQaWNrZXJDYWxlbmRhckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci1jYWxlbmRhci9kYXRlLXBpY2tlci1jYWxlbmRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTa2VsZXRvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9za2VsZXRvbi9za2VsZXRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmd4U2tlbGV0b25Mb2FkZXJNb2R1bGUgfSBmcm9tICduZ3gtc2tlbGV0b24tbG9hZGVyJztcbmltcG9ydCB7IFRvYXN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RvYXN0L3RvYXN0LmNvbXBvbmVudCc7XG5pbXBvcnQge1NwaW5uZXJDb21wb25lbnR9IGZyb20gXCIuL2RpcmVjdGl2ZXMvc3Bpbm5lci9zcGlubmVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtcbiAgQXNrQnV0dG9uRGlyZWN0aXZlLFxuICBBc2tUb29sdGlwRGlyZWN0aXZlLFxuICBBdXRvZm9jdXNEaXJlY3RpdmUsXG4gIEJhZGdlRGlyZWN0aXZlLFxuICBTY3JvbGxEaXJlY3RpdmUsXG4gIFNwaW5uZXJEaXJlY3RpdmUsXG4gIEFza0Ryb3Bkb3duRGlyZWN0aXZlXG59IGZyb20gXCIuL2RpcmVjdGl2ZXNcIjtcbmltcG9ydCB7TW9kYWxCb2R5RGlyZWN0aXZlLCBNb2RhbENvbXBvbmVudCwgTW9kYWxGb290ZXJEaXJlY3RpdmUsIE1vZGFsSGVhZGVyRGlyZWN0aXZlfSBmcm9tICcuL2NvbXBvbmVudHMvbW9kYWwnO1xuaW1wb3J0IHsgQ2hhcmFjdGVyQ291bnRlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jaGFyYWN0ZXItY291bnRlci9jaGFyYWN0ZXItY291bnRlci5jb21wb25lbnQnO1xuaW1wb3J0IHtBY2NvcmRpb25Db21wb25lbnR9IGZyb20gXCIuL2NvbXBvbmVudHMvYWNjb3JkaW9uL2FjY29yZGlvbi5jb21wb25lbnRcIjtcbmltcG9ydCB7RXh0ZW5kYWJsZVBhbmVsQ29tcG9uZW50fSBmcm9tIFwiLi9jb21wb25lbnRzL2FjY29yZGlvbi9leHRlbmRhYmxlLXBhbmVsL2V4dGVuZGFibGUtcGFuZWwuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGFnaW5hdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFBhZ2luYXRlUGlwZSB9IGZyb20gJy4vcGlwZXMvcGFnaW5hdGUvcGFnaW5hdGUucGlwZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICBJbnB1dENvbXBvbmVudCxcbiAgICBTZWxlY3RDb21wb25lbnQsXG4gICAgQm94Q29tcG9uZW50LFxuICAgIEF2YXRhckNvbXBvbmVudCxcbiAgICBEcm9wZG93bkNvbnRhaW5lckNvbXBvbmVudCxcbiAgICBBc2tEcm9wZG93bkRpcmVjdGl2ZSxcbiAgICBBdXRvY29tcGxldGVDb21wb25lbnQsXG4gICAgQ2hpcHNDb21wb25lbnQsXG4gICAgQ2hlY2tib3hDb21wb25lbnQsXG4gICAgRGF0ZVBpY2tlckNvbXBvbmVudCxcbiAgICBEYXRlUGlja2VyQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgU2tlbGV0b25Db21wb25lbnQsXG4gICAgU3Bpbm5lckNvbXBvbmVudCxcbiAgICBTcGlubmVyRGlyZWN0aXZlLFxuICAgIEJhZGdlRGlyZWN0aXZlLFxuICAgIEF1dG9mb2N1c0RpcmVjdGl2ZSxcbiAgICBTY3JvbGxEaXJlY3RpdmUsXG4gICAgQXNrVG9vbHRpcERpcmVjdGl2ZSxcbiAgICBUb2FzdENvbXBvbmVudCxcbiAgICBBc2tCdXR0b25EaXJlY3RpdmUsXG4gICAgTW9kYWxDb21wb25lbnQsXG4gICAgTW9kYWxCb2R5RGlyZWN0aXZlLFxuICAgIE1vZGFsSGVhZGVyRGlyZWN0aXZlLFxuICAgIE1vZGFsRm9vdGVyRGlyZWN0aXZlLFxuICAgIENoYXJhY3RlckNvdW50ZXJDb21wb25lbnQsXG4gICAgQWNjb3JkaW9uQ29tcG9uZW50LFxuICAgIEV4dGVuZGFibGVQYW5lbENvbXBvbmVudCxcbiAgICBUYWJsZUNvbXBvbmVudCxcbiAgICBQYWdpbmF0aW9uQ29tcG9uZW50LFxuICAgIFBhZ2luYXRlUGlwZSxcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIENka092ZXJsYXlPcmlnaW4sXG4gICAgQ2RrQ29ubmVjdGVkT3ZlcmxheSxcbiAgICBPdmVybGF5TW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZS5mb3JDaGlsZCgpLFxuICAgIE5neFNrZWxldG9uTG9hZGVyTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBCdXR0b25Db21wb25lbnQsXG4gICAgSW5wdXRDb21wb25lbnQsXG4gICAgU2VsZWN0Q29tcG9uZW50LFxuICAgIEJveENvbXBvbmVudCxcbiAgICBBdmF0YXJDb21wb25lbnQsXG4gICAgRHJvcGRvd25Db250YWluZXJDb21wb25lbnQsXG4gICAgQXNrRHJvcGRvd25EaXJlY3RpdmUsXG4gICAgQXV0b2NvbXBsZXRlQ29tcG9uZW50LFxuICAgIENoaXBzQ29tcG9uZW50LFxuICAgIENoZWNrYm94Q29tcG9uZW50LFxuICAgIERhdGVQaWNrZXJDb21wb25lbnQsXG4gICAgRGF0ZVBpY2tlckNhbGVuZGFyQ29tcG9uZW50LFxuICAgIFNrZWxldG9uQ29tcG9uZW50LFxuICAgIFNwaW5uZXJEaXJlY3RpdmUsXG4gICAgQmFkZ2VEaXJlY3RpdmUsXG4gICAgQXV0b2ZvY3VzRGlyZWN0aXZlLFxuICAgIFNjcm9sbERpcmVjdGl2ZSxcbiAgICBBc2tUb29sdGlwRGlyZWN0aXZlLFxuICAgIEFza0J1dHRvbkRpcmVjdGl2ZSxcbiAgICBNb2RhbEJvZHlEaXJlY3RpdmUsXG4gICAgTW9kYWxIZWFkZXJEaXJlY3RpdmUsXG4gICAgTW9kYWxGb290ZXJEaXJlY3RpdmUsXG4gICAgQ2hhcmFjdGVyQ291bnRlckNvbXBvbmVudCxcbiAgICBBY2NvcmRpb25Db21wb25lbnQsXG4gICAgRXh0ZW5kYWJsZVBhbmVsQ29tcG9uZW50LFxuICAgIFRhYmxlQ29tcG9uZW50LFxuICAgIFBhZ2luYXRpb25Db21wb25lbnQsXG4gICAgUGFnaW5hdGVQaXBlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBc2tzdWl0ZUNpdHJ1c01vZHVsZSB7fVxuIl19
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNrc3VpdGUtY2l0cnVzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Fza3N1aXRlLWNpdHJ1cy9zcmMvbGliL2Fza3N1aXRlLWNpdHJ1cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDMUcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDekYsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDaEIsYUFBYSxHQUNkLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhFQUE4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Q25CLGtCQUFrQjt3QkFDbEIsa0JBQWtCO3dCQUNsQixvQkFBb0I7d0JBQ3BCLG9CQUFvQjt3QkFDcEIseUJBQXlCO3dCQUN6QixrQkFBa0I7d0JBQ2xCLHdCQUF3Qjt3QkFDeEIsY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLFlBQVk7d0JBQ1osd0JBQXdCO3FCQUN6QjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2lucHV0L2lucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQm94Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2JveC9ib3guY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQXZhdGFyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2F2YXRhci9hdmF0YXIuY29tcG9uZW50JztcbmltcG9ydCB7IERyb3Bkb3duQ29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2Ryb3Bkb3duLWNvbnRhaW5lci9kcm9wZG93bi1jb250YWluZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEF1dG9jb21wbGV0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBDZGtDb25uZWN0ZWRPdmVybGF5LFxuICBDZGtPdmVybGF5T3JpZ2luLFxuICBPdmVybGF5TW9kdWxlLFxufSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDaGlwc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jaGlwcy9jaGlwcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVQaWNrZXJDYWxlbmRhckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci1jYWxlbmRhci9kYXRlLXBpY2tlci1jYWxlbmRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTa2VsZXRvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9za2VsZXRvbi9za2VsZXRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmd4U2tlbGV0b25Mb2FkZXJNb2R1bGUgfSBmcm9tICduZ3gtc2tlbGV0b24tbG9hZGVyJztcbmltcG9ydCB7IFRvYXN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RvYXN0L3RvYXN0LmNvbXBvbmVudCc7XG5pbXBvcnQge1NwaW5uZXJDb21wb25lbnR9IGZyb20gXCIuL2RpcmVjdGl2ZXMvc3Bpbm5lci9zcGlubmVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtcbiAgQXNrQnV0dG9uRGlyZWN0aXZlLFxuICBBc2tUb29sdGlwRGlyZWN0aXZlLFxuICBBdXRvZm9jdXNEaXJlY3RpdmUsXG4gIEJhZGdlRGlyZWN0aXZlLFxuICBTY3JvbGxEaXJlY3RpdmUsXG4gIFNwaW5uZXJEaXJlY3RpdmUsXG4gIEFza0Ryb3Bkb3duRGlyZWN0aXZlLFxuICBSaWNodGV4dFRvb2xib3hEaXJlY3RpdmVcbn0gZnJvbSBcIi4vZGlyZWN0aXZlc1wiO1xuaW1wb3J0IHtNb2RhbEJvZHlEaXJlY3RpdmUsIE1vZGFsQ29tcG9uZW50LCBNb2RhbEZvb3RlckRpcmVjdGl2ZSwgTW9kYWxIZWFkZXJEaXJlY3RpdmV9IGZyb20gJy4vY29tcG9uZW50cy9tb2RhbCc7XG5pbXBvcnQgeyBDaGFyYWN0ZXJDb3VudGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NoYXJhY3Rlci1jb3VudGVyL2NoYXJhY3Rlci1jb3VudGVyLmNvbXBvbmVudCc7XG5pbXBvcnQge0FjY29yZGlvbkNvbXBvbmVudH0gZnJvbSBcIi4vY29tcG9uZW50cy9hY2NvcmRpb24vYWNjb3JkaW9uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtFeHRlbmRhYmxlUGFuZWxDb21wb25lbnR9IGZyb20gXCIuL2NvbXBvbmVudHMvYWNjb3JkaW9uL2V4dGVuZGFibGUtcGFuZWwvZXh0ZW5kYWJsZS1wYW5lbC5jb21wb25lbnRcIjtcbmltcG9ydCB7IFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGFnaW5hdGVQaXBlIH0gZnJvbSAnLi9waXBlcy9wYWdpbmF0ZS9wYWdpbmF0ZS5waXBlJztcbmltcG9ydCB7IFJpY2h0ZXh0VXJsUHJvbXB0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3JpY2h0ZXh0LXVybC1wcm9tcHQvcmljaHRleHQtdXJsLXByb21wdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmljaHRleHRUb29sYm94Q29yZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9yaWNodGV4dC10b29sYm94LWNvcmUvcmljaHRleHQtdG9vbGJveC1jb3JlLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICBJbnB1dENvbXBvbmVudCxcbiAgICBTZWxlY3RDb21wb25lbnQsXG4gICAgQm94Q29tcG9uZW50LFxuICAgIEF2YXRhckNvbXBvbmVudCxcbiAgICBEcm9wZG93bkNvbnRhaW5lckNvbXBvbmVudCxcbiAgICBBc2tEcm9wZG93bkRpcmVjdGl2ZSxcbiAgICBBdXRvY29tcGxldGVDb21wb25lbnQsXG4gICAgQ2hpcHNDb21wb25lbnQsXG4gICAgQ2hlY2tib3hDb21wb25lbnQsXG4gICAgRGF0ZVBpY2tlckNvbXBvbmVudCxcbiAgICBEYXRlUGlja2VyQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgU2tlbGV0b25Db21wb25lbnQsXG4gICAgU3Bpbm5lckNvbXBvbmVudCxcbiAgICBTcGlubmVyRGlyZWN0aXZlLFxuICAgIEJhZGdlRGlyZWN0aXZlLFxuICAgIEF1dG9mb2N1c0RpcmVjdGl2ZSxcbiAgICBTY3JvbGxEaXJlY3RpdmUsXG4gICAgQXNrVG9vbHRpcERpcmVjdGl2ZSxcbiAgICBUb2FzdENvbXBvbmVudCxcbiAgICBBc2tCdXR0b25EaXJlY3RpdmUsXG4gICAgTW9kYWxDb21wb25lbnQsXG4gICAgTW9kYWxCb2R5RGlyZWN0aXZlLFxuICAgIE1vZGFsSGVhZGVyRGlyZWN0aXZlLFxuICAgIE1vZGFsRm9vdGVyRGlyZWN0aXZlLFxuICAgIENoYXJhY3RlckNvdW50ZXJDb21wb25lbnQsXG4gICAgQWNjb3JkaW9uQ29tcG9uZW50LFxuICAgIEV4dGVuZGFibGVQYW5lbENvbXBvbmVudCxcbiAgICBUYWJsZUNvbXBvbmVudCxcbiAgICBQYWdpbmF0aW9uQ29tcG9uZW50LFxuICAgIFBhZ2luYXRlUGlwZSxcbiAgICBSaWNodGV4dFRvb2xib3hEaXJlY3RpdmUsXG4gICAgUmljaHRleHRVcmxQcm9tcHRDb21wb25lbnQsXG4gICAgUmljaHRleHRUb29sYm94Q29yZUNvbXBvbmVudCxcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIENka092ZXJsYXlPcmlnaW4sXG4gICAgQ2RrQ29ubmVjdGVkT3ZlcmxheSxcbiAgICBPdmVybGF5TW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZS5mb3JDaGlsZCgpLFxuICAgIE5neFNrZWxldG9uTG9hZGVyTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBCdXR0b25Db21wb25lbnQsXG4gICAgSW5wdXRDb21wb25lbnQsXG4gICAgU2VsZWN0Q29tcG9uZW50LFxuICAgIEJveENvbXBvbmVudCxcbiAgICBBdmF0YXJDb21wb25lbnQsXG4gICAgRHJvcGRvd25Db250YWluZXJDb21wb25lbnQsXG4gICAgQXNrRHJvcGRvd25EaXJlY3RpdmUsXG4gICAgQXV0b2NvbXBsZXRlQ29tcG9uZW50LFxuICAgIENoaXBzQ29tcG9uZW50LFxuICAgIENoZWNrYm94Q29tcG9uZW50LFxuICAgIERhdGVQaWNrZXJDb21wb25lbnQsXG4gICAgRGF0ZVBpY2tlckNhbGVuZGFyQ29tcG9uZW50LFxuICAgIFNrZWxldG9uQ29tcG9uZW50LFxuICAgIFNwaW5uZXJEaXJlY3RpdmUsXG4gICAgQmFkZ2VEaXJlY3RpdmUsXG4gICAgQXV0b2ZvY3VzRGlyZWN0aXZlLFxuICAgIFNjcm9sbERpcmVjdGl2ZSxcbiAgICBBc2tUb29sdGlwRGlyZWN0aXZlLFxuICAgIEFza0J1dHRvbkRpcmVjdGl2ZSxcbiAgICBNb2RhbEJvZHlEaXJlY3RpdmUsXG4gICAgTW9kYWxIZWFkZXJEaXJlY3RpdmUsXG4gICAgTW9kYWxGb290ZXJEaXJlY3RpdmUsXG4gICAgQ2hhcmFjdGVyQ291bnRlckNvbXBvbmVudCxcbiAgICBBY2NvcmRpb25Db21wb25lbnQsXG4gICAgRXh0ZW5kYWJsZVBhbmVsQ29tcG9uZW50LFxuICAgIFRhYmxlQ29tcG9uZW50LFxuICAgIFBhZ2luYXRpb25Db21wb25lbnQsXG4gICAgUGFnaW5hdGVQaXBlLFxuICAgIFJpY2h0ZXh0VG9vbGJveERpcmVjdGl2ZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQXNrc3VpdGVDaXRydXNNb2R1bGUge31cbiJdfQ==
@@ -0,0 +1,274 @@
1
+ import Quill from 'quill';
2
+ import { BehaviorSubject, Subject, filter, fromEvent, map } from 'rxjs';
3
+ import { URL_REGEX } from '../constants/url-regex.constant';
4
+ export class RichtextWrapper {
5
+ get state() {
6
+ return this.stateSub.value;
7
+ }
8
+ constructor(ngZone, cd, elementRef) {
9
+ this.ngZone = ngZone;
10
+ this.cd = cd;
11
+ this.elementRef = elementRef;
12
+ this.stateSub = new BehaviorSubject({
13
+ hasSelection: false,
14
+ hasFocus: false,
15
+ formats: {
16
+ italic: false,
17
+ bold: false,
18
+ underline: false,
19
+ strike: false,
20
+ link: '',
21
+ list_bulleted: false,
22
+ list_numbered: false,
23
+ justify_left: false,
24
+ justify_center: false,
25
+ justify_right: false,
26
+ },
27
+ disabledTools: []
28
+ });
29
+ this.esc$ = new Subject();
30
+ this.enter$ = new Subject();
31
+ this.maxLength = -1;
32
+ this.textChangeHandler = () => {
33
+ this.update();
34
+ };
35
+ this.selectionChangeHandler = (value, oldRange, source) => {
36
+ this.update();
37
+ };
38
+ this.bindings = {
39
+ bold: {
40
+ handler: () => {
41
+ if (!this.stateSub.value.disabledTools.includes('bold'))
42
+ this.setBold();
43
+ return false;
44
+ },
45
+ },
46
+ italic: {
47
+ handler: () => {
48
+ if (!this.stateSub.value.disabledTools.includes('italic'))
49
+ this.setItalic();
50
+ return false;
51
+ },
52
+ },
53
+ underline: {
54
+ handler: () => {
55
+ if (!this.stateSub.value.disabledTools.includes('underline'))
56
+ this.setUnderline();
57
+ return false;
58
+ },
59
+ },
60
+ escape: {
61
+ key: 'escape',
62
+ handler: () => {
63
+ this.esc$.next(true);
64
+ return false;
65
+ }
66
+ },
67
+ enter: {
68
+ key: 'enter',
69
+ handler: () => {
70
+ this.enter$.next(true);
71
+ return false;
72
+ }
73
+ }
74
+ };
75
+ this.state$ = this.stateSub.asObservable();
76
+ const editorId = `editor-${new Date().getTime()}`;
77
+ this.elementRef.nativeElement.setAttribute('id', editorId);
78
+ this.quill = new Quill(`#${editorId}`, {
79
+ placeholder: '',
80
+ modules: {
81
+ clipboard: {
82
+ matchers: [[Node.TEXT_NODE, this.urlMatcher.bind(this)]],
83
+ },
84
+ keyboard: { bindings: this.bindings },
85
+ },
86
+ });
87
+ this.quill.root.setAttribute('spellcheck', 'false');
88
+ this.listenEditorChanges();
89
+ }
90
+ setItalic() {
91
+ this.quill.format('italic', !this.state.formats.italic);
92
+ this.update();
93
+ }
94
+ setBold() {
95
+ this.quill.format('bold', !this.state.formats.bold);
96
+ this.update();
97
+ }
98
+ setUnderline() {
99
+ this.quill.format('underline', !this.state.formats.underline);
100
+ this.update();
101
+ }
102
+ setStrike() {
103
+ this.quill.format('strike', !this.state.formats.strike);
104
+ this.update();
105
+ }
106
+ setListNumbered() {
107
+ if (this.state.formats.list_numbered)
108
+ this.quill.format('list', null);
109
+ else
110
+ this.quill.format('list', 'ordered');
111
+ this.update();
112
+ }
113
+ setListBulleted() {
114
+ if (this.state.formats.list_bulleted)
115
+ this.quill.format('list', null);
116
+ else
117
+ this.quill.format('list', 'bulleted');
118
+ this.update();
119
+ }
120
+ setLink(link) {
121
+ const range = this.quill.getSelection(true);
122
+ if (range && !range.length) {
123
+ const [textBloat, offset] = this.quill.getLeaf(range.index);
124
+ const start = range.index - offset;
125
+ const length = textBloat.length();
126
+ this.quill.formatText(start, length, 'link', link);
127
+ }
128
+ else {
129
+ this.quill.format('link', link);
130
+ }
131
+ this.update();
132
+ }
133
+ setJustifyLeft() {
134
+ this.quill.format('align', null);
135
+ this.update();
136
+ }
137
+ setJustifyCenter() {
138
+ this.quill.format('align', 'center');
139
+ this.update();
140
+ }
141
+ setJustifyRight() {
142
+ this.quill.format('align', 'right');
143
+ this.update();
144
+ }
145
+ setRemove() {
146
+ const selection = this.quill.getSelection();
147
+ if (selection)
148
+ this.quill.removeFormat(selection.index, selection.length);
149
+ this.update();
150
+ }
151
+ setPlaceholder(placeholder) {
152
+ this.quill.root.dataset['placeholder'] = placeholder;
153
+ }
154
+ setText(text) {
155
+ this.quill.setContents(this.quill.clipboard.convert(text));
156
+ }
157
+ setMaxLength(length) {
158
+ this.maxLength = length;
159
+ this.maxLengthSubscription?.unsubscribe();
160
+ if (this.maxLength > 0)
161
+ this.maxLengthSubscription =
162
+ fromEvent(this.quill, 'text-change')
163
+ .pipe(filter(() => this.quill.getLength() > this.maxLength))
164
+ .subscribe(() => {
165
+ this.quill.deleteText(this.maxLength, this.quill.getLength());
166
+ });
167
+ }
168
+ setDisabledTools(tools) {
169
+ if (JSON.stringify(tools) !== JSON.stringify(this.stateSub.value.disabledTools))
170
+ this.stateSub.next({ ...this.stateSub.value, disabledTools: tools, });
171
+ }
172
+ setEditorClass(className) {
173
+ this.quill.root.classList.add(className);
174
+ }
175
+ getEditorElement() {
176
+ return this.quill.root;
177
+ }
178
+ getText() {
179
+ this.quill.getText();
180
+ }
181
+ listenTextChanges() {
182
+ return fromEvent(this.quill, 'text-change')
183
+ .pipe(map(() => this.quill.root.innerHTML));
184
+ }
185
+ listenOnTouched() {
186
+ return fromEvent(this.quill, 'selection-change')
187
+ .pipe(map(() => !this.quill.getSelection(false)));
188
+ }
189
+ listenEscape() {
190
+ return this.esc$.asObservable();
191
+ }
192
+ listenEnter() {
193
+ return this.enter$.asObservable();
194
+ }
195
+ disable() {
196
+ this.quill.disable();
197
+ }
198
+ enable() {
199
+ this.quill.enable();
200
+ }
201
+ destroy() {
202
+ this.quill.off('selection-change', this.selectionChangeHandler);
203
+ this.quill.off('text-change', this.textChangeHandler);
204
+ this.esc$.unsubscribe();
205
+ this.enter$.unsubscribe();
206
+ this.stateSub.unsubscribe();
207
+ this.maxLengthSubscription?.unsubscribe();
208
+ }
209
+ focus() {
210
+ this.quill.focus();
211
+ }
212
+ urlMatcher(node, delta) {
213
+ if (typeof node.data !== 'string')
214
+ return;
215
+ var matches = node.data.match(URL_REGEX);
216
+ if (matches && matches.length > 0) {
217
+ let text = '';
218
+ const selection = this.quill.getSelection(true);
219
+ if (selection.length)
220
+ text = this.quill.getText(selection.index, selection.length);
221
+ var ops = [];
222
+ var str = node.data;
223
+ matches.forEach(function (match) {
224
+ var split = str.split(match);
225
+ var beforeLink = split.shift();
226
+ ops.push({ insert: beforeLink });
227
+ ops.push({ insert: text || match, attributes: { link: match } });
228
+ str = split.join(match);
229
+ });
230
+ ops.push({ insert: str });
231
+ delta.ops = ops;
232
+ }
233
+ return delta;
234
+ }
235
+ listenEditorChanges() {
236
+ this.quill.on('selection-change', this.selectionChangeHandler);
237
+ this.quill.on('text-change', this.textChangeHandler);
238
+ }
239
+ update() {
240
+ let bounds;
241
+ let formatsArr;
242
+ const range = this.quill.getSelection(false);
243
+ if (range) {
244
+ bounds = this.quill.getBounds(range.index, range.length);
245
+ formatsArr = this.quill.getFormat(range);
246
+ }
247
+ const formats = {
248
+ italic: formatsArr?.italic || false,
249
+ bold: formatsArr?.bold || false,
250
+ underline: formatsArr?.underline || false,
251
+ strike: formatsArr?.strike || false,
252
+ link: formatsArr?.link || '',
253
+ list_bulleted: formatsArr?.list === 'bullet',
254
+ list_numbered: formatsArr?.list === 'ordered',
255
+ justify_left: formatsArr?.align === 'left',
256
+ justify_center: formatsArr?.align === 'center',
257
+ justify_right: formatsArr?.align === 'right',
258
+ };
259
+ const hasSelection = !!range?.length;
260
+ const hasFocus = !!range;
261
+ const newState = {
262
+ ...this.stateSub.value,
263
+ hasSelection,
264
+ formats,
265
+ bounds,
266
+ hasFocus
267
+ };
268
+ this.ngZone.run(() => {
269
+ this.stateSub.next(newState);
270
+ this.cd.markForCheck();
271
+ });
272
+ }
273
+ }
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaHRleHQtd3JhcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fza3N1aXRlLWNpdHJ1cy9zcmMvbGliL2NsYXNzZXMvcmljaHRleHQtd3JhcHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQXdGLE1BQU0sT0FBTyxDQUFDO0FBQzdHLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFnQixNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU90RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFNUQsTUFBTSxPQUFPLGVBQWU7SUEyRTFCLElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUE7SUFDOUIsQ0FBQztJQUlELFlBQ1UsTUFBYyxFQUNkLEVBQXFCLEVBQ3JCLFVBQW1DO1FBRm5DLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNyQixlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQWxGckMsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFhO1lBQ2pELFlBQVksRUFBRSxLQUFLO1lBQ25CLFFBQVEsRUFBRSxLQUFLO1lBQ2YsT0FBTyxFQUFFO2dCQUNQLE1BQU0sRUFBRSxLQUFLO2dCQUNiLElBQUksRUFBRSxLQUFLO2dCQUNYLFNBQVMsRUFBRSxLQUFLO2dCQUNoQixNQUFNLEVBQUUsS0FBSztnQkFDYixJQUFJLEVBQUUsRUFBRTtnQkFDUixhQUFhLEVBQUUsS0FBSztnQkFDcEIsYUFBYSxFQUFFLEtBQUs7Z0JBQ3BCLFlBQVksRUFBRSxLQUFLO2dCQUNuQixjQUFjLEVBQUUsS0FBSztnQkFDckIsYUFBYSxFQUFFLEtBQUs7YUFDckI7WUFDRCxhQUFhLEVBQUUsRUFBRTtTQUNsQixDQUFDLENBQUM7UUFDSyxTQUFJLEdBQUcsSUFBSSxP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VCxDQUFDO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRWxlbWVudFJlZiwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgUXVpbGwsIHsgQm91bmRzU3RhdGljLCBSYW5nZVN0YXRpYywgU2VsZWN0aW9uQ2hhbmdlSGFuZGxlciwgU291cmNlcywgVGV4dENoYW5nZUhhbmRsZXIgfSBmcm9tICdxdWlsbCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZmlsdGVyLCBmcm9tRXZlbnQsIG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgUmljaFRleHRGdW5jdGlvbnMsXG4gIFJpY2h0ZXh0Rm9ybWF0cyxcbiAgVG9vbEtleXMsXG4gIFRvb2xzU3RhdGUsXG59IGZyb20gJy4uL2ludGVyZmFjZXMvcmljaHRleHQtdG9vbGJveC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVVJMX1JFR0VYIH0gZnJvbSAnLi4vY29uc3RhbnRzL3VybC1yZWdleC5jb25zdGFudCc7XG5cbmV4cG9ydCBjbGFzcyBSaWNodGV4dFdyYXBwZXIgaW1wbGVtZW50cyBSaWNoVGV4dEZ1bmN0aW9ucyB7XG4gIHByaXZhdGUgcXVpbGwhOiBRdWlsbDtcbiAgcHJpdmF0ZSBzdGF0ZVN1YiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VG9vbHNTdGF0ZT4oe1xuICAgIGhhc1NlbGVjdGlvbjogZmFsc2UsXG4gICAgaGFzRm9jdXM6IGZhbHNlLFxuICAgIGZvcm1hdHM6IHtcbiAgICAgIGl0YWxpYzogZmFsc2UsXG4gICAgICBib2xkOiBmYWxzZSxcbiAgICAgIHVuZGVybGluZTogZmFsc2UsXG4gICAgICBzdHJpa2U6IGZhbHNlLFxuICAgICAgbGluazogJycsXG4gICAgICBsaXN0X2J1bGxldGVkOiBmYWxzZSxcbiAgICAgIGxpc3RfbnVtYmVyZWQ6IGZhbHNlLFxuICAgICAganVzdGlmeV9sZWZ0OiBmYWxzZSxcbiAgICAgIGp1c3RpZnlfY2VudGVyOiBmYWxzZSxcbiAgICAgIGp1c3RpZnlfcmlnaHQ6IGZhbHNlLFxuICAgIH0sXG4gICAgZGlzYWJsZWRUb29sczogW11cbiAgfSk7XG4gIHByaXZhdGUgZXNjJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHByaXZhdGUgZW50ZXIkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSBtYXhMZW5ndGggPSAtMTtcblxuICBwcml2YXRlIHRleHRDaGFuZ2VIYW5kbGVyOiBUZXh0Q2hhbmdlSGFuZGxlciA9ICgpID0+IHtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9O1xuXG4gIHByaXZhdGUgc2VsZWN0aW9uQ2hhbmdlSGFuZGxlcjogU2VsZWN0aW9uQ2hhbmdlSGFuZGxlciA9IChcbiAgICB2YWx1ZTogUmFuZ2VTdGF0aWMsXG4gICAgb2xkUmFuZ2U6IFJhbmdlU3RhdGljLFxuICAgIHNvdXJjZTogU291cmNlc1xuICApID0+IHtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9O1xuXG4gIHByaXZhdGUgYmluZGluZ3MgPSB7XG4gICAgYm9sZDoge1xuICAgICAgaGFuZGxlcjogKCkgPT4ge1xuICAgICAgICBpZighdGhpcy5zdGF0ZVN1Yi52YWx1ZS5kaXNhYmxlZFRvb2xzLmluY2x1ZGVzKCdib2xkJykpXG4gICAgICAgICAgdGhpcy5zZXRCb2xkKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBpdGFsaWM6IHtcbiAgICAgIGhhbmRsZXI6ICgpID0+IHtcbiAgICAgICAgaWYoIXRoaXMuc3RhdGVTdWIudmFsdWUuZGlzYWJsZWRUb29scy5pbmNsdWRlcygnaXRhbGljJykpXG4gICAgICAgICAgdGhpcy5zZXRJdGFsaWMoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHVuZGVybGluZToge1xuICAgICAgaGFuZGxlcjogKCkgPT4ge1xuICAgICAgICBpZighdGhpcy5zdGF0ZVN1Yi52YWx1ZS5kaXNhYmxlZFRvb2xzLmluY2x1ZGVzKCd1bmRlcmxpbmUnKSlcbiAgICAgICAgICB0aGlzLnNldFVuZGVybGluZSgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LFxuICAgIH0sXG4gICAgZXNjYXBlOntcbiAgICAgIGtleTogJ2VzY2FwZScsXG4gICAgICBoYW5kbGVyOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuZXNjJC5uZXh0KHRydWUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSxcbiAgICBlbnRlcjoge1xuICAgICAga2V5OiAnZW50ZXInLFxuICAgICAgaGFuZGxlcjogKCkgPT4ge1xuICAgICAgICB0aGlzLmVudGVyJC5uZXh0KHRydWUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gIH07XG4gIHByaXZhdGUgbWF4TGVuZ3RoU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIHB1YmxpYyBnZXQgc3RhdGUoKXtcbiAgICAgIHJldHVybiB0aGlzLnN0YXRlU3ViLnZhbHVlXG4gIH1cbiAgXG4gIHB1YmxpYyBzdGF0ZSQgPSB0aGlzLnN0YXRlU3ViLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgKSB7XG4gICAgY29uc3QgZWRpdG9ySWQgPSBgZWRpdG9yLSR7bmV3IERhdGUoKS5nZXRUaW1lKCl9YDtcbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2lkJywgZWRpdG9ySWQpO1xuICAgIHRoaXMucXVpbGwgPSBuZXcgUXVpbGwoYCMke2VkaXRvcklkfWAsIHtcbiAgICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICAgIG1vZHVsZXM6IHtcbiAgICAgICAgY2xpcGJvYXJkOiB7XG4gICAgICAgICAgbWF0Y2hlcnM6IFtbTm9kZS5URVhUX05PREUsIHRoaXMudXJsTWF0Y2hlci5iaW5kKHRoaXMpXV0sXG4gICAgICAgIH0sXG4gICAgICAgIGtleWJvYXJkOiB7IGJpbmRpbmdzOiB0aGlzLmJpbmRpbmdzIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMucXVpbGwucm9vdC5zZXRBdHRyaWJ1dGUoJ3NwZWxsY2hlY2snLCAnZmFsc2UnKVxuICAgIHRoaXMubGlzdGVuRWRpdG9yQ2hhbmdlcygpO1xuICB9XG5cbiAgcHVibGljIHNldEl0YWxpYygpIHtcbiAgICB0aGlzLnF1aWxsLmZvcm1hdCgnaXRhbGljJywgIXRoaXMuc3RhdGUuZm9ybWF0cy5pdGFsaWMpO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0Qm9sZCgpIHtcbiAgICB0aGlzLnF1aWxsLmZvcm1hdCgnYm9sZCcsICF0aGlzLnN0YXRlLmZvcm1hdHMuYm9sZCk7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRVbmRlcmxpbmUoKSB7XG4gICAgdGhpcy5xdWlsbC5mb3JtYXQoJ3VuZGVybGluZScsICF0aGlzLnN0YXRlLmZvcm1hdHMudW5kZXJsaW5lKTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9XG5cbiAgcHVibGljIHNldFN0cmlrZSgpIHtcbiAgICB0aGlzLnF1aWxsLmZvcm1hdCgnc3RyaWtlJywgIXRoaXMuc3RhdGUuZm9ybWF0cy5zdHJpa2UpO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0TGlzdE51bWJlcmVkKCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmZvcm1hdHMubGlzdF9udW1iZXJlZClcbiAgICAgIHRoaXMucXVpbGwuZm9ybWF0KCdsaXN0JywgbnVsbCk7XG4gICAgZWxzZSAgXG4gICAgICB0aGlzLnF1aWxsLmZvcm1hdCgnbGlzdCcsICdvcmRlcmVkJyk7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRMaXN0QnVsbGV0ZWQoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuZm9ybWF0cy5saXN0X2J1bGxldGVkKVxuICAgICAgdGhpcy5xdWlsbC5mb3JtYXQoJ2xpc3QnLCBudWxsKTtcbiAgICBlbHNlICBcbiAgICAgIHRoaXMucXVpbGwuZm9ybWF0KCdsaXN0JywgJ2J1bGxldGVkJyk7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRMaW5rKGxpbms6IHN0cmluZykge1xuXG4gICAgY29uc3QgcmFuZ2UgPSB0aGlzLnF1aWxsLmdldFNlbGVjdGlvbih0cnVlKTtcblxuICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UubGVuZ3RoKSB7XG4gICAgICBjb25zdCBbdGV4dEJsb2F0LCBvZmZzZXRdID0gdGhpcy5xdWlsbC5nZXRMZWFmKHJhbmdlIS5pbmRleCk7XG5cbiAgICAgIGNvbnN0IHN0YXJ0ID0gcmFuZ2UhLmluZGV4IC0gb2Zmc2V0O1xuICAgICAgY29uc3QgbGVuZ3RoID0gdGV4dEJsb2F0Lmxlbmd0aCgpO1xuXG4gICAgICB0aGlzLnF1aWxsLmZvcm1hdFRleHQoc3RhcnQsIGxlbmd0aCwgJ2xpbmsnLCBsaW5rKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5xdWlsbC5mb3JtYXQoJ2xpbmsnLCBsaW5rKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9XG5cbiAgcHVibGljIHNldEp1c3RpZnlMZWZ0KCkge1xuICAgIHRoaXMucXVpbGwuZm9ybWF0KCdhbGlnbicsIG51bGwpO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0SnVzdGlmeUNlbnRlcigpIHtcbiAgICB0aGlzLnF1aWxsLmZvcm1hdCgnYWxpZ24nLCAnY2VudGVyJyk7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRKdXN0aWZ5UmlnaHQoKSB7XG4gICAgdGhpcy5xdWlsbC5mb3JtYXQoJ2FsaWduJywgJ3JpZ2h0Jyk7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRSZW1vdmUoKSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5xdWlsbC5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoc2VsZWN0aW9uKSB0aGlzLnF1aWxsLnJlbW92ZUZvcm1hdChzZWxlY3Rpb24hLmluZGV4LCBzZWxlY3Rpb24hLmxlbmd0aCk7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRQbGFjZWhvbGRlcihwbGFjZWhvbGRlcjogc3RyaW5nKXtcbiAgICB0aGlzLnF1aWxsLnJvb3QuZGF0YXNldFsncGxhY2Vob2xkZXInXSA9IHBsYWNlaG9sZGVyO1xuICB9XG5cbiAgcHVibGljIHNldFRleHQodGV4dDogc3RyaW5nKXtcbiAgICB0aGlzLnF1aWxsLnNldENvbnRlbnRzKHRoaXMucXVpbGwuY2xpcGJvYXJkLmNvbnZlcnQodGV4dCkpO1xuICB9XG5cbiAgcHVibGljIHNldE1heExlbmd0aChsZW5ndGg6IG51bWJlcil7XG4gICAgdGhpcy5tYXhMZW5ndGggPSBsZW5ndGg7XG5cbiAgICB0aGlzLm1heExlbmd0aFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICBpZih0aGlzLm1heExlbmd0aCA+IDApXG4gICAgICB0aGlzLm1heExlbmd0aFN1YnNjcmlwdGlvbiA9IFxuICAgICAgICBmcm9tRXZlbnQodGhpcy5xdWlsbCwgJ3RleHQtY2hhbmdlJylcbiAgICAgICAgLnBpcGUoZmlsdGVyKCgpID0+IHRoaXMucXVpbGwuZ2V0TGVuZ3RoKCkgPiB0aGlzLm1heExlbmd0aCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucXVpbGwuZGVsZXRlVGV4dCh0aGlzLm1heExlbmd0aCwgdGhpcy5xdWlsbC5nZXRMZW5ndGgoKSk7XG4gICAgICB9KVxuICB9XG5cbiAgcHVibGljIHNldERpc2FibGVkVG9vbHModG9vbHM6IFRvb2xLZXlzKXtcbiAgICBpZihKU09OLnN0cmluZ2lmeSh0b29scykgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdGVTdWIudmFsdWUuZGlzYWJsZWRUb29scykpXG4gICAgICB0aGlzLnN0YXRlU3ViLm5leHQoey4uLnRoaXMuc3RhdGVTdWIudmFsdWUsIGRpc2FibGVkVG9vbHM6IHRvb2xzLCB9KVxuICB9XG5cbiAgcHVibGljIHNldEVkaXRvckNsYXNzKGNsYXNzTmFtZTogc3RyaW5nKXtcbiAgICB0aGlzLnF1aWxsLnJvb3QuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICB9XG5cbiAgcHVibGljIGdldEVkaXRvckVsZW1lbnQoKXtcbiAgICByZXR1cm4gdGhpcy5xdWlsbC5yb290O1xuICB9XG5cbiAgcHVibGljIGdldFRleHQoKXtcbiAgICB0aGlzLnF1aWxsLmdldFRleHQoKTtcbiAgfVxuICBcbiAgcHVibGljIGxpc3RlblRleHRDaGFuZ2VzKCl7XG4gICAgcmV0dXJuIGZyb21FdmVudCh0aGlzLnF1aWxsLCAndGV4dC1jaGFuZ2UnKVxuICAgICAgLnBpcGUobWFwKCgpID0+IHRoaXMucXVpbGwucm9vdC5pbm5lckhUTUwpKTsgXG4gIH1cblxuICBwdWJsaWMgbGlzdGVuT25Ub3VjaGVkKCl7XG4gICAgcmV0dXJuIGZyb21FdmVudCh0aGlzLnF1aWxsLCAnc2VsZWN0aW9uLWNoYW5nZScpXG4gICAgICAucGlwZShtYXAoKCkgPT4gIXRoaXMucXVpbGwuZ2V0U2VsZWN0aW9uKGZhbHNlKSkpO1xuICB9XG5cbiAgcHVibGljIGxpc3RlbkVzY2FwZSgpe1xuICAgIHJldHVybiB0aGlzLmVzYyQuYXNPYnNlcnZhYmxlKClcbiAgfVxuXG4gIHB1YmxpYyBsaXN0ZW5FbnRlcigpe1xuICAgIHJldHVybiB0aGlzLmVudGVyJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG5cbiAgcHVibGljIGRpc2FibGUoKXtcbiAgICB0aGlzLnF1aWxsLmRpc2FibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBlbmFibGUoKXtcbiAgICB0aGlzLnF1aWxsLmVuYWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5xdWlsbC5vZmYoJ3NlbGVjdGlvbi1jaGFuZ2UnLCB0aGlzLnNlbGVjdGlvbkNoYW5nZUhhbmRsZXIpO1xuICAgIHRoaXMucXVpbGwub2ZmKCd0ZXh0LWNoYW5nZScsIHRoaXMudGV4dENoYW5nZUhhbmRsZXIpO1xuICAgIHRoaXMuZXNjJC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZW50ZXIkLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zdGF0ZVN1Yi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMubWF4TGVuZ3RoU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIGZvY3VzKCl7XG4gICAgdGhpcy5xdWlsbC5mb2N1cygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cmxNYXRjaGVyKG5vZGU6IGFueSwgZGVsdGE6IGFueSkge1xuICAgIGlmICh0eXBlb2Ygbm9kZS5kYXRhICE9PSAnc3RyaW5nJykgcmV0dXJuO1xuICAgIHZhciBtYXRjaGVzID0gbm9kZS5kYXRhLm1hdGNoKFVSTF9SRUdFWCk7XG5cbiAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCB0ZXh0ID0gJyc7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLnF1aWxsLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICAgIGlmIChzZWxlY3Rpb24ubGVuZ3RoKVxuICAgICAgICB0ZXh0ID0gdGhpcy5xdWlsbC5nZXRUZXh0KHNlbGVjdGlvbiEuaW5kZXgsIHNlbGVjdGlvbiEubGVuZ3RoKTtcblxuICAgICAgdmFyIG9wcyA9IFtdO1xuICAgICAgdmFyIHN0ciA9IG5vZGUuZGF0YTtcbiAgICAgIG1hdGNoZXMuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2g6IGFueSkge1xuICAgICAgICB2YXIgc3BsaXQgPSBzdHIuc3BsaXQobWF0Y2gpO1xuICAgICAgICB2YXIgYmVmb3JlTGluayA9IHNwbGl0LnNoaWZ0KCk7XG4gICAgICAgIG9wcy5wdXNoKHsgaW5zZXJ0OiBiZWZvcmVMaW5rIH0pO1xuICAgICAgICBvcHMucHVzaCh7IGluc2VydDogdGV4dCB8fCBtYXRjaCwgYXR0cmlidXRlczogeyBsaW5rOiBtYXRjaCB9IH0pO1xuICAgICAgICBzdHIgPSBzcGxpdC5qb2luKG1hdGNoKTtcbiAgICAgIH0pO1xuICAgICAgb3BzLnB1c2goeyBpbnNlcnQ6IHN0ciB9KTtcbiAgICAgIGRlbHRhLm9wcyA9IG9wcztcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsdGE7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkVkaXRvckNoYW5nZXMoKSB7XG4gICAgdGhpcy5xdWlsbC5vbignc2VsZWN0aW9uLWNoYW5nZScsIHRoaXMuc2VsZWN0aW9uQ2hhbmdlSGFuZGxlcik7XG4gICAgdGhpcy5xdWlsbC5vbigndGV4dC1jaGFuZ2UnLCB0aGlzLnRleHRDaGFuZ2VIYW5kbGVyKTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSB1cGRhdGUoKSB7XG4gICAgbGV0IGJvdW5kczogQm91bmRzU3RhdGljIHwgdW5kZWZpbmVkO1xuICAgIGxldCBmb3JtYXRzQXJyO1xuXG4gICAgY29uc3QgcmFuZ2UgPSB0aGlzLnF1aWxsLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgaWYgIChyYW5nZSl7IFxuICAgICAgYm91bmRzID0gdGhpcy5xdWlsbC5nZXRCb3VuZHMocmFuZ2UuaW5kZXgsIHJhbmdlLmxlbmd0aCk7XG4gICAgICBmb3JtYXRzQXJyID0gdGhpcy5xdWlsbC5nZXRGb3JtYXQocmFuZ2UpIGFzIGFueTtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JtYXRzOiBSaWNodGV4dEZvcm1hdHMgPSB7XG4gICAgICBpdGFsaWM6IGZvcm1hdHNBcnI/Lml0YWxpYyB8fCBmYWxzZSxcbiAgICAgIGJvbGQ6IGZvcm1hdHNBcnI/LmJvbGQgfHwgZmFsc2UsXG4gICAgICB1bmRlcmxpbmU6IGZvcm1hdHNBcnI/LnVuZGVybGluZSB8fCBmYWxzZSxcbiAgICAgIHN0cmlrZTogZm9ybWF0c0Fycj8uc3RyaWtlIHx8IGZhbHNlLFxuICAgICAgbGluazogZm9ybWF0c0Fycj8ubGluayB8fCAnJyxcbiAgICAgIGxpc3RfYnVsbGV0ZWQ6IGZvcm1hdHNBcnI/Lmxpc3QgPT09ICdidWxsZXQnLFxuICAgICAgbGlzdF9udW1iZXJlZDogZm9ybWF0c0Fycj8ubGlzdCA9PT0gJ29yZGVyZWQnLFxuICAgICAganVzdGlmeV9sZWZ0OiBmb3JtYXRzQXJyPy5hbGlnbiA9PT0gJ2xlZnQnLFxuICAgICAganVzdGlmeV9jZW50ZXI6IGZvcm1hdHNBcnI/LmFsaWduID09PSAnY2VudGVyJyxcbiAgICAgIGp1c3RpZnlfcmlnaHQ6IGZvcm1hdHNBcnI/LmFsaWduID09PSAncmlnaHQnLFxuICAgIH07XG5cbiAgICBjb25zdCBoYXNTZWxlY3Rpb24gPSAhIXJhbmdlPy5sZW5ndGg7XG4gICAgY29uc3QgaGFzRm9jdXMgPSAhIXJhbmdlO1xuXG4gICAgY29uc3QgbmV3U3RhdGU6IFRvb2xzU3RhdGUgPSB7IFxuICAgICAgLi4udGhpcy5zdGF0ZVN1Yi52YWx1ZSwgXG4gICAgICBoYXNTZWxlY3Rpb24sIFxuICAgICAgZm9ybWF0cywgXG4gICAgICBib3VuZHMsIFxuICAgICAgaGFzRm9jdXMgXG4gICAgfTtcblxuICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICB0aGlzLnN0YXRlU3ViLm5leHQobmV3U3RhdGUpO1xuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KVxuICB9XG59XG4iXX0=
@@ -0,0 +1,46 @@
1
+ import { Toolbox } from "./toolbox";
2
+ const TOOLBOX_HEIGHT = 40;
3
+ const MARGIN = 8;
4
+ const MOUSE_EVENT = 'mouseup';
5
+ export class BubbleStrategy extends Toolbox {
6
+ constructor(injector) {
7
+ super(injector);
8
+ this.listenOutsideClicks();
9
+ }
10
+ move(bounds) {
11
+ this.renderer2.setStyle(this.componentEl, 'top', `${bounds.top - (TOOLBOX_HEIGHT + MARGIN)}px`);
12
+ this.renderer2.setStyle(this.componentEl, 'left', `${bounds.left}px`);
13
+ }
14
+ listenOutsideClicks() {
15
+ this.clickListener = (event) => {
16
+ if (!this.componentEl?.contains(event.target)
17
+ && this.isVisible()) {
18
+ this.destroyComponent();
19
+ }
20
+ };
21
+ document.body.addEventListener(MOUSE_EVENT, this.clickListener);
22
+ }
23
+ onToolsChanged(state) {
24
+ super.onToolsChanged(state);
25
+ const { hasSelection, hasFocus, bounds } = state;
26
+ if (hasSelection && bounds) {
27
+ if (!this.isVisible())
28
+ this.displayComponent();
29
+ this.move(bounds);
30
+ }
31
+ else {
32
+ if (this.isVisible() && hasFocus)
33
+ this.destroyComponent();
34
+ }
35
+ }
36
+ displayComponent() {
37
+ super.displayComponent();
38
+ this.renderer2.appendChild(this.hostEl?.nativeElement, this.componentEl);
39
+ this.componentRef.setInput('type', 'bubble');
40
+ }
41
+ destroyAll() {
42
+ document.body.removeEventListener(MOUSE_EVENT, this.clickListener);
43
+ super.destroyAll();
44
+ }
45
+ }
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJveC1idWJibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc2tzdWl0ZS1jaXRydXMvc3JjL2xpYi9jbGFzc2VzL3Rvb2xib3gtYnViYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHcEMsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBQzFCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNqQixNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUE7QUFFN0IsTUFBTSxPQUFPLGNBQWUsU0FBUSxPQUFPO0lBR3ZDLFlBQVksUUFBa0I7UUFDNUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTSxJQUFJLENBQUMsTUFBb0I7UUFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBQyxLQUFLLEVBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5RixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzdCLElBQ0UsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBYyxDQUFDO21CQUM5QyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQ3BCO2dCQUNDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2FBQ3pCO1FBQ0gsQ0FBQyxDQUFBO1FBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFUSxjQUFjLENBQUMsS0FBaUI7UUFDdkMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUMzQixNQUFNLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDakQsSUFBSSxZQUFZLElBQUksTUFBTSxFQUFFO1lBQzFCLElBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNsQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ25CO2FBQU07WUFDTCxJQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxRQUFRO2dCQUM3QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUMzQjtJQUNILENBQUM7SUFFUSxnQkFBZ0I7UUFDdkIsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxZQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRVEsVUFBVTtRQUNqQixRQUFRLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYyxDQUFDLENBQUM7UUFDcEUsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3JCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEJvdW5kc1N0YXRpYyB9IGZyb20gXCJxdWlsbFwiO1xuaW1wb3J0IHsgVG9vbGJveCB9IGZyb20gXCIuL3Rvb2xib3hcIjtcbmltcG9ydCB7IFRvb2xzU3RhdGUgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9yaWNodGV4dC10b29sYm94LmludGVyZmFjZVwiO1xuXG5jb25zdCBUT09MQk9YX0hFSUdIVCA9IDQwO1xuY29uc3QgTUFSR0lOID0gODtcbmNvbnN0IE1PVVNFX0VWRU5UID0gJ21vdXNldXAnXG5cbmV4cG9ydCBjbGFzcyBCdWJibGVTdHJhdGVneSBleHRlbmRzIFRvb2xib3gge1xuICAgIHByaXZhdGUgY2xpY2tMaXN0ZW5lcj86IChldmVudDogTW91c2VFdmVudCkgPT4gdm9pZDtcbiAgXG4gICAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgICB0aGlzLmxpc3Rlbk91dHNpZGVDbGlja3MoKTtcbiAgICB9XG4gIFxuICAgIHB1YmxpYyBtb3ZlKGJvdW5kczogQm91bmRzU3RhdGljKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLmNvbXBvbmVudEVsLCd0b3AnLGAke2JvdW5kcy50b3AgLSAoVE9PTEJPWF9IRUlHSFQgKyBNQVJHSU4pfXB4YCk7XG4gICAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLmNvbXBvbmVudEVsLCdsZWZ0JyxgJHtib3VuZHMubGVmdH1weGApO1xuICAgIH1cbiAgXG4gICAgcHJpdmF0ZSBsaXN0ZW5PdXRzaWRlQ2xpY2tzKCl7XG4gICAgICB0aGlzLmNsaWNrTGlzdGVuZXIgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYoXG4gICAgICAgICAgIXRoaXMuY29tcG9uZW50RWw/LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSBcbiAgICAgICAgICAmJiB0aGlzLmlzVmlzaWJsZSgpXG4gICAgICAgICl7XG4gICAgICAgICAgdGhpcy5kZXN0cm95Q29tcG9uZW50KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihNT1VTRV9FVkVOVCwgdGhpcy5jbGlja0xpc3RlbmVyKTtcbiAgICB9XG4gICAgXG4gICAgb3ZlcnJpZGUgb25Ub29sc0NoYW5nZWQoc3RhdGU6IFRvb2xzU3RhdGUpOiB2b2lkIHtcbiAgICAgIHN1cGVyLm9uVG9vbHNDaGFuZ2VkKHN0YXRlKVxuICAgICAgY29uc3QgeyBoYXNTZWxlY3Rpb24sIGhhc0ZvY3VzLCBib3VuZHMgfSA9IHN0YXRlO1xuICAgICAgaWYgKGhhc1NlbGVjdGlvbiAmJiBib3VuZHMpIHtcbiAgICAgICAgaWYoIXRoaXMuaXNWaXNpYmxlKCkpXG4gICAgICAgICAgdGhpcy5kaXNwbGF5Q29tcG9uZW50KCk7XG4gICAgICAgIHRoaXMubW92ZShib3VuZHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYodGhpcy5pc1Zpc2libGUoKSAmJiBoYXNGb2N1cylcbiAgICAgICAgICB0aGlzLmRlc3Ryb3lDb21wb25lbnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIFxuICAgIG92ZXJyaWRlIGRpc3BsYXlDb21wb25lbnQoKSB7XG4gICAgICBzdXBlci5kaXNwbGF5Q29tcG9uZW50KCk7XG4gICAgICB0aGlzLnJlbmRlcmVyMi5hcHBlbmRDaGlsZCh0aGlzLmhvc3RFbD8ubmF0aXZlRWxlbWVudCx0aGlzLmNvbXBvbmVudEVsKTtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmIS5zZXRJbnB1dCgndHlwZScsJ2J1YmJsZScpO1xuICAgIH1cbiAgICBcbiAgICBvdmVycmlkZSBkZXN0cm95QWxsKCk6IHZvaWQge1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKE1PVVNFX0VWRU5ULCB0aGlzLmNsaWNrTGlzdGVuZXIhKTtcbiAgICAgIHN1cGVyLmRlc3Ryb3lBbGwoKTtcbiAgICB9XG4gIH0iXX0=
@@ -0,0 +1,34 @@
1
+ import { Toolbox } from "./toolbox";
2
+ export class TopbarStrategy extends Toolbox {
3
+ constructor(injector) {
4
+ super(injector);
5
+ this.displayComponent();
6
+ }
7
+ displayComponent() {
8
+ super.displayComponent();
9
+ const parentElement = this.renderer2.parentNode(this.hostEl?.nativeElement);
10
+ this.renderer2.appendChild(parentElement, this.componentEl);
11
+ this.renderer2.appendChild(parentElement, this.hostEl?.nativeElement);
12
+ this.componentRef.setInput('type', 'topbar');
13
+ }
14
+ prepareUpdatedTools(toolState) {
15
+ const toolbarItems = super.prepareUpdatedTools(toolState);
16
+ const { formats, hasSelection, hasFocus } = toolState;
17
+ toolbarItems.forEach(tool => {
18
+ if (!hasFocus) {
19
+ tool.disabled = true;
20
+ return;
21
+ }
22
+ if (tool.tool === 'clear') {
23
+ tool.disabled = !hasSelection;
24
+ }
25
+ else if (tool.tool === 'link') {
26
+ tool.selected = !!formats.link;
27
+ tool.disabled = !hasSelection && !formats.link;
28
+ tool.value = formats?.link;
29
+ }
30
+ });
31
+ return toolbarItems;
32
+ }
33
+ }
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJveC10b3BiYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc2tzdWl0ZS1jaXRydXMvc3JjL2xpYi9jbGFzc2VzL3Rvb2xib3gtdG9wYmFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHcEMsTUFBTSxPQUFPLGNBQWUsU0FBUSxPQUFPO0lBRXZDLFlBQVksUUFBa0I7UUFDNUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFHUSxnQkFBZ0I7UUFDdkIsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDekIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxZQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRVEsbUJBQW1CLENBQUMsU0FBcUI7UUFDaEQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFELE1BQU0sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUV0RCxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzFCLElBQUcsQ0FBQyxRQUFRLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7Z0JBQ3BCLE9BQU87YUFDUjtZQUVELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxZQUFZLENBQUM7YUFDL0I7aUJBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtnQkFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLFlBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQzthQUM1QjtRQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0osT0FBTyxZQUFZLENBQUE7SUFDbkIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgVG9vbGJveCB9IGZyb20gXCIuL3Rvb2xib3hcIjtcbmltcG9ydCB7IFRvb2xiYXJJdGVtLCBUb29sc1N0YXRlIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvcmljaHRleHQtdG9vbGJveC5pbnRlcmZhY2VcIjtcblxuZXhwb3J0IGNsYXNzIFRvcGJhclN0cmF0ZWd5IGV4dGVuZHMgVG9vbGJveCB7XG5cbiAgICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICAgIHRoaXMuZGlzcGxheUNvbXBvbmVudCgpO1xuICAgIH1cbiAgXG4gIFxuICAgIG92ZXJyaWRlIGRpc3BsYXlDb21wb25lbnQoKTogdm9pZCB7XG4gICAgICBzdXBlci5kaXNwbGF5Q29tcG9uZW50KCk7XG4gICAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gdGhpcy5yZW5kZXJlcjIucGFyZW50Tm9kZSh0aGlzLmhvc3RFbD8ubmF0aXZlRWxlbWVudCk7XG4gICAgICB0aGlzLnJlbmRlcmVyMi5hcHBlbmRDaGlsZChwYXJlbnRFbGVtZW50LHRoaXMuY29tcG9uZW50RWwpO1xuICAgICAgdGhpcy5yZW5kZXJlcjIuYXBwZW5kQ2hpbGQocGFyZW50RWxlbWVudCwgdGhpcy5ob3N0RWw/Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYhLnNldElucHV0KCd0eXBlJywndG9wYmFyJyk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgcHJlcGFyZVVwZGF0ZWRUb29scyh0b29sU3RhdGU6IFRvb2xzU3RhdGUpOiBUb29sYmFySXRlbVtde1xuICAgICAgY29uc3QgdG9vbGJhckl0ZW1zID0gc3VwZXIucHJlcGFyZVVwZGF0ZWRUb29scyh0b29sU3RhdGUpO1xuICAgICAgY29uc3QgeyBmb3JtYXRzLCBoYXNTZWxlY3Rpb24sIGhhc0ZvY3VzIH0gPSB0b29sU3RhdGU7XG5cbiAgICAgIHRvb2xiYXJJdGVtcy5mb3JFYWNoKHRvb2wgPT4ge1xuICAgICAgICBpZighaGFzRm9jdXMpIHtcbiAgICAgICAgICB0b29sLmRpc2FibGVkID0gdHJ1ZVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0b29sLnRvb2wgPT09ICdjbGVhcicpIHtcbiAgICAgICAgICB0b29sLmRpc2FibGVkID0gIWhhc1NlbGVjdGlvbjtcbiAgICAgICAgfSBlbHNlIGlmICh0b29sLnRvb2wgPT09ICdsaW5rJykge1xuICAgICAgICAgIHRvb2wuc2VsZWN0ZWQgPSAhIWZvcm1hdHMubGluaztcbiAgICAgICAgICB0b29sLmRpc2FibGVkID0gIWhhc1NlbGVjdGlvbiAmJiAhZm9ybWF0cy5saW5rO1xuICAgICAgICAgIHRvb2wudmFsdWUgPSBmb3JtYXRzPy5saW5rO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIHJldHVybiB0b29sYmFySXRlbXNcbiAgICB9XG4gIH1cbiAgIl19