@editneo/react 0.1.1 → 0.1.3

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 (43) hide show
  1. package/README.md +81 -40
  2. package/dist/BlockRenderer.d.ts +2 -0
  3. package/dist/BlockRenderer.d.ts.map +1 -1
  4. package/dist/BlockRenderer.js +4 -4
  5. package/dist/BlockRenderer.js.map +1 -1
  6. package/dist/EditableBlock.d.ts.map +1 -1
  7. package/dist/EditableBlock.js +365 -50
  8. package/dist/EditableBlock.js.map +1 -1
  9. package/dist/NeoCanvas.d.ts.map +1 -1
  10. package/dist/NeoCanvas.js +50 -8
  11. package/dist/NeoCanvas.js.map +1 -1
  12. package/dist/NeoEditor.d.ts +12 -4
  13. package/dist/NeoEditor.d.ts.map +1 -1
  14. package/dist/NeoEditor.js +51 -15
  15. package/dist/NeoEditor.js.map +1 -1
  16. package/dist/blocks/ListBlock.d.ts +6 -2
  17. package/dist/blocks/ListBlock.d.ts.map +1 -1
  18. package/dist/blocks/ListBlock.js +20 -2
  19. package/dist/blocks/ListBlock.js.map +1 -1
  20. package/dist/components/Aeropeak.d.ts +3 -1
  21. package/dist/components/Aeropeak.d.ts.map +1 -1
  22. package/dist/components/Aeropeak.js +46 -24
  23. package/dist/components/Aeropeak.js.map +1 -1
  24. package/dist/components/CursorOverlay.d.ts +4 -1
  25. package/dist/components/CursorOverlay.d.ts.map +1 -1
  26. package/dist/components/CursorOverlay.js +113 -10
  27. package/dist/components/CursorOverlay.js.map +1 -1
  28. package/dist/components/PDFDropZone.d.ts.map +1 -1
  29. package/dist/components/PDFDropZone.js +23 -33
  30. package/dist/components/PDFDropZone.js.map +1 -1
  31. package/dist/components/SlashMenu.d.ts.map +1 -1
  32. package/dist/components/SlashMenu.js +50 -46
  33. package/dist/components/SlashMenu.js.map +1 -1
  34. package/dist/hooks.d.ts +28 -1
  35. package/dist/hooks.d.ts.map +1 -1
  36. package/dist/hooks.js +41 -8
  37. package/dist/hooks.js.map +1 -1
  38. package/dist/index.d.ts +9 -1
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +13 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/styles.css +141 -0
  43. package/package.json +26 -7
