@ecodev/natural-editor 61.2.0 → 61.3.1

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.
@@ -1,6 +1,6 @@
1
1
  import { Component, inject } from '@angular/core';
2
- import { MAT_DIALOG_DATA, MatDialogRef, MatDialogModule } from '@angular/material/dialog';
3
- import { FormControl, FormGroup, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
2
+ import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';
3
+ import { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';
4
4
  import { ifValid } from '@ecodev/natural';
5
5
  import { MatButtonModule } from '@angular/material/button';
6
6
  import { MatInputModule } from '@angular/material/input';
@@ -37,4 +37,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImpor
37
37
  type: Component,
38
38
  args: [{ standalone: true, imports: [MatDialogModule, FormsModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatButtonModule], template: "<h2 i18n mat-dialog-title>Saisir les classes CSS</h2>\n\n<mat-dialog-content [formGroup]=\"form\">\n <mat-form-field>\n <mat-label i18n>Classes CSS</mat-label>\n <input matInput [formControl]=\"classControl\" (keydown.enter)=\"maybeConfirm()\" cdkFocusInitial />\n @if (classControl.hasError('pattern')) {\n <mat-error i18n>Doit \u00EAtre un ou plusieurs nom de classe CSS</mat-error>\n }\n </mat-form-field>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close i18n>Annuler</button>\n <button mat-stroked-button (click)=\"maybeConfirm()\" [disabled]=\"!form.valid\"><span i18n>Valider</span></button>\n</mat-dialog-actions>\n", styles: ["mat-dialog-content{display:grid;width:70vw;max-width:30em}\n"] }]
39
39
  }], ctorParameters: () => [] });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3MtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwtZWRpdG9yL3NyYy9saWIvY2xhc3MtZGlhbG9nL2NsYXNzLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsLWVkaXRvci9zcmMvbGliL2NsYXNzLWRpYWxvZy9jbGFzcy1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDeEYsT0FBTyxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BHLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7O0FBb0JoRSxNQUFNLE9BQU8sb0JBQW9CO0lBQ3JCLFNBQVMsR0FBRyxNQUFNLENBQXNELFlBQVksQ0FBQyxDQUFDO0lBRTlFLFlBQVksR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUU7UUFDL0MsVUFBVSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsd0NBQXdDLENBQUM7UUFDeEUsV0FBVyxFQUFFLElBQUk7S0FDcEIsQ0FBQyxDQUFDO0lBQ2EsSUFBSSxHQUFHLElBQUksU0FBUyxDQUFDO1FBQ2pDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWTtLQUMzQixDQUFDLENBQUM7SUFFSDtRQUNJLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBa0IsZUFBZSxDQUFDLENBQUM7UUFFdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVNLFlBQVk7UUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU8sT0FBTztRQUNYLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO3VHQXZCUSxvQkFBb0I7MkZBQXBCLG9CQUFvQix3RUMxQmpDLHF0QkFnQkEscUhEUWMsZUFBZSwrbkJBQUUsV0FBVyxrakJBQUUsbUJBQW1CLGtXQUFFLGtCQUFrQix1WUFBRSxjQUFjLDBXQUFFLGVBQWU7OzJGQUV2RyxvQkFBb0I7a0JBTmhDLFNBQVM7aUNBR00sSUFBSSxXQUNQLENBQUMsZUFBZSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIGluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmLCBNYXREaWFsb2dNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge0Zvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge2lmVmFsaWR9IGZyb20gJ0BlY29kZXYvbmF0dXJhbCc7XG5pbXBvcnQge01hdEJ1dHRvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7TWF0SW5wdXRNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7TWF0Rm9ybUZpZWxkTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcblxuZXhwb3J0IHR5cGUgQ2xhc3NEaWFsb2dEYXRhID0ge1xuICAgIC8qKlxuICAgICAqIENTUyBjbGFzcyBuYW1lc1xuICAgICAqXG4gICAgICogRWc6XG4gICAgICpcbiAgICAgKiAtIGBcIlwiYFxuICAgICAqIC0gYFwibXktY2xhc3MgbXktb3RoZXItY2xhc3NcImBcbiAgICAgKi9cbiAgICBjbGFzczogc3RyaW5nO1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGVVcmw6ICcuL2NsYXNzLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2NsYXNzLWRpYWxvZy5jb21wb25lbnQuc2NzcycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTWF0RGlhbG9nTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgTWF0Rm9ybUZpZWxkTW9kdWxlLCBNYXRJbnB1dE1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2xhc3NEaWFsb2dDb21wb25lbnQge1xuICAgIHByaXZhdGUgZGlhbG9nUmVmID0gaW5qZWN0PE1hdERpYWxvZ1JlZjxDbGFzc0RpYWxvZ0NvbXBvbmVudCwgQ2xhc3NEaWFsb2dEYXRhPj4oTWF0RGlhbG9nUmVmKTtcblxuICAgIHB1YmxpYyByZWFkb25seSBjbGFzc0NvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIHtcbiAgICAgICAgdmFsaWRhdG9yczogVmFsaWRhdG9ycy5wYXR0ZXJuKC8oXlxccyooLT9bX2EtekEtWl0rW19hLXpBLVowLTktXSpcXHMqKSspLyksXG4gICAgICAgIG5vbk51bGxhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIHB1YmxpYyByZWFkb25seSBmb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgIGNsYXNzOiB0aGlzLmNsYXNzQ29udHJvbCxcbiAgICB9KTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGluamVjdDxDbGFzc0RpYWxvZ0RhdGE+KE1BVF9ESUFMT0dfREFUQSk7XG5cbiAgICAgICAgdGhpcy5mb3JtLnNldFZhbHVlKGRhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXliZUNvbmZpcm0oKTogdm9pZCB7XG4gICAgICAgIGlmVmFsaWQodGhpcy5mb3JtKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jb25maXJtKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29uZmlybSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpO1xuICAgIH1cbn1cbiIsIjxoMiBpMThuIG1hdC1kaWFsb2ctdGl0bGU+U2Fpc2lyIGxlcyBjbGFzc2VzIENTUzwvaDI+XG5cbjxtYXQtZGlhbG9nLWNvbnRlbnQgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsIGkxOG4+Q2xhc3NlcyBDU1M8L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJjbGFzc0NvbnRyb2xcIiAoa2V5ZG93bi5lbnRlcik9XCJtYXliZUNvbmZpcm0oKVwiIGNka0ZvY3VzSW5pdGlhbCAvPlxuICAgICAgICBAaWYgKGNsYXNzQ29udHJvbC5oYXNFcnJvcigncGF0dGVybicpKSB7XG4gICAgICAgICAgICA8bWF0LWVycm9yIGkxOG4+RG9pdCDDqnRyZSB1biBvdSBwbHVzaWV1cnMgbm9tIGRlIGNsYXNzZSBDU1M8L21hdC1lcnJvcj5cbiAgICAgICAgfVxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG48L21hdC1kaWFsb2ctY29udGVudD5cblxuPG1hdC1kaWFsb2ctYWN0aW9ucyBhbGlnbj1cImVuZFwiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBtYXQtZGlhbG9nLWNsb3NlIGkxOG4+QW5udWxlcjwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJtYXliZUNvbmZpcm0oKVwiIFtkaXNhYmxlZF09XCIhZm9ybS52YWxpZFwiPjxzcGFuIGkxOG4+VmFsaWRlcjwvc3Bhbj48L2J1dHRvbj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuIl19
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3MtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwtZWRpdG9yL3NyYy9saWIvY2xhc3MtZGlhbG9nL2NsYXNzLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsLWVkaXRvci9zcmMvbGliL2NsYXNzLWRpYWxvZy9jbGFzcy1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDeEYsT0FBTyxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BHLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7O0FBb0JoRSxNQUFNLE9BQU8sb0JBQW9CO0lBQ3JCLFNBQVMsR0FBRyxNQUFNLENBQXNELFlBQVksQ0FBQyxDQUFDO0lBRTlFLFlBQVksR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUU7UUFDL0MsVUFBVSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsd0NBQXdDLENBQUM7UUFDeEUsV0FBVyxFQUFFLElBQUk7S0FDcEIsQ0FBQyxDQUFDO0lBQ2EsSUFBSSxHQUFHLElBQUksU0FBUyxDQUFDO1FBQ2pDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWTtLQUMzQixDQUFDLENBQUM7SUFFSDtRQUNJLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBa0IsZUFBZSxDQUFDLENBQUM7UUFFdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVNLFlBQVk7UUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU8sT0FBTztRQUNYLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO3VHQXZCUSxvQkFBb0I7MkZBQXBCLG9CQUFvQix3RUMxQmpDLHF0QkFnQkEscUhEUWMsZUFBZSwrbkJBQUUsV0FBVyxrakJBQUUsbUJBQW1CLGtXQUFFLGtCQUFrQix1WUFBRSxjQUFjLDBXQUFFLGVBQWU7OzJGQUV2RyxvQkFBb0I7a0JBTmhDLFNBQVM7aUNBR00sSUFBSSxXQUNQLENBQUMsZUFBZSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIGluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nTW9kdWxlLCBNYXREaWFsb2dSZWZ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge0Zvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge2lmVmFsaWR9IGZyb20gJ0BlY29kZXYvbmF0dXJhbCc7XG5pbXBvcnQge01hdEJ1dHRvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7TWF0SW5wdXRNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7TWF0Rm9ybUZpZWxkTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcblxuZXhwb3J0IHR5cGUgQ2xhc3NEaWFsb2dEYXRhID0ge1xuICAgIC8qKlxuICAgICAqIENTUyBjbGFzcyBuYW1lc1xuICAgICAqXG4gICAgICogRWc6XG4gICAgICpcbiAgICAgKiAtIGBcIlwiYFxuICAgICAqIC0gYFwibXktY2xhc3MgbXktb3RoZXItY2xhc3NcImBcbiAgICAgKi9cbiAgICBjbGFzczogc3RyaW5nO1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGVVcmw6ICcuL2NsYXNzLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2NsYXNzLWRpYWxvZy5jb21wb25lbnQuc2NzcycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTWF0RGlhbG9nTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgTWF0Rm9ybUZpZWxkTW9kdWxlLCBNYXRJbnB1dE1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2xhc3NEaWFsb2dDb21wb25lbnQge1xuICAgIHByaXZhdGUgZGlhbG9nUmVmID0gaW5qZWN0PE1hdERpYWxvZ1JlZjxDbGFzc0RpYWxvZ0NvbXBvbmVudCwgQ2xhc3NEaWFsb2dEYXRhPj4oTWF0RGlhbG9nUmVmKTtcblxuICAgIHB1YmxpYyByZWFkb25seSBjbGFzc0NvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIHtcbiAgICAgICAgdmFsaWRhdG9yczogVmFsaWRhdG9ycy5wYXR0ZXJuKC8oXlxccyooLT9bX2EtekEtWl0rW19hLXpBLVowLTktXSpcXHMqKSspLyksXG4gICAgICAgIG5vbk51bGxhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIHB1YmxpYyByZWFkb25seSBmb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgIGNsYXNzOiB0aGlzLmNsYXNzQ29udHJvbCxcbiAgICB9KTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGluamVjdDxDbGFzc0RpYWxvZ0RhdGE+KE1BVF9ESUFMT0dfREFUQSk7XG5cbiAgICAgICAgdGhpcy5mb3JtLnNldFZhbHVlKGRhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXliZUNvbmZpcm0oKTogdm9pZCB7XG4gICAgICAgIGlmVmFsaWQodGhpcy5mb3JtKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jb25maXJtKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29uZmlybSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpO1xuICAgIH1cbn1cbiIsIjxoMiBpMThuIG1hdC1kaWFsb2ctdGl0bGU+U2Fpc2lyIGxlcyBjbGFzc2VzIENTUzwvaDI+XG5cbjxtYXQtZGlhbG9nLWNvbnRlbnQgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsIGkxOG4+Q2xhc3NlcyBDU1M8L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJjbGFzc0NvbnRyb2xcIiAoa2V5ZG93bi5lbnRlcik9XCJtYXliZUNvbmZpcm0oKVwiIGNka0ZvY3VzSW5pdGlhbCAvPlxuICAgICAgICBAaWYgKGNsYXNzQ29udHJvbC5oYXNFcnJvcigncGF0dGVybicpKSB7XG4gICAgICAgICAgICA8bWF0LWVycm9yIGkxOG4+RG9pdCDDqnRyZSB1biBvdSBwbHVzaWV1cnMgbm9tIGRlIGNsYXNzZSBDU1M8L21hdC1lcnJvcj5cbiAgICAgICAgfVxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG48L21hdC1kaWFsb2ctY29udGVudD5cblxuPG1hdC1kaWFsb2ctYWN0aW9ucyBhbGlnbj1cImVuZFwiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBtYXQtZGlhbG9nLWNsb3NlIGkxOG4+QW5udWxlcjwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJtYXliZUNvbmZpcm0oKVwiIFtkaXNhYmxlZF09XCIhZm9ybS52YWxpZFwiPjxzcGFuIGkxOG4+VmFsaWRlcjwvc3Bhbj48L2J1dHRvbj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuIl19
@@ -1,10 +1,9 @@
1
1
  import { Component, inject } from '@angular/core';
2
- import { MAT_DIALOG_DATA, MatDialogRef, MatDialogModule } from '@angular/material/dialog';
3
- import { FormControl, FormGroup, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
4
- import { ifValid } from '@ecodev/natural';
2
+ import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';
3
+ import { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';
4
+ import { ifValid, NaturalIconDirective } from '@ecodev/natural';
5
5
  import { MatInputModule } from '@angular/material/input';
6
6
  import { MatFormFieldModule } from '@angular/material/form-field';
7
- import { NaturalIconDirective } from '@ecodev/natural';
8
7
  import { MatIconModule } from '@angular/material/icon';
9
8
  import { MatButtonModule } from '@angular/material/button';
10
9
  import * as i0 from "@angular/core";
@@ -195,4 +194,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImpor
195
194
  MatInputModule,
196
195
  ], template: "<h2 i18n mat-dialog-title>S\u00E9lectionner une couleur</h2>\n\n<mat-dialog-content [formGroup]=\"form\">\n <div>\n @for (row of colors; track row) {\n <div>\n @for (color of row; track color) {\n <div class=\"color\" [style]=\"{backgroundColor: color}\" (click)=\"selectColor(color)\"> </div>\n }\n </div>\n }\n </div>\n\n <div>\n <button mat-button (click)=\"selectColor('')\">\n <mat-icon naturalIcon=\"format_color_reset\" />\n <span i18n>Transparent</span></button\n >\n </div>\n\n <mat-form-field>\n <mat-label i18n>Couleur</mat-label>\n <input matInput [formControl]=\"colorControl\" (keydown.enter)=\"maybeConfirm()\" cdkFocusInitial />\n <div\n class=\"sample\"\n matTextSuffix\n [style]=\"{backgroundColor: colorControl.valid ? colorControl.value : ''}\"\n ></div>\n @if (colorControl.hasError('pattern')) {\n <mat-error i18n>Doit \u00EAtre le format hexadecimal. Par exemple: #ff4000 </mat-error>\n }\n </mat-form-field>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close i18n>Annuler</button>\n <button mat-stroked-button (click)=\"maybeConfirm()\" [disabled]=\"!form.valid\"><span i18n>Valider</span></button>\n</mat-dialog-actions>\n", styles: ["mat-dialog-content{display:grid;row-gap:25px;justify-content:center;width:70vw;max-width:30em}.color{display:inline-block;cursor:pointer;margin:3px;width:25px;height:25px}.color:hover{margin:0;padding:3px}.sample{width:27px;height:27px}\n"] }]
197
196
  }], ctorParameters: () => [] });
198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwtZWRpdG9yL3NyYy9saWIvY29sb3ItZGlhbG9nL2NvbG9yLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsLWVkaXRvci9zcmMvbGliL2NvbG9yLWRpYWxvZy9jb2xvci1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDeEYsT0FBTyxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BHLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7QUE2QnpELE1BQU0sT0FBTyxvQkFBb0I7SUFDckIsU0FBUyxHQUFHLE1BQU0sQ0FBc0QsWUFBWSxDQUFDLENBQUM7SUFFOUUsTUFBTSxHQUFlO1FBQ2pDO1lBQ0ksU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1NBQ1o7UUFDRDtZQUNJLFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztTQUNaO1FBQ0Q7WUFDSSxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7U0FDWjtRQUNEO1lBQ0ksU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1NBQ1o7UUFDRDtZQUNJLFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztTQUNaO1FBQ0Q7WUFDSSxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7U0FDWjtRQUNEO1lBQ0ksU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1NBQ1o7UUFDRDtZQUNJLFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztTQUNaO1FBQ0Q7WUFDSSxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7U0FDWjtRQUNEO1lBQ0ksU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1NBQ1o7S0FDSixDQUFDO0lBRWMsWUFBWSxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRTtRQUMvQyxVQUFVLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztRQUNyRCxXQUFXLEVBQUUsSUFBSTtLQUNwQixDQUFDLENBQUM7SUFDYSxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUM7UUFDakMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZO0tBQzNCLENBQUMsQ0FBQztJQUVIO1FBQ0ksTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFrQixlQUFlLENBQUMsQ0FBQztRQUV0RCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU0sWUFBWTtRQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTyxPQUFPO1FBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTSxXQUFXLENBQUMsS0FBYTtRQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEIsQ0FBQzt1R0EzS1Esb0JBQW9COzJGQUFwQixvQkFBb0Isd0VDckNqQyxvNUNBc0NBLHVTRFhRLGVBQWUsK25CQUNmLFdBQVcsa2pCQUNYLG1CQUFtQixrV0FDbkIsZUFBZSwyTkFDZixhQUFhLG9MQUNiLG9CQUFvQixrR0FDcEIsa0JBQWtCLHdnQkFDbEIsY0FBYzs7MkZBR1Qsb0JBQW9CO2tCQWZoQyxTQUFTO2lDQUdNLElBQUksV0FDUDt3QkFDTCxlQUFlO3dCQUNmLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLGFBQWE7d0JBQ2Isb0JBQW9CO3dCQUNwQixrQkFBa0I7d0JBQ2xCLGNBQWM7cUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIGluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmLCBNYXREaWFsb2dNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge0Zvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge2lmVmFsaWR9IGZyb20gJ0BlY29kZXYvbmF0dXJhbCc7XG5pbXBvcnQge01hdElucHV0TW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQge01hdEZvcm1GaWVsZE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQge05hdHVyYWxJY29uRGlyZWN0aXZlfSBmcm9tICdAZWNvZGV2L25hdHVyYWwnO1xuaW1wb3J0IHtNYXRJY29uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7TWF0QnV0dG9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuXG5leHBvcnQgdHlwZSBDb2xvckRpYWxvZ0RhdGEgPSB7XG4gICAgLyoqXG4gICAgICogRW1wdHkgc3RyaW5nIG1lYW5zIG5vIGNvbG9yIHNldCBhdCBhbGwuIEFueXRoaW5nIGVsc2UgbXVzdCBiZSBhIHZhbGlkIENTUyBjb2xvciBpbiBoZXhhIGZvcm1hdC5cbiAgICAgKlxuICAgICAqIEVnOlxuICAgICAqXG4gICAgICogLSBgXCJcImBcbiAgICAgKiAtIGBcIiNmZjQwMDBcImBcbiAgICAgKi9cbiAgICBjb2xvcjogc3RyaW5nO1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbG9yLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2NvbG9yLWRpYWxvZy5jb21wb25lbnQuc2NzcycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE1hdERpYWxvZ01vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgTmF0dXJhbEljb25EaXJlY3RpdmUsXG4gICAgICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICAgICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29sb3JEaWFsb2dDb21wb25lbnQge1xuICAgIHByaXZhdGUgZGlhbG9nUmVmID0gaW5qZWN0PE1hdERpYWxvZ1JlZjxDb2xvckRpYWxvZ0NvbXBvbmVudCwgQ29sb3JEaWFsb2dEYXRhPj4oTWF0RGlhbG9nUmVmKTtcblxuICAgIHB1YmxpYyByZWFkb25seSBjb2xvcnM6IHN0cmluZ1tdW10gPSBbXG4gICAgICAgIFtcbiAgICAgICAgICAgICcjMDAwMDAwJyxcbiAgICAgICAgICAgICcjMTExMTExJyxcbiAgICAgICAgICAgICcjMWMxYzFjJyxcbiAgICAgICAgICAgICcjMzMzMzMzJyxcbiAgICAgICAgICAgICcjNjY2NjY2JyxcbiAgICAgICAgICAgICcjODA4MDgwJyxcbiAgICAgICAgICAgICcjOTk5OTk5JyxcbiAgICAgICAgICAgICcjYjJiMmIyJyxcbiAgICAgICAgICAgICcjY2NjY2NjJyxcbiAgICAgICAgICAgICcjZGRkZGRkJyxcbiAgICAgICAgICAgICcjZWVlZWVlJyxcbiAgICAgICAgICAgICcjZmZmZmZmJyxcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJyNmZmZmMDAnLFxuICAgICAgICAgICAgJyNmZmJmMDAnLFxuICAgICAgICAgICAgJyNmZjgwMDAnLFxuICAgICAgICAgICAgJyNmZjQwMDAnLFxuICAgICAgICAgICAgJyNmZjAwMDAnLFxuICAgICAgICAgICAgJyNiZjAwNDEnLFxuICAgICAgICAgICAgJyM4MDAwODAnLFxuICAgICAgICAgICAgJyM1NTMwOGQnLFxuICAgICAgICAgICAgJyMyYTYwOTknLFxuICAgICAgICAgICAgJyMxNTg0NjYnLFxuICAgICAgICAgICAgJyMwMGE5MzMnLFxuICAgICAgICAgICAgJyM4MWQ0MWEnLFxuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICAnI2ZmZmZkNycsXG4gICAgICAgICAgICAnI2ZmZjVjZScsXG4gICAgICAgICAgICAnI2ZmZGJiNicsXG4gICAgICAgICAgICAnI2ZmZDhjZScsXG4gICAgICAgICAgICAnI2ZmZDdkNycsXG4gICAgICAgICAgICAnI2Y3ZDFkNScsXG4gICAgICAgICAgICAnI2UwYzJjZCcsXG4gICAgICAgICAgICAnI2RlZGNlNicsXG4gICAgICAgICAgICAnI2RlZTZlZicsXG4gICAgICAgICAgICAnI2RlZTdlNScsXG4gICAgICAgICAgICAnI2RkZThjYicsXG4gICAgICAgICAgICAnI2Y2ZjlkNCcsXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgICcjZmZmZmE2JyxcbiAgICAgICAgICAgICcjZmZlOTk0JyxcbiAgICAgICAgICAgICcjZmZiNjZjJyxcbiAgICAgICAgICAgICcjZmZhYTk1JyxcbiAgICAgICAgICAgICcjZmZhNmE2JyxcbiAgICAgICAgICAgICcjZWM5YmE0JyxcbiAgICAgICAgICAgICcjYmY4MTllJyxcbiAgICAgICAgICAgICcjYjdiM2NhJyxcbiAgICAgICAgICAgICcjYjRjN2RjJyxcbiAgICAgICAgICAgICcjYjNjYWM3JyxcbiAgICAgICAgICAgICcjYWZkMDk1JyxcbiAgICAgICAgICAgICcjZThmMmExJyxcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJyNmZmZmNmQnLFxuICAgICAgICAgICAgJyNmZmRlNTknLFxuICAgICAgICAgICAgJyNmZjk3MmYnLFxuICAgICAgICAgICAgJyNmZjdiNTknLFxuICAgICAgICAgICAgJyNmZjZkNmQnLFxuICAgICAgICAgICAgJyNlMTYxNzMnLFxuICAgICAgICAgICAgJyNhMTQ2N2UnLFxuICAgICAgICAgICAgJyM4ZTg2YWUnLFxuICAgICAgICAgICAgJyM3MjlmY2YnLFxuICAgICAgICAgICAgJyM4MWFjYTYnLFxuICAgICAgICAgICAgJyM3N2JjNjUnLFxuICAgICAgICAgICAgJyNkNGVhNmInLFxuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICAnI2ZmZmYzOCcsXG4gICAgICAgICAgICAnI2ZmZDQyOCcsXG4gICAgICAgICAgICAnI2ZmODYwZCcsXG4gICAgICAgICAgICAnI2ZmNTQyOScsXG4gICAgICAgICAgICAnI2ZmMzgzOCcsXG4gICAgICAgICAgICAnI2Q2MmU0ZScsXG4gICAgICAgICAgICAnIzhkMWQ3NScsXG4gICAgICAgICAgICAnIzZiNWU5YicsXG4gICAgICAgICAgICAnIzU5ODNiMCcsXG4gICAgICAgICAgICAnIzUwOTM4YScsXG4gICAgICAgICAgICAnIzNmYWY0NicsXG4gICAgICAgICAgICAnI2JiZTMzZCcsXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgICcjZTZlOTA1JyxcbiAgICAgICAgICAgICcjZThhMjAyJyxcbiAgICAgICAgICAgICcjZWE3NTAwJyxcbiAgICAgICAgICAgICcjZWQ0YzA1JyxcbiAgICAgICAgICAgICcjZjEwZDBjJyxcbiAgICAgICAgICAgICcjYTcwNzRiJyxcbiAgICAgICAgICAgICcjNzgwMzczJyxcbiAgICAgICAgICAgICcjNWIyNzdkJyxcbiAgICAgICAgICAgICcjMzQ2NWE0JyxcbiAgICAgICAgICAgICcjMTY4MjUzJyxcbiAgICAgICAgICAgICcjMDY5YTJlJyxcbiAgICAgICAgICAgICcjNWViOTFlJyxcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJyNhY2IyMGMnLFxuICAgICAgICAgICAgJyNiNDc4MDQnLFxuICAgICAgICAgICAgJyNiODVjMDAnLFxuICAgICAgICAgICAgJyNiZTQ4MGEnLFxuICAgICAgICAgICAgJyNjOTIxMWUnLFxuICAgICAgICAgICAgJyM4NjExNDEnLFxuICAgICAgICAgICAgJyM2NTA5NTMnLFxuICAgICAgICAgICAgJyM1NTIxNWInLFxuICAgICAgICAgICAgJyMzNTUyNjknLFxuICAgICAgICAgICAgJyMxZTZhMzknLFxuICAgICAgICAgICAgJyMxMjc2MjInLFxuICAgICAgICAgICAgJyM0NjhhMWEnLFxuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICAnIzcwNmUwYycsXG4gICAgICAgICAgICAnIzc4NGIwNCcsXG4gICAgICAgICAgICAnIzdiM2QwMCcsXG4gICAgICAgICAgICAnIzgxMzcwOScsXG4gICAgICAgICAgICAnIzhkMjgxZScsXG4gICAgICAgICAgICAnIzYxMTcyOScsXG4gICAgICAgICAgICAnIzRlMTAyZCcsXG4gICAgICAgICAgICAnIzQ4MWQzMicsXG4gICAgICAgICAgICAnIzM4M2QzYycsXG4gICAgICAgICAgICAnIzI4NDcxZicsXG4gICAgICAgICAgICAnIzIyNGIxMicsXG4gICAgICAgICAgICAnIzM5NTUxMScsXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgICcjNDQzMjA1JyxcbiAgICAgICAgICAgICcjNDcyNzAyJyxcbiAgICAgICAgICAgICcjNDkyMzAwJyxcbiAgICAgICAgICAgICcjNGIyMjA0JyxcbiAgICAgICAgICAgICcjNTAyMDBjJyxcbiAgICAgICAgICAgICcjNDExOTBkJyxcbiAgICAgICAgICAgICcjM2IxNjBlJyxcbiAgICAgICAgICAgICcjM2ExYTBmJyxcbiAgICAgICAgICAgICcjMzYyNDEzJyxcbiAgICAgICAgICAgICcjMzAyNzA5JyxcbiAgICAgICAgICAgICcjMmUyNzA2JyxcbiAgICAgICAgICAgICcjMzQyYTA2JyxcbiAgICAgICAgXSxcbiAgICBdO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbG9yQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJywge1xuICAgICAgICB2YWxpZGF0b3JzOiBWYWxpZGF0b3JzLnBhdHRlcm4oL14jXFxwe0hleF9EaWdpdH17Nn0vdSksXG4gICAgICAgIG5vbk51bGxhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIHB1YmxpYyByZWFkb25seSBmb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgIGNvbG9yOiB0aGlzLmNvbG9yQ29udHJvbCxcbiAgICB9KTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGluamVjdDxDb2xvckRpYWxvZ0RhdGE+KE1BVF9ESUFMT0dfREFUQSk7XG5cbiAgICAgICAgdGhpcy5mb3JtLnNldFZhbHVlKGRhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXliZUNvbmZpcm0oKTogdm9pZCB7XG4gICAgICAgIGlmVmFsaWQodGhpcy5mb3JtKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jb25maXJtKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29uZmlybSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZWxlY3RDb2xvcihjb2xvcjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29sb3JDb250cm9sLnNldFZhbHVlKGNvbG9yKTtcbiAgICAgICAgdGhpcy5tYXliZUNvbmZpcm0oKTtcbiAgICB9XG59XG4iLCI8aDIgaTE4biBtYXQtZGlhbG9nLXRpdGxlPlPDqWxlY3Rpb25uZXIgdW5lIGNvdWxldXI8L2gyPlxuXG48bWF0LWRpYWxvZy1jb250ZW50IFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICAgIDxkaXY+XG4gICAgICAgIEBmb3IgKHJvdyBvZiBjb2xvcnM7IHRyYWNrIHJvdykge1xuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICBAZm9yIChjb2xvciBvZiByb3c7IHRyYWNrIGNvbG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvclwiIFtzdHlsZV09XCJ7YmFja2dyb3VuZENvbG9yOiBjb2xvcn1cIiAoY2xpY2spPVwic2VsZWN0Q29sb3IoY29sb3IpXCI+IDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2PlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cInNlbGVjdENvbG9yKCcnKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIG5hdHVyYWxJY29uPVwiZm9ybWF0X2NvbG9yX3Jlc2V0XCIgLz5cbiAgICAgICAgICAgIDxzcGFuIGkxOG4+VHJhbnNwYXJlbnQ8L3NwYW4+PC9idXR0b25cbiAgICAgICAgPlxuICAgIDwvZGl2PlxuXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsIGkxOG4+Q291bGV1cjwvbWF0LWxhYmVsPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cImNvbG9yQ29udHJvbFwiIChrZXlkb3duLmVudGVyKT1cIm1heWJlQ29uZmlybSgpXCIgY2RrRm9jdXNJbml0aWFsIC8+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2FtcGxlXCJcbiAgICAgICAgICAgIG1hdFRleHRTdWZmaXhcbiAgICAgICAgICAgIFtzdHlsZV09XCJ7YmFja2dyb3VuZENvbG9yOiBjb2xvckNvbnRyb2wudmFsaWQgPyBjb2xvckNvbnRyb2wudmFsdWUgOiAnJ31cIlxuICAgICAgICA+PC9kaXY+XG4gICAgICAgIEBpZiAoY29sb3JDb250cm9sLmhhc0Vycm9yKCdwYXR0ZXJuJykpIHtcbiAgICAgICAgICAgIDxtYXQtZXJyb3IgaTE4bj5Eb2l0IMOqdHJlIGxlIGZvcm1hdCBoZXhhZGVjaW1hbC4gUGFyIGV4ZW1wbGU6ICNmZjQwMDAgPC9tYXQtZXJyb3I+XG4gICAgICAgIH1cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG5cbjxtYXQtZGlhbG9nLWFjdGlvbnMgYWxpZ249XCJlbmRcIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gbWF0LWRpYWxvZy1jbG9zZSBpMThuPkFubnVsZXI8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiAoY2xpY2spPVwibWF5YmVDb25maXJtKClcIiBbZGlzYWJsZWRdPVwiIWZvcm0udmFsaWRcIj48c3BhbiBpMThuPlZhbGlkZXI8L3NwYW4+PC9idXR0b24+XG48L21hdC1kaWFsb2ctYWN0aW9ucz5cbiJdfQ==
197
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwtZWRpdG9yL3NyYy9saWIvY29sb3ItZGlhbG9nL2NvbG9yLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsLWVkaXRvci9zcmMvbGliL2NvbG9yLWRpYWxvZy9jb2xvci1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDeEYsT0FBTyxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BHLE9BQU8sRUFBQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7QUE2QnpELE1BQU0sT0FBTyxvQkFBb0I7SUFDckIsU0FBUyxHQUFHLE1BQU0sQ0FBc0QsWUFBWSxDQUFDLENBQUM7SUFFOUUsTUFBTSxHQUFlO1FBQ2pDO1lBQ0ksU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1NBQ1o7UUFDRDtZQUNJLFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztTQUNaO1FBQ0Q7WUFDSSxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7U0FDWjtRQUNEO1lBQ0ksU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1NBQ1o7UUFDRDtZQUNJLFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztTQUNaO1FBQ0Q7WUFDSSxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7U0FDWjtRQUNEO1lBQ0ksU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1NBQ1o7UUFDRDtZQUNJLFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztTQUNaO1FBQ0Q7WUFDSSxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7U0FDWjtRQUNEO1lBQ0ksU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1NBQ1o7S0FDSixDQUFDO0lBRWMsWUFBWSxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRTtRQUMvQyxVQUFVLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztRQUNyRCxXQUFXLEVBQUUsSUFBSTtLQUNwQixDQUFDLENBQUM7SUFDYSxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUM7UUFDakMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZO0tBQzNCLENBQUMsQ0FBQztJQUVIO1FBQ0ksTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFrQixlQUFlLENBQUMsQ0FBQztRQUV0RCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU0sWUFBWTtRQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTyxPQUFPO1FBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTSxXQUFXLENBQUMsS0FBYTtRQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEIsQ0FBQzt1R0EzS1Esb0JBQW9COzJGQUFwQixvQkFBb0Isd0VDcENqQyxvNUNBc0NBLHVTRFpRLGVBQWUsK25CQUNmLFdBQVcsa2pCQUNYLG1CQUFtQixrV0FDbkIsZUFBZSwyTkFDZixhQUFhLG9MQUNiLG9CQUFvQixrR0FDcEIsa0JBQWtCLHdnQkFDbEIsY0FBYzs7MkZBR1Qsb0JBQW9CO2tCQWZoQyxTQUFTO2lDQUdNLElBQUksV0FDUDt3QkFDTCxlQUFlO3dCQUNmLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLGFBQWE7d0JBQ2Isb0JBQW9CO3dCQUNwQixrQkFBa0I7d0JBQ2xCLGNBQWM7cUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIGluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nTW9kdWxlLCBNYXREaWFsb2dSZWZ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge0Zvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge2lmVmFsaWQsIE5hdHVyYWxJY29uRGlyZWN0aXZlfSBmcm9tICdAZWNvZGV2L25hdHVyYWwnO1xuaW1wb3J0IHtNYXRJbnB1dE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHtNYXRGb3JtRmllbGRNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHtNYXRJY29uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7TWF0QnV0dG9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuXG5leHBvcnQgdHlwZSBDb2xvckRpYWxvZ0RhdGEgPSB7XG4gICAgLyoqXG4gICAgICogRW1wdHkgc3RyaW5nIG1lYW5zIG5vIGNvbG9yIHNldCBhdCBhbGwuIEFueXRoaW5nIGVsc2UgbXVzdCBiZSBhIHZhbGlkIENTUyBjb2xvciBpbiBoZXhhIGZvcm1hdC5cbiAgICAgKlxuICAgICAqIEVnOlxuICAgICAqXG4gICAgICogLSBgXCJcImBcbiAgICAgKiAtIGBcIiNmZjQwMDBcImBcbiAgICAgKi9cbiAgICBjb2xvcjogc3RyaW5nO1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbG9yLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2NvbG9yLWRpYWxvZy5jb21wb25lbnQuc2NzcycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE1hdERpYWxvZ01vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgTmF0dXJhbEljb25EaXJlY3RpdmUsXG4gICAgICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICAgICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29sb3JEaWFsb2dDb21wb25lbnQge1xuICAgIHByaXZhdGUgZGlhbG9nUmVmID0gaW5qZWN0PE1hdERpYWxvZ1JlZjxDb2xvckRpYWxvZ0NvbXBvbmVudCwgQ29sb3JEaWFsb2dEYXRhPj4oTWF0RGlhbG9nUmVmKTtcblxuICAgIHB1YmxpYyByZWFkb25seSBjb2xvcnM6IHN0cmluZ1tdW10gPSBbXG4gICAgICAgIFtcbiAgICAgICAgICAgICcjMDAwMDAwJyxcbiAgICAgICAgICAgICcjMTExMTExJyxcbiAgICAgICAgICAgICcjMWMxYzFjJyxcbiAgICAgICAgICAgICcjMzMzMzMzJyxcbiAgICAgICAgICAgICcjNjY2NjY2JyxcbiAgICAgICAgICAgICcjODA4MDgwJyxcbiAgICAgICAgICAgICcjOTk5OTk5JyxcbiAgICAgICAgICAgICcjYjJiMmIyJyxcbiAgICAgICAgICAgICcjY2NjY2NjJyxcbiAgICAgICAgICAgICcjZGRkZGRkJyxcbiAgICAgICAgICAgICcjZWVlZWVlJyxcbiAgICAgICAgICAgICcjZmZmZmZmJyxcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJyNmZmZmMDAnLFxuICAgICAgICAgICAgJyNmZmJmMDAnLFxuICAgICAgICAgICAgJyNmZjgwMDAnLFxuICAgICAgICAgICAgJyNmZjQwMDAnLFxuICAgICAgICAgICAgJyNmZjAwMDAnLFxuICAgICAgICAgICAgJyNiZjAwNDEnLFxuICAgICAgICAgICAgJyM4MDAwODAnLFxuICAgICAgICAgICAgJyM1NTMwOGQnLFxuICAgICAgICAgICAgJyMyYTYwOTknLFxuICAgICAgICAgICAgJyMxNTg0NjYnLFxuICAgICAgICAgICAgJyMwMGE5MzMnLFxuICAgICAgICAgICAgJyM4MWQ0MWEnLFxuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICAnI2ZmZmZkNycsXG4gICAgICAgICAgICAnI2ZmZjVjZScsXG4gICAgICAgICAgICAnI2ZmZGJiNicsXG4gICAgICAgICAgICAnI2ZmZDhjZScsXG4gICAgICAgICAgICAnI2ZmZDdkNycsXG4gICAgICAgICAgICAnI2Y3ZDFkNScsXG4gICAgICAgICAgICAnI2UwYzJjZCcsXG4gICAgICAgICAgICAnI2RlZGNlNicsXG4gICAgICAgICAgICAnI2RlZTZlZicsXG4gICAgICAgICAgICAnI2RlZTdlNScsXG4gICAgICAgICAgICAnI2RkZThjYicsXG4gICAgICAgICAgICAnI2Y2ZjlkNCcsXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgICcjZmZmZmE2JyxcbiAgICAgICAgICAgICcjZmZlOTk0JyxcbiAgICAgICAgICAgICcjZmZiNjZjJyxcbiAgICAgICAgICAgICcjZmZhYTk1JyxcbiAgICAgICAgICAgICcjZmZhNmE2JyxcbiAgICAgICAgICAgICcjZWM5YmE0JyxcbiAgICAgICAgICAgICcjYmY4MTllJyxcbiAgICAgICAgICAgICcjYjdiM2NhJyxcbiAgICAgICAgICAgICcjYjRjN2RjJyxcbiAgICAgICAgICAgICcjYjNjYWM3JyxcbiAgICAgICAgICAgICcjYWZkMDk1JyxcbiAgICAgICAgICAgICcjZThmMmExJyxcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJyNmZmZmNmQnLFxuICAgICAgICAgICAgJyNmZmRlNTknLFxuICAgICAgICAgICAgJyNmZjk3MmYnLFxuICAgICAgICAgICAgJyNmZjdiNTknLFxuICAgICAgICAgICAgJyNmZjZkNmQnLFxuICAgICAgICAgICAgJyNlMTYxNzMnLFxuICAgICAgICAgICAgJyNhMTQ2N2UnLFxuICAgICAgICAgICAgJyM4ZTg2YWUnLFxuICAgICAgICAgICAgJyM3MjlmY2YnLFxuICAgICAgICAgICAgJyM4MWFjYTYnLFxuICAgICAgICAgICAgJyM3N2JjNjUnLFxuICAgICAgICAgICAgJyNkNGVhNmInLFxuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICAnI2ZmZmYzOCcsXG4gICAgICAgICAgICAnI2ZmZDQyOCcsXG4gICAgICAgICAgICAnI2ZmODYwZCcsXG4gICAgICAgICAgICAnI2ZmNTQyOScsXG4gICAgICAgICAgICAnI2ZmMzgzOCcsXG4gICAgICAgICAgICAnI2Q2MmU0ZScsXG4gICAgICAgICAgICAnIzhkMWQ3NScsXG4gICAgICAgICAgICAnIzZiNWU5YicsXG4gICAgICAgICAgICAnIzU5ODNiMCcsXG4gICAgICAgICAgICAnIzUwOTM4YScsXG4gICAgICAgICAgICAnIzNmYWY0NicsXG4gICAgICAgICAgICAnI2JiZTMzZCcsXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgICcjZTZlOTA1JyxcbiAgICAgICAgICAgICcjZThhMjAyJyxcbiAgICAgICAgICAgICcjZWE3NTAwJyxcbiAgICAgICAgICAgICcjZWQ0YzA1JyxcbiAgICAgICAgICAgICcjZjEwZDBjJyxcbiAgICAgICAgICAgICcjYTcwNzRiJyxcbiAgICAgICAgICAgICcjNzgwMzczJyxcbiAgICAgICAgICAgICcjNWIyNzdkJyxcbiAgICAgICAgICAgICcjMzQ2NWE0JyxcbiAgICAgICAgICAgICcjMTY4MjUzJyxcbiAgICAgICAgICAgICcjMDY5YTJlJyxcbiAgICAgICAgICAgICcjNWViOTFlJyxcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJyNhY2IyMGMnLFxuICAgICAgICAgICAgJyNiNDc4MDQnLFxuICAgICAgICAgICAgJyNiODVjMDAnLFxuICAgICAgICAgICAgJyNiZTQ4MGEnLFxuICAgICAgICAgICAgJyNjOTIxMWUnLFxuICAgICAgICAgICAgJyM4NjExNDEnLFxuICAgICAgICAgICAgJyM2NTA5NTMnLFxuICAgICAgICAgICAgJyM1NTIxNWInLFxuICAgICAgICAgICAgJyMzNTUyNjknLFxuICAgICAgICAgICAgJyMxZTZhMzknLFxuICAgICAgICAgICAgJyMxMjc2MjInLFxuICAgICAgICAgICAgJyM0NjhhMWEnLFxuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICAnIzcwNmUwYycsXG4gICAgICAgICAgICAnIzc4NGIwNCcsXG4gICAgICAgICAgICAnIzdiM2QwMCcsXG4gICAgICAgICAgICAnIzgxMzcwOScsXG4gICAgICAgICAgICAnIzhkMjgxZScsXG4gICAgICAgICAgICAnIzYxMTcyOScsXG4gICAgICAgICAgICAnIzRlMTAyZCcsXG4gICAgICAgICAgICAnIzQ4MWQzMicsXG4gICAgICAgICAgICAnIzM4M2QzYycsXG4gICAgICAgICAgICAnIzI4NDcxZicsXG4gICAgICAgICAgICAnIzIyNGIxMicsXG4gICAgICAgICAgICAnIzM5NTUxMScsXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgICcjNDQzMjA1JyxcbiAgICAgICAgICAgICcjNDcyNzAyJyxcbiAgICAgICAgICAgICcjNDkyMzAwJyxcbiAgICAgICAgICAgICcjNGIyMjA0JyxcbiAgICAgICAgICAgICcjNTAyMDBjJyxcbiAgICAgICAgICAgICcjNDExOTBkJyxcbiAgICAgICAgICAgICcjM2IxNjBlJyxcbiAgICAgICAgICAgICcjM2ExYTBmJyxcbiAgICAgICAgICAgICcjMzYyNDEzJyxcbiAgICAgICAgICAgICcjMzAyNzA5JyxcbiAgICAgICAgICAgICcjMmUyNzA2JyxcbiAgICAgICAgICAgICcjMzQyYTA2JyxcbiAgICAgICAgXSxcbiAgICBdO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbG9yQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJywge1xuICAgICAgICB2YWxpZGF0b3JzOiBWYWxpZGF0b3JzLnBhdHRlcm4oL14jXFxwe0hleF9EaWdpdH17Nn0vdSksXG4gICAgICAgIG5vbk51bGxhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIHB1YmxpYyByZWFkb25seSBmb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgIGNvbG9yOiB0aGlzLmNvbG9yQ29udHJvbCxcbiAgICB9KTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGluamVjdDxDb2xvckRpYWxvZ0RhdGE+KE1BVF9ESUFMT0dfREFUQSk7XG5cbiAgICAgICAgdGhpcy5mb3JtLnNldFZhbHVlKGRhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXliZUNvbmZpcm0oKTogdm9pZCB7XG4gICAgICAgIGlmVmFsaWQodGhpcy5mb3JtKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jb25maXJtKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29uZmlybSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZWxlY3RDb2xvcihjb2xvcjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29sb3JDb250cm9sLnNldFZhbHVlKGNvbG9yKTtcbiAgICAgICAgdGhpcy5tYXliZUNvbmZpcm0oKTtcbiAgICB9XG59XG4iLCI8aDIgaTE4biBtYXQtZGlhbG9nLXRpdGxlPlPDqWxlY3Rpb25uZXIgdW5lIGNvdWxldXI8L2gyPlxuXG48bWF0LWRpYWxvZy1jb250ZW50IFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICAgIDxkaXY+XG4gICAgICAgIEBmb3IgKHJvdyBvZiBjb2xvcnM7IHRyYWNrIHJvdykge1xuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICBAZm9yIChjb2xvciBvZiByb3c7IHRyYWNrIGNvbG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvclwiIFtzdHlsZV09XCJ7YmFja2dyb3VuZENvbG9yOiBjb2xvcn1cIiAoY2xpY2spPVwic2VsZWN0Q29sb3IoY29sb3IpXCI+IDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2PlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cInNlbGVjdENvbG9yKCcnKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIG5hdHVyYWxJY29uPVwiZm9ybWF0X2NvbG9yX3Jlc2V0XCIgLz5cbiAgICAgICAgICAgIDxzcGFuIGkxOG4+VHJhbnNwYXJlbnQ8L3NwYW4+PC9idXR0b25cbiAgICAgICAgPlxuICAgIDwvZGl2PlxuXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsIGkxOG4+Q291bGV1cjwvbWF0LWxhYmVsPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cImNvbG9yQ29udHJvbFwiIChrZXlkb3duLmVudGVyKT1cIm1heWJlQ29uZmlybSgpXCIgY2RrRm9jdXNJbml0aWFsIC8+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2FtcGxlXCJcbiAgICAgICAgICAgIG1hdFRleHRTdWZmaXhcbiAgICAgICAgICAgIFtzdHlsZV09XCJ7YmFja2dyb3VuZENvbG9yOiBjb2xvckNvbnRyb2wudmFsaWQgPyBjb2xvckNvbnRyb2wudmFsdWUgOiAnJ31cIlxuICAgICAgICA+PC9kaXY+XG4gICAgICAgIEBpZiAoY29sb3JDb250cm9sLmhhc0Vycm9yKCdwYXR0ZXJuJykpIHtcbiAgICAgICAgICAgIDxtYXQtZXJyb3IgaTE4bj5Eb2l0IMOqdHJlIGxlIGZvcm1hdCBoZXhhZGVjaW1hbC4gUGFyIGV4ZW1wbGU6ICNmZjQwMDAgPC9tYXQtZXJyb3I+XG4gICAgICAgIH1cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG5cbjxtYXQtZGlhbG9nLWFjdGlvbnMgYWxpZ249XCJlbmRcIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gbWF0LWRpYWxvZy1jbG9zZSBpMThuPkFubnVsZXI8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiAoY2xpY2spPVwibWF5YmVDb25maXJtKClcIiBbZGlzYWJsZWRdPVwiIWZvcm0udmFsaWRcIj48c3BhbiBpMThuPlZhbGlkZXI8L3NwYW4+PC9idXR0b24+XG48L21hdC1kaWFsb2ctYWN0aW9ucz5cbiJdfQ==
@@ -1,4 +1,4 @@
1
- import { Directive, HostBinding, Input, inject } from '@angular/core';
1
+ import { Directive, HostBinding, inject, Input } from '@angular/core';
2
2
  import { DOCUMENT } from '@angular/common';
