@nimbalyst/extension-sdk 0.1.5 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/dist/createReadOnlyHost.d.ts +5 -0
- package/dist/createReadOnlyHost.d.ts.map +1 -1
- package/dist/createReadOnlyHost.js +4 -0
- package/dist/externals.d.ts +3 -3
- package/dist/externals.d.ts.map +1 -1
- package/dist/externals.js +7 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/types/editor.d.ts +127 -0
- package/dist/types/editor.d.ts.map +1 -1
- package/dist/types/extension.d.ts +74 -0
- package/dist/types/extension.d.ts.map +1 -1
- package/dist/types/theme.d.ts +17 -0
- package/dist/types/theme.d.ts.map +1 -1
- package/dist/useCollaborativeEditor.d.ts +111 -0
- package/dist/useCollaborativeEditor.d.ts.map +1 -0
- package/dist/useCollaborativeEditor.js +165 -0
- package/dist/useEditorLifecycle.d.ts.map +1 -1
- package/dist/useEditorLifecycle.js +9 -5
- package/package.json +13 -3
package/CHANGELOG.md
CHANGED
|
@@ -8,11 +8,28 @@ The SDK is versioned independently of the Nimbalyst app. Each release declares i
|
|
|
8
8
|
|
|
9
9
|
| SDK version | Minimum Nimbalyst app version |
|
|
10
10
|
| --- | --- |
|
|
11
|
+
| 0.2.0 | 0.58.5 |
|
|
11
12
|
| 0.1.5 | 0.58.5 |
|
|
12
13
|
| 0.1.0 | 0.58.5 |
|
|
13
14
|
|
|
14
15
|
## [Unreleased]
|
|
15
16
|
|
|
17
|
+
## [0.2.0]
|
|
18
|
+
|
|
19
|
+
Adds opt-in collaborative editing for custom editors. Backwards-compatible: extensions built against 0.2.0 continue to work on older Nimbalyst hosts -- the collaboration hook detects the absence of `host.collaboration` and reports `isCollaborative: false` so the editor falls back to local-only editing.
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
|
|
23
|
+
- `useCollaborativeEditor(host, options)` hook for wiring a custom editor to a shared Y.Doc through `host.collaboration`. Handles binding lifecycle, awareness, status, and the empty-doc seed path.
|
|
24
|
+
- `CollaborationContext` type on `EditorHost.collaboration` exposing the Y.Doc, awareness, doc id, local user info, and connection status.
|
|
25
|
+
- Manifest field `contributions.customEditors[].collaboration = { supported: boolean, awarenessFields?: string[] }` so extensions declare collab support and the awareness shape they publish.
|
|
26
|
+
- `yjs` and `y-protocols` declared as optional peer dependencies, externalized by the host so a single Y.Doc instance is shared with the rest of Nimbalyst (mismatched copies fragment the document).
|
|
27
|
+
|
|
28
|
+
### Notes
|
|
29
|
+
|
|
30
|
+
- Existing extensions need no changes; if `collaboration.supported` is absent the editor continues to be loaded as before.
|
|
31
|
+
- See `docs/COLLABORATION_GUIDE.md` for the binding pattern (Excalidraw and CSV are reference implementations).
|
|
32
|
+
|
|
16
33
|
## [0.1.5]
|
|
17
34
|
|
|
18
35
|
First release published via GitHub Actions Trusted Publishing (OIDC). No API changes from 0.1.0.
|
|
@@ -29,6 +29,11 @@ export interface ReadOnlyHostOptions {
|
|
|
29
29
|
fileName: string;
|
|
30
30
|
/** Optional synthetic file path (defaults to `/shared/{fileName}`) */
|
|
31
31
|
filePath?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Whether this host represents an inline embed (vs. a full tab/share viewer).
|
|
34
|
+
* When true, extensions may suppress chrome that doesn't fit inline contexts.
|
|
35
|
+
*/
|
|
36
|
+
embedded?: boolean;
|
|
32
37
|
}
|
|
33
38
|
export interface ReadOnlyHost extends EditorHost {
|
|
34
39
|
/** Update the theme (call from viewer chrome's theme toggle) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createReadOnlyHost.d.ts","sourceRoot":"","sources":["../src/createReadOnlyHost.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAiC,MAAM,mBAAmB,CAAC;AAEnF,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IAEd,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"createReadOnlyHost.d.ts","sourceRoot":"","sources":["../src/createReadOnlyHost.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAiC,MAAM,mBAAmB,CAAC;AAEnF,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IAEd,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,YAAa,SAAQ,UAAU;IAC9C,gEAAgE;IAChE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,mBAAmB,GACxB,YAAY,CA6Dd"}
|
|
@@ -36,6 +36,7 @@ export function createReadOnlyHost(content, opts) {
|
|
|
36
36
|
filePath: opts.filePath ?? `/shared/${opts.fileName}`,
|
|
37
37
|
fileName: opts.fileName,
|
|
38
38
|
readOnly: true,
|
|
39
|
+
embedded: opts.embedded ?? false,
|
|
39
40
|
theme: currentTheme,
|
|
40
41
|
isActive: true,
|
|
41
42
|
// -- Content loading --
|
|
@@ -53,6 +54,9 @@ export function createReadOnlyHost(content, opts) {
|
|
|
53
54
|
setDirty: () => { },
|
|
54
55
|
onSaveRequested: () => () => { },
|
|
55
56
|
onFileChanged: () => () => { },
|
|
57
|
+
// readOnly never flips for the share viewer; the callback is held but
|
|
58
|
+
// never invoked.
|
|
59
|
+
onReadOnlyChanged: () => () => { },
|
|
56
60
|
openHistory: () => { },
|
|
57
61
|
registerMenuItems: (_items) => { },
|
|
58
62
|
registerEditorAPI: () => { },
|
package/dist/externals.d.ts
CHANGED
|
@@ -9,15 +9,15 @@
|
|
|
9
9
|
* Extensions should bundle their own utility libraries (zustand, lodash, etc.)
|
|
10
10
|
* for version independence.
|
|
11
11
|
*/
|
|
12
|
-
export declare const REQUIRED_EXTERNALS: readonly ["react", "react-dom", "react-dom/client", "react/jsx-runtime", "react/jsx-dev-runtime", "lexical", "@lexical/react/LexicalComposerContext", "@lexical/react/useLexicalEditable", "@lexical/react/useLexicalNodeSelection", "@lexical/utils", "@lexical/markdown"];
|
|
12
|
+
export declare const REQUIRED_EXTERNALS: readonly ["react", "react-dom", "react-dom/client", "react/jsx-runtime", "react/jsx-dev-runtime", "lexical", "@lexical/react/LexicalComposerContext", "@lexical/react/useLexicalEditable", "@lexical/react/useLexicalNodeSelection", "@lexical/utils", "@lexical/markdown", "yjs"];
|
|
13
13
|
/**
|
|
14
14
|
* Regex patterns for externals that match multiple modules.
|
|
15
15
|
*/
|
|
16
|
-
export declare const EXTERNAL_PATTERNS: readonly [RegExp, RegExp];
|
|
16
|
+
export declare const EXTERNAL_PATTERNS: readonly [RegExp, RegExp, RegExp];
|
|
17
17
|
/**
|
|
18
18
|
* Combined externals for rollup configuration.
|
|
19
19
|
* Use this in rollupOptions.external
|
|
20
20
|
*/
|
|
21
|
-
export declare const ROLLUP_EXTERNALS: readonly ["react", "react-dom", "react-dom/client", "react/jsx-runtime", "react/jsx-dev-runtime", "lexical", "@lexical/react/LexicalComposerContext", "@lexical/react/useLexicalEditable", "@lexical/react/useLexicalNodeSelection", "@lexical/utils", "@lexical/markdown", RegExp, RegExp, "@nimbalyst/editor-context"];
|
|
21
|
+
export declare const ROLLUP_EXTERNALS: readonly ["react", "react-dom", "react-dom/client", "react/jsx-runtime", "react/jsx-dev-runtime", "lexical", "@lexical/react/LexicalComposerContext", "@lexical/react/useLexicalEditable", "@lexical/react/useLexicalNodeSelection", "@lexical/utils", "@lexical/markdown", "yjs", RegExp, RegExp, RegExp, "@nimbalyst/editor-context"];
|
|
22
22
|
export type RequiredExternal = (typeof REQUIRED_EXTERNALS)[number];
|
|
23
23
|
//# sourceMappingURL=externals.d.ts.map
|
package/dist/externals.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"externals.d.ts","sourceRoot":"","sources":["../src/externals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"externals.d.ts","sourceRoot":"","sources":["../src/externals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,oRAoBrB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB,mCAMpB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,gBAAgB,yUAInB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC"}
|
package/dist/externals.js
CHANGED
|
@@ -23,6 +23,10 @@ export const REQUIRED_EXTERNALS = [
|
|
|
23
23
|
'@lexical/react/useLexicalNodeSelection',
|
|
24
24
|
'@lexical/utils',
|
|
25
25
|
'@lexical/markdown',
|
|
26
|
+
// yJS - collaboration bindings share the host's Y.Doc instance.
|
|
27
|
+
// `instanceof Y.Doc` checks fail if an extension bundles its own yjs
|
|
28
|
+
// copy, so this MUST be externalized (same constraint as React).
|
|
29
|
+
'yjs',
|
|
26
30
|
];
|
|
27
31
|
/**
|
|
28
32
|
* Regex patterns for externals that match multiple modules.
|
|
@@ -30,6 +34,9 @@ export const REQUIRED_EXTERNALS = [
|
|
|
30
34
|
export const EXTERNAL_PATTERNS = [
|
|
31
35
|
/^@lexical\//,
|
|
32
36
|
/^@nimbalyst\/runtime/,
|
|
37
|
+
// y-protocols ships submodules like `y-protocols/awareness` and
|
|
38
|
+
// `y-protocols/sync`. All of them must resolve to the host's copy.
|
|
39
|
+
/^y-protocols(\/.*)?$/,
|
|
33
40
|
];
|
|
34
41
|
/**
|
|
35
42
|
* Combined externals for rollup configuration.
|
package/dist/index.d.ts
CHANGED
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
export { REQUIRED_EXTERNALS, EXTERNAL_PATTERNS, ROLLUP_EXTERNALS, type RequiredExternal, } from './externals.js';
|
|
26
26
|
export * from './types/index.js';
|
|
27
27
|
export { useEditorLifecycle, type UseEditorLifecycleOptions, type UseEditorLifecycleResult, type DiffState, } from './useEditorLifecycle.js';
|
|
28
|
+
export { useCollaborativeEditor, COLLAB_INIT_ORIGIN, type UseCollaborativeEditorConfig, type UseCollaborativeEditorResult, } from './useCollaborativeEditor.js';
|
|
28
29
|
export { useDocumentPath, type DocumentPathContextValue, } from './documentPath.js';
|
|
29
30
|
export { MaterialSymbol } from './MaterialSymbol.js';
|
|
30
31
|
export { createReadOnlyHost, type ReadOnlyHost, type ReadOnlyHostOptions, } from './createReadOnlyHost.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAC;AAGxB,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EACL,kBAAkB,EAClB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,SAAS,GACf,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAC;AAGxB,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EACL,kBAAkB,EAClB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,SAAS,GACf,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,GAClC,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EACL,eAAe,EACf,KAAK,wBAAwB,GAC9B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,EACL,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,mBAAmB,GACzB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGhE,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,KAAK,gBAAgB,GACtB,MAAM,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -28,6 +28,7 @@ export { REQUIRED_EXTERNALS, EXTERNAL_PATTERNS, ROLLUP_EXTERNALS, } from './exte
|
|
|
28
28
|
export * from './types/index.js';
|
|
29
29
|
// Re-export hooks
|
|
30
30
|
export { useEditorLifecycle, } from './useEditorLifecycle.js';
|
|
31
|
+
export { useCollaborativeEditor, COLLAB_INIT_ORIGIN, } from './useCollaborativeEditor.js';
|
|
31
32
|
// Re-export host-provided editor context and UI helpers for extensions.
|
|
32
33
|
export { useDocumentPath, } from './documentPath.js';
|
|
33
34
|
export { MaterialSymbol } from './MaterialSymbol.js';
|
package/dist/types/editor.d.ts
CHANGED
|
@@ -12,7 +12,91 @@
|
|
|
12
12
|
* Your extension code imports from @nimbalyst/runtime, which is externalized
|
|
13
13
|
* and provided by the host.
|
|
14
14
|
*/
|
|
15
|
+
import type { Doc as YDoc } from 'yjs';
|
|
16
|
+
import type { Awareness } from 'y-protocols/awareness';
|
|
15
17
|
import type { ExtensionStorage } from './panel.js';
|
|
18
|
+
/**
|
|
19
|
+
* Connection status of a collaborative session.
|
|
20
|
+
*
|
|
21
|
+
* Mirrors `DocumentSyncStatus` in `@nimbalyst/runtime`. Extensions should treat
|
|
22
|
+
* any non-`'connected'` value as "not safe to assume the server has our
|
|
23
|
+
* latest edits" for UI purposes; the underlying Y.Doc remains usable
|
|
24
|
+
* regardless (CRDT updates queue locally until reconnection).
|
|
25
|
+
*/
|
|
26
|
+
export type CollaborationStatus = 'disconnected' | 'connecting' | 'syncing' | 'replaying' | 'offline-unsynced' | 'connected' | 'error';
|
|
27
|
+
/**
|
|
28
|
+
* The standard awareness fields the host renders generically (presence
|
|
29
|
+
* avatars, cursors). Extensions may add arbitrary extra keys -- those extras
|
|
30
|
+
* are opaque to the host and handled by the extension itself.
|
|
31
|
+
*/
|
|
32
|
+
export interface StandardAwarenessState {
|
|
33
|
+
user: {
|
|
34
|
+
id: string;
|
|
35
|
+
name: string;
|
|
36
|
+
color: string;
|
|
37
|
+
};
|
|
38
|
+
pointer?: {
|
|
39
|
+
x: number;
|
|
40
|
+
y: number;
|
|
41
|
+
};
|
|
42
|
+
selection?: unknown;
|
|
43
|
+
[k: string]: unknown;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Snapshot of a remote collaborator currently in awareness. Provided as a
|
|
47
|
+
* convenience for the SDK hook; extensions that need richer per-editor
|
|
48
|
+
* awareness fields should read `host.collaboration.awareness.getStates()`
|
|
49
|
+
* directly.
|
|
50
|
+
*/
|
|
51
|
+
export interface CollaboratorInfo {
|
|
52
|
+
user: {
|
|
53
|
+
id: string;
|
|
54
|
+
name: string;
|
|
55
|
+
color: string;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Available on `EditorHost` only when the document was opened collaboratively.
|
|
60
|
+
*
|
|
61
|
+
* When undefined, the extension should fall back to its standard
|
|
62
|
+
* `host.loadContent()` / `host.saveContent()` flow. When defined, the
|
|
63
|
+
* extension MUST drive its state through the Y.Doc (and the host will not
|
|
64
|
+
* call `host.onSaveRequested` for this document -- persistence is the
|
|
65
|
+
* server's encrypted blob store).
|
|
66
|
+
*/
|
|
67
|
+
export interface CollaborationContext {
|
|
68
|
+
/**
|
|
69
|
+
* The shared Y.Doc. Extensions create their own shared types within it
|
|
70
|
+
* (e.g. `yDoc.getArray('elements')`).
|
|
71
|
+
*/
|
|
72
|
+
readonly yDoc: YDoc;
|
|
73
|
+
/**
|
|
74
|
+
* `y-protocols/awareness` instance carrying remote presence. Extension
|
|
75
|
+
* bindings register their own local awareness fields here (cursor, tool,
|
|
76
|
+
* selection) and observe changes via `awareness.on('change', ...)`.
|
|
77
|
+
*
|
|
78
|
+
* The host wires this into the encrypted transport so awareness updates
|
|
79
|
+
* are throttled and end-to-end encrypted on the wire.
|
|
80
|
+
*/
|
|
81
|
+
readonly awareness: Awareness;
|
|
82
|
+
/** Identity used to drive `awareness` and presence display. */
|
|
83
|
+
readonly user: {
|
|
84
|
+
id: string;
|
|
85
|
+
name: string;
|
|
86
|
+
color: string;
|
|
87
|
+
};
|
|
88
|
+
/** Current connection status. */
|
|
89
|
+
getStatus(): CollaborationStatus;
|
|
90
|
+
/** Subscribe to status changes. Returns an unsubscribe fn. */
|
|
91
|
+
onStatusChange(cb: (status: CollaborationStatus) => void): () => void;
|
|
92
|
+
/**
|
|
93
|
+
* Returns the file content that should be used to seed the Y.Doc when this
|
|
94
|
+
* client is the first to open it. The host owns reading the bytes (from
|
|
95
|
+
* disk, from in-memory Share-to-Team payload, etc.) so extensions never
|
|
96
|
+
* reason about file paths in collab mode.
|
|
97
|
+
*/
|
|
98
|
+
loadInitialContent(): Promise<string | ArrayBuffer>;
|
|
99
|
+
}
|
|
16
100
|
/**
|
|
17
101
|
* Context that an editor pushes to the chat panel.
|
|
18
102
|
* When set, the chat UI shows an indicator and includes this context
|
|
@@ -106,6 +190,34 @@ export interface EditorHost {
|
|
|
106
190
|
* Set to true by the web share viewer's ReadOnlyEditorHost.
|
|
107
191
|
*/
|
|
108
192
|
readonly readOnly?: boolean;
|
|
193
|
+
/**
|
|
194
|
+
* Whether the editor is rendered inline inside another document
|
|
195
|
+
* (i.e. as an embed in a markdown doc rather than as a full tab).
|
|
196
|
+
*
|
|
197
|
+
* Extensions can use this to suppress persistent chrome that doesn't make
|
|
198
|
+
* sense inside another doc (e.g., side panels, sticky toolbars). The
|
|
199
|
+
* `readOnly` flag is a separate axis; an embed is typically both `embedded`
|
|
200
|
+
* and `readOnly`, but an extension that opts into writable embeds will see
|
|
201
|
+
* `embedded` true and `readOnly` false.
|
|
202
|
+
*
|
|
203
|
+
* Defaults to false (undefined treated as false for backwards compatibility).
|
|
204
|
+
*/
|
|
205
|
+
readonly embedded?: boolean;
|
|
206
|
+
/**
|
|
207
|
+
* Subscribe to changes to `readOnly`.
|
|
208
|
+
*
|
|
209
|
+
* Optional: hosts where `readOnly` never changes after construction
|
|
210
|
+
* (TabEditor, share viewer) omit this. Hosts that allow the user to
|
|
211
|
+
* flip between view and edit modes (the inline embed frame) implement
|
|
212
|
+
* it so extensions can react -- e.g. Excalidraw toggles
|
|
213
|
+
* `viewModeEnabled` so toolbars hide in view mode and reappear in
|
|
214
|
+
* edit mode without remounting the canvas.
|
|
215
|
+
*
|
|
216
|
+
* Extensions should read `host.readOnly` for the current value (it is
|
|
217
|
+
* a getter on reactive hosts) and subscribe here for subsequent flips.
|
|
218
|
+
* Returns an unsubscribe function.
|
|
219
|
+
*/
|
|
220
|
+
onReadOnlyChanged?(callback: (readOnly: boolean) => void): () => void;
|
|
109
221
|
/**
|
|
110
222
|
* Subscribe to theme changes.
|
|
111
223
|
* Called when the application theme changes.
|
|
@@ -273,6 +385,21 @@ export interface EditorHost {
|
|
|
273
385
|
* ```
|
|
274
386
|
*/
|
|
275
387
|
registerEditorAPI(api: unknown | null): void;
|
|
388
|
+
/**
|
|
389
|
+
* Present only when this document was opened collaboratively.
|
|
390
|
+
*
|
|
391
|
+
* When defined, the extension MUST drive its state through `collaboration.yDoc`
|
|
392
|
+
* and use the SDK's `useCollaborativeEditor` hook to manage the binding
|
|
393
|
+
* lifecycle. In collab mode, the host does not invoke `onSaveRequested` --
|
|
394
|
+
* persistence is the server's encrypted blob store.
|
|
395
|
+
*
|
|
396
|
+
* When undefined, the extension operates in local-only mode (load from
|
|
397
|
+
* disk via `loadContent()`, save via `saveContent()`).
|
|
398
|
+
*
|
|
399
|
+
* Extensions opt in by declaring `collaboration.supported: true` in their
|
|
400
|
+
* editor contribution manifest entry.
|
|
401
|
+
*/
|
|
402
|
+
readonly collaboration?: CollaborationContext;
|
|
276
403
|
/**
|
|
277
404
|
* Register menu items to appear in the editor's "..." actions menu.
|
|
278
405
|
* Items appear in a dedicated "Extension" section of the dropdown.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/types/editor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAMnD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IAEd,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,6CAA6C;IAC7C,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,wDAAwD;IACxD,eAAe,EAAE,MAAM,CAAC;IAExB,iDAAiD;IACjD,eAAe,EAAE,MAAM,CAAC;IAExB,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IAEd,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAEhB,oDAAoD;IACpD,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,UAAU;IAGzB,6CAA6C;IAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,8BAA8B;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,oBAAoB;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,0CAA0C;IAC1C,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE3B;;;;;;;;OAQG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/types/editor.ts"],"names":[],"mappings":"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"}
|
|
@@ -137,12 +137,26 @@ export interface ExtensionContributions {
|
|
|
137
137
|
nodes?: string[];
|
|
138
138
|
/** Markdown transformers for Lexical */
|
|
139
139
|
transformers?: string[];
|
|
140
|
+
/**
|
|
141
|
+
* `LexicalExtension` instances contributed by the extension (see
|
|
142
|
+
* `@lexical/extension`). Names refer to exports on the module's
|
|
143
|
+
* `lexicalExtensions` record. Each contributed extension is added to
|
|
144
|
+
* the host editor's extension graph at construction time; toggling an
|
|
145
|
+
* extension on or off rebuilds the editor instance.
|
|
146
|
+
*
|
|
147
|
+
* This is the supported path for shipping Lexical functionality from
|
|
148
|
+
* an extension. Use `defineExtension` from `lexical` to build the
|
|
149
|
+
* extension object.
|
|
150
|
+
*/
|
|
151
|
+
lexicalExtensions?: string[];
|
|
140
152
|
/** Components mounted by the host at app level */
|
|
141
153
|
hostComponents?: string[];
|
|
142
154
|
/** Extension configuration schema */
|
|
143
155
|
configuration?: ExtensionConfigurationContribution;
|
|
144
156
|
/** Claude Code plugin metadata */
|
|
145
157
|
claudePlugin?: ClaudePluginContribution;
|
|
158
|
+
/** Provider-neutral agent workflows exported to supported agent providers */
|
|
159
|
+
agentWorkflows?: AgentWorkflowsContribution;
|
|
146
160
|
/**
|
|
147
161
|
* Non-file-based panels (e.g., database browser, deployment dashboard).
|
|
148
162
|
* Panels integrate with the navigation gutter and can expose AI tools.
|
|
@@ -236,6 +250,21 @@ export interface ClaudePluginAgent {
|
|
|
236
250
|
/** Human-readable description */
|
|
237
251
|
description: string;
|
|
238
252
|
}
|
|
253
|
+
/**
|
|
254
|
+
* Provider-neutral agent workflow contribution.
|
|
255
|
+
* The directory should contain `commands/` and/or `skills/` subdirectories
|
|
256
|
+
* using the familiar Claude-compatible markdown formats.
|
|
257
|
+
*/
|
|
258
|
+
export interface AgentWorkflowsContribution {
|
|
259
|
+
/** Path to the workflow root relative to extension root */
|
|
260
|
+
path: string;
|
|
261
|
+
/** Human-readable name for settings and diagnostics UI */
|
|
262
|
+
displayName: string;
|
|
263
|
+
/** Description for settings and diagnostics UI */
|
|
264
|
+
description?: string;
|
|
265
|
+
/** Whether these workflows are enabled by default */
|
|
266
|
+
enabledByDefault?: boolean;
|
|
267
|
+
}
|
|
239
268
|
/**
|
|
240
269
|
* New file menu contribution.
|
|
241
270
|
*/
|
|
@@ -271,6 +300,40 @@ export interface CustomEditorContribution {
|
|
|
271
300
|
* Defaults to true when omitted for backward compatibility.
|
|
272
301
|
*/
|
|
273
302
|
showDocumentHeader?: boolean;
|
|
303
|
+
/**
|
|
304
|
+
* Whether this editor opts in to render inline in the agent transcript
|
|
305
|
+
* when an AI edits a file it handles. The host renders the editor in a
|
|
306
|
+
* read-only, click-to-activate frame. Defaults to false; extensions must
|
|
307
|
+
* explicitly enable so heavyweight editors don't auto-instantiate for
|
|
308
|
+
* every scrolled edit.
|
|
309
|
+
*/
|
|
310
|
+
supportsTranscriptEmbed?: boolean;
|
|
311
|
+
/**
|
|
312
|
+
* Preferred height in pixels for the inline transcript embed. Only
|
|
313
|
+
* applies when `supportsTranscriptEmbed` is true. Defaults to 360 when
|
|
314
|
+
* omitted.
|
|
315
|
+
*/
|
|
316
|
+
transcriptEmbedHeight?: number;
|
|
317
|
+
/**
|
|
318
|
+
* Declares whether this editor supports the host's collaborative
|
|
319
|
+
* (Share-to-Team / multi-client real-time) flow.
|
|
320
|
+
*
|
|
321
|
+
* When `supported: true`, the host treats files of this type as eligible
|
|
322
|
+
* for collaborative open: it stands up a `DocumentSyncProvider`,
|
|
323
|
+
* populates `host.collaboration` on the EditorHost, and the editor
|
|
324
|
+
* component is expected to call `useCollaborativeEditor` from
|
|
325
|
+
* `@nimbalyst/extension-sdk` to wire its binding.
|
|
326
|
+
*
|
|
327
|
+
* `awarenessFields` is advisory metadata used for docs / debugging --
|
|
328
|
+
* it does not gate runtime behaviour. List the extra awareness keys
|
|
329
|
+
* (beyond the standard `user`, `pointer`, `selection`) your editor
|
|
330
|
+
* publishes, e.g. `['selectedElementIds', 'tool']` for Excalidraw or
|
|
331
|
+
* `['editingNodeId']` for Mindmap.
|
|
332
|
+
*/
|
|
333
|
+
collaboration?: {
|
|
334
|
+
supported: boolean;
|
|
335
|
+
awarenessFields?: string[];
|
|
336
|
+
};
|
|
274
337
|
}
|
|
275
338
|
export interface DocumentHeaderContribution {
|
|
276
339
|
/** Unique identifier for this header (e.g., 'astro-frontmatter') */
|
|
@@ -359,6 +422,17 @@ export interface ExtensionModule {
|
|
|
359
422
|
nodes?: Record<string, unknown>;
|
|
360
423
|
/** Markdown transformers for Lexical */
|
|
361
424
|
transformers?: Record<string, unknown>;
|
|
425
|
+
/**
|
|
426
|
+
* `LexicalExtension` instances exported by the extension module. Keys
|
|
427
|
+
* match names listed in `contributions.lexicalExtensions`. Each value
|
|
428
|
+
* should be the return value of `defineExtension(...)` from `lexical`.
|
|
429
|
+
*
|
|
430
|
+
* The host treats the values as opaque (`unknown`) at this layer so the
|
|
431
|
+
* extension SDK does not have to pin a specific version of
|
|
432
|
+
* `@lexical/extension`. The host validates and consumes them through
|
|
433
|
+
* the editor's `LexicalExtensionComposer` pipeline.
|
|
434
|
+
*/
|
|
435
|
+
lexicalExtensions?: Record<string, unknown>;
|
|
362
436
|
/** Components that render inside the host editor */
|
|
363
437
|
hostComponents?: Record<string, ComponentType>;
|
|
364
438
|
/** Slash command handlers */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../src/types/extension.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../src/types/extension.ts"],"names":[],"mappings":"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"}
|
package/dist/types/theme.d.ts
CHANGED
|
@@ -14,9 +14,16 @@ export type ThemeColorKey = 'bg' | 'bg-secondary' | 'bg-tertiary' | 'bg-hover' |
|
|
|
14
14
|
* All colors are optional - missing colors will fall back to base theme.
|
|
15
15
|
*/
|
|
16
16
|
export type ThemeColors = Partial<Record<ThemeColorKey, string>>;
|
|
17
|
+
/**
|
|
18
|
+
* Where a theme entry returned by `theme:list` originated from.
|
|
19
|
+
*/
|
|
20
|
+
export type ThemeManifestOrigin = 'builtin' | 'user' | 'extension';
|
|
17
21
|
/**
|
|
18
22
|
* Theme manifest schema (theme.json).
|
|
19
23
|
* This is the schema for standalone theme packages.
|
|
24
|
+
*
|
|
25
|
+
* The same shape is also returned by the runtime `theme:list` IPC for
|
|
26
|
+
* extension-contributed themes, with `origin` and `contributedBy` populated.
|
|
20
27
|
*/
|
|
21
28
|
export interface ThemeManifest {
|
|
22
29
|
/** Unique theme identifier (e.g., 'solarized-dark') */
|
|
@@ -45,6 +52,16 @@ export interface ThemeManifest {
|
|
|
45
52
|
license?: string;
|
|
46
53
|
/** Homepage or repository URL */
|
|
47
54
|
homepage?: string;
|
|
55
|
+
/**
|
|
56
|
+
* Where this theme came from. Populated by the runtime when listing themes.
|
|
57
|
+
* Not part of the on-disk theme.json schema.
|
|
58
|
+
*/
|
|
59
|
+
origin?: ThemeManifestOrigin;
|
|
60
|
+
/**
|
|
61
|
+
* Extension ID that contributed this theme (only set when `origin === 'extension'`).
|
|
62
|
+
* Not part of the on-disk theme.json schema.
|
|
63
|
+
*/
|
|
64
|
+
contributedBy?: string;
|
|
48
65
|
}
|
|
49
66
|
/**
|
|
50
67
|
* Full theme object with metadata and resolved colors.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/types/theme.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,MAAM,MAAM,aAAa,GAErB,IAAI,GAAG,cAAc,GAAG,aAAa,GAAG,UAAU,GAAG,aAAa,GAAG,WAAW,GAEhF,MAAM,GAAG,YAAY,GAAG,YAAY,GAAG,eAAe,GAEtD,QAAQ,GAAG,cAAc,GAEzB,SAAS,GAAG,eAAe,GAE3B,MAAM,GAAG,YAAY,GAErB,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAE7C;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;AAEjE
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/types/theme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useCollaborativeEditor Hook
|
|
3
|
+
*
|
|
4
|
+
* Companion to `useEditorLifecycle` for collaborative documents. When the
|
|
5
|
+
* host opens a file with `host.collaboration` defined, this hook manages the
|
|
6
|
+
* binding lifecycle: wait for sync, optionally seed the Y.Doc from file
|
|
7
|
+
* content if this client is first, create the editor's binding, destroy on
|
|
8
|
+
* unmount.
|
|
9
|
+
*
|
|
10
|
+
* Extensions wire it like this:
|
|
11
|
+
*
|
|
12
|
+
* ```tsx
|
|
13
|
+
* function MyEditor({ host }: EditorHostProps) {
|
|
14
|
+
* const apiRef = useRef<MyImperativeAPI | null>(null);
|
|
15
|
+
*
|
|
16
|
+
* // Local-only path (unchanged for non-collab opens).
|
|
17
|
+
* const { isLoading } = useEditorLifecycle(host, { ... });
|
|
18
|
+
*
|
|
19
|
+
* // Collaborative path (no-op when host.collaboration is undefined).
|
|
20
|
+
* const { isCollaborative, status, collaborators } = useCollaborativeEditor(host, {
|
|
21
|
+
* createBinding: ({ yDoc, awareness, user }) => {
|
|
22
|
+
* const b = new MyBinding(yDoc, apiRef.current!, awareness, user);
|
|
23
|
+
* return { destroy: () => b.destroy() };
|
|
24
|
+
* },
|
|
25
|
+
* initializeFromContent: (yDoc, content) => seedYDocFromFile(yDoc, content),
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* return <MyLibrary ref={apiRef} ... />;
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* Bootstrap-race safety: if two clients both open an empty document, both
|
|
33
|
+
* will call `initializeFromContent` and their CRDT updates merge. To avoid
|
|
34
|
+
* duplicate elements your seeded shared types MUST use **content-derived
|
|
35
|
+
* stable IDs** (e.g. element `id` from the file), not random IDs. The same
|
|
36
|
+
* input yields the same Y.Doc state; merged duplicates collapse.
|
|
37
|
+
*/
|
|
38
|
+
import * as Y from 'yjs';
|
|
39
|
+
import type { CollaborationStatus, CollaboratorInfo, EditorHost } from './types/editor.js';
|
|
40
|
+
/**
|
|
41
|
+
* Origin tag used when the SDK wraps `initializeFromContent` in a Y.Doc
|
|
42
|
+
* transaction. Extension bindings can compare a transaction's origin
|
|
43
|
+
* against this to suppress their own change handlers during seeding
|
|
44
|
+
* (otherwise the binding would echo the seed back into local-edit state).
|
|
45
|
+
*
|
|
46
|
+
* ```ts
|
|
47
|
+
* yDoc.on('update', (update, origin) => {
|
|
48
|
+
* if (origin === COLLAB_INIT_ORIGIN) return;
|
|
49
|
+
* // ... apply remote change
|
|
50
|
+
* });
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export declare const COLLAB_INIT_ORIGIN: unique symbol;
|
|
54
|
+
export interface UseCollaborativeEditorConfig {
|
|
55
|
+
/**
|
|
56
|
+
* Create the yJS binding that wires editor state to the Y.Doc. Called
|
|
57
|
+
* once when collaboration is ready (sync done, seed applied if needed).
|
|
58
|
+
* Returns a destroy fn invoked on unmount or when the binding needs to
|
|
59
|
+
* be torn down.
|
|
60
|
+
*/
|
|
61
|
+
createBinding(ctx: {
|
|
62
|
+
yDoc: Y.Doc;
|
|
63
|
+
awareness: import('y-protocols/awareness').Awareness;
|
|
64
|
+
user: {
|
|
65
|
+
id: string;
|
|
66
|
+
name: string;
|
|
67
|
+
color: string;
|
|
68
|
+
};
|
|
69
|
+
}): {
|
|
70
|
+
destroy: () => void;
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Decide whether the Y.Doc still needs to be seeded from file content.
|
|
74
|
+
* Returning `true` means "this Y.Doc has no extension content yet -- call
|
|
75
|
+
* initializeFromContent". Default: `Y.encodeStateAsUpdate(yDoc).byteLength <= 2`,
|
|
76
|
+
* which matches a fully empty Y.Doc.
|
|
77
|
+
*
|
|
78
|
+
* Override when your shared types may exist as empty containers (e.g. you
|
|
79
|
+
* always call `yDoc.getMap('meta')` even on first open) and a length-2
|
|
80
|
+
* encoded state would still be considered "empty" by your check.
|
|
81
|
+
*/
|
|
82
|
+
isEmpty?(yDoc: Y.Doc): boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Populate the Y.Doc from raw file content when this client is the first
|
|
85
|
+
* to open the document. Called inside a `yDoc.transact(..., COLLAB_INIT_ORIGIN)`
|
|
86
|
+
* so bindings can ignore the seeding transaction.
|
|
87
|
+
*
|
|
88
|
+
* Bootstrap race: see file-level docs. Use content-derived stable IDs.
|
|
89
|
+
*/
|
|
90
|
+
initializeFromContent(yDoc: Y.Doc, content: string | ArrayBuffer): void;
|
|
91
|
+
}
|
|
92
|
+
export interface UseCollaborativeEditorResult {
|
|
93
|
+
/** True when `host.collaboration` is defined. */
|
|
94
|
+
isCollaborative: boolean;
|
|
95
|
+
/** Current connection status. Always `'disconnected'` when not collab. */
|
|
96
|
+
status: CollaborationStatus;
|
|
97
|
+
/**
|
|
98
|
+
* Remote collaborators keyed by their stable user id (not the y-protocols
|
|
99
|
+
* client id). Mirrors awareness; updated when remote presence changes.
|
|
100
|
+
*/
|
|
101
|
+
collaborators: Map<string, CollaboratorInfo>;
|
|
102
|
+
/**
|
|
103
|
+
* The binding handle once `createBinding` has run, or `null` until
|
|
104
|
+
* collaboration is ready / when not collab.
|
|
105
|
+
*/
|
|
106
|
+
binding: {
|
|
107
|
+
destroy: () => void;
|
|
108
|
+
} | null;
|
|
109
|
+
}
|
|
110
|
+
export declare function useCollaborativeEditor(host: EditorHost, config: UseCollaborativeEditorConfig): UseCollaborativeEditorResult;
|
|
111
|
+
//# sourceMappingURL=useCollaborativeEditor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCollaborativeEditor.d.ts","sourceRoot":"","sources":["../src/useCollaborativeEditor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAGH,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,KAAK,EAEV,mBAAmB,EACnB,gBAAgB,EAChB,UAAU,EACX,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kBAAkB,eAAkC,CAAC;AAElE,MAAM,WAAW,4BAA4B;IAC3C;;;;;OAKG;IACH,aAAa,CAAC,GAAG,EAAE;QACjB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC;QACZ,SAAS,EAAE,OAAO,uBAAuB,EAAE,SAAS,CAAC;QACrD,IAAI,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;KACnD,GAAG;QAAE,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IAE5B;;;;;;;;;OASG;IACH,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC;IAE/B;;;;;;OAMG;IACH,qBAAqB,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;CACzE;AAED,MAAM,WAAW,4BAA4B;IAC3C,iDAAiD;IACjD,eAAe,EAAE,OAAO,CAAC;IACzB,0EAA0E;IAC1E,MAAM,EAAE,mBAAmB,CAAC;IAC5B;;;OAGG;IACH,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC7C;;;OAGG;IACH,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CACzC;AAOD,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,4BAA4B,GACnC,4BAA4B,CAwH9B"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useCollaborativeEditor Hook
|
|
3
|
+
*
|
|
4
|
+
* Companion to `useEditorLifecycle` for collaborative documents. When the
|
|
5
|
+
* host opens a file with `host.collaboration` defined, this hook manages the
|
|
6
|
+
* binding lifecycle: wait for sync, optionally seed the Y.Doc from file
|
|
7
|
+
* content if this client is first, create the editor's binding, destroy on
|
|
8
|
+
* unmount.
|
|
9
|
+
*
|
|
10
|
+
* Extensions wire it like this:
|
|
11
|
+
*
|
|
12
|
+
* ```tsx
|
|
13
|
+
* function MyEditor({ host }: EditorHostProps) {
|
|
14
|
+
* const apiRef = useRef<MyImperativeAPI | null>(null);
|
|
15
|
+
*
|
|
16
|
+
* // Local-only path (unchanged for non-collab opens).
|
|
17
|
+
* const { isLoading } = useEditorLifecycle(host, { ... });
|
|
18
|
+
*
|
|
19
|
+
* // Collaborative path (no-op when host.collaboration is undefined).
|
|
20
|
+
* const { isCollaborative, status, collaborators } = useCollaborativeEditor(host, {
|
|
21
|
+
* createBinding: ({ yDoc, awareness, user }) => {
|
|
22
|
+
* const b = new MyBinding(yDoc, apiRef.current!, awareness, user);
|
|
23
|
+
* return { destroy: () => b.destroy() };
|
|
24
|
+
* },
|
|
25
|
+
* initializeFromContent: (yDoc, content) => seedYDocFromFile(yDoc, content),
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* return <MyLibrary ref={apiRef} ... />;
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* Bootstrap-race safety: if two clients both open an empty document, both
|
|
33
|
+
* will call `initializeFromContent` and their CRDT updates merge. To avoid
|
|
34
|
+
* duplicate elements your seeded shared types MUST use **content-derived
|
|
35
|
+
* stable IDs** (e.g. element `id` from the file), not random IDs. The same
|
|
36
|
+
* input yields the same Y.Doc state; merged duplicates collapse.
|
|
37
|
+
*/
|
|
38
|
+
import { useEffect, useRef, useState } from 'react';
|
|
39
|
+
import * as Y from 'yjs';
|
|
40
|
+
/**
|
|
41
|
+
* Origin tag used when the SDK wraps `initializeFromContent` in a Y.Doc
|
|
42
|
+
* transaction. Extension bindings can compare a transaction's origin
|
|
43
|
+
* against this to suppress their own change handlers during seeding
|
|
44
|
+
* (otherwise the binding would echo the seed back into local-edit state).
|
|
45
|
+
*
|
|
46
|
+
* ```ts
|
|
47
|
+
* yDoc.on('update', (update, origin) => {
|
|
48
|
+
* if (origin === COLLAB_INIT_ORIGIN) return;
|
|
49
|
+
* // ... apply remote change
|
|
50
|
+
* });
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export const COLLAB_INIT_ORIGIN = Symbol('nimbalyst:collab-init');
|
|
54
|
+
function defaultIsEmpty(yDoc) {
|
|
55
|
+
// A fully empty Y.Doc encodes to ~2 bytes (header only).
|
|
56
|
+
return Y.encodeStateAsUpdate(yDoc).byteLength <= 2;
|
|
57
|
+
}
|
|
58
|
+
export function useCollaborativeEditor(host, config) {
|
|
59
|
+
const isCollaborative = !!host.collaboration;
|
|
60
|
+
const [status, setStatus] = useState(host.collaboration?.getStatus() ?? 'disconnected');
|
|
61
|
+
const [collaborators, setCollaborators] = useState(() => new Map());
|
|
62
|
+
const [binding, setBinding] = useState(null);
|
|
63
|
+
// Keep config in a ref so the binding-creation effect doesn't tear down on
|
|
64
|
+
// every render. Hosts pass fresh config objects each render, but the
|
|
65
|
+
// intent is "wire once, keep until the host changes".
|
|
66
|
+
const configRef = useRef(config);
|
|
67
|
+
configRef.current = config;
|
|
68
|
+
// Status subscription.
|
|
69
|
+
useEffect(() => {
|
|
70
|
+
const collab = host.collaboration;
|
|
71
|
+
if (!collab) {
|
|
72
|
+
setStatus('disconnected');
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
setStatus(collab.getStatus());
|
|
76
|
+
return collab.onStatusChange(setStatus);
|
|
77
|
+
}, [host]);
|
|
78
|
+
// Awareness subscription -> collaborators map. The host populates the
|
|
79
|
+
// standard `user: { id, name, color }` field on every remote awareness
|
|
80
|
+
// state via the StandardAwarenessState contract.
|
|
81
|
+
useEffect(() => {
|
|
82
|
+
const collab = host.collaboration;
|
|
83
|
+
if (!collab) {
|
|
84
|
+
setCollaborators(new Map());
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const rebuild = () => {
|
|
88
|
+
const next = new Map();
|
|
89
|
+
const states = collab.awareness.getStates();
|
|
90
|
+
for (const [clientId, state] of states) {
|
|
91
|
+
// Don't include ourselves.
|
|
92
|
+
if (clientId === collab.awareness.clientID)
|
|
93
|
+
continue;
|
|
94
|
+
const user = state.user;
|
|
95
|
+
if (!user || !user.id)
|
|
96
|
+
continue;
|
|
97
|
+
next.set(user.id, { user });
|
|
98
|
+
}
|
|
99
|
+
setCollaborators(next);
|
|
100
|
+
};
|
|
101
|
+
rebuild();
|
|
102
|
+
collab.awareness.on('change', rebuild);
|
|
103
|
+
return () => collab.awareness.off('change', rebuild);
|
|
104
|
+
}, [host]);
|
|
105
|
+
// Binding lifecycle.
|
|
106
|
+
useEffect(() => {
|
|
107
|
+
const collab = host.collaboration;
|
|
108
|
+
if (!collab)
|
|
109
|
+
return;
|
|
110
|
+
let cancelled = false;
|
|
111
|
+
let handle = null;
|
|
112
|
+
const tryStart = async () => {
|
|
113
|
+
if (cancelled || handle)
|
|
114
|
+
return;
|
|
115
|
+
if (collab.getStatus() !== 'connected')
|
|
116
|
+
return;
|
|
117
|
+
const cfg = configRef.current;
|
|
118
|
+
const isEmptyFn = cfg.isEmpty ?? defaultIsEmpty;
|
|
119
|
+
if (isEmptyFn(collab.yDoc)) {
|
|
120
|
+
try {
|
|
121
|
+
const content = await collab.loadInitialContent();
|
|
122
|
+
if (cancelled)
|
|
123
|
+
return;
|
|
124
|
+
// Re-check emptiness in case another client seeded while we were
|
|
125
|
+
// awaiting -- they would have raced through the WebSocket and
|
|
126
|
+
// applied their update during our await gap. Avoid double-seeding
|
|
127
|
+
// in that case; CRDT merge would otherwise insert duplicate
|
|
128
|
+
// content unless the seed is fully deterministic.
|
|
129
|
+
if (isEmptyFn(collab.yDoc)) {
|
|
130
|
+
collab.yDoc.transact(() => {
|
|
131
|
+
cfg.initializeFromContent(collab.yDoc, content);
|
|
132
|
+
}, COLLAB_INIT_ORIGIN);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
console.error('[useCollaborativeEditor] Failed to load/seed initial content:', err);
|
|
137
|
+
// Continue with bind -- the doc may still be usable once another
|
|
138
|
+
// client seeds it.
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (cancelled)
|
|
142
|
+
return;
|
|
143
|
+
handle = cfg.createBinding({
|
|
144
|
+
yDoc: collab.yDoc,
|
|
145
|
+
awareness: collab.awareness,
|
|
146
|
+
user: collab.user,
|
|
147
|
+
});
|
|
148
|
+
setBinding(handle);
|
|
149
|
+
};
|
|
150
|
+
void tryStart();
|
|
151
|
+
const unsubscribe = collab.onStatusChange(() => {
|
|
152
|
+
void tryStart();
|
|
153
|
+
});
|
|
154
|
+
return () => {
|
|
155
|
+
cancelled = true;
|
|
156
|
+
unsubscribe();
|
|
157
|
+
if (handle) {
|
|
158
|
+
handle.destroy();
|
|
159
|
+
handle = null;
|
|
160
|
+
}
|
|
161
|
+
setBinding(null);
|
|
162
|
+
};
|
|
163
|
+
}, [host]);
|
|
164
|
+
return { isCollaborative, status, collaborators, binding };
|
|
165
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEditorLifecycle.d.ts","sourceRoot":"","sources":["../src/useEditorLifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAMhE,MAAM,WAAW,yBAAyB,CAAC,CAAC;IAC1C;;;;;OAKG;IACH,YAAY,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,CAAC;IAEnC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC,CAAC;IAE5B;;;OAGG;IACH,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC,CAAC;IAE3B;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,MAAM,CAAC;IAEnC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAEtB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,CAAC;IAExC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7B;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAE/C;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,iCAAiC;IACjC,QAAQ,EAAE,CAAC,CAAC;IAEZ,qDAAqD;IACrD,QAAQ,EAAE,CAAC,CAAC;IAEZ,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IAEd,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAElB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,IAAI,CAAC;IAEnB,mDAAmD;IACnD,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB,CAAC,CAAC;IACzC;;;OAGG;IACH,SAAS,EAAE,MAAM,IAAI,CAAC;IAEtB,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;IAEnB,wCAAwC;IACxC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAEpB,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAC;IAEd,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAE/B,iFAAiF;IACjF,gBAAgB,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IAE3C,+CAA+C;IAC/C,YAAY,EAAE,OAAO,CAAC;CACvB;AAMD,wBAAgB,kBAAkB,CAAC,CAAC,GAAG,MAAM,EAC3C,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,yBAAyB,CAAC,CAAC,CAAC,GACpC,wBAAwB,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"useEditorLifecycle.d.ts","sourceRoot":"","sources":["../src/useEditorLifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAMhE,MAAM,WAAW,yBAAyB,CAAC,CAAC;IAC1C;;;;;OAKG;IACH,YAAY,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,CAAC;IAEnC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC,CAAC;IAE5B;;;OAGG;IACH,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC,CAAC;IAE3B;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,MAAM,CAAC;IAEnC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAEtB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,CAAC;IAExC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7B;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAE/C;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,iCAAiC;IACjC,QAAQ,EAAE,CAAC,CAAC;IAEZ,qDAAqD;IACrD,QAAQ,EAAE,CAAC,CAAC;IAEZ,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IAEd,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAElB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,IAAI,CAAC;IAEnB,mDAAmD;IACnD,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB,CAAC,CAAC;IACzC;;;OAGG;IACH,SAAS,EAAE,MAAM,IAAI,CAAC;IAEtB,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;IAEnB,wCAAwC;IACxC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAEpB,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAC;IAEd,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAE/B,iFAAiF;IACjF,gBAAgB,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IAE3C,+CAA+C;IAC/C,YAAY,EAAE,OAAO,CAAC;CACvB;AAMD,wBAAgB,kBAAkB,CAAC,CAAC,GAAG,MAAM,EAC3C,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,yBAAyB,CAAC,CAAC,CAAC,GACpC,wBAAwB,CAAC,CAAC,CAAC,CAiS7B"}
|
|
@@ -81,8 +81,6 @@ export function useEditorLifecycle(host, options) {
|
|
|
81
81
|
optionsRef.current = options;
|
|
82
82
|
// Echo detection: stores the last serialized string we saved
|
|
83
83
|
const lastSavedContentRef = useRef('');
|
|
84
|
-
// Prevent double-loading
|
|
85
|
-
const loadedRef = useRef(false);
|
|
86
84
|
// Track dirty state in a ref too (for use in callbacks without stale closure)
|
|
87
85
|
const isDirtyRef = useRef(false);
|
|
88
86
|
// ---- Parse / Serialize helpers ----
|
|
@@ -118,10 +116,16 @@ export function useEditorLifecycle(host, options) {
|
|
|
118
116
|
}
|
|
119
117
|
}, [host]);
|
|
120
118
|
// ---- Initial load ----
|
|
119
|
+
// Note: do NOT use a ref-based "already loaded" guard here. React 18
|
|
120
|
+
// StrictMode in dev runs effects setup -> cleanup -> setup. A persistent
|
|
121
|
+
// ref makes the second setup early-return, while the first run's `mounted`
|
|
122
|
+
// closure has already been flipped to false by cleanup, so
|
|
123
|
+
// `setIsLoading(false)` is never called and the editor is stuck on the
|
|
124
|
+
// initial Loading state forever. The dep array (`[host, parseContent]`)
|
|
125
|
+
// already prevents re-loads when nothing has changed; the strict-mode
|
|
126
|
+
// double load is idempotent (same IPC + applyContent) and only happens in
|
|
127
|
+
// dev.
|
|
121
128
|
useEffect(() => {
|
|
122
|
-
if (loadedRef.current)
|
|
123
|
-
return;
|
|
124
|
-
loadedRef.current = true;
|
|
125
129
|
let mounted = true;
|
|
126
130
|
const doLoad = async () => {
|
|
127
131
|
try {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nimbalyst/extension-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "SDK for building Nimbalyst extensions",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -55,7 +55,9 @@
|
|
|
55
55
|
"react": "^18.2.0 || ^19.0.0",
|
|
56
56
|
"vite": "^7.1.12",
|
|
57
57
|
"@vitejs/plugin-react": "^5.1.2",
|
|
58
|
-
"tailwindcss": "^3.4.0"
|
|
58
|
+
"tailwindcss": "^3.4.0",
|
|
59
|
+
"yjs": ">=13.5.42",
|
|
60
|
+
"y-protocols": "^1.0.5"
|
|
59
61
|
},
|
|
60
62
|
"peerDependenciesMeta": {
|
|
61
63
|
"react": {
|
|
@@ -69,6 +71,12 @@
|
|
|
69
71
|
},
|
|
70
72
|
"tailwindcss": {
|
|
71
73
|
"optional": true
|
|
74
|
+
},
|
|
75
|
+
"yjs": {
|
|
76
|
+
"optional": true
|
|
77
|
+
},
|
|
78
|
+
"y-protocols": {
|
|
79
|
+
"optional": true
|
|
72
80
|
}
|
|
73
81
|
},
|
|
74
82
|
"devDependencies": {
|
|
@@ -77,7 +85,9 @@
|
|
|
77
85
|
"react": "^18.2.0",
|
|
78
86
|
"typescript": "^5.0.0",
|
|
79
87
|
"vite": "^7.1.12",
|
|
80
|
-
"@vitejs/plugin-react": "^5.1.2"
|
|
88
|
+
"@vitejs/plugin-react": "^5.1.2",
|
|
89
|
+
"yjs": ">=13.5.42",
|
|
90
|
+
"y-protocols": "^1.0.5"
|
|
81
91
|
},
|
|
82
92
|
"keywords": [
|
|
83
93
|
"nimbalyst",
|