@@ -1,64 +1,379 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useRef, useEffect } from 'react';
3
- import { useEditorStore } from '@editneo/core';
2
+ import { useRef, useContext, useEffect, useCallback } from 'react';
3
+ import { useStore } from 'zustand';
4
+ import { EditorContext } from './NeoEditor';
5
+ /**
6
+ * Parse the contentEditable DOM back into Span[] preserving inline formatting.
7
+ * Walks the child nodes and reads computed/element styles to reconstruct
8
+ * bold, italic, underline, strikethrough, code, link, color, and highlight.
9
+ */
10
+ function parseContentEditableToSpans(el) {
11
+ const spans = [];
12
+ function walk(node, inherited) {
13
+ var _a, _b;
14
+ if (node.nodeType === Node.TEXT_NODE) {
15
+ const text = node.textContent || '';
16
+ if (text.length > 0) {
17
+ spans.push({ text, ...inherited });
18
+ }
19
+ return;
20
+ }
21
+ if (node.nodeType !== Node.ELEMENT_NODE)
22
+ return;
23
+ const elem = node;
24
+ const tag = elem.tagName.toLowerCase();
25
+ // Build formatting from the element
26
+ const fmt = { ...inherited };
27
+ if (tag === 'b' || tag === 'strong')
28
+ fmt.bold = true;
29
+ if (tag === 'i' || tag === 'em')
30
+ fmt.italic = true;
31
+ if (tag === 'u')
32
+ fmt.underline = true;
33
+ if (tag === 's' || tag === 'del' || tag === 'strike')
34
+ fmt.strike = true;
35
+ if (tag === 'code')
36
+ fmt.code = true;
37
+ if (tag === 'a')
38
+ fmt.link = elem.getAttribute('href') || undefined;
39
+ // Check inline styles
40
+ const style = elem.style;
41
+ if (style.fontWeight === 'bold' || parseInt(style.fontWeight) >= 700)
42
+ fmt.bold = true;
43
+ if (style.fontStyle === 'italic')
44
+ fmt.italic = true;
45
+ if ((_a = style.textDecoration) === null || _a === void 0 ? void 0 : _a.includes('underline'))
46
+ fmt.underline = true;
47
+ if ((_b = style.textDecoration) === null || _b === void 0 ? void 0 : _b.includes('line-through'))
48
+ fmt.strike = true;
49
+ if (style.color)
50
+ fmt.color = style.color;
51
+ if (style.backgroundColor && style.backgroundColor !== 'transparent')
52
+ fmt.highlight = style.backgroundColor;
53
+ for (const child of Array.from(elem.childNodes)) {
54
+ walk(child, fmt);
55
+ }
56
+ }
57
+ for (const child of Array.from(el.childNodes)) {
58
+ walk(child, {});
59
+ }
60
+ // Merge adjacent spans with identical formatting
61
+ const merged = [];
62
+ for (const span of spans) {
63
+ const prev = merged[merged.length - 1];
64
+ if (prev && spansHaveSameFormat(prev, span)) {
65
+ prev.text += span.text;
66
+ }
67
+ else {
68
+ merged.push({ ...span });
69
+ }
70
+ }
71
+ return merged;
72
+ }
73
+ function spansHaveSameFormat(a, b) {
74
+ return (!!a.bold === !!b.bold &&
75
+ !!a.italic === !!b.italic &&
76
+ !!a.underline === !!b.underline &&
77
+ !!a.strike === !!b.strike &&
78
+ !!a.code === !!b.code &&
79
+ (a.color || '') === (b.color || '') &&
80
+ (a.highlight || '') === (b.highlight || '') &&
81
+ (a.link || '') === (b.link || ''));
82
+ }
83
+ /** Render Span[] to HTML string for innerHTML injection. */
84
+ function spansToHtml(spans) {
85
+ return spans.map((span) => {
86
+ let html = escapeHtml(span.text);
87
+ // Wrap in formatting tags (innermost first)
88
+ if (span.bold)
89
+ html = `<strong>${html}</strong>`;
90
+ if (span.italic)
91
+ html = `<em>${html}</em>`;
92
+ if (span.underline)
93
+ html = `<u>${html}</u>`;
94
+ if (span.strike)
95
+ html = `<s>${html}</s>`;
96
+ if (span.code) {
97
+ html = `<code style="font-family:var(--neo-code-font,monospace);background:#eee;padding:2px 4px;border-radius:3px">${html}</code>`;
98
+ }
99
+ // Apply inline styles for color/highlight
100
+ const styles = [];
101
+ if (span.color)
102
+ styles.push(`color:${span.color}`);
103
+ if (span.highlight)
104
+ styles.push(`background-color:${span.highlight}`);
105
+ if (styles.length > 0) {
106
+ html = `<span style="${styles.join(';')}">${html}</span>`;
107
+ }
108
+ if (span.link) {
109
+ html = `<a href="${escapeHtml(span.link)}" style="color:var(--neo-accent-color,#3b82f6);text-decoration:underline">${html}</a>`;
110
+ }
111
+ return html;
112
+ }).join('');
113
+ }
114
+ function escapeHtml(text) {
115
+ return text
116
+ .replace(/&/g, '&amp;')
117
+ .replace(/</g, '&lt;')
118
+ .replace(/>/g, '&gt;')
119
+ .replace(/"/g, '&quot;');
120
+ }
121
+ /**
122
+ * Calculate the character offset of the current selection within a contentEditable element.
123
+ * Walks all text nodes in document order and sums lengths until we reach the selection anchor/focus.
124
+ */
125
+ function getCharOffset(containerEl, node, offset) {
126
+ const walker = document.createTreeWalker(containerEl, NodeFilter.SHOW_TEXT);
127
+ let charCount = 0;
128
+ while (walker.nextNode()) {
129
+ const textNode = walker.currentNode;
130
+ if (textNode === node) {
131
+ return charCount + offset;
132
+ }
133
+ charCount += (textNode.textContent || '').length;
134
+ }
135
+ // If the node itself is the container or an element node, offset refers to child index
136
+ // Walk text nodes up to that child
137
+ if (node === containerEl || node.nodeType === Node.ELEMENT_NODE) {
138
+ const children = Array.from(node.childNodes);
139
+ const targetChild = children[Math.min(offset, children.length)];
140
+ const allWalker = document.createTreeWalker(containerEl, NodeFilter.SHOW_TEXT);
141
+ let count = 0;
142
+ while (allWalker.nextNode()) {
143
+ if (targetChild && allWalker.currentNode === targetChild)
144
+ break;
145
+ // Check if this text node is before the target
146
+ if (targetChild && node.compareDocumentPosition(allWalker.currentNode) & Node.DOCUMENT_POSITION_FOLLOWING)
147
+ break;
148
+ count += (allWalker.currentNode.textContent || '').length;
149
+ }
150
+ return count;
151
+ }
152
+ return charCount;
153
+ }
154
+ /**
155
+ * Set the cursor position in a contentEditable element to a specific character offset.
156
+ */
157
+ function setCursorToOffset(containerEl, targetOffset) {
158
+ const walker = document.createTreeWalker(containerEl, NodeFilter.SHOW_TEXT);
159
+ let offset = 0;
160
+ while (walker.nextNode()) {
161
+ const textNode = walker.currentNode;
162
+ const len = textNode.length;
163
+ if (offset + len >= targetOffset) {
164
+ const range = document.createRange();
165
+ range.setStart(textNode, targetOffset - offset);
166
+ range.collapse(true);
167
+ const sel = window.getSelection();
168
+ sel === null || sel === void 0 ? void 0 : sel.removeAllRanges();
169
+ sel === null || sel === void 0 ? void 0 : sel.addRange(range);
170
+ return;
171
+ }
172
+ offset += len;
173
+ }
174
+ // If offset exceeds total text, place at end
175
+ const range = document.createRange();
176
+ range.selectNodeContents(containerEl);
177
+ range.collapse(false);
178
+ const sel = window.getSelection();
179
+ sel === null || sel === void 0 ? void 0 : sel.removeAllRanges();
180
+ sel === null || sel === void 0 ? void 0 : sel.addRange(range);
181
+ }
4
182
  export const EditableBlock = ({ block, autoFocus }) => {
5
183
  const contentRef = useRef(null);
6
- const updateBlock = useEditorStore((state) => state.updateBlock);
7
- const addBlock = useEditorStore((state) => state.addBlock);
8
- const deleteBlock = useEditorStore((state) => state.deleteBlock);
184
+ const context = useContext(EditorContext);
185
+ // Track the content we last wrote to the DOM to detect external changes
186
+ const lastRenderedContentRef = useRef('');
187
+ // Flag to suppress store updates when we're syncing from store → DOM
188
+ const isSyncingFromStoreRef = useRef(false);
189
+ if (!context) {
190
+ throw new Error('EditableBlock must be used within a NeoEditor');
191
+ }
192
+ const updateBlock = useStore(context.store, (state) => state.updateBlock);
193
+ const addBlock = useStore(context.store, (state) => state.addBlock);
194
+ const deleteBlock = useStore(context.store, (state) => state.deleteBlock);
195
+ const undo = useStore(context.store, (state) => state.undo);
196
+ const redo = useStore(context.store, (state) => state.redo);
197
+ const setSelection = useStore(context.store, (state) => state.setSelection);
198
+ const rootBlocks = useStore(context.store, (state) => state.rootBlocks);
199
+ // --- Uncontrolled DOM: render spans as innerHTML, not React children ---
200
+ // Initial mount: set innerHTML from block content
201
+ useEffect(() => {
202
+ const el = contentRef.current;
203
+ if (!el)
204
+ return;
205
+ const html = spansToHtml(block.content);
206
+ el.innerHTML = html;
207
+ lastRenderedContentRef.current = html;
208
+ if (autoFocus) {
209
+ el.focus();
210
+ }
211
+ // Only run on mount (block.id change means a new block)
212
+ // eslint-disable-next-line react-hooks/exhaustive-deps
213
+ }, [block.id]);
214
+ // External content changes (undo, redo, remote sync): resync innerHTML
215
+ // We compare the new content's HTML to what we last rendered.
216
+ useEffect(() => {
217
+ const el = contentRef.current;
218
+ if (!el)
219
+ return;
220
+ // Don't resync if we're the ones who just updated the store
221
+ if (isSyncingFromStoreRef.current) {
222
+ isSyncingFromStoreRef.current = false;
223
+ return;
224
+ }
225
+ const html = spansToHtml(block.content);
226
+ if (html !== lastRenderedContentRef.current) {
227
+ // Save cursor position
228
+ const sel = window.getSelection();
229
+ let savedOffset = 0;
230
+ if (sel && sel.rangeCount > 0 && el.contains(sel.anchorNode)) {
231
+ savedOffset = getCharOffset(el, sel.anchorNode, sel.anchorOffset);
232
+ }
233
+ el.innerHTML = html;
234
+ lastRenderedContentRef.current = html;
235
+ // Restore cursor if this element was focused
236
+ if (document.activeElement === el || el.contains(document.activeElement)) {
237
+ setCursorToOffset(el, savedOffset);
238
+ }
239
+ }
240
+ }, [block.content]);
241
+ /** Parse DOM back into spans on input */
242
+ const handleInput = useCallback(() => {
243
+ const el = contentRef.current;
244
+ if (!el)
245
+ return;
246
+ const newSpans = parseContentEditableToSpans(el);
247
+ lastRenderedContentRef.current = el.innerHTML;
248
+ isSyncingFromStoreRef.current = true;
249
+ updateBlock(block.id, { content: newSpans });
250
+ }, [block.id, updateBlock]);
251
+ /** Sync DOM selection → store selection */
252
+ const handleSelect = useCallback(() => {
253
+ const el = contentRef.current;
254
+ if (!el)
255
+ return;
256
+ const sel = window.getSelection();
257
+ if (!sel || sel.rangeCount === 0)
258
+ return;
259
+ if (!el.contains(sel.anchorNode))
260
+ return;
261
+ const startOffset = getCharOffset(el, sel.anchorNode, sel.anchorOffset);
262
+ const endOffset = sel.isCollapsed
263
+ ? startOffset
264
+ : getCharOffset(el, sel.focusNode, sel.focusOffset);
265
+ const lo = Math.min(startOffset, endOffset);
266
+ const hi = Math.max(startOffset, endOffset);
267
+ setSelection(block.id, lo, hi);
268
+ }, [block.id, setSelection]);
269
+ /** Register document selectionchange listener */
9
270
  useEffect(() => {
10
- if (autoFocus && contentRef.current) {
11
- contentRef.current.focus();
12
- }
13
- }, [autoFocus]);
14
- const handleInput = (e) => {
15
- const text = e.currentTarget.innerText;
16
- // Simple text update for now, Span parsing to be added later
17
- updateBlock(block.id, { content: [{ text }] });
18
- };
19
- const handleKeyDown = (e) => {
20
- var _a;
21
- if (e.key === 'Enter') {
271
+ const onSelectionChange = () => {
272
+ const el = contentRef.current;
273
+ if (!el)
274
+ return;
275
+ // Only handle if this element is focused
276
+ if (document.activeElement === el || el.contains(document.activeElement)) {
277
+ handleSelect();
278
+ }
279
+ };
280
+ document.addEventListener('selectionchange', onSelectionChange);
281
+ return () => document.removeEventListener('selectionchange', onSelectionChange);
282
+ }, [handleSelect]);
283
+ /** Keyboard shortcuts */
284
+ const handleKeyDown = useCallback((e) => {
285
+ var _a, _b;
286
+ // Ctrl+Z / Cmd+Z = undo
287
+ if ((e.ctrlKey || e.metaKey) && e.key === 'z' && !e.shiftKey) {
288
+ e.preventDefault();
289
+ undo();
290
+ return;
291
+ }
292
+ // Ctrl+Shift+Z / Ctrl+Y = redo
293
+ if ((e.ctrlKey || e.metaKey) && (e.key === 'y' || (e.key === 'z' && e.shiftKey))) {
294
+ e.preventDefault();
295
+ redo();
296
+ return;
297
+ }
298
+ const el = contentRef.current;
299
+ if (e.key === 'Enter' && !e.shiftKey) {
22
300
  e.preventDefault();
23
301
  addBlock('paragraph', block.id);
24
302
  }
25
- else if (e.key === 'Backspace' && ((_a = contentRef.current) === null || _a === void 0 ? void 0 : _a.innerText) === '') {
303
+ else if (e.key === 'Enter' && e.shiftKey) {
304
+ // Shift+Enter: let browser insert <br> (soft break)
305
+ }
306
+ else if (e.key === 'Backspace' && (el === null || el === void 0 ? void 0 : el.innerText.trim()) === '') {
26
307
  e.preventDefault();
27
308
  deleteBlock(block.id);
28
309
  }
29
- else if (e.key === '/') {
30
- // Slash menu trigger logic (placeholder)
31
- }
32
- };
33
- return (_jsx("div", { ref: contentRef, contentEditable: true, suppressContentEditableWarning: true, onInput: handleInput, onKeyDown: handleKeyDown, style: {
34
- minHeight: '24px',
35
- outline: 'none',
36
- padding: '4px 0',
37
- // Basic styling based on type
38
- fontSize: block.type === 'heading-1' ? '2em' : '1em',
39
- fontWeight: block.type.startsWith('heading') ? 'bold' : 'normal',
40
- }, children: block.content.map((span, i) => {
41
- let style = {};
42
- if (span.bold)
43
- style.fontWeight = 'bold';
44
- if (span.italic)
45
- style.fontStyle = 'italic';
46
- if (span.underline)
47
- style.textDecoration = 'underline';
48
- if (span.strike)
49
- style.textDecoration = (style.textDecoration ? style.textDecoration + ' ' : '') + 'line-through';
50
- if (span.color)
51
- style.color = span.color;
52
- if (span.highlight)
53
- style.backgroundColor = span.highlight;
54
- const content = _jsx("span", { style: style, children: span.text }, i);
55
- if (span.code) {
56
- return _jsx("code", { style: { fontFamily: 'monospace', backgroundColor: '#eee', padding: '2px 4px', borderRadius: '3px' }, children: content }, i);
310
+ else if (e.key === 'Tab') {
311
+ e.preventDefault();
312
+ document.execCommand('insertText', false, ' ');
313
+ }
314
+ else if (e.key === 'ArrowUp' || e.key === 'ArrowLeft') {
315
+ // Navigate to previous block if at the start
316
+ if (el) {
317
+ const sel = window.getSelection();
318
+ if (sel && sel.isCollapsed) {
319
+ const offset = getCharOffset(el, sel.anchorNode, sel.anchorOffset);
320
+ if (offset === 0) {
321
+ e.preventDefault();
322
+ const idx = rootBlocks.indexOf(block.id);
323
+ if (idx > 0) {
324
+ const prevBlockId = rootBlocks[idx - 1];
325
+ setSelection(prevBlockId, Infinity, Infinity);
326
+ // Focus the previous block's contentEditable
327
+ const prevEl = (_a = el.closest('.neo-editor')) === null || _a === void 0 ? void 0 : _a.querySelector(`[data-block-id="${prevBlockId}"] [contenteditable]`);
328
+ if (prevEl) {
329
+ prevEl.focus();
330
+ // Place cursor at end
331
+ const range = document.createRange();
332
+ range.selectNodeContents(prevEl);
333
+ range.collapse(false);
334
+ sel.removeAllRanges();
335
+ sel.addRange(range);
336
+ }
337
+ }
338
+ }
339
+ }
57
340
  }
58
- if (span.link) {
59
- return _jsx("a", { href: span.link, style: { color: 'blue', textDecoration: 'underline' }, children: content }, i);
341
+ }
342
+ else if (e.key === 'ArrowDown' || e.key === 'ArrowRight') {
343
+ // Navigate to next block if at the end
344
+ if (el) {
345
+ const sel = window.getSelection();
346
+ if (sel && sel.isCollapsed) {
347
+ const offset = getCharOffset(el, sel.anchorNode, sel.anchorOffset);
348
+ const totalLen = (el.textContent || '').length;
349
+ if (offset >= totalLen) {
350
+ e.preventDefault();
351
+ const idx = rootBlocks.indexOf(block.id);
352
+ if (idx < rootBlocks.length - 1) {
353
+ const nextBlockId = rootBlocks[idx + 1];
354
+ setSelection(nextBlockId, 0, 0);
355
+ const nextEl = (_b = el.closest('.neo-editor')) === null || _b === void 0 ? void 0 : _b.querySelector(`[data-block-id="${nextBlockId}"] [contenteditable]`);
356
+ if (nextEl) {
357
+ nextEl.focus();
358
+ setCursorToOffset(nextEl, 0);
359
+ }
360
+ }
361
+ }
362
+ }
60
363
  }
61
- return content;
62
- }) }));
364
+ }
365
+ }, [undo, redo, addBlock, deleteBlock, block.id, rootBlocks, setSelection]);
366
+ return (_jsx("div", { "data-block-id": block.id, style: { position: 'relative' }, children: _jsx("div", { ref: contentRef, contentEditable: true, suppressContentEditableWarning: true, onInput: handleInput, onKeyDown: handleKeyDown, className: "neo-editable-block", style: {
367
+ minHeight: '24px',
368
+ outline: 'none',
369
+ padding: '4px 0',
370
+ whiteSpace: 'pre-wrap',
371
+ wordBreak: 'break-word',
372
+ fontSize: block.type === 'heading-1' ? '2em'
373
+ : block.type === 'heading-2' ? '1.5em'
374
+ : block.type === 'heading-3' ? '1.25em'
375
+ : '1em',
376
+ fontWeight: block.type.startsWith('heading') ? 'bold' : 'normal',
377
+ } }) }));
63
378
  };
64
379
  //# sourceMappingURL=EditableBlock.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditableBlock.js","sourceRoot":"","sources":["../src/EditableBlock.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EditableBlock.js","sourceRoot":"","sources":["../src/EditableBlock.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"NeoCanvas.d.ts","sourceRoot":"","sources":["../src/NeoCanvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiB,MAAM,OAAO,CAAC;AAKtC,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAsD7B,CAAC"}
1
+ {"version":3,"file":"NeoCanvas.d.ts","sourceRoot":"","sources":["../src/NeoCanvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AA4BlD,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAkF7B,CAAC"}
package/dist/NeoCanvas.js CHANGED
@@ -1,26 +1,68 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useRef } from 'react';
2
+ import { useRef, useContext } from 'react';
3
3
  import { useVirtualizer } from '@tanstack/react-virtual';
4
- import { useEditorStore } from '@editneo/core';
5
- import { EditableBlock } from './EditableBlock';
4
+ import { useStore } from 'zustand';
5
+ import { EditorContext } from './NeoEditor';
6
+ import { BlockRenderer } from './BlockRenderer';
7
+ /**
8
+ * (#27a) Compute the sequential order for an ordered-list block.
9
+ * Counts consecutive ordered-list blocks backwards from the given index.
10
+ */
11
+ function computeOrder(rootBlocks, blocks, index) {
12
+ const block = blocks[rootBlocks[index]];
13
+ if (!block || block.type !== 'ordered-list')
14
+ return undefined;
15
+ let order = 1;
16
+ for (let i = index - 1; i >= 0; i--) {
17
+ const prev = blocks[rootBlocks[i]];
18
+ if (!prev || prev.type !== 'ordered-list')
19
+ break;
20
+ order++;
21
+ }
22
+ return order;
23
+ }
6
24
  export const NeoCanvas = () => {
7
- const rootBlocks = useEditorStore((state) => state.rootBlocks);
8
- const blocks = useEditorStore((state) => state.blocks);
25
+ const context = useContext(EditorContext);
26
+ if (!context) {
27
+ throw new Error('NeoCanvas must be used within a NeoEditor');
28
+ }
29
+ const rootBlocks = useStore(context.store, (state) => state.rootBlocks);
30
+ const blocks = useStore(context.store, (state) => state.blocks);
9
31
  const parentRef = useRef(null);
32
+ /** (#26) Type-aware size estimates for better virtualizer performance */
33
+ const estimateSize = (index) => {
34
+ const blockId = rootBlocks[index];
35
+ const block = blocks[blockId];
36
+ if (!block)
37
+ return 35;
38
+ switch (block.type) {
39
+ case 'heading-1': return 60;
40
+ case 'heading-2': return 48;
41
+ case 'heading-3': return 40;
42
+ case 'code-block': return 120;
43
+ case 'image':
44
+ case 'video': return 200;
45
+ case 'divider': return 24;
46
+ default: return 35;
47
+ }
48
+ };
10
49
  const rowVirtualizer = useVirtualizer({
11
50
  count: rootBlocks.length,
12
51
  getScrollElement: () => parentRef.current,
13
- estimateSize: () => 35, // Estimate row height
52
+ estimateSize,
14
53
  overscan: 5,
15
54
  });
16
55
  return (_jsx("div", { ref: parentRef, style: {
17
- height: '100vh',
56
+ height: '100%', /* (#24) was 100vh, causing double scrollbar */
18
57
  width: '100%',
19
58
  overflow: 'auto',
20
59
  }, children: _jsx("div", { style: {
21
60
  height: `${rowVirtualizer.getTotalSize()}px`,
22
61
  width: '100%',
23
62
  position: 'relative',
63
+ maxWidth: 'var(--neo-content-width, 800px)',
64
+ margin: '0 auto',
65
+ padding: '0 1rem',
24
66
  }, children: rowVirtualizer.getVirtualItems().map((virtualRow) => {
25
67
  const blockId = rootBlocks[virtualRow.index];
26
68
  const block = blocks[blockId];
@@ -32,7 +74,7 @@ export const NeoCanvas = () => {
32
74
  left: 0,
33
75
  width: '100%',
34
76
  transform: `translateY(${virtualRow.start}px)`,
35
- }, children: _jsx(EditableBlock, { block: block }) }, virtualRow.key));
77
+ }, children: _jsx(BlockRenderer, { block: block, order: computeOrder(rootBlocks, blocks, virtualRow.index) }) }, virtualRow.key));
36
78
  }) }) }));
