@firestitch/content 12.2.1 → 12.2.2
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/app/modules/content-layouts/components/content-layouts/content-layouts.component.d.ts +1 -1
 - package/app/modules/editor/components/editor/editor.component.d.ts +15 -6
 - package/bundles/firestitch-content.umd.js +25 -8
 - package/bundles/firestitch-content.umd.js.map +1 -1
 - package/esm2015/app/modules/content-layouts/components/content-layouts/content-layouts.component.js +13 -12
 - package/esm2015/app/modules/content-pages/components/content-pages/content-pages.component.js +5 -1
 - package/esm2015/app/modules/editor/components/editor/editor.component.js +15 -4
 - package/fesm2015/firestitch-content.js +25 -8
 - package/fesm2015/firestitch-content.js.map +1 -1
 - package/package.json +1 -1
 
    
        package/app/modules/content-layouts/components/content-layouts/content-layouts.component.d.ts
    CHANGED
    
    | 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            import {  
     | 
| 
      
 1 
     | 
    
         
            +
            import { OnDestroy, OnInit } from '@angular/core';
         
     | 
| 
       2 
2 
     | 
    
         
             
            import { MatDialog } from '@angular/material/dialog';
         
     | 
| 
       3 
3 
     | 
    
         
             
            import { FsListComponent, FsListConfig } from '@firestitch/list';
         
     | 
| 
       4 
4 
     | 
    
         
             
            import { FsContentConfig } from '../../../../interfaces';
         
     | 
| 
         @@ -3,8 +3,8 @@ import { MatButtonToggleChange } from '@angular/material/button-toggle'; 
     | 
|
| 
       3 
3 
     | 
    
         
             
            import { MatDialog, MatDialogRef } from '@angular/material/dialog';
         
     | 
| 
       4 
4 
     | 
    
         
             
            import { FsFormDirective } from '@firestitch/form';
         
     | 
| 
       5 
5 
     | 
    
         
             
            import { FsMessage } from '@firestitch/message';
         
     | 
| 
       6 
     | 
    
         
            -
            import { FsTextEditorComponent } from '@firestitch/text-editor';
         
     | 
| 
       7 
     | 
    
         
            -
            import {  
     | 
| 
      
 6 
     | 
    
         
            +
            import { FsTextEditorComponent, FsTextEditorConfig } from '@firestitch/text-editor';
         
     | 
| 
      
 7 
     | 
    
         
            +
            import { Observable } from 'rxjs';
         
     | 
| 
       8 
8 
     | 
    
         
             
            import * as i0 from "@angular/core";
         
     | 
| 
       9 
9 
     | 
    
         
             
            export declare class EditorComponent implements OnInit, OnDestroy {
         
     | 
| 
       10 
10 
     | 
    
         
             
                private _data;
         
     | 
| 
         @@ -18,17 +18,26 @@ export declare class EditorComponent implements OnInit, OnDestroy { 
     | 
|
| 
       18 
18 
     | 
    
         
             
                separator: ElementRef;
         
     | 
| 
       19 
19 
     | 
    
         
             
                contentContainer: ElementRef;
         
     | 
| 
       20 
20 
     | 
    
         
             
                styleContainer: ElementRef;
         
     | 
| 
       21 
     | 
    
         
            -
                contentPage:  
     | 
| 
      
 21 
     | 
    
         
            +
                contentPage: {
         
     | 
| 
      
 22 
     | 
    
         
            +
                    id?: number;
         
     | 
| 
      
 23 
     | 
    
         
            +
                    styles?: string;
         
     | 
| 
      
 24 
     | 
    
         
            +
                    content?: string;
         
     | 
| 
      
 25 
     | 
    
         
            +
                    name?: string;
         
     | 
| 
      
 26 
     | 
    
         
            +
                };
         
     | 
| 
       22 
27 
     | 
    
         
             
                resizing: boolean;
         
     | 
| 
      
 28 
     | 
    
         
            +
                title: any;
         
     | 
| 
       23 
29 
     | 
    
         
             
                editors: {
         
     | 
| 
       24 
30 
     | 
    
         
             
                    content: boolean;
         
     | 
| 
       25 
31 
     | 
    
         
             
                    styles: boolean;
         
     | 
| 
       26 
32 
     | 
    
         
             
                };
         
     | 
| 
       27 
     | 
    
         
            -
                 
     | 
| 
      
 33 
     | 
    
         
            +
                stylesConfig: FsTextEditorConfig;
         
     | 
| 
      
 34 
     | 
    
         
            +
                contentConfig: FsTextEditorConfig;
         
     | 
| 
       28 
35 
     | 
    
         
             
                private _destroy$;
         
     | 
| 
      
 36 
     | 
    
         
            +
                private _save;
         
     | 
| 
       29 
37 
     | 
    
         
             
                constructor(_data: {
         
     | 
| 
       30 
38 
     | 
    
         
             
                    contentPage: any;
         
     | 
| 
       31 
     | 
    
         
            -
                     
     | 
| 
      
 39 
     | 
    
         
            +
                    title: string;
         
     | 
| 
      
 40 
     | 
    
         
            +
                    save: (data: any) => Observable<any>;
         
     | 
| 
       32 
41 
     | 
    
         
             
                }, _dialogRef: MatDialogRef<EditorComponent>, _dialog: MatDialog, _message: FsMessage, _cdRef: ChangeDetectorRef);
         
     | 
| 
       33 
42 
     | 
    
         
             
                ngOnInit(): void;
         
     | 
| 
       34 
43 
     | 
    
         
             
                editorToggleChange(event: MatButtonToggleChange): void;
         
     | 
| 
         @@ -36,7 +45,7 @@ export declare class EditorComponent implements OnInit, OnDestroy { 
     | 
|
| 
       36 
45 
     | 
    
         
             
                ngOnDestroy(): void;
         
     | 
| 
       37 
46 
     | 
    
         
             
                stylesChanged(): void;
         
     | 
| 
       38 
47 
     | 
    
         
             
                contentChanged(): void;
         
     | 
| 
       39 
     | 
    
         
            -
                save: () =>  
     | 
| 
      
 48 
     | 
    
         
            +
                save: () => Observable<any>;
         
     | 
| 
       40 
49 
     | 
    
         
             
                openSettings(): void;
         
     | 
| 
       41 
50 
     | 
    
         
             
                private _initSeparator;
         
     | 
| 
       42 
51 
     | 
    
         
             
                private _moveSeparator;
         
     | 
| 
         @@ -141,7 +141,7 @@ 
     | 
|
| 
       141 
141 
     | 
    
         
             
                        this.editors = { content: true, styles: true };
         
     | 
| 
       142 
142 
     | 
    
         
             
                        this._destroy$ = new rxjs.Subject();
         
     | 
| 
       143 
143 
     | 
    
         
             
                        this.save = function () {
         
     | 
| 
       144 
     | 
    
         
            -
                            return _this. 
     | 
| 
      
 144 
     | 
    
         
            +
                            return _this._save({
         
     | 
| 
       145 
145 
     | 
    
         
             
                                id: _this.contentPage.id,
         
     | 
| 
       146 
146 
     | 
    
         
             
                                styles: _this.contentPage.styles,
         
     | 
| 
       147 
147 
     | 
    
         
             
                                content: _this.contentPage.content,
         
     | 
| 
         @@ -154,8 +154,19 @@ 
     | 
|
| 
       154 
154 
     | 
    
         
             
                        };
         
     | 
| 
       155 
155 
     | 
    
         
             
                    }
         
     | 
| 
       156 
156 
     | 
    
         
             
                    EditorComponent.prototype.ngOnInit = function () {
         
     | 
| 
      
 157 
     | 
    
         
            +
                        this.stylesConfig = {
         
     | 
| 
      
 158 
     | 
    
         
            +
                            tabSize: 2,
         
     | 
| 
      
 159 
     | 
    
         
            +
                            language: 'scss',
         
     | 
| 
      
 160 
     | 
    
         
            +
                            height: '100%',
         
     | 
| 
      
 161 
     | 
    
         
            +
                        };
         
     | 
| 
      
 162 
     | 
    
         
            +
                        this.contentConfig = {
         
     | 
| 
      
 163 
     | 
    
         
            +
                            tabSize: 2,
         
     | 
| 
      
 164 
     | 
    
         
            +
                            language: 'html',
         
     | 
| 
      
 165 
     | 
    
         
            +
                            height: '100%',
         
     | 
| 
      
 166 
     | 
    
         
            +
                        };
         
     | 
| 
      
 167 
     | 
    
         
            +
                        this.title = this._data.title;
         
     | 
| 
       157 
168 
     | 
    
         
             
                        this.contentPage = this._data.contentPage;
         
     | 
| 
       158 
     | 
    
         
            -
                        this. 
     | 
| 
      
 169 
     | 
    
         
            +
                        this._save = this._data.save;
         
     | 
| 
       159 
170 
     | 
    
         
             
                        this._initSeparator();
         
     | 
| 
       160 
171 
     | 
    
         
             
                    };
         
     | 
| 
       161 
172 
     | 
    
         
             
                    EditorComponent.prototype.editorToggleChange = function (event) {
         
     | 
| 
         @@ -237,7 +248,7 @@ 
     | 
|
| 
       237 
248 
     | 
    
         
             
                    return EditorComponent;
         
     | 
| 
       238 
249 
     | 
    
         
             
                }());
         
     | 
| 
       239 
250 
     | 
    
         
             
                EditorComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: EditorComponent, deps: [{ token: i1.MAT_DIALOG_DATA }, { token: i1__namespace.MatDialogRef }, { token: i1__namespace.MatDialog }, { token: i2__namespace.FsMessage }, { token: i0__namespace.ChangeDetectorRef }], target: i0__namespace.ɵɵFactoryTarget.Component });
         
     | 
| 
       240 
     | 
    
         
            -
                EditorComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: EditorComponent, selector: "ng-component", viewQueries: [{ propertyName: "form", first: true, predicate: i7$1.FsFormDirective, descendants: true }, { propertyName: "styleEditor", first: true, predicate: ["styleEditor"], descendants: true }, { propertyName: "contentEditor", first: true, predicate: ["contentEditor"], descendants: true }, { propertyName: "separator", first: true, predicate: ["separator"], descendants: true, read: i0.ElementRef, static: true }, { propertyName: "contentContainer", first: true, predicate: ["contentContainer"], descendants: true, read: i0.ElementRef, static: true }, { propertyName: "styleContainer", first: true, predicate: ["styleContainer"], descendants: true, read: i0.ElementRef, static: true }], ngImport: i0__namespace, template: "<form fsForm [submit]=\"save\">\n  <fs-dialog>\n    <h1 mat-dialog-title>\n      <div class=\"title-container\">\n        <div class=\"title\">\n           
     | 
| 
      
 251 
     | 
    
         
            +
                EditorComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: EditorComponent, selector: "ng-component", viewQueries: [{ propertyName: "form", first: true, predicate: i7$1.FsFormDirective, descendants: true }, { propertyName: "styleEditor", first: true, predicate: ["styleEditor"], descendants: true }, { propertyName: "contentEditor", first: true, predicate: ["contentEditor"], descendants: true }, { propertyName: "separator", first: true, predicate: ["separator"], descendants: true, read: i0.ElementRef, static: true }, { propertyName: "contentContainer", first: true, predicate: ["contentContainer"], descendants: true, read: i0.ElementRef, static: true }, { propertyName: "styleContainer", first: true, predicate: ["styleContainer"], descendants: true, read: i0.ElementRef, static: true }], ngImport: i0__namespace, template: "<form fsForm [submit]=\"save\">\n  <fs-dialog>\n    <h1 mat-dialog-title>\n      <div class=\"title-container\">\n        <div class=\"title\">\n          {{title}}\n          <div class=\"small\">{{contentPage.name}}</div>   \n        </div>\n        <a\n            (click)=\"openSettings()\"\n            mat-icon-button>\n          <mat-icon>settings</mat-icon>\n        </a>   \n      </div>\n    </h1>\n    <div mat-dialog-content>\n      <div class=\"container\">\n        <div class=\"editors\" [ngClass]=\"{ resizing: resizing, 'separator-enabled': editors.styles && editors.content }\">\n          <div #contentContainer class=\"editor editor-content\" [ngClass]=\"{ 'content-enabled': editors.content }\">\n            <fs-label>HTML</fs-label>\n            <div class=\"editor-container\">\n              <fs-text-editor \n                #contentEditor\n                [(ngModel)]=\"contentPage.content\" \n                (blur)=\"contentChanged()\"\n                name=\"content\"\n                [config]=\"contentConfig\">\n              </fs-text-editor>              \n            </div>\n          </div>\n          <div  \n            #separator\n            class=\"separator\">\n            <mat-icon>drag_indicator</mat-icon>\n          </div>\n          <div \n              #styleContainer \n              class=\"editor editor-styles\" \n              [ngClass]=\"{ 'styles-enabled': editors.styles }\"\n              [style.width]=\"'600px'\">\n            <fs-label>SCSS</fs-label>\n            <div class=\"editor-container\">\n              <fs-text-editor \n                #styleEditor\n                [(ngModel)]=\"contentPage.styles\" \n                (blur)=\"stylesChanged()\"\n                name=\"styles\"\n                [config]=\"stylesConfig\">\n              </fs-text-editor>    \n            </div>\n          </div>    \n        </div>\n      </div>\n    </div>\n\n    <div mat-dialog-actions>\n      <fs-form-dialog-actions\n        [save]=\"false\"\n        [done]=\"true\">\n      </fs-form-dialog-actions>\n      <div class=\"toggles\">\n        <mat-button-toggle-group multiple>\n          <mat-button-toggle value=\"content\" [checked]=\"editors.content\" (change)=\"editorToggleChange($event)\">Content</mat-button-toggle>\n          <mat-button-toggle value=\"styles\" [checked]=\"editors.styles\" (change)=\"editorToggleChange($event)\">Styles</mat-button-toggle>\n        </mat-button-toggle-group>      \n      </div>\n    </div>\n  </fs-dialog>\n</form>\n\n", styles: ["form{display:block;height:100%}form fs-dialog{display:flex;flex-direction:column;height:100%}form ::ng-deep .mat-dialog-content{max-height:none;flex:1;overflow:hidden}.mat-dialog-actions fs-form-dialog-actions{width:auto}.mat-dialog-actions .toggles{display:flex;justify-content:flex-end;justify-self:baseline;flex:1}.container{height:100%;display:flex;flex-direction:column}.editors{width:5000px;max-width:100%;height:100%;display:flex;min-height:0}.editors:not(.separator-enabled) .separator{display:none}.editors:not(.separator-enabled) .editor{width:100%!important}.editors .separator{display:flex;align-items:center;justify-content:center;cursor:col-resize;background-color:#fff;width:40px;height:100%;-webkit-user-select:none;user-select:none;flex-shrink:0}.editors .editor{height:100%;display:flex;min-width:0;width:100%;flex-direction:column;flex-grow:1}.editors .editor.editor-styles:not(.styles-enabled),.editors .editor.editor-content:not(.content-enabled){display:none}.editors .editor .editor-container{height:100%;background:#1E1E1E;border-radius:5px}.editors .editor+.editor{margin-left:20px}.editors .editor fs-label{background-color:#fff;padding-bottom:5px}.title-container{display:flex;align-items:center}.title-container .title{flex:1}.title-container .title .small{line-height:normal}\n"], components: [{ type: i3__namespace.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileActionPlacement", "mobileWidth", "mode"] }, { type: i4__namespace$1.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab],             a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6__namespace$1.FsLabelComponent, selector: "fs-label" }, { type: i7__namespace$1.FsTextEditorComponent, selector: "fs-text-editor", inputs: ["config", "scrollable"], outputs: ["ready", "blur"] }, { type: i7__namespace.FsFormDialogActionsComponent, selector: "fs-form-dialog-actions", inputs: ["save", "create", "close", "done", "closeData", "name"] }, { type: i9__namespace$1.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-labelledby", "tabIndex", "appearance", "checked", "disabled", "id", "name", "aria-label", "value"], outputs: ["change"], exportAs: ["matButtonToggle"] }], directives: [{ type: i9__namespace.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i9__namespace.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i9__namespace.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i7__namespace.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "tabGroup", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"], exportAs: ["fsForm"] }, { type: i1__namespace.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1__namespace.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i10__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i9__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i7__namespace.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { type: i1__namespace.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i9__namespace$1.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }], changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
         
     | 
| 
       241 
252 
     | 
    
         
             
                i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: EditorComponent, decorators: [{
         
     | 
| 
       242 
253 
     | 
    
         
             
                            type: i0.Component,
         
     | 
| 
       243 
254 
     | 
    
         
             
                            args: [{
         
     | 
| 
         @@ -347,6 +358,10 @@ 
     | 
|
| 
       347 
358 
     | 
    
         
             
                            data: {
         
     | 
| 
       348 
359 
     | 
    
         
             
                                contentPage: contentPage,
         
     | 
| 
       349 
360 
     | 
    
         
             
                                config: this._config,
         
     | 
| 
      
 361 
     | 
    
         
            +
                                title: 'Page',
         
     | 
| 
      
 362 
     | 
    
         
            +
                                save: function (data) {
         
     | 
| 
      
 363 
     | 
    
         
            +
                                    return _this._config.saveContentPage(data);
         
     | 
| 
      
 364 
     | 
    
         
            +
                                },
         
     | 
| 
       350 
365 
     | 
    
         
             
                            },
         
     | 
| 
       351 
366 
     | 
    
         
             
                            maxWidth: '100vw',
         
     | 
| 
       352 
367 
     | 
    
         
             
                            maxHeight: '100vw',
         
     | 
| 
         @@ -607,11 +622,13 @@ 
     | 
|
| 
       607 
622 
     | 
    
         
             
                    FsContentLayoutsComponent.prototype.openEditor = function (contentLayout) {
         
     | 
| 
       608 
623 
     | 
    
         
             
                        var _this = this;
         
     | 
| 
       609 
624 
     | 
    
         
             
                        this._dialog.open(EditorComponent, {
         
     | 
| 
       610 
     | 
    
         
            -
                            maxWidth:  
     | 
| 
       611 
     | 
    
         
            -
                            maxHeight:  
     | 
| 
      
 625 
     | 
    
         
            +
                            maxWidth: '100vw',
         
     | 
| 
      
 626 
     | 
    
         
            +
                            maxHeight: '100vw',
         
     | 
| 
      
 627 
     | 
    
         
            +
                            width: '100%',
         
     | 
| 
      
 628 
     | 
    
         
            +
                            height: '100%',
         
     | 
| 
       612 
629 
     | 
    
         
             
                            data: {
         
     | 
| 
       613 
     | 
    
         
            -
                                 
     | 
| 
       614 
     | 
    
         
            -
                                 
     | 
| 
      
 630 
     | 
    
         
            +
                                contentPage: contentLayout,
         
     | 
| 
      
 631 
     | 
    
         
            +
                                title: 'Layout',
         
     | 
| 
       615 
632 
     | 
    
         
             
                                save: function (data) {
         
     | 
| 
       616 
633 
     | 
    
         
             
                                    return _this._config.saveContentLayout(Object.assign({ id: contentLayout.id }, data));
         
     | 
| 
       617 
634 
     | 
    
         
             
                                },
         
     | 
| 
         @@ -692,7 +709,7 @@ 
     | 
|
| 
       692 
709 
     | 
    
         
             
                    return FsContentLayoutsComponent;
         
     | 
| 
       693 
710 
     | 
    
         
             
                }());
         
     | 
| 
       694 
711 
     | 
    
         
             
                FsContentLayoutsComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsContentLayoutsComponent, deps: [{ token: FS_CONTENT_CONFIG }, { token: i1__namespace.MatDialog }], target: i0__namespace.ɵɵFactoryTarget.Component });
         
     | 
| 
       695 
     | 
    
         
            -
                FsContentLayoutsComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsContentLayoutsComponent, selector: "fs-content-layouts", viewQueries: [{ propertyName: "listComponent", first: true, predicate: i2$1.FsListComponent, descendants: true }], ngImport: i0__namespace, template: "<fs-list [config]=\"listConfig\">\n  <fs-list-column name=\" 
     | 
| 
      
 712 
     | 
    
         
            +
                FsContentLayoutsComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsContentLayoutsComponent, selector: "fs-content-layouts", viewQueries: [{ propertyName: "listComponent", first: true, predicate: i2$1.FsListComponent, descendants: true }], ngImport: i0__namespace, template: "<fs-list [config]=\"listConfig\">\n  <fs-list-column name=\"name\" title=\"Name\" [sortable]=\"true\">\n    <ng-template fs-list-cell let-row=\"row\">\n      <a (click)=\"openEditor(row)\">{{row.name}}</a>\n    </ng-template>\n  </fs-list-column>\n  <fs-list-column name=\"modify_date\" title=\"Modified\" [sortable]=\"true\">\n    <ng-template fs-list-cell let-row=\"row\">\n      {{row.modifyDate | fsDate: 'date-time-yearless'}}\n    </ng-template>\n  </fs-list-column>\n</fs-list>\n", styles: [""], components: [{ type: i2__namespace$1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }], directives: [{ type: i2__namespace$1.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i2__namespace$1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }], pipes: { "fsDate": i3__namespace$1.FsDatePipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
         
     | 
| 
       696 
713 
     | 
    
         
             
                i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsContentLayoutsComponent, decorators: [{
         
     | 
| 
       697 
714 
     | 
    
         
             
                            type: i0.Component,
         
     | 
| 
       698 
715 
     | 
    
         
             
                            args: [{
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"firestitch-content.umd.js","sources":["../../src/app/enums/page-type.enum.ts","../../src/app/consts/page-types.const.ts","../../src/app/injectors/content-config.injector.ts","../../src/app/modules/content-pages/components/content-page/content-page.component.ts","../../src/app/modules/content-pages/components/content-page/content-page.component.html","../../src/app/modules/editor/components/editor/editor.component.ts","../../src/app/modules/editor/components/editor/editor.component.html","../../src/app/modules/editor/fs-content-editor.module.ts","../../src/app/modules/content-pages/components/content-pages/content-pages.component.ts","../../src/app/modules/content-pages/components/content-pages/content-pages.component.html","../../src/app/modules/content-pages/fs-content-pages.module.ts","../../src/app/modules/content-layouts/components/content-layout/content-layout.component.ts","../../src/app/modules/content-layouts/components/content-layout/content-layout.component.html","../../src/app/modules/content-layouts/components/content-layouts/content-layouts.component.ts","../../src/app/modules/content-layouts/components/content-layouts/content-layouts.component.html","../../src/app/modules/content-layouts/fs-content-layouts.module.ts","../../src/app/modules/content/components/content-renderer/content-renderer.component.ts","../../src/app/modules/content/components/content-renderer/content-renderer.component.html","../../src/app/modules/content/components/content/content.component.ts","../../src/app/modules/content/components/content/content.component.html","../../src/app/modules/content/fs-content.module.ts","../../src/firestitch-content.ts"],"sourcesContent":["export enum PageType {\n  StandardPage = 'standardPage',\n  BlogPost = 'blogPost',\n  HomePage = 'homePage',\n  NotFoundPage = 'notFoundPage',\n}\n","import { PageType } from '../enums';\n\nexport const PageTypes = [\n  { name: 'Standard Page', value: PageType.StandardPage },\n  { name: 'Home Page', value: PageType.HomePage },\n  { name: 'Not Found Page', value: PageType.NotFoundPage },\n  { name: 'Blog Post', value: PageType.BlogPost },\n];\n","import { InjectionToken } from '@angular/core';\n\nexport const FS_CONTENT_CONFIG = new InjectionToken<any>('fs-content-config');\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Inject,\n  OnDestroy,\n  OnInit,\n  QueryList,\n  ViewChildren,\n} from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nimport { FsMessage } from '@firestitch/message';\nimport { FsTextEditorComponent } from '@firestitch/text-editor';\n\nimport { Subject, of } from 'rxjs';\nimport { switchMap, takeUntil, tap } from 'rxjs/operators';\n\nimport { PageTypes } from '../../../../consts';\nimport { FS_CONTENT_CONFIG } from '../../../../injectors';\nimport { FsContentConfig } from '../../../../interfaces';\n\n\n@Component({\n  templateUrl: './content-page.component.html',\n  styleUrls: ['./content-page.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ContentPageComponent implements OnInit, OnDestroy {\n\n  @ViewChildren(FsTextEditorComponent)\n  public textEditors: QueryList<FsTextEditorComponent>;\n\n  public contentPage = null;\n  public PageTypes = PageTypes;\n  public contentLayouts;\n  public editors = { content: true, styles: true };\n\n  private _destroy$ = new Subject<void>();\n\n  constructor(\n    @Inject(FS_CONTENT_CONFIG) private _config: FsContentConfig,\n    @Inject(MAT_DIALOG_DATA) private _data: any,\n    private _dialogRef: MatDialogRef<ContentPageComponent>,\n    private _message: FsMessage,\n    private _cdRef: ChangeDetectorRef,\n  ) {}\n\n  public ngOnInit(): void {\n    this._dialogRef.updateSize('600px');\n    this._fetchData();\n  }\n\n  public ngOnDestroy(): void {\n    this._destroy$.next();\n    this._destroy$.complete();\n  }\n\n  public save = () => {\n    return this._config.saveContentPage(this.contentPage)\n      .pipe(\n        tap((contentPage) => {\n          this._message.success('Saved Changes');\n          this._dialogRef.close(contentPage);\n        }),\n      );\n  };\n\n  private _fetchData(): void {\n    this._config.loadContentLayouts()\n      .subscribe((contentLayouts) => {\n        this.contentLayouts = contentLayouts;\n        this._cdRef.markForCheck();\n      });\n\n    of(this._data.contentPage)\n      .pipe(\n        switchMap((contentPage) => {\n          return of(contentPage);\n        }),\n        takeUntil(this._destroy$),\n      )\n      .subscribe((contentPage) => {\n        this.contentPage = {\n          ...contentPage,\n        };\n\n        this._cdRef.markForCheck();\n      });\n  }\n\n}\n","<form fsForm [submit]=\"save\" *fsSkeletonForm=\"contentPage\">\n  <fs-dialog>\n    <h1 mat-dialog-title>{{contentPage.id ? 'Page' : 'Create Page'}}</h1>\n    <div mat-dialog-content>\n      <div class=\"fs-column\">\n        <mat-form-field>\n          <mat-select\n              [(ngModel)]=\"contentPage.type\"\n              name=\"type\"\n              required\n              placeholder=\"Type\">\n            <mat-option\n                *ngFor=\"let item of PageTypes\"\n                [value]=\"item.value\">\n              {{ item.name }}\n            </mat-option>\n          </mat-select>\n        </mat-form-field>\n        <mat-form-field *ngIf=\"contentLayouts\">\n          <mat-select\n            [(ngModel)]=\"contentPage.contentLayoutId\"\n            required\n            name=\"contentLayoutId\"\n            placeholder=\"Layout\">\n              <mat-option\n                *ngFor=\"let item of contentLayouts\"\n                [value]=\"item.id\">\n                  {{ item.name }}\n              </mat-option>\n          </mat-select>\n        </mat-form-field>\n        <mat-form-field>\n          <input\n            matInput\n            [(ngModel)]=\"contentPage.name\"\n            name=\"name\"\n            required\n            placeholder=\"Name\">\n        </mat-form-field>\n        <mat-form-field>\n          <input\n            matInput\n            [(ngModel)]=\"contentPage.path\"\n            name=\"path\"\n            required\n            placeholder=\"Path\">\n        </mat-form-field>\n        <mat-form-field>\n          <input\n            matInput\n            [(ngModel)]=\"contentPage.title\"\n            name=\"title\"\n            placeholder=\"Title\">\n        </mat-form-field>\n      </div>\n    </div>\n\n    <div mat-dialog-actions>\n      <fs-form-dialog-actions>\n      </fs-form-dialog-actions>\n    </div>\n  </fs-dialog>\n</form>\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  Inject,\n  OnDestroy,\n  OnInit,\n  ViewChild,\n} from '@angular/core';\n\nimport { MatButtonToggleChange } from '@angular/material/button-toggle';\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';\n\nimport { FsFormDirective } from '@firestitch/form';\nimport { FsMessage } from '@firestitch/message';\nimport { FsTextEditorComponent } from '@firestitch/text-editor';\n\nimport { Subject, fromEvent } from 'rxjs';\nimport { finalize, take, takeUntil, tap } from 'rxjs/operators';\n\nimport { FsContentConfig } from '../../../../interfaces';\nimport { ContentPageComponent } from '../../../content-pages/components/content-page';\n\n\n@Component({\n  templateUrl: './editor.component.html',\n  styleUrls: ['./editor.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EditorComponent implements OnInit, OnDestroy {\n\n  @ViewChild(FsFormDirective)\n  public form: FsFormDirective;\n\n  @ViewChild('styleEditor')\n  public styleEditor: FsTextEditorComponent;\n\n  @ViewChild('contentEditor')\n  public contentEditor: FsTextEditorComponent;\n\n  @ViewChild('separator', { static: true, read: ElementRef })\n  public separator: ElementRef;\n\n  @ViewChild('contentContainer', { static: true, read: ElementRef })\n  public contentContainer: ElementRef;\n\n  @ViewChild('styleContainer', { static: true, read: ElementRef })\n  public styleContainer: ElementRef;\n\n  public contentPage;\n  public resizing = false;\n  public editors = { content: true, styles: true };\n\n  private _config: FsContentConfig;\n  private _destroy$ = new Subject<void>();\n\n  constructor(\n    @Inject(MAT_DIALOG_DATA) private _data: { contentPage: any; config: FsContentConfig },\n    private _dialogRef: MatDialogRef<EditorComponent>,\n    private _dialog: MatDialog,\n    private _message: FsMessage,\n    private _cdRef: ChangeDetectorRef,\n  ) {}\n\n  public ngOnInit(): void {\n    this.contentPage = this._data.contentPage;\n    this._config = this._data.config;\n    this._initSeparator();\n  }\n\n  public editorToggleChange(event: MatButtonToggleChange): void {\n    this.editors[event.value] = !this.editors[event.value];\n    this.updateEditorLayouts();\n  }\n\n  public updateEditorLayouts(): void {\n    setTimeout(() => {\n      if(this.editors.content) {\n        this.contentEditor.updateLayout();\n      }\n\n      if(this.editors.styles) {\n        this.styleEditor.updateLayout();\n      }\n    });\n  }\n\n  public ngOnDestroy(): void {\n    this._destroy$.next();\n    this._destroy$.complete();\n  }\n\n  public stylesChanged() {\n    this.form.triggerSubmit();\n  }\n\n  public contentChanged() {\n    this.form.triggerSubmit();\n  }\n\n  public save = () => {\n    return this._config.saveContentPage({\n      id: this.contentPage.id,\n      styles: this.contentPage.styles,\n      content: this.contentPage.content,\n    })\n      .pipe(\n        tap((contentPage) => {\n          this.contentPage = {\n            ...this.contentPage,\n            ...contentPage,\n          };\n          this._cdRef.markForCheck();\n          this._message.success('Saved Changes');\n        }),\n      );\n  };\n\n  public openSettings(): void {\n    this._dialog.open(ContentPageComponent, {\n      data: {\n        contentPage: this.contentPage,\n      },\n    })\n      .afterClosed()\n      .pipe(\n        takeUntil(this._destroy$),\n      )\n      .subscribe((contentPage) => {\n        this.contentPage = {\n          ...this.contentPage,\n          ...contentPage,\n        };\n        this._cdRef.markForCheck();\n      });\n  }\n\n\n  private _initSeparator(): void {\n    fromEvent(this.separator.nativeElement, 'mousedown')\n      .pipe(\n        takeUntil(this._destroy$),\n      )\n      .subscribe((e) => {\n        this._moveSeparator(e);\n      });\n  }\n\n  private _moveSeparator(separatorEvent): void {\n    let mouseDown = {\n      clientX: separatorEvent.clientX,\n      clientY: separatorEvent.clientY,\n      offsetLeft:  Number(this.separator.nativeElement.offsetLeft),\n      offsetTop:   Number(this.separator.nativeElement.offsetTop),\n      firstWidth:  Number(this.contentContainer.nativeElement.offsetWidth),\n      secondWidth: Number(this.styleContainer.nativeElement.offsetWidth),\n    };\n\n    this.resizing = true;\n    this._cdRef.markForCheck();\n\n    fromEvent(document, 'mousemove')\n      .pipe(\n        finalize(() => {\n          mouseDown = null;\n          this.resizing = false;\n          this._cdRef.markForCheck();\n          this.updateEditorLayouts();\n        }),\n        takeUntil(\n          fromEvent(this.separator.nativeElement, 'mouseup')\n            .pipe(\n              take(1),\n              takeUntil(this._destroy$),\n            ),\n        ),\n        takeUntil(this._destroy$),\n      )\n      .subscribe((e: any) => {\n        const delta = { x: e.clientX - mouseDown.clientX,\n          y: e.clientY - mouseDown.clientY };\n\n        delta.x = Math.min(Math.max(delta.x, -mouseDown.firstWidth),\n          mouseDown.secondWidth);\n\n        this.separator.nativeElement.style.left = `${mouseDown.offsetLeft + delta.x}px`;\n        this.contentContainer.nativeElement.style.width = `${mouseDown.firstWidth + delta.x}px`;\n        this.styleContainer.nativeElement.style.width = `${mouseDown.secondWidth - delta.x}px`;\n      });\n  }\n}\n","<form fsForm [submit]=\"save\">\n  <fs-dialog>\n    <h1 mat-dialog-title>\n      <div class=\"title-container\">\n        <div class=\"title\">\n          Page\n          <div class=\"small\">{{contentPage.name}}</div>   \n        </div>\n        <a\n            (click)=\"openSettings()\"\n            mat-icon-button>\n          <mat-icon>settings</mat-icon>\n        </a>   \n      </div>\n    </h1>\n    <div mat-dialog-content>\n      <div class=\"container\">\n        <div class=\"editors\" [ngClass]=\"{ resizing: resizing, 'separator-enabled': editors.styles && editors.content }\">\n          <div #contentContainer class=\"editor editor-content\" [ngClass]=\"{ 'content-enabled': editors.content }\">\n            <fs-label>Content</fs-label>\n            <div class=\"editor-container\">\n              <fs-text-editor \n                #contentEditor\n                [(ngModel)]=\"contentPage.content\" \n                (blur)=\"contentChanged()\"\n                name=\"content\"\n                [config]=\"{ tabSize: 2, language: 'html' }\">\n              </fs-text-editor>              \n            </div>\n          </div>\n          <div  \n            #separator\n            class=\"separator\">\n            <mat-icon>drag_indicator</mat-icon>\n          </div>\n          <div \n              #styleContainer \n              class=\"editor editor-styles\" \n              [ngClass]=\"{ 'styles-enabled': editors.styles }\"\n              [style.width]=\"'600px'\">\n            <fs-label>Styles</fs-label>\n            <div class=\"editor-container\">\n              <fs-text-editor \n                #styleEditor\n                [(ngModel)]=\"contentPage.styles\" \n                (blur)=\"stylesChanged()\"\n                name=\"styles\"\n                [config]=\"{  tabSize: 2, language: 'scss' }\">\n              </fs-text-editor>    \n            </div>\n          </div>    \n        </div>\n      </div>\n    </div>\n\n    <div mat-dialog-actions>\n      <fs-form-dialog-actions\n        [save]=\"false\"\n        [done]=\"true\">\n      </fs-form-dialog-actions>\n      <div class=\"toggles\">\n        <mat-button-toggle-group multiple>\n          <mat-button-toggle value=\"content\" [checked]=\"editors.content\" (change)=\"editorToggleChange($event)\">Content</mat-button-toggle>\n          <mat-button-toggle value=\"styles\" [checked]=\"editors.styles\" (change)=\"editorToggleChange($event)\">Styles</mat-button-toggle>\n        </mat-button-toggle-group>      \n      </div>\n    </div>\n  </fs-dialog>\n</form>\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FormsModule } from '@angular/forms';\n\nimport { FsListModule } from '@firestitch/list';\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { FsFormModule } from '@firestitch/form';\nimport { FsHtmlEditorModule } from '@firestitch/html-editor';\nimport { FsTextEditorModule } from '@firestitch/text-editor';\n\nimport { EditorComponent } from './components/editor';\n\n\n@NgModule({\n  imports: [\n    CommonModule,\n    FormsModule,\n\n    MatDialogModule,\n    MatButtonModule,\n    MatTabsModule,\n    MatIconModule,\n    MatButtonToggleModule,\n\n    FsListModule,\n    FsFormModule,\n    FsLabelModule,\n    FsHtmlEditorModule,\n    FsDialogModule,\n    FsTextEditorModule,\n  ],\n  exports: [\n    EditorComponent,\n  ],\n  declarations: [\n    EditorComponent,\n  ],\n})\nexport class FsContentEditorModule {\n }\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  Inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  ViewChild,\n} from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { index } from '@firestitch/common';\nimport { ItemType } from '@firestitch/filter';\nimport { FsHtmlEditorConfig } from '@firestitch/html-editor';\nimport { FsListComponent, FsListConfig } from '@firestitch/list';\n\nimport { Subject } from 'rxjs';\nimport { filter, map, takeUntil } from 'rxjs/operators';\n\nimport { PageTypes } from '../../../../consts';\nimport { PageType } from '../../../../enums';\nimport { FS_CONTENT_CONFIG } from '../../../../injectors';\nimport { FsContentConfig } from '../../../../interfaces';\nimport { EditorComponent } from '../../../editor/components/editor';\nimport { ContentPageComponent } from '../content-page';\n\n\n@Component({\n  selector: 'fs-content-pages',\n  templateUrl: './content-pages.component.html',\n  styleUrls: ['./content-pages.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsContentPagesComponent implements OnInit, OnDestroy {\n\n  @Input() public htmlEditorConfig: FsHtmlEditorConfig;\n\n  @ViewChild(FsListComponent)\n  public listComponent: FsListComponent;\n\n  public listConfig: FsListConfig;\n  public pageTypes = index(PageTypes, 'value', 'name');\n\n  private _destroy$ = new Subject<void>();\n\n  constructor(\n    @Inject(FS_CONTENT_CONFIG) private _config: FsContentConfig,\n    private _dialog: MatDialog,\n  ) {}\n\n  public ngOnInit(): void {\n    this._initListConfig();\n  }\n\n  public openEditor(contentPage: any): void {\n    this._dialog.open(EditorComponent, {\n      data: {\n        contentPage,\n        config: this._config,\n      },\n      maxWidth: '100vw',\n      maxHeight:  '100vw',\n      width: '100%',\n      height: '100%',\n      autoFocus: false,\n    })\n      .afterClosed()\n      .pipe(\n        filter((_contentPage) => !!_contentPage),\n        takeUntil(this._destroy$),\n      )\n      .subscribe(() => {\n        this.listComponent.reload();\n      });\n  }\n\n  public ngOnDestroy(): void {\n    this._destroy$.next();\n    this._destroy$.complete();\n  }\n\n  private _initListConfig(): void {\n    this.listConfig = {\n      filters: [\n        {\n          name: 'keyword',\n          type: ItemType.Keyword,\n          label: 'Search',\n        },\n      ],\n      actions: [\n        {\n          label: 'Create',\n          click: () => {\n            this._dialog.open(ContentPageComponent, {\n              data: {\n                contentPage: {\n                  type: PageType.StandardPage,\n                },\n              },\n            })\n              .afterClosed()\n              .pipe(\n                filter((contentPage) => !!contentPage),\n                takeUntil(this._destroy$),\n              )\n              .subscribe((contentPage) => {\n                this.openEditor(contentPage);\n                this.listComponent.reload();\n              });\n          },\n        },\n      ],\n      rowActions: [\n        {\n          click: (data) => {\n            return this._config.deleteContentPage(data);\n          },\n          remove: {\n            title: 'Confirm',\n            template: 'Are you sure you would like to delete this record?',\n          },\n          menu: true,\n          label: 'Delete',\n        },\n      ],\n      fetch: (query) => {\n        return this._config.loadContentPages(query)\n          .pipe(\n            map((response: any) => {\n              return { data: response.contentPages, paging: response.paging };\n            }),\n          );\n      },\n      restore: {\n        query: { state: 'deleted' },\n        filterLabel: 'Show Deleted',\n        menuLabel: 'Restore',\n        reload: true,\n        click: (row) => {\n          return this._config.saveContentPage({ id: row.id, state: 'active' });\n        },\n      },\n    };\n  }\n\n}\n\n\n","<fs-list [config]=\"listConfig\">\n  <fs-list-column name=\"name\" title=\"Name\" [sortable]=\"true\">\n    <ng-template fs-list-cell let-row=\"row\">\n      <a (click)=\"openEditor(row)\">{{row.name}}</a>\n    </ng-template>\n  </fs-list-column>\n  <fs-list-column name=\"path\" title=\"Path\" [sortable]=\"true\">\n    <ng-template fs-list-cell let-row=\"row\">\n      <a [href]=\"'/' + row.path\" target=\"_black\">/{{row.path}}</a>\n    </ng-template>\n  </fs-list-column>\n  <fs-list-column name=\"type\" title=\"Type\" [sortable]=\"true\">\n    <ng-template fs-list-cell let-row=\"row\">\n      {{pageTypes[row.type]}}\n    </ng-template>\n  </fs-list-column>\n  <fs-list-column name=\"modify_date\" title=\"Modified\" [sortable]=\"true\">\n    <ng-template fs-list-cell let-row=\"row\">\n      {{row.modifyDate | fsDate: 'date-time-yearless'}}\n    </ng-template>\n  </fs-list-column>\n</fs-list>\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTabsModule } from '@angular/material/tabs';\n\nimport { FsDateModule } from '@firestitch/date';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { FsFormModule } from '@firestitch/form';\nimport { FsHtmlEditorModule } from '@firestitch/html-editor';\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsListModule } from '@firestitch/list';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport { FsTextEditorModule } from '@firestitch/text-editor';\n\nimport { FsContentEditorModule } from '../editor';\nimport { ContentPageComponent } from './components/content-page';\nimport { FsContentPagesComponent } from './components/content-pages';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    FormsModule,\n\n    MatDialogModule,\n    MatInputModule,\n    MatFormFieldModule,\n    MatButtonModule,\n    MatTabsModule,\n    MatIconModule,\n    MatSelectModule,\n    MatButtonToggleModule,\n\n    FsListModule,\n    FsDateModule,\n    FsFormModule,\n    FsLabelModule,\n    FsSkeletonModule,\n    FsHtmlEditorModule,\n    FsDialogModule,\n    FsTextEditorModule,\n\n    FsContentEditorModule,\n  ],\n  exports: [\n    FsContentPagesComponent,\n  ],\n  declarations: [\n    FsContentPagesComponent,\n    ContentPageComponent,\n  ],\n})\nexport class FsContentPagesModule {\n  static forRoot(): ModuleWithProviders<FsContentPagesModule> {\n    return {\n      ngModule: FsContentPagesModule,\n    };\n  }\n}\n","import {\n  Component,\n  Inject,\n  OnInit,\n  OnDestroy,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  ViewChildren,\n  QueryList,\n} from '@angular/core';\n\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nimport { FsMessage } from '@firestitch/message';\nimport { FsTextEditorComponent } from '@firestitch/text-editor';\n\nimport { Subject, of } from 'rxjs';\nimport { switchMap, tap, takeUntil } from 'rxjs/operators';\n\nimport { FS_CONTENT_CONFIG } from '../../../../injectors';\nimport { FsContentConfig } from '../../../../interfaces';\n\n\n@Component({\n  templateUrl: './content-layout.component.html',\n  styleUrls: ['./content-layout.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ContentLayoutComponent implements OnInit, OnDestroy {\n\n  @ViewChildren(FsTextEditorComponent)\n  public textEditors: QueryList<FsTextEditorComponent>;\n\n  public contentLayout = null;\n  public editors = { content: true, styles: true };\n\n  private _destroy$ = new Subject<void>();\n\n  constructor(    \n    @Inject(FS_CONTENT_CONFIG) private _config: FsContentConfig,\n    @Inject(MAT_DIALOG_DATA) private _data: any,\n    private _dialogRef: MatDialogRef<ContentLayoutComponent>,\n    private _message: FsMessage,\n    private _cdRef: ChangeDetectorRef,\n  ) {}\n\n  public ngOnInit(): void {\n    this._fetchData();\n  }\n\n  public ngOnDestroy(): void {\n    this._destroy$.next();\n    this._destroy$.complete();\n  }\n\n  public save = () => {\n    return this._config.saveContentLayout(this.contentLayout)\n      .pipe(\n        tap((contentLayout) => {\n          this._message.success('Saved Changes');\n          this._dialogRef.close(contentLayout);\n        }),\n      );\n  };\n\n  private _fetchData(): void {\n    of(this._data.contentLayout)\n      .pipe(\n        switchMap((contentLayout) => {\n          return of(contentLayout);\n        }),\n        takeUntil(this._destroy$),\n      )\n      .subscribe((contentLayout) => {\n        this.contentLayout = { ...contentLayout };\n\n        this._cdRef.markForCheck();\n      });\n  }\n\n}\n","<form fsForm [submit]=\"save\" *fsSkeletonForm=\"contentLayout\">\n  <fs-dialog>\n    <h1 mat-dialog-title>{{contentLayout.id ? 'Layout' : 'Layout Page'}}</h1>\n    <div mat-dialog-content>\n      <div class=\"fs-column\">\n        <mat-form-field>\n          <input\n            matInput\n            [(ngModel)]=\"contentLayout.name\"\n            name=\"name\"\n            required\n            placeholder=\"Name\">\n        </mat-form-field>\n        <mat-form-field>\n          <input\n            matInput\n            [(ngModel)]=\"contentLayout.tag\"\n            name=\"tag\"\n            placeholder=\"Tag\">\n        </mat-form-field>\n      </div>\n    </div>\n\n    <div mat-dialog-actions>\n      <fs-form-dialog-actions>\n      </fs-form-dialog-actions>\n    </div>\n  </fs-dialog>\n</form>\n","import {\n  Component,\n  OnInit,\n  ViewChild,\n  ChangeDetectionStrategy,\n  OnDestroy,\n  Inject,\n} from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { FsListComponent, FsListConfig } from '@firestitch/list';\nimport { ItemType } from '@firestitch/filter';\n\nimport { map, takeUntil, filter } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\n\nimport { ContentLayoutComponent } from '../../components/content-layout';\nimport { FS_CONTENT_CONFIG } from '../../../../injectors';\nimport { FsContentConfig } from '../../../../interfaces';\nimport { EditorComponent } from '../../../editor/components/editor';\n\n\n@Component({\n  selector: 'fs-content-layouts',\n  templateUrl: './content-layouts.component.html',\n  styleUrls: ['./content-layouts.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsContentLayoutsComponent implements OnInit, OnDestroy {\n\n  @ViewChild(FsListComponent)\n  public listComponent: FsListComponent;\n\n  public listConfig: FsListConfig;\n\n  private _destroy$ = new Subject<void>();\n\n  constructor(\n    @Inject(FS_CONTENT_CONFIG) private _config: FsContentConfig,\n    private _dialog: MatDialog,\n  ) {}\n\n  public ngOnInit(): void {\n    this._initListConfig();\n  }\n\n  public openEditor(contentLayout: any): void {\n    this._dialog.open(EditorComponent, {\n        maxWidth: null,\n        maxHeight: null,      \n        data: {\n          styles: contentLayout.styles,\n          content: contentLayout.content,\n          save: (data) => {\n            return this._config.saveContentLayout({\n              id: contentLayout.id,\n              ...data,\n            });\n          },\n        },\n      })\n        .afterClosed()\n        .pipe(\n          takeUntil(this._destroy$),\n        )        \n        .subscribe(() => {\n          this.listComponent.reload();\n        });\n  }\n\n  public openLayout(contentLayout: any): void {\n    this._dialog.open(ContentLayoutComponent, {\n      data: {\n        contentLayout,\n      },\n    })\n      .afterClosed()\n      .pipe(\n        filter((_contentLayout) => !!_contentLayout),\n        takeUntil(this._destroy$),\n      )\n      .subscribe(() => {\n        this.listComponent.reload();\n      });\n  }\n\n  public ngOnDestroy(): void {\n    this._destroy$.next();\n    this._destroy$.complete();\n  }\n\n  private _initListConfig(): void {\n    this.listConfig = {\n      paging: false,\n      filters: [\n        {\n          name: 'keyword',\n          type: ItemType.Keyword,\n          label: 'Search',\n        },\n      ],\n      actions: [\n        {\n          label: 'Create',\n          click: () => {\n            this.openLayout({});\n          },\n        },\n      ],\n      rowActions: [\n        {\n          click: (data) => {\n            return this._config.deleteContentLayout(data);\n          },\n          remove: {\n            title: 'Confirm',\n            template: 'Are you sure you would like to delete this record?',\n          },\n          menu: true,\n          label: 'Delete',\n        },\n      ],\n      fetch: (query) => {\n        return this._config.loadContentLayouts(query)\n          .pipe(\n            map((contentLayouts: any) => {\n              return { data: contentLayouts  };\n            }),\n          );\n      },\n      restore: {\n        query: { state: 'deleted' },\n        filterLabel: 'Show Deleted',\n        menuLabel: 'Restore',\n        reload: true,\n        click: (row) => {\n          return this._config.saveContentLayout({ id: row.id, state: 'active' });\n        },\n      },\n    };\n  }\n\n}\n\n","<fs-list [config]=\"listConfig\">\n  <fs-list-column name=\"design\" width=\"1%\">\n    <ng-template fs-list-cell let-row=\"row\">\n      <a (click)=\"openEditor(row)\"><mat-icon>design_services</mat-icon></a>\n    </ng-template>\n  </fs-list-column>\n  <fs-list-column name=\"name\" title=\"Name\" [sortable]=\"true\">\n    <ng-template fs-list-cell let-row=\"row\">\n      <a (click)=\"openLayout(row)\">{{row.name}}</a>\n    </ng-template>\n  </fs-list-column>\n  <fs-list-column name=\"modify_date\" title=\"Modified\" [sortable]=\"true\">\n    <ng-template fs-list-cell let-row=\"row\">\n      {{row.modifyDate | fsDate: 'date-time-yearless'}}\n    </ng-template>\n  </fs-list-column>\n</fs-list>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTabsModule } from '@angular/material/tabs';\n\nimport { FsDateModule } from '@firestitch/date';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { FsFormModule } from '@firestitch/form';\nimport { FsHtmlEditorModule } from '@firestitch/html-editor';\nimport { FsListModule } from '@firestitch/list';\nimport { FsTextEditorModule } from '@firestitch/text-editor';\n\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport { FsContentEditorModule } from '../editor';\nimport { ContentLayoutComponent } from './components/content-layout';\nimport { FsContentLayoutsComponent } from './components/content-layouts';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    FormsModule,\n\n    MatDialogModule,\n    MatInputModule,\n    MatFormFieldModule,\n    MatButtonModule,\n    MatTabsModule,\n    MatIconModule,\n    MatSelectModule,\n    MatButtonToggleModule,\n\n    FsListModule,\n    FsDateModule,\n    FsFormModule,\n    FsLabelModule,\n    FsSkeletonModule,\n    FsHtmlEditorModule,\n    FsDialogModule,\n    FsTextEditorModule,\n\n    FsContentEditorModule,\n  ],\n  exports: [\n    FsContentLayoutsComponent,\n  ],\n  declarations: [\n    ContentLayoutComponent,\n    FsContentLayoutsComponent,\n  ],\n})\nexport class FsContentLayoutsModule {\n}\n","import {\n  Component,\n  ChangeDetectionStrategy,\n  OnDestroy,\n  ElementRef,\n  Input,\n  AfterViewChecked,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { Router } from '@angular/router';\n\nimport { Subject } from 'rxjs';\n\n\n@Component({\n  selector: 'fs-content-renderer',\n  templateUrl: './content-renderer.component.html',\n  styleUrls: ['./content-renderer.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ContentRendererComponent implements OnDestroy, AfterViewChecked {\n\n  @Input() public set contentPage(contentPage) {\n    if(contentPage) {\n      this.content = this._sanitizer.bypassSecurityTrustHtml(contentPage.content);\n      this.styles = contentPage.styles;\n    }\n  }\n\n  public content;\n  public styles;\n  public _destroy$ = new Subject();\n\n  constructor(\n    private _sanitizer: DomSanitizer,\n    private _router: Router,\n    private _el: ElementRef,\n  ) {}\n\n  public ngAfterViewChecked(): void {\n    let el = document.querySelector('#contentPageStyles');\n    if(!el) {\n      el = document.createElement('style');\n      el.setAttribute('id','contentPageStyles');\n      document.getElementsByTagName('head')[0].appendChild(el);\n    }\n\n    el.innerHTML = this.styles;\n\n    this.registerHrefs();\n  }\n\n  public registerHrefs(): void {\n    Array.from(this.el.querySelectorAll('a[href]'))\n      .filter((el: Element) => {\n        return el.getAttribute('href').match(/^\\//);\n      })\n      .forEach((el: Element) => {\n        el.addEventListener('click',(event: MouseEvent) => {\n          if(!event.shiftKey && !event.ctrlKey) {\n            event.preventDefault();\n            const href = el.getAttribute('href');\n            this._router.navigateByUrl(href);\n          }\n        });\n      });\n  }\n\n  public get el(): any {\n    return this._el.nativeElement;\n  }\n\n  public ngOnDestroy(): void {\n    this.removeStyles();\n    this._destroy$.next();\n    this._destroy$.complete();\n  }\n\n  public removeStyles(): void {\n    const el = document.querySelector('#contentPageStyles');\n    if(el) {\n      el.remove();\n    }\n  }\n\n}\n","<div *ngIf=\"content\" [innerHTML]=\"content\"></div>\n","import {\n  Component,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  OnInit,\n  OnDestroy,\n  ElementRef,\n  Inject,\n} from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { NavigationEnd, Router } from '@angular/router';\n\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { FS_CONTENT_CONFIG } from '../../../../injectors';\nimport { FsContentConfig } from '../../../../interfaces';\n\n\n@Component({\n  selector: 'fs-content',\n  templateUrl: './content.component.html',\n  styleUrls: ['./content.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsContentComponent implements OnInit, OnDestroy {\n\n  public contentPage;\n  \n  private _destroy$ = new Subject();\n\n  constructor(\n    @Inject(FS_CONTENT_CONFIG) private _config: FsContentConfig,\n    private _title: Title,\n    private _cdRef: ChangeDetectorRef,\n    private _router: Router,\n    private _el: ElementRef,\n  ) {}\n\n  public ngOnInit(): void {\n    this.load();\n\n    this._router.events\n      .pipe(\n        filter((e) => e instanceof NavigationEnd),\n        takeUntil(this._destroy$),\n      )\n      .subscribe(() => {\n        this.load();\n      });\n  }\n\n  public load(): void {\n    const path = (window as any).location.pathname;\n    this._config.loadContent(path)\n      .subscribe((contentPage) => {\n        if(contentPage.title) {\n          this._title.setTitle(contentPage.title);\n\n          let ogTitleEl = document.querySelector('head meta[property=\"og:title\"]');\n          if(!ogTitleEl) {\n            ogTitleEl = document.createElement('meta');\n            ogTitleEl.setAttribute('property','og:title');\n            document.getElementsByTagName('head')[0].appendChild(ogTitleEl);\n          }\n\n          ogTitleEl.setAttribute('content',contentPage.title);\n        }\n\n        this.contentPage = contentPage;\n        this._cdRef.markForCheck();\n      });\n  }\n\n  public get el(): any {\n    return this._el.nativeElement;\n  }\n\n  public ngOnDestroy(): void {\n    this._destroy$.next();\n    this._destroy$.complete();\n    this._title.setTitle('');\n  }\n\n}\n","<fs-content-renderer *ngIf=\"contentPage\" [contentPage]=\"contentPage\"></fs-content-renderer>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FsHtmlEditorModule } from '@firestitch/html-editor';\n\nimport { FsContentComponent } from './components/content';\nimport { ContentRendererComponent } from './components/content-renderer';\n\n\n\n@NgModule({\n  imports: [\n    CommonModule,\n\n    FsHtmlEditorModule,\n  ],\n  exports: [\n    FsContentComponent,\n  ],\n  declarations: [\n    FsContentComponent,\n    ContentRendererComponent,\n  ],\n})\nexport class FsContentModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["InjectionToken","Subject","tap","of","switchMap","takeUntil","MAT_DIALOG_DATA","FsTextEditorComponent","Component","ChangeDetectionStrategy","Inject","ViewChildren","fromEvent","finalize","take","FsFormDirective","ElementRef","ViewChild","CommonModule","FormsModule","MatDialogModule","MatButtonModule","MatTabsModule","MatIconModule","MatButtonToggleModule","FsListModule","FsFormModule","FsLabelModule","FsHtmlEditorModule","FsDialogModule","FsTextEditorModule","NgModule","index","filter","ItemType","map","FsListComponent","Input","MatInputModule","MatFormFieldModule","MatSelectModule","FsDateModule","FsSkeletonModule","NavigationEnd"],"mappings":"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"}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"firestitch-content.umd.js","sources":["../../src/app/enums/page-type.enum.ts","../../src/app/consts/page-types.const.ts","../../src/app/injectors/content-config.injector.ts","../../src/app/modules/content-pages/components/content-page/content-page.component.ts","../../src/app/modules/content-pages/components/content-page/content-page.component.html","../../src/app/modules/editor/components/editor/editor.component.ts","../../src/app/modules/editor/components/editor/editor.component.html","../../src/app/modules/editor/fs-content-editor.module.ts","../../src/app/modules/content-pages/components/content-pages/content-pages.component.ts","../../src/app/modules/content-pages/components/content-pages/content-pages.component.html","../../src/app/modules/content-pages/fs-content-pages.module.ts","../../src/app/modules/content-layouts/components/content-layout/content-layout.component.ts","../../src/app/modules/content-layouts/components/content-layout/content-layout.component.html","../../src/app/modules/content-layouts/components/content-layouts/content-layouts.component.ts","../../src/app/modules/content-layouts/components/content-layouts/content-layouts.component.html","../../src/app/modules/content-layouts/fs-content-layouts.module.ts","../../src/app/modules/content/components/content-renderer/content-renderer.component.ts","../../src/app/modules/content/components/content-renderer/content-renderer.component.html","../../src/app/modules/content/components/content/content.component.ts","../../src/app/modules/content/components/content/content.component.html","../../src/app/modules/content/fs-content.module.ts","../../src/firestitch-content.ts"],"sourcesContent":["export enum PageType {\n  StandardPage = 'standardPage',\n  BlogPost = 'blogPost',\n  HomePage = 'homePage',\n  NotFoundPage = 'notFoundPage',\n}\n","import { PageType } from '../enums';\n\nexport const PageTypes = [\n  { name: 'Standard Page', value: PageType.StandardPage },\n  { name: 'Home Page', value: PageType.HomePage },\n  { name: 'Not Found Page', value: PageType.NotFoundPage },\n  { name: 'Blog Post', value: PageType.BlogPost },\n];\n","import { InjectionToken } from '@angular/core';\n\nexport const FS_CONTENT_CONFIG = new InjectionToken<any>('fs-content-config');\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Inject,\n  OnDestroy,\n  OnInit,\n  QueryList,\n  ViewChildren,\n} from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nimport { FsMessage } from '@firestitch/message';\nimport { FsTextEditorComponent } from '@firestitch/text-editor';\n\nimport { Subject, of } from 'rxjs';\nimport { switchMap, takeUntil, tap } from 'rxjs/operators';\n\nimport { PageTypes } from '../../../../consts';\nimport { FS_CONTENT_CONFIG } from '../../../../injectors';\nimport { FsContentConfig } from '../../../../interfaces';\n\n\n@Component({\n  templateUrl: './content-page.component.html',\n  styleUrls: ['./content-page.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ContentPageComponent implements OnInit, OnDestroy {\n\n  @ViewChildren(FsTextEditorComponent)\n  public textEditors: QueryList<FsTextEditorComponent>;\n\n  public contentPage = null;\n  public PageTypes = PageTypes;\n  public contentLayouts;\n  public editors = { content: true, styles: true };\n\n  private _destroy$ = new Subject<void>();\n\n  constructor(\n    @Inject(FS_CONTENT_CONFIG) private _config: FsContentConfig,\n    @Inject(MAT_DIALOG_DATA) private _data: any,\n    private _dialogRef: MatDialogRef<ContentPageComponent>,\n    private _message: FsMessage,\n    private _cdRef: ChangeDetectorRef,\n  ) {}\n\n  public ngOnInit(): void {\n    this._dialogRef.updateSize('600px');\n    this._fetchData();\n  }\n\n  public ngOnDestroy(): void {\n    this._destroy$.next();\n    this._destroy$.complete();\n  }\n\n  public save = () => {\n    return this._config.saveContentPage(this.contentPage)\n      .pipe(\n        tap((contentPage) => {\n          this._message.success('Saved Changes');\n          this._dialogRef.close(contentPage);\n        }),\n      );\n  };\n\n  private _fetchData(): void {\n    this._config.loadContentLayouts()\n      .subscribe((contentLayouts) => {\n        this.contentLayouts = contentLayouts;\n        this._cdRef.markForCheck();\n      });\n\n    of(this._data.contentPage)\n      .pipe(\n        switchMap((contentPage) => {\n          return of(contentPage);\n        }),\n        takeUntil(this._destroy$),\n      )\n      .subscribe((contentPage) => {\n        this.contentPage = {\n          ...contentPage,\n        };\n\n        this._cdRef.markForCheck();\n      });\n  }\n\n}\n","<form fsForm [submit]=\"save\" *fsSkeletonForm=\"contentPage\">\n  <fs-dialog>\n    <h1 mat-dialog-title>{{contentPage.id ? 'Page' : 'Create Page'}}</h1>\n    <div mat-dialog-content>\n      <div class=\"fs-column\">\n        <mat-form-field>\n          <mat-select\n              [(ngModel)]=\"contentPage.type\"\n              name=\"type\"\n              required\n              placeholder=\"Type\">\n            <mat-option\n                *ngFor=\"let item of PageTypes\"\n                [value]=\"item.value\">\n              {{ item.name }}\n            </mat-option>\n          </mat-select>\n        </mat-form-field>\n        <mat-form-field *ngIf=\"contentLayouts\">\n          <mat-select\n            [(ngModel)]=\"contentPage.contentLayoutId\"\n            required\n            name=\"contentLayoutId\"\n            placeholder=\"Layout\">\n              <mat-option\n                *ngFor=\"let item of contentLayouts\"\n                [value]=\"item.id\">\n                  {{ item.name }}\n              </mat-option>\n          </mat-select>\n        </mat-form-field>\n        <mat-form-field>\n          <input\n            matInput\n            [(ngModel)]=\"contentPage.name\"\n            name=\"name\"\n            required\n            placeholder=\"Name\">\n        </mat-form-field>\n        <mat-form-field>\n          <input\n            matInput\n            [(ngModel)]=\"contentPage.path\"\n            name=\"path\"\n            required\n            placeholder=\"Path\">\n        </mat-form-field>\n        <mat-form-field>\n          <input\n            matInput\n            [(ngModel)]=\"contentPage.title\"\n            name=\"title\"\n            placeholder=\"Title\">\n        </mat-form-field>\n      </div>\n    </div>\n\n    <div mat-dialog-actions>\n      <fs-form-dialog-actions>\n      </fs-form-dialog-actions>\n    </div>\n  </fs-dialog>\n</form>\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  Inject,\n  OnDestroy,\n  OnInit,\n  ViewChild,\n} from '@angular/core';\n\nimport { MatButtonToggleChange } from '@angular/material/button-toggle';\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';\n\nimport { FsFormDirective } from '@firestitch/form';\nimport { FsMessage } from '@firestitch/message';\nimport { FsTextEditorComponent, FsTextEditorConfig } from '@firestitch/text-editor';\n\nimport { Observable, Subject, fromEvent } from 'rxjs';\nimport { finalize, take, takeUntil, tap } from 'rxjs/operators';\n\n\nimport { ContentPageComponent } from '../../../content-pages/components/content-page';\n\n\n@Component({\n  templateUrl: './editor.component.html',\n  styleUrls: ['./editor.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EditorComponent implements OnInit, OnDestroy {\n\n  @ViewChild(FsFormDirective)\n  public form: FsFormDirective;\n\n  @ViewChild('styleEditor')\n  public styleEditor: FsTextEditorComponent;\n\n  @ViewChild('contentEditor')\n  public contentEditor: FsTextEditorComponent;\n\n  @ViewChild('separator', { static: true, read: ElementRef })\n  public separator: ElementRef;\n\n  @ViewChild('contentContainer', { static: true, read: ElementRef })\n  public contentContainer: ElementRef;\n\n  @ViewChild('styleContainer', { static: true, read: ElementRef })\n  public styleContainer: ElementRef;\n\n  public contentPage: {\n    id?: number;\n    styles?: string;\n    content?: string;\n    name?: string;\n  };\n\n  public resizing = false;\n  public title;\n  public editors = { content: true, styles: true };\n  public stylesConfig: FsTextEditorConfig;\n  public contentConfig: FsTextEditorConfig;\n\n  private _destroy$ = new Subject<void>();\n  private _save: (data) => Observable<any>;\n\n  constructor(\n    @Inject(MAT_DIALOG_DATA) private _data: {\n      contentPage: any;\n      title: string;\n      save: (data) => Observable<any>;\n    },\n    private _dialogRef: MatDialogRef<EditorComponent>,\n    private _dialog: MatDialog,\n    private _message: FsMessage,\n    private _cdRef: ChangeDetectorRef,\n  ) {}\n\n  public ngOnInit(): void {\n    this.stylesConfig = {\n      tabSize: 2,\n      language: 'scss',\n      height: '100%',\n    };\n    this.contentConfig = {\n      tabSize: 2,\n      language: 'html',\n      height: '100%',\n    };\n    this.title = this._data.title;\n    this.contentPage = this._data.contentPage;\n    this._save = this._data.save;\n    this._initSeparator();\n  }\n\n  public editorToggleChange(event: MatButtonToggleChange): void {\n    this.editors[event.value] = !this.editors[event.value];\n    this.updateEditorLayouts();\n  }\n\n  public updateEditorLayouts(): void {\n    setTimeout(() => {\n      if(this.editors.content) {\n        this.contentEditor.updateLayout();\n      }\n\n      if(this.editors.styles) {\n        this.styleEditor.updateLayout();\n      }\n    });\n  }\n\n  public ngOnDestroy(): void {\n    this._destroy$.next();\n    this._destroy$.complete();\n  }\n\n  public stylesChanged() {\n    this.form.triggerSubmit();\n  }\n\n  public contentChanged() {\n    this.form.triggerSubmit();\n  }\n\n  public save = () => {\n    return this._save({\n      id: this.contentPage.id,\n      styles: this.contentPage.styles,\n      content: this.contentPage.content,\n    })\n      .pipe(\n        tap((contentPage) => {\n          this.contentPage = {\n            ...this.contentPage,\n            ...contentPage,\n          };\n          this._cdRef.markForCheck();\n          this._message.success('Saved Changes');\n        }),\n      );\n  };\n\n  public openSettings(): void {\n    this._dialog.open(ContentPageComponent, {\n      data: {\n        contentPage: this.contentPage,\n      },\n    })\n      .afterClosed()\n      .pipe(\n        takeUntil(this._destroy$),\n      )\n      .subscribe((contentPage) => {\n        this.contentPage = {\n          ...this.contentPage,\n          ...contentPage,\n        };\n        this._cdRef.markForCheck();\n      });\n  }\n\n\n  private _initSeparator(): void {\n    fromEvent(this.separator.nativeElement, 'mousedown')\n      .pipe(\n        takeUntil(this._destroy$),\n      )\n      .subscribe((e) => {\n        this._moveSeparator(e);\n      });\n  }\n\n  private _moveSeparator(separatorEvent): void {\n    let mouseDown = {\n      clientX: separatorEvent.clientX,\n      clientY: separatorEvent.clientY,\n      offsetLeft:  Number(this.separator.nativeElement.offsetLeft),\n      offsetTop:   Number(this.separator.nativeElement.offsetTop),\n      firstWidth:  Number(this.contentContainer.nativeElement.offsetWidth),\n      secondWidth: Number(this.styleContainer.nativeElement.offsetWidth),\n    };\n\n    this.resizing = true;\n    this._cdRef.markForCheck();\n\n    fromEvent(document, 'mousemove')\n      .pipe(\n        finalize(() => {\n          mouseDown = null;\n          this.resizing = false;\n          this._cdRef.markForCheck();\n          this.updateEditorLayouts();\n        }),\n        takeUntil(\n          fromEvent(this.separator.nativeElement, 'mouseup')\n            .pipe(\n              take(1),\n              takeUntil(this._destroy$),\n            ),\n        ),\n        takeUntil(this._destroy$),\n      )\n      .subscribe((e: any) => {\n        const delta = { x: e.clientX - mouseDown.clientX,\n          y: e.clientY - mouseDown.clientY };\n\n        delta.x = Math.min(Math.max(delta.x, -mouseDown.firstWidth),\n          mouseDown.secondWidth);\n\n        this.separator.nativeElement.style.left = `${mouseDown.offsetLeft + delta.x}px`;\n        this.contentContainer.nativeElement.style.width = `${mouseDown.firstWidth + delta.x}px`;\n        this.styleContainer.nativeElement.style.width = `${mouseDown.secondWidth - delta.x}px`;\n      });\n  }\n}\n","<form fsForm [submit]=\"save\">\n  <fs-dialog>\n    <h1 mat-dialog-title>\n      <div class=\"title-container\">\n        <div class=\"title\">\n          {{title}}\n          <div class=\"small\">{{contentPage.name}}</div>   \n        </div>\n        <a\n            (click)=\"openSettings()\"\n            mat-icon-button>\n          <mat-icon>settings</mat-icon>\n        </a>   \n      </div>\n    </h1>\n    <div mat-dialog-content>\n      <div class=\"container\">\n        <div class=\"editors\" [ngClass]=\"{ resizing: resizing, 'separator-enabled': editors.styles && editors.content }\">\n          <div #contentContainer class=\"editor editor-content\" [ngClass]=\"{ 'content-enabled': editors.content }\">\n            <fs-label>HTML</fs-label>\n            <div class=\"editor-container\">\n              <fs-text-editor \n                #contentEditor\n                [(ngModel)]=\"contentPage.content\" \n                (blur)=\"contentChanged()\"\n                name=\"content\"\n                [config]=\"contentConfig\">\n              </fs-text-editor>              \n            </div>\n          </div>\n          <div  \n            #separator\n            class=\"separator\">\n            <mat-icon>drag_indicator</mat-icon>\n          </div>\n          <div \n              #styleContainer \n              class=\"editor editor-styles\" \n              [ngClass]=\"{ 'styles-enabled': editors.styles }\"\n              [style.width]=\"'600px'\">\n            <fs-label>SCSS</fs-label>\n            <div class=\"editor-container\">\n              <fs-text-editor \n                #styleEditor\n                [(ngModel)]=\"contentPage.styles\" \n                (blur)=\"stylesChanged()\"\n                name=\"styles\"\n                [config]=\"stylesConfig\">\n              </fs-text-editor>    \n            </div>\n          </div>    \n        </div>\n      </div>\n    </div>\n\n    <div mat-dialog-actions>\n      <fs-form-dialog-actions\n        [save]=\"false\"\n        [done]=\"true\">\n      </fs-form-dialog-actions>\n      <div class=\"toggles\">\n        <mat-button-toggle-group multiple>\n          <mat-button-toggle value=\"content\" [checked]=\"editors.content\" (change)=\"editorToggleChange($event)\">Content</mat-button-toggle>\n          <mat-button-toggle value=\"styles\" [checked]=\"editors.styles\" (change)=\"editorToggleChange($event)\">Styles</mat-button-toggle>\n        </mat-button-toggle-group>      \n      </div>\n    </div>\n  </fs-dialog>\n</form>\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FormsModule } from '@angular/forms';\n\nimport { FsListModule } from '@firestitch/list';\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { FsFormModule } from '@firestitch/form';\nimport { FsHtmlEditorModule } from '@firestitch/html-editor';\nimport { FsTextEditorModule } from '@firestitch/text-editor';\n\nimport { EditorComponent } from './components/editor';\n\n\n@NgModule({\n  imports: [\n    CommonModule,\n    FormsModule,\n\n    MatDialogModule,\n    MatButtonModule,\n    MatTabsModule,\n    MatIconModule,\n    MatButtonToggleModule,\n\n    FsListModule,\n    FsFormModule,\n    FsLabelModule,\n    FsHtmlEditorModule,\n    FsDialogModule,\n    FsTextEditorModule,\n  ],\n  exports: [\n    EditorComponent,\n  ],\n  declarations: [\n    EditorComponent,\n  ],\n})\nexport class FsContentEditorModule {\n }\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  Inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  ViewChild,\n} from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { index } from '@firestitch/common';\nimport { ItemType } from '@firestitch/filter';\nimport { FsHtmlEditorConfig } from '@firestitch/html-editor';\nimport { FsListComponent, FsListConfig } from '@firestitch/list';\n\nimport { Subject } from 'rxjs';\nimport { filter, map, takeUntil } from 'rxjs/operators';\n\nimport { PageTypes } from '../../../../consts';\nimport { PageType } from '../../../../enums';\nimport { FS_CONTENT_CONFIG } from '../../../../injectors';\nimport { FsContentConfig } from '../../../../interfaces';\nimport { EditorComponent } from '../../../editor/components/editor';\nimport { ContentPageComponent } from '../content-page';\n\n\n@Component({\n  selector: 'fs-content-pages',\n  templateUrl: './content-pages.component.html',\n  styleUrls: ['./content-pages.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsContentPagesComponent implements OnInit, OnDestroy {\n\n  @Input() public htmlEditorConfig: FsHtmlEditorConfig;\n\n  @ViewChild(FsListComponent)\n  public listComponent: FsListComponent;\n\n  public listConfig: FsListConfig;\n  public pageTypes = index(PageTypes, 'value', 'name');\n\n  private _destroy$ = new Subject<void>();\n\n  constructor(\n    @Inject(FS_CONTENT_CONFIG) private _config: FsContentConfig,\n    private _dialog: MatDialog,\n  ) {}\n\n  public ngOnInit(): void {\n    this._initListConfig();\n  }\n\n  public openEditor(contentPage: any): void {\n    this._dialog.open(EditorComponent, {\n      data: {\n        contentPage,\n        config: this._config,\n        title: 'Page',\n        save: (data) => {\n          return this._config.saveContentPage(data);\n        },\n      },\n      maxWidth: '100vw',\n      maxHeight:  '100vw',\n      width: '100%',\n      height: '100%',\n      autoFocus: false,\n    })\n      .afterClosed()\n      .pipe(\n        filter((_contentPage) => !!_contentPage),\n        takeUntil(this._destroy$),\n      )\n      .subscribe(() => {\n        this.listComponent.reload();\n      });\n  }\n\n  public ngOnDestroy(): void {\n    this._destroy$.next();\n    this._destroy$.complete();\n  }\n\n  private _initListConfig(): void {\n    this.listConfig = {\n      filters: [\n        {\n          name: 'keyword',\n          type: ItemType.Keyword,\n          label: 'Search',\n        },\n      ],\n      actions: [\n        {\n          label: 'Create',\n          click: () => {\n            this._dialog.open(ContentPageComponent, {\n              data: {\n                contentPage: {\n                  type: PageType.StandardPage,\n                },\n              },\n            })\n              .afterClosed()\n              .pipe(\n                filter((contentPage) => !!contentPage),\n                takeUntil(this._destroy$),\n              )\n              .subscribe((contentPage) => {\n                this.openEditor(contentPage);\n                this.listComponent.reload();\n              });\n          },\n        },\n      ],\n      rowActions: [\n        {\n          click: (data) => {\n            return this._config.deleteContentPage(data);\n          },\n          remove: {\n            title: 'Confirm',\n            template: 'Are you sure you would like to delete this record?',\n          },\n          menu: true,\n          label: 'Delete',\n        },\n      ],\n      fetch: (query) => {\n        return this._config.loadContentPages(query)\n          .pipe(\n            map((response: any) => {\n              return { data: response.contentPages, paging: response.paging };\n            }),\n          );\n      },\n      restore: {\n        query: { state: 'deleted' },\n        filterLabel: 'Show Deleted',\n        menuLabel: 'Restore',\n        reload: true,\n        click: (row) => {\n          return this._config.saveContentPage({ id: row.id, state: 'active' });\n        },\n      },\n    };\n  }\n\n}\n\n\n","<fs-list [config]=\"listConfig\">\n  <fs-list-column name=\"name\" title=\"Name\" [sortable]=\"true\">\n    <ng-template fs-list-cell let-row=\"row\">\n      <a (click)=\"openEditor(row)\">{{row.name}}</a>\n    </ng-template>\n  </fs-list-column>\n  <fs-list-column name=\"path\" title=\"Path\" [sortable]=\"true\">\n    <ng-template fs-list-cell let-row=\"row\">\n      <a [href]=\"'/' + row.path\" target=\"_black\">/{{row.path}}</a>\n    </ng-template>\n  </fs-list-column>\n  <fs-list-column name=\"type\" title=\"Type\" [sortable]=\"true\">\n    <ng-template fs-list-cell let-row=\"row\">\n      {{pageTypes[row.type]}}\n    </ng-template>\n  </fs-list-column>\n  <fs-list-column name=\"modify_date\" title=\"Modified\" [sortable]=\"true\">\n    <ng-template fs-list-cell let-row=\"row\">\n      {{row.modifyDate | fsDate: 'date-time-yearless'}}\n    </ng-template>\n  </fs-list-column>\n</fs-list>\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTabsModule } from '@angular/material/tabs';\n\nimport { FsDateModule } from '@firestitch/date';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { FsFormModule } from '@firestitch/form';\nimport { FsHtmlEditorModule } from '@firestitch/html-editor';\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsListModule } from '@firestitch/list';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport { FsTextEditorModule } from '@firestitch/text-editor';\n\nimport { FsContentEditorModule } from '../editor';\nimport { ContentPageComponent } from './components/content-page';\nimport { FsContentPagesComponent } from './components/content-pages';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    FormsModule,\n\n    MatDialogModule,\n    MatInputModule,\n    MatFormFieldModule,\n    MatButtonModule,\n    MatTabsModule,\n    MatIconModule,\n    MatSelectModule,\n    MatButtonToggleModule,\n\n    FsListModule,\n    FsDateModule,\n    FsFormModule,\n    FsLabelModule,\n    FsSkeletonModule,\n    FsHtmlEditorModule,\n    FsDialogModule,\n    FsTextEditorModule,\n\n    FsContentEditorModule,\n  ],\n  exports: [\n    FsContentPagesComponent,\n  ],\n  declarations: [\n    FsContentPagesComponent,\n    ContentPageComponent,\n  ],\n})\nexport class FsContentPagesModule {\n  static forRoot(): ModuleWithProviders<FsContentPagesModule> {\n    return {\n      ngModule: FsContentPagesModule,\n    };\n  }\n}\n","import {\n  Component,\n  Inject,\n  OnInit,\n  OnDestroy,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  ViewChildren,\n  QueryList,\n} from '@angular/core';\n\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nimport { FsMessage } from '@firestitch/message';\nimport { FsTextEditorComponent } from '@firestitch/text-editor';\n\nimport { Subject, of } from 'rxjs';\nimport { switchMap, tap, takeUntil } from 'rxjs/operators';\n\nimport { FS_CONTENT_CONFIG } from '../../../../injectors';\nimport { FsContentConfig } from '../../../../interfaces';\n\n\n@Component({\n  templateUrl: './content-layout.component.html',\n  styleUrls: ['./content-layout.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ContentLayoutComponent implements OnInit, OnDestroy {\n\n  @ViewChildren(FsTextEditorComponent)\n  public textEditors: QueryList<FsTextEditorComponent>;\n\n  public contentLayout = null;\n  public editors = { content: true, styles: true };\n\n  private _destroy$ = new Subject<void>();\n\n  constructor(    \n    @Inject(FS_CONTENT_CONFIG) private _config: FsContentConfig,\n    @Inject(MAT_DIALOG_DATA) private _data: any,\n    private _dialogRef: MatDialogRef<ContentLayoutComponent>,\n    private _message: FsMessage,\n    private _cdRef: ChangeDetectorRef,\n  ) {}\n\n  public ngOnInit(): void {\n    this._fetchData();\n  }\n\n  public ngOnDestroy(): void {\n    this._destroy$.next();\n    this._destroy$.complete();\n  }\n\n  public save = () => {\n    return this._config.saveContentLayout(this.contentLayout)\n      .pipe(\n        tap((contentLayout) => {\n          this._message.success('Saved Changes');\n          this._dialogRef.close(contentLayout);\n        }),\n      );\n  };\n\n  private _fetchData(): void {\n    of(this._data.contentLayout)\n      .pipe(\n        switchMap((contentLayout) => {\n          return of(contentLayout);\n        }),\n        takeUntil(this._destroy$),\n      )\n      .subscribe((contentLayout) => {\n        this.contentLayout = { ...contentLayout };\n\n        this._cdRef.markForCheck();\n      });\n  }\n\n}\n","<form fsForm [submit]=\"save\" *fsSkeletonForm=\"contentLayout\">\n  <fs-dialog>\n    <h1 mat-dialog-title>{{contentLayout.id ? 'Layout' : 'Layout Page'}}</h1>\n    <div mat-dialog-content>\n      <div class=\"fs-column\">\n        <mat-form-field>\n          <input\n            matInput\n            [(ngModel)]=\"contentLayout.name\"\n            name=\"name\"\n            required\n            placeholder=\"Name\">\n        </mat-form-field>\n        <mat-form-field>\n          <input\n            matInput\n            [(ngModel)]=\"contentLayout.tag\"\n            name=\"tag\"\n            placeholder=\"Tag\">\n        </mat-form-field>\n      </div>\n    </div>\n\n    <div mat-dialog-actions>\n      <fs-form-dialog-actions>\n      </fs-form-dialog-actions>\n    </div>\n  </fs-dialog>\n</form>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  Inject,\n  OnDestroy,\n  OnInit,\n  ViewChild,\n} from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { ItemType } from '@firestitch/filter';\nimport { FsListComponent, FsListConfig } from '@firestitch/list';\n\nimport { Subject } from 'rxjs';\nimport { filter, map, takeUntil } from 'rxjs/operators';\n\nimport { FS_CONTENT_CONFIG } from '../../../../injectors';\nimport { FsContentConfig } from '../../../../interfaces';\nimport { EditorComponent } from '../../../editor/components/editor';\nimport { ContentLayoutComponent } from '../../components/content-layout';\n\n\n@Component({\n  selector: 'fs-content-layouts',\n  templateUrl: './content-layouts.component.html',\n  styleUrls: ['./content-layouts.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsContentLayoutsComponent implements OnInit, OnDestroy {\n\n  @ViewChild(FsListComponent)\n  public listComponent: FsListComponent;\n\n  public listConfig: FsListConfig;\n\n  private _destroy$ = new Subject<void>();\n\n  constructor(\n    @Inject(FS_CONTENT_CONFIG) private _config: FsContentConfig,\n    private _dialog: MatDialog,\n  ) {}\n\n  public ngOnInit(): void {\n    this._initListConfig();\n  }\n\n  public openEditor(contentLayout: any): void {\n    this._dialog.open(EditorComponent, {\n      maxWidth: '100vw',\n      maxHeight:  '100vw',\n      width: '100%',\n      height: '100%',\n      data: {\n        contentPage: contentLayout,\n        title: 'Layout',\n        save: (data) => {\n          return this._config.saveContentLayout({\n            id: contentLayout.id,\n            ...data,\n          });\n        },\n      },\n    })\n      .afterClosed()\n      .pipe(\n        takeUntil(this._destroy$),\n      )\n      .subscribe(() => {\n        this.listComponent.reload();\n      });\n  }\n\n  public openLayout(contentLayout: any): void {\n    this._dialog.open(ContentLayoutComponent, {\n      data: {\n        contentLayout,\n      },\n    })\n      .afterClosed()\n      .pipe(\n        filter((_contentLayout) => !!_contentLayout),\n        takeUntil(this._destroy$),\n      )\n      .subscribe(() => {\n        this.listComponent.reload();\n      });\n  }\n\n  public ngOnDestroy(): void {\n    this._destroy$.next();\n    this._destroy$.complete();\n  }\n\n  private _initListConfig(): void {\n    this.listConfig = {\n      paging: false,\n      filters: [\n        {\n          name: 'keyword',\n          type: ItemType.Keyword,\n          label: 'Search',\n        },\n      ],\n      actions: [\n        {\n          label: 'Create',\n          click: () => {\n            this.openLayout({});\n          },\n        },\n      ],\n      rowActions: [\n        {\n          click: (data) => {\n            return this._config.deleteContentLayout(data);\n          },\n          remove: {\n            title: 'Confirm',\n            template: 'Are you sure you would like to delete this record?',\n          },\n          menu: true,\n          label: 'Delete',\n        },\n      ],\n      fetch: (query) => {\n        return this._config.loadContentLayouts(query)\n          .pipe(\n            map((contentLayouts: any) => {\n              return { data: contentLayouts  };\n            }),\n          );\n      },\n      restore: {\n        query: { state: 'deleted' },\n        filterLabel: 'Show Deleted',\n        menuLabel: 'Restore',\n        reload: true,\n        click: (row) => {\n          return this._config.saveContentLayout({ id: row.id, state: 'active' });\n        },\n      },\n    };\n  }\n\n}\n\n","<fs-list [config]=\"listConfig\">\n  <fs-list-column name=\"name\" title=\"Name\" [sortable]=\"true\">\n    <ng-template fs-list-cell let-row=\"row\">\n      <a (click)=\"openEditor(row)\">{{row.name}}</a>\n    </ng-template>\n  </fs-list-column>\n  <fs-list-column name=\"modify_date\" title=\"Modified\" [sortable]=\"true\">\n    <ng-template fs-list-cell let-row=\"row\">\n      {{row.modifyDate | fsDate: 'date-time-yearless'}}\n    </ng-template>\n  </fs-list-column>\n</fs-list>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTabsModule } from '@angular/material/tabs';\n\nimport { FsDateModule } from '@firestitch/date';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { FsFormModule } from '@firestitch/form';\nimport { FsHtmlEditorModule } from '@firestitch/html-editor';\nimport { FsListModule } from '@firestitch/list';\nimport { FsTextEditorModule } from '@firestitch/text-editor';\n\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport { FsContentEditorModule } from '../editor';\nimport { ContentLayoutComponent } from './components/content-layout';\nimport { FsContentLayoutsComponent } from './components/content-layouts';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    FormsModule,\n\n    MatDialogModule,\n    MatInputModule,\n    MatFormFieldModule,\n    MatButtonModule,\n    MatTabsModule,\n    MatIconModule,\n    MatSelectModule,\n    MatButtonToggleModule,\n\n    FsListModule,\n    FsDateModule,\n    FsFormModule,\n    FsLabelModule,\n    FsSkeletonModule,\n    FsHtmlEditorModule,\n    FsDialogModule,\n    FsTextEditorModule,\n\n    FsContentEditorModule,\n  ],\n  exports: [\n    FsContentLayoutsComponent,\n  ],\n  declarations: [\n    ContentLayoutComponent,\n    FsContentLayoutsComponent,\n  ],\n})\nexport class FsContentLayoutsModule {\n}\n","import {\n  Component,\n  ChangeDetectionStrategy,\n  OnDestroy,\n  ElementRef,\n  Input,\n  AfterViewChecked,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { Router } from '@angular/router';\n\nimport { Subject } from 'rxjs';\n\n\n@Component({\n  selector: 'fs-content-renderer',\n  templateUrl: './content-renderer.component.html',\n  styleUrls: ['./content-renderer.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ContentRendererComponent implements OnDestroy, AfterViewChecked {\n\n  @Input() public set contentPage(contentPage) {\n    if(contentPage) {\n      this.content = this._sanitizer.bypassSecurityTrustHtml(contentPage.content);\n      this.styles = contentPage.styles;\n    }\n  }\n\n  public content;\n  public styles;\n  public _destroy$ = new Subject();\n\n  constructor(\n    private _sanitizer: DomSanitizer,\n    private _router: Router,\n    private _el: ElementRef,\n  ) {}\n\n  public ngAfterViewChecked(): void {\n    let el = document.querySelector('#contentPageStyles');\n    if(!el) {\n      el = document.createElement('style');\n      el.setAttribute('id','contentPageStyles');\n      document.getElementsByTagName('head')[0].appendChild(el);\n    }\n\n    el.innerHTML = this.styles;\n\n    this.registerHrefs();\n  }\n\n  public registerHrefs(): void {\n    Array.from(this.el.querySelectorAll('a[href]'))\n      .filter((el: Element) => {\n        return el.getAttribute('href').match(/^\\//);\n      })\n      .forEach((el: Element) => {\n        el.addEventListener('click',(event: MouseEvent) => {\n          if(!event.shiftKey && !event.ctrlKey) {\n            event.preventDefault();\n            const href = el.getAttribute('href');\n            this._router.navigateByUrl(href);\n          }\n        });\n      });\n  }\n\n  public get el(): any {\n    return this._el.nativeElement;\n  }\n\n  public ngOnDestroy(): void {\n    this.removeStyles();\n    this._destroy$.next();\n    this._destroy$.complete();\n  }\n\n  public removeStyles(): void {\n    const el = document.querySelector('#contentPageStyles');\n    if(el) {\n      el.remove();\n    }\n  }\n\n}\n","<div *ngIf=\"content\" [innerHTML]=\"content\"></div>\n","import {\n  Component,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  OnInit,\n  OnDestroy,\n  ElementRef,\n  Inject,\n} from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { NavigationEnd, Router } from '@angular/router';\n\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { FS_CONTENT_CONFIG } from '../../../../injectors';\nimport { FsContentConfig } from '../../../../interfaces';\n\n\n@Component({\n  selector: 'fs-content',\n  templateUrl: './content.component.html',\n  styleUrls: ['./content.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsContentComponent implements OnInit, OnDestroy {\n\n  public contentPage;\n  \n  private _destroy$ = new Subject();\n\n  constructor(\n    @Inject(FS_CONTENT_CONFIG) private _config: FsContentConfig,\n    private _title: Title,\n    private _cdRef: ChangeDetectorRef,\n    private _router: Router,\n    private _el: ElementRef,\n  ) {}\n\n  public ngOnInit(): void {\n    this.load();\n\n    this._router.events\n      .pipe(\n        filter((e) => e instanceof NavigationEnd),\n        takeUntil(this._destroy$),\n      )\n      .subscribe(() => {\n        this.load();\n      });\n  }\n\n  public load(): void {\n    const path = (window as any).location.pathname;\n    this._config.loadContent(path)\n      .subscribe((contentPage) => {\n        if(contentPage.title) {\n          this._title.setTitle(contentPage.title);\n\n          let ogTitleEl = document.querySelector('head meta[property=\"og:title\"]');\n          if(!ogTitleEl) {\n            ogTitleEl = document.createElement('meta');\n            ogTitleEl.setAttribute('property','og:title');\n            document.getElementsByTagName('head')[0].appendChild(ogTitleEl);\n          }\n\n          ogTitleEl.setAttribute('content',contentPage.title);\n        }\n\n        this.contentPage = contentPage;\n        this._cdRef.markForCheck();\n      });\n  }\n\n  public get el(): any {\n    return this._el.nativeElement;\n  }\n\n  public ngOnDestroy(): void {\n    this._destroy$.next();\n    this._destroy$.complete();\n    this._title.setTitle('');\n  }\n\n}\n","<fs-content-renderer *ngIf=\"contentPage\" [contentPage]=\"contentPage\"></fs-content-renderer>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FsHtmlEditorModule } from '@firestitch/html-editor';\n\nimport { FsContentComponent } from './components/content';\nimport { ContentRendererComponent } from './components/content-renderer';\n\n\n\n@NgModule({\n  imports: [\n    CommonModule,\n\n    FsHtmlEditorModule,\n  ],\n  exports: [\n    FsContentComponent,\n  ],\n  declarations: [\n    FsContentComponent,\n    ContentRendererComponent,\n  ],\n})\nexport class FsContentModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["InjectionToken","Subject","tap","of","switchMap","takeUntil","MAT_DIALOG_DATA","FsTextEditorComponent","Component","ChangeDetectionStrategy","Inject","ViewChildren","fromEvent","finalize","take","FsFormDirective","ElementRef","ViewChild","CommonModule","FormsModule","MatDialogModule","MatButtonModule","MatTabsModule","MatIconModule","MatButtonToggleModule","FsListModule","FsFormModule","FsLabelModule","FsHtmlEditorModule","FsDialogModule","FsTextEditorModule","NgModule","index","filter","ItemType","map","FsListComponent","Input","MatInputModule","MatFormFieldModule","MatSelectModule","FsDateModule","FsSkeletonModule","NavigationEnd"],"mappings":"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"}
         
     | 
    
        package/esm2015/app/modules/content-layouts/components/content-layouts/content-layouts.component.js
    CHANGED
    
    | 
         @@ -1,17 +1,16 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            import {  
     | 
| 
      
 1 
     | 
    
         
            +
            import { ChangeDetectionStrategy, Component, Inject, ViewChild, } from '@angular/core';
         
     | 
| 
       2 
2 
     | 
    
         
             
            import { MatDialog } from '@angular/material/dialog';
         
     | 
| 
       3 
     | 
    
         
            -
            import { FsListComponent } from '@firestitch/list';
         
     | 
| 
       4 
3 
     | 
    
         
             
            import { ItemType } from '@firestitch/filter';
         
     | 
| 
       5 
     | 
    
         
            -
            import {  
     | 
| 
      
 4 
     | 
    
         
            +
            import { FsListComponent } from '@firestitch/list';
         
     | 
| 
       6 
5 
     | 
    
         
             
            import { Subject } from 'rxjs';
         
     | 
| 
       7 
     | 
    
         
            -
            import {  
     | 
| 
      
 6 
     | 
    
         
            +
            import { filter, map, takeUntil } from 'rxjs/operators';
         
     | 
| 
       8 
7 
     | 
    
         
             
            import { FS_CONTENT_CONFIG } from '../../../../injectors';
         
     | 
| 
       9 
8 
     | 
    
         
             
            import { EditorComponent } from '../../../editor/components/editor';
         
     | 
| 
      
 9 
     | 
    
         
            +
            import { ContentLayoutComponent } from '../../components/content-layout';
         
     | 
| 
       10 
10 
     | 
    
         
             
            import * as i0 from "@angular/core";
         
     | 
| 
       11 
11 
     | 
    
         
             
            import * as i1 from "@angular/material/dialog";
         
     | 
| 
       12 
12 
     | 
    
         
             
            import * as i2 from "@firestitch/list";
         
     | 
| 
       13 
     | 
    
         
            -
            import * as i3 from "@ 
     | 
| 
       14 
     | 
    
         
            -
            import * as i4 from "@firestitch/date";
         
     | 
| 
      
 13 
     | 
    
         
            +
            import * as i3 from "@firestitch/date";
         
     | 
| 
       15 
14 
     | 
    
         
             
            export class FsContentLayoutsComponent {
         
     | 
| 
       16 
15 
     | 
    
         
             
                constructor(_config, _dialog) {
         
     | 
| 
       17 
16 
     | 
    
         
             
                    this._config = _config;
         
     | 
| 
         @@ -23,11 +22,13 @@ export class FsContentLayoutsComponent { 
     | 
|
| 
       23 
22 
     | 
    
         
             
                }
         
     | 
| 
       24 
23 
     | 
    
         
             
                openEditor(contentLayout) {
         
     | 
| 
       25 
24 
     | 
    
         
             
                    this._dialog.open(EditorComponent, {
         
     | 
| 
       26 
     | 
    
         
            -
                        maxWidth:  
     | 
| 
       27 
     | 
    
         
            -
                        maxHeight:  
     | 
| 
      
 25 
     | 
    
         
            +
                        maxWidth: '100vw',
         
     | 
| 
      
 26 
     | 
    
         
            +
                        maxHeight: '100vw',
         
     | 
| 
      
 27 
     | 
    
         
            +
                        width: '100%',
         
     | 
| 
      
 28 
     | 
    
         
            +
                        height: '100%',
         
     | 
| 
       28 
29 
     | 
    
         
             
                        data: {
         
     | 
| 
       29 
     | 
    
         
            -
                             
     | 
| 
       30 
     | 
    
         
            -
                             
     | 
| 
      
 30 
     | 
    
         
            +
                            contentPage: contentLayout,
         
     | 
| 
      
 31 
     | 
    
         
            +
                            title: 'Layout',
         
     | 
| 
       31 
32 
     | 
    
         
             
                            save: (data) => {
         
     | 
| 
       32 
33 
     | 
    
         
             
                                return this._config.saveContentLayout(Object.assign({ id: contentLayout.id }, data));
         
     | 
| 
       33 
34 
     | 
    
         
             
                            },
         
     | 
| 
         @@ -105,7 +106,7 @@ export class FsContentLayoutsComponent { 
     | 
|
| 
       105 
106 
     | 
    
         
             
                }
         
     | 
| 
       106 
107 
     | 
    
         
             
            }
         
     | 
| 
       107 
108 
     | 
    
         
             
            FsContentLayoutsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsContentLayoutsComponent, deps: [{ token: FS_CONTENT_CONFIG }, { token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
         
     | 
| 
       108 
     | 
    
         
            -
            FsContentLayoutsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsContentLayoutsComponent, selector: "fs-content-layouts", viewQueries: [{ propertyName: "listComponent", first: true, predicate: FsListComponent, descendants: true }], ngImport: i0, template: "<fs-list [config]=\"listConfig\">\n  <fs-list-column name=\" 
     | 
| 
      
 109 
     | 
    
         
            +
            FsContentLayoutsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsContentLayoutsComponent, selector: "fs-content-layouts", viewQueries: [{ propertyName: "listComponent", first: true, predicate: FsListComponent, descendants: true }], ngImport: i0, template: "<fs-list [config]=\"listConfig\">\n  <fs-list-column name=\"name\" title=\"Name\" [sortable]=\"true\">\n    <ng-template fs-list-cell let-row=\"row\">\n      <a (click)=\"openEditor(row)\">{{row.name}}</a>\n    </ng-template>\n  </fs-list-column>\n  <fs-list-column name=\"modify_date\" title=\"Modified\" [sortable]=\"true\">\n    <ng-template fs-list-cell let-row=\"row\">\n      {{row.modifyDate | fsDate: 'date-time-yearless'}}\n    </ng-template>\n  </fs-list-column>\n</fs-list>\n", styles: [""], components: [{ type: i2.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }], directives: [{ type: i2.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i2.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }], pipes: { "fsDate": i3.FsDatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
         
     | 
| 
       109 
110 
     | 
    
         
             
            i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsContentLayoutsComponent, decorators: [{
         
     | 
| 
       110 
111 
     | 
    
         
             
                        type: Component,
         
     | 
| 
       111 
112 
     | 
    
         
             
                        args: [{
         
     | 
| 
         @@ -121,4 +122,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo 
     | 
|
| 
       121 
122 
     | 
    
         
             
                            type: ViewChild,
         
     | 
| 
       122 
123 
     | 
    
         
             
                            args: [FsListComponent]
         
     | 
| 
       123 
124 
     | 
    
         
             
                        }] } });
         
     | 
| 
       124 
     | 
    
         
            -
            //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1sYXlvdXRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9jb250ZW50LWxheW91dHMvY29tcG9uZW50cy9jb250ZW50LWxheW91dHMvY29udGVudC1sYXlvdXRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9jb250ZW50LWxheW91dHMvY29tcG9uZW50cy9jb250ZW50LWxheW91dHMvY29udGVudC1sYXlvdXRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsU0FBUyxFQUNULHVCQUF1QixFQUV2QixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJELE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sa0JBQWtCLENBQUM7QUFDakUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7QUFTcEUsTUFBTSxPQUFPLHlCQUF5QjtJQVNwQyxZQUNxQyxPQUF3QixFQUNuRCxPQUFrQjtRQURTLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBQ25ELFlBQU8sR0FBUCxPQUFPLENBQVc7UUFKcEIsY0FBUyxHQUFHLElBQUksT0FB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QUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtnQkFDM0IsV0FBVyxFQUFFLGNBQWM7Z0JBQzNCLFNBQVMsRUFBRSxTQUFTO2dCQUNwQixNQUFNLEVBQUUsSUFBSTtnQkFDWixLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDekUsQ0FBQzthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7O3VIQWhIVSx5QkFBeUIsa0JBVTFCLGlCQUFpQjsyR0FWaEIseUJBQXlCLHlHQUV6QixlQUFlLGdEQy9CNUIsaXNCQWlCQTs0RkRZYSx5QkFBeUI7a0JBTnJDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsV0FBVyxFQUFFLGtDQUFrQztvQkFDL0MsU0FBUyxFQUFFLENBQUMsa0NBQWtDLENBQUM7b0JBQy9DLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs7MEJBV0ksTUFBTTsyQkFBQyxpQkFBaUI7b0VBUHBCLGFBQWE7c0JBRG5CLFNBQVM7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBPbkRlc3Ryb3ksXG4gIEluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IEZzTGlzdENvbXBvbmVudCwgRnNMaXN0Q29uZmlnIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbGlzdCc7XG5pbXBvcnQgeyBJdGVtVHlwZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2ZpbHRlcic7XG5cbmltcG9ydCB7IG1hcCwgdGFrZVVudGlsLCBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IENvbnRlbnRMYXlvdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NvbnRlbnQtbGF5b3V0JztcbmltcG9ydCB7IEZTX0NPTlRFTlRfQ09ORklHIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW5qZWN0b3JzJztcbmltcG9ydCB7IEZzQ29udGVudENvbmZpZyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZWRpdG9yL2NvbXBvbmVudHMvZWRpdG9yJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmcy1jb250ZW50LWxheW91dHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29udGVudC1sYXlvdXRzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29udGVudC1sYXlvdXRzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBGc0NvbnRlbnRMYXlvdXRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBWaWV3Q2hpbGQoRnNMaXN0Q29tcG9uZW50KVxuICBwdWJsaWMgbGlzdENvbXBvbmVudDogRnNMaXN0Q29tcG9uZW50O1xuXG4gIHB1YmxpYyBsaXN0Q29uZmlnOiBGc0xpc3RDb25maWc7XG5cbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoRlNfQ09OVEVOVF9DT05GSUcpIHByaXZhdGUgX2NvbmZpZzogRnNDb250ZW50Q29uZmlnLFxuICAgIHByaXZhdGUgX2RpYWxvZzogTWF0RGlhbG9nLFxuICApIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2luaXRMaXN0Q29uZmlnKCk7XG4gIH1cblxuICBwdWJsaWMgb3BlbkVkaXRvcihjb250ZW50TGF5b3V0OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9kaWFsb2cub3BlbihFZGl0b3JDb21wb25lbnQsIHtcbiAgICAgICAgbWF4V2lkdGg6IG51bGwsXG4gICAgICAgIG1heEhlaWdodDogbnVsbCwgICAgICBcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHN0eWxlczogY29udGVudExheW91dC5zdHlsZXMsXG4gICAgICAgICAgY29udGVudDogY29udGVudExheW91dC5jb250ZW50LFxuICAgICAgICAgIHNhdmU6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLnNhdmVDb250ZW50TGF5b3V0KHtcbiAgICAgICAgICAgICAgaWQ6IGNvbnRlbnRMYXlvdXQuaWQsXG4gICAgICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgKSAgICAgICAgXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudC5yZWxvYWQoKTtcbiAgICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb3BlbkxheW91dChjb250ZW50TGF5b3V0OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9kaWFsb2cub3BlbihDb250ZW50TGF5b3V0Q29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGNvbnRlbnRMYXlvdXQsXG4gICAgICB9LFxuICAgIH0pXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoX2NvbnRlbnRMYXlvdXQpID0+ICEhX2NvbnRlbnRMYXlvdXQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMubGlzdENvbXBvbmVudC5yZWxvYWQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdExpc3RDb25maWcoKTogdm9pZCB7XG4gICAgdGhpcy5saXN0Q29uZmlnID0ge1xuICAgICAgcGFnaW5nOiBmYWxzZSxcbiAgICAgIGZpbHRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgICB0eXBlOiBJdGVtVHlwZS5LZXl3b3JkLFxuICAgICAgICAgIGxhYmVsOiAnU2VhcmNoJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0NyZWF0ZScsXG4gICAgICAgICAgY2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub3BlbkxheW91dCh7fSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICByb3dBY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjbGljazogKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb25maWcuZGVsZXRlQ29udGVudExheW91dChkYXRhKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlbW92ZToge1xuICAgICAgICAgICAgdGl0bGU6ICdDb25maXJtJyxcbiAgICAgICAgICAgIHRlbXBsYXRlOiAnQXJlIHlvdSBzdXJlIHlvdSB3b3VsZCBsaWtlIHRvIGRlbGV0ZSB0aGlzIHJlY29yZD8nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVudTogdHJ1ZSxcbiAgICAgICAgICBsYWJlbDogJ0RlbGV0ZScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZmV0Y2g6IChxdWVyeSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLmxvYWRDb250ZW50TGF5b3V0cyhxdWVyeSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoY29udGVudExheW91dHM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBjb250ZW50TGF5b3V0cyAgfTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICB9LFxuICAgICAgcmVzdG9yZToge1xuICAgICAgICBxdWVyeTogeyBzdGF0ZTogJ2RlbGV0ZWQnIH0sXG4gICAgICAgIGZpbHRlckxhYmVsOiAnU2hvdyBEZWxldGVkJyxcbiAgICAgICAgbWVudUxhYmVsOiAnUmVzdG9yZScsXG4gICAgICAgIHJlbG9hZDogdHJ1ZSxcbiAgICAgICAgY2xpY2s6IChyb3cpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLnNhdmVDb250ZW50TGF5b3V0KHsgaWQ6IHJvdy5pZCwgc3RhdGU6ICdhY3RpdmUnIH0pO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbn1cblxuIiwiPGZzLWxpc3QgW2NvbmZpZ109XCJsaXN0Q29uZmlnXCI+XG4gIDxmcy1saXN0LWNvbHVtbiBuYW1lPVwiZGVzaWduXCIgd2lkdGg9XCIxJVwiPlxuICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgPGEgKGNsaWNrKT1cIm9wZW5FZGl0b3Iocm93KVwiPjxtYXQtaWNvbj5kZXNpZ25fc2VydmljZXM8L21hdC1pY29uPjwvYT5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2ZzLWxpc3QtY29sdW1uPlxuICA8ZnMtbGlzdC1jb2x1bW4gbmFtZT1cIm5hbWVcIiB0aXRsZT1cIk5hbWVcIiBbc29ydGFibGVdPVwidHJ1ZVwiPlxuICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgPGEgKGNsaWNrKT1cIm9wZW5MYXlvdXQocm93KVwiPnt7cm93Lm5hbWV9fTwvYT5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2ZzLWxpc3QtY29sdW1uPlxuICA8ZnMtbGlzdC1jb2x1bW4gbmFtZT1cIm1vZGlmeV9kYXRlXCIgdGl0bGU9XCJNb2RpZmllZFwiIFtzb3J0YWJsZV09XCJ0cnVlXCI+XG4gICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtY2VsbCBsZXQtcm93PVwicm93XCI+XG4gICAgICB7e3Jvdy5tb2RpZnlEYXRlIHwgZnNEYXRlOiAnZGF0ZS10aW1lLXllYXJsZXNzJ319XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9mcy1saXN0LWNvbHVtbj5cbjwvZnMtbGlzdD5cbiJdfQ==
         
     | 
| 
      
 125 
     | 
    
         
            +
            //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1sYXlvdXRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9jb250ZW50LWxheW91dHMvY29tcG9uZW50cy9jb250ZW50LWxheW91dHMvY29udGVudC1sYXlvdXRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9jb250ZW50LWxheW91dHMvY29tcG9uZW50cy9jb250ZW50LWxheW91dHMvY29udGVudC1sYXlvdXRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULE1BQU0sRUFHTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLGtCQUFrQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7OztBQVN6RSxNQUFNLE9BQU8seUJBQXlCO0lBU3BDLFlBQ3FDLE9BQXdCLEVBQ25ELE9BQWtCO1FBRFMsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUFDbkQsWUFBTyxHQUFQLE9BQU8sQ0FBVztRQUpwQixjQUFTLEdBQUcsSUFBSSxPQUFP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QU8sRUFBRTtnQkFDUCxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO2dCQUMzQixXQUFXLEVBQUUsY0FBYztnQkFDM0IsU0FBUyxFQUFFLFNBQVM7Z0JBQ3BCLE1BQU0sRUFBRSxJQUFJO2dCQUNaLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RSxDQUFDO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQzs7dUhBbEhVLHlCQUF5QixrQkFVMUIsaUJBQWlCOzJHQVZoQix5QkFBeUIseUdBRXpCLGVBQWUsZ0RDL0I1Qix3ZUFZQTs0RkRpQmEseUJBQXlCO2tCQU5yQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFdBQVcsRUFBRSxrQ0FBa0M7b0JBQy9DLFNBQVMsRUFBRSxDQUFDLGtDQUFrQyxDQUFDO29CQUMvQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7OzBCQVdJLE1BQU07MkJBQUMsaUJBQWlCO29FQVBwQixhQUFhO3NCQURuQixTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBJbmplY3QsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5pbXBvcnQgeyBJdGVtVHlwZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2ZpbHRlcic7XG5pbXBvcnQgeyBGc0xpc3RDb21wb25lbnQsIEZzTGlzdENvbmZpZyB9IGZyb20gJ0BmaXJlc3RpdGNoL2xpc3QnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGU19DT05URU5UX0NPTkZJRyB9IGZyb20gJy4uLy4uLy4uLy4uL2luamVjdG9ycyc7XG5pbXBvcnQgeyBGc0NvbnRlbnRDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2VkaXRvci9jb21wb25lbnRzL2VkaXRvcic7XG5pbXBvcnQgeyBDb250ZW50TGF5b3V0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jb250ZW50LWxheW91dCc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtY29udGVudC1sYXlvdXRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnRlbnQtbGF5b3V0cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbnRlbnQtbGF5b3V0cy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRnNDb250ZW50TGF5b3V0c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBAVmlld0NoaWxkKEZzTGlzdENvbXBvbmVudClcbiAgcHVibGljIGxpc3RDb21wb25lbnQ6IEZzTGlzdENvbXBvbmVudDtcblxuICBwdWJsaWMgbGlzdENvbmZpZzogRnNMaXN0Q29uZmlnO1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KEZTX0NPTlRFTlRfQ09ORklHKSBwcml2YXRlIF9jb25maWc6IEZzQ29udGVudENvbmZpZyxcbiAgICBwcml2YXRlIF9kaWFsb2c6IE1hdERpYWxvZyxcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9pbml0TGlzdENvbmZpZygpO1xuICB9XG5cbiAgcHVibGljIG9wZW5FZGl0b3IoY29udGVudExheW91dDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fZGlhbG9nLm9wZW4oRWRpdG9yQ29tcG9uZW50LCB7XG4gICAgICBtYXhXaWR0aDogJzEwMHZ3JyxcbiAgICAgIG1heEhlaWdodDogICcxMDB2dycsXG4gICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGNvbnRlbnRQYWdlOiBjb250ZW50TGF5b3V0LFxuICAgICAgICB0aXRsZTogJ0xheW91dCcsXG4gICAgICAgIHNhdmU6IChkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5zYXZlQ29udGVudExheW91dCh7XG4gICAgICAgICAgICBpZDogY29udGVudExheW91dC5pZCxcbiAgICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5saXN0Q29tcG9uZW50LnJlbG9hZCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb3BlbkxheW91dChjb250ZW50TGF5b3V0OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9kaWFsb2cub3BlbihDb250ZW50TGF5b3V0Q29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGNvbnRlbnRMYXlvdXQsXG4gICAgICB9LFxuICAgIH0pXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoX2NvbnRlbnRMYXlvdXQpID0+ICEhX2NvbnRlbnRMYXlvdXQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMubGlzdENvbXBvbmVudC5yZWxvYWQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdExpc3RDb25maWcoKTogdm9pZCB7XG4gICAgdGhpcy5saXN0Q29uZmlnID0ge1xuICAgICAgcGFnaW5nOiBmYWxzZSxcbiAgICAgIGZpbHRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgICB0eXBlOiBJdGVtVHlwZS5LZXl3b3JkLFxuICAgICAgICAgIGxhYmVsOiAnU2VhcmNoJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0NyZWF0ZScsXG4gICAgICAgICAgY2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub3BlbkxheW91dCh7fSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICByb3dBY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjbGljazogKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb25maWcuZGVsZXRlQ29udGVudExheW91dChkYXRhKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlbW92ZToge1xuICAgICAgICAgICAgdGl0bGU6ICdDb25maXJtJyxcbiAgICAgICAgICAgIHRlbXBsYXRlOiAnQXJlIHlvdSBzdXJlIHlvdSB3b3VsZCBsaWtlIHRvIGRlbGV0ZSB0aGlzIHJlY29yZD8nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVudTogdHJ1ZSxcbiAgICAgICAgICBsYWJlbDogJ0RlbGV0ZScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZmV0Y2g6IChxdWVyeSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLmxvYWRDb250ZW50TGF5b3V0cyhxdWVyeSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoY29udGVudExheW91dHM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBjb250ZW50TGF5b3V0cyAgfTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICB9LFxuICAgICAgcmVzdG9yZToge1xuICAgICAgICBxdWVyeTogeyBzdGF0ZTogJ2RlbGV0ZWQnIH0sXG4gICAgICAgIGZpbHRlckxhYmVsOiAnU2hvdyBEZWxldGVkJyxcbiAgICAgICAgbWVudUxhYmVsOiAnUmVzdG9yZScsXG4gICAgICAgIHJlbG9hZDogdHJ1ZSxcbiAgICAgICAgY2xpY2s6IChyb3cpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLnNhdmVDb250ZW50TGF5b3V0KHsgaWQ6IHJvdy5pZCwgc3RhdGU6ICdhY3RpdmUnIH0pO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbn1cblxuIiwiPGZzLWxpc3QgW2NvbmZpZ109XCJsaXN0Q29uZmlnXCI+XG4gIDxmcy1saXN0LWNvbHVtbiBuYW1lPVwibmFtZVwiIHRpdGxlPVwiTmFtZVwiIFtzb3J0YWJsZV09XCJ0cnVlXCI+XG4gICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtY2VsbCBsZXQtcm93PVwicm93XCI+XG4gICAgICA8YSAoY2xpY2spPVwib3BlbkVkaXRvcihyb3cpXCI+e3tyb3cubmFtZX19PC9hPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZnMtbGlzdC1jb2x1bW4+XG4gIDxmcy1saXN0LWNvbHVtbiBuYW1lPVwibW9kaWZ5X2RhdGVcIiB0aXRsZT1cIk1vZGlmaWVkXCIgW3NvcnRhYmxlXT1cInRydWVcIj5cbiAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1jZWxsIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgIHt7cm93Lm1vZGlmeURhdGUgfCBmc0RhdGU6ICdkYXRlLXRpbWUteWVhcmxlc3MnfX1cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2ZzLWxpc3QtY29sdW1uPlxuPC9mcy1saXN0PlxuIl19
         
     |