@blankdotpage/cake 0.1.79-rc.3 → 0.1.79-rc.4
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 +432 -63
- package/dist/cake/editor/cake-editor.d.ts +0 -5
- package/dist/cake/editor/cake-editor.d.ts.map +1 -1
- package/dist/cake/editor/cake-editor.js +4 -100
- package/dist/cake/extensions/bold/bold.d.ts.map +1 -1
- package/dist/cake/extensions/bold/bold.js +14 -3
- package/dist/cake/extensions/heading/heading.d.ts.map +1 -1
- package/dist/cake/extensions/heading/heading.js +1 -1
- package/dist/cake/extensions/italic/italic.d.ts +7 -1
- package/dist/cake/extensions/italic/italic.d.ts.map +1 -1
- package/dist/cake/extensions/italic/italic.js +91 -21
- package/dist/cake/extensions/list/list.d.ts.map +1 -1
- package/dist/cake/extensions/list/list.js +46 -56
- package/dist/cake/react/index.d.ts +1 -0
- package/dist/cake/react/index.d.ts.map +1 -1
- package/dist/cake/react/index.js +5 -1
- package/package.json +1 -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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"}
|
|
@@ -19,6 +19,7 @@ export function isApplyEditCommand(command) {
|
|
|
19
19
|
command.type === "delete-forward");
|
|
20
20
|
}
|
|
21
21
|
const defaultSelection = { start: 0, end: 0, affinity: "forward" };
|
|
22
|
+
const WORD_CHARACTER_PATTERN = /[\p{L}\p{N}_]/u;
|
|
22
23
|
function removeFromArray(arr, value) {
|
|
23
24
|
const index = arr.indexOf(value);
|
|
24
25
|
if (index === -1) {
|
|
@@ -359,13 +360,17 @@ export function createRuntimeFromRegistry(registry) {
|
|
|
359
360
|
}
|
|
360
361
|
content.push(normalizedInline);
|
|
361
362
|
}
|
|
363
|
+
const mergedContent = mergeAdjacentInlines(content);
|
|
364
|
+
if (mergedContent !== content) {
|
|
365
|
+
changed = true;
|
|
366
|
+
}
|
|
362
367
|
if (!changed) {
|
|
363
368
|
normalizedBlockCache.set(block, next);
|
|
364
369
|
return next;
|
|
365
370
|
}
|
|
366
371
|
const normalized = {
|
|
367
372
|
...next,
|
|
368
|
-
content,
|
|
373
|
+
content: mergedContent,
|
|
369
374
|
};
|
|
370
375
|
normalizedBlockCache.set(block, normalized);
|
|
371
376
|
return normalized;
|
|
@@ -421,17 +426,52 @@ export function createRuntimeFromRegistry(registry) {
|
|
|
421
426
|
}
|
|
422
427
|
let next = pre;
|
|
423
428
|
if (next.type === "inline-wrapper") {
|
|
429
|
+
const children = mergeAdjacentInlines(next.children
|
|
430
|
+
.map((child) => normalizeInline(child))
|
|
431
|
+
.filter((child) => child !== null));
|
|
424
432
|
next = {
|
|
425
433
|
...next,
|
|
426
|
-
children
|
|
427
|
-
.map((child) => normalizeInline(child))
|
|
428
|
-
.filter((child) => child !== null),
|
|
434
|
+
children,
|
|
429
435
|
};
|
|
430
436
|
}
|
|
431
437
|
const normalized = applyInlineNormalizers(next);
|
|
432
438
|
normalizedInlineCache.set(inline, normalized ?? removedInlineSentinel);
|
|
433
439
|
return normalized;
|
|
434
440
|
}
|
|
441
|
+
function mergeAdjacentInlines(inlines) {
|
|
442
|
+
if (inlines.length < 2) {
|
|
443
|
+
return inlines;
|
|
444
|
+
}
|
|
445
|
+
const merged = [];
|
|
446
|
+
let changed = false;
|
|
447
|
+
for (const inline of inlines) {
|
|
448
|
+
const previous = merged[merged.length - 1];
|
|
449
|
+
if (previous?.type === "text" && inline.type === "text") {
|
|
450
|
+
merged[merged.length - 1] = {
|
|
451
|
+
...previous,
|
|
452
|
+
text: previous.text + inline.text,
|
|
453
|
+
};
|
|
454
|
+
changed = true;
|
|
455
|
+
continue;
|
|
456
|
+
}
|
|
457
|
+
if (previous?.type === "inline-wrapper" &&
|
|
458
|
+
inline.type === "inline-wrapper" &&
|
|
459
|
+
previous.kind === inline.kind &&
|
|
460
|
+
stableStringify(previous.data) === stableStringify(inline.data)) {
|
|
461
|
+
merged[merged.length - 1] = {
|
|
462
|
+
...previous,
|
|
463
|
+
children: mergeAdjacentInlines([
|
|
464
|
+
...previous.children,
|
|
465
|
+
...inline.children,
|
|
466
|
+
]),
|
|
467
|
+
};
|
|
468
|
+
changed = true;
|
|
469
|
+
continue;
|
|
470
|
+
}
|
|
471
|
+
merged.push(inline);
|
|
472
|
+
}
|
|
473
|
+
return changed ? merged : inlines;
|
|
474
|
+
}
|
|
435
475
|
function createTopLevelBlockSegment(block) {
|
|
436
476
|
const serialized = serializeBlock(block);
|
|
437
477
|
return {
|
|
@@ -583,9 +623,15 @@ export function createRuntimeFromRegistry(registry) {
|
|
|
583
623
|
? previousSegmented
|
|
584
624
|
: undefined;
|
|
585
625
|
const segmented = buildSegmentedDocState(normalized, reusablePrevious);
|
|
626
|
+
const cursorLength = segmented.map.cursorLength;
|
|
627
|
+
const clampedSelection = {
|
|
628
|
+
...selection,
|
|
629
|
+
start: Math.max(0, Math.min(cursorLength, selection.start)),
|
|
630
|
+
end: Math.max(0, Math.min(cursorLength, selection.end)),
|
|
631
|
+
};
|
|
586
632
|
return {
|
|
587
633
|
source: segmented.source,
|
|
588
|
-
selection,
|
|
634
|
+
selection: normalizeSelection(clampedSelection),
|
|
589
635
|
map: segmented.map,
|
|
590
636
|
doc: normalized,
|
|
591
637
|
runtime: runtime,
|
|
@@ -737,7 +783,8 @@ export function createRuntimeFromRegistry(registry) {
|
|
|
737
783
|
previousState: useIncrementalSegmentedDerivation ? state : undefined,
|
|
738
784
|
});
|
|
739
785
|
const interimAffinity = structural.nextAffinity ?? "forward";
|
|
740
|
-
const
|
|
786
|
+
const interimCursor = Math.max(0, Math.min(interim.map.cursorLength, structural.nextCursor));
|
|
787
|
+
const caretSource = interim.map.cursorToSource(interimCursor, interimAffinity);
|
|
741
788
|
if (useIncrementalSegmentedDerivation) {
|
|
742
789
|
const caretCursor = interim.map.sourceToCursor(caretSource, interimAffinity);
|
|
743
790
|
return {
|
|
@@ -824,6 +871,27 @@ export function createRuntimeFromRegistry(registry) {
|
|
|
824
871
|
replaceText.length > 0 &&
|
|
825
872
|
range.start === range.end &&
|
|
826
873
|
textModel.getGraphemeAtCursor(range.start) === "\u200B";
|
|
874
|
+
if (command.type === "insert" && shouldReplacePlaceholder) {
|
|
875
|
+
const leadingWhitespace = replaceText.match(/^\s+/)?.[0] ?? "";
|
|
876
|
+
const around = marksAroundCursor(doc, range.start);
|
|
877
|
+
if (leadingWhitespace.length > 0) {
|
|
878
|
+
if (isMarksPrefix(around.left, around.right) &&
|
|
879
|
+
around.right.length > around.left.length) {
|
|
880
|
+
const whitespaceInsert = insertTextBeforePendingPlaceholderInDoc(doc, range.start, leadingWhitespace, around.left);
|
|
881
|
+
if (whitespaceInsert) {
|
|
882
|
+
const trailingText = replaceText.slice(leadingWhitespace.length);
|
|
883
|
+
if (trailingText.length === 0) {
|
|
884
|
+
return whitespaceInsert;
|
|
885
|
+
}
|
|
886
|
+
return applyStructuralEdit({ type: "insert", text: trailingText }, whitespaceInsert.doc, {
|
|
887
|
+
start: whitespaceInsert.nextCursor,
|
|
888
|
+
end: whitespaceInsert.nextCursor,
|
|
889
|
+
affinity: whitespaceInsert.nextAffinity,
|
|
890
|
+
});
|
|
891
|
+
}
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
}
|
|
827
895
|
const effectiveRange = shouldReplacePlaceholder
|
|
828
896
|
? { start: range.start, end: Math.min(docCursorLength, range.start + 1) }
|
|
829
897
|
: range;
|
|
@@ -1176,6 +1244,28 @@ export function createRuntimeFromRegistry(registry) {
|
|
|
1176
1244
|
}
|
|
1177
1245
|
return true;
|
|
1178
1246
|
}
|
|
1247
|
+
function removeMarkByKind(marks, kind) {
|
|
1248
|
+
let removed = false;
|
|
1249
|
+
return marks.filter((mark) => {
|
|
1250
|
+
if (!removed && mark.kind === kind) {
|
|
1251
|
+
removed = true;
|
|
1252
|
+
return false;
|
|
1253
|
+
}
|
|
1254
|
+
return true;
|
|
1255
|
+
});
|
|
1256
|
+
}
|
|
1257
|
+
function mergeMarksPreservingOrder(...groups) {
|
|
1258
|
+
const next = [];
|
|
1259
|
+
for (const group of groups) {
|
|
1260
|
+
for (const mark of group) {
|
|
1261
|
+
if (next.some((existing) => existing.key === mark.key)) {
|
|
1262
|
+
continue;
|
|
1263
|
+
}
|
|
1264
|
+
next.push(mark);
|
|
1265
|
+
}
|
|
1266
|
+
}
|
|
1267
|
+
return next;
|
|
1268
|
+
}
|
|
1179
1269
|
function sliceRuns(runs, startCursor, endCursor) {
|
|
1180
1270
|
const [left, rest] = splitRunsAt(runs, startCursor);
|
|
1181
1271
|
const [selected, right] = splitRunsAt(rest, Math.max(0, endCursor - startCursor));
|
|
@@ -1284,6 +1374,237 @@ export function createRuntimeFromRegistry(registry) {
|
|
|
1284
1374
|
const right = marksAtGraphemeIndex(runs, loc.offsetInLine);
|
|
1285
1375
|
return { left: left ?? [], right: right ?? [] };
|
|
1286
1376
|
}
|
|
1377
|
+
function createPendingPlaceholderStateAtCursor(state, cursorOffset, marks) {
|
|
1378
|
+
const textModel = getEditorTextModelForDoc(state.doc);
|
|
1379
|
+
const lines = textModel.getStructuralLines();
|
|
1380
|
+
const loc = textModel.resolveOffsetToLine(cursorOffset);
|
|
1381
|
+
const line = lines[loc.lineIndex];
|
|
1382
|
+
if (!line) {
|
|
1383
|
+
return null;
|
|
1384
|
+
}
|
|
1385
|
+
const block = getBlockAtPath(state.doc.blocks, line.path);
|
|
1386
|
+
if (!block || block.type !== "paragraph") {
|
|
1387
|
+
return null;
|
|
1388
|
+
}
|
|
1389
|
+
const placeholder = "\u200B";
|
|
1390
|
+
const runs = paragraphToRuns(block);
|
|
1391
|
+
const { before, after } = sliceRuns(runs, loc.offsetInLine, loc.offsetInLine);
|
|
1392
|
+
const mergedRuns = normalizeRuns([
|
|
1393
|
+
...before,
|
|
1394
|
+
{ type: "text", text: placeholder, marks },
|
|
1395
|
+
...after,
|
|
1396
|
+
]);
|
|
1397
|
+
const nextBlock = {
|
|
1398
|
+
...block,
|
|
1399
|
+
content: runsToInlines(mergedRuns),
|
|
1400
|
+
};
|
|
1401
|
+
const parentPath = line.path.slice(0, -1);
|
|
1402
|
+
const indexInParent = line.path[line.path.length - 1] ?? 0;
|
|
1403
|
+
const nextDoc = {
|
|
1404
|
+
...state.doc,
|
|
1405
|
+
blocks: updateBlocksAtPath(state.doc.blocks, parentPath, (blocks) => blocks.map((child, index) => index === indexInParent ? nextBlock : child)),
|
|
1406
|
+
};
|
|
1407
|
+
const next = createStateFromDoc(nextDoc);
|
|
1408
|
+
const sourceHint = state.map.cursorToSource(cursorOffset, "backward");
|
|
1409
|
+
const searchStart = Math.max(0, sourceHint - 4);
|
|
1410
|
+
const placeholderStart = next.source.indexOf(placeholder, searchStart) ?? -1;
|
|
1411
|
+
const resolvedPlaceholderStart = placeholderStart !== -1 ? placeholderStart : next.source.indexOf(placeholder);
|
|
1412
|
+
if (resolvedPlaceholderStart === -1) {
|
|
1413
|
+
return null;
|
|
1414
|
+
}
|
|
1415
|
+
const startCursor = next.map.sourceToCursor(resolvedPlaceholderStart, "forward");
|
|
1416
|
+
return {
|
|
1417
|
+
...next,
|
|
1418
|
+
selection: {
|
|
1419
|
+
start: startCursor.cursorOffset,
|
|
1420
|
+
end: startCursor.cursorOffset,
|
|
1421
|
+
affinity: "forward",
|
|
1422
|
+
},
|
|
1423
|
+
};
|
|
1424
|
+
}
|
|
1425
|
+
function rewritePendingPlaceholderAtCursor(state, cursorOffset, marks) {
|
|
1426
|
+
const textModel = getEditorTextModelForDoc(state.doc);
|
|
1427
|
+
const lines = textModel.getStructuralLines();
|
|
1428
|
+
const loc = textModel.resolveOffsetToLine(cursorOffset);
|
|
1429
|
+
const line = lines[loc.lineIndex];
|
|
1430
|
+
if (!line) {
|
|
1431
|
+
return null;
|
|
1432
|
+
}
|
|
1433
|
+
const block = getBlockAtPath(state.doc.blocks, line.path);
|
|
1434
|
+
if (!block || block.type !== "paragraph") {
|
|
1435
|
+
return null;
|
|
1436
|
+
}
|
|
1437
|
+
const placeholder = "\u200B";
|
|
1438
|
+
const runs = paragraphToRuns(block);
|
|
1439
|
+
const { before, after } = sliceRuns(runs, loc.offsetInLine, loc.offsetInLine);
|
|
1440
|
+
const replacement = [];
|
|
1441
|
+
const firstAfter = after[0];
|
|
1442
|
+
if (firstAfter?.type === "text" && firstAfter.text.startsWith(placeholder)) {
|
|
1443
|
+
if (marks && marks.length > 0) {
|
|
1444
|
+
replacement.push({ type: "text", text: placeholder, marks });
|
|
1445
|
+
}
|
|
1446
|
+
if (firstAfter.text.length > placeholder.length) {
|
|
1447
|
+
replacement.push({
|
|
1448
|
+
...firstAfter,
|
|
1449
|
+
text: firstAfter.text.slice(placeholder.length),
|
|
1450
|
+
});
|
|
1451
|
+
}
|
|
1452
|
+
replacement.push(...after.slice(1));
|
|
1453
|
+
}
|
|
1454
|
+
else {
|
|
1455
|
+
const lastBefore = before[before.length - 1];
|
|
1456
|
+
if (lastBefore?.type !== "text" ||
|
|
1457
|
+
!lastBefore.text.endsWith(placeholder)) {
|
|
1458
|
+
return null;
|
|
1459
|
+
}
|
|
1460
|
+
const prefix = lastBefore.text.slice(0, -placeholder.length);
|
|
1461
|
+
if (prefix) {
|
|
1462
|
+
replacement.push({ ...lastBefore, text: prefix });
|
|
1463
|
+
}
|
|
1464
|
+
if (marks && marks.length > 0) {
|
|
1465
|
+
replacement.push({ type: "text", text: placeholder, marks });
|
|
1466
|
+
}
|
|
1467
|
+
replacement.push(...after);
|
|
1468
|
+
before.pop();
|
|
1469
|
+
}
|
|
1470
|
+
const mergedRuns = normalizeRuns([...before, ...replacement]);
|
|
1471
|
+
const nextBlock = {
|
|
1472
|
+
...block,
|
|
1473
|
+
content: runsToInlines(mergedRuns),
|
|
1474
|
+
};
|
|
1475
|
+
const parentPath = line.path.slice(0, -1);
|
|
1476
|
+
const indexInParent = line.path[line.path.length - 1] ?? 0;
|
|
1477
|
+
const nextDoc = {
|
|
1478
|
+
...state.doc,
|
|
1479
|
+
blocks: updateBlocksAtPath(state.doc.blocks, parentPath, (blocks) => blocks.map((child, index) => index === indexInParent ? nextBlock : child)),
|
|
1480
|
+
};
|
|
1481
|
+
const next = createStateFromDoc(nextDoc);
|
|
1482
|
+
return {
|
|
1483
|
+
...next,
|
|
1484
|
+
selection: {
|
|
1485
|
+
start: cursorOffset,
|
|
1486
|
+
end: cursorOffset,
|
|
1487
|
+
affinity: marks && marks.length > 0 ? "forward" : "backward",
|
|
1488
|
+
},
|
|
1489
|
+
};
|
|
1490
|
+
}
|
|
1491
|
+
function updatePendingPlaceholderMarksAtCursor(state, cursorOffset, marks) {
|
|
1492
|
+
return rewritePendingPlaceholderAtCursor(state, cursorOffset, marks);
|
|
1493
|
+
}
|
|
1494
|
+
function removePendingPlaceholderAtCursor(state, cursorOffset) {
|
|
1495
|
+
return rewritePendingPlaceholderAtCursor(state, cursorOffset, null);
|
|
1496
|
+
}
|
|
1497
|
+
function getPendingPlaceholderMarksAtCursor(state, cursorOffset) {
|
|
1498
|
+
const textModel = getEditorTextModelForDoc(state.doc);
|
|
1499
|
+
const lines = textModel.getStructuralLines();
|
|
1500
|
+
const loc = textModel.resolveOffsetToLine(cursorOffset);
|
|
1501
|
+
const line = lines[loc.lineIndex];
|
|
1502
|
+
if (!line) {
|
|
1503
|
+
return null;
|
|
1504
|
+
}
|
|
1505
|
+
const block = getBlockAtPath(state.doc.blocks, line.path);
|
|
1506
|
+
if (!block || block.type !== "paragraph") {
|
|
1507
|
+
return null;
|
|
1508
|
+
}
|
|
1509
|
+
const placeholder = "\u200B";
|
|
1510
|
+
const runs = paragraphToRuns(block);
|
|
1511
|
+
const { before, after } = sliceRuns(runs, loc.offsetInLine, loc.offsetInLine);
|
|
1512
|
+
const firstAfter = after[0];
|
|
1513
|
+
if (firstAfter?.type === "text" && firstAfter.text.startsWith(placeholder)) {
|
|
1514
|
+
return firstAfter.marks;
|
|
1515
|
+
}
|
|
1516
|
+
const lastBefore = before[before.length - 1];
|
|
1517
|
+
if (lastBefore?.type === "text" &&
|
|
1518
|
+
lastBefore.text.endsWith(placeholder)) {
|
|
1519
|
+
return lastBefore.marks;
|
|
1520
|
+
}
|
|
1521
|
+
return null;
|
|
1522
|
+
}
|
|
1523
|
+
function insertTextBeforePendingPlaceholderInDoc(doc, cursorOffset, text, marks) {
|
|
1524
|
+
const textModel = getEditorTextModelForDoc(doc);
|
|
1525
|
+
const lines = textModel.getStructuralLines();
|
|
1526
|
+
const loc = textModel.resolveOffsetToLine(cursorOffset);
|
|
1527
|
+
const line = lines[loc.lineIndex];
|
|
1528
|
+
if (!line) {
|
|
1529
|
+
return null;
|
|
1530
|
+
}
|
|
1531
|
+
const block = getBlockAtPath(doc.blocks, line.path);
|
|
1532
|
+
if (!block || block.type !== "paragraph") {
|
|
1533
|
+
return null;
|
|
1534
|
+
}
|
|
1535
|
+
const placeholder = "\u200B";
|
|
1536
|
+
const runs = paragraphToRuns(block);
|
|
1537
|
+
const { before, after } = sliceRuns(runs, loc.offsetInLine, loc.offsetInLine);
|
|
1538
|
+
const firstAfter = after[0];
|
|
1539
|
+
if (firstAfter?.type !== "text" ||
|
|
1540
|
+
!firstAfter.text.startsWith(placeholder)) {
|
|
1541
|
+
return null;
|
|
1542
|
+
}
|
|
1543
|
+
const mergedRuns = normalizeRuns([
|
|
1544
|
+
...before,
|
|
1545
|
+
...(text.length > 0 ? [{ type: "text", text, marks }] : []),
|
|
1546
|
+
firstAfter,
|
|
1547
|
+
...after.slice(1),
|
|
1548
|
+
]);
|
|
1549
|
+
const nextBlock = {
|
|
1550
|
+
...block,
|
|
1551
|
+
content: runsToInlines(mergedRuns),
|
|
1552
|
+
};
|
|
1553
|
+
const parentPath = line.path.slice(0, -1);
|
|
1554
|
+
const indexInParent = line.path[line.path.length - 1] ?? 0;
|
|
1555
|
+
const nextDoc = {
|
|
1556
|
+
...doc,
|
|
1557
|
+
blocks: updateBlocksAtPath(doc.blocks, parentPath, (blocks) => blocks.map((child, index) => index === indexInParent ? nextBlock : child)),
|
|
1558
|
+
};
|
|
1559
|
+
return {
|
|
1560
|
+
doc: nextDoc,
|
|
1561
|
+
nextCursor: cursorOffset + Array.from(graphemeSegments(text)).length,
|
|
1562
|
+
nextAffinity: "forward",
|
|
1563
|
+
};
|
|
1564
|
+
}
|
|
1565
|
+
function hasInlineMarkerBoundaryBefore(source, markerStart) {
|
|
1566
|
+
if (markerStart <= 0) {
|
|
1567
|
+
return true;
|
|
1568
|
+
}
|
|
1569
|
+
return !WORD_CHARACTER_PATTERN.test(source[markerStart - 1] ?? "");
|
|
1570
|
+
}
|
|
1571
|
+
function pickSafeCollapsedToggleMarkerSpec(params) {
|
|
1572
|
+
const { defaultSpec, source, insertAt, affinity } = params;
|
|
1573
|
+
const candidates = Array.from(toggleMarkerToSpec.values()).filter((spec, index, all) => spec.kind === defaultSpec.kind &&
|
|
1574
|
+
all.findIndex((candidate) => candidate.kind === spec.kind &&
|
|
1575
|
+
candidate.open === spec.open &&
|
|
1576
|
+
candidate.close === spec.close) === index);
|
|
1577
|
+
if (candidates.length <= 1) {
|
|
1578
|
+
return defaultSpec;
|
|
1579
|
+
}
|
|
1580
|
+
const previousChar = source[insertAt - 1] ?? "";
|
|
1581
|
+
const nextChar = source[insertAt] ?? "";
|
|
1582
|
+
let bestSpec = defaultSpec;
|
|
1583
|
+
let bestScore = Number.POSITIVE_INFINITY;
|
|
1584
|
+
for (const spec of candidates) {
|
|
1585
|
+
if (spec.open === "_" &&
|
|
1586
|
+
!hasInlineMarkerBoundaryBefore(source, insertAt)) {
|
|
1587
|
+
continue;
|
|
1588
|
+
}
|
|
1589
|
+
let score = 0;
|
|
1590
|
+
if (previousChar && spec.open[0] === previousChar) {
|
|
1591
|
+
score += affinity === "forward" ? 8 : 3;
|
|
1592
|
+
}
|
|
1593
|
+
if (nextChar &&
|
|
1594
|
+
spec.close[spec.close.length - 1] === nextChar) {
|
|
1595
|
+
score += affinity === "backward" ? 8 : 3;
|
|
1596
|
+
}
|
|
1597
|
+
if (spec.open === defaultSpec.open &&
|
|
1598
|
+
spec.close === defaultSpec.close) {
|
|
1599
|
+
score -= 0.5;
|
|
1600
|
+
}
|
|
1601
|
+
if (score < bestScore) {
|
|
1602
|
+
bestSpec = spec;
|
|
1603
|
+
bestScore = score;
|
|
1604
|
+
}
|
|
1605
|
+
}
|
|
1606
|
+
return bestSpec;
|
|
1607
|
+
}
|
|
1287
1608
|
function preferredAffinityAtGap(left, right, fallback) {
|
|
1288
1609
|
if (isMarksPrefix(left, right) && right.length > left.length) {
|
|
1289
1610
|
return "forward";
|
|
@@ -1536,51 +1857,49 @@ export function createRuntimeFromRegistry(registry) {
|
|
|
1536
1857
|
const openLen = openMarker.length;
|
|
1537
1858
|
const closeLen = closeMarker.length;
|
|
1538
1859
|
const placeholder = "\u200B";
|
|
1860
|
+
const markerMark = {
|
|
1861
|
+
kind: markerKind,
|
|
1862
|
+
data: undefined,
|
|
1863
|
+
key: markKey(markerKind, undefined),
|
|
1864
|
+
};
|
|
1539
1865
|
if (selection.start === selection.end) {
|
|
1540
1866
|
const caret = selection.start;
|
|
1867
|
+
const pendingPlaceholderMarks = getPendingPlaceholderMarksAtCursor(state, caret);
|
|
1868
|
+
if (pendingPlaceholderMarks) {
|
|
1869
|
+
const hasMarker = pendingPlaceholderMarks.some((mark) => mark.kind === markerKind);
|
|
1870
|
+
const around = marksAroundCursor(state.doc, caret);
|
|
1871
|
+
const nextMarks = hasMarker
|
|
1872
|
+
? removeMarkByKind(pendingPlaceholderMarks, markerKind)
|
|
1873
|
+
: mergeMarksPreservingOrder(around.left, pendingPlaceholderMarks, [markerMark]);
|
|
1874
|
+
const next = nextMarks.length > 0
|
|
1875
|
+
? updatePendingPlaceholderMarksAtCursor(state, caret, nextMarks)
|
|
1876
|
+
: removePendingPlaceholderAtCursor(state, caret);
|
|
1877
|
+
if (next) {
|
|
1878
|
+
return {
|
|
1879
|
+
...next,
|
|
1880
|
+
selection: {
|
|
1881
|
+
start: caret,
|
|
1882
|
+
end: caret,
|
|
1883
|
+
affinity: "forward",
|
|
1884
|
+
},
|
|
1885
|
+
};
|
|
1886
|
+
}
|
|
1887
|
+
}
|
|
1541
1888
|
// When the caret is at the end boundary of an inline wrapper, toggling the
|
|
1542
1889
|
// wrapper should "exit" it (so the next character types outside). This is
|
|
1543
1890
|
// best expressed in cursor space by flipping affinity to "forward" when we
|
|
1544
1891
|
// are leaving a wrapper of the requested kind.
|
|
1545
1892
|
const around = marksAroundCursor(state.doc, caret);
|
|
1546
1893
|
if (isMarksPrefix(around.right, around.left) &&
|
|
1547
|
-
around.left.length > around.right.length
|
|
1894
|
+
around.left.length > around.right.length &&
|
|
1895
|
+
(selection.affinity ?? "forward") === "backward") {
|
|
1548
1896
|
const exiting = around.left.slice(around.right.length);
|
|
1549
1897
|
if (exiting.some((mark) => mark.kind === markerKind)) {
|
|
1550
|
-
const
|
|
1551
|
-
if (
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
...state,
|
|
1556
|
-
selection: {
|
|
1557
|
-
start: caret,
|
|
1558
|
-
end: caret,
|
|
1559
|
-
affinity: "forward",
|
|
1560
|
-
},
|
|
1561
|
-
};
|
|
1562
|
-
}
|
|
1563
|
-
if (exiting.length > 1) {
|
|
1564
|
-
const insertAtForward = map.cursorToSource(caret, "forward");
|
|
1565
|
-
const insertAtBackward = map.cursorToSource(caret, "backward");
|
|
1566
|
-
const between = source.slice(insertAtBackward, insertAtForward);
|
|
1567
|
-
const markerIndex = between.indexOf(closeMarker);
|
|
1568
|
-
if (markerIndex !== -1) {
|
|
1569
|
-
const insertAt = insertAtBackward + markerIndex + closeLen;
|
|
1570
|
-
const nextSource = source.slice(0, insertAt) +
|
|
1571
|
-
placeholder +
|
|
1572
|
-
source.slice(insertAt);
|
|
1573
|
-
const next = createState(nextSource);
|
|
1574
|
-
const placeholderStart = insertAt;
|
|
1575
|
-
const startCursor = next.map.sourceToCursor(placeholderStart, "forward");
|
|
1576
|
-
return {
|
|
1577
|
-
...next,
|
|
1578
|
-
selection: {
|
|
1579
|
-
start: startCursor.cursorOffset,
|
|
1580
|
-
end: startCursor.cursorOffset,
|
|
1581
|
-
affinity: "forward",
|
|
1582
|
-
},
|
|
1583
|
-
};
|
|
1898
|
+
const remainingMarks = removeMarkByKind(around.left, markerKind);
|
|
1899
|
+
if (!marksEqual(remainingMarks, around.right)) {
|
|
1900
|
+
const next = createPendingPlaceholderStateAtCursor(state, caret, remainingMarks);
|
|
1901
|
+
if (next) {
|
|
1902
|
+
return next;
|
|
1584
1903
|
}
|
|
1585
1904
|
}
|
|
1586
1905
|
return {
|
|
@@ -1600,6 +1919,20 @@ export function createRuntimeFromRegistry(registry) {
|
|
|
1600
1919
|
around.right.length > around.left.length) {
|
|
1601
1920
|
const entering = around.right.slice(around.left.length);
|
|
1602
1921
|
if (entering.some((mark) => mark.kind === markerKind)) {
|
|
1922
|
+
const remainingMarks = removeMarkByKind(around.right, markerKind);
|
|
1923
|
+
const next = remainingMarks.length > 0
|
|
1924
|
+
? updatePendingPlaceholderMarksAtCursor(state, caret, remainingMarks)
|
|
1925
|
+
: removePendingPlaceholderAtCursor(state, caret);
|
|
1926
|
+
if (next) {
|
|
1927
|
+
return {
|
|
1928
|
+
...next,
|
|
1929
|
+
selection: {
|
|
1930
|
+
start: caret,
|
|
1931
|
+
end: caret,
|
|
1932
|
+
affinity: "backward",
|
|
1933
|
+
},
|
|
1934
|
+
};
|
|
1935
|
+
}
|
|
1603
1936
|
const insertAtBackward = map.cursorToSource(caret, "backward");
|
|
1604
1937
|
const insertAtForward = map.cursorToSource(caret, "forward");
|
|
1605
1938
|
const after = source.slice(insertAtBackward);
|
|
@@ -1658,6 +1991,18 @@ export function createRuntimeFromRegistry(registry) {
|
|
|
1658
1991
|
}
|
|
1659
1992
|
}
|
|
1660
1993
|
}
|
|
1994
|
+
if (isMarksPrefix(around.right, around.left) &&
|
|
1995
|
+
around.left.length > around.right.length &&
|
|
1996
|
+
(selection.affinity ?? "forward") === "backward" &&
|
|
1997
|
+
!around.left.some((mark) => mark.kind === markerKind)) {
|
|
1998
|
+
const next = createPendingPlaceholderStateAtCursor(state, caret, [
|
|
1999
|
+
...around.left,
|
|
2000
|
+
markerMark,
|
|
2001
|
+
]);
|
|
2002
|
+
if (next) {
|
|
2003
|
+
return next;
|
|
2004
|
+
}
|
|
2005
|
+
}
|
|
1661
2006
|
// Otherwise, insert an empty marker pair with a zero-width placeholder
|
|
1662
2007
|
// selected so the next typed character replaces it.
|
|
1663
2008
|
//
|
|
@@ -1679,34 +2024,63 @@ export function createRuntimeFromRegistry(registry) {
|
|
|
1679
2024
|
return null;
|
|
1680
2025
|
})();
|
|
1681
2026
|
// When at a boundary between cursor positions (insertAtBackward !== insertAtForward),
|
|
1682
|
-
// prefer insertAtBackward
|
|
1683
|
-
//
|
|
1684
|
-
//
|
|
2027
|
+
// only prefer insertAtBackward if the caret is intentionally anchored inside the
|
|
2028
|
+
// left formatting context. If the caret affinity is forward, the user explicitly
|
|
2029
|
+
// exited that wrapper and new markers belong on the forward side of the gap.
|
|
2030
|
+
// Still guard against inserting a longer marker into a shorter boundary run,
|
|
2031
|
+
// which would create ambiguous source (e.g., *italic*****).
|
|
1685
2032
|
const betweenLen = insertAtForward - insertAtBackward;
|
|
1686
|
-
const preferBackward = insertAtBackward !== insertAtForward &&
|
|
2033
|
+
const preferBackward = insertAtBackward !== insertAtForward &&
|
|
2034
|
+
(selection.affinity ?? "forward") === "backward" &&
|
|
2035
|
+
openLen <= betweenLen;
|
|
1687
2036
|
const insertAt = placeholderPos ?? (preferBackward ? insertAtBackward : insertAtForward);
|
|
2037
|
+
const insertMarkerSpec = placeholderPos === null
|
|
2038
|
+
? pickSafeCollapsedToggleMarkerSpec({
|
|
2039
|
+
defaultSpec: markerSpec,
|
|
2040
|
+
source,
|
|
2041
|
+
insertAt,
|
|
2042
|
+
affinity: selection.affinity ?? "forward",
|
|
2043
|
+
})
|
|
2044
|
+
: markerSpec;
|
|
2045
|
+
const insertOpenMarker = insertMarkerSpec.open;
|
|
2046
|
+
const insertCloseMarker = insertMarkerSpec.close;
|
|
2047
|
+
const insertOpenLen = insertOpenMarker.length;
|
|
2048
|
+
const baseMarks = (selection.affinity ?? "forward") === "backward"
|
|
2049
|
+
? around.left
|
|
2050
|
+
: around.right;
|
|
2051
|
+
const nextMarks = [
|
|
2052
|
+
...baseMarks.filter((mark) => mark.kind !== markerKind),
|
|
2053
|
+
markerMark,
|
|
2054
|
+
];
|
|
2055
|
+
if (placeholderPos !== null) {
|
|
2056
|
+
const next = updatePendingPlaceholderMarksAtCursor(state, caret, nextMarks);
|
|
2057
|
+
if (next) {
|
|
2058
|
+
return next;
|
|
2059
|
+
}
|
|
2060
|
+
}
|
|
2061
|
+
const docInserted = createPendingPlaceholderStateAtCursor(state, caret, nextMarks);
|
|
2062
|
+
if (docInserted) {
|
|
2063
|
+
return docInserted;
|
|
2064
|
+
}
|
|
1688
2065
|
const nextSource = placeholderPos !== null
|
|
1689
2066
|
? source.slice(0, insertAt) +
|
|
1690
|
-
|
|
2067
|
+
insertOpenMarker +
|
|
1691
2068
|
placeholder +
|
|
1692
|
-
|
|
2069
|
+
insertCloseMarker +
|
|
1693
2070
|
source.slice(insertAt + placeholder.length)
|
|
1694
2071
|
: source.slice(0, insertAt) +
|
|
1695
|
-
|
|
2072
|
+
insertOpenMarker +
|
|
1696
2073
|
placeholder +
|
|
1697
|
-
|
|
2074
|
+
insertCloseMarker +
|
|
1698
2075
|
source.slice(insertAt);
|
|
1699
2076
|
const next = createState(nextSource);
|
|
1700
|
-
const placeholderStart = insertAt +
|
|
2077
|
+
const placeholderStart = insertAt + insertOpenLen;
|
|
1701
2078
|
const startCursor = next.map.sourceToCursor(placeholderStart, "forward");
|
|
1702
|
-
return {
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
affinity: "forward",
|
|
1708
|
-
},
|
|
1709
|
-
};
|
|
2079
|
+
return createStateFromDoc(next.doc, {
|
|
2080
|
+
start: startCursor.cursorOffset,
|
|
2081
|
+
end: startCursor.cursorOffset,
|
|
2082
|
+
affinity: "forward",
|
|
2083
|
+
});
|
|
1710
2084
|
}
|
|
1711
2085
|
const cursorStart = Math.min(selection.start, selection.end);
|
|
1712
2086
|
const cursorEnd = Math.max(selection.start, selection.end);
|
|
@@ -1768,11 +2142,6 @@ export function createRuntimeFromRegistry(registry) {
|
|
|
1768
2142
|
const hasTargetMark = visibleRunsForDecision.some((run) => run.marks.some((mark) => mark.kind === markerKind));
|
|
1769
2143
|
const canUnwrap = hasTargetMark &&
|
|
1770
2144
|
visibleRunsForDecision.every((run) => run.marks.some((mark) => mark.kind === markerKind));
|
|
1771
|
-
const markerMark = {
|
|
1772
|
-
kind: markerKind,
|
|
1773
|
-
data: undefined,
|
|
1774
|
-
key: markKey(markerKind, undefined),
|
|
1775
|
-
};
|
|
1776
2145
|
const removeMark = (marks) => {
|
|
1777
2146
|
if (!marks.some((mark) => mark.kind === markerKind)) {
|
|
1778
2147
|
return marks;
|
|
@@ -63,8 +63,6 @@ export declare class CakeEditor {
|
|
|
63
63
|
private beforeInputHandled;
|
|
64
64
|
private beforeInputResetId;
|
|
65
65
|
private keydownHandledBeforeInput;
|
|
66
|
-
private pendingDeleteIntentFromKeydown;
|
|
67
|
-
private pendingDeleteIntentResetId;
|
|
68
66
|
private suppressSelectionChange;
|
|
69
67
|
private suppressSelectionChangeResetId;
|
|
70
68
|
private ignoreTouchNativeSelectionUntil;
|
|
@@ -283,7 +281,6 @@ export declare class CakeEditor {
|
|
|
283
281
|
private getAtomicBlockSelectionFromClick;
|
|
284
282
|
private handleClick;
|
|
285
283
|
private handleKeyDown;
|
|
286
|
-
private isAtCollapsedListContentStart;
|
|
287
284
|
private resolveExtensionKeybinding;
|
|
288
285
|
private handleCopy;
|
|
289
286
|
private handleCut;
|
|
@@ -294,8 +291,6 @@ export declare class CakeEditor {
|
|
|
294
291
|
private handleCompositionStart;
|
|
295
292
|
private handleCompositionEnd;
|
|
296
293
|
private resolveBeforeInputIntent;
|
|
297
|
-
private rememberDeleteIntentFromKeydown;
|
|
298
|
-
private clearPendingDeleteIntentFromKeydown;
|
|
299
294
|
private selectionFromTargetRangesWithStatus;
|
|
300
295
|
private cursorFromDom;
|
|
301
296
|
private applyEdit;
|