@pierre/diffs 1.3.4 → 1.3.6
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/editor/editor.d.ts.map +1 -1
- package/dist/editor/editor.js +96 -23
- package/dist/editor/editor.js.map +1 -1
- package/dist/editor/editor2.js +1 -1
- package/dist/editor/searchPanel.d.ts.map +1 -1
- package/dist/editor/searchPanel.js +2 -1
- package/dist/editor/searchPanel.js.map +1 -1
- package/dist/editor/selection.d.ts +2 -1
- package/dist/editor/selection.d.ts.map +1 -1
- package/dist/editor/selection.js +1 -1
- package/dist/editor/selection.js.map +1 -1
- package/dist/editor/tokenizer.d.ts +1 -1
- package/dist/editor/tokenizer.d.ts.map +1 -1
- package/dist/editor/tokenizer.js +28 -8
- package/dist/editor/tokenizer.js.map +1 -1
- package/dist/renderers/DiffHunksRenderer.d.ts +3 -2
- package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
- package/dist/renderers/DiffHunksRenderer.js +36 -12
- package/dist/renderers/DiffHunksRenderer.js.map +1 -1
- package/dist/utils/editSessionHunks.d.ts.map +1 -1
- package/dist/utils/editSessionHunks.js +2 -2
- package/dist/utils/editSessionHunks.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor.d.ts","names":[],"sources":["../../src/editor/editor.ts"],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"editor.d.ts","names":[],"sources":["../../src/editor/editor.ts"],"mappings":";;;;;;;;;UAwMiB,aAAA;;EAEf,iBAAA;EAF4B;EAI5B,MAAA,GAAS,YAAA;EAAA;;;;EAKT,YAAA;EAgCkC;;;;EA3BlC,mBAAA,GAAsB,mBAAA;EAgCiB;EA9BvC,gBAAA;EAkCQ;EAhCR,aAAA;EAkCM;;;;EA7BN,YAAA,GAAe,YAAA;EAgCW;EA9B1B,qBAAA,GAAwB,iBAAA;EAzBK;;;;EA8B7B,sBAAA;EAhBA;;;;;EAsBA,SAAA;IACE,QAAA,GAAW,IAAA,cAAkB,OAAA;EAAA;EAP/B;EAUA,qBAAA,IACE,OAAA,EAAS,sBAAA,CAAuB,WAAA,MAC7B,WAAA;EALH;EAOF,QAAA,IACE,MAAA,EAAQ,MAAA,CAAO,WAAA,GACf,YAAA,EAAc,sBAAA,CAAuB,WAAA;EATR;EAY/B,QAAA,IACE,IAAA,EAAM,YAAA,EACN,eAAA,EACI,cAAA,CAAe,WAAA,MACf,kBAAA,CAAmB,WAAA,iBAEvB,KAAA,EAAO,iBAAA,CAAkB,WAAA;EAdhB;EAiBX,OAAA;EAjBE;EAmBF,MAAA;EAEA,OAAA;AAAA;AAAA,UAGe,kBAAA,SAA2B,YAAY;EApBpD;EAsBF,UAAA;EArBuC;EAuBvC,SAAA;EApBA;EAsBA,MAAA;AAAA;AAAA,cAmBW,MAAA,yBAA+B,WAAA,CAAY,WAAA;EAAA;EAmJtD,WAAA,CAAY,OAAA,GAAS,aAAA,CAAc,WAAA;EAInC,UAAA,CAAW,OAAA,EAAS,aAAA,CAAc,WAAA;EAkClC,IAAA,WAAe,sBAAA,CAAuB,WAAA,GACpC,YAAA,EAAc,gBAAA,CAAiB,CAAA;EA7NxB;;;;;;;AAOF;AAGT;;EA6OE,UAAA,CAAW,KAAA,EAAO,QAAA,IAAY,aAAA;EA7OwB;EAAA,IAgTlD,OAAA;EA9SJ;EAAA,IAmTI,OAAA;EA/SJ;EAoTA,IAAA;EApTM;EAyTN,IAAA;EAIA,OAAA,IAAW,YAAA;EAcX,OAAA;EAIA,QAAA,IAAY,WAAA;EAcZ,QAAA;IAAW,UAAA;IAAY;EAAA,GAAQ,WAAA;EAqB/B,aAAA,CACE,UAAA,GAAa,KAAA;IAAU,SAAA;EAAA;EAoCzB,UAAA,CAAW,OAAA,EAAS,MAAA;EA6BpB,KAAA,CAAM,OAAA,GAAU,kBAAA;EAmChB,IAAA;EAOA,OAAA,CAAQ,OAAA;EAvPU;EAwUlB,aAAA,CAAc,IAAA,EAAM,YAAA,GAAe,YAAA;EAhOvB;EA4PZ,+BAAA;EA9OuB;EAyPvB,+BAAA;EAnOe;EAkPf,gBAAA,EAAkB,WAAA,CAAY,WAAA;AAAA"}
|
package/dist/editor/editor.js
CHANGED
|
@@ -10,7 +10,7 @@ import { resolveBlockCommentEdits, resolveCommentConfig, resolveLineCommentEdits
|
|
|
10
10
|
import { addEventListener, clampDomOffset, extend, getLineNumberAttr, h, lookupScrollContainer, round } from "./utils.js";
|
|
11
11
|
import { applyDocumentChangeToLineAnnotations, renderLineAnnotations } from "./lineAnnotations.js";
|
|
12
12
|
import { PopoverManager } from "./popover.js";
|
|
13
|
-
import { applyDeleteCharacterToSelections, applyDeleteHardLineForwardToSelections, applyDeleteSoftLineBackwardToSelections, applyDeleteWordBackwardToSelections, applyTextChangeToSelections, applyTextReplaceToSelections, applyTransposeToSelections, comparePosition, convertSelection, createSelectionFrom, createSelectionFromAnchorAndFocusOffsets, expandCollapsedSelectionToWord, extendSelection, extendSelections, findNextMatch, getAutoSurroundReplacementTexts, getCaretPosition, getDocumentBoundarySelection, getDocumentFullSelection, getSelectedLineBlocks, getSelectionAnchor, getSelectionClipboardTexts, getSelectionText, isCollapsedSelection, isLineEditable, mapCursorMove, mapSelectionShift, mergeOverlappingSelections, remapSelectionsAfterEdits, resolveIndentEdits, resolveSelectionCut, selectionIntersects, shiftSelectionLines } from "./selection.js";
|
|
13
|
+
import { applyDeleteCharacterToSelections, applyDeleteHardLineForwardToSelections, applyDeleteSoftLineBackwardToSelections, applyDeleteWordBackwardToSelections, applyTextChangeToSelections, applyTextReplaceToSelections, applyTransposeToSelections, comparePosition, convertSelection, createSelectionFrom, createSelectionFromAnchorAndFocusOffsets, expandCollapsedSelectionToWord, extendSelection, extendSelections, findNextMatch, getAutoSurroundReplacementTexts, getCaretPosition, getDocumentBoundarySelection, getDocumentFullSelection, getSelectedLineBlocks, getSelectionAnchor, getSelectionClipboardTexts, getSelectionText, isCollapsedSelection, isLineEditable, mapCursorMove, mapSelectionShift, mergeOverlappingSelections, remapSelectionsAfterEdits, resolveIndentEdits, resolveSelectionCut, selectionIntersects, shiftSelectionLines, snapCharacterToGraphemeBoundary } from "./selection.js";
|
|
14
14
|
import { MarkerRenderer, markerSeverityDatasetKey } from "./marker.js";
|
|
15
15
|
import { findBracketMatchRanges } from "./matchBrackets.js";
|
|
16
16
|
import { createSpriteElement } from "./sprite.js";
|
|
@@ -100,6 +100,7 @@ var Editor = class {
|
|
|
100
100
|
#isComposing = false;
|
|
101
101
|
#isGutterMouseDown = false;
|
|
102
102
|
#isContentMouseDown = false;
|
|
103
|
+
#altColumnDrag;
|
|
103
104
|
#shiftKeyPressed = false;
|
|
104
105
|
#selectionStart;
|
|
105
106
|
#deletedSelectionText = "";
|
|
@@ -330,8 +331,6 @@ var Editor = class {
|
|
|
330
331
|
this.#globalEventDisposes = void 0;
|
|
331
332
|
this.#editorEventDisposes?.forEach((dispose) => dispose());
|
|
332
333
|
this.#editorEventDisposes = void 0;
|
|
333
|
-
this.#selectEventDisposes?.forEach((dispose) => dispose());
|
|
334
|
-
this.#selectEventDisposes = void 0;
|
|
335
334
|
this.#detach?.(recycle);
|
|
336
335
|
this.#detach = void 0;
|
|
337
336
|
this.#gutterWidthCache = void 0;
|
|
@@ -711,12 +710,11 @@ var Editor = class {
|
|
|
711
710
|
this.#setEditorActiveLineSafe(null);
|
|
712
711
|
this.#gutterWidthCache = void 0;
|
|
713
712
|
this.#contentWidthCache = void 0;
|
|
714
|
-
this.#
|
|
713
|
+
this.#resetSelectionGesture();
|
|
715
714
|
this.#suppressNativeSelectionSync = false;
|
|
716
715
|
this.#overlayElements?.forEach((el) => el.remove());
|
|
717
716
|
this.#overlayElements = void 0;
|
|
718
717
|
this.#selections = void 0;
|
|
719
|
-
this.#reservedSelections = void 0;
|
|
720
718
|
this.#scrollingToLine = void 0;
|
|
721
719
|
this.#markerRenderer?.cleanup();
|
|
722
720
|
this.#markerRenderer = void 0;
|
|
@@ -796,6 +794,13 @@ var Editor = class {
|
|
|
796
794
|
this.#contentHasFocus = false;
|
|
797
795
|
this.#shouldIgnoreSelectionChange = false;
|
|
798
796
|
};
|
|
797
|
+
const finishMouseSelection = (event) => {
|
|
798
|
+
if (event.pointerType !== "mouse") return;
|
|
799
|
+
const refocusEditor = this.#isGutterMouseDown;
|
|
800
|
+
this.#resetSelectionGesture();
|
|
801
|
+
if (refocusEditor) this.#focus();
|
|
802
|
+
if (this.#options.enabledSelectionAction === true && this.#selections !== void 0 && this.#selections.length > 0 && !isCollapsedSelection(this.#selections.at(-1))) this.#updateSelections(this.#selections);
|
|
803
|
+
};
|
|
799
804
|
this.#globalEventDisposes = [
|
|
800
805
|
addEventListener(document, "focusin", (event) => {
|
|
801
806
|
if (!replacementFocusTargetIsContent(event)) cancelReplacementFocus();
|
|
@@ -828,24 +833,15 @@ var Editor = class {
|
|
|
828
833
|
const previous = this.#selections[0];
|
|
829
834
|
if (comparePosition(previous.start, selection.start) === 0 && comparePosition(previous.end, selection.end) === 0) selection.direction = previous.direction;
|
|
830
835
|
}
|
|
836
|
+
if (this.#altColumnDrag !== void 0) {
|
|
837
|
+
this.#altColumnDrag.focusLine = getCaretPosition(selection).line;
|
|
838
|
+
if (this.#updateAltColumnSelections()) return;
|
|
839
|
+
}
|
|
831
840
|
if (this.#reservedSelections !== void 0) this.#updateSelections([...this.#reservedSelections.filter((reservedSelection) => !selectionIntersects(reservedSelection, selection)), selection]);
|
|
832
841
|
else this.#updateSelections([selection]);
|
|
833
842
|
}, { passive: true }),
|
|
834
|
-
addEventListener(document, "pointerup",
|
|
835
|
-
|
|
836
|
-
this.#selectEventDisposes?.forEach((dispose) => dispose());
|
|
837
|
-
this.#selectEventDisposes = void 0;
|
|
838
|
-
if (this.#isGutterMouseDown) {
|
|
839
|
-
this.#isGutterMouseDown = false;
|
|
840
|
-
this.#focus();
|
|
841
|
-
}
|
|
842
|
-
this.#shouldIgnoreSelectionChange = false;
|
|
843
|
-
this.#isContentMouseDown = false;
|
|
844
|
-
this.#shiftKeyPressed = false;
|
|
845
|
-
this.#selectionStart = void 0;
|
|
846
|
-
this.#reservedSelections = void 0;
|
|
847
|
-
if (this.#options.enabledSelectionAction === true && this.#selections !== void 0 && this.#selections.length > 0 && !isCollapsedSelection(this.#selections.at(-1))) this.#updateSelections(this.#selections);
|
|
848
|
-
}, { passive: true }),
|
|
843
|
+
addEventListener(document, "pointerup", finishMouseSelection, { passive: true }),
|
|
844
|
+
addEventListener(document, "pointercancel", finishMouseSelection, { passive: true }),
|
|
849
845
|
addEventListener(document, "keydown", (e) => {
|
|
850
846
|
if (e.key === "Shift") this.#selectionStart = this.#selections?.at(-1);
|
|
851
847
|
}, { passive: true }),
|
|
@@ -854,6 +850,17 @@ var Editor = class {
|
|
|
854
850
|
}, { passive: true })
|
|
855
851
|
];
|
|
856
852
|
}
|
|
853
|
+
#resetSelectionGesture() {
|
|
854
|
+
this.#selectEventDisposes?.forEach((dispose) => dispose());
|
|
855
|
+
this.#selectEventDisposes = void 0;
|
|
856
|
+
this.#shouldIgnoreSelectionChange = false;
|
|
857
|
+
this.#isGutterMouseDown = false;
|
|
858
|
+
this.#isContentMouseDown = false;
|
|
859
|
+
this.#altColumnDrag = void 0;
|
|
860
|
+
this.#shiftKeyPressed = false;
|
|
861
|
+
this.#selectionStart = void 0;
|
|
862
|
+
this.#reservedSelections = void 0;
|
|
863
|
+
}
|
|
857
864
|
#replaceSelectEventListeners(disposes) {
|
|
858
865
|
this.#selectEventDisposes?.forEach((dispose) => dispose());
|
|
859
866
|
this.#selectEventDisposes = disposes;
|
|
@@ -889,6 +896,7 @@ var Editor = class {
|
|
|
889
896
|
this.#canMountSelectionAction = true;
|
|
890
897
|
this.#suppressNativeSelectionSync = false;
|
|
891
898
|
if (e.pointerType !== "mouse") return;
|
|
899
|
+
this.#altColumnDrag = void 0;
|
|
892
900
|
if (this.#isDeletedLineTarget(e)) {
|
|
893
901
|
this.#setDeletedTextSelectionActive(true);
|
|
894
902
|
if (this.#selections !== void 0) this.#updateSelections([]);
|
|
@@ -896,17 +904,39 @@ var Editor = class {
|
|
|
896
904
|
}
|
|
897
905
|
this.#setDeletedTextSelectionActive(false);
|
|
898
906
|
this.#markerRenderer?.removePopover();
|
|
907
|
+
const selectEventDisposes = [];
|
|
899
908
|
if (isSafari() && this.#lineAnnotations !== void 0 && this.#lineAnnotations.length > 0) {
|
|
900
909
|
const annotationDisposes = [...contentEl.querySelectorAll("[data-line-annotation]")].map((el) => [addEventListener(el, "mouseenter", () => {
|
|
901
910
|
this.#shouldIgnoreSelectionChange = true;
|
|
902
911
|
}), addEventListener(el, "mouseleave", () => {
|
|
903
912
|
this.#shouldIgnoreSelectionChange = false;
|
|
904
913
|
})]).flat();
|
|
905
|
-
|
|
914
|
+
selectEventDisposes.push(...annotationDisposes);
|
|
906
915
|
}
|
|
907
916
|
this.#isContentMouseDown = true;
|
|
917
|
+
const isAltColumnDrag = e.button === 0 && e.altKey && !e.ctrlKey && !e.metaKey && !e.shiftKey;
|
|
908
918
|
this.#selectionStart = void 0;
|
|
909
|
-
if (
|
|
919
|
+
if (isAltColumnDrag) {
|
|
920
|
+
this.#altColumnDrag = {
|
|
921
|
+
pointerId: e.pointerId,
|
|
922
|
+
startClientX: e.clientX,
|
|
923
|
+
clientX: e.clientX,
|
|
924
|
+
startScrollLeft: contentEl.parentElement?.scrollLeft ?? 0
|
|
925
|
+
};
|
|
926
|
+
this.#reservedSelections = void 0;
|
|
927
|
+
this.#selections = void 0;
|
|
928
|
+
this.#updateSelections([]);
|
|
929
|
+
selectEventDisposes.push(addEventListener(document, "pointermove", (moveEvent) => {
|
|
930
|
+
const drag = this.#altColumnDrag;
|
|
931
|
+
if (drag === void 0 || moveEvent.pointerType !== "mouse" || moveEvent.pointerId !== drag.pointerId) return;
|
|
932
|
+
drag.clientX = moveEvent.clientX;
|
|
933
|
+
this.#updateAltColumnSelections();
|
|
934
|
+
}, {
|
|
935
|
+
capture: true,
|
|
936
|
+
passive: true
|
|
937
|
+
}));
|
|
938
|
+
} else if (e.button === 0 && isPrimaryModifier(e)) this.#reservedSelections = this.#selections?.map((selection) => ({ ...selection }));
|
|
939
|
+
this.#replaceSelectEventListeners(selectEventDisposes);
|
|
910
940
|
if (e.shiftKey) {
|
|
911
941
|
const primarySelection = this.#selections?.at(-1);
|
|
912
942
|
if (primarySelection !== void 0) {
|
|
@@ -924,6 +954,7 @@ var Editor = class {
|
|
|
924
954
|
if (!targetIsContentElement(e)) return;
|
|
925
955
|
this.#canMountSelectionAction = true;
|
|
926
956
|
this.#suppressNativeSelectionSync = false;
|
|
957
|
+
if (e.isComposing || e.keyCode === 229) return;
|
|
927
958
|
const command = resolveEditorCommandFromKeyboardEvent(e, this.#options.keymap);
|
|
928
959
|
if (command !== void 0) {
|
|
929
960
|
e.preventDefault();
|
|
@@ -1610,7 +1641,7 @@ var Editor = class {
|
|
|
1610
1641
|
if (tokenizer === void 0 || fileInstance === void 0 || textDocument === void 0 || contentEl === void 0) return;
|
|
1611
1642
|
tokenizer.stopBackgroundTokenize();
|
|
1612
1643
|
const t = performance.now();
|
|
1613
|
-
const dirtyLines = tokenizer.tokenize(change, renderRange);
|
|
1644
|
+
const dirtyLines = tokenizer.tokenize(change, renderRange, !this.#isDiff && fileInstance.getLinePosition !== void 0);
|
|
1614
1645
|
const t2 = performance.now();
|
|
1615
1646
|
if (dirtyLines.size > 0) {
|
|
1616
1647
|
const children = contentEl.children;
|
|
@@ -2068,6 +2099,48 @@ var Editor = class {
|
|
|
2068
2099
|
if (this.#selections !== void 0 || this.#matches !== void 0 || this.#markerRenderer !== void 0) this.#updateSelections(this.#selections ?? []);
|
|
2069
2100
|
});
|
|
2070
2101
|
}
|
|
2102
|
+
#updateAltColumnSelections() {
|
|
2103
|
+
const drag = this.#altColumnDrag;
|
|
2104
|
+
const selectionStart = this.#selectionStart;
|
|
2105
|
+
const textDocument = this.#textDocument;
|
|
2106
|
+
if (drag === void 0 || drag.focusLine === void 0 || selectionStart === void 0 || textDocument === void 0) return false;
|
|
2107
|
+
const anchor = selectionStart.direction === -1 ? selectionStart.end : selectionStart.start;
|
|
2108
|
+
const scrollLeft = this.#contentElement?.parentElement?.scrollLeft ?? 0;
|
|
2109
|
+
const characterDeltaRaw = (drag.clientX - drag.startClientX + scrollLeft - drag.startScrollLeft) / this.#metrics.ch;
|
|
2110
|
+
const characterDelta = characterDeltaRaw < 0 ? -Math.round(-characterDeltaRaw) : Math.round(characterDeltaRaw);
|
|
2111
|
+
const focusCharacter = Math.max(0, anchor.character + characterDelta);
|
|
2112
|
+
const goal = {
|
|
2113
|
+
line: drag.focusLine,
|
|
2114
|
+
character: focusCharacter
|
|
2115
|
+
};
|
|
2116
|
+
if (drag.renderedGoal !== void 0 && comparePosition(drag.renderedGoal, goal) === 0) return true;
|
|
2117
|
+
drag.renderedGoal = goal;
|
|
2118
|
+
const selections = [];
|
|
2119
|
+
const step = goal.line < anchor.line ? -1 : 1;
|
|
2120
|
+
for (let line = anchor.line;; line += step) {
|
|
2121
|
+
if (this.#isLineRenderable(line)) {
|
|
2122
|
+
const lineText = textDocument.getLineText(line);
|
|
2123
|
+
const anchorOffset = Math.min(anchor.character, lineText.length);
|
|
2124
|
+
const focusOffset = Math.min(focusCharacter, lineText.length);
|
|
2125
|
+
const anchorCharacter = snapCharacterToGraphemeBoundary(lineText, anchorOffset);
|
|
2126
|
+
const lineFocusCharacter = focusOffset === anchorOffset ? anchorCharacter : snapCharacterToGraphemeBoundary(lineText, focusOffset);
|
|
2127
|
+
selections.push({
|
|
2128
|
+
start: {
|
|
2129
|
+
line,
|
|
2130
|
+
character: Math.min(anchorCharacter, lineFocusCharacter)
|
|
2131
|
+
},
|
|
2132
|
+
end: {
|
|
2133
|
+
line,
|
|
2134
|
+
character: Math.max(anchorCharacter, lineFocusCharacter)
|
|
2135
|
+
},
|
|
2136
|
+
direction: anchorCharacter === lineFocusCharacter ? 0 : anchorCharacter < lineFocusCharacter ? 1 : -1
|
|
2137
|
+
});
|
|
2138
|
+
}
|
|
2139
|
+
if (line === goal.line) break;
|
|
2140
|
+
}
|
|
2141
|
+
this.#updateSelections(selections);
|
|
2142
|
+
return true;
|
|
2143
|
+
}
|
|
2071
2144
|
#updateSelections(selections) {
|
|
2072
2145
|
this.__postponeBgTokenizeToNextFrame();
|
|
2073
2146
|
this.#primaryCaretElement = void 0;
|