@firestitch/html-editor 9.4.1 → 9.4.5

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.
@@ -18,6 +18,7 @@ function resourceLoaderFactory() {
18
18
  video: 'plugins/video.min.js',
19
19
  quote: 'plugins/quote.min.js',
20
20
  draggable: 'plugins/draggable.min.js',
21
+ font_size: 'plugins/font_size.min.js',
21
22
  };
22
23
  var stylesPaths = {
23
24
  froala: 'froala_editor.pkgd.min.css',
@@ -79,4 +80,4 @@ function resourceLoaderFactory() {
79
80
  };
80
81
  }
81
82
  export var ResourceLoader = resourceLoaderFactory();
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGZpcmVzdGl0Y2gvaHRtbC1lZGl0b3IvIiwic291cmNlcyI6WyJhcHAvdXRpbHMvbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLFNBQVMscUJBQXFCO0lBQzVCLElBQUksWUFBWSxHQUFHLG9CQUFvQixDQUFDO0lBQ3hDLElBQUksVUFBVSxHQUFHLGNBQWMsQ0FBQztJQUVoQyxJQUFNLElBQUksR0FBRyxRQUFRLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEQsSUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQStCLENBQUM7SUFFckQsSUFBTSxhQUFhLEdBQUc7UUFDcEIsTUFBTSxFQUFFLHNCQUFzQjtRQUM5QixLQUFLLEVBQUUsc0JBQXNCO1FBQzdCLE1BQU0sRUFBRSx1QkFBdUI7UUFDL0IsS0FBSyxFQUFFLHNCQUFzQjtRQUM3QixJQUFJLEVBQUUscUJBQXFCO1FBQzNCLEtBQUssRUFBRSxzQkFBc0I7UUFDN0IsZ0JBQWdCLEVBQUUsaUNBQWlDO1FBQ25ELEtBQUssRUFBRSxzQkFBc0I7UUFDN0IsR0FBRyxFQUFFLG9CQUFvQjtRQUN6QixLQUFLLEVBQUUsc0JBQXNCO1FBQzdCLEtBQUssRUFBRSxzQkFBc0I7UUFDN0IsU0FBUyxFQUFFLDBCQUEwQjtLQUN0QyxDQUFBO0lBRUQsSUFBTSxXQUFXLEdBQUc7UUFDbEIsTUFBTSxFQUFFLDRCQUE0QjtLQUNyQyxDQUFBO0lBRUQsSUFBTSxZQUFZLEdBQUcsVUFBVSxVQUFrQjtRQUMvQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUMxQixJQUFNLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxVQUFDLEdBQUc7Z0JBRTlCLElBQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2hELE1BQU0sQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDO2dCQUV4QixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUV6QixNQUFNLENBQUMsTUFBTSxHQUFHO29CQUNkLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDWCxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQztnQkFFRixNQUFNLENBQUMsT0FBTyxHQUFHLFVBQUMsR0FBRztvQkFDbkIsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDakIsQ0FBQyxDQUFBO1lBQ0gsQ0FBQyxDQUFDO2lCQUNDLElBQUksQ0FDSCxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztZQUVKLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzdCO1FBRUQsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQy9CLENBQUMsQ0FBQztJQUVGLElBQU0sVUFBVSxHQUFHLFVBQVUsU0FBaUI7UUFDNUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDekIsSUFBTSxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsVUFBQyxHQUFHO2dCQUM5QixJQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM3QyxLQUFLLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQztnQkFDckIsS0FBSyxDQUFDLEdBQUcsR0FBRyxZQUFZLENBQUM7Z0JBQ3pCLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBRyxTQUFXLENBQUM7Z0JBRTVCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRXhCLEtBQUssQ0FBQyxNQUFNLEdBQUc7b0JBQ2IsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNYLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDakIsQ0FBQyxDQUFDO2dCQUVGLEtBQUssQ0FBQyxPQUFPLEdBQUcsVUFBQyxHQUFHO29CQUNsQixHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQixDQUFDLENBQUE7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzVCO1FBRUQsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlCLENBQUMsQ0FBQztJQUVGLE9BQU87UUFDTCxlQUFlLEVBQUUsVUFBQyxJQUFZO1lBQzVCLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDdEIsQ0FBQztRQUNELGFBQWEsRUFBRSxVQUFDLElBQVk7WUFDMUIsVUFBVSxHQUFHLElBQUksQ0FBQztRQUNwQixDQUFDO1FBQ0QsWUFBWSxFQUFFLFVBQUMsWUFBb0I7WUFDakMsSUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLFlBQVksQ0FBQztZQUV6RCxPQUFPLFlBQVksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUNELFVBQVUsRUFBRSxVQUFDLFlBQW9CO1lBQy9CLElBQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxZQUFZLENBQUM7WUFFdkQsT0FBTyxVQUFVLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7S0FDRixDQUFBO0FBQ0gsQ0FBQztBQUdELE1BQU0sQ0FBQyxJQUFNLGNBQWMsR0FBRyxxQkFBcUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmZ1bmN0aW9uIHJlc291cmNlTG9hZGVyRmFjdG9yeSgpIHtcbiAgbGV0IHJlc291cmNlQmFzZSA9ICcvYXNzZXRzL2pzL2Zyb2FsYS8nO1xuICBsZXQgc3R5bGVzQmFzZSA9ICcvYXNzZXRzL2Nzcy8nO1xuXG4gIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICBjb25zdCBmaWxlcyA9IG5ldyBNYXA8c3RyaW5nLCBPYnNlcnZhYmxlPHVua25vd24+PigpO1xuXG4gIGNvbnN0IHJlc291cmNlUGF0aHMgPSB7XG4gICAgZnJvYWxhOiAnZnJvYWxhX2VkaXRvci5taW4uanMnLFxuICAgIGFsaWduOiAncGx1Z2lucy9hbGlnbi5taW4uanMnLFxuICAgIGNvbG9yczogJ3BsdWdpbnMvY29sb3JzLm1pbi5qcycsXG4gICAgaW1hZ2U6ICdwbHVnaW5zL2ltYWdlLm1pbi5qcycsXG4gICAgbGluazogJ3BsdWdpbnMvbGluay5taW4uanMnLFxuICAgIGxpc3RzOiAncGx1Z2lucy9saXN0cy5taW4uanMnLFxuICAgIHBhcmFncmFwaF9mb3JtYXQ6ICdwbHVnaW5zL3BhcmFncmFwaF9mb3JtYXQubWluLmpzJyxcbiAgICB0YWJsZTogJ3BsdWdpbnMvdGFibGUubWluLmpzJyxcbiAgICB1cmw6ICdwbHVnaW5zL3VybC5taW4uanMnLFxuICAgIHZpZGVvOiAncGx1Z2lucy92aWRlby5taW4uanMnLFxuICAgIHF1b3RlOiAncGx1Z2lucy9xdW90ZS5taW4uanMnLFxuICAgIGRyYWdnYWJsZTogJ3BsdWdpbnMvZHJhZ2dhYmxlLm1pbi5qcycsXG4gIH1cblxuICBjb25zdCBzdHlsZXNQYXRocyA9IHtcbiAgICBmcm9hbGE6ICdmcm9hbGFfZWRpdG9yLnBrZ2QubWluLmNzcycsXG4gIH1cblxuICBjb25zdCBsb2FkUmVzb3VyY2UgPSBmdW5jdGlvbiAoc2NyaXB0UGF0aDogc3RyaW5nKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgaWYgKCFmaWxlcy5oYXMoc2NyaXB0UGF0aCkpIHtcbiAgICAgIGNvbnN0IG9icyQgPSBuZXcgT2JzZXJ2YWJsZSgob2JzKSA9PiB7XG5cbiAgICAgICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgIHNjcmlwdC5zcmMgPSBzY3JpcHRQYXRoO1xuXG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcblxuICAgICAgICBzY3JpcHQub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgIG9icy5uZXh0KCk7XG4gICAgICAgICAgb2JzLmNvbXBsZXRlKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSAoZXJyKSA9PiB7XG4gICAgICAgICAgb2JzLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHNoYXJlUmVwbGF5KDEpLFxuICAgICAgICApO1xuXG4gICAgICBmaWxlcy5zZXQoc2NyaXB0UGF0aCwgb2JzJCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbGVzLmdldChzY3JpcHRQYXRoKTtcbiAgfTtcblxuICBjb25zdCBsb2FkU3R5bGVzID0gZnVuY3Rpb24gKHN0eWxlUGF0aDogc3RyaW5nKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgaWYgKCFmaWxlcy5oYXMoc3R5bGVQYXRoKSkge1xuICAgICAgY29uc3Qgb2JzJCA9IG5ldyBPYnNlcnZhYmxlKChvYnMpID0+IHtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgICAgIHN0eWxlLmlkID0gc3R5bGVQYXRoO1xuICAgICAgICBzdHlsZS5yZWwgPSAnc3R5bGVzaGVldCc7XG4gICAgICAgIHN0eWxlLmhyZWYgPSBgJHtzdHlsZVBhdGh9YDtcblxuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcblxuICAgICAgICBzdHlsZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgb2JzLm5leHQoKTtcbiAgICAgICAgICBvYnMuY29tcGxldGUoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzdHlsZS5vbmVycm9yID0gKGVycikgPT4ge1xuICAgICAgICAgIG9icy5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZmlsZXMuc2V0KHN0eWxlUGF0aCwgb2JzJCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbGVzLmdldChzdHlsZVBhdGgpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgc2V0UmVzb3VyY2VCYXNlOiAocGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICByZXNvdXJjZUJhc2UgPSBwYXRoO1xuICAgIH0sXG4gICAgc2V0U3R5bGVzQmFzZTogKHBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgc3R5bGVzQmFzZSA9IHBhdGg7XG4gICAgfSxcbiAgICBsb2FkUmVzb3VyY2U6IChyZXNvdXJjZU5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgcGF0aCA9IHJlc291cmNlUGF0aHNbcmVzb3VyY2VOYW1lXSB8fCByZXNvdXJjZU5hbWU7XG5cbiAgICAgIHJldHVybiBsb2FkUmVzb3VyY2UocmVzb3VyY2VCYXNlICsgcGF0aCk7XG4gICAgfSxcbiAgICBsb2FkU3R5bGVzOiAocmVzb3VyY2VOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHBhdGggPSBzdHlsZXNQYXRoc1tyZXNvdXJjZU5hbWVdIHx8IHJlc291cmNlTmFtZTtcblxuICAgICAgcmV0dXJuIGxvYWRTdHlsZXMoc3R5bGVzQmFzZSArIHBhdGgpO1xuICAgIH1cbiAgfVxufVxuXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUxvYWRlciA9IHJlc291cmNlTG9hZGVyRmFjdG9yeSgpO1xuIl19
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGZpcmVzdGl0Y2gvaHRtbC1lZGl0b3IvIiwic291cmNlcyI6WyJhcHAvdXRpbHMvbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLFNBQVMscUJBQXFCO0lBQzVCLElBQUksWUFBWSxHQUFHLG9CQUFvQixDQUFDO0lBQ3hDLElBQUksVUFBVSxHQUFHLGNBQWMsQ0FBQztJQUVoQyxJQUFNLElBQUksR0FBRyxRQUFRLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEQsSUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQStCLENBQUM7SUFFckQsSUFBTSxhQUFhLEdBQUc7UUFDcEIsTUFBTSxFQUFFLHNCQUFzQjtRQUM5QixLQUFLLEVBQUUsc0JBQXNCO1FBQzdCLE1BQU0sRUFBRSx1QkFBdUI7UUFDL0IsS0FBSyxFQUFFLHNCQUFzQjtRQUM3QixJQUFJLEVBQUUscUJBQXFCO1FBQzNCLEtBQUssRUFBRSxzQkFBc0I7UUFDN0IsZ0JBQWdCLEVBQUUsaUNBQWlDO1FBQ25ELEtBQUssRUFBRSxzQkFBc0I7UUFDN0IsR0FBRyxFQUFFLG9CQUFvQjtRQUN6QixLQUFLLEVBQUUsc0JBQXNCO1FBQzdCLEtBQUssRUFBRSxzQkFBc0I7UUFDN0IsU0FBUyxFQUFFLDBCQUEwQjtRQUNyQyxTQUFTLEVBQUUsMEJBQTBCO0tBQ3RDLENBQUE7SUFFRCxJQUFNLFdBQVcsR0FBRztRQUNsQixNQUFNLEVBQUUsNEJBQTRCO0tBQ3JDLENBQUE7SUFFRCxJQUFNLFlBQVksR0FBRyxVQUFVLFVBQWtCO1FBQy9DLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzFCLElBQU0sSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLFVBQUMsR0FBRztnQkFFOUIsSUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDaEQsTUFBTSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUM7Z0JBRXhCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBRXpCLE1BQU0sQ0FBQyxNQUFNLEdBQUc7b0JBQ2QsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNYLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDakIsQ0FBQyxDQUFDO2dCQUVGLE1BQU0sQ0FBQyxPQUFPLEdBQUcsVUFBQyxHQUFHO29CQUNuQixHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQixDQUFDLENBQUE7WUFDSCxDQUFDLENBQUM7aUJBQ0MsSUFBSSxDQUNILFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1lBRUosS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDN0I7UUFFRCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDL0IsQ0FBQyxDQUFDO0lBRUYsSUFBTSxVQUFVLEdBQUcsVUFBVSxTQUFpQjtRQUM1QyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN6QixJQUFNLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxVQUFDLEdBQUc7Z0JBQzlCLElBQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzdDLEtBQUssQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFDO2dCQUNyQixLQUFLLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQztnQkFDekIsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFHLFNBQVcsQ0FBQztnQkFFNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFeEIsS0FBSyxDQUFDLE1BQU0sR0FBRztvQkFDYixHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ1gsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNqQixDQUFDLENBQUM7Z0JBRUYsS0FBSyxDQUFDLE9BQU8sR0FBRyxVQUFDLEdBQUc7b0JBQ2xCLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQTtZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDNUI7UUFFRCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUIsQ0FBQyxDQUFDO0lBRUYsT0FBTztRQUNMLGVBQWUsRUFBRSxVQUFDLElBQVk7WUFDNUIsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN0QixDQUFDO1FBQ0QsYUFBYSxFQUFFLFVBQUMsSUFBWTtZQUMxQixVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLENBQUM7UUFDRCxZQUFZLEVBQUUsVUFBQyxZQUFvQjtZQUNqQyxJQUFNLElBQUksR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksWUFBWSxDQUFDO1lBRXpELE9BQU8sWUFBWSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsVUFBVSxFQUFFLFVBQUMsWUFBb0I7WUFDL0IsSUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLFlBQVksQ0FBQztZQUV2RCxPQUFPLFVBQVUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDdkMsQ0FBQztLQUNGLENBQUE7QUFDSCxDQUFDO0FBR0QsTUFBTSxDQUFDLElBQU0sY0FBYyxHQUFHLHFCQUFxQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZnVuY3Rpb24gcmVzb3VyY2VMb2FkZXJGYWN0b3J5KCkge1xuICBsZXQgcmVzb3VyY2VCYXNlID0gJy9hc3NldHMvanMvZnJvYWxhLyc7XG4gIGxldCBzdHlsZXNCYXNlID0gJy9hc3NldHMvY3NzLyc7XG5cbiAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gIGNvbnN0IGZpbGVzID0gbmV3IE1hcDxzdHJpbmcsIE9ic2VydmFibGU8dW5rbm93bj4+KCk7XG5cbiAgY29uc3QgcmVzb3VyY2VQYXRocyA9IHtcbiAgICBmcm9hbGE6ICdmcm9hbGFfZWRpdG9yLm1pbi5qcycsXG4gICAgYWxpZ246ICdwbHVnaW5zL2FsaWduLm1pbi5qcycsXG4gICAgY29sb3JzOiAncGx1Z2lucy9jb2xvcnMubWluLmpzJyxcbiAgICBpbWFnZTogJ3BsdWdpbnMvaW1hZ2UubWluLmpzJyxcbiAgICBsaW5rOiAncGx1Z2lucy9saW5rLm1pbi5qcycsXG4gICAgbGlzdHM6ICdwbHVnaW5zL2xpc3RzLm1pbi5qcycsXG4gICAgcGFyYWdyYXBoX2Zvcm1hdDogJ3BsdWdpbnMvcGFyYWdyYXBoX2Zvcm1hdC5taW4uanMnLFxuICAgIHRhYmxlOiAncGx1Z2lucy90YWJsZS5taW4uanMnLFxuICAgIHVybDogJ3BsdWdpbnMvdXJsLm1pbi5qcycsXG4gICAgdmlkZW86ICdwbHVnaW5zL3ZpZGVvLm1pbi5qcycsXG4gICAgcXVvdGU6ICdwbHVnaW5zL3F1b3RlLm1pbi5qcycsXG4gICAgZHJhZ2dhYmxlOiAncGx1Z2lucy9kcmFnZ2FibGUubWluLmpzJyxcbiAgICBmb250X3NpemU6ICdwbHVnaW5zL2ZvbnRfc2l6ZS5taW4uanMnLFxuICB9XG5cbiAgY29uc3Qgc3R5bGVzUGF0aHMgPSB7XG4gICAgZnJvYWxhOiAnZnJvYWxhX2VkaXRvci5wa2dkLm1pbi5jc3MnLFxuICB9XG5cbiAgY29uc3QgbG9hZFJlc291cmNlID0gZnVuY3Rpb24gKHNjcmlwdFBhdGg6IHN0cmluZyk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIGlmICghZmlsZXMuaGFzKHNjcmlwdFBhdGgpKSB7XG4gICAgICBjb25zdCBvYnMkID0gbmV3IE9ic2VydmFibGUoKG9icykgPT4ge1xuXG4gICAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICBzY3JpcHQuc3JjID0gc2NyaXB0UGF0aDtcblxuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG5cbiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICBvYnMubmV4dCgpO1xuICAgICAgICAgIG9icy5jb21wbGV0ZSgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNjcmlwdC5vbmVycm9yID0gKGVycikgPT4ge1xuICAgICAgICAgIG9icy5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzaGFyZVJlcGxheSgxKSxcbiAgICAgICAgKTtcblxuICAgICAgZmlsZXMuc2V0KHNjcmlwdFBhdGgsIG9icyQpO1xuICAgIH1cblxuICAgIHJldHVybiBmaWxlcy5nZXQoc2NyaXB0UGF0aCk7XG4gIH07XG5cbiAgY29uc3QgbG9hZFN0eWxlcyA9IGZ1bmN0aW9uIChzdHlsZVBhdGg6IHN0cmluZyk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIGlmICghZmlsZXMuaGFzKHN0eWxlUGF0aCkpIHtcbiAgICAgIGNvbnN0IG9icyQgPSBuZXcgT2JzZXJ2YWJsZSgob2JzKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgICBzdHlsZS5pZCA9IHN0eWxlUGF0aDtcbiAgICAgICAgc3R5bGUucmVsID0gJ3N0eWxlc2hlZXQnO1xuICAgICAgICBzdHlsZS5ocmVmID0gYCR7c3R5bGVQYXRofWA7XG5cbiAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cbiAgICAgICAgc3R5bGUub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgIG9icy5uZXh0KCk7XG4gICAgICAgICAgb2JzLmNvbXBsZXRlKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc3R5bGUub25lcnJvciA9IChlcnIpID0+IHtcbiAgICAgICAgICBvYnMuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGZpbGVzLnNldChzdHlsZVBhdGgsIG9icyQpO1xuICAgIH1cblxuICAgIHJldHVybiBmaWxlcy5nZXQoc3R5bGVQYXRoKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHNldFJlc291cmNlQmFzZTogKHBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgcmVzb3VyY2VCYXNlID0gcGF0aDtcbiAgICB9LFxuICAgIHNldFN0eWxlc0Jhc2U6IChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgIHN0eWxlc0Jhc2UgPSBwYXRoO1xuICAgIH0sXG4gICAgbG9hZFJlc291cmNlOiAocmVzb3VyY2VOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHBhdGggPSByZXNvdXJjZVBhdGhzW3Jlc291cmNlTmFtZV0gfHwgcmVzb3VyY2VOYW1lO1xuXG4gICAgICByZXR1cm4gbG9hZFJlc291cmNlKHJlc291cmNlQmFzZSArIHBhdGgpO1xuICAgIH0sXG4gICAgbG9hZFN0eWxlczogKHJlc291cmNlTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBwYXRoID0gc3R5bGVzUGF0aHNbcmVzb3VyY2VOYW1lXSB8fCByZXNvdXJjZU5hbWU7XG5cbiAgICAgIHJldHVybiBsb2FkU3R5bGVzKHN0eWxlc0Jhc2UgKyBwYXRoKTtcbiAgICB9XG4gIH1cbn1cblxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VMb2FkZXIgPSByZXNvdXJjZUxvYWRlckZhY3RvcnkoKTtcbiJdfQ==
@@ -65,6 +65,7 @@ function resourceLoaderFactory() {
65
65
  video: 'plugins/video.min.js',
66
66
  quote: 'plugins/quote.min.js',
67
67
  draggable: 'plugins/draggable.min.js',
68
+ font_size: 'plugins/font_size.min.js',
68
69
  };
