@firestitch/html-editor 13.1.1 → 13.1.3
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/esm2020/app/modules/html-editor/components/html-editor/html-editor.component.mjs +6 -5
- package/fesm2015/firestitch-html-editor.mjs +5 -4
- package/fesm2015/firestitch-html-editor.mjs.map +1 -1
- package/fesm2020/firestitch-html-editor.mjs +5 -4
- package/fesm2020/firestitch-html-editor.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -203,16 +203,17 @@ export class FsHtmlEditorComponent {
|
|
|
203
203
|
});
|
|
204
204
|
}
|
|
205
205
|
_initPlugins(config) {
|
|
206
|
+
(config.prependToolbarTextButtons || [])
|
|
207
|
+
.forEach((button) => {
|
|
208
|
+
this._defineButton(button);
|
|
209
|
+
});
|
|
206
210
|
(config.plugins || []).forEach((plugin) => {
|
|
207
211
|
this._fr.FroalaEditor.PLUGINS[plugin.config.name] = function (editor) {
|
|
208
212
|
plugin.editor = editor;
|
|
209
213
|
plugin.initialize();
|
|
210
214
|
return plugin;
|
|
211
215
|
};
|
|
212
|
-
([
|
|
213
|
-
...(plugin.config.buttons || []),
|
|
214
|
-
...(config.prependToolbarTextButtons || []),
|
|
215
|
-
])
|
|
216
|
+
(plugin.config.buttons || [])
|
|
216
217
|
.forEach((button) => {
|
|
217
218
|
this._defineButton(button);
|
|
218
219
|
});
|
|
@@ -498,4 +499,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
498
499
|
type: HostBinding,
|
|
499
500
|
args: ['class.disabled']
|
|
500
501
|
}] } });
|
|
501
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2h0bWwtZWRpdG9yL2NvbXBvbmVudHMvaHRtbC1lZGl0b3IvaHRtbC1lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2h0bWwtZWRpdG9yL2NvbXBvbmVudHMvaHRtbC1lZGl0b3IvaHRtbC1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLGdCQUFnQixFQUVoQixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLE1BQU0sR0FHUCxNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBdUIsTUFBTSxrQkFBa0IsQ0FBQztBQUU5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFjLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0YsT0FBTyxFQUNMLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FDOUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRWxDLE9BQU8sRUFBRSxx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QUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDMUIsVUFBVSxFQUFFLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FBQyxNQUFNO1NBQ3ZDO0tBQ0Y7MkZBRVUscUJBQXFCO2tCQXpCakMsU0FBUzsrQkFDRSxnQkFBZ0IsYUFHZjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQzs0QkFDcEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHNCQUFzQixDQUFDOzRCQUNwRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEM7d0JBQ2I7NEJBQ0UsT0FBTyxFQUFFLGdCQUFnQjs0QkFDekIsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7NEJBQzFCLFVBQVUsRUFBRSxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUMsTUFBTTt5QkFDdkM7cUJBQ0Y7OzBCQTZCRSxRQUFROzswQkFDUixNQUFNOzJCQUFDLHFCQUFxQjs4QkFHVixRQUFROzBCQUQxQixNQUFNOzJCQUFDLFFBQVE7Z0hBM0JtQixZQUFZO3NCQUFoRCxXQUFXO3VCQUFDLGVBQWU7Z0JBRUQsS0FBSztzQkFBL0IsU0FBUzt1QkFBQyxPQUFPO2dCQUVGLE1BQU07c0JBQXJCLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFJQyxRQUFRO3NCQUZkLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xDb250YWluZXIsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOR19WQUxJREFUT1JTLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgTmdGb3JtLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgZ3VpZCB9IGZyb20gJ0BmaXJlc3RpdGNoL2NvbW1vbic7XG5pbXBvcnQgeyBGaWxlUHJvY2Vzc29yLCBGc0ZpbGUsIEZzRmlsZVByb2Nlc3NDb25maWcgfSBmcm9tICdAZmlyZXN0aXRjaC9maWxlJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tRXZlbnRQYXR0ZXJuLCBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHNraXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBtZXJnZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmltcG9ydCB7IEZTX0hUTUxfRURJVE9SX0NPTkZJRyB9IGZyb20gJy4uLy4uL2luamVjdHMvY29uZmlnLmluamVjdCc7XG5pbXBvcnQgeyBUb29sYmFyQnV0dG9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGc0h0bWxFZGl0b3JDb25maWcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2h0bWwtZWRpdG9yLWNvbmZpZyc7XG5pbXBvcnQgeyBGc0Zyb2FsYUxvYWRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mcm9hbGEtbG9hZGVyLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBQbHVnaW4gfSBmcm9tICcuLy4uLy4uL2NsYXNzZXMvcGx1Z2luJztcbmltcG9ydCB7IFBhcmFncmFwaEJ1dHRvbnMgfSBmcm9tICcuLy4uLy4uL2NvbnN0cy9wYXJhZ3JhcGgtYnV0dG9ucy5jb25zdCc7XG5pbXBvcnQgeyBSaWNoQnV0dG9ucyB9IGZyb20gJy4vLi4vLi4vY29uc3RzL3JpY2gtYnV0dG9ucy5jb25zdCc7XG5pbXBvcnQgeyBUZXh0QnV0dG9ucyB9IGZyb20gJy4vLi4vLi4vY29uc3RzL3RleHQtYnV0dG9ucy5jb25zdCc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtaHRtbC1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vaHRtbC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9odG1sLWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZzSHRtbEVkaXRvckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGc0h0bWxFZGl0b3JDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHZpZXdQcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLFxuICAgICAgZGVwczogW1tPcHRpb25hbCwgTmdGb3JtXV0sXG4gICAgICB1c2VGYWN0b3J5OiAobmdGb3JtOiBOZ0Zvcm0pID0+IG5nRm9ybSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGc0h0bWxFZGl0b3JDb21wb25lbnQgXG5pbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgT25EZXN0cm95IHtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZvY3VzZWQnKSBwdWJsaWMgY2xhc3NGb2N1c2VkID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgnZWxSZWYnKSBwdWJsaWMgZWxSZWY6IEVsZW1lbnRSZWY7XG5cbiAgQElucHV0KCkgcHVibGljIGNvbmZpZzogRnNIdG1sRWRpdG9yQ29uZmlnID0ge307XG4gIEBJbnB1dCgpIHB1YmxpYyBoaW50OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kaXNhYmxlZCcpXG4gIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIHB1YmxpYyBpbml0aWFsaXplZCA9IGZhbHNlO1xuICBwdWJsaWMgcmVhZG9ubHkgY29udGFpbmVySUQgPSBgZnMtaHRtbC1lZGl0b3ItJHtndWlkKCd4eHgnKX1gO1xuICBwdWJsaWMgb25Ub3VjaGVkOiAoKSA9PiB2b2lkO1xuICBwdWJsaWMgb25DaGFuZ2U6IChkYXRhOiBhbnkpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBfZWRpdG9yOiBhbnk7XG4gIHByaXZhdGUgX2h0bWw6IHN0cmluZztcbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZSQgPSBuZXcgUmVwbGF5U3ViamVjdCgpO1xuICBwcml2YXRlIF9mcm9hbGFSZWFkeSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuICBwcml2YXRlIF93aW5kb3c6IGFueSA9IHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3O1xuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KEZTX0hUTUxfRURJVE9SX0NPTkZJRylcbiAgICBwcml2YXRlIF9kZWZhdWx0Q29uZmlnLFxuICAgIEBJbmplY3QoRE9DVU1FTlQpXG4gICAgcHJpdmF0ZSBfZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgIHByaXZhdGUgX2NkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIF9mcjogRnNGcm9hbGFMb2FkZXJTZXJ2aWNlLFxuICApIHsgfVxuXG4gIHB1YmxpYyBnZXQgZWwoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgcHVibGljIGdldCBodG1sKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2h0bWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVkaXRvcigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3I7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZyb2FsYUxvYWRlZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZyLmxvYWRlZCQ7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcgPSB0aGlzLmNvbmZpZyB8fCB7fTtcbiAgICB0aGlzLmNvbmZpZy5hdXRvZm9jdXMgPSB0aGlzLmNvbmZpZy5hdXRvZm9jdXMgJiYgKCF0aGlzLmNvbmZpZy5kaXNhYmxlZCB8fCAhdGhpcy5kaXNhYmxlZCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuX2xpc3RlbkxhenlJbml0KCk7XG4gICAgdGhpcy5faW5pdGlhbGl6ZSQubmV4dCgpO1xuICB9XG5cbiAgcHVibGljIGhhc0NvbnRlbnQoKSB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgIGlmIChlbC5xdWVyeVNlbGVjdG9yKCdpbWcnKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZWwuaW5uZXJIVE1MID0gdGhpcy5faHRtbDtcblxuICAgIHJldHVybiAhIWVsLmlubmVyVGV4dC5sZW5ndGg7XG4gIH1cblxuICBwdWJsaWMgaW5pdGlhbGl6ZShvcHRpb25zOiBhbnkgPSB7fSkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuX2NyZWF0ZUNvbmZpZygpO1xuICAgIHRoaXMuX2luaXRQbHVnaW5zKGNvbmZpZyk7XG4gICAgdGhpcy5faW5pdEJ1dHRvbnMoY29uZmlnKTtcbiAgICB0aGlzLl9lZGl0b3IgPSBuZXcgdGhpcy5fZnIuRnJvYWxhRWRpdG9yKHRoaXMuZWwsIHRoaXMuX2NyZWF0ZU9wdGlvbnMoKSwgKCkgPT4ge1xuICAgICAgdGhpcy5fZnJvYWxhUmVhZHkkLm5leHQoeyBjb25maWcsIG9wdGlvbnMgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU2l6ZSgpIHtcbiAgICAvLyBIYWNrOiBUbyB0cmlnZ2VyIHRoZSB0b29sYmFyIGJ1dHRvbiBzaXplIG1vZGVzXG4gICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZXNpemUnKSk7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IGVycjogYW55ID0ge307XG4gICAgaWYgKHRoaXMuY29uZmlnLm1heExlbmd0aCAmJiB0aGlzLl9odG1sKSB7XG4gICAgICBjb25zdCBtYXhMZW5ndGggPSB0aGlzLmNvbmZpZy5tYXhMZW5ndGg7XG4gICAgICBjb25zdCBsZW5ndGggPSB0aGlzLl9odG1sLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICAgICAgZXJyLm1heExlbmd0aEVycm9yID0gYE11c3QgYmUgJHttYXhMZW5ndGh9IGNoYXJhY3RlcnMgb3IgZmV3ZXIuIFlvdSBlbnRlcmVkICR7bGVuZ3RofSBjaGFyYWN0ZXJzLmA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGVycikubGVuZ3RoID8gZXJyIDogbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBmb2N1cyhvcHRpb25zPzogeyBjdXJzb3JQb3NpdGlvbj86ICdzdGFydCcgfCAnZW5kJyB9KSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgPyBvcHRpb25zIDoge307XG5cbiAgICBpZiAob3B0aW9ucy5jdXJzb3JQb3NpdGlvbiA9PT0gJ2VuZCcpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnNlbGVjdGlvbi5zZXRBdEVuZCh0aGlzLmVkaXRvci4kZWwuZ2V0KDApKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lZGl0b3Iuc2VsZWN0aW9uLnNldEF0U3RhcnQodGhpcy5lZGl0b3IuJGVsLmdldCgwKSk7XG4gICAgfVxuXG4gICAgdGhpcy5lZGl0b3Iuc2VsZWN0aW9uLnJlc3RvcmUoKTtcblxuICAgIGNvbnN0IGVsU2VsZWN0aW9uID0gdGhpcy5lZGl0b3Iuc2VsZWN0aW9uLmVsZW1lbnQoKTtcbiAgICBpZiAoZWxTZWxlY3Rpb24pIHtcbiAgICAgIGVsU2VsZWN0aW9uLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICdjZW50ZXInIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICB0aGlzLndyaXRlVmFsdWUoJycpO1xuICB9XG5cbiAgcHVibGljIGRpc2FibGUoKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgc2V0SHRtbChodG1sKSB7XG4gICAgdGhpcy53cml0ZVZhbHVlKGh0bWwpO1xuICB9XG5cbiAgcHVibGljIHdyaXRlVmFsdWUoaHRtbDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5faHRtbCA9IGh0bWwgfHwgJyc7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLl9odG1sKSkge1xuICAgICAgdGhpcy5faHRtbCA9IHRoaXMuX2h0bWwucG9wKCk7XG4gICAgfVxuXG4gICAgdGhpcy5faHRtbCA9IHRoaXMuX2h0bWxcbiAgICAgIC5yZXBsYWNlKC88KGxpKT5cXHM/PChkaXYpPi9nLCAnPGxpPicpXG4gICAgICAucmVwbGFjZSgvPFxcLyhkaXYpPjxcXC8obGkpPi9nLCAnPC9saT4nKTtcblxuICAgIGlmICh0aGlzLmVkaXRvciAmJiB0aGlzLmVkaXRvci5odG1sKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmVkaXRvci5odG1sLnNldCh0aGlzLl9odG1sKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy9cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoZGF0YTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9pbml0aWFsaXplJC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuZWRpdG9yKSB7XG4gICAgICB0aGlzLmVkaXRvci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuZWwuaW5uZXJIVE1MID0gJyc7XG4gIH1cblxuICBwcml2YXRlIF9wcm9jZXNzSW1hZ2VVcGxvYWQoYmxvYikge1xuICAgIGNvbnN0IHByb2Nlc3NvciA9IG5ldyBGaWxlUHJvY2Vzc29yKCk7XG4gICAgY29uc3QgZmlsZSA9IG5ldyBGc0ZpbGUoYmxvYik7XG5cbiAgICBjb25zdCBjb25maWc6IEZzRmlsZVByb2Nlc3NDb25maWcgPSB7XG4gICAgICBvcmllbnRhdGU6IHRydWUsXG4gICAgICBxdWFsaXR5OiB0aGlzLmNvbmZpZy5pbWFnZS5xdWFsaXR5LFxuICAgICAgZm9ybWF0OiB0aGlzLmNvbmZpZy5pbWFnZS5mb3JtYXQgYXMgYW55LFxuICAgICAgbWF4V2lkdGg6IHRoaXMuY29uZmlnLmltYWdlLndpZHRoLFxuICAgICAgbWF4SGVpZ2h0OiB0aGlzLmNvbmZpZy5pbWFnZS5oZWlnaHQsXG4gICAgICBtaW5XaWR0aDogdGhpcy5jb25maWcuaW1hZ2UubWluV2lkdGgsXG4gICAgICBtaW5IZWlnaHQ6IHRoaXMuY29uZmlnLmltYWdlLm1pbkhlaWdodCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHByb2Nlc3Nvci5wcm9jZXNzRmlsZShmaWxlLCBjb25maWcpXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChmc0ZpbGU6IEZzRmlsZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5pbWFnZS51cGxvYWQoZnNGaWxlLmZpbGUpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVDb25maWcoKTogRnNIdG1sRWRpdG9yQ29uZmlnIHtcbiAgICByZXR1cm4gbWVyZ2UoeyBmcm9hbGFDb25maWc6IHt9IH0sIHRoaXMuX2RlZmF1bHRDb25maWcsIHRoaXMuY29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NoYW5nZShodG1sKTogdm9pZCB7XG4gICAgdGhpcy5faHRtbCA9IGh0bWw7XG4gICAgdGhpcy5vbkNoYW5nZShodG1sKTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRCdXR0b25zKGNvbmZpZzogRnNIdG1sRWRpdG9yQ29uZmlnKSB7XG4gICAgKGNvbmZpZy5idXR0b25zIHx8IFtdKVxuICAgICAgLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAvKlxuICAgICAgICAgIFN2ZyBLZXlzOlxuICAgICAgICAgIFtcImFkZFwiLCBcImFkdmFuY2VkSW1hZ2VFZGl0b3JcIiwgXCJhbGlnbkNlbnRlclwiLCBcImFsaWduSnVzdGlmeVwiLCBcImFsaWduTGVmdFwiLCBcImFsaWduUmlnaHRcIixcbiAgICAgICAgICBcImFuY2hvcnNcIiwgXCJiYWNrXCIsIFwiYmFja2dyb3VuZENvbG9yXCIsIFwiYmxvY2txdW90ZVwiLCBcImJvbGRcIiwgXCJjZWxsQmFja2dyb3VuZFwiLFxuICAgICAgICAgIFwiY2VsbEJvcmRlckNvbG9yXCIsIFwiY2VsbE9wdGlvbnNcIiwgXCJjZWxsU3R5bGVcIiwgXCJjbGVhckZvcm1hdHRpbmdcIiwgXCJjbG9zZVwiLCBcImNvZGVWaWV3XCIsXG4gICAgICAgICAgXCJjb2dzXCIsIFwiY29sdW1uc1wiLCBcImVkaXRMaW5rXCIsIFwiZXhpdEZ1bGxzY3JlZW5cIiwgXCJmb250QXdlc29tZVwiLCBcImZvbnRGYW1pbHlcIixcbiAgICAgICAgICBcImZvbnRTaXplXCIsIFwiZnVsbHNjcmVlblwiLCBcImhlbHBcIiwgXCJob3Jpem9udGFsTGluZVwiLCBcImltYWdlQWx0VGV4dFwiLCBcImltYWdlQ2FwdGlvblwiLFxuICAgICAgICAgIFwiaW1hZ2VDbGFzc1wiLCBcImltYWdlRGlzcGxheVwiLCBcImltYWdlTWFuYWdlclwiLCBcImltYWdlU2l6ZVwiLCBcImluZGVudFwiLCBcImlubGluZUNsYXNzXCIsXG4gICAgICAgICAgXCJpbmxpbmVTdHlsZVwiLCBcImluc2VydEVtYmVkXCIsIFwiaW5zZXJ0RmlsZVwiLCBcImluc2VydEltYWdlXCIsIFwiaW5zZXJ0TGlua1wiLCBcImluc2VydE1vcmVcIixcbiAgICAgICAgICBcImluc2VydFRhYmxlXCIsIFwiaW5zZXJ0VmlkZW9cIiwgXCJ1cGxvYWRcIiwgXCJpdGFsaWNcIiwgXCJzZWFyY2hcIiwgXCJsaW5lSGVpZ2h0XCIsIFwibGlua1N0eWxlc1wiLFxuICAgICAgICAgIFwibWVudGlvblwiLCBcIm1vcmVcIiwgXCJvcGVuTGlua1wiLCBcIm9yZGVyZWRMaXN0XCIsIFwib3V0ZGVudFwiLCBcInBhZ2VCcmVha2VyXCIsXG4gICAgICAgICAgXCJwYXJhZ3JhcGhGb3JtYXRcIiwgXCJwYXJhZ3JhcGhNb3JlXCIsIFwicGFyYWdyYXBoU3R5bGVcIiwgXCJwZGZFeHBvcnRcIiwgXCJwcmludFwiLFxuICAgICAgICAgIFwicmVkb1wiLCBcInJlbW92ZVRhYmxlXCIsIFwicmVtb3ZlXCIsIFwicmVwbGFjZUltYWdlXCIsIFwicm93XCIsIFwic2VsZWN0QWxsXCIsIFwic21pbGVcIixcbiAgICAgICAgICBcInNwZWxsY2hlY2tcIiwgXCJzdGFyXCIsIFwic3RyaWtlVGhyb3VnaFwiLCBcInN1YnNjcmlwdFwiLCBcInN1cGVyc2NyaXB0XCIsIFwic3ltYm9sc1wiLCBcInRhZ3NcIixcbiAgICAgICAgICBcInRhYmxlSGVhZGVyXCIsIFwidGFibGVTdHlsZVwiLCBcInRleHRDb2xvclwiLCBcInRleHRNb3JlXCIsIFwidW5kZXJsaW5lXCIsIFwidW5kb1wiLCBcInVubGlua1wiLFxuICAgICAgICAgIFwidW5vcmRlcmVkTGlzdFwiLCBcInZlcnRpY2FsQWxpZ25Cb3R0b21cIiwgXCJ2ZXJ0aWNhbEFsaWduTWlkZGxlXCIsIFwidmVydGljYWxBbGlnblRvcFwiXVxuICAgICAgICAqL1xuXG4gICAgICAgIGlmIChidXR0b24uc3ZnS2V5KSB7XG4gICAgICAgICAgdGhpcy5fZnIuRnJvYWxhRWRpdG9yLkRlZmluZUljb24oYnV0dG9uLm5hbWUsIHsgU1ZHX0tFWTogYnV0dG9uLnN2Z0tleSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2ZyLkZyb2FsYUVkaXRvci5SZWdpc3RlckNvbW1hbmQoYnV0dG9uLm5hbWUsIHtcbiAgICAgICAgICB0aXRsZTogYnV0dG9uLnRpdGxlLFxuICAgICAgICAgIGZvY3VzOiBidXR0b24uZm9jdXMgPz8gdHJ1ZSxcbiAgICAgICAgICB1bmRvOiBidXR0b24udW5kbyA/PyB0cnVlLFxuICAgICAgICAgIHJlZnJlc2hBZnRlckNhbGxiYWNrOiBidXR0b24ucmVmcmVzaEFmdGVyQ2FsbGJhY2sgPz8gdHJ1ZSxcbiAgICAgICAgICBjYWxsYmFjaygpIHtcbiAgICAgICAgICAgIGJ1dHRvbi5jbGljayh0aGlzKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdFBsdWdpbnMoY29uZmlnOiBGc0h0bWxFZGl0b3JDb25maWcpIHtcbiAgICAoY29uZmlnLnBsdWdpbnMgfHwgW10pLmZvckVhY2goKHBsdWdpbjogUGx1Z2luKSA9PiB7XG4gICAgICB0aGlzLl9mci5Gcm9hbGFFZGl0b3IuUExVR0lOU1twbHVnaW4uY29uZmlnLm5hbWVdID0gZnVuY3Rpb24gKGVkaXRvcikge1xuICAgICAgICBwbHVnaW4uZWRpdG9yID0gZWRpdG9yO1xuICAgICAgICBwbHVnaW4uaW5pdGlhbGl6ZSgpO1xuXG4gICAgICAgIHJldHVybiBwbHVnaW47XG4gICAgICB9O1xuXG4gICAgICAoW1xuICAgICAgICAuLi4ocGx1Z2luLmNvbmZpZy5idXR0b25zIHx8IFtdKSxcbiAgICAgICAgLi4uKGNvbmZpZy5wcmVwZW5kVG9vbGJhclRleHRCdXR0b25zIHx8IFtdKSxcbiAgICAgIF0pXG4gICAgICAgIC5mb3JFYWNoKChidXR0b246IFRvb2xiYXJCdXR0b24pID0+IHtcbiAgICAgICAgICB0aGlzLl9kZWZpbmVCdXR0b24oYnV0dG9uKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9kZWZpbmVCdXR0b24oYnV0dG9uOiBUb29sYmFyQnV0dG9uKSB7XG4gICAgaWYoYnV0dG9uLmh0bWwpIHtcbiAgICAgIHRoaXMuX2ZyLkZyb2FsYUVkaXRvclxuICAgICAgICAuRGVmaW5lSWNvblRlbXBsYXRlKGAke2J1dHRvbi5uYW1lfS10ZW1wbGF0ZWAsIGJ1dHRvbi5odG1sKTtcbiAgICAgIHRoaXMuX2ZyLkZyb2FsYUVkaXRvclxuICAgICAgICAuRGVmaW5lSWNvbihidXR0b24ubmFtZSwgeyBcbiAgICAgICAgICBOQU1FOiBgJHtidXR0b24ubmFtZX0taWNvbmAsXG4gICAgICAgICAgdGVtcGxhdGU6IGAke2J1dHRvbi5uYW1lfS10ZW1wbGF0ZWAsIFxuICAgICAgICB9KTtcbiAgXG4gICAgfSBlbHNlIHsgXG4gICAgICB0aGlzLl9mci5Gcm9hbGFFZGl0b3IuRGVmaW5lSWNvbihidXR0b24ubmFtZSwge1xuICAgICAgICBOQU1FOiBidXR0b24ubmFtZSxcbiAgICAgICAgUEFUSDogYnV0dG9uLnN2Z1BhdGgsXG4gICAgICB9KTtcbiAgICB9IFxuXG4gICAgdGhpcy5fZnIuRnJvYWxhRWRpdG9yLlJlZ2lzdGVyQ29tbWFuZChidXR0b24ubmFtZSwge1xuICAgICAgaWNvbjogYnV0dG9uLm5hbWUsXG4gICAgICB0aXRsZTogYnV0dG9uLnRvb2x0aXAsXG4gICAgICB1bmRvOiBidXR0b24udW5kbyxcbiAgICAgIGZvY3VzOiBidXR0b24uZm9jdXMsXG4gICAgICBzaG93T25Nb2JpbGU6IGJ1dHRvbi5zaG93T25Nb2JpbGUsXG4gICAgICByZWZyZXNoQWZ0ZXJDYWxsYmFjazogYnV0dG9uLnJlZnJlc2hBZnRlckNhbGxiYWNrLFxuICAgICAgY2FsbGJhY2soKSB7XG4gICAgICAgIGlmIChidXR0b24uY2xpY2spIHtcbiAgICAgICAgICBidXR0b24uY2xpY2sodGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICByZWZyZXNoKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5yZWZyZXNoKSB7XG4gICAgICAgICAgZXZlbnQucmVmcmVzaCh0aGlzLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZU9wdGlvbnMoKSB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5fY3JlYXRlQ29uZmlnKCk7XG5cbiAgICBjb25zdCB0ZXh0QnV0dG9ucyA9IFtcbiAgICAgIC4uLihjb25maWcucHJlcGVuZFRvb2xiYXJUZXh0QnV0dG9ucyB8fCBbXSlcbiAgICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS5uYW1lKSxcbiAgICAgIC4uLlRleHRCdXR0b25zLFxuICAgIF07XG5cbiAgICByZXR1cm4gbWVyZ2UoXG4gICAgICAvLyBGb3Igc29tZSByZWFzb24gZWRpdG9yIHN0b3JlIHNvbWV3aGVyZSBwb2ludGVyIG9uIGRlZmF1bHQgY29uZmlnIG9iamVjdCBhbmQgZHVibGljYXRlIG9wdGlvbnMgZWFjaCB0aW1lIG9uIGluaXRcbiAgICAgIC8vIEV4dHJhIG1lcmdlIGxldmVsIGZpeGVkIHRoaXMgcHJvYmxlbSBhbmQgYWxsb3cgdG8gaW5pdCBjb25maWcgcHJvcGVybHkgd2l0aG91dCBsZWdhY3kgZGF0YVxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIHNob3J0Y3V0c0VuYWJsZWQ6IFsnc2hvdycsICdib2xkJywgJ2l0YWxpYycsICd1bmRlcmxpbmUnLCAnaW5kZW50JywgJ291dGRlbnQnLCAndW5kbycsICdyZWRvJywgJ2luc2VydEltYWdlJywgJ2NyZWF0ZUxpbmsnXSxcbiAgICAgICAga2V5OiBjb25maWcuYWN0aXZhdGlvbktleSxcbiAgICAgICAgcGxhY2Vob2xkZXJUZXh0OiBjb25maWcucGxhY2Vob2xkZXIsXG4gICAgICAgIGxpbmtBbHdheXNCbGFuazogdHJ1ZSxcbiAgICAgICAgdGFiU3BhY2VzOiAyLFxuICAgICAgICB0eXBpbmdUaW1lcjogMjUwLFxuICAgICAgICB0b29sdGlwczogZmFsc2UsXG4gICAgICAgIHdvcmRQYXN0ZU1vZGFsOiBmYWxzZSxcbiAgICAgICAgaW1hZ2VEZWZhdWx0V2lkdGg6IDAsXG4gICAgICAgIGltYWdlRGVmYXVsdEFsaWduOiAnbGVmdCcsXG4gICAgICAgIHF1aWNrSW5zZXJ0RW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHNjcm9sbGFibGVDb250YWluZXI6IGAjJHt0aGlzLmNvbnRhaW5lcklEfWAsXG4gICAgICAgIHBhcmFncmFwaERlZmF1bHRTZWxlY3Rpb246ICdGb3JtYXQnLFxuICAgICAgICB2aWRlb1VwbG9hZDogZmFsc2UsXG4gICAgICAgIGltYWdlUGFzdGU6ICEhY29uZmlnLmltYWdlPy51cGxvYWQsXG4gICAgICAgIGltYWdlVXBsb2FkOiAhIWNvbmZpZy5pbWFnZT8udXBsb2FkLFxuICAgICAgICBwYXJhZ3JhcGhGb3JtYXQ6IHtcbiAgICAgICAgICBOOiAnTm9ybWFsJyxcbiAgICAgICAgICBIMTogJ0hlYWRpbmcgMScsXG4gICAgICAgICAgSDI6ICdIZWFkaW5nIDInLFxuICAgICAgICAgIEgzOiAnSGVhZGluZyAzJyxcbiAgICAgICAgICBINDogJ0hlYWRpbmcgNCcsXG4gICAgICAgICAgQkxPQ0tRVU9URTogJ1F1b3RlJyxcbiAgICAgICAgfSxcbiAgICAgICAgbGluZUhlaWdodHM6IHtcbiAgICAgICAgICBEZWZhdWx0OiAnJyxcbiAgICAgICAgICAwLjU6ICcwLjUnLFxuICAgICAgICAgIFNpbmdsZTogJzEnLFxuICAgICAgICAgIDEuMTU6ICcxLjE1JyxcbiAgICAgICAgICAxLjU6ICcxLjUnLFxuICAgICAgICAgIERvdWJsZTogJzInLFxuICAgICAgICB9LFxuICAgICAgICBwYXJhZ3JhcGhGb3JtYXRTZWxlY3Rpb246IHRydWUsXG4gICAgICAgIHRvb2xiYXJCdXR0b25zWFM6IHtcbiAgICAgICAgICBtb3JlVGV4dDoge1xuICAgICAgICAgICAgYnV0dG9uczogdGV4dEJ1dHRvbnMsXG4gICAgICAgICAgICBidXR0b25zVmlzaWJsZTogMSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1vcmVQYXJhZ3JhcGg6IHtcbiAgICAgICAgICAgIGJ1dHRvbnM6IFBhcmFncmFwaEJ1dHRvbnMsXG4gICAgICAgICAgICBidXR0b25zVmlzaWJsZTogMixcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1vcmVSaWNoOiB7XG4gICAgICAgICAgICBidXR0b25zOiBSaWNoQnV0dG9ucyxcbiAgICAgICAgICAgIGJ1dHRvbnNWaXNpYmxlOiAwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHRvb2xiYXJCdXR0b25zOiB7XG4gICAgICAgICAgbW9yZVRleHQ6IHtcbiAgICAgICAgICAgIGJ1dHRvbnM6IHRleHRCdXR0b25zLFxuICAgICAgICAgICAgYnV0dG9uc1Zpc2libGU6IDMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtb3JlUGFyYWdyYXBoOiB7XG4gICAgICAgICAgICBidXR0b25zOiBQYXJhZ3JhcGhCdXR0b25zLFxuICAgICAgICAgICAgYnV0dG9uc1Zpc2libGU6IDUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtb3JlUmljaDoge1xuICAgICAgICAgICAgYnV0dG9uczogUmljaEJ1dHRvbnMsXG4gICAgICAgICAgICBidXR0b25zVmlzaWJsZTogMyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGNvbmZpZy5mcm9hbGFDb25maWcsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2xpc3RlbkxhenlJbml0KCkge1xuXG4gICAgdGhpcy5mcm9hbGFMb2FkZWQkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChyZWFkeSkgPT4gcmVhZHkpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5faW5pdGlhbGl6ZSQpLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbjogYW55ID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgIGNvbnN0IG9wdGlvbnM6IGFueSA9IHt9O1xuICAgICAgICAgIGlmIChzZWxlY3Rpb24uYmFzZU5vZGUpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuc2VsZWN0aW9uID0ge1xuICAgICAgICAgICAgICBub2RlOiBzZWxlY3Rpb24uYmFzZU5vZGUubm9kZVZhbHVlLFxuICAgICAgICAgICAgICBvZmZzZXQ6IHNlbGVjdGlvbi5iYXNlT2Zmc2V0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pbml0aWFsaXplKG9wdGlvbnMpO1xuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX2Zyb2FsYVJlYWR5JCksXG4gICAgICAgIGZpbHRlcigoZGF0YSkgPT4gISFkYXRhKSxcbiAgICAgICAgdGFwKCh7IGNvbmZpZywgb3B0aW9ucyB9KSA9PiB7XG4gICAgICAgICAgdGhpcy5fc2V0dXBGcm9hbGEoY29uZmlnLCBvcHRpb25zKTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIF9jb250ZW50Q2hhbmdlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBlZGl0b3JIVE1MID0gdGhpcy5fZWRpdG9yLmh0bWwuZ2V0KCk7XG5cbiAgICBpZiAodGhpcy5odG1sICE9PSBlZGl0b3JIVE1MKSB7XG4gICAgICB0aGlzLl9jaGFuZ2UoZWRpdG9ySFRNTCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0dXBGcm9hbGEoY29uZmlnOiBGc0h0bWxFZGl0b3JDb25maWcsIG9wdGlvbnM6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgdGhpcy5zZXRIdG1sKHRoaXMuX2h0bWwpO1xuXG4gICAgaWYgKGNvbmZpZy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5kaXNhYmxlKCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5mcm9hbGFDb25maWcuZXZlbnRzKSB7XG4gICAgICBpZiAoY29uZmlnLmZyb2FsYUNvbmZpZy5ldmVudHMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgY29uZmlnLmZyb2FsYUNvbmZpZy5ldmVudHMuaW5pdGlhbGl6ZWQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9lZGl0b3IuZXZlbnRzLm9uKCdmb2N1cycsICgpID0+IHtcbiAgICAgIHRoaXMuY2xhc3NGb2N1c2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fZWRpdG9yLmV2ZW50cy5vbignYmx1cicsICgpID0+IHtcbiAgICAgIHRoaXMuY2xhc3NGb2N1c2VkID0gZmFsc2U7XG4gICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2VkaXRvci5ldmVudHMub24oJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY29uZmlnLmluaXRPbkNsaWNrICYmICF0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGZyb21FdmVudFBhdHRlcm4oXG4gICAgICAoaGFuZGxlcikgPT4ge1xuICAgICAgICB0aGlzLl9lZGl0b3IuZXZlbnRzLm9uKCdjb250ZW50Q2hhbmdlZCcsIGhhbmRsZXIpO1xuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgLy9cbiAgICAgIH0sXG4gICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aCh0aGlzLl9odG1sKSxcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuZWRpdG9yLmh0bWwuZ2V0KCkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBza2lwKDEpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NvbnRlbnRDaGFuZ2VkKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX2VkaXRvci5ldmVudHMub24oJ3Bhc3RlLmFmdGVyQ2xlYW51cCcsIChodG1sKSA9PiB7XG4gICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGRpdi5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJyonKVxuICAgICAgICAuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBlbC5hdHRyaWJ1dGVzWzBdLm5hbWU7XG4gICAgICAgICAgICBpZiAobmFtZSAhPT0gJ2hyZWYnKSB7XG4gICAgICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZGl2LmlubmVySFRNTDtcbiAgICB9KTtcblxuICAgIHRoaXMuX2VkaXRvci5ldmVudHMub24oJ2tleWRvd24nLCAoKSA9PiB7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLmltYWdlICYmIHRoaXMuY29uZmlnLmltYWdlLnVwbG9hZCkge1xuICAgICAgdGhpcy5fZWRpdG9yLmV2ZW50cy5vbignaW1hZ2UuYmVmb3JlUGFzdGVVcGxvYWQnLCAoaW1hZ2UpID0+IHtcblxuICAgICAgICBmZXRjaChpbWFnZS5nZXRBdHRyaWJ1dGUoJ3NyYycpKVxuICAgICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgIHJlcy5ibG9iKClcbiAgICAgICAgICAgICAgLnRoZW4oKGJsb2IpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzSW1hZ2VVcGxvYWQoYmxvYilcbiAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgodXJsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlLnNldEF0dHJpYnV0ZSgnc3JjJywgdXJsKTtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2UucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWZyLWltYWdlLXBhc3RlZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRDaGFuZ2VkKCk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX2VkaXRvci5ldmVudHMub24oJ2ltYWdlLmJlZm9yZVVwbG9hZCcsIChibG9icykgPT4ge1xuICAgICAgICB0aGlzLl9wcm9jZXNzSW1hZ2VVcGxvYWQoYmxvYnNbMF0pXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKCh1cmwpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmltYWdlLmluc2VydCh1cmwsIG51bGwsIG51bGwsIHRoaXMuZWRpdG9yLmltYWdlLmdldCgpKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbC5xdWVyeVNlbGVjdG9yKCcuZnItc2Vjb25kLXRvb2xiYXInKSkge1xuICAgICAgdGhpcy5lbC5xdWVyeVNlbGVjdG9yKCcuZnItc2Vjb25kLXRvb2xiYXInKS5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcuYXV0b2ZvY3VzICYmICF0aGlzLmNvbmZpZy5pbml0T25DbGljaykge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgfVxufVxuIiwiPGZzLWxhYmVsLWZpZWxkPlxuICA8ZnMtbGFiZWwgKm5nSWY9XCJjb25maWcubGFiZWxcIj57e2NvbmZpZy5sYWJlbH19PC9mcy1sYWJlbD5cbiAgPGRpdlxuICAgICAgY2xhc3M9XCJodG1sLWVkaXRvci1jb250YWluZXIgZnMtaHRtbC1lZGl0b3ItZGVmYXVsdFwiXG4gICAgICBbaWRdPVwiY29udGFpbmVySURcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICBpbml0aWFsaXplZDogaW5pdGlhbGl6ZWQsXG4gICAgICAgICdpbml0LW9uLWNsaWNrJzogY29uZmlnLmluaXRPbkNsaWNrXG4gICAgICB9XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqZnNTa2VsZXRvbj1cIihmcm9hbGFMb2FkZWQkIHwgYXN5bmMpICE9PSBmYWxzZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDxkaXYgI2VsUmVmPjwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImJvdHRvbS1saW5lXCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImRpc2FibGVkLWxpbmVcIj48L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGZzLWxhYmVsLW1lc3NhZ2U+XG4gICAgPGRpdiBjbGFzcz1cImZzLWZvcm0tbWVzc2FnZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZzLWZvcm0taGludFwiPnt7aGludH19PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZnMtbGFiZWwtbWVzc2FnZT5cbjwvZnMtbGFiZWwtZmllbGQ+XG4iXX0=
|
|
502
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2h0bWwtZWRpdG9yL2NvbXBvbmVudHMvaHRtbC1lZGl0b3IvaHRtbC1lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2h0bWwtZWRpdG9yL2NvbXBvbmVudHMvaHRtbC1lZGl0b3IvaHRtbC1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLGdCQUFnQixFQUVoQixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLE1BQU0sR0FHUCxNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBdUIsTUFBTSxrQkFBa0IsQ0FBQztBQUU5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFjLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0YsT0FBTyxFQUNMLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FDOUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRWxDLE9BQU8sRUFBRSxx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QkEsc25JRDJDaUI7UUFDYjtZQUNFLE9BQU8sRUFBRSxnQkFBZ0I7WUFDekIsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDMUIsVUFBVSxFQUFFLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FBQyxNQUFNO1NBQ3ZDO0tBQ0Y7MkZBRVUscUJBQXFCO2tCQXpCakMsU0FBUzsrQkFDRSxnQkFBZ0IsYUFHZjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQzs0QkFDcEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHNCQUFzQixDQUFDOzRCQUNwRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEM7d0JBQ2I7NEJBQ0UsT0FBTyxFQUFFLGdCQUFnQjs0QkFDekIsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7NEJBQzFCLFVBQVUsRUFBRSxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUMsTUFBTTt5QkFDdkM7cUJBQ0Y7OzBCQTZCRSxRQUFROzswQkFDUixNQUFNOzJCQUFDLHFCQUFxQjs4QkFHVixRQUFROzBCQUQxQixNQUFNOzJCQUFDLFFBQVE7Z0hBM0JtQixZQUFZO3NCQUFoRCxXQUFXO3VCQUFDLGVBQWU7Z0JBRUQsS0FBSztzQkFBL0IsU0FBUzt1QkFBQyxPQUFPO2dCQUVGLE1BQU07c0JBQXJCLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFJQyxRQUFRO3NCQUZkLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xDb250YWluZXIsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOR19WQUxJREFUT1JTLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgTmdGb3JtLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgZ3VpZCB9IGZyb20gJ0BmaXJlc3RpdGNoL2NvbW1vbic7XG5pbXBvcnQgeyBGaWxlUHJvY2Vzc29yLCBGc0ZpbGUsIEZzRmlsZVByb2Nlc3NDb25maWcgfSBmcm9tICdAZmlyZXN0aXRjaC9maWxlJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tRXZlbnRQYXR0ZXJuLCBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHNraXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBtZXJnZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmltcG9ydCB7IEZTX0hUTUxfRURJVE9SX0NPTkZJRyB9IGZyb20gJy4uLy4uL2luamVjdHMvY29uZmlnLmluamVjdCc7XG5pbXBvcnQgeyBUb29sYmFyQnV0dG9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGc0h0bWxFZGl0b3JDb25maWcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2h0bWwtZWRpdG9yLWNvbmZpZyc7XG5pbXBvcnQgeyBGc0Zyb2FsYUxvYWRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mcm9hbGEtbG9hZGVyLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBQbHVnaW4gfSBmcm9tICcuLy4uLy4uL2NsYXNzZXMvcGx1Z2luJztcbmltcG9ydCB7IFBhcmFncmFwaEJ1dHRvbnMgfSBmcm9tICcuLy4uLy4uL2NvbnN0cy9wYXJhZ3JhcGgtYnV0dG9ucy5jb25zdCc7XG5pbXBvcnQgeyBSaWNoQnV0dG9ucyB9IGZyb20gJy4vLi4vLi4vY29uc3RzL3JpY2gtYnV0dG9ucy5jb25zdCc7XG5pbXBvcnQgeyBUZXh0QnV0dG9ucyB9IGZyb20gJy4vLi4vLi4vY29uc3RzL3RleHQtYnV0dG9ucy5jb25zdCc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtaHRtbC1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vaHRtbC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9odG1sLWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZzSHRtbEVkaXRvckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGc0h0bWxFZGl0b3JDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHZpZXdQcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLFxuICAgICAgZGVwczogW1tPcHRpb25hbCwgTmdGb3JtXV0sXG4gICAgICB1c2VGYWN0b3J5OiAobmdGb3JtOiBOZ0Zvcm0pID0+IG5nRm9ybSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGc0h0bWxFZGl0b3JDb21wb25lbnQgXG5pbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgT25EZXN0cm95IHtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZvY3VzZWQnKSBwdWJsaWMgY2xhc3NGb2N1c2VkID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgnZWxSZWYnKSBwdWJsaWMgZWxSZWY6IEVsZW1lbnRSZWY7XG5cbiAgQElucHV0KCkgcHVibGljIGNvbmZpZzogRnNIdG1sRWRpdG9yQ29uZmlnID0ge307XG4gIEBJbnB1dCgpIHB1YmxpYyBoaW50OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kaXNhYmxlZCcpXG4gIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIHB1YmxpYyBpbml0aWFsaXplZCA9IGZhbHNlO1xuICBwdWJsaWMgcmVhZG9ubHkgY29udGFpbmVySUQgPSBgZnMtaHRtbC1lZGl0b3ItJHtndWlkKCd4eHgnKX1gO1xuICBwdWJsaWMgb25Ub3VjaGVkOiAoKSA9PiB2b2lkO1xuICBwdWJsaWMgb25DaGFuZ2U6IChkYXRhOiBhbnkpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBfZWRpdG9yOiBhbnk7XG4gIHByaXZhdGUgX2h0bWw6IHN0cmluZztcbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZSQgPSBuZXcgUmVwbGF5U3ViamVjdCgpO1xuICBwcml2YXRlIF9mcm9hbGFSZWFkeSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuICBwcml2YXRlIF93aW5kb3c6IGFueSA9IHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3O1xuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KEZTX0hUTUxfRURJVE9SX0NPTkZJRylcbiAgICBwcml2YXRlIF9kZWZhdWx0Q29uZmlnLFxuICAgIEBJbmplY3QoRE9DVU1FTlQpXG4gICAgcHJpdmF0ZSBfZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgIHByaXZhdGUgX2NkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIF9mcjogRnNGcm9hbGFMb2FkZXJTZXJ2aWNlLFxuICApIHsgfVxuXG4gIHB1YmxpYyBnZXQgZWwoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgcHVibGljIGdldCBodG1sKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2h0bWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVkaXRvcigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3I7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZyb2FsYUxvYWRlZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZyLmxvYWRlZCQ7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcgPSB0aGlzLmNvbmZpZyB8fCB7fTtcbiAgICB0aGlzLmNvbmZpZy5hdXRvZm9jdXMgPSB0aGlzLmNvbmZpZy5hdXRvZm9jdXMgJiYgKCF0aGlzLmNvbmZpZy5kaXNhYmxlZCB8fCAhdGhpcy5kaXNhYmxlZCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuX2xpc3RlbkxhenlJbml0KCk7XG4gICAgdGhpcy5faW5pdGlhbGl6ZSQubmV4dCgpO1xuICB9XG5cbiAgcHVibGljIGhhc0NvbnRlbnQoKSB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgIGlmIChlbC5xdWVyeVNlbGVjdG9yKCdpbWcnKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZWwuaW5uZXJIVE1MID0gdGhpcy5faHRtbDtcblxuICAgIHJldHVybiAhIWVsLmlubmVyVGV4dC5sZW5ndGg7XG4gIH1cblxuICBwdWJsaWMgaW5pdGlhbGl6ZShvcHRpb25zOiBhbnkgPSB7fSkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuX2NyZWF0ZUNvbmZpZygpO1xuICAgIHRoaXMuX2luaXRQbHVnaW5zKGNvbmZpZyk7XG4gICAgdGhpcy5faW5pdEJ1dHRvbnMoY29uZmlnKTtcbiAgICB0aGlzLl9lZGl0b3IgPSBuZXcgdGhpcy5fZnIuRnJvYWxhRWRpdG9yKHRoaXMuZWwsIHRoaXMuX2NyZWF0ZU9wdGlvbnMoKSwgKCkgPT4ge1xuICAgICAgdGhpcy5fZnJvYWxhUmVhZHkkLm5leHQoeyBjb25maWcsIG9wdGlvbnMgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU2l6ZSgpIHtcbiAgICAvLyBIYWNrOiBUbyB0cmlnZ2VyIHRoZSB0b29sYmFyIGJ1dHRvbiBzaXplIG1vZGVzXG4gICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZXNpemUnKSk7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IGVycjogYW55ID0ge307XG4gICAgaWYgKHRoaXMuY29uZmlnLm1heExlbmd0aCAmJiB0aGlzLl9odG1sKSB7XG4gICAgICBjb25zdCBtYXhMZW5ndGggPSB0aGlzLmNvbmZpZy5tYXhMZW5ndGg7XG4gICAgICBjb25zdCBsZW5ndGggPSB0aGlzLl9odG1sLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICAgICAgZXJyLm1heExlbmd0aEVycm9yID0gYE11c3QgYmUgJHttYXhMZW5ndGh9IGNoYXJhY3RlcnMgb3IgZmV3ZXIuIFlvdSBlbnRlcmVkICR7bGVuZ3RofSBjaGFyYWN0ZXJzLmA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGVycikubGVuZ3RoID8gZXJyIDogbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBmb2N1cyhvcHRpb25zPzogeyBjdXJzb3JQb3NpdGlvbj86ICdzdGFydCcgfCAnZW5kJyB9KSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgPyBvcHRpb25zIDoge307XG5cbiAgICBpZiAob3B0aW9ucy5jdXJzb3JQb3NpdGlvbiA9PT0gJ2VuZCcpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnNlbGVjdGlvbi5zZXRBdEVuZCh0aGlzLmVkaXRvci4kZWwuZ2V0KDApKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lZGl0b3Iuc2VsZWN0aW9uLnNldEF0U3RhcnQodGhpcy5lZGl0b3IuJGVsLmdldCgwKSk7XG4gICAgfVxuXG4gICAgdGhpcy5lZGl0b3Iuc2VsZWN0aW9uLnJlc3RvcmUoKTtcblxuICAgIGNvbnN0IGVsU2VsZWN0aW9uID0gdGhpcy5lZGl0b3Iuc2VsZWN0aW9uLmVsZW1lbnQoKTtcbiAgICBpZiAoZWxTZWxlY3Rpb24pIHtcbiAgICAgIGVsU2VsZWN0aW9uLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICdjZW50ZXInIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICB0aGlzLndyaXRlVmFsdWUoJycpO1xuICB9XG5cbiAgcHVibGljIGRpc2FibGUoKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgc2V0SHRtbChodG1sKSB7XG4gICAgdGhpcy53cml0ZVZhbHVlKGh0bWwpO1xuICB9XG5cbiAgcHVibGljIHdyaXRlVmFsdWUoaHRtbDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5faHRtbCA9IGh0bWwgfHwgJyc7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLl9odG1sKSkge1xuICAgICAgdGhpcy5faHRtbCA9IHRoaXMuX2h0bWwucG9wKCk7XG4gICAgfVxuXG4gICAgdGhpcy5faHRtbCA9IHRoaXMuX2h0bWxcbiAgICAgIC5yZXBsYWNlKC88KGxpKT5cXHM/PChkaXYpPi9nLCAnPGxpPicpXG4gICAgICAucmVwbGFjZSgvPFxcLyhkaXYpPjxcXC8obGkpPi9nLCAnPC9saT4nKTtcblxuICAgIGlmICh0aGlzLmVkaXRvciAmJiB0aGlzLmVkaXRvci5odG1sKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmVkaXRvci5odG1sLnNldCh0aGlzLl9odG1sKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy9cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoZGF0YTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9pbml0aWFsaXplJC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuZWRpdG9yKSB7XG4gICAgICB0aGlzLmVkaXRvci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuZWwuaW5uZXJIVE1MID0gJyc7XG4gIH1cblxuICBwcml2YXRlIF9wcm9jZXNzSW1hZ2VVcGxvYWQoYmxvYikge1xuICAgIGNvbnN0IHByb2Nlc3NvciA9IG5ldyBGaWxlUHJvY2Vzc29yKCk7XG4gICAgY29uc3QgZmlsZSA9IG5ldyBGc0ZpbGUoYmxvYik7XG5cbiAgICBjb25zdCBjb25maWc6IEZzRmlsZVByb2Nlc3NDb25maWcgPSB7XG4gICAgICBvcmllbnRhdGU6IHRydWUsXG4gICAgICBxdWFsaXR5OiB0aGlzLmNvbmZpZy5pbWFnZS5xdWFsaXR5LFxuICAgICAgZm9ybWF0OiB0aGlzLmNvbmZpZy5pbWFnZS5mb3JtYXQgYXMgYW55LFxuICAgICAgbWF4V2lkdGg6IHRoaXMuY29uZmlnLmltYWdlLndpZHRoLFxuICAgICAgbWF4SGVpZ2h0OiB0aGlzLmNvbmZpZy5pbWFnZS5oZWlnaHQsXG4gICAgICBtaW5XaWR0aDogdGhpcy5jb25maWcuaW1hZ2UubWluV2lkdGgsXG4gICAgICBtaW5IZWlnaHQ6IHRoaXMuY29uZmlnLmltYWdlLm1pbkhlaWdodCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHByb2Nlc3Nvci5wcm9jZXNzRmlsZShmaWxlLCBjb25maWcpXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChmc0ZpbGU6IEZzRmlsZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5pbWFnZS51cGxvYWQoZnNGaWxlLmZpbGUpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVDb25maWcoKTogRnNIdG1sRWRpdG9yQ29uZmlnIHtcbiAgICByZXR1cm4gbWVyZ2UoeyBmcm9hbGFDb25maWc6IHt9IH0sIHRoaXMuX2RlZmF1bHRDb25maWcsIHRoaXMuY29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NoYW5nZShodG1sKTogdm9pZCB7XG4gICAgdGhpcy5faHRtbCA9IGh0bWw7XG4gICAgdGhpcy5vbkNoYW5nZShodG1sKTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRCdXR0b25zKGNvbmZpZzogRnNIdG1sRWRpdG9yQ29uZmlnKSB7XG4gICAgKGNvbmZpZy5idXR0b25zIHx8IFtdKVxuICAgICAgLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAvKlxuICAgICAgICAgIFN2ZyBLZXlzOlxuICAgICAgICAgIFtcImFkZFwiLCBcImFkdmFuY2VkSW1hZ2VFZGl0b3JcIiwgXCJhbGlnbkNlbnRlclwiLCBcImFsaWduSnVzdGlmeVwiLCBcImFsaWduTGVmdFwiLCBcImFsaWduUmlnaHRcIixcbiAgICAgICAgICBcImFuY2hvcnNcIiwgXCJiYWNrXCIsIFwiYmFja2dyb3VuZENvbG9yXCIsIFwiYmxvY2txdW90ZVwiLCBcImJvbGRcIiwgXCJjZWxsQmFja2dyb3VuZFwiLFxuICAgICAgICAgIFwiY2VsbEJvcmRlckNvbG9yXCIsIFwiY2VsbE9wdGlvbnNcIiwgXCJjZWxsU3R5bGVcIiwgXCJjbGVhckZvcm1hdHRpbmdcIiwgXCJjbG9zZVwiLCBcImNvZGVWaWV3XCIsXG4gICAgICAgICAgXCJjb2dzXCIsIFwiY29sdW1uc1wiLCBcImVkaXRMaW5rXCIsIFwiZXhpdEZ1bGxzY3JlZW5cIiwgXCJmb250QXdlc29tZVwiLCBcImZvbnRGYW1pbHlcIixcbiAgICAgICAgICBcImZvbnRTaXplXCIsIFwiZnVsbHNjcmVlblwiLCBcImhlbHBcIiwgXCJob3Jpem9udGFsTGluZVwiLCBcImltYWdlQWx0VGV4dFwiLCBcImltYWdlQ2FwdGlvblwiLFxuICAgICAgICAgIFwiaW1hZ2VDbGFzc1wiLCBcImltYWdlRGlzcGxheVwiLCBcImltYWdlTWFuYWdlclwiLCBcImltYWdlU2l6ZVwiLCBcImluZGVudFwiLCBcImlubGluZUNsYXNzXCIsXG4gICAgICAgICAgXCJpbmxpbmVTdHlsZVwiLCBcImluc2VydEVtYmVkXCIsIFwiaW5zZXJ0RmlsZVwiLCBcImluc2VydEltYWdlXCIsIFwiaW5zZXJ0TGlua1wiLCBcImluc2VydE1vcmVcIixcbiAgICAgICAgICBcImluc2VydFRhYmxlXCIsIFwiaW5zZXJ0VmlkZW9cIiwgXCJ1cGxvYWRcIiwgXCJpdGFsaWNcIiwgXCJzZWFyY2hcIiwgXCJsaW5lSGVpZ2h0XCIsIFwibGlua1N0eWxlc1wiLFxuICAgICAgICAgIFwibWVudGlvblwiLCBcIm1vcmVcIiwgXCJvcGVuTGlua1wiLCBcIm9yZGVyZWRMaXN0XCIsIFwib3V0ZGVudFwiLCBcInBhZ2VCcmVha2VyXCIsXG4gICAgICAgICAgXCJwYXJhZ3JhcGhGb3JtYXRcIiwgXCJwYXJhZ3JhcGhNb3JlXCIsIFwicGFyYWdyYXBoU3R5bGVcIiwgXCJwZGZFeHBvcnRcIiwgXCJwcmludFwiLFxuICAgICAgICAgIFwicmVkb1wiLCBcInJlbW92ZVRhYmxlXCIsIFwicmVtb3ZlXCIsIFwicmVwbGFjZUltYWdlXCIsIFwicm93XCIsIFwic2VsZWN0QWxsXCIsIFwic21pbGVcIixcbiAgICAgICAgICBcInNwZWxsY2hlY2tcIiwgXCJzdGFyXCIsIFwic3RyaWtlVGhyb3VnaFwiLCBcInN1YnNjcmlwdFwiLCBcInN1cGVyc2NyaXB0XCIsIFwic3ltYm9sc1wiLCBcInRhZ3NcIixcbiAgICAgICAgICBcInRhYmxlSGVhZGVyXCIsIFwidGFibGVTdHlsZVwiLCBcInRleHRDb2xvclwiLCBcInRleHRNb3JlXCIsIFwidW5kZXJsaW5lXCIsIFwidW5kb1wiLCBcInVubGlua1wiLFxuICAgICAgICAgIFwidW5vcmRlcmVkTGlzdFwiLCBcInZlcnRpY2FsQWxpZ25Cb3R0b21cIiwgXCJ2ZXJ0aWNhbEFsaWduTWlkZGxlXCIsIFwidmVydGljYWxBbGlnblRvcFwiXVxuICAgICAgICAqL1xuXG4gICAgICAgIGlmIChidXR0b24uc3ZnS2V5KSB7XG4gICAgICAgICAgdGhpcy5fZnIuRnJvYWxhRWRpdG9yLkRlZmluZUljb24oYnV0dG9uLm5hbWUsIHsgU1ZHX0tFWTogYnV0dG9uLnN2Z0tleSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2ZyLkZyb2FsYUVkaXRvci5SZWdpc3RlckNvbW1hbmQoYnV0dG9uLm5hbWUsIHtcbiAgICAgICAgICB0aXRsZTogYnV0dG9uLnRpdGxlLFxuICAgICAgICAgIGZvY3VzOiBidXR0b24uZm9jdXMgPz8gdHJ1ZSxcbiAgICAgICAgICB1bmRvOiBidXR0b24udW5kbyA/PyB0cnVlLFxuICAgICAgICAgIHJlZnJlc2hBZnRlckNhbGxiYWNrOiBidXR0b24ucmVmcmVzaEFmdGVyQ2FsbGJhY2sgPz8gdHJ1ZSxcbiAgICAgICAgICBjYWxsYmFjaygpIHtcbiAgICAgICAgICAgIGJ1dHRvbi5jbGljayh0aGlzKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdFBsdWdpbnMoY29uZmlnOiBGc0h0bWxFZGl0b3JDb25maWcpIHtcbiAgICAoY29uZmlnLnByZXBlbmRUb29sYmFyVGV4dEJ1dHRvbnMgfHwgW10pXG4gICAgICAuZm9yRWFjaCgoYnV0dG9uOiBUb29sYmFyQnV0dG9uKSA9PiB7XG4gICAgICAgIHRoaXMuX2RlZmluZUJ1dHRvbihidXR0b24pO1xuICAgICAgfSk7XG5cbiAgICAoY29uZmlnLnBsdWdpbnMgfHwgW10pLmZvckVhY2goKHBsdWdpbjogUGx1Z2luKSA9PiB7XG4gICAgICB0aGlzLl9mci5Gcm9hbGFFZGl0b3IuUExVR0lOU1twbHVnaW4uY29uZmlnLm5hbWVdID0gZnVuY3Rpb24gKGVkaXRvcikge1xuICAgICAgICBwbHVnaW4uZWRpdG9yID0gZWRpdG9yO1xuICAgICAgICBwbHVnaW4uaW5pdGlhbGl6ZSgpO1xuXG4gICAgICAgIHJldHVybiBwbHVnaW47XG4gICAgICB9O1xuXG4gICAgICAocGx1Z2luLmNvbmZpZy5idXR0b25zIHx8IFtdKVxuICAgICAgICAuZm9yRWFjaCgoYnV0dG9uOiBUb29sYmFyQnV0dG9uKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZGVmaW5lQnV0dG9uKGJ1dHRvbik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGVmaW5lQnV0dG9uKGJ1dHRvbjogVG9vbGJhckJ1dHRvbikge1xuICAgIGlmKGJ1dHRvbi5odG1sKSB7XG4gICAgICB0aGlzLl9mci5Gcm9hbGFFZGl0b3JcbiAgICAgICAgLkRlZmluZUljb25UZW1wbGF0ZShgJHtidXR0b24ubmFtZX0tdGVtcGxhdGVgLCBidXR0b24uaHRtbCk7XG4gICAgICB0aGlzLl9mci5Gcm9hbGFFZGl0b3JcbiAgICAgICAgLkRlZmluZUljb24oYnV0dG9uLm5hbWUsIHsgXG4gICAgICAgICAgTkFNRTogYCR7YnV0dG9uLm5hbWV9LWljb25gLFxuICAgICAgICAgIHRlbXBsYXRlOiBgJHtidXR0b24ubmFtZX0tdGVtcGxhdGVgLCBcbiAgICAgICAgfSk7XG4gIFxuICAgIH0gZWxzZSB7IFxuICAgICAgdGhpcy5fZnIuRnJvYWxhRWRpdG9yLkRlZmluZUljb24oYnV0dG9uLm5hbWUsIHtcbiAgICAgICAgTkFNRTogYnV0dG9uLm5hbWUsXG4gICAgICAgIFBBVEg6IGJ1dHRvbi5zdmdQYXRoLFxuICAgICAgfSk7XG4gICAgfSBcblxuICAgIHRoaXMuX2ZyLkZyb2FsYUVkaXRvci5SZWdpc3RlckNvbW1hbmQoYnV0dG9uLm5hbWUsIHtcbiAgICAgIGljb246IGJ1dHRvbi5uYW1lLFxuICAgICAgdGl0bGU6IGJ1dHRvbi50b29sdGlwLFxuICAgICAgdW5kbzogYnV0dG9uLnVuZG8sXG4gICAgICBmb2N1czogYnV0dG9uLmZvY3VzLFxuICAgICAgc2hvd09uTW9iaWxlOiBidXR0b24uc2hvd09uTW9iaWxlLFxuICAgICAgcmVmcmVzaEFmdGVyQ2FsbGJhY2s6IGJ1dHRvbi5yZWZyZXNoQWZ0ZXJDYWxsYmFjayxcbiAgICAgIGNhbGxiYWNrKCkge1xuICAgICAgICBpZiAoYnV0dG9uLmNsaWNrKSB7XG4gICAgICAgICAgYnV0dG9uLmNsaWNrKHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcmVmcmVzaChldmVudCkge1xuICAgICAgICBpZiAoZXZlbnQucmVmcmVzaCkge1xuICAgICAgICAgIGV2ZW50LnJlZnJlc2godGhpcywgZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuXG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVPcHRpb25zKCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuX2NyZWF0ZUNvbmZpZygpO1xuXG4gICAgY29uc3QgdGV4dEJ1dHRvbnMgPSBbXG4gICAgICAuLi4oY29uZmlnLnByZXBlbmRUb29sYmFyVGV4dEJ1dHRvbnMgfHwgW10pXG4gICAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0ubmFtZSksXG4gICAgICAuLi5UZXh0QnV0dG9ucyxcbiAgICBdO1xuXG4gICAgcmV0dXJuIG1lcmdlKFxuICAgICAgLy8gRm9yIHNvbWUgcmVhc29uIGVkaXRvciBzdG9yZSBzb21ld2hlcmUgcG9pbnRlciBvbiBkZWZhdWx0IGNvbmZpZyBvYmplY3QgYW5kIGR1YmxpY2F0ZSBvcHRpb25zIGVhY2ggdGltZSBvbiBpbml0XG4gICAgICAvLyBFeHRyYSBtZXJnZSBsZXZlbCBmaXhlZCB0aGlzIHByb2JsZW0gYW5kIGFsbG93IHRvIGluaXQgY29uZmlnIHByb3Blcmx5IHdpdGhvdXQgbGVnYWN5IGRhdGFcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBzaG9ydGN1dHNFbmFibGVkOiBbJ3Nob3cnLCAnYm9sZCcsICdpdGFsaWMnLCAndW5kZXJsaW5lJywgJ2luZGVudCcsICdvdXRkZW50JywgJ3VuZG8nLCAncmVkbycsICdpbnNlcnRJbWFnZScsICdjcmVhdGVMaW5rJ10sXG4gICAgICAgIGtleTogY29uZmlnLmFjdGl2YXRpb25LZXksXG4gICAgICAgIHBsYWNlaG9sZGVyVGV4dDogY29uZmlnLnBsYWNlaG9sZGVyLFxuICAgICAgICBsaW5rQWx3YXlzQmxhbms6IHRydWUsXG4gICAgICAgIHRhYlNwYWNlczogMixcbiAgICAgICAgdHlwaW5nVGltZXI6IDI1MCxcbiAgICAgICAgdG9vbHRpcHM6IGZhbHNlLFxuICAgICAgICB3b3JkUGFzdGVNb2RhbDogZmFsc2UsXG4gICAgICAgIGltYWdlRGVmYXVsdFdpZHRoOiAwLFxuICAgICAgICBpbWFnZURlZmF1bHRBbGlnbjogJ2xlZnQnLFxuICAgICAgICBxdWlja0luc2VydEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBzY3JvbGxhYmxlQ29udGFpbmVyOiBgIyR7dGhpcy5jb250YWluZXJJRH1gLFxuICAgICAgICBwYXJhZ3JhcGhEZWZhdWx0U2VsZWN0aW9uOiAnRm9ybWF0JyxcbiAgICAgICAgdmlkZW9VcGxvYWQ6IGZhbHNlLFxuICAgICAgICBpbWFnZVBhc3RlOiAhIWNvbmZpZy5pbWFnZT8udXBsb2FkLFxuICAgICAgICBpbWFnZVVwbG9hZDogISFjb25maWcuaW1hZ2U/LnVwbG9hZCxcbiAgICAgICAgcGFyYWdyYXBoRm9ybWF0OiB7XG4gICAgICAgICAgTjogJ05vcm1hbCcsXG4gICAgICAgICAgSDE6ICdIZWFkaW5nIDEnLFxuICAgICAgICAgIEgyOiAnSGVhZGluZyAyJyxcbiAgICAgICAgICBIMzogJ0hlYWRpbmcgMycsXG4gICAgICAgICAgSDQ6ICdIZWFkaW5nIDQnLFxuICAgICAgICAgIEJMT0NLUVVPVEU6ICdRdW90ZScsXG4gICAgICAgIH0sXG4gICAgICAgIGxpbmVIZWlnaHRzOiB7XG4gICAgICAgICAgRGVmYXVsdDogJycsXG4gICAgICAgICAgMC41OiAnMC41JyxcbiAgICAgICAgICBTaW5nbGU6ICcxJyxcbiAgICAgICAgICAxLjE1OiAnMS4xNScsXG4gICAgICAgICAgMS41OiAnMS41JyxcbiAgICAgICAgICBEb3VibGU6ICcyJyxcbiAgICAgICAgfSxcbiAgICAgICAgcGFyYWdyYXBoRm9ybWF0U2VsZWN0aW9uOiB0cnVlLFxuICAgICAgICB0b29sYmFyQnV0dG9uc1hTOiB7XG4gICAgICAgICAgbW9yZVRleHQ6IHtcbiAgICAgICAgICAgIGJ1dHRvbnM6IHRleHRCdXR0b25zLFxuICAgICAgICAgICAgYnV0dG9uc1Zpc2libGU6IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtb3JlUGFyYWdyYXBoOiB7XG4gICAgICAgICAgICBidXR0b25zOiBQYXJhZ3JhcGhCdXR0b25zLFxuICAgICAgICAgICAgYnV0dG9uc1Zpc2libGU6IDIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtb3JlUmljaDoge1xuICAgICAgICAgICAgYnV0dG9uczogUmljaEJ1dHRvbnMsXG4gICAgICAgICAgICBidXR0b25zVmlzaWJsZTogMCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB0b29sYmFyQnV0dG9uczoge1xuICAgICAgICAgIG1vcmVUZXh0OiB7XG4gICAgICAgICAgICBidXR0b25zOiB0ZXh0QnV0dG9ucyxcbiAgICAgICAgICAgIGJ1dHRvbnNWaXNpYmxlOiAzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbW9yZVBhcmFncmFwaDoge1xuICAgICAgICAgICAgYnV0dG9uczogUGFyYWdyYXBoQnV0dG9ucyxcbiAgICAgICAgICAgIGJ1dHRvbnNWaXNpYmxlOiA1LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbW9yZVJpY2g6IHtcbiAgICAgICAgICAgIGJ1dHRvbnM6IFJpY2hCdXR0b25zLFxuICAgICAgICAgICAgYnV0dG9uc1Zpc2libGU6IDMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBjb25maWcuZnJvYWxhQ29uZmlnLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9saXN0ZW5MYXp5SW5pdCgpIHtcblxuICAgIHRoaXMuZnJvYWxhTG9hZGVkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigocmVhZHkpID0+IHJlYWR5KSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX2luaXRpYWxpemUkKSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb246IGFueSA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICBjb25zdCBvcHRpb25zOiBhbnkgPSB7fTtcbiAgICAgICAgICBpZiAoc2VsZWN0aW9uLmJhc2VOb2RlKSB7XG4gICAgICAgICAgICBvcHRpb25zLnNlbGVjdGlvbiA9IHtcbiAgICAgICAgICAgICAgbm9kZTogc2VsZWN0aW9uLmJhc2VOb2RlLm5vZGVWYWx1ZSxcbiAgICAgICAgICAgICAgb2Zmc2V0OiBzZWxlY3Rpb24uYmFzZU9mZnNldCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZShvcHRpb25zKTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl9mcm9hbGFSZWFkeSQpLFxuICAgICAgICBmaWx0ZXIoKGRhdGEpID0+ICEhZGF0YSksXG4gICAgICAgIHRhcCgoeyBjb25maWcsIG9wdGlvbnMgfSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3NldHVwRnJvYWxhKGNvbmZpZywgb3B0aW9ucyk7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29udGVudENoYW5nZWQoKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9ySFRNTCA9IHRoaXMuX2VkaXRvci5odG1sLmdldCgpO1xuXG4gICAgaWYgKHRoaXMuaHRtbCAhPT0gZWRpdG9ySFRNTCkge1xuICAgICAgdGhpcy5fY2hhbmdlKGVkaXRvckhUTUwpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwRnJvYWxhKGNvbmZpZzogRnNIdG1sRWRpdG9yQ29uZmlnLCBvcHRpb25zOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcblxuICAgIHRoaXMuc2V0SHRtbCh0aGlzLl9odG1sKTtcblxuICAgIGlmIChjb25maWcuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuZGlzYWJsZSgpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuZnJvYWxhQ29uZmlnLmV2ZW50cykge1xuICAgICAgaWYgKGNvbmZpZy5mcm9hbGFDb25maWcuZXZlbnRzLmluaXRpYWxpemVkKSB7XG4gICAgICAgIGNvbmZpZy5mcm9hbGFDb25maWcuZXZlbnRzLmluaXRpYWxpemVkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fZWRpdG9yLmV2ZW50cy5vbignZm9jdXMnLCAoKSA9PiB7XG4gICAgICB0aGlzLmNsYXNzRm9jdXNlZCA9IHRydWU7XG4gICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2VkaXRvci5ldmVudHMub24oJ2JsdXInLCAoKSA9PiB7XG4gICAgICB0aGlzLmNsYXNzRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9lZGl0b3IuZXZlbnRzLm9uKCdjbGljaycsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5pbml0T25DbGljayAmJiAhdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmcm9tRXZlbnRQYXR0ZXJuKFxuICAgICAgKGhhbmRsZXIpID0+IHtcbiAgICAgICAgdGhpcy5fZWRpdG9yLmV2ZW50cy5vbignY29udGVudENoYW5nZWQnLCBoYW5kbGVyKTtcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIC8vXG4gICAgICB9LFxuICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBzdGFydFdpdGgodGhpcy5faHRtbCksXG4gICAgICAgIG1hcCgoKSA9PiB0aGlzLmVkaXRvci5odG1sLmdldCgpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2tpcCgxKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9jb250ZW50Q2hhbmdlZCgpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl9lZGl0b3IuZXZlbnRzLm9uKCdwYXN0ZS5hZnRlckNsZWFudXAnLCAoaHRtbCkgPT4ge1xuICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBkaXYuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgIGRpdi5xdWVyeVNlbGVjdG9yQWxsKCcqJylcbiAgICAgICAgLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbC5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gZWwuYXR0cmlidXRlc1swXS5uYW1lO1xuICAgICAgICAgICAgaWYgKG5hbWUgIT09ICdocmVmJykge1xuICAgICAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9lZGl0b3IuZXZlbnRzLm9uKCdrZXlkb3duJywgKCkgPT4ge1xuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5pbWFnZSAmJiB0aGlzLmNvbmZpZy5pbWFnZS51cGxvYWQpIHtcbiAgICAgIHRoaXMuX2VkaXRvci5ldmVudHMub24oJ2ltYWdlLmJlZm9yZVBhc3RlVXBsb2FkJywgKGltYWdlKSA9PiB7XG5cbiAgICAgICAgZmV0Y2goaW1hZ2UuZ2V0QXR0cmlidXRlKCdzcmMnKSlcbiAgICAgICAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICByZXMuYmxvYigpXG4gICAgICAgICAgICAgIC50aGVuKChibG9iKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc0ltYWdlVXBsb2FkKGJsb2IpXG4gICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHVybCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpbWFnZS5zZXRBdHRyaWJ1dGUoJ3NyYycsIHVybCk7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1mci1pbWFnZS1wYXN0ZWQnKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50Q2hhbmdlZCgpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9lZGl0b3IuZXZlbnRzLm9uKCdpbWFnZS5iZWZvcmVVcGxvYWQnLCAoYmxvYnMpID0+IHtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0ltYWdlVXBsb2FkKGJsb2JzWzBdKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgodXJsKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVkaXRvci5pbWFnZS5pbnNlcnQodXJsLCBudWxsLCBudWxsLCB0aGlzLmVkaXRvci5pbWFnZS5nZXQoKSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZWwucXVlcnlTZWxlY3RvcignLmZyLXNlY29uZC10b29sYmFyJykpIHtcbiAgICAgIHRoaXMuZWwucXVlcnlTZWxlY3RvcignLmZyLXNlY29uZC10b29sYmFyJykucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLmF1dG9mb2N1cyAmJiAhdGhpcy5jb25maWcuaW5pdE9uQ2xpY2spIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxmcy1sYWJlbC1maWVsZD5cbiAgPGZzLWxhYmVsICpuZ0lmPVwiY29uZmlnLmxhYmVsXCI+e3tjb25maWcubGFiZWx9fTwvZnMtbGFiZWw+XG4gIDxkaXZcbiAgICAgIGNsYXNzPVwiaHRtbC1lZGl0b3ItY29udGFpbmVyIGZzLWh0bWwtZWRpdG9yLWRlZmF1bHRcIlxuICAgICAgW2lkXT1cImNvbnRhaW5lcklEXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgaW5pdGlhbGl6ZWQ6IGluaXRpYWxpemVkLFxuICAgICAgICAnaW5pdC1vbi1jbGljayc6IGNvbmZpZy5pbml0T25DbGlja1xuICAgICAgfVwiPlxuICAgIDxuZy1jb250YWluZXIgKmZzU2tlbGV0b249XCIoZnJvYWxhTG9hZGVkJCB8IGFzeW5jKSAhPT0gZmFsc2VcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2ICNlbFJlZj48L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJib3R0b20tbGluZVwiPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkaXNhYmxlZC1saW5lXCI+PC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxmcy1sYWJlbC1tZXNzYWdlPlxuICAgIDxkaXYgY2xhc3M9XCJmcy1mb3JtLW1lc3NhZ2VcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmcy1mb3JtLWhpbnRcIj57e2hpbnR9fTwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2ZzLWxhYmVsLW1lc3NhZ2U+XG48L2ZzLWxhYmVsLWZpZWxkPlxuIl19
|
|
@@ -370,16 +370,17 @@ class FsHtmlEditorComponent {
|
|
|
370
370
|
});
|
|
371
371
|
}
|
|
372
372
|
_initPlugins(config) {
|
|
373
|
+
(config.prependToolbarTextButtons || [])
|
|
374
|
+
.forEach((button) => {
|
|
375
|
+
this._defineButton(button);
|
|
376
|
+
});
|
|
373
377
|
(config.plugins || []).forEach((plugin) => {
|
|
374
378
|
this._fr.FroalaEditor.PLUGINS[plugin.config.name] = function (editor) {
|
|
375
379
|
plugin.editor = editor;
|
|
376
380
|
plugin.initialize();
|
|
377
381
|
return plugin;
|
|
378
382
|
};
|
|
379
|
-
([
|
|
380
|
-
...(plugin.config.buttons || []),
|
|
381
|
-
...(config.prependToolbarTextButtons || []),
|
|
382
|
-
])
|
|
383
|
+
(plugin.config.buttons || [])
|
|
383
384
|
.forEach((button) => {
|
|
384
385
|
this._defineButton(button);
|
|
385
386
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firestitch-html-editor.mjs","sources":["../../src/app/modules/html-renderer/components/html-renderer/html-renderer.component.ts","../../src/app/modules/html-renderer/components/html-renderer/html-renderer.component.html","../../src/app/modules/html-renderer/fs-html-renderer.module.ts","../../src/app/modules/html-editor/injects/config.inject.ts","../../src/app/modules/html-editor/consts/paragraph-buttons.const.ts","../../src/app/modules/html-editor/consts/rich-buttons.const.ts","../../src/app/modules/html-editor/consts/text-buttons.const.ts","../../src/app/modules/html-editor/services/froala-loader.service.ts","../../src/app/modules/html-editor/components/html-editor/html-editor.component.ts","../../src/app/modules/html-editor/components/html-editor/html-editor.component.html","../../src/app/modules/html-editor/fs-html-editor.module.ts","../../src/app/modules/html-editor/classes/plugin.ts","../../src/app/modules/html-editor/plugins/checklist.plugin.ts","../../src/app/modules/html-editor/plugins/code.plugin.ts","../../src/app/modules/html-editor/plugins/mention.plugin.ts","../../src/app/modules/html-editor/plugins/realtime.plugin.ts","../../src/app/modules/html-editor/plugins/screen-record.plugin.ts","../../src/firestitch-html-editor.ts"],"sourcesContent":["import { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ChangeDetectionStrategy, Component, Input, ChangeDetectorRef } from '@angular/core';\n\n\n@Component({\n selector: 'fs-html-renderer',\n templateUrl: 'html-renderer.component.html',\n styleUrls: ['html-renderer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsHtmlRendererComponent {\n\n @Input('html') public set setHtml(html) {\n this.trustedHtml = this.sanitized.bypassSecurityTrustHtml(html || '');\n this._cdRef.markForCheck();\n }\n\n public trustedHtml: SafeHtml;\n\n public constructor(\n private sanitized: DomSanitizer,\n private _cdRef: ChangeDetectorRef,\n ) { }\n\n}\n","<span class=\"fr-view fs-html-editor-default\" [innerHtml]=\"trustedHtml\"></span>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FsHtmlRendererComponent } from './components/html-renderer/html-renderer.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ],\n exports: [\n FsHtmlRendererComponent,\n ],\n declarations: [\n FsHtmlRendererComponent,\n ],\n})\nexport class FsHtmlRendererModule {\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const FS_HTML_EDITOR_DEFAULT_CONFIG = new InjectionToken<any[]>('fs-html-editor.default-config');\nexport const FS_HTML_EDITOR_CONFIG = new InjectionToken<any[]>('fs-html-editor.config');\n","export const ParagraphButtons = [\n 'align',\n 'formatOL',\n 'formatUL',\n 'checklist',\n 'indent',\n 'outdent',\n 'lineHeight'\n];\n","export const RichButtons = [\n 'insertTable',\n 'insertImage',\n 'insertLink',\n 'insertVideo',\n];\n","export const TextButtons = [\n 'paragraphFormat',\n 'bold',\n 'italic',\n 'underline',\n 'strikeThrough',\n 'subscript',\n 'superscript',\n 'fontFamily',\n 'fontSize',\n 'textColor',\n 'backgroundColor',\n 'inlineClass',\n 'inlineStyle',\n 'clearFormatting',\n 'quote',\n 'code',\n];\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, Optional } from '@angular/core';\n\nimport { fsSourceLoader } from '@firestitch/common';\n\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\nimport { concatMap, map, shareReplay, tap } from 'rxjs/operators';\n\nimport { FS_HTML_EDITOR_CONFIG } from '../injects/config.inject';\nimport { FsHtmlEditorConfig } from '../interfaces/html-editor-config';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FsFroalaLoaderService {\n\n private _froalaEditor: any;\n\n private _froalaLoaded = new BehaviorSubject(false);\n private _froalaPluginsLoaded = new BehaviorSubject(false);\n private _sourceLoader = fsSourceLoader;\n\n private _loaded$ = combineLatest([this._froalaLoaded, this._froalaPluginsLoaded])\n .pipe(\n map(([FroalaReady, pluginsRead]) => {\n return pluginsRead && FroalaReady;\n }),\n shareReplay(1),\n );\n\n constructor(\n @Optional()\n @Inject(FS_HTML_EDITOR_CONFIG)\n private _defaultConfig: FsHtmlEditorConfig,\n @Inject(DOCUMENT)\n private _document: Document,\n ) {\n this._sourceLoader.setDocument(this._document);\n this._load();\n }\n\n public get loaded$(): Observable<boolean> {\n return this._loaded$;\n }\n\n public get FroalaEditor(): any {\n return this._froalaEditor;\n }\n\n private _load() {\n const baseDir = '/assets/froala/';\n this._sourceLoader.registerResources({\n froala: [\n `${baseDir}js/froala_editor.min.js`,\n `${baseDir}css/froala_editor.pkgd.min.css`,\n ],\n froala_align: `${baseDir}js/plugins/align.min.js`,\n froala_colors: `${baseDir}js/plugins/colors.min.js`,\n froala_image: `${baseDir}js/plugins/image.min.js`,\n froala_link: `${baseDir}js/plugins/link.min.js`,\n froala_lists: `${baseDir}js/plugins/lists.min.js`,\n froala_paragraph_format: `${baseDir}js/plugins/paragraph_format.min.js`,\n froala_table: `${baseDir}js/plugins/table.min.js`,\n froala_url: `${baseDir}js/plugins/url.min.js`,\n froala_video: `${baseDir}js/plugins/video.min.js`,\n froala_quote: `${baseDir}js/plugins/quote.min.js`,\n froala_draggable: `${baseDir}js/plugins/draggable.min.js`,\n froala_font_size: `${baseDir}js/plugins/font_size.min.js`,\n froala_quick_insert: `${baseDir}js/plugins/quick_insert.min.js`,\n froala_line_height: `${baseDir}js/plugins/line_height.min.js`,\n });\n\n this._sourceLoader.loadResource('froala')\n .pipe(\n tap(() => {\n this._froalaEditor = (window as any).FroalaEditor;\n this._froalaDone();\n }),\n concatMap(() => {\n return this._loadPlugins();\n }),\n tap(() => {\n this._froalaPluginsDone();\n }),\n )\n .subscribe();\n }\n\n private _loadPlugins(): Observable<unknown> {\n const resources = this._defaultConfig\n .froalaPlugins\n .map((pluginName) => `froala_${pluginName}`);\n\n return this._sourceLoader.loadResources(resources);\n }\n\n private _froalaDone() {\n this._froalaLoaded.next(true);\n }\n\n private _froalaPluginsDone() {\n this._froalaPluginsLoaded.next(true);\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n forwardRef,\n HostBinding,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n ViewChild,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlContainer,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgForm,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\n\nimport { guid } from '@firestitch/common';\nimport { FileProcessor, FsFile, FsFileProcessConfig } from '@firestitch/file';\n\nimport { BehaviorSubject, fromEventPattern, Observable, ReplaySubject, Subject } from 'rxjs';\nimport {\n distinctUntilChanged, filter, map, skip, startWith, switchMap, takeUntil, tap,\n} from 'rxjs/operators';\n\nimport { merge } from 'lodash-es';\n\nimport { FS_HTML_EDITOR_CONFIG } from '../../injects/config.inject';\nimport { ToolbarButton } from '../../interfaces';\nimport { FsHtmlEditorConfig } from '../../interfaces/html-editor-config';\nimport { FsFroalaLoaderService } from '../../services/froala-loader.service';\n\nimport { Plugin } from './../../classes/plugin';\nimport { ParagraphButtons } from './../../consts/paragraph-buttons.const';\nimport { RichButtons } from './../../consts/rich-buttons.const';\nimport { TextButtons } from './../../consts/text-buttons.const';\n\n\n@Component({\n selector: 'fs-html-editor',\n templateUrl: './html-editor.component.html',\n styleUrls: ['./html-editor.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FsHtmlEditorComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => FsHtmlEditorComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [\n {\n provide: ControlContainer,\n deps: [[Optional, NgForm]],\n useFactory: (ngForm: NgForm) => ngForm,\n },\n ],\n})\nexport class FsHtmlEditorComponent \nimplements OnInit, AfterViewInit, ControlValueAccessor, Validator, OnDestroy {\n\n @HostBinding('class.focused') public classFocused = false;\n\n @ViewChild('elRef') public elRef: ElementRef;\n\n @Input() public config: FsHtmlEditorConfig = {};\n @Input() public hint: string;\n\n @Input()\n @HostBinding('class.disabled')\n public disabled = false;\n\n public initialized = false;\n public readonly containerID = `fs-html-editor-${guid('xxx')}`;\n public onTouched: () => void;\n public onChange: (data: any) => void;\n\n private _editor: any;\n private _html: string;\n private _initialize$ = new ReplaySubject();\n private _froalaReady$ = new BehaviorSubject(null);\n private _window: any = this._document.defaultView;\n private _destroy$ = new Subject();\n\n constructor(\n @Optional()\n @Inject(FS_HTML_EDITOR_CONFIG)\n private _defaultConfig,\n @Inject(DOCUMENT)\n private _document: Document,\n private _cdRef: ChangeDetectorRef,\n private _fr: FsFroalaLoaderService,\n ) { }\n\n public get el(): any {\n return this.elRef.nativeElement;\n }\n\n public get html(): string {\n return this._html;\n }\n\n public get editor(): any {\n return this._editor;\n }\n\n public get froalaLoaded$(): Observable<boolean> {\n return this._fr.loaded$;\n }\n\n public ngOnInit(): void {\n this.config = this.config || {};\n this.config.autofocus = this.config.autofocus && (!this.config.disabled || !this.disabled);\n }\n\n public ngAfterViewInit() {\n this._listenLazyInit();\n this._initialize$.next();\n }\n\n public hasContent() {\n const el = document.createElement('div');\n\n if (el.querySelector('img')) {\n return true;\n }\n\n el.innerHTML = this._html;\n\n return !!el.innerText.length;\n }\n\n public initialize(options: any = {}) {\n const config = this._createConfig();\n this._initPlugins(config);\n this._initButtons(config);\n this._editor = new this._fr.FroalaEditor(this.el, this._createOptions(), () => {\n this._froalaReady$.next({ config, options });\n });\n }\n\n public updateSize() {\n // Hack: To trigger the toolbar button size modes\n window.dispatchEvent(new Event('resize'));\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const err: any = {};\n if (this.config.maxLength && this._html) {\n const maxLength = this.config.maxLength;\n const length = this._html.length;\n if (length > maxLength) {\n err.maxLengthError = `Must be ${maxLength} characters or fewer. You entered ${length} characters.`;\n }\n }\n\n return Object.keys(err).length ? err : null;\n }\n\n public focus(options?: { cursorPosition?: 'start' | 'end' }) {\n options = options ? options : {};\n\n if (options.cursorPosition === 'end') {\n this.editor.selection.setAtEnd(this.editor.$el.get(0));\n } else {\n this.editor.selection.setAtStart(this.editor.$el.get(0));\n }\n\n this.editor.selection.restore();\n\n const elSelection = this.editor.selection.element();\n if (elSelection) {\n elSelection.scrollIntoView({ block: 'center' });\n }\n }\n\n public clear() {\n this.writeValue('');\n }\n\n public disable() {\n this.disabled = true;\n }\n\n public setHtml(html) {\n this.writeValue(html);\n }\n\n public writeValue(html: string): void {\n this._html = html || '';\n\n if (Array.isArray(this._html)) {\n this._html = this._html.pop();\n }\n\n this._html = this._html\n .replace(/<(li)>\\s?<(div)>/g, '<li>')\n .replace(/<\\/(div)><\\/(li)>/g, '</li>');\n\n if (this.editor && this.editor.html) {\n try {\n this.editor.html.set(this._html);\n } catch (e) {\n //\n }\n }\n\n this._cdRef.markForCheck();\n }\n\n public registerOnChange(fn: (data: any) => void): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public ngOnDestroy() {\n this._initialize$.complete();\n this._destroy$.next();\n this._destroy$.complete();\n this.destroy();\n }\n\n public destroy() {\n if (this.editor) {\n this.editor.destroy();\n }\n\n this.initialized = false;\n this._cdRef.markForCheck();\n this.el.innerHTML = '';\n }\n\n private _processImageUpload(blob) {\n const processor = new FileProcessor();\n const file = new FsFile(blob);\n\n const config: FsFileProcessConfig = {\n orientate: true,\n quality: this.config.image.quality,\n format: this.config.image.format as any,\n maxWidth: this.config.image.width,\n maxHeight: this.config.image.height,\n minWidth: this.config.image.minWidth,\n minHeight: this.config.image.minHeight,\n };\n\n return processor.processFile(file, config)\n .pipe(\n switchMap((fsFile: FsFile) => {\n return this.config.image.upload(fsFile.file);\n }),\n );\n }\n\n private _createConfig(): FsHtmlEditorConfig {\n return merge({ froalaConfig: {} }, this._defaultConfig, this.config);\n }\n\n private _change(html): void {\n this._html = html;\n this.onChange(html);\n }\n\n private _initButtons(config: FsHtmlEditorConfig) {\n (config.buttons || [])\n .forEach((button) => {\n /*\n Svg Keys:\n [\"add\", \"advancedImageEditor\", \"alignCenter\", \"alignJustify\", \"alignLeft\", \"alignRight\",\n \"anchors\", \"back\", \"backgroundColor\", \"blockquote\", \"bold\", \"cellBackground\",\n \"cellBorderColor\", \"cellOptions\", \"cellStyle\", \"clearFormatting\", \"close\", \"codeView\",\n \"cogs\", \"columns\", \"editLink\", \"exitFullscreen\", \"fontAwesome\", \"fontFamily\",\n \"fontSize\", \"fullscreen\", \"help\", \"horizontalLine\", \"imageAltText\", \"imageCaption\",\n \"imageClass\", \"imageDisplay\", \"imageManager\", \"imageSize\", \"indent\", \"inlineClass\",\n \"inlineStyle\", \"insertEmbed\", \"insertFile\", \"insertImage\", \"insertLink\", \"insertMore\",\n \"insertTable\", \"insertVideo\", \"upload\", \"italic\", \"search\", \"lineHeight\", \"linkStyles\",\n \"mention\", \"more\", \"openLink\", \"orderedList\", \"outdent\", \"pageBreaker\",\n \"paragraphFormat\", \"paragraphMore\", \"paragraphStyle\", \"pdfExport\", \"print\",\n \"redo\", \"removeTable\", \"remove\", \"replaceImage\", \"row\", \"selectAll\", \"smile\",\n \"spellcheck\", \"star\", \"strikeThrough\", \"subscript\", \"superscript\", \"symbols\", \"tags\",\n \"tableHeader\", \"tableStyle\", \"textColor\", \"textMore\", \"underline\", \"undo\", \"unlink\",\n \"unorderedList\", \"verticalAlignBottom\", \"verticalAlignMiddle\", \"verticalAlignTop\"]\n */\n\n if (button.svgKey) {\n this._fr.FroalaEditor.DefineIcon(button.name, { SVG_KEY: button.svgKey });\n }\n\n this._fr.FroalaEditor.RegisterCommand(button.name, {\n title: button.title,\n focus: button.focus ?? true,\n undo: button.undo ?? true,\n refreshAfterCallback: button.refreshAfterCallback ?? true,\n callback() {\n button.click(this);\n },\n });\n });\n }\n\n private _initPlugins(config: FsHtmlEditorConfig) {\n (config.plugins || []).forEach((plugin: Plugin) => {\n this._fr.FroalaEditor.PLUGINS[plugin.config.name] = function (editor) {\n plugin.editor = editor;\n plugin.initialize();\n\n return plugin;\n };\n\n ([\n ...(plugin.config.buttons || []),\n ...(config.prependToolbarTextButtons || []),\n ])\n .forEach((button: ToolbarButton) => {\n this._defineButton(button);\n });\n });\n }\n\n private _defineButton(button: ToolbarButton) {\n if(button.html) {\n this._fr.FroalaEditor\n .DefineIconTemplate(`${button.name}-template`, button.html);\n this._fr.FroalaEditor\n .DefineIcon(button.name, { \n NAME: `${button.name}-icon`,\n template: `${button.name}-template`, \n });\n \n } else { \n this._fr.FroalaEditor.DefineIcon(button.name, {\n NAME: button.name,\n PATH: button.svgPath,\n });\n } \n\n this._fr.FroalaEditor.RegisterCommand(button.name, {\n icon: button.name,\n title: button.tooltip,\n undo: button.undo,\n focus: button.focus,\n showOnMobile: button.showOnMobile,\n refreshAfterCallback: button.refreshAfterCallback,\n callback() {\n if (button.click) {\n button.click(this);\n }\n },\n refresh(event) {\n if (event.refresh) {\n event.refresh(this, event);\n }\n },\n });\n\n }\n\n private _createOptions() {\n const config = this._createConfig();\n\n const textButtons = [\n ...(config.prependToolbarTextButtons || [])\n .map((item) => item.name),\n ...TextButtons,\n ];\n\n return merge(\n // For some reason editor store somewhere pointer on default config object and dublicate options each time on init\n // Extra merge level fixed this problem and allow to init config properly without legacy data\n {},\n {\n shortcutsEnabled: ['show', 'bold', 'italic', 'underline', 'indent', 'outdent', 'undo', 'redo', 'insertImage', 'createLink'],\n key: config.activationKey,\n placeholderText: config.placeholder,\n linkAlwaysBlank: true,\n tabSpaces: 2,\n typingTimer: 250,\n tooltips: false,\n wordPasteModal: false,\n imageDefaultWidth: 0,\n imageDefaultAlign: 'left',\n quickInsertEnabled: false,\n scrollableContainer: `#${this.containerID}`,\n paragraphDefaultSelection: 'Format',\n videoUpload: false,\n imagePaste: !!config.image?.upload,\n imageUpload: !!config.image?.upload,\n paragraphFormat: {\n N: 'Normal',\n H1: 'Heading 1',\n H2: 'Heading 2',\n H3: 'Heading 3',\n H4: 'Heading 4',\n BLOCKQUOTE: 'Quote',\n },\n lineHeights: {\n Default: '',\n 0.5: '0.5',\n Single: '1',\n 1.15: '1.15',\n 1.5: '1.5',\n Double: '2',\n },\n paragraphFormatSelection: true,\n toolbarButtonsXS: {\n moreText: {\n buttons: textButtons,\n buttonsVisible: 1,\n },\n moreParagraph: {\n buttons: ParagraphButtons,\n buttonsVisible: 2,\n },\n moreRich: {\n buttons: RichButtons,\n buttonsVisible: 0,\n },\n },\n toolbarButtons: {\n moreText: {\n buttons: textButtons,\n buttonsVisible: 3,\n },\n moreParagraph: {\n buttons: ParagraphButtons,\n buttonsVisible: 5,\n },\n moreRich: {\n buttons: RichButtons,\n buttonsVisible: 3,\n },\n },\n },\n config.froalaConfig,\n );\n }\n\n private _listenLazyInit() {\n\n this.froalaLoaded$\n .pipe(\n filter((ready) => ready),\n switchMap(() => this._initialize$),\n tap(() => {\n const selection: any = window.getSelection();\n const options: any = {};\n if (selection.baseNode) {\n options.selection = {\n node: selection.baseNode.nodeValue,\n offset: selection.baseOffset,\n };\n }\n this.initialize(options);\n }),\n switchMap(() => this._froalaReady$),\n filter((data) => !!data),\n tap(({ config, options }) => {\n this._setupFroala(config, options);\n }),\n )\n .subscribe();\n }\n\n private _contentChanged(): void {\n const editorHTML = this._editor.html.get();\n\n if (this.html !== editorHTML) {\n this._change(editorHTML);\n }\n }\n\n private _setupFroala(config: FsHtmlEditorConfig, options: any): void {\n this._cdRef.markForCheck();\n\n this.setHtml(this._html);\n\n if (config.disabled) {\n this.disable();\n }\n\n if (config.froalaConfig.events) {\n if (config.froalaConfig.events.initialized) {\n config.froalaConfig.events.initialized();\n }\n }\n\n this._editor.events.on('focus', () => {\n this.classFocused = true;\n this._cdRef.markForCheck();\n });\n\n this._editor.events.on('blur', () => {\n this.classFocused = false;\n this._cdRef.markForCheck();\n });\n\n this._editor.events.on('click', () => {\n if (this.config.initOnClick && !this.initialized) {\n this.initialized = true;\n this._cdRef.markForCheck();\n }\n });\n\n fromEventPattern(\n (handler) => {\n this._editor.events.on('contentChanged', handler);\n },\n () => {\n //\n },\n )\n .pipe(\n startWith(this._html),\n map(() => this.editor.html.get()),\n distinctUntilChanged(),\n skip(1),\n )\n .subscribe(() => {\n this._contentChanged();\n });\n\n this._editor.events.on('paste.afterCleanup', (html) => {\n const div = document.createElement('div');\n div.innerHTML = html;\n div.querySelectorAll('*')\n .forEach((el) => {\n for (let i = 0; i < el.attributes.length; i++) {\n const name = el.attributes[0].name;\n if (name !== 'href') {\n el.removeAttribute(name);\n }\n }\n });\n\n return div.innerHTML;\n });\n\n this._editor.events.on('keydown', () => {\n this.onTouched();\n });\n\n if (this.config.image && this.config.image.upload) {\n this._editor.events.on('image.beforePasteUpload', (image) => {\n\n fetch(image.getAttribute('src'))\n .then((res) => {\n res.blob()\n .then((blob) => {\n this._processImageUpload(blob)\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((url) => {\n image.setAttribute('src', url);\n image.removeAttribute('data-fr-image-pasted');\n\n this._contentChanged();\n });\n });\n });\n\n return false;\n });\n\n this._editor.events.on('image.beforeUpload', (blobs) => {\n this._processImageUpload(blobs[0])\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((url) => {\n this.editor.image.insert(url, null, null, this.editor.image.get());\n });\n\n return false;\n });\n }\n\n if (this.el.querySelector('.fr-second-toolbar')) {\n this.el.querySelector('.fr-second-toolbar').remove();\n }\n\n if (this.config.autofocus && !this.config.initOnClick) {\n this.focus();\n }\n }\n}\n","<fs-label-field>\n <fs-label *ngIf=\"config.label\">{{config.label}}</fs-label>\n <div\n class=\"html-editor-container fs-html-editor-default\"\n [id]=\"containerID\"\n [ngClass]=\"{\n initialized: initialized,\n 'init-on-click': config.initOnClick\n }\">\n <ng-container *fsSkeleton=\"(froalaLoaded$ | async) !== false\"></ng-container>\n <div #elRef></div>\n\n <div class=\"bottom-line\"></div>\n <div class=\"disabled-line\"></div>\n </div>\n\n <fs-label-message>\n <div class=\"fs-form-message\">\n <div class=\"fs-form-hint\">{{hint}}</div>\n </div>\n </fs-label-message>\n</fs-label-field>\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\n\nimport { FsHtmlRendererModule } from '../html-renderer/fs-html-renderer.module';\n\nimport { FsHtmlEditorComponent } from './components/html-editor/html-editor.component';\nimport { FroalaPlugin } from './enums/default-plugin.enum';\nimport { FS_HTML_EDITOR_CONFIG, FS_HTML_EDITOR_DEFAULT_CONFIG } from './injects/config.inject';\nimport { FsHtmlEditorConfig } from './interfaces/html-editor-config';\n\n\n@NgModule({\n imports: [\n CommonModule,\n\n FsSkeletonModule,\n FsLabelModule,\n FsHtmlRendererModule,\n ],\n exports: [\n FsHtmlEditorComponent,\n ],\n declarations: [\n FsHtmlEditorComponent,\n ],\n})\nexport class FsHtmlEditorModule {\n public static forRoot(config: FsHtmlEditorConfig = {}): ModuleWithProviders<FsHtmlEditorModule> {\n return {\n ngModule: FsHtmlEditorModule,\n providers: [\n { provide: FS_HTML_EDITOR_DEFAULT_CONFIG, useValue: config },\n {\n provide: FS_HTML_EDITOR_CONFIG,\n useFactory: FsHtmlEditorConfigFactory,\n deps: [FS_HTML_EDITOR_DEFAULT_CONFIG],\n },\n ],\n };\n }\n}\n\nexport function FsHtmlEditorConfigFactory(config: FsHtmlEditorConfig) {\n return {\n froalaPlugins: [\n FroalaPlugin.Align,\n FroalaPlugin.Colors,\n FroalaPlugin.Image,\n FroalaPlugin.Link,\n FroalaPlugin.Lists,\n FroalaPlugin.ParagraphFormat,\n FroalaPlugin.Quote,\n FroalaPlugin.Table,\n FroalaPlugin.Url,\n FroalaPlugin.Video,\n FroalaPlugin.Draggable,\n FroalaPlugin.FontSize,\n FroalaPlugin.LineHeight,\n ],\n ...config,\n };\n}\n","// import { FroalaEditor } from 'froala-editor';\nimport { PluginConfig } from './../interfaces/plugin-config';\n\nexport class Plugin {\n\n public config: PluginConfig;\n public editor: any;\n\n public initialize() {}\n public destroy() {}\n\n}\n","import { Plugin } from '../classes/plugin';\n\nimport { PluginConfig } from './../interfaces/plugin-config';\n\n\nexport class ChecklistPlugin extends Plugin {\n\n public constructor(public config: PluginConfig = { name: 'checklist' }) {\n super();\n this.config = {\n ...config,\n name: 'checklist',\n buttons: [\n {\n name: 'checklist',\n svgPath: 'M8.4,10.3l-1.2,1.2l4,4L20,6.7l-1.2-1.2l-7.6,7.6L8.4,10.3z M18.2,18.2H5.8V5.8h8.9V4H5.8C4.8,4,4,4.8,4,5.8v12.4c0,1,0.8,1.8,1.8,1.8h12.4c1,0,1.8-0.8,1.8-1.8v-7.1h-1.8V18.2z',\n click: (editor) => {\n editor.html.insert('<ul class=\"checklist\"><li></li></ul>');\n }\n }\n ]\n };\n }\n\n public initialize() {\n this.editor.events.on('click', (e) => {\n const li = e.target;\n if (li.nodeName === 'LI' && e.offsetX < 0) {\n\n const items = [li, ...li.querySelectorAll('li')];\n\n if (li.classList.contains('checked')) {\n items.forEach((item) => {\n item.classList.remove('checked');\n });\n } else {\n items.forEach((item) => {\n item.classList.add('checked');\n });\n }\n }\n\n }, false);\n }\n\n}\n","import { Plugin } from '../classes/plugin';\n\nimport { PluginConfig } from './../interfaces/plugin-config';\n\n\nexport class CodePlugin extends Plugin {\n\n public constructor(public config: PluginConfig = { name: 'code' }) {\n super();\n this.config = {\n ...config,\n name: 'code',\n buttons: [\n {\n name: 'code',\n svgPath: 'M8.9,7.3L4.2,12l4.7,4.7l1.1-1.1L6.4,12L10,8.4L8.9,7.3z M15.1,7.3L14,8.4l3.6,3.6L14,15.6l1.1,1.1l4.7-4.7L15.1,7.3z',\n click: (editor) => {\n const node = editor.selection.get();\n const codeEl = this._getCodeEl(node.baseNode);\n if (codeEl) {\n codeEl.classList.remove('code');\n } else {\n editor.html.insert('<p class=\"code\">' + editor.selection.get().toString().replace(/\\n{1,}/g,'<br>') + '</p>');\n }\n }\n }\n ]\n };\n }\n\n public initialize() {\n this.editor.events.on('keydown', (e) => {\n if (e.keyCode === 13) {\n const selection = this.editor.selection.get();\n\n if (selection && this._getCodeEl(selection.baseNode)) {\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n let br = '<br>';\n const base = selection.baseNode;\n if (base.nodeName === '#text' && selection.baseOffset === base.length) {\n\n if (!(base.nextSibling && base.nextSibling.nodeName === 'BR')) {\n br += '<br>';\n }\n } else {\n const el: any = Array.from(base.childNodes).splice(selection.baseOffset - 1, 1).pop();\n if (el && el.nodeName !== 'BR') {\n br += '<br>';\n }\n }\n\n this.editor.html.insert(br);\n return false;\n }\n }\n }, true);\n }\n\n public destroy() {}\n\n private _getCodeEl(el) {\n\n if (el) {\n if (el.classList && el.classList.contains('code')) {\n return el;\n }\n\n if (el.parentElement) {\n return this._getCodeEl(el.parentElement);\n }\n }\n\n return null;\n }\n}\n","import { debounce } from 'lodash-es';\nimport Tribute, { TributeItem } from 'tributejs';\n\nimport { MentionPluginConfig } from './configs/mention-plugin.config';\n\nimport { Plugin } from '../classes/plugin';\n\nimport { guid } from '@firestitch/common';\n\n\nexport class MentionPlugin extends Plugin {\n\n private static _currentGuid = null;\n private static _tributes = [];\n private _tribute;\n private _guid = guid();\n\n public constructor(public config: MentionPluginConfig) {\n super();\n this.config = {\n ...config,\n buttons: [\n {\n name: config.name,\n tooltip: config.tooltip,\n svgPath: config.iconPath,\n click: (editor) => {\n this._closeAll();\n this._tribute.showMenuForCollection(editor.el);\n }\n }\n ]\n };\n\n this._tribute = new Tribute({\n values: debounce(this._loadValues.bind(this), 200),\n searchOpts: {\n pre: '',\n post: '',\n skip: true\n },\n containerClass: `fs-html-editor-mention-container ${this.config.containerClass || ''}`,\n itemClass: `fs-html-editor-mention-menu-item ${this.config.menuItemClass || ''}`,\n trigger: this.config.trigger,\n allowSpaces: true,\n menuItemTemplate: (item: TributeItem<any>) => {\n return this.config.menuItemTemplate(item.original);\n },\n selectTemplate: (item: TributeItem<any>) => {\n const template = this.config.selectedTemplate(item.original);\n\n let p = document.createElement('p');\n p.innerHTML = template;\n\n let node = p.firstElementChild;\n if (!node) {\n node = document.createElement('span');\n node.innerHTML = template;\n }\n\n node.setAttribute('contenteditable', 'false');\n node.classList.add('fr-deletable');\n\n return node.outerHTML;\n },\n });\n\n MentionPlugin._tributes.push(this._tribute);\n }\n\n public initialize() {\n this._tribute.attach(this.editor.el);\n this.editor.events.on('keydown', (e) => {\n if (e.key === 'Enter' && this._tribute.isActive) {\n return false;\n }\n }, true);\n\n \n this.editor.el.addEventListener(\"tribute-replaced\", this.selected);\n }\n\n public selected = (event) => {\n if(this.config.selected) {\n if(MentionPlugin._currentGuid === this._guid) {\n this.config.selected(event.detail.item.original);\n }\n }\n }\n\n public destroy() {\n this.editor.el.removeEventListener(\"tribute-replaced\", this.selected);\n }\n\n private _closeAll() {\n MentionPlugin._tributes.forEach((tribute) => {\n if (tribute.menu) {\n tribute.hideMenu();\n }\n });\n }\n\n private _loadValues(keyword, cb) {\n MentionPlugin._currentGuid = this._guid;\n return this.config.fetch(keyword)\n .subscribe((data) => {\n cb(data);\n });\n }\n}\n","import { PluginConfig } from '../interfaces/plugin-config';\n\nimport { Plugin } from '../classes/plugin';\n\n\nexport class RealtimePlugin extends Plugin {\n\n public constructor(public config: PluginConfig = { name: 'realtime' }) {\n super();\n this.config = {\n ...config,\n name: 'realtime',\n };\n }\n\n public initialize() {\n\n this.editor.events.on('click', (e) => {\n\n }, false);\n }\n}\n","import { ScreenRecordPluginConfig } from './configs/screen-record-plugin.config';\nimport { Plugin } from '../classes/plugin';\n\n\ndeclare var MediaRecorder: any;\n\nexport class ScreenRecordPlugin extends Plugin {\n\n private _activeEl;\n\n public constructor(public config: ScreenRecordPluginConfig = {}) {\n super();\n\n this.config = {\n ...config,\n name: config.name || 'screenRecord',\n buttons: [\n {\n name: 'screenRecord',\n svgPath: `M14.7,7.7v6.1H7.1V7.7H14.7 M16.3,9.6V6.9c0-0.4-0.3-0.8-0.8-0.8H6.4c-0.4,0-0.8,0.3-0.8,0.8v7.6c0,0.4,0.3,0.8,0.8,0.8h9.1c0.4,0,0.8-0.3,0.8-0.8v-2.7l1.7,1.7c0.3,0.3,0.8,0.3,1.1,0c0.1-0.1,0.2-0.3,0.2-0.5V8.4c0-0.4-0.3-0.8-0.8-0.8\n\tc-0.2,0-0.4,0.1-0.5,0.2L16.3,9.6z M21.5,1.6H2.9c-0.7,0-1.3,0.7-1.3,1.6v14.6c0,0.9,0.6,1.6,1.3,1.6h7.6v1.1l-5,1c-0.2,0-0.4,0.3-0.4,0.6c0,0.3,0.2,0.4,0.4,0.4c0,0,0,0,0.1,0l5.3-1h2.6l5.3,1c0,0,0,0,0.1,0c0.2,0,0.4-0.2,0.4-0.4\n c0-0.3-0.1-0.6-0.4-0.6l-5-1v-1.1h7.6c0.7,0,1.3-0.7,1.3-1.6V3.2C22.9,2.3,22.3,1.6,21.5,1.6z M21.1,17.3H3.3V3.7h17.8L21.1,17.3L21.1,17.3z`,\n tooltip: 'Screen Record',\n click: (editor) => {\n\n (<any>navigator).mediaDevices.getDisplayMedia({ video: true })\n .then((stream) => {\n const chunks = [];\n const options = { mimeType: 'video/webm; codecs=vp9' };\n let mediaRecorder = new MediaRecorder(stream, options);\n\n stream.addEventListener('inactive', (e) => {\n mediaRecorder.stop();\n mediaRecorder = null;\n stream.getTracks().forEach((track) => track.stop());\n stream = null;\n\n const blob = new Blob(chunks, { type: 'video/webm' });\n config.upload(blob)\n .subscribe((url) => {\n editor.html.insert(`<span class=\"fr-screen-record fr-deletable fr-draggable\"><video controls style=\"max-width:${config.maxWidth}\"><source src=\"${url}\" type=\"video/webm\"></video></span>`);\n });\n });\n\n mediaRecorder.addEventListener('dataavailable', (event) => {\n if (event.data && event.data.size > 0) {\n chunks.push(event.data);\n }\n });\n\n mediaRecorder.start(10);\n })\n .catch((e) => { });\n }\n }\n ]\n };\n }\n\n public async initialize() {\n const FroalaEditor = (window as any).FroalaEditor;\n\n this.editor.events.on('mouseup', (e) => {\n const el = this._getEl(e.target);\n\n if (el) {\n this.editor.popups.hideAll();\n this._activeEl = el;\n this._showPopup(el);\n }\n });\n\n FroalaEditor.POPUP_TEMPLATES[\"screenRecordPlugin.popup\"] = '[_BUTTONS_]';\n\n FroalaEditor.DefineIcon('popupClose', { NAME: 'trash', SVG_KEY: 'remove' });\n FroalaEditor.RegisterCommand('popupClose', {\n title: 'Remove',\n undo: false,\n focus: false,\n callback: () => {\n if (this._activeEl) {\n this._activeEl.remove();\n }\n }\n });\n }\n\n private _createPopup() {\n\n const template = {\n buttons: `<div class=\"fr-buttons\">${this.editor.button.buildList(['popupClose'])}</div>`,\n };\n\n return this.editor.popups.create('screenRecordPlugin.popup', template);\n }\n\n private _showPopup (el) {\n var $popup = this.editor.popups.get('screenRecordPlugin.popup');\n\n if (!$popup) {\n $popup = this._createPopup();\n }\n\n this.editor.popups.setContainer('screenRecordPlugin.popup', this.editor.$(el));\n\n const left = el.offsetLeft + el.offsetWidth / 2;\n\n this.editor.popups.show('screenRecordPlugin.popup', left, null);\n }\n\n private _getEl(el) {\n if (el && el.classList) {\n if (el.classList.contains('fr-screen-record'))\n return el;\n\n return this._getEl(el.parentNode);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.FsFroalaLoaderService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"firestitch-html-editor.mjs","sources":["../../src/app/modules/html-renderer/components/html-renderer/html-renderer.component.ts","../../src/app/modules/html-renderer/components/html-renderer/html-renderer.component.html","../../src/app/modules/html-renderer/fs-html-renderer.module.ts","../../src/app/modules/html-editor/injects/config.inject.ts","../../src/app/modules/html-editor/consts/paragraph-buttons.const.ts","../../src/app/modules/html-editor/consts/rich-buttons.const.ts","../../src/app/modules/html-editor/consts/text-buttons.const.ts","../../src/app/modules/html-editor/services/froala-loader.service.ts","../../src/app/modules/html-editor/components/html-editor/html-editor.component.ts","../../src/app/modules/html-editor/components/html-editor/html-editor.component.html","../../src/app/modules/html-editor/fs-html-editor.module.ts","../../src/app/modules/html-editor/classes/plugin.ts","../../src/app/modules/html-editor/plugins/checklist.plugin.ts","../../src/app/modules/html-editor/plugins/code.plugin.ts","../../src/app/modules/html-editor/plugins/mention.plugin.ts","../../src/app/modules/html-editor/plugins/realtime.plugin.ts","../../src/app/modules/html-editor/plugins/screen-record.plugin.ts","../../src/firestitch-html-editor.ts"],"sourcesContent":["import { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ChangeDetectionStrategy, Component, Input, ChangeDetectorRef } from '@angular/core';\n\n\n@Component({\n selector: 'fs-html-renderer',\n templateUrl: 'html-renderer.component.html',\n styleUrls: ['html-renderer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsHtmlRendererComponent {\n\n @Input('html') public set setHtml(html) {\n this.trustedHtml = this.sanitized.bypassSecurityTrustHtml(html || '');\n this._cdRef.markForCheck();\n }\n\n public trustedHtml: SafeHtml;\n\n public constructor(\n private sanitized: DomSanitizer,\n private _cdRef: ChangeDetectorRef,\n ) { }\n\n}\n","<span class=\"fr-view fs-html-editor-default\" [innerHtml]=\"trustedHtml\"></span>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FsHtmlRendererComponent } from './components/html-renderer/html-renderer.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ],\n exports: [\n FsHtmlRendererComponent,\n ],\n declarations: [\n FsHtmlRendererComponent,\n ],\n})\nexport class FsHtmlRendererModule {\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const FS_HTML_EDITOR_DEFAULT_CONFIG = new InjectionToken<any[]>('fs-html-editor.default-config');\nexport const FS_HTML_EDITOR_CONFIG = new InjectionToken<any[]>('fs-html-editor.config');\n","export const ParagraphButtons = [\n 'align',\n 'formatOL',\n 'formatUL',\n 'checklist',\n 'indent',\n 'outdent',\n 'lineHeight'\n];\n","export const RichButtons = [\n 'insertTable',\n 'insertImage',\n 'insertLink',\n 'insertVideo',\n];\n","export const TextButtons = [\n 'paragraphFormat',\n 'bold',\n 'italic',\n 'underline',\n 'strikeThrough',\n 'subscript',\n 'superscript',\n 'fontFamily',\n 'fontSize',\n 'textColor',\n 'backgroundColor',\n 'inlineClass',\n 'inlineStyle',\n 'clearFormatting',\n 'quote',\n 'code',\n];\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, Optional } from '@angular/core';\n\nimport { fsSourceLoader } from '@firestitch/common';\n\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\nimport { concatMap, map, shareReplay, tap } from 'rxjs/operators';\n\nimport { FS_HTML_EDITOR_CONFIG } from '../injects/config.inject';\nimport { FsHtmlEditorConfig } from '../interfaces/html-editor-config';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FsFroalaLoaderService {\n\n private _froalaEditor: any;\n\n private _froalaLoaded = new BehaviorSubject(false);\n private _froalaPluginsLoaded = new BehaviorSubject(false);\n private _sourceLoader = fsSourceLoader;\n\n private _loaded$ = combineLatest([this._froalaLoaded, this._froalaPluginsLoaded])\n .pipe(\n map(([FroalaReady, pluginsRead]) => {\n return pluginsRead && FroalaReady;\n }),\n shareReplay(1),\n );\n\n constructor(\n @Optional()\n @Inject(FS_HTML_EDITOR_CONFIG)\n private _defaultConfig: FsHtmlEditorConfig,\n @Inject(DOCUMENT)\n private _document: Document,\n ) {\n this._sourceLoader.setDocument(this._document);\n this._load();\n }\n\n public get loaded$(): Observable<boolean> {\n return this._loaded$;\n }\n\n public get FroalaEditor(): any {\n return this._froalaEditor;\n }\n\n private _load() {\n const baseDir = '/assets/froala/';\n this._sourceLoader.registerResources({\n froala: [\n `${baseDir}js/froala_editor.min.js`,\n `${baseDir}css/froala_editor.pkgd.min.css`,\n ],\n froala_align: `${baseDir}js/plugins/align.min.js`,\n froala_colors: `${baseDir}js/plugins/colors.min.js`,\n froala_image: `${baseDir}js/plugins/image.min.js`,\n froala_link: `${baseDir}js/plugins/link.min.js`,\n froala_lists: `${baseDir}js/plugins/lists.min.js`,\n froala_paragraph_format: `${baseDir}js/plugins/paragraph_format.min.js`,\n froala_table: `${baseDir}js/plugins/table.min.js`,\n froala_url: `${baseDir}js/plugins/url.min.js`,\n froala_video: `${baseDir}js/plugins/video.min.js`,\n froala_quote: `${baseDir}js/plugins/quote.min.js`,\n froala_draggable: `${baseDir}js/plugins/draggable.min.js`,\n froala_font_size: `${baseDir}js/plugins/font_size.min.js`,\n froala_quick_insert: `${baseDir}js/plugins/quick_insert.min.js`,\n froala_line_height: `${baseDir}js/plugins/line_height.min.js`,\n });\n\n this._sourceLoader.loadResource('froala')\n .pipe(\n tap(() => {\n this._froalaEditor = (window as any).FroalaEditor;\n this._froalaDone();\n }),\n concatMap(() => {\n return this._loadPlugins();\n }),\n tap(() => {\n this._froalaPluginsDone();\n }),\n )\n .subscribe();\n }\n\n private _loadPlugins(): Observable<unknown> {\n const resources = this._defaultConfig\n .froalaPlugins\n .map((pluginName) => `froala_${pluginName}`);\n\n return this._sourceLoader.loadResources(resources);\n }\n\n private _froalaDone() {\n this._froalaLoaded.next(true);\n }\n\n private _froalaPluginsDone() {\n this._froalaPluginsLoaded.next(true);\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n forwardRef,\n HostBinding,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n ViewChild,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlContainer,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgForm,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\n\nimport { guid } from '@firestitch/common';\nimport { FileProcessor, FsFile, FsFileProcessConfig } from '@firestitch/file';\n\nimport { BehaviorSubject, fromEventPattern, Observable, ReplaySubject, Subject } from 'rxjs';\nimport {\n distinctUntilChanged, filter, map, skip, startWith, switchMap, takeUntil, tap,\n} from 'rxjs/operators';\n\nimport { merge } from 'lodash-es';\n\nimport { FS_HTML_EDITOR_CONFIG } from '../../injects/config.inject';\nimport { ToolbarButton } from '../../interfaces';\nimport { FsHtmlEditorConfig } from '../../interfaces/html-editor-config';\nimport { FsFroalaLoaderService } from '../../services/froala-loader.service';\n\nimport { Plugin } from './../../classes/plugin';\nimport { ParagraphButtons } from './../../consts/paragraph-buttons.const';\nimport { RichButtons } from './../../consts/rich-buttons.const';\nimport { TextButtons } from './../../consts/text-buttons.const';\n\n\n@Component({\n selector: 'fs-html-editor',\n templateUrl: './html-editor.component.html',\n styleUrls: ['./html-editor.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FsHtmlEditorComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => FsHtmlEditorComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [\n {\n provide: ControlContainer,\n deps: [[Optional, NgForm]],\n useFactory: (ngForm: NgForm) => ngForm,\n },\n ],\n})\nexport class FsHtmlEditorComponent \nimplements OnInit, AfterViewInit, ControlValueAccessor, Validator, OnDestroy {\n\n @HostBinding('class.focused') public classFocused = false;\n\n @ViewChild('elRef') public elRef: ElementRef;\n\n @Input() public config: FsHtmlEditorConfig = {};\n @Input() public hint: string;\n\n @Input()\n @HostBinding('class.disabled')\n public disabled = false;\n\n public initialized = false;\n public readonly containerID = `fs-html-editor-${guid('xxx')}`;\n public onTouched: () => void;\n public onChange: (data: any) => void;\n\n private _editor: any;\n private _html: string;\n private _initialize$ = new ReplaySubject();\n private _froalaReady$ = new BehaviorSubject(null);\n private _window: any = this._document.defaultView;\n private _destroy$ = new Subject();\n\n constructor(\n @Optional()\n @Inject(FS_HTML_EDITOR_CONFIG)\n private _defaultConfig,\n @Inject(DOCUMENT)\n private _document: Document,\n private _cdRef: ChangeDetectorRef,\n private _fr: FsFroalaLoaderService,\n ) { }\n\n public get el(): any {\n return this.elRef.nativeElement;\n }\n\n public get html(): string {\n return this._html;\n }\n\n public get editor(): any {\n return this._editor;\n }\n\n public get froalaLoaded$(): Observable<boolean> {\n return this._fr.loaded$;\n }\n\n public ngOnInit(): void {\n this.config = this.config || {};\n this.config.autofocus = this.config.autofocus && (!this.config.disabled || !this.disabled);\n }\n\n public ngAfterViewInit() {\n this._listenLazyInit();\n this._initialize$.next();\n }\n\n public hasContent() {\n const el = document.createElement('div');\n\n if (el.querySelector('img')) {\n return true;\n }\n\n el.innerHTML = this._html;\n\n return !!el.innerText.length;\n }\n\n public initialize(options: any = {}) {\n const config = this._createConfig();\n this._initPlugins(config);\n this._initButtons(config);\n this._editor = new this._fr.FroalaEditor(this.el, this._createOptions(), () => {\n this._froalaReady$.next({ config, options });\n });\n }\n\n public updateSize() {\n // Hack: To trigger the toolbar button size modes\n window.dispatchEvent(new Event('resize'));\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const err: any = {};\n if (this.config.maxLength && this._html) {\n const maxLength = this.config.maxLength;\n const length = this._html.length;\n if (length > maxLength) {\n err.maxLengthError = `Must be ${maxLength} characters or fewer. You entered ${length} characters.`;\n }\n }\n\n return Object.keys(err).length ? err : null;\n }\n\n public focus(options?: { cursorPosition?: 'start' | 'end' }) {\n options = options ? options : {};\n\n if (options.cursorPosition === 'end') {\n this.editor.selection.setAtEnd(this.editor.$el.get(0));\n } else {\n this.editor.selection.setAtStart(this.editor.$el.get(0));\n }\n\n this.editor.selection.restore();\n\n const elSelection = this.editor.selection.element();\n if (elSelection) {\n elSelection.scrollIntoView({ block: 'center' });\n }\n }\n\n public clear() {\n this.writeValue('');\n }\n\n public disable() {\n this.disabled = true;\n }\n\n public setHtml(html) {\n this.writeValue(html);\n }\n\n public writeValue(html: string): void {\n this._html = html || '';\n\n if (Array.isArray(this._html)) {\n this._html = this._html.pop();\n }\n\n this._html = this._html\n .replace(/<(li)>\\s?<(div)>/g, '<li>')\n .replace(/<\\/(div)><\\/(li)>/g, '</li>');\n\n if (this.editor && this.editor.html) {\n try {\n this.editor.html.set(this._html);\n } catch (e) {\n //\n }\n }\n\n this._cdRef.markForCheck();\n }\n\n public registerOnChange(fn: (data: any) => void): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public ngOnDestroy() {\n this._initialize$.complete();\n this._destroy$.next();\n this._destroy$.complete();\n this.destroy();\n }\n\n public destroy() {\n if (this.editor) {\n this.editor.destroy();\n }\n\n this.initialized = false;\n this._cdRef.markForCheck();\n this.el.innerHTML = '';\n }\n\n private _processImageUpload(blob) {\n const processor = new FileProcessor();\n const file = new FsFile(blob);\n\n const config: FsFileProcessConfig = {\n orientate: true,\n quality: this.config.image.quality,\n format: this.config.image.format as any,\n maxWidth: this.config.image.width,\n maxHeight: this.config.image.height,\n minWidth: this.config.image.minWidth,\n minHeight: this.config.image.minHeight,\n };\n\n return processor.processFile(file, config)\n .pipe(\n switchMap((fsFile: FsFile) => {\n return this.config.image.upload(fsFile.file);\n }),\n );\n }\n\n private _createConfig(): FsHtmlEditorConfig {\n return merge({ froalaConfig: {} }, this._defaultConfig, this.config);\n }\n\n private _change(html): void {\n this._html = html;\n this.onChange(html);\n }\n\n private _initButtons(config: FsHtmlEditorConfig) {\n (config.buttons || [])\n .forEach((button) => {\n /*\n Svg Keys:\n [\"add\", \"advancedImageEditor\", \"alignCenter\", \"alignJustify\", \"alignLeft\", \"alignRight\",\n \"anchors\", \"back\", \"backgroundColor\", \"blockquote\", \"bold\", \"cellBackground\",\n \"cellBorderColor\", \"cellOptions\", \"cellStyle\", \"clearFormatting\", \"close\", \"codeView\",\n \"cogs\", \"columns\", \"editLink\", \"exitFullscreen\", \"fontAwesome\", \"fontFamily\",\n \"fontSize\", \"fullscreen\", \"help\", \"horizontalLine\", \"imageAltText\", \"imageCaption\",\n \"imageClass\", \"imageDisplay\", \"imageManager\", \"imageSize\", \"indent\", \"inlineClass\",\n \"inlineStyle\", \"insertEmbed\", \"insertFile\", \"insertImage\", \"insertLink\", \"insertMore\",\n \"insertTable\", \"insertVideo\", \"upload\", \"italic\", \"search\", \"lineHeight\", \"linkStyles\",\n \"mention\", \"more\", \"openLink\", \"orderedList\", \"outdent\", \"pageBreaker\",\n \"paragraphFormat\", \"paragraphMore\", \"paragraphStyle\", \"pdfExport\", \"print\",\n \"redo\", \"removeTable\", \"remove\", \"replaceImage\", \"row\", \"selectAll\", \"smile\",\n \"spellcheck\", \"star\", \"strikeThrough\", \"subscript\", \"superscript\", \"symbols\", \"tags\",\n \"tableHeader\", \"tableStyle\", \"textColor\", \"textMore\", \"underline\", \"undo\", \"unlink\",\n \"unorderedList\", \"verticalAlignBottom\", \"verticalAlignMiddle\", \"verticalAlignTop\"]\n */\n\n if (button.svgKey) {\n this._fr.FroalaEditor.DefineIcon(button.name, { SVG_KEY: button.svgKey });\n }\n\n this._fr.FroalaEditor.RegisterCommand(button.name, {\n title: button.title,\n focus: button.focus ?? true,\n undo: button.undo ?? true,\n refreshAfterCallback: button.refreshAfterCallback ?? true,\n callback() {\n button.click(this);\n },\n });\n });\n }\n\n private _initPlugins(config: FsHtmlEditorConfig) {\n (config.prependToolbarTextButtons || [])\n .forEach((button: ToolbarButton) => {\n this._defineButton(button);\n });\n\n (config.plugins || []).forEach((plugin: Plugin) => {\n this._fr.FroalaEditor.PLUGINS[plugin.config.name] = function (editor) {\n plugin.editor = editor;\n plugin.initialize();\n\n return plugin;\n };\n\n (plugin.config.buttons || [])\n .forEach((button: ToolbarButton) => {\n this._defineButton(button);\n });\n });\n }\n\n private _defineButton(button: ToolbarButton) {\n if(button.html) {\n this._fr.FroalaEditor\n .DefineIconTemplate(`${button.name}-template`, button.html);\n this._fr.FroalaEditor\n .DefineIcon(button.name, { \n NAME: `${button.name}-icon`,\n template: `${button.name}-template`, \n });\n \n } else { \n this._fr.FroalaEditor.DefineIcon(button.name, {\n NAME: button.name,\n PATH: button.svgPath,\n });\n } \n\n this._fr.FroalaEditor.RegisterCommand(button.name, {\n icon: button.name,\n title: button.tooltip,\n undo: button.undo,\n focus: button.focus,\n showOnMobile: button.showOnMobile,\n refreshAfterCallback: button.refreshAfterCallback,\n callback() {\n if (button.click) {\n button.click(this);\n }\n },\n refresh(event) {\n if (event.refresh) {\n event.refresh(this, event);\n }\n },\n });\n\n }\n\n private _createOptions() {\n const config = this._createConfig();\n\n const textButtons = [\n ...(config.prependToolbarTextButtons || [])\n .map((item) => item.name),\n ...TextButtons,\n ];\n\n return merge(\n // For some reason editor store somewhere pointer on default config object and dublicate options each time on init\n // Extra merge level fixed this problem and allow to init config properly without legacy data\n {},\n {\n shortcutsEnabled: ['show', 'bold', 'italic', 'underline', 'indent', 'outdent', 'undo', 'redo', 'insertImage', 'createLink'],\n key: config.activationKey,\n placeholderText: config.placeholder,\n linkAlwaysBlank: true,\n tabSpaces: 2,\n typingTimer: 250,\n tooltips: false,\n wordPasteModal: false,\n imageDefaultWidth: 0,\n imageDefaultAlign: 'left',\n quickInsertEnabled: false,\n scrollableContainer: `#${this.containerID}`,\n paragraphDefaultSelection: 'Format',\n videoUpload: false,\n imagePaste: !!config.image?.upload,\n imageUpload: !!config.image?.upload,\n paragraphFormat: {\n N: 'Normal',\n H1: 'Heading 1',\n H2: 'Heading 2',\n H3: 'Heading 3',\n H4: 'Heading 4',\n BLOCKQUOTE: 'Quote',\n },\n lineHeights: {\n Default: '',\n 0.5: '0.5',\n Single: '1',\n 1.15: '1.15',\n 1.5: '1.5',\n Double: '2',\n },\n paragraphFormatSelection: true,\n toolbarButtonsXS: {\n moreText: {\n buttons: textButtons,\n buttonsVisible: 1,\n },\n moreParagraph: {\n buttons: ParagraphButtons,\n buttonsVisible: 2,\n },\n moreRich: {\n buttons: RichButtons,\n buttonsVisible: 0,\n },\n },\n toolbarButtons: {\n moreText: {\n buttons: textButtons,\n buttonsVisible: 3,\n },\n moreParagraph: {\n buttons: ParagraphButtons,\n buttonsVisible: 5,\n },\n moreRich: {\n buttons: RichButtons,\n buttonsVisible: 3,\n },\n },\n },\n config.froalaConfig,\n );\n }\n\n private _listenLazyInit() {\n\n this.froalaLoaded$\n .pipe(\n filter((ready) => ready),\n switchMap(() => this._initialize$),\n tap(() => {\n const selection: any = window.getSelection();\n const options: any = {};\n if (selection.baseNode) {\n options.selection = {\n node: selection.baseNode.nodeValue,\n offset: selection.baseOffset,\n };\n }\n this.initialize(options);\n }),\n switchMap(() => this._froalaReady$),\n filter((data) => !!data),\n tap(({ config, options }) => {\n this._setupFroala(config, options);\n }),\n )\n .subscribe();\n }\n\n private _contentChanged(): void {\n const editorHTML = this._editor.html.get();\n\n if (this.html !== editorHTML) {\n this._change(editorHTML);\n }\n }\n\n private _setupFroala(config: FsHtmlEditorConfig, options: any): void {\n this._cdRef.markForCheck();\n\n this.setHtml(this._html);\n\n if (config.disabled) {\n this.disable();\n }\n\n if (config.froalaConfig.events) {\n if (config.froalaConfig.events.initialized) {\n config.froalaConfig.events.initialized();\n }\n }\n\n this._editor.events.on('focus', () => {\n this.classFocused = true;\n this._cdRef.markForCheck();\n });\n\n this._editor.events.on('blur', () => {\n this.classFocused = false;\n this._cdRef.markForCheck();\n });\n\n this._editor.events.on('click', () => {\n if (this.config.initOnClick && !this.initialized) {\n this.initialized = true;\n this._cdRef.markForCheck();\n }\n });\n\n fromEventPattern(\n (handler) => {\n this._editor.events.on('contentChanged', handler);\n },\n () => {\n //\n },\n )\n .pipe(\n startWith(this._html),\n map(() => this.editor.html.get()),\n distinctUntilChanged(),\n skip(1),\n )\n .subscribe(() => {\n this._contentChanged();\n });\n\n this._editor.events.on('paste.afterCleanup', (html) => {\n const div = document.createElement('div');\n div.innerHTML = html;\n div.querySelectorAll('*')\n .forEach((el) => {\n for (let i = 0; i < el.attributes.length; i++) {\n const name = el.attributes[0].name;\n if (name !== 'href') {\n el.removeAttribute(name);\n }\n }\n });\n\n return div.innerHTML;\n });\n\n this._editor.events.on('keydown', () => {\n this.onTouched();\n });\n\n if (this.config.image && this.config.image.upload) {\n this._editor.events.on('image.beforePasteUpload', (image) => {\n\n fetch(image.getAttribute('src'))\n .then((res) => {\n res.blob()\n .then((blob) => {\n this._processImageUpload(blob)\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((url) => {\n image.setAttribute('src', url);\n image.removeAttribute('data-fr-image-pasted');\n\n this._contentChanged();\n });\n });\n });\n\n return false;\n });\n\n this._editor.events.on('image.beforeUpload', (blobs) => {\n this._processImageUpload(blobs[0])\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((url) => {\n this.editor.image.insert(url, null, null, this.editor.image.get());\n });\n\n return false;\n });\n }\n\n if (this.el.querySelector('.fr-second-toolbar')) {\n this.el.querySelector('.fr-second-toolbar').remove();\n }\n\n if (this.config.autofocus && !this.config.initOnClick) {\n this.focus();\n }\n }\n}\n","<fs-label-field>\n <fs-label *ngIf=\"config.label\">{{config.label}}</fs-label>\n <div\n class=\"html-editor-container fs-html-editor-default\"\n [id]=\"containerID\"\n [ngClass]=\"{\n initialized: initialized,\n 'init-on-click': config.initOnClick\n }\">\n <ng-container *fsSkeleton=\"(froalaLoaded$ | async) !== false\"></ng-container>\n <div #elRef></div>\n\n <div class=\"bottom-line\"></div>\n <div class=\"disabled-line\"></div>\n </div>\n\n <fs-label-message>\n <div class=\"fs-form-message\">\n <div class=\"fs-form-hint\">{{hint}}</div>\n </div>\n </fs-label-message>\n</fs-label-field>\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\n\nimport { FsHtmlRendererModule } from '../html-renderer/fs-html-renderer.module';\n\nimport { FsHtmlEditorComponent } from './components/html-editor/html-editor.component';\nimport { FroalaPlugin } from './enums/default-plugin.enum';\nimport { FS_HTML_EDITOR_CONFIG, FS_HTML_EDITOR_DEFAULT_CONFIG } from './injects/config.inject';\nimport { FsHtmlEditorConfig } from './interfaces/html-editor-config';\n\n\n@NgModule({\n imports: [\n CommonModule,\n\n FsSkeletonModule,\n FsLabelModule,\n FsHtmlRendererModule,\n ],\n exports: [\n FsHtmlEditorComponent,\n ],\n declarations: [\n FsHtmlEditorComponent,\n ],\n})\nexport class FsHtmlEditorModule {\n public static forRoot(config: FsHtmlEditorConfig = {}): ModuleWithProviders<FsHtmlEditorModule> {\n return {\n ngModule: FsHtmlEditorModule,\n providers: [\n { provide: FS_HTML_EDITOR_DEFAULT_CONFIG, useValue: config },\n {\n provide: FS_HTML_EDITOR_CONFIG,\n useFactory: FsHtmlEditorConfigFactory,\n deps: [FS_HTML_EDITOR_DEFAULT_CONFIG],\n },\n ],\n };\n }\n}\n\nexport function FsHtmlEditorConfigFactory(config: FsHtmlEditorConfig) {\n return {\n froalaPlugins: [\n FroalaPlugin.Align,\n FroalaPlugin.Colors,\n FroalaPlugin.Image,\n FroalaPlugin.Link,\n FroalaPlugin.Lists,\n FroalaPlugin.ParagraphFormat,\n FroalaPlugin.Quote,\n FroalaPlugin.Table,\n FroalaPlugin.Url,\n FroalaPlugin.Video,\n FroalaPlugin.Draggable,\n FroalaPlugin.FontSize,\n FroalaPlugin.LineHeight,\n ],\n ...config,\n };\n}\n","// import { FroalaEditor } from 'froala-editor';\nimport { PluginConfig } from './../interfaces/plugin-config';\n\nexport class Plugin {\n\n public config: PluginConfig;\n public editor: any;\n\n public initialize() {}\n public destroy() {}\n\n}\n","import { Plugin } from '../classes/plugin';\n\nimport { PluginConfig } from './../interfaces/plugin-config';\n\n\nexport class ChecklistPlugin extends Plugin {\n\n public constructor(public config: PluginConfig = { name: 'checklist' }) {\n super();\n this.config = {\n ...config,\n name: 'checklist',\n buttons: [\n {\n name: 'checklist',\n svgPath: 'M8.4,10.3l-1.2,1.2l4,4L20,6.7l-1.2-1.2l-7.6,7.6L8.4,10.3z M18.2,18.2H5.8V5.8h8.9V4H5.8C4.8,4,4,4.8,4,5.8v12.4c0,1,0.8,1.8,1.8,1.8h12.4c1,0,1.8-0.8,1.8-1.8v-7.1h-1.8V18.2z',\n click: (editor) => {\n editor.html.insert('<ul class=\"checklist\"><li></li></ul>');\n }\n }\n ]\n };\n }\n\n public initialize() {\n this.editor.events.on('click', (e) => {\n const li = e.target;\n if (li.nodeName === 'LI' && e.offsetX < 0) {\n\n const items = [li, ...li.querySelectorAll('li')];\n\n if (li.classList.contains('checked')) {\n items.forEach((item) => {\n item.classList.remove('checked');\n });\n } else {\n items.forEach((item) => {\n item.classList.add('checked');\n });\n }\n }\n\n }, false);\n }\n\n}\n","import { Plugin } from '../classes/plugin';\n\nimport { PluginConfig } from './../interfaces/plugin-config';\n\n\nexport class CodePlugin extends Plugin {\n\n public constructor(public config: PluginConfig = { name: 'code' }) {\n super();\n this.config = {\n ...config,\n name: 'code',\n buttons: [\n {\n name: 'code',\n svgPath: 'M8.9,7.3L4.2,12l4.7,4.7l1.1-1.1L6.4,12L10,8.4L8.9,7.3z M15.1,7.3L14,8.4l3.6,3.6L14,15.6l1.1,1.1l4.7-4.7L15.1,7.3z',\n click: (editor) => {\n const node = editor.selection.get();\n const codeEl = this._getCodeEl(node.baseNode);\n if (codeEl) {\n codeEl.classList.remove('code');\n } else {\n editor.html.insert('<p class=\"code\">' + editor.selection.get().toString().replace(/\\n{1,}/g,'<br>') + '</p>');\n }\n }\n }\n ]\n };\n }\n\n public initialize() {\n this.editor.events.on('keydown', (e) => {\n if (e.keyCode === 13) {\n const selection = this.editor.selection.get();\n\n if (selection && this._getCodeEl(selection.baseNode)) {\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n let br = '<br>';\n const base = selection.baseNode;\n if (base.nodeName === '#text' && selection.baseOffset === base.length) {\n\n if (!(base.nextSibling && base.nextSibling.nodeName === 'BR')) {\n br += '<br>';\n }\n } else {\n const el: any = Array.from(base.childNodes).splice(selection.baseOffset - 1, 1).pop();\n if (el && el.nodeName !== 'BR') {\n br += '<br>';\n }\n }\n\n this.editor.html.insert(br);\n return false;\n }\n }\n }, true);\n }\n\n public destroy() {}\n\n private _getCodeEl(el) {\n\n if (el) {\n if (el.classList && el.classList.contains('code')) {\n return el;\n }\n\n if (el.parentElement) {\n return this._getCodeEl(el.parentElement);\n }\n }\n\n return null;\n }\n}\n","import { debounce } from 'lodash-es';\nimport Tribute, { TributeItem } from 'tributejs';\n\nimport { MentionPluginConfig } from './configs/mention-plugin.config';\n\nimport { Plugin } from '../classes/plugin';\n\nimport { guid } from '@firestitch/common';\n\n\nexport class MentionPlugin extends Plugin {\n\n private static _currentGuid = null;\n private static _tributes = [];\n private _tribute;\n private _guid = guid();\n\n public constructor(public config: MentionPluginConfig) {\n super();\n this.config = {\n ...config,\n buttons: [\n {\n name: config.name,\n tooltip: config.tooltip,\n svgPath: config.iconPath,\n click: (editor) => {\n this._closeAll();\n this._tribute.showMenuForCollection(editor.el);\n }\n }\n ]\n };\n\n this._tribute = new Tribute({\n values: debounce(this._loadValues.bind(this), 200),\n searchOpts: {\n pre: '',\n post: '',\n skip: true\n },\n containerClass: `fs-html-editor-mention-container ${this.config.containerClass || ''}`,\n itemClass: `fs-html-editor-mention-menu-item ${this.config.menuItemClass || ''}`,\n trigger: this.config.trigger,\n allowSpaces: true,\n menuItemTemplate: (item: TributeItem<any>) => {\n return this.config.menuItemTemplate(item.original);\n },\n selectTemplate: (item: TributeItem<any>) => {\n const template = this.config.selectedTemplate(item.original);\n\n let p = document.createElement('p');\n p.innerHTML = template;\n\n let node = p.firstElementChild;\n if (!node) {\n node = document.createElement('span');\n node.innerHTML = template;\n }\n\n node.setAttribute('contenteditable', 'false');\n node.classList.add('fr-deletable');\n\n return node.outerHTML;\n },\n });\n\n MentionPlugin._tributes.push(this._tribute);\n }\n\n public initialize() {\n this._tribute.attach(this.editor.el);\n this.editor.events.on('keydown', (e) => {\n if (e.key === 'Enter' && this._tribute.isActive) {\n return false;\n }\n }, true);\n\n \n this.editor.el.addEventListener(\"tribute-replaced\", this.selected);\n }\n\n public selected = (event) => {\n if(this.config.selected) {\n if(MentionPlugin._currentGuid === this._guid) {\n this.config.selected(event.detail.item.original);\n }\n }\n }\n\n public destroy() {\n this.editor.el.removeEventListener(\"tribute-replaced\", this.selected);\n }\n\n private _closeAll() {\n MentionPlugin._tributes.forEach((tribute) => {\n if (tribute.menu) {\n tribute.hideMenu();\n }\n });\n }\n\n private _loadValues(keyword, cb) {\n MentionPlugin._currentGuid = this._guid;\n return this.config.fetch(keyword)\n .subscribe((data) => {\n cb(data);\n });\n }\n}\n","import { PluginConfig } from '../interfaces/plugin-config';\n\nimport { Plugin } from '../classes/plugin';\n\n\nexport class RealtimePlugin extends Plugin {\n\n public constructor(public config: PluginConfig = { name: 'realtime' }) {\n super();\n this.config = {\n ...config,\n name: 'realtime',\n };\n }\n\n public initialize() {\n\n this.editor.events.on('click', (e) => {\n\n }, false);\n }\n}\n","import { ScreenRecordPluginConfig } from './configs/screen-record-plugin.config';\nimport { Plugin } from '../classes/plugin';\n\n\ndeclare var MediaRecorder: any;\n\nexport class ScreenRecordPlugin extends Plugin {\n\n private _activeEl;\n\n public constructor(public config: ScreenRecordPluginConfig = {}) {\n super();\n\n this.config = {\n ...config,\n name: config.name || 'screenRecord',\n buttons: [\n {\n name: 'screenRecord',\n svgPath: `M14.7,7.7v6.1H7.1V7.7H14.7 M16.3,9.6V6.9c0-0.4-0.3-0.8-0.8-0.8H6.4c-0.4,0-0.8,0.3-0.8,0.8v7.6c0,0.4,0.3,0.8,0.8,0.8h9.1c0.4,0,0.8-0.3,0.8-0.8v-2.7l1.7,1.7c0.3,0.3,0.8,0.3,1.1,0c0.1-0.1,0.2-0.3,0.2-0.5V8.4c0-0.4-0.3-0.8-0.8-0.8\n\tc-0.2,0-0.4,0.1-0.5,0.2L16.3,9.6z M21.5,1.6H2.9c-0.7,0-1.3,0.7-1.3,1.6v14.6c0,0.9,0.6,1.6,1.3,1.6h7.6v1.1l-5,1c-0.2,0-0.4,0.3-0.4,0.6c0,0.3,0.2,0.4,0.4,0.4c0,0,0,0,0.1,0l5.3-1h2.6l5.3,1c0,0,0,0,0.1,0c0.2,0,0.4-0.2,0.4-0.4\n c0-0.3-0.1-0.6-0.4-0.6l-5-1v-1.1h7.6c0.7,0,1.3-0.7,1.3-1.6V3.2C22.9,2.3,22.3,1.6,21.5,1.6z M21.1,17.3H3.3V3.7h17.8L21.1,17.3L21.1,17.3z`,\n tooltip: 'Screen Record',\n click: (editor) => {\n\n (<any>navigator).mediaDevices.getDisplayMedia({ video: true })\n .then((stream) => {\n const chunks = [];\n const options = { mimeType: 'video/webm; codecs=vp9' };\n let mediaRecorder = new MediaRecorder(stream, options);\n\n stream.addEventListener('inactive', (e) => {\n mediaRecorder.stop();\n mediaRecorder = null;\n stream.getTracks().forEach((track) => track.stop());\n stream = null;\n\n const blob = new Blob(chunks, { type: 'video/webm' });\n config.upload(blob)\n .subscribe((url) => {\n editor.html.insert(`<span class=\"fr-screen-record fr-deletable fr-draggable\"><video controls style=\"max-width:${config.maxWidth}\"><source src=\"${url}\" type=\"video/webm\"></video></span>`);\n });\n });\n\n mediaRecorder.addEventListener('dataavailable', (event) => {\n if (event.data && event.data.size > 0) {\n chunks.push(event.data);\n }\n });\n\n mediaRecorder.start(10);\n })\n .catch((e) => { });\n }\n }\n ]\n };\n }\n\n public async initialize() {\n const FroalaEditor = (window as any).FroalaEditor;\n\n this.editor.events.on('mouseup', (e) => {\n const el = this._getEl(e.target);\n\n if (el) {\n this.editor.popups.hideAll();\n this._activeEl = el;\n this._showPopup(el);\n }\n });\n\n FroalaEditor.POPUP_TEMPLATES[\"screenRecordPlugin.popup\"] = '[_BUTTONS_]';\n\n FroalaEditor.DefineIcon('popupClose', { NAME: 'trash', SVG_KEY: 'remove' });\n FroalaEditor.RegisterCommand('popupClose', {\n title: 'Remove',\n undo: false,\n focus: false,\n callback: () => {\n if (this._activeEl) {\n this._activeEl.remove();\n }\n }\n });\n }\n\n private _createPopup() {\n\n const template = {\n buttons: `<div class=\"fr-buttons\">${this.editor.button.buildList(['popupClose'])}</div>`,\n };\n\n return this.editor.popups.create('screenRecordPlugin.popup', template);\n }\n\n private _showPopup (el) {\n var $popup = this.editor.popups.get('screenRecordPlugin.popup');\n\n if (!$popup) {\n $popup = this._createPopup();\n }\n\n this.editor.popups.setContainer('screenRecordPlugin.popup', this.editor.$(el));\n\n const left = el.offsetLeft + el.offsetWidth / 2;\n\n this.editor.popups.show('screenRecordPlugin.popup', left, null);\n }\n\n private _getEl(el) {\n if (el && el.classList) {\n if (el.classList.contains('fr-screen-record'))\n return el;\n\n return this._getEl(el.parentNode);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.FsFroalaLoaderService"],"mappings":";;;;;;;;;;;;;;;;;;MAUa,uBAAuB,CAAA;IASlC,WACU,CAAA,SAAuB,EACvB,MAAyB,EAAA;AADzB,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAc;AACvB,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAmB;KAC9B;IAVL,IAA0B,OAAO,CAAC,IAAI,EAAA;AACpC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AACtE,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;KAC5B;;oHALU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,kGCVpC,sFACA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDSa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;+BACE,kBAAkB,EAAA,eAAA,EAGX,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,sFAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;mIAIrB,OAAO,EAAA,CAAA;sBAAhC,KAAK;uBAAC,MAAM,CAAA;;;MEIF,oBAAoB,CAAA;;iHAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,EAH7B,YAAA,EAAA,CAAA,uBAAuB,CANvB,EAAA,OAAA,EAAA,CAAA,YAAY,aAGZ,uBAAuB,CAAA,EAAA,CAAA,CAAA;AAMd,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,EAVtB,OAAA,EAAA,CAAA;YACP,YAAY;SACb,CAAA,EAAA,CAAA,CAAA;2FAQU,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAXhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;AACb,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,uBAAuB;AACxB,qBAAA;AACD,oBAAA,YAAY,EAAE;wBACZ,uBAAuB;AACxB,qBAAA;iBACF,CAAA;;;ACbM,MAAM,6BAA6B,GAAG,IAAI,cAAc,CAAQ,+BAA+B,CAAC,CAAC;MAC3F,qBAAqB,GAAG,IAAI,cAAc,CAAQ,uBAAuB;;ACHzE,MAAA,gBAAgB,GAAG;IAC9B,OAAO;IACP,UAAU;IACV,UAAU;IACV,WAAW;IACX,QAAQ;IACR,SAAS;IACT,YAAY;;;ACPD,MAAA,WAAW,GAAG;IACzB,aAAa;IACb,aAAa;IACb,YAAY;IACZ,aAAa;;;ACJF,MAAA,WAAW,GAAG;IACzB,iBAAiB;IACjB,MAAM;IACN,QAAQ;IACR,WAAW;IACX,eAAe;IACf,WAAW;IACX,aAAa;IACb,YAAY;IACZ,UAAU;IACV,WAAW;IACX,iBAAiB;IACjB,aAAa;IACb,aAAa;IACb,iBAAiB;IACjB,OAAO;IACP,MAAM;;;MCDK,qBAAqB,CAAA;IAgBhC,WAGU,CAAA,cAAkC,EAElC,SAAmB,EAAA;AAFnB,QAAA,IAAc,CAAA,cAAA,GAAd,cAAc,CAAoB;AAElC,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAU;QAjBrB,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAA,CAAA,oBAAoB,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;AAClD,QAAA,IAAa,CAAA,aAAA,GAAG,cAAc,CAAC;AAE/B,QAAA,IAAA,CAAA,QAAQ,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;aAC9E,IAAI,CACH,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,KAAI;YACjC,OAAO,WAAW,IAAI,WAAW,CAAC;AACpC,SAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;QASF,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;KACd;AAED,IAAA,IAAW,OAAO,GAAA;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;AAED,IAAA,IAAW,YAAY,GAAA;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC;KAC3B;IAEO,KAAK,GAAA;QACX,MAAM,OAAO,GAAG,iBAAiB,CAAC;AAClC,QAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC;AACnC,YAAA,MAAM,EAAE;AACN,gBAAA,CAAA,EAAG,OAAO,CAAyB,uBAAA,CAAA;AACnC,gBAAA,CAAA,EAAG,OAAO,CAAgC,8BAAA,CAAA;AAC3C,aAAA;YACD,YAAY,EAAE,CAAG,EAAA,OAAO,CAAyB,uBAAA,CAAA;YACjD,aAAa,EAAE,CAAG,EAAA,OAAO,CAA0B,wBAAA,CAAA;YACnD,YAAY,EAAE,CAAG,EAAA,OAAO,CAAyB,uBAAA,CAAA;YACjD,WAAW,EAAE,CAAG,EAAA,OAAO,CAAwB,sBAAA,CAAA;YAC/C,YAAY,EAAE,CAAG,EAAA,OAAO,CAAyB,uBAAA,CAAA;YACjD,uBAAuB,EAAE,CAAG,EAAA,OAAO,CAAoC,kCAAA,CAAA;YACvE,YAAY,EAAE,CAAG,EAAA,OAAO,CAAyB,uBAAA,CAAA;YACjD,UAAU,EAAE,CAAG,EAAA,OAAO,CAAuB,qBAAA,CAAA;YAC7C,YAAY,EAAE,CAAG,EAAA,OAAO,CAAyB,uBAAA,CAAA;YACjD,YAAY,EAAE,CAAG,EAAA,OAAO,CAAyB,uBAAA,CAAA;YACjD,gBAAgB,EAAE,CAAG,EAAA,OAAO,CAA6B,2BAAA,CAAA;YACzD,gBAAgB,EAAE,CAAG,EAAA,OAAO,CAA6B,2BAAA,CAAA;YACzD,mBAAmB,EAAE,CAAG,EAAA,OAAO,CAAgC,8BAAA,CAAA;YAC/D,kBAAkB,EAAE,CAAG,EAAA,OAAO,CAA+B,6BAAA,CAAA;AAC9D,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC;AACtC,aAAA,IAAI,CACH,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,aAAa,GAAI,MAAc,CAAC,YAAY,CAAC;YAClD,IAAI,CAAC,WAAW,EAAE,CAAC;AACrB,SAAC,CAAC,EACF,SAAS,CAAC,MAAK;AACb,YAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;AAC7B,SAAC,CAAC,EACF,GAAG,CAAC,MAAK;YACP,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC5B,SAAC,CAAC,CACH;AACA,aAAA,SAAS,EAAE,CAAC;KAChB;IAEO,YAAY,GAAA;AAClB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc;aAClC,aAAa;aACb,GAAG,CAAC,CAAC,UAAU,KAAK,CAAU,OAAA,EAAA,UAAU,CAAE,CAAA,CAAC,CAAC;QAE/C,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;KACpD;IAEO,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC/B;IAEO,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACtC;;kHAxFU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAkBtB,qBAAqB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAErB,QAAQ,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AApBP,qBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA;2FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;iBACnB,CAAA;;;8BAkBI,QAAQ;;8BACR,MAAM;+BAAC,qBAAqB,CAAA;kCAGV,QAAQ,EAAA,UAAA,EAAA,CAAA;8BAD1B,MAAM;+BAAC,QAAQ,CAAA;;;;MCsCP,qBAAqB,CAAA;AA0BhC,IAAA,WAAA,CAGU,cAAc,EAEd,SAAmB,EACnB,MAAyB,EACzB,GAA0B,EAAA;AAJ1B,QAAA,IAAc,CAAA,cAAA,GAAd,cAAc,CAAA;AAEd,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAU;AACnB,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAmB;AACzB,QAAA,IAAG,CAAA,GAAA,GAAH,GAAG,CAAuB;AA9BC,QAAA,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;AAI1C,QAAA,IAAM,CAAA,MAAA,GAAuB,EAAE,CAAC;AAKzC,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAEjB,QAAA,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;QACX,IAAA,CAAA,WAAW,GAAG,CAAA,eAAA,EAAkB,IAAI,CAAC,KAAK,CAAC,CAAA,CAAE,CAAC;AAMtD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,aAAa,EAAE,CAAC;QACnC,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAA,CAAA,OAAO,GAAQ,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;AAC1C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAE,CAAC;KAU7B;AAEL,IAAA,IAAW,EAAE,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;KACjC;AAED,IAAA,IAAW,IAAI,GAAA;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;AAED,IAAA,IAAW,MAAM,GAAA;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;AAED,IAAA,IAAW,aAAa,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;KACzB;IAEM,QAAQ,GAAA;QACb,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC5F;IAEM,eAAe,GAAA;QACpB,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;KAC1B;IAEM,UAAU,GAAA;QACf,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAEzC,QAAA,IAAI,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;AAC3B,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAED,QAAA,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;AAE1B,QAAA,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC;KAC9B;IAEM,UAAU,CAAC,UAAe,EAAE,EAAA;AACjC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,MAAK;YAC5E,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AAC/C,SAAC,CAAC,CAAC;KACJ;IAEM,UAAU,GAAA;;QAEf,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;KAC3C;AAEM,IAAA,QAAQ,CAAC,OAAwB,EAAA;QACtC,MAAM,GAAG,GAAQ,EAAE,CAAC;QACpB,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE;AACvC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;AACxC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YACjC,IAAI,MAAM,GAAG,SAAS,EAAE;gBACtB,GAAG,CAAC,cAAc,GAAG,CAAA,QAAA,EAAW,SAAS,CAAqC,kCAAA,EAAA,MAAM,cAAc,CAAC;AACpG,aAAA;AACF,SAAA;AAED,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC;KAC7C;AAEM,IAAA,KAAK,CAAC,OAA8C,EAAA;QACzD,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,EAAE,CAAC;AAEjC,QAAA,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK,EAAE;AACpC,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,SAAA;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAEhC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AACpD,QAAA,IAAI,WAAW,EAAE;YACf,WAAW,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AACjD,SAAA;KACF;IAEM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;KACrB;IAEM,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KACtB;AAEM,IAAA,OAAO,CAAC,IAAI,EAAA;AACjB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;KACvB;AAEM,IAAA,UAAU,CAAC,IAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;QAExB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;AAC/B,SAAA;AAED,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AACpB,aAAA,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC;AACpC,aAAA,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;QAE1C,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YACnC,IAAI;gBACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,aAAA;AAAC,YAAA,OAAO,CAAC,EAAE;;AAEX,aAAA;AACF,SAAA;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;KAC5B;AAEM,IAAA,gBAAgB,CAAC,EAAuB,EAAA;AAC7C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;AAEM,IAAA,iBAAiB,CAAC,EAAc,EAAA;AACrC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;IAEM,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,OAAO,EAAE,CAAC;KAChB;IAEM,OAAO,GAAA;QACZ,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;AACvB,SAAA;AAED,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC;KACxB;AAEO,IAAA,mBAAmB,CAAC,IAAI,EAAA;AAC9B,QAAA,MAAM,SAAS,GAAG,IAAI,aAAa,EAAE,CAAC;AACtC,QAAA,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;AAE9B,QAAA,MAAM,MAAM,GAAwB;AAClC,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO;AAClC,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAa;AACvC,YAAA,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;AACjC,YAAA,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM;AACnC,YAAA,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ;AACpC,YAAA,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS;SACvC,CAAC;AAEF,QAAA,OAAO,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC;AACvC,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,MAAc,KAAI;AAC3B,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SAC9C,CAAC,CACH,CAAC;KACL;IAEO,aAAa,GAAA;AACnB,QAAA,OAAO,KAAK,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;KACtE;AAEO,IAAA,OAAO,CAAC,IAAI,EAAA;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KACrB;AAEO,IAAA,YAAY,CAAC,MAA0B,EAAA;AAC7C,QAAA,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE;AAClB,aAAA,OAAO,CAAC,CAAC,MAAM,KAAI;;AAClB;;;;;;;;;;;;;;;;AAgBE;YAEF,IAAI,MAAM,CAAC,MAAM,EAAE;AACjB,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC3E,aAAA;YAED,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE;gBACjD,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,gBAAA,KAAK,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,KAAK,mCAAI,IAAI;AAC3B,gBAAA,IAAI,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,IAAI,mCAAI,IAAI;AACzB,gBAAA,oBAAoB,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,oBAAoB,mCAAI,IAAI;gBACzD,QAAQ,GAAA;AACN,oBAAA,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;iBACpB;AACF,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACN;AAEO,IAAA,YAAY,CAAC,MAA0B,EAAA;AAC7C,QAAA,CAAC,MAAM,CAAC,yBAAyB,IAAI,EAAE;AACpC,aAAA,OAAO,CAAC,CAAC,MAAqB,KAAI;AACjC,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAC7B,SAAC,CAAC,CAAC;AAEL,QAAA,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,MAAc,KAAI;AAChD,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,MAAM,EAAA;AAClE,gBAAA,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;gBACvB,MAAM,CAAC,UAAU,EAAE,CAAC;AAEpB,gBAAA,OAAO,MAAM,CAAC;AAChB,aAAC,CAAC;AAEF,YAAA,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE;AACzB,iBAAA,OAAO,CAAC,CAAC,MAAqB,KAAI;AACjC,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAC7B,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;KACJ;AAEO,IAAA,aAAa,CAAC,MAAqB,EAAA;QACzC,IAAG,MAAM,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,GAAG,CAAC,YAAY;iBAClB,kBAAkB,CAAC,CAAG,EAAA,MAAM,CAAC,IAAI,CAAW,SAAA,CAAA,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAC9D,IAAI,CAAC,GAAG,CAAC,YAAY;AAClB,iBAAA,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE;AACvB,gBAAA,IAAI,EAAE,CAAA,EAAG,MAAM,CAAC,IAAI,CAAO,KAAA,CAAA;AAC3B,gBAAA,QAAQ,EAAE,CAAA,EAAG,MAAM,CAAC,IAAI,CAAW,SAAA,CAAA;AACpC,aAAA,CAAC,CAAC;AAEN,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE;gBAC5C,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,IAAI,EAAE,MAAM,CAAC,OAAO;AACrB,aAAA,CAAC,CAAC;AACJ,SAAA;QAED,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE;YACjD,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK,EAAE,MAAM,CAAC,OAAO;YACrB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;YACjD,QAAQ,GAAA;gBACN,IAAI,MAAM,CAAC,KAAK,EAAE;AAChB,oBAAA,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACpB,iBAAA;aACF;AACD,YAAA,OAAO,CAAC,KAAK,EAAA;gBACX,IAAI,KAAK,CAAC,OAAO,EAAE;AACjB,oBAAA,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC5B,iBAAA;aACF;AACF,SAAA,CAAC,CAAC;KAEJ;IAEO,cAAc,GAAA;;AACpB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AAEpC,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,GAAG,CAAC,MAAM,CAAC,yBAAyB,IAAI,EAAE;iBACvC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;AAC3B,YAAA,GAAG,WAAW;SACf,CAAC;AAEF,QAAA,OAAO,KAAK;;;AAGV,QAAA,EAAE,EACF;YACE,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,CAAC;YAC3H,GAAG,EAAE,MAAM,CAAC,aAAa;YACzB,eAAe,EAAE,MAAM,CAAC,WAAW;AACnC,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,WAAW,EAAE,GAAG;AAChB,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,iBAAiB,EAAE,CAAC;AACpB,YAAA,iBAAiB,EAAE,MAAM;AACzB,YAAA,kBAAkB,EAAE,KAAK;AACzB,YAAA,mBAAmB,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,WAAW,CAAE,CAAA;AAC3C,YAAA,yBAAyB,EAAE,QAAQ;AACnC,YAAA,WAAW,EAAE,KAAK;YAClB,UAAU,EAAE,CAAC,EAAC,CAAA,EAAA,GAAA,MAAM,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAA;YAClC,WAAW,EAAE,CAAC,EAAC,CAAA,EAAA,GAAA,MAAM,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAA;AACnC,YAAA,eAAe,EAAE;AACf,gBAAA,CAAC,EAAE,QAAQ;AACX,gBAAA,EAAE,EAAE,WAAW;AACf,gBAAA,EAAE,EAAE,WAAW;AACf,gBAAA,EAAE,EAAE,WAAW;AACf,gBAAA,EAAE,EAAE,WAAW;AACf,gBAAA,UAAU,EAAE,OAAO;AACpB,aAAA;AACD,YAAA,WAAW,EAAE;AACX,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,GAAG,EAAE,KAAK;AACV,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,GAAG,EAAE,KAAK;AACV,gBAAA,MAAM,EAAE,GAAG;AACZ,aAAA;AACD,YAAA,wBAAwB,EAAE,IAAI;AAC9B,YAAA,gBAAgB,EAAE;AAChB,gBAAA,QAAQ,EAAE;AACR,oBAAA,OAAO,EAAE,WAAW;AACpB,oBAAA,cAAc,EAAE,CAAC;AAClB,iBAAA;AACD,gBAAA,aAAa,EAAE;AACb,oBAAA,OAAO,EAAE,gBAAgB;AACzB,oBAAA,cAAc,EAAE,CAAC;AAClB,iBAAA;AACD,gBAAA,QAAQ,EAAE;AACR,oBAAA,OAAO,EAAE,WAAW;AACpB,oBAAA,cAAc,EAAE,CAAC;AAClB,iBAAA;AACF,aAAA;AACD,YAAA,cAAc,EAAE;AACd,gBAAA,QAAQ,EAAE;AACR,oBAAA,OAAO,EAAE,WAAW;AACpB,oBAAA,cAAc,EAAE,CAAC;AAClB,iBAAA;AACD,gBAAA,aAAa,EAAE;AACb,oBAAA,OAAO,EAAE,gBAAgB;AACzB,oBAAA,cAAc,EAAE,CAAC;AAClB,iBAAA;AACD,gBAAA,QAAQ,EAAE;AACR,oBAAA,OAAO,EAAE,WAAW;AACpB,oBAAA,cAAc,EAAE,CAAC;AAClB,iBAAA;AACF,aAAA;AACF,SAAA,EACD,MAAM,CAAC,YAAY,CACpB,CAAC;KACH;IAEO,eAAe,GAAA;AAErB,QAAA,IAAI,CAAC,aAAa;aACf,IAAI,CACH,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,EACxB,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,EAClC,GAAG,CAAC,MAAK;AACP,YAAA,MAAM,SAAS,GAAQ,MAAM,CAAC,YAAY,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAQ,EAAE,CAAC;YACxB,IAAI,SAAS,CAAC,QAAQ,EAAE;gBACtB,OAAO,CAAC,SAAS,GAAG;AAClB,oBAAA,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,SAAS;oBAClC,MAAM,EAAE,SAAS,CAAC,UAAU;iBAC7B,CAAC;AACH,aAAA;AACD,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC3B,SAAC,CAAC,EACF,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,EACnC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,EACxB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAI;AAC1B,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACrC,SAAC,CAAC,CACH;AACA,aAAA,SAAS,EAAE,CAAC;KAChB;IAEO,eAAe,GAAA;QACrB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAE3C,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;AAC5B,YAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAC1B,SAAA;KACF;IAEO,YAAY,CAAC,MAA0B,EAAE,OAAY,EAAA;AAC3D,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;AAE3B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEzB,IAAI,MAAM,CAAC,QAAQ,EAAE;YACnB,IAAI,CAAC,OAAO,EAAE,CAAC;AAChB,SAAA;AAED,QAAA,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE;AAC9B,YAAA,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE;AAC1C,gBAAA,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;AAC1C,aAAA;AACF,SAAA;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAK;AACnC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;AAC7B,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAK;AAClC,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,YAAA,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;AAC7B,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAK;YACnC,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAChD,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,gBAAA,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;AAC5B,aAAA;AACH,SAAC,CAAC,CAAC;AAEH,QAAA,gBAAgB,CACd,CAAC,OAAO,KAAI;YACV,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;SACnD,EACD,MAAK;;AAEL,SAAC,CACF;AACE,aAAA,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EACrB,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EACjC,oBAAoB,EAAE,EACtB,IAAI,CAAC,CAAC,CAAC,CACR;aACA,SAAS,CAAC,MAAK;YACd,IAAI,CAAC,eAAe,EAAE,CAAC;AACzB,SAAC,CAAC,CAAC;AAEL,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,IAAI,KAAI;YACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC1C,YAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;AACrB,YAAA,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC;AACtB,iBAAA,OAAO,CAAC,CAAC,EAAE,KAAI;AACd,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC7C,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBACnC,IAAI,IAAI,KAAK,MAAM,EAAE;AACnB,wBAAA,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC1B,qBAAA;AACF,iBAAA;AACH,aAAC,CAAC,CAAC;YAEL,OAAO,GAAG,CAAC,SAAS,CAAC;AACvB,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,MAAK;YACrC,IAAI,CAAC,SAAS,EAAE,CAAC;AACnB,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE;AACjD,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,KAAK,KAAI;AAE1D,gBAAA,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC7B,qBAAA,IAAI,CAAC,CAAC,GAAG,KAAI;oBACZ,GAAG,CAAC,IAAI,EAAE;AACP,yBAAA,IAAI,CAAC,CAAC,IAAI,KAAI;AACb,wBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAC3B,6BAAA,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;AACA,6BAAA,SAAS,CAAC,CAAC,GAAG,KAAI;AACjB,4BAAA,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC/B,4BAAA,KAAK,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC;4BAE9C,IAAI,CAAC,eAAe,EAAE,CAAC;AACzB,yBAAC,CAAC,CAAC;AACP,qBAAC,CAAC,CAAC;AACP,iBAAC,CAAC,CAAC;AAEL,gBAAA,OAAO,KAAK,CAAC;AACf,aAAC,CAAC,CAAC;AAEH,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,KAAK,KAAI;AACrD,gBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/B,qBAAA,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;AACA,qBAAA,SAAS,CAAC,CAAC,GAAG,KAAI;oBACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;AACrE,iBAAC,CAAC,CAAC;AAEL,gBAAA,OAAO,KAAK,CAAC;AACf,aAAC,CAAC,CAAC;AACJ,SAAA;QAED,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,oBAAoB,CAAC,EAAE;YAC/C,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC,MAAM,EAAE,CAAC;AACtD,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YACrD,IAAI,CAAC,KAAK,EAAE,CAAC;AACd,SAAA;KACF;;kHAnhBU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EA4BtB,qBAAqB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAErB,QAAQ,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA9BP,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EArBrB,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACT,QAAA;AACE,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,YAAA,KAAK,EAAE,IAAI;AACZ,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,aAAa;AACtB,YAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,YAAA,KAAK,EAAE,IAAI;AACZ,SAAA;AACF,KAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/DH,qpBAsBA,ED2CiB,MAAA,EAAA,CAAA,giHAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,OAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,aAAA,EAAA;AACb,QAAA;AACE,YAAA,OAAO,EAAE,gBAAgB;AACzB,YAAA,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC1B,YAAA,UAAU,EAAE,CAAC,MAAc,KAAK,MAAM;AACvC,SAAA;KACF,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FAEU,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAzBjC,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAGf,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,2BAA2B,CAAC;AACpD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAC,2BAA2B,CAAC;AACpD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EACgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAChC,aAAA,EAAA;AACb,wBAAA;AACE,4BAAA,OAAO,EAAE,gBAAgB;AACzB,4BAAA,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC1B,4BAAA,UAAU,EAAE,CAAC,MAAc,KAAK,MAAM;AACvC,yBAAA;qBACF,EAAA,QAAA,EAAA,qpBAAA,EAAA,MAAA,EAAA,CAAA,giHAAA,CAAA,EAAA,CAAA;;;8BA6BE,QAAQ;;8BACR,MAAM;+BAAC,qBAAqB,CAAA;kCAGV,QAAQ,EAAA,UAAA,EAAA,CAAA;8BAD1B,MAAM;+BAAC,QAAQ,CAAA;;yBA3BmB,YAAY,EAAA,CAAA;sBAAhD,WAAW;uBAAC,eAAe,CAAA;gBAED,KAAK,EAAA,CAAA;sBAA/B,SAAS;uBAAC,OAAO,CAAA;gBAEF,MAAM,EAAA,CAAA;sBAArB,KAAK;gBACU,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBAIC,QAAQ,EAAA,CAAA;sBAFd,KAAK;;sBACL,WAAW;uBAAC,gBAAgB,CAAA;;;MEvDlB,kBAAkB,CAAA;AACtB,IAAA,OAAO,OAAO,CAAC,MAAA,GAA6B,EAAE,EAAA;QACnD,OAAO;AACL,YAAA,QAAQ,EAAE,kBAAkB;AAC5B,YAAA,SAAS,EAAE;AACT,gBAAA,EAAE,OAAO,EAAE,6BAA6B,EAAE,QAAQ,EAAE,MAAM,EAAE;AAC5D,gBAAA;AACE,oBAAA,OAAO,EAAE,qBAAqB;AAC9B,oBAAA,UAAU,EAAE,yBAAyB;oBACrC,IAAI,EAAE,CAAC,6BAA6B,CAAC;AACtC,iBAAA;AACF,aAAA;SACF,CAAC;KACH;;+GAbU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAAlB,kBAAkB,EAAA,YAAA,EAAA,CAH3B,qBAAqB,CAAA,EAAA,OAAA,EAAA,CAVrB,YAAY;QAEZ,gBAAgB;QAChB,aAAa;QACb,oBAAoB,aAGpB,qBAAqB,CAAA,EAAA,CAAA,CAAA;AAMZ,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,EAdpB,OAAA,EAAA,CAAA;YACP,YAAY;YAEZ,gBAAgB;YAChB,aAAa;YACb,oBAAoB;SACrB,CAAA,EAAA,CAAA,CAAA;2FAQU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAf9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBAEZ,gBAAgB;wBAChB,aAAa;wBACb,oBAAoB;AACrB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,qBAAqB;AACtB,qBAAA;AACD,oBAAA,YAAY,EAAE;wBACZ,qBAAqB;AACtB,qBAAA;iBACF,CAAA;;AAiBK,SAAU,yBAAyB,CAAC,MAA0B,EAAA;AAClE,IAAA,OAAA,MAAA,CAAA,MAAA,CAAA,EACE,aAAa,EAAE;;;;;;;;;;;;;;AAcd,SAAA,EAAA,EACE,MAAM,CACT,CAAA;AACJ;;MC7Da,MAAM,CAAA;AAKV,IAAA,UAAU,MAAK;AACf,IAAA,OAAO,MAAK;AAEpB;;ACNK,MAAO,eAAgB,SAAQ,MAAM,CAAA;AAEzC,IAAA,WAAA,CAA0B,MAAuB,GAAA,EAAE,IAAI,EAAE,WAAW,EAAE,EAAA;AACpE,QAAA,KAAK,EAAE,CAAC;AADgB,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAsC;QAEpE,IAAI,CAAC,MAAM,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACN,MAAM,CAAA,EAAA,EACT,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE;AACP,gBAAA;AACE,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,OAAO,EAAE,4KAA4K;AACrL,oBAAA,KAAK,EAAE,CAAC,MAAM,KAAI;AAChB,wBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC;qBAC5D;AACF,iBAAA;AACF,aAAA,EAAA,CACF,CAAC;KACH;IAEM,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,KAAI;AACnC,YAAA,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE;AAEzC,gBAAA,MAAM,KAAK,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;gBAEjD,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACpC,oBAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACrB,wBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACnC,qBAAC,CAAC,CAAC;AACJ,iBAAA;AAAM,qBAAA;AACL,oBAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACrB,wBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAChC,qBAAC,CAAC,CAAC;AACJ,iBAAA;AACF,aAAA;SAEF,EAAE,KAAK,CAAC,CAAC;KACX;AAEF;;ACxCK,MAAO,UAAW,SAAQ,MAAM,CAAA;AAEpC,IAAA,WAAA,CAA0B,MAAuB,GAAA,EAAE,IAAI,EAAE,MAAM,EAAE,EAAA;AAC/D,QAAA,KAAK,EAAE,CAAC;AADgB,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAiC;QAE/D,IAAI,CAAC,MAAM,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACN,MAAM,CAAA,EAAA,EACT,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;AACP,gBAAA;AACE,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,OAAO,EAAE,mHAAmH;AAC5H,oBAAA,KAAK,EAAE,CAAC,MAAM,KAAI;wBAChB,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;wBACpC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9C,wBAAA,IAAI,MAAM,EAAE;AACV,4BAAA,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACjC,yBAAA;AAAM,6BAAA;4BACL,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,SAAS,EAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAC/G,yBAAA;qBACF;AACF,iBAAA;AACF,aAAA,EAAA,CACF,CAAC;KACH;IAEM,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,KAAI;AACrC,YAAA,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE,EAAE;gBACpB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;gBAE9C,IAAI,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;oBACpD,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,CAAC,CAAC,eAAe,EAAE,CAAC;oBACpB,CAAC,CAAC,wBAAwB,EAAE,CAAC;oBAC7B,IAAI,EAAE,GAAG,MAAM,CAAC;AAChB,oBAAA,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC;AAChC,oBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,IAAI,SAAS,CAAC,UAAU,KAAK,IAAI,CAAC,MAAM,EAAE;AAErE,wBAAA,IAAI,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE;4BAC7D,EAAE,IAAI,MAAM,CAAC;AACd,yBAAA;AACF,qBAAA;AAAM,yBAAA;wBACL,MAAM,EAAE,GAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACtF,wBAAA,IAAI,EAAE,IAAI,EAAE,CAAC,QAAQ,KAAK,IAAI,EAAE;4BAC9B,EAAE,IAAI,MAAM,CAAC;AACd,yBAAA;AACF,qBAAA;oBAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC5B,oBAAA,OAAO,KAAK,CAAC;AACd,iBAAA;AACF,aAAA;SACF,EAAE,IAAI,CAAC,CAAC;KACV;AAEM,IAAA,OAAO,MAAK;AAEX,IAAA,UAAU,CAAC,EAAE,EAAA;AAEnB,QAAA,IAAI,EAAE,EAAE;AACN,YAAA,IAAI,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACjD,gBAAA,OAAO,EAAE,CAAC;AACX,aAAA;YAED,IAAI,EAAE,CAAC,aAAa,EAAE;gBACpB,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;AAC1C,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AACF;;AClEK,MAAO,aAAc,SAAQ,MAAM,CAAA;AAOvC,IAAA,WAAA,CAA0B,MAA2B,EAAA;AACnD,QAAA,KAAK,EAAE,CAAC;AADgB,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAqB;AAF7C,QAAA,IAAK,CAAA,KAAA,GAAG,IAAI,EAAE,CAAC;AAmEhB,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,KAAK,KAAI;AAC1B,YAAA,IAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACvB,gBAAA,IAAG,aAAa,CAAC,YAAY,KAAK,IAAI,CAAC,KAAK,EAAE;AAC5C,oBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,iBAAA;AACF,aAAA;AACH,SAAC,CAAA;AArEC,QAAA,IAAI,CAAC,MAAM,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACN,MAAM,CAAA,EAAA,EACT,OAAO,EAAE;AACP,gBAAA;oBACE,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,OAAO,EAAE,MAAM,CAAC,QAAQ;AACxB,oBAAA,KAAK,EAAE,CAAC,MAAM,KAAI;wBAChB,IAAI,CAAC,SAAS,EAAE,CAAC;wBACjB,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;qBAChD;AACF,iBAAA;AACF,aAAA,EAAA,CACF,CAAC;AAEF,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC;AACxB,YAAA,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;AAClD,YAAA,UAAU,EAAE;AACV,gBAAA,GAAG,EAAE,EAAE;AACP,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,IAAI,EAAE,IAAI;AACX,aAAA;YACD,cAAc,EAAE,oCAAoC,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAE,CAAA;YACtF,SAAS,EAAE,oCAAoC,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAE,CAAA;AAChF,YAAA,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;AAC5B,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,gBAAgB,EAAE,CAAC,IAAsB,KAAI;gBAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACpD;AACD,YAAA,cAAc,EAAE,CAAC,IAAsB,KAAI;AACzC,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAE7D,IAAI,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AACpC,gBAAA,CAAC,CAAC,SAAS,GAAG,QAAQ,CAAC;AAEvB,gBAAA,IAAI,IAAI,GAAG,CAAC,CAAC,iBAAiB,CAAC;gBAC/B,IAAI,CAAC,IAAI,EAAE;AACT,oBAAA,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AACtC,oBAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC3B,iBAAA;AAED,gBAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;AAC9C,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBAEnC,OAAO,IAAI,CAAC,SAAS,CAAC;aACvB;AACF,SAAA,CAAC,CAAC;QAEL,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC7C;IAEM,UAAU,GAAA;QACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,KAAI;YACrC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAK,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AAChD,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;SACF,EAAE,IAAI,CAAC,CAAC;AAGT,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;KACpE;IAUM,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;KACvE;IAEO,SAAS,GAAA;QACf,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;YAC1C,IAAI,OAAO,CAAC,IAAI,EAAE;gBAChB,OAAO,CAAC,QAAQ,EAAE,CAAC;AACpB,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;IAEO,WAAW,CAAC,OAAO,EAAE,EAAE,EAAA;AAC7B,QAAA,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;AACxC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;AACtB,aAAA,SAAS,CAAC,CAAC,IAAI,KAAI;YAClB,EAAE,CAAC,IAAI,CAAC,CAAC;AACX,SAAC,CAAC,CAAC;KACd;;AAhGc,aAAY,CAAA,YAAA,GAAG,IAAI,CAAC;AACpB,aAAS,CAAA,SAAA,GAAG,EAAE;;ACRzB,MAAO,cAAe,SAAQ,MAAM,CAAA;AAExC,IAAA,WAAA,CAA0B,MAAuB,GAAA,EAAE,IAAI,EAAE,UAAU,EAAE,EAAA;AACnE,QAAA,KAAK,EAAE,CAAC;AADgB,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAqC;QAEnE,IAAI,CAAC,MAAM,GACN,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,MAAM,KACT,IAAI,EAAE,UAAU,EAAA,CACjB,CAAC;KACH;IAEM,UAAU,GAAA;AAEf,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,KAAI;SAEpC,EAAE,KAAK,CAAC,CAAC;KACX;AACF;;ACfK,MAAO,kBAAmB,SAAQ,MAAM,CAAA;IAI5C,WAA0B,CAAA,SAAmC,EAAE,EAAA;AAC7D,QAAA,KAAK,EAAE,CAAC;AADgB,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAA+B;AAG7D,QAAA,IAAI,CAAC,MAAM,GACN,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,MAAM,KACT,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,cAAc,EACnC,OAAO,EAAE;AACP,gBAAA;AACE,oBAAA,IAAI,EAAE,cAAc;AACpB,oBAAA,OAAO,EAAE,CAAA;;AAEuH,yIAAA,CAAA;AAChI,oBAAA,OAAO,EAAE,eAAe;AACxB,oBAAA,KAAK,EAAE,CAAC,MAAM,KAAI;wBAEV,SAAU,CAAC,YAAY,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC3D,6BAAA,IAAI,CAAC,CAAC,MAAM,KAAI;4BACf,MAAM,MAAM,GAAG,EAAE,CAAC;AAClB,4BAAA,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,wBAAwB,EAAE,CAAC;4BACvD,IAAI,aAAa,GAAG,IAAI,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;4BAEvD,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAC,KAAI;gCACxC,aAAa,CAAC,IAAI,EAAE,CAAC;gCACrB,aAAa,GAAG,IAAI,CAAC;AACrB,gCAAA,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gCACpD,MAAM,GAAG,IAAI,CAAC;AAEd,gCAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;AACtD,gCAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;AAChB,qCAAA,SAAS,CAAC,CAAC,GAAG,KAAI;AACnB,oCAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA,0FAAA,EAA6F,MAAM,CAAC,QAAQ,CAAA,eAAA,EAAkB,GAAG,CAAA,mCAAA,CAAqC,CAAC,CAAC;AAC7L,iCAAC,CAAC,CAAC;AACL,6BAAC,CAAC,CAAC;4BAEH,aAAa,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,KAAK,KAAI;gCACxD,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE;AACrC,oCAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACzB,iCAAA;AACH,6BAAC,CAAC,CAAC;AAEH,4BAAA,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC1B,yBAAC,CAAC;6BACD,KAAK,CAAC,CAAC,CAAC,KAAO,GAAC,CAAC,CAAC;qBACtB;AACF,iBAAA;AACF,aAAA,EAAA,CACF,CAAC;KACH;IAEY,UAAU,GAAA;;AACrB,YAAA,MAAM,YAAY,GAAI,MAAc,CAAC,YAAY,CAAC;AAElD,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,KAAI;gBACrC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjC,gBAAA,IAAI,EAAE,EAAE;AACN,oBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;AAC7B,oBAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AACpB,oBAAA,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AACrB,iBAAA;AACH,aAAC,CAAC,CAAC;AAEH,YAAA,YAAY,CAAC,eAAe,CAAC,0BAA0B,CAAC,GAAG,aAAa,CAAC;AAEzE,YAAA,YAAY,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC5E,YAAA,YAAY,CAAC,eAAe,CAAC,YAAY,EAAE;AACzC,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,MAAK;oBACb,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,wBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;AACzB,qBAAA;iBACF;AACF,aAAA,CAAC,CAAC;SACJ,CAAA,CAAA;AAAA,KAAA;IAEO,YAAY,GAAA;AAElB,QAAA,MAAM,QAAQ,GAAG;AACf,YAAA,OAAO,EAAE,CAAA,wBAAA,EAA2B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAQ,MAAA,CAAA;SACzF,CAAC;AAEF,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,QAAQ,CAAC,CAAC;KACxE;AAEO,IAAA,UAAU,CAAE,EAAE,EAAA;AACpB,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QAEhE,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AAC9B,SAAA;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,0BAA0B,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE/E,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC;AAEhD,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;KACjE;AAEO,IAAA,MAAM,CAAC,EAAE,EAAA;AACf,QAAA,IAAI,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE;AACtB,YAAA,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC;AAC3C,gBAAA,OAAO,EAAE,CAAC;YAEZ,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;AACnC,SAAA;KACF;AACF;;ACtHD;;AAEG;;;;"}
|
|
@@ -366,16 +366,17 @@ class FsHtmlEditorComponent {
|
|
|
366
366
|
});
|
|
367
367
|
}
|
|
368
368
|
_initPlugins(config) {
|
|
369
|
+
(config.prependToolbarTextButtons || [])
|
|
370
|
+
.forEach((button) => {
|
|
371
|
+
this._defineButton(button);
|
|
372
|
+
});
|
|
369
373
|
(config.plugins || []).forEach((plugin) => {
|
|
370
374
|
this._fr.FroalaEditor.PLUGINS[plugin.config.name] = function (editor) {
|
|
371
375
|
plugin.editor = editor;
|
|
372
376
|
plugin.initialize();
|
|
373
377
|
return plugin;
|
|
374
378
|
};
|
|
375
|
-
([
|
|
376
|
-
...(plugin.config.buttons || []),
|
|
377
|
-
...(config.prependToolbarTextButtons || []),
|
|
378
|
-
])
|
|
379
|
+
(plugin.config.buttons || [])
|
|
379
380
|
.forEach((button) => {
|
|
380
381
|
this._defineButton(button);
|
|
381
382
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firestitch-html-editor.mjs","sources":["../../src/app/modules/html-renderer/components/html-renderer/html-renderer.component.ts","../../src/app/modules/html-renderer/components/html-renderer/html-renderer.component.html","../../src/app/modules/html-renderer/fs-html-renderer.module.ts","../../src/app/modules/html-editor/injects/config.inject.ts","../../src/app/modules/html-editor/services/froala-loader.service.ts","../../src/app/modules/html-editor/consts/paragraph-buttons.const.ts","../../src/app/modules/html-editor/consts/rich-buttons.const.ts","../../src/app/modules/html-editor/consts/text-buttons.const.ts","../../src/app/modules/html-editor/components/html-editor/html-editor.component.ts","../../src/app/modules/html-editor/components/html-editor/html-editor.component.html","../../src/app/modules/html-editor/fs-html-editor.module.ts","../../src/app/modules/html-editor/classes/plugin.ts","../../src/app/modules/html-editor/plugins/checklist.plugin.ts","../../src/app/modules/html-editor/plugins/code.plugin.ts","../../src/app/modules/html-editor/plugins/mention.plugin.ts","../../src/app/modules/html-editor/plugins/realtime.plugin.ts","../../src/app/modules/html-editor/plugins/screen-record.plugin.ts","../../src/firestitch-html-editor.ts"],"sourcesContent":["import { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ChangeDetectionStrategy, Component, Input, ChangeDetectorRef } from '@angular/core';\n\n\n@Component({\n selector: 'fs-html-renderer',\n templateUrl: 'html-renderer.component.html',\n styleUrls: ['html-renderer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsHtmlRendererComponent {\n\n @Input('html') public set setHtml(html) {\n this.trustedHtml = this.sanitized.bypassSecurityTrustHtml(html || '');\n this._cdRef.markForCheck();\n }\n\n public trustedHtml: SafeHtml;\n\n public constructor(\n private sanitized: DomSanitizer,\n private _cdRef: ChangeDetectorRef,\n ) { }\n\n}\n","<span class=\"fr-view fs-html-editor-default\" [innerHtml]=\"trustedHtml\"></span>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FsHtmlRendererComponent } from './components/html-renderer/html-renderer.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ],\n exports: [\n FsHtmlRendererComponent,\n ],\n declarations: [\n FsHtmlRendererComponent,\n ],\n})\nexport class FsHtmlRendererModule {\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const FS_HTML_EDITOR_DEFAULT_CONFIG = new InjectionToken<any[]>('fs-html-editor.default-config');\nexport const FS_HTML_EDITOR_CONFIG = new InjectionToken<any[]>('fs-html-editor.config');\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, Optional } from '@angular/core';\n\nimport { fsSourceLoader } from '@firestitch/common';\n\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\nimport { concatMap, map, shareReplay, tap } from 'rxjs/operators';\n\nimport { FS_HTML_EDITOR_CONFIG } from '../injects/config.inject';\nimport { FsHtmlEditorConfig } from '../interfaces/html-editor-config';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FsFroalaLoaderService {\n\n private _froalaEditor: any;\n\n private _froalaLoaded = new BehaviorSubject(false);\n private _froalaPluginsLoaded = new BehaviorSubject(false);\n private _sourceLoader = fsSourceLoader;\n\n private _loaded$ = combineLatest([this._froalaLoaded, this._froalaPluginsLoaded])\n .pipe(\n map(([FroalaReady, pluginsRead]) => {\n return pluginsRead && FroalaReady;\n }),\n shareReplay(1),\n );\n\n constructor(\n @Optional()\n @Inject(FS_HTML_EDITOR_CONFIG)\n private _defaultConfig: FsHtmlEditorConfig,\n @Inject(DOCUMENT)\n private _document: Document,\n ) {\n this._sourceLoader.setDocument(this._document);\n this._load();\n }\n\n public get loaded$(): Observable<boolean> {\n return this._loaded$;\n }\n\n public get FroalaEditor(): any {\n return this._froalaEditor;\n }\n\n private _load() {\n const baseDir = '/assets/froala/';\n this._sourceLoader.registerResources({\n froala: [\n `${baseDir}js/froala_editor.min.js`,\n `${baseDir}css/froala_editor.pkgd.min.css`,\n ],\n froala_align: `${baseDir}js/plugins/align.min.js`,\n froala_colors: `${baseDir}js/plugins/colors.min.js`,\n froala_image: `${baseDir}js/plugins/image.min.js`,\n froala_link: `${baseDir}js/plugins/link.min.js`,\n froala_lists: `${baseDir}js/plugins/lists.min.js`,\n froala_paragraph_format: `${baseDir}js/plugins/paragraph_format.min.js`,\n froala_table: `${baseDir}js/plugins/table.min.js`,\n froala_url: `${baseDir}js/plugins/url.min.js`,\n froala_video: `${baseDir}js/plugins/video.min.js`,\n froala_quote: `${baseDir}js/plugins/quote.min.js`,\n froala_draggable: `${baseDir}js/plugins/draggable.min.js`,\n froala_font_size: `${baseDir}js/plugins/font_size.min.js`,\n froala_quick_insert: `${baseDir}js/plugins/quick_insert.min.js`,\n froala_line_height: `${baseDir}js/plugins/line_height.min.js`,\n });\n\n this._sourceLoader.loadResource('froala')\n .pipe(\n tap(() => {\n this._froalaEditor = (window as any).FroalaEditor;\n this._froalaDone();\n }),\n concatMap(() => {\n return this._loadPlugins();\n }),\n tap(() => {\n this._froalaPluginsDone();\n }),\n )\n .subscribe();\n }\n\n private _loadPlugins(): Observable<unknown> {\n const resources = this._defaultConfig\n .froalaPlugins\n .map((pluginName) => `froala_${pluginName}`);\n\n return this._sourceLoader.loadResources(resources);\n }\n\n private _froalaDone() {\n this._froalaLoaded.next(true);\n }\n\n private _froalaPluginsDone() {\n this._froalaPluginsLoaded.next(true);\n }\n}\n","export const ParagraphButtons = [\n 'align',\n 'formatOL',\n 'formatUL',\n 'checklist',\n 'indent',\n 'outdent',\n 'lineHeight'\n];\n","export const RichButtons = [\n 'insertTable',\n 'insertImage',\n 'insertLink',\n 'insertVideo',\n];\n","export const TextButtons = [\n 'paragraphFormat',\n 'bold',\n 'italic',\n 'underline',\n 'strikeThrough',\n 'subscript',\n 'superscript',\n 'fontFamily',\n 'fontSize',\n 'textColor',\n 'backgroundColor',\n 'inlineClass',\n 'inlineStyle',\n 'clearFormatting',\n 'quote',\n 'code',\n];\n","import { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n forwardRef,\n HostBinding,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n ViewChild,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlContainer,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgForm,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\n\nimport { guid } from '@firestitch/common';\nimport { FileProcessor, FsFile, FsFileProcessConfig } from '@firestitch/file';\n\nimport { BehaviorSubject, fromEventPattern, Observable, ReplaySubject, Subject } from 'rxjs';\nimport {\n distinctUntilChanged, filter, map, skip, startWith, switchMap, takeUntil, tap,\n} from 'rxjs/operators';\n\nimport { merge } from 'lodash-es';\n\nimport { FS_HTML_EDITOR_CONFIG } from '../../injects/config.inject';\nimport { ToolbarButton } from '../../interfaces';\nimport { FsHtmlEditorConfig } from '../../interfaces/html-editor-config';\nimport { FsFroalaLoaderService } from '../../services/froala-loader.service';\n\nimport { Plugin } from './../../classes/plugin';\nimport { ParagraphButtons } from './../../consts/paragraph-buttons.const';\nimport { RichButtons } from './../../consts/rich-buttons.const';\nimport { TextButtons } from './../../consts/text-buttons.const';\n\n\n@Component({\n selector: 'fs-html-editor',\n templateUrl: './html-editor.component.html',\n styleUrls: ['./html-editor.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FsHtmlEditorComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => FsHtmlEditorComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [\n {\n provide: ControlContainer,\n deps: [[Optional, NgForm]],\n useFactory: (ngForm: NgForm) => ngForm,\n },\n ],\n})\nexport class FsHtmlEditorComponent \nimplements OnInit, AfterViewInit, ControlValueAccessor, Validator, OnDestroy {\n\n @HostBinding('class.focused') public classFocused = false;\n\n @ViewChild('elRef') public elRef: ElementRef;\n\n @Input() public config: FsHtmlEditorConfig = {};\n @Input() public hint: string;\n\n @Input()\n @HostBinding('class.disabled')\n public disabled = false;\n\n public initialized = false;\n public readonly containerID = `fs-html-editor-${guid('xxx')}`;\n public onTouched: () => void;\n public onChange: (data: any) => void;\n\n private _editor: any;\n private _html: string;\n private _initialize$ = new ReplaySubject();\n private _froalaReady$ = new BehaviorSubject(null);\n private _window: any = this._document.defaultView;\n private _destroy$ = new Subject();\n\n constructor(\n @Optional()\n @Inject(FS_HTML_EDITOR_CONFIG)\n private _defaultConfig,\n @Inject(DOCUMENT)\n private _document: Document,\n private _cdRef: ChangeDetectorRef,\n private _fr: FsFroalaLoaderService,\n ) { }\n\n public get el(): any {\n return this.elRef.nativeElement;\n }\n\n public get html(): string {\n return this._html;\n }\n\n public get editor(): any {\n return this._editor;\n }\n\n public get froalaLoaded$(): Observable<boolean> {\n return this._fr.loaded$;\n }\n\n public ngOnInit(): void {\n this.config = this.config || {};\n this.config.autofocus = this.config.autofocus && (!this.config.disabled || !this.disabled);\n }\n\n public ngAfterViewInit() {\n this._listenLazyInit();\n this._initialize$.next();\n }\n\n public hasContent() {\n const el = document.createElement('div');\n\n if (el.querySelector('img')) {\n return true;\n }\n\n el.innerHTML = this._html;\n\n return !!el.innerText.length;\n }\n\n public initialize(options: any = {}) {\n const config = this._createConfig();\n this._initPlugins(config);\n this._initButtons(config);\n this._editor = new this._fr.FroalaEditor(this.el, this._createOptions(), () => {\n this._froalaReady$.next({ config, options });\n });\n }\n\n public updateSize() {\n // Hack: To trigger the toolbar button size modes\n window.dispatchEvent(new Event('resize'));\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const err: any = {};\n if (this.config.maxLength && this._html) {\n const maxLength = this.config.maxLength;\n const length = this._html.length;\n if (length > maxLength) {\n err.maxLengthError = `Must be ${maxLength} characters or fewer. You entered ${length} characters.`;\n }\n }\n\n return Object.keys(err).length ? err : null;\n }\n\n public focus(options?: { cursorPosition?: 'start' | 'end' }) {\n options = options ? options : {};\n\n if (options.cursorPosition === 'end') {\n this.editor.selection.setAtEnd(this.editor.$el.get(0));\n } else {\n this.editor.selection.setAtStart(this.editor.$el.get(0));\n }\n\n this.editor.selection.restore();\n\n const elSelection = this.editor.selection.element();\n if (elSelection) {\n elSelection.scrollIntoView({ block: 'center' });\n }\n }\n\n public clear() {\n this.writeValue('');\n }\n\n public disable() {\n this.disabled = true;\n }\n\n public setHtml(html) {\n this.writeValue(html);\n }\n\n public writeValue(html: string): void {\n this._html = html || '';\n\n if (Array.isArray(this._html)) {\n this._html = this._html.pop();\n }\n\n this._html = this._html\n .replace(/<(li)>\\s?<(div)>/g, '<li>')\n .replace(/<\\/(div)><\\/(li)>/g, '</li>');\n\n if (this.editor && this.editor.html) {\n try {\n this.editor.html.set(this._html);\n } catch (e) {\n //\n }\n }\n\n this._cdRef.markForCheck();\n }\n\n public registerOnChange(fn: (data: any) => void): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public ngOnDestroy() {\n this._initialize$.complete();\n this._destroy$.next();\n this._destroy$.complete();\n this.destroy();\n }\n\n public destroy() {\n if (this.editor) {\n this.editor.destroy();\n }\n\n this.initialized = false;\n this._cdRef.markForCheck();\n this.el.innerHTML = '';\n }\n\n private _processImageUpload(blob) {\n const processor = new FileProcessor();\n const file = new FsFile(blob);\n\n const config: FsFileProcessConfig = {\n orientate: true,\n quality: this.config.image.quality,\n format: this.config.image.format as any,\n maxWidth: this.config.image.width,\n maxHeight: this.config.image.height,\n minWidth: this.config.image.minWidth,\n minHeight: this.config.image.minHeight,\n };\n\n return processor.processFile(file, config)\n .pipe(\n switchMap((fsFile: FsFile) => {\n return this.config.image.upload(fsFile.file);\n }),\n );\n }\n\n private _createConfig(): FsHtmlEditorConfig {\n return merge({ froalaConfig: {} }, this._defaultConfig, this.config);\n }\n\n private _change(html): void {\n this._html = html;\n this.onChange(html);\n }\n\n private _initButtons(config: FsHtmlEditorConfig) {\n (config.buttons || [])\n .forEach((button) => {\n /*\n Svg Keys:\n [\"add\", \"advancedImageEditor\", \"alignCenter\", \"alignJustify\", \"alignLeft\", \"alignRight\",\n \"anchors\", \"back\", \"backgroundColor\", \"blockquote\", \"bold\", \"cellBackground\",\n \"cellBorderColor\", \"cellOptions\", \"cellStyle\", \"clearFormatting\", \"close\", \"codeView\",\n \"cogs\", \"columns\", \"editLink\", \"exitFullscreen\", \"fontAwesome\", \"fontFamily\",\n \"fontSize\", \"fullscreen\", \"help\", \"horizontalLine\", \"imageAltText\", \"imageCaption\",\n \"imageClass\", \"imageDisplay\", \"imageManager\", \"imageSize\", \"indent\", \"inlineClass\",\n \"inlineStyle\", \"insertEmbed\", \"insertFile\", \"insertImage\", \"insertLink\", \"insertMore\",\n \"insertTable\", \"insertVideo\", \"upload\", \"italic\", \"search\", \"lineHeight\", \"linkStyles\",\n \"mention\", \"more\", \"openLink\", \"orderedList\", \"outdent\", \"pageBreaker\",\n \"paragraphFormat\", \"paragraphMore\", \"paragraphStyle\", \"pdfExport\", \"print\",\n \"redo\", \"removeTable\", \"remove\", \"replaceImage\", \"row\", \"selectAll\", \"smile\",\n \"spellcheck\", \"star\", \"strikeThrough\", \"subscript\", \"superscript\", \"symbols\", \"tags\",\n \"tableHeader\", \"tableStyle\", \"textColor\", \"textMore\", \"underline\", \"undo\", \"unlink\",\n \"unorderedList\", \"verticalAlignBottom\", \"verticalAlignMiddle\", \"verticalAlignTop\"]\n */\n\n if (button.svgKey) {\n this._fr.FroalaEditor.DefineIcon(button.name, { SVG_KEY: button.svgKey });\n }\n\n this._fr.FroalaEditor.RegisterCommand(button.name, {\n title: button.title,\n focus: button.focus ?? true,\n undo: button.undo ?? true,\n refreshAfterCallback: button.refreshAfterCallback ?? true,\n callback() {\n button.click(this);\n },\n });\n });\n }\n\n private _initPlugins(config: FsHtmlEditorConfig) {\n (config.plugins || []).forEach((plugin: Plugin) => {\n this._fr.FroalaEditor.PLUGINS[plugin.config.name] = function (editor) {\n plugin.editor = editor;\n plugin.initialize();\n\n return plugin;\n };\n\n ([\n ...(plugin.config.buttons || []),\n ...(config.prependToolbarTextButtons || []),\n ])\n .forEach((button: ToolbarButton) => {\n this._defineButton(button);\n });\n });\n }\n\n private _defineButton(button: ToolbarButton) {\n if(button.html) {\n this._fr.FroalaEditor\n .DefineIconTemplate(`${button.name}-template`, button.html);\n this._fr.FroalaEditor\n .DefineIcon(button.name, { \n NAME: `${button.name}-icon`,\n template: `${button.name}-template`, \n });\n \n } else { \n this._fr.FroalaEditor.DefineIcon(button.name, {\n NAME: button.name,\n PATH: button.svgPath,\n });\n } \n\n this._fr.FroalaEditor.RegisterCommand(button.name, {\n icon: button.name,\n title: button.tooltip,\n undo: button.undo,\n focus: button.focus,\n showOnMobile: button.showOnMobile,\n refreshAfterCallback: button.refreshAfterCallback,\n callback() {\n if (button.click) {\n button.click(this);\n }\n },\n refresh(event) {\n if (event.refresh) {\n event.refresh(this, event);\n }\n },\n });\n\n }\n\n private _createOptions() {\n const config = this._createConfig();\n\n const textButtons = [\n ...(config.prependToolbarTextButtons || [])\n .map((item) => item.name),\n ...TextButtons,\n ];\n\n return merge(\n // For some reason editor store somewhere pointer on default config object and dublicate options each time on init\n // Extra merge level fixed this problem and allow to init config properly without legacy data\n {},\n {\n shortcutsEnabled: ['show', 'bold', 'italic', 'underline', 'indent', 'outdent', 'undo', 'redo', 'insertImage', 'createLink'],\n key: config.activationKey,\n placeholderText: config.placeholder,\n linkAlwaysBlank: true,\n tabSpaces: 2,\n typingTimer: 250,\n tooltips: false,\n wordPasteModal: false,\n imageDefaultWidth: 0,\n imageDefaultAlign: 'left',\n quickInsertEnabled: false,\n scrollableContainer: `#${this.containerID}`,\n paragraphDefaultSelection: 'Format',\n videoUpload: false,\n imagePaste: !!config.image?.upload,\n imageUpload: !!config.image?.upload,\n paragraphFormat: {\n N: 'Normal',\n H1: 'Heading 1',\n H2: 'Heading 2',\n H3: 'Heading 3',\n H4: 'Heading 4',\n BLOCKQUOTE: 'Quote',\n },\n lineHeights: {\n Default: '',\n 0.5: '0.5',\n Single: '1',\n 1.15: '1.15',\n 1.5: '1.5',\n Double: '2',\n },\n paragraphFormatSelection: true,\n toolbarButtonsXS: {\n moreText: {\n buttons: textButtons,\n buttonsVisible: 1,\n },\n moreParagraph: {\n buttons: ParagraphButtons,\n buttonsVisible: 2,\n },\n moreRich: {\n buttons: RichButtons,\n buttonsVisible: 0,\n },\n },\n toolbarButtons: {\n moreText: {\n buttons: textButtons,\n buttonsVisible: 3,\n },\n moreParagraph: {\n buttons: ParagraphButtons,\n buttonsVisible: 5,\n },\n moreRich: {\n buttons: RichButtons,\n buttonsVisible: 3,\n },\n },\n },\n config.froalaConfig,\n );\n }\n\n private _listenLazyInit() {\n\n this.froalaLoaded$\n .pipe(\n filter((ready) => ready),\n switchMap(() => this._initialize$),\n tap(() => {\n const selection: any = window.getSelection();\n const options: any = {};\n if (selection.baseNode) {\n options.selection = {\n node: selection.baseNode.nodeValue,\n offset: selection.baseOffset,\n };\n }\n this.initialize(options);\n }),\n switchMap(() => this._froalaReady$),\n filter((data) => !!data),\n tap(({ config, options }) => {\n this._setupFroala(config, options);\n }),\n )\n .subscribe();\n }\n\n private _contentChanged(): void {\n const editorHTML = this._editor.html.get();\n\n if (this.html !== editorHTML) {\n this._change(editorHTML);\n }\n }\n\n private _setupFroala(config: FsHtmlEditorConfig, options: any): void {\n this._cdRef.markForCheck();\n\n this.setHtml(this._html);\n\n if (config.disabled) {\n this.disable();\n }\n\n if (config.froalaConfig.events) {\n if (config.froalaConfig.events.initialized) {\n config.froalaConfig.events.initialized();\n }\n }\n\n this._editor.events.on('focus', () => {\n this.classFocused = true;\n this._cdRef.markForCheck();\n });\n\n this._editor.events.on('blur', () => {\n this.classFocused = false;\n this._cdRef.markForCheck();\n });\n\n this._editor.events.on('click', () => {\n if (this.config.initOnClick && !this.initialized) {\n this.initialized = true;\n this._cdRef.markForCheck();\n }\n });\n\n fromEventPattern(\n (handler) => {\n this._editor.events.on('contentChanged', handler);\n },\n () => {\n //\n },\n )\n .pipe(\n startWith(this._html),\n map(() => this.editor.html.get()),\n distinctUntilChanged(),\n skip(1),\n )\n .subscribe(() => {\n this._contentChanged();\n });\n\n this._editor.events.on('paste.afterCleanup', (html) => {\n const div = document.createElement('div');\n div.innerHTML = html;\n div.querySelectorAll('*')\n .forEach((el) => {\n for (let i = 0; i < el.attributes.length; i++) {\n const name = el.attributes[0].name;\n if (name !== 'href') {\n el.removeAttribute(name);\n }\n }\n });\n\n return div.innerHTML;\n });\n\n this._editor.events.on('keydown', () => {\n this.onTouched();\n });\n\n if (this.config.image && this.config.image.upload) {\n this._editor.events.on('image.beforePasteUpload', (image) => {\n\n fetch(image.getAttribute('src'))\n .then((res) => {\n res.blob()\n .then((blob) => {\n this._processImageUpload(blob)\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((url) => {\n image.setAttribute('src', url);\n image.removeAttribute('data-fr-image-pasted');\n\n this._contentChanged();\n });\n });\n });\n\n return false;\n });\n\n this._editor.events.on('image.beforeUpload', (blobs) => {\n this._processImageUpload(blobs[0])\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((url) => {\n this.editor.image.insert(url, null, null, this.editor.image.get());\n });\n\n return false;\n });\n }\n\n if (this.el.querySelector('.fr-second-toolbar')) {\n this.el.querySelector('.fr-second-toolbar').remove();\n }\n\n if (this.config.autofocus && !this.config.initOnClick) {\n this.focus();\n }\n }\n}\n","<fs-label-field>\n <fs-label *ngIf=\"config.label\">{{config.label}}</fs-label>\n <div\n class=\"html-editor-container fs-html-editor-default\"\n [id]=\"containerID\"\n [ngClass]=\"{\n initialized: initialized,\n 'init-on-click': config.initOnClick\n }\">\n <ng-container *fsSkeleton=\"(froalaLoaded$ | async) !== false\"></ng-container>\n <div #elRef></div>\n\n <div class=\"bottom-line\"></div>\n <div class=\"disabled-line\"></div>\n </div>\n\n <fs-label-message>\n <div class=\"fs-form-message\">\n <div class=\"fs-form-hint\">{{hint}}</div>\n </div>\n </fs-label-message>\n</fs-label-field>\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\n\nimport { FsHtmlRendererModule } from '../html-renderer/fs-html-renderer.module';\n\nimport { FsHtmlEditorComponent } from './components/html-editor/html-editor.component';\nimport { FroalaPlugin } from './enums/default-plugin.enum';\nimport { FS_HTML_EDITOR_CONFIG, FS_HTML_EDITOR_DEFAULT_CONFIG } from './injects/config.inject';\nimport { FsHtmlEditorConfig } from './interfaces/html-editor-config';\n\n\n@NgModule({\n imports: [\n CommonModule,\n\n FsSkeletonModule,\n FsLabelModule,\n FsHtmlRendererModule,\n ],\n exports: [\n FsHtmlEditorComponent,\n ],\n declarations: [\n FsHtmlEditorComponent,\n ],\n})\nexport class FsHtmlEditorModule {\n public static forRoot(config: FsHtmlEditorConfig = {}): ModuleWithProviders<FsHtmlEditorModule> {\n return {\n ngModule: FsHtmlEditorModule,\n providers: [\n { provide: FS_HTML_EDITOR_DEFAULT_CONFIG, useValue: config },\n {\n provide: FS_HTML_EDITOR_CONFIG,\n useFactory: FsHtmlEditorConfigFactory,\n deps: [FS_HTML_EDITOR_DEFAULT_CONFIG],\n },\n ],\n };\n }\n}\n\nexport function FsHtmlEditorConfigFactory(config: FsHtmlEditorConfig) {\n return {\n froalaPlugins: [\n FroalaPlugin.Align,\n FroalaPlugin.Colors,\n FroalaPlugin.Image,\n FroalaPlugin.Link,\n FroalaPlugin.Lists,\n FroalaPlugin.ParagraphFormat,\n FroalaPlugin.Quote,\n FroalaPlugin.Table,\n FroalaPlugin.Url,\n FroalaPlugin.Video,\n FroalaPlugin.Draggable,\n FroalaPlugin.FontSize,\n FroalaPlugin.LineHeight,\n ],\n ...config,\n };\n}\n","// import { FroalaEditor } from 'froala-editor';\nimport { PluginConfig } from './../interfaces/plugin-config';\n\nexport class Plugin {\n\n public config: PluginConfig;\n public editor: any;\n\n public initialize() {}\n public destroy() {}\n\n}\n","import { Plugin } from '../classes/plugin';\n\nimport { PluginConfig } from './../interfaces/plugin-config';\n\n\nexport class ChecklistPlugin extends Plugin {\n\n public constructor(public config: PluginConfig = { name: 'checklist' }) {\n super();\n this.config = {\n ...config,\n name: 'checklist',\n buttons: [\n {\n name: 'checklist',\n svgPath: 'M8.4,10.3l-1.2,1.2l4,4L20,6.7l-1.2-1.2l-7.6,7.6L8.4,10.3z M18.2,18.2H5.8V5.8h8.9V4H5.8C4.8,4,4,4.8,4,5.8v12.4c0,1,0.8,1.8,1.8,1.8h12.4c1,0,1.8-0.8,1.8-1.8v-7.1h-1.8V18.2z',\n click: (editor) => {\n editor.html.insert('<ul class=\"checklist\"><li></li></ul>');\n }\n }\n ]\n };\n }\n\n public initialize() {\n this.editor.events.on('click', (e) => {\n const li = e.target;\n if (li.nodeName === 'LI' && e.offsetX < 0) {\n\n const items = [li, ...li.querySelectorAll('li')];\n\n if (li.classList.contains('checked')) {\n items.forEach((item) => {\n item.classList.remove('checked');\n });\n } else {\n items.forEach((item) => {\n item.classList.add('checked');\n });\n }\n }\n\n }, false);\n }\n\n}\n","import { Plugin } from '../classes/plugin';\n\nimport { PluginConfig } from './../interfaces/plugin-config';\n\n\nexport class CodePlugin extends Plugin {\n\n public constructor(public config: PluginConfig = { name: 'code' }) {\n super();\n this.config = {\n ...config,\n name: 'code',\n buttons: [\n {\n name: 'code',\n svgPath: 'M8.9,7.3L4.2,12l4.7,4.7l1.1-1.1L6.4,12L10,8.4L8.9,7.3z M15.1,7.3L14,8.4l3.6,3.6L14,15.6l1.1,1.1l4.7-4.7L15.1,7.3z',\n click: (editor) => {\n const node = editor.selection.get();\n const codeEl = this._getCodeEl(node.baseNode);\n if (codeEl) {\n codeEl.classList.remove('code');\n } else {\n editor.html.insert('<p class=\"code\">' + editor.selection.get().toString().replace(/\\n{1,}/g,'<br>') + '</p>');\n }\n }\n }\n ]\n };\n }\n\n public initialize() {\n this.editor.events.on('keydown', (e) => {\n if (e.keyCode === 13) {\n const selection = this.editor.selection.get();\n\n if (selection && this._getCodeEl(selection.baseNode)) {\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n let br = '<br>';\n const base = selection.baseNode;\n if (base.nodeName === '#text' && selection.baseOffset === base.length) {\n\n if (!(base.nextSibling && base.nextSibling.nodeName === 'BR')) {\n br += '<br>';\n }\n } else {\n const el: any = Array.from(base.childNodes).splice(selection.baseOffset - 1, 1).pop();\n if (el && el.nodeName !== 'BR') {\n br += '<br>';\n }\n }\n\n this.editor.html.insert(br);\n return false;\n }\n }\n }, true);\n }\n\n public destroy() {}\n\n private _getCodeEl(el) {\n\n if (el) {\n if (el.classList && el.classList.contains('code')) {\n return el;\n }\n\n if (el.parentElement) {\n return this._getCodeEl(el.parentElement);\n }\n }\n\n return null;\n }\n}\n","import { debounce } from 'lodash-es';\nimport Tribute, { TributeItem } from 'tributejs';\n\nimport { MentionPluginConfig } from './configs/mention-plugin.config';\n\nimport { Plugin } from '../classes/plugin';\n\nimport { guid } from '@firestitch/common';\n\n\nexport class MentionPlugin extends Plugin {\n\n private static _currentGuid = null;\n private static _tributes = [];\n private _tribute;\n private _guid = guid();\n\n public constructor(public config: MentionPluginConfig) {\n super();\n this.config = {\n ...config,\n buttons: [\n {\n name: config.name,\n tooltip: config.tooltip,\n svgPath: config.iconPath,\n click: (editor) => {\n this._closeAll();\n this._tribute.showMenuForCollection(editor.el);\n }\n }\n ]\n };\n\n this._tribute = new Tribute({\n values: debounce(this._loadValues.bind(this), 200),\n searchOpts: {\n pre: '',\n post: '',\n skip: true\n },\n containerClass: `fs-html-editor-mention-container ${this.config.containerClass || ''}`,\n itemClass: `fs-html-editor-mention-menu-item ${this.config.menuItemClass || ''}`,\n trigger: this.config.trigger,\n allowSpaces: true,\n menuItemTemplate: (item: TributeItem<any>) => {\n return this.config.menuItemTemplate(item.original);\n },\n selectTemplate: (item: TributeItem<any>) => {\n const template = this.config.selectedTemplate(item.original);\n\n let p = document.createElement('p');\n p.innerHTML = template;\n\n let node = p.firstElementChild;\n if (!node) {\n node = document.createElement('span');\n node.innerHTML = template;\n }\n\n node.setAttribute('contenteditable', 'false');\n node.classList.add('fr-deletable');\n\n return node.outerHTML;\n },\n });\n\n MentionPlugin._tributes.push(this._tribute);\n }\n\n public initialize() {\n this._tribute.attach(this.editor.el);\n this.editor.events.on('keydown', (e) => {\n if (e.key === 'Enter' && this._tribute.isActive) {\n return false;\n }\n }, true);\n\n \n this.editor.el.addEventListener(\"tribute-replaced\", this.selected);\n }\n\n public selected = (event) => {\n if(this.config.selected) {\n if(MentionPlugin._currentGuid === this._guid) {\n this.config.selected(event.detail.item.original);\n }\n }\n }\n\n public destroy() {\n this.editor.el.removeEventListener(\"tribute-replaced\", this.selected);\n }\n\n private _closeAll() {\n MentionPlugin._tributes.forEach((tribute) => {\n if (tribute.menu) {\n tribute.hideMenu();\n }\n });\n }\n\n private _loadValues(keyword, cb) {\n MentionPlugin._currentGuid = this._guid;\n return this.config.fetch(keyword)\n .subscribe((data) => {\n cb(data);\n });\n }\n}\n","import { PluginConfig } from '../interfaces/plugin-config';\n\nimport { Plugin } from '../classes/plugin';\n\n\nexport class RealtimePlugin extends Plugin {\n\n public constructor(public config: PluginConfig = { name: 'realtime' }) {\n super();\n this.config = {\n ...config,\n name: 'realtime',\n };\n }\n\n public initialize() {\n\n this.editor.events.on('click', (e) => {\n\n }, false);\n }\n}\n","import { ScreenRecordPluginConfig } from './configs/screen-record-plugin.config';\nimport { Plugin } from '../classes/plugin';\n\n\ndeclare var MediaRecorder: any;\n\nexport class ScreenRecordPlugin extends Plugin {\n\n private _activeEl;\n\n public constructor(public config: ScreenRecordPluginConfig = {}) {\n super();\n\n this.config = {\n ...config,\n name: config.name || 'screenRecord',\n buttons: [\n {\n name: 'screenRecord',\n svgPath: `M14.7,7.7v6.1H7.1V7.7H14.7 M16.3,9.6V6.9c0-0.4-0.3-0.8-0.8-0.8H6.4c-0.4,0-0.8,0.3-0.8,0.8v7.6c0,0.4,0.3,0.8,0.8,0.8h9.1c0.4,0,0.8-0.3,0.8-0.8v-2.7l1.7,1.7c0.3,0.3,0.8,0.3,1.1,0c0.1-0.1,0.2-0.3,0.2-0.5V8.4c0-0.4-0.3-0.8-0.8-0.8\n\tc-0.2,0-0.4,0.1-0.5,0.2L16.3,9.6z M21.5,1.6H2.9c-0.7,0-1.3,0.7-1.3,1.6v14.6c0,0.9,0.6,1.6,1.3,1.6h7.6v1.1l-5,1c-0.2,0-0.4,0.3-0.4,0.6c0,0.3,0.2,0.4,0.4,0.4c0,0,0,0,0.1,0l5.3-1h2.6l5.3,1c0,0,0,0,0.1,0c0.2,0,0.4-0.2,0.4-0.4\n c0-0.3-0.1-0.6-0.4-0.6l-5-1v-1.1h7.6c0.7,0,1.3-0.7,1.3-1.6V3.2C22.9,2.3,22.3,1.6,21.5,1.6z M21.1,17.3H3.3V3.7h17.8L21.1,17.3L21.1,17.3z`,\n tooltip: 'Screen Record',\n click: (editor) => {\n\n (<any>navigator).mediaDevices.getDisplayMedia({ video: true })\n .then((stream) => {\n const chunks = [];\n const options = { mimeType: 'video/webm; codecs=vp9' };\n let mediaRecorder = new MediaRecorder(stream, options);\n\n stream.addEventListener('inactive', (e) => {\n mediaRecorder.stop();\n mediaRecorder = null;\n stream.getTracks().forEach((track) => track.stop());\n stream = null;\n\n const blob = new Blob(chunks, { type: 'video/webm' });\n config.upload(blob)\n .subscribe((url) => {\n editor.html.insert(`<span class=\"fr-screen-record fr-deletable fr-draggable\"><video controls style=\"max-width:${config.maxWidth}\"><source src=\"${url}\" type=\"video/webm\"></video></span>`);\n });\n });\n\n mediaRecorder.addEventListener('dataavailable', (event) => {\n if (event.data && event.data.size > 0) {\n chunks.push(event.data);\n }\n });\n\n mediaRecorder.start(10);\n })\n .catch((e) => { });\n }\n }\n ]\n };\n }\n\n public async initialize() {\n const FroalaEditor = (window as any).FroalaEditor;\n\n this.editor.events.on('mouseup', (e) => {\n const el = this._getEl(e.target);\n\n if (el) {\n this.editor.popups.hideAll();\n this._activeEl = el;\n this._showPopup(el);\n }\n });\n\n FroalaEditor.POPUP_TEMPLATES[\"screenRecordPlugin.popup\"] = '[_BUTTONS_]';\n\n FroalaEditor.DefineIcon('popupClose', { NAME: 'trash', SVG_KEY: 'remove' });\n FroalaEditor.RegisterCommand('popupClose', {\n title: 'Remove',\n undo: false,\n focus: false,\n callback: () => {\n if (this._activeEl) {\n this._activeEl.remove();\n }\n }\n });\n }\n\n private _createPopup() {\n\n const template = {\n buttons: `<div class=\"fr-buttons\">${this.editor.button.buildList(['popupClose'])}</div>`,\n };\n\n return this.editor.popups.create('screenRecordPlugin.popup', template);\n }\n\n private _showPopup (el) {\n var $popup = this.editor.popups.get('screenRecordPlugin.popup');\n\n if (!$popup) {\n $popup = this._createPopup();\n }\n\n this.editor.popups.setContainer('screenRecordPlugin.popup', this.editor.$(el));\n\n const left = el.offsetLeft + el.offsetWidth / 2;\n\n this.editor.popups.show('screenRecordPlugin.popup', left, null);\n }\n\n private _getEl(el) {\n if (el && el.classList) {\n if (el.classList.contains('fr-screen-record'))\n return el;\n\n return this._getEl(el.parentNode);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.FsFroalaLoaderService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"firestitch-html-editor.mjs","sources":["../../src/app/modules/html-renderer/components/html-renderer/html-renderer.component.ts","../../src/app/modules/html-renderer/components/html-renderer/html-renderer.component.html","../../src/app/modules/html-renderer/fs-html-renderer.module.ts","../../src/app/modules/html-editor/injects/config.inject.ts","../../src/app/modules/html-editor/services/froala-loader.service.ts","../../src/app/modules/html-editor/consts/paragraph-buttons.const.ts","../../src/app/modules/html-editor/consts/rich-buttons.const.ts","../../src/app/modules/html-editor/consts/text-buttons.const.ts","../../src/app/modules/html-editor/components/html-editor/html-editor.component.ts","../../src/app/modules/html-editor/components/html-editor/html-editor.component.html","../../src/app/modules/html-editor/fs-html-editor.module.ts","../../src/app/modules/html-editor/classes/plugin.ts","../../src/app/modules/html-editor/plugins/checklist.plugin.ts","../../src/app/modules/html-editor/plugins/code.plugin.ts","../../src/app/modules/html-editor/plugins/mention.plugin.ts","../../src/app/modules/html-editor/plugins/realtime.plugin.ts","../../src/app/modules/html-editor/plugins/screen-record.plugin.ts","../../src/firestitch-html-editor.ts"],"sourcesContent":["import { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ChangeDetectionStrategy, Component, Input, ChangeDetectorRef } from '@angular/core';\n\n\n@Component({\n selector: 'fs-html-renderer',\n templateUrl: 'html-renderer.component.html',\n styleUrls: ['html-renderer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsHtmlRendererComponent {\n\n @Input('html') public set setHtml(html) {\n this.trustedHtml = this.sanitized.bypassSecurityTrustHtml(html || '');\n this._cdRef.markForCheck();\n }\n\n public trustedHtml: SafeHtml;\n\n public constructor(\n private sanitized: DomSanitizer,\n private _cdRef: ChangeDetectorRef,\n ) { }\n\n}\n","<span class=\"fr-view fs-html-editor-default\" [innerHtml]=\"trustedHtml\"></span>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FsHtmlRendererComponent } from './components/html-renderer/html-renderer.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ],\n exports: [\n FsHtmlRendererComponent,\n ],\n declarations: [\n FsHtmlRendererComponent,\n ],\n})\nexport class FsHtmlRendererModule {\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const FS_HTML_EDITOR_DEFAULT_CONFIG = new InjectionToken<any[]>('fs-html-editor.default-config');\nexport const FS_HTML_EDITOR_CONFIG = new InjectionToken<any[]>('fs-html-editor.config');\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, Optional } from '@angular/core';\n\nimport { fsSourceLoader } from '@firestitch/common';\n\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\nimport { concatMap, map, shareReplay, tap } from 'rxjs/operators';\n\nimport { FS_HTML_EDITOR_CONFIG } from '../injects/config.inject';\nimport { FsHtmlEditorConfig } from '../interfaces/html-editor-config';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FsFroalaLoaderService {\n\n private _froalaEditor: any;\n\n private _froalaLoaded = new BehaviorSubject(false);\n private _froalaPluginsLoaded = new BehaviorSubject(false);\n private _sourceLoader = fsSourceLoader;\n\n private _loaded$ = combineLatest([this._froalaLoaded, this._froalaPluginsLoaded])\n .pipe(\n map(([FroalaReady, pluginsRead]) => {\n return pluginsRead && FroalaReady;\n }),\n shareReplay(1),\n );\n\n constructor(\n @Optional()\n @Inject(FS_HTML_EDITOR_CONFIG)\n private _defaultConfig: FsHtmlEditorConfig,\n @Inject(DOCUMENT)\n private _document: Document,\n ) {\n this._sourceLoader.setDocument(this._document);\n this._load();\n }\n\n public get loaded$(): Observable<boolean> {\n return this._loaded$;\n }\n\n public get FroalaEditor(): any {\n return this._froalaEditor;\n }\n\n private _load() {\n const baseDir = '/assets/froala/';\n this._sourceLoader.registerResources({\n froala: [\n `${baseDir}js/froala_editor.min.js`,\n `${baseDir}css/froala_editor.pkgd.min.css`,\n ],\n froala_align: `${baseDir}js/plugins/align.min.js`,\n froala_colors: `${baseDir}js/plugins/colors.min.js`,\n froala_image: `${baseDir}js/plugins/image.min.js`,\n froala_link: `${baseDir}js/plugins/link.min.js`,\n froala_lists: `${baseDir}js/plugins/lists.min.js`,\n froala_paragraph_format: `${baseDir}js/plugins/paragraph_format.min.js`,\n froala_table: `${baseDir}js/plugins/table.min.js`,\n froala_url: `${baseDir}js/plugins/url.min.js`,\n froala_video: `${baseDir}js/plugins/video.min.js`,\n froala_quote: `${baseDir}js/plugins/quote.min.js`,\n froala_draggable: `${baseDir}js/plugins/draggable.min.js`,\n froala_font_size: `${baseDir}js/plugins/font_size.min.js`,\n froala_quick_insert: `${baseDir}js/plugins/quick_insert.min.js`,\n froala_line_height: `${baseDir}js/plugins/line_height.min.js`,\n });\n\n this._sourceLoader.loadResource('froala')\n .pipe(\n tap(() => {\n this._froalaEditor = (window as any).FroalaEditor;\n this._froalaDone();\n }),\n concatMap(() => {\n return this._loadPlugins();\n }),\n tap(() => {\n this._froalaPluginsDone();\n }),\n )\n .subscribe();\n }\n\n private _loadPlugins(): Observable<unknown> {\n const resources = this._defaultConfig\n .froalaPlugins\n .map((pluginName) => `froala_${pluginName}`);\n\n return this._sourceLoader.loadResources(resources);\n }\n\n private _froalaDone() {\n this._froalaLoaded.next(true);\n }\n\n private _froalaPluginsDone() {\n this._froalaPluginsLoaded.next(true);\n }\n}\n","export const ParagraphButtons = [\n 'align',\n 'formatOL',\n 'formatUL',\n 'checklist',\n 'indent',\n 'outdent',\n 'lineHeight'\n];\n","export const RichButtons = [\n 'insertTable',\n 'insertImage',\n 'insertLink',\n 'insertVideo',\n];\n","export const TextButtons = [\n 'paragraphFormat',\n 'bold',\n 'italic',\n 'underline',\n 'strikeThrough',\n 'subscript',\n 'superscript',\n 'fontFamily',\n 'fontSize',\n 'textColor',\n 'backgroundColor',\n 'inlineClass',\n 'inlineStyle',\n 'clearFormatting',\n 'quote',\n 'code',\n];\n","import { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n forwardRef,\n HostBinding,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n ViewChild,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlContainer,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgForm,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\n\nimport { guid } from '@firestitch/common';\nimport { FileProcessor, FsFile, FsFileProcessConfig } from '@firestitch/file';\n\nimport { BehaviorSubject, fromEventPattern, Observable, ReplaySubject, Subject } from 'rxjs';\nimport {\n distinctUntilChanged, filter, map, skip, startWith, switchMap, takeUntil, tap,\n} from 'rxjs/operators';\n\nimport { merge } from 'lodash-es';\n\nimport { FS_HTML_EDITOR_CONFIG } from '../../injects/config.inject';\nimport { ToolbarButton } from '../../interfaces';\nimport { FsHtmlEditorConfig } from '../../interfaces/html-editor-config';\nimport { FsFroalaLoaderService } from '../../services/froala-loader.service';\n\nimport { Plugin } from './../../classes/plugin';\nimport { ParagraphButtons } from './../../consts/paragraph-buttons.const';\nimport { RichButtons } from './../../consts/rich-buttons.const';\nimport { TextButtons } from './../../consts/text-buttons.const';\n\n\n@Component({\n selector: 'fs-html-editor',\n templateUrl: './html-editor.component.html',\n styleUrls: ['./html-editor.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FsHtmlEditorComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => FsHtmlEditorComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [\n {\n provide: ControlContainer,\n deps: [[Optional, NgForm]],\n useFactory: (ngForm: NgForm) => ngForm,\n },\n ],\n})\nexport class FsHtmlEditorComponent \nimplements OnInit, AfterViewInit, ControlValueAccessor, Validator, OnDestroy {\n\n @HostBinding('class.focused') public classFocused = false;\n\n @ViewChild('elRef') public elRef: ElementRef;\n\n @Input() public config: FsHtmlEditorConfig = {};\n @Input() public hint: string;\n\n @Input()\n @HostBinding('class.disabled')\n public disabled = false;\n\n public initialized = false;\n public readonly containerID = `fs-html-editor-${guid('xxx')}`;\n public onTouched: () => void;\n public onChange: (data: any) => void;\n\n private _editor: any;\n private _html: string;\n private _initialize$ = new ReplaySubject();\n private _froalaReady$ = new BehaviorSubject(null);\n private _window: any = this._document.defaultView;\n private _destroy$ = new Subject();\n\n constructor(\n @Optional()\n @Inject(FS_HTML_EDITOR_CONFIG)\n private _defaultConfig,\n @Inject(DOCUMENT)\n private _document: Document,\n private _cdRef: ChangeDetectorRef,\n private _fr: FsFroalaLoaderService,\n ) { }\n\n public get el(): any {\n return this.elRef.nativeElement;\n }\n\n public get html(): string {\n return this._html;\n }\n\n public get editor(): any {\n return this._editor;\n }\n\n public get froalaLoaded$(): Observable<boolean> {\n return this._fr.loaded$;\n }\n\n public ngOnInit(): void {\n this.config = this.config || {};\n this.config.autofocus = this.config.autofocus && (!this.config.disabled || !this.disabled);\n }\n\n public ngAfterViewInit() {\n this._listenLazyInit();\n this._initialize$.next();\n }\n\n public hasContent() {\n const el = document.createElement('div');\n\n if (el.querySelector('img')) {\n return true;\n }\n\n el.innerHTML = this._html;\n\n return !!el.innerText.length;\n }\n\n public initialize(options: any = {}) {\n const config = this._createConfig();\n this._initPlugins(config);\n this._initButtons(config);\n this._editor = new this._fr.FroalaEditor(this.el, this._createOptions(), () => {\n this._froalaReady$.next({ config, options });\n });\n }\n\n public updateSize() {\n // Hack: To trigger the toolbar button size modes\n window.dispatchEvent(new Event('resize'));\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const err: any = {};\n if (this.config.maxLength && this._html) {\n const maxLength = this.config.maxLength;\n const length = this._html.length;\n if (length > maxLength) {\n err.maxLengthError = `Must be ${maxLength} characters or fewer. You entered ${length} characters.`;\n }\n }\n\n return Object.keys(err).length ? err : null;\n }\n\n public focus(options?: { cursorPosition?: 'start' | 'end' }) {\n options = options ? options : {};\n\n if (options.cursorPosition === 'end') {\n this.editor.selection.setAtEnd(this.editor.$el.get(0));\n } else {\n this.editor.selection.setAtStart(this.editor.$el.get(0));\n }\n\n this.editor.selection.restore();\n\n const elSelection = this.editor.selection.element();\n if (elSelection) {\n elSelection.scrollIntoView({ block: 'center' });\n }\n }\n\n public clear() {\n this.writeValue('');\n }\n\n public disable() {\n this.disabled = true;\n }\n\n public setHtml(html) {\n this.writeValue(html);\n }\n\n public writeValue(html: string): void {\n this._html = html || '';\n\n if (Array.isArray(this._html)) {\n this._html = this._html.pop();\n }\n\n this._html = this._html\n .replace(/<(li)>\\s?<(div)>/g, '<li>')\n .replace(/<\\/(div)><\\/(li)>/g, '</li>');\n\n if (this.editor && this.editor.html) {\n try {\n this.editor.html.set(this._html);\n } catch (e) {\n //\n }\n }\n\n this._cdRef.markForCheck();\n }\n\n public registerOnChange(fn: (data: any) => void): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public ngOnDestroy() {\n this._initialize$.complete();\n this._destroy$.next();\n this._destroy$.complete();\n this.destroy();\n }\n\n public destroy() {\n if (this.editor) {\n this.editor.destroy();\n }\n\n this.initialized = false;\n this._cdRef.markForCheck();\n this.el.innerHTML = '';\n }\n\n private _processImageUpload(blob) {\n const processor = new FileProcessor();\n const file = new FsFile(blob);\n\n const config: FsFileProcessConfig = {\n orientate: true,\n quality: this.config.image.quality,\n format: this.config.image.format as any,\n maxWidth: this.config.image.width,\n maxHeight: this.config.image.height,\n minWidth: this.config.image.minWidth,\n minHeight: this.config.image.minHeight,\n };\n\n return processor.processFile(file, config)\n .pipe(\n switchMap((fsFile: FsFile) => {\n return this.config.image.upload(fsFile.file);\n }),\n );\n }\n\n private _createConfig(): FsHtmlEditorConfig {\n return merge({ froalaConfig: {} }, this._defaultConfig, this.config);\n }\n\n private _change(html): void {\n this._html = html;\n this.onChange(html);\n }\n\n private _initButtons(config: FsHtmlEditorConfig) {\n (config.buttons || [])\n .forEach((button) => {\n /*\n Svg Keys:\n [\"add\", \"advancedImageEditor\", \"alignCenter\", \"alignJustify\", \"alignLeft\", \"alignRight\",\n \"anchors\", \"back\", \"backgroundColor\", \"blockquote\", \"bold\", \"cellBackground\",\n \"cellBorderColor\", \"cellOptions\", \"cellStyle\", \"clearFormatting\", \"close\", \"codeView\",\n \"cogs\", \"columns\", \"editLink\", \"exitFullscreen\", \"fontAwesome\", \"fontFamily\",\n \"fontSize\", \"fullscreen\", \"help\", \"horizontalLine\", \"imageAltText\", \"imageCaption\",\n \"imageClass\", \"imageDisplay\", \"imageManager\", \"imageSize\", \"indent\", \"inlineClass\",\n \"inlineStyle\", \"insertEmbed\", \"insertFile\", \"insertImage\", \"insertLink\", \"insertMore\",\n \"insertTable\", \"insertVideo\", \"upload\", \"italic\", \"search\", \"lineHeight\", \"linkStyles\",\n \"mention\", \"more\", \"openLink\", \"orderedList\", \"outdent\", \"pageBreaker\",\n \"paragraphFormat\", \"paragraphMore\", \"paragraphStyle\", \"pdfExport\", \"print\",\n \"redo\", \"removeTable\", \"remove\", \"replaceImage\", \"row\", \"selectAll\", \"smile\",\n \"spellcheck\", \"star\", \"strikeThrough\", \"subscript\", \"superscript\", \"symbols\", \"tags\",\n \"tableHeader\", \"tableStyle\", \"textColor\", \"textMore\", \"underline\", \"undo\", \"unlink\",\n \"unorderedList\", \"verticalAlignBottom\", \"verticalAlignMiddle\", \"verticalAlignTop\"]\n */\n\n if (button.svgKey) {\n this._fr.FroalaEditor.DefineIcon(button.name, { SVG_KEY: button.svgKey });\n }\n\n this._fr.FroalaEditor.RegisterCommand(button.name, {\n title: button.title,\n focus: button.focus ?? true,\n undo: button.undo ?? true,\n refreshAfterCallback: button.refreshAfterCallback ?? true,\n callback() {\n button.click(this);\n },\n });\n });\n }\n\n private _initPlugins(config: FsHtmlEditorConfig) {\n (config.prependToolbarTextButtons || [])\n .forEach((button: ToolbarButton) => {\n this._defineButton(button);\n });\n\n (config.plugins || []).forEach((plugin: Plugin) => {\n this._fr.FroalaEditor.PLUGINS[plugin.config.name] = function (editor) {\n plugin.editor = editor;\n plugin.initialize();\n\n return plugin;\n };\n\n (plugin.config.buttons || [])\n .forEach((button: ToolbarButton) => {\n this._defineButton(button);\n });\n });\n }\n\n private _defineButton(button: ToolbarButton) {\n if(button.html) {\n this._fr.FroalaEditor\n .DefineIconTemplate(`${button.name}-template`, button.html);\n this._fr.FroalaEditor\n .DefineIcon(button.name, { \n NAME: `${button.name}-icon`,\n template: `${button.name}-template`, \n });\n \n } else { \n this._fr.FroalaEditor.DefineIcon(button.name, {\n NAME: button.name,\n PATH: button.svgPath,\n });\n } \n\n this._fr.FroalaEditor.RegisterCommand(button.name, {\n icon: button.name,\n title: button.tooltip,\n undo: button.undo,\n focus: button.focus,\n showOnMobile: button.showOnMobile,\n refreshAfterCallback: button.refreshAfterCallback,\n callback() {\n if (button.click) {\n button.click(this);\n }\n },\n refresh(event) {\n if (event.refresh) {\n event.refresh(this, event);\n }\n },\n });\n\n }\n\n private _createOptions() {\n const config = this._createConfig();\n\n const textButtons = [\n ...(config.prependToolbarTextButtons || [])\n .map((item) => item.name),\n ...TextButtons,\n ];\n\n return merge(\n // For some reason editor store somewhere pointer on default config object and dublicate options each time on init\n // Extra merge level fixed this problem and allow to init config properly without legacy data\n {},\n {\n shortcutsEnabled: ['show', 'bold', 'italic', 'underline', 'indent', 'outdent', 'undo', 'redo', 'insertImage', 'createLink'],\n key: config.activationKey,\n placeholderText: config.placeholder,\n linkAlwaysBlank: true,\n tabSpaces: 2,\n typingTimer: 250,\n tooltips: false,\n wordPasteModal: false,\n imageDefaultWidth: 0,\n imageDefaultAlign: 'left',\n quickInsertEnabled: false,\n scrollableContainer: `#${this.containerID}`,\n paragraphDefaultSelection: 'Format',\n videoUpload: false,\n imagePaste: !!config.image?.upload,\n imageUpload: !!config.image?.upload,\n paragraphFormat: {\n N: 'Normal',\n H1: 'Heading 1',\n H2: 'Heading 2',\n H3: 'Heading 3',\n H4: 'Heading 4',\n BLOCKQUOTE: 'Quote',\n },\n lineHeights: {\n Default: '',\n 0.5: '0.5',\n Single: '1',\n 1.15: '1.15',\n 1.5: '1.5',\n Double: '2',\n },\n paragraphFormatSelection: true,\n toolbarButtonsXS: {\n moreText: {\n buttons: textButtons,\n buttonsVisible: 1,\n },\n moreParagraph: {\n buttons: ParagraphButtons,\n buttonsVisible: 2,\n },\n moreRich: {\n buttons: RichButtons,\n buttonsVisible: 0,\n },\n },\n toolbarButtons: {\n moreText: {\n buttons: textButtons,\n buttonsVisible: 3,\n },\n moreParagraph: {\n buttons: ParagraphButtons,\n buttonsVisible: 5,\n },\n moreRich: {\n buttons: RichButtons,\n buttonsVisible: 3,\n },\n },\n },\n config.froalaConfig,\n );\n }\n\n private _listenLazyInit() {\n\n this.froalaLoaded$\n .pipe(\n filter((ready) => ready),\n switchMap(() => this._initialize$),\n tap(() => {\n const selection: any = window.getSelection();\n const options: any = {};\n if (selection.baseNode) {\n options.selection = {\n node: selection.baseNode.nodeValue,\n offset: selection.baseOffset,\n };\n }\n this.initialize(options);\n }),\n switchMap(() => this._froalaReady$),\n filter((data) => !!data),\n tap(({ config, options }) => {\n this._setupFroala(config, options);\n }),\n )\n .subscribe();\n }\n\n private _contentChanged(): void {\n const editorHTML = this._editor.html.get();\n\n if (this.html !== editorHTML) {\n this._change(editorHTML);\n }\n }\n\n private _setupFroala(config: FsHtmlEditorConfig, options: any): void {\n this._cdRef.markForCheck();\n\n this.setHtml(this._html);\n\n if (config.disabled) {\n this.disable();\n }\n\n if (config.froalaConfig.events) {\n if (config.froalaConfig.events.initialized) {\n config.froalaConfig.events.initialized();\n }\n }\n\n this._editor.events.on('focus', () => {\n this.classFocused = true;\n this._cdRef.markForCheck();\n });\n\n this._editor.events.on('blur', () => {\n this.classFocused = false;\n this._cdRef.markForCheck();\n });\n\n this._editor.events.on('click', () => {\n if (this.config.initOnClick && !this.initialized) {\n this.initialized = true;\n this._cdRef.markForCheck();\n }\n });\n\n fromEventPattern(\n (handler) => {\n this._editor.events.on('contentChanged', handler);\n },\n () => {\n //\n },\n )\n .pipe(\n startWith(this._html),\n map(() => this.editor.html.get()),\n distinctUntilChanged(),\n skip(1),\n )\n .subscribe(() => {\n this._contentChanged();\n });\n\n this._editor.events.on('paste.afterCleanup', (html) => {\n const div = document.createElement('div');\n div.innerHTML = html;\n div.querySelectorAll('*')\n .forEach((el) => {\n for (let i = 0; i < el.attributes.length; i++) {\n const name = el.attributes[0].name;\n if (name !== 'href') {\n el.removeAttribute(name);\n }\n }\n });\n\n return div.innerHTML;\n });\n\n this._editor.events.on('keydown', () => {\n this.onTouched();\n });\n\n if (this.config.image && this.config.image.upload) {\n this._editor.events.on('image.beforePasteUpload', (image) => {\n\n fetch(image.getAttribute('src'))\n .then((res) => {\n res.blob()\n .then((blob) => {\n this._processImageUpload(blob)\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((url) => {\n image.setAttribute('src', url);\n image.removeAttribute('data-fr-image-pasted');\n\n this._contentChanged();\n });\n });\n });\n\n return false;\n });\n\n this._editor.events.on('image.beforeUpload', (blobs) => {\n this._processImageUpload(blobs[0])\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((url) => {\n this.editor.image.insert(url, null, null, this.editor.image.get());\n });\n\n return false;\n });\n }\n\n if (this.el.querySelector('.fr-second-toolbar')) {\n this.el.querySelector('.fr-second-toolbar').remove();\n }\n\n if (this.config.autofocus && !this.config.initOnClick) {\n this.focus();\n }\n }\n}\n","<fs-label-field>\n <fs-label *ngIf=\"config.label\">{{config.label}}</fs-label>\n <div\n class=\"html-editor-container fs-html-editor-default\"\n [id]=\"containerID\"\n [ngClass]=\"{\n initialized: initialized,\n 'init-on-click': config.initOnClick\n }\">\n <ng-container *fsSkeleton=\"(froalaLoaded$ | async) !== false\"></ng-container>\n <div #elRef></div>\n\n <div class=\"bottom-line\"></div>\n <div class=\"disabled-line\"></div>\n </div>\n\n <fs-label-message>\n <div class=\"fs-form-message\">\n <div class=\"fs-form-hint\">{{hint}}</div>\n </div>\n </fs-label-message>\n</fs-label-field>\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\n\nimport { FsHtmlRendererModule } from '../html-renderer/fs-html-renderer.module';\n\nimport { FsHtmlEditorComponent } from './components/html-editor/html-editor.component';\nimport { FroalaPlugin } from './enums/default-plugin.enum';\nimport { FS_HTML_EDITOR_CONFIG, FS_HTML_EDITOR_DEFAULT_CONFIG } from './injects/config.inject';\nimport { FsHtmlEditorConfig } from './interfaces/html-editor-config';\n\n\n@NgModule({\n imports: [\n CommonModule,\n\n FsSkeletonModule,\n FsLabelModule,\n FsHtmlRendererModule,\n ],\n exports: [\n FsHtmlEditorComponent,\n ],\n declarations: [\n FsHtmlEditorComponent,\n ],\n})\nexport class FsHtmlEditorModule {\n public static forRoot(config: FsHtmlEditorConfig = {}): ModuleWithProviders<FsHtmlEditorModule> {\n return {\n ngModule: FsHtmlEditorModule,\n providers: [\n { provide: FS_HTML_EDITOR_DEFAULT_CONFIG, useValue: config },\n {\n provide: FS_HTML_EDITOR_CONFIG,\n useFactory: FsHtmlEditorConfigFactory,\n deps: [FS_HTML_EDITOR_DEFAULT_CONFIG],\n },\n ],\n };\n }\n}\n\nexport function FsHtmlEditorConfigFactory(config: FsHtmlEditorConfig) {\n return {\n froalaPlugins: [\n FroalaPlugin.Align,\n FroalaPlugin.Colors,\n FroalaPlugin.Image,\n FroalaPlugin.Link,\n FroalaPlugin.Lists,\n FroalaPlugin.ParagraphFormat,\n FroalaPlugin.Quote,\n FroalaPlugin.Table,\n FroalaPlugin.Url,\n FroalaPlugin.Video,\n FroalaPlugin.Draggable,\n FroalaPlugin.FontSize,\n FroalaPlugin.LineHeight,\n ],\n ...config,\n };\n}\n","// import { FroalaEditor } from 'froala-editor';\nimport { PluginConfig } from './../interfaces/plugin-config';\n\nexport class Plugin {\n\n public config: PluginConfig;\n public editor: any;\n\n public initialize() {}\n public destroy() {}\n\n}\n","import { Plugin } from '../classes/plugin';\n\nimport { PluginConfig } from './../interfaces/plugin-config';\n\n\nexport class ChecklistPlugin extends Plugin {\n\n public constructor(public config: PluginConfig = { name: 'checklist' }) {\n super();\n this.config = {\n ...config,\n name: 'checklist',\n buttons: [\n {\n name: 'checklist',\n svgPath: 'M8.4,10.3l-1.2,1.2l4,4L20,6.7l-1.2-1.2l-7.6,7.6L8.4,10.3z M18.2,18.2H5.8V5.8h8.9V4H5.8C4.8,4,4,4.8,4,5.8v12.4c0,1,0.8,1.8,1.8,1.8h12.4c1,0,1.8-0.8,1.8-1.8v-7.1h-1.8V18.2z',\n click: (editor) => {\n editor.html.insert('<ul class=\"checklist\"><li></li></ul>');\n }\n }\n ]\n };\n }\n\n public initialize() {\n this.editor.events.on('click', (e) => {\n const li = e.target;\n if (li.nodeName === 'LI' && e.offsetX < 0) {\n\n const items = [li, ...li.querySelectorAll('li')];\n\n if (li.classList.contains('checked')) {\n items.forEach((item) => {\n item.classList.remove('checked');\n });\n } else {\n items.forEach((item) => {\n item.classList.add('checked');\n });\n }\n }\n\n }, false);\n }\n\n}\n","import { Plugin } from '../classes/plugin';\n\nimport { PluginConfig } from './../interfaces/plugin-config';\n\n\nexport class CodePlugin extends Plugin {\n\n public constructor(public config: PluginConfig = { name: 'code' }) {\n super();\n this.config = {\n ...config,\n name: 'code',\n buttons: [\n {\n name: 'code',\n svgPath: 'M8.9,7.3L4.2,12l4.7,4.7l1.1-1.1L6.4,12L10,8.4L8.9,7.3z M15.1,7.3L14,8.4l3.6,3.6L14,15.6l1.1,1.1l4.7-4.7L15.1,7.3z',\n click: (editor) => {\n const node = editor.selection.get();\n const codeEl = this._getCodeEl(node.baseNode);\n if (codeEl) {\n codeEl.classList.remove('code');\n } else {\n editor.html.insert('<p class=\"code\">' + editor.selection.get().toString().replace(/\\n{1,}/g,'<br>') + '</p>');\n }\n }\n }\n ]\n };\n }\n\n public initialize() {\n this.editor.events.on('keydown', (e) => {\n if (e.keyCode === 13) {\n const selection = this.editor.selection.get();\n\n if (selection && this._getCodeEl(selection.baseNode)) {\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n let br = '<br>';\n const base = selection.baseNode;\n if (base.nodeName === '#text' && selection.baseOffset === base.length) {\n\n if (!(base.nextSibling && base.nextSibling.nodeName === 'BR')) {\n br += '<br>';\n }\n } else {\n const el: any = Array.from(base.childNodes).splice(selection.baseOffset - 1, 1).pop();\n if (el && el.nodeName !== 'BR') {\n br += '<br>';\n }\n }\n\n this.editor.html.insert(br);\n return false;\n }\n }\n }, true);\n }\n\n public destroy() {}\n\n private _getCodeEl(el) {\n\n if (el) {\n if (el.classList && el.classList.contains('code')) {\n return el;\n }\n\n if (el.parentElement) {\n return this._getCodeEl(el.parentElement);\n }\n }\n\n return null;\n }\n}\n","import { debounce } from 'lodash-es';\nimport Tribute, { TributeItem } from 'tributejs';\n\nimport { MentionPluginConfig } from './configs/mention-plugin.config';\n\nimport { Plugin } from '../classes/plugin';\n\nimport { guid } from '@firestitch/common';\n\n\nexport class MentionPlugin extends Plugin {\n\n private static _currentGuid = null;\n private static _tributes = [];\n private _tribute;\n private _guid = guid();\n\n public constructor(public config: MentionPluginConfig) {\n super();\n this.config = {\n ...config,\n buttons: [\n {\n name: config.name,\n tooltip: config.tooltip,\n svgPath: config.iconPath,\n click: (editor) => {\n this._closeAll();\n this._tribute.showMenuForCollection(editor.el);\n }\n }\n ]\n };\n\n this._tribute = new Tribute({\n values: debounce(this._loadValues.bind(this), 200),\n searchOpts: {\n pre: '',\n post: '',\n skip: true\n },\n containerClass: `fs-html-editor-mention-container ${this.config.containerClass || ''}`,\n itemClass: `fs-html-editor-mention-menu-item ${this.config.menuItemClass || ''}`,\n trigger: this.config.trigger,\n allowSpaces: true,\n menuItemTemplate: (item: TributeItem<any>) => {\n return this.config.menuItemTemplate(item.original);\n },\n selectTemplate: (item: TributeItem<any>) => {\n const template = this.config.selectedTemplate(item.original);\n\n let p = document.createElement('p');\n p.innerHTML = template;\n\n let node = p.firstElementChild;\n if (!node) {\n node = document.createElement('span');\n node.innerHTML = template;\n }\n\n node.setAttribute('contenteditable', 'false');\n node.classList.add('fr-deletable');\n\n return node.outerHTML;\n },\n });\n\n MentionPlugin._tributes.push(this._tribute);\n }\n\n public initialize() {\n this._tribute.attach(this.editor.el);\n this.editor.events.on('keydown', (e) => {\n if (e.key === 'Enter' && this._tribute.isActive) {\n return false;\n }\n }, true);\n\n \n this.editor.el.addEventListener(\"tribute-replaced\", this.selected);\n }\n\n public selected = (event) => {\n if(this.config.selected) {\n if(MentionPlugin._currentGuid === this._guid) {\n this.config.selected(event.detail.item.original);\n }\n }\n }\n\n public destroy() {\n this.editor.el.removeEventListener(\"tribute-replaced\", this.selected);\n }\n\n private _closeAll() {\n MentionPlugin._tributes.forEach((tribute) => {\n if (tribute.menu) {\n tribute.hideMenu();\n }\n });\n }\n\n private _loadValues(keyword, cb) {\n MentionPlugin._currentGuid = this._guid;\n return this.config.fetch(keyword)\n .subscribe((data) => {\n cb(data);\n });\n }\n}\n","import { PluginConfig } from '../interfaces/plugin-config';\n\nimport { Plugin } from '../classes/plugin';\n\n\nexport class RealtimePlugin extends Plugin {\n\n public constructor(public config: PluginConfig = { name: 'realtime' }) {\n super();\n this.config = {\n ...config,\n name: 'realtime',\n };\n }\n\n public initialize() {\n\n this.editor.events.on('click', (e) => {\n\n }, false);\n }\n}\n","import { ScreenRecordPluginConfig } from './configs/screen-record-plugin.config';\nimport { Plugin } from '../classes/plugin';\n\n\ndeclare var MediaRecorder: any;\n\nexport class ScreenRecordPlugin extends Plugin {\n\n private _activeEl;\n\n public constructor(public config: ScreenRecordPluginConfig = {}) {\n super();\n\n this.config = {\n ...config,\n name: config.name || 'screenRecord',\n buttons: [\n {\n name: 'screenRecord',\n svgPath: `M14.7,7.7v6.1H7.1V7.7H14.7 M16.3,9.6V6.9c0-0.4-0.3-0.8-0.8-0.8H6.4c-0.4,0-0.8,0.3-0.8,0.8v7.6c0,0.4,0.3,0.8,0.8,0.8h9.1c0.4,0,0.8-0.3,0.8-0.8v-2.7l1.7,1.7c0.3,0.3,0.8,0.3,1.1,0c0.1-0.1,0.2-0.3,0.2-0.5V8.4c0-0.4-0.3-0.8-0.8-0.8\n\tc-0.2,0-0.4,0.1-0.5,0.2L16.3,9.6z M21.5,1.6H2.9c-0.7,0-1.3,0.7-1.3,1.6v14.6c0,0.9,0.6,1.6,1.3,1.6h7.6v1.1l-5,1c-0.2,0-0.4,0.3-0.4,0.6c0,0.3,0.2,0.4,0.4,0.4c0,0,0,0,0.1,0l5.3-1h2.6l5.3,1c0,0,0,0,0.1,0c0.2,0,0.4-0.2,0.4-0.4\n c0-0.3-0.1-0.6-0.4-0.6l-5-1v-1.1h7.6c0.7,0,1.3-0.7,1.3-1.6V3.2C22.9,2.3,22.3,1.6,21.5,1.6z M21.1,17.3H3.3V3.7h17.8L21.1,17.3L21.1,17.3z`,\n tooltip: 'Screen Record',\n click: (editor) => {\n\n (<any>navigator).mediaDevices.getDisplayMedia({ video: true })\n .then((stream) => {\n const chunks = [];\n const options = { mimeType: 'video/webm; codecs=vp9' };\n let mediaRecorder = new MediaRecorder(stream, options);\n\n stream.addEventListener('inactive', (e) => {\n mediaRecorder.stop();\n mediaRecorder = null;\n stream.getTracks().forEach((track) => track.stop());\n stream = null;\n\n const blob = new Blob(chunks, { type: 'video/webm' });\n config.upload(blob)\n .subscribe((url) => {\n editor.html.insert(`<span class=\"fr-screen-record fr-deletable fr-draggable\"><video controls style=\"max-width:${config.maxWidth}\"><source src=\"${url}\" type=\"video/webm\"></video></span>`);\n });\n });\n\n mediaRecorder.addEventListener('dataavailable', (event) => {\n if (event.data && event.data.size > 0) {\n chunks.push(event.data);\n }\n });\n\n mediaRecorder.start(10);\n })\n .catch((e) => { });\n }\n }\n ]\n };\n }\n\n public async initialize() {\n const FroalaEditor = (window as any).FroalaEditor;\n\n this.editor.events.on('mouseup', (e) => {\n const el = this._getEl(e.target);\n\n if (el) {\n this.editor.popups.hideAll();\n this._activeEl = el;\n this._showPopup(el);\n }\n });\n\n FroalaEditor.POPUP_TEMPLATES[\"screenRecordPlugin.popup\"] = '[_BUTTONS_]';\n\n FroalaEditor.DefineIcon('popupClose', { NAME: 'trash', SVG_KEY: 'remove' });\n FroalaEditor.RegisterCommand('popupClose', {\n title: 'Remove',\n undo: false,\n focus: false,\n callback: () => {\n if (this._activeEl) {\n this._activeEl.remove();\n }\n }\n });\n }\n\n private _createPopup() {\n\n const template = {\n buttons: `<div class=\"fr-buttons\">${this.editor.button.buildList(['popupClose'])}</div>`,\n };\n\n return this.editor.popups.create('screenRecordPlugin.popup', template);\n }\n\n private _showPopup (el) {\n var $popup = this.editor.popups.get('screenRecordPlugin.popup');\n\n if (!$popup) {\n $popup = this._createPopup();\n }\n\n this.editor.popups.setContainer('screenRecordPlugin.popup', this.editor.$(el));\n\n const left = el.offsetLeft + el.offsetWidth / 2;\n\n this.editor.popups.show('screenRecordPlugin.popup', left, null);\n }\n\n private _getEl(el) {\n if (el && el.classList) {\n if (el.classList.contains('fr-screen-record'))\n return el;\n\n return this._getEl(el.parentNode);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.FsFroalaLoaderService"],"mappings":"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"}
|