@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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Deepak Chopkar
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,6 @@
1
+ # @ai-composer/core
2
+
3
+ Framework-independent AI composition engine: model, state, events, commands, triggers, plugins, history, serialization.
4
+
5
+ See [`docs/`](../../docs/README.md) for guides and API reference.
6
+
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Built-in commands. Plugins extend this set via
3
+ * their `commands` contribution.
4
+ */
5
+ import type { Position } from '../model/selection';
6
+ import type { AIComposerNode } from '../model/nodes';
7
+ import type { SuggestionItem } from '../state/state';
8
+ import type { AIComposer } from '../editor';
9
+ import type { AIComposerCommand } from './registry';
10
+ export declare const BUILTIN_COMMANDS: {
11
+ readonly submit: "submit";
12
+ readonly clear: "clear";
13
+ readonly undo: "undo";
14
+ readonly redo: "redo";
15
+ readonly insertText: "insertText";
16
+ readonly insertNode: "insertNode";
17
+ readonly focus: "focus";
18
+ readonly blur: "blur";
19
+ readonly openTrigger: "openTrigger";
20
+ readonly removeNode: "removeNode";
21
+ readonly acceptSuggestion: "acceptSuggestion";
22
+ };
23
+ export interface InsertTextPayload {
24
+ text: string;
25
+ at?: Position;
26
+ }
27
+ export interface InsertNodePayload {
28
+ node: AIComposerNode;
29
+ at?: Position;
30
+ }
31
+ export interface RemoveNodePayload {
32
+ key: string;
33
+ }
34
+ export interface OpenTriggerPayload {
35
+ triggerId: string;
36
+ }
37
+ export interface AcceptSuggestionPayload {
38
+ item?: SuggestionItem;
39
+ }
40
+ export declare function createBuiltinCommands(editor: AIComposer): AIComposerCommand[];
41
+ //# sourceMappingURL=builtins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../src/commands/builtins.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;CAYnB,CAAC;AAEX,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,QAAQ,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,cAAc,CAAC;IACrB,EAAE,CAAC,EAAE,QAAQ,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB;AAMD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,GAAG,iBAAiB,EAAE,CAyF7E"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Built-in commands. Plugins extend this set via
3
+ * their `commands` contribution.
4
+ */
5
+ import { AIComposerError } from '../errors';
6
+ export const BUILTIN_COMMANDS = {
7
+ submit: 'submit',
8
+ clear: 'clear',
9
+ undo: 'undo',
10
+ redo: 'redo',
11
+ insertText: 'insertText',
12
+ insertNode: 'insertNode',
13
+ focus: 'focus',
14
+ blur: 'blur',
15
+ openTrigger: 'openTrigger',
16
+ removeNode: 'removeNode',
17
+ acceptSuggestion: 'acceptSuggestion',
18
+ };
19
+ function payloadOf(payload) {
20
+ return payload;
21
+ }
22
+ export function createBuiltinCommands(editor) {
23
+ const commands = [
24
+ {
25
+ id: BUILTIN_COMMANDS.submit,
26
+ label: 'Submit',
27
+ canExecute: ({ state }) => !state.disabled && !state.readonly && !state.submitting,
28
+ execute: () => editor.submit(),
29
+ },
30
+ {
31
+ id: BUILTIN_COMMANDS.clear,
32
+ label: 'Clear',
33
+ canExecute: ({ state }) => !state.disabled && !state.readonly,
34
+ execute: () => editor.clear(),
35
+ },
36
+ {
37
+ id: BUILTIN_COMMANDS.undo,
38
+ label: 'Undo',
39
+ canExecute: ({ state }) => state.canUndo,
40
+ execute: () => editor.undo(),
41
+ },
42
+ {
43
+ id: BUILTIN_COMMANDS.redo,
44
+ label: 'Redo',
45
+ canExecute: ({ state }) => state.canRedo,
46
+ execute: () => editor.redo(),
47
+ },
48
+ {
49
+ id: BUILTIN_COMMANDS.insertText,
50
+ label: 'Insert text',
51
+ execute: (_context) => {
52
+ const payload = payloadOf(_context.payload);
53
+ if (!payload)
54
+ throw new AIComposerError('UNKNOWN_COMMAND', 'insertText requires a payload');
55
+ if (typeof payload === 'string') {
56
+ editor.insertText(payload);
57
+ }
58
+ else {
59
+ editor.insertText(payload.text, payload.at);
60
+ }
61
+ },
62
+ },
63
+ {
64
+ id: BUILTIN_COMMANDS.insertNode,
65
+ label: 'Insert node',
66
+ execute: (_context) => {
67
+ const payload = payloadOf(_context.payload);
68
+ if (!payload?.node)
69
+ throw new AIComposerError('UNKNOWN_COMMAND', 'insertNode requires { node }');
70
+ editor.insertNode(payload.node, { at: payload.at });
71
+ },
72
+ },
73
+ {
74
+ id: BUILTIN_COMMANDS.focus,
75
+ label: 'Focus',
76
+ execute: () => editor.focus(),
77
+ },
78
+ {
79
+ id: BUILTIN_COMMANDS.blur,
80
+ label: 'Blur',
81
+ execute: () => editor.blur(),
82
+ },
83
+ {
84
+ id: BUILTIN_COMMANDS.openTrigger,
85
+ label: 'Open trigger',
86
+ execute: (_context) => {
87
+ const payload = payloadOf(_context.payload);
88
+ const triggerId = typeof payload === 'string' ? payload : payload?.triggerId;
89
+ if (!triggerId)
90
+ throw new AIComposerError('UNKNOWN_TRIGGER', 'openTrigger requires a triggerId');
91
+ editor.openTrigger(triggerId);
92
+ },
93
+ },
94
+ {
95
+ id: BUILTIN_COMMANDS.removeNode,
96
+ label: 'Remove node',
97
+ execute: (_context) => {
98
+ const payload = payloadOf(_context.payload);
99
+ const key = typeof payload === 'string' ? payload : payload?.key;
100
+ if (!key)
101
+ throw new AIComposerError('UNKNOWN_COMMAND', 'removeNode requires a key');
102
+ editor.removeNode(key);
103
+ },
104
+ },
105
+ {
106
+ id: BUILTIN_COMMANDS.acceptSuggestion,
107
+ label: 'Accept suggestion',
108
+ execute: async (_context) => {
109
+ const payload = payloadOf(_context.payload);
110
+ await editor.acceptSuggestion(payload?.item);
111
+ },
112
+ },
113
+ ];
114
+ return commands;
115
+ }
116
+ //# sourceMappingURL=builtins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../src/commands/builtins.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Command system — UI-independent named operations. Toolbars and keyboard
3
+ * shortcuts bind to command ids, never to implementation functions.
4
+ */
5
+ import type { Unsubscribe } from '../events/event-bus';
6
+ import type { AIComposer } from '../editor';
7
+ import type { AIComposerState } from '../state/state';
8
+ export interface CommandContext {
9
+ editor: AIComposer;
10
+ state: AIComposerState;
11
+ payload?: unknown;
12
+ }
13
+ export interface AIComposerCommand {
14
+ id: string;
15
+ label?: string;
16
+ execute(context: CommandContext): void | Promise<void>;
17
+ canExecute?(context: CommandContext): boolean;
18
+ }
19
+ export interface CommandRegistry {
20
+ register(command: AIComposerCommand): Unsubscribe;
21
+ get(id: string): AIComposerCommand | undefined;
22
+ has(id: string): boolean;
23
+ list(): AIComposerCommand[];
24
+ clear(): void;
25
+ }
26
+ export declare function createCommandRegistry(): CommandRegistry;
27
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/commands/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,eAAe,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,UAAU,CAAC,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC;CAC/C;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,WAAW,CAAC;IAClD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAAC;IAC/C,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,IAAI,IAAI,iBAAiB,EAAE,CAAC;IAC5B,KAAK,IAAI,IAAI,CAAC;CACf;AAED,wBAAgB,qBAAqB,IAAI,eAAe,CAsBvD"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Command system — UI-independent named operations. Toolbars and keyboard
3
+ * shortcuts bind to command ids, never to implementation functions.
4
+ */
5
+ export function createCommandRegistry() {
6
+ const commands = new Map();
7
+ return {
8
+ register(command) {
9
+ commands.set(command.id, command);
10
+ return () => {
11
+ if (commands.get(command.id) === command)
12
+ commands.delete(command.id);
13
+ };
14
+ },
15
+ get(id) {
16
+ return commands.get(id);
17
+ },
18
+ has(id) {
19
+ return commands.has(id);
20
+ },
21
+ list() {
22
+ return [...commands.values()];
23
+ },
24
+ clear() {
25
+ commands.clear();
26
+ },
27
+ };
28
+ }
29
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/commands/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA2BH,MAAM,UAAU,qBAAqB;IACnC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;IACtD,OAAO;QACL,QAAQ,CAAC,OAAO;YACd,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAClC,OAAO,GAAG,EAAE;gBACV,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,OAAO;oBAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACxE,CAAC,CAAC;QACJ,CAAC;QACD,GAAG,CAAC,EAAE;YACJ,OAAO,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;QACD,GAAG,CAAC,EAAE;YACJ,OAAO,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI;YACF,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAChC,CAAC;QACD,KAAK;YACH,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,185 @@
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 { type Unsubscribe } from './events/event-bus';
8
+ import type { ChangeSource, AIComposerBus, AIComposerEventMap, AIComposerEventType, TriggerCloseReason } from './events/events';
9
+ import { type AIComposerDocument } from './model/document';
10
+ import { type AIComposerNode } from './model/nodes';
11
+ import { type DocumentRange, type Position, type SelectionState } from './model/selection';
12
+ import type { AIComposerState, SuggestionItem, TriggerState } from './state/state';
13
+ import { type CommandRegistry, type AIComposerCommand } from './commands/registry';
14
+ import { type NodeDefinition, type NodeRegistry } from './nodes/registry';
15
+ import { type AIComposerTrigger, type TriggerRegistry } from './triggers/engine';
16
+ import { type PluginRegistry, type AIComposerPlugin } from './plugins/registry';
17
+ import { type SerializationFormat, type Serializer, type SerializerRegistry } from './serialization/index';
18
+ import type { AIComposerConfig, AIComposerOptions } from './types';
19
+ /** Optional DOM/view handle attached by the DOM layer or an adapter. */
20
+ export interface EditorView {
21
+ focus(): void;
22
+ blur(): void;
23
+ /** Re-render the document into the view. */
24
+ render?(): void;
25
+ }
26
+ export interface SetValueOptions {
27
+ source?: ChangeSource;
28
+ /** Record as an undo step (default true). */
29
+ history?: boolean;
30
+ label?: string;
31
+ }
32
+ export interface TransactionOptions {
33
+ label?: string;
34
+ source?: ChangeSource;
35
+ history?: boolean;
36
+ }
37
+ export interface InsertNodeOptions {
38
+ at?: Position;
39
+ /** Insert a trailing space and place the caret after it (default true). */
40
+ trailingSpace?: boolean;
41
+ source?: ChangeSource;
42
+ }
43
+ export type StateListener = (state: AIComposerState) => void;
44
+ /**
45
+ * Public editor contract. Stable across framework adapters — if a method makes
46
+ * sense without a browser, it belongs here, not in an adapter.
47
+ */
48
+ export interface AIComposer {
49
+ getValue(): AIComposerDocument;
50
+ setValue(value: AIComposerDocument | AIComposerNode[] | string, options?: SetValueOptions): void;
51
+ clear(): void;
52
+ /** Replace a range with nodes in a single history step. */
53
+ replaceRange(range: DocumentRange, nodes: AIComposerNode[], options?: {
54
+ trailingSpace?: boolean;
55
+ source?: ChangeSource;
56
+ }): void;
57
+ insertText(text: string, at?: Position): void;
58
+ insertNode(node: AIComposerNode, options?: InsertNodeOptions): void;
59
+ removeNode(key: string): void;
60
+ /** Reconcile a document parsed from the view (user typing). View-layer API. */
61
+ applyViewUpdate(next: AIComposerDocument, selection?: SelectionState): void;
62
+ getSelection(): SelectionState;
63
+ setSelection(selection: SelectionState): void;
64
+ focus(): void;
65
+ blur(): void;
66
+ /** Called by the attached view on native focus changes. View-layer API. */
67
+ setFocused(focused: boolean): void;
68
+ attachView(view: EditorView): Unsubscribe;
69
+ /** True once destroy() has run — adapters use this to rebuild safely. */
70
+ isDestroyed(): boolean;
71
+ destroy(): void;
72
+ submit(): Promise<void>;
73
+ undo(): void;
74
+ redo(): void;
75
+ /** Group mutations into one undo step. */
76
+ transaction(fn: () => void, options?: TransactionOptions): void;
77
+ readonly commands: CommandRegistry;
78
+ executeCommand(id: string, payload?: unknown): Promise<void>;
79
+ canExecuteCommand(id: string, payload?: unknown): boolean;
80
+ readonly triggers: TriggerRegistry;
81
+ getActiveTrigger(): TriggerState | null;
82
+ acceptSuggestion(item?: SuggestionItem): Promise<void>;
83
+ moveSuggestionSelection(delta: number): void;
84
+ closeTrigger(reason?: TriggerCloseReason): void;
85
+ /** Insert a trigger character at the caret, opening its suggestion session. */
86
+ openTrigger(triggerId: string): void;
87
+ readonly nodes: NodeRegistry;
88
+ readonly serializers: SerializerRegistry;
89
+ readonly pluginRegistry: PluginRegistry;
90
+ registerPlugin(plugin: AIComposerPlugin): Unsubscribe;
91
+ registerTrigger(trigger: AIComposerTrigger): Unsubscribe;
92
+ registerCommand(command: AIComposerCommand): Unsubscribe;
93
+ registerNodeType(definition: NodeDefinition): Unsubscribe;
94
+ registerSerializer(serializer: Serializer): Unsubscribe;
95
+ on<K extends AIComposerEventType>(type: K, handler: (event: AIComposerEventMap[K]) => void): Unsubscribe;
96
+ once<K extends AIComposerEventType>(type: K, handler: (event: AIComposerEventMap[K]) => void): Unsubscribe;
97
+ off<K extends AIComposerEventType>(type: K, handler: (event: AIComposerEventMap[K]) => void): void;
98
+ getState(): AIComposerState;
99
+ subscribe(listener: StateListener): Unsubscribe;
100
+ getConfig(): AIComposerConfig;
101
+ configure(patch: Partial<AIComposerOptions>): void;
102
+ setMode(mode: string): void;
103
+ setDisabled(disabled: boolean): void;
104
+ setReadonly(readonly: boolean): void;
105
+ serialize(format: SerializationFormat): unknown;
106
+ }
107
+ export declare class AIComposerImpl implements AIComposer {
108
+ readonly events: AIComposerBus;
109
+ readonly commands: CommandRegistry;
110
+ readonly triggers: TriggerRegistry;
111
+ readonly nodes: NodeRegistry;
112
+ readonly serializers: SerializerRegistry;
113
+ readonly pluginRegistry: PluginRegistry;
114
+ private readonly triggerEngine;
115
+ private readonly history;
116
+ private config;
117
+ private document;
118
+ private selection;
119
+ private focused;
120
+ private submitting;
121
+ private destroyed;
122
+ private mutationDepth;
123
+ private view;
124
+ private stateListeners;
125
+ private stateCache;
126
+ constructor(options?: AIComposerOptions);
127
+ getValue(): AIComposerDocument;
128
+ setValue(value: AIComposerDocument | AIComposerNode[] | string, options?: SetValueOptions): void;
129
+ clear(): void;
130
+ replaceRange(range: DocumentRange, nodes: AIComposerNode[], options?: {
131
+ trailingSpace?: boolean;
132
+ source?: ChangeSource;
133
+ }): void;
134
+ insertText(text: string, at?: Position): void;
135
+ insertNode(node: AIComposerNode, options?: InsertNodeOptions): void;
136
+ removeNode(key: string): void;
137
+ applyViewUpdate(next: AIComposerDocument, selection?: SelectionState): void;
138
+ getSelection(): SelectionState;
139
+ setSelection(selection: SelectionState): void;
140
+ focus(): void;
141
+ blur(): void;
142
+ setFocused(focused: boolean): void;
143
+ attachView(view: EditorView): Unsubscribe;
144
+ destroy(): void;
145
+ isDestroyed(): boolean;
146
+ submit(): Promise<void>;
147
+ undo(): void;
148
+ redo(): void;
149
+ transaction(fn: () => void, options?: TransactionOptions): void;
150
+ executeCommand(id: string, payload?: unknown): Promise<void>;
151
+ canExecuteCommand(id: string, payload?: unknown): boolean;
152
+ getActiveTrigger(): TriggerState | null;
153
+ acceptSuggestion(item?: SuggestionItem): Promise<void>;
154
+ moveSuggestionSelection(delta: number): void;
155
+ closeTrigger(reason?: TriggerCloseReason): void;
156
+ openTrigger(triggerId: string): void;
157
+ registerPlugin(plugin: AIComposerPlugin): Unsubscribe;
158
+ registerTrigger(trigger: AIComposerTrigger): Unsubscribe;
159
+ registerCommand(command: AIComposerCommand): Unsubscribe;
160
+ registerNodeType(definition: NodeDefinition): Unsubscribe;
161
+ registerSerializer(serializer: Serializer): Unsubscribe;
162
+ on<K extends AIComposerEventType>(type: K, handler: (event: AIComposerEventMap[K]) => void): Unsubscribe;
163
+ once<K extends AIComposerEventType>(type: K, handler: (event: AIComposerEventMap[K]) => void): Unsubscribe;
164
+ off<K extends AIComposerEventType>(type: K, handler: (event: AIComposerEventMap[K]) => void): void;
165
+ getState(): AIComposerState;
166
+ subscribe(listener: StateListener): Unsubscribe;
167
+ getConfig(): AIComposerConfig;
168
+ configure(patch: Partial<AIComposerOptions>): void;
169
+ setMode(mode: string): void;
170
+ setDisabled(disabled: boolean): void;
171
+ setReadonly(readonly: boolean): void;
172
+ serialize(format: SerializationFormat): unknown;
173
+ private assertAlive;
174
+ private deleteSelectionIfNeeded;
175
+ private mutate;
176
+ private commit;
177
+ private restore;
178
+ private invalidateState;
179
+ private notify;
180
+ private createTriggerHost;
181
+ private createPluginContext;
182
+ }
183
+ /** Runtime guard for values claimed to be editors (useful in adapters). */
184
+ export declare function isAIComposer(value: unknown): value is AIComposer;
185
+ //# sourceMappingURL=editor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../src/editor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,KAAK,EAEV,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAUL,KAAK,kBAAkB,EACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EAQL,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAyB,KAAK,eAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE1G,OAAO,EAA6B,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrG,OAAO,EAGL,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,UAAU,EACf,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEnE,wEAAwE;AACxE,MAAM,WAAW,UAAU;IACzB,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,IAAI,CAAC;IACb,4CAA4C;IAC5C,MAAM,CAAC,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,QAAQ,CAAC;IACd,2EAA2E;IAC3E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AASD,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;AAE7D;;;GAGG;AACH,MAAM,WAAW,UAAU;IAEzB,QAAQ,IAAI,kBAAkB,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,kBAAkB,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACjG,KAAK,IAAI,IAAI,CAAC;IACd,2DAA2D;IAC3D,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,YAAY,CAAA;KAAE,GAAG,IAAI,CAAC;IAGhI,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC9C,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpE,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,+EAA+E;IAC/E,eAAe,CAAC,IAAI,EAAE,kBAAkB,EAAE,SAAS,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAG5E,YAAY,IAAI,cAAc,CAAC;IAC/B,YAAY,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IAG9C,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,IAAI,CAAC;IACb,2EAA2E;IAC3E,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,CAAC;IAC1C,yEAAyE;IACzE,WAAW,IAAI,OAAO,CAAC;IACvB,OAAO,IAAI,IAAI,CAAC;IAGhB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAGxB,IAAI,IAAI,IAAI,CAAC;IACb,IAAI,IAAI,IAAI,CAAC;IACb,0CAA0C;IAC1C,WAAW,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAGhE,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAG1D,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,gBAAgB,IAAI,YAAY,GAAG,IAAI,CAAC;IACxC,gBAAgB,CAAC,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,YAAY,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAChD,+EAA+E;IAC/E,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAGrC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,WAAW,CAAC;IACtD,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,WAAW,CAAC;IACzD,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,WAAW,CAAC;IACzD,gBAAgB,CAAC,UAAU,EAAE,cAAc,GAAG,WAAW,CAAC;IAC1D,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,WAAW,CAAC;IAGxD,EAAE,CAAC,CAAC,SAAS,mBAAmB,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,WAAW,CAAC;IACzG,IAAI,CAAC,CAAC,SAAS,mBAAmB,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,WAAW,CAAC;IAC3G,GAAG,CAAC,CAAC,SAAS,mBAAmB,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAGnG,QAAQ,IAAI,eAAe,CAAC;IAC5B,SAAS,CAAC,QAAQ,EAAE,aAAa,GAAG,WAAW,CAAC;IAGhD,SAAS,IAAI,gBAAgB,CAAC;IAC9B,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;IACnD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACrC,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAGrC,SAAS,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC;CACjD;AAED,qBAAa,cAAe,YAAW,UAAU;IAC/C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAwC;IACtE,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAA2B;IAC7D,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAA2B;IAC7D,QAAQ,CAAC,KAAK,EAAE,YAAY,CAA+B;IAC3D,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAA8B;IACtE,QAAQ,CAAC,cAAc,EAAE,cAAc,CAA0B;IAEjE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IAExC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,UAAU,CAAgC;gBAEtC,OAAO,GAAE,iBAAsB;IAoC3C,QAAQ,IAAI,kBAAkB;IAI9B,QAAQ,CAAC,KAAK,EAAE,kBAAkB,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,IAAI;IAiBpG,KAAK,IAAI,IAAI;IAIb,YAAY,CACV,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,GAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,YAAY,CAAA;KAAO,GAC/D,IAAI;IAgBP,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI;IAe7C,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,GAAE,iBAAsB,GAAG,IAAI;IAwBvE,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAsB7B,eAAe,CAAC,IAAI,EAAE,kBAAkB,EAAE,SAAS,CAAC,EAAE,cAAc,GAAG,IAAI;IAqB3E,YAAY,IAAI,cAAc;IAI9B,YAAY,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAa7C,KAAK,IAAI,IAAI;IASb,IAAI,IAAI,IAAI;IASZ,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IASlC,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW;IAOzC,OAAO,IAAI,IAAI;IAef,WAAW,IAAI,OAAO;IAMhB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAoC7B,IAAI,IAAI,IAAI;IAOZ,IAAI,IAAI,IAAI;IAOZ,WAAW,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,OAAO,GAAE,kBAAuB,GAAG,IAAI;IAiB7D,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAYlE,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO;IASzD,gBAAgB,IAAI,YAAY,GAAG,IAAI;IAIjC,gBAAgB,CAAC,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5D,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI5C,YAAY,CAAC,MAAM,GAAE,kBAA6B,GAAG,IAAI;IAIzD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAYpC,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,WAAW;IAKrD,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,WAAW;IAIxD,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,WAAW;IAIxD,gBAAgB,CAAC,UAAU,EAAE,cAAc,GAAG,WAAW;IAIzD,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,WAAW;IAMvD,EAAE,CAAC,CAAC,SAAS,mBAAmB,EAC9B,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,IAAI,GAC9C,WAAW;IAId,IAAI,CAAC,CAAC,SAAS,mBAAmB,EAChC,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,IAAI,GAC9C,WAAW;IAId,GAAG,CAAC,CAAC,SAAS,mBAAmB,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAMlG,QAAQ,IAAI,eAAe;IAuB3B,SAAS,CAAC,QAAQ,EAAE,aAAa,GAAG,WAAW;IAO/C,SAAS,IAAI,gBAAgB;IAI7B,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAWlD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAKpC,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAOpC,SAAS,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO;IAM/C,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,uBAAuB;IAQ/B,OAAO,CAAC,MAAM;IAkCd,OAAO,CAAC,MAAM;IAUd,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,iBAAiB;IAmCzB,OAAO,CAAC,mBAAmB;CAY5B;AAMD,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAQhE"}