69
70
  const stylesPaths = {
70
71
  froala: 'froala_editor.pkgd.min.css',
@@ -233,7 +234,6 @@ let FsHtmlEditorComponent = FsHtmlEditorComponent_1 = class FsHtmlEditorComponen
233
234
  this._listenLazyInit();
234
235
  }
235
236
  ngAfterViewInit() {
236
- this._html = this.ngModel || '';
237
237
  if (!this.config.initOnClick || !this.hasContent()) {
238
238
  this.initialized = true;
239
239
  this._initialize$.next();
@@ -270,7 +270,10 @@ let FsHtmlEditorComponent = FsHtmlEditorComponent_1 = class FsHtmlEditorComponen
270
270
  this._cdRef.markForCheck();
271
271
  });
272
272
  this._editor.events.on('contentChanged', () => {
273
- this._change(this._editor.html.get());
273
+ const editorHTML = this._editor.html.get();
274
+ if (this.html !== editorHTML) {
275
+ this._change(editorHTML);
276
+ }
274
277
  });
275
278
  this._editor.events.on('paste.afterCleanup', (html) => {
276
279
  var div = document.createElement('div');
@@ -415,13 +418,20 @@ let FsHtmlEditorComponent = FsHtmlEditorComponent_1 = class FsHtmlEditorComponen
415
418
  writeValue(html) {
416
419
  this._html = html || '';
417
420
  this._cdRef.markForCheck();
418
- if (this.editor && this.editor.html) {
419
- try {
420
- this.editor.html.set(this._html);
421
- }
422
- catch (e) {
421
+ // SP-T2298 timeout needed for the case, when froala was already initated and
422
+ // second instance opened in dialog/drawer. In this case init step pass much faster, writeValue trigger
423
+ // after init and froala ignore new html. At the same time froala was initied but editor not yet, and next
424
+ // code doesn't work without timeout. We've got time range when too late for initiate value, and to early
425
+ // for change event.
426
+ setTimeout(() => {
427
+ if (this.editor && this.editor.html) {
428
+ try {
429
+ this.editor.html.set(this._html);
430
+ }
431
+ catch (e) {
432
+ }
423
433
  }
424
- }
434
+ });
425
435
  }
426
436
  registerOnChange(fn) {
427
437
  this.onChange = fn;
@@ -577,10 +587,6 @@ __decorate([
577
587
  Input(),
578
588
  __metadata("design:type", Object)
579
589
  ], FsHtmlEditorComponent.prototype, "config", void 0);
580
- __decorate([
581
- Input(),
582
- __metadata("design:type", String)
583
- ], FsHtmlEditorComponent.prototype, "ngModel", void 0);
584
590
  FsHtmlEditorComponent = FsHtmlEditorComponent_1 = __decorate([
585
591
  Component({
586
592
  selector: 'fs-html-editor',
@@ -598,7 +604,7 @@ FsHtmlEditorComponent = FsHtmlEditorComponent_1 = __decorate([
598
604
  },
599
605
  ],
600
606
  changeDetection: ChangeDetectionStrategy.OnPush,
601
- styles: [":host ::ng-deep .fr-box.fr-basic .fr-wrapper{border:0;border-bottom:1px solid #949494;margin-bottom:1px;background-color:transparent}:host ::ng-deep .fr-box.fr-basic .fr-element{padding:0;font-family:inherit;color:inherit;font-size:inherit;line-height:inherit;min-height:auto}:host ::ng-deep .fr-dropdown-menu .fr-dropdown-wrapper,:host ::ng-deep .fr-dropdown:after,:host ::ng-deep .fr-more-toolbar,:host ::ng-deep .fr-toolbar{transition:none!important}:host ::ng-deep .fr-toolbar{position:-webkit-sticky;position:sticky;z-index:2;border-radius:0;background-color:transparent}:host ::ng-deep .fr-toolbar .fr-btn-grp{margin:0 20px 0 0;position:relative}:host ::ng-deep .fr-toolbar .fr-btn-grp:nth-child(1):after,:host ::ng-deep .fr-toolbar .fr-btn-grp:nth-child(2):after{content:\"\";position:absolute;top:9px;height:30px;border-left:1px solid #e5e5e5;margin-left:10px}:host ::ng-deep .fr-toolbar div:first-of-type:before{border:none}:host ::ng-deep .fr-toolbar.fr-toolbar-open .fr-newline{height:auto}:host ::ng-deep .fr-toolbar .fr-btn-grp:first-child{margin-left:0}:host ::ng-deep .fr-toolbar.fr-top{border:0}:host ::ng-deep .fr-toolbar .fr-newline{margin:0}:host ::ng-deep .fr-toolbar .fr-more-toolbar{z-index:auto}:host ::ng-deep .fr-toolbar .fr-command.fr-btn{z-index:auto}:host ::ng-deep .fr-toolbar .fr-command.fr-btn.fr-dropdown:after{right:3px}:host ::ng-deep .fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-selection:after{right:10px}:host ::ng-deep .fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-selection span{margin-right:24px}:host ::ng-deep .fr-toolbar .fr-command.fr-btn.fr-open{border-radius:4px;margin:4px 2px}:host ::ng-deep .fr-view ol,:host ::ng-deep .fr-view ul{list-style-position:unset}:host.disabled ::ng-deep .fr-box.fr-basic{opacity:.5;pointer-events:none}:host.disabled ::ng-deep .fr-box.fr-basic .fr-wrapper{border:none}:host.disabled ::ng-deep .disabled-line{display:block}::ng-deep .fr-popup{z-index:1001!important}::ng-deep .fr-video-by-url-layer .fr-checkbox-line{display:none}.disabled-line{display:none;position:absolute;bottom:-1px;z-index:1;background-image:linear-gradient(90deg,rgba(0,0,0,.42) 0,rgba(0,0,0,.42) 33%,transparent 0);background-size:4px 100%;background-repeat:repeat-x;height:1px;width:100%}.bottom-line{opacity:0;transform-origin:50%;transform:scaleX(.5);transition:background-color .3s cubic-bezier(.55,0,.55,.2);width:100%;border-bottom:2px solid #949494;position:absolute;bottom:-1px;z-index:1}:host{position:relative;display:block}:host.focused .bottom-line{opacity:1;display:block;transform:scaleX(1);transition:transform .3s cubic-bezier(.25,.8,.25,1),opacity .1s cubic-bezier(.25,.8,.25,1),background-color .3s cubic-bezier(.25,.8,.25,1)}::ng-deep .fs-html-editor-mention-container{position:absolute;top:0;left:0;height:auto;max-height:300px;max-width:500px;overflow:auto;display:block;z-index:999999;box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);border-bottom-left-radius:4px;border-bottom-right-radius:4px;background:#fff}::ng-deep .fs-html-editor-mention-container ul{margin:0;padding:0;list-style:none}::ng-deep .fs-html-editor-mention-container li{padding:0 16px;cursor:pointer;line-height:48px}::ng-deep .fs-html-editor-mention-container li.highlight,::ng-deep .fs-html-editor-mention-container li:hover{background:#f5f5f5}::ng-deep .fs-html-editor-mention-container li.no-match{cursor:default}"]
607
+ styles: [":host ::ng-deep .fr-box.fr-basic .fr-wrapper{border:0;border-bottom:1px solid #949494;margin-bottom:1px;background-color:transparent}:host ::ng-deep .fr-box.fr-basic .fr-element{padding:0;font-family:inherit;color:inherit;font-size:inherit;line-height:inherit;min-height:auto}:host ::ng-deep .fr-dropdown-menu .fr-dropdown-wrapper,:host ::ng-deep .fr-dropdown:after,:host ::ng-deep .fr-more-toolbar,:host ::ng-deep .fr-toolbar{transition:none!important}:host ::ng-deep .fr-toolbar{position:-webkit-sticky;position:sticky;z-index:2;border-radius:0;background-color:transparent}:host ::ng-deep .fr-toolbar .fr-btn-grp{margin:0 20px 0 0;position:relative}:host ::ng-deep .fr-toolbar .fr-btn-grp:nth-child(1):after,:host ::ng-deep .fr-toolbar .fr-btn-grp:nth-child(2):after{content:\"\";position:absolute;top:9px;height:30px;border-left:1px solid #e5e5e5;margin-left:10px}:host ::ng-deep .fr-toolbar div:first-of-type:before{border:none}:host ::ng-deep .fr-toolbar.fr-toolbar-open .fr-newline{height:auto}:host ::ng-deep .fr-toolbar .fr-btn-grp:first-child{margin-left:0}:host ::ng-deep .fr-toolbar.fr-top{border:0}:host ::ng-deep .fr-toolbar .fr-newline{margin:0}:host ::ng-deep .fr-toolbar .fr-more-toolbar{z-index:auto}:host ::ng-deep .fr-toolbar .fr-command.fr-btn{z-index:auto}:host ::ng-deep .fr-toolbar .fr-command.fr-btn.fr-dropdown:after{right:3px}:host ::ng-deep .fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-selection span{margin-right:24px}:host ::ng-deep .fr-toolbar .fr-command.fr-btn.fr-open{border-radius:4px;margin:4px 2px}:host ::ng-deep .fr-view ol,:host ::ng-deep .fr-view ul{list-style-position:unset}:host.disabled ::ng-deep .fr-box.fr-basic{opacity:.5;pointer-events:none}:host.disabled ::ng-deep .fr-box.fr-basic .fr-wrapper{border:none}:host.disabled ::ng-deep .disabled-line{display:block}::ng-deep .fr-popup{z-index:1001!important}::ng-deep .fr-video-by-url-layer .fr-checkbox-line{display:none}.disabled-line{display:none;position:absolute;bottom:-1px;z-index:1;background-image:linear-gradient(90deg,rgba(0,0,0,.42) 0,rgba(0,0,0,.42) 33%,transparent 0);background-size:4px 100%;background-repeat:repeat-x;height:1px;width:100%}.bottom-line{opacity:0;transform-origin:50%;transform:scaleX(.5);transition:background-color .3s cubic-bezier(.55,0,.55,.2);width:100%;border-bottom:2px solid #949494;position:absolute;bottom:-1px;z-index:1}:host{position:relative;display:block}:host.focused .bottom-line{opacity:1;display:block;transform:scaleX(1);transition:transform .3s cubic-bezier(.25,.8,.25,1),opacity .1s cubic-bezier(.25,.8,.25,1),background-color .3s cubic-bezier(.25,.8,.25,1)}::ng-deep .fs-html-editor-mention-container{position:absolute;top:0;left:0;height:auto;max-height:300px;max-width:500px;overflow:auto;display:block;z-index:999999;box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);border-bottom-left-radius:4px;border-bottom-right-radius:4px;background:#fff}::ng-deep .fs-html-editor-mention-container ul{margin:0;padding:0;list-style:none}::ng-deep .fs-html-editor-mention-container li{padding:0 16px;cursor:pointer;line-height:48px}::ng-deep .fs-html-editor-mention-container li.highlight,::ng-deep .fs-html-editor-mention-container li:hover{background:#f5f5f5}::ng-deep .fs-html-editor-mention-container li.no-match{cursor:default}"]
602
608
  }),
603
609
  __param(0, Optional()), __param(0, Inject(FS_HTML_EDITOR_CONFIG)),
604
610
  __metadata("design:paramtypes", [Object, ChangeDetectorRef,
@@ -680,6 +686,7 @@ function FsHtmlEditorConfigFactory(config) {
680
686
  "url" /* Url */,
681
687
  "video" /* Video */,
682
688
  "draggable" /* Draggable */,
689
+ "font_size" /* FontSize */,
683
690
  ] }, config);
684
691
  }
685
692
 
@@ -1 +1 @@
1
- {"version":3,"file":"firestitch-html-editor.js","sources":["ng://@firestitch/html-editor/app/consts/rich-buttons.const.ts","ng://@firestitch/html-editor/app/consts/text-buttons.const.ts","ng://@firestitch/html-editor/app/consts/paragraph-buttons.const.ts","ng://@firestitch/html-editor/app/injects/config.inject.ts","ng://@firestitch/html-editor/app/utils/loader.ts","ng://@firestitch/html-editor/app/services/froala-loader.service.ts","ng://@firestitch/html-editor/app/components/html-editor/html-editor.component.ts","ng://@firestitch/html-editor/app/components/html-renderer/html-renderer.component.ts","ng://@firestitch/html-editor/app/fs-html-editor.module.ts","ng://@firestitch/html-editor/app/classes/plugin.ts","ng://@firestitch/html-editor/app/plugins/mention.plugin.ts","ng://@firestitch/html-editor/app/plugins/checklist.plugin.ts","ng://@firestitch/html-editor/app/plugins/code.plugin.ts","ng://@firestitch/html-editor/app/plugins/screen-record.plugin.ts","ng://@firestitch/html-editor/firestitch-html-editor.ts"],"sourcesContent":["export const RichButtons = [\n 'insertTable',\n 'insertImage',\n 'insertLink',\n 'insertVideo',\n];\n","export const TextButtons = [\n 'paragraphFormat',\n 'code',\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];\n","export const ParagraphButtons = [\n 'align',\n 'formatOL',\n 'formatUL',\n 'checklist',\n 'indent',\n 'outdent',\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 { Observable } from 'rxjs';\nimport { shareReplay } from 'rxjs/operators';\n\nfunction resourceLoaderFactory() {\n let resourceBase = '/assets/js/froala/';\n let stylesBase = '/assets/css/';\n\n const head = document.getElementsByTagName('head')[0];\n const files = new Map<string, Observable<unknown>>();\n\n const resourcePaths = {\n froala: 'froala_editor.min.js',\n align: 'plugins/align.min.js',\n colors: 'plugins/colors.min.js',\n image: 'plugins/image.min.js',\n link: 'plugins/link.min.js',\n lists: 'plugins/lists.min.js',\n paragraph_format: 'plugins/paragraph_format.min.js',\n table: 'plugins/table.min.js',\n url: 'plugins/url.min.js',\n video: 'plugins/video.min.js',\n quote: 'plugins/quote.min.js',\n draggable: 'plugins/draggable.min.js',\n }\n\n const stylesPaths = {\n froala: 'froala_editor.pkgd.min.css',\n }\n\n const loadResource = function (scriptPath: string): Observable<unknown> {\n if (!files.has(scriptPath)) {\n const obs$ = new Observable((obs) => {\n\n const script = document.createElement('script');\n script.src = scriptPath;\n\n head.appendChild(script);\n\n script.onload = () => {\n obs.next();\n obs.complete();\n };\n\n script.onerror = (err) => {\n obs.error(err);\n }\n })\n .pipe(\n shareReplay(1),\n );\n\n files.set(scriptPath, obs$);\n }\n\n return files.get(scriptPath);\n };\n\n const loadStyles = function (stylePath: string): Observable<unknown> {\n if (!files.has(stylePath)) {\n const obs$ = new Observable((obs) => {\n const style = document.createElement('link');\n style.id = stylePath;\n style.rel = 'stylesheet';\n style.href = `${stylePath}`;\n\n head.appendChild(style);\n\n style.onload = () => {\n obs.next();\n obs.complete();\n };\n\n style.onerror = (err) => {\n obs.error(err);\n }\n });\n\n files.set(stylePath, obs$);\n }\n\n return files.get(stylePath);\n };\n\n return {\n setResourceBase: (path: string) => {\n resourceBase = path;\n },\n setStylesBase: (path: string) => {\n stylesBase = path;\n },\n loadResource: (resourceName: string) => {\n const path = resourcePaths[resourceName] || resourceName;\n\n return loadResource(resourceBase + path);\n },\n loadStyles: (resourceName: string) => {\n const path = stylesPaths[resourceName] || resourceName;\n\n return loadStyles(stylesBase + path);\n }\n }\n}\n\n\nexport const ResourceLoader = resourceLoaderFactory();\n","import { Inject, Injectable, Optional } from '@angular/core';\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\nimport { ResourceLoader } from '../utils/loader';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FsFroalaLoaderService {\n\n private _FroalaEditor: unknown;\n\n private _froalaLoaded = new BehaviorSubject(false);\n private _defaultPluginsLoaded = new BehaviorSubject(false);\n\n private _ready$ = combineLatest([this._froalaLoaded, this._defaultPluginsLoaded])\n .pipe(\n map(([FroalaReady, pluginsRead]) => {\n return pluginsRead && FroalaReady;\n }),\n shareReplay(1),\n );\n\n constructor(\n @Optional() @Inject(FS_HTML_EDITOR_CONFIG) private _defaultConfig: FsHtmlEditorConfig,\n ) {\n if (this._defaultConfig) {\n if (this._defaultConfig.assetsJSPath) {\n ResourceLoader.setResourceBase(this._defaultConfig.assetsJSPath)\n }\n\n if (this._defaultConfig.assetsCSSPath) {\n ResourceLoader.setStylesBase(this._defaultConfig.assetsCSSPath)\n }\n }\n\n this._load();\n }\n\n public get ready$(): Observable<boolean> {\n return this._ready$;\n }\n\n public get ready(): boolean {\n return this._froalaLoaded.getValue() && this._defaultPluginsLoaded.getValue();\n }\n\n public get FroalaEditor(): any {\n return this._FroalaEditor;\n }\n\n private _load() {\n combineLatest([\n ResourceLoader.loadResource('froala'),\n ResourceLoader.loadStyles('froala')\n ])\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._defaultPluginsDone();\n }),\n )\n .subscribe();\n }\n\n private _loadPlugins(): Observable<unknown> {\n const imports = this._defaultConfig\n .defaultPlugins\n .reduce((acc, pluginName) => {\n const import$ = ResourceLoader.loadResource(pluginName);\n\n acc.push(import$);\n\n return acc;\n }, []);\n\n return combineLatest(imports);\n }\n\n private _froalaDone() {\n this._froalaLoaded.next(true);\n }\n\n private _defaultPluginsDone() {\n this._defaultPluginsLoaded.next(true);\n }\n}\n","import {\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 ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator\n} from '@angular/forms';\n\nimport { Observable, ReplaySubject, Subject } from 'rxjs';\nimport { filter, switchMap, takeUntil } from 'rxjs/operators';\n\nimport { merge } from 'lodash-es';\n\nimport { PluginButton } from './../../interfaces/plugin-button';\nimport { FsHtmlEditorConfig } from '../../interfaces/html-editor-config';\nimport { RichButtons } from './../../consts/rich-buttons.const';\nimport { TextButtons } from './../../consts/text-buttons.const';\nimport { ParagraphButtons } from './../../consts/paragraph-buttons.const';\n\nimport { FS_HTML_EDITOR_CONFIG } from '../../injects/config.inject';\nimport { Plugin } from './../../classes/plugin';\n\nimport { FsFroalaLoaderService } from '../../services/froala-loader.service';\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})\nexport class FsHtmlEditorComponent implements OnInit, AfterViewInit, ControlValueAccessor, Validator, OnDestroy {\n\n @HostBinding('class.focused') classFocused = false;\n @HostBinding('class.disabled') classDisabled = false;\n\n @ViewChild('elRef') public elRef: ElementRef;\n\n @Input() public config: FsHtmlEditorConfig = {};\n @Input() public ngModel: string;\n\n public initialized = false;\n\n private _editor: any;\n private _html: string;\n private _initialize$ = new ReplaySubject();\n private _destroy$ = new Subject();\n\n constructor(\n @Optional() @Inject(FS_HTML_EDITOR_CONFIG) private _defaultConfig,\n private _cdRef: ChangeDetectorRef,\n private _fr: FsFroalaLoaderService,\n ) { }\n\n public onChange = (data: any) => {}\n public onTouched = () => {}\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 froalaReady$(): Observable<boolean> {\n return this._fr.ready$;\n }\n\n public ngOnInit(): void {\n this.config = this.config || {};\n this.config.autofocus = this.config.autofocus !== false && !this.config.disabled;\n this.initialized = !this.config.initOnClick;\n this._listenLazyInit();\n }\n\n public ngAfterViewInit() {\n this._html = this.ngModel || '';\n if (!this.config.initOnClick || !this.hasContent()) {\n this.initialized = true;\n this._initialize$.next();\n }\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 return !!el.innerText.length;\n }\n\n public initialize(options: any = {}) {\n const config = this._createConfig();\n\n this._initPlugins(config);\n this.el.innerHTML = this._html;\n\n this._editor = new this._fr.FroalaEditor(this.el, this._createOptions(), () => {\n this._cdRef.markForCheck();\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('contentChanged', () => {\n this._change(this._editor.html.get());\n });\n\n this._editor.events.on('paste.afterCleanup', (html) => {\n var div = document.createElement('div');\n div.innerHTML = html;\n div.querySelectorAll('*')\n .forEach((el) => {\n for (var 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 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 .subscribe((url) => {\n image.setAttribute('src', url);\n image.removeAttribute('data-fr-image-pasted');\n });\n });\n });\n\n return false;\n });\n\n this._editor.events.on('image.beforeUpload', (blobs) => {\n this._processImageUpload(blobs[0]).subscribe((url) => {\n this.editor.image.insert(url, null, null, this.editor.image.get());\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 const selection = options.selection;\n\n if (selection) {\n const node: any = Array.from(this.el.querySelectorAll('.fr-element *')).find((node: any) => {\n return selection.node === node.textContent;\n });\n\n if (node) {\n const range = document.createRange();\n const sel = window.getSelection();\n\n range.setStart(this._getTextNode(node), selection.offset);\n range.collapse(true)\n\n sel.removeAllRanges();\n sel.addRange(range);\n } else if (this.config.autofocus) {\n this.focus();\n }\n } else if (this.config.autofocus) {\n this.focus();\n }\n\n });\n }\n\n private _processImageUpload(blob) {\n return this.config.image.upload(blob)\n .pipe(\n takeUntil(this._destroy$),\n );\n }\n\n private _getTextNode(node) {\n if (node) {\n if (node.nodeType === Node.TEXT_NODE) {\n return node;\n }\n if (node.childNodes) {\n return this._getTextNode(node.childNodes[0]);\n }\n }\n }\n\n public uninitializedClick(event: UIEvent): void {\n if (!event.defaultPrevented) {\n const target: any = event.target;\n if (target && target.nodeName === 'A' && target.getAttribute('href')) {\n const targetTarget = target.getAttribute('target');\n target.setAttribute('target', '_blank');\n setTimeout(() => {\n if (targetTarget) {\n target.setAttribute('target', targetTarget);\n } else {\n target.removeAttribute('target');\n }\n });\n } else {\n if (this.config.initClick) {\n this.config.initClick(event);\n }\n this._initialize$.next();\n this.initialized = true;\n }\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\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.classDisabled = true;\n }\n\n public setHtml(html) {\n this.writeValue(html);\n }\n\n public writeValue(html: string): void {\n this._html = html || '';\n this._cdRef.markForCheck();\n if (this.editor && this.editor.html) {\n try {\n this.editor.html.set(this._html);\n } catch (e) {\n }\n }\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 this.initialized = false;\n this._cdRef.markForCheck();\n this.el.innerHTML = '';\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 _initPlugins(config) {\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 return plugin;\n };\n\n (plugin.config.buttons || []).forEach((button: PluginButton) => {\n this._fr.FroalaEditor.DefineIcon(button.name, {\n NAME: button.name,\n PATH: button.svgPath,\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: function () {\n if (button.click) {\n button.click(this);\n }\n },\n refresh: function (button) {\n if (button.refresh) {\n button.refresh(this, button);\n }\n }\n });\n });\n\n });\n }\n\n private _createOptions() {\n const config = this._createConfig();\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 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 paragraphDefaultSelection: 'Format',\n videoUpload: false,\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 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 this.froalaReady$\n .pipe(\n filter((ready) => ready),\n switchMap(() => this._initialize$)\n )\n .subscribe(() => {\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 }\n}\n","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","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FsSkeletonModule } from '@firestitch/skeleton';\n\nimport { FsHtmlEditorComponent } from './components/html-editor/html-editor.component';\nimport { FsHtmlRendererComponent } from './components/html-renderer/html-renderer.component';\nimport { FsHtmlEditorConfig } from './interfaces/html-editor-config';\nimport { FS_HTML_EDITOR_CONFIG, FS_HTML_EDITOR_DEFAULT_CONFIG } from './injects/config.inject';\nimport { DefaultPlugin } from './enums/default-plugin.enum';\n\n\n@NgModule({\n imports: [\n CommonModule,\n FsSkeletonModule,\n ],\n exports: [\n FsHtmlEditorComponent,\n FsHtmlRendererComponent,\n ],\n declarations: [\n FsHtmlEditorComponent,\n FsHtmlRendererComponent,\n ],\n})\nexport class FsHtmlEditorModule {\n 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 defaultPlugins: [\n DefaultPlugin.Align,\n DefaultPlugin.Colors,\n DefaultPlugin.Image,\n DefaultPlugin.Link,\n DefaultPlugin.Lists,\n DefaultPlugin.ParagraphFormat,\n DefaultPlugin.Quote,\n DefaultPlugin.Table,\n DefaultPlugin.Url,\n DefaultPlugin.Video,\n DefaultPlugin.Draggable,\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 { debounce } from 'lodash-es';\nimport Tribute, { TributeItem } from 'tributejs';\n\nimport { MentionPluginConfig } from './configs/mention-plugin.config';\n\nimport { Plugin } from '../classes/plugin';\n\n\nexport class MentionPlugin extends Plugin {\n\n private static _tributes = [];\n private _tribute;\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 public destroy() {}\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 return this.config.fetch(keyword)\n .subscribe((data) => {\n cb(data);\n });\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 { ScreenRecordPluginConfig } from './configs/screen-record-plugin.config';\nimport { Plugin } from '../classes/plugin';\nimport { ResourceLoader } from '../utils/loader';\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 await ResourceLoader.loadStyles('froala')\n .toPromise();\n\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\nexport {Plugin as ɵe} from './app/classes/plugin';\nexport {DefaultPlugin as ɵd} from './app/enums/default-plugin.enum';\nexport {FsHtmlEditorConfigFactory as ɵa} from './app/fs-html-editor.module';\nexport {FS_HTML_EDITOR_DEFAULT_CONFIG as ɵb} from './app/injects/config.inject';\nexport {FsFroalaLoaderService as ɵc} from './app/services/froala-loader.service';"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"firestitch-html-editor.js","sources":["ng://@firestitch/html-editor/app/consts/rich-buttons.const.ts","ng://@firestitch/html-editor/app/consts/text-buttons.const.ts","ng://@firestitch/html-editor/app/consts/paragraph-buttons.const.ts","ng://@firestitch/html-editor/app/injects/config.inject.ts","ng://@firestitch/html-editor/app/utils/loader.ts","ng://@firestitch/html-editor/app/services/froala-loader.service.ts","ng://@firestitch/html-editor/app/components/html-editor/html-editor.component.ts","ng://@firestitch/html-editor/app/components/html-renderer/html-renderer.component.ts","ng://@firestitch/html-editor/app/fs-html-editor.module.ts","ng://@firestitch/html-editor/app/classes/plugin.ts","ng://@firestitch/html-editor/app/plugins/mention.plugin.ts","ng://@firestitch/html-editor/app/plugins/checklist.plugin.ts","ng://@firestitch/html-editor/app/plugins/code.plugin.ts","ng://@firestitch/html-editor/app/plugins/screen-record.plugin.ts","ng://@firestitch/html-editor/firestitch-html-editor.ts"],"sourcesContent":["export const RichButtons = [\n 'insertTable',\n 'insertImage',\n 'insertLink',\n 'insertVideo',\n];\n","export const TextButtons = [\n 'paragraphFormat',\n 'code',\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];\n","export const ParagraphButtons = [\n 'align',\n 'formatOL',\n 'formatUL',\n 'checklist',\n 'indent',\n 'outdent',\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 { Observable } from 'rxjs';\nimport { shareReplay } from 'rxjs/operators';\n\nfunction resourceLoaderFactory() {\n let resourceBase = '/assets/js/froala/';\n let stylesBase = '/assets/css/';\n\n const head = document.getElementsByTagName('head')[0];\n const files = new Map<string, Observable<unknown>>();\n\n const resourcePaths = {\n froala: 'froala_editor.min.js',\n align: 'plugins/align.min.js',\n colors: 'plugins/colors.min.js',\n image: 'plugins/image.min.js',\n link: 'plugins/link.min.js',\n lists: 'plugins/lists.min.js',\n paragraph_format: 'plugins/paragraph_format.min.js',\n table: 'plugins/table.min.js',\n url: 'plugins/url.min.js',\n video: 'plugins/video.min.js',\n quote: 'plugins/quote.min.js',\n draggable: 'plugins/draggable.min.js',\n font_size: 'plugins/font_size.min.js',\n }\n\n const stylesPaths = {\n froala: 'froala_editor.pkgd.min.css',\n }\n\n const loadResource = function (scriptPath: string): Observable<unknown> {\n if (!files.has(scriptPath)) {\n const obs$ = new Observable((obs) => {\n\n const script = document.createElement('script');\n script.src = scriptPath;\n\n head.appendChild(script);\n\n script.onload = () => {\n obs.next();\n obs.complete();\n };\n\n script.onerror = (err) => {\n obs.error(err);\n }\n })\n .pipe(\n shareReplay(1),\n );\n\n files.set(scriptPath, obs$);\n }\n\n return files.get(scriptPath);\n };\n\n const loadStyles = function (stylePath: string): Observable<unknown> {\n if (!files.has(stylePath)) {\n const obs$ = new Observable((obs) => {\n const style = document.createElement('link');\n style.id = stylePath;\n style.rel = 'stylesheet';\n style.href = `${stylePath}`;\n\n head.appendChild(style);\n\n style.onload = () => {\n obs.next();\n obs.complete();\n };\n\n style.onerror = (err) => {\n obs.error(err);\n }\n });\n\n files.set(stylePath, obs$);\n }\n\n return files.get(stylePath);\n };\n\n return {\n setResourceBase: (path: string) => {\n resourceBase = path;\n },\n setStylesBase: (path: string) => {\n stylesBase = path;\n },\n loadResource: (resourceName: string) => {\n const path = resourcePaths[resourceName] || resourceName;\n\n return loadResource(resourceBase + path);\n },\n loadStyles: (resourceName: string) => {\n const path = stylesPaths[resourceName] || resourceName;\n\n return loadStyles(stylesBase + path);\n }\n }\n}\n\n\nexport const ResourceLoader = resourceLoaderFactory();\n","import { Inject, Injectable, Optional } from '@angular/core';\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\nimport { ResourceLoader } from '../utils/loader';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FsFroalaLoaderService {\n\n private _FroalaEditor: unknown;\n\n private _froalaLoaded = new BehaviorSubject(false);\n private _defaultPluginsLoaded = new BehaviorSubject(false);\n\n private _ready$ = combineLatest([this._froalaLoaded, this._defaultPluginsLoaded])\n .pipe(\n map(([FroalaReady, pluginsRead]) => {\n return pluginsRead && FroalaReady;\n }),\n shareReplay(1),\n );\n\n constructor(\n @Optional() @Inject(FS_HTML_EDITOR_CONFIG) private _defaultConfig: FsHtmlEditorConfig,\n ) {\n if (this._defaultConfig) {\n if (this._defaultConfig.assetsJSPath) {\n ResourceLoader.setResourceBase(this._defaultConfig.assetsJSPath)\n }\n\n if (this._defaultConfig.assetsCSSPath) {\n ResourceLoader.setStylesBase(this._defaultConfig.assetsCSSPath)\n }\n }\n\n this._load();\n }\n\n public get ready$(): Observable<boolean> {\n return this._ready$;\n }\n\n public get ready(): boolean {\n return this._froalaLoaded.getValue() && this._defaultPluginsLoaded.getValue();\n }\n\n public get FroalaEditor(): any {\n return this._FroalaEditor;\n }\n\n private _load() {\n combineLatest([\n ResourceLoader.loadResource('froala'),\n ResourceLoader.loadStyles('froala')\n ])\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._defaultPluginsDone();\n }),\n )\n .subscribe();\n }\n\n private _loadPlugins(): Observable<unknown> {\n const imports = this._defaultConfig\n .defaultPlugins\n .reduce((acc, pluginName) => {\n const import$ = ResourceLoader.loadResource(pluginName);\n\n acc.push(import$);\n\n return acc;\n }, []);\n\n return combineLatest(imports);\n }\n\n private _froalaDone() {\n this._froalaLoaded.next(true);\n }\n\n private _defaultPluginsDone() {\n this._defaultPluginsLoaded.next(true);\n }\n}\n","import {\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 ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator\n} from '@angular/forms';\n\nimport { Observable, ReplaySubject, Subject } from 'rxjs';\nimport { filter, switchMap, takeUntil } from 'rxjs/operators';\n\nimport { merge } from 'lodash-es';\n\nimport { PluginButton } from './../../interfaces/plugin-button';\nimport { FsHtmlEditorConfig } from '../../interfaces/html-editor-config';\nimport { RichButtons } from './../../consts/rich-buttons.const';\nimport { TextButtons } from './../../consts/text-buttons.const';\nimport { ParagraphButtons } from './../../consts/paragraph-buttons.const';\n\nimport { FS_HTML_EDITOR_CONFIG } from '../../injects/config.inject';\nimport { Plugin } from './../../classes/plugin';\n\nimport { FsFroalaLoaderService } from '../../services/froala-loader.service';\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})\nexport class FsHtmlEditorComponent implements OnInit, AfterViewInit, ControlValueAccessor, Validator, OnDestroy {\n\n @HostBinding('class.focused') classFocused = false;\n @HostBinding('class.disabled') classDisabled = false;\n\n @ViewChild('elRef') public elRef: ElementRef;\n\n @Input() public config: FsHtmlEditorConfig = {};\n\n public initialized = false;\n\n private _editor: any;\n private _html: string;\n private _initialize$ = new ReplaySubject();\n private _destroy$ = new Subject();\n\n constructor(\n @Optional() @Inject(FS_HTML_EDITOR_CONFIG) private _defaultConfig,\n private _cdRef: ChangeDetectorRef,\n private _fr: FsFroalaLoaderService,\n ) { }\n\n public onChange = (data: any) => {}\n public onTouched = () => {}\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 froalaReady$(): Observable<boolean> {\n return this._fr.ready$;\n }\n\n public ngOnInit(): void {\n this.config = this.config || {};\n this.config.autofocus = this.config.autofocus !== false && !this.config.disabled;\n this.initialized = !this.config.initOnClick;\n this._listenLazyInit();\n }\n\n public ngAfterViewInit() {\n if (!this.config.initOnClick || !this.hasContent()) {\n this.initialized = true;\n this._initialize$.next();\n }\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 return !!el.innerText.length;\n }\n\n public initialize(options: any = {}) {\n const config = this._createConfig();\n\n this._initPlugins(config);\n this.el.innerHTML = this._html;\n\n this._editor = new this._fr.FroalaEditor(this.el, this._createOptions(), () => {\n this._cdRef.markForCheck();\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('contentChanged', () => {\n const editorHTML = this._editor.html.get();\n\n if (this.html !== editorHTML) {\n this._change(editorHTML);\n }\n });\n\n this._editor.events.on('paste.afterCleanup', (html) => {\n var div = document.createElement('div');\n div.innerHTML = html;\n div.querySelectorAll('*')\n .forEach((el) => {\n for (var 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 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 .subscribe((url) => {\n image.setAttribute('src', url);\n image.removeAttribute('data-fr-image-pasted');\n });\n });\n });\n\n return false;\n });\n\n this._editor.events.on('image.beforeUpload', (blobs) => {\n this._processImageUpload(blobs[0]).subscribe((url) => {\n this.editor.image.insert(url, null, null, this.editor.image.get());\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 const selection = options.selection;\n\n if (selection) {\n const node: any = Array.from(this.el.querySelectorAll('.fr-element *')).find((node: any) => {\n return selection.node === node.textContent;\n });\n\n if (node) {\n const range = document.createRange();\n const sel = window.getSelection();\n\n range.setStart(this._getTextNode(node), selection.offset);\n range.collapse(true)\n\n sel.removeAllRanges();\n sel.addRange(range);\n } else if (this.config.autofocus) {\n this.focus();\n }\n } else if (this.config.autofocus) {\n this.focus();\n }\n\n });\n }\n\n private _processImageUpload(blob) {\n return this.config.image.upload(blob)\n .pipe(\n takeUntil(this._destroy$),\n );\n }\n\n private _getTextNode(node) {\n if (node) {\n if (node.nodeType === Node.TEXT_NODE) {\n return node;\n }\n if (node.childNodes) {\n return this._getTextNode(node.childNodes[0]);\n }\n }\n }\n\n public uninitializedClick(event: UIEvent): void {\n if (!event.defaultPrevented) {\n const target: any = event.target;\n if (target && target.nodeName === 'A' && target.getAttribute('href')) {\n const targetTarget = target.getAttribute('target');\n target.setAttribute('target', '_blank');\n setTimeout(() => {\n if (targetTarget) {\n target.setAttribute('target', targetTarget);\n } else {\n target.removeAttribute('target');\n }\n });\n } else {\n if (this.config.initClick) {\n this.config.initClick(event);\n }\n this._initialize$.next();\n this.initialized = true;\n }\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\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.classDisabled = 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 this._cdRef.markForCheck();\n // SP-T2298 timeout needed for the case, when froala was already initated and\n // second instance opened in dialog/drawer. In this case init step pass much faster, writeValue trigger\n // after init and froala ignore new html. At the same time froala was initied but editor not yet, and next\n // code doesn't work without timeout. We've got time range when too late for initiate value, and to early\n // for change event.\n setTimeout(() => {\n if (this.editor && this.editor.html) {\n try {\n this.editor.html.set(this._html);\n } catch (e) {\n }\n }\n });\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 this.initialized = false;\n this._cdRef.markForCheck();\n this.el.innerHTML = '';\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 _initPlugins(config) {\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 return plugin;\n };\n\n (plugin.config.buttons || []).forEach((button: PluginButton) => {\n this._fr.FroalaEditor.DefineIcon(button.name, {\n NAME: button.name,\n PATH: button.svgPath,\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: function () {\n if (button.click) {\n button.click(this);\n }\n },\n refresh: function (button) {\n if (button.refresh) {\n button.refresh(this, button);\n }\n }\n });\n });\n\n });\n }\n\n private _createOptions() {\n const config = this._createConfig();\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 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 paragraphDefaultSelection: 'Format',\n videoUpload: false,\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 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 this.froalaReady$\n .pipe(\n filter((ready) => ready),\n switchMap(() => this._initialize$)\n )\n .subscribe(() => {\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 }\n}\n","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","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FsSkeletonModule } from '@firestitch/skeleton';\n\nimport { FsHtmlEditorComponent } from './components/html-editor/html-editor.component';\nimport { FsHtmlRendererComponent } from './components/html-renderer/html-renderer.component';\nimport { FsHtmlEditorConfig } from './interfaces/html-editor-config';\nimport { FS_HTML_EDITOR_CONFIG, FS_HTML_EDITOR_DEFAULT_CONFIG } from './injects/config.inject';\nimport { DefaultPlugin } from './enums/default-plugin.enum';\n\n\n@NgModule({\n imports: [\n CommonModule,\n FsSkeletonModule,\n ],\n exports: [\n FsHtmlEditorComponent,\n FsHtmlRendererComponent,\n ],\n declarations: [\n FsHtmlEditorComponent,\n FsHtmlRendererComponent,\n ],\n})\nexport class FsHtmlEditorModule {\n 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 defaultPlugins: [\n DefaultPlugin.Align,\n DefaultPlugin.Colors,\n DefaultPlugin.Image,\n DefaultPlugin.Link,\n DefaultPlugin.Lists,\n DefaultPlugin.ParagraphFormat,\n DefaultPlugin.Quote,\n DefaultPlugin.Table,\n DefaultPlugin.Url,\n DefaultPlugin.Video,\n DefaultPlugin.Draggable,\n DefaultPlugin.FontSize,\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 { debounce } from 'lodash-es';\nimport Tribute, { TributeItem } from 'tributejs';\n\nimport { MentionPluginConfig } from './configs/mention-plugin.config';\n\nimport { Plugin } from '../classes/plugin';\n\n\nexport class MentionPlugin extends Plugin {\n\n private static _tributes = [];\n private _tribute;\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 public destroy() {}\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 return this.config.fetch(keyword)\n .subscribe((data) => {\n cb(data);\n });\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 { ScreenRecordPluginConfig } from './configs/screen-record-plugin.config';\nimport { Plugin } from '../classes/plugin';\nimport { ResourceLoader } from '../utils/loader';\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 await ResourceLoader.loadStyles('froala')\n .toPromise();\n\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\nexport {Plugin as ɵe} from './app/classes/plugin';\nexport {DefaultPlugin as ɵd} from './app/enums/default-plugin.enum';\nexport {FsHtmlEditorConfigFactory as ɵa} from './app/fs-html-editor.module';\nexport {FS_HTML_EDITOR_DEFAULT_CONFIG as ɵb} from './app/injects/config.inject';\nexport {FsFroalaLoaderService as ɵc} from './app/services/froala-loader.service';"],"names":[],"mappings":"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"}
@@ -65,6 +65,7 @@ function resourceLoaderFactory() {
65
65
  video: 'plugins/video.min.js',
66
66
  quote: 'plugins/quote.min.js',
67
67
  draggable: 'plugins/draggable.min.js',
68
+ font_size: 'plugins/font_size.min.js',
68
69
  };
69
70
  var stylesPaths = {
70
71
  froala: 'froala_editor.pkgd.min.css',
@@ -264,7 +265,6 @@ var FsHtmlEditorComponent = /** @class */ (function () {
264
265
  this._listenLazyInit();
265
266
  };
266
267
  FsHtmlEditorComponent.prototype.ngAfterViewInit = function () {
267
- this._html = this.ngModel || '';
268
268
  if (!this.config.initOnClick || !this.hasContent()) {
269
269
  this.initialized = true;
270
270
  this._initialize$.next();
@@ -303,7 +303,10 @@ var FsHtmlEditorComponent = /** @class */ (function () {
303
303
  _this._cdRef.markForCheck();
304
304
  });
305
305
  _this._editor.events.on('contentChanged', function () {
306
- _this._change(_this._editor.html.get());
306
+ var editorHTML = _this._editor.html.get();
307
+ if (_this.html !== editorHTML) {
308
+ _this._change(editorHTML);
309
+ }
307
310
  });
308
311
  _this._editor.events.on('paste.afterCleanup', function (html) {
309
312
  var div = document.createElement('div');
@@ -446,15 +449,23 @@ var FsHtmlEditorComponent = /** @class */ (function () {
446
449
  this.writeValue(html);
447
450
  };
448
451
  FsHtmlEditorComponent.prototype.writeValue = function (html) {
452
+ var _this = this;
449
453
  this._html = html || '';
450
454
  this._cdRef.markForCheck();
451
- if (this.editor && this.editor.html) {
452
- try {
453
- this.editor.html.set(this._html);
454
- }
455
- catch (e) {
455
+ // SP-T2298 timeout needed for the case, when froala was already initated and
456
+ // second instance opened in dialog/drawer. In this case init step pass much faster, writeValue trigger
457
+ // after init and froala ignore new html. At the same time froala was initied but editor not yet, and next
458
+ // code doesn't work without timeout. We've got time range when too late for initiate value, and to early
459
+ // for change event.
460
+ setTimeout(function () {
461
+ if (_this.editor && _this.editor.html) {
462
+ try {
463
+ _this.editor.html.set(_this._html);
464
+ }
465
+ catch (e) {
466
+ }
456
467
  }
457
- }
468
+ });
458
469
  };
459
470
  FsHtmlEditorComponent.prototype.registerOnChange = function (fn) {
460
471
  this.onChange = fn;
@@ -612,10 +623,6 @@ var FsHtmlEditorComponent = /** @class */ (function () {
612
623
  Input(),
613
624
  __metadata("design:type", Object)
614
625
  ], FsHtmlEditorComponent.prototype, "config", void 0);
615
- __decorate([
616
- Input(),
617
- __metadata("design:type", String)
618
- ], FsHtmlEditorComponent.prototype, "ngModel", void 0);
619
626
  FsHtmlEditorComponent = FsHtmlEditorComponent_1 = __decorate([
620
627
  Component({
621
628
  selector: 'fs-html-editor',
@@ -633,7 +640,7 @@ var FsHtmlEditorComponent = /** @class */ (function () {
633
640
  },
634
641
  ],
635
642
  changeDetection: ChangeDetectionStrategy.OnPush,
636
- styles: [":host ::ng-deep .fr-box.fr-basic .fr-wrapper{border:0;border-bottom:1px solid #949494;margin-bottom:1px;background-color:transparent}:host ::ng-deep .fr-box.fr-basic .fr-element{padding:0;font-family:inherit;color:inherit;font-size:inherit;line-height:inherit;min-height:auto}:host ::ng-deep .fr-dropdown-menu .fr-dropdown-wrapper,:host ::ng-deep .fr-dropdown:after,:host ::ng-deep .fr-more-toolbar,:host ::ng-deep .fr-toolbar{transition:none!important}:host ::ng-deep .fr-toolbar{position:-webkit-sticky;position:sticky;z-index:2;border-radius:0;background-color:transparent}:host ::ng-deep .fr-toolbar .fr-btn-grp{margin:0 20px 0 0;position:relative}:host ::ng-deep .fr-toolbar .fr-btn-grp:nth-child(1):after,:host ::ng-deep .fr-toolbar .fr-btn-grp:nth-child(2):after{content:\"\";position:absolute;top:9px;height:30px;border-left:1px solid #e5e5e5;margin-left:10px}:host ::ng-deep .fr-toolbar div:first-of-type:before{border:none}:host ::ng-deep .fr-toolbar.fr-toolbar-open .fr-newline{height:auto}:host ::ng-deep .fr-toolbar .fr-btn-grp:first-child{margin-left:0}:host ::ng-deep .fr-toolbar.fr-top{border:0}:host ::ng-deep .fr-toolbar .fr-newline{margin:0}:host ::ng-deep .fr-toolbar .fr-more-toolbar{z-index:auto}:host ::ng-deep .fr-toolbar .fr-command.fr-btn{z-index:auto}:host ::ng-deep .fr-toolbar .fr-command.fr-btn.fr-dropdown:after{right:3px}:host ::ng-deep .fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-selection:after{right:10px}:host ::ng-deep .fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-selection span{margin-right:24px}:host ::ng-deep .fr-toolbar .fr-command.fr-btn.fr-open{border-radius:4px;margin:4px 2px}:host ::ng-deep .fr-view ol,:host ::ng-deep .fr-view ul{list-style-position:unset}:host.disabled ::ng-deep .fr-box.fr-basic{opacity:.5;pointer-events:none}:host.disabled ::ng-deep .fr-box.fr-basic .fr-wrapper{border:none}:host.disabled ::ng-deep .disabled-line{display:block}::ng-deep .fr-popup{z-index:1001!important}::ng-deep .fr-video-by-url-layer .fr-checkbox-line{display:none}.disabled-line{display:none;position:absolute;bottom:-1px;z-index:1;background-image:linear-gradient(90deg,rgba(0,0,0,.42) 0,rgba(0,0,0,.42) 33%,transparent 0);background-size:4px 100%;background-repeat:repeat-x;height:1px;width:100%}.bottom-line{opacity:0;transform-origin:50%;transform:scaleX(.5);transition:background-color .3s cubic-bezier(.55,0,.55,.2);width:100%;border-bottom:2px solid #949494;position:absolute;bottom:-1px;z-index:1}:host{position:relative;display:block}:host.focused .bottom-line{opacity:1;display:block;transform:scaleX(1);transition:transform .3s cubic-bezier(.25,.8,.25,1),opacity .1s cubic-bezier(.25,.8,.25,1),background-color .3s cubic-bezier(.25,.8,.25,1)}::ng-deep .fs-html-editor-mention-container{position:absolute;top:0;left:0;height:auto;max-height:300px;max-width:500px;overflow:auto;display:block;z-index:999999;box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);border-bottom-left-radius:4px;border-bottom-right-radius:4px;background:#fff}::ng-deep .fs-html-editor-mention-container ul{margin:0;padding:0;list-style:none}::ng-deep .fs-html-editor-mention-container li{padding:0 16px;cursor:pointer;line-height:48px}::ng-deep .fs-html-editor-mention-container li.highlight,::ng-deep .fs-html-editor-mention-container li:hover{background:#f5f5f5}::ng-deep .fs-html-editor-mention-container li.no-match{cursor:default}"]
643
+ styles: [":host ::ng-deep .fr-box.fr-basic .fr-wrapper{border:0;border-bottom:1px solid #949494;margin-bottom:1px;background-color:transparent}:host ::ng-deep .fr-box.fr-basic .fr-element{padding:0;font-family:inherit;color:inherit;font-size:inherit;line-height:inherit;min-height:auto}:host ::ng-deep .fr-dropdown-menu .fr-dropdown-wrapper,:host ::ng-deep .fr-dropdown:after,:host ::ng-deep .fr-more-toolbar,:host ::ng-deep .fr-toolbar{transition:none!important}:host ::ng-deep .fr-toolbar{position:-webkit-sticky;position:sticky;z-index:2;border-radius:0;background-color:transparent}:host ::ng-deep .fr-toolbar .fr-btn-grp{margin:0 20px 0 0;position:relative}:host ::ng-deep .fr-toolbar .fr-btn-grp:nth-child(1):after,:host ::ng-deep .fr-toolbar .fr-btn-grp:nth-child(2):after{content:\"\";position:absolute;top:9px;height:30px;border-left:1px solid #e5e5e5;margin-left:10px}:host ::ng-deep .fr-toolbar div:first-of-type:before{border:none}:host ::ng-deep .fr-toolbar.fr-toolbar-open .fr-newline{height:auto}:host ::ng-deep .fr-toolbar .fr-btn-grp:first-child{margin-left:0}:host ::ng-deep .fr-toolbar.fr-top{border:0}:host ::ng-deep .fr-toolbar .fr-newline{margin:0}:host ::ng-deep .fr-toolbar .fr-more-toolbar{z-index:auto}:host ::ng-deep .fr-toolbar .fr-command.fr-btn{z-index:auto}:host ::ng-deep .fr-toolbar .fr-command.fr-btn.fr-dropdown:after{right:3px}:host ::ng-deep .fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-selection span{margin-right:24px}:host ::ng-deep .fr-toolbar .fr-command.fr-btn.fr-open{border-radius:4px;margin:4px 2px}:host ::ng-deep .fr-view ol,:host ::ng-deep .fr-view ul{list-style-position:unset}:host.disabled ::ng-deep .fr-box.fr-basic{opacity:.5;pointer-events:none}:host.disabled ::ng-deep .fr-box.fr-basic .fr-wrapper{border:none}:host.disabled ::ng-deep .disabled-line{display:block}::ng-deep .fr-popup{z-index:1001!important}::ng-deep .fr-video-by-url-layer .fr-checkbox-line{display:none}.disabled-line{display:none;position:absolute;bottom:-1px;z-index:1;background-image:linear-gradient(90deg,rgba(0,0,0,.42) 0,rgba(0,0,0,.42) 33%,transparent 0);background-size:4px 100%;background-repeat:repeat-x;height:1px;width:100%}.bottom-line{opacity:0;transform-origin:50%;transform:scaleX(.5);transition:background-color .3s cubic-bezier(.55,0,.55,.2);width:100%;border-bottom:2px solid #949494;position:absolute;bottom:-1px;z-index:1}:host{position:relative;display:block}:host.focused .bottom-line{opacity:1;display:block;transform:scaleX(1);transition:transform .3s cubic-bezier(.25,.8,.25,1),opacity .1s cubic-bezier(.25,.8,.25,1),background-color .3s cubic-bezier(.25,.8,.25,1)}::ng-deep .fs-html-editor-mention-container{position:absolute;top:0;left:0;height:auto;max-height:300px;max-width:500px;overflow:auto;display:block;z-index:999999;box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);border-bottom-left-radius:4px;border-bottom-right-radius:4px;background:#fff}::ng-deep .fs-html-editor-mention-container ul{margin:0;padding:0;list-style:none}::ng-deep .fs-html-editor-mention-container li{padding:0 16px;cursor:pointer;line-height:48px}::ng-deep .fs-html-editor-mention-container li.highlight,::ng-deep .fs-html-editor-mention-container li:hover{background:#f5f5f5}::ng-deep .fs-html-editor-mention-container li.no-match{cursor:default}"]
637
644
  }),
638
645
  __param(0, Optional()), __param(0, Inject(FS_HTML_EDITOR_CONFIG)),
639
646
  __metadata("design:paramtypes", [Object, ChangeDetectorRef,
@@ -727,6 +734,7 @@ function FsHtmlEditorConfigFactory(config) {
727
734
  "url" /* Url */,
728
735
  "video" /* Video */,
729
736
  "draggable" /* Draggable */,
737
+ "font_size" /* FontSize */,
730
738
  ] }, config);
731
739
  }
732
740