@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.
@@ -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: next.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 caretSource = interim.map.cursorToSource(structural.nextCursor, interimAffinity);
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 toggledExitingIndex = exiting.findIndex((mark) => mark.kind === markerKind);
1551
- if (exiting.length > 1 &&
1552
- toggledExitingIndex !== -1 &&
1553
- toggledExitingIndex < exiting.length - 1) {
1554
- return {
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 to keep new markers inside the current formatting context.
1683
- // However, only do this if the new marker length is <= the boundary marker length,
1684
- // otherwise we create ambiguous marker sequences (e.g., *italic**​*** doesn't parse).
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 && openLen <= betweenLen;
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
- openMarker +
2067
+ insertOpenMarker +
1691
2068
  placeholder +
1692
- closeMarker +
2069
+ insertCloseMarker +
1693
2070
  source.slice(insertAt + placeholder.length)
1694
2071
  : source.slice(0, insertAt) +
1695
- openMarker +
2072
+ insertOpenMarker +
1696
2073
  placeholder +
1697
- closeMarker +
2074
+ insertCloseMarker +
1698
2075
  source.slice(insertAt);
1699
2076
  const next = createState(nextSource);
1700
- const placeholderStart = insertAt + openLen;
2077
+ const placeholderStart = insertAt + insertOpenLen;
1701
2078
  const startCursor = next.map.sourceToCursor(placeholderStart, "forward");
1702
- return {
1703
- ...next,
1704
- selection: {
1705
- start: startCursor.cursorOffset,
1706
- end: startCursor.cursorOffset,
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;