@blankdotpage/cake 0.1.36 → 0.1.38
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/dist/cake/core/runtime.d.ts.map +1 -1
- package/dist/cake/core/runtime.js +53 -20
- package/dist/cake/editor/cake-editor.d.ts +43 -2
- package/dist/cake/editor/cake-editor.d.ts.map +1 -1
- package/dist/cake/editor/cake-editor.js +133 -26
- package/dist/cake/extensions/index.d.ts +2 -1
- package/dist/cake/extensions/index.d.ts.map +1 -1
- package/dist/cake/extensions/index.js +2 -1
- package/dist/cake/extensions/link/link-popover.d.ts.map +1 -1
- package/dist/cake/extensions/link/link-popover.js +4 -12
- package/dist/cake/extensions/mention/index.d.ts +2 -0
- package/dist/cake/extensions/mention/index.d.ts.map +1 -0
- package/dist/cake/extensions/mention/index.js +1 -0
- package/dist/cake/extensions/mention/mention.d.ts +61 -0
- package/dist/cake/extensions/mention/mention.d.ts.map +1 -0
- package/dist/cake/extensions/mention/mention.js +460 -0
- package/dist/cake/react/index.d.ts +2 -0
- package/dist/cake/react/index.d.ts.map +1 -1
- package/dist/cake/react/index.js +70 -10
- package/dist/cake/test/harness.d.ts.map +1 -1
- package/dist/cake/test/harness.js +2 -1
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/cake/core/runtime.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/cake/core/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -931,11 +931,15 @@ export function createRuntimeFromRegistry(registry) {
|
|
|
931
931
|
}
|
|
932
932
|
const marks = stack.slice();
|
|
933
933
|
const last = runs[runs.length - 1];
|
|
934
|
-
if (last && marksEqual(last.marks, marks)) {
|
|
934
|
+
if (last && last.type === "text" && marksEqual(last.marks, marks)) {
|
|
935
935
|
last.text += text;
|
|
936
936
|
return;
|
|
937
937
|
}
|
|
938
|
-
runs.push({ text, marks });
|
|
938
|
+
runs.push({ type: "text", text, marks });
|
|
939
|
+
};
|
|
940
|
+
const pushAtom = (atom) => {
|
|
941
|
+
const marks = stack.slice();
|
|
942
|
+
runs.push({ type: "atom", atom, marks });
|
|
939
943
|
};
|
|
940
944
|
const walk = (inline) => {
|
|
941
945
|
if (inline.type === "text") {
|
|
@@ -943,7 +947,10 @@ export function createRuntimeFromRegistry(registry) {
|
|
|
943
947
|
return;
|
|
944
948
|
}
|
|
945
949
|
if (inline.type === "inline-atom") {
|
|
946
|
-
|
|
950
|
+
pushAtom({
|
|
951
|
+
kind: inline.kind,
|
|
952
|
+
data: inline.data,
|
|
953
|
+
});
|
|
947
954
|
return;
|
|
948
955
|
}
|
|
949
956
|
if (inline.type === "inline-wrapper") {
|
|
@@ -987,8 +994,7 @@ export function createRuntimeFromRegistry(registry) {
|
|
|
987
994
|
let remaining = Math.max(0, cursorOffset);
|
|
988
995
|
for (let i = 0; i < runs.length; i += 1) {
|
|
989
996
|
const run = runs[i];
|
|
990
|
-
const
|
|
991
|
-
const runLen = segs.length;
|
|
997
|
+
const runLen = run.type === "text" ? Array.from(graphemeSegments(run.text)).length : 1;
|
|
992
998
|
if (remaining === 0) {
|
|
993
999
|
right.push(run, ...runs.slice(i + 1));
|
|
994
1000
|
return [left, right];
|
|
@@ -998,6 +1004,12 @@ export function createRuntimeFromRegistry(registry) {
|
|
|
998
1004
|
remaining -= runLen;
|
|
999
1005
|
continue;
|
|
1000
1006
|
}
|
|
1007
|
+
if (run.type !== "text") {
|
|
1008
|
+
// Atom runs cannot be split; the only valid split positions are 0/1.
|
|
1009
|
+
right.push(run, ...runs.slice(i + 1));
|
|
1010
|
+
return [left, right];
|
|
1011
|
+
}
|
|
1012
|
+
const segs = Array.from(graphemeSegments(run.text));
|
|
1001
1013
|
const leftText = segs
|
|
1002
1014
|
.slice(0, remaining)
|
|
1003
1015
|
.map((s) => s.segment)
|
|
@@ -1052,11 +1064,11 @@ export function createRuntimeFromRegistry(registry) {
|
|
|
1052
1064
|
}
|
|
1053
1065
|
let remaining = index;
|
|
1054
1066
|
for (const run of runs) {
|
|
1055
|
-
const
|
|
1056
|
-
if (remaining <
|
|
1067
|
+
const runLen = run.type === "text" ? Array.from(graphemeSegments(run.text)).length : 1;
|
|
1068
|
+
if (remaining < runLen) {
|
|
1057
1069
|
return run.marks;
|
|
1058
1070
|
}
|
|
1059
|
-
remaining -=
|
|
1071
|
+
remaining -= runLen;
|
|
1060
1072
|
}
|
|
1061
1073
|
return null;
|
|
1062
1074
|
}
|
|
@@ -1112,12 +1124,16 @@ export function createRuntimeFromRegistry(registry) {
|
|
|
1112
1124
|
function normalizeRuns(runs) {
|
|
1113
1125
|
const next = [];
|
|
1114
1126
|
for (const run of runs) {
|
|
1115
|
-
if (!run.text) {
|
|
1116
|
-
continue;
|
|
1117
|
-
}
|
|
1118
1127
|
const prev = next[next.length - 1];
|
|
1119
|
-
if (
|
|
1120
|
-
|
|
1128
|
+
if (run.type === "text") {
|
|
1129
|
+
if (!run.text) {
|
|
1130
|
+
continue;
|
|
1131
|
+
}
|
|
1132
|
+
if (prev && prev.type === "text" && marksEqual(prev.marks, run.marks)) {
|
|
1133
|
+
prev.text += run.text;
|
|
1134
|
+
continue;
|
|
1135
|
+
}
|
|
1136
|
+
next.push(run);
|
|
1121
1137
|
continue;
|
|
1122
1138
|
}
|
|
1123
1139
|
next.push(run);
|
|
@@ -1168,9 +1184,17 @@ export function createRuntimeFromRegistry(registry) {
|
|
|
1168
1184
|
openMarks = openMarks.slice(0, common);
|
|
1169
1185
|
openFrom(marks, common);
|
|
1170
1186
|
openMarks = marks;
|
|
1171
|
-
if (run.text) {
|
|
1172
|
-
|
|
1187
|
+
if (run.type === "text") {
|
|
1188
|
+
if (run.text) {
|
|
1189
|
+
currentChildren().push({ type: "text", text: run.text });
|
|
1190
|
+
}
|
|
1191
|
+
continue;
|
|
1173
1192
|
}
|
|
1193
|
+
currentChildren().push({
|
|
1194
|
+
type: "inline-atom",
|
|
1195
|
+
kind: run.atom.kind,
|
|
1196
|
+
data: run.atom.data,
|
|
1197
|
+
});
|
|
1174
1198
|
}
|
|
1175
1199
|
closeTo(0);
|
|
1176
1200
|
return root;
|
|
@@ -1501,6 +1525,10 @@ export function createRuntimeFromRegistry(registry) {
|
|
|
1501
1525
|
const splitRunsOnNewlines = (runs) => {
|
|
1502
1526
|
const split = [];
|
|
1503
1527
|
for (const run of runs) {
|
|
1528
|
+
if (run.type !== "text") {
|
|
1529
|
+
split.push(run);
|
|
1530
|
+
continue;
|
|
1531
|
+
}
|
|
1504
1532
|
if (!run.text.includes("\n")) {
|
|
1505
1533
|
split.push(run);
|
|
1506
1534
|
continue;
|
|
@@ -1542,7 +1570,7 @@ export function createRuntimeFromRegistry(registry) {
|
|
|
1542
1570
|
continue;
|
|
1543
1571
|
}
|
|
1544
1572
|
const updatedSelected = splitRunsOnNewlines(selected).map((run) => {
|
|
1545
|
-
const isNewline = run.text === "\n";
|
|
1573
|
+
const isNewline = run.type === "text" && run.text === "\n";
|
|
1546
1574
|
const nextMarks = canUnwrap
|
|
1547
1575
|
? removeMark(run.marks)
|
|
1548
1576
|
: isNewline
|
|
@@ -1675,7 +1703,7 @@ export function createRuntimeFromRegistry(registry) {
|
|
|
1675
1703
|
function runsToHtml(runs) {
|
|
1676
1704
|
let html = "";
|
|
1677
1705
|
for (const run of runs) {
|
|
1678
|
-
let content = escapeHtml(run.text);
|
|
1706
|
+
let content = run.type === "text" ? escapeHtml(run.text) : escapeHtml(" ");
|
|
1679
1707
|
// Apply marks in reverse order so outer marks wrap inner marks
|
|
1680
1708
|
const sortedMarks = [...run.marks].reverse();
|
|
1681
1709
|
for (const mark of sortedMarks) {
|
|
@@ -1753,14 +1781,19 @@ export function createRuntimeFromRegistry(registry) {
|
|
|
1753
1781
|
}
|
|
1754
1782
|
}
|
|
1755
1783
|
// Extract plain text to check for list patterns
|
|
1756
|
-
const plainText = runs
|
|
1784
|
+
const plainText = runs
|
|
1785
|
+
.map((r) => (r.type === "text" ? r.text : " "))
|
|
1786
|
+
.join("");
|
|
1757
1787
|
const listMatch = plainText.match(/^(\s*)([-*+]|\d+\.)( )(.*)$/);
|
|
1758
1788
|
// Determine the HTML content - strip list prefix if it's a list line
|
|
1759
1789
|
let lineHtml;
|
|
1760
1790
|
if (listMatch && !wrapperKind) {
|
|
1761
1791
|
// For list lines, only include the content after the prefix
|
|
1762
|
-
const prefixLength = listMatch[1]
|
|
1763
|
-
const contentRuns = sliceRuns(runs, prefixLength, runs.reduce((sum, r) => sum +
|
|
1792
|
+
const prefixLength = Array.from(graphemeSegments(`${listMatch[1]}${listMatch[2]}${listMatch[3]}`)).length;
|
|
1793
|
+
const contentRuns = sliceRuns(runs, prefixLength, runs.reduce((sum, r) => sum +
|
|
1794
|
+
(r.type === "text"
|
|
1795
|
+
? Array.from(graphemeSegments(r.text)).length
|
|
1796
|
+
: 1), 0)).selected;
|
|
1764
1797
|
lineHtml = runsToHtml(normalizeRuns(contentRuns));
|
|
1765
1798
|
}
|
|
1766
1799
|
else {
|
|
@@ -5,6 +5,12 @@ import type { SelectionRect } from "./selection/selection-geometry";
|
|
|
5
5
|
type EngineOptions = {
|
|
6
6
|
container: HTMLElement;
|
|
7
7
|
contentRoot?: HTMLElement;
|
|
8
|
+
/**
|
|
9
|
+
* Optional external root for extension UI (popovers, scrollbars, etc).
|
|
10
|
+
* When provided, Cake portals UI into this element and will not create/append
|
|
11
|
+
* an internal extensions overlay inside the scroll container.
|
|
12
|
+
*/
|
|
13
|
+
extensionsRoot?: HTMLElement;
|
|
8
14
|
value: string;
|
|
9
15
|
selection?: Selection;
|
|
10
16
|
extensions?: CakeExtension[];
|
|
@@ -34,6 +40,7 @@ export declare class CakeEditor {
|
|
|
34
40
|
private normalizeInlineFns;
|
|
35
41
|
private onEditFns;
|
|
36
42
|
private keybindings;
|
|
43
|
+
private keyDownInterceptors;
|
|
37
44
|
private onPasteTextHandlers;
|
|
38
45
|
private domInlineRenderers;
|
|
39
46
|
private domBlockRenderers;
|
|
@@ -125,6 +132,18 @@ export declare class CakeEditor {
|
|
|
125
132
|
registerOnEdit(fn: (command: EditCommand, state: RuntimeState) => EditResult | EditCommand | null): () => void;
|
|
126
133
|
registerOnPasteText(fn: (text: string, state: RuntimeState) => EditCommand | null): () => void;
|
|
127
134
|
registerKeybindings(bindings: KeyBinding[]): () => void;
|
|
135
|
+
/**
|
|
136
|
+
* Register an early keydown interceptor.
|
|
137
|
+
*
|
|
138
|
+
* If the interceptor returns true, the editor will treat the event as handled
|
|
139
|
+
* and will not run its built-in keydown logic for that event.
|
|
140
|
+
*/
|
|
141
|
+
registerKeyDownInterceptor(fn: (event: KeyboardEvent) => boolean): () => void;
|
|
142
|
+
/**
|
|
143
|
+
* Suppress the next `beforeinput` event (if any) that may follow a handled
|
|
144
|
+
* keydown. This avoids double-applying edits for keys like Enter.
|
|
145
|
+
*/
|
|
146
|
+
suppressNextBeforeInput(): void;
|
|
128
147
|
registerInlineRenderer(fn: DomInlineRenderer): () => void;
|
|
129
148
|
registerBlockRenderer(fn: DomBlockRenderer): () => void;
|
|
130
149
|
registerUI(component: CakeUIComponent): () => void;
|
|
@@ -155,11 +174,34 @@ export declare class CakeEditor {
|
|
|
155
174
|
getFocusRect(): SelectionRect | null;
|
|
156
175
|
getContainer(): HTMLElement;
|
|
157
176
|
getContentRoot(): HTMLElement | null;
|
|
177
|
+
toOverlayRect(domRect: DOMRect): {
|
|
178
|
+
top: number;
|
|
179
|
+
left: number;
|
|
180
|
+
width: number;
|
|
181
|
+
height: number;
|
|
182
|
+
};
|
|
183
|
+
getCursorOverlayRect(): {
|
|
184
|
+
top: number;
|
|
185
|
+
left: number;
|
|
186
|
+
width: number;
|
|
187
|
+
height: number;
|
|
188
|
+
} | null;
|
|
189
|
+
getSelectionOverlayRects(): Array<{
|
|
190
|
+
top: number;
|
|
191
|
+
left: number;
|
|
192
|
+
width: number;
|
|
193
|
+
height: number;
|
|
194
|
+
}>;
|
|
158
195
|
getLines(): import("./selection/selection-layout").LineInfo[];
|
|
159
|
-
getOverlayRoot():
|
|
196
|
+
getOverlayRoot(): HTMLElement;
|
|
160
197
|
getUIComponents(): CakeUIComponent[];
|
|
161
198
|
onChange(callback: (value: string, selection: Selection) => void): () => void;
|
|
162
199
|
onSelectionChange(callback: (selection: Selection) => void): () => void;
|
|
200
|
+
/**
|
|
201
|
+
* Force a one-off selection sync from the current DOM selection.
|
|
202
|
+
* Useful for extensions that programmatically adjust the DOM selection.
|
|
203
|
+
*/
|
|
204
|
+
syncSelectionFromDOM(): void;
|
|
163
205
|
syncPlaceholder(): void;
|
|
164
206
|
insertText(text: string): void;
|
|
165
207
|
replaceText(oldText: string, newText: string): void;
|
|
@@ -259,7 +301,6 @@ export declare class CakeEditor {
|
|
|
259
301
|
private ensureOverlayRoot;
|
|
260
302
|
private selectionRectsEqual;
|
|
261
303
|
private ensureExtensionsRoot;
|
|
262
|
-
private updateExtensionsOverlayPosition;
|
|
263
304
|
private updateSelectionOverlay;
|
|
264
305
|
private syncSelectionRects;
|
|
265
306
|
private updateCaret;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cake-editor.d.ts","sourceRoot":"","sources":["../../../src/cake/editor/cake-editor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cake-editor.d.ts","sourceRoot":"","sources":["../../../src/cake/editor/cake-editor.ts"],"names":[],"mappings":"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"}
|
|
@@ -69,6 +69,7 @@ export class CakeEditor {
|
|
|
69
69
|
this.normalizeInlineFns = [];
|
|
70
70
|
this.onEditFns = [];
|
|
71
71
|
this.keybindings = [];
|
|
72
|
+
this.keyDownInterceptors = [];
|
|
72
73
|
this.onPasteTextHandlers = [];
|
|
73
74
|
this.domInlineRenderers = [];
|
|
74
75
|
this.domBlockRenderers = [];
|
|
@@ -153,6 +154,7 @@ export class CakeEditor {
|
|
|
153
154
|
this.lastTouchTime = 0;
|
|
154
155
|
this.container = options.container;
|
|
155
156
|
this.contentRoot = options.contentRoot ?? null;
|
|
157
|
+
this.extensionsRoot = options.extensionsRoot ?? null;
|
|
156
158
|
this.onChangeOption = options.onChange;
|
|
157
159
|
this.onSelectionChangeOption = options.onSelectionChange;
|
|
158
160
|
this.readOnly = options.readOnly ?? false;
|
|
@@ -258,6 +260,26 @@ export class CakeEditor {
|
|
|
258
260
|
}
|
|
259
261
|
};
|
|
260
262
|
}
|
|
263
|
+
/**
|
|
264
|
+
* Register an early keydown interceptor.
|
|
265
|
+
*
|
|
266
|
+
* If the interceptor returns true, the editor will treat the event as handled
|
|
267
|
+
* and will not run its built-in keydown logic for that event.
|
|
268
|
+
*/
|
|
269
|
+
registerKeyDownInterceptor(fn) {
|
|
270
|
+
this.keyDownInterceptors.push(fn);
|
|
271
|
+
return () => removeFromArray(this.keyDownInterceptors, fn);
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Suppress the next `beforeinput` event (if any) that may follow a handled
|
|
275
|
+
* keydown. This avoids double-applying edits for keys like Enter.
|
|
276
|
+
*/
|
|
277
|
+
suppressNextBeforeInput() {
|
|
278
|
+
this.keydownHandledBeforeInput = true;
|
|
279
|
+
queueMicrotask(() => {
|
|
280
|
+
this.keydownHandledBeforeInput = false;
|
|
281
|
+
});
|
|
282
|
+
}
|
|
261
283
|
registerInlineRenderer(fn) {
|
|
262
284
|
this.domInlineRenderers.push(fn);
|
|
263
285
|
return () => removeFromArray(this.domInlineRenderers, fn);
|
|
@@ -495,6 +517,87 @@ export class CakeEditor {
|
|
|
495
517
|
getContentRoot() {
|
|
496
518
|
return this.contentRoot;
|
|
497
519
|
}
|
|
520
|
+
toOverlayRect(domRect) {
|
|
521
|
+
const overlayRoot = this.ensureExtensionsRoot();
|
|
522
|
+
const overlayRect = overlayRoot.getBoundingClientRect();
|
|
523
|
+
const borderTop = overlayRoot.clientTop;
|
|
524
|
+
const borderLeft = overlayRoot.clientLeft;
|
|
525
|
+
const width = domRect.width || domRect.right - domRect.left;
|
|
526
|
+
const height = domRect.height || domRect.bottom - domRect.top;
|
|
527
|
+
return {
|
|
528
|
+
top: domRect.top - overlayRect.top - borderTop,
|
|
529
|
+
left: domRect.left - overlayRect.left - borderLeft,
|
|
530
|
+
width,
|
|
531
|
+
height,
|
|
532
|
+
};
|
|
533
|
+
}
|
|
534
|
+
getCursorOverlayRect() {
|
|
535
|
+
if (!this.contentRoot) {
|
|
536
|
+
return null;
|
|
537
|
+
}
|
|
538
|
+
const lines = getDocLines(this.state.doc);
|
|
539
|
+
const geometry = getSelectionGeometry({
|
|
540
|
+
root: this.contentRoot,
|
|
541
|
+
container: this.container,
|
|
542
|
+
docLines: lines,
|
|
543
|
+
selection: this.state.selection,
|
|
544
|
+
});
|
|
545
|
+
const focus = geometry.caretRect ?? geometry.focusRect;
|
|
546
|
+
if (!focus) {
|
|
547
|
+
return null;
|
|
548
|
+
}
|
|
549
|
+
const overlayRoot = this.ensureExtensionsRoot();
|
|
550
|
+
const overlayRect = overlayRoot.getBoundingClientRect();
|
|
551
|
+
const borderTop = overlayRoot.clientTop;
|
|
552
|
+
const borderLeft = overlayRoot.clientLeft;
|
|
553
|
+
const containerRect = this.container.getBoundingClientRect();
|
|
554
|
+
const top = focus.top -
|
|
555
|
+
this.container.scrollTop +
|
|
556
|
+
(containerRect.top - overlayRect.top) -
|
|
557
|
+
borderTop;
|
|
558
|
+
const left = focus.left -
|
|
559
|
+
this.container.scrollLeft +
|
|
560
|
+
(containerRect.left - overlayRect.left) -
|
|
561
|
+
borderLeft;
|
|
562
|
+
return {
|
|
563
|
+
top,
|
|
564
|
+
left,
|
|
565
|
+
width: focus.width,
|
|
566
|
+
height: focus.height,
|
|
567
|
+
};
|
|
568
|
+
}
|
|
569
|
+
getSelectionOverlayRects() {
|
|
570
|
+
if (!this.contentRoot) {
|
|
571
|
+
return [];
|
|
572
|
+
}
|
|
573
|
+
const lines = getDocLines(this.state.doc);
|
|
574
|
+
const geometry = getSelectionGeometry({
|
|
575
|
+
root: this.contentRoot,
|
|
576
|
+
container: this.container,
|
|
577
|
+
docLines: lines,
|
|
578
|
+
selection: this.state.selection,
|
|
579
|
+
});
|
|
580
|
+
if (geometry.selectionRects.length === 0) {
|
|
581
|
+
return [];
|
|
582
|
+
}
|
|
583
|
+
const overlayRoot = this.ensureExtensionsRoot();
|
|
584
|
+
const overlayRect = overlayRoot.getBoundingClientRect();
|
|
585
|
+
const borderTop = overlayRoot.clientTop;
|
|
586
|
+
const borderLeft = overlayRoot.clientLeft;
|
|
587
|
+
const containerRect = this.container.getBoundingClientRect();
|
|
588
|
+
return geometry.selectionRects.map((rect) => ({
|
|
589
|
+
top: rect.top -
|
|
590
|
+
this.container.scrollTop +
|
|
591
|
+
(containerRect.top - overlayRect.top) -
|
|
592
|
+
borderTop,
|
|
593
|
+
left: rect.left -
|
|
594
|
+
this.container.scrollLeft +
|
|
595
|
+
(containerRect.left - overlayRect.left) -
|
|
596
|
+
borderLeft,
|
|
597
|
+
width: rect.width,
|
|
598
|
+
height: rect.height,
|
|
599
|
+
}));
|
|
600
|
+
}
|
|
498
601
|
getLines() {
|
|
499
602
|
return getDocLines(this.state.doc);
|
|
500
603
|
}
|
|
@@ -522,6 +625,13 @@ export class CakeEditor {
|
|
|
522
625
|
}
|
|
523
626
|
};
|
|
524
627
|
}
|
|
628
|
+
/**
|
|
629
|
+
* Force a one-off selection sync from the current DOM selection.
|
|
630
|
+
* Useful for extensions that programmatically adjust the DOM selection.
|
|
631
|
+
*/
|
|
632
|
+
syncSelectionFromDOM() {
|
|
633
|
+
this.syncSelectionFromDom();
|
|
634
|
+
}
|
|
525
635
|
// Placeholder text is provided by the caller via the container's
|
|
526
636
|
// `data-placeholder` attribute (set by the React wrapper).
|
|
527
637
|
// The engine owns the placeholder element so it survives internal renders.
|
|
@@ -763,7 +873,6 @@ export class CakeEditor {
|
|
|
763
873
|
this.updateContentRootAttributes();
|
|
764
874
|
if (!this.overlayRoot) {
|
|
765
875
|
const overlay = this.ensureOverlayRoot();
|
|
766
|
-
const extensionsRoot = this.extensionsRoot;
|
|
767
876
|
const existingContainerChildren = Array.from(this.container.childNodes);
|
|
768
877
|
const isCakeManagedContainerChild = (node) => node instanceof Element &&
|
|
769
878
|
(node.classList.contains("cake-content") ||
|
|
@@ -775,12 +884,9 @@ export class CakeEditor {
|
|
|
775
884
|
// otherwise replace container children.
|
|
776
885
|
if (this.contentRoot.parentElement === this.container) {
|
|
777
886
|
this.container.append(overlay);
|
|
778
|
-
if (extensionsRoot && !extensionsRoot.isConnected) {
|
|
779
|
-
this.container.append(extensionsRoot);
|
|
780
|
-
}
|
|
781
887
|
}
|
|
782
888
|
else {
|
|
783
|
-
this.container.replaceChildren(this.contentRoot, overlay, ...
|
|
889
|
+
this.container.replaceChildren(this.contentRoot, overlay, ...preservedContainerChildren);
|
|
784
890
|
}
|
|
785
891
|
this.attachDragListeners();
|
|
786
892
|
}
|
|
@@ -1316,6 +1422,11 @@ export class CakeEditor {
|
|
|
1316
1422
|
if (!this.isEventTargetInContentRoot(event.target)) {
|
|
1317
1423
|
return;
|
|
1318
1424
|
}
|
|
1425
|
+
for (const interceptor of this.keyDownInterceptors) {
|
|
1426
|
+
if (interceptor(event)) {
|
|
1427
|
+
return;
|
|
1428
|
+
}
|
|
1429
|
+
}
|
|
1319
1430
|
const mac = isMacPlatform();
|
|
1320
1431
|
const cmdOrCtrl = mac ? event.metaKey : event.ctrlKey;
|
|
1321
1432
|
if (cmdOrCtrl && event.key.toLowerCase() === "a") {
|
|
@@ -2826,7 +2937,6 @@ export class CakeEditor {
|
|
|
2826
2937
|
}
|
|
2827
2938
|
handleScroll() {
|
|
2828
2939
|
this.scheduleOverlayUpdate();
|
|
2829
|
-
this.updateExtensionsOverlayPosition();
|
|
2830
2940
|
}
|
|
2831
2941
|
handleResize() {
|
|
2832
2942
|
this.scheduleOverlayUpdate();
|
|
@@ -2840,7 +2950,6 @@ export class CakeEditor {
|
|
|
2840
2950
|
}
|
|
2841
2951
|
this.overlayUpdateId = window.requestAnimationFrame(() => {
|
|
2842
2952
|
this.overlayUpdateId = null;
|
|
2843
|
-
this.updateExtensionsOverlayPosition();
|
|
2844
2953
|
this.updateSelectionOverlay();
|
|
2845
2954
|
});
|
|
2846
2955
|
}
|
|
@@ -2917,23 +3026,12 @@ export class CakeEditor {
|
|
|
2917
3026
|
root.style.overflow = "hidden";
|
|
2918
3027
|
this.extensionsRoot = root;
|
|
2919
3028
|
if (this.overlayRoot && !root.isConnected) {
|
|
3029
|
+
// Fallback for non-React consumers. Prefer passing `extensionsRoot` so the
|
|
3030
|
+
// overlay can live outside the scroll container (avoids rubber-banding).
|
|
2920
3031
|
this.container.append(root);
|
|
2921
3032
|
}
|
|
2922
3033
|
return root;
|
|
2923
3034
|
}
|
|
2924
|
-
updateExtensionsOverlayPosition() {
|
|
2925
|
-
if (!this.extensionsRoot) {
|
|
2926
|
-
return;
|
|
2927
|
-
}
|
|
2928
|
-
// Clamp to non-negative to prevent movement during elastic bounce/overscroll
|
|
2929
|
-
const scrollTop = Math.max(0, this.container.scrollTop);
|
|
2930
|
-
const scrollLeft = Math.max(0, this.container.scrollLeft);
|
|
2931
|
-
if (scrollTop === 0 && scrollLeft === 0) {
|
|
2932
|
-
this.extensionsRoot.style.transform = "";
|
|
2933
|
-
return;
|
|
2934
|
-
}
|
|
2935
|
-
this.extensionsRoot.style.transform = `translate(${scrollLeft}px, ${scrollTop}px)`;
|
|
2936
|
-
}
|
|
2937
3035
|
updateSelectionOverlay() {
|
|
2938
3036
|
if (this.isComposing) {
|
|
2939
3037
|
return;
|
|
@@ -3064,6 +3162,20 @@ export class CakeEditor {
|
|
|
3064
3162
|
if (this.isComposing) {
|
|
3065
3163
|
return;
|
|
3066
3164
|
}
|
|
3165
|
+
const container = this.container;
|
|
3166
|
+
if (container.clientHeight <= 0) {
|
|
3167
|
+
return;
|
|
3168
|
+
}
|
|
3169
|
+
const maxScrollTop = Math.max(0, container.scrollHeight - container.clientHeight);
|
|
3170
|
+
const selection = this.state.selection;
|
|
3171
|
+
const isEndOfDoc = selection.start === selection.end &&
|
|
3172
|
+
selection.end === this.state.map.cursorLength;
|
|
3173
|
+
if (isEndOfDoc) {
|
|
3174
|
+
if (Math.abs(maxScrollTop - container.scrollTop) > 0.5) {
|
|
3175
|
+
container.scrollTop = maxScrollTop;
|
|
3176
|
+
}
|
|
3177
|
+
return;
|
|
3178
|
+
}
|
|
3067
3179
|
if (!this.contentRoot) {
|
|
3068
3180
|
return;
|
|
3069
3181
|
}
|
|
@@ -3071,11 +3183,7 @@ export class CakeEditor {
|
|
|
3071
3183
|
if (!caret) {
|
|
3072
3184
|
return;
|
|
3073
3185
|
}
|
|
3074
|
-
const
|
|
3075
|
-
if (container.clientHeight <= 0) {
|
|
3076
|
-
return;
|
|
3077
|
-
}
|
|
3078
|
-
const styles = window.getComputedStyle(this.contentRoot);
|
|
3186
|
+
const styles = window.getComputedStyle(container);
|
|
3079
3187
|
const paddingTop = Number.parseFloat(styles.paddingTop) || 0;
|
|
3080
3188
|
const paddingBottom = Number.parseFloat(styles.paddingBottom) || 0;
|
|
3081
3189
|
const viewportTop = container.scrollTop;
|
|
@@ -3092,7 +3200,6 @@ export class CakeEditor {
|
|
|
3092
3200
|
else {
|
|
3093
3201
|
return;
|
|
3094
3202
|
}
|
|
3095
|
-
const maxScrollTop = Math.max(0, container.scrollHeight - container.clientHeight);
|
|
3096
3203
|
const clamped = Math.max(0, Math.min(nextScrollTop, maxScrollTop));
|
|
3097
3204
|
if (Math.abs(clamped - container.scrollTop) > 0.5) {
|
|
3098
3205
|
container.scrollTop = clamped;
|
|
@@ -10,7 +10,8 @@ import { plainTextListExtension } from "./list/list";
|
|
|
10
10
|
import { scrollbarExtension } from "./scrollbar";
|
|
11
11
|
import { strikethroughExtension } from "./strikethrough/strikethrough";
|
|
12
12
|
import { underlineExtension } from "./underline/underline";
|
|
13
|
-
|
|
13
|
+
import { mentionExtension } from "./mention/mention";
|
|
14
|
+
export { boldExtension, combinedEmphasisExtension, linkExtension, blockquoteExtension, italicExtension, headingExtension, imageExtension, plainTextListExtension, scrollbarExtension, strikethroughExtension, underlineExtension, mentionExtension, };
|
|
14
15
|
export declare const bundledExtensionsWithoutImage: import("../..").CakeExtension[];
|
|
15
16
|
export declare const bundledExtensions: import("../..").CakeExtension[];
|
|
16
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cake/extensions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cake/extensions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EACL,aAAa,EACb,yBAAyB,EACzB,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,GACjB,CAAC;AAEF,eAAO,MAAM,6BAA6B,iCAUzC,CAAC;AAEF,eAAO,MAAM,iBAAiB,iCAG7B,CAAC"}
|
|
@@ -9,7 +9,8 @@ import { plainTextListExtension } from "./list/list";
|
|
|
9
9
|
import { scrollbarExtension } from "./scrollbar";
|
|
10
10
|
import { strikethroughExtension } from "./strikethrough/strikethrough";
|
|
11
11
|
import { underlineExtension } from "./underline/underline";
|
|
12
|
-
|
|
12
|
+
import { mentionExtension } from "./mention/mention";
|
|
13
|
+
export { boldExtension, combinedEmphasisExtension, linkExtension, blockquoteExtension, italicExtension, headingExtension, imageExtension, plainTextListExtension, scrollbarExtension, strikethroughExtension, underlineExtension, mentionExtension, };
|
|
13
14
|
export const bundledExtensionsWithoutImage = [
|
|
14
15
|
blockquoteExtension,
|
|
15
16
|
headingExtension,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link-popover.d.ts","sourceRoot":"","sources":["../../../../src/cake/extensions/link/link-popover.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"link-popover.d.ts","sourceRoot":"","sources":["../../../../src/cake/extensions/link/link-popover.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AA0DlD,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,MAAM,GACP,EAAE;IACD,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B,kDAkXA"}
|
|
@@ -32,20 +32,11 @@ function cx(...parts) {
|
|
|
32
32
|
return parts.filter(Boolean).join(" ");
|
|
33
33
|
}
|
|
34
34
|
export function CakeLinkPopover({ editor, styles, }) {
|
|
35
|
-
const container = editor.getContainer();
|
|
36
35
|
const contentRoot = editor.getContentRoot();
|
|
37
36
|
if (!contentRoot) {
|
|
38
37
|
return null;
|
|
39
38
|
}
|
|
40
|
-
const toOverlayRect = useCallback((rect) =>
|
|
41
|
-
const containerRect = container.getBoundingClientRect();
|
|
42
|
-
return {
|
|
43
|
-
top: rect.top - containerRect.top,
|
|
44
|
-
left: rect.left - containerRect.left,
|
|
45
|
-
width: rect.width,
|
|
46
|
-
height: rect.height,
|
|
47
|
-
};
|
|
48
|
-
}, [container]);
|
|
39
|
+
const toOverlayRect = useCallback((rect) => editor.toOverlayRect(rect), [editor]);
|
|
49
40
|
const getSelection = useCallback(() => {
|
|
50
41
|
const selection = editor.getSelection();
|
|
51
42
|
const focus = selection.start === selection.end
|
|
@@ -200,13 +191,14 @@ export function CakeLinkPopover({ editor, styles, }) {
|
|
|
200
191
|
if (state.status !== "open") {
|
|
201
192
|
return;
|
|
202
193
|
}
|
|
194
|
+
const container = editor.getContainer();
|
|
203
195
|
container.addEventListener("scroll", close, { passive: true });
|
|
204
196
|
window.addEventListener("resize", reposition);
|
|
205
197
|
return () => {
|
|
206
198
|
container.removeEventListener("scroll", close);
|
|
207
199
|
window.removeEventListener("resize", reposition);
|
|
208
200
|
};
|
|
209
|
-
}, [close,
|
|
201
|
+
}, [close, editor, reposition, state.status]);
|
|
210
202
|
const handleMouseDown = useCallback((event) => {
|
|
211
203
|
event.stopPropagation();
|
|
212
204
|
if (event.target instanceof HTMLInputElement) {
|
|
@@ -297,5 +289,5 @@ export function CakeLinkPopover({ editor, styles, }) {
|
|
|
297
289
|
}
|
|
298
290
|
return { ...current, draftUrl: event.target.value };
|
|
299
291
|
});
|
|
300
|
-
}, onKeyDown: handleInputKeyDown, placeholder: "https://" }), _jsx("button", { type: "submit", className: cx("cake-link-save", styles?.saveButton), children: "Save" }), _jsx("button", { type: "button", className: cx("cake-link-cancel", styles?.cancelButton), onClick: handleCancel, children: "Cancel" })] })) : (_jsxs(_Fragment, { children: [_jsx("div", { className: cx("cake-link-url", styles?.url),
|
|
292
|
+
}, onKeyDown: handleInputKeyDown, placeholder: "https://" }), _jsx("button", { type: "submit", className: cx("cake-link-save", styles?.saveButton), children: "Save" }), _jsx("button", { type: "button", className: cx("cake-link-cancel", styles?.cancelButton), onClick: handleCancel, children: "Cancel" })] })) : (_jsxs(_Fragment, { children: [_jsx("div", { className: cx("cake-link-url", styles?.url), children: displayUrl }), _jsxs("div", { className: cx("cake-link-actions", styles?.actions), children: [_jsx("button", { type: "button", className: cx("cake-link-icon-action", styles?.iconButton), onClick: handleEdit, title: "Edit link", "aria-label": "Edit link", children: _jsx(Pencil, { className: cx("cake-link-icon", styles?.icon) }) }), _jsx("button", { type: "button", className: cx("cake-link-icon-action", styles?.iconButton), onClick: handleOpen, title: "Open link", "aria-label": "Open link", children: _jsx(ExternalLink, { className: cx("cake-link-icon", styles?.icon) }) }), _jsx("button", { type: "button", className: cx("cake-link-icon-action", styles?.iconButton), onClick: handleUnlink, title: "Remove link", "aria-label": "Remove link", children: _jsx(Unlink, { className: cx("cake-link-icon", styles?.icon) }) })] })] })) }));
|
|
301
293
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cake/extensions/mention/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC"}
|