@editability/editor-lexical 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.
@@ -0,0 +1,6 @@
1
+ export type MountOptions = {
2
+ apiBase: string;
3
+ googleClientId: string;
4
+ };
5
+ export { mount } from "./mount.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { mount } from "./mount.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { type LexicalEditor } from "lexical";
2
+ import type { EditabilityAst } from "@editability/shared";
3
+ export type EditorMode = "inline" | "block";
4
+ export type ActiveEditor = {
5
+ editor: LexicalEditor;
6
+ destroy: () => void;
7
+ setBold: () => void;
8
+ setItalic: () => void;
9
+ setLink: (url: string | null) => void;
10
+ captureSelection: () => void;
11
+ undo: () => void;
12
+ redo: () => void;
13
+ getAst: () => EditabilityAst;
14
+ };
15
+ export declare function createActiveEditor(params: {
16
+ element: HTMLElement;
17
+ mode: EditorMode;
18
+ initialHtml: string;
19
+ onUpdate: (ast: EditabilityAst) => void;
20
+ }): ActiveEditor;
21
+ //# sourceMappingURL=editor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/lexical/editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAsBL,KAAK,aAAa,EACnB,MAAM,SAAS,CAAC;AAKjB,OAAO,KAAK,EAAE,cAAc,EAAyB,MAAM,qBAAqB,CAAC;AAEjF,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE5C,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACtC,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,EAAE,MAAM,cAAc,CAAC;CAC9B,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IACzC,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,CAAC;CACzC,GAAG,YAAY,CAkHf"}
@@ -0,0 +1,173 @@
1
+ import { $getRoot, $createParagraphNode, $getSelection, $isElementNode, $isLineBreakNode, $isParagraphNode, $isRangeSelection, $isTextNode, $setSelection, COMMAND_PRIORITY_HIGH, createEditor, FORMAT_TEXT_COMMAND, INSERT_LINE_BREAK_COMMAND, INSERT_PARAGRAPH_COMMAND, KEY_ENTER_COMMAND, UNDO_COMMAND, REDO_COMMAND, } from "lexical";
2
+ import { createEmptyHistoryState, registerHistory } from "@lexical/history";
3
+ import { $generateNodesFromDOM } from "@lexical/html";
4
+ import { LinkNode, TOGGLE_LINK_COMMAND } from "@lexical/link";
5
+ import { registerRichText } from "@lexical/rich-text";
6
+ export function createActiveEditor(params) {
7
+ const { element, mode, initialHtml, onUpdate } = params;
8
+ const editor = createEditor({
9
+ namespace: "editability",
10
+ nodes: [LinkNode],
11
+ onError: (error) => {
12
+ throw error;
13
+ },
14
+ });
15
+ const unregisters = [];
16
+ let storedSelection = null;
17
+ unregisters.push(registerHistory(editor, createEmptyHistoryState(), 300));
18
+ unregisters.push(registerRichText(editor));
19
+ if (mode === "inline") {
20
+ unregisters.push(editor.registerCommand(KEY_ENTER_COMMAND, () => {
21
+ editor.dispatchCommand(INSERT_LINE_BREAK_COMMAND, false);
22
+ return true;
23
+ }, COMMAND_PRIORITY_HIGH));
24
+ unregisters.push(editor.registerCommand(INSERT_PARAGRAPH_COMMAND, () => {
25
+ editor.dispatchCommand(INSERT_LINE_BREAK_COMMAND, false);
26
+ return true;
27
+ }, COMMAND_PRIORITY_HIGH));
28
+ }
29
+ element.contentEditable = "true";
30
+ element.setAttribute("data-editability-active", "true");
31
+ element.classList.add("editability-active");
32
+ editor.setRootElement(element);
33
+ editor.update(() => {
34
+ const parser = new DOMParser();
35
+ const dom = parser.parseFromString(initialHtml, "text/html");
36
+ const nodes = $generateNodesFromDOM(editor, dom);
37
+ const root = $getRoot();
38
+ root.clear();
39
+ if (mode === "inline") {
40
+ const paragraph = $createParagraphNode();
41
+ paragraph.append(...nodes);
42
+ root.append(paragraph);
43
+ }
44
+ else if (nodes.length === 0) {
45
+ root.append($createParagraphNode());
46
+ }
47
+ else if (nodes.every($isElementNode)) {
48
+ root.append(...nodes);
49
+ }
50
+ else {
51
+ const paragraph = $createParagraphNode();
52
+ paragraph.append(...nodes);
53
+ root.append(paragraph);
54
+ }
55
+ normalizeRoot(mode, root);
56
+ });
57
+ unregisters.push(editor.registerUpdateListener(({ editorState }) => {
58
+ const ast = exportAst(editorState, mode);
59
+ onUpdate(ast);
60
+ }));
61
+ return {
62
+ editor,
63
+ destroy: () => {
64
+ unregisters.forEach((fn) => fn());
65
+ editor.setRootElement(null);
66
+ element.contentEditable = "false";
67
+ element.removeAttribute("data-editability-active");
68
+ element.classList.remove("editability-active");
69
+ },
70
+ setBold: () => {
71
+ editor.dispatchCommand(FORMAT_TEXT_COMMAND, "bold");
72
+ },
73
+ setItalic: () => {
74
+ editor.dispatchCommand(FORMAT_TEXT_COMMAND, "italic");
75
+ },
76
+ setLink: (url) => {
77
+ if (storedSelection) {
78
+ editor.update(() => {
79
+ if (storedSelection && $isRangeSelection(storedSelection)) {
80
+ $setSelection(storedSelection);
81
+ }
82
+ });
83
+ storedSelection = null;
84
+ }
85
+ editor.dispatchCommand(TOGGLE_LINK_COMMAND, url);
86
+ },
87
+ captureSelection: () => {
88
+ editor.getEditorState().read(() => {
89
+ const selection = $getSelection();
90
+ storedSelection = selection && $isRangeSelection(selection) ? selection.clone() : null;
91
+ });
92
+ },
93
+ undo: () => {
94
+ editor.dispatchCommand(UNDO_COMMAND, undefined);
95
+ },
96
+ redo: () => {
97
+ editor.dispatchCommand(REDO_COMMAND, undefined);
98
+ },
99
+ getAst: () => exportAst(editor.getEditorState(), mode),
100
+ };
101
+ }
102
+ function normalizeRoot(mode, root) {
103
+ if (mode === "block") {
104
+ if (root.getChildrenSize() === 0) {
105
+ root.append($createParagraphNode());
106
+ return;
107
+ }
108
+ return;
109
+ }
110
+ // inline mode: unwrap paragraph nodes
111
+ const first = root.getFirstChild();
112
+ if (first && $isParagraphNode(first)) {
113
+ return;
114
+ }
115
+ const paragraph = $createParagraphNode();
116
+ const children = root.getChildren();
117
+ for (const child of children) {
118
+ paragraph.append(child);
119
+ }
120
+ root.clear();
121
+ root.append(paragraph);
122
+ }
123
+ function exportAst(state, mode) {
124
+ return state.read(() => {
125
+ const root = $getRoot();
126
+ if (mode === "block") {
127
+ const blocks = [];
128
+ for (const child of root.getChildren()) {
129
+ if ($isParagraphNode(child)) {
130
+ blocks.push({ type: "paragraph", children: exportInline(child.getChildren()) });
131
+ }
132
+ }
133
+ return { mode: "block", nodes: blocks };
134
+ }
135
+ const first = root.getFirstChild();
136
+ if (first && $isParagraphNode(first)) {
137
+ return { mode: "inline", nodes: exportInline(first.getChildren()) };
138
+ }
139
+ return { mode: "inline", nodes: exportInline(root.getChildren()) };
140
+ });
141
+ }
142
+ function exportInline(nodes) {
143
+ const output = [];
144
+ for (const node of nodes) {
145
+ if ($isTextNode(node)) {
146
+ const text = node.getTextContent();
147
+ if (!text) {
148
+ continue;
149
+ }
150
+ output.push({
151
+ type: "text",
152
+ text,
153
+ bold: node.hasFormat("bold") || undefined,
154
+ italic: node.hasFormat("italic") || undefined,
155
+ });
156
+ }
157
+ else if ($isLineBreakNode(node)) {
158
+ output.push({ type: "linebreak" });
159
+ }
160
+ else if (node instanceof LinkNode) {
161
+ output.push({
162
+ type: "link",
163
+ href: node.getURL(),
164
+ children: exportInline(node.getChildren()),
165
+ });
166
+ }
167
+ else if ($isElementNode(node)) {
168
+ output.push(...exportInline(node.getChildren()));
169
+ }
170
+ }
171
+ return output;
172
+ }
173
+ //# sourceMappingURL=editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor.js","sourceRoot":"","sources":["../../src/lexical/editor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { MountOptions } from "./index.js";
2
+ export declare function mount(options: MountOptions): void;
3
+ //# sourceMappingURL=mount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../src/mount.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAK/C,wBAAgB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAUjD"}
package/dist/mount.js ADDED
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createRoot } from "react-dom/client";
3
+ import { OverlayApp } from "./overlay.js";
4
+ let root = null;
5
+ export function mount(options) {
6
+ if (root) {
7
+ return;
8
+ }
9
+ const container = document.createElement("div");
10
+ container.id = "editability-root";
11
+ document.body.appendChild(container);
12
+ root = createRoot(container);
13
+ root.render(_jsx(OverlayApp, { apiBase: options.apiBase, googleClientId: options.googleClientId }));
14
+ }
15
+ //# sourceMappingURL=mount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mount.js","sourceRoot":"","sources":["../src/mount.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,IAAI,IAAI,GAAyC,IAAI,CAAC;AAEtD,MAAM,UAAU,KAAK,CAAC,OAAqB;IACzC,IAAI,IAAI,EAAE,CAAC;QACT,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAChD,SAAS,CAAC,EAAE,GAAG,kBAAkB,CAAC;IAClC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAC7B,IAAI,CAAC,MAAM,CAAC,KAAC,UAAU,IAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,GAAI,CAAC,CAAC;AAChG,CAAC"}
@@ -0,0 +1,28 @@
1
+ import React from "react";
2
+ type OverlayAppProps = {
3
+ apiBase: string;
4
+ googleClientId: string;
5
+ };
6
+ export declare function OverlayApp({ apiBase, googleClientId }: OverlayAppProps): React.ReactElement;
7
+ declare global {
8
+ interface Window {
9
+ google?: {
10
+ accounts?: {
11
+ id?: {
12
+ initialize: (options: {
13
+ client_id: string;
14
+ callback: (response: {
15
+ credential: string;
16
+ }) => void;
17
+ }) => void;
18
+ renderButton: (container: HTMLElement, options: {
19
+ theme: string;
20
+ size: string;
21
+ }) => void;
22
+ };
23
+ };
24
+ };
25
+ }
26
+ }
27
+ export {};
28
+ //# sourceMappingURL=overlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../src/overlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AA8BpE,KAAK,eAAe,GAAG;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CAmT3F;AAwiBD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,MAAM,CAAC,EAAE;YACP,QAAQ,CAAC,EAAE;gBACT,EAAE,CAAC,EAAE;oBACH,UAAU,EAAE,CAAC,OAAO,EAAE;wBAAE,SAAS,EAAE,MAAM,CAAC;wBAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;4BAAE,UAAU,EAAE,MAAM,CAAA;yBAAE,KAAK,IAAI,CAAA;qBAAE,KAAK,IAAI,CAAC;oBAC3G,YAAY,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE;wBAAE,KAAK,EAAE,MAAM,CAAC;wBAAC,IAAI,EAAE,MAAM,CAAA;qBAAE,KAAK,IAAI,CAAC;iBAC1F,CAAC;aACH,CAAC;SACH,CAAC;KACH;CACF"}
@@ -0,0 +1,664 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useRef, useState } from "react";
3
+ import { diffWords, fnv1a64, normalizeTextContent, sanitizeHref } from "@editability/shared";
4
+ import { createActiveEditor } from "./lexical/editor.js";
5
+ const DRAFT_KEY = "editability:draft:v1";
6
+ export function OverlayApp({ apiBase, googleClientId }) {
7
+ const [user, setUser] = useState(null);
8
+ const [loading, setLoading] = useState(true);
9
+ const [draft, setDraft] = useState(() => loadDraft());
10
+ const [activeId, setActiveId] = useState(null);
11
+ const [activeEditor, setActiveEditor] = useState(null);
12
+ const [publishOpen, setPublishOpen] = useState(false);
13
+ const [message, setMessage] = useState("");
14
+ const [error, setError] = useState(null);
15
+ const observerRef = useRef(null);
16
+ const applyingRef = useRef(false);
17
+ const applyScheduledRef = useRef(null);
18
+ const activeEditorRef = useRef(null);
19
+ const activeElementRef = useRef(null);
20
+ const activeIdRef = useRef(null);
21
+ const activeSnapshotRef = useRef(null);
22
+ const activeChangeRef = useRef(null);
23
+ const draftRef = useRef(draft);
24
+ const changes = useMemo(() => Object.values(draft.changes), [draft]);
25
+ useEffect(() => {
26
+ ensureStyles();
27
+ void fetchMe(apiBase)
28
+ .then(setUser)
29
+ .catch(() => setUser(null))
30
+ .finally(() => setLoading(false));
31
+ }, [apiBase]);
32
+ useEffect(() => {
33
+ draftRef.current = draft;
34
+ if (user && !activeEditor) {
35
+ scheduleApplyDrafts(draft, applyScheduledRef, observerRef, applyingRef);
36
+ }
37
+ }, [draft, user, activeEditor]);
38
+ useEffect(() => {
39
+ activeEditorRef.current = activeEditor;
40
+ }, [activeEditor]);
41
+ useEffect(() => {
42
+ activeIdRef.current = activeId;
43
+ }, [activeId]);
44
+ useEffect(() => {
45
+ document.body.classList.toggle("editability-authenticated", Boolean(user));
46
+ return () => {
47
+ document.body.classList.remove("editability-authenticated");
48
+ };
49
+ }, [user]);
50
+ useEffect(() => {
51
+ if (!user) {
52
+ return;
53
+ }
54
+ const observer = new MutationObserver((mutations) => {
55
+ if (applyingRef.current) {
56
+ return;
57
+ }
58
+ if (activeEditorRef.current) {
59
+ if (activeElementRef.current && !document.body.contains(activeElementRef.current)) {
60
+ destroyActiveEditor("removed", true, draftRef, activeEditorRef, activeElementRef, activeIdRef, activeSnapshotRef, activeChangeRef, setDraft, setActiveEditor, setActiveId, observerRef, applyingRef);
61
+ }
62
+ return;
63
+ }
64
+ if (mutations.length > 0 && mutations.every((mutation) => isOverlayMutation(mutation.target))) {
65
+ return;
66
+ }
67
+ scheduleApplyDrafts(draftRef.current, applyScheduledRef, observerRef, applyingRef);
68
+ });
69
+ observer.observe(document.body, { childList: true, subtree: true });
70
+ observerRef.current = observer;
71
+ return () => observer.disconnect();
72
+ }, [user]);
73
+ useEffect(() => {
74
+ if (!user) {
75
+ return;
76
+ }
77
+ const handler = (event) => {
78
+ const target = event.target;
79
+ if (!target) {
80
+ return;
81
+ }
82
+ const block = target.closest("[data-editability-id]");
83
+ if (!block) {
84
+ return;
85
+ }
86
+ event.preventDefault();
87
+ event.stopPropagation();
88
+ const id = block.dataset.editabilityId;
89
+ if (!id) {
90
+ return;
91
+ }
92
+ if (activeId === id) {
93
+ return;
94
+ }
95
+ if (activeEditorRef.current) {
96
+ destroyActiveEditor("switch", true, draftRef, activeEditorRef, activeElementRef, activeIdRef, activeSnapshotRef, activeChangeRef, setDraft, setActiveEditor, setActiveId, observerRef, applyingRef);
97
+ }
98
+ const existing = draftRef.current.changes[id];
99
+ activeSnapshotRef.current = { id, html: existing ? existing.originalHtml : block.innerHTML };
100
+ const { editor, change } = activateBlock(block, id, draftRef.current, setDraft, setActiveId, setActiveEditor);
101
+ activeEditorRef.current = editor;
102
+ activeElementRef.current = block;
103
+ activeChangeRef.current = change;
104
+ };
105
+ const linkGuard = (event) => {
106
+ const target = event.target;
107
+ if (!target) {
108
+ return;
109
+ }
110
+ const link = target.closest("a");
111
+ if (!link) {
112
+ return;
113
+ }
114
+ const editable = target.closest("[data-editability-id]");
115
+ if (editable) {
116
+ event.preventDefault();
117
+ }
118
+ };
119
+ document.addEventListener("click", handler, true);
120
+ document.addEventListener("click", linkGuard, true);
121
+ return () => {
122
+ document.removeEventListener("click", handler, true);
123
+ document.removeEventListener("click", linkGuard, true);
124
+ };
125
+ }, [activeId, activeEditor, draft, user]);
126
+ useEffect(() => {
127
+ return () => {
128
+ if (activeEditorRef.current) {
129
+ destroyActiveEditor("unmount", false, draftRef, activeEditorRef, activeElementRef, activeIdRef, activeSnapshotRef, activeChangeRef, setDraft, setActiveEditor, setActiveId, observerRef, applyingRef);
130
+ }
131
+ };
132
+ }, []);
133
+ const changeCount = changes.length;
134
+ const handleDone = () => {
135
+ if (activeEditor) {
136
+ destroyActiveEditor("done", true, draftRef, activeEditorRef, activeElementRef, activeIdRef, activeSnapshotRef, activeChangeRef, setDraft, setActiveEditor, setActiveId, observerRef, applyingRef);
137
+ }
138
+ };
139
+ const handlePublish = async () => {
140
+ setError(null);
141
+ try {
142
+ const attemptPublish = async (force) => {
143
+ const payload = {
144
+ message: message.trim() || undefined,
145
+ changes: changes.map((change) => ({
146
+ id: change.id,
147
+ ast: change.ast,
148
+ fingerprint: change.fingerprint,
149
+ })),
150
+ force,
151
+ };
152
+ const response = await fetch(`${apiBase}/publish`, {
153
+ method: "POST",
154
+ headers: { "Content-Type": "application/json" },
155
+ body: JSON.stringify(payload),
156
+ });
157
+ if (!response.ok) {
158
+ const text = await response.text();
159
+ throw new Error(text || "Publish failed.");
160
+ }
161
+ return (await response.json());
162
+ };
163
+ let result;
164
+ try {
165
+ result = await attemptPublish();
166
+ }
167
+ catch (err) {
168
+ const messageText = err instanceof Error ? err.message : "";
169
+ if (messageText.includes("changed since last edit")) {
170
+ const confirmed = confirm("This content changed since you opened the editor. Publish anyway?");
171
+ if (confirmed) {
172
+ result = await attemptPublish(true);
173
+ }
174
+ else {
175
+ return;
176
+ }
177
+ }
178
+ else {
179
+ throw err;
180
+ }
181
+ }
182
+ clearDraft();
183
+ setDraft(loadDraft());
184
+ setPublishOpen(false);
185
+ setMessage("");
186
+ alert(`Published! Commit: ${result.commitSha}`);
187
+ window.location.reload();
188
+ }
189
+ catch (err) {
190
+ setError(err instanceof Error ? err.message : "Publish failed.");
191
+ }
192
+ };
193
+ const handleDiscard = () => {
194
+ if (!confirm("Discard all local edits?")) {
195
+ return;
196
+ }
197
+ clearDraft();
198
+ setDraft(loadDraft());
199
+ window.location.reload();
200
+ };
201
+ const handleLogout = async () => {
202
+ await fetch(`${apiBase}/logout`, { method: "POST" });
203
+ setUser(null);
204
+ };
205
+ const handleExit = () => {
206
+ document.cookie = "editability_mode=; Path=/; Max-Age=0";
207
+ localStorage.removeItem("editability:mode");
208
+ window.location.reload();
209
+ };
210
+ if (loading) {
211
+ return (_jsx("div", { className: "editability-overlay", children: _jsx("div", { className: "editability-login", children: _jsx("p", { children: "Checking editor access\u2026" }) }) }));
212
+ }
213
+ if (!user) {
214
+ return (_jsx("div", { className: "editability-overlay", children: _jsxs("div", { className: "editability-login", children: [_jsx("h2", { children: "Sign in to edit" }), _jsx("p", { children: "Only allowlisted editors can enter edit mode." }), _jsx(LoginPanel, { apiBase: apiBase, googleClientId: googleClientId, onLogin: setUser, loading: false }), _jsx("button", { className: "editability-btn", onClick: handleExit, children: "Exit" })] }) }));
215
+ }
216
+ return (_jsxs("div", { className: "editability-overlay", children: [_jsxs("div", { className: "editability-bar", children: [_jsxs("div", { className: "editability-left", children: [_jsx("span", { className: "editability-pill", children: "Editability" }), activeId ? _jsx("span", { className: "editability-status", children: "Editing" }) : _jsx("span", { className: "editability-status", children: "Select text" })] }), _jsxs("div", { className: "editability-center", children: [_jsx("button", { className: "editability-btn", onClick: () => activeEditor?.undo(), disabled: !activeEditor, children: "Undo" }), _jsx("button", { className: "editability-btn", onClick: () => activeEditor?.redo(), disabled: !activeEditor, children: "Redo" }), _jsx("button", { className: "editability-btn", onClick: () => activeEditor?.setBold(), disabled: !activeEditor, children: "Bold" }), _jsx("button", { className: "editability-btn", onClick: () => activeEditor?.setItalic(), disabled: !activeEditor, children: "Italic" }), _jsx("button", { className: "editability-btn", onClick: () => {
217
+ if (!activeEditor)
218
+ return;
219
+ activeEditor.captureSelection();
220
+ const url = prompt("Link URL (leave blank to remove):");
221
+ if (url === null)
222
+ return;
223
+ const normalized = url.trim();
224
+ if (!normalized) {
225
+ activeEditor.setLink(null);
226
+ return;
227
+ }
228
+ const sanitized = sanitizeHref(normalized);
229
+ if (!sanitized) {
230
+ alert("Invalid link.");
231
+ return;
232
+ }
233
+ activeEditor.setLink(sanitized.href);
234
+ }, disabled: !activeEditor, children: "Link" }), _jsx("button", { className: "editability-btn", onClick: handleDone, disabled: !activeEditor, children: "Done" })] }), _jsxs("div", { className: "editability-right", children: [_jsxs("button", { className: "editability-btn", onClick: () => setPublishOpen(true), disabled: changeCount === 0, children: ["Publish (", changeCount, ")"] }), _jsx("button", { className: "editability-btn", onClick: handleDiscard, disabled: changeCount === 0, children: "Discard" }), user ? (_jsxs("div", { className: "editability-user", children: [user.picture ? _jsx("img", { src: user.picture, alt: "" }) : null, _jsx("span", { children: user.name ?? user.email }), _jsx("button", { className: "editability-btn", onClick: handleLogout, children: "Log out" })] })) : (_jsx(LoginPanel, { apiBase: apiBase, googleClientId: googleClientId, onLogin: setUser, loading: loading })), _jsx("button", { className: "editability-btn", onClick: handleExit, children: "Exit" })] })] }), publishOpen ? (_jsx(PublishModal, { changes: changes, message: message, setMessage: setMessage, onClose: () => setPublishOpen(false), onPublish: handlePublish, error: error })) : null] }));
235
+ }
236
+ function LoginPanel({ apiBase, googleClientId, onLogin, loading }) {
237
+ const containerRef = useRef(null);
238
+ useEffect(() => {
239
+ if (!googleClientId) {
240
+ return;
241
+ }
242
+ let cancelled = false;
243
+ void loadGoogleScript().then(() => {
244
+ if (cancelled || !containerRef.current || !window.google?.accounts?.id) {
245
+ return;
246
+ }
247
+ window.google.accounts.id.initialize({
248
+ client_id: googleClientId,
249
+ callback: async (response) => {
250
+ const res = await fetch(`${apiBase}/login`, {
251
+ method: "POST",
252
+ headers: { "Content-Type": "application/json" },
253
+ body: JSON.stringify({ credential: response.credential }),
254
+ });
255
+ if (res.ok) {
256
+ const me = await fetchMe(apiBase).catch(() => null);
257
+ onLogin(me);
258
+ }
259
+ else {
260
+ alert("Login failed.");
261
+ }
262
+ },
263
+ });
264
+ window.google.accounts.id.renderButton(containerRef.current, {
265
+ theme: "outline",
266
+ size: "large",
267
+ });
268
+ });
269
+ return () => {
270
+ cancelled = true;
271
+ };
272
+ }, [apiBase, googleClientId, onLogin]);
273
+ if (!googleClientId) {
274
+ return _jsx("span", { className: "editability-error", children: "Missing Google client ID." });
275
+ }
276
+ if (loading) {
277
+ return _jsx("span", { className: "editability-status", children: "Checking login\u2026" });
278
+ }
279
+ return _jsx("div", { ref: containerRef });
280
+ }
281
+ function PublishModal({ changes, message, setMessage, onClose, onPublish, error, }) {
282
+ return (_jsx("div", { className: "editability-modal", children: _jsxs("div", { className: "editability-modal-content", children: [_jsx("h2", { children: "Review changes" }), _jsx("p", { children: "Make sure everything looks right before publishing." }), _jsx("div", { className: "editability-summary", children: changes.map((change) => (_jsx(ChangePreview, { change: change }, change.id))) }), _jsxs("label", { className: "editability-label", children: ["Summary (optional)", _jsx("input", { value: message, onChange: (event) => setMessage(event.target.value), placeholder: "e.g. Updated hero message" })] }), error ? _jsx("p", { className: "editability-error", children: error }) : null, _jsxs("div", { className: "editability-actions", children: [_jsx("button", { className: "editability-btn", onClick: onClose, children: "Cancel" }), _jsx("button", { className: "editability-btn editability-primary", onClick: onPublish, children: "Publish" })] })] }) }));
283
+ }
284
+ function ChangePreview({ change }) {
285
+ const afterHtml = renderAstToHtml(change.ast);
286
+ const beforeText = change.originalText;
287
+ const afterText = normalizeTextContent(astToText(change.ast));
288
+ const diffEnabled = beforeText.length + afterText.length <= 4000;
289
+ const diff = diffEnabled ? diffWords(beforeText, afterText) : null;
290
+ const label = buildLabel(change);
291
+ return (_jsxs("div", { className: "editability-change", children: [_jsx("h3", { children: label }), _jsxs("div", { className: "editability-change-grid", children: [_jsxs("div", { children: [_jsx("h4", { children: "Before" }), _jsx("div", { className: "editability-preview", dangerouslySetInnerHTML: { __html: change.originalHtml } })] }), _jsxs("div", { children: [_jsx("h4", { children: "After" }), _jsx("div", { className: "editability-preview", dangerouslySetInnerHTML: { __html: afterHtml } })] })] }), _jsx("div", { className: "editability-diff", children: diff ? (diff.map((part, index) => (_jsx("span", { className: part.added ? "added" : part.removed ? "removed" : "", children: part.value }, index)))) : (_jsx("span", { className: "editability-muted", children: "Diff preview skipped for large changes." })) })] }));
292
+ }
293
+ function buildLabel(change) {
294
+ const snippet = change.originalText.slice(0, 40);
295
+ const tag = change.tag.toLowerCase();
296
+ return `${tag.toUpperCase()}: ${snippet}${change.originalText.length > 40 ? "…" : ""}`;
297
+ }
298
+ function activateBlock(element, id, draft, setDraft, setActiveId, setActiveEditor) {
299
+ const mode = determineMode(element);
300
+ const existing = draft.changes[id];
301
+ const originalHtml = existing?.originalHtml ?? element.innerHTML;
302
+ const originalText = existing?.originalText ?? normalizeTextContent(element.textContent ?? "");
303
+ const datasetFingerprint = element.dataset.editabilityFp;
304
+ const fingerprint = datasetFingerprint ?? existing?.fingerprint ?? fnv1a64(originalText);
305
+ const current = existing
306
+ ? { ...existing, fingerprint }
307
+ : {
308
+ id,
309
+ mode,
310
+ ast: htmlToAst(originalHtml, mode),
311
+ fingerprint,
312
+ originalHtml,
313
+ originalText,
314
+ tag: element.tagName,
315
+ lastPath: window.location.pathname,
316
+ };
317
+ const active = createActiveEditor({
318
+ element,
319
+ mode,
320
+ initialHtml: existing ? renderAstToHtml(existing.ast) : originalHtml,
321
+ onUpdate: (ast) => {
322
+ const next = { ...current, ast, lastPath: window.location.pathname };
323
+ const afterHtml = renderAstToHtml(ast);
324
+ const normalizedOriginal = normalizeHtml(current.originalHtml);
325
+ const normalizedAfter = normalizeHtml(afterHtml);
326
+ const updated = { ...draft, updatedAt: Date.now(), changes: { ...draft.changes } };
327
+ if (normalizedOriginal === normalizedAfter) {
328
+ delete updated.changes[id];
329
+ }
330
+ else {
331
+ updated.changes[id] = next;
332
+ }
333
+ saveDraft(updated);
334
+ setDraft(updated);
335
+ },
336
+ });
337
+ setActiveId(id);
338
+ setActiveEditor(active);
339
+ return { editor: active, change: current };
340
+ }
341
+ function determineMode(element) {
342
+ const tag = element.tagName.toLowerCase();
343
+ if (["div", "section", "article", "main", "aside", "nav", "header", "footer"].includes(tag)) {
344
+ return "block";
345
+ }
346
+ return "inline";
347
+ }
348
+ function loadDraft() {
349
+ if (typeof window === "undefined") {
350
+ return { version: 1, updatedAt: Date.now(), changes: {} };
351
+ }
352
+ try {
353
+ const raw = localStorage.getItem(DRAFT_KEY);
354
+ if (!raw) {
355
+ return { version: 1, updatedAt: Date.now(), changes: {} };
356
+ }
357
+ const parsed = JSON.parse(raw);
358
+ if (parsed.version !== 1) {
359
+ return { version: 1, updatedAt: Date.now(), changes: {} };
360
+ }
361
+ return parsed;
362
+ }
363
+ catch {
364
+ return { version: 1, updatedAt: Date.now(), changes: {} };
365
+ }
366
+ }
367
+ function saveDraft(draft) {
368
+ localStorage.setItem(DRAFT_KEY, JSON.stringify(draft));
369
+ }
370
+ function clearDraft() {
371
+ localStorage.removeItem(DRAFT_KEY);
372
+ }
373
+ function applyDrafts(draft, observerRef, applyingRef) {
374
+ if (applyingRef.current) {
375
+ return;
376
+ }
377
+ applyingRef.current = true;
378
+ try {
379
+ const observer = observerRef.current;
380
+ if (observer) {
381
+ observer.disconnect();
382
+ }
383
+ const nodes = document.querySelectorAll("[data-editability-id]");
384
+ nodes.forEach((node) => {
385
+ const id = node.dataset.editabilityId;
386
+ if (!id) {
387
+ return;
388
+ }
389
+ const change = draft.changes[id];
390
+ if (!change) {
391
+ node.classList.remove("editability-dirty");
392
+ return;
393
+ }
394
+ if (node.getAttribute("data-editability-active") === "true") {
395
+ return;
396
+ }
397
+ const nextHtml = renderAstToHtml(change.ast);
398
+ if (node.innerHTML !== nextHtml) {
399
+ node.innerHTML = nextHtml;
400
+ }
401
+ node.classList.add("editability-dirty");
402
+ });
403
+ if (observer) {
404
+ observer.observe(document.body, { childList: true, subtree: true });
405
+ }
406
+ }
407
+ finally {
408
+ applyingRef.current = false;
409
+ }
410
+ }
411
+ function scheduleApplyDrafts(draft, scheduledRef, observerRef, applyingRef) {
412
+ if (scheduledRef.current !== null) {
413
+ return;
414
+ }
415
+ scheduledRef.current = window.requestAnimationFrame(() => {
416
+ scheduledRef.current = null;
417
+ applyDrafts(draft, observerRef, applyingRef);
418
+ });
419
+ }
420
+ function isOverlayMutation(target) {
421
+ if (!(target instanceof Element)) {
422
+ return false;
423
+ }
424
+ return Boolean(target.closest("#editability-root"));
425
+ }
426
+ function renderAstToHtml(ast) {
427
+ if (ast.mode === "inline") {
428
+ return ast.nodes.map(renderInlineNode).join("");
429
+ }
430
+ return ast.nodes.map((block) => `<p>${block.children.map(renderInlineNode).join("")}</p>`).join("");
431
+ }
432
+ function renderInlineNode(node) {
433
+ if (node.type === "text") {
434
+ const text = escapeHtml(node.text);
435
+ let output = text;
436
+ if (node.bold) {
437
+ output = `<strong>${output}</strong>`;
438
+ }
439
+ if (node.italic) {
440
+ output = `<em>${output}</em>`;
441
+ }
442
+ return output;
443
+ }
444
+ if (node.type === "linebreak") {
445
+ return "<br />";
446
+ }
447
+ if (node.type === "link") {
448
+ const safe = sanitizeHref(node.href);
449
+ const children = node.children.map(renderInlineNode).join("");
450
+ if (!safe) {
451
+ return children;
452
+ }
453
+ if (safe.kind === "internal") {
454
+ return `<a href="${escapeHtml(safe.href)}">${children}</a>`;
455
+ }
456
+ return `<a href="${escapeHtml(safe.href)}" target="_blank" rel="noreferrer noopener">${children}</a>`;
457
+ }
458
+ return "";
459
+ }
460
+ function escapeHtml(value) {
461
+ return value
462
+ .replace(/&/g, "&amp;")
463
+ .replace(/</g, "&lt;")
464
+ .replace(/>/g, "&gt;")
465
+ .replace(/\"/g, "&quot;");
466
+ }
467
+ function normalizeHtml(html) {
468
+ return html.replace(/\s+/g, " ").trim();
469
+ }
470
+ function astToText(ast) {
471
+ if (ast.mode === "inline") {
472
+ return ast.nodes.map(nodeToText).join("");
473
+ }
474
+ return ast.nodes.map((block) => block.children.map(nodeToText).join(" ")).join(" ");
475
+ }
476
+ function nodeToText(node) {
477
+ if (node.type === "text") {
478
+ return node.text;
479
+ }
480
+ if (node.type === "linebreak") {
481
+ return " ";
482
+ }
483
+ if (node.type === "link") {
484
+ return node.children.map(nodeToText).join("");
485
+ }
486
+ return "";
487
+ }
488
+ function htmlToAst(html, mode) {
489
+ const wrapper = document.createElement("div");
490
+ wrapper.innerHTML = html;
491
+ if (mode === "inline") {
492
+ return { mode: "inline", nodes: collectInline(wrapper) };
493
+ }
494
+ const blocks = [];
495
+ const paragraphs = wrapper.querySelectorAll("p");
496
+ if (paragraphs.length === 0) {
497
+ blocks.push({ type: "paragraph", children: collectInline(wrapper) });
498
+ }
499
+ else {
500
+ paragraphs.forEach((p) => {
501
+ blocks.push({ type: "paragraph", children: collectInline(p) });
502
+ });
503
+ }
504
+ return { mode: "block", nodes: blocks };
505
+ }
506
+ function collectInline(root) {
507
+ const nodes = [];
508
+ root.childNodes.forEach((node) => {
509
+ if (node.nodeType === Node.TEXT_NODE) {
510
+ const text = node.textContent ?? "";
511
+ if (text) {
512
+ nodes.push({ type: "text", text });
513
+ }
514
+ return;
515
+ }
516
+ if (node.nodeType !== Node.ELEMENT_NODE) {
517
+ return;
518
+ }
519
+ const element = node;
520
+ if (element.tagName.toLowerCase() === "br") {
521
+ nodes.push({ type: "linebreak" });
522
+ return;
523
+ }
524
+ if (element.tagName.toLowerCase() === "strong") {
525
+ applyFormat(collectInline(element), "bold").forEach((child) => nodes.push(child));
526
+ return;
527
+ }
528
+ if (element.tagName.toLowerCase() === "em") {
529
+ applyFormat(collectInline(element), "italic").forEach((child) => nodes.push(child));
530
+ return;
531
+ }
532
+ if (element.tagName.toLowerCase() === "a") {
533
+ const href = element.getAttribute("href") ?? "";
534
+ nodes.push({ type: "link", href, children: collectInline(element) });
535
+ return;
536
+ }
537
+ collectInline(element).forEach((child) => nodes.push(child));
538
+ });
539
+ return nodes;
540
+ }
541
+ function applyFormat(nodes, format) {
542
+ return nodes.map((node) => {
543
+ if (node.type === "text") {
544
+ return { ...node, [format]: true };
545
+ }
546
+ if (node.type === "link") {
547
+ return { ...node, children: applyFormat(node.children, format) };
548
+ }
549
+ return node;
550
+ });
551
+ }
552
+ function destroyActiveEditor(reason, shouldPersist, draftRef, activeEditorRef, activeElementRef, activeIdRef, activeSnapshotRef, activeChangeRef, setDraft, setActiveEditor, setActiveId, observerRef, applyingRef) {
553
+ const editor = activeEditorRef.current;
554
+ if (!editor) {
555
+ return;
556
+ }
557
+ if (shouldPersist) {
558
+ persistActiveDraft(draftRef, activeChangeRef, editor, setDraft);
559
+ }
560
+ editor.destroy();
561
+ activeEditorRef.current = null;
562
+ const element = activeElementRef.current;
563
+ const id = activeIdRef.current;
564
+ const snapshot = activeSnapshotRef.current;
565
+ activeChangeRef.current = null;
566
+ activeElementRef.current = null;
567
+ activeIdRef.current = null;
568
+ activeSnapshotRef.current = null;
569
+ if (reason !== "unmount") {
570
+ setActiveEditor(null);
571
+ setActiveId(null);
572
+ }
573
+ if (reason !== "removed" && element && id && snapshot?.id === id && !draftRef.current.changes[id]) {
574
+ element.innerHTML = snapshot.html;
575
+ }
576
+ applyDrafts(draftRef.current, observerRef, applyingRef);
577
+ }
578
+ function persistActiveDraft(draftRef, activeChangeRef, editor, setDraft) {
579
+ const change = activeChangeRef.current;
580
+ if (!change) {
581
+ return;
582
+ }
583
+ const ast = editor.getAst();
584
+ const afterHtml = renderAstToHtml(ast);
585
+ const normalizedOriginal = normalizeHtml(change.originalHtml);
586
+ const normalizedAfter = normalizeHtml(afterHtml);
587
+ const updated = {
588
+ ...draftRef.current,
589
+ updatedAt: Date.now(),
590
+ changes: { ...draftRef.current.changes },
591
+ };
592
+ if (normalizedOriginal === normalizedAfter) {
593
+ delete updated.changes[change.id];
594
+ }
595
+ else {
596
+ updated.changes[change.id] = { ...change, ast, lastPath: window.location.pathname };
597
+ }
598
+ saveDraft(updated);
599
+ draftRef.current = updated;
600
+ setDraft(updated);
601
+ }
602
+ async function fetchMe(apiBase) {
603
+ const response = await fetch(`${apiBase}/me`, { method: "GET" });
604
+ if (!response.ok) {
605
+ throw new Error("Not authenticated.");
606
+ }
607
+ const data = (await response.json());
608
+ return data.user;
609
+ }
610
+ function ensureStyles() {
611
+ if (document.getElementById("editability-style")) {
612
+ return;
613
+ }
614
+ const style = document.createElement("style");
615
+ style.id = "editability-style";
616
+ style.textContent = `
617
+ .editability-authenticated [data-editability-id]:hover { outline: 2px dashed #2f855a; outline-offset: 2px; cursor: text; }
618
+ .editability-authenticated [data-editability-id].editability-dirty { outline: 2px solid #3182ce; outline-offset: 2px; }
619
+ .editability-overlay { position: fixed; inset: auto 0 0 0; z-index: 9999; font-family: ui-sans-serif, system-ui; }
620
+ .editability-bar { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 12px 16px; background: #0f172a; color: #f8fafc; box-shadow: 0 -6px 20px rgba(15, 23, 42, 0.25); }
621
+ .editability-left, .editability-center, .editability-right { display: flex; align-items: center; gap: 8px; }
622
+ .editability-pill { padding: 4px 10px; background: #38bdf8; color: #0f172a; border-radius: 999px; font-weight: 600; }
623
+ .editability-status { opacity: 0.8; }
624
+ .editability-btn { padding: 6px 10px; border-radius: 6px; border: 1px solid rgba(148, 163, 184, 0.3); background: #1e293b; color: #f8fafc; font-size: 13px; }
625
+ .editability-btn:disabled { opacity: 0.5; cursor: not-allowed; }
626
+ .editability-btn:hover:not(:disabled) { background: #334155; }
627
+ .editability-primary { background: #38bdf8; color: #0f172a; border-color: transparent; }
628
+ .editability-user { display: flex; align-items: center; gap: 8px; }
629
+ .editability-user img { width: 24px; height: 24px; border-radius: 999px; }
630
+ .editability-modal { position: fixed; inset: 0; background: rgba(15, 23, 42, 0.6); display: flex; align-items: center; justify-content: center; z-index: 10000; }
631
+ .editability-modal-content { background: #ffffff; color: #0f172a; padding: 24px; border-radius: 16px; width: min(900px, 90vw); max-height: 80vh; overflow: auto; }
632
+ .editability-change { border-bottom: 1px solid #e2e8f0; padding: 12px 0; }
633
+ .editability-change-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 16px; }
634
+ .editability-preview { background: #f8fafc; border-radius: 8px; padding: 12px; min-height: 40px; }
635
+ .editability-diff { margin-top: 8px; font-size: 12px; }
636
+ .editability-diff span.added { background: #bbf7d0; }
637
+ .editability-diff span.removed { background: #fecaca; text-decoration: line-through; }
638
+ .editability-muted { opacity: 0.7; }
639
+ .editability-label { display: flex; flex-direction: column; gap: 6px; margin-top: 12px; }
640
+ .editability-label input { padding: 8px; border-radius: 6px; border: 1px solid #cbd5f5; }
641
+ .editability-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 16px; }
642
+ .editability-error { color: #dc2626; }
643
+ .editability-login { position: fixed; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px; background: rgba(15, 23, 42, 0.8); color: #f8fafc; padding: 24px; text-align: center; }
644
+ .editability-login h2 { margin: 0; font-size: 20px; }
645
+ .editability-login p { margin: 0; max-width: 360px; opacity: 0.9; }
646
+ `;
647
+ document.head.appendChild(style);
648
+ }
649
+ function loadGoogleScript() {
650
+ if (document.querySelector("script[data-editability-google]")) {
651
+ return Promise.resolve();
652
+ }
653
+ return new Promise((resolve, reject) => {
654
+ const script = document.createElement("script");
655
+ script.src = "https://accounts.google.com/gsi/client";
656
+ script.async = true;
657
+ script.defer = true;
658
+ script.dataset.editabilityGoogle = "1";
659
+ script.onload = () => resolve();
660
+ script.onerror = () => reject(new Error("Failed to load Google script."));
661
+ document.head.appendChild(script);
662
+ });
663
+ }
664
+ //# sourceMappingURL=overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay.js","sourceRoot":"","sources":["../src/overlay.tsx"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@editability/editor-lexical",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "default": "./dist/index.js"
11
+ }
12
+ },
13
+ "files": [
14
+ "dist"
15
+ ],
16
+ "sideEffects": false,
17
+ "dependencies": {
18
+ "@editability/shared": "0.1.0",
19
+ "lexical": "latest",
20
+ "@lexical/history": "latest",
21
+ "@lexical/html": "latest",
22
+ "@lexical/link": "latest",
23
+ "@lexical/rich-text": "latest"
24
+ },
25
+ "peerDependencies": {
26
+ "react": ">=18",
27
+ "react-dom": ">=18"
28
+ },
29
+ "devDependencies": {
30
+ "react": "latest",
31
+ "react-dom": "latest",
32
+ "@types/node": "latest",
33
+ "@types/react": "latest",
34
+ "@types/react-dom": "latest",
35
+ "typescript": "latest",
36
+ "vitest": "latest"
37
+ },
38
+ "scripts": {
39
+ "build": "tsc -p tsconfig.json",
40
+ "clean": "rm -rf dist",
41
+ "typecheck": "tsc -p tsconfig.json --noEmit",
42
+ "test": "vitest run --passWithNoTests"
43
+ }
44
+ }