@open-wysiwyg-editor/angular 0.0.0-stage → 1.0.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/LICENSE +21 -0
- package/README.md +225 -2
- package/content.css +323 -0
- package/content.min.css +2 -0
- package/fesm2022/open-wysiwyg-editor-angular.mjs +144 -0
- package/fesm2022/open-wysiwyg-editor-angular.mjs.map +1 -0
- package/package.json +56 -3
- package/style.css +1165 -0
- package/style.min.css +2 -0
- package/types/open-wysiwyg-editor-angular.d.ts +55 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { EventEmitter, inject, NgZone, afterNextRender, forwardRef, booleanAttribute, ViewChild, Output, Input, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
|
+
import { createEditor, forwardCallbacks, syncContent } from 'open-wysiwyg-editor';
|
|
5
|
+
export * from 'open-wysiwyg-editor';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* The full editor (toolbar, dialogs, status bar) as a standalone component.
|
|
9
|
+
*
|
|
10
|
+
* ```html
|
|
11
|
+
* <owe-rich-text-editor [(ngModel)]="html" placeholder="Write…" />
|
|
12
|
+
* <owe-rich-text-editor formControlName="body" />
|
|
13
|
+
* <owe-rich-text-editor [(value)]="html" [options]="{ language: 'ar' }" />
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* The editor starts in `afterNextRender`, so it never runs during server-side rendering, and its
|
|
17
|
+
* DOM listeners run outside the Angular zone.
|
|
18
|
+
*/
|
|
19
|
+
class RichTextEditorComponent {
|
|
20
|
+
constructor() {
|
|
21
|
+
/** Everything else `createEditor()` accepts. Read once, when the editor starts. */
|
|
22
|
+
this.options = {};
|
|
23
|
+
this.readonly = false;
|
|
24
|
+
this.valueChange = new EventEmitter();
|
|
25
|
+
/** Emits the editor instance once it has started. */
|
|
26
|
+
this.ready = new EventEmitter();
|
|
27
|
+
/** The live editor, or `null` before it starts (and on the server). */
|
|
28
|
+
this.editor = null;
|
|
29
|
+
this.zone = inject(NgZone);
|
|
30
|
+
this.applied = undefined;
|
|
31
|
+
this.disabled = false;
|
|
32
|
+
this.onChange = () => { };
|
|
33
|
+
this.onTouched = () => { };
|
|
34
|
+
afterNextRender(() => this.start());
|
|
35
|
+
}
|
|
36
|
+
ngOnChanges(changes) {
|
|
37
|
+
if (changes["value"])
|
|
38
|
+
this.load(this.value);
|
|
39
|
+
if (changes["placeholder"] || changes["readonly"])
|
|
40
|
+
this.applyRuntime();
|
|
41
|
+
}
|
|
42
|
+
ngOnDestroy() {
|
|
43
|
+
this.editor?.destroy();
|
|
44
|
+
this.editor = null;
|
|
45
|
+
}
|
|
46
|
+
// ---- ControlValueAccessor ------------------------------------------------------------------
|
|
47
|
+
writeValue(html) {
|
|
48
|
+
this.value = html ?? "";
|
|
49
|
+
this.load(this.value);
|
|
50
|
+
}
|
|
51
|
+
registerOnChange(fn) {
|
|
52
|
+
this.onChange = fn;
|
|
53
|
+
}
|
|
54
|
+
registerOnTouched(fn) {
|
|
55
|
+
this.onTouched = fn;
|
|
56
|
+
}
|
|
57
|
+
setDisabledState(disabled) {
|
|
58
|
+
this.disabled = disabled;
|
|
59
|
+
this.applyRuntime();
|
|
60
|
+
}
|
|
61
|
+
// ---- internals -----------------------------------------------------------------------------
|
|
62
|
+
start() {
|
|
63
|
+
const options = this.options;
|
|
64
|
+
this.applied = this.value ?? options.content;
|
|
65
|
+
this.editor = this.zone.runOutsideAngular(() => createEditor({
|
|
66
|
+
...options,
|
|
67
|
+
...this.runtime(),
|
|
68
|
+
element: this.host.nativeElement,
|
|
69
|
+
content: this.applied,
|
|
70
|
+
...forwardCallbacks(() => this.options),
|
|
71
|
+
onUpdate: (editor) => {
|
|
72
|
+
const html = editor.getHTML();
|
|
73
|
+
this.applied = html;
|
|
74
|
+
this.options.onUpdate?.(editor);
|
|
75
|
+
this.zone.run(() => {
|
|
76
|
+
this.value = html;
|
|
77
|
+
this.onChange(html);
|
|
78
|
+
this.valueChange.emit(html);
|
|
79
|
+
});
|
|
80
|
+
},
|
|
81
|
+
onBlur: (editor, event) => {
|
|
82
|
+
this.options.onBlur?.(editor, event);
|
|
83
|
+
this.zone.run(() => this.onTouched());
|
|
84
|
+
},
|
|
85
|
+
}));
|
|
86
|
+
this.ready.emit(this.editor);
|
|
87
|
+
}
|
|
88
|
+
load(html) {
|
|
89
|
+
if (!this.editor || html === undefined || html === this.applied)
|
|
90
|
+
return;
|
|
91
|
+
this.applied = html;
|
|
92
|
+
syncContent(this.editor, html);
|
|
93
|
+
}
|
|
94
|
+
runtime() {
|
|
95
|
+
return {
|
|
96
|
+
editable: !this.readonly && !this.disabled && this.options.editable !== false,
|
|
97
|
+
placeholder: this.placeholder ?? this.options.placeholder,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
applyRuntime() {
|
|
101
|
+
this.editor?.setOptions(this.runtime());
|
|
102
|
+
}
|
|
103
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: RichTextEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
104
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "21.2.25", type: RichTextEditorComponent, isStandalone: true, selector: "owe-rich-text-editor", inputs: { value: "value", options: "options", placeholder: "placeholder", readonly: ["readonly", "readonly", booleanAttribute] }, outputs: { valueChange: "valueChange", ready: "ready" }, providers: [
|
|
105
|
+
{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => RichTextEditorComponent), multi: true },
|
|
106
|
+
], viewQueries: [{ propertyName: "host", first: true, predicate: ["host"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div #host></div>", isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
107
|
+
}
|
|
108
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: RichTextEditorComponent, decorators: [{
|
|
109
|
+
type: Component,
|
|
110
|
+
args: [{
|
|
111
|
+
selector: "owe-rich-text-editor",
|
|
112
|
+
standalone: true,
|
|
113
|
+
template: "<div #host></div>",
|
|
114
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
115
|
+
providers: [
|
|
116
|
+
{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => RichTextEditorComponent), multi: true },
|
|
117
|
+
],
|
|
118
|
+
}]
|
|
119
|
+
}], ctorParameters: () => [], propDecorators: { value: [{
|
|
120
|
+
type: Input
|
|
121
|
+
}], options: [{
|
|
122
|
+
type: Input
|
|
123
|
+
}], placeholder: [{
|
|
124
|
+
type: Input
|
|
125
|
+
}], readonly: [{
|
|
126
|
+
type: Input,
|
|
127
|
+
args: [{ transform: booleanAttribute }]
|
|
128
|
+
}], valueChange: [{
|
|
129
|
+
type: Output
|
|
130
|
+
}], ready: [{
|
|
131
|
+
type: Output
|
|
132
|
+
}], host: [{
|
|
133
|
+
type: ViewChild,
|
|
134
|
+
args: ["host", { static: true }]
|
|
135
|
+
}] } });
|
|
136
|
+
|
|
137
|
+
// Angular package (Angular 21+, standalone components, SSR-safe).
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Generated bundle index. Do not edit.
|
|
141
|
+
*/
|
|
142
|
+
|
|
143
|
+
export { RichTextEditorComponent };
|
|
144
|
+
//# sourceMappingURL=open-wysiwyg-editor-angular.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-wysiwyg-editor-angular.mjs","sources":["../../src/rich-text-editor.component.ts","../../src/public-api.ts","../../src/open-wysiwyg-editor-angular.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n type ElementRef,\n EventEmitter,\n Input,\n NgZone,\n Output,\n ViewChild,\n afterNextRender,\n booleanAttribute,\n forwardRef,\n inject,\n type OnChanges,\n type OnDestroy,\n type SimpleChanges,\n} from \"@angular/core\";\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from \"@angular/forms\";\nimport {\n createEditor,\n forwardCallbacks,\n syncContent,\n type Content,\n type Editor,\n type EditorOptions,\n} from \"open-wysiwyg-editor\";\n\nexport type RichTextEditorOptions = Omit<EditorOptions, \"element\">;\n\n/**\n * The full editor (toolbar, dialogs, status bar) as a standalone component.\n *\n * ```html\n * <owe-rich-text-editor [(ngModel)]=\"html\" placeholder=\"Write…\" />\n * <owe-rich-text-editor formControlName=\"body\" />\n * <owe-rich-text-editor [(value)]=\"html\" [options]=\"{ language: 'ar' }\" />\n * ```\n *\n * The editor starts in `afterNextRender`, so it never runs during server-side rendering, and its\n * DOM listeners run outside the Angular zone.\n */\n@Component({\n selector: \"owe-rich-text-editor\",\n standalone: true,\n template: \"<div #host></div>\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => RichTextEditorComponent), multi: true },\n ],\n})\nexport class RichTextEditorComponent implements ControlValueAccessor, OnChanges, OnDestroy {\n /** The content as HTML. Use `[(value)]`, or `ngModel` / reactive forms. */\n @Input() value: string | undefined;\n /** Everything else `createEditor()` accepts. Read once, when the editor starts. */\n @Input() options: RichTextEditorOptions = {};\n @Input() placeholder: string | undefined;\n @Input({ transform: booleanAttribute }) readonly = false;\n\n @Output() readonly valueChange = new EventEmitter<string>();\n /** Emits the editor instance once it has started. */\n @Output() readonly ready = new EventEmitter<Editor>();\n\n @ViewChild(\"host\", { static: true }) private host!: ElementRef<HTMLElement>;\n\n /** The live editor, or `null` before it starts (and on the server). */\n editor: Editor | null = null;\n\n private readonly zone = inject(NgZone);\n private applied: Content = undefined;\n private disabled = false;\n private onChange: (html: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n constructor() {\n afterNextRender(() => this.start());\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"value\"]) this.load(this.value);\n if (changes[\"placeholder\"] || changes[\"readonly\"]) this.applyRuntime();\n }\n\n ngOnDestroy(): void {\n this.editor?.destroy();\n this.editor = null;\n }\n\n // ---- ControlValueAccessor ------------------------------------------------------------------\n writeValue(html: string | null): void {\n this.value = html ?? \"\";\n this.load(this.value);\n }\n registerOnChange(fn: (html: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n this.applyRuntime();\n }\n\n // ---- internals -----------------------------------------------------------------------------\n private start(): void {\n const options = this.options;\n this.applied = this.value ?? options.content;\n this.editor = this.zone.runOutsideAngular(() =>\n createEditor({\n ...options,\n ...this.runtime(),\n element: this.host.nativeElement,\n content: this.applied,\n ...forwardCallbacks(() => this.options),\n onUpdate: (editor) => {\n const html = editor.getHTML();\n this.applied = html;\n this.options.onUpdate?.(editor);\n this.zone.run(() => {\n this.value = html;\n this.onChange(html);\n this.valueChange.emit(html);\n });\n },\n onBlur: (editor, event) => {\n this.options.onBlur?.(editor, event);\n this.zone.run(() => this.onTouched());\n },\n }),\n );\n this.ready.emit(this.editor);\n }\n\n private load(html: string | undefined): void {\n if (!this.editor || html === undefined || html === this.applied) return;\n this.applied = html;\n syncContent(this.editor, html);\n }\n\n private runtime(): Partial<EditorOptions> {\n return {\n editable: !this.readonly && !this.disabled && this.options.editable !== false,\n placeholder: this.placeholder ?? this.options.placeholder,\n };\n }\n\n private applyRuntime(): void {\n this.editor?.setOptions(this.runtime());\n }\n}\n","// Angular package (Angular 21+, standalone components, SSR-safe).\nexport { RichTextEditorComponent } from \"./rich-text-editor.component\";\nexport type { RichTextEditorOptions } from \"./rich-text-editor.component\";\n\n// One install gives the whole API: StarterKit, getUI, types…\nexport * from \"open-wysiwyg-editor\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;AA6BA;;;;;;;;;;;AAWG;MAUU,uBAAuB,CAAA;AAuBlC,IAAA,WAAA,GAAA;;QAnBS,IAAA,CAAA,OAAO,GAA0B,EAAE;QAEJ,IAAA,CAAA,QAAQ,GAAG,KAAK;AAErC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;;AAExC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAU;;QAKrD,IAAA,CAAA,MAAM,GAAkB,IAAI;AAEX,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;QAC9B,IAAA,CAAA,OAAO,GAAY,SAAS;QAC5B,IAAA,CAAA,QAAQ,GAAG,KAAK;AAChB,QAAA,IAAA,CAAA,QAAQ,GAA2B,MAAK,EAAE,CAAC;AAC3C,QAAA,IAAA,CAAA,SAAS,GAAe,MAAK,EAAE,CAAC;QAGtC,eAAe,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrC;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,OAAO,CAAC;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAC3C,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC;YAAE,IAAI,CAAC,YAAY,EAAE;IACxE;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;IACpB;;AAGA,IAAA,UAAU,CAAC,IAAmB,EAAA;AAC5B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,EAAE;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACvB;AACA,IAAA,gBAAgB,CAAC,EAA0B,EAAA;AACzC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AACA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QACxB,IAAI,CAAC,YAAY,EAAE;IACrB;;IAGQ,KAAK,GAAA;AACX,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO;AAC5C,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MACxC,YAAY,CAAC;AACX,YAAA,GAAG,OAAO;YACV,GAAG,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa;YAChC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,GAAG,gBAAgB,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC;AACvC,YAAA,QAAQ,EAAE,CAAC,MAAM,KAAI;AACnB,gBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE;AAC7B,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI;gBACnB,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC;AAC/B,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,oBAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACnB,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7B,gBAAA,CAAC,CAAC;YACJ,CAAC;AACD,YAAA,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,KAAI;gBACxB,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,EAAE,KAAK,CAAC;AACpC,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACvC,CAAC;AACF,SAAA,CAAC,CACH;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAC9B;AAEQ,IAAA,IAAI,CAAC,IAAwB,EAAA;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,CAAC,OAAO;YAAE;AACjE,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;IAChC;IAEQ,OAAO,GAAA;QACb,OAAO;AACL,YAAA,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,KAAK;YAC7E,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW;SAC1D;IACH;IAEQ,YAAY,GAAA;QAClB,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACzC;+GAlGW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAMd,gBAAgB,CAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAVzB;AACT,YAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AACpG,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAJS,mBAAmB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAMlB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBATnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,mBAAmB;oBAC7B,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,SAAS,EAAE;AACT,wBAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,6BAA6B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AACpG,qBAAA;AACF,iBAAA;;sBAGE;;sBAEA;;sBACA;;sBACA,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAErC;;sBAEA;;sBAEA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;AC9DrC;;ACAA;;AAEG;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,59 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@open-wysiwyg-editor/angular",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Angular standalone component for open-wysiwyg-editor with ngModel and reactive forms support. Accessible (WCAG 2.2 AA), RTL-first, CSP-safe, SSR-safe.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "alhassan-ahmed",
|
|
7
|
+
"sideEffects": [
|
|
8
|
+
"*.css"
|
|
9
|
+
],
|
|
10
|
+
"exports": {
|
|
11
|
+
"./style.css": "./style.css",
|
|
12
|
+
"./style.min.css": "./style.min.css",
|
|
13
|
+
"./content.css": "./content.css",
|
|
14
|
+
"./content.min.css": "./content.min.css",
|
|
15
|
+
"./package.json": {
|
|
16
|
+
"default": "./package.json"
|
|
17
|
+
},
|
|
18
|
+
".": {
|
|
19
|
+
"types": "./types/open-wysiwyg-editor-angular.d.ts",
|
|
20
|
+
"default": "./fesm2022/open-wysiwyg-editor-angular.mjs"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"keywords": [
|
|
24
|
+
"angular",
|
|
25
|
+
"angular-component",
|
|
26
|
+
"ngmodel",
|
|
27
|
+
"reactive-forms",
|
|
28
|
+
"wysiwyg",
|
|
29
|
+
"rich-text-editor",
|
|
30
|
+
"editor",
|
|
31
|
+
"accessibility",
|
|
32
|
+
"a11y",
|
|
33
|
+
"rtl",
|
|
34
|
+
"arabic"
|
|
35
|
+
],
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"open-wysiwyg-editor": "^1.0.0",
|
|
38
|
+
"tslib": "^2.8.1"
|
|
39
|
+
},
|
|
40
|
+
"peerDependencies": {
|
|
41
|
+
"@angular/core": ">=21.0.0",
|
|
42
|
+
"@angular/forms": ">=21.0.0"
|
|
43
|
+
},
|
|
44
|
+
"publishConfig": {
|
|
45
|
+
"access": "public"
|
|
46
|
+
},
|
|
47
|
+
"homepage": "https://alhassan73.github.io/open-wysiwyg-editor/",
|
|
48
|
+
"bugs": {
|
|
49
|
+
"url": "https://github.com/alhassan73/open-wysiwyg-editor/issues"
|
|
50
|
+
},
|
|
51
|
+
"repository": {
|
|
52
|
+
"type": "git",
|
|
53
|
+
"url": "git+https://github.com/alhassan73/open-wysiwyg-editor.git",
|
|
54
|
+
"directory": "packages/angular"
|
|
55
|
+
},
|
|
56
|
+
"module": "fesm2022/open-wysiwyg-editor-angular.mjs",
|
|
57
|
+
"typings": "types/open-wysiwyg-editor-angular.d.ts",
|
|
58
|
+
"type": "module"
|
|
6
59
|
}
|