@douyinfe/semi-json-viewer-core 2.71.1-alpha → 2.71.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/lib/index.js +123 -110
  2. package/package.json +55 -55
package/lib/index.js CHANGED
@@ -192,22 +192,6 @@ var SelectionModel = class {
192
192
  row = lineElement.lineNumber || 1;
193
193
  return { row, col: col + 1 };
194
194
  }
195
- savePreviousSelection() {
196
- this.preStartRow = this.startRow;
197
- this.preStartCol = this.startCol;
198
- this.preEndRow = this.endRow;
199
- this.preEndCol = this.endCol;
200
- }
201
- restorePreviousSelection() {
202
- this.startRow = this.preStartRow;
203
- this.startCol = this.preStartCol;
204
- this.endRow = this.preEndRow;
205
- this.endCol = this.preEndCol;
206
- this._jsonModel.lastChangeBufferPos = {
207
- lineNumber: this.startRow,
208
- column: this.startCol
209
- };
210
- }
211
195
  };
212
196
 
213
197
  // src/worker/jsonWorkerManager.ts
@@ -660,7 +644,6 @@ function onEnter(beforeText, afterText, previousLineText) {
660
644
  var EditWidget = class {
661
645
  constructor(view, jsonModel, selectionModel, foldingModel, _jsonWorkerManager = getJsonWorkerManager()) {
662
646
  this._jsonWorkerManager = _jsonWorkerManager;
663
- this._isComposition = false;
664
647
  this._autoClosingPairs = {
665
648
  "{": "}",
666
649
  "[": "]",
@@ -684,17 +667,13 @@ var EditWidget = class {
684
667
  this._view.contentDom.addEventListener("beforeinput", (e) => {
685
668
  this._handleBeforeInput(e);
686
669
  });
687
- this._view.contentDom.addEventListener("compositionstart", (e) => {
688
- this._handleCompositionStart(e);
689
- });
690
- this._view.contentDom.addEventListener("compositionend", (e) => {
691
- this._handleCompositionEnd(e);
692
- });
693
670
  this._view.contentDom.addEventListener("keydown", (e) => {
694
671
  this._handleKeyDown(e);
695
672
  });
696
673
  }
697
- buildBaseOperation(type = "insert") {
674
+ _handleBeforeInput(e) {
675
+ e.preventDefault();
676
+ this._selectionModel.updateFromSelection();
698
677
  const startRow = this._selectionModel.startRow;
699
678
  const startCol = this._selectionModel.startCol;
700
679
  const endRow = this._selectionModel.endRow;
@@ -702,7 +681,7 @@ var EditWidget = class {
702
681
  const startOffset = this._jsonModel.getOffsetAt(startRow, startCol);
703
682
  const endOffset = this._jsonModel.getOffsetAt(endRow, endCol);
704
683
  const op = {
705
- type,
684
+ type: "insert",
706
685
  range: {
707
686
  startLineNumber: startRow,
708
687
  startColumn: startCol,
@@ -711,47 +690,9 @@ var EditWidget = class {
711
690
  },
712
691
  rangeOffset: startOffset,
713
692
  rangeLength: endOffset - startOffset,
714
- oldText: this._jsonModel.getValueInRange({
715
- startLineNumber: startRow,
716
- startColumn: startCol,
717
- endLineNumber: endRow,
718
- endColumn: endCol
719
- }),
693
+ oldText: "",
720
694
  newText: ""
721
695
  };
722
- if (this._selectionModel.isSelectedAll) {
723
- op.range = {
724
- startLineNumber: 1,
725
- startColumn: 1,
726
- endLineNumber: this._jsonModel.getLineCount(),
727
- endColumn: this._jsonModel.getLineLength(this._jsonModel.getLineCount()) + 1
728
- };
729
- op.rangeOffset = 0;
730
- op.rangeLength = this._jsonModel.getValue().length;
731
- op.oldText = this._jsonModel.getValue();
732
- }
733
- return op;
734
- }
735
- _handleCompositionStart(e) {
736
- e.preventDefault();
737
- this._isComposition = true;
738
- this._selectionModel.savePreviousSelection();
739
- }
740
- _handleCompositionEnd(e) {
741
- e.preventDefault();
742
- this._isComposition = false;
743
- this._selectionModel.restorePreviousSelection();
744
- const op = this.buildBaseOperation("replace");
745
- op.newText = e.data || "";
746
- this._selectionModel.isSelectedAll = false;
747
- this._jsonModel.applyOperation(op);
748
- }
749
- _handleBeforeInput(e) {
750
- if (this._isComposition) return;
751
- e.preventDefault();
752
- this._selectionModel.updateFromSelection();
753
- const op = this.buildBaseOperation();
754
- const { startLineNumber, startColumn, endLineNumber, endColumn } = op.range;
755
696
  switch (e.inputType) {
756
697
  case "insertText":
757
698
  if (this._selectionModel.isCollapsed) {
@@ -760,31 +701,37 @@ var EditWidget = class {
760
701
  op.type = "replace";
761
702
  }
762
703
  op.newText = e.data || "";
704
+ op.oldText = this._jsonModel.getValueInRange({
705
+ startLineNumber: startRow,
706
+ startColumn: startCol,
707
+ endLineNumber: endRow,
708
+ endColumn: endCol
709
+ });
763
710
  if (this._autoClosingPairs[op.newText]) {
764
711
  op.newText += this._autoClosingPairs[op.newText];
765
712
  op.keepPosition = {
766
- lineNumber: startLineNumber,
767
- column: startColumn + 1
713
+ lineNumber: startRow,
714
+ column: endCol + 1
768
715
  };
769
716
  }
770
717
  break;
771
718
  case "insertParagraph":
772
719
  op.newText = "\n";
773
720
  op.keepPosition = {
774
- lineNumber: startLineNumber + 1,
721
+ lineNumber: startRow + 1,
775
722
  column: 1
776
723
  };
777
724
  const enterAction = processJsonEnterAction(this._jsonModel, {
778
- startLineNumber,
779
- startColumn,
780
- endLineNumber,
781
- endColumn
725
+ startLineNumber: startRow,
726
+ startColumn: startCol,
727
+ endLineNumber: endRow,
728
+ endColumn: endCol
782
729
  });
783
730
  if (enterAction) {
784
731
  if (enterAction.indentAction === 1 /* Indent */) {
785
732
  op.newText = "\n" + this.normalizeIndentation(enterAction.appendText + enterAction.indentation) || "";
786
733
  op.keepPosition = {
787
- lineNumber: startLineNumber + 1,
734
+ lineNumber: startRow + 1,
788
735
  column: enterAction.appendText.length + enterAction.indentation.length + 1
789
736
  };
790
737
  } else {
@@ -792,39 +739,65 @@ var EditWidget = class {
792
739
  const increasedIndent = this.normalizeIndentation(enterAction.indentation + enterAction.appendText);
793
740
  op.newText = "\n" + increasedIndent + "\n" + normalIndent;
794
741
  op.keepPosition = {
795
- lineNumber: startLineNumber + 1,
742
+ lineNumber: startRow + 1,
796
743
  column: increasedIndent.length + 1
797
744
  };
798
745
  }
799
746
  } else {
800
- const lineText = this._jsonModel.getLineContent(startLineNumber);
801
- const indentation = getLeadingWhitespace(lineText).substring(0, startColumn - 1);
747
+ const lineText = this._jsonModel.getLineContent(startRow);
748
+ const indentation = getLeadingWhitespace(lineText).substring(0, startCol - 1);
802
749
  op.newText = "\n" + this.normalizeIndentation(indentation) || "";
803
750
  op.keepPosition = {
804
- lineNumber: startLineNumber + 1,
751
+ lineNumber: startRow + 1,
805
752
  column: indentation.length + 1
806
753
  };
807
754
  }
808
755
  break;
809
756
  case "deleteContentBackward":
757
+ let oldText = "";
810
758
  if (this._selectionModel.isCollapsed) {
811
- op.rangeOffset -= 1;
812
- op.oldText = this._jsonModel.getValueInRange({
813
- startLineNumber,
814
- startColumn: startColumn - 1,
815
- endLineNumber,
816
- endColumn
759
+ op.rangeOffset = startOffset - 1;
760
+ oldText = this._jsonModel.getValueInRange({
761
+ startLineNumber: startRow,
762
+ startColumn: startCol - 1,
763
+ endLineNumber: endRow,
764
+ endColumn: endCol
765
+ });
766
+ } else {
767
+ oldText = this._jsonModel.getValueInRange({
768
+ startLineNumber: startRow,
769
+ startColumn: startCol,
770
+ endLineNumber: endRow,
771
+ endColumn: endCol
817
772
  });
818
773
  }
774
+ op.oldText = oldText;
819
775
  op.type = "delete";
820
- op.rangeLength = op.oldText.length;
776
+ op.rangeLength = oldText.length;
821
777
  break;
822
778
  case "insertFromPaste":
823
779
  const pasteData = e.dataTransfer?.getData("text/plain");
824
780
  op.type = "replace";
825
781
  op.newText = pasteData || "";
782
+ op.oldText = this._jsonModel.getValueInRange({
783
+ startLineNumber: startRow,
784
+ startColumn: startCol,
785
+ endLineNumber: endRow,
786
+ endColumn: endCol
787
+ });
826
788
  break;
827
789
  }
790
+ if (this._selectionModel.isSelectedAll) {
791
+ op.range = {
792
+ startLineNumber: 1,
793
+ startColumn: 1,
794
+ endLineNumber: this._jsonModel.getLineCount(),
795
+ endColumn: this._jsonModel.getLineLength(this._jsonModel.getLineCount())
796
+ };
797
+ op.rangeOffset = 0;
798
+ op.rangeLength = this._jsonModel.getValue().length;
799
+ op.oldText = this._jsonModel.getValue();
800
+ }
828
801
  this._selectionModel.isSelectedAll = false;
829
802
  this._jsonModel.applyOperation(op);
830
803
  }
@@ -894,7 +867,6 @@ var EditWidget = class {
894
867
  const endCol = this._selectionModel.endCol;
895
868
  const startOffset = this._jsonModel.getOffsetAt(startRow, startCol);
896
869
  const endOffset = this._jsonModel.getOffsetAt(endRow, endCol);
897
- const op = this.buildBaseOperation();
898
870
  switch (e.key) {
899
871
  case "Tab":
900
872
  if (this._view.completeWidget.isVisible) {
@@ -912,7 +884,19 @@ var EditWidget = class {
912
884
  } else {
913
885
  insertText = " ";
914
886
  }
915
- op.newText = insertText;
887
+ const op = {
888
+ type: "insert",
889
+ range: {
890
+ startLineNumber: startRow,
891
+ startColumn: startCol,
892
+ endLineNumber: endRow,
893
+ endColumn: endCol
894
+ },
895
+ rangeOffset: startOffset,
896
+ rangeLength: endOffset - startOffset,
897
+ oldText: "",
898
+ newText: insertText
899
+ };
916
900
  this._jsonModel.applyOperation(op);
917
901
  break;
918
902
  case "f":
@@ -963,22 +947,61 @@ var EditWidget = class {
963
947
  }
964
948
  }
965
949
  _cutHandler() {
966
- const op = this.buildBaseOperation("replace");
967
- if (this._selectionModel.isCollapsed) {
968
- const { startLineNumber, endLineNumber } = op.range;
969
- op.rangeOffset = this._jsonModel.getOffsetAt(startLineNumber, 1);
970
- op.oldText = this._jsonModel.getValueInRange({
971
- startLineNumber,
950
+ const startRow = this._selectionModel.startRow;
951
+ const startCol = this._selectionModel.startCol;
952
+ const endRow = this._selectionModel.endRow;
953
+ const endCol = this._selectionModel.endCol;
954
+ let startOffset;
955
+ let oldText = "";
956
+ const op = {
957
+ type: "replace",
958
+ range: {
959
+ startLineNumber: startRow,
960
+ startColumn: startCol,
961
+ endLineNumber: endRow,
962
+ endColumn: endCol
963
+ },
964
+ rangeOffset: 0,
965
+ rangeLength: 0,
966
+ oldText: "",
967
+ newText: ""
968
+ };
969
+ if (!this._selectionModel.isCollapsed) {
970
+ oldText = this._jsonModel.getValueInRange({
971
+ startLineNumber: startRow,
972
+ startColumn: startCol,
973
+ endLineNumber: endRow,
974
+ endColumn: endCol
975
+ });
976
+ startOffset = this._jsonModel.getOffsetAt(startRow, startCol);
977
+ } else {
978
+ oldText = this._jsonModel.getValueInRange({
979
+ startLineNumber: startRow,
972
980
  startColumn: 1,
973
- endLineNumber,
974
- endColumn: this._jsonModel.getLineLength(endLineNumber) + 1
981
+ endLineNumber: endRow,
982
+ endColumn: this._jsonModel.getLineLength(endRow) + 1
975
983
  });
976
984
  op.range = {
977
- startLineNumber,
985
+ startLineNumber: startRow,
978
986
  startColumn: 1,
979
- endLineNumber,
980
- endColumn: this._jsonModel.getLineLength(endLineNumber) + 1
987
+ endLineNumber: endRow,
988
+ endColumn: this._jsonModel.getLineLength(endRow) + 1
981
989
  };
990
+ startOffset = this._jsonModel.getOffsetAt(startRow, 1);
991
+ }
992
+ op.oldText = oldText;
993
+ op.rangeOffset = startOffset;
994
+ op.rangeLength = oldText.length;
995
+ if (this._selectionModel.isSelectedAll) {
996
+ op.range = {
997
+ startLineNumber: 1,
998
+ startColumn: 1,
999
+ endLineNumber: this._jsonModel.getLineCount(),
1000
+ endColumn: this._jsonModel.getLineLength(this._jsonModel.getLineCount()) + 1
1001
+ };
1002
+ op.rangeOffset = 0;
1003
+ op.rangeLength = this._jsonModel.getValue().length;
1004
+ op.oldText = this._jsonModel.getValue();
982
1005
  }
983
1006
  navigator.clipboard.writeText(op.oldText);
984
1007
  this._jsonModel.applyOperation(op);
@@ -988,7 +1011,6 @@ var EditWidget = class {
988
1011
  // src/view/fold/foldWidget.ts
989
1012
  var FoldWidget = class {
990
1013
  constructor(view, foldingModel) {
991
- this._isMouseOver = false;
992
1014
  this._view = view;
993
1015
  this._foldingModel = foldingModel;
994
1016
  this._attachEventListeners();
@@ -1003,14 +1025,11 @@ var FoldWidget = class {
1003
1025
  }
1004
1026
  _handleLineNumberHover(e) {
1005
1027
  this._showFoldingIcon();
1006
- this._isMouseOver = true;
1007
1028
  }
1008
1029
  _handleLineNumberContainerLeave() {
1009
1030
  this.removeAllFoldingIcons();
1010
- this._isMouseOver = false;
1011
1031
  }
1012
1032
  _showFoldingIcon() {
1013
- if (this._isMouseOver) return;
1014
1033
  const lineNumberElement = this._view.lineScrollDom.children;
1015
1034
  for (let i = 0; i < lineNumberElement.length; i++) {
1016
1035
  const element = lineNumberElement[i];
@@ -1060,7 +1079,6 @@ var FoldWidget = class {
1060
1079
  this._foldingModel.toggleFoldingRange(lineNumber);
1061
1080
  this._view.scalingCellSizeAndPositionManager.resetCell(0);
1062
1081
  this._view.layout();
1063
- this._isMouseOver = false;
1064
1082
  });
1065
1083
  return foldingIcon;
1066
1084
  }
@@ -3170,7 +3188,6 @@ var CompleteWidget = class {
3170
3188
  ).join("");
3171
3189
  }
3172
3190
  hide() {
3173
- if (!this.isVisible) return;
3174
3191
  this.isVisible = false;
3175
3192
  this._container.style.display = "none";
3176
3193
  this._suggestions = [];
@@ -3345,23 +3362,19 @@ var View = class {
3345
3362
  });
3346
3363
  this._contentDom.addEventListener("click", (e) => {
3347
3364
  e.preventDefault();
3348
- this._completeWidget.hide();
3349
3365
  this._selectionModel.isSelectedAll = false;
3350
3366
  this._selectionModel.updateFromSelection();
3351
3367
  });
3352
3368
  this.emitter.on("contentChanged", () => {
3353
3369
  this.resetScalingManagerConfigAndCell(0);
3354
- if (this._jsonModel.lastChangeBufferPos.lineNumber >= this.visibleLineCount + this.startLineNumber) {
3355
- this.scrollToLine(
3356
- this._jsonModel.lastChangeBufferPos.lineNumber - this.visibleLineCount + 1
3357
- );
3358
- return;
3359
- }
3360
3370
  this.layout();
3361
3371
  });
3362
3372
  }
3363
3373
  getLineElement(lineNumber) {
3364
- return this.scrollDom.querySelector(`[data-line-number="${lineNumber}"]`);
3374
+ const visibleLineNumber = this._foldingModel.getVisibleLineNumber(lineNumber);
3375
+ if (visibleLineNumber > this.visibleLineCount + this.startLineNumber || visibleLineNumber < this.startLineNumber)
3376
+ return null;
3377
+ return this._scrollDom.children[visibleLineNumber - this._foldingModel.getVisibleLineNumber(this.startLineNumber)];
3365
3378
  }
3366
3379
  updateVisibleRange(start, end) {
3367
3380
  this.startLineNumber = start;
package/package.json CHANGED
@@ -1,57 +1,57 @@
1
1
  {
2
- "name": "@douyinfe/semi-json-viewer-core",
3
- "version": "2.71.1-alpha",
4
- "description": "",
5
- "main": "lib/index.js",
6
- "module": "lib/index.js",
7
- "typings": "src/index.ts",
8
- "scripts": {
9
- "build:lib": "node ./script/compileLib.js",
10
- "prepublishOnly": "npm run build:lib"
11
- },
12
- "files": [
13
- "dist/*",
14
- "lib/*"
15
- ],
16
- "dependencies": {
17
- "jsonc-parser": "^3.3.1"
18
- },
19
- "devDependencies": {
20
- "esbuild": "^0.24.0"
21
- },
22
- "sideEffects": [
23
- "*.scss",
24
- "*.css",
25
- "lib/es/index.js",
26
- "./index.ts"
27
- ],
28
- "keywords": [
29
- "bytedance douyin design system",
30
- "semi design to any design",
31
- "a11y react component library",
32
- "design to code",
33
- "code to design",
34
- "3000+ design token",
35
- "dark mode",
36
- "semi design",
37
- "design ops",
38
- "modern design system",
39
- "figma ui kit"
40
- ],
41
- "homepage": "https://semi.design",
42
- "bugs": {
43
- "url": "https://github.com/DouyinFE/semi-design/issues"
44
- },
45
- "repository": {
46
- "type": "git",
47
- "url": "https://github.com/DouyinFE/semi-design"
48
- },
49
- "_unpkg": true,
50
- "unpkgFiles": [
51
- "dist/css",
52
- "dist/umd/*.js"
53
- ],
54
- "author": "",
55
- "license": "MIT",
56
- "gitHead": "245b2462e1d2824d9254d0a79b318d4c5eb55d37"
2
+ "name": "@douyinfe/semi-json-viewer-core",
3
+ "version": "2.71.2",
4
+ "description": "",
5
+ "main": "lib/index.js",
6
+ "module": "lib/index.js",
7
+ "typings": "src/index.ts",
8
+ "scripts": {
9
+ "build:lib": "node ./script/compileLib.js",
10
+ "prepublishOnly": "npm run build:lib"
11
+ },
12
+ "files": [
13
+ "dist/*",
14
+ "lib/*"
15
+ ],
16
+ "dependencies": {
17
+ "jsonc-parser": "^3.3.1"
18
+ },
19
+ "devDependencies": {
20
+ "esbuild": "^0.24.0"
21
+ },
22
+ "sideEffects": [
23
+ "*.scss",
24
+ "*.css",
25
+ "lib/es/index.js",
26
+ "./index.ts"
27
+ ],
28
+ "keywords": [
29
+ "bytedance douyin design system",
30
+ "semi design to any design",
31
+ "a11y react component library",
32
+ "design to code",
33
+ "code to design",
34
+ "3000+ design token",
35
+ "dark mode",
36
+ "semi design",
37
+ "design ops",
38
+ "modern design system",
39
+ "figma ui kit"
40
+ ],
41
+ "homepage": "https://semi.design",
42
+ "bugs": {
43
+ "url": "https://github.com/DouyinFE/semi-design/issues"
44
+ },
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "https://github.com/DouyinFE/semi-design"
48
+ },
49
+ "_unpkg": true,
50
+ "unpkgFiles": [
51
+ "dist/css",
52
+ "dist/umd/*.js"
53
+ ],
54
+ "author": "",
55
+ "license": "MIT",
56
+ "gitHead": "e65e2dcb2c75c77a7c41234b1e7b5a2ebc73dd67"
57
57
  }