@ai-composer/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +6 -0
  3. package/dist/commands/builtins.d.ts +41 -0
  4. package/dist/commands/builtins.d.ts.map +1 -0
  5. package/dist/commands/builtins.js +116 -0
  6. package/dist/commands/builtins.js.map +1 -0
  7. package/dist/commands/registry.d.ts +27 -0
  8. package/dist/commands/registry.d.ts.map +1 -0
  9. package/dist/commands/registry.js +29 -0
  10. package/dist/commands/registry.js.map +1 -0
  11. package/dist/editor.d.ts +185 -0
  12. package/dist/editor.d.ts.map +1 -0
  13. package/dist/editor.js +558 -0
  14. package/dist/editor.js.map +1 -0
  15. package/dist/errors.d.ts +15 -0
  16. package/dist/errors.d.ts.map +1 -0
  17. package/dist/errors.js +22 -0
  18. package/dist/errors.js.map +1 -0
  19. package/dist/events/event-bus.d.ts +19 -0
  20. package/dist/events/event-bus.d.ts.map +1 -0
  21. package/dist/events/event-bus.js +51 -0
  22. package/dist/events/event-bus.js.map +1 -0
  23. package/dist/events/events.d.ts +94 -0
  24. package/dist/events/events.d.ts.map +1 -0
  25. package/dist/events/events.js +6 -0
  26. package/dist/events/events.js.map +1 -0
  27. package/dist/factory.d.ts +17 -0
  28. package/dist/factory.d.ts.map +1 -0
  29. package/dist/factory.js +18 -0
  30. package/dist/factory.js.map +1 -0
  31. package/dist/history/history.d.ts +48 -0
  32. package/dist/history/history.d.ts.map +1 -0
  33. package/dist/history/history.js +71 -0
  34. package/dist/history/history.js.map +1 -0
  35. package/dist/index.d.ts +43 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +30 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/model/document.d.ts +54 -0
  40. package/dist/model/document.d.ts.map +1 -0
  41. package/dist/model/document.js +177 -0
  42. package/dist/model/document.js.map +1 -0
  43. package/dist/model/nodes.d.ts +80 -0
  44. package/dist/model/nodes.d.ts.map +1 -0
  45. package/dist/model/nodes.js +64 -0
  46. package/dist/model/nodes.js.map +1 -0
  47. package/dist/model/selection.d.ts +40 -0
  48. package/dist/model/selection.d.ts.map +1 -0
  49. package/dist/model/selection.js +79 -0
  50. package/dist/model/selection.js.map +1 -0
  51. package/dist/nodes/registry.d.ts +39 -0
  52. package/dist/nodes/registry.d.ts.map +1 -0
  53. package/dist/nodes/registry.js +93 -0
  54. package/dist/nodes/registry.js.map +1 -0
  55. package/dist/package.json +21 -0
  56. package/dist/plugins/registry.d.ts +53 -0
  57. package/dist/plugins/registry.d.ts.map +1 -0
  58. package/dist/plugins/registry.js +102 -0
  59. package/dist/plugins/registry.js.map +1 -0
  60. package/dist/serialization/builtins.d.ts +30 -0
  61. package/dist/serialization/builtins.d.ts.map +1 -0
  62. package/dist/serialization/builtins.js +102 -0
  63. package/dist/serialization/builtins.js.map +1 -0
  64. package/dist/serialization/index.d.ts +4 -0
  65. package/dist/serialization/index.d.ts.map +1 -0
  66. package/dist/serialization/index.js +3 -0
  67. package/dist/serialization/index.js.map +1 -0
  68. package/dist/serialization/registry.d.ts +17 -0
  69. package/dist/serialization/registry.d.ts.map +1 -0
  70. package/dist/serialization/registry.js +35 -0
  71. package/dist/serialization/registry.js.map +1 -0
  72. package/dist/serialization/serializers.d.ts +12 -0
  73. package/dist/serialization/serializers.d.ts.map +1 -0
  74. package/dist/serialization/serializers.js +3 -0
  75. package/dist/serialization/serializers.js.map +1 -0
  76. package/dist/state/state.d.ts +54 -0
  77. package/dist/state/state.d.ts.map +1 -0
  78. package/dist/state/state.js +6 -0
  79. package/dist/state/state.js.map +1 -0
  80. package/dist/triggers/engine.d.ts +102 -0
  81. package/dist/triggers/engine.d.ts.map +1 -0
  82. package/dist/triggers/engine.js +235 -0
  83. package/dist/triggers/engine.js.map +1 -0
  84. package/dist/types.d.ts +37 -0
  85. package/dist/types.d.ts.map +1 -0
  86. package/dist/types.js +3 -0
  87. package/dist/types.js.map +1 -0
  88. package/dist/utils/html.d.ts +3 -0
  89. package/dist/utils/html.d.ts.map +1 -0
  90. package/dist/utils/html.js +10 -0
  91. package/dist/utils/html.js.map +1 -0
  92. package/package.json +20 -0
  93. package/project.json +56 -0
  94. package/src/commands/builtins.ts +142 -0
  95. package/src/commands/registry.ts +53 -0
  96. package/src/commands.test.ts +118 -0
  97. package/src/editor.test.ts +311 -0
  98. package/src/editor.ts +826 -0
  99. package/src/errors.ts +25 -0
  100. package/src/events/event-bus.test.ts +62 -0
  101. package/src/events/event-bus.ts +72 -0
  102. package/src/events/events.ts +120 -0
  103. package/src/factory.ts +21 -0
  104. package/src/history/history.ts +108 -0
  105. package/src/index.ts +201 -0
  106. package/src/model/document.test.ts +130 -0
  107. package/src/model/document.ts +207 -0
  108. package/src/model/nodes.ts +151 -0
  109. package/src/model/selection.ts +107 -0
  110. package/src/nodes/registry.ts +142 -0
  111. package/src/plugins/registry.ts +163 -0
  112. package/src/serialization/builtins.ts +123 -0
  113. package/src/serialization/index.ts +20 -0
  114. package/src/serialization/registry.ts +49 -0
  115. package/src/serialization/serializers.ts +15 -0
  116. package/src/state/state.ts +57 -0
  117. package/src/triggers/engine.ts +317 -0
  118. package/src/triggers.test.ts +138 -0
  119. package/src/types.ts +42 -0
  120. package/src/utils/html.ts +9 -0
  121. package/tsconfig.json +15 -0
  122. package/tsconfig.lib.json +15 -0
  123. package/tsconfig.spec.json +16 -0
  124. package/vitest.config.ts +11 -0