3
3
  import * as i0 from "@angular/core";
4
4
  /**
@@ -72,4 +72,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImpor
72
72
  type: Input,
73
73
  args: [{ required: true }]
74
74
  }] } });
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWNzcy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsLWVkaXRvci9zcmMvbGliL2N1c3RvbS1jc3MvY3VzdG9tLWNzcy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7O0FBRXpDOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLE1BQWMsRUFBRSxHQUFXO0lBQ2pELE1BQU0sR0FBRyxJQUFJLEdBQUcsTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUU3QixPQUFPLEdBQUc7U0FDTCxPQUFPLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQ2hDLFNBQVM7U0FDSixLQUFLLENBQUMsR0FBRyxDQUFDO1NBQ1YsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ1osSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDdkMsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEMsQ0FBQztJQUNMLENBQUMsQ0FBQztTQUNELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FDakI7U0FDQSxJQUFJLEVBQUUsQ0FBQztBQUNoQixDQUFDO0FBRUQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLElBQUksY0FBYyxHQUFHLENBQUMsQ0FBQztBQUV2Qjs7Ozs7Ozs7OztHQVVHO0FBS0gsTUFBTSxPQUFPLHlCQUF5QjtJQUNqQixRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXJDLEtBQUssR0FBNEIsSUFBSSxDQUFDO0lBRVEsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLFFBQVEsQ0FBQztJQUU1RSxJQUNXLGdCQUFnQixDQUFDLEtBQXlCO1FBQ2pELElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDekYsQ0FBQztJQUNMLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUVyQix1RkFBdUY7UUFDdkYsY0FBYyxFQUFFLENBQUM7UUFDakIsSUFBSSxjQUFjLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdEIsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNqQixDQUFDO0lBQ0wsQ0FBQzt1R0EzQlEseUJBQXlCOzJGQUF6Qix5QkFBeUI7OzJGQUF6Qix5QkFBeUI7a0JBSnJDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsVUFBVSxFQUFFLElBQUk7aUJBQ25COzhCQU15RCxFQUFFO3NCQUF2RCxXQUFXO3VCQUFDLHNCQUFzQjtnQkFHeEIsZ0JBQWdCO3NCQUQxQixLQUFLO3VCQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBIb3N0QmluZGluZywgSW5wdXQsIE9uRGVzdHJveSwgaW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RE9DVU1FTlR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbi8qKlxuICogUHJlZml4IGFsbCBDU1Mgc2VsZWN0b3JzIHdpdGggdGhlIGdpdmVuIHNlbGVjdG9yXG4gKlxuICogVGhpcyBpcyBtZWFudCB0byBiZSByZWxhdGl2ZWx5IHNpbXBsZSBhbmQgbWlnaHQgbm90IGNvdmVyIGFkdmFuY2VkIENTUyBzeW50YXhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeENzcyhwcmVmaXg6IHN0cmluZywgY3NzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHByZWZpeCA9ICdcXG4nICsgcHJlZml4ICsgJyAnO1xuXG4gICAgcmV0dXJuIGNzc1xuICAgICAgICAucmVwbGFjZSgvKFtee31dKil7L2dzLCBzZWxlY3RvcnMgPT5cbiAgICAgICAgICAgIHNlbGVjdG9yc1xuICAgICAgICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgICAgICAgLm1hcChzZWxlY3RvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvci50cmltKCkuc3RhcnRzV2l0aCgnQG1lZGlhJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3Rvci50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJlZml4ICsgc2VsZWN0b3IudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuam9pbignLCcpLFxuICAgICAgICApXG4gICAgICAgIC50cmltKCk7XG59XG5cbmxldCB1bmlxdWVJZCA9IDA7XG5sZXQgY29tcG9uZW50Q291bnQgPSAwO1xuXG4vKipcbiAqIEluamVjdCBjdXN0b20gQ1NTIGludG8gY29tcG9uZW50IGFuZCBzY29wZSB0aGUgQ1NTIG9ubHkgdG8gdGhpcyBjb21wb25lbnRcbiAqXG4gKiBVc2FnZSA6XG4gKlxuICogYGBgaHRtbFxuICogPGRpdiBbbmF0dXJhbEN1c3RvbUNzc109XCIubXktY2xhc3Mge2JhY2tncm91bmQ6IHJlZH1cIj5cbiAqICAgICA8cCBjbGFzcz1cIm15LWNsYXNzXCI+Zm9vIGJhcjwvcD5cbiAqIDwvZGl2PlxuICogYGBgXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW25hdHVyYWxDdXN0b21Dc3NdJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBOYXR1cmFsQ3VzdG9tQ3NzRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblxuICAgIHByaXZhdGUgc3R5bGU6IEhUTUxTdHlsZUVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLW5hdHVyYWwtaWQnKSBwcml2YXRlIHJlYWRvbmx5IGlkID0gJ24nICsgKyt1bmlxdWVJZDtcblxuICAgIEBJbnB1dCh7cmVxdWlyZWQ6IHRydWV9KVxuICAgIHB1YmxpYyBzZXQgbmF0dXJhbEN1c3RvbUNzcyh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh2YWx1ZSAmJiAhdGhpcy5zdHlsZSkge1xuICAgICAgICAgICAgdGhpcy5zdHlsZSA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0aGlzLnN0eWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnN0eWxlKSB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLmlubmVySFRNTCA9IHZhbHVlID8gcHJlZml4Q3NzKGBbZGF0YS1uYXR1cmFsLWlkPSR7dGhpcy5pZH1dYCwgdmFsdWUpIDogJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3R5bGU/LnJlbW92ZSgpO1xuXG4gICAgICAgIC8vIFJlc2V0IHVuaXF1ZUlkIGlmIHdlIGhhdmUgbm8gY29tcG9uZW50IGFsaXZlIGFueW1vcmUsIHNvIHRoYXQgd2UgbmV2ZXIgcmVhY2ggbWF4IGludFxuICAgICAgICBjb21wb25lbnRDb3VudC0tO1xuICAgICAgICBpZiAoY29tcG9uZW50Q291bnQgPD0gMCkge1xuICAgICAgICAgICAgdW5pcXVlSWQgPSAwO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWNzcy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsLWVkaXRvci9zcmMvbGliL2N1c3RvbS1jc3MvY3VzdG9tLWNzcy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7O0FBRXpDOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLE1BQWMsRUFBRSxHQUFXO0lBQ2pELE1BQU0sR0FBRyxJQUFJLEdBQUcsTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUU3QixPQUFPLEdBQUc7U0FDTCxPQUFPLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQ2hDLFNBQVM7U0FDSixLQUFLLENBQUMsR0FBRyxDQUFDO1NBQ1YsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ1osSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDdkMsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEMsQ0FBQztJQUNMLENBQUMsQ0FBQztTQUNELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FDakI7U0FDQSxJQUFJLEVBQUUsQ0FBQztBQUNoQixDQUFDO0FBRUQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLElBQUksY0FBYyxHQUFHLENBQUMsQ0FBQztBQUV2Qjs7Ozs7Ozs7OztHQVVHO0FBS0gsTUFBTSxPQUFPLHlCQUF5QjtJQUNqQixRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXJDLEtBQUssR0FBNEIsSUFBSSxDQUFDO0lBRVEsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLFFBQVEsQ0FBQztJQUU1RSxJQUNXLGdCQUFnQixDQUFDLEtBQXlCO1FBQ2pELElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDekYsQ0FBQztJQUNMLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUVyQix1RkFBdUY7UUFDdkYsY0FBYyxFQUFFLENBQUM7UUFDakIsSUFBSSxjQUFjLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdEIsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNqQixDQUFDO0lBQ0wsQ0FBQzt1R0EzQlEseUJBQXlCOzJGQUF6Qix5QkFBeUI7OzJGQUF6Qix5QkFBeUI7a0JBSnJDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsVUFBVSxFQUFFLElBQUk7aUJBQ25COzhCQU15RCxFQUFFO3NCQUF2RCxXQUFXO3VCQUFDLHNCQUFzQjtnQkFHeEIsZ0JBQWdCO3NCQUQxQixLQUFLO3VCQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBIb3N0QmluZGluZywgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RE9DVU1FTlR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbi8qKlxuICogUHJlZml4IGFsbCBDU1Mgc2VsZWN0b3JzIHdpdGggdGhlIGdpdmVuIHNlbGVjdG9yXG4gKlxuICogVGhpcyBpcyBtZWFudCB0byBiZSByZWxhdGl2ZWx5IHNpbXBsZSBhbmQgbWlnaHQgbm90IGNvdmVyIGFkdmFuY2VkIENTUyBzeW50YXhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeENzcyhwcmVmaXg6IHN0cmluZywgY3NzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHByZWZpeCA9ICdcXG4nICsgcHJlZml4ICsgJyAnO1xuXG4gICAgcmV0dXJuIGNzc1xuICAgICAgICAucmVwbGFjZSgvKFtee31dKil7L2dzLCBzZWxlY3RvcnMgPT5cbiAgICAgICAgICAgIHNlbGVjdG9yc1xuICAgICAgICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgICAgICAgLm1hcChzZWxlY3RvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvci50cmltKCkuc3RhcnRzV2l0aCgnQG1lZGlhJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3Rvci50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJlZml4ICsgc2VsZWN0b3IudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuam9pbignLCcpLFxuICAgICAgICApXG4gICAgICAgIC50cmltKCk7XG59XG5cbmxldCB1bmlxdWVJZCA9IDA7XG5sZXQgY29tcG9uZW50Q291bnQgPSAwO1xuXG4vKipcbiAqIEluamVjdCBjdXN0b20gQ1NTIGludG8gY29tcG9uZW50IGFuZCBzY29wZSB0aGUgQ1NTIG9ubHkgdG8gdGhpcyBjb21wb25lbnRcbiAqXG4gKiBVc2FnZSA6XG4gKlxuICogYGBgaHRtbFxuICogPGRpdiBbbmF0dXJhbEN1c3RvbUNzc109XCIubXktY2xhc3Mge2JhY2tncm91bmQ6IHJlZH1cIj5cbiAqICAgICA8cCBjbGFzcz1cIm15LWNsYXNzXCI+Zm9vIGJhcjwvcD5cbiAqIDwvZGl2PlxuICogYGBgXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW25hdHVyYWxDdXN0b21Dc3NdJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBOYXR1cmFsQ3VzdG9tQ3NzRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblxuICAgIHByaXZhdGUgc3R5bGU6IEhUTUxTdHlsZUVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLW5hdHVyYWwtaWQnKSBwcml2YXRlIHJlYWRvbmx5IGlkID0gJ24nICsgKyt1bmlxdWVJZDtcblxuICAgIEBJbnB1dCh7cmVxdWlyZWQ6IHRydWV9KVxuICAgIHB1YmxpYyBzZXQgbmF0dXJhbEN1c3RvbUNzcyh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh2YWx1ZSAmJiAhdGhpcy5zdHlsZSkge1xuICAgICAgICAgICAgdGhpcy5zdHlsZSA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0aGlzLnN0eWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnN0eWxlKSB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLmlubmVySFRNTCA9IHZhbHVlID8gcHJlZml4Q3NzKGBbZGF0YS1uYXR1cmFsLWlkPSR7dGhpcy5pZH1dYCwgdmFsdWUpIDogJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3R5bGU/LnJlbW92ZSgpO1xuXG4gICAgICAgIC8vIFJlc2V0IHVuaXF1ZUlkIGlmIHdlIGhhdmUgbm8gY29tcG9uZW50IGFsaXZlIGFueW1vcmUsIHNvIHRoYXQgd2UgbmV2ZXIgcmVhY2ggbWF4IGludFxuICAgICAgICBjb21wb25lbnRDb3VudC0tO1xuICAgICAgICBpZiAoY29tcG9uZW50Q291bnQgPD0gMCkge1xuICAgICAgICAgICAgdW5pcXVlSWQgPSAwO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -1,6 +1,6 @@
1
1
  import { Component, inject } from '@angular/core';
2
- import { MAT_DIALOG_DATA, MatDialogRef, MatDialogModule } from '@angular/material/dialog';
3
- import { FormControl, FormGroup, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
2
+ import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';
3
+ import { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';
4
4
  import { ifValid } from '@ecodev/natural';
5
5
  import { MatButtonModule } from '@angular/material/button';
6
6
  import { MatInputModule } from '@angular/material/input';
@@ -37,4 +37,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImpor
37
37
  type: Component,
38
38
  args: [{ standalone: true, imports: [MatDialogModule, FormsModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatButtonModule], template: "<h2 i18n mat-dialog-title>Saisir le ID</h2>\n\n<mat-dialog-content [formGroup]=\"form\">\n <mat-form-field>\n <mat-label i18n>ID</mat-label>\n <input matInput [formControl]=\"idControl\" (keydown.enter)=\"maybeConfirm()\" cdkFocusInitial />\n @if (idControl.hasError('pattern')) {\n <mat-error i18n>Doit \u00EAtre un ID valide</mat-error>\n }\n </mat-form-field>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close i18n>Annuler</button>\n <button mat-stroked-button (click)=\"maybeConfirm()\" [disabled]=\"!form.valid\"><span i18n>Valider</span></button>\n</mat-dialog-actions>\n", styles: ["mat-dialog-content{display:grid;width:70vw;max-width:30em}\n"] }]
39
39
  }], ctorParameters: () => [] });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWQtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwtZWRpdG9yL3NyYy9saWIvaWQtZGlhbG9nL2lkLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsLWVkaXRvci9zcmMvbGliL2lkLWRpYWxvZy9pZC1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDeEYsT0FBTyxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BHLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7O0FBb0JoRSxNQUFNLE9BQU8saUJBQWlCO0lBQ2xCLFNBQVMsR0FBRyxNQUFNLENBQWdELFlBQVksQ0FBQyxDQUFDO0lBRXhFLFNBQVMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUU7UUFDNUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsa0NBQWtDLENBQUM7UUFDbEUsV0FBVyxFQUFFLElBQUk7S0FDcEIsQ0FBQyxDQUFDO0lBQ2EsSUFBSSxHQUFHLElBQUksU0FBUyxDQUFDO1FBQ2pDLEVBQUUsRUFBRSxJQUFJLENBQUMsU0FBUztLQUNyQixDQUFDLENBQUM7SUFFSDtRQUNJLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBZSxlQUFlLENBQUMsQ0FBQztRQUVuRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU0sWUFBWTtRQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTyxPQUFPO1FBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7dUdBdkJRLGlCQUFpQjsyRkFBakIsaUJBQWlCLHdFQzFCOUIsdXFCQWdCQSxxSERRYyxlQUFlLCtuQkFBRSxXQUFXLGtqQkFBRSxtQkFBbUIsa1dBQUUsa0JBQWtCLHVZQUFFLGNBQWMsMFdBQUUsZUFBZTs7MkZBRXZHLGlCQUFpQjtrQkFON0IsU0FBUztpQ0FHTSxJQUFJLFdBQ1AsQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgaW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYsIE1hdERpYWxvZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7Rm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycywgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7aWZWYWxpZH0gZnJvbSAnQGVjb2Rldi9uYXR1cmFsJztcbmltcG9ydCB7TWF0QnV0dG9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHtNYXRJbnB1dE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHtNYXRGb3JtRmllbGRNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuXG5leHBvcnQgdHlwZSBJZERpYWxvZ0RhdGEgPSB7XG4gICAgLyoqXG4gICAgICogSUQgbmFtZVxuICAgICAqXG4gICAgICogRWc6XG4gICAgICpcbiAgICAgKiAtIGBcIlwiYFxuICAgICAqIC0gYFwibXktaWRcImBcbiAgICAgKi9cbiAgICBpZDogc3RyaW5nO1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGVVcmw6ICcuL2lkLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2lkLWRpYWxvZy5jb21wb25lbnQuc2NzcycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTWF0RGlhbG9nTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgTWF0Rm9ybUZpZWxkTW9kdWxlLCBNYXRJbnB1dE1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgSWREaWFsb2dDb21wb25lbnQge1xuICAgIHByaXZhdGUgZGlhbG9nUmVmID0gaW5qZWN0PE1hdERpYWxvZ1JlZjxJZERpYWxvZ0NvbXBvbmVudCwgSWREaWFsb2dEYXRhPj4oTWF0RGlhbG9nUmVmKTtcblxuICAgIHB1YmxpYyByZWFkb25seSBpZENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIHtcbiAgICAgICAgdmFsaWRhdG9yczogVmFsaWRhdG9ycy5wYXR0ZXJuKC8oXigtP1tfYS16QS1aXStbX2EtekEtWjAtOS1dKikrKS8pLFxuICAgICAgICBub25OdWxsYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICBpZDogdGhpcy5pZENvbnRyb2wsXG4gICAgfSk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBpbmplY3Q8SWREaWFsb2dEYXRhPihNQVRfRElBTE9HX0RBVEEpO1xuXG4gICAgICAgIHRoaXMuZm9ybS5zZXRWYWx1ZShkYXRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWF5YmVDb25maXJtKCk6IHZvaWQge1xuICAgICAgICBpZlZhbGlkKHRoaXMuZm9ybSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuY29uZmlybSgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbmZpcm0oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpKTtcbiAgICB9XG59XG4iLCI8aDIgaTE4biBtYXQtZGlhbG9nLXRpdGxlPlNhaXNpciBsZSBJRDwvaDI+XG5cbjxtYXQtZGlhbG9nLWNvbnRlbnQgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsIGkxOG4+SUQ8L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJpZENvbnRyb2xcIiAoa2V5ZG93bi5lbnRlcik9XCJtYXliZUNvbmZpcm0oKVwiIGNka0ZvY3VzSW5pdGlhbCAvPlxuICAgICAgICBAaWYgKGlkQ29udHJvbC5oYXNFcnJvcigncGF0dGVybicpKSB7XG4gICAgICAgICAgICA8bWF0LWVycm9yIGkxOG4+RG9pdCDDqnRyZSB1biBJRCB2YWxpZGU8L21hdC1lcnJvcj5cbiAgICAgICAgfVxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG48L21hdC1kaWFsb2ctY29udGVudD5cblxuPG1hdC1kaWFsb2ctYWN0aW9ucyBhbGlnbj1cImVuZFwiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBtYXQtZGlhbG9nLWNsb3NlIGkxOG4+QW5udWxlcjwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJtYXliZUNvbmZpcm0oKVwiIFtkaXNhYmxlZF09XCIhZm9ybS52YWxpZFwiPjxzcGFuIGkxOG4+VmFsaWRlcjwvc3Bhbj48L2J1dHRvbj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuIl19
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWQtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwtZWRpdG9yL3NyYy9saWIvaWQtZGlhbG9nL2lkLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsLWVkaXRvci9zcmMvbGliL2lkLWRpYWxvZy9pZC1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDeEYsT0FBTyxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BHLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7O0FBb0JoRSxNQUFNLE9BQU8saUJBQWlCO0lBQ2xCLFNBQVMsR0FBRyxNQUFNLENBQWdELFlBQVksQ0FBQyxDQUFDO0lBRXhFLFNBQVMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUU7UUFDNUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsa0NBQWtDLENBQUM7UUFDbEUsV0FBVyxFQUFFLElBQUk7S0FDcEIsQ0FBQyxDQUFDO0lBQ2EsSUFBSSxHQUFHLElBQUksU0FBUyxDQUFDO1FBQ2pDLEVBQUUsRUFBRSxJQUFJLENBQUMsU0FBUztLQUNyQixDQUFDLENBQUM7SUFFSDtRQUNJLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBZSxlQUFlLENBQUMsQ0FBQztRQUVuRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU0sWUFBWTtRQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTyxPQUFPO1FBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7dUdBdkJRLGlCQUFpQjsyRkFBakIsaUJBQWlCLHdFQzFCOUIsdXFCQWdCQSxxSERRYyxlQUFlLCtuQkFBRSxXQUFXLGtqQkFBRSxtQkFBbUIsa1dBQUUsa0JBQWtCLHVZQUFFLGNBQWMsMFdBQUUsZUFBZTs7MkZBRXZHLGlCQUFpQjtrQkFON0IsU0FBUztpQ0FHTSxJQUFJLFdBQ1AsQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgaW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dNb2R1bGUsIE1hdERpYWxvZ1JlZn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7Rm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7aWZWYWxpZH0gZnJvbSAnQGVjb2Rldi9uYXR1cmFsJztcbmltcG9ydCB7TWF0QnV0dG9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHtNYXRJbnB1dE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHtNYXRGb3JtRmllbGRNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuXG5leHBvcnQgdHlwZSBJZERpYWxvZ0RhdGEgPSB7XG4gICAgLyoqXG4gICAgICogSUQgbmFtZVxuICAgICAqXG4gICAgICogRWc6XG4gICAgICpcbiAgICAgKiAtIGBcIlwiYFxuICAgICAqIC0gYFwibXktaWRcImBcbiAgICAgKi9cbiAgICBpZDogc3RyaW5nO1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGVVcmw6ICcuL2lkLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2lkLWRpYWxvZy5jb21wb25lbnQuc2NzcycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTWF0RGlhbG9nTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgTWF0Rm9ybUZpZWxkTW9kdWxlLCBNYXRJbnB1dE1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgSWREaWFsb2dDb21wb25lbnQge1xuICAgIHByaXZhdGUgZGlhbG9nUmVmID0gaW5qZWN0PE1hdERpYWxvZ1JlZjxJZERpYWxvZ0NvbXBvbmVudCwgSWREaWFsb2dEYXRhPj4oTWF0RGlhbG9nUmVmKTtcblxuICAgIHB1YmxpYyByZWFkb25seSBpZENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIHtcbiAgICAgICAgdmFsaWRhdG9yczogVmFsaWRhdG9ycy5wYXR0ZXJuKC8oXigtP1tfYS16QS1aXStbX2EtekEtWjAtOS1dKikrKS8pLFxuICAgICAgICBub25OdWxsYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICBpZDogdGhpcy5pZENvbnRyb2wsXG4gICAgfSk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBpbmplY3Q8SWREaWFsb2dEYXRhPihNQVRfRElBTE9HX0RBVEEpO1xuXG4gICAgICAgIHRoaXMuZm9ybS5zZXRWYWx1ZShkYXRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWF5YmVDb25maXJtKCk6IHZvaWQge1xuICAgICAgICBpZlZhbGlkKHRoaXMuZm9ybSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuY29uZmlybSgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbmZpcm0oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpKTtcbiAgICB9XG59XG4iLCI8aDIgaTE4biBtYXQtZGlhbG9nLXRpdGxlPlNhaXNpciBsZSBJRDwvaDI+XG5cbjxtYXQtZGlhbG9nLWNvbnRlbnQgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsIGkxOG4+SUQ8L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJpZENvbnRyb2xcIiAoa2V5ZG93bi5lbnRlcik9XCJtYXliZUNvbmZpcm0oKVwiIGNka0ZvY3VzSW5pdGlhbCAvPlxuICAgICAgICBAaWYgKGlkQ29udHJvbC5oYXNFcnJvcigncGF0dGVybicpKSB7XG4gICAgICAgICAgICA8bWF0LWVycm9yIGkxOG4+RG9pdCDDqnRyZSB1biBJRCB2YWxpZGU8L21hdC1lcnJvcj5cbiAgICAgICAgfVxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG48L21hdC1kaWFsb2ctY29udGVudD5cblxuPG1hdC1kaWFsb2ctYWN0aW9ucyBhbGlnbj1cImVuZFwiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBtYXQtZGlhbG9nLWNsb3NlIGkxOG4+QW5udWxlcjwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJtYXliZUNvbmZpcm0oKVwiIFtkaXNhYmxlZF09XCIhZm9ybS52YWxpZFwiPjxzcGFuIGkxOG4+VmFsaWRlcjwvc3Bhbj48L2J1dHRvbj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuIl19
@@ -1,6 +1,6 @@
1
1
  import { Component, inject } from '@angular/core';
2
- import { MAT_DIALOG_DATA, MatDialogRef, MatDialogModule } from '@angular/material/dialog';
3
- import { FormControl, FormGroup, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
2
+ import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';
3
+ import { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';
4
4
  import { ifValid } from '@ecodev/natural';
5
5
  import { MatButtonModule } from '@angular/material/button';
6
6
  import { MatInputModule } from '@angular/material/input';
@@ -36,4 +36,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImpor
36
36
  type: Component,
37
37
  args: [{ standalone: true, imports: [MatDialogModule, FormsModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatButtonModule], template: "<h2 i18n mat-dialog-title>Ins\u00E9rer un lien</h2>\n\n<mat-dialog-content [formGroup]=\"form\">\n <mat-form-field>\n <mat-label i18n>URL</mat-label>\n <input matInput [formControl]=\"hrefControl\" (keydown.enter)=\"maybeConfirm()\" />\n @if (hrefControl.hasError('required')) {\n <mat-error i18n>Ce champ est requis</mat-error>\n }\n </mat-form-field>\n <mat-form-field>\n <mat-label i18n>Titre</mat-label>\n <input matInput [formControl]=\"titleControl\" (keydown.enter)=\"maybeConfirm()\" />\n </mat-form-field>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close i18n>Annuler</button>\n <button mat-stroked-button (click)=\"maybeConfirm()\" [disabled]=\"!form.valid\"><span i18n>Valider</span></button>\n</mat-dialog-actions>\n", styles: ["mat-dialog-content{display:grid;width:70vw;max-width:60em}\n"] }]
38
38
  }], ctorParameters: () => [] });
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC1lZGl0b3Ivc3JjL2xpYi9saW5rLWRpYWxvZy9saW5rLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsLWVkaXRvci9zcmMvbGliL2xpbmstZGlhbG9nL2xpbmstZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBQyxlQUFlLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3hGLE9BQU8sRUFBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDeEMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7OztBQWFoRSxNQUFNLE9BQU8sbUJBQW1CO0lBQ3BCLFNBQVMsR0FBRyxNQUFNLENBQW9ELFlBQVksQ0FBQyxDQUFDO0lBRTVFLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUN4RixZQUFZLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7SUFDeEQsSUFBSSxHQUFHLElBQUksU0FBUyxDQUFDO1FBQ2pDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVztRQUN0QixLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVk7S0FDM0IsQ0FBQyxDQUFDO0lBRUg7UUFDSSxNQUFNLElBQUksR0FBRyxNQUFNLENBQWlCLGVBQWUsQ0FBQyxDQUFDO1FBRXJELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBQyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVNLFlBQVk7UUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU8sT0FBTztRQUNYLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO3VHQXRCUSxtQkFBbUI7MkZBQW5CLG1CQUFtQix3RUNuQmhDLG0xQkFvQkEscUhESGMsZUFBZSwrbkJBQUUsV0FBVyxrakJBQUUsbUJBQW1CLGtXQUFFLGtCQUFrQix1WUFBRSxjQUFjLDBXQUFFLGVBQWU7OzJGQUV2RyxtQkFBbUI7a0JBTi9CLFNBQVM7aUNBR00sSUFBSSxXQUNQLENBQUMsZUFBZSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIGluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmLCBNYXREaWFsb2dNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge0Zvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge2lmVmFsaWR9IGZyb20gJ0BlY29kZXYvbmF0dXJhbCc7XG5pbXBvcnQge01hdEJ1dHRvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7TWF0SW5wdXRNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7TWF0Rm9ybUZpZWxkTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcblxuZXhwb3J0IHR5cGUgTGlua0RpYWxvZ0RhdGEgPSB7XG4gICAgaHJlZjogc3RyaW5nO1xuICAgIHRpdGxlPzogc3RyaW5nO1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGVVcmw6ICcuL2xpbmstZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vbGluay1kaWFsb2cuY29tcG9uZW50LnNjc3MnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW01hdERpYWxvZ01vZHVsZSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIE1hdEZvcm1GaWVsZE1vZHVsZSwgTWF0SW5wdXRNb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIExpbmtEaWFsb2dDb21wb25lbnQge1xuICAgIHByaXZhdGUgZGlhbG9nUmVmID0gaW5qZWN0PE1hdERpYWxvZ1JlZjxMaW5rRGlhbG9nQ29tcG9uZW50LCBMaW5rRGlhbG9nRGF0YT4+KE1hdERpYWxvZ1JlZik7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgaHJlZkNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIHt2YWxpZGF0b3JzOiBWYWxpZGF0b3JzLnJlcXVpcmVkLCBub25OdWxsYWJsZTogdHJ1ZX0pO1xuICAgIHB1YmxpYyByZWFkb25seSB0aXRsZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIHtub25OdWxsYWJsZTogdHJ1ZX0pO1xuICAgIHB1YmxpYyByZWFkb25seSBmb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgIGhyZWY6IHRoaXMuaHJlZkNvbnRyb2wsXG4gICAgICAgIHRpdGxlOiB0aGlzLnRpdGxlQ29udHJvbCxcbiAgICB9KTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGluamVjdDxMaW5rRGlhbG9nRGF0YT4oTUFUX0RJQUxPR19EQVRBKTtcblxuICAgICAgICB0aGlzLmZvcm0uc2V0VmFsdWUoe3RpdGxlOiAnJywgLi4uZGF0YX0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXliZUNvbmZpcm0oKTogdm9pZCB7XG4gICAgICAgIGlmVmFsaWQodGhpcy5mb3JtKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jb25maXJtKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29uZmlybSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpO1xuICAgIH1cbn1cbiIsIjxoMiBpMThuIG1hdC1kaWFsb2ctdGl0bGU+SW5zw6lyZXIgdW4gbGllbjwvaDI+XG5cbjxtYXQtZGlhbG9nLWNvbnRlbnQgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsIGkxOG4+VVJMPC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwiaHJlZkNvbnRyb2xcIiAoa2V5ZG93bi5lbnRlcik9XCJtYXliZUNvbmZpcm0oKVwiIC8+XG4gICAgICAgIEBpZiAoaHJlZkNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgICAgIDxtYXQtZXJyb3IgaTE4bj5DZSBjaGFtcCBlc3QgcmVxdWlzPC9tYXQtZXJyb3I+XG4gICAgICAgIH1cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1sYWJlbCBpMThuPlRpdHJlPC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwidGl0bGVDb250cm9sXCIgKGtleWRvd24uZW50ZXIpPVwibWF5YmVDb25maXJtKClcIiAvPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG48L21hdC1kaWFsb2ctY29udGVudD5cblxuPG1hdC1kaWFsb2ctYWN0aW9ucyBhbGlnbj1cImVuZFwiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBtYXQtZGlhbG9nLWNsb3NlIGkxOG4+QW5udWxlcjwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJtYXliZUNvbmZpcm0oKVwiIFtkaXNhYmxlZF09XCIhZm9ybS52YWxpZFwiPjxzcGFuIGkxOG4+VmFsaWRlcjwvc3Bhbj48L2J1dHRvbj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuIl19
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC1lZGl0b3Ivc3JjL2xpYi9saW5rLWRpYWxvZy9saW5rLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsLWVkaXRvci9zcmMvbGliL2xpbmstZGlhbG9nL2xpbmstZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3hGLE9BQU8sRUFBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDeEMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7OztBQWFoRSxNQUFNLE9BQU8sbUJBQW1CO0lBQ3BCLFNBQVMsR0FBRyxNQUFNLENBQW9ELFlBQVksQ0FBQyxDQUFDO0lBRTVFLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUN4RixZQUFZLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7SUFDeEQsSUFBSSxHQUFHLElBQUksU0FBUyxDQUFDO1FBQ2pDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVztRQUN0QixLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVk7S0FDM0IsQ0FBQyxDQUFDO0lBRUg7UUFDSSxNQUFNLElBQUksR0FBRyxNQUFNLENBQWlCLGVBQWUsQ0FBQyxDQUFDO1FBRXJELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBQyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVNLFlBQVk7UUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU8sT0FBTztRQUNYLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO3VHQXRCUSxtQkFBbUI7MkZBQW5CLG1CQUFtQix3RUNuQmhDLG0xQkFvQkEscUhESGMsZUFBZSwrbkJBQUUsV0FBVyxrakJBQUUsbUJBQW1CLGtXQUFFLGtCQUFrQix1WUFBRSxjQUFjLDBXQUFFLGVBQWU7OzJGQUV2RyxtQkFBbUI7a0JBTi9CLFNBQVM7aUNBR00sSUFBSSxXQUNQLENBQUMsZUFBZSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIGluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nTW9kdWxlLCBNYXREaWFsb2dSZWZ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge0Zvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge2lmVmFsaWR9IGZyb20gJ0BlY29kZXYvbmF0dXJhbCc7XG5pbXBvcnQge01hdEJ1dHRvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7TWF0SW5wdXRNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7TWF0Rm9ybUZpZWxkTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcblxuZXhwb3J0IHR5cGUgTGlua0RpYWxvZ0RhdGEgPSB7XG4gICAgaHJlZjogc3RyaW5nO1xuICAgIHRpdGxlPzogc3RyaW5nO1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGVVcmw6ICcuL2xpbmstZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vbGluay1kaWFsb2cuY29tcG9uZW50LnNjc3MnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW01hdERpYWxvZ01vZHVsZSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIE1hdEZvcm1GaWVsZE1vZHVsZSwgTWF0SW5wdXRNb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIExpbmtEaWFsb2dDb21wb25lbnQge1xuICAgIHByaXZhdGUgZGlhbG9nUmVmID0gaW5qZWN0PE1hdERpYWxvZ1JlZjxMaW5rRGlhbG9nQ29tcG9uZW50LCBMaW5rRGlhbG9nRGF0YT4+KE1hdERpYWxvZ1JlZik7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgaHJlZkNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIHt2YWxpZGF0b3JzOiBWYWxpZGF0b3JzLnJlcXVpcmVkLCBub25OdWxsYWJsZTogdHJ1ZX0pO1xuICAgIHB1YmxpYyByZWFkb25seSB0aXRsZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIHtub25OdWxsYWJsZTogdHJ1ZX0pO1xuICAgIHB1YmxpYyByZWFkb25seSBmb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgIGhyZWY6IHRoaXMuaHJlZkNvbnRyb2wsXG4gICAgICAgIHRpdGxlOiB0aGlzLnRpdGxlQ29udHJvbCxcbiAgICB9KTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGluamVjdDxMaW5rRGlhbG9nRGF0YT4oTUFUX0RJQUxPR19EQVRBKTtcblxuICAgICAgICB0aGlzLmZvcm0uc2V0VmFsdWUoe3RpdGxlOiAnJywgLi4uZGF0YX0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXliZUNvbmZpcm0oKTogdm9pZCB7XG4gICAgICAgIGlmVmFsaWQodGhpcy5mb3JtKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jb25maXJtKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29uZmlybSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpO1xuICAgIH1cbn1cbiIsIjxoMiBpMThuIG1hdC1kaWFsb2ctdGl0bGU+SW5zw6lyZXIgdW4gbGllbjwvaDI+XG5cbjxtYXQtZGlhbG9nLWNvbnRlbnQgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsIGkxOG4+VVJMPC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwiaHJlZkNvbnRyb2xcIiAoa2V5ZG93bi5lbnRlcik9XCJtYXliZUNvbmZpcm0oKVwiIC8+XG4gICAgICAgIEBpZiAoaHJlZkNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgICAgIDxtYXQtZXJyb3IgaTE4bj5DZSBjaGFtcCBlc3QgcmVxdWlzPC9tYXQtZXJyb3I+XG4gICAgICAgIH1cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1sYWJlbCBpMThuPlRpdHJlPC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwidGl0bGVDb250cm9sXCIgKGtleWRvd24uZW50ZXIpPVwibWF5YmVDb25maXJtKClcIiAvPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG48L21hdC1kaWFsb2ctY29udGVudD5cblxuPG1hdC1kaWFsb2ctYWN0aW9ucyBhbGlnbj1cImVuZFwiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBtYXQtZGlhbG9nLWNsb3NlIGkxOG4+QW5udWxlcjwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJtYXliZUNvbmZpcm0oKVwiIFtkaXNhYmxlZF09XCIhZm9ybS52YWxpZFwiPjxzcGFuIGkxOG4+VmFsaWRlcjwvc3Bhbj48L2J1dHRvbj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuIl19
@@ -1,6 +1,6 @@
1
1
  import { Decoration, DecorationSet } from 'prosemirror-view';
2
2
  import { Plugin } from 'prosemirror-state';
3
- import { Injectable, inject } from '@angular/core';
3
+ import { inject, Injectable } from '@angular/core';
4
4
  import { DOCUMENT } from '@angular/common';
5
5
  import * as i0 from "@angular/core";
6
6
  export class ImagePlugin {
@@ -79,4 +79,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImpor
79
79
  type: Injectable,
80
80
  args: [{ providedIn: 'root' }]
81
81
  }], ctorParameters: () => [] });
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsLWVkaXRvci9zcmMvbGliL3V0aWxzL2ltYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsYUFBYSxFQUFhLE1BQU0sa0JBQWtCLENBQUM7QUFDdkUsT0FBTyxFQUFjLE1BQU0sRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBR3RELE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7QUFLekMsTUFBTSxPQUFPLFdBQVc7SUFDSixNQUFNLENBQXdCO0lBRTlDO1FBQ0ksTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWxDLDREQUE0RDtRQUM1RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBZ0I7WUFDcEMsS0FBSyxFQUFFO2dCQUNILElBQUk7b0JBQ0EsT0FBTyxhQUFhLENBQUMsS0FBSyxDQUFDO2dCQUMvQixDQUFDO2dCQUNELEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRztvQkFDVCxpRUFBaUU7b0JBQ2pFLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUVsQywwREFBMEQ7b0JBQzFELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN2QyxJQUFJLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQzt3QkFDZCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO3dCQUNyRCxNQUFNLElBQUksR0FB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QUFDLEVBQUUsRUFBQyxFQUFDLENBQUMsQ0FDNUMsQ0FBQztZQUNOLENBQUM7WUFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUNSLDRDQUE0QztnQkFDNUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBQyxNQUFNLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQztZQUM1RCxDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQzt1R0EvRVEsV0FBVzsyR0FBWCxXQUFXLGNBREMsTUFBTTs7MkZBQ2xCLFdBQVc7a0JBRHZCLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEZWNvcmF0aW9uLCBEZWNvcmF0aW9uU2V0LCBFZGl0b3JWaWV3fSBmcm9tICdwcm9zZW1pcnJvci12aWV3JztcbmltcG9ydCB7RWRpdG9yU3RhdGUsIFBsdWdpbn0gZnJvbSAncHJvc2VtaXJyb3Itc3RhdGUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7U2NoZW1hfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XG5pbXBvcnQge0luamVjdGFibGUsIGluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5leHBvcnQgdHlwZSBJbWFnZVVwbG9hZGVyID0gKGZpbGU6IEZpbGUpID0+IE9ic2VydmFibGU8c3RyaW5nPjtcblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgSW1hZ2VQbHVnaW4ge1xuICAgIHB1YmxpYyByZWFkb25seSBwbHVnaW46IFBsdWdpbjxEZWNvcmF0aW9uU2V0PjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgdGhpcy5wbHVnaW4gPSBuZXcgUGx1Z2luPERlY29yYXRpb25TZXQ+KHtcbiAgICAgICAgICAgIHN0YXRlOiB7XG4gICAgICAgICAgICAgICAgaW5pdCgpOiBEZWNvcmF0aW9uU2V0IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERlY29yYXRpb25TZXQuZW1wdHk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhcHBseSh0ciwgc2V0KTogRGVjb3JhdGlvblNldCB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFkanVzdCBkZWNvcmF0aW9uIHBvc2l0aW9ucyB0byBjaGFuZ2VzIG1hZGUgYnkgdGhlIHRyYW5zYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIHNldCA9IHNldC5tYXAodHIubWFwcGluZywgdHIuZG9jKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBTZWUgaWYgdGhlIHRyYW5zYWN0aW9uIGFkZHMgb3IgcmVtb3ZlcyBhbnkgcGxhY2Vob2xkZXJzXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRyLmdldE1ldGEoc2VsZi5wbHVnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uPy5hZGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZGdldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3BsYWNlaG9sZGVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWNvID0gRGVjb3JhdGlvbi53aWRnZXQoYWN0aW9uLmFkZC5wb3MsIHdpZGdldCwge2lkOiBhY3Rpb24uYWRkLmlkfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgPSBzZXQuYWRkKHRyLmRvYywgW2RlY29dKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24/LnJlbW92ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0ID0gc2V0LnJlbW92ZShzZXQuZmluZCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgc3BlYyA9PiBzcGVjLmlkID09PSBhY3Rpb24ucmVtb3ZlLmlkKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICBkZWNvcmF0aW9ucyhzdGF0ZTogRWRpdG9yU3RhdGUpOiBEZWNvcmF0aW9uU2V0IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RhdGUoc3RhdGUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRQbGFjZWhvbGRlcihzdGF0ZTogRWRpdG9yU3RhdGUsIGlkOiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4pOiBudW1iZXIgfCBudWxsIHtcbiAgICAgICAgY29uc3QgZGVjb3JhdG9ycyA9IHRoaXMucGx1Z2luLmdldFN0YXRlKHN0YXRlKTtcbiAgICAgICAgY29uc3QgZm91bmQgPSBkZWNvcmF0b3JzPy5maW5kKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBzcGVjID0+IHNwZWMuaWQgPT09IGlkKTtcbiAgICAgICAgcmV0dXJuIGZvdW5kPy5sZW5ndGggPyBmb3VuZFswXS5mcm9tIDogbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhcnRJbWFnZVVwbG9hZCh2aWV3OiBFZGl0b3JWaWV3LCBmaWxlOiBGaWxlLCB1cGxvYWRlcjogSW1hZ2VVcGxvYWRlciwgc2NoZW1hOiBTY2hlbWEpOiB2b2lkIHtcbiAgICAgICAgLy8gQSBmcmVzaCBvYmplY3QgdG8gYWN0IGFzIHRoZSBJRCBmb3IgdGhpcyB1cGxvYWRcbiAgICAgICAgY29uc3QgaWQgPSB7fTtcblxuICAgICAgICAvLyBSZXBsYWNlIHRoZSBzZWxlY3Rpb24gd2l0aCBhIHBsYWNlaG9sZGVyXG4gICAgICAgIGNvbnN0IHRyID0gdmlldy5zdGF0ZS50cjtcbiAgICAgICAgaWYgKCF0ci5zZWxlY3Rpb24uZW1wdHkpIHtcbiAgICAgICAgICAgIHRyLmRlbGV0ZVNlbGVjdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdHIuc2V0TWV0YSh0aGlzLnBsdWdpbiwge2FkZDoge2lkLCBwb3M6IHRyLnNlbGVjdGlvbi5mcm9tfX0pO1xuICAgICAgICB2aWV3LmRpc3BhdGNoKHRyKTtcblxuICAgICAgICB1cGxvYWRlcihmaWxlKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogdXJsID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmZpbmRQbGFjZWhvbGRlcih2aWV3LnN0YXRlLCBpZCk7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNvbnRlbnQgYXJvdW5kIHRoZSBwbGFjZWhvbGRlciBoYXMgYmVlbiBkZWxldGVkLCBkcm9wXG4gICAgICAgICAgICAgICAgLy8gdGhlIGltYWdlXG4gICAgICAgICAgICAgICAgaWYgKHBvcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBpbnNlcnQgaXQgYXQgdGhlIHBsYWNlaG9sZGVyJ3MgcG9zaXRpb24sIGFuZCByZW1vdmVcbiAgICAgICAgICAgICAgICAvLyB0aGUgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgICB2aWV3LmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgICAgICB2aWV3LnN0YXRlLnRyXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZVdpdGgocG9zLCBwb3MsIHNjaGVtYS5ub2Rlcy5pbWFnZS5jcmVhdGUoe3NyYzogdXJsfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2V0TWV0YSh0aGlzLnBsdWdpbiwge3JlbW92ZToge2lkfX0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBPbiBmYWlsdXJlLCBqdXN0IGNsZWFuIHVwIHRoZSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgIHZpZXc/LmRpc3BhdGNoKHRyLnNldE1ldGEodGhpcy5wbHVnaW4sIHtyZW1vdmU6IHtpZH19KSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsLWVkaXRvci9zcmMvbGliL3V0aWxzL2ltYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsYUFBYSxFQUFhLE1BQU0sa0JBQWtCLENBQUM7QUFDdkUsT0FBTyxFQUFjLE1BQU0sRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBR3RELE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7QUFLekMsTUFBTSxPQUFPLFdBQVc7SUFDSixNQUFNLENBQXdCO0lBRTlDO1FBQ0ksTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWxDLDREQUE0RDtRQUM1RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBZ0I7WUFDcEMsS0FBSyxFQUFFO2dCQUNILElBQUk7b0JBQ0EsT0FBTyxhQUFhLENBQUMsS0FBSyxDQUFDO2dCQUMvQixDQUFDO2dCQUNELEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRztvQkFDVCxpRUFBaUU7b0JBQ2pFLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUVsQywwREFBMEQ7b0JBQzFELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN2QyxJQUFJLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQzt3QkFDZCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO3dCQUNyRCxNQUFNLElBQUksR0FB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QUFDLEVBQUUsRUFBQyxFQUFDLENBQUMsQ0FDNUMsQ0FBQztZQUNOLENBQUM7WUFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUNSLDRDQUE0QztnQkFDNUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBQyxNQUFNLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQztZQUM1RCxDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQzt1R0EvRVEsV0FBVzsyR0FBWCxXQUFXLGNBREMsTUFBTTs7MkZBQ2xCLFdBQVc7a0JBRHZCLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEZWNvcmF0aW9uLCBEZWNvcmF0aW9uU2V0LCBFZGl0b3JWaWV3fSBmcm9tICdwcm9zZW1pcnJvci12aWV3JztcbmltcG9ydCB7RWRpdG9yU3RhdGUsIFBsdWdpbn0gZnJvbSAncHJvc2VtaXJyb3Itc3RhdGUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7U2NoZW1hfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XG5pbXBvcnQge2luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5leHBvcnQgdHlwZSBJbWFnZVVwbG9hZGVyID0gKGZpbGU6IEZpbGUpID0+IE9ic2VydmFibGU8c3RyaW5nPjtcblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgSW1hZ2VQbHVnaW4ge1xuICAgIHB1YmxpYyByZWFkb25seSBwbHVnaW46IFBsdWdpbjxEZWNvcmF0aW9uU2V0PjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgdGhpcy5wbHVnaW4gPSBuZXcgUGx1Z2luPERlY29yYXRpb25TZXQ+KHtcbiAgICAgICAgICAgIHN0YXRlOiB7XG4gICAgICAgICAgICAgICAgaW5pdCgpOiBEZWNvcmF0aW9uU2V0IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERlY29yYXRpb25TZXQuZW1wdHk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhcHBseSh0ciwgc2V0KTogRGVjb3JhdGlvblNldCB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFkanVzdCBkZWNvcmF0aW9uIHBvc2l0aW9ucyB0byBjaGFuZ2VzIG1hZGUgYnkgdGhlIHRyYW5zYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIHNldCA9IHNldC5tYXAodHIubWFwcGluZywgdHIuZG9jKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBTZWUgaWYgdGhlIHRyYW5zYWN0aW9uIGFkZHMgb3IgcmVtb3ZlcyBhbnkgcGxhY2Vob2xkZXJzXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRyLmdldE1ldGEoc2VsZi5wbHVnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uPy5hZGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZGdldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3BsYWNlaG9sZGVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWNvID0gRGVjb3JhdGlvbi53aWRnZXQoYWN0aW9uLmFkZC5wb3MsIHdpZGdldCwge2lkOiBhY3Rpb24uYWRkLmlkfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgPSBzZXQuYWRkKHRyLmRvYywgW2RlY29dKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24/LnJlbW92ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0ID0gc2V0LnJlbW92ZShzZXQuZmluZCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgc3BlYyA9PiBzcGVjLmlkID09PSBhY3Rpb24ucmVtb3ZlLmlkKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICBkZWNvcmF0aW9ucyhzdGF0ZTogRWRpdG9yU3RhdGUpOiBEZWNvcmF0aW9uU2V0IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RhdGUoc3RhdGUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRQbGFjZWhvbGRlcihzdGF0ZTogRWRpdG9yU3RhdGUsIGlkOiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4pOiBudW1iZXIgfCBudWxsIHtcbiAgICAgICAgY29uc3QgZGVjb3JhdG9ycyA9IHRoaXMucGx1Z2luLmdldFN0YXRlKHN0YXRlKTtcbiAgICAgICAgY29uc3QgZm91bmQgPSBkZWNvcmF0b3JzPy5maW5kKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBzcGVjID0+IHNwZWMuaWQgPT09IGlkKTtcbiAgICAgICAgcmV0dXJuIGZvdW5kPy5sZW5ndGggPyBmb3VuZFswXS5mcm9tIDogbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhcnRJbWFnZVVwbG9hZCh2aWV3OiBFZGl0b3JWaWV3LCBmaWxlOiBGaWxlLCB1cGxvYWRlcjogSW1hZ2VVcGxvYWRlciwgc2NoZW1hOiBTY2hlbWEpOiB2b2lkIHtcbiAgICAgICAgLy8gQSBmcmVzaCBvYmplY3QgdG8gYWN0IGFzIHRoZSBJRCBmb3IgdGhpcyB1cGxvYWRcbiAgICAgICAgY29uc3QgaWQgPSB7fTtcblxuICAgICAgICAvLyBSZXBsYWNlIHRoZSBzZWxlY3Rpb24gd2l0aCBhIHBsYWNlaG9sZGVyXG4gICAgICAgIGNvbnN0IHRyID0gdmlldy5zdGF0ZS50cjtcbiAgICAgICAgaWYgKCF0ci5zZWxlY3Rpb24uZW1wdHkpIHtcbiAgICAgICAgICAgIHRyLmRlbGV0ZVNlbGVjdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdHIuc2V0TWV0YSh0aGlzLnBsdWdpbiwge2FkZDoge2lkLCBwb3M6IHRyLnNlbGVjdGlvbi5mcm9tfX0pO1xuICAgICAgICB2aWV3LmRpc3BhdGNoKHRyKTtcblxuICAgICAgICB1cGxvYWRlcihmaWxlKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogdXJsID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmZpbmRQbGFjZWhvbGRlcih2aWV3LnN0YXRlLCBpZCk7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNvbnRlbnQgYXJvdW5kIHRoZSBwbGFjZWhvbGRlciBoYXMgYmVlbiBkZWxldGVkLCBkcm9wXG4gICAgICAgICAgICAgICAgLy8gdGhlIGltYWdlXG4gICAgICAgICAgICAgICAgaWYgKHBvcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBpbnNlcnQgaXQgYXQgdGhlIHBsYWNlaG9sZGVyJ3MgcG9zaXRpb24sIGFuZCByZW1vdmVcbiAgICAgICAgICAgICAgICAvLyB0aGUgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgICB2aWV3LmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgICAgICB2aWV3LnN0YXRlLnRyXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZVdpdGgocG9zLCBwb3MsIHNjaGVtYS5ub2Rlcy5pbWFnZS5jcmVhdGUoe3NyYzogdXJsfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2V0TWV0YSh0aGlzLnBsdWdpbiwge3JlbW92ZToge2lkfX0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBPbiBmYWlsdXJlLCBqdXN0IGNsZWFuIHVwIHRoZSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgIHZpZXc/LmRpc3BhdGNoKHRyLnNldE1ldGEodGhpcy5wbHVnaW4sIHtyZW1vdmU6IHtpZH19KSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"ecodev-natural-editor.mjs","sources":["../../../projects/natural-editor/src/lib/custom-css/custom-css.directive.ts","../../../projects/natural-editor/src/lib/utils/image.ts","../../../projects/natural-editor/src/lib/utils/schema/paragraph-with-alignment.ts","../../../projects/natural-editor/src/lib/utils/schema/heading.ts","../../../projects/natural-editor/src/lib/utils/schema/table.ts","../../../projects/natural-editor/src/lib/utils/schema/text-color.ts","../../../projects/natural-editor/src/lib/utils/schema/schema.ts","../../../projects/natural-editor/src/lib/utils/items/item.ts","../../../projects/natural-editor/src/lib/utils/items/text-align-item.ts","../../../projects/natural-editor/src/lib/color-dialog/color-dialog.component.ts","../../../projects/natural-editor/src/lib/color-dialog/color-dialog.component.html","../../../projects/natural-editor/src/lib/utils/items/cell-background-color-item.ts","../../../projects/natural-editor/src/lib/link-dialog/link-dialog.component.ts","../../../projects/natural-editor/src/lib/link-dialog/link-dialog.component.html","../../../projects/natural-editor/src/lib/utils/items/utils.ts","../../../projects/natural-editor/src/lib/utils/items/link-item.ts","../../../projects/natural-editor/src/lib/utils/items/horizontal-rule-item.ts","../../../projects/natural-editor/src/lib/utils/items/wrap-list-item.ts","../../../projects/natural-editor/src/lib/class-dialog/class-dialog.component.ts","../../../projects/natural-editor/src/lib/class-dialog/class-dialog.component.html","../../../projects/natural-editor/src/lib/utils/items/class-item.ts","../../../projects/natural-editor/src/lib/id-dialog/id-dialog.component.ts","../../../projects/natural-editor/src/lib/id-dialog/id-dialog.component.html","../../../projects/natural-editor/src/lib/utils/items/id-item.ts","../../../projects/natural-editor/src/lib/utils/items/table-item.ts","../../../projects/natural-editor/src/lib/utils/items/text-color-item.ts","../../../projects/natural-editor/src/lib/utils/menu.ts","../../../projects/natural-editor/src/lib/utils/inputrules.ts","../../../projects/natural-editor/src/lib/utils/keymap.ts","../../../projects/natural-editor/src/lib/editor/editor.component.ts","../../../projects/natural-editor/src/lib/editor/editor.component.html","../../../projects/natural-editor/src/public-api.ts","../../../projects/natural-editor/src/ecodev-natural-editor.ts"],"sourcesContent":["import {Directive, HostBinding, Input, OnDestroy, inject} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\n/**\n * Prefix all CSS selectors with the given selector\n *\n * This is meant to be relatively simple and might not cover advanced CSS syntax\n */\nexport function prefixCss(prefix: string, css: string): string {\n prefix = '\\n' + prefix + ' ';\n\n return css\n .replace(/([^{}]*){/gs, selectors =>\n selectors\n .split(',')\n .map(selector => {\n if (selector.trim().startsWith('@media')) {\n return selector.trim();\n } else {\n return prefix + selector.trim();\n }\n })\n .join(','),\n )\n .trim();\n}\n\nlet uniqueId = 0;\nlet componentCount = 0;\n\n/**\n * Inject custom CSS into component and scope the CSS only to this component\n *\n * Usage :\n *\n * ```html\n * <div [naturalCustomCss]=\".my-class {background: red}\">\n * <p class=\"my-class\">foo bar</p>\n * </div>\n * ```\n */\n@Directive({\n selector: '[naturalCustomCss]',\n standalone: true,\n})\nexport class NaturalCustomCssDirective implements OnDestroy {\n private readonly document = inject(DOCUMENT);\n\n private style: HTMLStyleElement | null = null;\n\n @HostBinding('attr.data-natural-id') private readonly id = 'n' + ++uniqueId;\n\n @Input({required: true})\n public set naturalCustomCss(value: string | undefined) {\n if (value && !this.style) {\n this.style = this.document.createElement('style');\n this.document.head.appendChild(this.style);\n }\n\n if (this.style) {\n this.style.innerHTML = value ? prefixCss(`[data-natural-id=${this.id}]`, value) : '';\n }\n }\n\n public ngOnDestroy(): void {\n this.style?.remove();\n\n // Reset uniqueId if we have no component alive anymore, so that we never reach max int\n componentCount--;\n if (componentCount <= 0) {\n uniqueId = 0;\n }\n }\n}\n","import {Decoration, DecorationSet, EditorView} from 'prosemirror-view';\nimport {EditorState, Plugin} from 'prosemirror-state';\nimport {Observable} from 'rxjs';\nimport {Schema} from 'prosemirror-model';\nimport {Injectable, inject} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\nexport type ImageUploader = (file: File) => Observable<string>;\n\n@Injectable({providedIn: 'root'})\nexport class ImagePlugin {\n public readonly plugin: Plugin<DecorationSet>;\n\n public constructor() {\n const document = inject(DOCUMENT);\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n this.plugin = new Plugin<DecorationSet>({\n state: {\n init(): DecorationSet {\n return DecorationSet.empty;\n },\n apply(tr, set): DecorationSet {\n // Adjust decoration positions to changes made by the transaction\n set = set.map(tr.mapping, tr.doc);\n\n // See if the transaction adds or removes any placeholders\n const action = tr.getMeta(self.plugin);\n if (action?.add) {\n const widget = document.createElement('placeholder');\n const deco = Decoration.widget(action.add.pos, widget, {id: action.add.id});\n set = set.add(tr.doc, [deco]);\n } else if (action?.remove) {\n set = set.remove(set.find(undefined, undefined, spec => spec.id === action.remove.id));\n }\n\n return set;\n },\n },\n props: {\n decorations(state: EditorState): DecorationSet | undefined {\n return this.getState(state);\n },\n },\n });\n }\n\n private findPlaceholder(state: EditorState, id: Record<string, never>): number | null {\n const decorators = this.plugin.getState(state);\n const found = decorators?.find(undefined, undefined, spec => spec.id === id);\n return found?.length ? found[0].from : null;\n }\n\n public startImageUpload(view: EditorView, file: File, uploader: ImageUploader, schema: Schema): void {\n // A fresh object to act as the ID for this upload\n const id = {};\n\n // Replace the selection with a placeholder\n const tr = view.state.tr;\n if (!tr.selection.empty) {\n tr.deleteSelection();\n }\n\n tr.setMeta(this.plugin, {add: {id, pos: tr.selection.from}});\n view.dispatch(tr);\n\n uploader(file).subscribe({\n next: url => {\n const pos = this.findPlaceholder(view.state, id);\n // If the content around the placeholder has been deleted, drop\n // the image\n if (pos === null) {\n return;\n }\n\n // Otherwise, insert it at the placeholder's position, and remove\n // the placeholder\n view.dispatch(\n view.state.tr\n .replaceWith(pos, pos, schema.nodes.image.create({src: url}))\n .setMeta(this.plugin, {remove: {id}}),\n );\n },\n error: () => {\n // On failure, just clean up the placeholder\n view?.dispatch(tr.setMeta(this.plugin, {remove: {id}}));\n },\n });\n }\n}\n","import {NodeSpec} from 'prosemirror-model';\n\nconst ALIGN_PATTERN = /(left|right|center|justify)/;\ntype Attributes = {\n align: null | string;\n class: string;\n id: string;\n};\n\n/**\n * A plain paragraph textblock. Represented in the DOM\n * as a `<p>` element.\n *\n * https://github.com/ProseMirror/prosemirror-schema-basic/blob/master/src/schema-basic.js\n */\nexport const paragraphWithAlignment: NodeSpec = {\n attrs: {\n align: {default: null},\n class: {default: null},\n id: {default: null},\n },\n content: 'inline*',\n group: 'block',\n parseDOM: [\n {\n tag: 'p',\n getAttrs: (dom: Node | string): null | Attributes => {\n if (!(dom instanceof HTMLElement)) {\n return null;\n }\n\n const {textAlign} = dom.style;\n\n let align: string | null = dom.getAttribute('align') || textAlign || '';\n align = ALIGN_PATTERN.test(align) ? align : null;\n\n const id = dom.getAttribute('id') || '';\n\n return {align, class: dom.className, id};\n },\n },\n ],\n toDOM: node => {\n const {align, id} = node.attrs;\n const attrs: Record<string, string> = {};\n\n let style = '';\n if (align && align !== 'left') {\n style += `text-align: ${align};`;\n }\n\n if (style) {\n attrs.style = style;\n }\n\n if (id) {\n attrs.id = id;\n }\n\n if (node.attrs.class) {\n attrs.class = node.attrs.class;\n }\n\n return ['p', attrs, 0];\n },\n};\n","import {Attrs, NodeSpec} from 'prosemirror-model';\n\ntype Attributes = {\n class: string;\n id: null | string;\n level: number;\n};\n\nconst getAttrsForLevel = function (level: number): (node: HTMLElement | string) => Attrs | false | null {\n return (dom: Node | string): null | Attributes => {\n if (!(dom instanceof HTMLElement)) {\n return null;\n }\n const id = dom.getAttribute('id') || null;\n const attrs: Attributes = {level: level, class: dom.className, id: id};\n\n return attrs;\n };\n};\n\n/**\n * A heading textblock, with a `level` attribute that should hold the number 1 to 6,\n * with optional ID and class attributes. Parsed and serialized as `<h1>` to <h6>`\n *\n * https://github.com/ProseMirror/prosemirror-schema-basic/blob/master/src/schema-basic.js\n */\nexport const heading: NodeSpec = {\n attrs: {\n level: {default: 1},\n class: {default: null},\n id: {default: null},\n },\n content: 'inline*',\n group: 'block',\n defining: true,\n parseDOM: [\n {\n tag: 'h1',\n getAttrs: getAttrsForLevel(1),\n },\n {\n tag: 'h2',\n getAttrs: getAttrsForLevel(2),\n },\n {\n tag: 'h3',\n getAttrs: getAttrsForLevel(3),\n },\n {\n tag: 'h4',\n getAttrs: getAttrsForLevel(4),\n },\n {\n tag: 'h5',\n getAttrs: getAttrsForLevel(5),\n },\n {\n tag: 'h6',\n getAttrs: getAttrsForLevel(6),\n },\n ],\n toDOM: node => {\n const {id} = node.attrs;\n const attrs: Record<string, string> = {};\n\n if (id) {\n attrs.id = id;\n }\n\n if (node.attrs.class) {\n attrs.class = node.attrs.class;\n }\n\n return ['h' + node.attrs.level, attrs, 0];\n },\n};\n","import {MutableAttrs, TableNodes, TableNodesOptions} from 'prosemirror-tables';\nimport {Attrs, Node as ProsemirrorNode} from 'prosemirror-model';\n\ntype CellAttributes = TableNodesOptions['cellAttributes'];\n\nfunction getCellAttrs(dom: Node | string, extraAttrs: CellAttributes): null | Attrs {\n if (!(dom instanceof HTMLElement)) {\n return null;\n }\n\n const widthAttr = dom.getAttribute('data-colwidth');\n const widths = widthAttr && /^\\d+(,\\d+)*$/.test(widthAttr) ? widthAttr.split(',').map(s => Number(s)) : null;\n const colspan = Number(dom.getAttribute('colspan') || 1);\n const result: MutableAttrs = {\n colspan,\n rowspan: Number(dom.getAttribute('rowspan') || 1),\n colwidth: widths && widths.length == colspan ? widths : null,\n };\n\n for (const prop in extraAttrs) {\n const getter = extraAttrs[prop].getFromDOM;\n const value = getter?.(dom);\n if (value != null) result[prop] = value;\n }\n\n return result;\n}\n\nfunction setCellAttrs(node: ProsemirrorNode, extraAttrs: CellAttributes): undefined | Record<string, string> {\n const attrs: Record<string, string> = {};\n if (node.attrs.colspan != 1) attrs.colspan = node.attrs.colspan;\n if (node.attrs.rowspan != 1) attrs.rowspan = node.attrs.rowspan;\n if (node.attrs.colwidth) attrs['data-colwidth'] = node.attrs.colwidth.join(',');\n\n for (const prop in extraAttrs) {\n const setter = extraAttrs[prop].setDOMAttr;\n if (setter) setter(node.attrs[prop], attrs);\n }\n\n return attrs;\n}\n\n/**\n * This function creates a set of [node\n * specs](http://prosemirror.net/docs/ref/#model.SchemaSpec.nodes) for\n * `table`, `table_row`, and `table_cell` nodes types.\n *\n * It is very directly inspired by prosemirror-table\n */\nexport function tableNodes(options: TableNodesOptions): TableNodes {\n const extraAttrs = options.cellAttributes || {};\n const cellAttrs: CellAttributes = {\n colspan: {default: 1},\n rowspan: {default: 1},\n colwidth: {default: null},\n };\n\n for (const prop in extraAttrs) {\n cellAttrs[prop] = {\n default: extraAttrs[prop].default,\n };\n }\n\n return {\n table: {\n attrs: {\n class: {default: null},\n id: {default: ''},\n },\n content: 'table_row+',\n tableRole: 'table',\n isolating: true,\n group: options.tableGroup,\n parseDOM: [\n {\n tag: 'table',\n getAttrs: (dom: Node | string): null | Attrs => {\n if (!(dom instanceof HTMLElement)) {\n return null;\n }\n\n return {\n class: dom.className,\n id: dom.id,\n };\n },\n },\n ],\n toDOM: node => {\n const attrs: Record<string, string> = {};\n if (node.attrs.class) {\n attrs.class = node.attrs.class;\n }\n if (node.attrs.id) {\n attrs.id = node.attrs.id;\n }\n\n return ['table', attrs, ['tbody', 0]];\n },\n },\n table_row: {\n content: '(table_cell | table_header)*',\n tableRole: 'row',\n parseDOM: [{tag: 'tr'}],\n toDOM: () => {\n return ['tr', 0];\n },\n },\n table_cell: {\n content: options.cellContent,\n attrs: cellAttrs,\n tableRole: 'cell',\n isolating: true,\n parseDOM: [{tag: 'td', getAttrs: dom => getCellAttrs(dom, extraAttrs)}],\n toDOM: node => {\n return ['td', setCellAttrs(node, extraAttrs), 0];\n },\n },\n table_header: {\n content: options.cellContent,\n attrs: cellAttrs,\n tableRole: 'header_cell',\n isolating: true,\n parseDOM: [{tag: 'th', getAttrs: dom => getCellAttrs(dom, extraAttrs)}],\n toDOM: node => {\n return ['th', setCellAttrs(node, extraAttrs), 0];\n },\n },\n };\n}\n","import {Attrs, MarkSpec} from 'prosemirror-model';\n\nexport const textColor: MarkSpec = {\n attrs: {color: {default: '#FF0000'}},\n parseDOM: [\n {\n style: 'color',\n getAttrs: (value: string | HTMLElement): null | Attrs => {\n if (typeof value === 'string') {\n return {color: value};\n }\n\n return null;\n },\n },\n ],\n toDOM(mark) {\n return ['span', {style: `color: ${mark.attrs.color}`}, 0];\n },\n};\n","import {marks, nodes} from 'prosemirror-schema-basic';\nimport {addListNodes} from 'prosemirror-schema-list';\nimport {Schema} from 'prosemirror-model';\nimport {paragraphWithAlignment} from './paragraph-with-alignment';\nimport {heading} from './heading';\nimport {tableNodes} from './table';\nimport {textColor} from './text-color';\n\n// Keep only basic elements\ntype BasicNodes = Omit<typeof nodes, 'image' | 'code_block' | 'blockquote' | 'horizontal_rule'>;\nconst basicNodes: BasicNodes = {\n doc: nodes.doc,\n paragraph: nodes.paragraph,\n heading: nodes.heading,\n text: nodes.text,\n hard_break: nodes.hard_break,\n};\n\ntype BasicMarks = Omit<typeof marks, 'code'>;\nconst basicMarks: BasicMarks = {\n link: marks.link,\n em: marks.em,\n strong: marks.strong,\n};\n\nconst advancedMarks = {\n ...basicMarks,\n textColor: textColor,\n};\n\nconst tmpSchema = new Schema({nodes: basicNodes, marks: basicMarks});\n\nexport const basicSchema = new Schema({\n nodes: addListNodes(tmpSchema.spec.nodes, 'paragraph block*', 'block'),\n marks: tmpSchema.spec.marks,\n});\n\nconst tmpSchemaAdvanced = new Schema({\n nodes: {\n ...nodes,\n heading: heading,\n ...tableNodes({\n tableGroup: 'block',\n cellContent: 'block+',\n cellAttributes: {\n background: {\n default: null,\n getFromDOM(dom) {\n return dom.style.backgroundColor || null;\n },\n setDOMAttr(value, attrs) {\n if (typeof value === 'string' && value) {\n attrs.style = ((attrs.style as string) || '') + `background-color: ${value};`;\n }\n },\n },\n },\n }),\n paragraph: paragraphWithAlignment,\n },\n marks: advancedMarks,\n});\n\nexport const advancedSchema = new Schema({\n nodes: addListNodes(tmpSchemaAdvanced.spec.nodes, 'paragraph block*', 'block'),\n marks: advancedMarks,\n});\n","import {MenuItemSpec} from 'prosemirror-menu';\nimport {EditorState} from 'prosemirror-state';\nimport {EditorView} from 'prosemirror-view';\n\n/**\n * One item of the menu.\n *\n * This is the equivalent of `MenuItem` but without all the rendering logic since we use Angular\n * templates for rendering. Also it caches the state of the item everytime the editor state changes,\n * so Angular can query the state as often as needed without performance hit.\n */\nexport class Item {\n /**\n * Whether the item is 'active' (for example, the item for toggling the strong mark might be active when the cursor is in strong text).\n */\n public active = false;\n\n /**\n * Button is shown but disabled, because the item cannot be (un-)applied\n */\n public disabled = false;\n\n /**\n * Whether the item is shown at the moment\n */\n public show = true;\n\n public constructor(public readonly spec: MenuItemSpec) {}\n\n /**\n * Update the item state according to the editor state\n */\n public update(view: EditorView, state: EditorState): void {\n if (this.spec.active) {\n this.active = this.spec.active(state);\n }\n\n if (this.spec.enable) {\n this.disabled = !this.spec.enable(state);\n }\n\n if (this.spec.select) {\n this.show = this.spec.select(state);\n }\n }\n}\n","import {Node, NodeType, Schema} from 'prosemirror-model';\nimport {AllSelection, TextSelection, Transaction} from 'prosemirror-state';\nimport {Item} from './item';\n\ntype Alignment = 'left' | 'right' | 'center' | 'justify';\n\nfunction setTextAlign(tr: Transaction, schema: Schema, alignment: null | Alignment): Transaction {\n const {selection, doc} = tr;\n if (!selection || !doc) {\n return tr;\n }\n const {from, to} = selection;\n const {nodes} = schema;\n\n const tasks: {\n node: Node;\n pos: number;\n nodeType: NodeType;\n }[] = [];\n\n alignment = alignment || null;\n\n const allowedNodeTypes = new Set([\n nodes.paragraph,\n // nodes['blockquote'],\n // nodes['listItem'],\n // nodes['heading'],\n ]);\n\n doc.nodesBetween(from, to, (node, pos) => {\n const nodeType = node.type;\n const align = node.attrs.align || null;\n if (align !== alignment && allowedNodeTypes.has(nodeType)) {\n tasks.push({\n node,\n pos,\n nodeType,\n });\n }\n return true;\n });\n\n if (!tasks.length) {\n return tr;\n }\n\n tasks.forEach(job => {\n const {node, pos, nodeType} = job;\n const newAttrs = {\n ...node.attrs,\n align: alignment ? alignment : null,\n };\n\n tr = tr.setNodeMarkup(pos, nodeType, newAttrs, node.marks);\n });\n\n return tr;\n}\n\nexport class TextAlignItem extends Item {\n public constructor(alignment: Alignment) {\n super({\n active: state => {\n const {selection, doc} = state;\n const {from, to} = selection;\n let keepLooking = true;\n let active = false;\n doc.nodesBetween(from, to, node => {\n if (keepLooking && node.attrs.align === alignment) {\n keepLooking = false;\n active = true;\n }\n return keepLooking;\n });\n\n return active;\n },\n\n enable: state => {\n const {selection} = state;\n return selection instanceof TextSelection || selection instanceof AllSelection;\n },\n\n run: (state, dispatch): boolean => {\n const {schema, selection} = state;\n\n const tr = setTextAlign(state.tr.setSelection(selection), schema, this.active ? null : alignment);\n if (tr.docChanged) {\n dispatch?.(tr);\n return true;\n } else {\n return false;\n }\n },\n });\n }\n}\n","import {Component, inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef, MatDialogModule} from '@angular/material/dialog';\nimport {FormControl, FormGroup, Validators, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {ifValid} from '@ecodev/natural';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {NaturalIconDirective} from '@ecodev/natural';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\n\nexport type ColorDialogData = {\n /**\n * Empty string means no color set at all. Anything else must be a valid CSS color in hexa format.\n *\n * Eg:\n *\n * - `\"\"`\n * - `\"#ff4000\"`\n */\n color: string;\n};\n\n@Component({\n templateUrl: './color-dialog.component.html',\n styleUrl: './color-dialog.component.scss',\n standalone: true,\n imports: [\n MatDialogModule,\n FormsModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatIconModule,\n NaturalIconDirective,\n MatFormFieldModule,\n MatInputModule,\n ],\n})\nexport class ColorDialogComponent {\n private dialogRef = inject<MatDialogRef<ColorDialogComponent, ColorDialogData>>(MatDialogRef);\n\n public readonly colors: string[][] = [\n [\n '#000000',\n '#111111',\n '#1c1c1c',\n '#333333',\n '#666666',\n '#808080',\n '#999999',\n '#b2b2b2',\n '#cccccc',\n '#dddddd',\n '#eeeeee',\n '#ffffff',\n ],\n [\n '#ffff00',\n '#ffbf00',\n '#ff8000',\n '#ff4000',\n '#ff0000',\n '#bf0041',\n '#800080',\n '#55308d',\n '#2a6099',\n '#158466',\n '#00a933',\n '#81d41a',\n ],\n [\n '#ffffd7',\n '#fff5ce',\n '#ffdbb6',\n '#ffd8ce',\n '#ffd7d7',\n '#f7d1d5',\n '#e0c2cd',\n '#dedce6',\n '#dee6ef',\n '#dee7e5',\n '#dde8cb',\n '#f6f9d4',\n ],\n [\n '#ffffa6',\n '#ffe994',\n '#ffb66c',\n '#ffaa95',\n '#ffa6a6',\n '#ec9ba4',\n '#bf819e',\n '#b7b3ca',\n '#b4c7dc',\n '#b3cac7',\n '#afd095',\n '#e8f2a1',\n ],\n [\n '#ffff6d',\n '#ffde59',\n '#ff972f',\n '#ff7b59',\n '#ff6d6d',\n '#e16173',\n '#a1467e',\n '#8e86ae',\n '#729fcf',\n '#81aca6',\n '#77bc65',\n '#d4ea6b',\n ],\n [\n '#ffff38',\n '#ffd428',\n '#ff860d',\n '#ff5429',\n '#ff3838',\n '#d62e4e',\n '#8d1d75',\n '#6b5e9b',\n '#5983b0',\n '#50938a',\n '#3faf46',\n '#bbe33d',\n ],\n [\n '#e6e905',\n '#e8a202',\n '#ea7500',\n '#ed4c05',\n '#f10d0c',\n '#a7074b',\n '#780373',\n '#5b277d',\n '#3465a4',\n '#168253',\n '#069a2e',\n '#5eb91e',\n ],\n [\n '#acb20c',\n '#b47804',\n '#b85c00',\n '#be480a',\n '#c9211e',\n '#861141',\n '#650953',\n '#55215b',\n '#355269',\n '#1e6a39',\n '#127622',\n '#468a1a',\n ],\n [\n '#706e0c',\n '#784b04',\n '#7b3d00',\n '#813709',\n '#8d281e',\n '#611729',\n '#4e102d',\n '#481d32',\n '#383d3c',\n '#28471f',\n '#224b12',\n '#395511',\n ],\n [\n '#443205',\n '#472702',\n '#492300',\n '#4b2204',\n '#50200c',\n '#41190d',\n '#3b160e',\n '#3a1a0f',\n '#362413',\n '#302709',\n '#2e2706',\n '#342a06',\n ],\n ];\n\n public readonly colorControl = new FormControl('', {\n validators: Validators.pattern(/^#\\p{Hex_Digit}{6}/u),\n nonNullable: true,\n });\n public readonly form = new FormGroup({\n color: this.colorControl,\n });\n\n public constructor() {\n const data = inject<ColorDialogData>(MAT_DIALOG_DATA);\n\n this.form.setValue(data);\n }\n\n public maybeConfirm(): void {\n ifValid(this.form).subscribe(() => this.confirm());\n }\n\n private confirm(): void {\n this.dialogRef.close(this.form.getRawValue());\n }\n\n public selectColor(color: string): void {\n this.colorControl.setValue(color);\n this.maybeConfirm();\n }\n}\n","<h2 i18n mat-dialog-title>Sélectionner une couleur</h2>\n\n<mat-dialog-content [formGroup]=\"form\">\n <div>\n @for (row of colors; track row) {\n <div>\n @for (color of row; track color) {\n <div class=\"color\" [style]=\"{backgroundColor: color}\" (click)=\"selectColor(color)\"> </div>\n }\n </div>\n }\n </div>\n\n <div>\n <button mat-button (click)=\"selectColor('')\">\n <mat-icon naturalIcon=\"format_color_reset\" />\n <span i18n>Transparent</span></button\n >\n </div>\n\n <mat-form-field>\n <mat-label i18n>Couleur</mat-label>\n <input matInput [formControl]=\"colorControl\" (keydown.enter)=\"maybeConfirm()\" cdkFocusInitial />\n <div\n class=\"sample\"\n matTextSuffix\n [style]=\"{backgroundColor: colorControl.valid ? colorControl.value : ''}\"\n ></div>\n @if (colorControl.hasError('pattern')) {\n <mat-error i18n>Doit être le format hexadecimal. Par exemple: #ff4000 </mat-error>\n }\n </mat-form-field>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close i18n>Annuler</button>\n <button mat-stroked-button (click)=\"maybeConfirm()\" [disabled]=\"!form.valid\"><span i18n>Valider</span></button>\n</mat-dialog-actions>\n","import {EditorState, Transaction} from 'prosemirror-state';\nimport {CellSelection, isInTable, selectionCell, setCellAttr} from 'prosemirror-tables';\nimport {EditorView} from 'prosemirror-view';\nimport {Item} from './item';\nimport {MatDialog} from '@angular/material/dialog';\nimport {ColorDialogComponent, ColorDialogData} from '../../color-dialog/color-dialog.component';\n\nconst setCellBackgroundColor = setCellAttr.bind(null, 'background');\n\nfunction findFirstBackgroundColorInSelection(state: EditorState): string {\n if (!isInTable(state)) {\n return '';\n }\n\n // For single cell selection\n const $cell = selectionCell(state);\n let foundColor: string = $cell?.nodeAfter?.attrs.background ?? '';\n if (foundColor) {\n return foundColor;\n }\n\n // For multiple cells selection\n let keepLooking = true;\n if (state.selection instanceof CellSelection) {\n state.selection.forEachCell(node => {\n const color = node.attrs.background;\n if (keepLooking && color) {\n keepLooking = false;\n foundColor = color;\n }\n });\n }\n\n return foundColor;\n}\n\nexport class CellBackgroundColorItem extends Item {\n public constructor(dialog: MatDialog) {\n super({\n enable(state: EditorState): boolean {\n // Pretend to set a unique color that is not already set, to test if we can any color at all\n const cmd = setCellBackgroundColor('#000001');\n\n return cmd(state);\n },\n run(state: EditorState, dispatch: (p: Transaction) => void, view: EditorView): void {\n dialog\n .open<ColorDialogComponent, ColorDialogData, ColorDialogData>(ColorDialogComponent, {\n data: {\n color: findFirstBackgroundColorInSelection(state),\n },\n })\n .afterClosed()\n .subscribe(result => {\n if (dispatch && result) {\n const cmd = setCellBackgroundColor(result.color);\n cmd(state, dispatch);\n }\n\n view.focus();\n });\n },\n });\n }\n}\n","import {Component, inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef, MatDialogModule} from '@angular/material/dialog';\nimport {FormControl, FormGroup, Validators, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {ifValid} from '@ecodev/natural';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\nexport type LinkDialogData = {\n href: string;\n title?: string;\n};\n\n@Component({\n templateUrl: './link-dialog.component.html',\n styleUrl: './link-dialog.component.scss',\n standalone: true,\n imports: [MatDialogModule, FormsModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatButtonModule],\n})\nexport class LinkDialogComponent {\n private dialogRef = inject<MatDialogRef<LinkDialogComponent, LinkDialogData>>(MatDialogRef);\n\n public readonly hrefControl = new FormControl('', {validators: Validators.required, nonNullable: true});\n public readonly titleControl = new FormControl('', {nonNullable: true});\n public readonly form = new FormGroup({\n href: this.hrefControl,\n title: this.titleControl,\n });\n\n public constructor() {\n const data = inject<LinkDialogData>(MAT_DIALOG_DATA);\n\n this.form.setValue({title: '', ...data});\n }\n\n public maybeConfirm(): void {\n ifValid(this.form).subscribe(() => this.confirm());\n }\n\n private confirm(): void {\n this.dialogRef.close(this.form.getRawValue());\n }\n}\n","<h2 i18n mat-dialog-title>Insérer un lien</h2>\n\n<mat-dialog-content [formGroup]=\"form\">\n <mat-form-field>\n <mat-label i18n>URL</mat-label>\n <input matInput [formControl]=\"hrefControl\" (keydown.enter)=\"maybeConfirm()\" />\n @if (hrefControl.hasError('required')) {\n <mat-error i18n>Ce champ est requis</mat-error>\n }\n </mat-form-field>\n <mat-form-field>\n <mat-label i18n>Titre</mat-label>\n <input matInput [formControl]=\"titleControl\" (keydown.enter)=\"maybeConfirm()\" />\n </mat-form-field>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close i18n>Annuler</button>\n <button mat-stroked-button (click)=\"maybeConfirm()\" [disabled]=\"!form.valid\"><span i18n>Valider</span></button>\n</mat-dialog-actions>\n","import {Command, EditorState} from 'prosemirror-state';\nimport {MarkType} from 'prosemirror-model';\nimport {MenuItem, MenuItemSpec} from 'prosemirror-menu';\nimport {Item} from './item';\nimport {toggleMark} from 'prosemirror-commands';\n\nexport function markActive(state: EditorState, type: MarkType): boolean {\n const {from, $from, to, empty} = state.selection;\n if (empty) {\n return !!type.isInSet(state.storedMarks || $from.marks());\n } else {\n return state.doc.rangeHasMark(from, to, type);\n }\n}\n\n/**\n * Convert built-in `MenuItem` into our Angular specific `Item`\n */\nexport function menuItemToItem(item: MenuItem): Item {\n return new Item(item.spec);\n}\n\n/**\n * From a `Command`, creates a new `Item` that will have an automatic `enable` spec\n */\nexport function cmdToItem(cmd: Command, options: Partial<MenuItemSpec> = {}): Item {\n const passedOptions: MenuItemSpec = {\n run: cmd,\n ...options,\n };\n\n if (!options.enable && !options.select) {\n passedOptions.enable = state => cmd(state);\n }\n\n return new Item(passedOptions);\n}\n\n/**\n * From a `MarkType`, creates a new `Item` that will have an automatic `active` and `enable` spec\n */\nexport function markTypeToItem(markType: MarkType): Item {\n return cmdToItem(toggleMark(markType), {\n active(state: EditorState): boolean {\n return markActive(state, markType);\n },\n });\n}\n\nexport function selectionContainsNodeType(state: EditorState, allowedNodeTypes: string[]): boolean {\n const {selection, doc} = state;\n const {from, to} = selection;\n let keepLooking = true;\n let found = false;\n\n doc.nodesBetween(from, to, node => {\n if (keepLooking && allowedNodeTypes.includes(node.type.name)) {\n keepLooking = false;\n found = true;\n }\n\n return keepLooking;\n });\n\n return found;\n}\n","import {Item} from './item';\nimport {MarkType} from 'prosemirror-model';\nimport {MatDialog} from '@angular/material/dialog';\nimport {EditorState, Transaction} from 'prosemirror-state';\nimport {EditorView} from 'prosemirror-view';\nimport {toggleMark} from 'prosemirror-commands';\nimport {LinkDialogComponent, LinkDialogData} from '../../link-dialog/link-dialog.component';\nimport {markActive} from './utils';\n\nexport class LinkItem extends Item {\n public constructor(markType: MarkType, dialog: MatDialog) {\n super({\n active(state: EditorState): boolean {\n return markActive(state, markType);\n },\n enable(state: EditorState): boolean {\n return !state.selection.empty;\n },\n run(state: EditorState, dispatch: (p: Transaction) => void, view: EditorView): void {\n if (markActive(state, markType)) {\n toggleMark(markType)(state, dispatch);\n return;\n }\n\n dialog\n .open<LinkDialogComponent, LinkDialogData, LinkDialogData>(LinkDialogComponent, {\n data: {\n href: '',\n title: '',\n },\n })\n .afterClosed()\n .subscribe(result => {\n if (result) {\n if (!result.title) {\n delete result.title;\n }\n\n toggleMark(markType, result)(view.state, view.dispatch);\n }\n\n view.focus();\n });\n },\n });\n }\n}\n","import {Item} from './item';\nimport {EditorState} from 'prosemirror-state';\nimport {NodeType} from 'prosemirror-model';\n\nfunction canInsert(state: EditorState, nodeType: NodeType): boolean {\n const $from = state.selection.$from;\n for (let d = $from.depth; d >= 0; d--) {\n const index = $from.index(d);\n if ($from.node(d).canReplaceWith(index, index, nodeType)) {\n return true;\n }\n }\n\n return false;\n}\n\nexport class HorizontalRuleItem extends Item {\n public constructor(hr: NodeType) {\n super({\n enable(state): boolean {\n return canInsert(state, hr);\n },\n run(state, dispatch): void {\n dispatch(state.tr.replaceSelectionWith(hr.create()));\n },\n });\n }\n}\n","import {NodeType} from 'prosemirror-model';\nimport {Item} from './item';\nimport {wrapInList} from 'prosemirror-schema-list';\nimport {cmdToItem} from './utils';\n\nexport function wrapListItem(nodeType: NodeType): Item {\n return cmdToItem(wrapInList(nodeType));\n}\n","import {Component, inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef, MatDialogModule} from '@angular/material/dialog';\nimport {FormControl, FormGroup, Validators, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {ifValid} from '@ecodev/natural';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\nexport type ClassDialogData = {\n /**\n * CSS class names\n *\n * Eg:\n *\n * - `\"\"`\n * - `\"my-class my-other-class\"`\n */\n class: string;\n};\n\n@Component({\n templateUrl: './class-dialog.component.html',\n styleUrl: './class-dialog.component.scss',\n standalone: true,\n imports: [MatDialogModule, FormsModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatButtonModule],\n})\nexport class ClassDialogComponent {\n private dialogRef = inject<MatDialogRef<ClassDialogComponent, ClassDialogData>>(MatDialogRef);\n\n public readonly classControl = new FormControl('', {\n validators: Validators.pattern(/(^\\s*(-?[_a-zA-Z]+[_a-zA-Z0-9-]*\\s*)+)/),\n nonNullable: true,\n });\n public readonly form = new FormGroup({\n class: this.classControl,\n });\n\n public constructor() {\n const data = inject<ClassDialogData>(MAT_DIALOG_DATA);\n\n this.form.setValue(data);\n }\n\n public maybeConfirm(): void {\n ifValid(this.form).subscribe(() => this.confirm());\n }\n\n private confirm(): void {\n this.dialogRef.close(this.form.getRawValue());\n }\n}\n","<h2 i18n mat-dialog-title>Saisir les classes CSS</h2>\n\n<mat-dialog-content [formGroup]=\"form\">\n <mat-form-field>\n <mat-label i18n>Classes CSS</mat-label>\n <input matInput [formControl]=\"classControl\" (keydown.enter)=\"maybeConfirm()\" cdkFocusInitial />\n @if (classControl.hasError('pattern')) {\n <mat-error i18n>Doit être un ou plusieurs nom de classe CSS</mat-error>\n }\n </mat-form-field>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close i18n>Annuler</button>\n <button mat-stroked-button (click)=\"maybeConfirm()\" [disabled]=\"!form.valid\"><span i18n>Valider</span></button>\n</mat-dialog-actions>\n","import {Node, NodeType} from 'prosemirror-model';\nimport {EditorState, Transaction} from 'prosemirror-state';\nimport {Item} from './item';\nimport {selectionContainsNodeType} from './utils';\nimport {MatDialog} from '@angular/material/dialog';\nimport {ClassDialogComponent, ClassDialogData} from '../../class-dialog/class-dialog.component';\n\nfunction setClass(tr: Transaction, classValue: string, allowedNodeTypes: string[]): Transaction {\n const {selection, doc} = tr;\n if (!selection || !doc) {\n return tr;\n }\n const {from, to} = selection;\n\n const tasks: {\n node: Node;\n pos: number;\n nodeType: NodeType;\n }[] = [];\n\n doc.nodesBetween(from, to, (node, pos) => {\n const nodeType = node.type;\n const currentClass = node.attrs.class || null;\n if (currentClass !== classValue && allowedNodeTypes.includes(nodeType.name)) {\n tasks.push({\n node,\n pos,\n nodeType,\n });\n }\n return true;\n });\n\n if (!tasks.length) {\n return tr;\n }\n\n tasks.forEach(job => {\n const {node, pos, nodeType} = job;\n const newAttrs = {\n ...node.attrs,\n class: classValue ? classValue : null,\n };\n\n tr = tr.setNodeMarkup(pos, nodeType, newAttrs, node.marks);\n });\n\n return tr;\n}\n\n/**\n * Returns the first `class` attribute that is non-empty in the selection.\n * If not found, return empty string.\n */\nfunction findFirstClassInSelection(state: EditorState, allowedNodeTypes: string[]): string {\n const {selection, doc} = state;\n const {from, to} = selection;\n let keepLooking = true;\n let foundClass = '';\n\n doc.nodesBetween(from, to, node => {\n if (keepLooking && allowedNodeTypes.includes(node.type.name) && node.attrs.class) {\n keepLooking = false;\n foundClass = node.attrs.class;\n }\n\n return keepLooking;\n });\n\n return foundClass;\n}\n\nexport class ClassItem extends Item {\n public constructor(dialog: MatDialog, nodeTypes: string[]) {\n super({\n active: state => {\n return !!findFirstClassInSelection(state, nodeTypes);\n },\n\n enable: state => {\n return selectionContainsNodeType(state, nodeTypes);\n },\n\n run: (state, dispatch, view): void => {\n dialog\n .open<ClassDialogComponent, ClassDialogData, ClassDialogData>(ClassDialogComponent, {\n data: {\n class: findFirstClassInSelection(state, nodeTypes),\n },\n })\n .afterClosed()\n .subscribe(result => {\n if (dispatch && result) {\n const {selection} = state;\n\n const tr = setClass(state.tr.setSelection(selection), result.class, nodeTypes);\n if (tr.docChanged) {\n dispatch?.(tr);\n }\n }\n\n view.focus();\n });\n },\n });\n }\n}\n","import {Component, inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef, MatDialogModule} from '@angular/material/dialog';\nimport {FormControl, FormGroup, Validators, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {ifValid} from '@ecodev/natural';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\nexport type IdDialogData = {\n /**\n * ID name\n *\n * Eg:\n *\n * - `\"\"`\n * - `\"my-id\"`\n */\n id: string;\n};\n\n@Component({\n templateUrl: './id-dialog.component.html',\n styleUrl: './id-dialog.component.scss',\n standalone: true,\n imports: [MatDialogModule, FormsModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatButtonModule],\n})\nexport class IdDialogComponent {\n private dialogRef = inject<MatDialogRef<IdDialogComponent, IdDialogData>>(MatDialogRef);\n\n public readonly idControl = new FormControl('', {\n validators: Validators.pattern(/(^(-?[_a-zA-Z]+[_a-zA-Z0-9-]*)+)/),\n nonNullable: true,\n });\n public readonly form = new FormGroup({\n id: this.idControl,\n });\n\n public constructor() {\n const data = inject<IdDialogData>(MAT_DIALOG_DATA);\n\n this.form.setValue(data);\n }\n\n public maybeConfirm(): void {\n ifValid(this.form).subscribe(() => this.confirm());\n }\n\n private confirm(): void {\n this.dialogRef.close(this.form.getRawValue());\n }\n}\n","<h2 i18n mat-dialog-title>Saisir le ID</h2>\n\n<mat-dialog-content [formGroup]=\"form\">\n <mat-form-field>\n <mat-label i18n>ID</mat-label>\n <input matInput [formControl]=\"idControl\" (keydown.enter)=\"maybeConfirm()\" cdkFocusInitial />\n @if (idControl.hasError('pattern')) {\n <mat-error i18n>Doit être un ID valide</mat-error>\n }\n </mat-form-field>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close i18n>Annuler</button>\n <button mat-stroked-button (click)=\"maybeConfirm()\" [disabled]=\"!form.valid\"><span i18n>Valider</span></button>\n</mat-dialog-actions>\n","import {Node, NodeType} from 'prosemirror-model';\nimport {EditorState, Transaction} from 'prosemirror-state';\nimport {Item} from './item';\nimport {selectionContainsNodeType} from './utils';\nimport {MatDialog} from '@angular/material/dialog';\nimport {IdDialogComponent, IdDialogData} from '../../id-dialog/id-dialog.component';\n\nfunction setId(tr: Transaction, idValue: string, allowedNodeTypes: string[]): Transaction {\n const {selection, doc} = tr;\n if (!selection || !doc) {\n return tr;\n }\n const {from, to} = selection;\n\n const tasks: {\n node: Node;\n pos: number;\n nodeType: NodeType;\n }[] = [];\n\n doc.nodesBetween(from, to, (node, pos) => {\n const nodeType = node.type;\n const currentId = node.attrs.id || null;\n if (currentId !== idValue && allowedNodeTypes.includes(nodeType.name)) {\n tasks.push({\n node,\n pos,\n nodeType,\n });\n }\n return true;\n });\n\n if (!tasks.length) {\n return tr;\n }\n\n tasks.forEach(job => {\n const {node, pos, nodeType} = job;\n const newAttrs = {\n ...node.attrs,\n id: idValue ? idValue : null,\n };\n\n tr = tr.setNodeMarkup(pos, nodeType, newAttrs, node.marks);\n });\n\n return tr;\n}\n\n/**\n * Returns the first `id` attribute that is non-empty in the selection.\n * If not found, return empty string.\n */\nfunction findFirstIdInSelection(state: EditorState, allowedNodeTypes: string[]): string {\n const {selection, doc} = state;\n const {from, to} = selection;\n let keepLooking = true;\n let foundId = '';\n\n doc.nodesBetween(from, to, node => {\n if (keepLooking && allowedNodeTypes.includes(node.type.name) && node.attrs.id) {\n keepLooking = false;\n foundId = node.attrs.id;\n }\n\n return keepLooking;\n });\n\n return foundId;\n}\n\nexport class IdItem extends Item {\n public constructor(dialog: MatDialog, nodeTypes: string[]) {\n super({\n active: state => {\n return !!findFirstIdInSelection(state, nodeTypes);\n },\n\n enable: state => {\n return selectionContainsNodeType(state, nodeTypes);\n },\n\n run: (state, dispatch, view): void => {\n dialog\n .open<IdDialogComponent, IdDialogData, IdDialogData>(IdDialogComponent, {\n data: {\n id: findFirstIdInSelection(state, nodeTypes),\n },\n })\n .afterClosed()\n .subscribe(result => {\n if (dispatch && result) {\n const {selection} = state;\n\n const tr = setId(state.tr.setSelection(selection), result.id, nodeTypes);\n if (tr.docChanged) {\n dispatch?.(tr);\n }\n }\n\n view.focus();\n });\n },\n });\n }\n}\n","import {EditorState, TextSelection, Transaction} from 'prosemirror-state';\nimport {Fragment, Node as ProsemirrorNode, NodeType} from 'prosemirror-model';\nimport {tableNodeTypes} from 'prosemirror-tables';\nimport {Item} from './item';\n\nfunction createCell(\n cellType: NodeType,\n cellContent?: Fragment | ProsemirrorNode | ProsemirrorNode[],\n): ProsemirrorNode | null | undefined {\n return cellContent ? cellType.createChecked(null, cellContent) : cellType.createAndFill();\n}\n\nfunction createTable(\n state: EditorState,\n rowsCount: number,\n colsCount: number,\n withHeaderRow: boolean,\n cellContent?: Fragment | ProsemirrorNode | ProsemirrorNode[],\n): ProsemirrorNode {\n const types = tableNodeTypes(state.schema);\n const headerCells = [];\n const cells = [];\n\n for (let index = 0; index < colsCount; index += 1) {\n const cell = createCell(types.cell, cellContent);\n\n if (cell) {\n cells.push(cell);\n }\n\n if (withHeaderRow) {\n const headerCell = createCell(types.header_cell, cellContent);\n\n if (headerCell) {\n headerCells.push(headerCell);\n }\n }\n }\n\n const rows = [];\n\n for (let index = 0; index < rowsCount; index += 1) {\n rows.push(types.row.createChecked(null, withHeaderRow && index === 0 ? headerCells : cells));\n }\n\n return types.table.createChecked(null, rows);\n}\n\nfunction addTable(\n state: EditorState,\n dispatch?: (tr: Transaction) => void,\n {\n rowsCount = 3,\n colsCount = 3,\n withHeaderRow = true,\n cellContent,\n }: {\n rowsCount?: number;\n colsCount?: number;\n withHeaderRow?: boolean;\n cellContent?: Fragment | ProsemirrorNode | ProsemirrorNode[];\n } = {},\n): void {\n const offset = state.tr.selection.anchor + 1;\n\n const nodes = createTable(state, rowsCount, colsCount, withHeaderRow, cellContent);\n const tr = state.tr.replaceSelectionWith(nodes).scrollIntoView();\n const resolvedPos = tr.doc.resolve(offset);\n\n // move cursor into table\n tr.setSelection(TextSelection.near(resolvedPos));\n\n dispatch?.(tr);\n}\n\nexport class AddTableItem extends Item {\n public constructor() {\n super({run: (editor, tr) => addTable(editor, tr)});\n }\n}\n","import {EditorState, Transaction} from 'prosemirror-state';\nimport {EditorView} from 'prosemirror-view';\nimport {Item} from './item';\nimport {MatDialog} from '@angular/material/dialog';\nimport {ColorDialogComponent, ColorDialogData} from '../../color-dialog/color-dialog.component';\nimport {MarkType} from 'prosemirror-model';\nimport {markActive} from './utils';\nimport {toggleMark} from 'prosemirror-commands';\nimport {rgbToHex} from '@ecodev/natural';\n\nfunction findFirstColorInSelection(state: EditorState, markType: MarkType): string {\n const {selection, doc} = state;\n const {from, to} = selection;\n let foundColor = '';\n\n doc.nodesBetween(from, to, node => {\n if (foundColor) {\n return false;\n }\n\n const mark = node.marks.find(mark => mark.type === markType);\n if (mark?.attrs.color) {\n foundColor = mark.attrs.color;\n }\n\n return !foundColor;\n });\n\n return rgbToHex(foundColor);\n}\n\nexport class TextColorItem extends Item {\n public constructor(markType: MarkType, dialog: MatDialog) {\n super({\n active(state: EditorState): boolean {\n return markActive(state, markType);\n },\n enable(state: EditorState): boolean {\n return !state.selection.empty;\n },\n run(state: EditorState, dispatch: (p: Transaction) => void, view: EditorView): void {\n dialog\n .open<ColorDialogComponent, ColorDialogData, ColorDialogData>(ColorDialogComponent, {\n data: {\n color: findFirstColorInSelection(state, markType),\n },\n })\n .afterClosed()\n .subscribe(result => {\n if (result) {\n // Remove existing color before applying new one\n if (markActive(state, markType)) {\n toggleMark(markType, {}, {})(view.state, view.dispatch);\n }\n\n // Apply new color, unless we selected \"transparent\"\n if (result.color) {\n toggleMark(markType, result, {})(view.state, view.dispatch);\n }\n }\n\n view.focus();\n });\n },\n });\n }\n}\n","import {\n blockTypeItem,\n joinUpItem,\n liftItem,\n redoItem,\n selectParentNodeItem,\n undoItem,\n wrapItem,\n} from 'prosemirror-menu';\nimport {MarkType, NodeType, Schema} from 'prosemirror-model';\nimport {MatDialog} from '@angular/material/dialog';\nimport {\n addColumnAfter,\n addColumnBefore,\n addRowAfter,\n addRowBefore,\n deleteColumn,\n deleteRow,\n deleteTable,\n mergeCells,\n splitCell,\n toggleHeaderCell,\n toggleHeaderColumn,\n toggleHeaderRow,\n} from 'prosemirror-tables';\nimport {Item} from './items/item';\nimport {paragraphWithAlignment} from './schema/paragraph-with-alignment';\nimport {TextAlignItem} from './items/text-align-item';\nimport {CellBackgroundColorItem} from './items/cell-background-color-item';\nimport {LinkItem} from './items/link-item';\nimport {HorizontalRuleItem} from './items/horizontal-rule-item';\nimport {cmdToItem, markTypeToItem, menuItemToItem} from './items/utils';\nimport {wrapListItem} from './items/wrap-list-item';\nimport {ClassItem} from './items/class-item';\nimport {IdItem} from './items/id-item';\nimport {AddTableItem} from './items/table-item';\nimport {TextColorItem} from './items/text-color-item';\n\nexport type Key =\n | 'toggleStrong'\n | 'toggleEm'\n | 'toggleCode'\n | 'toggleLink'\n | 'textColor'\n | 'wrapBulletList'\n | 'wrapOrderedList'\n | 'wrapBlockQuote'\n | 'makeParagraph'\n | 'makeCodeBlock'\n | 'makeHead1'\n | 'makeHead2'\n | 'makeHead3'\n | 'makeHead4'\n | 'makeHead5'\n | 'makeHead6'\n | 'alignLeft'\n | 'alignRight'\n | 'alignCenter'\n | 'alignJustify'\n | 'insertHorizontalRule'\n | 'joinUp'\n | 'lift'\n | 'selectParentNode'\n | 'undo'\n | 'redo'\n | 'insertTable'\n | 'addColumnBefore'\n | 'addColumnAfter'\n | 'deleteColumn'\n | 'addRowBefore'\n | 'addRowAfter'\n | 'deleteRow'\n | 'deleteTable'\n | 'mergeCells'\n | 'splitCell'\n | 'toggleHeaderColumn'\n | 'toggleHeaderRow'\n | 'toggleHeaderCell'\n | 'cellBackgroundColor'\n | 'tableClass'\n | 'tableId'\n | 'blockClass'\n | 'blockId';\n\nexport type MenuItems = Partial<Record<Key, Item>>;\n\n/**\n * Given a schema, look for default mark and node types in it and\n * return an object with relevant menu items relating to those marks:\n */\nexport function buildMenuItems(schema: Schema, dialog: MatDialog): MenuItems {\n const r: MenuItems = {\n joinUp: menuItemToItem(joinUpItem),\n lift: menuItemToItem(liftItem),\n selectParentNode: menuItemToItem(selectParentNodeItem),\n undo: menuItemToItem(undoItem),\n redo: menuItemToItem(redoItem),\n };\n\n let type: MarkType | NodeType | undefined;\n type = schema.marks.strong;\n if (type) {\n r.toggleStrong = markTypeToItem(type);\n }\n\n type = schema.marks.em;\n if (type) {\n r.toggleEm = markTypeToItem(type);\n }\n\n type = schema.marks.code;\n if (type) {\n r.toggleCode = markTypeToItem(type);\n }\n\n type = schema.marks.link;\n if (type) {\n r.toggleLink = new LinkItem(type, dialog);\n }\n\n type = schema.marks.textColor;\n if (type) {\n r.textColor = new TextColorItem(type, dialog);\n }\n\n type = schema.nodes.bullet_list;\n if (type) {\n r.wrapBulletList = wrapListItem(type);\n }\n\n type = schema.nodes.ordered_list;\n if (type) {\n r.wrapOrderedList = wrapListItem(type);\n }\n\n type = schema.nodes.blockquote;\n if (type) {\n r.wrapBlockQuote = menuItemToItem(wrapItem(type, {}));\n }\n\n type = schema.nodes.paragraph;\n if (type) {\n r.makeParagraph = menuItemToItem(blockTypeItem(type, {}));\n\n if (type.spec === paragraphWithAlignment) {\n r.alignLeft = new TextAlignItem('left');\n r.alignRight = new TextAlignItem('right');\n r.alignCenter = new TextAlignItem('center');\n r.alignJustify = new TextAlignItem('justify');\n }\n }\n\n type = schema.nodes.code_block;\n if (type) {\n r.makeCodeBlock = menuItemToItem(blockTypeItem(type, {}));\n }\n\n type = schema.nodes.heading;\n if (type) {\n r.makeHead1 = menuItemToItem(blockTypeItem(type, {attrs: {level: 1}}));\n r.makeHead2 = menuItemToItem(blockTypeItem(type, {attrs: {level: 2}}));\n r.makeHead3 = menuItemToItem(blockTypeItem(type, {attrs: {level: 3}}));\n r.makeHead4 = menuItemToItem(blockTypeItem(type, {attrs: {level: 4}}));\n r.makeHead5 = menuItemToItem(blockTypeItem(type, {attrs: {level: 5}}));\n r.makeHead6 = menuItemToItem(blockTypeItem(type, {attrs: {level: 6}}));\n }\n if (schema.nodes.paragraph?.spec === paragraphWithAlignment) {\n r.blockId = new IdItem(dialog, ['heading', 'paragraph']);\n r.blockClass = new ClassItem(dialog, ['heading', 'paragraph']);\n }\n\n type = schema.nodes.horizontal_rule;\n if (type) {\n r.insertHorizontalRule = new HorizontalRuleItem(type);\n }\n\n type = schema.nodes.table;\n if (type) {\n r.insertTable = new AddTableItem();\n r.addColumnBefore = cmdToItem(addColumnBefore);\n r.addColumnAfter = cmdToItem(addColumnAfter);\n r.deleteColumn = cmdToItem(deleteColumn);\n r.addRowBefore = cmdToItem(addRowBefore);\n r.addRowAfter = cmdToItem(addRowAfter);\n r.deleteRow = cmdToItem(deleteRow);\n r.deleteTable = cmdToItem(deleteTable);\n r.mergeCells = cmdToItem(mergeCells);\n r.splitCell = cmdToItem(splitCell);\n r.toggleHeaderColumn = cmdToItem(toggleHeaderColumn);\n r.toggleHeaderRow = cmdToItem(toggleHeaderRow);\n r.toggleHeaderCell = cmdToItem(toggleHeaderCell);\n r.cellBackgroundColor = new CellBackgroundColorItem(dialog);\n r.tableClass = new ClassItem(dialog, ['table']);\n r.tableId = new IdItem(dialog, ['table']);\n }\n\n return r;\n}\n","import {\n ellipsis,\n emDash,\n InputRule,\n inputRules,\n textblockTypeInputRule,\n wrappingInputRule,\n} from 'prosemirror-inputrules';\nimport {NodeType, Schema} from 'prosemirror-model';\nimport {Plugin} from 'prosemirror-state';\n\n/**\n * Given a blockquote node type, returns an input rule that turns `\"> \"`\n * at the start of a textblock into a blockquote.\n */\nfunction blockQuoteRule(nodeType: NodeType): InputRule {\n return wrappingInputRule(/^\\s*>\\s$/, nodeType);\n}\n\n/**\n * Given a list node type, returns an input rule that turns a number\n * followed by a dot at the start of a textblock into an ordered list.\n */\nfunction orderedListRule(nodeType: NodeType): InputRule {\n return wrappingInputRule(\n /^(\\d+)\\.\\s$/,\n nodeType,\n match => ({order: +match[1]}),\n (match, node) => node.childCount + node.attrs.order === +match[1],\n );\n}\n\n/**\n * Given a list node type, returns an input rule that turns a bullet\n * (dash, plush, or asterisk) at the start of a textblock into a\n * bullet list.\n */\nfunction bulletListRule(nodeType: NodeType): InputRule {\n return wrappingInputRule(/^\\s*([-+*])\\s$/, nodeType);\n}\n\n/**\n * Given a code block node type, returns an input rule that turns a\n * textblock starting with three backticks into a code block.\n */\nfunction codeBlockRule(nodeType: NodeType): InputRule {\n return textblockTypeInputRule(/^```$/, nodeType);\n}\n\n/**\n * Given a node type and a maximum level, creates an input rule that\n * turns up to that number of `#` characters followed by a space at\n * the start of a textblock into a heading whose level corresponds to\n * the number of `#` signs.\n */\nfunction headingRule(nodeType: NodeType, maxLevel: number): InputRule {\n return textblockTypeInputRule(new RegExp('^(#{1,' + maxLevel + '})\\\\s$'), nodeType, match => ({\n level: match[1].length,\n }));\n}\n\n/**\n * A set of input rules for creating the basic block quotes, lists,\n * code blocks, and heading.\n */\nexport function buildInputRules(schema: Schema): Plugin {\n const rules = [ellipsis, emDash];\n\n let type = schema.nodes.blockquote;\n if (type) {\n rules.push(blockQuoteRule(type));\n }\n\n type = schema.nodes.ordered_list;\n if (type) {\n rules.push(orderedListRule(type));\n }\n\n type = schema.nodes.bullet_list;\n if (type) {\n rules.push(bulletListRule(type));\n }\n\n type = schema.nodes.code_block;\n if (type) {\n rules.push(codeBlockRule(type));\n }\n\n type = schema.nodes.heading;\n if (type) {\n rules.push(headingRule(type, 6));\n }\n\n return inputRules({rules});\n}\n","import {\n chainCommands,\n exitCode,\n joinDown,\n joinUp,\n lift,\n selectParentNode,\n setBlockType,\n toggleMark,\n wrapIn,\n} from 'prosemirror-commands';\nimport {liftListItem, sinkListItem, splitListItem, wrapInList} from 'prosemirror-schema-list';\nimport {redo, undo} from 'prosemirror-history';\nimport {undoInputRule} from 'prosemirror-inputrules';\nimport {MarkType, NodeType, Schema} from 'prosemirror-model';\nimport {Command} from 'prosemirror-state';\n\ntype Keymap = Record<string, Command>;\n\n/**\n * Inspect the given schema looking for marks and nodes from the\n * basic schema, and if found, add key bindings related to them.\n * This will add:\n *\n * * **Mod-b** for toggling [strong](#schema-basic.StrongMark)\n * * **Mod-i** for toggling [emphasis](#schema-basic.EmMark)\n * * **Mod-`** for toggling [code font](#schema-basic.CodeMark)\n * * **Ctrl-Shift-0** for making the current textblock a paragraph\n * * **Ctrl-Shift-1** to **Ctrl-Shift-Digit6** for making the current\n * textblock a heading of the corresponding level\n * * **Ctrl-Shift-Backslash** to make the current textblock a code block\n * * **Ctrl-Shift-8** to wrap the selection in an ordered list\n * * **Ctrl-Shift-9** to wrap the selection in a bullet list\n * * **Ctrl->** to wrap the selection in a block quote\n * * **Enter** to split a non-empty textblock in a list item while at\n * the same time splitting the list item\n * * **Mod-Enter** to insert a hard break\n * * **Mod-_** to insert a horizontal rule\n * * **Backspace** to undo an input rule\n * * **Alt-ArrowUp** to `joinUp`\n * * **Alt-ArrowDown** to `joinDown`\n * * **Mod-BracketLeft** to `lift`\n * * **Escape** to `selectParentNode`\n *\n * You can suppress or map these bindings by passing a `mapKeys`\n * argument, which maps key names (say `\"Mod-B\"` to either `false`, to\n * remove the binding, or a new key name string.\n */\nexport function buildKeymap(schema: Schema, isMac: boolean): Keymap {\n const keys: Keymap = {};\n\n keys['Mod-z'] = undo;\n keys['Shift-Mod-z'] = redo;\n keys.Backspace = undoInputRule;\n if (!isMac) {\n keys['Mod-y'] = redo;\n }\n\n keys['Alt-ArrowUp'] = joinUp;\n keys['Alt-ArrowDown'] = joinDown;\n keys['Mod-BracketLeft'] = lift;\n keys.Escape = selectParentNode;\n\n let type: MarkType | NodeType = schema.marks.strong;\n if (type) {\n keys['Mod-b'] = toggleMark(type);\n keys['Mod-B'] = toggleMark(type);\n }\n\n type = schema.marks.em;\n if (type) {\n keys['Mod-i'] = toggleMark(type);\n keys['Mod-I'] = toggleMark(type);\n }\n\n type = schema.marks.code;\n if (type) {\n keys['Mod-`'] = toggleMark(type);\n }\n\n type = schema.nodes.bullet_list;\n if (type) {\n keys['Shift-Ctrl-8'] = wrapInList(type);\n }\n\n type = schema.nodes.ordered_list;\n if (type) {\n keys['Shift-Ctrl-9'] = wrapInList(type);\n }\n\n type = schema.nodes.blockquote;\n if (type) {\n keys['Ctrl->'] = wrapIn(type);\n }\n\n type = schema.nodes.hard_break;\n if (type) {\n const br = type;\n const cmd = chainCommands(exitCode, (state, dispatch) => {\n dispatch?.(state.tr.replaceSelectionWith(br.create()).scrollIntoView());\n return true;\n });\n keys['Mod-Enter'] = cmd;\n keys['Shift-Enter'] = cmd;\n if (isMac) {\n keys['Ctrl-Enter'] = cmd;\n }\n }\n\n type = schema.nodes.list_item;\n if (type) {\n keys.Enter = splitListItem(type);\n keys['Mod-['] = liftListItem(type);\n keys['Mod-]'] = sinkListItem(type);\n }\n\n type = schema.nodes.paragraph;\n if (type) {\n keys['Shift-Ctrl-0'] = setBlockType(type);\n }\n\n type = schema.nodes.code_block;\n if (type) {\n keys['Shift-Ctrl-\\\\'] = setBlockType(type);\n }\n\n type = schema.nodes.heading;\n if (type) {\n for (let i = 1; i <= 6; i++) {\n keys['Shift-Ctrl-' + i] = setBlockType(type, {level: i});\n }\n }\n\n type = schema.nodes.horizontal_rule;\n if (type) {\n const hr = type;\n keys['Mod-_'] = (state, dispatch) => {\n dispatch?.(state.tr.replaceSelectionWith(hr.create()).scrollIntoView());\n return true;\n };\n }\n\n return keys;\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n inject,\n input,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport {ControlValueAccessor, NgControl} from '@angular/forms';\nimport {EditorView} from 'prosemirror-view';\nimport {EditorState, Plugin, Transaction} from 'prosemirror-state';\nimport {DOMParser, DOMSerializer, Schema} from 'prosemirror-model';\nimport {DOCUMENT} from '@angular/common';\nimport {MatDialog} from '@angular/material/dialog';\nimport {goToNextCell, tableEditing} from 'prosemirror-tables';\nimport {keymap} from 'prosemirror-keymap';\nimport {ImagePlugin, ImageUploader} from '../utils/image';\nimport {advancedSchema, basicSchema} from '../utils/schema/schema';\nimport {buildMenuItems, Key, MenuItems} from '../utils/menu';\nimport {history} from 'prosemirror-history';\nimport {baseKeymap} from 'prosemirror-commands';\nimport {dropCursor} from 'prosemirror-dropcursor';\nimport {gapCursor} from 'prosemirror-gapcursor';\nimport {buildInputRules} from '../utils/inputrules';\nimport {buildKeymap} from '../utils/keymap';\nimport {NaturalFileDropDirective} from '@ecodev/natural';\nimport {MatDividerModule} from '@angular/material/divider';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {MatButtonToggleModule} from '@angular/material/button-toggle';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {MatButtonModule} from '@angular/material/button';\n\n/**\n * Prosemirror component\n *\n * Usage :\n *\n * ```html\n * <natural-editor [(ngModel)]=\"htmlString\" />\n * ```\n */\n// @dynamic\n@Component({\n selector: 'natural-editor',\n templateUrl: './editor.component.html',\n styleUrl: './editor.component.scss',\n providers: [ImagePlugin],\n standalone: true,\n imports: [\n MatButtonModule,\n MatTooltipModule,\n MatIconModule,\n MatButtonToggleModule,\n MatMenuModule,\n MatDividerModule,\n NaturalFileDropDirective,\n ],\n})\nexport class NaturalEditorComponent implements OnInit, OnDestroy, ControlValueAccessor {\n private readonly ngControl = inject(NgControl, {optional: true, self: true});\n private readonly document = inject(DOCUMENT);\n private readonly dialog = inject(MatDialog);\n private readonly imagePlugin = inject(ImagePlugin);\n\n private view: EditorView | null = null;\n\n @ViewChild('editor', {read: ElementRef, static: true}) private editor!: ElementRef<HTMLElement>;\n\n @Output() public readonly contentChange = new EventEmitter<string>();\n\n /**\n * Callback to upload an image.\n *\n * If given it will enable advanced schema, including image and tables.\n * It must be given on initialization and cannot be changed later on.\n */\n @Input() public imageUploader: ImageUploader | null = null;\n\n /**\n * Mode must be set on initialization. Later changes will have no effect. Possible values are:\n *\n * - `basic`, the default, only offers minimal formatting options\n * - `advanced`, adds text colors, headings, alignments, and tables. If `imageUploader` is given, it will force `advanced` mode.\n */\n public readonly mode = input<'basic' | 'advanced'>('basic');\n\n private schema: Schema = basicSchema;\n\n /**\n * Interface with ControlValueAccessor\n * Notifies parent model / form controller\n */\n private onChange?: (value: string | null) => void;\n\n /**\n * HTML string\n */\n private content = '';\n\n public menu: MenuItems | null = null;\n\n /**\n * If subscribed to, then the save button will be shown and click events forwarded\n */\n @Output() public readonly save = new EventEmitter<void>();\n\n public disabled = false;\n\n public constructor() {\n if (this.ngControl !== null) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n public ngOnInit(): void {\n this.schema = this.imageUploader || this.mode() === 'advanced' ? advancedSchema : basicSchema;\n this.menu = buildMenuItems(this.schema, this.dialog);\n const serializer = DOMSerializer.fromSchema(this.schema);\n const state = this.createState();\n\n this.view = new EditorView(this.editor.nativeElement, {\n state: state,\n editable: () => !this.disabled,\n dispatchTransaction: (transaction: Transaction) => {\n if (!this.view) {\n return;\n }\n\n const newState = this.view.state.apply(transaction);\n this.view.updateState(newState);\n\n // Transform doc into HTML string\n const dom = serializer.serializeFragment(this.view.state.doc as any);\n const el = this.document.createElement('_');\n el.appendChild(dom);\n\n const newContent = el.innerHTML;\n if (this.content === newContent || this.disabled) {\n return;\n }\n\n this.content = el.innerHTML;\n\n if (this.onChange) {\n this.onChange(this.content);\n }\n this.contentChange.emit(this.content);\n },\n });\n this.update();\n }\n\n public writeValue(val: string | undefined): void {\n if (typeof val === 'string' && val !== this.content) {\n this.content = val;\n }\n\n if (this.view !== null) {\n const state = this.createState();\n this.view.updateState(state);\n }\n }\n\n private createState(): EditorState {\n const template = this.document.createElement('_');\n template.innerHTML = '<div>' + this.content + '</div>';\n if (!template.firstChild) {\n throw new Error('child of template element could not be created');\n }\n\n const parser = DOMParser.fromSchema(this.schema);\n const doc = parser.parse(template.firstChild);\n\n return EditorState.create({\n doc: doc,\n plugins: this.createPlugins(),\n });\n }\n\n private createPlugins(): Plugin[] {\n const isMac = !!this.document.defaultView?.navigator.platform.match(/Mac/);\n\n const plugins = [\n buildInputRules(this.schema),\n keymap(buildKeymap(this.schema, isMac)),\n keymap(baseKeymap),\n dropCursor(),\n gapCursor(),\n history(),\n new Plugin({\n props: {\n attributes: {class: 'ProseMirror-example-setup-style'},\n },\n }),\n new Plugin({\n view: () => this,\n }),\n ];\n\n if (this.imageUploader) {\n plugins.push(this.imagePlugin.plugin);\n }\n\n if (this.schema === advancedSchema) {\n plugins.push(\n tableEditing(),\n keymap({\n Tab: goToNextCell(1),\n 'Shift-Tab': goToNextCell(-1),\n }),\n );\n }\n\n return plugins;\n }\n\n /**\n * Called by Prosemirror whenever the editor state changes. So we update our menu states.\n */\n public update(): void {\n if (!this.view || !this.menu) {\n return;\n }\n\n for (const item of Object.values(this.menu)) {\n item.update(this.view, this.view.state);\n }\n }\n\n public registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(): void {\n // noop\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public ngOnDestroy(): void {\n if (this.view) {\n this.view.destroy();\n this.view = null;\n }\n }\n\n public run(event: Event, key: Key): void {\n if (!this.view || !this.menu) {\n return;\n }\n\n const item = this.menu[key];\n if (!item || item.disabled || !item.show) {\n return;\n }\n\n item.spec.run(this.view.state, this.view.dispatch, this.view, event);\n this.view.focus();\n }\n\n public upload(file: File): void {\n if (!this.view || !this.imageUploader) {\n return;\n }\n\n if (this.view.state.selection.$from.parent.inlineContent) {\n this.imagePlugin.startImageUpload(this.view, file, this.imageUploader, this.schema);\n }\n\n this.view.focus();\n }\n}\n","@if (menu && !this.disabled) {\n <div class=\"menu-container\">\n <div class=\"menu\">\n @if (save.observed) {\n <button mat-icon-button (click)=\"save.emit()\" i18n-matTooltip matTooltip=\"Enregistrer\">\n <mat-icon fontIcon=\"save\" />\n </button>\n }\n <mat-button-toggle-group hideMultipleSelectionIndicator multiple>\n @if (menu.toggleStrong) {\n <mat-button-toggle\n [disabled]=\"menu.toggleStrong.disabled\"\n [checked]=\"menu.toggleStrong.active\"\n (click)=\"run($event, 'toggleStrong')\"\n i18n-matTooltip\n matTooltip=\"Gras\"\n >\n <mat-icon fontIcon=\"format_bold\" />\n </mat-button-toggle>\n }\n @if (menu.toggleEm) {\n <mat-button-toggle\n [disabled]=\"menu.toggleEm.disabled\"\n [checked]=\"menu.toggleEm.active\"\n (click)=\"run($event, 'toggleEm')\"\n i18n-matTooltip\n matTooltip=\"Italique\"\n >\n <mat-icon fontIcon=\"format_italic\" />\n </mat-button-toggle>\n }\n @if (menu.toggleCode) {\n <mat-button-toggle\n [disabled]=\"menu.toggleCode.disabled\"\n [checked]=\"menu.toggleCode.active\"\n (click)=\"run($event, 'toggleCode')\"\n i18n-matTooltip\n matTooltip=\"Code\"\n >\n <mat-icon fontIcon=\"code\" />\n </mat-button-toggle>\n }\n @if (menu.toggleLink) {\n <mat-button-toggle\n [disabled]=\"menu.toggleLink.disabled\"\n [checked]=\"menu.toggleLink.active\"\n (click)=\"run($event, 'toggleLink')\"\n i18n-matTooltip\n matTooltip=\"Insérer un lien...\"\n >\n <mat-icon fontIcon=\"insert_link\" />\n </mat-button-toggle>\n }\n @if (menu.textColor) {\n <mat-button-toggle\n [disabled]=\"menu.textColor.disabled\"\n [checked]=\"menu.textColor.active\"\n (click)=\"run($event, 'textColor')\"\n i18n-matTooltip\n matTooltip=\"Couleur du texte...\"\n >\n <mat-icon fontIcon=\"format_color_text\" />\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n <button mat-button [matMenuTriggerFor]=\"blockMenu\">\n <span i18n>Type</span>\n <mat-icon fontIcon=\"arrow_drop_down\" />\n </button>\n <mat-menu #blockMenu=\"matMenu\">\n @if (menu.makeParagraph) {\n <button\n mat-menu-item\n [disabled]=\"menu.makeParagraph.disabled\"\n (click)=\"run($event, 'makeParagraph')\"\n i18n\n >Paragraphe\n </button>\n }\n @if (menu.makeCodeBlock) {\n <button\n mat-menu-item\n [disabled]=\"menu.makeCodeBlock.disabled\"\n (click)=\"run($event, 'makeCodeBlock')\"\n i18n\n >Code\n </button>\n }\n @if (menu.makeHead1) {\n <button mat-menu-item [disabled]=\"menu.makeHead1.disabled\" (click)=\"run($event, 'makeHead1')\" i18n\n >Titre 1\n </button>\n }\n @if (menu.makeHead2) {\n <button mat-menu-item [disabled]=\"menu.makeHead2.disabled\" (click)=\"run($event, 'makeHead2')\" i18n\n >Titre 2\n </button>\n }\n @if (menu.makeHead3) {\n <button mat-menu-item [disabled]=\"menu.makeHead3.disabled\" (click)=\"run($event, 'makeHead3')\" i18n\n >Titre 3\n </button>\n }\n @if (menu.makeHead4) {\n <button mat-menu-item [disabled]=\"menu.makeHead4.disabled\" (click)=\"run($event, 'makeHead4')\" i18n\n >Titre 4\n </button>\n }\n @if (menu.makeHead5) {\n <button mat-menu-item [disabled]=\"menu.makeHead5.disabled\" (click)=\"run($event, 'makeHead5')\" i18n\n >Titre 5\n </button>\n }\n @if (menu.makeHead6) {\n <button mat-menu-item [disabled]=\"menu.makeHead6.disabled\" (click)=\"run($event, 'makeHead6')\" i18n\n >Titre 6\n </button>\n }\n @if (menu.blockClass || menu.blockId) {\n <mat-divider />\n }\n @if (menu.blockClass) {\n <button mat-menu-item [disabled]=\"menu.blockClass.disabled\" (click)=\"run($event, 'blockClass')\" i18n\n >Classe...\n </button>\n }\n @if (menu.blockId) {\n <button i18n mat-menu-item [disabled]=\"menu.blockId.disabled\" (click)=\"run($event, 'blockId')\"\n >ID...\n </button>\n }\n </mat-menu>\n @if (menu.addColumnBefore) {\n <button mat-button [matMenuTriggerFor]=\"tableMenu\">\n <span i18n>Tableau</span>\n <mat-icon fontIcon=\"arrow_drop_down\" />\n </button>\n }\n <mat-menu #tableMenu=\"matMenu\">\n @if (menu.insertTable) {\n <button\n mat-menu-item\n [disabled]=\"menu.insertTable.disabled\"\n (click)=\"run($event, 'insertTable')\"\n i18n\n >Insérer un tableau\n </button>\n }\n @if (menu.deleteTable) {\n <button\n mat-menu-item\n [disabled]=\"menu.deleteTable.disabled\"\n (click)=\"run($event, 'deleteTable')\"\n i18n\n >Supprimer le tableau\n </button>\n }\n @if (menu.mergeCells) {\n <button mat-menu-item [disabled]=\"menu.mergeCells.disabled\" (click)=\"run($event, 'mergeCells')\" i18n\n >Fusionner les cellules\n </button>\n }\n @if (menu.splitCell) {\n <button mat-menu-item [disabled]=\"menu.splitCell.disabled\" (click)=\"run($event, 'splitCell')\" i18n\n >Scinder les cellules\n </button>\n }\n @if (menu.cellBackgroundColor) {\n <button\n mat-menu-item\n [disabled]=\"menu.cellBackgroundColor.disabled\"\n (click)=\"run($event, 'cellBackgroundColor')\"\n i18n\n >Couleur de fond...\n </button>\n }\n @if (menu.tableClass) {\n <button mat-menu-item [disabled]=\"menu.tableClass.disabled\" (click)=\"run($event, 'tableClass')\" i18n\n >Classe...\n </button>\n }\n @if (menu.tableId) {\n <button i18n mat-menu-item [disabled]=\"menu.tableId.disabled\" (click)=\"run($event, 'tableId')\"\n >ID...\n </button>\n }\n <mat-divider />\n @if (menu.addColumnBefore) {\n <button\n mat-menu-item\n [disabled]=\"menu.addColumnBefore.disabled\"\n (click)=\"run($event, 'addColumnBefore')\"\n i18n\n >Insérer une colonne avant\n </button>\n }\n @if (menu.addColumnAfter) {\n <button\n mat-menu-item\n [disabled]=\"menu.addColumnAfter.disabled\"\n (click)=\"run($event, 'addColumnAfter')\"\n i18n\n >Insérer une colonne après\n </button>\n }\n @if (menu.deleteColumn) {\n <button\n mat-menu-item\n [disabled]=\"menu.deleteColumn.disabled\"\n (click)=\"run($event, 'deleteColumn')\"\n i18n\n >Supprimer la colonne\n </button>\n }\n <mat-divider />\n @if (menu.addRowBefore) {\n <button\n mat-menu-item\n [disabled]=\"menu.addRowBefore.disabled\"\n (click)=\"run($event, 'addRowBefore')\"\n i18n\n >Insérer une ligne avant\n </button>\n }\n @if (menu.addRowAfter) {\n <button\n mat-menu-item\n [disabled]=\"menu.addRowAfter.disabled\"\n (click)=\"run($event, 'addRowAfter')\"\n i18n\n >Insérer une ligne après\n </button>\n }\n @if (menu.deleteRow) {\n <button mat-menu-item [disabled]=\"menu.deleteRow.disabled\" (click)=\"run($event, 'deleteRow')\" i18n\n >Supprimer la ligne\n </button>\n }\n <mat-divider />\n @if (menu.toggleHeaderColumn) {\n <button\n mat-menu-item\n [disabled]=\"menu.toggleHeaderColumn.disabled\"\n (click)=\"run($event, 'toggleHeaderColumn')\"\n i18n\n >Entête de colonne\n </button>\n }\n @if (menu.toggleHeaderRow) {\n <button\n mat-menu-item\n [disabled]=\"menu.toggleHeaderRow.disabled\"\n (click)=\"run($event, 'toggleHeaderRow')\"\n i18n\n >Entête de ligne\n </button>\n }\n @if (menu.toggleHeaderCell) {\n <button\n mat-menu-item\n [disabled]=\"menu.toggleHeaderCell.disabled\"\n (click)=\"run($event, 'toggleHeaderCell')\"\n i18n\n >Entête de cellule\n </button>\n }\n </mat-menu>\n @if (imageUploader) {\n <button\n mat-icon-button\n naturalFileDrop\n [selectable]=\"true\"\n [broadcast]=\"false\"\n i18n-matTooltip\n matTooltip=\"Insérer une image\"\n (fileChange)=\"upload($event)\"\n >\n <mat-icon fontIcon=\"insert_photo\" />\n </button>\n }\n @if (menu.alignLeft) {\n <mat-button-toggle-group hideSingleSelectionIndicator>\n @if (menu.alignLeft) {\n <mat-button-toggle\n [disabled]=\"menu.alignLeft.disabled\"\n [checked]=\"menu.alignLeft.active\"\n (click)=\"run($event, 'alignLeft')\"\n i18n-matTooltip\n matTooltip=\"Aligner gauche\"\n >\n <mat-icon fontIcon=\"format_align_left\" />\n </mat-button-toggle>\n }\n @if (menu.alignCenter) {\n <mat-button-toggle\n [disabled]=\"menu.alignCenter.disabled\"\n [checked]=\"menu.alignCenter.active\"\n (click)=\"run($event, 'alignCenter')\"\n i18n-matTooltip\n matTooltip=\"Centrer\"\n >\n <mat-icon fontIcon=\"format_align_center\" />\n </mat-button-toggle>\n }\n @if (menu.alignRight) {\n <mat-button-toggle\n [disabled]=\"menu.alignRight.disabled\"\n [checked]=\"menu.alignRight.active\"\n (click)=\"run($event, 'alignRight')\"\n i18n-matTooltip\n matTooltip=\"Aligner droite\"\n >\n <mat-icon fontIcon=\"format_align_right\" />\n </mat-button-toggle>\n }\n @if (menu.alignJustify) {\n <mat-button-toggle\n [disabled]=\"menu.alignJustify.disabled\"\n [checked]=\"menu.alignJustify.active\"\n (click)=\"run($event, 'alignJustify')\"\n i18n-matTooltip\n matTooltip=\"Justifier\"\n >\n <mat-icon fontIcon=\"format_align_justify\" />\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n }\n @if (menu.undo) {\n <button\n mat-icon-button\n [disabled]=\"menu.undo.disabled\"\n (click)=\"run($event, 'undo')\"\n i18n-matTooltip\n matTooltip=\"Annuler\"\n >\n <mat-icon fontIcon=\"undo\" />\n </button>\n }\n @if (menu.redo) {\n <button\n mat-icon-button\n [disabled]=\"menu.redo.disabled\"\n (click)=\"run($event, 'redo')\"\n i18n-matTooltip\n matTooltip=\"Refaire\"\n >\n <mat-icon fontIcon=\"redo\" />\n </button>\n }\n @if (menu.wrapBulletList && menu.wrapBulletList.show) {\n <button\n mat-icon-button\n [disabled]=\"menu.wrapBulletList.disabled\"\n (click)=\"run($event, 'wrapBulletList')\"\n i18n-matTooltip\n matTooltip=\"Liste à puce\"\n >\n <mat-icon fontIcon=\"format_list_bulleted\" />\n </button>\n }\n @if (menu.wrapOrderedList && menu.wrapOrderedList.show) {\n <button\n mat-icon-button\n [disabled]=\"menu.wrapOrderedList.disabled\"\n (click)=\"run($event, 'wrapOrderedList')\"\n i18n-matTooltip\n matTooltip=\"Liste à numéro\"\n >\n <mat-icon fontIcon=\"format_list_numbered\" />\n </button>\n }\n @if (menu.wrapBlockQuote && menu.wrapBlockQuote.show) {\n <button\n mat-icon-button\n [disabled]=\"menu.wrapBlockQuote.disabled\"\n (click)=\"run($event, 'wrapBlockQuote')\"\n i18n-matTooltip\n matTooltip=\"Citation\"\n >\n <mat-icon fontIcon=\"format_quote\" />\n </button>\n }\n @if (menu.joinUp && menu.joinUp.show) {\n <button\n mat-icon-button\n [disabled]=\"menu.joinUp.disabled\"\n (click)=\"run($event, 'joinUp')\"\n i18n-matTooltip\n matTooltip=\"Fusionner avec l'élément du haut\"\n >\n <mat-icon fontIcon=\"move_up\" />\n </button>\n }\n @if (menu.lift && menu.lift.show) {\n <button\n mat-icon-button\n [disabled]=\"menu.lift.disabled\"\n (click)=\"run($event, 'lift')\"\n i18n-matTooltip\n matTooltip=\"Désindenter\"\n >\n <mat-icon fontIcon=\"format_indent_decrease\" />\n </button>\n }\n @if (menu.selectParentNode && menu.selectParentNode.show) {\n <button\n mat-icon-button\n [disabled]=\"menu.selectParentNode.disabled\"\n (click)=\"run($event, 'selectParentNode')\"\n i18n-matTooltip\n matTooltip=\"Sélectionner l'élément parent\"\n >\n <mat-icon fontIcon=\"select_all\" />\n </button>\n }\n </div>\n </div>\n}\n<div class=\"editor-container\" #editor></div>\n","/// <reference types=\"@angular/localize\" />\n\n/*\n * Public API Surface of natural-editor\n */\n\nexport {NaturalCustomCssDirective} from './lib/custom-css/custom-css.directive';\nexport {NaturalEditorComponent} from './lib/editor/editor.component';\nexport type {ImageUploader} from './lib/utils/image';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i6","i2","i3","i5"],"mappings":"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"}
1
+ {"version":3,"file":"ecodev-natural-editor.mjs","sources":["../../../projects/natural-editor/src/lib/custom-css/custom-css.directive.ts","../../../projects/natural-editor/src/lib/utils/image.ts","../../../projects/natural-editor/src/lib/utils/schema/paragraph-with-alignment.ts","../../../projects/natural-editor/src/lib/utils/schema/heading.ts","../../../projects/natural-editor/src/lib/utils/schema/table.ts","../../../projects/natural-editor/src/lib/utils/schema/text-color.ts","../../../projects/natural-editor/src/lib/utils/schema/schema.ts","../../../projects/natural-editor/src/lib/utils/items/item.ts","../../../projects/natural-editor/src/lib/utils/items/text-align-item.ts","../../../projects/natural-editor/src/lib/color-dialog/color-dialog.component.ts","../../../projects/natural-editor/src/lib/color-dialog/color-dialog.component.html","../../../projects/natural-editor/src/lib/utils/items/cell-background-color-item.ts","../../../projects/natural-editor/src/lib/link-dialog/link-dialog.component.ts","../../../projects/natural-editor/src/lib/link-dialog/link-dialog.component.html","../../../projects/natural-editor/src/lib/utils/items/utils.ts","../../../projects/natural-editor/src/lib/utils/items/link-item.ts","../../../projects/natural-editor/src/lib/utils/items/horizontal-rule-item.ts","../../../projects/natural-editor/src/lib/utils/items/wrap-list-item.ts","../../../projects/natural-editor/src/lib/class-dialog/class-dialog.component.ts","../../../projects/natural-editor/src/lib/class-dialog/class-dialog.component.html","../../../projects/natural-editor/src/lib/utils/items/class-item.ts","../../../projects/natural-editor/src/lib/id-dialog/id-dialog.component.ts","../../../projects/natural-editor/src/lib/id-dialog/id-dialog.component.html","../../../projects/natural-editor/src/lib/utils/items/id-item.ts","../../../projects/natural-editor/src/lib/utils/items/table-item.ts","../../../projects/natural-editor/src/lib/utils/items/text-color-item.ts","../../../projects/natural-editor/src/lib/utils/menu.ts","../../../projects/natural-editor/src/lib/utils/inputrules.ts","../../../projects/natural-editor/src/lib/utils/keymap.ts","../../../projects/natural-editor/src/lib/editor/editor.component.ts","../../../projects/natural-editor/src/lib/editor/editor.component.html","../../../projects/natural-editor/src/public-api.ts","../../../projects/natural-editor/src/ecodev-natural-editor.ts"],"sourcesContent":["import {Directive, HostBinding, inject, Input, OnDestroy} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\n/**\n * Prefix all CSS selectors with the given selector\n *\n * This is meant to be relatively simple and might not cover advanced CSS syntax\n */\nexport function prefixCss(prefix: string, css: string): string {\n prefix = '\\n' + prefix + ' ';\n\n return css\n .replace(/([^{}]*){/gs, selectors =>\n selectors\n .split(',')\n .map(selector => {\n if (selector.trim().startsWith('@media')) {\n return selector.trim();\n } else {\n return prefix + selector.trim();\n }\n })\n .join(','),\n )\n .trim();\n}\n\nlet uniqueId = 0;\nlet componentCount = 0;\n\n/**\n * Inject custom CSS into component and scope the CSS only to this component\n *\n * Usage :\n *\n * ```html\n * <div [naturalCustomCss]=\".my-class {background: red}\">\n * <p class=\"my-class\">foo bar</p>\n * </div>\n * ```\n */\n@Directive({\n selector: '[naturalCustomCss]',\n standalone: true,\n})\nexport class NaturalCustomCssDirective implements OnDestroy {\n private readonly document = inject(DOCUMENT);\n\n private style: HTMLStyleElement | null = null;\n\n @HostBinding('attr.data-natural-id') private readonly id = 'n' + ++uniqueId;\n\n @Input({required: true})\n public set naturalCustomCss(value: string | undefined) {\n if (value && !this.style) {\n this.style = this.document.createElement('style');\n this.document.head.appendChild(this.style);\n }\n\n if (this.style) {\n this.style.innerHTML = value ? prefixCss(`[data-natural-id=${this.id}]`, value) : '';\n }\n }\n\n public ngOnDestroy(): void {\n this.style?.remove();\n\n // Reset uniqueId if we have no component alive anymore, so that we never reach max int\n componentCount--;\n if (componentCount <= 0) {\n uniqueId = 0;\n }\n }\n}\n","import {Decoration, DecorationSet, EditorView} from 'prosemirror-view';\nimport {EditorState, Plugin} from 'prosemirror-state';\nimport {Observable} from 'rxjs';\nimport {Schema} from 'prosemirror-model';\nimport {inject, Injectable} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\nexport type ImageUploader = (file: File) => Observable<string>;\n\n@Injectable({providedIn: 'root'})\nexport class ImagePlugin {\n public readonly plugin: Plugin<DecorationSet>;\n\n public constructor() {\n const document = inject(DOCUMENT);\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n this.plugin = new Plugin<DecorationSet>({\n state: {\n init(): DecorationSet {\n return DecorationSet.empty;\n },\n apply(tr, set): DecorationSet {\n // Adjust decoration positions to changes made by the transaction\n set = set.map(tr.mapping, tr.doc);\n\n // See if the transaction adds or removes any placeholders\n const action = tr.getMeta(self.plugin);\n if (action?.add) {\n const widget = document.createElement('placeholder');\n const deco = Decoration.widget(action.add.pos, widget, {id: action.add.id});\n set = set.add(tr.doc, [deco]);\n } else if (action?.remove) {\n set = set.remove(set.find(undefined, undefined, spec => spec.id === action.remove.id));\n }\n\n return set;\n },\n },\n props: {\n decorations(state: EditorState): DecorationSet | undefined {\n return this.getState(state);\n },\n },\n });\n }\n\n private findPlaceholder(state: EditorState, id: Record<string, never>): number | null {\n const decorators = this.plugin.getState(state);\n const found = decorators?.find(undefined, undefined, spec => spec.id === id);\n return found?.length ? found[0].from : null;\n }\n\n public startImageUpload(view: EditorView, file: File, uploader: ImageUploader, schema: Schema): void {\n // A fresh object to act as the ID for this upload\n const id = {};\n\n // Replace the selection with a placeholder\n const tr = view.state.tr;\n if (!tr.selection.empty) {\n tr.deleteSelection();\n }\n\n tr.setMeta(this.plugin, {add: {id, pos: tr.selection.from}});\n view.dispatch(tr);\n\n uploader(file).subscribe({\n next: url => {\n const pos = this.findPlaceholder(view.state, id);\n // If the content around the placeholder has been deleted, drop\n // the image\n if (pos === null) {\n return;\n }\n\n // Otherwise, insert it at the placeholder's position, and remove\n // the placeholder\n view.dispatch(\n view.state.tr\n .replaceWith(pos, pos, schema.nodes.image.create({src: url}))\n .setMeta(this.plugin, {remove: {id}}),\n );\n },\n error: () => {\n // On failure, just clean up the placeholder\n view?.dispatch(tr.setMeta(this.plugin, {remove: {id}}));\n },\n });\n }\n}\n","import {NodeSpec} from 'prosemirror-model';\n\nconst ALIGN_PATTERN = /(left|right|center|justify)/;\ntype Attributes = {\n align: null | string;\n class: string;\n id: string;\n};\n\n/**\n * A plain paragraph textblock. Represented in the DOM\n * as a `<p>` element.\n *\n * https://github.com/ProseMirror/prosemirror-schema-basic/blob/master/src/schema-basic.js\n */\nexport const paragraphWithAlignment: NodeSpec = {\n attrs: {\n align: {default: null},\n class: {default: null},\n id: {default: null},\n },\n content: 'inline*',\n group: 'block',\n parseDOM: [\n {\n tag: 'p',\n getAttrs: (dom: Node | string): null | Attributes => {\n if (!(dom instanceof HTMLElement)) {\n return null;\n }\n\n const {textAlign} = dom.style;\n\n let align: string | null = dom.getAttribute('align') || textAlign || '';\n align = ALIGN_PATTERN.test(align) ? align : null;\n\n const id = dom.getAttribute('id') || '';\n\n return {align, class: dom.className, id};\n },\n },\n ],\n toDOM: node => {\n const {align, id} = node.attrs;\n const attrs: Record<string, string> = {};\n\n let style = '';\n if (align && align !== 'left') {\n style += `text-align: ${align};`;\n }\n\n if (style) {\n attrs.style = style;\n }\n\n if (id) {\n attrs.id = id;\n }\n\n if (node.attrs.class) {\n attrs.class = node.attrs.class;\n }\n\n return ['p', attrs, 0];\n },\n};\n","import {Attrs, NodeSpec} from 'prosemirror-model';\n\ntype Attributes = {\n class: string;\n id: null | string;\n level: number;\n};\n\nconst getAttrsForLevel = function (level: number): (node: HTMLElement | string) => Attrs | false | null {\n return (dom: Node | string): null | Attributes => {\n if (!(dom instanceof HTMLElement)) {\n return null;\n }\n const id = dom.getAttribute('id') || null;\n const attrs: Attributes = {level: level, class: dom.className, id: id};\n\n return attrs;\n };\n};\n\n/**\n * A heading textblock, with a `level` attribute that should hold the number 1 to 6,\n * with optional ID and class attributes. Parsed and serialized as `<h1>` to <h6>`\n *\n * https://github.com/ProseMirror/prosemirror-schema-basic/blob/master/src/schema-basic.js\n */\nexport const heading: NodeSpec = {\n attrs: {\n level: {default: 1},\n class: {default: null},\n id: {default: null},\n },\n content: 'inline*',\n group: 'block',\n defining: true,\n parseDOM: [\n {\n tag: 'h1',\n getAttrs: getAttrsForLevel(1),\n },\n {\n tag: 'h2',\n getAttrs: getAttrsForLevel(2),\n },\n {\n tag: 'h3',\n getAttrs: getAttrsForLevel(3),\n },\n {\n tag: 'h4',\n getAttrs: getAttrsForLevel(4),\n },\n {\n tag: 'h5',\n getAttrs: getAttrsForLevel(5),\n },\n {\n tag: 'h6',\n getAttrs: getAttrsForLevel(6),\n },\n ],\n toDOM: node => {\n const {id} = node.attrs;\n const attrs: Record<string, string> = {};\n\n if (id) {\n attrs.id = id;\n }\n\n if (node.attrs.class) {\n attrs.class = node.attrs.class;\n }\n\n return ['h' + node.attrs.level, attrs, 0];\n },\n};\n","import {MutableAttrs, TableNodes, TableNodesOptions} from 'prosemirror-tables';\nimport {Attrs, Node as ProsemirrorNode} from 'prosemirror-model';\n\ntype CellAttributes = TableNodesOptions['cellAttributes'];\n\nfunction getCellAttrs(dom: Node | string, extraAttrs: CellAttributes): null | Attrs {\n if (!(dom instanceof HTMLElement)) {\n return null;\n }\n\n const widthAttr = dom.getAttribute('data-colwidth');\n const widths = widthAttr && /^\\d+(,\\d+)*$/.test(widthAttr) ? widthAttr.split(',').map(s => Number(s)) : null;\n const colspan = Number(dom.getAttribute('colspan') || 1);\n const result: MutableAttrs = {\n colspan,\n rowspan: Number(dom.getAttribute('rowspan') || 1),\n colwidth: widths && widths.length == colspan ? widths : null,\n };\n\n for (const prop in extraAttrs) {\n const getter = extraAttrs[prop].getFromDOM;\n const value = getter?.(dom);\n if (value != null) result[prop] = value;\n }\n\n return result;\n}\n\nfunction setCellAttrs(node: ProsemirrorNode, extraAttrs: CellAttributes): undefined | Record<string, string> {\n const attrs: Record<string, string> = {};\n if (node.attrs.colspan != 1) attrs.colspan = node.attrs.colspan;\n if (node.attrs.rowspan != 1) attrs.rowspan = node.attrs.rowspan;\n if (node.attrs.colwidth) attrs['data-colwidth'] = node.attrs.colwidth.join(',');\n\n for (const prop in extraAttrs) {\n const setter = extraAttrs[prop].setDOMAttr;\n if (setter) setter(node.attrs[prop], attrs);\n }\n\n return attrs;\n}\n\n/**\n * This function creates a set of [node\n * specs](http://prosemirror.net/docs/ref/#model.SchemaSpec.nodes) for\n * `table`, `table_row`, and `table_cell` nodes types.\n *\n * It is very directly inspired by prosemirror-table\n */\nexport function tableNodes(options: TableNodesOptions): TableNodes {\n const extraAttrs = options.cellAttributes || {};\n const cellAttrs: CellAttributes = {\n colspan: {default: 1},\n rowspan: {default: 1},\n colwidth: {default: null},\n };\n\n for (const prop in extraAttrs) {\n cellAttrs[prop] = {\n default: extraAttrs[prop].default,\n };\n }\n\n return {\n table: {\n attrs: {\n class: {default: null},\n id: {default: ''},\n },\n content: 'table_row+',\n tableRole: 'table',\n isolating: true,\n group: options.tableGroup,\n parseDOM: [\n {\n tag: 'table',\n getAttrs: (dom: Node | string): null | Attrs => {\n if (!(dom instanceof HTMLElement)) {\n return null;\n }\n\n return {\n class: dom.className,\n id: dom.id,\n };\n },\n },\n ],\n toDOM: node => {\n const attrs: Record<string, string> = {};\n if (node.attrs.class) {\n attrs.class = node.attrs.class;\n }\n if (node.attrs.id) {\n attrs.id = node.attrs.id;\n }\n\n return ['table', attrs, ['tbody', 0]];\n },\n },\n table_row: {\n content: '(table_cell | table_header)*',\n tableRole: 'row',\n parseDOM: [{tag: 'tr'}],\n toDOM: () => {\n return ['tr', 0];\n },\n },\n table_cell: {\n content: options.cellContent,\n attrs: cellAttrs,\n tableRole: 'cell',\n isolating: true,\n parseDOM: [{tag: 'td', getAttrs: dom => getCellAttrs(dom, extraAttrs)}],\n toDOM: node => {\n return ['td', setCellAttrs(node, extraAttrs), 0];\n },\n },\n table_header: {\n content: options.cellContent,\n attrs: cellAttrs,\n tableRole: 'header_cell',\n isolating: true,\n parseDOM: [{tag: 'th', getAttrs: dom => getCellAttrs(dom, extraAttrs)}],\n toDOM: node => {\n return ['th', setCellAttrs(node, extraAttrs), 0];\n },\n },\n };\n}\n","import {Attrs, MarkSpec} from 'prosemirror-model';\n\nexport const textColor: MarkSpec = {\n attrs: {color: {default: '#FF0000'}},\n parseDOM: [\n {\n style: 'color',\n getAttrs: (value: string | HTMLElement): null | Attrs => {\n if (typeof value === 'string') {\n return {color: value};\n }\n\n return null;\n },\n },\n ],\n toDOM(mark) {\n return ['span', {style: `color: ${mark.attrs.color}`}, 0];\n },\n};\n","import {marks, nodes} from 'prosemirror-schema-basic';\nimport {addListNodes} from 'prosemirror-schema-list';\nimport {Schema} from 'prosemirror-model';\nimport {paragraphWithAlignment} from './paragraph-with-alignment';\nimport {heading} from './heading';\nimport {tableNodes} from './table';\nimport {textColor} from './text-color';\n\n// Keep only basic elements\ntype BasicNodes = Omit<typeof nodes, 'image' | 'code_block' | 'blockquote' | 'horizontal_rule'>;\nconst basicNodes: BasicNodes = {\n doc: nodes.doc,\n paragraph: nodes.paragraph,\n heading: nodes.heading,\n text: nodes.text,\n hard_break: nodes.hard_break,\n};\n\ntype BasicMarks = Omit<typeof marks, 'code'>;\nconst basicMarks: BasicMarks = {\n link: marks.link,\n em: marks.em,\n strong: marks.strong,\n};\n\nconst advancedMarks = {\n ...basicMarks,\n textColor: textColor,\n};\n\nconst tmpSchema = new Schema({nodes: basicNodes, marks: basicMarks});\n\nexport const basicSchema = new Schema({\n nodes: addListNodes(tmpSchema.spec.nodes, 'paragraph block*', 'block'),\n marks: tmpSchema.spec.marks,\n});\n\nconst tmpSchemaAdvanced = new Schema({\n nodes: {\n ...nodes,\n heading: heading,\n ...tableNodes({\n tableGroup: 'block',\n cellContent: 'block+',\n cellAttributes: {\n background: {\n default: null,\n getFromDOM(dom) {\n return dom.style.backgroundColor || null;\n },\n setDOMAttr(value, attrs) {\n if (typeof value === 'string' && value) {\n attrs.style = ((attrs.style as string) || '') + `background-color: ${value};`;\n }\n },\n },\n },\n }),\n paragraph: paragraphWithAlignment,\n },\n marks: advancedMarks,\n});\n\nexport const advancedSchema = new Schema({\n nodes: addListNodes(tmpSchemaAdvanced.spec.nodes, 'paragraph block*', 'block'),\n marks: advancedMarks,\n});\n","import {MenuItemSpec} from 'prosemirror-menu';\nimport {EditorState} from 'prosemirror-state';\nimport {EditorView} from 'prosemirror-view';\n\n/**\n * One item of the menu.\n *\n * This is the equivalent of `MenuItem` but without all the rendering logic since we use Angular\n * templates for rendering. Also it caches the state of the item everytime the editor state changes,\n * so Angular can query the state as often as needed without performance hit.\n */\nexport class Item {\n /**\n * Whether the item is 'active' (for example, the item for toggling the strong mark might be active when the cursor is in strong text).\n */\n public active = false;\n\n /**\n * Button is shown but disabled, because the item cannot be (un-)applied\n */\n public disabled = false;\n\n /**\n * Whether the item is shown at the moment\n */\n public show = true;\n\n public constructor(public readonly spec: MenuItemSpec) {}\n\n /**\n * Update the item state according to the editor state\n */\n public update(view: EditorView, state: EditorState): void {\n if (this.spec.active) {\n this.active = this.spec.active(state);\n }\n\n if (this.spec.enable) {\n this.disabled = !this.spec.enable(state);\n }\n\n if (this.spec.select) {\n this.show = this.spec.select(state);\n }\n }\n}\n","import {Node, NodeType, Schema} from 'prosemirror-model';\nimport {AllSelection, TextSelection, Transaction} from 'prosemirror-state';\nimport {Item} from './item';\n\ntype Alignment = 'left' | 'right' | 'center' | 'justify';\n\nfunction setTextAlign(tr: Transaction, schema: Schema, alignment: null | Alignment): Transaction {\n const {selection, doc} = tr;\n if (!selection || !doc) {\n return tr;\n }\n const {from, to} = selection;\n const {nodes} = schema;\n\n const tasks: {\n node: Node;\n pos: number;\n nodeType: NodeType;\n }[] = [];\n\n alignment = alignment || null;\n\n const allowedNodeTypes = new Set([\n nodes.paragraph,\n // nodes['blockquote'],\n // nodes['listItem'],\n // nodes['heading'],\n ]);\n\n doc.nodesBetween(from, to, (node, pos) => {\n const nodeType = node.type;\n const align = node.attrs.align || null;\n if (align !== alignment && allowedNodeTypes.has(nodeType)) {\n tasks.push({\n node,\n pos,\n nodeType,\n });\n }\n return true;\n });\n\n if (!tasks.length) {\n return tr;\n }\n\n tasks.forEach(job => {\n const {node, pos, nodeType} = job;\n const newAttrs = {\n ...node.attrs,\n align: alignment ? alignment : null,\n };\n\n tr = tr.setNodeMarkup(pos, nodeType, newAttrs, node.marks);\n });\n\n return tr;\n}\n\nexport class TextAlignItem extends Item {\n public constructor(alignment: Alignment) {\n super({\n active: state => {\n const {selection, doc} = state;\n const {from, to} = selection;\n let keepLooking = true;\n let active = false;\n doc.nodesBetween(from, to, node => {\n if (keepLooking && node.attrs.align === alignment) {\n keepLooking = false;\n active = true;\n }\n return keepLooking;\n });\n\n return active;\n },\n\n enable: state => {\n const {selection} = state;\n return selection instanceof TextSelection || selection instanceof AllSelection;\n },\n\n run: (state, dispatch): boolean => {\n const {schema, selection} = state;\n\n const tr = setTextAlign(state.tr.setSelection(selection), schema, this.active ? null : alignment);\n if (tr.docChanged) {\n dispatch?.(tr);\n return true;\n } else {\n return false;\n }\n },\n });\n }\n}\n","import {Component, inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogModule, MatDialogRef} from '@angular/material/dialog';\nimport {FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators} from '@angular/forms';\nimport {ifValid, NaturalIconDirective} from '@ecodev/natural';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\n\nexport type ColorDialogData = {\n /**\n * Empty string means no color set at all. Anything else must be a valid CSS color in hexa format.\n *\n * Eg:\n *\n * - `\"\"`\n * - `\"#ff4000\"`\n */\n color: string;\n};\n\n@Component({\n templateUrl: './color-dialog.component.html',\n styleUrl: './color-dialog.component.scss',\n standalone: true,\n imports: [\n MatDialogModule,\n FormsModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatIconModule,\n NaturalIconDirective,\n MatFormFieldModule,\n MatInputModule,\n ],\n})\nexport class ColorDialogComponent {\n private dialogRef = inject<MatDialogRef<ColorDialogComponent, ColorDialogData>>(MatDialogRef);\n\n public readonly colors: string[][] = [\n [\n '#000000',\n '#111111',\n '#1c1c1c',\n '#333333',\n '#666666',\n '#808080',\n '#999999',\n '#b2b2b2',\n '#cccccc',\n '#dddddd',\n '#eeeeee',\n '#ffffff',\n ],\n [\n '#ffff00',\n '#ffbf00',\n '#ff8000',\n '#ff4000',\n '#ff0000',\n '#bf0041',\n '#800080',\n '#55308d',\n '#2a6099',\n '#158466',\n '#00a933',\n '#81d41a',\n ],\n [\n '#ffffd7',\n '#fff5ce',\n '#ffdbb6',\n '#ffd8ce',\n '#ffd7d7',\n '#f7d1d5',\n '#e0c2cd',\n '#dedce6',\n '#dee6ef',\n '#dee7e5',\n '#dde8cb',\n '#f6f9d4',\n ],\n [\n '#ffffa6',\n '#ffe994',\n '#ffb66c',\n '#ffaa95',\n '#ffa6a6',\n '#ec9ba4',\n '#bf819e',\n '#b7b3ca',\n '#b4c7dc',\n '#b3cac7',\n '#afd095',\n '#e8f2a1',\n ],\n [\n '#ffff6d',\n '#ffde59',\n '#ff972f',\n '#ff7b59',\n '#ff6d6d',\n '#e16173',\n '#a1467e',\n '#8e86ae',\n '#729fcf',\n '#81aca6',\n '#77bc65',\n '#d4ea6b',\n ],\n [\n '#ffff38',\n '#ffd428',\n '#ff860d',\n '#ff5429',\n '#ff3838',\n '#d62e4e',\n '#8d1d75',\n '#6b5e9b',\n '#5983b0',\n '#50938a',\n '#3faf46',\n '#bbe33d',\n ],\n [\n '#e6e905',\n '#e8a202',\n '#ea7500',\n '#ed4c05',\n '#f10d0c',\n '#a7074b',\n '#780373',\n '#5b277d',\n '#3465a4',\n '#168253',\n '#069a2e',\n '#5eb91e',\n ],\n [\n '#acb20c',\n '#b47804',\n '#b85c00',\n '#be480a',\n '#c9211e',\n '#861141',\n '#650953',\n '#55215b',\n '#355269',\n '#1e6a39',\n '#127622',\n '#468a1a',\n ],\n [\n '#706e0c',\n '#784b04',\n '#7b3d00',\n '#813709',\n '#8d281e',\n '#611729',\n '#4e102d',\n '#481d32',\n '#383d3c',\n '#28471f',\n '#224b12',\n '#395511',\n ],\n [\n '#443205',\n '#472702',\n '#492300',\n '#4b2204',\n '#50200c',\n '#41190d',\n '#3b160e',\n '#3a1a0f',\n '#362413',\n '#302709',\n '#2e2706',\n '#342a06',\n ],\n ];\n\n public readonly colorControl = new FormControl('', {\n validators: Validators.pattern(/^#\\p{Hex_Digit}{6}/u),\n nonNullable: true,\n });\n public readonly form = new FormGroup({\n color: this.colorControl,\n });\n\n public constructor() {\n const data = inject<ColorDialogData>(MAT_DIALOG_DATA);\n\n this.form.setValue(data);\n }\n\n public maybeConfirm(): void {\n ifValid(this.form).subscribe(() => this.confirm());\n }\n\n private confirm(): void {\n this.dialogRef.close(this.form.getRawValue());\n }\n\n public selectColor(color: string): void {\n this.colorControl.setValue(color);\n this.maybeConfirm();\n }\n}\n","<h2 i18n mat-dialog-title>Sélectionner une couleur</h2>\n\n<mat-dialog-content [formGroup]=\"form\">\n <div>\n @for (row of colors; track row) {\n <div>\n @for (color of row; track color) {\n <div class=\"color\" [style]=\"{backgroundColor: color}\" (click)=\"selectColor(color)\"> </div>\n }\n </div>\n }\n </div>\n\n <div>\n <button mat-button (click)=\"selectColor('')\">\n <mat-icon naturalIcon=\"format_color_reset\" />\n <span i18n>Transparent</span></button\n >\n </div>\n\n <mat-form-field>\n <mat-label i18n>Couleur</mat-label>\n <input matInput [formControl]=\"colorControl\" (keydown.enter)=\"maybeConfirm()\" cdkFocusInitial />\n <div\n class=\"sample\"\n matTextSuffix\n [style]=\"{backgroundColor: colorControl.valid ? colorControl.value : ''}\"\n ></div>\n @if (colorControl.hasError('pattern')) {\n <mat-error i18n>Doit être le format hexadecimal. Par exemple: #ff4000 </mat-error>\n }\n </mat-form-field>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close i18n>Annuler</button>\n <button mat-stroked-button (click)=\"maybeConfirm()\" [disabled]=\"!form.valid\"><span i18n>Valider</span></button>\n</mat-dialog-actions>\n","import {EditorState, Transaction} from 'prosemirror-state';\nimport {CellSelection, isInTable, selectionCell, setCellAttr} from 'prosemirror-tables';\nimport {EditorView} from 'prosemirror-view';\nimport {Item} from './item';\nimport {MatDialog} from '@angular/material/dialog';\nimport {ColorDialogComponent, ColorDialogData} from '../../color-dialog/color-dialog.component';\n\nconst setCellBackgroundColor = setCellAttr.bind(null, 'background');\n\nfunction findFirstBackgroundColorInSelection(state: EditorState): string {\n if (!isInTable(state)) {\n return '';\n }\n\n // For single cell selection\n const $cell = selectionCell(state);\n let foundColor: string = $cell?.nodeAfter?.attrs.background ?? '';\n if (foundColor) {\n return foundColor;\n }\n\n // For multiple cells selection\n let keepLooking = true;\n if (state.selection instanceof CellSelection) {\n state.selection.forEachCell(node => {\n const color = node.attrs.background;\n if (keepLooking && color) {\n keepLooking = false;\n foundColor = color;\n }\n });\n }\n\n return foundColor;\n}\n\nexport class CellBackgroundColorItem extends Item {\n public constructor(dialog: MatDialog) {\n super({\n enable(state: EditorState): boolean {\n // Pretend to set a unique color that is not already set, to test if we can any color at all\n const cmd = setCellBackgroundColor('#000001');\n\n return cmd(state);\n },\n run(state: EditorState, dispatch: (p: Transaction) => void, view: EditorView): void {\n dialog\n .open<ColorDialogComponent, ColorDialogData, ColorDialogData>(ColorDialogComponent, {\n data: {\n color: findFirstBackgroundColorInSelection(state),\n },\n })\n .afterClosed()\n .subscribe(result => {\n if (dispatch && result) {\n const cmd = setCellBackgroundColor(result.color);\n cmd(state, dispatch);\n }\n\n view.focus();\n });\n },\n });\n }\n}\n","import {Component, inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogModule, MatDialogRef} from '@angular/material/dialog';\nimport {FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators} from '@angular/forms';\nimport {ifValid} from '@ecodev/natural';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\nexport type LinkDialogData = {\n href: string;\n title?: string;\n};\n\n@Component({\n templateUrl: './link-dialog.component.html',\n styleUrl: './link-dialog.component.scss',\n standalone: true,\n imports: [MatDialogModule, FormsModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatButtonModule],\n})\nexport class LinkDialogComponent {\n private dialogRef = inject<MatDialogRef<LinkDialogComponent, LinkDialogData>>(MatDialogRef);\n\n public readonly hrefControl = new FormControl('', {validators: Validators.required, nonNullable: true});\n public readonly titleControl = new FormControl('', {nonNullable: true});\n public readonly form = new FormGroup({\n href: this.hrefControl,\n title: this.titleControl,\n });\n\n public constructor() {\n const data = inject<LinkDialogData>(MAT_DIALOG_DATA);\n\n this.form.setValue({title: '', ...data});\n }\n\n public maybeConfirm(): void {\n ifValid(this.form).subscribe(() => this.confirm());\n }\n\n private confirm(): void {\n this.dialogRef.close(this.form.getRawValue());\n }\n}\n","<h2 i18n mat-dialog-title>Insérer un lien</h2>\n\n<mat-dialog-content [formGroup]=\"form\">\n <mat-form-field>\n <mat-label i18n>URL</mat-label>\n <input matInput [formControl]=\"hrefControl\" (keydown.enter)=\"maybeConfirm()\" />\n @if (hrefControl.hasError('required')) {\n <mat-error i18n>Ce champ est requis</mat-error>\n }\n </mat-form-field>\n <mat-form-field>\n <mat-label i18n>Titre</mat-label>\n <input matInput [formControl]=\"titleControl\" (keydown.enter)=\"maybeConfirm()\" />\n </mat-form-field>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close i18n>Annuler</button>\n <button mat-stroked-button (click)=\"maybeConfirm()\" [disabled]=\"!form.valid\"><span i18n>Valider</span></button>\n</mat-dialog-actions>\n","import {Command, EditorState} from 'prosemirror-state';\nimport {MarkType} from 'prosemirror-model';\nimport {MenuItem, MenuItemSpec} from 'prosemirror-menu';\nimport {Item} from './item';\nimport {toggleMark} from 'prosemirror-commands';\n\nexport function markActive(state: EditorState, type: MarkType): boolean {\n const {from, $from, to, empty} = state.selection;\n if (empty) {\n return !!type.isInSet(state.storedMarks || $from.marks());\n } else {\n return state.doc.rangeHasMark(from, to, type);\n }\n}\n\n/**\n * Convert built-in `MenuItem` into our Angular specific `Item`\n */\nexport function menuItemToItem(item: MenuItem): Item {\n return new Item(item.spec);\n}\n\n/**\n * From a `Command`, creates a new `Item` that will have an automatic `enable` spec\n */\nexport function cmdToItem(cmd: Command, options: Partial<MenuItemSpec> = {}): Item {\n const passedOptions: MenuItemSpec = {\n run: cmd,\n ...options,\n };\n\n if (!options.enable && !options.select) {\n passedOptions.enable = state => cmd(state);\n }\n\n return new Item(passedOptions);\n}\n\n/**\n * From a `MarkType`, creates a new `Item` that will have an automatic `active` and `enable` spec\n */\nexport function markTypeToItem(markType: MarkType): Item {\n return cmdToItem(toggleMark(markType), {\n active(state: EditorState): boolean {\n return markActive(state, markType);\n },\n });\n}\n\nexport function selectionContainsNodeType(state: EditorState, allowedNodeTypes: string[]): boolean {\n const {selection, doc} = state;\n const {from, to} = selection;\n let keepLooking = true;\n let found = false;\n\n doc.nodesBetween(from, to, node => {\n if (keepLooking && allowedNodeTypes.includes(node.type.name)) {\n keepLooking = false;\n found = true;\n }\n\n return keepLooking;\n });\n\n return found;\n}\n","import {Item} from './item';\nimport {MarkType} from 'prosemirror-model';\nimport {MatDialog} from '@angular/material/dialog';\nimport {EditorState, Transaction} from 'prosemirror-state';\nimport {EditorView} from 'prosemirror-view';\nimport {toggleMark} from 'prosemirror-commands';\nimport {LinkDialogComponent, LinkDialogData} from '../../link-dialog/link-dialog.component';\nimport {markActive} from './utils';\n\nexport class LinkItem extends Item {\n public constructor(markType: MarkType, dialog: MatDialog) {\n super({\n active(state: EditorState): boolean {\n return markActive(state, markType);\n },\n enable(state: EditorState): boolean {\n return !state.selection.empty;\n },\n run(state: EditorState, dispatch: (p: Transaction) => void, view: EditorView): void {\n if (markActive(state, markType)) {\n toggleMark(markType)(state, dispatch);\n return;\n }\n\n dialog\n .open<LinkDialogComponent, LinkDialogData, LinkDialogData>(LinkDialogComponent, {\n data: {\n href: '',\n title: '',\n },\n })\n .afterClosed()\n .subscribe(result => {\n if (result) {\n if (!result.title) {\n delete result.title;\n }\n\n toggleMark(markType, result)(view.state, view.dispatch);\n }\n\n view.focus();\n });\n },\n });\n }\n}\n","import {Item} from './item';\nimport {EditorState} from 'prosemirror-state';\nimport {NodeType} from 'prosemirror-model';\n\nfunction canInsert(state: EditorState, nodeType: NodeType): boolean {\n const $from = state.selection.$from;\n for (let d = $from.depth; d >= 0; d--) {\n const index = $from.index(d);\n if ($from.node(d).canReplaceWith(index, index, nodeType)) {\n return true;\n }\n }\n\n return false;\n}\n\nexport class HorizontalRuleItem extends Item {\n public constructor(hr: NodeType) {\n super({\n enable(state): boolean {\n return canInsert(state, hr);\n },\n run(state, dispatch): void {\n dispatch(state.tr.replaceSelectionWith(hr.create()));\n },\n });\n }\n}\n","import {NodeType} from 'prosemirror-model';\nimport {Item} from './item';\nimport {wrapInList} from 'prosemirror-schema-list';\nimport {cmdToItem} from './utils';\n\nexport function wrapListItem(nodeType: NodeType): Item {\n return cmdToItem(wrapInList(nodeType));\n}\n","import {Component, inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogModule, MatDialogRef} from '@angular/material/dialog';\nimport {FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators} from '@angular/forms';\nimport {ifValid} from '@ecodev/natural';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\nexport type ClassDialogData = {\n /**\n * CSS class names\n *\n * Eg:\n *\n * - `\"\"`\n * - `\"my-class my-other-class\"`\n */\n class: string;\n};\n\n@Component({\n templateUrl: './class-dialog.component.html',\n styleUrl: './class-dialog.component.scss',\n standalone: true,\n imports: [MatDialogModule, FormsModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatButtonModule],\n})\nexport class ClassDialogComponent {\n private dialogRef = inject<MatDialogRef<ClassDialogComponent, ClassDialogData>>(MatDialogRef);\n\n public readonly classControl = new FormControl('', {\n validators: Validators.pattern(/(^\\s*(-?[_a-zA-Z]+[_a-zA-Z0-9-]*\\s*)+)/),\n nonNullable: true,\n });\n public readonly form = new FormGroup({\n class: this.classControl,\n });\n\n public constructor() {\n const data = inject<ClassDialogData>(MAT_DIALOG_DATA);\n\n this.form.setValue(data);\n }\n\n public maybeConfirm(): void {\n ifValid(this.form).subscribe(() => this.confirm());\n }\n\n private confirm(): void {\n this.dialogRef.close(this.form.getRawValue());\n }\n}\n","<h2 i18n mat-dialog-title>Saisir les classes CSS</h2>\n\n<mat-dialog-content [formGroup]=\"form\">\n <mat-form-field>\n <mat-label i18n>Classes CSS</mat-label>\n <input matInput [formControl]=\"classControl\" (keydown.enter)=\"maybeConfirm()\" cdkFocusInitial />\n @if (classControl.hasError('pattern')) {\n <mat-error i18n>Doit être un ou plusieurs nom de classe CSS</mat-error>\n }\n </mat-form-field>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close i18n>Annuler</button>\n <button mat-stroked-button (click)=\"maybeConfirm()\" [disabled]=\"!form.valid\"><span i18n>Valider</span></button>\n</mat-dialog-actions>\n","import {Node, NodeType} from 'prosemirror-model';\nimport {EditorState, Transaction} from 'prosemirror-state';\nimport {Item} from './item';\nimport {selectionContainsNodeType} from './utils';\nimport {MatDialog} from '@angular/material/dialog';\nimport {ClassDialogComponent, ClassDialogData} from '../../class-dialog/class-dialog.component';\n\nfunction setClass(tr: Transaction, classValue: string, allowedNodeTypes: string[]): Transaction {\n const {selection, doc} = tr;\n if (!selection || !doc) {\n return tr;\n }\n const {from, to} = selection;\n\n const tasks: {\n node: Node;\n pos: number;\n nodeType: NodeType;\n }[] = [];\n\n doc.nodesBetween(from, to, (node, pos) => {\n const nodeType = node.type;\n const currentClass = node.attrs.class || null;\n if (currentClass !== classValue && allowedNodeTypes.includes(nodeType.name)) {\n tasks.push({\n node,\n pos,\n nodeType,\n });\n }\n return true;\n });\n\n if (!tasks.length) {\n return tr;\n }\n\n tasks.forEach(job => {\n const {node, pos, nodeType} = job;\n const newAttrs = {\n ...node.attrs,\n class: classValue ? classValue : null,\n };\n\n tr = tr.setNodeMarkup(pos, nodeType, newAttrs, node.marks);\n });\n\n return tr;\n}\n\n/**\n * Returns the first `class` attribute that is non-empty in the selection.\n * If not found, return empty string.\n */\nfunction findFirstClassInSelection(state: EditorState, allowedNodeTypes: string[]): string {\n const {selection, doc} = state;\n const {from, to} = selection;\n let keepLooking = true;\n let foundClass = '';\n\n doc.nodesBetween(from, to, node => {\n if (keepLooking && allowedNodeTypes.includes(node.type.name) && node.attrs.class) {\n keepLooking = false;\n foundClass = node.attrs.class;\n }\n\n return keepLooking;\n });\n\n return foundClass;\n}\n\nexport class ClassItem extends Item {\n public constructor(dialog: MatDialog, nodeTypes: string[]) {\n super({\n active: state => {\n return !!findFirstClassInSelection(state, nodeTypes);\n },\n\n enable: state => {\n return selectionContainsNodeType(state, nodeTypes);\n },\n\n run: (state, dispatch, view): void => {\n dialog\n .open<ClassDialogComponent, ClassDialogData, ClassDialogData>(ClassDialogComponent, {\n data: {\n class: findFirstClassInSelection(state, nodeTypes),\n },\n })\n .afterClosed()\n .subscribe(result => {\n if (dispatch && result) {\n const {selection} = state;\n\n const tr = setClass(state.tr.setSelection(selection), result.class, nodeTypes);\n if (tr.docChanged) {\n dispatch?.(tr);\n }\n }\n\n view.focus();\n });\n },\n });\n }\n}\n","import {Component, inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogModule, MatDialogRef} from '@angular/material/dialog';\nimport {FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators} from '@angular/forms';\nimport {ifValid} from '@ecodev/natural';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\nexport type IdDialogData = {\n /**\n * ID name\n *\n * Eg:\n *\n * - `\"\"`\n * - `\"my-id\"`\n */\n id: string;\n};\n\n@Component({\n templateUrl: './id-dialog.component.html',\n styleUrl: './id-dialog.component.scss',\n standalone: true,\n imports: [MatDialogModule, FormsModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatButtonModule],\n})\nexport class IdDialogComponent {\n private dialogRef = inject<MatDialogRef<IdDialogComponent, IdDialogData>>(MatDialogRef);\n\n public readonly idControl = new FormControl('', {\n validators: Validators.pattern(/(^(-?[_a-zA-Z]+[_a-zA-Z0-9-]*)+)/),\n nonNullable: true,\n });\n public readonly form = new FormGroup({\n id: this.idControl,\n });\n\n public constructor() {\n const data = inject<IdDialogData>(MAT_DIALOG_DATA);\n\n this.form.setValue(data);\n }\n\n public maybeConfirm(): void {\n ifValid(this.form).subscribe(() => this.confirm());\n }\n\n private confirm(): void {\n this.dialogRef.close(this.form.getRawValue());\n }\n}\n","<h2 i18n mat-dialog-title>Saisir le ID</h2>\n\n<mat-dialog-content [formGroup]=\"form\">\n <mat-form-field>\n <mat-label i18n>ID</mat-label>\n <input matInput [formControl]=\"idControl\" (keydown.enter)=\"maybeConfirm()\" cdkFocusInitial />\n @if (idControl.hasError('pattern')) {\n <mat-error i18n>Doit être un ID valide</mat-error>\n }\n </mat-form-field>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close i18n>Annuler</button>\n <button mat-stroked-button (click)=\"maybeConfirm()\" [disabled]=\"!form.valid\"><span i18n>Valider</span></button>\n</mat-dialog-actions>\n","import {Node, NodeType} from 'prosemirror-model';\nimport {EditorState, Transaction} from 'prosemirror-state';\nimport {Item} from './item';\nimport {selectionContainsNodeType} from './utils';\nimport {MatDialog} from '@angular/material/dialog';\nimport {IdDialogComponent, IdDialogData} from '../../id-dialog/id-dialog.component';\n\nfunction setId(tr: Transaction, idValue: string, allowedNodeTypes: string[]): Transaction {\n const {selection, doc} = tr;\n if (!selection || !doc) {\n return tr;\n }\n const {from, to} = selection;\n\n const tasks: {\n node: Node;\n pos: number;\n nodeType: NodeType;\n }[] = [];\n\n doc.nodesBetween(from, to, (node, pos) => {\n const nodeType = node.type;\n const currentId = node.attrs.id || null;\n if (currentId !== idValue && allowedNodeTypes.includes(nodeType.name)) {\n tasks.push({\n node,\n pos,\n nodeType,\n });\n }\n return true;\n });\n\n if (!tasks.length) {\n return tr;\n }\n\n tasks.forEach(job => {\n const {node, pos, nodeType} = job;\n const newAttrs = {\n ...node.attrs,\n id: idValue ? idValue : null,\n };\n\n tr = tr.setNodeMarkup(pos, nodeType, newAttrs, node.marks);\n });\n\n return tr;\n}\n\n/**\n * Returns the first `id` attribute that is non-empty in the selection.\n * If not found, return empty string.\n */\nfunction findFirstIdInSelection(state: EditorState, allowedNodeTypes: string[]): string {\n const {selection, doc} = state;\n const {from, to} = selection;\n let keepLooking = true;\n let foundId = '';\n\n doc.nodesBetween(from, to, node => {\n if (keepLooking && allowedNodeTypes.includes(node.type.name) && node.attrs.id) {\n keepLooking = false;\n foundId = node.attrs.id;\n }\n\n return keepLooking;\n });\n\n return foundId;\n}\n\nexport class IdItem extends Item {\n public constructor(dialog: MatDialog, nodeTypes: string[]) {\n super({\n active: state => {\n return !!findFirstIdInSelection(state, nodeTypes);\n },\n\n enable: state => {\n return selectionContainsNodeType(state, nodeTypes);\n },\n\n run: (state, dispatch, view): void => {\n dialog\n .open<IdDialogComponent, IdDialogData, IdDialogData>(IdDialogComponent, {\n data: {\n id: findFirstIdInSelection(state, nodeTypes),\n },\n })\n .afterClosed()\n .subscribe(result => {\n if (dispatch && result) {\n const {selection} = state;\n\n const tr = setId(state.tr.setSelection(selection), result.id, nodeTypes);\n if (tr.docChanged) {\n dispatch?.(tr);\n }\n }\n\n view.focus();\n });\n },\n });\n }\n}\n","import {EditorState, TextSelection, Transaction} from 'prosemirror-state';\nimport {Fragment, Node as ProsemirrorNode, NodeType} from 'prosemirror-model';\nimport {tableNodeTypes} from 'prosemirror-tables';\nimport {Item} from './item';\n\nfunction createCell(\n cellType: NodeType,\n cellContent?: Fragment | ProsemirrorNode | ProsemirrorNode[],\n): ProsemirrorNode | null | undefined {\n return cellContent ? cellType.createChecked(null, cellContent) : cellType.createAndFill();\n}\n\nfunction createTable(\n state: EditorState,\n rowsCount: number,\n colsCount: number,\n withHeaderRow: boolean,\n cellContent?: Fragment | ProsemirrorNode | ProsemirrorNode[],\n): ProsemirrorNode {\n const types = tableNodeTypes(state.schema);\n const headerCells = [];\n const cells = [];\n\n for (let index = 0; index < colsCount; index += 1) {\n const cell = createCell(types.cell, cellContent);\n\n if (cell) {\n cells.push(cell);\n }\n\n if (withHeaderRow) {\n const headerCell = createCell(types.header_cell, cellContent);\n\n if (headerCell) {\n headerCells.push(headerCell);\n }\n }\n }\n\n const rows = [];\n\n for (let index = 0; index < rowsCount; index += 1) {\n rows.push(types.row.createChecked(null, withHeaderRow && index === 0 ? headerCells : cells));\n }\n\n return types.table.createChecked(null, rows);\n}\n\nfunction addTable(\n state: EditorState,\n dispatch?: (tr: Transaction) => void,\n {\n rowsCount = 3,\n colsCount = 3,\n withHeaderRow = true,\n cellContent,\n }: {\n rowsCount?: number;\n colsCount?: number;\n withHeaderRow?: boolean;\n cellContent?: Fragment | ProsemirrorNode | ProsemirrorNode[];\n } = {},\n): void {\n const offset = state.tr.selection.anchor + 1;\n\n const nodes = createTable(state, rowsCount, colsCount, withHeaderRow, cellContent);\n const tr = state.tr.replaceSelectionWith(nodes).scrollIntoView();\n const resolvedPos = tr.doc.resolve(offset);\n\n // move cursor into table\n tr.setSelection(TextSelection.near(resolvedPos));\n\n dispatch?.(tr);\n}\n\nexport class AddTableItem extends Item {\n public constructor() {\n super({run: (editor, tr) => addTable(editor, tr)});\n }\n}\n","import {EditorState, Transaction} from 'prosemirror-state';\nimport {EditorView} from 'prosemirror-view';\nimport {Item} from './item';\nimport {MatDialog} from '@angular/material/dialog';\nimport {ColorDialogComponent, ColorDialogData} from '../../color-dialog/color-dialog.component';\nimport {MarkType} from 'prosemirror-model';\nimport {markActive} from './utils';\nimport {toggleMark} from 'prosemirror-commands';\nimport {rgbToHex} from '@ecodev/natural';\n\nfunction findFirstColorInSelection(state: EditorState, markType: MarkType): string {\n const {selection, doc} = state;\n const {from, to} = selection;\n let foundColor = '';\n\n doc.nodesBetween(from, to, node => {\n if (foundColor) {\n return false;\n }\n\n const mark = node.marks.find(mark => mark.type === markType);\n if (mark?.attrs.color) {\n foundColor = mark.attrs.color;\n }\n\n return !foundColor;\n });\n\n return rgbToHex(foundColor);\n}\n\nexport class TextColorItem extends Item {\n public constructor(markType: MarkType, dialog: MatDialog) {\n super({\n active(state: EditorState): boolean {\n return markActive(state, markType);\n },\n enable(state: EditorState): boolean {\n return !state.selection.empty;\n },\n run(state: EditorState, dispatch: (p: Transaction) => void, view: EditorView): void {\n dialog\n .open<ColorDialogComponent, ColorDialogData, ColorDialogData>(ColorDialogComponent, {\n data: {\n color: findFirstColorInSelection(state, markType),\n },\n })\n .afterClosed()\n .subscribe(result => {\n if (result) {\n // Remove existing color before applying new one\n if (markActive(state, markType)) {\n toggleMark(markType, {}, {})(view.state, view.dispatch);\n }\n\n // Apply new color, unless we selected \"transparent\"\n if (result.color) {\n toggleMark(markType, result, {})(view.state, view.dispatch);\n }\n }\n\n view.focus();\n });\n },\n });\n }\n}\n","import {\n blockTypeItem,\n joinUpItem,\n liftItem,\n redoItem,\n selectParentNodeItem,\n undoItem,\n wrapItem,\n} from 'prosemirror-menu';\nimport {MarkType, NodeType, Schema} from 'prosemirror-model';\nimport {MatDialog} from '@angular/material/dialog';\nimport {\n addColumnAfter,\n addColumnBefore,\n addRowAfter,\n addRowBefore,\n deleteColumn,\n deleteRow,\n deleteTable,\n mergeCells,\n splitCell,\n toggleHeaderCell,\n toggleHeaderColumn,\n toggleHeaderRow,\n} from 'prosemirror-tables';\nimport {Item} from './items/item';\nimport {paragraphWithAlignment} from './schema/paragraph-with-alignment';\nimport {TextAlignItem} from './items/text-align-item';\nimport {CellBackgroundColorItem} from './items/cell-background-color-item';\nimport {LinkItem} from './items/link-item';\nimport {HorizontalRuleItem} from './items/horizontal-rule-item';\nimport {cmdToItem, markTypeToItem, menuItemToItem} from './items/utils';\nimport {wrapListItem} from './items/wrap-list-item';\nimport {ClassItem} from './items/class-item';\nimport {IdItem} from './items/id-item';\nimport {AddTableItem} from './items/table-item';\nimport {TextColorItem} from './items/text-color-item';\n\nexport type Key =\n | 'toggleStrong'\n | 'toggleEm'\n | 'toggleCode'\n | 'toggleLink'\n | 'textColor'\n | 'wrapBulletList'\n | 'wrapOrderedList'\n | 'wrapBlockQuote'\n | 'makeParagraph'\n | 'makeCodeBlock'\n | 'makeHead1'\n | 'makeHead2'\n | 'makeHead3'\n | 'makeHead4'\n | 'makeHead5'\n | 'makeHead6'\n | 'alignLeft'\n | 'alignRight'\n | 'alignCenter'\n | 'alignJustify'\n | 'insertHorizontalRule'\n | 'joinUp'\n | 'lift'\n | 'selectParentNode'\n | 'undo'\n | 'redo'\n | 'insertTable'\n | 'addColumnBefore'\n | 'addColumnAfter'\n | 'deleteColumn'\n | 'addRowBefore'\n | 'addRowAfter'\n | 'deleteRow'\n | 'deleteTable'\n | 'mergeCells'\n | 'splitCell'\n | 'toggleHeaderColumn'\n | 'toggleHeaderRow'\n | 'toggleHeaderCell'\n | 'cellBackgroundColor'\n | 'tableClass'\n | 'tableId'\n | 'blockClass'\n | 'blockId';\n\nexport type MenuItems = Partial<Record<Key, Item>>;\n\n/**\n * Given a schema, look for default mark and node types in it and\n * return an object with relevant menu items relating to those marks:\n */\nexport function buildMenuItems(schema: Schema, dialog: MatDialog): MenuItems {\n const r: MenuItems = {\n joinUp: menuItemToItem(joinUpItem),\n lift: menuItemToItem(liftItem),\n selectParentNode: menuItemToItem(selectParentNodeItem),\n undo: menuItemToItem(undoItem),\n redo: menuItemToItem(redoItem),\n };\n\n let type: MarkType | NodeType | undefined;\n type = schema.marks.strong;\n if (type) {\n r.toggleStrong = markTypeToItem(type);\n }\n\n type = schema.marks.em;\n if (type) {\n r.toggleEm = markTypeToItem(type);\n }\n\n type = schema.marks.code;\n if (type) {\n r.toggleCode = markTypeToItem(type);\n }\n\n type = schema.marks.link;\n if (type) {\n r.toggleLink = new LinkItem(type, dialog);\n }\n\n type = schema.marks.textColor;\n if (type) {\n r.textColor = new TextColorItem(type, dialog);\n }\n\n type = schema.nodes.bullet_list;\n if (type) {\n r.wrapBulletList = wrapListItem(type);\n }\n\n type = schema.nodes.ordered_list;\n if (type) {\n r.wrapOrderedList = wrapListItem(type);\n }\n\n type = schema.nodes.blockquote;\n if (type) {\n r.wrapBlockQuote = menuItemToItem(wrapItem(type, {}));\n }\n\n type = schema.nodes.paragraph;\n if (type) {\n r.makeParagraph = menuItemToItem(blockTypeItem(type, {}));\n\n if (type.spec === paragraphWithAlignment) {\n r.alignLeft = new TextAlignItem('left');\n r.alignRight = new TextAlignItem('right');\n r.alignCenter = new TextAlignItem('center');\n r.alignJustify = new TextAlignItem('justify');\n }\n }\n\n type = schema.nodes.code_block;\n if (type) {\n r.makeCodeBlock = menuItemToItem(blockTypeItem(type, {}));\n }\n\n type = schema.nodes.heading;\n if (type) {\n r.makeHead1 = menuItemToItem(blockTypeItem(type, {attrs: {level: 1}}));\n r.makeHead2 = menuItemToItem(blockTypeItem(type, {attrs: {level: 2}}));\n r.makeHead3 = menuItemToItem(blockTypeItem(type, {attrs: {level: 3}}));\n r.makeHead4 = menuItemToItem(blockTypeItem(type, {attrs: {level: 4}}));\n r.makeHead5 = menuItemToItem(blockTypeItem(type, {attrs: {level: 5}}));\n r.makeHead6 = menuItemToItem(blockTypeItem(type, {attrs: {level: 6}}));\n }\n if (schema.nodes.paragraph?.spec === paragraphWithAlignment) {\n r.blockId = new IdItem(dialog, ['heading', 'paragraph']);\n r.blockClass = new ClassItem(dialog, ['heading', 'paragraph']);\n }\n\n type = schema.nodes.horizontal_rule;\n if (type) {\n r.insertHorizontalRule = new HorizontalRuleItem(type);\n }\n\n type = schema.nodes.table;\n if (type) {\n r.insertTable = new AddTableItem();\n r.addColumnBefore = cmdToItem(addColumnBefore);\n r.addColumnAfter = cmdToItem(addColumnAfter);\n r.deleteColumn = cmdToItem(deleteColumn);\n r.addRowBefore = cmdToItem(addRowBefore);\n r.addRowAfter = cmdToItem(addRowAfter);\n r.deleteRow = cmdToItem(deleteRow);\n r.deleteTable = cmdToItem(deleteTable);\n r.mergeCells = cmdToItem(mergeCells);\n r.splitCell = cmdToItem(splitCell);\n r.toggleHeaderColumn = cmdToItem(toggleHeaderColumn);\n r.toggleHeaderRow = cmdToItem(toggleHeaderRow);\n r.toggleHeaderCell = cmdToItem(toggleHeaderCell);\n r.cellBackgroundColor = new CellBackgroundColorItem(dialog);\n r.tableClass = new ClassItem(dialog, ['table']);\n r.tableId = new IdItem(dialog, ['table']);\n }\n\n return r;\n}\n","import {\n ellipsis,\n emDash,\n InputRule,\n inputRules,\n textblockTypeInputRule,\n wrappingInputRule,\n} from 'prosemirror-inputrules';\nimport {NodeType, Schema} from 'prosemirror-model';\nimport {Plugin} from 'prosemirror-state';\n\n/**\n * Given a blockquote node type, returns an input rule that turns `\"> \"`\n * at the start of a textblock into a blockquote.\n */\nfunction blockQuoteRule(nodeType: NodeType): InputRule {\n return wrappingInputRule(/^\\s*>\\s$/, nodeType);\n}\n\n/**\n * Given a list node type, returns an input rule that turns a number\n * followed by a dot at the start of a textblock into an ordered list.\n */\nfunction orderedListRule(nodeType: NodeType): InputRule {\n return wrappingInputRule(\n /^(\\d+)\\.\\s$/,\n nodeType,\n match => ({order: +match[1]}),\n (match, node) => node.childCount + node.attrs.order === +match[1],\n );\n}\n\n/**\n * Given a list node type, returns an input rule that turns a bullet\n * (dash, plush, or asterisk) at the start of a textblock into a\n * bullet list.\n */\nfunction bulletListRule(nodeType: NodeType): InputRule {\n return wrappingInputRule(/^\\s*([-+*])\\s$/, nodeType);\n}\n\n/**\n * Given a code block node type, returns an input rule that turns a\n * textblock starting with three backticks into a code block.\n */\nfunction codeBlockRule(nodeType: NodeType): InputRule {\n return textblockTypeInputRule(/^```$/, nodeType);\n}\n\n/**\n * Given a node type and a maximum level, creates an input rule that\n * turns up to that number of `#` characters followed by a space at\n * the start of a textblock into a heading whose level corresponds to\n * the number of `#` signs.\n */\nfunction headingRule(nodeType: NodeType, maxLevel: number): InputRule {\n return textblockTypeInputRule(new RegExp('^(#{1,' + maxLevel + '})\\\\s$'), nodeType, match => ({\n level: match[1].length,\n }));\n}\n\n/**\n * A set of input rules for creating the basic block quotes, lists,\n * code blocks, and heading.\n */\nexport function buildInputRules(schema: Schema): Plugin {\n const rules = [ellipsis, emDash];\n\n let type = schema.nodes.blockquote;\n if (type) {\n rules.push(blockQuoteRule(type));\n }\n\n type = schema.nodes.ordered_list;\n if (type) {\n rules.push(orderedListRule(type));\n }\n\n type = schema.nodes.bullet_list;\n if (type) {\n rules.push(bulletListRule(type));\n }\n\n type = schema.nodes.code_block;\n if (type) {\n rules.push(codeBlockRule(type));\n }\n\n type = schema.nodes.heading;\n if (type) {\n rules.push(headingRule(type, 6));\n }\n\n return inputRules({rules});\n}\n","import {\n chainCommands,\n exitCode,\n joinDown,\n joinUp,\n lift,\n selectParentNode,\n setBlockType,\n toggleMark,\n wrapIn,\n} from 'prosemirror-commands';\nimport {liftListItem, sinkListItem, splitListItem, wrapInList} from 'prosemirror-schema-list';\nimport {redo, undo} from 'prosemirror-history';\nimport {undoInputRule} from 'prosemirror-inputrules';\nimport {MarkType, NodeType, Schema} from 'prosemirror-model';\nimport {Command} from 'prosemirror-state';\n\ntype Keymap = Record<string, Command>;\n\n/**\n * Inspect the given schema looking for marks and nodes from the\n * basic schema, and if found, add key bindings related to them.\n * This will add:\n *\n * * **Mod-b** for toggling [strong](#schema-basic.StrongMark)\n * * **Mod-i** for toggling [emphasis](#schema-basic.EmMark)\n * * **Mod-`** for toggling [code font](#schema-basic.CodeMark)\n * * **Ctrl-Shift-0** for making the current textblock a paragraph\n * * **Ctrl-Shift-1** to **Ctrl-Shift-Digit6** for making the current\n * textblock a heading of the corresponding level\n * * **Ctrl-Shift-Backslash** to make the current textblock a code block\n * * **Ctrl-Shift-8** to wrap the selection in an ordered list\n * * **Ctrl-Shift-9** to wrap the selection in a bullet list\n * * **Ctrl->** to wrap the selection in a block quote\n * * **Enter** to split a non-empty textblock in a list item while at\n * the same time splitting the list item\n * * **Mod-Enter** to insert a hard break\n * * **Mod-_** to insert a horizontal rule\n * * **Backspace** to undo an input rule\n * * **Alt-ArrowUp** to `joinUp`\n * * **Alt-ArrowDown** to `joinDown`\n * * **Mod-BracketLeft** to `lift`\n * * **Escape** to `selectParentNode`\n *\n * You can suppress or map these bindings by passing a `mapKeys`\n * argument, which maps key names (say `\"Mod-B\"` to either `false`, to\n * remove the binding, or a new key name string.\n */\nexport function buildKeymap(schema: Schema, isMac: boolean): Keymap {\n const keys: Keymap = {};\n\n keys['Mod-z'] = undo;\n keys['Shift-Mod-z'] = redo;\n keys.Backspace = undoInputRule;\n if (!isMac) {\n keys['Mod-y'] = redo;\n }\n\n keys['Alt-ArrowUp'] = joinUp;\n keys['Alt-ArrowDown'] = joinDown;\n keys['Mod-BracketLeft'] = lift;\n keys.Escape = selectParentNode;\n\n let type: MarkType | NodeType = schema.marks.strong;\n if (type) {\n keys['Mod-b'] = toggleMark(type);\n keys['Mod-B'] = toggleMark(type);\n }\n\n type = schema.marks.em;\n if (type) {\n keys['Mod-i'] = toggleMark(type);\n keys['Mod-I'] = toggleMark(type);\n }\n\n type = schema.marks.code;\n if (type) {\n keys['Mod-`'] = toggleMark(type);\n }\n\n type = schema.nodes.bullet_list;\n if (type) {\n keys['Shift-Ctrl-8'] = wrapInList(type);\n }\n\n type = schema.nodes.ordered_list;\n if (type) {\n keys['Shift-Ctrl-9'] = wrapInList(type);\n }\n\n type = schema.nodes.blockquote;\n if (type) {\n keys['Ctrl->'] = wrapIn(type);\n }\n\n type = schema.nodes.hard_break;\n if (type) {\n const br = type;\n const cmd = chainCommands(exitCode, (state, dispatch) => {\n dispatch?.(state.tr.replaceSelectionWith(br.create()).scrollIntoView());\n return true;\n });\n keys['Mod-Enter'] = cmd;\n keys['Shift-Enter'] = cmd;\n if (isMac) {\n keys['Ctrl-Enter'] = cmd;\n }\n }\n\n type = schema.nodes.list_item;\n if (type) {\n keys.Enter = splitListItem(type);\n keys['Mod-['] = liftListItem(type);\n keys['Mod-]'] = sinkListItem(type);\n }\n\n type = schema.nodes.paragraph;\n if (type) {\n keys['Shift-Ctrl-0'] = setBlockType(type);\n }\n\n type = schema.nodes.code_block;\n if (type) {\n keys['Shift-Ctrl-\\\\'] = setBlockType(type);\n }\n\n type = schema.nodes.heading;\n if (type) {\n for (let i = 1; i <= 6; i++) {\n keys['Shift-Ctrl-' + i] = setBlockType(type, {level: i});\n }\n }\n\n type = schema.nodes.horizontal_rule;\n if (type) {\n const hr = type;\n keys['Mod-_'] = (state, dispatch) => {\n dispatch?.(state.tr.replaceSelectionWith(hr.create()).scrollIntoView());\n return true;\n };\n }\n\n return keys;\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n inject,\n input,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport {ControlValueAccessor, NgControl} from '@angular/forms';\nimport {EditorView} from 'prosemirror-view';\nimport {EditorState, Plugin, Transaction} from 'prosemirror-state';\nimport {DOMParser, DOMSerializer, Schema} from 'prosemirror-model';\nimport {DOCUMENT} from '@angular/common';\nimport {MatDialog} from '@angular/material/dialog';\nimport {goToNextCell, tableEditing} from 'prosemirror-tables';\nimport {keymap} from 'prosemirror-keymap';\nimport {ImagePlugin, ImageUploader} from '../utils/image';\nimport {advancedSchema, basicSchema} from '../utils/schema/schema';\nimport {buildMenuItems, Key, MenuItems} from '../utils/menu';\nimport {history} from 'prosemirror-history';\nimport {baseKeymap} from 'prosemirror-commands';\nimport {dropCursor} from 'prosemirror-dropcursor';\nimport {gapCursor} from 'prosemirror-gapcursor';\nimport {buildInputRules} from '../utils/inputrules';\nimport {buildKeymap} from '../utils/keymap';\nimport {NaturalFileDropDirective} from '@ecodev/natural';\nimport {MatDividerModule} from '@angular/material/divider';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {MatButtonToggleModule} from '@angular/material/button-toggle';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {MatButtonModule} from '@angular/material/button';\n\n/**\n * Prosemirror component\n *\n * Usage :\n *\n * ```html\n * <natural-editor [(ngModel)]=\"htmlString\" />\n * ```\n */\n// @dynamic\n@Component({\n selector: 'natural-editor',\n templateUrl: './editor.component.html',\n styleUrl: './editor.component.scss',\n providers: [ImagePlugin],\n standalone: true,\n imports: [\n MatButtonModule,\n MatTooltipModule,\n MatIconModule,\n MatButtonToggleModule,\n MatMenuModule,\n MatDividerModule,\n NaturalFileDropDirective,\n ],\n})\nexport class NaturalEditorComponent implements OnInit, OnDestroy, ControlValueAccessor {\n private readonly ngControl = inject(NgControl, {optional: true, self: true});\n private readonly document = inject(DOCUMENT);\n private readonly dialog = inject(MatDialog);\n private readonly imagePlugin = inject(ImagePlugin);\n\n private view: EditorView | null = null;\n\n @ViewChild('editor', {read: ElementRef, static: true}) private editor!: ElementRef<HTMLElement>;\n\n @Output() public readonly contentChange = new EventEmitter<string>();\n\n /**\n * Callback to upload an image.\n *\n * If given it will enable advanced schema, including image and tables.\n * It must be given on initialization and cannot be changed later on.\n */\n @Input() public imageUploader: ImageUploader | null = null;\n\n /**\n * Mode must be set on initialization. Later changes will have no effect. Possible values are:\n *\n * - `basic`, the default, only offers minimal formatting options\n * - `advanced`, adds text colors, headings, alignments, and tables. If `imageUploader` is given, it will force `advanced` mode.\n */\n public readonly mode = input<'basic' | 'advanced'>('basic');\n\n private schema: Schema = basicSchema;\n\n /**\n * Interface with ControlValueAccessor\n * Notifies parent model / form controller\n */\n private onChange?: (value: string | null) => void;\n\n /**\n * HTML string\n */\n private content = '';\n\n public menu: MenuItems | null = null;\n\n /**\n * If subscribed to, then the save button will be shown and click events forwarded\n */\n @Output() public readonly save = new EventEmitter<void>();\n\n public disabled = false;\n\n public constructor() {\n if (this.ngControl !== null) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n public ngOnInit(): void {\n this.schema = this.imageUploader || this.mode() === 'advanced' ? advancedSchema : basicSchema;\n this.menu = buildMenuItems(this.schema, this.dialog);\n const serializer = DOMSerializer.fromSchema(this.schema);\n const state = this.createState();\n\n this.view = new EditorView(this.editor.nativeElement, {\n state: state,\n editable: () => !this.disabled,\n dispatchTransaction: (transaction: Transaction) => {\n if (!this.view) {\n return;\n }\n\n const newState = this.view.state.apply(transaction);\n this.view.updateState(newState);\n\n // Transform doc into HTML string\n const dom = serializer.serializeFragment(this.view.state.doc as any);\n const el = this.document.createElement('_');\n el.appendChild(dom);\n\n const newContent = el.innerHTML;\n if (this.content === newContent || this.disabled) {\n return;\n }\n\n this.content = el.innerHTML;\n\n if (this.onChange) {\n this.onChange(this.content);\n }\n this.contentChange.emit(this.content);\n },\n });\n this.update();\n }\n\n public writeValue(val: string | undefined): void {\n if (typeof val === 'string' && val !== this.content) {\n this.content = val;\n }\n\n if (this.view !== null) {\n const state = this.createState();\n this.view.updateState(state);\n }\n }\n\n private createState(): EditorState {\n const template = this.document.createElement('_');\n template.innerHTML = '<div>' + this.content + '</div>';\n if (!template.firstChild) {\n throw new Error('child of template element could not be created');\n }\n\n const parser = DOMParser.fromSchema(this.schema);\n const doc = parser.parse(template.firstChild);\n\n return EditorState.create({\n doc: doc,\n plugins: this.createPlugins(),\n });\n }\n\n private createPlugins(): Plugin[] {\n const isMac = !!this.document.defaultView?.navigator.platform.match(/Mac/);\n\n const plugins = [\n buildInputRules(this.schema),\n keymap(buildKeymap(this.schema, isMac)),\n keymap(baseKeymap),\n dropCursor(),\n gapCursor(),\n history(),\n new Plugin({\n props: {\n attributes: {class: 'ProseMirror-example-setup-style'},\n },\n }),\n new Plugin({\n view: () => this,\n }),\n ];\n\n if (this.imageUploader) {\n plugins.push(this.imagePlugin.plugin);\n }\n\n if (this.schema === advancedSchema) {\n plugins.push(\n tableEditing(),\n keymap({\n Tab: goToNextCell(1),\n 'Shift-Tab': goToNextCell(-1),\n }),\n );\n }\n\n return plugins;\n }\n\n /**\n * Called by Prosemirror whenever the editor state changes. So we update our menu states.\n */\n public update(): void {\n if (!this.view || !this.menu) {\n return;\n }\n\n for (const item of Object.values(this.menu)) {\n item.update(this.view, this.view.state);\n }\n }\n\n public registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(): void {\n // noop\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public ngOnDestroy(): void {\n if (this.view) {\n this.view.destroy();\n this.view = null;\n }\n }\n\n public run(event: Event, key: Key): void {\n if (!this.view || !this.menu) {\n return;\n }\n\n const item = this.menu[key];\n if (!item || item.disabled || !item.show) {\n return;\n }\n\n item.spec.run(this.view.state, this.view.dispatch, this.view, event);\n this.view.focus();\n }\n\n public upload(file: File): void {\n if (!this.view || !this.imageUploader) {\n return;\n }\n\n if (this.view.state.selection.$from.parent.inlineContent) {\n this.imagePlugin.startImageUpload(this.view, file, this.imageUploader, this.schema);\n }\n\n this.view.focus();\n }\n}\n","@if (menu && !this.disabled) {\n <div class=\"menu-container\">\n <div class=\"menu\">\n @if (save.observed) {\n <button mat-icon-button (click)=\"save.emit()\" i18n-matTooltip matTooltip=\"Enregistrer\">\n <mat-icon fontIcon=\"save\" />\n </button>\n }\n <mat-button-toggle-group hideMultipleSelectionIndicator multiple>\n @if (menu.toggleStrong) {\n <mat-button-toggle\n [disabled]=\"menu.toggleStrong.disabled\"\n [checked]=\"menu.toggleStrong.active\"\n (click)=\"run($event, 'toggleStrong')\"\n i18n-matTooltip\n matTooltip=\"Gras\"\n >\n <mat-icon fontIcon=\"format_bold\" />\n </mat-button-toggle>\n }\n @if (menu.toggleEm) {\n <mat-button-toggle\n [disabled]=\"menu.toggleEm.disabled\"\n [checked]=\"menu.toggleEm.active\"\n (click)=\"run($event, 'toggleEm')\"\n i18n-matTooltip\n matTooltip=\"Italique\"\n >\n <mat-icon fontIcon=\"format_italic\" />\n </mat-button-toggle>\n }\n @if (menu.toggleCode) {\n <mat-button-toggle\n [disabled]=\"menu.toggleCode.disabled\"\n [checked]=\"menu.toggleCode.active\"\n (click)=\"run($event, 'toggleCode')\"\n i18n-matTooltip\n matTooltip=\"Code\"\n >\n <mat-icon fontIcon=\"code\" />\n </mat-button-toggle>\n }\n @if (menu.toggleLink) {\n <mat-button-toggle\n [disabled]=\"menu.toggleLink.disabled\"\n [checked]=\"menu.toggleLink.active\"\n (click)=\"run($event, 'toggleLink')\"\n i18n-matTooltip\n matTooltip=\"Insérer un lien...\"\n >\n <mat-icon fontIcon=\"insert_link\" />\n </mat-button-toggle>\n }\n @if (menu.textColor) {\n <mat-button-toggle\n [disabled]=\"menu.textColor.disabled\"\n [checked]=\"menu.textColor.active\"\n (click)=\"run($event, 'textColor')\"\n i18n-matTooltip\n matTooltip=\"Couleur du texte...\"\n >\n <mat-icon fontIcon=\"format_color_text\" />\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n <button mat-button [matMenuTriggerFor]=\"blockMenu\">\n <span i18n>Type</span>\n <mat-icon fontIcon=\"arrow_drop_down\" />\n </button>\n <mat-menu #blockMenu=\"matMenu\">\n @if (menu.makeParagraph) {\n <button\n mat-menu-item\n [disabled]=\"menu.makeParagraph.disabled\"\n (click)=\"run($event, 'makeParagraph')\"\n i18n\n >Paragraphe\n </button>\n }\n @if (menu.makeCodeBlock) {\n <button\n mat-menu-item\n [disabled]=\"menu.makeCodeBlock.disabled\"\n (click)=\"run($event, 'makeCodeBlock')\"\n i18n\n >Code\n </button>\n }\n @if (menu.makeHead1) {\n <button mat-menu-item [disabled]=\"menu.makeHead1.disabled\" (click)=\"run($event, 'makeHead1')\" i18n\n >Titre 1\n </button>\n }\n @if (menu.makeHead2) {\n <button mat-menu-item [disabled]=\"menu.makeHead2.disabled\" (click)=\"run($event, 'makeHead2')\" i18n\n >Titre 2\n </button>\n }\n @if (menu.makeHead3) {\n <button mat-menu-item [disabled]=\"menu.makeHead3.disabled\" (click)=\"run($event, 'makeHead3')\" i18n\n >Titre 3\n </button>\n }\n @if (menu.makeHead4) {\n <button mat-menu-item [disabled]=\"menu.makeHead4.disabled\" (click)=\"run($event, 'makeHead4')\" i18n\n >Titre 4\n </button>\n }\n @if (menu.makeHead5) {\n <button mat-menu-item [disabled]=\"menu.makeHead5.disabled\" (click)=\"run($event, 'makeHead5')\" i18n\n >Titre 5\n </button>\n }\n @if (menu.makeHead6) {\n <button mat-menu-item [disabled]=\"menu.makeHead6.disabled\" (click)=\"run($event, 'makeHead6')\" i18n\n >Titre 6\n </button>\n }\n @if (menu.blockClass || menu.blockId) {\n <mat-divider />\n }\n @if (menu.blockClass) {\n <button mat-menu-item [disabled]=\"menu.blockClass.disabled\" (click)=\"run($event, 'blockClass')\" i18n\n >Classe...\n </button>\n }\n @if (menu.blockId) {\n <button i18n mat-menu-item [disabled]=\"menu.blockId.disabled\" (click)=\"run($event, 'blockId')\"\n >ID...\n </button>\n }\n </mat-menu>\n @if (menu.addColumnBefore) {\n <button mat-button [matMenuTriggerFor]=\"tableMenu\">\n <span i18n>Tableau</span>\n <mat-icon fontIcon=\"arrow_drop_down\" />\n </button>\n }\n <mat-menu #tableMenu=\"matMenu\">\n @if (menu.insertTable) {\n <button\n mat-menu-item\n [disabled]=\"menu.insertTable.disabled\"\n (click)=\"run($event, 'insertTable')\"\n i18n\n >Insérer un tableau\n </button>\n }\n @if (menu.deleteTable) {\n <button\n mat-menu-item\n [disabled]=\"menu.deleteTable.disabled\"\n (click)=\"run($event, 'deleteTable')\"\n i18n\n >Supprimer le tableau\n </button>\n }\n @if (menu.mergeCells) {\n <button mat-menu-item [disabled]=\"menu.mergeCells.disabled\" (click)=\"run($event, 'mergeCells')\" i18n\n >Fusionner les cellules\n </button>\n }\n @if (menu.splitCell) {\n <button mat-menu-item [disabled]=\"menu.splitCell.disabled\" (click)=\"run($event, 'splitCell')\" i18n\n >Scinder les cellules\n </button>\n }\n @if (menu.cellBackgroundColor) {\n <button\n mat-menu-item\n [disabled]=\"menu.cellBackgroundColor.disabled\"\n (click)=\"run($event, 'cellBackgroundColor')\"\n i18n\n >Couleur de fond...\n </button>\n }\n @if (menu.tableClass) {\n <button mat-menu-item [disabled]=\"menu.tableClass.disabled\" (click)=\"run($event, 'tableClass')\" i18n\n >Classe...\n </button>\n }\n @if (menu.tableId) {\n <button i18n mat-menu-item [disabled]=\"menu.tableId.disabled\" (click)=\"run($event, 'tableId')\"\n >ID...\n </button>\n }\n <mat-divider />\n @if (menu.addColumnBefore) {\n <button\n mat-menu-item\n [disabled]=\"menu.addColumnBefore.disabled\"\n (click)=\"run($event, 'addColumnBefore')\"\n i18n\n >Insérer une colonne avant\n </button>\n }\n @if (menu.addColumnAfter) {\n <button\n mat-menu-item\n [disabled]=\"menu.addColumnAfter.disabled\"\n (click)=\"run($event, 'addColumnAfter')\"\n i18n\n >Insérer une colonne après\n </button>\n }\n @if (menu.deleteColumn) {\n <button\n mat-menu-item\n [disabled]=\"menu.deleteColumn.disabled\"\n (click)=\"run($event, 'deleteColumn')\"\n i18n\n >Supprimer la colonne\n </button>\n }\n <mat-divider />\n @if (menu.addRowBefore) {\n <button\n mat-menu-item\n [disabled]=\"menu.addRowBefore.disabled\"\n (click)=\"run($event, 'addRowBefore')\"\n i18n\n >Insérer une ligne avant\n </button>\n }\n @if (menu.addRowAfter) {\n <button\n mat-menu-item\n [disabled]=\"menu.addRowAfter.disabled\"\n (click)=\"run($event, 'addRowAfter')\"\n i18n\n >Insérer une ligne après\n </button>\n }\n @if (menu.deleteRow) {\n <button mat-menu-item [disabled]=\"menu.deleteRow.disabled\" (click)=\"run($event, 'deleteRow')\" i18n\n >Supprimer la ligne\n </button>\n }\n <mat-divider />\n @if (menu.toggleHeaderColumn) {\n <button\n mat-menu-item\n [disabled]=\"menu.toggleHeaderColumn.disabled\"\n (click)=\"run($event, 'toggleHeaderColumn')\"\n i18n\n >Entête de colonne\n </button>\n }\n @if (menu.toggleHeaderRow) {\n <button\n mat-menu-item\n [disabled]=\"menu.toggleHeaderRow.disabled\"\n (click)=\"run($event, 'toggleHeaderRow')\"\n i18n\n >Entête de ligne\n </button>\n }\n @if (menu.toggleHeaderCell) {\n <button\n mat-menu-item\n [disabled]=\"menu.toggleHeaderCell.disabled\"\n (click)=\"run($event, 'toggleHeaderCell')\"\n i18n\n >Entête de cellule\n </button>\n }\n </mat-menu>\n @if (imageUploader) {\n <button\n mat-icon-button\n naturalFileDrop\n [selectable]=\"true\"\n [broadcast]=\"false\"\n i18n-matTooltip\n matTooltip=\"Insérer une image\"\n (fileChange)=\"upload($event)\"\n >\n <mat-icon fontIcon=\"insert_photo\" />\n </button>\n }\n @if (menu.alignLeft) {\n <mat-button-toggle-group hideSingleSelectionIndicator>\n @if (menu.alignLeft) {\n <mat-button-toggle\n [disabled]=\"menu.alignLeft.disabled\"\n [checked]=\"menu.alignLeft.active\"\n (click)=\"run($event, 'alignLeft')\"\n i18n-matTooltip\n matTooltip=\"Aligner gauche\"\n >\n <mat-icon fontIcon=\"format_align_left\" />\n </mat-button-toggle>\n }\n @if (menu.alignCenter) {\n <mat-button-toggle\n [disabled]=\"menu.alignCenter.disabled\"\n [checked]=\"menu.alignCenter.active\"\n (click)=\"run($event, 'alignCenter')\"\n i18n-matTooltip\n matTooltip=\"Centrer\"\n >\n <mat-icon fontIcon=\"format_align_center\" />\n </mat-button-toggle>\n }\n @if (menu.alignRight) {\n <mat-button-toggle\n [disabled]=\"menu.alignRight.disabled\"\n [checked]=\"menu.alignRight.active\"\n (click)=\"run($event, 'alignRight')\"\n i18n-matTooltip\n matTooltip=\"Aligner droite\"\n >\n <mat-icon fontIcon=\"format_align_right\" />\n </mat-button-toggle>\n }\n @if (menu.alignJustify) {\n <mat-button-toggle\n [disabled]=\"menu.alignJustify.disabled\"\n [checked]=\"menu.alignJustify.active\"\n (click)=\"run($event, 'alignJustify')\"\n i18n-matTooltip\n matTooltip=\"Justifier\"\n >\n <mat-icon fontIcon=\"format_align_justify\" />\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n }\n @if (menu.undo) {\n <button\n mat-icon-button\n [disabled]=\"menu.undo.disabled\"\n (click)=\"run($event, 'undo')\"\n i18n-matTooltip\n matTooltip=\"Annuler\"\n >\n <mat-icon fontIcon=\"undo\" />\n </button>\n }\n @if (menu.redo) {\n <button\n mat-icon-button\n [disabled]=\"menu.redo.disabled\"\n (click)=\"run($event, 'redo')\"\n i18n-matTooltip\n matTooltip=\"Refaire\"\n >\n <mat-icon fontIcon=\"redo\" />\n </button>\n }\n @if (menu.wrapBulletList && menu.wrapBulletList.show) {\n <button\n mat-icon-button\n [disabled]=\"menu.wrapBulletList.disabled\"\n (click)=\"run($event, 'wrapBulletList')\"\n i18n-matTooltip\n matTooltip=\"Liste à puce\"\n >\n <mat-icon fontIcon=\"format_list_bulleted\" />\n </button>\n }\n @if (menu.wrapOrderedList && menu.wrapOrderedList.show) {\n <button\n mat-icon-button\n [disabled]=\"menu.wrapOrderedList.disabled\"\n (click)=\"run($event, 'wrapOrderedList')\"\n i18n-matTooltip\n matTooltip=\"Liste à numéro\"\n >\n <mat-icon fontIcon=\"format_list_numbered\" />\n </button>\n }\n @if (menu.wrapBlockQuote && menu.wrapBlockQuote.show) {\n <button\n mat-icon-button\n [disabled]=\"menu.wrapBlockQuote.disabled\"\n (click)=\"run($event, 'wrapBlockQuote')\"\n i18n-matTooltip\n matTooltip=\"Citation\"\n >\n <mat-icon fontIcon=\"format_quote\" />\n </button>\n }\n @if (menu.joinUp && menu.joinUp.show) {\n <button\n mat-icon-button\n [disabled]=\"menu.joinUp.disabled\"\n (click)=\"run($event, 'joinUp')\"\n i18n-matTooltip\n matTooltip=\"Fusionner avec l'élément du haut\"\n >\n <mat-icon fontIcon=\"move_up\" />\n </button>\n }\n @if (menu.lift && menu.lift.show) {\n <button\n mat-icon-button\n [disabled]=\"menu.lift.disabled\"\n (click)=\"run($event, 'lift')\"\n i18n-matTooltip\n matTooltip=\"Désindenter\"\n >\n <mat-icon fontIcon=\"format_indent_decrease\" />\n </button>\n }\n @if (menu.selectParentNode && menu.selectParentNode.show) {\n <button\n mat-icon-button\n [disabled]=\"menu.selectParentNode.disabled\"\n (click)=\"run($event, 'selectParentNode')\"\n i18n-matTooltip\n matTooltip=\"Sélectionner l'élément parent\"\n >\n <mat-icon fontIcon=\"select_all\" />\n </button>\n }\n </div>\n </div>\n}\n<div class=\"editor-container\" #editor></div>\n","/// <reference types=\"@angular/localize\" />\n\n/*\n * Public API Surface of natural-editor\n */\n\nexport {NaturalCustomCssDirective} from './lib/custom-css/custom-css.directive';\nexport {NaturalEditorComponent} from './lib/editor/editor.component';\nexport type {ImageUploader} from './lib/utils/image';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i6","i2","i3","i5"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ecodev/natural-editor",
3
- "version": "61.2.0",
3
+ "version": "61.3.1",
4
4
  "license": "MIT",
5
5
  "repository": "github:Ecodev/natural",
6
6
  "sideEffects": false,