@notectl/angular 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@notectl/angular",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "description": "Angular adapter for NotectlEditor",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -49,7 +49,7 @@
49
49
  },
50
50
  "repository": {
51
51
  "type": "git",
52
- "url": "git+https://github.com/neuravision-io/notectl.git",
52
+ "url": "git+https://github.com/Samyssmile/notectl.git",
53
53
  "directory": "packages/adapters/angular"
54
54
  },
55
55
  "publishConfig": {
package/dist/README.md DELETED
@@ -1,141 +0,0 @@
1
- # @notectl/angular
2
-
3
- Angular adapter for NotectlEditor - a framework-agnostic rich text editor built on Web Components.
4
-
5
- ## Installation
6
-
7
- ```bash
8
- npm install @notectl/angular @notectl/core
9
- ```
10
-
11
- ## Usage
12
-
13
- ### Import Module
14
-
15
- ```typescript
16
- import { NgModule } from '@angular/core';
17
- import { BrowserModule } from '@angular/platform-browser';
18
- import { NotectlEditorModule } from '@notectl/angular';
19
- import { AppComponent } from './app.component';
20
-
21
- @NgModule({
22
- declarations: [AppComponent],
23
- imports: [
24
- BrowserModule,
25
- NotectlEditorModule
26
- ],
27
- providers: [],
28
- bootstrap: [AppComponent]
29
- })
30
- export class AppModule { }
31
- ```
32
-
33
- ### Component Usage
34
-
35
- ```typescript
36
- import { Component } from '@angular/core';
37
- import type { EditorAPI } from '@notectl/core';
38
-
39
- @Component({
40
- selector: 'app-root',
41
- template: `
42
- <notectl-editor
43
- [content]="content"
44
- [placeholder]="'Start writing...'"
45
- [readOnly]="false"
46
- (contentChange)="onContentChange($event)"
47
- (ready)="onReady($event)"
48
- ></notectl-editor>
49
- `
50
- })
51
- export class AppComponent {
52
- content = { type: 'doc', content: [] };
53
-
54
- onContentChange(content: unknown): void {
55
- console.log('Content changed:', content);
56
- }
57
-
58
- onReady(editor: EditorAPI): void {
59
- console.log('Editor ready:', editor);
60
- }
61
- }
62
- ```
63
-
64
- ### Reactive Forms Integration
65
-
66
- ```typescript
67
- import { Component } from '@angular/core';
68
- import { FormControl, FormGroup } from '@angular/forms';
69
-
70
- @Component({
71
- selector: 'app-editor-form',
72
- template: `
73
- <form [formGroup]="form">
74
- <notectl-editor formControlName="content"></notectl-editor>
75
- </form>
76
- `
77
- })
78
- export class EditorFormComponent {
79
- form = new FormGroup({
80
- content: new FormControl(null)
81
- });
82
- }
83
- ```
84
-
85
- ### Directive Usage
86
-
87
- ```typescript
88
- import { Component } from '@angular/core';
89
-
90
- @Component({
91
- selector: 'app-editor',
92
- template: `
93
- <div
94
- notectl-editor
95
- [content]="content"
96
- (contentChange)="onContentChange($event)"
97
- ></div>
98
- `
99
- })
100
- export class EditorComponent {
101
- content = { type: 'doc', content: [] };
102
-
103
- onContentChange(content: unknown): void {
104
- console.log('Content changed:', content);
105
- }
106
- }
107
- ```
108
-
109
- ## API
110
-
111
- ### Component Props
112
-
113
- - `debug?: boolean` - Enable debug mode
114
- - `content?: string | object` - Initial editor content
115
- - `placeholder?: string` - Placeholder text
116
- - `readOnly?: boolean` - Read-only mode
117
- - `accessibility?: object` - Accessibility configuration
118
- - `i18n?: object` - Internationalization settings
119
- - `theme?: object` - Theme configuration
120
-
121
- ### Component Events
122
-
123
- - `contentChange: EventEmitter<unknown>` - Emitted when content changes
124
- - `selectionChange: EventEmitter<unknown>` - Emitted when selection changes
125
- - `editorFocus: EventEmitter<void>` - Emitted when editor gains focus
126
- - `editorBlur: EventEmitter<void>` - Emitted when editor loses focus
127
- - `ready: EventEmitter<EditorAPI>` - Emitted when editor is ready
128
- - `error: EventEmitter<Error>` - Emitted when an error occurs
129
-
130
- ### Component Methods
131
-
132
- - `getContent(): unknown` - Get current content
133
- - `setContent(content: unknown): void` - Set content
134
- - `getState(): unknown` - Get editor state
135
- - `executeCommand(command: string, ...args: unknown[]): void` - Execute command
136
- - `registerPlugin(plugin: unknown): void` - Register a plugin
137
- - `unregisterPlugin(pluginId: string): void` - Unregister a plugin
138
-
139
- ## License
140
-
141
- MIT
@@ -1,6 +0,0 @@
1
- /**
2
- * @notectl/angular - Angular adapter for NotectlEditor
3
- * @packageDocumentation
4
- */
5
- export * from './public-api';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBub3RlY3RsL2FuZ3VsYXIgLSBBbmd1bGFyIGFkYXB0ZXIgZm9yIE5vdGVjdGxFZGl0b3JcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
@@ -1,244 +0,0 @@
1
- /**
2
- * Angular component wrapper for NotectlEditor
3
- */
4
- import { Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation, forwardRef, } from '@angular/core';
5
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
6
- import * as i0 from "@angular/core";
7
- /**
8
- * NotectlEditor Angular component
9
- */
10
- export class NotectlEditorComponent {
11
- containerRef;
12
- /** Debug mode */
13
- debug;
14
- /** Initial content */
15
- content;
16
- /** Placeholder text */
17
- placeholder;
18
- /** Read-only mode */
19
- readOnly;
20
- /** Accessibility configuration */
21
- accessibility;
22
- /** Internationalization configuration */
23
- i18n;
24
- /** Theme configuration */
25
- theme;
26
- /** Custom class name */
27
- className;
28
- /** Emitted when content changes */
29
- contentChange = new EventEmitter();
30
- /** Emitted when selection changes */
31
- selectionChange = new EventEmitter();
32
- /** Emitted when editor gains focus */
33
- editorFocus = new EventEmitter();
34
- /** Emitted when editor loses focus */
35
- editorBlur = new EventEmitter();
36
- /** Emitted when editor is ready */
37
- ready = new EventEmitter();
38
- /** Emitted when an error occurs */
39
- error = new EventEmitter();
40
- editor = null;
41
- onChange = () => { };
42
- onTouched = () => { };
43
- ngOnInit() {
44
- this.initEditor();
45
- }
46
- ngOnDestroy() {
47
- this.destroyEditor();
48
- }
49
- /**
50
- * Initialize the editor instance
51
- */
52
- initEditor() {
53
- if (!this.containerRef?.nativeElement) {
54
- console.error('NotectlEditor: Container element not found');
55
- return;
56
- }
57
- // Create editor instance
58
- this.editor = document.createElement('notectl-editor');
59
- // Configure editor
60
- const config = {
61
- debug: this.debug,
62
- content: this.content,
63
- placeholder: this.placeholder,
64
- readOnly: this.readOnly,
65
- accessibility: this.accessibility,
66
- i18n: this.i18n,
67
- theme: this.theme,
68
- };
69
- this.editor.configure(config);
70
- // Attach event listeners
71
- this.editor.on('content-change', (data) => {
72
- const eventData = data;
73
- const content = eventData.content;
74
- this.contentChange.emit(content);
75
- this.onChange(content);
76
- });
77
- this.editor.on('selection-change', (data) => {
78
- const eventData = data;
79
- this.selectionChange.emit(eventData.selection);
80
- });
81
- this.editor.on('focus', () => {
82
- this.editorFocus.emit();
83
- this.onTouched();
84
- });
85
- this.editor.on('blur', () => {
86
- this.editorBlur.emit();
87
- });
88
- this.editor.on('ready', () => {
89
- this.ready.emit(this.getEditorAPI());
90
- });
91
- this.editor.on('error', (data) => {
92
- const eventData = data;
93
- if (eventData.error) {
94
- this.error.emit(eventData.error);
95
- }
96
- });
97
- // Mount editor
98
- this.containerRef.nativeElement.appendChild(this.editor);
99
- }
100
- /**
101
- * Destroy the editor instance
102
- */
103
- destroyEditor() {
104
- if (this.editor) {
105
- this.editor.destroy();
106
- if (this.containerRef?.nativeElement?.contains(this.editor)) {
107
- this.containerRef.nativeElement.removeChild(this.editor);
108
- }
109
- this.editor = null;
110
- }
111
- }
112
- /**
113
- * Update editor configuration
114
- */
115
- updateConfig() {
116
- if (!this.editor)
117
- return;
118
- const config = {
119
- debug: this.debug,
120
- content: this.content,
121
- placeholder: this.placeholder,
122
- readOnly: this.readOnly,
123
- accessibility: this.accessibility,
124
- i18n: this.i18n,
125
- theme: this.theme,
126
- };
127
- this.editor.configure(config);
128
- }
129
- /**
130
- * Get editor API
131
- */
132
- getEditorAPI() {
133
- if (!this.editor) {
134
- throw new Error('Editor not initialized');
135
- }
136
- return this.editor;
137
- }
138
- // ControlValueAccessor implementation
139
- writeValue(value) {
140
- if (this.editor && typeof value === 'string') {
141
- this.editor.setContent(value);
142
- }
143
- }
144
- registerOnChange(fn) {
145
- this.onChange = fn;
146
- }
147
- registerOnTouched(fn) {
148
- this.onTouched = fn;
149
- }
150
- setDisabledState(isDisabled) {
151
- if (this.editor) {
152
- this.editor.configure({ readOnly: isDisabled });
153
- }
154
- }
155
- // Public API methods
156
- /**
157
- * Get current editor content
158
- */
159
- getContent() {
160
- return this.editor?.getContent();
161
- }
162
- /**
163
- * Set editor content
164
- */
165
- setContent(content) {
166
- if (this.editor && typeof content === 'string') {
167
- this.editor.setContent(content);
168
- }
169
- }
170
- /**
171
- * Get current editor state
172
- */
173
- getState() {
174
- return this.editor?.getState();
175
- }
176
- /**
177
- * Execute an editor command
178
- */
179
- executeCommand(command, ...args) {
180
- this.editor?.executeCommand(command, ...args);
181
- }
182
- /**
183
- * Register a plugin
184
- */
185
- registerPlugin(plugin) {
186
- this.editor?.registerPlugin(plugin);
187
- }
188
- /**
189
- * Unregister a plugin
190
- */
191
- unregisterPlugin(pluginId) {
192
- this.editor?.unregisterPlugin(pluginId);
193
- }
194
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotectlEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
195
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: NotectlEditorComponent, selector: "notectl-editor", inputs: { debug: "debug", content: "content", placeholder: "placeholder", readOnly: "readOnly", accessibility: "accessibility", i18n: "i18n", theme: "theme", className: "className" }, outputs: { contentChange: "contentChange", selectionChange: "selectionChange", editorFocus: "editorFocus", editorBlur: "editorBlur", ready: "ready", error: "error" }, providers: [
196
- {
197
- provide: NG_VALUE_ACCESSOR,
198
- useExisting: forwardRef(() => NotectlEditorComponent),
199
- multi: true,
200
- },
201
- ], viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["container"], descendants: true, static: true }], ngImport: i0, template: '<div #container [attr.data-notectl-angular-wrapper]="true"></div>', isInline: true, styles: [":host{display:block}\n"], encapsulation: i0.ViewEncapsulation.None });
202
- }
203
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotectlEditorComponent, decorators: [{
204
- type: Component,
205
- args: [{ selector: 'notectl-editor', template: '<div #container [attr.data-notectl-angular-wrapper]="true"></div>', encapsulation: ViewEncapsulation.None, providers: [
206
- {
207
- provide: NG_VALUE_ACCESSOR,
208
- useExisting: forwardRef(() => NotectlEditorComponent),
209
- multi: true,
210
- },
211
- ], styles: [":host{display:block}\n"] }]
212
- }], propDecorators: { containerRef: [{
213
- type: ViewChild,
214
- args: ['container', { static: true }]
215
- }], debug: [{
216
- type: Input
217
- }], content: [{
218
- type: Input
219
- }], placeholder: [{
220
- type: Input
221
- }], readOnly: [{
222
- type: Input
223
- }], accessibility: [{
224
- type: Input
225
- }], i18n: [{
226
- type: Input
227
- }], theme: [{
228
- type: Input
229
- }], className: [{
230
- type: Input
231
- }], contentChange: [{
232
- type: Output
233
- }], selectionChange: [{
234
- type: Output
235
- }], editorFocus: [{
236
- type: Output
237
- }], editorBlur: [{
238
- type: Output
239
- }], ready: [{
240
- type: Output
241
- }], error: [{
242
- type: Output
243
- }] } });
244
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90ZWN0bC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9ub3RlY3RsLWVkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsVUFBVSxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFJekU7O0dBRUc7QUFjSCxNQUFNLE9BQU8sc0JBQXNCO0lBQ1MsWUFBWSxDQUE4QjtJQUVwRixpQkFBaUI7SUFDUixLQUFLLENBQVc7SUFFekIsc0JBQXNCO0lBQ2IsT0FBTyxDQUFtQjtJQUVuQyx1QkFBdUI7SUFDZCxXQUFXLENBQVU7SUFFOUIscUJBQXFCO0lBQ1osUUFBUSxDQUFXO0lBRTVCLGtDQUFrQztJQUN6QixhQUFhLENBQWlDO0lBRXZELHlDQUF5QztJQUNoQyxJQUFJLENBQXdCO0lBRXJDLDBCQUEwQjtJQUNqQixLQUFLLENBQXlCO0lBRXZDLHdCQUF3QjtJQUNmLFNBQVMsQ0FBVTtJQUU1QixtQ0FBbUM7SUFDekIsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7SUFFdEQscUNBQXFDO0lBQzNCLGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0lBRXhELHNDQUFzQztJQUM1QixXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQUVqRCxzQ0FBc0M7SUFDNUIsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFFaEQsbUNBQW1DO0lBQ3pCLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO0lBRWhELG1DQUFtQztJQUN6QixLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztJQUVwQyxNQUFNLEdBQTZC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QVc7c0JBQXBCLE1BQU07Z0JBR0csVUFBVTtzQkFBbkIsTUFBTTtnQkFHRyxLQUFLO3NCQUFkLE1BQU07Z0JBR0csS0FBSztzQkFBZCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBbmd1bGFyIGNvbXBvbmVudCB3cmFwcGVyIGZvciBOb3RlY3RsRWRpdG9yXG4gKi9cblxuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBmb3J3YXJkUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5vdGVjdGxFZGl0b3IgYXMgTm90ZWN0bEVkaXRvckNvcmUgfSBmcm9tICdAbm90ZWN0bC9jb3JlJztcbmltcG9ydCB0eXBlIHsgRWRpdG9yQ29uZmlnLCBFZGl0b3JBUEkgfSBmcm9tICdAbm90ZWN0bC9jb3JlJztcblxuLyoqXG4gKiBOb3RlY3RsRWRpdG9yIEFuZ3VsYXIgY29tcG9uZW50XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25vdGVjdGwtZWRpdG9yJyxcbiAgdGVtcGxhdGU6ICc8ZGl2ICNjb250YWluZXIgW2F0dHIuZGF0YS1ub3RlY3RsLWFuZ3VsYXItd3JhcHBlcl09XCJ0cnVlXCI+PC9kaXY+JyxcbiAgc3R5bGVzOiBbJzpob3N0IHsgZGlzcGxheTogYmxvY2s7IH0nXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOb3RlY3RsRWRpdG9yQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIE5vdGVjdGxFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBjb250YWluZXJSZWYhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAvKiogRGVidWcgbW9kZSAqL1xuICBASW5wdXQoKSBkZWJ1Zz86IGJvb2xlYW47XG5cbiAgLyoqIEluaXRpYWwgY29udGVudCAqL1xuICBASW5wdXQoKSBjb250ZW50Pzogc3RyaW5nIHwgb2JqZWN0O1xuXG4gIC8qKiBQbGFjZWhvbGRlciB0ZXh0ICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuXG4gIC8qKiBSZWFkLW9ubHkgbW9kZSAqL1xuICBASW5wdXQoKSByZWFkT25seT86IGJvb2xlYW47XG5cbiAgLyoqIEFjY2Vzc2liaWxpdHkgY29uZmlndXJhdGlvbiAqL1xuICBASW5wdXQoKSBhY2Nlc3NpYmlsaXR5PzogRWRpdG9yQ29uZmlnWydhY2Nlc3NpYmlsaXR5J107XG5cbiAgLyoqIEludGVybmF0aW9uYWxpemF0aW9uIGNvbmZpZ3VyYXRpb24gKi9cbiAgQElucHV0KCkgaTE4bj86IEVkaXRvckNvbmZpZ1snaTE4biddO1xuXG4gIC8qKiBUaGVtZSBjb25maWd1cmF0aW9uICovXG4gIEBJbnB1dCgpIHRoZW1lPzogRWRpdG9yQ29uZmlnWyd0aGVtZSddO1xuXG4gIC8qKiBDdXN0b20gY2xhc3MgbmFtZSAqL1xuICBASW5wdXQoKSBjbGFzc05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbiBjb250ZW50IGNoYW5nZXMgKi9cbiAgQE91dHB1dCgpIGNvbnRlbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHVua25vd24+KCk7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbiBzZWxlY3Rpb24gY2hhbmdlcyAqL1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx1bmtub3duPigpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gZWRpdG9yIGdhaW5zIGZvY3VzICovXG4gIEBPdXRwdXQoKSBlZGl0b3JGb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKiogRW1pdHRlZCB3aGVuIGVkaXRvciBsb3NlcyBmb2N1cyAqL1xuICBAT3V0cHV0KCkgZWRpdG9yQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKiogRW1pdHRlZCB3aGVuIGVkaXRvciBpcyByZWFkeSAqL1xuICBAT3V0cHV0KCkgcmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPEVkaXRvckFQST4oKTtcblxuICAvKiogRW1pdHRlZCB3aGVuIGFuIGVycm9yIG9jY3VycyAqL1xuICBAT3V0cHV0KCkgZXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPEVycm9yPigpO1xuXG4gIHByaXZhdGUgZWRpdG9yOiBOb3RlY3RsRWRpdG9yQ29yZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRFZGl0b3IoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveUVkaXRvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGVkaXRvciBpbnN0YW5jZVxuICAgKi9cbiAgcHJpdmF0ZSBpbml0RWRpdG9yKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb250YWluZXJSZWY/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vdGVjdGxFZGl0b3I6IENvbnRhaW5lciBlbGVtZW50IG5vdCBmb3VuZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBlZGl0b3IgaW5zdGFuY2VcbiAgICB0aGlzLmVkaXRvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ25vdGVjdGwtZWRpdG9yJykgYXMgTm90ZWN0bEVkaXRvckNvcmU7XG5cbiAgICAvLyBDb25maWd1cmUgZWRpdG9yXG4gICAgY29uc3QgY29uZmlnOiBFZGl0b3JDb25maWcgPSB7XG4gICAgICBkZWJ1ZzogdGhpcy5kZWJ1ZyxcbiAgICAgIGNvbnRlbnQ6IHRoaXMuY29udGVudCxcbiAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLnBsYWNlaG9sZGVyLFxuICAgICAgcmVhZE9ubHk6IHRoaXMucmVhZE9ubHksXG4gICAgICBhY2Nlc3NpYmlsaXR5OiB0aGlzLmFjY2Vzc2liaWxpdHksXG4gICAgICBpMThuOiB0aGlzLmkxOG4sXG4gICAgICB0aGVtZTogdGhpcy50aGVtZSxcbiAgICB9O1xuICAgIHRoaXMuZWRpdG9yLmNvbmZpZ3VyZShjb25maWcpO1xuXG4gICAgLy8gQXR0YWNoIGV2ZW50IGxpc3RlbmVyc1xuICAgIHRoaXMuZWRpdG9yLm9uKCdjb250ZW50LWNoYW5nZScsIChkYXRhKSA9PiB7XG4gICAgICBjb25zdCBldmVudERhdGEgPSBkYXRhIGFzIHsgY29udGVudD86IHVua25vd24gfTtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBldmVudERhdGEuY29udGVudDtcbiAgICAgIHRoaXMuY29udGVudENoYW5nZS5lbWl0KGNvbnRlbnQpO1xuICAgICAgdGhpcy5vbkNoYW5nZShjb250ZW50KTtcbiAgICB9KTtcblxuICAgIHRoaXMuZWRpdG9yLm9uKCdzZWxlY3Rpb24tY2hhbmdlJywgKGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IGRhdGEgYXMgeyBzZWxlY3Rpb24/OiB1bmtub3duIH07XG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KGV2ZW50RGF0YS5zZWxlY3Rpb24pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5lZGl0b3Iub24oJ2ZvY3VzJywgKCkgPT4ge1xuICAgICAgdGhpcy5lZGl0b3JGb2N1cy5lbWl0KCk7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5lZGl0b3Iub24oJ2JsdXInLCAoKSA9PiB7XG4gICAgICB0aGlzLmVkaXRvckJsdXIuZW1pdCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5lZGl0b3Iub24oJ3JlYWR5JywgKCkgPT4ge1xuICAgICAgdGhpcy5yZWFkeS5lbWl0KHRoaXMuZ2V0RWRpdG9yQVBJKCkpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5lZGl0b3Iub24oJ2Vycm9yJywgKGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IGRhdGEgYXMgeyBlcnJvcj86IEVycm9yIH07XG4gICAgICBpZiAoZXZlbnREYXRhLmVycm9yKSB7XG4gICAgICAgIHRoaXMuZXJyb3IuZW1pdChldmVudERhdGEuZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTW91bnQgZWRpdG9yXG4gICAgdGhpcy5jb250YWluZXJSZWYubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmVkaXRvcik7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveSB0aGUgZWRpdG9yIGluc3RhbmNlXG4gICAqL1xuICBwcml2YXRlIGRlc3Ryb3lFZGl0b3IoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWRpdG9yKSB7XG4gICAgICB0aGlzLmVkaXRvci5kZXN0cm95KCk7XG4gICAgICBpZiAodGhpcy5jb250YWluZXJSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmNvbnRhaW5zKHRoaXMuZWRpdG9yKSkge1xuICAgICAgICB0aGlzLmNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuZWRpdG9yKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZWRpdG9yID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGVkaXRvciBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUNvbmZpZygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZWRpdG9yKSByZXR1cm47XG5cbiAgICBjb25zdCBjb25maWc6IEVkaXRvckNvbmZpZyA9IHtcbiAgICAgIGRlYnVnOiB0aGlzLmRlYnVnLFxuICAgICAgY29udGVudDogdGhpcy5jb250ZW50LFxuICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucGxhY2Vob2xkZXIsXG4gICAgICByZWFkT25seTogdGhpcy5yZWFkT25seSxcbiAgICAgIGFjY2Vzc2liaWxpdHk6IHRoaXMuYWNjZXNzaWJpbGl0eSxcbiAgICAgIGkxOG46IHRoaXMuaTE4bixcbiAgICAgIHRoZW1lOiB0aGlzLnRoZW1lLFxuICAgIH07XG4gICAgdGhpcy5lZGl0b3IuY29uZmlndXJlKGNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGVkaXRvciBBUElcbiAgICovXG4gIHByaXZhdGUgZ2V0RWRpdG9yQVBJKCk6IEVkaXRvckFQSSB7XG4gICAgaWYgKCF0aGlzLmVkaXRvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFZGl0b3Igbm90IGluaXRpYWxpemVkJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmVkaXRvciBhcyBFZGl0b3JBUEk7XG4gIH1cblxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvciBpbXBsZW1lbnRhdGlvblxuICB3cml0ZVZhbHVlKHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWRpdG9yICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnNldENvbnRlbnQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmVkaXRvcikge1xuICAgICAgdGhpcy5lZGl0b3IuY29uZmlndXJlKHsgcmVhZE9ubHk6IGlzRGlzYWJsZWQgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUHVibGljIEFQSSBtZXRob2RzXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBlZGl0b3IgY29udGVudFxuICAgKi9cbiAgcHVibGljIGdldENvbnRlbnQoKTogdW5rbm93biB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yPy5nZXRDb250ZW50KCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGVkaXRvciBjb250ZW50XG4gICAqL1xuICBwdWJsaWMgc2V0Q29udGVudChjb250ZW50OiB1bmtub3duKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWRpdG9yICYmIHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5lZGl0b3Iuc2V0Q29udGVudChjb250ZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgZWRpdG9yIHN0YXRlXG4gICAqL1xuICBwdWJsaWMgZ2V0U3RhdGUoKTogdW5rbm93biB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yPy5nZXRTdGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYW4gZWRpdG9yIGNvbW1hbmRcbiAgICovXG4gIHB1YmxpYyBleGVjdXRlQ29tbWFuZChjb21tYW5kOiBzdHJpbmcsIC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yPy5leGVjdXRlQ29tbWFuZChjb21tYW5kLCAuLi5hcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIHBsdWdpblxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyUGx1Z2luKHBsdWdpbjogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yPy5yZWdpc3RlclBsdWdpbihwbHVnaW4gYXMgYW55KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVyIGEgcGx1Z2luXG4gICAqL1xuICBwdWJsaWMgdW5yZWdpc3RlclBsdWdpbihwbHVnaW5JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0b3I/LnVucmVnaXN0ZXJQbHVnaW4ocGx1Z2luSWQpO1xuICB9XG59XG4iXX0=
@@ -1,164 +0,0 @@
1
- /**
2
- * Angular directive for NotectlEditor (optional alternative to component)
3
- */
4
- import { Directive, EventEmitter, Input, Output, forwardRef, } from '@angular/core';
5
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
6
- import * as i0 from "@angular/core";
7
- /**
8
- * Directive to use NotectlEditor on any element
9
- * Usage: <div notectl-editor [content]="content"></div>
10
- */
11
- export class NotectlEditorDirective {
12
- elementRef;
13
- debug;
14
- content;
15
- placeholder;
16
- readOnly;
17
- accessibility;
18
- i18n;
19
- theme;
20
- contentChange = new EventEmitter();
21
- selectionChange = new EventEmitter();
22
- editorFocus = new EventEmitter();
23
- editorBlur = new EventEmitter();
24
- ready = new EventEmitter();
25
- error = new EventEmitter();
26
- editor = null;
27
- onChange = () => { };
28
- onTouched = () => { };
29
- constructor(elementRef) {
30
- this.elementRef = elementRef;
31
- }
32
- ngOnInit() {
33
- this.initEditor();
34
- }
35
- ngOnDestroy() {
36
- this.destroyEditor();
37
- }
38
- initEditor() {
39
- const hostElement = this.elementRef.nativeElement;
40
- // Create editor instance
41
- this.editor = document.createElement('notectl-editor');
42
- // Configure editor
43
- const config = {
44
- debug: this.debug,
45
- content: this.content,
46
- placeholder: this.placeholder,
47
- readOnly: this.readOnly,
48
- accessibility: this.accessibility,
49
- i18n: this.i18n,
50
- theme: this.theme,
51
- };
52
- this.editor.configure(config);
53
- // Attach event listeners
54
- this.editor.on('content-change', (data) => {
55
- const eventData = data;
56
- const content = eventData.content;
57
- this.contentChange.emit(content);
58
- this.onChange(content);
59
- });
60
- this.editor.on('selection-change', (data) => {
61
- const eventData = data;
62
- this.selectionChange.emit(eventData.selection);
63
- });
64
- this.editor.on('focus', () => {
65
- this.editorFocus.emit();
66
- this.onTouched();
67
- });
68
- this.editor.on('blur', () => {
69
- this.editorBlur.emit();
70
- });
71
- this.editor.on('ready', () => {
72
- this.ready.emit(this.getEditorAPI());
73
- });
74
- this.editor.on('error', (data) => {
75
- const eventData = data;
76
- if (eventData.error) {
77
- this.error.emit(eventData.error);
78
- }
79
- });
80
- // Mount editor
81
- hostElement.appendChild(this.editor);
82
- }
83
- destroyEditor() {
84
- if (this.editor) {
85
- this.editor.destroy();
86
- const hostElement = this.elementRef.nativeElement;
87
- if (hostElement.contains(this.editor)) {
88
- hostElement.removeChild(this.editor);
89
- }
90
- this.editor = null;
91
- }
92
- }
93
- getEditorAPI() {
94
- if (!this.editor) {
95
- throw new Error('Editor not initialized');
96
- }
97
- return this.editor;
98
- }
99
- // ControlValueAccessor implementation
100
- writeValue(value) {
101
- if (this.editor && typeof value === 'string') {
102
- this.editor.setContent(value);
103
- }
104
- }
105
- registerOnChange(fn) {
106
- this.onChange = fn;
107
- }
108
- registerOnTouched(fn) {
109
- this.onTouched = fn;
110
- }
111
- setDisabledState(isDisabled) {
112
- if (this.editor) {
113
- this.editor.configure({ readOnly: isDisabled });
114
- }
115
- }
116
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotectlEditorDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
117
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: NotectlEditorDirective, selector: "[notectl-editor]", inputs: { debug: "debug", content: "content", placeholder: "placeholder", readOnly: "readOnly", accessibility: "accessibility", i18n: "i18n", theme: "theme" }, outputs: { contentChange: "contentChange", selectionChange: "selectionChange", editorFocus: "editorFocus", editorBlur: "editorBlur", ready: "ready", error: "error" }, providers: [
118
- {
119
- provide: NG_VALUE_ACCESSOR,
120
- useExisting: forwardRef(() => NotectlEditorDirective),
121
- multi: true,
122
- },
123
- ], ngImport: i0 });
124
- }
125
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotectlEditorDirective, decorators: [{
126
- type: Directive,
127
- args: [{
128
- selector: '[notectl-editor]',
129
- providers: [
130
- {
131
- provide: NG_VALUE_ACCESSOR,
132
- useExisting: forwardRef(() => NotectlEditorDirective),
133
- multi: true,
134
- },
135
- ],
136
- }]
137
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { debug: [{
138
- type: Input
139
- }], content: [{
140
- type: Input
141
- }], placeholder: [{
142
- type: Input
143
- }], readOnly: [{
144
- type: Input
145
- }], accessibility: [{
146
- type: Input
147
- }], i18n: [{
148
- type: Input
149
- }], theme: [{
150
- type: Input
151
- }], contentChange: [{
152
- type: Output
153
- }], selectionChange: [{
154
- type: Output
155
- }], editorFocus: [{
156
- type: Output
157
- }], editorBlur: [{
158
- type: Output
159
- }], ready: [{
160
- type: Output
161
- }], error: [{
162
- type: Output
163
- }] } });
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90ZWN0bC1lZGl0b3IuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9ub3RlY3RsLWVkaXRvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBSXpFOzs7R0FHRztBQVdILE1BQU0sT0FBTyxzQkFBc0I7SUFvQmI7SUFuQlgsS0FBSyxDQUFXO0lBQ2hCLE9BQU8sQ0FBbUI7SUFDMUIsV0FBVyxDQUFVO0lBQ3JCLFFBQVEsQ0FBVztJQUNuQixhQUFhLENBQWlDO0lBQzlDLElBQUksQ0FBd0I7SUFDNUIsS0FBSyxDQUF5QjtJQUU3QixhQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztJQUM1QyxlQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztJQUM5QyxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQUN2QyxVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQUN0QyxLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztJQUN0QyxLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztJQUVwQyxNQUFNLEdBQTZCLElBQUksQ0FBQztJQUN4QyxRQUFRLEdBQTZCLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUM5QyxTQUFTLEdBQWUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBRXpDLFlBQW9CLFVBQW1DO1FBQW5DLGVBQVUsR0FBVixVQUFVLENBQXlCO0lBQUcsQ0FBQztJQUUzRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFD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NEZBRVUsc0JBQXNCO2tCQVZsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx1QkFBdUIsQ0FBQzs0QkFDckQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0Y7K0VBRVUsS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNO2dCQUNHLEtBQUs7c0JBQWQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQW5ndWxhciBkaXJlY3RpdmUgZm9yIE5vdGVjdGxFZGl0b3IgKG9wdGlvbmFsIGFsdGVybmF0aXZlIHRvIGNvbXBvbmVudClcbiAqL1xuXG5pbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIGZvcndhcmRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTm90ZWN0bEVkaXRvciBhcyBOb3RlY3RsRWRpdG9yQ29yZSB9IGZyb20gJ0Bub3RlY3RsL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBFZGl0b3JDb25maWcsIEVkaXRvckFQSSB9IGZyb20gJ0Bub3RlY3RsL2NvcmUnO1xuXG4vKipcbiAqIERpcmVjdGl2ZSB0byB1c2UgTm90ZWN0bEVkaXRvciBvbiBhbnkgZWxlbWVudFxuICogVXNhZ2U6IDxkaXYgbm90ZWN0bC1lZGl0b3IgW2NvbnRlbnRdPVwiY29udGVudFwiPjwvZGl2PlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbm90ZWN0bC1lZGl0b3JdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOb3RlY3RsRWRpdG9yRGlyZWN0aXZlKSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIE5vdGVjdGxFZGl0b3JEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASW5wdXQoKSBkZWJ1Zz86IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNvbnRlbnQ/OiBzdHJpbmcgfCBvYmplY3Q7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBASW5wdXQoKSByZWFkT25seT86IGJvb2xlYW47XG4gIEBJbnB1dCgpIGFjY2Vzc2liaWxpdHk/OiBFZGl0b3JDb25maWdbJ2FjY2Vzc2liaWxpdHknXTtcbiAgQElucHV0KCkgaTE4bj86IEVkaXRvckNvbmZpZ1snaTE4biddO1xuICBASW5wdXQoKSB0aGVtZT86IEVkaXRvckNvbmZpZ1sndGhlbWUnXTtcblxuICBAT3V0cHV0KCkgY29udGVudENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8dW5rbm93bj4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8dW5rbm93bj4oKTtcbiAgQE91dHB1dCgpIGVkaXRvckZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZWRpdG9yQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxFZGl0b3JBUEk+KCk7XG4gIEBPdXRwdXQoKSBlcnJvciA9IG5ldyBFdmVudEVtaXR0ZXI8RXJyb3I+KCk7XG5cbiAgcHJpdmF0ZSBlZGl0b3I6IE5vdGVjdGxFZGl0b3JDb3JlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgb25DaGFuZ2U6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCA9ICgpID0+IHt9O1xuICBwcml2YXRlIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0RWRpdG9yKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3lFZGl0b3IoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEVkaXRvcigpOiB2b2lkIHtcbiAgICBjb25zdCBob3N0RWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgLy8gQ3JlYXRlIGVkaXRvciBpbnN0YW5jZVxuICAgIHRoaXMuZWRpdG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbm90ZWN0bC1lZGl0b3InKSBhcyBOb3RlY3RsRWRpdG9yQ29yZTtcblxuICAgIC8vIENvbmZpZ3VyZSBlZGl0b3JcbiAgICBjb25zdCBjb25maWc6IEVkaXRvckNvbmZpZyA9IHtcbiAgICAgIGRlYnVnOiB0aGlzLmRlYnVnLFxuICAgICAgY29udGVudDogdGhpcy5jb250ZW50LFxuICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucGxhY2Vob2xkZXIsXG4gICAgICByZWFkT25seTogdGhpcy5yZWFkT25seSxcbiAgICAgIGFjY2Vzc2liaWxpdHk6IHRoaXMuYWNjZXNzaWJpbGl0eSxcbiAgICAgIGkxOG46IHRoaXMuaTE4bixcbiAgICAgIHRoZW1lOiB0aGlzLnRoZW1lLFxuICAgIH07XG4gICAgdGhpcy5lZGl0b3IuY29uZmlndXJlKGNvbmZpZyk7XG5cbiAgICAvLyBBdHRhY2ggZXZlbnQgbGlzdGVuZXJzXG4gICAgdGhpcy5lZGl0b3Iub24oJ2NvbnRlbnQtY2hhbmdlJywgKGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IGRhdGEgYXMgeyBjb250ZW50PzogdW5rbm93biB9O1xuICAgICAgY29uc3QgY29udGVudCA9IGV2ZW50RGF0YS5jb250ZW50O1xuICAgICAgdGhpcy5jb250ZW50Q2hhbmdlLmVtaXQoY29udGVudCk7XG4gICAgICB0aGlzLm9uQ2hhbmdlKGNvbnRlbnQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5lZGl0b3Iub24oJ3NlbGVjdGlvbi1jaGFuZ2UnLCAoZGF0YSkgPT4ge1xuICAgICAgY29uc3QgZXZlbnREYXRhID0gZGF0YSBhcyB7IHNlbGVjdGlvbj86IHVua25vd24gfTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoZXZlbnREYXRhLnNlbGVjdGlvbik7XG4gICAgfSk7XG5cbiAgICB0aGlzLmVkaXRvci5vbignZm9jdXMnLCAoKSA9PiB7XG4gICAgICB0aGlzLmVkaXRvckZvY3VzLmVtaXQoKTtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmVkaXRvci5vbignYmx1cicsICgpID0+IHtcbiAgICAgIHRoaXMuZWRpdG9yQmx1ci5lbWl0KCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmVkaXRvci5vbigncmVhZHknLCAoKSA9PiB7XG4gICAgICB0aGlzLnJlYWR5LmVtaXQodGhpcy5nZXRFZGl0b3JBUEkoKSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmVkaXRvci5vbignZXJyb3InLCAoZGF0YSkgPT4ge1xuICAgICAgY29uc3QgZXZlbnREYXRhID0gZGF0YSBhcyB7IGVycm9yPzogRXJyb3IgfTtcbiAgICAgIGlmIChldmVudERhdGEuZXJyb3IpIHtcbiAgICAgICAgdGhpcy5lcnJvci5lbWl0KGV2ZW50RGF0YS5lcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBNb3VudCBlZGl0b3JcbiAgICBob3N0RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmVkaXRvcik7XG4gIH1cblxuICBwcml2YXRlIGRlc3Ryb3lFZGl0b3IoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWRpdG9yKSB7XG4gICAgICB0aGlzLmVkaXRvci5kZXN0cm95KCk7XG4gICAgICBjb25zdCBob3N0RWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgaWYgKGhvc3RFbGVtZW50LmNvbnRhaW5zKHRoaXMuZWRpdG9yKSkge1xuICAgICAgICBob3N0RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmVkaXRvcik7XG4gICAgICB9XG4gICAgICB0aGlzLmVkaXRvciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRFZGl0b3JBUEkoKTogRWRpdG9yQVBJIHtcbiAgICBpZiAoIXRoaXMuZWRpdG9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VkaXRvciBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yIGFzIEVkaXRvckFQSTtcbiAgfVxuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGltcGxlbWVudGF0aW9uXG4gIHdyaXRlVmFsdWUodmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lZGl0b3IgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5lZGl0b3Iuc2V0Q29udGVudCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWRpdG9yKSB7XG4gICAgICB0aGlzLmVkaXRvci5jb25maWd1cmUoeyByZWFkT25seTogaXNEaXNhYmxlZCB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,21 +0,0 @@
1
- /**
2
- * Angular module for NotectlEditor
3
- */
4
- import { NgModule } from '@angular/core';
5
- import { CommonModule } from '@angular/common';
6
- import { NotectlEditorComponent } from './notectl-editor.component';
7
- import * as i0 from "@angular/core";
8
- export class NotectlEditorModule {
9
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotectlEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: NotectlEditorModule, declarations: [NotectlEditorComponent], imports: [CommonModule], exports: [NotectlEditorComponent] });
11
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotectlEditorModule, imports: [CommonModule] });
12
- }
13
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotectlEditorModule, decorators: [{
14
- type: NgModule,
15
- args: [{
16
- declarations: [NotectlEditorComponent],
17
- imports: [CommonModule],
18
- exports: [NotectlEditorComponent],
19
- }]
20
- }] });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90ZWN0bC1lZGl0b3IubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9ub3RlY3RsLWVkaXRvci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFPcEUsTUFBTSxPQUFPLG1CQUFtQjt3R0FBbkIsbUJBQW1CO3lHQUFuQixtQkFBbUIsaUJBSmYsc0JBQXNCLGFBQzNCLFlBQVksYUFDWixzQkFBc0I7eUdBRXJCLG1CQUFtQixZQUhwQixZQUFZOzs0RkFHWCxtQkFBbUI7a0JBTC9CLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ3RDLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ2xDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBbmd1bGFyIG1vZHVsZSBmb3IgTm90ZWN0bEVkaXRvclxuICovXG5cbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTm90ZWN0bEVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4vbm90ZWN0bC1lZGl0b3IuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbTm90ZWN0bEVkaXRvckNvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBleHBvcnRzOiBbTm90ZWN0bEVkaXRvckNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIE5vdGVjdGxFZGl0b3JNb2R1bGUge31cbiJdfQ==
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90ZWN0bC1hbmd1bGFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25vdGVjdGwtYW5ndWxhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
@@ -1,7 +0,0 @@
1
- /**
2
- * Public API surface of @notectl/angular
3
- */
4
- export * from './lib/notectl-editor.component';
5
- export * from './lib/notectl-editor.module';
6
- export * from './lib/notectl-editor.directive';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsZ0NBQWdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFB1YmxpYyBBUEkgc3VyZmFjZSBvZiBAbm90ZWN0bC9hbmd1bGFyXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvbm90ZWN0bC1lZGl0b3IuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL25vdGVjdGwtZWRpdG9yLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9ub3RlY3RsLWVkaXRvci5kaXJlY3RpdmUnO1xuIl19
@@ -1,439 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { EventEmitter, forwardRef, Output, Input, ViewChild, ViewEncapsulation, Component, NgModule, Directive } from '@angular/core';
3
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
- import { CommonModule } from '@angular/common';
5
-
6
- /**
7
- * Angular component wrapper for NotectlEditor
8
- */
9
- /**
10
- * NotectlEditor Angular component
11
- */
12
- class NotectlEditorComponent {
13
- containerRef;
14
- /** Debug mode */
15
- debug;
16
- /** Initial content */
17
- content;
18
- /** Placeholder text */
19
- placeholder;
20
- /** Read-only mode */
21
- readOnly;
22
- /** Accessibility configuration */
23
- accessibility;
24
- /** Internationalization configuration */
25
- i18n;
26
- /** Theme configuration */
27
- theme;
28
- /** Custom class name */
29
- className;
30
- /** Emitted when content changes */
31
- contentChange = new EventEmitter();
32
- /** Emitted when selection changes */
33
- selectionChange = new EventEmitter();
34
- /** Emitted when editor gains focus */
35
- editorFocus = new EventEmitter();
36
- /** Emitted when editor loses focus */
37
- editorBlur = new EventEmitter();
38
- /** Emitted when editor is ready */
39
- ready = new EventEmitter();
40
- /** Emitted when an error occurs */
41
- error = new EventEmitter();
42
- editor = null;
43
- onChange = () => { };
44
- onTouched = () => { };
45
- ngOnInit() {
46
- this.initEditor();
47
- }
48
- ngOnDestroy() {
49
- this.destroyEditor();
50
- }
51
- /**
52
- * Initialize the editor instance
53
- */
54
- initEditor() {
55
- if (!this.containerRef?.nativeElement) {
56
- console.error('NotectlEditor: Container element not found');
57
- return;
58
- }
59
- // Create editor instance
60
- this.editor = document.createElement('notectl-editor');
61
- // Configure editor
62
- const config = {
63
- debug: this.debug,
64
- content: this.content,
65
- placeholder: this.placeholder,
66
- readOnly: this.readOnly,
67
- accessibility: this.accessibility,
68
- i18n: this.i18n,
69
- theme: this.theme,
70
- };
71
- this.editor.configure(config);
72
- // Attach event listeners
73
- this.editor.on('content-change', (data) => {
74
- const eventData = data;
75
- const content = eventData.content;
76
- this.contentChange.emit(content);
77
- this.onChange(content);
78
- });
79
- this.editor.on('selection-change', (data) => {
80
- const eventData = data;
81
- this.selectionChange.emit(eventData.selection);
82
- });
83
- this.editor.on('focus', () => {
84
- this.editorFocus.emit();
85
- this.onTouched();
86
- });
87
- this.editor.on('blur', () => {
88
- this.editorBlur.emit();
89
- });
90
- this.editor.on('ready', () => {
91
- this.ready.emit(this.getEditorAPI());
92
- });
93
- this.editor.on('error', (data) => {
94
- const eventData = data;
95
- if (eventData.error) {
96
- this.error.emit(eventData.error);
97
- }
98
- });
99
- // Mount editor
100
- this.containerRef.nativeElement.appendChild(this.editor);
101
- }
102
- /**
103
- * Destroy the editor instance
104
- */
105
- destroyEditor() {
106
- if (this.editor) {
107
- this.editor.destroy();
108
- if (this.containerRef?.nativeElement?.contains(this.editor)) {
109
- this.containerRef.nativeElement.removeChild(this.editor);
110
- }
111
- this.editor = null;
112
- }
113
- }
114
- /**
115
- * Update editor configuration
116
- */
117
- updateConfig() {
118
- if (!this.editor)
119
- return;
120
- const config = {
121
- debug: this.debug,
122
- content: this.content,
123
- placeholder: this.placeholder,
124
- readOnly: this.readOnly,
125
- accessibility: this.accessibility,
126
- i18n: this.i18n,
127
- theme: this.theme,
128
- };
129
- this.editor.configure(config);
130
- }
131
- /**
132
- * Get editor API
133
- */
134
- getEditorAPI() {
135
- if (!this.editor) {
136
- throw new Error('Editor not initialized');
137
- }
138
- return this.editor;
139
- }
140
- // ControlValueAccessor implementation
141
- writeValue(value) {
142
- if (this.editor && typeof value === 'string') {
143
- this.editor.setContent(value);
144
- }
145
- }
146
- registerOnChange(fn) {
147
- this.onChange = fn;
148
- }
149
- registerOnTouched(fn) {
150
- this.onTouched = fn;
151
- }
152
- setDisabledState(isDisabled) {
153
- if (this.editor) {
154
- this.editor.configure({ readOnly: isDisabled });
155
- }
156
- }
157
- // Public API methods
158
- /**
159
- * Get current editor content
160
- */
161
- getContent() {
162
- return this.editor?.getContent();
163
- }
164
- /**
165
- * Set editor content
166
- */
167
- setContent(content) {
168
- if (this.editor && typeof content === 'string') {
169
- this.editor.setContent(content);
170
- }
171
- }
172
- /**
173
- * Get current editor state
174
- */
175
- getState() {
176
- return this.editor?.getState();
177
- }
178
- /**
179
- * Execute an editor command
180
- */
181
- executeCommand(command, ...args) {
182
- this.editor?.executeCommand(command, ...args);
183
- }
184
- /**
185
- * Register a plugin
186
- */
187
- registerPlugin(plugin) {
188
- this.editor?.registerPlugin(plugin);
189
- }
190
- /**
191
- * Unregister a plugin
192
- */
193
- unregisterPlugin(pluginId) {
194
- this.editor?.unregisterPlugin(pluginId);
195
- }
196
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotectlEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
197
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: NotectlEditorComponent, selector: "notectl-editor", inputs: { debug: "debug", content: "content", placeholder: "placeholder", readOnly: "readOnly", accessibility: "accessibility", i18n: "i18n", theme: "theme", className: "className" }, outputs: { contentChange: "contentChange", selectionChange: "selectionChange", editorFocus: "editorFocus", editorBlur: "editorBlur", ready: "ready", error: "error" }, providers: [
198
- {
199
- provide: NG_VALUE_ACCESSOR,
200
- useExisting: forwardRef(() => NotectlEditorComponent),
201
- multi: true,
202
- },
203
- ], viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["container"], descendants: true, static: true }], ngImport: i0, template: '<div #container [attr.data-notectl-angular-wrapper]="true"></div>', isInline: true, styles: [":host{display:block}\n"], encapsulation: i0.ViewEncapsulation.None });
204
- }
205
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotectlEditorComponent, decorators: [{
206
- type: Component,
207
- args: [{ selector: 'notectl-editor', template: '<div #container [attr.data-notectl-angular-wrapper]="true"></div>', encapsulation: ViewEncapsulation.None, providers: [
208
- {
209
- provide: NG_VALUE_ACCESSOR,
210
- useExisting: forwardRef(() => NotectlEditorComponent),
211
- multi: true,
212
- },
213
- ], styles: [":host{display:block}\n"] }]
214
- }], propDecorators: { containerRef: [{
215
- type: ViewChild,
216
- args: ['container', { static: true }]
217
- }], debug: [{
218
- type: Input
219
- }], content: [{
220
- type: Input
221
- }], placeholder: [{
222
- type: Input
223
- }], readOnly: [{
224
- type: Input
225
- }], accessibility: [{
226
- type: Input
227
- }], i18n: [{
228
- type: Input
229
- }], theme: [{
230
- type: Input
231
- }], className: [{
232
- type: Input
233
- }], contentChange: [{
234
- type: Output
235
- }], selectionChange: [{
236
- type: Output
237
- }], editorFocus: [{
238
- type: Output
239
- }], editorBlur: [{
240
- type: Output
241
- }], ready: [{
242
- type: Output
243
- }], error: [{
244
- type: Output
245
- }] } });
246
-
247
- /**
248
- * Angular module for NotectlEditor
249
- */
250
- class NotectlEditorModule {
251
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotectlEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
252
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: NotectlEditorModule, declarations: [NotectlEditorComponent], imports: [CommonModule], exports: [NotectlEditorComponent] });
253
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotectlEditorModule, imports: [CommonModule] });
254
- }
255
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotectlEditorModule, decorators: [{
256
- type: NgModule,
257
- args: [{
258
- declarations: [NotectlEditorComponent],
259
- imports: [CommonModule],
260
- exports: [NotectlEditorComponent],
261
- }]
262
- }] });
263
-
264
- /**
265
- * Angular directive for NotectlEditor (optional alternative to component)
266
- */
267
- /**
268
- * Directive to use NotectlEditor on any element
269
- * Usage: <div notectl-editor [content]="content"></div>
270
- */
271
- class NotectlEditorDirective {
272
- elementRef;
273
- debug;
274
- content;
275
- placeholder;
276
- readOnly;
277
- accessibility;
278
- i18n;
279
- theme;
280
- contentChange = new EventEmitter();
281
- selectionChange = new EventEmitter();
282
- editorFocus = new EventEmitter();
283
- editorBlur = new EventEmitter();
284
- ready = new EventEmitter();
285
- error = new EventEmitter();
286
- editor = null;
287
- onChange = () => { };
288
- onTouched = () => { };
289
- constructor(elementRef) {
290
- this.elementRef = elementRef;
291
- }
292
- ngOnInit() {
293
- this.initEditor();
294
- }
295
- ngOnDestroy() {
296
- this.destroyEditor();
297
- }
298
- initEditor() {
299
- const hostElement = this.elementRef.nativeElement;
300
- // Create editor instance
301
- this.editor = document.createElement('notectl-editor');
302
- // Configure editor
303
- const config = {
304
- debug: this.debug,
305
- content: this.content,
306
- placeholder: this.placeholder,
307
- readOnly: this.readOnly,
308
- accessibility: this.accessibility,
309
- i18n: this.i18n,
310
- theme: this.theme,
311
- };
312
- this.editor.configure(config);
313
- // Attach event listeners
314
- this.editor.on('content-change', (data) => {
315
- const eventData = data;
316
- const content = eventData.content;
317
- this.contentChange.emit(content);
318
- this.onChange(content);
319
- });
320
- this.editor.on('selection-change', (data) => {
321
- const eventData = data;
322
- this.selectionChange.emit(eventData.selection);
323
- });
324
- this.editor.on('focus', () => {
325
- this.editorFocus.emit();
326
- this.onTouched();
327
- });
328
- this.editor.on('blur', () => {
329
- this.editorBlur.emit();
330
- });
331
- this.editor.on('ready', () => {
332
- this.ready.emit(this.getEditorAPI());
333
- });
334
- this.editor.on('error', (data) => {
335
- const eventData = data;
336
- if (eventData.error) {
337
- this.error.emit(eventData.error);
338
- }
339
- });
340
- // Mount editor
341
- hostElement.appendChild(this.editor);
342
- }
343
- destroyEditor() {
344
- if (this.editor) {
345
- this.editor.destroy();
346
- const hostElement = this.elementRef.nativeElement;
347
- if (hostElement.contains(this.editor)) {
348
- hostElement.removeChild(this.editor);
349
- }
350
- this.editor = null;
351
- }
352
- }
353
- getEditorAPI() {
354
- if (!this.editor) {
355
- throw new Error('Editor not initialized');
356
- }
357
- return this.editor;
358
- }
359
- // ControlValueAccessor implementation
360
- writeValue(value) {
361
- if (this.editor && typeof value === 'string') {
362
- this.editor.setContent(value);
363
- }
364
- }
365
- registerOnChange(fn) {
366
- this.onChange = fn;
367
- }
368
- registerOnTouched(fn) {
369
- this.onTouched = fn;
370
- }
371
- setDisabledState(isDisabled) {
372
- if (this.editor) {
373
- this.editor.configure({ readOnly: isDisabled });
374
- }
375
- }
376
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotectlEditorDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
377
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: NotectlEditorDirective, selector: "[notectl-editor]", inputs: { debug: "debug", content: "content", placeholder: "placeholder", readOnly: "readOnly", accessibility: "accessibility", i18n: "i18n", theme: "theme" }, outputs: { contentChange: "contentChange", selectionChange: "selectionChange", editorFocus: "editorFocus", editorBlur: "editorBlur", ready: "ready", error: "error" }, providers: [
378
- {
379
- provide: NG_VALUE_ACCESSOR,
380
- useExisting: forwardRef(() => NotectlEditorDirective),
381
- multi: true,
382
- },
383
- ], ngImport: i0 });
384
- }
385
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotectlEditorDirective, decorators: [{
386
- type: Directive,
387
- args: [{
388
- selector: '[notectl-editor]',
389
- providers: [
390
- {
391
- provide: NG_VALUE_ACCESSOR,
392
- useExisting: forwardRef(() => NotectlEditorDirective),
393
- multi: true,
394
- },
395
- ],
396
- }]
397
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { debug: [{
398
- type: Input
399
- }], content: [{
400
- type: Input
401
- }], placeholder: [{
402
- type: Input
403
- }], readOnly: [{
404
- type: Input
405
- }], accessibility: [{
406
- type: Input
407
- }], i18n: [{
408
- type: Input
409
- }], theme: [{
410
- type: Input
411
- }], contentChange: [{
412
- type: Output
413
- }], selectionChange: [{
414
- type: Output
415
- }], editorFocus: [{
416
- type: Output
417
- }], editorBlur: [{
418
- type: Output
419
- }], ready: [{
420
- type: Output
421
- }], error: [{
422
- type: Output
423
- }] } });
424
-
425
- /**
426
- * Public API surface of @notectl/angular
427
- */
428
-
429
- /**
430
- * @notectl/angular - Angular adapter for NotectlEditor
431
- * @packageDocumentation
432
- */
433
-
434
- /**
435
- * Generated bundle index. Do not edit.
436
- */
437
-
438
- export { NotectlEditorComponent, NotectlEditorDirective, NotectlEditorModule };
439
- //# sourceMappingURL=notectl-angular.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"notectl-angular.mjs","sources":["../../src/lib/notectl-editor.component.ts","../../src/lib/notectl-editor.module.ts","../../src/lib/notectl-editor.directive.ts","../../src/public-api.ts","../../src/index.ts","../../src/notectl-angular.ts"],"sourcesContent":["/**\n * Angular component wrapper for NotectlEditor\n */\n\nimport {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n ViewEncapsulation,\n forwardRef,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NotectlEditor as NotectlEditorCore } from '@notectl/core';\nimport type { EditorConfig, EditorAPI } from '@notectl/core';\n\n/**\n * NotectlEditor Angular component\n */\n@Component({\n selector: 'notectl-editor',\n template: '<div #container [attr.data-notectl-angular-wrapper]=\"true\"></div>',\n styles: [':host { display: block; }'],\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NotectlEditorComponent),\n multi: true,\n },\n ],\n})\nexport class NotectlEditorComponent implements OnInit, OnDestroy, ControlValueAccessor {\n @ViewChild('container', { static: true }) containerRef!: ElementRef<HTMLDivElement>;\n\n /** Debug mode */\n @Input() debug?: boolean;\n\n /** Initial content */\n @Input() content?: string | object;\n\n /** Placeholder text */\n @Input() placeholder?: string;\n\n /** Read-only mode */\n @Input() readOnly?: boolean;\n\n /** Accessibility configuration */\n @Input() accessibility?: EditorConfig['accessibility'];\n\n /** Internationalization configuration */\n @Input() i18n?: EditorConfig['i18n'];\n\n /** Theme configuration */\n @Input() theme?: EditorConfig['theme'];\n\n /** Custom class name */\n @Input() className?: string;\n\n /** Emitted when content changes */\n @Output() contentChange = new EventEmitter<unknown>();\n\n /** Emitted when selection changes */\n @Output() selectionChange = new EventEmitter<unknown>();\n\n /** Emitted when editor gains focus */\n @Output() editorFocus = new EventEmitter<void>();\n\n /** Emitted when editor loses focus */\n @Output() editorBlur = new EventEmitter<void>();\n\n /** Emitted when editor is ready */\n @Output() ready = new EventEmitter<EditorAPI>();\n\n /** Emitted when an error occurs */\n @Output() error = new EventEmitter<Error>();\n\n private editor: NotectlEditorCore | null = null;\n private onChange: (value: unknown) => void = () => {};\n private onTouched: () => void = () => {};\n\n ngOnInit(): void {\n this.initEditor();\n }\n\n ngOnDestroy(): void {\n this.destroyEditor();\n }\n\n /**\n * Initialize the editor instance\n */\n private initEditor(): void {\n if (!this.containerRef?.nativeElement) {\n console.error('NotectlEditor: Container element not found');\n return;\n }\n\n // Create editor instance\n this.editor = document.createElement('notectl-editor') as NotectlEditorCore;\n\n // Configure editor\n const config: EditorConfig = {\n debug: this.debug,\n content: this.content,\n placeholder: this.placeholder,\n readOnly: this.readOnly,\n accessibility: this.accessibility,\n i18n: this.i18n,\n theme: this.theme,\n };\n this.editor.configure(config);\n\n // Attach event listeners\n this.editor.on('content-change', (data) => {\n const eventData = data as { content?: unknown };\n const content = eventData.content;\n this.contentChange.emit(content);\n this.onChange(content);\n });\n\n this.editor.on('selection-change', (data) => {\n const eventData = data as { selection?: unknown };\n this.selectionChange.emit(eventData.selection);\n });\n\n this.editor.on('focus', () => {\n this.editorFocus.emit();\n this.onTouched();\n });\n\n this.editor.on('blur', () => {\n this.editorBlur.emit();\n });\n\n this.editor.on('ready', () => {\n this.ready.emit(this.getEditorAPI());\n });\n\n this.editor.on('error', (data) => {\n const eventData = data as { error?: Error };\n if (eventData.error) {\n this.error.emit(eventData.error);\n }\n });\n\n // Mount editor\n this.containerRef.nativeElement.appendChild(this.editor);\n }\n\n /**\n * Destroy the editor instance\n */\n private destroyEditor(): void {\n if (this.editor) {\n this.editor.destroy();\n if (this.containerRef?.nativeElement?.contains(this.editor)) {\n this.containerRef.nativeElement.removeChild(this.editor);\n }\n this.editor = null;\n }\n }\n\n /**\n * Update editor configuration\n */\n private updateConfig(): void {\n if (!this.editor) return;\n\n const config: EditorConfig = {\n debug: this.debug,\n content: this.content,\n placeholder: this.placeholder,\n readOnly: this.readOnly,\n accessibility: this.accessibility,\n i18n: this.i18n,\n theme: this.theme,\n };\n this.editor.configure(config);\n }\n\n /**\n * Get editor API\n */\n private getEditorAPI(): EditorAPI {\n if (!this.editor) {\n throw new Error('Editor not initialized');\n }\n return this.editor as EditorAPI;\n }\n\n // ControlValueAccessor implementation\n writeValue(value: unknown): void {\n if (this.editor && typeof value === 'string') {\n this.editor.setContent(value);\n }\n }\n\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n if (this.editor) {\n this.editor.configure({ readOnly: isDisabled });\n }\n }\n\n // Public API methods\n /**\n * Get current editor content\n */\n public getContent(): unknown {\n return this.editor?.getContent();\n }\n\n /**\n * Set editor content\n */\n public setContent(content: unknown): void {\n if (this.editor && typeof content === 'string') {\n this.editor.setContent(content);\n }\n }\n\n /**\n * Get current editor state\n */\n public getState(): unknown {\n return this.editor?.getState();\n }\n\n /**\n * Execute an editor command\n */\n public executeCommand(command: string, ...args: unknown[]): void {\n this.editor?.executeCommand(command, ...args);\n }\n\n /**\n * Register a plugin\n */\n public registerPlugin(plugin: unknown): void {\n this.editor?.registerPlugin(plugin as any);\n }\n\n /**\n * Unregister a plugin\n */\n public unregisterPlugin(pluginId: string): void {\n this.editor?.unregisterPlugin(pluginId);\n }\n}\n","/**\n * Angular module for NotectlEditor\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NotectlEditorComponent } from './notectl-editor.component';\n\n@NgModule({\n declarations: [NotectlEditorComponent],\n imports: [CommonModule],\n exports: [NotectlEditorComponent],\n})\nexport class NotectlEditorModule {}\n","/**\n * Angular directive for NotectlEditor (optional alternative to component)\n */\n\nimport {\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n forwardRef,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NotectlEditor as NotectlEditorCore } from '@notectl/core';\nimport type { EditorConfig, EditorAPI } from '@notectl/core';\n\n/**\n * Directive to use NotectlEditor on any element\n * Usage: <div notectl-editor [content]=\"content\"></div>\n */\n@Directive({\n selector: '[notectl-editor]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NotectlEditorDirective),\n multi: true,\n },\n ],\n})\nexport class NotectlEditorDirective implements OnInit, OnDestroy, ControlValueAccessor {\n @Input() debug?: boolean;\n @Input() content?: string | object;\n @Input() placeholder?: string;\n @Input() readOnly?: boolean;\n @Input() accessibility?: EditorConfig['accessibility'];\n @Input() i18n?: EditorConfig['i18n'];\n @Input() theme?: EditorConfig['theme'];\n\n @Output() contentChange = new EventEmitter<unknown>();\n @Output() selectionChange = new EventEmitter<unknown>();\n @Output() editorFocus = new EventEmitter<void>();\n @Output() editorBlur = new EventEmitter<void>();\n @Output() ready = new EventEmitter<EditorAPI>();\n @Output() error = new EventEmitter<Error>();\n\n private editor: NotectlEditorCore | null = null;\n private onChange: (value: unknown) => void = () => {};\n private onTouched: () => void = () => {};\n\n constructor(private elementRef: ElementRef<HTMLElement>) {}\n\n ngOnInit(): void {\n this.initEditor();\n }\n\n ngOnDestroy(): void {\n this.destroyEditor();\n }\n\n private initEditor(): void {\n const hostElement = this.elementRef.nativeElement;\n\n // Create editor instance\n this.editor = document.createElement('notectl-editor') as NotectlEditorCore;\n\n // Configure editor\n const config: EditorConfig = {\n debug: this.debug,\n content: this.content,\n placeholder: this.placeholder,\n readOnly: this.readOnly,\n accessibility: this.accessibility,\n i18n: this.i18n,\n theme: this.theme,\n };\n this.editor.configure(config);\n\n // Attach event listeners\n this.editor.on('content-change', (data) => {\n const eventData = data as { content?: unknown };\n const content = eventData.content;\n this.contentChange.emit(content);\n this.onChange(content);\n });\n\n this.editor.on('selection-change', (data) => {\n const eventData = data as { selection?: unknown };\n this.selectionChange.emit(eventData.selection);\n });\n\n this.editor.on('focus', () => {\n this.editorFocus.emit();\n this.onTouched();\n });\n\n this.editor.on('blur', () => {\n this.editorBlur.emit();\n });\n\n this.editor.on('ready', () => {\n this.ready.emit(this.getEditorAPI());\n });\n\n this.editor.on('error', (data) => {\n const eventData = data as { error?: Error };\n if (eventData.error) {\n this.error.emit(eventData.error);\n }\n });\n\n // Mount editor\n hostElement.appendChild(this.editor);\n }\n\n private destroyEditor(): void {\n if (this.editor) {\n this.editor.destroy();\n const hostElement = this.elementRef.nativeElement;\n if (hostElement.contains(this.editor)) {\n hostElement.removeChild(this.editor);\n }\n this.editor = null;\n }\n }\n\n private getEditorAPI(): EditorAPI {\n if (!this.editor) {\n throw new Error('Editor not initialized');\n }\n return this.editor as EditorAPI;\n }\n\n // ControlValueAccessor implementation\n writeValue(value: unknown): void {\n if (this.editor && typeof value === 'string') {\n this.editor.setContent(value);\n }\n }\n\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n if (this.editor) {\n this.editor.configure({ readOnly: isDisabled });\n }\n }\n}\n","/**\n * Public API surface of @notectl/angular\n */\n\nexport * from './lib/notectl-editor.component';\nexport * from './lib/notectl-editor.module';\nexport * from './lib/notectl-editor.directive';\n","/**\n * @notectl/angular - Angular adapter for NotectlEditor\n * @packageDocumentation\n */\n\nexport * from './public-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/dist/index.d.ts DELETED
@@ -1,5 +0,0 @@
1
- /**
2
- * @notectl/angular - Angular adapter for NotectlEditor
3
- * @packageDocumentation
4
- */
5
- export * from './public-api';
@@ -1,92 +0,0 @@
1
- /**
2
- * Angular component wrapper for NotectlEditor
3
- */
4
- import { ElementRef, EventEmitter, OnDestroy, OnInit } from '@angular/core';
5
- import { ControlValueAccessor } from '@angular/forms';
6
- import type { EditorConfig, EditorAPI } from '@notectl/core';
7
- import * as i0 from "@angular/core";
8
- /**
9
- * NotectlEditor Angular component
10
- */
11
- export declare class NotectlEditorComponent implements OnInit, OnDestroy, ControlValueAccessor {
12
- containerRef: ElementRef<HTMLDivElement>;
13
- /** Debug mode */
14
- debug?: boolean;
15
- /** Initial content */
16
- content?: string | object;
17
- /** Placeholder text */
18
- placeholder?: string;
19
- /** Read-only mode */
20
- readOnly?: boolean;
21
- /** Accessibility configuration */
22
- accessibility?: EditorConfig['accessibility'];
23
- /** Internationalization configuration */
24
- i18n?: EditorConfig['i18n'];
25
- /** Theme configuration */
26
- theme?: EditorConfig['theme'];
27
- /** Custom class name */
28
- className?: string;
29
- /** Emitted when content changes */
30
- contentChange: EventEmitter<unknown>;
31
- /** Emitted when selection changes */
32
- selectionChange: EventEmitter<unknown>;
33
- /** Emitted when editor gains focus */
34
- editorFocus: EventEmitter<void>;
35
- /** Emitted when editor loses focus */
36
- editorBlur: EventEmitter<void>;
37
- /** Emitted when editor is ready */
38
- ready: EventEmitter<EditorAPI>;
39
- /** Emitted when an error occurs */
40
- error: EventEmitter<Error>;
41
- private editor;
42
- private onChange;
43
- private onTouched;
44
- ngOnInit(): void;
45
- ngOnDestroy(): void;
46
- /**
47
- * Initialize the editor instance
48
- */
49
- private initEditor;
50
- /**
51
- * Destroy the editor instance
52
- */
53
- private destroyEditor;
54
- /**
55
- * Update editor configuration
56
- */
57
- private updateConfig;
58
- /**
59
- * Get editor API
60
- */
61
- private getEditorAPI;
62
- writeValue(value: unknown): void;
63
- registerOnChange(fn: (value: unknown) => void): void;
64
- registerOnTouched(fn: () => void): void;
65
- setDisabledState(isDisabled: boolean): void;
66
- /**
67
- * Get current editor content
68
- */
69
- getContent(): unknown;
70
- /**
71
- * Set editor content
72
- */
73
- setContent(content: unknown): void;
74
- /**
75
- * Get current editor state
76
- */
77
- getState(): unknown;
78
- /**
79
- * Execute an editor command
80
- */
81
- executeCommand(command: string, ...args: unknown[]): void;
82
- /**
83
- * Register a plugin
84
- */
85
- registerPlugin(plugin: unknown): void;
86
- /**
87
- * Unregister a plugin
88
- */
89
- unregisterPlugin(pluginId: string): void;
90
- static ɵfac: i0.ɵɵFactoryDeclaration<NotectlEditorComponent, never>;
91
- static ɵcmp: i0.ɵɵComponentDeclaration<NotectlEditorComponent, "notectl-editor", never, { "debug": { "alias": "debug"; "required": false; }; "content": { "alias": "content"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "readOnly": { "alias": "readOnly"; "required": false; }; "accessibility": { "alias": "accessibility"; "required": false; }; "i18n": { "alias": "i18n"; "required": false; }; "theme": { "alias": "theme"; "required": false; }; "className": { "alias": "className"; "required": false; }; }, { "contentChange": "contentChange"; "selectionChange": "selectionChange"; "editorFocus": "editorFocus"; "editorBlur": "editorBlur"; "ready": "ready"; "error": "error"; }, never, never, false, never>;
92
- }
@@ -1,42 +0,0 @@
1
- /**
2
- * Angular directive for NotectlEditor (optional alternative to component)
3
- */
4
- import { ElementRef, EventEmitter, OnDestroy, OnInit } from '@angular/core';
5
- import { ControlValueAccessor } from '@angular/forms';
6
- import type { EditorConfig, EditorAPI } from '@notectl/core';
7
- import * as i0 from "@angular/core";
8
- /**
9
- * Directive to use NotectlEditor on any element
10
- * Usage: <div notectl-editor [content]="content"></div>
11
- */
12
- export declare class NotectlEditorDirective implements OnInit, OnDestroy, ControlValueAccessor {
13
- private elementRef;
14
- debug?: boolean;
15
- content?: string | object;
16
- placeholder?: string;
17
- readOnly?: boolean;
18
- accessibility?: EditorConfig['accessibility'];
19
- i18n?: EditorConfig['i18n'];
20
- theme?: EditorConfig['theme'];
21
- contentChange: EventEmitter<unknown>;
22
- selectionChange: EventEmitter<unknown>;
23
- editorFocus: EventEmitter<void>;
24
- editorBlur: EventEmitter<void>;
25
- ready: EventEmitter<EditorAPI>;
26
- error: EventEmitter<Error>;
27
- private editor;
28
- private onChange;
29
- private onTouched;
30
- constructor(elementRef: ElementRef<HTMLElement>);
31
- ngOnInit(): void;
32
- ngOnDestroy(): void;
33
- private initEditor;
34
- private destroyEditor;
35
- private getEditorAPI;
36
- writeValue(value: unknown): void;
37
- registerOnChange(fn: (value: unknown) => void): void;
38
- registerOnTouched(fn: () => void): void;
39
- setDisabledState(isDisabled: boolean): void;
40
- static ɵfac: i0.ɵɵFactoryDeclaration<NotectlEditorDirective, never>;
41
- static ɵdir: i0.ɵɵDirectiveDeclaration<NotectlEditorDirective, "[notectl-editor]", never, { "debug": { "alias": "debug"; "required": false; }; "content": { "alias": "content"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "readOnly": { "alias": "readOnly"; "required": false; }; "accessibility": { "alias": "accessibility"; "required": false; }; "i18n": { "alias": "i18n"; "required": false; }; "theme": { "alias": "theme"; "required": false; }; }, { "contentChange": "contentChange"; "selectionChange": "selectionChange"; "editorFocus": "editorFocus"; "editorBlur": "editorBlur"; "ready": "ready"; "error": "error"; }, never, never, false, never>;
42
- }
@@ -1,8 +0,0 @@
1
- import * as i0 from "@angular/core";
2
- import * as i1 from "./notectl-editor.component";
3
- import * as i2 from "@angular/common";
4
- export declare class NotectlEditorModule {
5
- static ɵfac: i0.ɵɵFactoryDeclaration<NotectlEditorModule, never>;
6
- static ɵmod: i0.ɵɵNgModuleDeclaration<NotectlEditorModule, [typeof i1.NotectlEditorComponent], [typeof i2.CommonModule], [typeof i1.NotectlEditorComponent]>;
7
- static ɵinj: i0.ɵɵInjectorDeclaration<NotectlEditorModule>;
8
- }
@@ -1,6 +0,0 @@
1
- /**
2
- * Public API surface of @notectl/angular
3
- */
4
- export * from './lib/notectl-editor.component';
5
- export * from './lib/notectl-editor.module';
6
- export * from './lib/notectl-editor.directive';