@aster-editor/angular 0.0.0-stage → 0.4.1

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.
@@ -0,0 +1,624 @@
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, DestroyRef, InjectionToken, afterNextRender, computed, effect, forwardRef, inject, input, makeEnvironmentProviders, output, signal, untracked, viewChild } from "@angular/core";
3
+ import { NG_VALUE_ACCESSOR } from "@angular/forms";
4
+ import { createAster } from "@aster-editor/ui";
5
+ const ASTER_CONFIG = new InjectionToken("ASTER_CONFIG");
6
+ function provideAster(config) {
7
+ return makeEnvironmentProviders([{
8
+ provide: ASTER_CONFIG,
9
+ useValue: config
10
+ }]);
11
+ }
12
+ const ASTER_UPLOAD_HANDLER = new InjectionToken("ASTER_UPLOAD_HANDLER");
13
+ function setOrRemoveAttribute(element, name, value) {
14
+ if (value === void 0 || value === "") element.removeAttribute(name);
15
+ else element.setAttribute(name, value);
16
+ }
17
+ function sameNames(a, b) {
18
+ return a.length === b.length && a.every((name, index) => name === b[index]);
19
+ }
20
+ var AsterEditorComponent = class AsterEditorComponent {
21
+ toolbar = input(void 0, ...ngDevMode ? [{ debugName: "toolbar" }] : /* istanbul ignore next */ []);
22
+ theme = input(void 0, ...ngDevMode ? [{ debugName: "theme" }] : /* istanbul ignore next */ []);
23
+ locale = input(void 0, ...ngDevMode ? [{ debugName: "locale" }] : /* istanbul ignore next */ []);
24
+ placeholder = input(void 0, ...ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []);
25
+ readonly = input(void 0, ...ngDevMode ? [{ debugName: "readonly" }] : /* istanbul ignore next */ []);
26
+ config = input({}, ...ngDevMode ? [{ debugName: "config" }] : /* istanbul ignore next */ []);
27
+ wordPaste = input(true, ...ngDevMode ? [{ debugName: "wordPaste" }] : /* istanbul ignore next */ []);
28
+ ariaLabel = input(void 0, ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
29
+ ariaLabelledBy = input(void 0, ...ngDevMode ? [{ debugName: "ariaLabelledBy" }] : /* istanbul ignore next */ []);
30
+ variables = input(void 0, ...ngDevMode ? [{ debugName: "variables" }] : /* istanbul ignore next */ []);
31
+ variableValues = input(void 0, ...ngDevMode ? [{ debugName: "variableValues" }] : /* istanbul ignore next */ []);
32
+ variableResolver = input(void 0, ...ngDevMode ? [{ debugName: "variableResolver" }] : /* istanbul ignore next */ []);
33
+ allowUnknownVariables = input(void 0, ...ngDevMode ? [{ debugName: "allowUnknownVariables" }] : /* istanbul ignore next */ []);
34
+ variableSuggestion = input(void 0, ...ngDevMode ? [{ debugName: "variableSuggestion" }] : /* istanbul ignore next */ []);
35
+ ready = output();
36
+ changed = output();
37
+ focused = output();
38
+ blurred = output();
39
+ variablesChanged = output();
40
+ editorState = signal(null, ...ngDevMode ? [{ debugName: "editorState" }] : /* istanbul ignore next */ []);
41
+ editor = this.editorState.asReadonly();
42
+ variableNamesState = signal([], {
43
+ ...ngDevMode ? { debugName: "variableNamesState" } : /* istanbul ignore next */ {},
44
+ equal: sameNames
45
+ });
46
+ variableNames = this.variableNamesState.asReadonly();
47
+ host = viewChild.required("host", ...ngDevMode ? [{ debugName: "host" }] : /* istanbul ignore next */ []);
48
+ globalConfig = inject(ASTER_CONFIG, { optional: true });
49
+ uploadHandler = inject(ASTER_UPLOAD_HANDLER, { optional: true });
50
+ formDisabled = signal(false, ...ngDevMode ? [{ debugName: "formDisabled" }] : /* istanbul ignore next */ []);
51
+ mergedConfig = computed(() => ({
52
+ ...this.globalConfig ?? {},
53
+ ...this.config()
54
+ }), ...ngDevMode ? [{ debugName: "mergedConfig" }] : /* istanbul ignore next */ []);
55
+ resolvedToolbar = computed(() => this.toolbar() ?? this.mergedConfig().toolbar ?? "standard", ...ngDevMode ? [{ debugName: "resolvedToolbar" }] : /* istanbul ignore next */ []);
56
+ resolvedTheme = computed(() => this.theme() ?? this.mergedConfig().theme ?? "light", ...ngDevMode ? [{ debugName: "resolvedTheme" }] : /* istanbul ignore next */ []);
57
+ resolvedLocale = computed(() => this.locale() ?? this.mergedConfig().locale ?? "fr", ...ngDevMode ? [{ debugName: "resolvedLocale" }] : /* istanbul ignore next */ []);
58
+ resolvedPlaceholder = computed(() => this.placeholder() ?? this.mergedConfig().placeholder, ...ngDevMode ? [{ debugName: "resolvedPlaceholder" }] : /* istanbul ignore next */ []);
59
+ resolvedReadOnly = computed(() => (this.readonly() ?? this.mergedConfig().readOnly ?? false) || this.formDisabled(), ...ngDevMode ? [{ debugName: "resolvedReadOnly" }] : /* istanbul ignore next */ []);
60
+ resolvedVariableSource = computed(() => {
61
+ const source = {
62
+ ...this.mergedConfig().variables,
63
+ ...this.variables() !== void 0 ? { variables: this.variables() } : {},
64
+ ...this.variableValues() !== void 0 ? { values: this.variableValues() } : {},
65
+ ...this.variableResolver() !== void 0 ? { resolve: this.variableResolver() } : {},
66
+ ...this.allowUnknownVariables() !== void 0 ? { allowUnknown: this.allowUnknownVariables() } : {}
67
+ };
68
+ return Object.keys(source).length > 0 ? source : void 0;
69
+ }, ...ngDevMode ? [{ debugName: "resolvedVariableSource" }] : /* istanbul ignore next */ []);
70
+ resolvedVariableSuggestion = computed(() => this.variableSuggestion() ?? this.mergedConfig().variableSuggestion, ...ngDevMode ? [{ debugName: "resolvedVariableSuggestion" }] : /* istanbul ignore next */ []);
71
+ instance = null;
72
+ mountedToolbar = null;
73
+ subscriptions = [];
74
+ pendingValue = null;
75
+ wordTransformer = null;
76
+ wordLoading = null;
77
+ onChange = null;
78
+ onTouched = null;
79
+ lazyWordTransformer = (html, context) => this.wordTransformer && untracked(() => this.wordPaste()) ? this.wordTransformer(html, context) : html;
80
+ constructor() {
81
+ afterNextRender(() => this.mount());
82
+ inject(DestroyRef).onDestroy(() => this.unmount());
83
+ effect(() => {
84
+ const theme = this.resolvedTheme();
85
+ untracked(() => this.instance?.setTheme(theme));
86
+ });
87
+ effect(() => {
88
+ const locale = this.resolvedLocale();
89
+ untracked(() => {
90
+ const editor = this.instance?.editor;
91
+ if (editor && editor.i18n.getLocale() !== locale) editor.i18n.setLocale(locale);
92
+ });
93
+ });
94
+ effect(() => {
95
+ const readOnly = this.resolvedReadOnly();
96
+ untracked(() => this.instance?.editor.setReadOnly(readOnly));
97
+ });
98
+ effect(() => {
99
+ const placeholder = this.resolvedPlaceholder();
100
+ untracked(() => {
101
+ if (this.instance) this.applyPlaceholder(this.instance.editor, placeholder);
102
+ });
103
+ });
104
+ effect(() => {
105
+ const label = this.ariaLabel();
106
+ const labelledBy = this.ariaLabelledBy();
107
+ untracked(() => {
108
+ if (this.instance) this.applyAriaAttributes(this.instance.editor, label, labelledBy);
109
+ });
110
+ });
111
+ effect(() => {
112
+ const toolbar = this.resolvedToolbar();
113
+ untracked(() => {
114
+ if (this.instance && this.mountedToolbar !== toolbar) this.remount();
115
+ });
116
+ });
117
+ effect(() => {
118
+ if (this.wordPaste()) untracked(() => {
119
+ if (this.instance) this.loadWordPaste();
120
+ });
121
+ });
122
+ effect(() => {
123
+ const declared = this.variables();
124
+ untracked(() => {
125
+ if (declared && this.instance) this.instance.editor.variables.define(declared);
126
+ });
127
+ });
128
+ effect(() => {
129
+ const values = this.variableValues();
130
+ untracked(() => {
131
+ if (values && this.instance) this.instance.editor.variables.setValues(values);
132
+ });
133
+ });
134
+ }
135
+ async importDocx(file) {
136
+ this.requireEditor("importDocx");
137
+ const upload = untracked(() => this.resolvedOptions().upload);
138
+ const { importDocx } = await import("@aster-editor/word");
139
+ const result = await importDocx(file, upload ? { upload } : {});
140
+ const editor = this.instance?.editor;
141
+ if (editor && !editor.isDestroyed()) {
142
+ editor.setHTML(result.html, true);
143
+ this.declareImportedVariables(editor, result.variables);
144
+ }
145
+ return result;
146
+ }
147
+ async exportDocx(options = {}) {
148
+ const editor = this.requireEditor("exportDocx");
149
+ const { exportDocx } = await import("@aster-editor/word");
150
+ const variables = {
151
+ ...options.variables,
152
+ values: options.variables?.values ?? editor.variables.getValues()
153
+ };
154
+ return exportDocx(editor.getHTML(), {
155
+ ...options,
156
+ variables
157
+ });
158
+ }
159
+ getHTML(options) {
160
+ return this.instance?.editor.getHTML(options) ?? this.pendingValue ?? "";
161
+ }
162
+ resolveVariables() {
163
+ return this.requireEditor("resolveVariables").variables.resolve();
164
+ }
165
+ writeValue(value) {
166
+ const html = value ?? "";
167
+ const editor = this.instance?.editor;
168
+ if (!editor) {
169
+ this.pendingValue = html;
170
+ return;
171
+ }
172
+ if (editor.getHTML() === html) return;
173
+ editor.setHTML(html, false);
174
+ }
175
+ registerOnChange(fn) {
176
+ this.onChange = fn;
177
+ }
178
+ registerOnTouched(fn) {
179
+ this.onTouched = fn;
180
+ }
181
+ setDisabledState(isDisabled) {
182
+ this.formDisabled.set(isDisabled);
183
+ this.instance?.editor.setReadOnly(untracked(() => this.resolvedReadOnly()));
184
+ }
185
+ mount(content, variables) {
186
+ if (this.instance) return;
187
+ const options = untracked(() => this.resolvedOptions(content, variables));
188
+ const instance = createAster(this.host().nativeElement, options);
189
+ const editor = instance.editor;
190
+ this.instance = instance;
191
+ this.mountedToolbar = options.toolbar ?? "standard";
192
+ this.pendingValue = null;
193
+ this.subscriptions = [
194
+ editor.on("ready", ({ editor: ready }) => this.ready.emit(ready)),
195
+ editor.on("change", ({ editor: changed }) => {
196
+ const html = changed.getHTML();
197
+ this.onChange?.(html);
198
+ this.changed.emit(html);
199
+ this.refreshVariableNames(changed);
200
+ }),
201
+ editor.on("variablesChange", ({ editor: source, values }) => {
202
+ this.refreshVariableNames(source);
203
+ this.variablesChanged.emit(values);
204
+ }),
205
+ editor.on("focus", () => this.focused.emit()),
206
+ editor.on("blur", ({ event }) => {
207
+ const related = event.relatedTarget;
208
+ if (related instanceof Node && instance.element.contains(related)) return;
209
+ this.onTouched?.();
210
+ this.blurred.emit();
211
+ })
212
+ ];
213
+ untracked(() => this.applyAriaAttributes(editor, this.ariaLabel(), this.ariaLabelledBy()));
214
+ if (untracked(() => this.wordPaste())) this.loadWordPaste();
215
+ this.refreshVariableNames(editor);
216
+ this.editorState.set(editor);
217
+ }
218
+ unmount() {
219
+ for (const unsubscribe of this.subscriptions) unsubscribe();
220
+ this.subscriptions = [];
221
+ this.instance?.destroy();
222
+ this.instance = null;
223
+ this.mountedToolbar = null;
224
+ this.editorState.set(null);
225
+ this.variableNamesState.set([]);
226
+ }
227
+ remount() {
228
+ const current = this.instance;
229
+ if (!current) return;
230
+ const html = current.editor.getHTML();
231
+ const focused = current.editor.isFocused();
232
+ const variables = {
233
+ declared: current.editor.variables.list(),
234
+ values: current.editor.variables.getValues()
235
+ };
236
+ this.unmount();
237
+ this.mount(html, variables);
238
+ if (focused) this.instance?.editor.focus("end");
239
+ }
240
+ resolvedOptions(content, variables) {
241
+ const merged = this.mergedConfig();
242
+ const initial = content ?? this.pendingValue ?? merged.content;
243
+ const source = this.resolvedVariableSource();
244
+ const variableSource = variables ? {
245
+ ...source,
246
+ variables: [...source?.variables ?? [], ...variables.declared],
247
+ values: {
248
+ ...source?.values,
249
+ ...variables.values
250
+ }
251
+ } : source;
252
+ return {
253
+ ...merged,
254
+ content: initial,
255
+ autofocus: content === void 0 ? merged.autofocus : false,
256
+ toolbar: this.resolvedToolbar(),
257
+ theme: this.resolvedTheme(),
258
+ locale: this.resolvedLocale(),
259
+ placeholder: this.resolvedPlaceholder(),
260
+ readOnly: this.resolvedReadOnly(),
261
+ pasteTransformers: [this.lazyWordTransformer, ...merged.pasteTransformers ?? []],
262
+ upload: merged.upload ?? this.uploadHandler ?? void 0,
263
+ variables: variableSource,
264
+ variableSuggestion: this.resolvedVariableSuggestion()
265
+ };
266
+ }
267
+ requireEditor(method) {
268
+ const editor = this.instance?.editor;
269
+ if (!editor) throw new Error(`[aster-editor/angular] ${method}: editor is not mounted yet`);
270
+ return editor;
271
+ }
272
+ refreshVariableNames(editor) {
273
+ this.variableNamesState.set(editor.variables.getNames());
274
+ }
275
+ declareImportedVariables(editor, found) {
276
+ if (found.length === 0) return;
277
+ editor.variables.define(found);
278
+ const known = untracked(() => this.variableValues());
279
+ if (!known) return;
280
+ const overrides = {};
281
+ for (const variable of found) {
282
+ const value = known[variable.name];
283
+ if (variable.value !== void 0 && value !== void 0 && value !== variable.value) overrides[variable.name] = value;
284
+ }
285
+ if (Object.keys(overrides).length > 0) editor.variables.setValues(overrides);
286
+ }
287
+ loadWordPaste() {
288
+ if (this.wordTransformer || this.wordLoading) return;
289
+ this.wordLoading = import("@aster-editor/word").then((word) => {
290
+ this.wordTransformer = word.wordPasteTransformer();
291
+ }).catch((error) => {
292
+ this.wordLoading = null;
293
+ console.warn("[aster-editor/angular] @aster-editor/word unavailable, paste kept raw", error);
294
+ });
295
+ }
296
+ applyAriaAttributes(editor, label, labelledBy) {
297
+ setOrRemoveAttribute(editor.contentElement, "aria-label", label);
298
+ setOrRemoveAttribute(editor.contentElement, "aria-labelledby", labelledBy);
299
+ }
300
+ applyPlaceholder(editor, placeholder) {
301
+ const tiptap = editor.tiptap;
302
+ const extension = tiptap.extensionManager.extensions.find((candidate) => candidate.name === "placeholder");
303
+ if (extension?.type !== "extension") return;
304
+ const factory = extension.config.addProseMirrorPlugins;
305
+ if (!factory) return;
306
+ const options = {
307
+ ...extension.options,
308
+ placeholder: () => placeholder ?? editor.i18n.t("editor.placeholder")
309
+ };
310
+ const plugins = factory.call({
311
+ name: extension.name,
312
+ options,
313
+ storage: extension.storage,
314
+ editor: tiptap,
315
+ type: null,
316
+ parent: void 0
317
+ });
318
+ for (const plugin of plugins) {
319
+ tiptap.unregisterPlugin(plugin.spec.key ?? extension.name);
320
+ tiptap.registerPlugin(plugin);
321
+ }
322
+ }
323
+ static ɵfac = i0.ɵɵngDeclareFactory({
324
+ minVersion: "12.0.0",
325
+ version: "22.2.2",
326
+ ngImport: i0,
327
+ type: AsterEditorComponent,
328
+ deps: [],
329
+ target: i0.ɵɵFactoryTarget.Component
330
+ });
331
+ static ɵcmp = i0.ɵɵngDeclareComponent({
332
+ minVersion: "17.2.0",
333
+ version: "22.2.2",
334
+ type: AsterEditorComponent,
335
+ isStandalone: true,
336
+ selector: "aster-editor",
337
+ inputs: {
338
+ toolbar: {
339
+ classPropertyName: "toolbar",
340
+ publicName: "toolbar",
341
+ isSignal: true,
342
+ isRequired: false,
343
+ transformFunction: null
344
+ },
345
+ theme: {
346
+ classPropertyName: "theme",
347
+ publicName: "theme",
348
+ isSignal: true,
349
+ isRequired: false,
350
+ transformFunction: null
351
+ },
352
+ locale: {
353
+ classPropertyName: "locale",
354
+ publicName: "locale",
355
+ isSignal: true,
356
+ isRequired: false,
357
+ transformFunction: null
358
+ },
359
+ placeholder: {
360
+ classPropertyName: "placeholder",
361
+ publicName: "placeholder",
362
+ isSignal: true,
363
+ isRequired: false,
364
+ transformFunction: null
365
+ },
366
+ readonly: {
367
+ classPropertyName: "readonly",
368
+ publicName: "readonly",
369
+ isSignal: true,
370
+ isRequired: false,
371
+ transformFunction: null
372
+ },
373
+ config: {
374
+ classPropertyName: "config",
375
+ publicName: "config",
376
+ isSignal: true,
377
+ isRequired: false,
378
+ transformFunction: null
379
+ },
380
+ wordPaste: {
381
+ classPropertyName: "wordPaste",
382
+ publicName: "wordPaste",
383
+ isSignal: true,
384
+ isRequired: false,
385
+ transformFunction: null
386
+ },
387
+ ariaLabel: {
388
+ classPropertyName: "ariaLabel",
389
+ publicName: "ariaLabel",
390
+ isSignal: true,
391
+ isRequired: false,
392
+ transformFunction: null
393
+ },
394
+ ariaLabelledBy: {
395
+ classPropertyName: "ariaLabelledBy",
396
+ publicName: "ariaLabelledBy",
397
+ isSignal: true,
398
+ isRequired: false,
399
+ transformFunction: null
400
+ },
401
+ variables: {
402
+ classPropertyName: "variables",
403
+ publicName: "variables",
404
+ isSignal: true,
405
+ isRequired: false,
406
+ transformFunction: null
407
+ },
408
+ variableValues: {
409
+ classPropertyName: "variableValues",
410
+ publicName: "variableValues",
411
+ isSignal: true,
412
+ isRequired: false,
413
+ transformFunction: null
414
+ },
415
+ variableResolver: {
416
+ classPropertyName: "variableResolver",
417
+ publicName: "variableResolver",
418
+ isSignal: true,
419
+ isRequired: false,
420
+ transformFunction: null
421
+ },
422
+ allowUnknownVariables: {
423
+ classPropertyName: "allowUnknownVariables",
424
+ publicName: "allowUnknownVariables",
425
+ isSignal: true,
426
+ isRequired: false,
427
+ transformFunction: null
428
+ },
429
+ variableSuggestion: {
430
+ classPropertyName: "variableSuggestion",
431
+ publicName: "variableSuggestion",
432
+ isSignal: true,
433
+ isRequired: false,
434
+ transformFunction: null
435
+ }
436
+ },
437
+ outputs: {
438
+ ready: "ready",
439
+ changed: "changed",
440
+ focused: "focused",
441
+ blurred: "blurred",
442
+ variablesChanged: "variablesChanged"
443
+ },
444
+ providers: [{
445
+ provide: NG_VALUE_ACCESSOR,
446
+ useExisting: forwardRef(() => AsterEditorComponent),
447
+ multi: true
448
+ }],
449
+ viewQueries: [{
450
+ propertyName: "host",
451
+ first: true,
452
+ predicate: ["host"],
453
+ descendants: true,
454
+ isSignal: true
455
+ }],
456
+ ngImport: i0,
457
+ template: "<div #host class=\"aster-editor__host\"></div>",
458
+ isInline: true,
459
+ styles: [":host{display:block}\n"],
460
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
461
+ });
462
+ };
463
+ i0.ɵɵngDeclareClassMetadata({
464
+ minVersion: "12.0.0",
465
+ version: "22.2.2",
466
+ ngImport: i0,
467
+ type: AsterEditorComponent,
468
+ decorators: [{
469
+ type: Component,
470
+ args: [{
471
+ selector: "aster-editor",
472
+ changeDetection: ChangeDetectionStrategy.OnPush,
473
+ template: "<div #host class=\"aster-editor__host\"></div>",
474
+ providers: [{
475
+ provide: NG_VALUE_ACCESSOR,
476
+ useExisting: forwardRef(() => AsterEditorComponent),
477
+ multi: true
478
+ }],
479
+ styles: [":host{display:block}\n"]
480
+ }]
481
+ }],
482
+ ctorParameters: () => [],
483
+ propDecorators: {
484
+ toolbar: [{
485
+ type: i0.Input,
486
+ args: [{
487
+ isSignal: true,
488
+ alias: "toolbar",
489
+ required: false
490
+ }]
491
+ }],
492
+ theme: [{
493
+ type: i0.Input,
494
+ args: [{
495
+ isSignal: true,
496
+ alias: "theme",
497
+ required: false
498
+ }]
499
+ }],
500
+ locale: [{
501
+ type: i0.Input,
502
+ args: [{
503
+ isSignal: true,
504
+ alias: "locale",
505
+ required: false
506
+ }]
507
+ }],
508
+ placeholder: [{
509
+ type: i0.Input,
510
+ args: [{
511
+ isSignal: true,
512
+ alias: "placeholder",
513
+ required: false
514
+ }]
515
+ }],
516
+ readonly: [{
517
+ type: i0.Input,
518
+ args: [{
519
+ isSignal: true,
520
+ alias: "readonly",
521
+ required: false
522
+ }]
523
+ }],
524
+ config: [{
525
+ type: i0.Input,
526
+ args: [{
527
+ isSignal: true,
528
+ alias: "config",
529
+ required: false
530
+ }]
531
+ }],
532
+ wordPaste: [{
533
+ type: i0.Input,
534
+ args: [{
535
+ isSignal: true,
536
+ alias: "wordPaste",
537
+ required: false
538
+ }]
539
+ }],
540
+ ariaLabel: [{
541
+ type: i0.Input,
542
+ args: [{
543
+ isSignal: true,
544
+ alias: "ariaLabel",
545
+ required: false
546
+ }]
547
+ }],
548
+ ariaLabelledBy: [{
549
+ type: i0.Input,
550
+ args: [{
551
+ isSignal: true,
552
+ alias: "ariaLabelledBy",
553
+ required: false
554
+ }]
555
+ }],
556
+ variables: [{
557
+ type: i0.Input,
558
+ args: [{
559
+ isSignal: true,
560
+ alias: "variables",
561
+ required: false
562
+ }]
563
+ }],
564
+ variableValues: [{
565
+ type: i0.Input,
566
+ args: [{
567
+ isSignal: true,
568
+ alias: "variableValues",
569
+ required: false
570
+ }]
571
+ }],
572
+ variableResolver: [{
573
+ type: i0.Input,
574
+ args: [{
575
+ isSignal: true,
576
+ alias: "variableResolver",
577
+ required: false
578
+ }]
579
+ }],
580
+ allowUnknownVariables: [{
581
+ type: i0.Input,
582
+ args: [{
583
+ isSignal: true,
584
+ alias: "allowUnknownVariables",
585
+ required: false
586
+ }]
587
+ }],
588
+ variableSuggestion: [{
589
+ type: i0.Input,
590
+ args: [{
591
+ isSignal: true,
592
+ alias: "variableSuggestion",
593
+ required: false
594
+ }]
595
+ }],
596
+ ready: [{
597
+ type: i0.Output,
598
+ args: ["ready"]
599
+ }],
600
+ changed: [{
601
+ type: i0.Output,
602
+ args: ["changed"]
603
+ }],
604
+ focused: [{
605
+ type: i0.Output,
606
+ args: ["focused"]
607
+ }],
608
+ blurred: [{
609
+ type: i0.Output,
610
+ args: ["blurred"]
611
+ }],
612
+ variablesChanged: [{
613
+ type: i0.Output,
614
+ args: ["variablesChanged"]
615
+ }],
616
+ host: [{
617
+ type: i0.ViewChild,
618
+ args: ["host", { isSignal: true }]
619
+ }]
620
+ }
621
+ });
622
+ export { ASTER_CONFIG, ASTER_UPLOAD_HANDLER, AsterEditorComponent, provideAster };
623
+
624
+ //# sourceMappingURL=aster-editor-angular.mjs.map