@termaxjs/editor-core 0.1.1

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 (91) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +274 -0
  3. package/dist/buffer/PieceTable.d.ts +31 -0
  4. package/dist/buffer/PieceTable.d.ts.map +1 -0
  5. package/dist/buffer/PieceTable.js +365 -0
  6. package/dist/buffer/PieceTable.js.map +1 -0
  7. package/dist/buffer/TerminalBuffer.d.ts +45 -0
  8. package/dist/buffer/TerminalBuffer.d.ts.map +1 -0
  9. package/dist/buffer/TerminalBuffer.js +166 -0
  10. package/dist/buffer/TerminalBuffer.js.map +1 -0
  11. package/dist/collab/AwarenessState.d.ts +30 -0
  12. package/dist/collab/AwarenessState.d.ts.map +1 -0
  13. package/dist/collab/AwarenessState.js +76 -0
  14. package/dist/collab/AwarenessState.js.map +1 -0
  15. package/dist/collab/CollabProvider.d.ts +45 -0
  16. package/dist/collab/CollabProvider.d.ts.map +1 -0
  17. package/dist/collab/CollabProvider.js +153 -0
  18. package/dist/collab/CollabProvider.js.map +1 -0
  19. package/dist/coordinates.d.ts +132 -0
  20. package/dist/coordinates.d.ts.map +1 -0
  21. package/dist/coordinates.js +651 -0
  22. package/dist/coordinates.js.map +1 -0
  23. package/dist/decoration/Decoration.d.ts +36 -0
  24. package/dist/decoration/Decoration.d.ts.map +1 -0
  25. package/dist/decoration/Decoration.js +34 -0
  26. package/dist/decoration/Decoration.js.map +1 -0
  27. package/dist/decoration/DecorationSet.d.ts +16 -0
  28. package/dist/decoration/DecorationSet.d.ts.map +1 -0
  29. package/dist/decoration/DecorationSet.js +54 -0
  30. package/dist/decoration/DecorationSet.js.map +1 -0
  31. package/dist/diff/diff.d.ts +27 -0
  32. package/dist/diff/diff.d.ts.map +1 -0
  33. package/dist/diff/diff.js +219 -0
  34. package/dist/diff/diff.js.map +1 -0
  35. package/dist/index.d.ts +22 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +22 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/layout/HeightMap.d.ts +35 -0
  40. package/dist/layout/HeightMap.d.ts.map +1 -0
  41. package/dist/layout/HeightMap.js +95 -0
  42. package/dist/layout/HeightMap.js.map +1 -0
  43. package/dist/layout/softWrap.d.ts +23 -0
  44. package/dist/layout/softWrap.d.ts.map +1 -0
  45. package/dist/layout/softWrap.js +67 -0
  46. package/dist/layout/softWrap.js.map +1 -0
  47. package/dist/state/Annotation.d.ts +22 -0
  48. package/dist/state/Annotation.d.ts.map +1 -0
  49. package/dist/state/Annotation.js +38 -0
  50. package/dist/state/Annotation.js.map +1 -0
  51. package/dist/state/ChangeSet.d.ts +27 -0
  52. package/dist/state/ChangeSet.d.ts.map +1 -0
  53. package/dist/state/ChangeSet.js +162 -0
  54. package/dist/state/ChangeSet.js.map +1 -0
  55. package/dist/state/EditorState.d.ts +25 -0
  56. package/dist/state/EditorState.d.ts.map +1 -0
  57. package/dist/state/EditorState.js +110 -0
  58. package/dist/state/EditorState.js.map +1 -0
  59. package/dist/state/Extension.d.ts +16 -0
  60. package/dist/state/Extension.d.ts.map +1 -0
  61. package/dist/state/Extension.js +12 -0
  62. package/dist/state/Extension.js.map +1 -0
  63. package/dist/state/Facet.d.ts +13 -0
  64. package/dist/state/Facet.d.ts.map +1 -0
  65. package/dist/state/Facet.js +22 -0
  66. package/dist/state/Facet.js.map +1 -0
  67. package/dist/state/Keymap.d.ts +22 -0
  68. package/dist/state/Keymap.d.ts.map +1 -0
  69. package/dist/state/Keymap.js +10 -0
  70. package/dist/state/Keymap.js.map +1 -0
  71. package/dist/state/MultiCursorPaste.d.ts +14 -0
  72. package/dist/state/MultiCursorPaste.d.ts.map +1 -0
  73. package/dist/state/MultiCursorPaste.js +18 -0
  74. package/dist/state/MultiCursorPaste.js.map +1 -0
  75. package/dist/state/RectangularSelection.d.ts +12 -0
  76. package/dist/state/RectangularSelection.d.ts.map +1 -0
  77. package/dist/state/RectangularSelection.js +27 -0
  78. package/dist/state/RectangularSelection.js.map +1 -0
  79. package/dist/state/StateField.d.ts +18 -0
  80. package/dist/state/StateField.d.ts.map +1 -0
  81. package/dist/state/StateField.js +29 -0
  82. package/dist/state/StateField.js.map +1 -0
  83. package/dist/state/Transaction.d.ts +22 -0
  84. package/dist/state/Transaction.d.ts.map +1 -0
  85. package/dist/state/Transaction.js +23 -0
  86. package/dist/state/Transaction.js.map +1 -0
  87. package/dist/types.d.ts +161 -0
  88. package/dist/types.d.ts.map +1 -0
  89. package/dist/types.js +6 -0
  90. package/dist/types.js.map +1 -0
  91. package/package.json +38 -0
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Dynamic HeightMap data structure for variable-height line rows and block insets.
3
+ * Provides O(log N) pixel-to-line and line-to-pixel coordinate conversions.
4
+ */
5
+ export class HeightMap {
6
+ defaultLineHeight;
7
+ totalLines;
8
+ overrides = new Map();
9
+ constructor(totalLines, defaultLineHeight = 20) {
10
+ this.totalLines = Math.max(1, totalLines);
11
+ this.defaultLineHeight = Math.max(1, defaultLineHeight);
12
+ }
13
+ setTotalLines(totalLines) {
14
+ this.totalLines = Math.max(1, totalLines);
15
+ // Prune overrides past the new line count
16
+ for (const line of this.overrides.keys()) {
17
+ if (line >= this.totalLines) {
18
+ this.overrides.delete(line);
19
+ }
20
+ }
21
+ }
22
+ setDefaultLineHeight(height) {
23
+ this.defaultLineHeight = Math.max(1, height);
24
+ }
25
+ setLineHeight(line, height) {
26
+ if (line < 0 || line >= this.totalLines)
27
+ return;
28
+ if (height === this.defaultLineHeight) {
29
+ this.overrides.delete(line);
30
+ }
31
+ else {
32
+ this.overrides.set(line, Math.max(1, height));
33
+ }
34
+ }
35
+ getLineHeight(line) {
36
+ return this.overrides.get(line) ?? this.defaultLineHeight;
37
+ }
38
+ totalHeight() {
39
+ if (this.overrides.size === 0) {
40
+ return this.totalLines * this.defaultLineHeight;
41
+ }
42
+ let total = this.totalLines * this.defaultLineHeight;
43
+ for (const [_, h] of this.overrides) {
44
+ total += h - this.defaultLineHeight;
45
+ }
46
+ return total;
47
+ }
48
+ /**
49
+ * Get the top pixel coordinate and height of a specific line.
50
+ */
51
+ heightAtLine(line) {
52
+ const clamped = Math.max(0, Math.min(line, this.totalLines - 1));
53
+ const h = this.getLineHeight(clamped);
54
+ if (this.overrides.size === 0) {
55
+ return { top: clamped * this.defaultLineHeight, height: h };
56
+ }
57
+ let top = 0;
58
+ for (let i = 0; i < clamped; i++) {
59
+ top += this.getLineHeight(i);
60
+ }
61
+ return { top, height: h };
62
+ }
63
+ /**
64
+ * Find the line number at a given pixel Y offset.
65
+ */
66
+ lineAtHeight(pixelY) {
67
+ if (pixelY <= 0) {
68
+ return { line: 0, top: 0, height: this.getLineHeight(0) };
69
+ }
70
+ if (this.overrides.size === 0) {
71
+ const line = Math.max(0, Math.min(this.totalLines - 1, Math.floor(pixelY / this.defaultLineHeight)));
72
+ return {
73
+ line,
74
+ top: line * this.defaultLineHeight,
75
+ height: this.defaultLineHeight,
76
+ };
77
+ }
78
+ let currentTop = 0;
79
+ for (let l = 0; l < this.totalLines; l++) {
80
+ const h = this.getLineHeight(l);
81
+ if (pixelY >= currentTop && pixelY < currentTop + h) {
82
+ return { line: l, top: currentTop, height: h };
83
+ }
84
+ currentTop += h;
85
+ }
86
+ const lastLine = this.totalLines - 1;
87
+ const lastHeight = this.getLineHeight(lastLine);
88
+ return {
89
+ line: lastLine,
90
+ top: currentTop - lastHeight,
91
+ height: lastHeight,
92
+ };
93
+ }
94
+ }
95
+ //# sourceMappingURL=HeightMap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeightMap.js","sourceRoot":"","sources":["../../src/layout/HeightMap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Soft-wrapping layout calculator for monospaced text.
3
+ */
4
+ export interface SoftWrapResult {
5
+ visualRows: number;
6
+ breakOffsets: number[];
7
+ }
8
+ /**
9
+ * Computes soft-wrap break offsets for a single line given a maximum column width.
10
+ */
11
+ export declare function computeSoftWrap(lineText: string, wrapColumn: number): SoftWrapResult;
12
+ /**
13
+ * Maps a visual row and column within a soft-wrapped line back to character offset.
14
+ */
15
+ export declare function mapVisualToOffset(visualRow: number, visualCol: number, breakOffsets: number[], lineLength: number): number;
16
+ /**
17
+ * Maps a character offset within a soft-wrapped line to visual row and column.
18
+ */
19
+ export declare function mapOffsetToVisual(offset: number, breakOffsets: number[]): {
20
+ visualRow: number;
21
+ visualCol: number;
22
+ };
23
+ //# sourceMappingURL=softWrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"softWrap.d.ts","sourceRoot":"","sources":["../../src/layout/softWrap.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,cAAc,CAiCpF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EAAE,EACtB,UAAU,EAAE,MAAM,GACjB,MAAM,CAWR;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EAAE,GACrB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAkB1C"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Soft-wrapping layout calculator for monospaced text.
3
+ */
4
+ /**
5
+ * Computes soft-wrap break offsets for a single line given a maximum column width.
6
+ */
7
+ export function computeSoftWrap(lineText, wrapColumn) {
8
+ if (wrapColumn <= 0 || lineText.length <= wrapColumn) {
9
+ return { visualRows: 1, breakOffsets: [] };
10
+ }
11
+ const breakOffsets = [];
12
+ let currentStart = 0;
13
+ while (currentStart + wrapColumn < lineText.length) {
14
+ const chunkLimit = currentStart + wrapColumn;
15
+ // Look for whitespace boundary near chunk limit
16
+ let breakPoint = -1;
17
+ for (let i = chunkLimit; i > currentStart + Math.floor(wrapColumn / 2); i--) {
18
+ const ch = lineText[i];
19
+ if (ch === " " || ch === "\t" || ch === "-" || ch === "_" || ch === "/" || ch === ".") {
20
+ breakPoint = i + 1;
21
+ break;
22
+ }
23
+ }
24
+ if (breakPoint === -1) {
25
+ // Hard break at column limit
26
+ breakPoint = chunkLimit;
27
+ }
28
+ breakOffsets.push(breakPoint);
29
+ currentStart = breakPoint;
30
+ }
31
+ return {
32
+ visualRows: breakOffsets.length + 1,
33
+ breakOffsets,
34
+ };
35
+ }
36
+ /**
37
+ * Maps a visual row and column within a soft-wrapped line back to character offset.
38
+ */
39
+ export function mapVisualToOffset(visualRow, visualCol, breakOffsets, lineLength) {
40
+ if (breakOffsets.length === 0 || visualRow <= 0) {
41
+ return Math.min(visualCol, lineLength);
42
+ }
43
+ const clampedRow = Math.min(visualRow, breakOffsets.length);
44
+ const rowStart = breakOffsets[clampedRow - 1] ?? 0;
45
+ const rowEnd = clampedRow < breakOffsets.length ? (breakOffsets[clampedRow] ?? lineLength) : lineLength;
46
+ return Math.min(rowStart + visualCol, rowEnd);
47
+ }
48
+ /**
49
+ * Maps a character offset within a soft-wrapped line to visual row and column.
50
+ */
51
+ export function mapOffsetToVisual(offset, breakOffsets) {
52
+ if (breakOffsets.length === 0) {
53
+ return { visualRow: 0, visualCol: offset };
54
+ }
55
+ let row = 0;
56
+ let rowStart = 0;
57
+ for (let i = 0; i < breakOffsets.length; i++) {
58
+ const brk = breakOffsets[i] ?? 0;
59
+ if (offset < brk) {
60
+ return { visualRow: row, visualCol: offset - rowStart };
61
+ }
62
+ row++;
63
+ rowStart = brk;
64
+ }
65
+ return { visualRow: row, visualCol: Math.max(0, offset - rowStart) };
66
+ }
67
+ //# sourceMappingURL=softWrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"softWrap.js","sourceRoot":"","sources":["../../src/layout/softWrap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export declare class AnnotationType<T> {
2
+ private constructor();
3
+ static define<T>(): AnnotationType<T>;
4
+ of(value: T): Annotation<T>;
5
+ }
6
+ export declare class Annotation<T> {
7
+ readonly type: AnnotationType<T>;
8
+ readonly value: T;
9
+ constructor(type: AnnotationType<T>, value: T);
10
+ }
11
+ export declare class StateEffectType<T> {
12
+ private constructor();
13
+ static define<T>(): StateEffectType<T>;
14
+ of(value: T): StateEffect<T>;
15
+ }
16
+ export declare class StateEffect<T> {
17
+ readonly value: T;
18
+ readonly effectType: StateEffectType<T>;
19
+ constructor(type: StateEffectType<T>, value: T);
20
+ is<Value>(type: StateEffectType<Value>): this is StateEffect<Value>;
21
+ }
22
+ //# sourceMappingURL=Annotation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Annotation.d.ts","sourceRoot":"","sources":["../../src/state/Annotation.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAc,CAAC,CAAC;IAC3B,OAAO;IAEP,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC;IAIrC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;CAG5B;AAED,qBAAa,UAAU,CAAC,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;gBAEN,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;CAI9C;AAED,qBAAa,eAAe,CAAC,CAAC;IAC5B,OAAO;IAEP,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC,CAAC;IAItC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;CAG7B;AAED,qBAAa,WAAW,CAAC,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;gBAE5B,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;IAK9C,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC;CAGpE"}
@@ -0,0 +1,38 @@
1
+ export class AnnotationType {
2
+ constructor() { }
3
+ static define() {
4
+ return new AnnotationType();
5
+ }
6
+ of(value) {
7
+ return new Annotation(this, value);
8
+ }
9
+ }
10
+ export class Annotation {
11
+ type;
12
+ value;
13
+ constructor(type, value) {
14
+ this.type = type;
15
+ this.value = value;
16
+ }
17
+ }
18
+ export class StateEffectType {
19
+ constructor() { }
20
+ static define() {
21
+ return new StateEffectType();
22
+ }
23
+ of(value) {
24
+ return new StateEffect(this, value);
25
+ }
26
+ }
27
+ export class StateEffect {
28
+ value;
29
+ effectType;
30
+ constructor(type, value) {
31
+ this.effectType = type;
32
+ this.value = value;
33
+ }
34
+ is(type) {
35
+ return this.effectType === type;
36
+ }
37
+ }
38
+ //# sourceMappingURL=Annotation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Annotation.js","sourceRoot":"","sources":["../../src/state/Annotation.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,cAAc;IACzB,gBAAuB,CAAC;IAExB,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,cAAc,EAAK,CAAC;IACjC,CAAC;IAED,EAAE,CAAC,KAAQ;QACT,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;CACF;AAED,MAAM,OAAO,UAAU;IACZ,IAAI,CAAoB;IACxB,KAAK,CAAI;IAElB,YAAY,IAAuB,EAAE,KAAQ;QAC3C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED,MAAM,OAAO,eAAe;IAC1B,gBAAuB,CAAC;IAExB,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,eAAe,EAAK,CAAC;IAClC,CAAC;IAED,EAAE,CAAC,KAAQ;QACT,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;CACF;AAED,MAAM,OAAO,WAAW;IACb,KAAK,CAAI;IACT,UAAU,CAAqB;IAExC,YAAY,IAAwB,EAAE,KAAQ;QAC5C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,EAAE,CAAQ,IAA4B;QACpC,OAAQ,IAAI,CAAC,UAAsB,KAAK,IAAI,CAAC;IAC/C,CAAC;CACF"}
@@ -0,0 +1,27 @@
1
+ export interface ChangeSpec {
2
+ from: number;
3
+ to?: number;
4
+ insert?: string;
5
+ }
6
+ export declare class ChangeDesc {
7
+ readonly from: number;
8
+ readonly to: number;
9
+ readonly insertLength: number;
10
+ constructor(from: number, to: number, insertLength: number);
11
+ get lengthDelta(): number;
12
+ }
13
+ export declare class ChangeSet {
14
+ readonly changes: ReadonlyArray<ChangeSpec>;
15
+ readonly docLength: number;
16
+ constructor(changes?: ChangeSpec[], docLength?: number);
17
+ static of(changes: ChangeSpec | ChangeSpec[], docLength: number): ChangeSet;
18
+ static empty(docLength?: number): ChangeSet;
19
+ get empty(): boolean;
20
+ get newDocLength(): number;
21
+ get lengthDelta(): number;
22
+ apply(text: string): string;
23
+ mapPos(pos: number, assoc?: -1 | 1): number;
24
+ invert(docText: string): ChangeSet;
25
+ compose(other: ChangeSet): ChangeSet;
26
+ }
27
+ //# sourceMappingURL=ChangeSet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangeSet.d.ts","sourceRoot":"","sources":["../../src/state/ChangeSet.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,UAAU;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;gBAElB,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;IAM1D,IAAI,WAAW,IAAI,MAAM,CAExB;CACF;AA8BD,qBAAa,SAAS;IACpB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,OAAO,GAAE,UAAU,EAAO,EAAE,SAAS,SAAI;IAKrD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS;IAK3E,MAAM,CAAC,KAAK,CAAC,SAAS,SAAI,GAAG,SAAS;IAItC,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,IAAI,YAAY,IAAI,MAAM,CASzB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAe3B,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,CAAC,CAAC,GAAG,CAAK,GAAG,MAAM;IAuB9C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS;IAwBlC,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS;CAwCrC"}
@@ -0,0 +1,162 @@
1
+ export class ChangeDesc {
2
+ from;
3
+ to;
4
+ insertLength;
5
+ constructor(from, to, insertLength) {
6
+ this.from = from;
7
+ this.to = to;
8
+ this.insertLength = insertLength;
9
+ }
10
+ get lengthDelta() {
11
+ return this.insertLength - (this.to - this.from);
12
+ }
13
+ }
14
+ function normalizeChanges(changes, docLength) {
15
+ if (changes.length === 0)
16
+ return [];
17
+ const sanitized = changes.map((c) => {
18
+ const from = Math.max(0, Math.min(c.from, docLength));
19
+ const to = c.to !== undefined ? Math.max(from, Math.min(c.to, docLength)) : from;
20
+ return { from, to, insert: c.insert || "" };
21
+ });
22
+ sanitized.sort((a, b) => a.from - b.from || a.to - b.to);
23
+ const merged = [];
24
+ for (const c of sanitized) {
25
+ if (merged.length > 0) {
26
+ const prev = merged[merged.length - 1];
27
+ if (c.from <= prev.to) {
28
+ // Overlapping or adjacent: merge
29
+ prev.to = Math.max(prev.to, c.to);
30
+ prev.insert = (prev.insert || "") + (c.insert || "");
31
+ continue;
32
+ }
33
+ }
34
+ merged.push({ ...c });
35
+ }
36
+ return merged;
37
+ }
38
+ export class ChangeSet {
39
+ changes;
40
+ docLength;
41
+ constructor(changes = [], docLength = 0) {
42
+ this.docLength = docLength;
43
+ this.changes = normalizeChanges(changes, docLength);
44
+ }
45
+ static of(changes, docLength) {
46
+ const list = Array.isArray(changes) ? changes : [changes];
47
+ return new ChangeSet(list, docLength);
48
+ }
49
+ static empty(docLength = 0) {
50
+ return new ChangeSet([], docLength);
51
+ }
52
+ get empty() {
53
+ return this.changes.length === 0;
54
+ }
55
+ get newDocLength() {
56
+ let len = this.docLength;
57
+ for (const c of this.changes) {
58
+ const from = c.from;
59
+ const to = c.to ?? from;
60
+ const insertLen = c.insert ? c.insert.length : 0;
61
+ len += insertLen - (to - from);
62
+ }
63
+ return len;
64
+ }
65
+ get lengthDelta() {
66
+ return this.newDocLength - this.docLength;
67
+ }
68
+ apply(text) {
69
+ if (this.changes.length === 0)
70
+ return text;
71
+ let result = "";
72
+ let lastEnd = 0;
73
+ for (const c of this.changes) {
74
+ const from = c.from;
75
+ const to = c.to ?? from;
76
+ const insert = c.insert || "";
77
+ result += text.slice(lastEnd, from) + insert;
78
+ lastEnd = to;
79
+ }
80
+ result += text.slice(lastEnd);
81
+ return result;
82
+ }
83
+ mapPos(pos, assoc = 1) {
84
+ let result = pos;
85
+ for (const c of this.changes) {
86
+ const from = c.from;
87
+ const to = c.to ?? from;
88
+ const insertLen = c.insert ? c.insert.length : 0;
89
+ if (pos < from) {
90
+ continue;
91
+ }
92
+ if (pos > to) {
93
+ result += insertLen - (to - from);
94
+ }
95
+ else {
96
+ if (assoc < 0) {
97
+ result = from;
98
+ }
99
+ else {
100
+ result = from + insertLen;
101
+ }
102
+ }
103
+ }
104
+ return Math.max(0, result);
105
+ }
106
+ invert(docText) {
107
+ const invertedChanges = [];
108
+ let offsetAdjustment = 0;
109
+ for (const c of this.changes) {
110
+ const from = c.from;
111
+ const to = c.to ?? from;
112
+ const originalText = docText.slice(from, to);
113
+ const insertLen = c.insert ? c.insert.length : 0;
114
+ const newFrom = from + offsetAdjustment;
115
+ const newTo = newFrom + insertLen;
116
+ invertedChanges.push({
117
+ from: newFrom,
118
+ to: newTo,
119
+ insert: originalText,
120
+ });
121
+ offsetAdjustment += insertLen - (to - from);
122
+ }
123
+ return new ChangeSet(invertedChanges, this.newDocLength);
124
+ }
125
+ compose(other) {
126
+ if (this.empty)
127
+ return other;
128
+ if (other.empty)
129
+ return this;
130
+ // Simulate combined effect on index space
131
+ const combinedLength = this.docLength;
132
+ // Map second changes through inverse of first or combine outputs
133
+ const sampleText = " ".repeat(this.docLength);
134
+ const midText = this.apply(sampleText);
135
+ const _finalText = other.apply(midText);
136
+ // Build composed change list
137
+ const composedChanges = [];
138
+ for (const c1 of this.changes) {
139
+ const from1 = c1.from;
140
+ const to1 = c1.to ?? from1;
141
+ const ins1 = c1.insert || "";
142
+ composedChanges.push({
143
+ from: from1,
144
+ to: to1,
145
+ insert: ins1,
146
+ });
147
+ }
148
+ // Apply other's remaining adjustments
149
+ for (const c2 of other.changes) {
150
+ const from2 = c2.from;
151
+ const to2 = c2.to ?? from2;
152
+ const ins2 = c2.insert || "";
153
+ composedChanges.push({
154
+ from: from2,
155
+ to: to2,
156
+ insert: ins2,
157
+ });
158
+ }
159
+ return new ChangeSet(composedChanges, combinedLength);
160
+ }
161
+ }
162
+ //# sourceMappingURL=ChangeSet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangeSet.js","sourceRoot":"","sources":["../../src/state/ChangeSet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { PieceTable } from "../buffer/PieceTable.js";
2
+ import { Transaction, type TransactionSpec } from "./Transaction.js";
3
+ import type { StateField } from "./StateField.js";
4
+ import type { Facet } from "./Facet.js";
5
+ import { type Extension } from "./Extension.js";
6
+ import type { Selection } from "../types.js";
7
+ export interface EditorStateConfig {
8
+ doc?: string | PieceTable;
9
+ selection?: Selection | Selection[];
10
+ extensions?: Extension;
11
+ }
12
+ export declare class EditorState {
13
+ readonly doc: PieceTable;
14
+ readonly selection: Selection[];
15
+ private readonly fields;
16
+ private readonly facetValues;
17
+ private readonly stateFields;
18
+ readonly extensions: Extension;
19
+ private constructor();
20
+ static create(config?: EditorStateConfig): EditorState;
21
+ field<T>(field: StateField<T>): T;
22
+ facet<Input, Output>(facet: Facet<Input, Output>): Output;
23
+ update(spec: TransactionSpec): Transaction;
24
+ }
25
+ //# sourceMappingURL=EditorState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditorState.d.ts","sourceRoot":"","sources":["../../src/state/EditorState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAEL,KAAK,SAAS,EAGf,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC1B,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,CAAC;IACpC,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB;AAED,qBAAa,WAAW;IACtB,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4B;IACxD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4B;IACxD,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC;IAE/B,OAAO;IAgBP,MAAM,CAAC,MAAM,CAAC,MAAM,GAAE,iBAAsB,GAAG,WAAW;IAsD1D,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC;IAUjC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,MAAM;IAOzD,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW;CAoD3C"}
@@ -0,0 +1,110 @@
1
+ import { PieceTable } from "../buffer/PieceTable.js";
2
+ import { ChangeSet } from "./ChangeSet.js";
3
+ import { Transaction } from "./Transaction.js";
4
+ import { flattenExtensions, } from "./Extension.js";
5
+ export class EditorState {
6
+ doc;
7
+ selection;
8
+ fields;
9
+ facetValues;
10
+ stateFields;
11
+ extensions;
12
+ constructor(doc, selection, fields, facetValues, stateFields, extensions) {
13
+ this.doc = doc;
14
+ this.selection = selection;
15
+ this.fields = fields;
16
+ this.facetValues = facetValues;
17
+ this.stateFields = stateFields;
18
+ this.extensions = extensions;
19
+ }
20
+ static create(config = {}) {
21
+ const rawDoc = config.doc;
22
+ const doc = rawDoc instanceof PieceTable
23
+ ? rawDoc
24
+ : new PieceTable(typeof rawDoc === "string" ? rawDoc : "");
25
+ const selection = config.selection
26
+ ? Array.isArray(config.selection)
27
+ ? config.selection
28
+ : [config.selection]
29
+ : [{ anchor: { line: 0, column: 0 }, head: { line: 0, column: 0 } }];
30
+ const extensions = config.extensions || [];
31
+ const flattened = flattenExtensions(extensions);
32
+ // Group facets
33
+ const facetInputs = new Map();
34
+ const stateFieldProviders = [];
35
+ for (const item of flattened) {
36
+ if (item.type === "facet") {
37
+ const fp = item;
38
+ const list = facetInputs.get(fp.facet) || [];
39
+ list.push(fp.value);
40
+ facetInputs.set(fp.facet, list);
41
+ }
42
+ else if (item.type === "stateField") {
43
+ stateFieldProviders.push(item);
44
+ }
45
+ }
46
+ const facetValues = new Map();
47
+ for (const [facet, inputs] of facetInputs.entries()) {
48
+ facetValues.set(facet, facet.combine(inputs));
49
+ }
50
+ const fields = new Map();
51
+ const state = new EditorState(doc, selection, fields, facetValues, stateFieldProviders, extensions);
52
+ // Initialize state fields
53
+ for (const provider of stateFieldProviders) {
54
+ const initVal = provider.init ? provider.init(state) : provider.field.create(state);
55
+ fields.set(provider.field, initVal);
56
+ }
57
+ return state;
58
+ }
59
+ field(field) {
60
+ const val = this.fields.get(field);
61
+ if (val === undefined) {
62
+ throw new Error("StateField not found in EditorState. Ensure it was registered in extensions.");
63
+ }
64
+ return val;
65
+ }
66
+ facet(facet) {
67
+ if (this.facetValues.has(facet)) {
68
+ return this.facetValues.get(facet);
69
+ }
70
+ return facet.combine([]);
71
+ }
72
+ update(spec) {
73
+ const changes = spec.changes instanceof ChangeSet
74
+ ? spec.changes
75
+ : spec.changes
76
+ ? ChangeSet.of(spec.changes, this.doc.length)
77
+ : ChangeSet.empty(this.doc.length);
78
+ const selection = spec.selection
79
+ ? Array.isArray(spec.selection)
80
+ ? spec.selection
81
+ : [spec.selection]
82
+ : undefined;
83
+ const annotationsMap = new Map();
84
+ if (spec.annotations) {
85
+ const list = Array.isArray(spec.annotations) ? spec.annotations : [spec.annotations];
86
+ for (const ann of list) {
87
+ annotationsMap.set(ann.type, ann.value);
88
+ }
89
+ }
90
+ const effects = spec.effects
91
+ ? (Array.isArray(spec.effects) ? spec.effects : [spec.effects])
92
+ : [];
93
+ return new Transaction(this, changes, selection, annotationsMap, effects, (tr) => {
94
+ let nextDoc = this.doc;
95
+ if (!changes.empty) {
96
+ const newText = changes.apply(this.doc.getText());
97
+ nextDoc = new PieceTable(newText);
98
+ }
99
+ const nextSelection = tr.selection || this.selection;
100
+ const nextFields = new Map();
101
+ for (const provider of this.stateFields) {
102
+ const prevVal = this.fields.get(provider.field);
103
+ const nextVal = provider.field.update(prevVal, tr);
104
+ nextFields.set(provider.field, nextVal);
105
+ }
106
+ return new EditorState(nextDoc, nextSelection, nextFields, this.facetValues, this.stateFields, this.extensions);
107
+ });
108
+ }
109
+ }
110
+ //# sourceMappingURL=EditorState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditorState.js","sourceRoot":"","sources":["../../src/state/EditorState.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { Facet } from "./Facet.js";
2
+ import type { StateField } from "./StateField.js";
3
+ import type { EditorState } from "./EditorState.js";
4
+ export interface FacetProvider<Input> {
5
+ readonly type: "facet";
6
+ readonly facet: Facet<Input, any>;
7
+ readonly value: Input;
8
+ }
9
+ export interface StateFieldProvider<Value> {
10
+ readonly type: "stateField";
11
+ readonly field: StateField<Value>;
12
+ readonly init?: (state: EditorState) => Value;
13
+ }
14
+ export type Extension = FacetProvider<any> | StateFieldProvider<any> | Extension[];
15
+ export declare function flattenExtensions(extension: Extension, target?: Array<FacetProvider<any> | StateFieldProvider<any>>): Array<FacetProvider<any> | StateFieldProvider<any>>;
16
+ //# sourceMappingURL=Extension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Extension.d.ts","sourceRoot":"","sources":["../../src/state/Extension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,WAAW,aAAa,CAAC,KAAK;IAClC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB,CAAC,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,KAAK,CAAC;CAC/C;AAED,MAAM,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,GAAG,SAAS,EAAE,CAAC;AAEnF,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,SAAS,EACpB,MAAM,GAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAM,GAC/D,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CASrD"}