@firestitch/html-editor 18.0.41 → 18.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/modules/html-editor/components/html-editor/html-editor.component.d.ts +3 -0
- package/app/modules/html-editor/enums/default-plugin.enum.d.ts +1 -0
- package/app/modules/html-editor/fs-html-editor.module.d.ts +1 -0
- package/app/modules/html-editor/interfaces/html-editor-config.d.ts +1 -0
- package/app/modules/html-editor/interfaces/toolbar-button.d.ts +2 -1
- package/app/modules/html-renderer/fs-html-renderer.module.d.ts +7 -0
- package/esm2022/app/modules/html-editor/components/html-editor/html-editor.component.mjs +48 -8
- package/esm2022/app/modules/html-editor/enums/default-plugin.enum.mjs +1 -1
- package/esm2022/app/modules/html-editor/fs-html-editor.module.mjs +2 -1
- package/esm2022/app/modules/html-editor/interfaces/html-editor-config.mjs +1 -1
- package/esm2022/app/modules/html-editor/interfaces/toolbar-button.mjs +1 -1
- package/esm2022/app/modules/html-editor/services/froala-loader.service.mjs +2 -1
- package/esm2022/app/modules/html-renderer/fs-html-renderer.module.mjs +20 -0
- package/esm2022/public_api.mjs +2 -1
- package/fesm2022/firestitch-html-editor.mjs +67 -8
- package/fesm2022/firestitch-html-editor.mjs.map +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +1 -0
- package/assets/frame.svg +0 -42
- package/styles.scss +0 -150
|
@@ -45,6 +45,7 @@ export class FsFroalaLoaderService {
|
|
|
45
45
|
froala_quote: `${baseDir}js/plugins/quote.min.js`,
|
|
46
46
|
froala_draggable: `${baseDir}js/plugins/draggable.min.js`,
|
|
47
47
|
froala_font_size: `${baseDir}js/plugins/font_size.min.js`,
|
|
48
|
+
froala_font_family: `${baseDir}js/plugins/font_family.min.js`,
|
|
48
49
|
froala_quick_insert: `${baseDir}js/plugins/quick_insert.min.js`,
|
|
49
50
|
froala_line_height: `${baseDir}js/plugins/line_height.min.js`,
|
|
50
51
|
});
|
|
@@ -80,4 +81,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
80
81
|
providedIn: 'root',
|
|
81
82
|
}]
|
|
82
83
|
}], ctorParameters: () => [] });
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvYWxhLWxvYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2h0bWwtZWRpdG9yL3NlcnZpY2VzL2Zyb2FsYS1sb2FkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXBELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdsRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFPakUsTUFBTSxPQUFPLHFCQUFxQjtJQUN4QixjQUFjLEdBQUcsTUFBTSxDQUFxQixxQkFBcUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZGLFNBQVMsR0FBRyxNQUFNLENBQVcsUUFBUSxDQUFDLENBQUM7SUFHdkMsYUFBYSxHQUFHLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLG9CQUFvQixHQUFHLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELGFBQWEsR0FBRyxjQUFjLENBQUM7SUFDL0IsYUFBYSxDQUFNO0lBRTNCLElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVPLFFBQVEsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQzlF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RE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IGZzU291cmNlTG9hZGVyIH0gZnJvbSAnQGZpcmVzdGl0Y2gvY29tbW9uJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjb25jYXRNYXAsIG1hcCwgc2hhcmVSZXBsYXksIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuXG5pbXBvcnQgeyBGU19IVE1MX0VESVRPUl9DT05GSUcgfSBmcm9tICcuLi9pbmplY3RzL2NvbmZpZy5pbmplY3QnO1xuaW1wb3J0IHsgRnNIdG1sRWRpdG9yQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9odG1sLWVkaXRvci1jb25maWcnO1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBGc0Zyb2FsYUxvYWRlclNlcnZpY2Uge1xuICBwcml2YXRlIF9kZWZhdWx0Q29uZmlnID0gaW5qZWN0PEZzSHRtbEVkaXRvckNvbmZpZz4oRlNfSFRNTF9FRElUT1JfQ09ORklHLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIF9kb2N1bWVudCA9IGluamVjdDxEb2N1bWVudD4oRE9DVU1FTlQpO1xuXG5cbiAgcHJpdmF0ZSBfZnJvYWxhTG9hZGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIHByaXZhdGUgX2Zyb2FsYVBsdWdpbnNMb2FkZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcHJpdmF0ZSBfc291cmNlTG9hZGVyID0gZnNTb3VyY2VMb2FkZXI7XG4gIHByaXZhdGUgX2Zyb2FsYUVkaXRvcjogYW55O1xuXG4gIHB1YmxpYyBnZXQgRnJvYWxhRWRpdG9yKCkge1xuICAgIHJldHVybiB0aGlzLl9mcm9hbGFFZGl0b3I7XG4gIH1cbiAgXG4gIHByaXZhdGUgX2xvYWRlZCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLl9mcm9hbGFMb2FkZWQsIHRoaXMuX2Zyb2FsYVBsdWdpbnNMb2FkZWRdKVxuICAgIC5waXBlKFxuICAgICAgbWFwKChbRnJvYWxhUmVhZHksIHBsdWdpbnNSZWFkXSkgPT4ge1xuICAgICAgICByZXR1cm4gcGx1Z2luc1JlYWQgJiYgRnJvYWxhUmVhZHk7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpLFxuICAgICk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fc291cmNlTG9hZGVyLnNldERvY3VtZW50KHRoaXMuX2RvY3VtZW50KTtcbiAgICB0aGlzLl9sb2FkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxvYWRlZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRlZCQ7XG4gIH1cblxuICBwcml2YXRlIF9sb2FkKCkge1xuICAgIGNvbnN0IGJhc2VEaXIgPSAnL2Fzc2V0cy9mcm9hbGEvJztcbiAgICB0aGlzLl9zb3VyY2VMb2FkZXIucmVnaXN0ZXJSZXNvdXJjZXMoe1xuICAgICAgZnJvYWxhOiBbXG4gICAgICAgIGAke2Jhc2VEaXJ9anMvZnJvYWxhX2VkaXRvci5taW4uanNgLFxuICAgICAgICBgJHtiYXNlRGlyfWNzcy9mcm9hbGFfZWRpdG9yLnBrZ2QubWluLmNzc2AsXG4gICAgICBdLFxuICAgICAgZnJvYWxhX2FsaWduOiBgJHtiYXNlRGlyfWpzL3BsdWdpbnMvYWxpZ24ubWluLmpzYCxcbiAgICAgIGZyb2FsYV9jb2xvcnM6IGAke2Jhc2VEaXJ9anMvcGx1Z2lucy9jb2xvcnMubWluLmpzYCxcbiAgICAgIGZyb2FsYV9pbWFnZTogYCR7YmFzZURpcn1qcy9wbHVnaW5zL2ltYWdlLm1pbi5qc2AsXG4gICAgICBmcm9hbGFfbGluazogYCR7YmFzZURpcn1qcy9wbHVnaW5zL2xpbmsubWluLmpzYCxcbiAgICAgIGZyb2FsYV9saXN0czogYCR7YmFzZURpcn1qcy9wbHVnaW5zL2xpc3RzLm1pbi5qc2AsXG4gICAgICBmcm9hbGFfcGFyYWdyYXBoX2Zvcm1hdDogYCR7YmFzZURpcn1qcy9wbHVnaW5zL3BhcmFncmFwaF9mb3JtYXQubWluLmpzYCxcbiAgICAgIGZyb2FsYV90YWJsZTogYCR7YmFzZURpcn1qcy9wbHVnaW5zL3RhYmxlLm1pbi5qc2AsXG4gICAgICBmcm9hbGFfdXJsOiBgJHtiYXNlRGlyfWpzL3BsdWdpbnMvdXJsLm1pbi5qc2AsXG4gICAgICBmcm9hbGFfdmlkZW86IGAke2Jhc2VEaXJ9anMvcGx1Z2lucy92aWRlby5taW4uanNgLFxuICAgICAgZnJvYWxhX3F1b3RlOiBgJHtiYXNlRGlyfWpzL3BsdWdpbnMvcXVvdGUubWluLmpzYCxcbiAgICAgIGZyb2FsYV9kcmFnZ2FibGU6IGAke2Jhc2VEaXJ9anMvcGx1Z2lucy9kcmFnZ2FibGUubWluLmpzYCxcbiAgICAgIGZyb2FsYV9mb250X3NpemU6IGAke2Jhc2VEaXJ9anMvcGx1Z2lucy9mb250X3NpemUubWluLmpzYCxcbiAgICAgIGZyb2FsYV9mb250X2ZhbWlseTogYCR7YmFzZURpcn1qcy9wbHVnaW5zL2ZvbnRfZmFtaWx5Lm1pbi5qc2AsXG4gICAgICBmcm9hbGFfcXVpY2tfaW5zZXJ0OiBgJHtiYXNlRGlyfWpzL3BsdWdpbnMvcXVpY2tfaW5zZXJ0Lm1pbi5qc2AsXG4gICAgICBmcm9hbGFfbGluZV9oZWlnaHQ6IGAke2Jhc2VEaXJ9anMvcGx1Z2lucy9saW5lX2hlaWdodC5taW4uanNgLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fc291cmNlTG9hZGVyLmxvYWRSZXNvdXJjZSgnZnJvYWxhJylcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2Zyb2FsYUVkaXRvciA9ICh3aW5kb3cgYXMgYW55KS5Gcm9hbGFFZGl0b3I7XG4gICAgICAgICAgdGhpcy5fZnJvYWxhRG9uZSgpO1xuICAgICAgICB9KSxcbiAgICAgICAgY29uY2F0TWFwKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFBsdWdpbnMoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZnJvYWxhUGx1Z2luc0RvbmUoKTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIF9sb2FkUGx1Z2lucygpOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICBjb25zdCByZXNvdXJjZXMgPSB0aGlzLl9kZWZhdWx0Q29uZmlnXG4gICAgICAuZnJvYWxhUGx1Z2luc1xuICAgICAgLm1hcCgocGx1Z2luTmFtZSkgPT4gYGZyb2FsYV8ke3BsdWdpbk5hbWV9YCk7XG5cbiAgICByZXR1cm4gdGhpcy5fc291cmNlTG9hZGVyLmxvYWRSZXNvdXJjZXMocmVzb3VyY2VzKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Zyb2FsYURvbmUoKSB7XG4gICAgdGhpcy5fZnJvYWxhTG9hZGVkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIF9mcm9hbGFQbHVnaW5zRG9uZSgpIHtcbiAgICB0aGlzLl9mcm9hbGFQbHVnaW5zTG9hZGVkLm5leHQodHJ1ZSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { FsHtmlRendererComponent } from './components/html-renderer/html-renderer.component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class FsHtmlRendererModule {
|
|
5
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsHtmlRendererModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
6
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: FsHtmlRendererModule, imports: [FsHtmlRendererComponent], exports: [FsHtmlRendererComponent] });
|
|
7
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsHtmlRendererModule });
|
|
8
|
+
}
|
|
9
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsHtmlRendererModule, decorators: [{
|
|
10
|
+
type: NgModule,
|
|
11
|
+
args: [{
|
|
12
|
+
imports: [
|
|
13
|
+
FsHtmlRendererComponent,
|
|
14
|
+
],
|
|
15
|
+
exports: [
|
|
16
|
+
FsHtmlRendererComponent,
|
|
17
|
+
],
|
|
18
|
+
}]
|
|
19
|
+
}] });
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMtaHRtbC1yZW5kZXJlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvaHRtbC1yZW5kZXJlci9mcy1odG1sLXJlbmRlcmVyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOztBQVU3RixNQUFNLE9BQU8sb0JBQW9CO3VHQUFwQixvQkFBb0I7d0dBQXBCLG9CQUFvQixZQU56Qix1QkFBdUIsYUFHdkIsdUJBQXVCO3dHQUdsQixvQkFBb0I7OzJGQUFwQixvQkFBb0I7a0JBUmhDLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFO3dCQUNMLHVCQUF1QjtxQkFDMUI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNMLHVCQUF1QjtxQkFDMUI7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBGc0h0bWxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9odG1sLXJlbmRlcmVyL2h0bWwtcmVuZGVyZXIuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIEZzSHRtbFJlbmRlcmVyQ29tcG9uZW50LFxuICAgIF0sXG4gICAgZXhwb3J0czogW1xuICAgICAgICBGc0h0bWxSZW5kZXJlckNvbXBvbmVudCxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGc0h0bWxSZW5kZXJlck1vZHVsZSB7fVxuIl19
|
package/esm2022/public_api.mjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { FsHtmlEditorModule } from './app/modules/html-editor/fs-html-editor.module';
|
|
2
|
+
export { FsHtmlRendererModule } from './app/modules/html-renderer/fs-html-renderer.module';
|
|
2
3
|
export { FsHtmlEditorComponent } from './app/modules/html-editor/components/html-editor/html-editor.component';
|
|
3
4
|
export { FsHtmlRendererComponent } from './app/modules/html-renderer/components/html-renderer/html-renderer.component';
|
|
4
5
|
export { FS_HTML_EDITOR_CONFIG } from './app/modules/html-editor/injects/config.inject';
|
|
@@ -10,4 +11,4 @@ export { RealtimePlugin } from './app/modules/html-editor/plugins/realtime.plugi
|
|
|
10
11
|
export { ScreenRecordPlugin } from './app/modules/html-editor/plugins/screen-record.plugin';
|
|
11
12
|
export { Plugin } from './app/modules/html-editor/classes/plugin';
|
|
12
13
|
export { FsHtmlEditorContainerDirective } from './app/modules/html-editor/directives';
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBRTNGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdFQUF3RSxDQUFDO0FBQy9HLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhFQUE4RSxDQUFDO0FBRXZILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBRXhGLGNBQWMsa0NBQWtDLENBQUM7QUFNakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUczRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDakYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ25GLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBRTVGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEZzSHRtbEVkaXRvck1vZHVsZSB9IGZyb20gJy4vYXBwL21vZHVsZXMvaHRtbC1lZGl0b3IvZnMtaHRtbC1lZGl0b3IubW9kdWxlJztcbmV4cG9ydCB7IEZzSHRtbFJlbmRlcmVyTW9kdWxlIH0gZnJvbSAnLi9hcHAvbW9kdWxlcy9odG1sLXJlbmRlcmVyL2ZzLWh0bWwtcmVuZGVyZXIubW9kdWxlJztcblxuZXhwb3J0IHsgRnNIdG1sRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9hcHAvbW9kdWxlcy9odG1sLWVkaXRvci9jb21wb25lbnRzL2h0bWwtZWRpdG9yL2h0bWwtZWRpdG9yLmNvbXBvbmVudCc7XG5leHBvcnQgeyBGc0h0bWxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vYXBwL21vZHVsZXMvaHRtbC1yZW5kZXJlci9jb21wb25lbnRzL2h0bWwtcmVuZGVyZXIvaHRtbC1yZW5kZXJlci5jb21wb25lbnQnO1xuXG5leHBvcnQgeyBGU19IVE1MX0VESVRPUl9DT05GSUcgfSBmcm9tICcuL2FwcC9tb2R1bGVzL2h0bWwtZWRpdG9yL2luamVjdHMvY29uZmlnLmluamVjdCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vYXBwL21vZHVsZXMvaHRtbC1lZGl0b3IvY29uc3RzJztcblxuZXhwb3J0IHsgRnNIdG1sRWRpdG9yQ29uZmlnIH0gZnJvbSAnLi9hcHAvbW9kdWxlcy9odG1sLWVkaXRvci9pbnRlcmZhY2VzL2h0bWwtZWRpdG9yLWNvbmZpZyc7XG5leHBvcnQgeyBQbHVnaW5Db25maWcgfSBmcm9tICcuL2FwcC9tb2R1bGVzL2h0bWwtZWRpdG9yL2ludGVyZmFjZXMvcGx1Z2luLWNvbmZpZyc7XG5leHBvcnQgeyBUb29sYmFyQnV0dG9uIH0gZnJvbSAnLi9hcHAvbW9kdWxlcy9odG1sLWVkaXRvci9pbnRlcmZhY2VzL3Rvb2xiYXItYnV0dG9uJztcblxuZXhwb3J0IHsgQ2hlY2tsaXN0UGx1Z2luIH0gZnJvbSAnLi9hcHAvbW9kdWxlcy9odG1sLWVkaXRvci9wbHVnaW5zL2NoZWNrbGlzdC5wbHVnaW4nO1xuZXhwb3J0IHsgQ29kZVBsdWdpbiB9IGZyb20gJy4vYXBwL21vZHVsZXMvaHRtbC1lZGl0b3IvcGx1Z2lucy9jb2RlLnBsdWdpbic7XG5leHBvcnQgeyBNZW50aW9uUGx1Z2luQ29uZmlnIH0gZnJvbSAnLi9hcHAvbW9kdWxlcy9odG1sLWVkaXRvci9wbHVnaW5zL2NvbmZpZ3MvbWVudGlvbi1wbHVnaW4uY29uZmlnJztcbmV4cG9ydCB7IFNjcmVlblJlY29yZFBsdWdpbkNvbmZpZyB9IGZyb20gJy4vYXBwL21vZHVsZXMvaHRtbC1lZGl0b3IvcGx1Z2lucy9jb25maWdzL3NjcmVlbi1yZWNvcmQtcGx1Z2luLmNvbmZpZyc7XG5leHBvcnQgeyBNZW50aW9uUGx1Z2luIH0gZnJvbSAnLi9hcHAvbW9kdWxlcy9odG1sLWVkaXRvci9wbHVnaW5zL21lbnRpb24ucGx1Z2luJztcbmV4cG9ydCB7IFJlYWx0aW1lUGx1Z2luIH0gZnJvbSAnLi9hcHAvbW9kdWxlcy9odG1sLWVkaXRvci9wbHVnaW5zL3JlYWx0aW1lLnBsdWdpbic7XG5leHBvcnQgeyBTY3JlZW5SZWNvcmRQbHVnaW4gfSBmcm9tICcuL2FwcC9tb2R1bGVzL2h0bWwtZWRpdG9yL3BsdWdpbnMvc2NyZWVuLXJlY29yZC5wbHVnaW4nO1xuXG5leHBvcnQgeyBQbHVnaW4gfSBmcm9tICcuL2FwcC9tb2R1bGVzL2h0bWwtZWRpdG9yL2NsYXNzZXMvcGx1Z2luJztcbmV4cG9ydCB7IEZzSHRtbEVkaXRvckNvbnRhaW5lckRpcmVjdGl2ZSB9IGZyb20gJy4vYXBwL21vZHVsZXMvaHRtbC1lZGl0b3IvZGlyZWN0aXZlcyc7XG5cbiJdfQ==
|
|
@@ -138,6 +138,7 @@ class FsFroalaLoaderService {
|
|
|
138
138
|
froala_quote: `${baseDir}js/plugins/quote.min.js`,
|
|
139
139
|
froala_draggable: `${baseDir}js/plugins/draggable.min.js`,
|
|
140
140
|
froala_font_size: `${baseDir}js/plugins/font_size.min.js`,
|
|
141
|
+
froala_font_family: `${baseDir}js/plugins/font_family.min.js`,
|
|
141
142
|
froala_quick_insert: `${baseDir}js/plugins/quick_insert.min.js`,
|
|
142
143
|
froala_line_height: `${baseDir}js/plugins/line_height.min.js`,
|
|
143
144
|
});
|
|
@@ -174,6 +175,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
174
175
|
}]
|
|
175
176
|
}], ctorParameters: () => [] });
|
|
176
177
|
|
|
178
|
+
// Froala options that are whole lists or menus: a caller's value replaces the
|
|
179
|
+
// default rather than being merged into it.
|
|
180
|
+
const REPLACED_OPTIONS = [
|
|
181
|
+
'toolbarButtons', 'toolbarButtonsXS', 'paragraphFormat', 'fontFamily', 'fontSize', 'lineHeights', 'colorsText',
|
|
182
|
+
];
|
|
177
183
|
class FsHtmlEditorComponent {
|
|
178
184
|
_defaultConfig = inject(FS_HTML_EDITOR_CONFIG, { optional: true });
|
|
179
185
|
_cdRef = inject(ChangeDetectorRef);
|
|
@@ -184,6 +190,9 @@ class FsHtmlEditorComponent {
|
|
|
184
190
|
config = {};
|
|
185
191
|
disabled = false;
|
|
186
192
|
initialized = false;
|
|
193
|
+
get floating() {
|
|
194
|
+
return !!this.config?.floating;
|
|
195
|
+
}
|
|
187
196
|
containerID = `fs-html-editor-${guid('xxx')}`;
|
|
188
197
|
onTouched;
|
|
189
198
|
onChange;
|
|
@@ -370,8 +379,9 @@ class FsHtmlEditorComponent {
|
|
|
370
379
|
focus: button.focus ?? true,
|
|
371
380
|
undo: button.undo ?? true,
|
|
372
381
|
refreshAfterCallback: button.refreshAfterCallback ?? true,
|
|
373
|
-
|
|
374
|
-
|
|
382
|
+
...this._dropdown(button),
|
|
383
|
+
callback(command, value) {
|
|
384
|
+
button.click(this, value);
|
|
375
385
|
},
|
|
376
386
|
});
|
|
377
387
|
});
|
|
@@ -423,9 +433,10 @@ class FsHtmlEditorComponent {
|
|
|
423
433
|
focus: button.focus,
|
|
424
434
|
showOnMobile: button.showOnMobile,
|
|
425
435
|
refreshAfterCallback: button.refreshAfterCallback,
|
|
426
|
-
|
|
436
|
+
...this._dropdown(button),
|
|
437
|
+
callback(command, value) {
|
|
427
438
|
if (button.click) {
|
|
428
|
-
button.click(this);
|
|
439
|
+
button.click(this, value);
|
|
429
440
|
}
|
|
430
441
|
},
|
|
431
442
|
refresh(event) {
|
|
@@ -435,6 +446,12 @@ class FsHtmlEditorComponent {
|
|
|
435
446
|
},
|
|
436
447
|
});
|
|
437
448
|
}
|
|
449
|
+
// A button with options registers as a Froala dropdown of those choices.
|
|
450
|
+
_dropdown(button) {
|
|
451
|
+
return button.options
|
|
452
|
+
? { type: 'dropdown', options: button.options }
|
|
453
|
+
: {};
|
|
454
|
+
}
|
|
438
455
|
_buttonsToNames(buttons) {
|
|
439
456
|
return (buttons || [])
|
|
440
457
|
.map((item) => {
|
|
@@ -507,13 +524,34 @@ class FsHtmlEditorComponent {
|
|
|
507
524
|
paragraphFormatSelection: true,
|
|
508
525
|
toolbarButtons,
|
|
509
526
|
toolbarButtonsXS: ToolbarXsButtons,
|
|
527
|
+
...(config.floating ? this._floatingOptions() : {}),
|
|
510
528
|
};
|
|
511
529
|
const options = merge(
|
|
512
530
|
// For some reason editor store somewhere pointer on default config object and dublicate options each time on init
|
|
513
531
|
// Extra merge level fixed this problem and allow to init config properly without legacy data
|
|
514
532
|
{}, froalaOptions, config.froalaConfig);
|
|
533
|
+
// A list the caller spells out REPLACES the default one. merge() would fold
|
|
534
|
+
// it into the default index by index (arrays) or key by key (menus),
|
|
535
|
+
// leaving default buttons and menu entries the caller never asked for.
|
|
536
|
+
REPLACED_OPTIONS
|
|
537
|
+
.filter((name) => config.froalaConfig?.[name] !== undefined)
|
|
538
|
+
.forEach((name) => options[name] = config.froalaConfig[name]);
|
|
515
539
|
return options;
|
|
516
540
|
}
|
|
541
|
+
// Froala's inline toolbar, shown whenever the editor has focus (not only over
|
|
542
|
+
// a selection) so formatting can be picked before typing. It is attached to
|
|
543
|
+
// the body rather than the editor's own container: a floating editor often
|
|
544
|
+
// sits inside a scaled or clipped surface (a zoomed canvas), and a toolbar
|
|
545
|
+
// inside that would be scaled and clipped with it.
|
|
546
|
+
_floatingOptions() {
|
|
547
|
+
return {
|
|
548
|
+
toolbarInline: true,
|
|
549
|
+
toolbarVisibleWithoutSelection: true,
|
|
550
|
+
scrollableContainer: 'body',
|
|
551
|
+
heightMin: 0,
|
|
552
|
+
charCounterCount: false,
|
|
553
|
+
};
|
|
554
|
+
}
|
|
517
555
|
_listenLazyInit() {
|
|
518
556
|
this.froalaLoaded$
|
|
519
557
|
.pipe(filter((ready) => ready), switchMap(() => this._initialize$), tap(() => {
|
|
@@ -620,7 +658,7 @@ class FsHtmlEditorComponent {
|
|
|
620
658
|
}
|
|
621
659
|
}
|
|
622
660
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsHtmlEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
623
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: FsHtmlEditorComponent, isStandalone: true, selector: "fs-html-editor", inputs: { config: "config", disabled: "disabled" }, host: { properties: { "class.focused": "this.classFocused", "class.disabled": "this.disabled", "class.initialized": "this.initialized" } }, providers: [
|
|
661
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: FsHtmlEditorComponent, isStandalone: true, selector: "fs-html-editor", inputs: { config: "config", disabled: "disabled" }, host: { properties: { "class.focused": "this.classFocused", "class.disabled": "this.disabled", "class.initialized": "this.initialized", "class.floating": "this.floating" } }, providers: [
|
|
624
662
|
{
|
|
625
663
|
provide: NG_VALUE_ACCESSOR,
|
|
626
664
|
useExisting: forwardRef(() => FsHtmlEditorComponent),
|
|
@@ -631,7 +669,7 @@ class FsHtmlEditorComponent {
|
|
|
631
669
|
useExisting: forwardRef(() => FsHtmlEditorComponent),
|
|
632
670
|
multi: true,
|
|
633
671
|
},
|
|
634
|
-
], queries: [{ propertyName: "htmlEditorContainer", first: true, predicate: FsHtmlEditorContainerDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "elRef", first: true, predicate: ["elRef"], descendants: true }], ngImport: i0, template: "<fs-label-field\n
|
|
672
|
+
], queries: [{ propertyName: "htmlEditorContainer", first: true, predicate: FsHtmlEditorContainerDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "elRef", first: true, predicate: ["elRef"], descendants: true }], ngImport: i0, template: "<!-- The label field (outline, label, hint) only frames an editor that has a\n label. Without one the editor renders bare \u2014 e.g. floating on a canvas,\n where it has to read as the text itself rather than as a form field. -->\n@if (config.label) {\n <fs-label-field\n [appearance]=\"'outline'\"\n [hoverable]=\"true\"\n [showOutline]=\"initialized\"\n [disabled]=\"disabled\"\n [padless]=\"config.padless\"\n [class.init-on-click]=\"config.initOnClick\"\n [class.initialized]=\"initialized\">\n <fs-label>\n {{ config.label }}\n </fs-label>\n <ng-container [ngTemplateOutlet]=\"editorTmpl\"></ng-container>\n <fs-label-message>\n <div class=\"fs-form-message\">\n <div class=\"fs-form-hint\">\n {{ config.hint }}\n </div>\n </div>\n </fs-label-message>\n </fs-label-field>\n} @else {\n <ng-container [ngTemplateOutlet]=\"editorTmpl\"></ng-container>\n}\n<ng-template #editorTmpl>\n @if (htmlEditorContainer) {\n <ng-container\n [ngTemplateOutlet]=\"htmlEditorContainer\"\n [ngTemplateOutletContext]=\"{ template: htmlEditorContainerTmpl }\">\n </ng-container>\n } @else {\n <ng-container [ngTemplateOutlet]=\"htmlEditorContainerTmpl\"></ng-container>\n }\n</ng-template>\n<ng-template #htmlEditorContainerTmpl>\n <div\n class=\"html-editor-container fs-html-editor-default\"\n [id]=\"containerID\">\n <ng-container *fsSkeleton=\"(froalaLoaded$ | async) !== false\"></ng-container>\n <div #elRef></div>\n </div>\n</ng-template>\n", styles: ["@charset \"UTF-8\";:host{position:relative;display:block}:host:not(.initialized) ::ng-deep .fr-toolbar{display:none}:host ::ng-deep fs-label-field:not(.initialized).init-on-click{cursor:pointer}:host ::ng-deep fs-label-field:not(.initialized) .fr-view>*:first-child{margin-top:0}:host ::ng-deep fs-label-field:not(.initialized).appearance-outline .outline-overlay{display:none}:host ::ng-deep fs-label-field.initialized.appearance-outline .field-wrap{padding-top:6px;padding-bottom:4px}:host ::ng-deep .fr-wrapper{border:none!important}:host ::ng-deep .fr-wrapper.show-placeholder .fr-placeholder{font-family:inherit}:host ::ng-deep .fr-toolbar.fr-top{margin-top:2px}: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-more-toolbar,:host ::ng-deep .fr-toolbar,:host ::ng-deep .fr-dropdown:after,:host ::ng-deep .fr-dropdown-menu .fr-dropdown-wrapper{transition:none!important}:host ::ng-deep .fr-toolbar-open .fr-more-toolbar{display:block}:host ::ng-deep .fr-more-toolbar{flex-wrap:wrap!important;height:auto!important}:host ::ng-deep .fr-more-toolbar:not(.fr-expanded){display:none!important}:host ::ng-deep .fr-toolbar.fr-top{z-index:999;position:sticky;border-radius:0;background-color:#fff}:host ::ng-deep .fr-toolbar.fr-top .fr-btn-grp{margin:0 20px 0 0}:host ::ng-deep .fr-toolbar.fr-top .fr-btn-grp:nth-child(1):after,:host ::ng-deep .fr-toolbar.fr-top .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.fr-top div:first-of-type:before{border:none}:host ::ng-deep .fr-toolbar.fr-top.fr-toolbar-open .fr-newline{height:auto}:host ::ng-deep .fr-toolbar.fr-top .fr-btn-grp:first-child{margin-left:0}:host ::ng-deep .fr-toolbar.fr-top.fr-top{border:0}:host ::ng-deep .fr-toolbar.fr-top .fr-newline{display:none}:host ::ng-deep .fr-toolbar.fr-top .fr-more-toolbar{z-index:auto;display:flex;justify-content:center;padding-left:0!important}:host ::ng-deep .fr-toolbar.fr-top .fr-command.fr-btn{z-index:auto}:host ::ng-deep .fr-toolbar.fr-top .fr-command.fr-btn.fr-dropdown:after{right:3px}:host ::ng-deep .fr-toolbar.fr-top .fr-command.fr-btn.fr-dropdown.fr-selection span{margin-right:24px}:host ::ng-deep .fr-toolbar.fr-top .fr-command.fr-btn.fr-open{border-radius:4px;margin:4px 2px}:host ::ng-deep .fr-view{word-break:break-word}:host ::ng-deep .fr-view .fr-element img{box-sizing:border-box}:host ::ng-deep .fr-view li{display:block}:host ::ng-deep .fr-view li:before{margin-right:5px;margin-left:-40px;width:40px;display:inline-block;text-align:right}:host ::ng-deep .fr-view ol{counter-reset:listNumbering}:host ::ng-deep .fr-view ol>li{counter-increment:listNumbering;list-style:none}:host ::ng-deep .fr-view ol>li:before{content:counter(listNumbering,decimal) \".\"}:host ::ng-deep .fr-view ol ol>li:before{content:counter(listNumbering,lower-alpha) \".\"!important}:host ::ng-deep .fr-view ol ol ol>li:before{content:counter(listNumbering,decimal) \".\"!important}:host ::ng-deep .fr-view ol ol ol ol>li:before{content:counter(listNumbering,lower-alpha) \".\"!important}:host ::ng-deep .fr-view ol ol ol ol ol>li:before{content:counter(listNumbering,decimal) \".\"!important}:host ::ng-deep .fr-view ol ol ol ol ol ol>li:before{content:counter(listNumbering,lower-alpha) \".\"!important}:host ::ng-deep .fr-view ul>li{list-style:none}:host ::ng-deep .fr-view ul>li:before{content:\"\\2022\"}: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}::ng-deep .fr-popup{z-index:1001!important}::ng-deep .fr-popup .fr-layer{margin:0 15px!important}::ng-deep .fr-popup .fr-layer.fr-image-upload-layer{margin:12px!important}::ng-deep .fr-popup .fr-input-line{padding-bottom:0!important}::ng-deep .fr-popup .fr-input-line input{border-radius:4px!important}::ng-deep .fr-video-by-url-layer .fr-checkbox-line{display:none}::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 #0003,0 4px 5px #00000024,0 1px 10px #0000001f;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}:host(.floating) ::ng-deep .html-editor-container,:host(.floating) ::ng-deep .fr-box,:host(.floating) ::ng-deep .fr-wrapper{height:100%;background:transparent!important;border:none!important;box-shadow:none!important}:host(.floating) ::ng-deep .fr-element{min-height:100%;padding:0!important;font-family:inherit;font-size:inherit;line-height:inherit;color:inherit;overflow:visible}\n"], dependencies: [{ kind: "ngmodule", type: FsLabelModule }, { kind: "component", type: i1.FsLabelComponent, selector: "fs-label" }, { kind: "component", type: i1.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["appearance", "showOutline", "disabled", "focused", "hoverable", "padless"] }, { kind: "component", type: i1.FsLabelMessageComponent, selector: "fs-label-message" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FsSkeletonModule }, { kind: "directive", type: i2.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], viewProviders: [
|
|
635
673
|
{
|
|
636
674
|
provide: ControlContainer,
|
|
637
675
|
deps: [[Optional, NgForm]],
|
|
@@ -663,7 +701,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
663
701
|
NgTemplateOutlet,
|
|
664
702
|
FsSkeletonModule,
|
|
665
703
|
AsyncPipe,
|
|
666
|
-
], template: "<fs-label-field\n
|
|
704
|
+
], template: "<!-- The label field (outline, label, hint) only frames an editor that has a\n label. Without one the editor renders bare \u2014 e.g. floating on a canvas,\n where it has to read as the text itself rather than as a form field. -->\n@if (config.label) {\n <fs-label-field\n [appearance]=\"'outline'\"\n [hoverable]=\"true\"\n [showOutline]=\"initialized\"\n [disabled]=\"disabled\"\n [padless]=\"config.padless\"\n [class.init-on-click]=\"config.initOnClick\"\n [class.initialized]=\"initialized\">\n <fs-label>\n {{ config.label }}\n </fs-label>\n <ng-container [ngTemplateOutlet]=\"editorTmpl\"></ng-container>\n <fs-label-message>\n <div class=\"fs-form-message\">\n <div class=\"fs-form-hint\">\n {{ config.hint }}\n </div>\n </div>\n </fs-label-message>\n </fs-label-field>\n} @else {\n <ng-container [ngTemplateOutlet]=\"editorTmpl\"></ng-container>\n}\n<ng-template #editorTmpl>\n @if (htmlEditorContainer) {\n <ng-container\n [ngTemplateOutlet]=\"htmlEditorContainer\"\n [ngTemplateOutletContext]=\"{ template: htmlEditorContainerTmpl }\">\n </ng-container>\n } @else {\n <ng-container [ngTemplateOutlet]=\"htmlEditorContainerTmpl\"></ng-container>\n }\n</ng-template>\n<ng-template #htmlEditorContainerTmpl>\n <div\n class=\"html-editor-container fs-html-editor-default\"\n [id]=\"containerID\">\n <ng-container *fsSkeleton=\"(froalaLoaded$ | async) !== false\"></ng-container>\n <div #elRef></div>\n </div>\n</ng-template>\n", styles: ["@charset \"UTF-8\";:host{position:relative;display:block}:host:not(.initialized) ::ng-deep .fr-toolbar{display:none}:host ::ng-deep fs-label-field:not(.initialized).init-on-click{cursor:pointer}:host ::ng-deep fs-label-field:not(.initialized) .fr-view>*:first-child{margin-top:0}:host ::ng-deep fs-label-field:not(.initialized).appearance-outline .outline-overlay{display:none}:host ::ng-deep fs-label-field.initialized.appearance-outline .field-wrap{padding-top:6px;padding-bottom:4px}:host ::ng-deep .fr-wrapper{border:none!important}:host ::ng-deep .fr-wrapper.show-placeholder .fr-placeholder{font-family:inherit}:host ::ng-deep .fr-toolbar.fr-top{margin-top:2px}: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-more-toolbar,:host ::ng-deep .fr-toolbar,:host ::ng-deep .fr-dropdown:after,:host ::ng-deep .fr-dropdown-menu .fr-dropdown-wrapper{transition:none!important}:host ::ng-deep .fr-toolbar-open .fr-more-toolbar{display:block}:host ::ng-deep .fr-more-toolbar{flex-wrap:wrap!important;height:auto!important}:host ::ng-deep .fr-more-toolbar:not(.fr-expanded){display:none!important}:host ::ng-deep .fr-toolbar.fr-top{z-index:999;position:sticky;border-radius:0;background-color:#fff}:host ::ng-deep .fr-toolbar.fr-top .fr-btn-grp{margin:0 20px 0 0}:host ::ng-deep .fr-toolbar.fr-top .fr-btn-grp:nth-child(1):after,:host ::ng-deep .fr-toolbar.fr-top .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.fr-top div:first-of-type:before{border:none}:host ::ng-deep .fr-toolbar.fr-top.fr-toolbar-open .fr-newline{height:auto}:host ::ng-deep .fr-toolbar.fr-top .fr-btn-grp:first-child{margin-left:0}:host ::ng-deep .fr-toolbar.fr-top.fr-top{border:0}:host ::ng-deep .fr-toolbar.fr-top .fr-newline{display:none}:host ::ng-deep .fr-toolbar.fr-top .fr-more-toolbar{z-index:auto;display:flex;justify-content:center;padding-left:0!important}:host ::ng-deep .fr-toolbar.fr-top .fr-command.fr-btn{z-index:auto}:host ::ng-deep .fr-toolbar.fr-top .fr-command.fr-btn.fr-dropdown:after{right:3px}:host ::ng-deep .fr-toolbar.fr-top .fr-command.fr-btn.fr-dropdown.fr-selection span{margin-right:24px}:host ::ng-deep .fr-toolbar.fr-top .fr-command.fr-btn.fr-open{border-radius:4px;margin:4px 2px}:host ::ng-deep .fr-view{word-break:break-word}:host ::ng-deep .fr-view .fr-element img{box-sizing:border-box}:host ::ng-deep .fr-view li{display:block}:host ::ng-deep .fr-view li:before{margin-right:5px;margin-left:-40px;width:40px;display:inline-block;text-align:right}:host ::ng-deep .fr-view ol{counter-reset:listNumbering}:host ::ng-deep .fr-view ol>li{counter-increment:listNumbering;list-style:none}:host ::ng-deep .fr-view ol>li:before{content:counter(listNumbering,decimal) \".\"}:host ::ng-deep .fr-view ol ol>li:before{content:counter(listNumbering,lower-alpha) \".\"!important}:host ::ng-deep .fr-view ol ol ol>li:before{content:counter(listNumbering,decimal) \".\"!important}:host ::ng-deep .fr-view ol ol ol ol>li:before{content:counter(listNumbering,lower-alpha) \".\"!important}:host ::ng-deep .fr-view ol ol ol ol ol>li:before{content:counter(listNumbering,decimal) \".\"!important}:host ::ng-deep .fr-view ol ol ol ol ol ol>li:before{content:counter(listNumbering,lower-alpha) \".\"!important}:host ::ng-deep .fr-view ul>li{list-style:none}:host ::ng-deep .fr-view ul>li:before{content:\"\\2022\"}: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}::ng-deep .fr-popup{z-index:1001!important}::ng-deep .fr-popup .fr-layer{margin:0 15px!important}::ng-deep .fr-popup .fr-layer.fr-image-upload-layer{margin:12px!important}::ng-deep .fr-popup .fr-input-line{padding-bottom:0!important}::ng-deep .fr-popup .fr-input-line input{border-radius:4px!important}::ng-deep .fr-video-by-url-layer .fr-checkbox-line{display:none}::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 #0003,0 4px 5px #00000024,0 1px 10px #0000001f;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}:host(.floating) ::ng-deep .html-editor-container,:host(.floating) ::ng-deep .fr-box,:host(.floating) ::ng-deep .fr-wrapper{height:100%;background:transparent!important;border:none!important;box-shadow:none!important}:host(.floating) ::ng-deep .fr-element{min-height:100%;padding:0!important;font-family:inherit;font-size:inherit;line-height:inherit;color:inherit;overflow:visible}\n"] }]
|
|
667
705
|
}], propDecorators: { htmlEditorContainer: [{
|
|
668
706
|
type: ContentChild,
|
|
669
707
|
args: [FsHtmlEditorContainerDirective, { read: TemplateRef }]
|
|
@@ -683,6 +721,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
683
721
|
}], initialized: [{
|
|
684
722
|
type: HostBinding,
|
|
685
723
|
args: ['class.initialized']
|
|
724
|
+
}], floating: [{
|
|
725
|
+
type: HostBinding,
|
|
726
|
+
args: ['class.floating']
|
|
686
727
|
}] } });
|
|
687
728
|
|
|
688
729
|
class FsHtmlEditorModule {
|
|
@@ -742,6 +783,7 @@ function htmlEditorConfigFactory(config) {
|
|
|
742
783
|
"video" /* FroalaPlugin.Video */,
|
|
743
784
|
"draggable" /* FroalaPlugin.Draggable */,
|
|
744
785
|
"font_size" /* FroalaPlugin.FontSize */,
|
|
786
|
+
"font_family" /* FroalaPlugin.FontFamily */,
|
|
745
787
|
"line_height" /* FroalaPlugin.LineHeight */,
|
|
746
788
|
],
|
|
747
789
|
...config,
|
|
@@ -768,6 +810,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
768
810
|
args: ['html']
|
|
769
811
|
}] } });
|
|
770
812
|
|
|
813
|
+
class FsHtmlRendererModule {
|
|
814
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsHtmlRendererModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
815
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: FsHtmlRendererModule, imports: [FsHtmlRendererComponent], exports: [FsHtmlRendererComponent] });
|
|
816
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsHtmlRendererModule });
|
|
817
|
+
}
|
|
818
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsHtmlRendererModule, decorators: [{
|
|
819
|
+
type: NgModule,
|
|
820
|
+
args: [{
|
|
821
|
+
imports: [
|
|
822
|
+
FsHtmlRendererComponent,
|
|
823
|
+
],
|
|
824
|
+
exports: [
|
|
825
|
+
FsHtmlRendererComponent,
|
|
826
|
+
],
|
|
827
|
+
}]
|
|
828
|
+
}] });
|
|
829
|
+
|
|
771
830
|
class Plugin {
|
|
772
831
|
config;
|
|
773
832
|
editor;
|
|
@@ -1082,5 +1141,5 @@ class ScreenRecordPlugin extends Plugin {
|
|
|
1082
1141
|
* Generated bundle index. Do not edit.
|
|
1083
1142
|
*/
|
|
1084
1143
|
|
|
1085
|
-
export { ChecklistPlugin, CodePlugin, FS_HTML_EDITOR_CONFIG, FsHtmlEditorComponent, FsHtmlEditorContainerDirective, FsHtmlEditorModule, FsHtmlRendererComponent, MentionPlugin, ParagraphButtons, Plugin, RealtimePlugin, RichButtons, ScreenRecordPlugin, TextButtons, ToolbarButtons, ToolbarXsButtons };
|
|
1144
|
+
export { ChecklistPlugin, CodePlugin, FS_HTML_EDITOR_CONFIG, FsHtmlEditorComponent, FsHtmlEditorContainerDirective, FsHtmlEditorModule, FsHtmlRendererComponent, FsHtmlRendererModule, MentionPlugin, ParagraphButtons, Plugin, RealtimePlugin, RichButtons, ScreenRecordPlugin, TextButtons, ToolbarButtons, ToolbarXsButtons };
|
|
1086
1145
|
//# sourceMappingURL=firestitch-html-editor.mjs.map
|