package/dist/editor.js ADDED
@@ -0,0 +1,558 @@
1
+ /**
2
+ * The editor engine (ADR-0001). `AIComposer` is the public, framework-neutral
3
+ * contract implemented by `AIComposerImpl` and created via
4
+ * `createAIComposer()`. It owns the document, selection, state, history,
5
+ * registries and the trigger engine — but no DOM.
6
+ */
7
+ import { createEventBus } from './events/event-bus';
8
+ import { coerceDocument, deleteDocumentRange, documentsEqual, findNodeIndex, getNodesOfType, insertNodesAt, isEmptyDocument, normalizeNodes, sanitizeDocument, } from './model/document';
9
+ import { createTextNode, ensureNodeKey, } from './model/nodes';
10
+ import { clampSelection, createPosition, createSelection, equalsSelection, fromGlobalOffset, getRange, toGlobalOffset, } from './model/selection';
11
+ import { createCommandRegistry } from './commands/registry';
12
+ import { createBuiltinCommands } from './commands/builtins';
13
+ import { createDefaultNodeRegistry } from './nodes/registry';
14
+ import { TriggerEngine, createTriggerRegistry, } from './triggers/engine';
15
+ import { EditorHistory } from './history/history';
16
+ import { createPluginRegistry, } from './plugins/registry';
17
+ import { createDefaultSerializers, createSerializerRegistry, } from './serialization/index';
18
+ import { ErrorCode, AIComposerError } from './errors';
19
+ export class AIComposerImpl {
20
+ events = createEventBus();
21
+ commands = createCommandRegistry();
22
+ triggers = createTriggerRegistry();
23
+ nodes = createDefaultNodeRegistry();
24
+ serializers = createSerializerRegistry();
25
+ pluginRegistry = createPluginRegistry();
26
+ triggerEngine;
27
+ history;
28
+ config;
29
+ document;
30
+ selection = createSelection();
31
+ focused = false;
32
+ submitting = false;
33
+ destroyed = false;
34
+ mutationDepth = 0;
35
+ view = null;
36
+ stateListeners = new Set();
37
+ stateCache = null;
38
+ constructor(options = {}) {
39
+ this.config = {
40
+ mode: options.mode ?? 'default',
41
+ placeholder: options.placeholder ?? '',
42
+ submitKey: options.submitKey ?? 'enter',
43
+ ...(options.disabled !== undefined ? { disabled: options.disabled } : {}),
44
+ ...(options.readonly !== undefined ? { readonly: options.readonly } : {}),
45
+ ...(options.submit ? { submit: options.submit } : {}),
46
+ ...(options.history ? { history: options.history } : {}),
47
+ };
48
+ this.document = coerceDocument(options.value);
49
+ this.selection = createSelection(fromGlobalOffset(this.document, documentLengthOf(this.document)));
50
+ this.history = new EditorHistory(this.config.history ?? {});
51
+ this.triggerEngine = new TriggerEngine(this.createTriggerHost());
52
+ for (const serializer of [...createDefaultSerializers(), ...(options.serializers ?? [])]) {
53
+ this.serializers.register(serializer);
54
+ }
55
+ for (const definition of options.nodeTypes ?? []) {
56
+ this.nodes.register(definition);
57
+ }
58
+ for (const command of createBuiltinCommands(this)) {
59
+ this.commands.register(command);
60
+ }
61
+ for (const plugin of options.plugins ?? []) {
62
+ this.pluginRegistry.install(plugin, this.createPluginContext());
63
+ }
64
+ this.stateCache = null;
65
+ }
66
+ // -- value ---------------------------------------------------------------
67
+ getValue() {
68
+ return this.document;
69
+ }
70
+ setValue(value, options = {}) {
71
+ this.assertAlive();
72
+ const next = coerceDocument(value);
73
+ this.mutate(() => {
74
+ this.document = next;
75
+ this.selection = createSelection(fromGlobalOffset(next, documentLengthOf(next)));
76
+ }, {
77
+ source: options.source ?? 'api',
78
+ label: options.label ?? 'setValue',
79
+ history: options.history !== false,
80
+ merge: false,
81
+ });
82
+ }
83
+ clear() {
84
+ this.setValue([], { label: 'clear' });
85
+ }
86
+ replaceRange(range, nodes, options = {}) {
87
+ this.assertAlive();
88
+ this.mutate(() => {
89
+ const { document, caret } = deleteDocumentRange(this.document, range);
90
+ const inserted = options.trailingSpace ? [...nodes, createTextNode(' ')] : [...nodes];
91
+ const result = insertNodesAt(document, caret, inserted);
92
+ this.document = result.document;
93
+ this.selection = createSelection(result.caret);
94
+ }, { source: options.source ?? 'api', label: 'replaceRange', history: true, merge: false });
95
+ }
96
+ // -- nodes ---------------------------------------------------------------
97
+ insertText(text, at) {
98
+ if (!text)
99
+ return;
100
+ this.assertAlive();
101
+ this.mutate(() => {
102
+ if (at)
103
+ this.selection = createSelection(at);
104
+ this.deleteSelectionIfNeeded();
105
+ const result = insertNodesAt(this.document, this.selection.focus, [createTextNode(text)]);
106
+ this.document = result.document;
107
+ this.selection = createSelection(result.caret);
108
+ }, { source: 'api', label: 'insertText', history: true, merge: false });
109
+ }
110
+ insertNode(node, options = {}) {
111
+ this.assertAlive();
112
+ const prepared = ensureNodeKey(node);
113
+ this.mutate(() => {
114
+ if (options.at)
115
+ this.selection = createSelection(options.at);
116
+ this.deleteSelectionIfNeeded();
117
+ const inserted = options.trailingSpace === false ? [prepared] : [prepared, createTextNode(' ')];
118
+ const result = insertNodesAt(this.document, this.selection.focus, inserted);
119
+ this.document = result.document;
120
+ this.selection = createSelection(result.caret);
121
+ }, { source: options.source ?? 'api', label: 'insertNode', history: true, merge: false });
122
+ const index = findNodeIndex(this.document, prepared.key);
123
+ if (index >= 0) {
124
+ this.events.emit('nodeInsert', { node: prepared, index });
125
+ if (prepared.type === 'attachment') {
126
+ this.events.emit('attachmentAdd', { attachment: prepared });
127
+ }
128
+ }
129
+ }
130
+ removeNode(key) {
131
+ this.assertAlive();
132
+ const index = findNodeIndex(this.document, key);
133
+ if (index < 0)
134
+ return;
135
+ const node = this.document.nodes[index];
136
+ const startOffset = toGlobalOffset(this.document, createPosition(index, 0));
137
+ this.mutate(() => {
138
+ this.document = {
139
+ nodes: this.document.nodes.filter((candidate) => candidate.key !== key),
140
+ ...(this.document.metadata ? { metadata: this.document.metadata } : {}),
141
+ };
142
+ this.selection = createSelection(fromGlobalOffset(this.document, startOffset));
143
+ }, { source: 'api', label: 'removeNode', history: true, merge: false });
144
+ this.events.emit('nodeRemove', { node, index });
145
+ if (node.type === 'attachment') {
146
+ this.events.emit('attachmentRemove', { attachment: node });
147
+ }
148
+ }
149
+ applyViewUpdate(next, selection) {
150
+ this.assertAlive();
151
+ if (documentsEqual(this.document, next)) {
152
+ if (selection && !equalsSelection(clampSelection(next, selection), this.selection)) {
153
+ this.setSelection(selection);
154
+ }
155
+ return;
156
+ }
157
+ const sanitized = sanitizeDocument(next, (type) => this.nodes.has(type));
158
+ this.mutate(() => {
159
+ this.document = sanitized;
160
+ this.selection = clampSelection(sanitized, selection ?? this.selection);
161
+ },
162
+ // Typing merges within the history window so undo steps feel natural.
163
+ { source: 'user', label: 'input', history: true, merge: true });
164
+ }
165
+ // -- selection -----------------------------------------------------------
166
+ getSelection() {
167
+ return this.selection;
168
+ }
169
+ setSelection(selection) {
170
+ this.assertAlive();
171
+ const next = clampSelection(this.document, selection);
172
+ if (equalsSelection(next, this.selection))
173
+ return;
174
+ this.selection = next;
175
+ this.invalidateState();
176
+ this.notify();
177
+ this.events.emit('selectionChange', { selection: next });
178
+ this.triggerEngine.handleSelectionChange();
179
+ }
180
+ // -- focus / lifecycle ------------------------------------------------------
181
+ focus() {
182
+ this.assertAlive();
183
+ if (this.view) {
184
+ this.view.focus();
185
+ return;
186
+ }
187
+ this.setFocused(true);
188
+ }
189
+ blur() {
190
+ this.assertAlive();
191
+ if (this.view) {
192
+ this.view.blur();
193
+ return;
194
+ }
195
+ this.setFocused(false);
196
+ }
197
+ setFocused(focused) {
198
+ if (this.destroyed || this.focused === focused)
199
+ return;
200
+ this.focused = focused;
201
+ this.invalidateState();
202
+ this.notify();
203
+ this.events.emit(focused ? 'focus' : 'blur', { focused });
204
+ if (!focused)
205
+ this.triggerEngine.close('blur');
206
+ }
207
+ attachView(view) {
208
+ this.view = view;
209
+ return () => {
210
+ if (this.view === view)
211
+ this.view = null;
212
+ };
213
+ }
214
+ destroy() {
215
+ if (this.destroyed)
216
+ return;
217
+ this.destroyed = true;
218
+ this.triggerEngine.close('editor-destroy');
219
+ this.events.emit('destroy', { target: 'editor' });
220
+ this.pluginRegistry.destroyAll();
221
+ this.view = null;
222
+ this.events.clear();
223
+ this.commands.clear();
224
+ this.triggers.clear();
225
+ this.serializers.clear();
226
+ this.stateListeners.clear();
227
+ this.history.reset();
228
+ }
229
+ isDestroyed() {
230
+ return this.destroyed;
231
+ }
232
+ // -- submit ----------------------------------------------------------------
233
+ async submit() {
234
+ this.assertAlive();
235
+ const state = this.getState();
236
+ if (state.disabled || state.readonly || this.submitting)
237
+ return;
238
+ const allowEmpty = this.config.submit?.allowEmpty ?? false;
239
+ if (!allowEmpty && isEmptyDocument(this.document) && state.attachments.length === 0)
240
+ return;
241
+ const before = {
242
+ value: this.document,
243
+ defaultPrevented: false,
244
+ preventDefault() {
245
+ this.defaultPrevented = true;
246
+ },
247
+ };
248
+ this.events.emit('beforeSubmit', before);
249
+ if (before.defaultPrevented)
250
+ return;
251
+ this.submitting = true;
252
+ this.invalidateState();
253
+ this.notify();
254
+ try {
255
+ await this.config.submit?.onSubmit?.(this.document, this);
256
+ }
257
+ catch (error) {
258
+ this.events.emit('error', { error: error instanceof Error ? error : new Error(String(error)), phase: 'submit' });
259
+ }
260
+ finally {
261
+ this.submitting = false;
262
+ this.invalidateState();
263
+ this.notify();
264
+ this.events.emit('submit', { value: this.document });
265
+ if (this.config.submit?.clearOnSubmit)
266
+ this.clear();
267
+ }
268
+ }
269
+ // -- history ----------------------------------------------------------------
270
+ undo() {
271
+ this.assertAlive();
272
+ const previous = this.history.undo({ document: this.document, selection: this.selection });
273
+ if (!previous)
274
+ return;
275
+ this.restore(previous, 'undo');
276
+ }
277
+ redo() {
278
+ this.assertAlive();
279
+ const next = this.history.redo({ document: this.document, selection: this.selection });
280
+ if (!next)
281
+ return;
282
+ this.restore(next, 'redo');
283
+ }
284
+ transaction(fn, options = {}) {
285
+ this.assertAlive();
286
+ // Nested transactions join the outer one.
287
+ if (this.mutationDepth > 0) {
288
+ fn();
289
+ return;
290
+ }
291
+ this.mutate(fn, {
292
+ source: options.source ?? 'api',
293
+ label: options.label ?? 'transaction',
294
+ history: options.history !== false,
295
+ merge: false,
296
+ });
297
+ }
298
+ // -- commands ----------------------------------------------------------------
299
+ async executeCommand(id, payload) {
300
+ this.assertAlive();
301
+ const command = this.commands.get(id);
302
+ if (!command) {
303
+ throw new AIComposerError('UNKNOWN_COMMAND', `No command registered for "${id}"`);
304
+ }
305
+ const context = { editor: this, state: this.getState(), payload };
306
+ if (command.canExecute && !command.canExecute(context))
307
+ return;
308
+ this.events.emit('commandExecute', { id, payload });
309
+ await command.execute(context);
310
+ }
311
+ canExecuteCommand(id, payload) {
312
+ const command = this.commands.get(id);
313
+ if (!command)
314
+ return false;
315
+ const context = { editor: this, state: this.getState(), payload };
316
+ return command.canExecute ? command.canExecute(context) : true;
317
+ }
318
+ // -- triggers ------------------------------------------------------------
319
+ getActiveTrigger() {
320
+ return this.triggerEngine.activeTrigger;
321
+ }
322
+ async acceptSuggestion(item) {
323
+ await this.triggerEngine.accept(item);
324
+ }
325
+ moveSuggestionSelection(delta) {
326
+ this.triggerEngine.moveSelection(delta);
327
+ }
328
+ closeTrigger(reason = 'manual') {
329
+ this.triggerEngine.close(reason);
330
+ }
331
+ openTrigger(triggerId) {
332
+ this.assertAlive();
333
+ const trigger = this.triggers.get(triggerId);
334
+ if (!trigger) {
335
+ throw new AIComposerError('UNKNOWN_TRIGGER', `No trigger registered for "${triggerId}"`);
336
+ }
337
+ this.insertText(trigger.character, this.selection.focus);
338
+ if (this.view)
339
+ this.view.focus();
340
+ }
341
+ // -- plugins ---------------------------------------------------------------
342
+ registerPlugin(plugin) {
343
+ this.assertAlive();
344
+ return this.pluginRegistry.install(plugin, this.createPluginContext());
345
+ }
346
+ registerTrigger(trigger) {
347
+ return this.triggers.register(trigger);
348
+ }
349
+ registerCommand(command) {
350
+ return this.commands.register(command);
351
+ }
352
+ registerNodeType(definition) {
353
+ return this.nodes.register(definition);
354
+ }
355
+ registerSerializer(serializer) {
356
+ return this.serializers.register(serializer);
357
+ }
358
+ // -- events ----------------------------------------------------------------
359
+ on(type, handler) {
360
+ return this.events.on(type, handler);
361
+ }
362
+ once(type, handler) {
363
+ return this.events.once(type, handler);
364
+ }
365
+ off(type, handler) {
366
+ this.events.off(type, handler);
367
+ }
368
+ // -- state ----------------------------------------------------------------
369
+ getState() {
370
+ if (!this.stateCache) {
371
+ this.stateCache = {
372
+ value: this.document,
373
+ focused: this.focused,
374
+ disabled: this.config.disabled ?? false,
375
+ readonly: this.config.readonly ?? false,
376
+ submitting: this.submitting,
377
+ selection: this.selection,
378
+ activeTrigger: this.triggerEngine.activeTrigger,
379
+ suggestions: this.triggerEngine.suggestions,
380
+ activeSuggestionIndex: this.triggerEngine.activeSuggestionIndex,
381
+ attachments: getNodesOfType(this.document, 'attachment'),
382
+ canUndo: this.history.canUndo,
383
+ canRedo: this.history.canRedo,
384
+ mode: this.config.mode ?? 'default',
385
+ placeholder: this.config.placeholder ?? '',
386
+ empty: isEmptyDocument(this.document),
387
+ };
388
+ }
389
+ return this.stateCache;
390
+ }
391
+ subscribe(listener) {
392
+ this.stateListeners.add(listener);
393
+ return () => this.stateListeners.delete(listener);
394
+ }
395
+ // -- config ----------------------------------------------------------------
396
+ getConfig() {
397
+ return this.config;
398
+ }
399
+ configure(patch) {
400
+ const previousMode = this.config.mode;
401
+ this.config = { ...this.config, ...patch };
402
+ if (patch.history)
403
+ this.history.setOptions(patch.history);
404
+ this.invalidateState();
405
+ this.notify();
406
+ if (patch.mode !== undefined && patch.mode !== previousMode) {
407
+ this.events.emit('modeChange', { mode: patch.mode });
408
+ }
409
+ }
410
+ setMode(mode) {
411
+ if (this.config.mode === mode)
412
+ return;
413
+ this.configure({ mode });
414
+ }
415
+ setDisabled(disabled) {
416
+ if ((this.config.disabled ?? false) === disabled)
417
+ return;
418
+ this.configure({ disabled });
419
+ }
420
+ setReadonly(readonly) {
421
+ if ((this.config.readonly ?? false) === readonly)
422
+ return;
423
+ this.configure({ readonly });
424
+ }
425
+ // -- serialization -----------------------------------------------------------
426
+ serialize(format) {
427
+ return this.serializers.serialize(format, this.document, { nodes: this.nodes });
428
+ }
429
+ // -- internals ----------------------------------------------------------------
430
+ assertAlive() {
431
+ if (this.destroyed) {
432
+ throw new AIComposerError(ErrorCode.EDITOR_DESTROYED, 'This editor has been destroyed');
433
+ }
434
+ }
435
+ deleteSelectionIfNeeded() {
436
+ const { start, end } = getRange(this.selection);
437
+ if (start.nodeIndex === end.nodeIndex && start.offset === end.offset)
438
+ return;
439
+ const result = deleteDocumentRange(this.document, { start, end });
440
+ this.document = result.document;
441
+ this.selection = createSelection(result.caret);
442
+ }
443
+ mutate(fn, options) {
444
+ if (this.mutationDepth > 0) {
445
+ fn();
446
+ return;
447
+ }
448
+ const previous = { document: this.document, selection: this.selection };
449
+ this.mutationDepth += 1;
450
+ try {
451
+ fn();
452
+ }
453
+ finally {
454
+ this.mutationDepth -= 1;
455
+ }
456
+ // Normalize (merge text runs) while keeping selection stable via global offsets.
457
+ const anchorOffset = toGlobalOffset(this.document, this.selection.anchor);
458
+ const focusOffset = toGlobalOffset(this.document, this.selection.focus);
459
+ this.document = {
460
+ nodes: normalizeNodes(this.document.nodes),
461
+ ...(this.document.metadata ? { metadata: this.document.metadata } : {}),
462
+ };
463
+ this.selection = clampSelection(this.document, createSelection(fromGlobalOffset(this.document, anchorOffset), fromGlobalOffset(this.document, focusOffset)));
464
+ if (options.history) {
465
+ this.history.record(previous, { label: options.label, merge: options.merge });
466
+ }
467
+ this.commit(options.source);
468
+ }
469
+ commit(source) {
470
+ this.invalidateState();
471
+ this.notify();
472
+ this.events.emit('change', { value: this.document, source });
473
+ if (source === 'user') {
474
+ this.events.emit('input', { value: this.document, source });
475
+ }
476
+ this.triggerEngine.handleDocumentChange();
477
+ }
478
+ restore(snapshot, source) {
479
+ this.document = snapshot.document;
480
+ this.selection = clampSelection(snapshot.document, snapshot.selection);
481
+ this.invalidateState();
482
+ this.notify();
483
+ this.events.emit('change', { value: this.document, source });
484
+ this.view?.render?.();
485
+ }
486
+ invalidateState() {
487
+ this.stateCache = null;
488
+ }
489
+ notify() {
490
+ const state = this.getState();
491
+ for (const listener of [...this.stateListeners]) {
492
+ try {
493
+ listener(state);
494
+ }
495
+ catch (error) {
496
+ console.error('[ai-composer] state listener failed', error);
497
+ }
498
+ }
499
+ }
500
+ createTriggerHost() {
501
+ // Intentional this-alias: the host exposes getters bound to this instance.
502
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
503
+ const editor = this;
504
+ return {
505
+ get editor() {
506
+ return editor;
507
+ },
508
+ get document() {
509
+ return editor.document;
510
+ },
511
+ get selection() {
512
+ return editor.selection;
513
+ },
514
+ get triggers() {
515
+ return editor.triggers;
516
+ },
517
+ get events() {
518
+ return editor.events;
519
+ },
520
+ patchState() {
521
+ // State getters read the engine live — just invalidate + notify.
522
+ editor.invalidateState();
523
+ editor.notify();
524
+ },
525
+ replaceRun(state, nodes, options) {
526
+ const range = {
527
+ start: createPosition(state.nodeIndex, state.triggerOffset),
528
+ end: createPosition(state.nodeIndex, state.endOffset),
529
+ };
530
+ editor.replaceRange(range, nodes, options);
531
+ },
532
+ };
533
+ }
534
+ createPluginContext() {
535
+ return {
536
+ editor: this,
537
+ getConfig: () => this.config,
538
+ commands: this.commands,
539
+ triggers: this.triggers,
540
+ nodes: this.nodes,
541
+ serializers: this.serializers,
542
+ events: this.events,
543
+ onCleanup: () => undefined,
544
+ };
545
+ }
546
+ }
547
+ function documentLengthOf(document) {
548
+ return document.nodes.reduce((sum, node) => sum + (node.type === 'text' ? node.text.length : 1), 0);
549
+ }
550
+ /** Runtime guard for values claimed to be editors (useful in adapters). */
551
+ export function isAIComposer(value) {
552
+ return (typeof value === 'object' &&
553
+ value !== null &&
554
+ typeof value.getValue === 'function' &&
555
+ typeof value.setValue === 'function' &&
556
+ typeof value.subscribe === 'function');
557
+ }
558
+ //# sourceMappingURL=editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor.js","sourceRoot":"","sources":["../src/editor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /** Typed error codes so adapters and plugins can branch on failures. */
2
+ export declare const ErrorCode: {
3
+ readonly EDITOR_DESTROYED: "EDITOR_DESTROYED";
4
+ readonly UNKNOWN_COMMAND: "UNKNOWN_COMMAND";
5
+ readonly UNKNOWN_FORMAT: "UNKNOWN_FORMAT";
6
+ readonly UNKNOWN_TRIGGER: "UNKNOWN_TRIGGER";
7
+ readonly PLUGIN_SETUP_FAILED: "PLUGIN_SETUP_FAILED";
8
+ };
9
+ export type AIComposerErrorCode = (typeof ErrorCode)[keyof typeof ErrorCode];
10
+ export declare class AIComposerError extends Error {
11
+ readonly code: AIComposerErrorCode;
12
+ constructor(code: AIComposerErrorCode, message: string);
13
+ }
14
+ export declare function toError(value: unknown): Error;
15
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,eAAO,MAAM,SAAS;;;;;;CAMZ,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAE7E,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;gBAEvB,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM;CAKvD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAG7C"}
package/dist/errors.js ADDED
@@ -0,0 +1,22 @@
1
+ /** Typed error codes so adapters and plugins can branch on failures. */
2
+ export const ErrorCode = {
3
+ EDITOR_DESTROYED: 'EDITOR_DESTROYED',
4
+ UNKNOWN_COMMAND: 'UNKNOWN_COMMAND',
5
+ UNKNOWN_FORMAT: 'UNKNOWN_FORMAT',
6
+ UNKNOWN_TRIGGER: 'UNKNOWN_TRIGGER',
7
+ PLUGIN_SETUP_FAILED: 'PLUGIN_SETUP_FAILED',
8
+ };
9
+ export class AIComposerError extends Error {
10
+ code;
11
+ constructor(code, message) {
12
+ super(`[${code}] ${message}`);
13
+ this.name = 'AIComposerError';
14
+ this.code = code;
15
+ }
16
+ }
17
+ export function toError(value) {
18
+ if (value instanceof Error)
19
+ return value;
20
+ return new Error(typeof value === 'string' ? value : JSON.stringify(value));
21
+ }
22
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,gBAAgB,EAAE,kBAAkB;IACpC,eAAe,EAAE,iBAAiB;IAClC,cAAc,EAAE,gBAAgB;IAChC,eAAe,EAAE,iBAAiB;IAClC,mBAAmB,EAAE,qBAAqB;CAClC,CAAC;AAIX,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,IAAI,CAAsB;IAEnC,YAAY,IAAyB,EAAE,OAAe;QACpD,KAAK,CAAC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,UAAU,OAAO,CAAC,KAAc;IACpC,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC;IACzC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Minimal typed event bus. No framework emitters in core — adapters map this
3
+ * to synthetic events, RxJS, component events, etc.
4
+ */
5
+ export type Unsubscribe = () => void;
6
+ export type EventHandler<TPayload> = (payload: TPayload) => void;
7
+ export interface EventMapBase {
8
+ [eventType: string]: unknown;
9
+ }
10
+ export interface EventBus<TEvents extends EventMapBase> {
11
+ on<K extends keyof TEvents & string>(type: K, handler: EventHandler<TEvents[K]>): Unsubscribe;
12
+ once<K extends keyof TEvents & string>(type: K, handler: EventHandler<TEvents[K]>): Unsubscribe;
13
+ off<K extends keyof TEvents & string>(type: K, handler: EventHandler<TEvents[K]>): void;
14
+ emit<K extends keyof TEvents & string>(type: K, payload: TEvents[K]): void;
15
+ listenerCount<K extends keyof TEvents & string>(type: K): number;
16
+ clear(): void;
17
+ }
18
+ export declare function createEventBus<TEvents extends EventMapBase>(): EventBus<TEvents>;
19
+ //# sourceMappingURL=event-bus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../src/events/event-bus.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AACrC,MAAM,MAAM,YAAY,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;AAEjE,MAAM,WAAW,YAAY;IAC3B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,QAAQ,CAAC,OAAO,SAAS,YAAY;IACpD,EAAE,CAAC,CAAC,SAAS,MAAM,OAAO,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;IAC9F,IAAI,CAAC,CAAC,SAAS,MAAM,OAAO,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;IAChG,GAAG,CAAC,CAAC,SAAS,MAAM,OAAO,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACxF,IAAI,CAAC,CAAC,SAAS,MAAM,OAAO,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC3E,aAAa,CAAC,CAAC,SAAS,MAAM,OAAO,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC;IACjE,KAAK,IAAI,IAAI,CAAC;CACf;AAED,wBAAgB,cAAc,CAAC,OAAO,SAAS,YAAY,KAAK,QAAQ,CAAC,OAAO,CAAC,CAkDhF"}