37
79
  };
38
80
  //# sourceMappingURL=NeoCanvas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NeoCanvas.js","sourceRoot":"","sources":["../src/NeoCanvas.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,CAAC,MAAM,SAAS,GAAa,GAAG,EAAE;IACtC,MAAM,UAAU,GAAG,cAAc,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAE/C,MAAM,cAAc,GAAG,cAAc,CAAC;QACpC,KAAK,EAAE,UAAU,CAAC,MAAM;QACxB,gBAAgB,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO;QACzC,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,sBAAsB;QAC9C,QAAQ,EAAE,CAAC;KACZ,CAAC,CAAC;IAEH,OAAO,CACL,cACE,GAAG,EAAE,SAAS,EACd,KAAK,EAAE;YACL,MAAM,EAAE,OAAO;YACf,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,MAAM;SACjB,YAED,cACE,KAAK,EAAE;gBACL,MAAM,EAAE,GAAG,cAAc,CAAC,YAAY,EAAE,IAAI;gBAC5C,KAAK,EAAE,MAAM;gBACb,QAAQ,EAAE,UAAU;aACrB,YAEA,cAAc,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;gBACnD,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;gBAE9B,IAAI,CAAC,KAAK;oBAAE,OAAO,IAAI,CAAC;gBAExB,OAAO,CACL,4BAEc,UAAU,CAAC,KAAK,EAC5B,GAAG,EAAE,cAAc,CAAC,cAAc,EAClC,KAAK,EAAE;wBACL,QAAQ,EAAE,UAAU;wBACpB,GAAG,EAAE,CAAC;wBACN,IAAI,EAAE,CAAC;wBACP,KAAK,EAAE,MAAM;wBACb,SAAS,EAAE,cAAc,UAAU,CAAC,KAAK,KAAK;qBAC/C,YAED,KAAC,aAAa,IAAC,KAAK,EAAE,KAAK,GAAI,IAX1B,UAAU,CAAC,GAAG,CAYf,CACP,CAAC;YACJ,CAAC,CAAC,GACE,GACF,CACP,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"NeoCanvas.js","sourceRoot":"","sources":["../src/NeoCanvas.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { SyncManager } from '@editneo/sync';
