@pierre/diffs 1.1.19 → 1.2.0-beta.0
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/components/CodeView.d.ts +324 -0
- package/dist/components/CodeView.d.ts.map +1 -0
- package/dist/components/CodeView.js +1245 -0
- package/dist/components/CodeView.js.map +1 -0
- package/dist/components/File.d.ts +13 -12
- package/dist/components/File.d.ts.map +1 -1
- package/dist/components/File.js +68 -28
- package/dist/components/File.js.map +1 -1
- package/dist/components/FileDiff.d.ts +9 -10
- package/dist/components/FileDiff.d.ts.map +1 -1
- package/dist/components/FileDiff.js +57 -30
- package/dist/components/FileDiff.js.map +1 -1
- package/dist/components/FileStream.js +9 -3
- package/dist/components/FileStream.js.map +1 -1
- package/dist/components/VirtualizedFile.d.ts +28 -5
- package/dist/components/VirtualizedFile.d.ts.map +1 -1
- package/dist/components/VirtualizedFile.js +225 -45
- package/dist/components/VirtualizedFile.js.map +1 -1
- package/dist/components/VirtualizedFileDiff.d.ts +28 -5
- package/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
- package/dist/components/VirtualizedFileDiff.js +285 -49
- package/dist/components/VirtualizedFileDiff.js.map +1 -1
- package/dist/components/Virtualizer.d.ts +6 -3
- package/dist/components/Virtualizer.d.ts.map +1 -1
- package/dist/components/Virtualizer.js +4 -6
- package/dist/components/Virtualizer.js.map +1 -1
- package/dist/components/VirtulizerDevelopment.d.ts +2 -2
- package/dist/components/VirtulizerDevelopment.d.ts.map +1 -1
- package/dist/constants.d.ts +6 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +17 -2
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts +6 -5
- package/dist/index.js +11 -10
- package/dist/managers/InteractionManager.d.ts +11 -7
- package/dist/managers/InteractionManager.d.ts.map +1 -1
- package/dist/managers/InteractionManager.js +38 -25
- package/dist/managers/InteractionManager.js.map +1 -1
- package/dist/managers/ResizeManager.d.ts +4 -4
- package/dist/managers/ResizeManager.d.ts.map +1 -1
- package/dist/managers/ResizeManager.js +89 -54
- package/dist/managers/ResizeManager.js.map +1 -1
- package/dist/managers/UniversalRenderingManager.d.ts +2 -1
- package/dist/managers/UniversalRenderingManager.d.ts.map +1 -1
- package/dist/managers/UniversalRenderingManager.js +13 -16
- package/dist/managers/UniversalRenderingManager.js.map +1 -1
- package/dist/react/CodeView.d.ts +45 -0
- package/dist/react/CodeView.d.ts.map +1 -0
- package/dist/react/CodeView.js +241 -0
- package/dist/react/CodeView.js.map +1 -0
- package/dist/react/File.d.ts +0 -1
- package/dist/react/File.d.ts.map +1 -1
- package/dist/react/File.js +2 -3
- package/dist/react/File.js.map +1 -1
- package/dist/react/FileDiff.d.ts +0 -1
- package/dist/react/FileDiff.d.ts.map +1 -1
- package/dist/react/FileDiff.js +3 -4
- package/dist/react/FileDiff.js.map +1 -1
- package/dist/react/MultiFileDiff.d.ts +0 -1
- package/dist/react/MultiFileDiff.d.ts.map +1 -1
- package/dist/react/MultiFileDiff.js +3 -4
- package/dist/react/MultiFileDiff.js.map +1 -1
- package/dist/react/PatchDiff.d.ts +0 -1
- package/dist/react/PatchDiff.d.ts.map +1 -1
- package/dist/react/PatchDiff.js +3 -4
- package/dist/react/PatchDiff.js.map +1 -1
- package/dist/react/UnresolvedFile.d.ts +0 -1
- package/dist/react/UnresolvedFile.d.ts.map +1 -1
- package/dist/react/UnresolvedFile.js +3 -4
- package/dist/react/UnresolvedFile.js.map +1 -1
- package/dist/react/index.d.ts +3 -2
- package/dist/react/index.js +5 -4
- package/dist/react/jsx.d.ts.map +1 -1
- package/dist/react/types.d.ts +0 -8
- package/dist/react/types.d.ts.map +1 -1
- package/dist/react/utils/renderDiffChildren.d.ts +0 -2
- package/dist/react/utils/renderDiffChildren.d.ts.map +1 -1
- package/dist/react/utils/renderDiffChildren.js +3 -4
- package/dist/react/utils/renderDiffChildren.js.map +1 -1
- package/dist/react/utils/renderFileChildren.d.ts +0 -2
- package/dist/react/utils/renderFileChildren.d.ts.map +1 -1
- package/dist/react/utils/renderFileChildren.js +3 -4
- package/dist/react/utils/renderFileChildren.js.map +1 -1
- package/dist/react/utils/useFileDiffInstance.js +12 -7
- package/dist/react/utils/useFileDiffInstance.js.map +1 -1
- package/dist/react/utils/useFileInstance.js +12 -7
- package/dist/react/utils/useFileInstance.js.map +1 -1
- package/dist/react/utils/useUnresolvedFileInstance.js +6 -2
- package/dist/react/utils/useUnresolvedFileInstance.js.map +1 -1
- package/dist/renderers/DiffHunksRenderer.d.ts +2 -1
- package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
- package/dist/renderers/DiffHunksRenderer.js +35 -20
- package/dist/renderers/DiffHunksRenderer.js.map +1 -1
- package/dist/renderers/FileRenderer.d.ts +2 -1
- package/dist/renderers/FileRenderer.d.ts.map +1 -1
- package/dist/renderers/FileRenderer.js +34 -20
- package/dist/renderers/FileRenderer.js.map +1 -1
- package/dist/ssr/index.d.ts +2 -2
- package/dist/ssr/preloadDiffs.js +1 -1
- package/dist/style.js +1 -1
- package/dist/style.js.map +1 -1
- package/dist/types.d.ts +98 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/areManagedSnapshotsEqual.d.ts +7 -0
- package/dist/utils/areManagedSnapshotsEqual.d.ts.map +1 -0
- package/dist/utils/areManagedSnapshotsEqual.js +15 -0
- package/dist/utils/areManagedSnapshotsEqual.js.map +1 -0
- package/dist/utils/areOptionsEqual.d.ts +2 -1
- package/dist/utils/areOptionsEqual.d.ts.map +1 -1
- package/dist/utils/areOptionsEqual.js +1 -1
- package/dist/utils/areOptionsEqual.js.map +1 -1
- package/dist/utils/createFileHeaderElement.d.ts +3 -1
- package/dist/utils/createFileHeaderElement.d.ts.map +1 -1
- package/dist/utils/createFileHeaderElement.js +3 -2
- package/dist/utils/createFileHeaderElement.js.map +1 -1
- package/dist/utils/createWindowFromScrollPosition.d.ts +3 -3
- package/dist/utils/createWindowFromScrollPosition.d.ts.map +1 -1
- package/dist/utils/createWindowFromScrollPosition.js +6 -6
- package/dist/utils/createWindowFromScrollPosition.js.map +1 -1
- package/dist/utils/iterateOverDiff.d.ts +2 -1
- package/dist/utils/iterateOverDiff.d.ts.map +1 -1
- package/dist/utils/iterateOverDiff.js +135 -7
- package/dist/utils/iterateOverDiff.js.map +1 -1
- package/dist/utils/parsePatchFiles.js +2 -2
- package/dist/utils/parsePatchFiles.js.map +1 -1
- package/dist/utils/renderFileWithHighlighter.js +1 -1
- package/dist/utils/resolveVirtualFileMetrics.d.ts +4 -1
- package/dist/utils/resolveVirtualFileMetrics.d.ts.map +1 -1
- package/dist/utils/resolveVirtualFileMetrics.js +11 -1
- package/dist/utils/resolveVirtualFileMetrics.js.map +1 -1
- package/dist/utils/roundToDevicePixel.d.ts +14 -0
- package/dist/utils/roundToDevicePixel.d.ts.map +1 -0
- package/dist/utils/roundToDevicePixel.js +18 -0
- package/dist/utils/roundToDevicePixel.js.map +1 -0
- package/dist/worker/worker-portable.js +195 -14
- package/dist/worker/worker-portable.js.map +1 -1
- package/dist/worker/worker.js +146 -7
- package/dist/worker/worker.js.map +1 -1
- package/package.json +10 -1
- package/dist/components/AdvancedVirtualizedFileDiff.d.ts +0 -40
- package/dist/components/AdvancedVirtualizedFileDiff.d.ts.map +0 -1
- package/dist/components/AdvancedVirtualizedFileDiff.js +0 -140
- package/dist/components/AdvancedVirtualizedFileDiff.js.map +0 -1
- package/dist/components/AdvancedVirtualizer.d.ts +0 -38
- package/dist/components/AdvancedVirtualizer.d.ts.map +0 -1
- package/dist/components/AdvancedVirtualizer.js +0 -201
- package/dist/components/AdvancedVirtualizer.js.map +0 -1
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
//#region src/managers/ResizeManager.ts
|
|
2
2
|
var ResizeManager = class {
|
|
3
|
-
observedNodes = /* @__PURE__ */ new Map();
|
|
4
|
-
queuedUpdates = /* @__PURE__ */ new Map();
|
|
5
|
-
cleanUp() {
|
|
6
|
-
this.resizeObserver?.disconnect();
|
|
7
|
-
this.observedNodes.clear();
|
|
8
|
-
this.queuedUpdates.clear();
|
|
9
|
-
}
|
|
10
3
|
resizeObserver;
|
|
4
|
+
observedNodes = /* @__PURE__ */ new Map();
|
|
11
5
|
setup(pre, disableAnnotations) {
|
|
12
6
|
this.resizeObserver ??= new ResizeObserver(this.handleResizeObserver);
|
|
13
|
-
const
|
|
7
|
+
const annotationUpdates = /* @__PURE__ */ new Set();
|
|
8
|
+
let columnCount = 0;
|
|
14
9
|
const observedNodes = new Map(this.observedNodes);
|
|
15
10
|
this.observedNodes.clear();
|
|
16
|
-
for (const
|
|
11
|
+
for (const element of pre.children) {
|
|
12
|
+
if (columnCount === 2) break;
|
|
13
|
+
const codeElement = (() => {
|
|
14
|
+
if (element instanceof HTMLElement && element.tagName === "CODE") return element;
|
|
15
|
+
})();
|
|
16
|
+
if (codeElement == null) continue;
|
|
17
|
+
columnCount++;
|
|
17
18
|
let item = observedNodes.get(codeElement);
|
|
18
19
|
if (item != null && item.type !== "code") throw new Error("ResizeManager.setup: somehow a code node is being used for an annotation, should be impossible");
|
|
19
20
|
let numberElement = codeElement.firstElementChild;
|
|
@@ -22,17 +23,21 @@ var ResizeManager = class {
|
|
|
22
23
|
this.observedNodes.set(codeElement, item);
|
|
23
24
|
observedNodes.delete(codeElement);
|
|
24
25
|
if (item.numberElement !== numberElement) {
|
|
25
|
-
if (item.numberElement != null)
|
|
26
|
+
if (item.numberElement != null) {
|
|
27
|
+
this.resizeObserver.unobserve(item.numberElement);
|
|
28
|
+
observedNodes.delete(item.numberElement);
|
|
29
|
+
}
|
|
26
30
|
if (numberElement != null) {
|
|
27
31
|
this.resizeObserver.observe(numberElement);
|
|
28
32
|
observedNodes.delete(numberElement);
|
|
29
33
|
this.observedNodes.set(numberElement, item);
|
|
30
34
|
}
|
|
31
35
|
item.numberElement = numberElement;
|
|
36
|
+
item.numberWidth = 0;
|
|
32
37
|
} else if (item.numberElement != null) {
|
|
33
38
|
observedNodes.delete(item.numberElement);
|
|
34
39
|
this.observedNodes.set(item.numberElement, item);
|
|
35
|
-
}
|
|
40
|
+
} else item.numberWidth = 0;
|
|
36
41
|
} else {
|
|
37
42
|
item = {
|
|
38
43
|
type: "code",
|
|
@@ -49,12 +54,12 @@ var ResizeManager = class {
|
|
|
49
54
|
}
|
|
50
55
|
}
|
|
51
56
|
}
|
|
52
|
-
if (
|
|
57
|
+
if (columnCount > 1 && !disableAnnotations) {
|
|
53
58
|
const annotationElements = pre.querySelectorAll("[data-line-annotation*=\",\"]");
|
|
54
59
|
const elementMap = /* @__PURE__ */ new Map();
|
|
55
60
|
for (const element of annotationElements) {
|
|
56
61
|
if (!(element instanceof HTMLElement)) continue;
|
|
57
|
-
const
|
|
62
|
+
const lineAnnotation = element.getAttribute("data-line-annotation") ?? "";
|
|
58
63
|
if (!/^\d+,\d+$/.test(lineAnnotation)) {
|
|
59
64
|
console.error("DiffFileRenderer.setupResizeObserver: Invalid element or annotation", {
|
|
60
65
|
lineAnnotation,
|
|
@@ -86,40 +91,52 @@ var ResizeManager = class {
|
|
|
86
91
|
observedNodes.delete(child2);
|
|
87
92
|
continue;
|
|
88
93
|
}
|
|
94
|
+
const child1Height = child1.getBoundingClientRect().height;
|
|
95
|
+
const child2Height = child2.getBoundingClientRect().height;
|
|
89
96
|
item = {
|
|
90
97
|
type: "annotations",
|
|
91
98
|
column1: {
|
|
92
99
|
container: container1,
|
|
93
100
|
child: child1,
|
|
94
|
-
childHeight:
|
|
101
|
+
childHeight: child1Height
|
|
95
102
|
},
|
|
96
103
|
column2: {
|
|
97
104
|
container: container2,
|
|
98
105
|
child: child2,
|
|
99
|
-
childHeight:
|
|
106
|
+
childHeight: child2Height
|
|
100
107
|
},
|
|
101
108
|
currentHeight: "auto"
|
|
102
109
|
};
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
110
|
+
annotationUpdates.add({
|
|
111
|
+
child1,
|
|
112
|
+
child2,
|
|
113
|
+
item,
|
|
114
|
+
newHeight: Math.max(child1Height, child2Height)
|
|
115
|
+
});
|
|
109
116
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
if (element.parentElement instanceof HTMLElement) element.parentElement.style.removeProperty("--diffs-annotation-min-height");
|
|
117
|
+
for (const pendingUpdate of annotationUpdates) {
|
|
118
|
+
this.applyNewHeight(pendingUpdate.item, pendingUpdate.newHeight);
|
|
119
|
+
this.observedNodes.set(pendingUpdate.child1, pendingUpdate.item);
|
|
120
|
+
this.observedNodes.set(pendingUpdate.child2, pendingUpdate.item);
|
|
121
|
+
this.resizeObserver.observe(pendingUpdate.child1);
|
|
122
|
+
this.resizeObserver.observe(pendingUpdate.child2);
|
|
117
123
|
}
|
|
124
|
+
annotationUpdates.clear();
|
|
125
|
+
}
|
|
126
|
+
for (const [element, item] of observedNodes) {
|
|
118
127
|
this.resizeObserver.unobserve(element);
|
|
128
|
+
if (item.type === "code") cleanupStaleCodeItem(item);
|
|
129
|
+
else cleanupStaleAnnotationItem(item);
|
|
119
130
|
}
|
|
120
131
|
observedNodes.clear();
|
|
121
132
|
}
|
|
133
|
+
cleanUp() {
|
|
134
|
+
this.resizeObserver?.disconnect();
|
|
135
|
+
this.observedNodes.clear();
|
|
136
|
+
}
|
|
122
137
|
handleResizeObserver = (entries) => {
|
|
138
|
+
const codeUpdates = /* @__PURE__ */ new Map();
|
|
139
|
+
const annotationUpdates = /* @__PURE__ */ new Set();
|
|
123
140
|
for (const entry of entries) {
|
|
124
141
|
const { target, borderBoxSize, contentBoxSize } = entry;
|
|
125
142
|
if (!(target instanceof HTMLElement)) {
|
|
@@ -144,39 +161,39 @@ var ResizeManager = class {
|
|
|
144
161
|
continue;
|
|
145
162
|
}
|
|
146
163
|
column.childHeight = borderBoxSize[0].blockSize;
|
|
147
|
-
|
|
148
|
-
this.applyNewHeight(item, newHeight);
|
|
164
|
+
annotationUpdates.add(item);
|
|
149
165
|
} else if (item.type === "code") {
|
|
150
|
-
const update =
|
|
151
|
-
const
|
|
152
|
-
|
|
153
|
-
|
|
166
|
+
const update = codeUpdates.get(item) ?? {};
|
|
167
|
+
const inlineSize = contentBoxSize[0].inlineSize;
|
|
168
|
+
if (target === item.codeElement) update.codeInlineSize = inlineSize;
|
|
169
|
+
else if (target === item.numberElement) update.numberInlineSize = inlineSize;
|
|
170
|
+
codeUpdates.set(item, update);
|
|
154
171
|
}
|
|
155
172
|
}
|
|
156
|
-
this.
|
|
173
|
+
this.applyAnnotationUpdates(annotationUpdates);
|
|
174
|
+
annotationUpdates.clear();
|
|
175
|
+
this.applyColumnUpdates(codeUpdates);
|
|
176
|
+
codeUpdates.clear();
|
|
157
177
|
};
|
|
158
|
-
|
|
159
|
-
for (const
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
178
|
+
applyAnnotationUpdates(annotationUpdates) {
|
|
179
|
+
for (const item of annotationUpdates) this.applyNewHeight(item, Math.max(item.column1.childHeight, item.column2.childHeight));
|
|
180
|
+
}
|
|
181
|
+
applyColumnUpdates = (queuedUpdates) => {
|
|
182
|
+
for (const [item, update] of queuedUpdates) {
|
|
183
|
+
const nextCodeWidth = update.codeInlineSize != null ? resolveCodeWidth(update.codeInlineSize) : item.codeWidth;
|
|
184
|
+
const nextNumberWidth = update.numberInlineSize != null ? resolveNumberWidth(update.numberInlineSize) : item.numberWidth;
|
|
185
|
+
const codeWidthChanged = nextCodeWidth !== item.codeWidth;
|
|
186
|
+
const numberWidthChanged = nextNumberWidth !== item.numberWidth;
|
|
187
|
+
if (!codeWidthChanged && !numberWidthChanged) continue;
|
|
188
|
+
item.codeWidth = nextCodeWidth;
|
|
189
|
+
item.numberWidth = nextNumberWidth;
|
|
190
|
+
if (codeWidthChanged) item.codeElement.style.setProperty("--diffs-column-width", `${typeof nextCodeWidth === "number" ? `${nextCodeWidth}px` : "auto"}`);
|
|
191
|
+
if (numberWidthChanged) item.codeElement.style.setProperty("--diffs-column-number-width", `${nextNumberWidth === 0 ? "auto" : `${nextNumberWidth}px`}`);
|
|
192
|
+
if (codeWidthChanged || numberWidthChanged && nextCodeWidth !== "auto") {
|
|
193
|
+
const targetWidth = typeof nextCodeWidth === "number" ? Math.max(nextCodeWidth - nextNumberWidth, 0) : 0;
|
|
164
194
|
item.codeElement.style.setProperty("--diffs-column-content-width", `${targetWidth > 0 ? `${targetWidth}px` : "auto"}`);
|
|
165
|
-
item.codeElement.style.setProperty("--diffs-column-width", `${typeof item.codeWidth === "number" ? `${item.codeWidth}px` : "auto"}`);
|
|
166
|
-
}
|
|
167
|
-
if (item.numberElement != null && typeof item.codeWidth === "number" && item.numberWidth === 0) updates.push([item.numberElement, item.numberElement.getBoundingClientRect().width]);
|
|
168
|
-
} else if (target === item.numberElement) {
|
|
169
|
-
const inlineSize = Math.max(Math.ceil(targetInlineSize), 0);
|
|
170
|
-
if (inlineSize !== item.numberWidth) {
|
|
171
|
-
item.numberWidth = inlineSize;
|
|
172
|
-
item.codeElement.style.setProperty("--diffs-column-number-width", `${item.numberWidth === 0 ? "auto" : `${item.numberWidth}px`}`);
|
|
173
|
-
if (item.codeWidth !== "auto") {
|
|
174
|
-
const targetWidth = Math.max(item.codeWidth - item.numberWidth, 0);
|
|
175
|
-
item.codeElement.style.setProperty("--diffs-column-content-width", `${targetWidth === 0 ? "auto" : `${targetWidth}px`}`);
|
|
176
|
-
}
|
|
177
195
|
}
|
|
178
196
|
}
|
|
179
|
-
this.queuedUpdates.clear();
|
|
180
197
|
};
|
|
181
198
|
applyNewHeight(item, newHeight) {
|
|
182
199
|
if (newHeight !== item.currentHeight) {
|
|
@@ -186,6 +203,24 @@ var ResizeManager = class {
|
|
|
186
203
|
}
|
|
187
204
|
}
|
|
188
205
|
};
|
|
206
|
+
function resolveCodeWidth(inlineSize) {
|
|
207
|
+
const width = Math.max(Math.floor(inlineSize), 0);
|
|
208
|
+
return width === 0 ? "auto" : width;
|
|
209
|
+
}
|
|
210
|
+
function resolveNumberWidth(inlineSize) {
|
|
211
|
+
return Math.max(Math.ceil(inlineSize), 0);
|
|
212
|
+
}
|
|
213
|
+
function cleanupStaleCodeItem(item) {
|
|
214
|
+
if (item.codeElement.isConnected) {
|
|
215
|
+
item.codeElement.style.removeProperty("--diffs-column-content-width");
|
|
216
|
+
item.codeElement.style.removeProperty("--diffs-column-number-width");
|
|
217
|
+
item.codeElement.style.removeProperty("--diffs-column-width");
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
function cleanupStaleAnnotationItem(item) {
|
|
221
|
+
if (item.column1.container.isConnected) item.column1.container.style.removeProperty("--diffs-annotation-min-height");
|
|
222
|
+
if (item.column2.container.isConnected) item.column2.container.style.removeProperty("--diffs-annotation-min-height");
|
|
223
|
+
}
|
|
189
224
|
|
|
190
225
|
//#endregion
|
|
191
226
|
export { ResizeManager };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResizeManager.js","names":["item: ObservedGridNodes | ObservedAnnotationNodes | undefined","update: CodeColumnUpdate"],"sources":["../../src/managers/ResizeManager.ts"],"sourcesContent":["import type { ObservedAnnotationNodes, ObservedGridNodes } from '../types';\n\ntype CodeColumnUpdate = [HTMLElement, number];\n\nexport class ResizeManager {\n private observedNodes = new Map<\n HTMLElement,\n ObservedAnnotationNodes | ObservedGridNodes\n >();\n private queuedUpdates: Map<ObservedGridNodes, CodeColumnUpdate[]> = new Map();\n\n cleanUp(): void {\n // Disconnect any existing observer\n this.resizeObserver?.disconnect();\n this.observedNodes.clear();\n this.queuedUpdates.clear();\n }\n\n private resizeObserver: ResizeObserver | undefined;\n\n setup(pre: HTMLPreElement, disableAnnotations: boolean): void {\n this.resizeObserver ??= new ResizeObserver(this.handleResizeObserver);\n const codeElements = pre.querySelectorAll('code');\n\n const observedNodes = new Map(this.observedNodes);\n this.observedNodes.clear();\n for (const codeElement of codeElements) {\n let item: ObservedGridNodes | ObservedAnnotationNodes | undefined =\n observedNodes.get(codeElement);\n if (item != null && item.type !== 'code') {\n throw new Error(\n 'ResizeManager.setup: somehow a code node is being used for an annotation, should be impossible'\n );\n }\n\n let numberElement = codeElement.firstElementChild;\n if (!(numberElement instanceof HTMLElement)) {\n numberElement = null;\n }\n\n if (item != null) {\n this.observedNodes.set(codeElement, item);\n observedNodes.delete(codeElement);\n if (item.numberElement !== numberElement) {\n if (item.numberElement != null) {\n this.resizeObserver.unobserve(item.numberElement);\n }\n if (numberElement != null) {\n this.resizeObserver.observe(numberElement);\n observedNodes.delete(numberElement);\n this.observedNodes.set(numberElement, item);\n }\n item.numberElement = numberElement;\n } else if (item.numberElement != null) {\n observedNodes.delete(item.numberElement);\n this.observedNodes.set(item.numberElement, item);\n }\n } else {\n item = {\n type: 'code',\n codeElement,\n numberElement,\n codeWidth: 'auto',\n numberWidth: 0,\n };\n this.observedNodes.set(codeElement, item);\n this.resizeObserver.observe(codeElement);\n if (numberElement != null) {\n this.observedNodes.set(numberElement, item);\n this.resizeObserver.observe(numberElement);\n }\n }\n }\n\n if (codeElements.length > 1 && !disableAnnotations) {\n const annotationElements = pre.querySelectorAll(\n '[data-line-annotation*=\",\"]'\n );\n\n const elementMap = new Map<string, HTMLElement[]>();\n for (const element of annotationElements) {\n if (!(element instanceof HTMLElement)) {\n continue;\n }\n const { lineAnnotation = '' } = element.dataset;\n if (!/^\\d+,\\d+$/.test(lineAnnotation)) {\n console.error(\n 'DiffFileRenderer.setupResizeObserver: Invalid element or annotation',\n { lineAnnotation, element }\n );\n continue;\n }\n let pairs = elementMap.get(lineAnnotation);\n if (pairs == null) {\n pairs = [];\n elementMap.set(lineAnnotation, pairs);\n }\n pairs.push(element);\n }\n\n for (const [key, pair] of elementMap) {\n if (pair.length !== 2) {\n console.error(\n 'DiffFileRenderer.setupResizeObserver: Bad Pair',\n key,\n pair\n );\n continue;\n }\n const [container1, container2] = pair;\n const child1 = container1.firstElementChild;\n const child2 = container2.firstElementChild;\n if (\n !(container1 instanceof HTMLElement) ||\n !(container2 instanceof HTMLElement) ||\n !(child1 instanceof HTMLElement) ||\n !(child2 instanceof HTMLElement)\n ) {\n continue;\n }\n\n let item = observedNodes.get(child1);\n\n if (item != null) {\n this.observedNodes.set(child1, item);\n this.observedNodes.set(child2, item);\n observedNodes.delete(child1);\n observedNodes.delete(child2);\n continue;\n }\n\n item = {\n type: 'annotations',\n column1: {\n container: container1,\n child: child1,\n childHeight: child1.getBoundingClientRect().height,\n },\n column2: {\n container: container2,\n child: child2,\n childHeight: child2.getBoundingClientRect().height,\n },\n currentHeight: 'auto',\n };\n\n const newHeight = Math.max(\n item.column1.childHeight,\n item.column2.childHeight\n );\n this.applyNewHeight(item, newHeight);\n\n this.observedNodes.set(child1, item);\n this.observedNodes.set(child2, item);\n this.resizeObserver.observe(child1);\n this.resizeObserver.observe(child2);\n }\n }\n\n for (const element of observedNodes.keys()) {\n if (element.isConnected) {\n element.style.removeProperty('--diffs-column-content-width');\n element.style.removeProperty('--diffs-column-number-width');\n element.style.removeProperty('--diffs-column-width');\n if (element.parentElement instanceof HTMLElement) {\n element.parentElement.style.removeProperty(\n '--diffs-annotation-min-height'\n );\n }\n }\n this.resizeObserver.unobserve(element);\n }\n observedNodes.clear();\n }\n\n private handleResizeObserver = (entries: ResizeObserverEntry[]) => {\n for (const entry of entries) {\n const { target, borderBoxSize, contentBoxSize } = entry;\n if (!(target instanceof HTMLElement)) {\n console.error(\n 'FileDiff.handleResizeObserver: Invalid element for ResizeObserver',\n entry\n );\n continue;\n }\n const item = this.observedNodes.get(target);\n if (item == null) {\n console.error(\n 'FileDiff.handleResizeObserver: Not a valid observed node',\n entry\n );\n continue;\n }\n if (item.type === 'annotations') {\n const column = (() => {\n if (target === item.column1.child) {\n return item.column1;\n }\n if (target === item.column2.child) {\n return item.column2;\n }\n return undefined;\n })();\n\n if (column == null) {\n console.error(\n `FileDiff.handleResizeObserver: Couldn't find a column for`,\n { item, target }\n );\n continue;\n }\n\n column.childHeight = borderBoxSize[0].blockSize;\n const newHeight = Math.max(\n item.column1.childHeight,\n item.column2.childHeight\n );\n this.applyNewHeight(item, newHeight);\n } else if (item.type === 'code') {\n const update: CodeColumnUpdate = [target, contentBoxSize[0].inlineSize];\n const updates = this.queuedUpdates.get(item) ?? [];\n updates.push(update);\n this.queuedUpdates.set(item, updates);\n }\n }\n this.handleColumnChange();\n };\n\n private handleColumnChange = () => {\n for (const [item, updates] of this.queuedUpdates) {\n for (const [target, targetInlineSize] of updates) {\n // FIXME(amadeus): This needs to be re-worked with display: contents,\n // not sure setting to auto is a good assumption most of the time...\n if (target === item.codeElement) {\n const inlineSize = Math.max(Math.floor(targetInlineSize), 0);\n if (inlineSize !== item.codeWidth) {\n const targetWidth = Math.max(inlineSize - item.numberWidth, 0);\n item.codeWidth = inlineSize === 0 ? 'auto' : inlineSize;\n item.codeElement.style.setProperty(\n '--diffs-column-content-width',\n `${targetWidth > 0 ? `${targetWidth}px` : 'auto'}`\n );\n item.codeElement.style.setProperty(\n '--diffs-column-width',\n `${typeof item.codeWidth === 'number' ? `${item.codeWidth}px` : 'auto'}`\n );\n }\n if (\n item.numberElement != null &&\n typeof item.codeWidth === 'number' &&\n item.numberWidth === 0\n ) {\n updates.push([\n item.numberElement,\n item.numberElement.getBoundingClientRect().width,\n ]);\n }\n } else if (target === item.numberElement) {\n const inlineSize = Math.max(Math.ceil(targetInlineSize), 0);\n if (inlineSize !== item.numberWidth) {\n item.numberWidth = inlineSize;\n item.codeElement.style.setProperty(\n '--diffs-column-number-width',\n `${item.numberWidth === 0 ? 'auto' : `${item.numberWidth}px`}`\n );\n // We probably need to update code width variable if\n // `numberWidth` changed\n if (item.codeWidth !== 'auto') {\n const targetWidth = Math.max(\n item.codeWidth - item.numberWidth,\n 0\n );\n item.codeElement.style.setProperty(\n '--diffs-column-content-width',\n `${targetWidth === 0 ? 'auto' : `${targetWidth}px`}`\n );\n }\n }\n }\n }\n }\n this.queuedUpdates.clear();\n };\n\n private applyNewHeight(item: ObservedAnnotationNodes, newHeight: number) {\n if (newHeight !== item.currentHeight) {\n item.currentHeight = Math.max(newHeight, 0);\n item.column1.container.style.setProperty(\n '--diffs-annotation-min-height',\n `${item.currentHeight}px`\n );\n item.column2.container.style.setProperty(\n '--diffs-annotation-min-height',\n `${item.currentHeight}px`\n );\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ResizeManager.js","names":["codeElement: HTMLElement | undefined","item: ObservedGridNodes | ObservedAnnotationNodes | undefined","codeUpdates: CodeUpdateMap","annotationUpdates: Set<ObservedAnnotationNodes>"],"sources":["../../src/managers/ResizeManager.ts"],"sourcesContent":["import type { ObservedAnnotationNodes, ObservedGridNodes } from '../types';\n\ninterface CodeColumnUpdate {\n codeInlineSize?: number;\n numberInlineSize?: number;\n measuredNumberInlineSize?: number;\n}\n\ntype CodeUpdateMap = Map<ObservedGridNodes, CodeColumnUpdate>;\n\ninterface AnnotationSetup {\n child1: HTMLElement;\n child2: HTMLElement;\n item: ObservedAnnotationNodes;\n newHeight: number;\n}\n\nexport class ResizeManager {\n private resizeObserver: ResizeObserver | undefined;\n private observedNodes = new Map<\n HTMLElement,\n ObservedAnnotationNodes | ObservedGridNodes\n >();\n\n setup(pre: HTMLPreElement, disableAnnotations: boolean): void {\n this.resizeObserver ??= new ResizeObserver(this.handleResizeObserver);\n const annotationUpdates = new Set<AnnotationSetup>();\n let columnCount = 0;\n const observedNodes = new Map(this.observedNodes);\n this.observedNodes.clear();\n\n for (const element of pre.children) {\n if (columnCount === 2) {\n break;\n }\n const codeElement: HTMLElement | undefined = (() => {\n if (element instanceof HTMLElement && element.tagName === 'CODE') {\n return element;\n }\n return undefined;\n })();\n if (codeElement == null) {\n continue;\n }\n columnCount++;\n let item: ObservedGridNodes | ObservedAnnotationNodes | undefined =\n observedNodes.get(codeElement);\n if (item != null && item.type !== 'code') {\n throw new Error(\n 'ResizeManager.setup: somehow a code node is being used for an annotation, should be impossible'\n );\n }\n\n let numberElement = codeElement.firstElementChild;\n if (!(numberElement instanceof HTMLElement)) {\n numberElement = null;\n }\n if (item != null) {\n this.observedNodes.set(codeElement, item);\n observedNodes.delete(codeElement);\n if (item.numberElement !== numberElement) {\n if (item.numberElement != null) {\n this.resizeObserver.unobserve(item.numberElement);\n observedNodes.delete(item.numberElement);\n }\n if (numberElement != null) {\n this.resizeObserver.observe(numberElement);\n observedNodes.delete(numberElement);\n this.observedNodes.set(numberElement, item);\n }\n item.numberElement = numberElement;\n item.numberWidth = 0;\n } else if (item.numberElement != null) {\n observedNodes.delete(item.numberElement);\n this.observedNodes.set(item.numberElement, item);\n // If there is a resize, let the resize handler handle it...\n } else {\n item.numberWidth = 0;\n }\n } else {\n item = {\n type: 'code',\n codeElement,\n numberElement,\n codeWidth: 'auto',\n numberWidth: 0,\n };\n this.observedNodes.set(codeElement, item);\n this.resizeObserver.observe(codeElement);\n if (numberElement != null) {\n this.observedNodes.set(numberElement, item);\n this.resizeObserver.observe(numberElement);\n }\n }\n }\n\n if (columnCount > 1 && !disableAnnotations) {\n const annotationElements = pre.querySelectorAll(\n '[data-line-annotation*=\",\"]'\n );\n\n const elementMap = new Map<string, HTMLElement[]>();\n // Iterate through all the matched elements and organize them into pairs\n // based on the data-line-annotation attribute\n for (const element of annotationElements) {\n if (!(element instanceof HTMLElement)) {\n continue;\n }\n const lineAnnotation =\n element.getAttribute('data-line-annotation') ?? '';\n if (!/^\\d+,\\d+$/.test(lineAnnotation)) {\n console.error(\n 'DiffFileRenderer.setupResizeObserver: Invalid element or annotation',\n { lineAnnotation, element }\n );\n continue;\n }\n let pairs = elementMap.get(lineAnnotation);\n if (pairs == null) {\n pairs = [];\n elementMap.set(lineAnnotation, pairs);\n }\n pairs.push(element);\n }\n\n for (const [key, pair] of elementMap) {\n if (pair.length !== 2) {\n console.error(\n 'DiffFileRenderer.setupResizeObserver: Bad Pair',\n key,\n pair\n );\n continue;\n }\n const [container1, container2] = pair;\n const child1 = container1.firstElementChild;\n const child2 = container2.firstElementChild;\n if (\n !(container1 instanceof HTMLElement) ||\n !(container2 instanceof HTMLElement) ||\n !(child1 instanceof HTMLElement) ||\n !(child2 instanceof HTMLElement)\n ) {\n continue;\n }\n\n let item = observedNodes.get(child1);\n\n if (item != null) {\n this.observedNodes.set(child1, item);\n this.observedNodes.set(child2, item);\n observedNodes.delete(child1);\n observedNodes.delete(child2);\n continue;\n }\n\n const child1Height = child1.getBoundingClientRect().height;\n const child2Height = child2.getBoundingClientRect().height;\n item = {\n type: 'annotations',\n column1: {\n container: container1,\n child: child1,\n childHeight: child1Height,\n },\n column2: {\n container: container2,\n child: child2,\n childHeight: child2Height,\n },\n currentHeight: 'auto',\n };\n annotationUpdates.add({\n child1,\n child2,\n item,\n newHeight: Math.max(child1Height, child2Height),\n });\n }\n\n // Measure all annotation heights first, then apply the paired min-height\n // styles after the read phase so setup does not bounce between layout\n // reads and writes for every annotation pair.\n for (const pendingUpdate of annotationUpdates) {\n this.applyNewHeight(pendingUpdate.item, pendingUpdate.newHeight);\n this.observedNodes.set(pendingUpdate.child1, pendingUpdate.item);\n this.observedNodes.set(pendingUpdate.child2, pendingUpdate.item);\n this.resizeObserver.observe(pendingUpdate.child1);\n this.resizeObserver.observe(pendingUpdate.child2);\n }\n annotationUpdates.clear();\n }\n\n // Cleanup any old nodes that might still be observed\n for (const [element, item] of observedNodes) {\n this.resizeObserver.unobserve(element);\n if (item.type === 'code') {\n cleanupStaleCodeItem(item);\n } else {\n cleanupStaleAnnotationItem(item);\n }\n }\n observedNodes.clear();\n }\n\n cleanUp(): void {\n // Disconnect any existing observer and nodes\n this.resizeObserver?.disconnect();\n this.observedNodes.clear();\n }\n\n private handleResizeObserver = (entries: ResizeObserverEntry[]) => {\n const codeUpdates: CodeUpdateMap = new Map();\n const annotationUpdates: Set<ObservedAnnotationNodes> = new Set();\n for (const entry of entries) {\n const { target, borderBoxSize, contentBoxSize } = entry;\n if (!(target instanceof HTMLElement)) {\n console.error(\n 'FileDiff.handleResizeObserver: Invalid element for ResizeObserver',\n entry\n );\n continue;\n }\n const item = this.observedNodes.get(target);\n if (item == null) {\n console.error(\n 'FileDiff.handleResizeObserver: Not a valid observed node',\n entry\n );\n continue;\n }\n if (item.type === 'annotations') {\n const column = (() => {\n if (target === item.column1.child) {\n return item.column1;\n }\n if (target === item.column2.child) {\n return item.column2;\n }\n return undefined;\n })();\n\n if (column == null) {\n console.error(\n `FileDiff.handleResizeObserver: Couldn't find a column for`,\n { item, target }\n );\n continue;\n }\n\n column.childHeight = borderBoxSize[0].blockSize;\n annotationUpdates.add(item);\n } else if (item.type === 'code') {\n const update = codeUpdates.get(item) ?? {};\n const inlineSize = contentBoxSize[0].inlineSize;\n if (target === item.codeElement) {\n update.codeInlineSize = inlineSize;\n } else if (target === item.numberElement) {\n update.numberInlineSize = inlineSize;\n }\n codeUpdates.set(item, update);\n }\n }\n this.applyAnnotationUpdates(annotationUpdates);\n annotationUpdates.clear();\n this.applyColumnUpdates(codeUpdates);\n codeUpdates.clear();\n };\n\n private applyAnnotationUpdates(\n annotationUpdates: Set<ObservedAnnotationNodes>\n ) {\n for (const item of annotationUpdates) {\n this.applyNewHeight(\n item,\n Math.max(item.column1.childHeight, item.column2.childHeight)\n );\n }\n }\n\n private applyColumnUpdates = (queuedUpdates: CodeUpdateMap) => {\n for (const [item, update] of queuedUpdates) {\n const nextCodeWidth =\n update.codeInlineSize != null\n ? resolveCodeWidth(update.codeInlineSize)\n : item.codeWidth;\n const nextNumberWidth =\n update.numberInlineSize != null\n ? resolveNumberWidth(update.numberInlineSize)\n : item.numberWidth;\n const codeWidthChanged = nextCodeWidth !== item.codeWidth;\n const numberWidthChanged = nextNumberWidth !== item.numberWidth;\n\n if (!codeWidthChanged && !numberWidthChanged) {\n continue;\n }\n\n item.codeWidth = nextCodeWidth;\n item.numberWidth = nextNumberWidth;\n\n if (codeWidthChanged) {\n item.codeElement.style.setProperty(\n '--diffs-column-width',\n `${typeof nextCodeWidth === 'number' ? `${nextCodeWidth}px` : 'auto'}`\n );\n }\n\n if (numberWidthChanged) {\n item.codeElement.style.setProperty(\n '--diffs-column-number-width',\n `${nextNumberWidth === 0 ? 'auto' : `${nextNumberWidth}px`}`\n );\n }\n\n if (\n codeWidthChanged ||\n (numberWidthChanged && nextCodeWidth !== 'auto')\n ) {\n const targetWidth =\n typeof nextCodeWidth === 'number'\n ? Math.max(nextCodeWidth - nextNumberWidth, 0)\n : 0;\n item.codeElement.style.setProperty(\n '--diffs-column-content-width',\n `${targetWidth > 0 ? `${targetWidth}px` : 'auto'}`\n );\n }\n }\n };\n\n private applyNewHeight(item: ObservedAnnotationNodes, newHeight: number) {\n if (newHeight !== item.currentHeight) {\n item.currentHeight = Math.max(newHeight, 0);\n item.column1.container.style.setProperty(\n '--diffs-annotation-min-height',\n `${item.currentHeight}px`\n );\n item.column2.container.style.setProperty(\n '--diffs-annotation-min-height',\n `${item.currentHeight}px`\n );\n }\n }\n}\n\nfunction resolveCodeWidth(inlineSize: number): number | 'auto' {\n const width = Math.max(Math.floor(inlineSize), 0);\n return width === 0 ? 'auto' : width;\n}\n\nfunction resolveNumberWidth(inlineSize: number): number {\n return Math.max(Math.ceil(inlineSize), 0);\n}\n\nfunction cleanupStaleCodeItem(item: ObservedGridNodes): void {\n if (item.codeElement.isConnected) {\n item.codeElement.style.removeProperty('--diffs-column-content-width');\n item.codeElement.style.removeProperty('--diffs-column-number-width');\n item.codeElement.style.removeProperty('--diffs-column-width');\n }\n}\n\nfunction cleanupStaleAnnotationItem(item: ObservedAnnotationNodes): void {\n if (item.column1.container.isConnected) {\n item.column1.container.style.removeProperty(\n '--diffs-annotation-min-height'\n );\n }\n if (item.column2.container.isConnected) {\n item.column2.container.style.removeProperty(\n '--diffs-annotation-min-height'\n );\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
//#region src/managers/UniversalRenderingManager.d.ts
|
|
2
2
|
type Callback = (time: number) => unknown;
|
|
3
3
|
declare function queueRender(callback: Callback): void;
|
|
4
|
+
declare function dequeueRender(callback: Callback): void;
|
|
4
5
|
//#endregion
|
|
5
|
-
export { queueRender };
|
|
6
|
+
export { dequeueRender, queueRender };
|
|
6
7
|
//# sourceMappingURL=UniversalRenderingManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UniversalRenderingManager.d.ts","names":["Callback","queueRender"],"sources":["../../src/managers/UniversalRenderingManager.d.ts"],"sourcesContent":["type Callback = (time: number) => unknown;\nexport declare function queueRender(callback: Callback): void;\nexport {};\n//# sourceMappingURL=UniversalRenderingManager.d.ts.map"],"mappings":";KAAKA,QAAAA;AAAAA,iBACmBC,WAAAA,CADX,QAAA,EACiCD,QADjC,CAAA,EAAA,IAAA"}
|
|
1
|
+
{"version":3,"file":"UniversalRenderingManager.d.ts","names":["Callback","queueRender","dequeueRender"],"sources":["../../src/managers/UniversalRenderingManager.d.ts"],"sourcesContent":["type Callback = (time: number) => unknown;\nexport declare function queueRender(callback: Callback): void;\nexport declare function dequeueRender(callback: Callback): void;\nexport {};\n//# sourceMappingURL=UniversalRenderingManager.d.ts.map"],"mappings":";KAAKA,QAAAA;AAAAA,iBACmBC,WAAAA,CADX,QAAA,EACiCD,QADjC,CAAA,EAAA,IAAA;AACWC,iBACAC,aAAAA,CADsBF,QAAQ,EACNA,QADM,CAAA,EAAA,IAAA"}
|
|
@@ -1,32 +1,29 @@
|
|
|
1
1
|
//#region src/managers/UniversalRenderingManager.ts
|
|
2
|
-
const queuedCallbacks = /* @__PURE__ */ new Set();
|
|
3
2
|
let callbacks = /* @__PURE__ */ new Set();
|
|
4
3
|
let frameId = null;
|
|
5
|
-
let isRendering = false;
|
|
6
4
|
function queueRender(callback) {
|
|
7
|
-
if (isRendering) {
|
|
8
|
-
queuedCallbacks.add(callback);
|
|
9
|
-
return;
|
|
10
|
-
}
|
|
11
5
|
callbacks.add(callback);
|
|
12
6
|
frameId ??= requestAnimationFrame(render);
|
|
13
7
|
}
|
|
8
|
+
function dequeueRender(callback) {
|
|
9
|
+
callbacks.delete(callback);
|
|
10
|
+
if (callbacks.size === 0 && frameId != null) {
|
|
11
|
+
cancelAnimationFrame(frameId);
|
|
12
|
+
frameId = null;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
14
15
|
function render(time) {
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
const toIterate = new Set(callbacks);
|
|
17
|
+
callbacks.clear();
|
|
18
|
+
for (const callback of toIterate) try {
|
|
17
19
|
callback(time);
|
|
18
20
|
} catch (error) {
|
|
19
21
|
console.error(error);
|
|
20
22
|
}
|
|
21
|
-
callbacks.
|
|
22
|
-
|
|
23
|
-
callbacks = new Set(queuedCallbacks);
|
|
24
|
-
queuedCallbacks.clear();
|
|
25
|
-
frameId = requestAnimationFrame(render);
|
|
26
|
-
} else frameId = null;
|
|
27
|
-
isRendering = false;
|
|
23
|
+
if (callbacks.size > 0) frameId = requestAnimationFrame(render);
|
|
24
|
+
else frameId = null;
|
|
28
25
|
}
|
|
29
26
|
|
|
30
27
|
//#endregion
|
|
31
|
-
export { queueRender };
|
|
28
|
+
export { dequeueRender, queueRender };
|
|
32
29
|
//# sourceMappingURL=UniversalRenderingManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UniversalRenderingManager.js","names":["frameId: null | number"],"sources":["../../src/managers/UniversalRenderingManager.ts"],"sourcesContent":["type Callback = (time: number) => unknown;\n\
|
|
1
|
+
{"version":3,"file":"UniversalRenderingManager.js","names":["frameId: null | number"],"sources":["../../src/managers/UniversalRenderingManager.ts"],"sourcesContent":["type Callback = (time: number) => unknown;\n\nlet callbacks = new Set<Callback>();\nlet frameId: null | number = null;\n\n// TODO(amadeus): Figure out a proper name for this module...\nexport function queueRender(callback: Callback): void {\n callbacks.add(callback);\n frameId ??= requestAnimationFrame(render);\n}\n\nexport function dequeueRender(callback: Callback): void {\n callbacks.delete(callback);\n if (callbacks.size === 0 && frameId != null) {\n cancelAnimationFrame(frameId);\n frameId = null;\n }\n}\n\nfunction render(time: number): void {\n const toIterate = new Set(callbacks);\n callbacks.clear();\n for (const callback of toIterate) {\n try {\n callback(time);\n } catch (error) {\n console.error(error);\n }\n }\n // If render picked up any new callbacks, lets trigger a new\n // requestAnimationFrame\n if (callbacks.size > 0) {\n frameId = requestAnimationFrame(render);\n } else {\n frameId = null;\n }\n}\n"],"mappings":";AAEA,IAAI,4BAAY,IAAI,KAAe;AACnC,IAAIA,UAAyB;AAG7B,SAAgB,YAAY,UAA0B;AACpD,WAAU,IAAI,SAAS;AACvB,aAAY,sBAAsB,OAAO;;AAG3C,SAAgB,cAAc,UAA0B;AACtD,WAAU,OAAO,SAAS;AAC1B,KAAI,UAAU,SAAS,KAAK,WAAW,MAAM;AAC3C,uBAAqB,QAAQ;AAC7B,YAAU;;;AAId,SAAS,OAAO,MAAoB;CAClC,MAAM,YAAY,IAAI,IAAI,UAAU;AACpC,WAAU,OAAO;AACjB,MAAK,MAAM,YAAY,UACrB,KAAI;AACF,WAAS,KAAK;UACP,OAAO;AACd,UAAQ,MAAM,MAAM;;AAKxB,KAAI,UAAU,OAAO,EACnB,WAAU,sBAAsB,OAAO;KAEvC,WAAU"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { CodeViewItem, CodeViewScrollTarget, DiffLineAnnotation, LineAnnotation } from "../types.js";
|
|
2
|
+
import { GetHoveredLineResult } from "../managers/InteractionManager.js";
|
|
3
|
+
import "../index.js";
|
|
4
|
+
import { CodeView as CodeView$1, CodeViewLineSelection, CodeViewOptions } from "../components/CodeView.js";
|
|
5
|
+
import { CSSProperties, ReactNode, Ref } from "react";
|
|
6
|
+
|
|
7
|
+
//#region src/react/CodeView.d.ts
|
|
8
|
+
type CodeViewGutterUtilityGetter = (() => GetHoveredLineResult<'file'> | undefined) | (() => GetHoveredLineResult<'diff'> | undefined);
|
|
9
|
+
interface CodeViewBaseProps<LAnnotation> {
|
|
10
|
+
options?: CodeViewOptions<LAnnotation>;
|
|
11
|
+
className?: string;
|
|
12
|
+
style?: CSSProperties;
|
|
13
|
+
containerRef?: Ref<HTMLDivElement>;
|
|
14
|
+
disableWorkerPool?: boolean;
|
|
15
|
+
selectedLines?: CodeViewLineSelection | null;
|
|
16
|
+
onSelectedLinesChange?(selection: CodeViewLineSelection | null): void;
|
|
17
|
+
onScroll?(scrollTop: number, viewer: CodeView$1<LAnnotation>): void;
|
|
18
|
+
renderCustomHeader?(item: CodeViewItem<LAnnotation>): ReactNode;
|
|
19
|
+
renderHeaderPrefix?(item: CodeViewItem<LAnnotation>): ReactNode;
|
|
20
|
+
renderHeaderMetadata?(item: CodeViewItem<LAnnotation>): ReactNode;
|
|
21
|
+
renderAnnotation?(annotation: LineAnnotation<LAnnotation> | DiffLineAnnotation<LAnnotation>, item: CodeViewItem<LAnnotation>): ReactNode;
|
|
22
|
+
renderGutterUtility?(getHoveredLine: CodeViewGutterUtilityGetter, item: CodeViewItem<LAnnotation>): ReactNode;
|
|
23
|
+
}
|
|
24
|
+
interface ControlledCodeViewProps<LAnnotation> extends CodeViewBaseProps<LAnnotation> {
|
|
25
|
+
items: readonly CodeViewItem<LAnnotation>[];
|
|
26
|
+
initialItems?: never;
|
|
27
|
+
}
|
|
28
|
+
interface UncontrolledCodeViewProps<LAnnotation> extends CodeViewBaseProps<LAnnotation> {
|
|
29
|
+
items: readonly CodeViewItem<LAnnotation>[];
|
|
30
|
+
}
|
|
31
|
+
type CodeViewProps<LAnnotation = undefined> = ControlledCodeViewProps<LAnnotation> | UncontrolledCodeViewProps<LAnnotation>;
|
|
32
|
+
interface CodeViewHandle<LAnnotation> {
|
|
33
|
+
scrollTo(target: CodeViewScrollTarget): void;
|
|
34
|
+
setSelectedLines(selection: CodeViewLineSelection | null): void;
|
|
35
|
+
getSelectedLines(): CodeViewLineSelection | null;
|
|
36
|
+
clearSelectedLines(): void;
|
|
37
|
+
getInstance(): CodeView$1<LAnnotation> | undefined;
|
|
38
|
+
}
|
|
39
|
+
type CodeViewComponent = <LAnnotation = undefined>(props: CodeViewProps<LAnnotation> & {
|
|
40
|
+
ref?: React.Ref<CodeViewHandle<LAnnotation>>;
|
|
41
|
+
}) => React.JSX.Element;
|
|
42
|
+
declare const CodeView: CodeViewComponent;
|
|
43
|
+
//#endregion
|
|
44
|
+
export { CodeView, CodeViewHandle, CodeViewProps, ControlledCodeViewProps, UncontrolledCodeViewProps };
|
|
45
|
+
//# sourceMappingURL=CodeView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeView.d.ts","names":["CSSProperties","ReactNode","Ref","CodeView","CodeViewClass","CodeViewItem","CodeViewLineSelection","CodeViewOptions","CodeViewScrollTarget","DiffLineAnnotation","GetHoveredLineResult","LineAnnotation","CodeViewGutterUtilityGetter","CodeViewBaseProps","LAnnotation","HTMLDivElement","ControlledCodeViewProps","UncontrolledCodeViewProps","CodeViewProps","CodeViewHandle","CodeViewComponent","React","JSX","Element"],"sources":["../../src/react/CodeView.d.ts"],"sourcesContent":["import { type CSSProperties, type ReactNode, type Ref } from 'react';\nimport { CodeView as CodeViewClass, type CodeViewItem, type CodeViewLineSelection, type CodeViewOptions, type CodeViewScrollTarget, type DiffLineAnnotation, type GetHoveredLineResult, type LineAnnotation } from '../index';\ntype CodeViewGutterUtilityGetter = (() => GetHoveredLineResult<'file'> | undefined) | (() => GetHoveredLineResult<'diff'> | undefined);\ninterface CodeViewBaseProps<LAnnotation> {\n options?: CodeViewOptions<LAnnotation>;\n className?: string;\n style?: CSSProperties;\n containerRef?: Ref<HTMLDivElement>;\n disableWorkerPool?: boolean;\n selectedLines?: CodeViewLineSelection | null;\n onSelectedLinesChange?(selection: CodeViewLineSelection | null): void;\n onScroll?(scrollTop: number, viewer: CodeViewClass<LAnnotation>): void;\n renderCustomHeader?(item: CodeViewItem<LAnnotation>): ReactNode;\n renderHeaderPrefix?(item: CodeViewItem<LAnnotation>): ReactNode;\n renderHeaderMetadata?(item: CodeViewItem<LAnnotation>): ReactNode;\n renderAnnotation?(annotation: LineAnnotation<LAnnotation> | DiffLineAnnotation<LAnnotation>, item: CodeViewItem<LAnnotation>): ReactNode;\n renderGutterUtility?(getHoveredLine: CodeViewGutterUtilityGetter, item: CodeViewItem<LAnnotation>): ReactNode;\n}\nexport interface ControlledCodeViewProps<LAnnotation> extends CodeViewBaseProps<LAnnotation> {\n items: readonly CodeViewItem<LAnnotation>[];\n initialItems?: never;\n}\nexport interface UncontrolledCodeViewProps<LAnnotation> extends CodeViewBaseProps<LAnnotation> {\n items: readonly CodeViewItem<LAnnotation>[];\n}\nexport type CodeViewProps<LAnnotation = undefined> = ControlledCodeViewProps<LAnnotation> | UncontrolledCodeViewProps<LAnnotation>;\nexport interface CodeViewHandle<LAnnotation> {\n scrollTo(target: CodeViewScrollTarget): void;\n setSelectedLines(selection: CodeViewLineSelection | null): void;\n getSelectedLines(): CodeViewLineSelection | null;\n clearSelectedLines(): void;\n getInstance(): CodeViewClass<LAnnotation> | undefined;\n}\ntype CodeViewComponent = <LAnnotation = undefined>(props: CodeViewProps<LAnnotation> & {\n ref?: React.Ref<CodeViewHandle<LAnnotation>>;\n}) => React.JSX.Element;\nexport declare const CodeView: CodeViewComponent;\nexport {};\n//# sourceMappingURL=CodeView.d.ts.map"],"mappings":";;;;;;;KAEKY,2BAAAA,UAAqCF,mDAAmDA;UACnFG;YACIN,gBAAgBO;;UAElBd;EAJPY,YAAAA,CAAAA,EAKcV,GALdU,CAKkBG,cALS,CAAA;EACtBF,iBAAAA,CAAAA,EAAiB,OAAAC;EACGA,aAAAA,CAAAA,EAKVR,qBALUQ,GAAAA,IAAAA;EAAhBP,qBAAAA,EAAAA,SAAAA,EAMwBD,qBANxBC,GAAAA,IAAAA,CAAAA,EAAAA,IAAAA;EAEFP,QAAAA,EAAAA,SAAAA,EAAAA,MAAAA,EAAAA,MAAAA,EAK6BI,UAL7BJ,CAK2Cc,WAL3Cd,CAAAA,CAAAA,EAAAA,IAAAA;EACWe,kBAAAA,EAAAA,IAAAA,EAKOV,YALPU,CAKoBD,WALpBC,CAAAA,CAAAA,EAKmCd,SALnCc;EAAJb,kBAAAA,EAAAA,IAAAA,EAMWG,YANXH,CAMwBY,WANxBZ,CAAAA,CAAAA,EAMuCD,SANvCC;EAECI,oBAAAA,EAAAA,IAAAA,EAKYD,YALZC,CAKyBQ,WALzBR,CAAAA,CAAAA,EAKwCL,SALxCK;EACkBA,gBAAAA,EAAAA,UAAAA,EAKJK,cALIL,CAKWQ,WALXR,CAAAA,GAK0BG,kBAL1BH,CAK6CQ,WAL7CR,CAAAA,EAAAA,IAAAA,EAKiED,YALjEC,CAK8EQ,WAL9ER,CAAAA,CAAAA,EAK6FL,SAL7FK;EACiBQ,mBAAAA,EAAAA,cAAAA,EAKdF,2BALcE,EAAAA,IAAAA,EAKqBT,YALrBS,CAKkCA,WALlCA,CAAAA,CAAAA,EAKiDb,SALjDa;;AACZA,UAM1BE,uBAN0BF,CAAAA,WAAAA,CAAAA,SAMmBD,iBANnBC,CAMqCA,WANrCA,CAAAA,CAAAA;EAAbT,KAAAA,EAAAA,SAOVA,YAPUA,CAOGS,WAPHT,CAAAA,EAAAA;EAA4BJ,YAAAA,CAAAA,EAAAA,KAAAA;;AAC5BI,UASbY,yBATaZ,CAAAA,WAAAA,CAAAA,SASkCQ,iBATlCR,CASoDS,WATpDT,CAAAA,CAAAA;EAA4BJ,KAAAA,EAAAA,SAUtCI,YAVsCJ,CAUzBa,WAVyBb,CAAAA,EAAAA;;AAC1BI,KAWpBa,aAXoBb,CAAAA,cAAAA,SAAAA,CAAAA,GAWqBW,uBAXrBX,CAW6CS,WAX7CT,CAAAA,GAW4DY,yBAX5DZ,CAWsFS,WAXtFT,CAAAA;AAA4BJ,UAY3CkB,cAZ2ClB,CAAAA,WAAAA,CAAAA,CAAAA;EACXa,QAAAA,CAAAA,MAAAA,EAY5BN,oBAZ4BM,CAAAA,EAAAA,IAAAA;EAAfH,gBAAAA,CAAAA,SAAAA,EAaFL,qBAbEK,GAAAA,IAAAA,CAAAA,EAAAA,IAAAA;EAAiDG,gBAAAA,EAAAA,EAc3DR,qBAd2DQ,GAAAA,IAAAA;EAAnBL,kBAAAA,EAAAA,EAAAA,IAAAA;EAAoDK,WAAAA,EAAAA,EAgBjGV,UAhBiGU,CAgBnFA,WAhBmFA,CAAAA,GAAAA,SAAAA;;KAkB/GM,iBAAAA,GAlB8HnB,CAAAA,cAAAA,SAAAA,CAAAA,CAAAA,KAAAA,EAkBzEiB,aAlByEjB,CAkB3Da,WAlB2Db,CAAAA,GAAAA;EAC1FW,GAAAA,CAAAA,EAkB/BS,KAAAA,CAAMnB,GAlByBU,CAkBrBO,cAlBqBP,CAkBNE,WAlBMF,CAAAA,CAAAA;CAAgDE,EAAAA,GAmBnFO,KAAAA,CAAMC,GAAAA,CAAIC,OAnByET;AAAbT,cAoBvDF,QApBuDE,EAoB7Ce,iBApB6Cf"}
|