@ecodev/natural-editor 41.3.0 → 42.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{esm2015/ecodev-natural-editor.js → esm2020/ecodev-natural-editor.mjs} +0 -0
- package/esm2020/lib/class-dialog/class-dialog.component.mjs +37 -0
- package/esm2020/lib/color-dialog/color-dialog.component.mjs +184 -0
- package/esm2020/lib/custom-css/custom-css.directive.mjs +71 -0
- package/esm2020/lib/editor/editor.component.mjs +213 -0
- package/esm2020/lib/editor.module.mjs +90 -0
- package/{esm2015/lib/link-dialog/link-dialog.component.js → esm2020/lib/link-dialog/link-dialog.component.mjs} +5 -8
- package/esm2020/lib/utils/image.mjs +81 -0
- package/{esm2015/lib/utils/inputrules.js → esm2020/lib/utils/inputrules.mjs} +0 -0
- package/esm2020/lib/utils/items/cell-background-color-item.mjs +55 -0
- package/esm2020/lib/utils/items/class-item.mjs +86 -0
- package/esm2020/lib/utils/items/horizontal-rule-item.mjs +24 -0
- package/esm2020/lib/utils/items/item.mjs +39 -0
- package/esm2020/lib/utils/items/link-item.mjs +40 -0
- package/esm2020/lib/utils/items/table-item.mjs +43 -0
- package/esm2020/lib/utils/items/text-align-item.mjs +78 -0
- package/esm2020/lib/utils/items/utils.mjs +41 -0
- package/esm2020/lib/utils/items/wrap-list-item.mjs +6 -0
- package/esm2020/lib/utils/keymap.mjs +115 -0
- package/esm2020/lib/utils/menu.mjs +101 -0
- package/esm2020/lib/utils/schema/paragraph-with-alignment.mjs +50 -0
- package/esm2020/lib/utils/schema/schema.mjs +51 -0
- package/esm2020/lib/utils/schema/table.mjs +113 -0
- package/esm2020/public-api.mjs +9 -0
- package/fesm2015/ecodev-natural-editor.mjs +1548 -0
- package/fesm2015/ecodev-natural-editor.mjs.map +1 -0
- package/fesm2020/ecodev-natural-editor.mjs +1546 -0
- package/fesm2020/ecodev-natural-editor.mjs.map +1 -0
- package/lib/class-dialog/class-dialog.component.d.ts +24 -0
- package/lib/color-dialog/color-dialog.component.d.ts +26 -0
- package/lib/custom-css/custom-css.directive.d.ts +29 -0
- package/lib/editor.module.d.ts +19 -16
- package/lib/utils/items/cell-background-color-item.d.ts +5 -0
- package/lib/utils/items/class-item.d.ts +6 -0
- package/lib/utils/items/horizontal-rule-item.d.ts +5 -0
- package/lib/utils/{item.d.ts → items/item.d.ts} +0 -0
- package/lib/utils/items/link-item.d.ts +6 -0
- package/lib/utils/items/table-item.d.ts +4 -0
- package/lib/utils/{text-align-item.d.ts → items/text-align-item.d.ts} +0 -0
- package/lib/utils/items/utils.d.ts +18 -0
- package/lib/utils/items/wrap-list-item.d.ts +3 -0
- package/lib/utils/menu.d.ts +2 -2
- package/lib/utils/schema/paragraph-with-alignment.d.ts +8 -0
- package/lib/utils/{schema.d.ts → schema/schema.d.ts} +0 -0
- package/lib/utils/schema/table.d.ts +9 -0
- package/package.json +22 -8
- package/public-api.d.ts +1 -0
- package/src/lib/editor/_editor.theme.scss +1 -1
- package/theming/_natural-editor.theme.scss +1 -1
- package/bundles/ecodev-natural-editor.umd.js +0 -1351
- package/bundles/ecodev-natural-editor.umd.js.map +0 -1
- package/esm2015/lib/editor/editor.component.js +0 -219
- package/esm2015/lib/editor.module.js +0 -82
- package/esm2015/lib/utils/image.js +0 -81
- package/esm2015/lib/utils/item.js +0 -39
- package/esm2015/lib/utils/keymap.js +0 -115
- package/esm2015/lib/utils/menu.js +0 -178
- package/esm2015/lib/utils/paragraph-with-alignment.js +0 -43
- package/esm2015/lib/utils/schema.js +0 -47
- package/esm2015/lib/utils/table.js +0 -37
- package/esm2015/lib/utils/text-align-item.js +0 -78
- package/esm2015/public-api.js +0 -8
- package/fesm2015/ecodev-natural-editor.js +0 -997
- package/fesm2015/ecodev-natural-editor.js.map +0 -1
- package/lib/utils/paragraph-with-alignment.d.ts +0 -2
- package/lib/utils/table.d.ts +0 -8
|
File without changes
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Component, Inject } from '@angular/core';
|
|
2
|
+
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
3
|
+
import { FormControl, FormGroup, Validators } from '@angular/forms';
|
|
4
|
+
import { ifValid } from '@ecodev/natural';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/material/dialog";
|
|
7
|
+
import * as i2 from "@angular/material/form-field";
|
|
8
|
+
import * as i3 from "@angular/material/button";
|
|
9
|
+
import * as i4 from "@angular/forms";
|
|
10
|
+
import * as i5 from "@angular/material/input";
|
|
11
|
+
import * as i6 from "@angular/common";
|
|
12
|
+
export class ClassDialogComponent {
|
|
13
|
+
constructor(data, dialogRef) {
|
|
14
|
+
this.dialogRef = dialogRef;
|
|
15
|
+
this.classControl = new FormControl('', Validators.pattern(/(^\s*(-?[_a-zA-Z]+[_a-zA-Z0-9-]*\s*)+)/));
|
|
16
|
+
this.form = new FormGroup({
|
|
17
|
+
class: this.classControl,
|
|
18
|
+
});
|
|
19
|
+
this.form.setValue(data);
|
|
20
|
+
}
|
|
21
|
+
maybeConfirm() {
|
|
22
|
+
ifValid(this.form).subscribe(() => this.confirm());
|
|
23
|
+
}
|
|
24
|
+
confirm() {
|
|
25
|
+
this.dialogRef.close(this.form.value);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
ClassDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: ClassDialogComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
29
|
+
ClassDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: ClassDialogComponent, selector: "ng-component", ngImport: i0, 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 <div class=\"sample\" matSuffix [style]=\"{backgroundClass: classControl.valid ? classControl.value : ''}\"></div>\n <mat-error *ngIf=\"classControl.hasError('pattern')\" i18n>Doit \u00EAtre un ou plusieurs nom de classe CSS</mat-error>\n </mat-form-field>\n</mat-dialog-content>\n\n<mat-dialog-actions>\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-actions{display:flex;flex-direction:row;justify-content:flex-end}mat-dialog-content{width:70vw;max-width:30em;display:grid}\n"], components: [{ type: i2.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.MatLabel, selector: "mat-label" }, { type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i2.MatSuffix, selector: "[matSuffix]" }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.MatError, selector: "mat-error", inputs: ["id"] }, { type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }] });
|
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: ClassDialogComponent, decorators: [{
|
|
31
|
+
type: Component,
|
|
32
|
+
args: [{ 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 <div class=\"sample\" matSuffix [style]=\"{backgroundClass: classControl.valid ? classControl.value : ''}\"></div>\n <mat-error *ngIf=\"classControl.hasError('pattern')\" i18n>Doit \u00EAtre un ou plusieurs nom de classe CSS</mat-error>\n </mat-form-field>\n</mat-dialog-content>\n\n<mat-dialog-actions>\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-actions{display:flex;flex-direction:row;justify-content:flex-end}mat-dialog-content{width:70vw;max-width:30em;display:grid}\n"] }]
|
|
33
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
34
|
+
type: Inject,
|
|
35
|
+
args: [MAT_DIALOG_DATA]
|
|
36
|
+
}] }, { type: i1.MatDialogRef }]; } });
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3MtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwtZWRpdG9yL3NyYy9saWIvY2xhc3MtZGlhbG9nL2NsYXNzLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsLWVkaXRvci9zcmMvbGliL2NsYXNzLWRpYWxvZy9jbGFzcy1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFDLGVBQWUsRUFBZSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7QUFrQnhDLE1BQU0sT0FBTyxvQkFBb0I7SUFNN0IsWUFDNkIsSUFBcUIsRUFDdEMsU0FBOEQ7UUFBOUQsY0FBUyxHQUFULFNBQVMsQ0FBcUQ7UUFQMUQsaUJBQVksR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDLENBQUM7UUFDakcsU0FBSSxHQUFHLElBQUksU0FBUyxDQUFDO1lBQ2pDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWTtTQUMzQixDQUFDLENBQUM7UUFNQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU0sWUFBWTtRQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTyxPQUFPO1FBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDOztpSEFuQlEsb0JBQW9CLGtCQU9qQixlQUFlO3FHQVBsQixvQkFBb0Isb0RDckJqQywreUJBZUE7MkZETWEsb0JBQW9CO2tCQUpoQyxTQUFTOzs7MEJBV0QsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHtGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge2lmVmFsaWR9IGZyb20gJ0BlY29kZXYvbmF0dXJhbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xhc3NEaWFsb2dEYXRhIHtcbiAgICAvKipcbiAgICAgKiBDU1MgY2xhc3MgbmFtZXNcbiAgICAgKlxuICAgICAqIEVnOlxuICAgICAqXG4gICAgICogLSBgXCJcImBcbiAgICAgKiAtIGBcIm15LWNsYXNzIG15LW90aGVyLWNsYXNzXCJgXG4gICAgICovXG4gICAgY2xhc3M6IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGVVcmw6ICcuL2NsYXNzLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2xhc3MtZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIENsYXNzRGlhbG9nQ29tcG9uZW50IHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2xhc3NDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnBhdHRlcm4oLyheXFxzKigtP1tfYS16QS1aXStbX2EtekEtWjAtOS1dKlxccyopKykvKSk7XG4gICAgcHVibGljIHJlYWRvbmx5IGZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgY2xhc3M6IHRoaXMuY2xhc3NDb250cm9sLFxuICAgIH0pO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgZGF0YTogQ2xhc3NEaWFsb2dEYXRhLFxuICAgICAgICBwcml2YXRlIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPENsYXNzRGlhbG9nQ29tcG9uZW50LCBDbGFzc0RpYWxvZ0RhdGE+LFxuICAgICkge1xuICAgICAgICB0aGlzLmZvcm0uc2V0VmFsdWUoZGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIG1heWJlQ29uZmlybSgpOiB2b2lkIHtcbiAgICAgICAgaWZWYWxpZCh0aGlzLmZvcm0pLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNvbmZpcm0oKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb25maXJtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0aGlzLmZvcm0udmFsdWUpO1xuICAgIH1cbn1cbiIsIjxoMiBpMThuIG1hdC1kaWFsb2ctdGl0bGU+U2Fpc2lyIGxlcyBjbGFzc2VzIENTUzwvaDI+XG5cbjxtYXQtZGlhbG9nLWNvbnRlbnQgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsIGkxOG4+Q2xhc3NlcyBDU1M8L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJjbGFzc0NvbnRyb2xcIiAoa2V5ZG93bi5lbnRlcik9XCJtYXliZUNvbmZpcm0oKVwiIGNka0ZvY3VzSW5pdGlhbCAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2FtcGxlXCIgbWF0U3VmZml4IFtzdHlsZV09XCJ7YmFja2dyb3VuZENsYXNzOiBjbGFzc0NvbnRyb2wudmFsaWQgPyBjbGFzc0NvbnRyb2wudmFsdWUgOiAnJ31cIj48L2Rpdj5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImNsYXNzQ29udHJvbC5oYXNFcnJvcigncGF0dGVybicpXCIgaTE4bj5Eb2l0IMOqdHJlIHVuIG91IHBsdXNpZXVycyBub20gZGUgY2xhc3NlIENTUzwvbWF0LWVycm9yPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG48L21hdC1kaWFsb2ctY29udGVudD5cblxuPG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdC1kaWFsb2ctY2xvc2VdIGkxOG4+QW5udWxlcjwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJtYXliZUNvbmZpcm0oKVwiIFtkaXNhYmxlZF09XCIhZm9ybS52YWxpZFwiPjxzcGFuIGkxOG4+VmFsaWRlcjwvc3Bhbj48L2J1dHRvbj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuIl19
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { Component, Inject } from '@angular/core';
|
|
2
|
+
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
3
|
+
import { FormControl, FormGroup, Validators } from '@angular/forms';
|
|
4
|
+
import { ifValid } from '@ecodev/natural';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/material/dialog";
|
|
7
|
+
import * as i2 from "@angular/material/button";
|
|
8
|
+
import * as i3 from "@ecodev/natural";
|
|
9
|
+
import * as i4 from "@angular/material/form-field";
|
|
10
|
+
import * as i5 from "@angular/forms";
|
|
11
|
+
import * as i6 from "@angular/common";
|
|
12
|
+
import * as i7 from "@angular/material/input";
|
|
13
|
+
export class ColorDialogComponent {
|
|
14
|
+
constructor(data, dialogRef) {
|
|
15
|
+
this.dialogRef = dialogRef;
|
|
16
|
+
this.colors = [
|
|
17
|
+
[
|
|
18
|
+
'#000000',
|
|
19
|
+
'#111111',
|
|
20
|
+
'#1c1c1c',
|
|
21
|
+
'#333333',
|
|
22
|
+
'#666666',
|
|
23
|
+
'#808080',
|
|
24
|
+
'#999999',
|
|
25
|
+
'#b2b2b2',
|
|
26
|
+
'#cccccc',
|
|
27
|
+
'#dddddd',
|
|
28
|
+
'#eeeeee',
|
|
29
|
+
'#ffffff',
|
|
30
|
+
],
|
|
31
|
+
[
|
|
32
|
+
'#ffff00',
|
|
33
|
+
'#ffbf00',
|
|
34
|
+
'#ff8000',
|
|
35
|
+
'#ff4000',
|
|
36
|
+
'#ff0000',
|
|
37
|
+
'#bf0041',
|
|
38
|
+
'#800080',
|
|
39
|
+
'#55308d',
|
|
40
|
+
'#2a6099',
|
|
41
|
+
'#158466',
|
|
42
|
+
'#00a933',
|
|
43
|
+
'#81d41a',
|
|
44
|
+
],
|
|
45
|
+
[
|
|
46
|
+
'#ffffd7',
|
|
47
|
+
'#fff5ce',
|
|
48
|
+
'#ffdbb6',
|
|
49
|
+
'#ffd8ce',
|
|
50
|
+
'#ffd7d7',
|
|
51
|
+
'#f7d1d5',
|
|
52
|
+
'#e0c2cd',
|
|
53
|
+
'#dedce6',
|
|
54
|
+
'#dee6ef',
|
|
55
|
+
'#dee7e5',
|
|
56
|
+
'#dde8cb',
|
|
57
|
+
'#f6f9d4',
|
|
58
|
+
],
|
|
59
|
+
[
|
|
60
|
+
'#ffffa6',
|
|
61
|
+
'#ffe994',
|
|
62
|
+
'#ffb66c',
|
|
63
|
+
'#ffaa95',
|
|
64
|
+
'#ffa6a6',
|
|
65
|
+
'#ec9ba4',
|
|
66
|
+
'#bf819e',
|
|
67
|
+
'#b7b3ca',
|
|
68
|
+
'#b4c7dc',
|
|
69
|
+
'#b3cac7',
|
|
70
|
+
'#afd095',
|
|
71
|
+
'#e8f2a1',
|
|
72
|
+
],
|
|
73
|
+
[
|
|
74
|
+
'#ffff6d',
|
|
75
|
+
'#ffde59',
|
|
76
|
+
'#ff972f',
|
|
77
|
+
'#ff7b59',
|
|
78
|
+
'#ff6d6d',
|
|
79
|
+
'#e16173',
|
|
80
|
+
'#a1467e',
|
|
81
|
+
'#8e86ae',
|
|
82
|
+
'#729fcf',
|
|
83
|
+
'#81aca6',
|
|
84
|
+
'#77bc65',
|
|
85
|
+
'#d4ea6b',
|
|
86
|
+
],
|
|
87
|
+
[
|
|
88
|
+
'#ffff38',
|
|
89
|
+
'#ffd428',
|
|
90
|
+
'#ff860d',
|
|
91
|
+
'#ff5429',
|
|
92
|
+
'#ff3838',
|
|
93
|
+
'#d62e4e',
|
|
94
|
+
'#8d1d75',
|
|
95
|
+
'#6b5e9b',
|
|
96
|
+
'#5983b0',
|
|
97
|
+
'#50938a',
|
|
98
|
+
'#3faf46',
|
|
99
|
+
'#bbe33d',
|
|
100
|
+
],
|
|
101
|
+
[
|
|
102
|
+
'#e6e905',
|
|
103
|
+
'#e8a202',
|
|
104
|
+
'#ea7500',
|
|
105
|
+
'#ed4c05',
|
|
106
|
+
'#f10d0c',
|
|
107
|
+
'#a7074b',
|
|
108
|
+
'#780373',
|
|
109
|
+
'#5b277d',
|
|
110
|
+
'#3465a4',
|
|
111
|
+
'#168253',
|
|
112
|
+
'#069a2e',
|
|
113
|
+
'#5eb91e',
|
|
114
|
+
],
|
|
115
|
+
[
|
|
116
|
+
'#acb20c',
|
|
117
|
+
'#b47804',
|
|
118
|
+
'#b85c00',
|
|
119
|
+
'#be480a',
|
|
120
|
+
'#c9211e',
|
|
121
|
+
'#861141',
|
|
122
|
+
'#650953',
|
|
123
|
+
'#55215b',
|
|
124
|
+
'#355269',
|
|
125
|
+
'#1e6a39',
|
|
126
|
+
'#127622',
|
|
127
|
+
'#468a1a',
|
|
128
|
+
],
|
|
129
|
+
[
|
|
130
|
+
'#706e0c',
|
|
131
|
+
'#784b04',
|
|
132
|
+
'#7b3d00',
|
|
133
|
+
'#813709',
|
|
134
|
+
'#8d281e',
|
|
135
|
+
'#611729',
|
|
136
|
+
'#4e102d',
|
|
137
|
+
'#481d32',
|
|
138
|
+
'#383d3c',
|
|
139
|
+
'#28471f',
|
|
140
|
+
'#224b12',
|
|
141
|
+
'#395511',
|
|
142
|
+
],
|
|
143
|
+
[
|
|
144
|
+
'#443205',
|
|
145
|
+
'#472702',
|
|
146
|
+
'#492300',
|
|
147
|
+
'#4b2204',
|
|
148
|
+
'#50200c',
|
|
149
|
+
'#41190d',
|
|
150
|
+
'#3b160e',
|
|
151
|
+
'#3a1a0f',
|
|
152
|
+
'#362413',
|
|
153
|
+
'#302709',
|
|
154
|
+
'#2e2706',
|
|
155
|
+
'#342a06',
|
|
156
|
+
],
|
|
157
|
+
];
|
|
158
|
+
this.colorControl = new FormControl('', Validators.pattern(/^#\p{Hex_Digit}{6}/u));
|
|
159
|
+
this.form = new FormGroup({
|
|
160
|
+
color: this.colorControl,
|
|
161
|
+
});
|
|
162
|
+
this.form.setValue(data);
|
|
163
|
+
}
|
|
164
|
+
maybeConfirm() {
|
|
165
|
+
ifValid(this.form).subscribe(() => this.confirm());
|
|
166
|
+
}
|
|
167
|
+
confirm() {
|
|
168
|
+
this.dialogRef.close(this.form.value);
|
|
169
|
+
}
|
|
170
|
+
selectColor(color) {
|
|
171
|
+
this.colorControl.setValue(color);
|
|
172
|
+
this.maybeConfirm();
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
ColorDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: ColorDialogComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
176
|
+
ColorDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: ColorDialogComponent, selector: "ng-component", ngImport: i0, template: "<h2 i18n mat-dialog-title>S\u00E9lectionner une couleur</h2>\n\n<mat-dialog-content [formGroup]=\"form\">\n <div>\n <div *ngFor=\"let row of colors\">\n <div\n *ngFor=\"let color of row\"\n class=\"color\"\n [style]=\"{backgroundColor: color}\"\n (click)=\"selectColor(color)\"\n >\n </div>\n </div>\n </div>\n\n <div>\n <button mat-button (click)=\"selectColor('')\">\n <natural-icon name=\"format_color_reset\"></natural-icon>\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 class=\"sample\" matSuffix [style]=\"{backgroundColor: colorControl.valid ? colorControl.value : ''}\"></div>\n <mat-error *ngIf=\"colorControl.hasError('pattern')\" i18n\n >Doit \u00EAtre le format hexadecimal. Par exemple: #ff4000\n </mat-error>\n </mat-form-field>\n</mat-dialog-content>\n\n<mat-dialog-actions>\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-actions{display:flex;flex-direction:row;justify-content:flex-end}mat-dialog-content{width:70vw;max-width:30em;display:grid;justify-content:center;row-gap:25px}.color{display:inline-block;width:25px;height:25px;margin:3px;cursor:pointer}.color:hover{padding:3px;margin:0}.sample{width:27px;height:27px}\n"], components: [{ type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i3.NaturalIconComponent, selector: "natural-icon", inputs: ["label", "labelColor", "labelPosition", "name", "size"] }, { type: i4.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }], directives: [{ type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.MatLabel, selector: "mat-label" }, { type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i4.MatSuffix, selector: "[matSuffix]" }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.MatError, selector: "mat-error", inputs: ["id"] }, { type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }] });
|
|
177
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: ColorDialogComponent, decorators: [{
|
|
178
|
+
type: Component,
|
|
179
|
+
args: [{ template: "<h2 i18n mat-dialog-title>S\u00E9lectionner une couleur</h2>\n\n<mat-dialog-content [formGroup]=\"form\">\n <div>\n <div *ngFor=\"let row of colors\">\n <div\n *ngFor=\"let color of row\"\n class=\"color\"\n [style]=\"{backgroundColor: color}\"\n (click)=\"selectColor(color)\"\n >\n </div>\n </div>\n </div>\n\n <div>\n <button mat-button (click)=\"selectColor('')\">\n <natural-icon name=\"format_color_reset\"></natural-icon>\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 class=\"sample\" matSuffix [style]=\"{backgroundColor: colorControl.valid ? colorControl.value : ''}\"></div>\n <mat-error *ngIf=\"colorControl.hasError('pattern')\" i18n\n >Doit \u00EAtre le format hexadecimal. Par exemple: #ff4000\n </mat-error>\n </mat-form-field>\n</mat-dialog-content>\n\n<mat-dialog-actions>\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-actions{display:flex;flex-direction:row;justify-content:flex-end}mat-dialog-content{width:70vw;max-width:30em;display:grid;justify-content:center;row-gap:25px}.color{display:inline-block;width:25px;height:25px;margin:3px;cursor:pointer}.color:hover{padding:3px;margin:0}.sample{width:27px;height:27px}\n"] }]
|
|
180
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
181
|
+
type: Inject,
|
|
182
|
+
args: [MAT_DIALOG_DATA]
|
|
183
|
+
}] }, { type: i1.MatDialogRef }]; } });
|
|
184
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwtZWRpdG9yL3NyYy9saWIvY29sb3ItZGlhbG9nL2NvbG9yLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsLWVkaXRvci9zcmMvbGliL2NvbG9yLWRpYWxvZy9jb2xvci1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFDLGVBQWUsRUFBZSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7O0FBa0J4QyxNQUFNLE9BQU8sb0JBQW9CO0lBcUo3QixZQUM2QixJQUFxQixFQUN0QyxTQUE4RDtRQUE5RCxjQUFTLEdBQVQsU0FBUyxDQUFxRDtRQXRKMUQsV0FBTSxHQUFlO1lBQ2pDO2dCQUNJLFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2FBQ1o7WUFDRDtnQkFDSSxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUzthQUNaO1lBQ0Q7Z0JBQ0ksU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7YUFDWjtZQUNEO2dCQUNJLFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2FBQ1o7WUFDRDtnQkFDSSxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUzthQUNaO1lBQ0Q7Z0JBQ0ksU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7YUFDWjtZQUNEO2dCQUNJLFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2FBQ1o7WUFDRDtnQkFDSSxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUzthQUNaO1lBQ0Q7Z0JBQ0ksU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7YUFDWjtZQUNEO2dCQUNJLFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2FBQ1o7U0FDSixDQUFDO1FBRWMsaUJBQVksR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7UUFDOUUsU0FBSSxHQUFHLElBQUksU0FBUyxDQUFDO1lBQ2pDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWTtTQUMzQixDQUFDLENBQUM7UUFNQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU0sWUFBWTtRQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTyxPQUFPO1FBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQWE7UUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hCLENBQUM7O2lIQXZLUSxvQkFBb0Isa0JBc0pqQixlQUFlO3FHQXRKbEIsb0JBQW9CLG9EQ3JCakMseTJDQW9DQTsyRkRmYSxvQkFBb0I7a0JBSmhDLFNBQVM7OzswQkEwSkQsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHtGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge2lmVmFsaWR9IGZyb20gJ0BlY29kZXYvbmF0dXJhbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sb3JEaWFsb2dEYXRhIHtcbiAgICAvKipcbiAgICAgKiBFbXB0eSBzdHJpbmcgbWVhbnMgbm8gY29sb3Igc2V0IGF0IGFsbC4gQW55dGhpbmcgZWxzZSBtdXN0IGJlIGEgdmFsaWQgQ1NTIGNvbG9yIGluIGhleGEgZm9ybWF0LlxuICAgICAqXG4gICAgICogRWc6XG4gICAgICpcbiAgICAgKiAtIGBcIlwiYFxuICAgICAqIC0gYFwiI2ZmNDAwMFwiYFxuICAgICAqL1xuICAgIGNvbG9yOiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHRlbXBsYXRlVXJsOiAnLi9jb2xvci1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NvbG9yLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDb2xvckRpYWxvZ0NvbXBvbmVudCB7XG4gICAgcHVibGljIHJlYWRvbmx5IGNvbG9yczogc3RyaW5nW11bXSA9IFtcbiAgICAgICAgW1xuICAgICAgICAgICAgJyMwMDAwMDAnLFxuICAgICAgICAgICAgJyMxMTExMTEnLFxuICAgICAgICAgICAgJyMxYzFjMWMnLFxuICAgICAgICAgICAgJyMzMzMzMzMnLFxuICAgICAgICAgICAgJyM2NjY2NjYnLFxuICAgICAgICAgICAgJyM4MDgwODAnLFxuICAgICAgICAgICAgJyM5OTk5OTknLFxuICAgICAgICAgICAgJyNiMmIyYjInLFxuICAgICAgICAgICAgJyNjY2NjY2MnLFxuICAgICAgICAgICAgJyNkZGRkZGQnLFxuICAgICAgICAgICAgJyNlZWVlZWUnLFxuICAgICAgICAgICAgJyNmZmZmZmYnLFxuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICAnI2ZmZmYwMCcsXG4gICAgICAgICAgICAnI2ZmYmYwMCcsXG4gICAgICAgICAgICAnI2ZmODAwMCcsXG4gICAgICAgICAgICAnI2ZmNDAwMCcsXG4gICAgICAgICAgICAnI2ZmMDAwMCcsXG4gICAgICAgICAgICAnI2JmMDA0MScsXG4gICAgICAgICAgICAnIzgwMDA4MCcsXG4gICAgICAgICAgICAnIzU1MzA4ZCcsXG4gICAgICAgICAgICAnIzJhNjA5OScsXG4gICAgICAgICAgICAnIzE1ODQ2NicsXG4gICAgICAgICAgICAnIzAwYTkzMycsXG4gICAgICAgICAgICAnIzgxZDQxYScsXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgICcjZmZmZmQ3JyxcbiAgICAgICAgICAgICcjZmZmNWNlJyxcbiAgICAgICAgICAgICcjZmZkYmI2JyxcbiAgICAgICAgICAgICcjZmZkOGNlJyxcbiAgICAgICAgICAgICcjZmZkN2Q3JyxcbiAgICAgICAgICAgICcjZjdkMWQ1JyxcbiAgICAgICAgICAgICcjZTBjMmNkJyxcbiAgICAgICAgICAgICcjZGVkY2U2JyxcbiAgICAgICAgICAgICcjZGVlNmVmJyxcbiAgICAgICAgICAgICcjZGVlN2U1JyxcbiAgICAgICAgICAgICcjZGRlOGNiJyxcbiAgICAgICAgICAgICcjZjZmOWQ0JyxcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJyNmZmZmYTYnLFxuICAgICAgICAgICAgJyNmZmU5OTQnLFxuICAgICAgICAgICAgJyNmZmI2NmMnLFxuICAgICAgICAgICAgJyNmZmFhOTUnLFxuICAgICAgICAgICAgJyNmZmE2YTYnLFxuICAgICAgICAgICAgJyNlYzliYTQnLFxuICAgICAgICAgICAgJyNiZjgxOWUnLFxuICAgICAgICAgICAgJyNiN2IzY2EnLFxuICAgICAgICAgICAgJyNiNGM3ZGMnLFxuICAgICAgICAgICAgJyNiM2NhYzcnLFxuICAgICAgICAgICAgJyNhZmQwOTUnLFxuICAgICAgICAgICAgJyNlOGYyYTEnLFxuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICAnI2ZmZmY2ZCcsXG4gICAgICAgICAgICAnI2ZmZGU1OScsXG4gICAgICAgICAgICAnI2ZmOTcyZicsXG4gICAgICAgICAgICAnI2ZmN2I1OScsXG4gICAgICAgICAgICAnI2ZmNmQ2ZCcsXG4gICAgICAgICAgICAnI2UxNjE3MycsXG4gICAgICAgICAgICAnI2ExNDY3ZScsXG4gICAgICAgICAgICAnIzhlODZhZScsXG4gICAgICAgICAgICAnIzcyOWZjZicsXG4gICAgICAgICAgICAnIzgxYWNhNicsXG4gICAgICAgICAgICAnIzc3YmM2NScsXG4gICAgICAgICAgICAnI2Q0ZWE2YicsXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgICcjZmZmZjM4JyxcbiAgICAgICAgICAgICcjZmZkNDI4JyxcbiAgICAgICAgICAgICcjZmY4NjBkJyxcbiAgICAgICAgICAgICcjZmY1NDI5JyxcbiAgICAgICAgICAgICcjZmYzODM4JyxcbiAgICAgICAgICAgICcjZDYyZTRlJyxcbiAgICAgICAgICAgICcjOGQxZDc1JyxcbiAgICAgICAgICAgICcjNmI1ZTliJyxcbiAgICAgICAgICAgICcjNTk4M2IwJyxcbiAgICAgICAgICAgICcjNTA5MzhhJyxcbiAgICAgICAgICAgICcjM2ZhZjQ2JyxcbiAgICAgICAgICAgICcjYmJlMzNkJyxcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJyNlNmU5MDUnLFxuICAgICAgICAgICAgJyNlOGEyMDInLFxuICAgICAgICAgICAgJyNlYTc1MDAnLFxuICAgICAgICAgICAgJyNlZDRjMDUnLFxuICAgICAgICAgICAgJyNmMTBkMGMnLFxuICAgICAgICAgICAgJyNhNzA3NGInLFxuICAgICAgICAgICAgJyM3ODAzNzMnLFxuICAgICAgICAgICAgJyM1YjI3N2QnLFxuICAgICAgICAgICAgJyMzNDY1YTQnLFxuICAgICAgICAgICAgJyMxNjgyNTMnLFxuICAgICAgICAgICAgJyMwNjlhMmUnLFxuICAgICAgICAgICAgJyM1ZWI5MWUnLFxuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICAnI2FjYjIwYycsXG4gICAgICAgICAgICAnI2I0NzgwNCcsXG4gICAgICAgICAgICAnI2I4NWMwMCcsXG4gICAgICAgICAgICAnI2JlNDgwYScsXG4gICAgICAgICAgICAnI2M5MjExZScsXG4gICAgICAgICAgICAnIzg2MTE0MScsXG4gICAgICAgICAgICAnIzY1MDk1MycsXG4gICAgICAgICAgICAnIzU1MjE1YicsXG4gICAgICAgICAgICAnIzM1NTI2OScsXG4gICAgICAgICAgICAnIzFlNmEzOScsXG4gICAgICAgICAgICAnIzEyNzYyMicsXG4gICAgICAgICAgICAnIzQ2OGExYScsXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgICcjNzA2ZTBjJyxcbiAgICAgICAgICAgICcjNzg0YjA0JyxcbiAgICAgICAgICAgICcjN2IzZDAwJyxcbiAgICAgICAgICAgICcjODEzNzA5JyxcbiAgICAgICAgICAgICcjOGQyODFlJyxcbiAgICAgICAgICAgICcjNjExNzI5JyxcbiAgICAgICAgICAgICcjNGUxMDJkJyxcbiAgICAgICAgICAgICcjNDgxZDMyJyxcbiAgICAgICAgICAgICcjMzgzZDNjJyxcbiAgICAgICAgICAgICcjMjg0NzFmJyxcbiAgICAgICAgICAgICcjMjI0YjEyJyxcbiAgICAgICAgICAgICcjMzk1NTExJyxcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJyM0NDMyMDUnLFxuICAgICAgICAgICAgJyM0NzI3MDInLFxuICAgICAgICAgICAgJyM0OTIzMDAnLFxuICAgICAgICAgICAgJyM0YjIyMDQnLFxuICAgICAgICAgICAgJyM1MDIwMGMnLFxuICAgICAgICAgICAgJyM0MTE5MGQnLFxuICAgICAgICAgICAgJyMzYjE2MGUnLFxuICAgICAgICAgICAgJyMzYTFhMGYnLFxuICAgICAgICAgICAgJyMzNjI0MTMnLFxuICAgICAgICAgICAgJyMzMDI3MDknLFxuICAgICAgICAgICAgJyMyZTI3MDYnLFxuICAgICAgICAgICAgJyMzNDJhMDYnLFxuICAgICAgICBdLFxuICAgIF07XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgY29sb3JDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnBhdHRlcm4oL14jXFxwe0hleF9EaWdpdH17Nn0vdSkpO1xuICAgIHB1YmxpYyByZWFkb25seSBmb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgIGNvbG9yOiB0aGlzLmNvbG9yQ29udHJvbCxcbiAgICB9KTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIGRhdGE6IENvbG9yRGlhbG9nRGF0YSxcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxDb2xvckRpYWxvZ0NvbXBvbmVudCwgQ29sb3JEaWFsb2dEYXRhPixcbiAgICApIHtcbiAgICAgICAgdGhpcy5mb3JtLnNldFZhbHVlKGRhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXliZUNvbmZpcm0oKTogdm9pZCB7XG4gICAgICAgIGlmVmFsaWQodGhpcy5mb3JtKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jb25maXJtKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29uZmlybSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5mb3JtLnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0Q29sb3IoY29sb3I6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbG9yQ29udHJvbC5zZXRWYWx1ZShjb2xvcik7XG4gICAgICAgIHRoaXMubWF5YmVDb25maXJtKCk7XG4gICAgfVxufVxuIiwiPGgyIGkxOG4gbWF0LWRpYWxvZy10aXRsZT5Tw6lsZWN0aW9ubmVyIHVuZSBjb3VsZXVyPC9oMj5cblxuPG1hdC1kaWFsb2ctY29udGVudCBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICA8ZGl2PlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb3cgb2YgY29sb3JzXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbG9yIG9mIHJvd1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvclwiXG4gICAgICAgICAgICAgICAgW3N0eWxlXT1cIntiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yfVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdENvbG9yKGNvbG9yKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2PlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cInNlbGVjdENvbG9yKCcnKVwiPlxuICAgICAgICAgICAgPG5hdHVyYWwtaWNvbiBuYW1lPVwiZm9ybWF0X2NvbG9yX3Jlc2V0XCI+PC9uYXR1cmFsLWljb24+XG4gICAgICAgICAgICA8c3BhbiBpMThuPlRyYW5zcGFyZW50PC9zcGFuPjwvYnV0dG9uXG4gICAgICAgID5cbiAgICA8L2Rpdj5cblxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1sYWJlbCBpMThuPkNvdWxldXI8L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJjb2xvckNvbnRyb2xcIiAoa2V5ZG93bi5lbnRlcik9XCJtYXliZUNvbmZpcm0oKVwiIGNka0ZvY3VzSW5pdGlhbCAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2FtcGxlXCIgbWF0U3VmZml4IFtzdHlsZV09XCJ7YmFja2dyb3VuZENvbG9yOiBjb2xvckNvbnRyb2wudmFsaWQgPyBjb2xvckNvbnRyb2wudmFsdWUgOiAnJ31cIj48L2Rpdj5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImNvbG9yQ29udHJvbC5oYXNFcnJvcigncGF0dGVybicpXCIgaTE4blxuICAgICAgICAgICAgPkRvaXQgw6p0cmUgbGUgZm9ybWF0IGhleGFkZWNpbWFsLiBQYXIgZXhlbXBsZTogI2ZmNDAwMFxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG5cbjxtYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXQtZGlhbG9nLWNsb3NlXSBpMThuPkFubnVsZXI8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiAoY2xpY2spPVwibWF5YmVDb25maXJtKClcIiBbZGlzYWJsZWRdPVwiIWZvcm0udmFsaWRcIj48c3BhbiBpMThuPlZhbGlkZXI8L3NwYW4+PC9idXR0b24+XG48L21hdC1kaWFsb2ctYWN0aW9ucz5cbiJdfQ==
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Directive, HostBinding, Inject, Input } from '@angular/core';
|
|
2
|
+
import { DOCUMENT } from '@angular/common';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Prefix all CSS selectors with the given selector
|
|
6
|
+
*
|
|
7
|
+
* This is meant to be relatively simple and might not cover advanced CSS syntax
|
|
8
|
+
*/
|
|
9
|
+
export function prefixCss(prefix, css) {
|
|
10
|
+
prefix = '\n' + prefix + ' ';
|
|
11
|
+
return css
|
|
12
|
+
.replace(/([^{}]*){/gs, selectors => selectors
|
|
13
|
+
.split(',')
|
|
14
|
+
.map(selector => prefix + selector.trim())
|
|
15
|
+
.join(','))
|
|
16
|
+
.trim();
|
|
17
|
+
}
|
|
18
|
+
let uniqueId = 0;
|
|
19
|
+
let componentCount = 0;
|
|
20
|
+
/**
|
|
21
|
+
* Inject custom CSS into component and scope the CSS only to this component
|
|
22
|
+
*
|
|
23
|
+
* Usage :
|
|
24
|
+
*
|
|
25
|
+
* ```html
|
|
26
|
+
* <div [naturalCustomCss]=".my-class {background: red}">
|
|
27
|
+
* <p class="my-class">foo bar</p>
|
|
28
|
+
* </div>
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export class NaturalCustomCssDirective {
|
|
32
|
+
constructor(document) {
|
|
33
|
+
this.document = document;
|
|
34
|
+
this.style = null;
|
|
35
|
+
this.id = 'n' + ++uniqueId;
|
|
36
|
+
}
|
|
37
|
+
set naturalCustomCss(value) {
|
|
38
|
+
if (value && !this.style) {
|
|
39
|
+
this.style = this.document.createElement('style');
|
|
40
|
+
this.document.head.appendChild(this.style);
|
|
41
|
+
}
|
|
42
|
+
if (this.style) {
|
|
43
|
+
this.style.innerHTML = value ? prefixCss(`[data-natural-id=${this.id}]`, value) : '';
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
ngOnDestroy() {
|
|
47
|
+
this.style?.remove();
|
|
48
|
+
// Reset uniqueId if we have no component alive anymore, so that we never reach max int
|
|
49
|
+
componentCount--;
|
|
50
|
+
if (componentCount <= 0) {
|
|
51
|
+
uniqueId = 0;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
NaturalCustomCssDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NaturalCustomCssDirective, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive });
|
|
56
|
+
NaturalCustomCssDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.0", type: NaturalCustomCssDirective, selector: "[naturalCustomCss]", inputs: { naturalCustomCss: "naturalCustomCss" }, host: { properties: { "attr.data-natural-id": "this.id" } }, ngImport: i0 });
|
|
57
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NaturalCustomCssDirective, decorators: [{
|
|
58
|
+
type: Directive,
|
|
59
|
+
args: [{
|
|
60
|
+
selector: '[naturalCustomCss]',
|
|
61
|
+
}]
|
|
62
|
+
}], ctorParameters: function () { return [{ type: Document, decorators: [{
|
|
63
|
+
type: Inject,
|
|
64
|
+
args: [DOCUMENT]
|
|
65
|
+
}] }]; }, propDecorators: { id: [{
|
|
66
|
+
type: HostBinding,
|
|
67
|
+
args: ['attr.data-natural-id']
|
|
68
|
+
}], naturalCustomCss: [{
|
|
69
|
+
type: Input
|
|
70
|
+
}] } });
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWNzcy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsLWVkaXRvci9zcmMvbGliL2N1c3RvbS1jc3MvY3VzdG9tLWNzcy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7O0FBRXpDOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLE1BQWMsRUFBRSxHQUFXO0lBQ2pELE1BQU0sR0FBRyxJQUFJLEdBQUcsTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUU3QixPQUFPLEdBQUc7U0FDTCxPQUFPLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQ2hDLFNBQVM7U0FDSixLQUFLLENBQUMsR0FBRyxDQUFDO1NBQ1YsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN6QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQ2pCO1NBQ0EsSUFBSSxFQUFFLENBQUM7QUFDaEIsQ0FBQztBQUVELElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNqQixJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUM7QUFFdkI7Ozs7Ozs7Ozs7R0FVRztBQUlILE1BQU0sT0FBTyx5QkFBeUI7SUFpQmxDLFlBQXNELFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFoQmhFLFVBQUssR0FBNEIsSUFBSSxDQUFDO1FBRVEsT0FBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLFFBQVEsQ0FBQztJQWNELENBQUM7SUFaNUUsSUFDVyxnQkFBZ0IsQ0FBQyxLQUF5QjtRQUNqRCxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlDO1FBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ3hGO0lBQ0wsQ0FBQztJQUlNLFdBQVc7UUFDZCxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBRXJCLHVGQUF1RjtRQUN2RixjQUFjLEVBQUUsQ0FBQztRQUNqQixJQUFJLGNBQWMsSUFBSSxDQUFDLEVBQUU7WUFDckIsUUFBUSxHQUFHLENBQUMsQ0FBQztTQUNoQjtJQUNMLENBQUM7O3NIQTNCUSx5QkFBeUIsa0JBaUJQLFFBQVE7MEdBakIxQix5QkFBeUI7MkZBQXpCLHlCQUF5QjtrQkFIckMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsb0JBQW9CO2lCQUNqQzswREFrQm1FLFFBQVE7MEJBQXBELE1BQU07MkJBQUMsUUFBUTs0Q0FkbUIsRUFBRTtzQkFBdkQsV0FBVzt1QkFBQyxzQkFBc0I7Z0JBR3hCLGdCQUFnQjtzQkFEMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBIb3N0QmluZGluZywgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RE9DVU1FTlR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbi8qKlxuICogUHJlZml4IGFsbCBDU1Mgc2VsZWN0b3JzIHdpdGggdGhlIGdpdmVuIHNlbGVjdG9yXG4gKlxuICogVGhpcyBpcyBtZWFudCB0byBiZSByZWxhdGl2ZWx5IHNpbXBsZSBhbmQgbWlnaHQgbm90IGNvdmVyIGFkdmFuY2VkIENTUyBzeW50YXhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeENzcyhwcmVmaXg6IHN0cmluZywgY3NzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHByZWZpeCA9ICdcXG4nICsgcHJlZml4ICsgJyAnO1xuXG4gICAgcmV0dXJuIGNzc1xuICAgICAgICAucmVwbGFjZSgvKFtee31dKil7L2dzLCBzZWxlY3RvcnMgPT5cbiAgICAgICAgICAgIHNlbGVjdG9yc1xuICAgICAgICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgICAgICAgLm1hcChzZWxlY3RvciA9PiBwcmVmaXggKyBzZWxlY3Rvci50cmltKCkpXG4gICAgICAgICAgICAgICAgLmpvaW4oJywnKSxcbiAgICAgICAgKVxuICAgICAgICAudHJpbSgpO1xufVxuXG5sZXQgdW5pcXVlSWQgPSAwO1xubGV0IGNvbXBvbmVudENvdW50ID0gMDtcblxuLyoqXG4gKiBJbmplY3QgY3VzdG9tIENTUyBpbnRvIGNvbXBvbmVudCBhbmQgc2NvcGUgdGhlIENTUyBvbmx5IHRvIHRoaXMgY29tcG9uZW50XG4gKlxuICogVXNhZ2UgOlxuICpcbiAqIGBgYGh0bWxcbiAqIDxkaXYgW25hdHVyYWxDdXN0b21Dc3NdPVwiLm15LWNsYXNzIHtiYWNrZ3JvdW5kOiByZWR9XCI+XG4gKiAgICAgPHAgY2xhc3M9XCJteS1jbGFzc1wiPmZvbyBiYXI8L3A+XG4gKiA8L2Rpdj5cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tuYXR1cmFsQ3VzdG9tQ3NzXScsXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxDdXN0b21Dc3NEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgc3R5bGU6IEhUTUxTdHlsZUVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLW5hdHVyYWwtaWQnKSBwcml2YXRlIHJlYWRvbmx5IGlkID0gJ24nICsgKyt1bmlxdWVJZDtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBuYXR1cmFsQ3VzdG9tQ3NzKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHZhbHVlICYmICF0aGlzLnN0eWxlKSB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHRoaXMuc3R5bGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc3R5bGUpIHtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUuaW5uZXJIVE1MID0gdmFsdWUgPyBwcmVmaXhDc3MoYFtkYXRhLW5hdHVyYWwtaWQ9JHt0aGlzLmlkfV1gLCB2YWx1ZSkgOiAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50OiBEb2N1bWVudCkge31cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdHlsZT8ucmVtb3ZlKCk7XG5cbiAgICAgICAgLy8gUmVzZXQgdW5pcXVlSWQgaWYgd2UgaGF2ZSBubyBjb21wb25lbnQgYWxpdmUgYW55bW9yZSwgc28gdGhhdCB3ZSBuZXZlciByZWFjaCBtYXggaW50XG4gICAgICAgIGNvbXBvbmVudENvdW50LS07XG4gICAgICAgIGlmIChjb21wb25lbnRDb3VudCA8PSAwKSB7XG4gICAgICAgICAgICB1bmlxdWVJZCA9IDA7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|