2
+ import { EditorStoreInstance, EditorStore } from '@editneo/core';
3
3
  import './styles.css';
4
4
  export interface NeoEditorProps {
5
5
  id: string;
@@ -16,10 +16,18 @@ export interface NeoEditorProps {
16
16
  };
17
17
  children?: React.ReactNode;
18
18
  }
19
- export declare const EditorContext: React.Context<{
19
+ interface EditorContextValue {
20
20
  editorId: string;
21
- syncManager: SyncManager | null;
21
+ store: EditorStoreInstance;
22
+ syncManager: any | null;
22
23
  renderBlock?: (block: any, defaultRender: any) => React.ReactNode;
23
- } | null>;
24
+ }
25
+ export declare const EditorContext: React.Context<EditorContextValue | null>;
26
+ /**
27
+ * Hook to access the current editor's Zustand store via context.
28
+ * Supports selectors for fine-grained re-render control.
29
+ */
30
+ export declare function useEditorStoreContext<T>(selector: (state: EditorStore) => T): T;
24
31
  export declare const NeoEditor: React.FC<NeoEditorProps>;
32
+ export {};
25
33
  //# sourceMappingURL=NeoEditor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NeoEditor.d.ts","sourceRoot":"","sources":["../src/NeoEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsD,MAAM,OAAO,CAAC;AAE3E,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,cAAc,CAAC;AAEtB,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE;QACX,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,KAAK,KAAK,CAAC,SAAS,CAAC;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;QAEvB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;IACF,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,eAAO,MAAM,aAAa;cACd,MAAM;iBACH,WAAW,GAAG,IAAI;kBACjB,CAAC,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,KAAK,KAAK,CAAC,SAAS;SACpD,CAAC;AAEhB,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA4D9C,CAAC"}
1
+ {"version":3,"file":"NeoEditor.d.ts","sourceRoot":"","sources":["../src/NeoEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0E,MAAM,OAAO,CAAC;AAC/F,OAAO,EAAqB,mBAAmB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGpF,OAAO,cAAc,CAAC;AAEtB,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE;QACX,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,KAAK,KAAK,CAAC,SAAS,CAAC;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;QACvB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;IACF,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,mBAAmB,CAAC;IAC3B,WAAW,EAAE,GAAG,GAAG,IAAI,CAAC;IACxB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,KAAK,KAAK,CAAC,SAAS,CAAC;CACnE;AAED,eAAO,MAAM,aAAa,0CAAiD,CAAC;AAE5E;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,CAAC,GAAG,CAAC,CAM/E;AAED,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAsF9C,CAAC"}