@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
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
import { CodeView as CodeView$1 } from "../components/CodeView.js";
|
|
5
|
+
import { areOptionsEqual } from "../utils/areOptionsEqual.js";
|
|
6
|
+
import { areManagedSnapshotsEqual } from "../utils/areManagedSnapshotsEqual.js";
|
|
7
|
+
import { renderDiffChildren } from "./utils/renderDiffChildren.js";
|
|
8
|
+
import { renderFileChildren } from "./utils/renderFileChildren.js";
|
|
9
|
+
import { useStableCallback } from "./utils/useStableCallback.js";
|
|
10
|
+
import { WorkerPoolContext } from "./WorkerPoolContext.js";
|
|
11
|
+
import { forwardRef, memo, useContext, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
|
|
12
|
+
import { createPortal, flushSync } from "react-dom";
|
|
13
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
14
|
+
|
|
15
|
+
//#region src/react/CodeView.tsx
|
|
16
|
+
const useIsometricEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
|
|
17
|
+
const DEFAULT_CACHE = {
|
|
18
|
+
instance: void 0,
|
|
19
|
+
items: void 0,
|
|
20
|
+
managedOptions: void 0,
|
|
21
|
+
disableFlushSync: false,
|
|
22
|
+
slotCoordinator: void 0
|
|
23
|
+
};
|
|
24
|
+
function CodeViewInner({ className, containerRef, disableWorkerPool = false, items, onScroll, onSelectedLinesChange, options, renderAnnotation, renderCustomHeader, renderGutterUtility, renderHeaderMetadata, renderHeaderPrefix, selectedLines, style }, ref) {
|
|
25
|
+
const poolManager = useContext(WorkerPoolContext);
|
|
26
|
+
const cachedDataRef = useRef({ ...DEFAULT_CACHE });
|
|
27
|
+
const hasCustomHeader = renderCustomHeader != null;
|
|
28
|
+
const hasAnnotationRenderer = renderAnnotation != null;
|
|
29
|
+
const hasGutterRenderer = renderGutterUtility != null;
|
|
30
|
+
const hasHeaderRenderers = hasCustomHeader || renderHeaderPrefix != null || renderHeaderMetadata != null;
|
|
31
|
+
const hasRenderers = hasHeaderRenderers || hasAnnotationRenderer || hasGutterRenderer;
|
|
32
|
+
const emitSelectedLinesChange = useStableCallback((selection) => {
|
|
33
|
+
onSelectedLinesChange?.(selection);
|
|
34
|
+
});
|
|
35
|
+
const controlledSelection = selectedLines !== void 0;
|
|
36
|
+
const managedOptions = useMemo(() => createManagedCodeViewOptions({
|
|
37
|
+
options,
|
|
38
|
+
hasCustomHeader,
|
|
39
|
+
hasGutterRenderer,
|
|
40
|
+
onSelectedLinesChange: onSelectedLinesChange != null ? emitSelectedLinesChange : void 0,
|
|
41
|
+
controlledSelection
|
|
42
|
+
}), [
|
|
43
|
+
options,
|
|
44
|
+
hasCustomHeader,
|
|
45
|
+
hasGutterRenderer,
|
|
46
|
+
onSelectedLinesChange,
|
|
47
|
+
emitSelectedLinesChange,
|
|
48
|
+
controlledSelection
|
|
49
|
+
]);
|
|
50
|
+
const [slotContentStore] = useState(() => createSlotContentStore());
|
|
51
|
+
const [, forceUpdate] = useState({});
|
|
52
|
+
const nodeRef = useStableCallback((node) => {
|
|
53
|
+
if (cachedDataRef.current.instance != null && (node == null || node !== cachedDataRef.current.instance.getContainerElement())) {
|
|
54
|
+
cachedDataRef.current.instance.cleanUp();
|
|
55
|
+
slotContentStore.publish(void 0);
|
|
56
|
+
cachedDataRef.current = { ...DEFAULT_CACHE };
|
|
57
|
+
}
|
|
58
|
+
if (node != null && node !== cachedDataRef.current.instance?.getContainerElement()) {
|
|
59
|
+
cachedDataRef.current.instance = new CodeView$1(managedOptions, !disableWorkerPool ? poolManager : void 0, true);
|
|
60
|
+
cachedDataRef.current.instance.setup(node);
|
|
61
|
+
}
|
|
62
|
+
if (typeof containerRef === "function") containerRef(node);
|
|
63
|
+
else if (containerRef != null) containerRef.current = node;
|
|
64
|
+
});
|
|
65
|
+
const onSnapshotChange = useStableCallback((snapshot) => {
|
|
66
|
+
if (cachedDataRef.current.disableFlushSync) slotContentStore.publish(snapshot);
|
|
67
|
+
else flushSync(() => {
|
|
68
|
+
slotContentStore.publish(snapshot);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
const slotCoordinator = useMemo(() => {
|
|
72
|
+
if (!hasHeaderRenderers && !hasAnnotationRenderer && !hasGutterRenderer) return;
|
|
73
|
+
else return {
|
|
74
|
+
hasHeaderRenderers,
|
|
75
|
+
hasAnnotationRenderer,
|
|
76
|
+
hasGutterRenderer,
|
|
77
|
+
onSnapshotChange
|
|
78
|
+
};
|
|
79
|
+
}, [
|
|
80
|
+
onSnapshotChange,
|
|
81
|
+
hasAnnotationRenderer,
|
|
82
|
+
hasGutterRenderer,
|
|
83
|
+
hasHeaderRenderers
|
|
84
|
+
]);
|
|
85
|
+
useIsometricEffect(() => {
|
|
86
|
+
return onScroll != null ? cachedDataRef.current.instance?.subscribeToScroll(onScroll) : void 0;
|
|
87
|
+
});
|
|
88
|
+
useIsometricEffect(() => {
|
|
89
|
+
const { instance, items: prevItems, managedOptions: prevManagedOptions, slotCoordinator: prevSlotCoordinator } = cachedDataRef.current;
|
|
90
|
+
if (instance == null) return;
|
|
91
|
+
try {
|
|
92
|
+
cachedDataRef.current.disableFlushSync = true;
|
|
93
|
+
let shouldRender = false;
|
|
94
|
+
if (!areOptionsEqual(managedOptions, prevManagedOptions)) {
|
|
95
|
+
cachedDataRef.current.managedOptions = managedOptions;
|
|
96
|
+
instance.setOptions(managedOptions);
|
|
97
|
+
shouldRender = true;
|
|
98
|
+
}
|
|
99
|
+
if (items !== prevItems) {
|
|
100
|
+
cachedDataRef.current.items = items;
|
|
101
|
+
instance.setItems(items);
|
|
102
|
+
shouldRender = true;
|
|
103
|
+
}
|
|
104
|
+
if (selectedLines !== void 0) instance.setSelectedLines(selectedLines, { notify: false });
|
|
105
|
+
const slotPublish = instance.setSlotCoordinator(slotCoordinator);
|
|
106
|
+
let forceInlinePublish = false;
|
|
107
|
+
if (slotCoordinator !== prevSlotCoordinator) {
|
|
108
|
+
if (slotCoordinator == null || prevSlotCoordinator == null) forceInlinePublish = true;
|
|
109
|
+
cachedDataRef.current.slotCoordinator = slotCoordinator;
|
|
110
|
+
}
|
|
111
|
+
if (shouldRender || slotPublish) instance.render(true);
|
|
112
|
+
if (slotPublish && slotCoordinator == null) slotContentStore.publish(void 0);
|
|
113
|
+
if (forceInlinePublish) forceUpdate({});
|
|
114
|
+
} finally {
|
|
115
|
+
cachedDataRef.current.disableFlushSync = false;
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
useImperativeHandle(ref, () => ({
|
|
119
|
+
scrollTo(target) {
|
|
120
|
+
const { instance } = cachedDataRef.current;
|
|
121
|
+
if (instance == null) console.error("CodeView.scrollTo: no valid instance to scroll with", target);
|
|
122
|
+
else instance.scrollTo(target);
|
|
123
|
+
},
|
|
124
|
+
setSelectedLines(selection) {
|
|
125
|
+
const { instance } = cachedDataRef.current;
|
|
126
|
+
if (instance == null) console.error("CodeView.setSelectedLines: no valid instance to update selection with", selection);
|
|
127
|
+
else {
|
|
128
|
+
instance.setSelectedLines(selection, { notify: false });
|
|
129
|
+
emitSelectedLinesChange(selection);
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
getSelectedLines() {
|
|
133
|
+
const { instance } = cachedDataRef.current;
|
|
134
|
+
if (instance == null) {
|
|
135
|
+
console.error("CodeView.getSelectedLines: no valid instance exists");
|
|
136
|
+
return null;
|
|
137
|
+
} else return instance.getSelectedLines();
|
|
138
|
+
},
|
|
139
|
+
clearSelectedLines() {
|
|
140
|
+
const { instance } = cachedDataRef.current;
|
|
141
|
+
if (instance == null) console.error("CodeView.clearSelectedLines: no valid instance to update selection with");
|
|
142
|
+
else {
|
|
143
|
+
instance.clearSelectedLines({ notify: false });
|
|
144
|
+
emitSelectedLinesChange(null);
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
getInstance() {
|
|
148
|
+
return cachedDataRef.current.instance;
|
|
149
|
+
}
|
|
150
|
+
}), [emitSelectedLinesChange]);
|
|
151
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("div", {
|
|
152
|
+
ref: nodeRef,
|
|
153
|
+
className,
|
|
154
|
+
style
|
|
155
|
+
}), hasRenderers && /* @__PURE__ */ jsx(SlotPortals, {
|
|
156
|
+
managedContentStore: slotContentStore,
|
|
157
|
+
renderCustomHeader,
|
|
158
|
+
renderHeaderPrefix,
|
|
159
|
+
renderHeaderMetadata,
|
|
160
|
+
renderAnnotation,
|
|
161
|
+
renderGutterUtility
|
|
162
|
+
})] });
|
|
163
|
+
}
|
|
164
|
+
const CodeView = forwardRef(CodeViewInner);
|
|
165
|
+
function createSlotContentStore() {
|
|
166
|
+
let snapshot;
|
|
167
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
168
|
+
return {
|
|
169
|
+
getSnapshot() {
|
|
170
|
+
return snapshot;
|
|
171
|
+
},
|
|
172
|
+
publish(nextSnapshot) {
|
|
173
|
+
if (areManagedSnapshotsEqual(snapshot, nextSnapshot)) return;
|
|
174
|
+
snapshot = nextSnapshot;
|
|
175
|
+
for (const listener of listeners) listener();
|
|
176
|
+
},
|
|
177
|
+
subscribe(listener) {
|
|
178
|
+
listeners.add(listener);
|
|
179
|
+
return () => {
|
|
180
|
+
listeners.delete(listener);
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
function createManagedCodeViewOptions({ options, hasCustomHeader, hasGutterRenderer, onSelectedLinesChange, controlledSelection }) {
|
|
186
|
+
if (!hasCustomHeader && !hasGutterRenderer && onSelectedLinesChange == null && !controlledSelection) return options;
|
|
187
|
+
options = {
|
|
188
|
+
...options,
|
|
189
|
+
controlledSelection,
|
|
190
|
+
onSelectedLinesChange
|
|
191
|
+
};
|
|
192
|
+
if (hasCustomHeader) options.renderCustomHeader = noopRender;
|
|
193
|
+
if (hasGutterRenderer) options.renderGutterUtility = noopRender;
|
|
194
|
+
return options;
|
|
195
|
+
}
|
|
196
|
+
const SlotPortals = memo(function SlotPortals$1({ managedContentStore, renderCustomHeader, renderHeaderPrefix, renderHeaderMetadata, renderAnnotation, renderGutterUtility }) {
|
|
197
|
+
const subscribe = useStableCallback((listener) => managedContentStore.subscribe(listener));
|
|
198
|
+
const getSnapshot = useStableCallback(() => managedContentStore.getSnapshot());
|
|
199
|
+
return useSyncExternalStore(subscribe, getSnapshot, getSnapshot)?.map((renderedItem) => {
|
|
200
|
+
return createPortal(renderCodeViewItemChildren({
|
|
201
|
+
renderedItem,
|
|
202
|
+
renderCustomHeader,
|
|
203
|
+
renderHeaderPrefix,
|
|
204
|
+
renderHeaderMetadata,
|
|
205
|
+
renderAnnotation,
|
|
206
|
+
renderGutterUtility
|
|
207
|
+
}), renderedItem.element, renderedItem.id);
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
function renderCodeViewItemChildren({ renderedItem, renderCustomHeader, renderHeaderPrefix, renderHeaderMetadata, renderAnnotation, renderGutterUtility }) {
|
|
211
|
+
if (renderedItem.type === "diff") {
|
|
212
|
+
const { item, instance } = renderedItem;
|
|
213
|
+
return renderDiffChildren({
|
|
214
|
+
fileDiff: item.fileDiff,
|
|
215
|
+
renderCustomHeader: renderCustomHeader != null ? () => renderCustomHeader(item) : void 0,
|
|
216
|
+
renderHeaderPrefix: renderHeaderPrefix != null ? () => renderHeaderPrefix(item) : void 0,
|
|
217
|
+
renderHeaderMetadata: renderHeaderMetadata != null ? () => renderHeaderMetadata(item) : void 0,
|
|
218
|
+
renderAnnotation: renderAnnotation != null ? (annotation) => renderAnnotation(annotation, item) : void 0,
|
|
219
|
+
lineAnnotations: item.annotations,
|
|
220
|
+
renderGutterUtility: renderGutterUtility != null ? (getHoveredLine) => renderGutterUtility(getHoveredLine, item) : void 0,
|
|
221
|
+
getHoveredLine: instance.getHoveredLine
|
|
222
|
+
});
|
|
223
|
+
} else {
|
|
224
|
+
const { item, instance } = renderedItem;
|
|
225
|
+
return renderFileChildren({
|
|
226
|
+
file: item.file,
|
|
227
|
+
renderCustomHeader: renderCustomHeader != null ? () => renderCustomHeader(item) : void 0,
|
|
228
|
+
renderHeaderPrefix: renderHeaderPrefix != null ? () => renderHeaderPrefix(item) : void 0,
|
|
229
|
+
renderHeaderMetadata: renderHeaderMetadata != null ? () => renderHeaderMetadata(item) : void 0,
|
|
230
|
+
renderAnnotation: renderAnnotation != null ? (annotation) => renderAnnotation(annotation, item) : void 0,
|
|
231
|
+
lineAnnotations: item.annotations,
|
|
232
|
+
renderGutterUtility: renderGutterUtility != null ? (getHoveredLine) => renderGutterUtility(getHoveredLine, item) : void 0,
|
|
233
|
+
getHoveredLine: instance.getHoveredLine
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
function noopRender() {}
|
|
238
|
+
|
|
239
|
+
//#endregion
|
|
240
|
+
export { CodeView };
|
|
241
|
+
//# sourceMappingURL=CodeView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeView.js","names":["CodeViewClass","slotCoordinator: CodeViewCoordinator<LAnnotation> | undefined","snapshot: CodeViewRenderedItem<LAnnotation>[] | undefined","SlotPortals"],"sources":["../../src/react/CodeView.tsx"],"sourcesContent":["'use client';\n\nimport {\n type CSSProperties,\n forwardRef,\n memo,\n type ReactNode,\n type Ref,\n useContext,\n useEffect,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from 'react';\nimport { createPortal, flushSync } from 'react-dom';\n\nimport {\n areOptionsEqual,\n CodeView as CodeViewClass,\n type CodeViewCoordinator,\n type CodeViewItem,\n type CodeViewLineSelection,\n type CodeViewOptions,\n type CodeViewRenderedItem,\n type CodeViewScrollTarget,\n type DiffLineAnnotation,\n type GetHoveredLineResult,\n type LineAnnotation,\n} from '../index';\nimport { areManagedSnapshotsEqual } from '../utils/areManagedSnapshotsEqual';\nimport { renderDiffChildren } from './utils/renderDiffChildren';\nimport { renderFileChildren } from './utils/renderFileChildren';\nimport { useStableCallback } from './utils/useStableCallback';\nimport { WorkerPoolContext } from './WorkerPoolContext';\n\nconst useIsometricEffect =\n typeof window === 'undefined' ? useEffect : useLayoutEffect;\n\ntype CodeViewGutterUtilityGetter =\n | (() => GetHoveredLineResult<'file'> | undefined)\n | (() => GetHoveredLineResult<'diff'> | undefined);\n\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?(\n annotation: LineAnnotation<LAnnotation> | DiffLineAnnotation<LAnnotation>,\n item: CodeViewItem<LAnnotation>\n ): ReactNode;\n renderGutterUtility?(\n getHoveredLine: CodeViewGutterUtilityGetter,\n item: CodeViewItem<LAnnotation>\n ): ReactNode;\n}\n\nexport interface ControlledCodeViewProps<\n LAnnotation,\n> extends CodeViewBaseProps<LAnnotation> {\n items: readonly CodeViewItem<LAnnotation>[];\n initialItems?: never;\n}\n\nexport interface UncontrolledCodeViewProps<\n LAnnotation,\n> extends CodeViewBaseProps<LAnnotation> {\n // FIXME(amadeus): Replace this with a data structure that can do\n // mutation-like changes for super massive diffs\n // initialItems?: readonly CodeViewItem<LAnnotation>[];\n // items?: never;\n items: readonly CodeViewItem<LAnnotation>[];\n}\n\nexport type CodeViewProps<LAnnotation = undefined> =\n | ControlledCodeViewProps<LAnnotation>\n | UncontrolledCodeViewProps<LAnnotation>;\n\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}\n\ntype CodeViewComponent = <LAnnotation = undefined>(\n props: CodeViewProps<LAnnotation> & {\n ref?: React.Ref<CodeViewHandle<LAnnotation>>;\n }\n) => React.JSX.Element;\n\ntype SlotPortalsComponent = <LAnnotation = undefined>(\n props: SlotPortalsProps<LAnnotation>\n) => React.JSX.Element;\n\ninterface ManagedContentStore<LAnnotation> {\n getSnapshot(): CodeViewRenderedItem<LAnnotation>[] | undefined;\n publish(snapshot: CodeViewRenderedItem<LAnnotation>[] | undefined): void;\n subscribe(listener: () => void): () => void;\n}\n\ninterface CachedDataRef<LAnnotation> {\n instance: CodeViewClass<LAnnotation> | undefined;\n items: readonly CodeViewItem<LAnnotation>[] | undefined;\n managedOptions: CodeViewOptions<LAnnotation> | undefined;\n disableFlushSync: boolean;\n slotCoordinator: CodeViewCoordinator<LAnnotation> | undefined;\n}\n\nconst DEFAULT_CACHE = {\n instance: undefined,\n items: undefined,\n managedOptions: undefined,\n disableFlushSync: false,\n slotCoordinator: undefined,\n} as const;\n\nfunction CodeViewInner<LAnnotation = undefined>(\n {\n className,\n containerRef,\n disableWorkerPool = false,\n items,\n onScroll,\n onSelectedLinesChange,\n options,\n renderAnnotation,\n renderCustomHeader,\n renderGutterUtility,\n renderHeaderMetadata,\n renderHeaderPrefix,\n selectedLines,\n style,\n }: CodeViewProps<LAnnotation>,\n ref: React.ForwardedRef<CodeViewHandle<LAnnotation>>\n): React.JSX.Element {\n const poolManager = useContext(WorkerPoolContext);\n const cachedDataRef = useRef<CachedDataRef<LAnnotation>>({\n ...DEFAULT_CACHE,\n });\n const hasCustomHeader = renderCustomHeader != null;\n const hasAnnotationRenderer = renderAnnotation != null;\n const hasGutterRenderer = renderGutterUtility != null;\n const hasHeaderRenderers =\n hasCustomHeader ||\n renderHeaderPrefix != null ||\n renderHeaderMetadata != null;\n const hasRenderers =\n hasHeaderRenderers || hasAnnotationRenderer || hasGutterRenderer;\n const emitSelectedLinesChange = useStableCallback(\n (selection: CodeViewLineSelection | null) => {\n onSelectedLinesChange?.(selection);\n }\n );\n const controlledSelection = selectedLines !== undefined;\n\n const managedOptions = useMemo(\n () =>\n createManagedCodeViewOptions({\n options,\n hasCustomHeader,\n hasGutterRenderer,\n onSelectedLinesChange:\n onSelectedLinesChange != null ? emitSelectedLinesChange : undefined,\n controlledSelection,\n }),\n [\n options,\n hasCustomHeader,\n hasGutterRenderer,\n onSelectedLinesChange,\n emitSelectedLinesChange,\n controlledSelection,\n ]\n );\n\n const [slotContentStore] = useState<ManagedContentStore<LAnnotation>>(() =>\n createSlotContentStore()\n );\n const [, forceUpdate] = useState<unknown>({});\n\n const nodeRef = useStableCallback((node: HTMLDivElement | null) => {\n // If we have a pre-existing instance and there's no node or the node being\n // passed in is NOT the same as before, then we need to clean up and\n // garbage collect the old instance\n if (\n cachedDataRef.current.instance != null &&\n (node == null ||\n node !== cachedDataRef.current.instance.getContainerElement())\n ) {\n cachedDataRef.current.instance.cleanUp();\n slotContentStore.publish(undefined);\n cachedDataRef.current = { ...DEFAULT_CACHE };\n }\n\n // If our node matches the existing node then we should not attempt to\n // setup. This is a case that should never be possible to hit, but just in\n // case, lets make sure we don't re-setup an instance that is already setup\n // properly\n if (\n node != null &&\n node !== cachedDataRef.current.instance?.getContainerElement()\n ) {\n cachedDataRef.current.instance = new CodeViewClass<LAnnotation>(\n managedOptions,\n !disableWorkerPool ? poolManager : undefined,\n true\n );\n cachedDataRef.current.instance.setup(node);\n }\n\n if (typeof containerRef === 'function') {\n containerRef(node);\n } else if (containerRef != null) {\n containerRef.current = node;\n }\n });\n\n const onSnapshotChange = useStableCallback(\n (snapshot: CodeViewRenderedItem<LAnnotation>[] | undefined) => {\n if (cachedDataRef.current.disableFlushSync) {\n slotContentStore.publish(snapshot);\n } else {\n flushSync(() => {\n slotContentStore.publish(snapshot);\n });\n }\n }\n );\n\n const slotCoordinator: CodeViewCoordinator<LAnnotation> | undefined =\n useMemo(() => {\n if (!hasHeaderRenderers && !hasAnnotationRenderer && !hasGutterRenderer) {\n return undefined;\n } else {\n return {\n hasHeaderRenderers,\n hasAnnotationRenderer,\n hasGutterRenderer,\n onSnapshotChange,\n };\n }\n }, [\n onSnapshotChange,\n hasAnnotationRenderer,\n hasGutterRenderer,\n hasHeaderRenderers,\n ]);\n\n useIsometricEffect(() => {\n return onScroll != null\n ? cachedDataRef.current.instance?.subscribeToScroll(onScroll)\n : undefined;\n });\n\n useIsometricEffect(() => {\n const {\n instance,\n items: prevItems,\n managedOptions: prevManagedOptions,\n slotCoordinator: prevSlotCoordinator,\n } = cachedDataRef.current;\n if (instance == null) {\n return;\n }\n\n try {\n cachedDataRef.current.disableFlushSync = true;\n let shouldRender = false;\n\n if (!areOptionsEqual(managedOptions, prevManagedOptions)) {\n cachedDataRef.current.managedOptions = managedOptions;\n instance.setOptions(managedOptions);\n shouldRender = true;\n }\n\n if (items !== prevItems) {\n cachedDataRef.current.items = items;\n instance.setItems(items);\n shouldRender = true;\n }\n\n if (selectedLines !== undefined) {\n instance.setSelectedLines(selectedLines, { notify: false });\n }\n\n const slotPublish = instance.setSlotCoordinator(slotCoordinator);\n let forceInlinePublish = false;\n if (slotCoordinator !== prevSlotCoordinator) {\n if (slotCoordinator == null || prevSlotCoordinator == null) {\n forceInlinePublish = true;\n }\n cachedDataRef.current.slotCoordinator = slotCoordinator;\n }\n\n if (shouldRender || slotPublish) {\n instance.render(true);\n }\n\n // FIXME(amadeus): This feels kinda bad and flakey with regards to how\n // other things are working... it makes me think that we should\n // re-architect the slotCoordinator a bit, and maybe DON'T make it an\n // undefineable thing...\n if (slotPublish && slotCoordinator == null) {\n slotContentStore.publish(undefined);\n }\n\n if (forceInlinePublish) {\n forceUpdate({});\n }\n } finally {\n cachedDataRef.current.disableFlushSync = false;\n }\n });\n\n // Setup the ref handler\n useImperativeHandle(\n ref,\n (): CodeViewHandle<LAnnotation> => ({\n scrollTo(target) {\n const { instance } = cachedDataRef.current;\n if (instance == null) {\n console.error(\n 'CodeView.scrollTo: no valid instance to scroll with',\n target\n );\n } else {\n instance.scrollTo(target);\n }\n },\n setSelectedLines(selection) {\n const { instance } = cachedDataRef.current;\n if (instance == null) {\n console.error(\n 'CodeView.setSelectedLines: no valid instance to update selection with',\n selection\n );\n } else {\n instance.setSelectedLines(selection, { notify: false });\n emitSelectedLinesChange(selection);\n }\n },\n getSelectedLines() {\n const { instance } = cachedDataRef.current;\n if (instance == null) {\n console.error('CodeView.getSelectedLines: no valid instance exists');\n return null;\n } else {\n return instance.getSelectedLines();\n }\n },\n clearSelectedLines() {\n const { instance } = cachedDataRef.current;\n if (instance == null) {\n console.error(\n 'CodeView.clearSelectedLines: no valid instance to update selection with'\n );\n } else {\n instance.clearSelectedLines({ notify: false });\n emitSelectedLinesChange(null);\n }\n },\n getInstance() {\n return cachedDataRef.current.instance;\n },\n }),\n [emitSelectedLinesChange]\n );\n\n return (\n <>\n <div ref={nodeRef} className={className} style={style} />\n {hasRenderers && (\n <SlotPortals<LAnnotation>\n managedContentStore={slotContentStore}\n renderCustomHeader={renderCustomHeader}\n renderHeaderPrefix={renderHeaderPrefix}\n renderHeaderMetadata={renderHeaderMetadata}\n renderAnnotation={renderAnnotation}\n renderGutterUtility={renderGutterUtility}\n />\n )}\n </>\n );\n}\n\n// React was a mistake\nexport const CodeView = forwardRef(CodeViewInner) as CodeViewComponent;\n\nfunction createSlotContentStore<\n LAnnotation,\n>(): ManagedContentStore<LAnnotation> {\n let snapshot: CodeViewRenderedItem<LAnnotation>[] | undefined;\n const listeners = new Set<() => void>();\n\n return {\n getSnapshot() {\n return snapshot;\n },\n publish(nextSnapshot) {\n if (areManagedSnapshotsEqual(snapshot, nextSnapshot)) {\n return;\n }\n\n snapshot = nextSnapshot;\n for (const listener of listeners) {\n listener();\n }\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n}\n\ninterface CreateManagedCodeViewOptionsProps<LAnnotation> {\n options: CodeViewOptions<LAnnotation> | undefined;\n hasCustomHeader: boolean;\n hasGutterRenderer: boolean;\n onSelectedLinesChange?(selection: CodeViewLineSelection | null): void;\n controlledSelection: boolean;\n}\n\nfunction createManagedCodeViewOptions<LAnnotation>({\n options,\n hasCustomHeader,\n hasGutterRenderer,\n onSelectedLinesChange,\n controlledSelection,\n}: CreateManagedCodeViewOptionsProps<LAnnotation>):\n | CodeViewOptions<LAnnotation>\n | undefined {\n if (\n !hasCustomHeader &&\n !hasGutterRenderer &&\n onSelectedLinesChange == null &&\n !controlledSelection\n ) {\n return options;\n }\n options = { ...options, controlledSelection, onSelectedLinesChange };\n\n // The imperative CodeView adapters use this callback's presence to\n // switch file and diff headers into custom-slot mode. React portals\n // provide the actual header content, so this placeholder\n // intentionally returns nothing.\n if (hasCustomHeader) {\n options.renderCustomHeader = noopRender;\n }\n\n // The imperative CodeView adapters use this callback's presence to\n // create the custom gutter utility slot. React portals provide the\n // actual content, so this placeholder intentionally returns nothing.\n if (hasGutterRenderer) {\n options.renderGutterUtility = noopRender;\n }\n\n return options;\n}\n\ninterface RenderCodeViewItemChildrenProps<LAnnotation> {\n renderedItem: CodeViewRenderedItem<LAnnotation>;\n renderCustomHeader: CodeViewBaseProps<LAnnotation>['renderCustomHeader'];\n renderHeaderPrefix: CodeViewBaseProps<LAnnotation>['renderHeaderPrefix'];\n renderHeaderMetadata: CodeViewBaseProps<LAnnotation>['renderHeaderMetadata'];\n renderAnnotation: CodeViewBaseProps<LAnnotation>['renderAnnotation'];\n renderGutterUtility: CodeViewBaseProps<LAnnotation>['renderGutterUtility'];\n}\n\ninterface SlotPortalsProps<LAnnotation> {\n managedContentStore: ManagedContentStore<LAnnotation>;\n renderCustomHeader: CodeViewBaseProps<LAnnotation>['renderCustomHeader'];\n renderHeaderPrefix: CodeViewBaseProps<LAnnotation>['renderHeaderPrefix'];\n renderHeaderMetadata: CodeViewBaseProps<LAnnotation>['renderHeaderMetadata'];\n renderAnnotation: CodeViewBaseProps<LAnnotation>['renderAnnotation'];\n renderGutterUtility: CodeViewBaseProps<LAnnotation>['renderGutterUtility'];\n}\n\nconst SlotPortals = memo(function SlotPortals<LAnnotation>({\n managedContentStore,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderMetadata,\n renderAnnotation,\n renderGutterUtility,\n}: SlotPortalsProps<LAnnotation>) {\n const subscribe = useStableCallback((listener: () => void) =>\n managedContentStore.subscribe(listener)\n );\n const getSnapshot = useStableCallback(() =>\n managedContentStore.getSnapshot()\n );\n const renderedItems = useSyncExternalStore<\n CodeViewRenderedItem<LAnnotation>[] | undefined\n >(subscribe, getSnapshot, getSnapshot);\n return renderedItems?.map((renderedItem) => {\n return createPortal(\n renderCodeViewItemChildren({\n renderedItem,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderMetadata,\n renderAnnotation,\n renderGutterUtility,\n }),\n renderedItem.element,\n renderedItem.id\n );\n });\n}) as SlotPortalsComponent;\n\nfunction renderCodeViewItemChildren<LAnnotation>({\n renderedItem,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderMetadata,\n renderAnnotation,\n renderGutterUtility,\n}: RenderCodeViewItemChildrenProps<LAnnotation>): ReactNode {\n if (renderedItem.type === 'diff') {\n const { item, instance } = renderedItem;\n return renderDiffChildren({\n fileDiff: item.fileDiff,\n renderCustomHeader:\n renderCustomHeader != null ? () => renderCustomHeader(item) : undefined,\n renderHeaderPrefix:\n renderHeaderPrefix != null ? () => renderHeaderPrefix(item) : undefined,\n renderHeaderMetadata:\n renderHeaderMetadata != null\n ? () => renderHeaderMetadata(item)\n : undefined,\n renderAnnotation:\n renderAnnotation != null\n ? (annotation) => renderAnnotation(annotation, item)\n : undefined,\n lineAnnotations: item.annotations,\n renderGutterUtility:\n renderGutterUtility != null\n ? (getHoveredLine) => renderGutterUtility(getHoveredLine, item)\n : undefined,\n getHoveredLine: instance.getHoveredLine,\n });\n } else {\n const { item, instance } = renderedItem;\n return renderFileChildren({\n file: item.file,\n renderCustomHeader:\n renderCustomHeader != null ? () => renderCustomHeader(item) : undefined,\n renderHeaderPrefix:\n renderHeaderPrefix != null ? () => renderHeaderPrefix(item) : undefined,\n renderHeaderMetadata:\n renderHeaderMetadata != null\n ? () => renderHeaderMetadata(item)\n : undefined,\n renderAnnotation:\n renderAnnotation != null\n ? (annotation) => renderAnnotation(annotation, item)\n : undefined,\n lineAnnotations: item.annotations,\n renderGutterUtility:\n renderGutterUtility != null\n ? (getHoveredLine) => renderGutterUtility(getHoveredLine, item)\n : undefined,\n getHoveredLine: instance.getHoveredLine,\n });\n }\n}\n\nfunction noopRender() {\n return undefined;\n}\n"],"mappings":"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"}
|
package/dist/react/File.d.ts
CHANGED
package/dist/react/File.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"File.d.ts","names":["FileOptions","FileProps","File","LAnnotation","file","lineAnnotations","selectedLines","options","metrics","className","style","renderAnnotation","renderCustomHeader","renderHeaderPrefix","renderHeaderMetadata","prerenderedHTML","renderGutterUtility","
|
|
1
|
+
{"version":3,"file":"File.d.ts","names":["FileOptions","FileProps","File","LAnnotation","file","lineAnnotations","selectedLines","options","metrics","className","style","renderAnnotation","renderCustomHeader","renderHeaderPrefix","renderHeaderMetadata","prerenderedHTML","renderGutterUtility","disableWorkerPool","React","JSX","Element"],"sources":["../../src/react/File.d.ts"],"sourcesContent":["import { type FileOptions } from '../components/File';\nimport type { FileProps } from './types';\nexport type { FileOptions };\nexport declare function File<LAnnotation = undefined>({ file, lineAnnotations, selectedLines, options, metrics, className, style, renderAnnotation, renderCustomHeader, renderHeaderPrefix, renderHeaderMetadata, prerenderedHTML, renderGutterUtility, disableWorkerPool }: FileProps<LAnnotation>): React.JSX.Element;\n//# sourceMappingURL=File.d.ts.map"],"mappings":";;;;iBAGwBE;;;;;;;;;;;;;;;GAAqPD,UAAUE,eAAee,KAAAA,CAAMC,GAAAA,CAAIC"}
|
package/dist/react/File.js
CHANGED
|
@@ -8,7 +8,7 @@ import { useFileInstance } from "./utils/useFileInstance.js";
|
|
|
8
8
|
import { jsx } from "react/jsx-runtime";
|
|
9
9
|
|
|
10
10
|
//#region src/react/File.tsx
|
|
11
|
-
function File({ file, lineAnnotations, selectedLines, options, metrics, className, style, renderAnnotation, renderCustomHeader, renderHeaderPrefix, renderHeaderMetadata, prerenderedHTML, renderGutterUtility,
|
|
11
|
+
function File({ file, lineAnnotations, selectedLines, options, metrics, className, style, renderAnnotation, renderCustomHeader, renderHeaderPrefix, renderHeaderMetadata, prerenderedHTML, renderGutterUtility, disableWorkerPool = false }) {
|
|
12
12
|
const { ref, getHoveredLine } = useFileInstance({
|
|
13
13
|
file,
|
|
14
14
|
options,
|
|
@@ -16,7 +16,7 @@ function File({ file, lineAnnotations, selectedLines, options, metrics, classNam
|
|
|
16
16
|
lineAnnotations,
|
|
17
17
|
selectedLines,
|
|
18
18
|
prerenderedHTML,
|
|
19
|
-
hasGutterRenderUtility: renderGutterUtility != null
|
|
19
|
+
hasGutterRenderUtility: renderGutterUtility != null,
|
|
20
20
|
hasCustomHeader: renderCustomHeader != null,
|
|
21
21
|
disableWorkerPool
|
|
22
22
|
});
|
|
@@ -31,7 +31,6 @@ function File({ file, lineAnnotations, selectedLines, options, metrics, classNam
|
|
|
31
31
|
renderHeaderPrefix,
|
|
32
32
|
renderHeaderMetadata,
|
|
33
33
|
renderGutterUtility,
|
|
34
|
-
renderHoverUtility,
|
|
35
34
|
lineAnnotations,
|
|
36
35
|
getHoveredLine
|
|
37
36
|
}), prerenderedHTML)
|
package/dist/react/File.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"File.js","names":[],"sources":["../../src/react/File.tsx"],"sourcesContent":["'use client';\n\nimport { type FileOptions } from '../components/File';\nimport { DIFFS_TAG_NAME } from '../constants';\nimport type { FileProps } from './types';\nimport { renderFileChildren } from './utils/renderFileChildren';\nimport { templateRender } from './utils/templateRender';\nimport { useFileInstance } from './utils/useFileInstance';\n\nexport type { FileOptions };\n\nexport function File<LAnnotation = undefined>({\n file,\n lineAnnotations,\n selectedLines,\n options,\n metrics,\n className,\n style,\n renderAnnotation,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderMetadata,\n prerenderedHTML,\n renderGutterUtility,\n
|
|
1
|
+
{"version":3,"file":"File.js","names":[],"sources":["../../src/react/File.tsx"],"sourcesContent":["'use client';\n\nimport { type FileOptions } from '../components/File';\nimport { DIFFS_TAG_NAME } from '../constants';\nimport type { FileProps } from './types';\nimport { renderFileChildren } from './utils/renderFileChildren';\nimport { templateRender } from './utils/templateRender';\nimport { useFileInstance } from './utils/useFileInstance';\n\nexport type { FileOptions };\n\nexport function File<LAnnotation = undefined>({\n file,\n lineAnnotations,\n selectedLines,\n options,\n metrics,\n className,\n style,\n renderAnnotation,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderMetadata,\n prerenderedHTML,\n renderGutterUtility,\n disableWorkerPool = false,\n}: FileProps<LAnnotation>): React.JSX.Element {\n const { ref, getHoveredLine } = useFileInstance({\n file,\n options,\n metrics,\n lineAnnotations,\n selectedLines,\n prerenderedHTML,\n hasGutterRenderUtility: renderGutterUtility != null,\n hasCustomHeader: renderCustomHeader != null,\n disableWorkerPool,\n });\n const children = renderFileChildren({\n file,\n renderAnnotation,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderMetadata,\n renderGutterUtility,\n lineAnnotations,\n getHoveredLine,\n });\n return (\n <DIFFS_TAG_NAME ref={ref} className={className} style={style}>\n {templateRender(children, prerenderedHTML)}\n </DIFFS_TAG_NAME>\n );\n}\n"],"mappings":";;;;;;;;;;AAWA,SAAgB,KAA8B,EAC5C,MACA,iBACA,eACA,SACA,SACA,WACA,OACA,kBACA,oBACA,oBACA,sBACA,iBACA,qBACA,oBAAoB,SACwB;CAC5C,MAAM,EAAE,KAAK,mBAAmB,gBAAgB;EAC9C;EACA;EACA;EACA;EACA;EACA;EACA,wBAAwB,uBAAuB;EAC/C,iBAAiB,sBAAsB;EACvC;EACD,CAAC;AAWF,QACE,oBAAC;EAAoB;EAAgB;EAAkB;YACpD,eAZY,mBAAmB;GAClC;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CAAC,EAG4B,gBAAgB;GAC3B"}
|
package/dist/react/FileDiff.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileDiff.d.ts","names":["FileDiffMetadata","DiffBasePropsReact","FileDiffProps","LAnnotation","FileDiff","fileDiff","options","metrics","lineAnnotations","selectedLines","className","style","prerenderedHTML","renderAnnotation","renderCustomHeader","renderHeaderPrefix","renderHeaderMetadata","renderGutterUtility","
|
|
1
|
+
{"version":3,"file":"FileDiff.d.ts","names":["FileDiffMetadata","DiffBasePropsReact","FileDiffProps","LAnnotation","FileDiff","fileDiff","options","metrics","lineAnnotations","selectedLines","className","style","prerenderedHTML","renderAnnotation","renderCustomHeader","renderHeaderPrefix","renderHeaderMetadata","renderGutterUtility","disableWorkerPool","React","JSX","Element"],"sources":["../../src/react/FileDiff.d.ts"],"sourcesContent":["import type { FileDiffMetadata } from '../types';\nimport type { DiffBasePropsReact } from './types';\nexport type { FileDiffMetadata };\nexport interface FileDiffProps<LAnnotation> extends DiffBasePropsReact<LAnnotation> {\n fileDiff: FileDiffMetadata;\n disableWorkerPool?: boolean;\n}\nexport declare function FileDiff<LAnnotation = undefined>({ fileDiff, options, metrics, lineAnnotations, selectedLines, className, style, prerenderedHTML, renderAnnotation, renderCustomHeader, renderHeaderPrefix, renderHeaderMetadata, renderGutterUtility, disableWorkerPool }: FileDiffProps<LAnnotation>): React.JSX.Element;\n//# sourceMappingURL=FileDiff.d.ts.map"],"mappings":";;;;UAGiBE,mCAAmCD,mBAAmBE;EAAtDD,QAAAA,EACHF,gBADgBG;EAAyCA,iBAAAA,CAAAA,EAAAA,OAAAA;;AAAnBF,iBAI5BG,QAJ4BH,CAAAA,cAAAA,SAAAA,CAAAA,CAAAA;EAAAA,QAAAA;EAAAA,OAAAA;EAAAA,OAAAA;EAAAA,eAAAA;EAAAA,aAAAA;EAAAA,SAAAA;EAAAA,KAAAA;EAAAA,eAAAA;EAAAA,gBAAAA;EAAAA,kBAAAA;EAAAA,kBAAAA;EAAAA,oBAAAA;EAAAA,mBAAAA;EAAAA;AAAAA,CAAAA,EAIiOC,aAJjOD,CAI+OE,WAJ/OF,CAAAA,CAAAA,EAI8PkB,KAAAA,CAAMC,GAAAA,CAAIC,OAJxQpB"}
|
package/dist/react/FileDiff.js
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
import { DIFFS_TAG_NAME } from "../constants.js";
|
|
5
|
-
import { templateRender } from "./utils/templateRender.js";
|
|
6
5
|
import { renderDiffChildren } from "./utils/renderDiffChildren.js";
|
|
6
|
+
import { templateRender } from "./utils/templateRender.js";
|
|
7
7
|
import { useFileDiffInstance } from "./utils/useFileDiffInstance.js";
|
|
8
8
|
import { jsx } from "react/jsx-runtime";
|
|
9
9
|
|
|
10
10
|
//#region src/react/FileDiff.tsx
|
|
11
|
-
function FileDiff({ fileDiff, options, metrics, lineAnnotations, selectedLines, className, style, prerenderedHTML, renderAnnotation, renderCustomHeader, renderHeaderPrefix, renderHeaderMetadata, renderGutterUtility,
|
|
11
|
+
function FileDiff({ fileDiff, options, metrics, lineAnnotations, selectedLines, className, style, prerenderedHTML, renderAnnotation, renderCustomHeader, renderHeaderPrefix, renderHeaderMetadata, renderGutterUtility, disableWorkerPool = false }) {
|
|
12
12
|
const { ref, getHoveredLine } = useFileDiffInstance({
|
|
13
13
|
fileDiff,
|
|
14
14
|
options,
|
|
@@ -16,7 +16,7 @@ function FileDiff({ fileDiff, options, metrics, lineAnnotations, selectedLines,
|
|
|
16
16
|
lineAnnotations,
|
|
17
17
|
selectedLines,
|
|
18
18
|
prerenderedHTML,
|
|
19
|
-
hasGutterRenderUtility: renderGutterUtility != null
|
|
19
|
+
hasGutterRenderUtility: renderGutterUtility != null,
|
|
20
20
|
hasCustomHeader: renderCustomHeader != null,
|
|
21
21
|
disableWorkerPool
|
|
22
22
|
});
|
|
@@ -32,7 +32,6 @@ function FileDiff({ fileDiff, options, metrics, lineAnnotations, selectedLines,
|
|
|
32
32
|
renderAnnotation,
|
|
33
33
|
renderGutterUtility,
|
|
34
34
|
lineAnnotations,
|
|
35
|
-
renderHoverUtility,
|
|
36
35
|
getHoveredLine
|
|
37
36
|
}), prerenderedHTML)
|
|
38
37
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileDiff.js","names":[],"sources":["../../src/react/FileDiff.tsx"],"sourcesContent":["'use client';\n\nimport { DIFFS_TAG_NAME } from '../constants';\nimport type { FileDiffMetadata } from '../types';\nimport type { DiffBasePropsReact } from './types';\nimport { renderDiffChildren } from './utils/renderDiffChildren';\nimport { templateRender } from './utils/templateRender';\nimport { useFileDiffInstance } from './utils/useFileDiffInstance';\n\nexport type { FileDiffMetadata };\n\nexport interface FileDiffProps<\n LAnnotation,\n> extends DiffBasePropsReact<LAnnotation> {\n fileDiff: FileDiffMetadata;\n disableWorkerPool?: boolean;\n}\n\nexport function FileDiff<LAnnotation = undefined>({\n fileDiff,\n options,\n metrics,\n lineAnnotations,\n selectedLines,\n className,\n style,\n prerenderedHTML,\n renderAnnotation,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderMetadata,\n renderGutterUtility,\n
|
|
1
|
+
{"version":3,"file":"FileDiff.js","names":[],"sources":["../../src/react/FileDiff.tsx"],"sourcesContent":["'use client';\n\nimport { DIFFS_TAG_NAME } from '../constants';\nimport type { FileDiffMetadata } from '../types';\nimport type { DiffBasePropsReact } from './types';\nimport { renderDiffChildren } from './utils/renderDiffChildren';\nimport { templateRender } from './utils/templateRender';\nimport { useFileDiffInstance } from './utils/useFileDiffInstance';\n\nexport type { FileDiffMetadata };\n\nexport interface FileDiffProps<\n LAnnotation,\n> extends DiffBasePropsReact<LAnnotation> {\n fileDiff: FileDiffMetadata;\n disableWorkerPool?: boolean;\n}\n\nexport function FileDiff<LAnnotation = undefined>({\n fileDiff,\n options,\n metrics,\n lineAnnotations,\n selectedLines,\n className,\n style,\n prerenderedHTML,\n renderAnnotation,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderMetadata,\n renderGutterUtility,\n disableWorkerPool = false,\n}: FileDiffProps<LAnnotation>): React.JSX.Element {\n const { ref, getHoveredLine } = useFileDiffInstance({\n fileDiff,\n options,\n metrics,\n lineAnnotations,\n selectedLines,\n prerenderedHTML,\n hasGutterRenderUtility: renderGutterUtility != null,\n hasCustomHeader: renderCustomHeader != null,\n disableWorkerPool,\n });\n const children = renderDiffChildren({\n fileDiff,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderMetadata,\n renderAnnotation,\n renderGutterUtility,\n lineAnnotations,\n getHoveredLine,\n });\n return (\n <DIFFS_TAG_NAME ref={ref} className={className} style={style}>\n {templateRender(children, prerenderedHTML)}\n </DIFFS_TAG_NAME>\n );\n}\n"],"mappings":";;;;;;;;;;AAkBA,SAAgB,SAAkC,EAChD,UACA,SACA,SACA,iBACA,eACA,WACA,OACA,iBACA,kBACA,oBACA,oBACA,sBACA,qBACA,oBAAoB,SAC4B;CAChD,MAAM,EAAE,KAAK,mBAAmB,oBAAoB;EAClD;EACA;EACA;EACA;EACA;EACA;EACA,wBAAwB,uBAAuB;EAC/C,iBAAiB,sBAAsB;EACvC;EACD,CAAC;AAWF,QACE,oBAAC;EAAoB;EAAgB;EAAkB;YACpD,eAZY,mBAAmB;GAClC;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CAAC,EAG4B,gBAAgB;GAC3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiFileDiff.d.ts","names":["FileContents","DiffBasePropsReact","MultiFileDiffProps","LAnnotation","MultiFileDiff","oldFile","newFile","options","metrics","lineAnnotations","selectedLines","className","style","prerenderedHTML","renderAnnotation","renderCustomHeader","renderHeaderPrefix","renderHeaderMetadata","renderGutterUtility","
|
|
1
|
+
{"version":3,"file":"MultiFileDiff.d.ts","names":["FileContents","DiffBasePropsReact","MultiFileDiffProps","LAnnotation","MultiFileDiff","oldFile","newFile","options","metrics","lineAnnotations","selectedLines","className","style","prerenderedHTML","renderAnnotation","renderCustomHeader","renderHeaderPrefix","renderHeaderMetadata","renderGutterUtility","disableWorkerPool","React","JSX","Element"],"sources":["../../src/react/MultiFileDiff.d.ts"],"sourcesContent":["import type { FileContents } from '../types';\nimport type { DiffBasePropsReact } from './types';\nexport type { FileContents };\nexport interface MultiFileDiffProps<LAnnotation> extends DiffBasePropsReact<LAnnotation> {\n oldFile: FileContents;\n newFile: FileContents;\n disableWorkerPool?: boolean;\n}\nexport declare function MultiFileDiff<LAnnotation = undefined>({ oldFile, newFile, options, metrics, lineAnnotations, selectedLines, className, style, prerenderedHTML, renderAnnotation, renderCustomHeader, renderHeaderPrefix, renderHeaderMetadata, renderGutterUtility, disableWorkerPool }: MultiFileDiffProps<LAnnotation>): React.JSX.Element;\n//# sourceMappingURL=MultiFileDiff.d.ts.map"],"mappings":";;;;UAGiBE,wCAAwCD,mBAAmBE;EAA3DD,OAAAA,EACJF,YADsB;EAAyCG,OAAAA,EAE/DH,YAF+DG;EAC/DH,iBAAAA,CAAAA,EAAAA,OAAAA;;AAD4CC,iBAKjCG,aALiCH,CAAAA,cAAAA,SAAAA,CAAAA,CAAAA;EAAAA,OAAAA;EAAAA,OAAAA;EAAAA,OAAAA;EAAAA,OAAAA;EAAAA,eAAAA;EAAAA,aAAAA;EAAAA,SAAAA;EAAAA,KAAAA;EAAAA,eAAAA;EAAAA,gBAAAA;EAAAA,kBAAAA;EAAAA,kBAAAA;EAAAA,oBAAAA;EAAAA,mBAAAA;EAAAA;AAAAA,CAAAA,EAKyOC,kBALzOD,CAK4PE,WAL5PF,CAAAA,CAAAA,EAK2QmB,KAAAA,CAAMC,GAAAA,CAAIC,OALrRrB"}
|
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
|
|
4
4
|
import { DIFFS_TAG_NAME } from "../constants.js";
|
|
5
5
|
import { parseDiffFromFile } from "../utils/parseDiffFromFile.js";
|
|
6
|
-
import { templateRender } from "./utils/templateRender.js";
|
|
7
6
|
import { renderDiffChildren } from "./utils/renderDiffChildren.js";
|
|
7
|
+
import { templateRender } from "./utils/templateRender.js";
|
|
8
8
|
import { useFileDiffInstance } from "./utils/useFileDiffInstance.js";
|
|
9
9
|
import { useMemo } from "react";
|
|
10
10
|
import { jsx } from "react/jsx-runtime";
|
|
11
11
|
|
|
12
12
|
//#region src/react/MultiFileDiff.tsx
|
|
13
|
-
function MultiFileDiff({ oldFile, newFile, options, metrics, lineAnnotations, selectedLines, className, style, prerenderedHTML, renderAnnotation, renderCustomHeader, renderHeaderPrefix, renderHeaderMetadata, renderGutterUtility,
|
|
13
|
+
function MultiFileDiff({ oldFile, newFile, options, metrics, lineAnnotations, selectedLines, className, style, prerenderedHTML, renderAnnotation, renderCustomHeader, renderHeaderPrefix, renderHeaderMetadata, renderGutterUtility, disableWorkerPool = false }) {
|
|
14
14
|
const fileDiff = useMemo(() => {
|
|
15
15
|
return parseDiffFromFile(oldFile, newFile, options?.parseDiffOptions);
|
|
16
16
|
}, [
|
|
@@ -25,7 +25,7 @@ function MultiFileDiff({ oldFile, newFile, options, metrics, lineAnnotations, se
|
|
|
25
25
|
lineAnnotations,
|
|
26
26
|
selectedLines,
|
|
27
27
|
prerenderedHTML,
|
|
28
|
-
hasGutterRenderUtility: renderGutterUtility != null
|
|
28
|
+
hasGutterRenderUtility: renderGutterUtility != null,
|
|
29
29
|
hasCustomHeader: renderCustomHeader != null,
|
|
30
30
|
disableWorkerPool
|
|
31
31
|
});
|
|
@@ -41,7 +41,6 @@ function MultiFileDiff({ oldFile, newFile, options, metrics, lineAnnotations, se
|
|
|
41
41
|
renderAnnotation,
|
|
42
42
|
lineAnnotations,
|
|
43
43
|
renderGutterUtility,
|
|
44
|
-
renderHoverUtility,
|
|
45
44
|
getHoveredLine
|
|
46
45
|
}), prerenderedHTML)
|
|
47
46
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiFileDiff.js","names":[],"sources":["../../src/react/MultiFileDiff.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { DIFFS_TAG_NAME } from '../constants';\nimport type { FileContents } from '../types';\nimport { parseDiffFromFile } from '../utils/parseDiffFromFile';\nimport type { DiffBasePropsReact } from './types';\nimport { renderDiffChildren } from './utils/renderDiffChildren';\nimport { templateRender } from './utils/templateRender';\nimport { useFileDiffInstance } from './utils/useFileDiffInstance';\n\nexport type { FileContents };\n\nexport interface MultiFileDiffProps<\n LAnnotation,\n> extends DiffBasePropsReact<LAnnotation> {\n oldFile: FileContents;\n newFile: FileContents;\n disableWorkerPool?: boolean;\n}\n\nexport function MultiFileDiff<LAnnotation = undefined>({\n oldFile,\n newFile,\n options,\n metrics,\n lineAnnotations,\n selectedLines,\n className,\n style,\n prerenderedHTML,\n renderAnnotation,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderMetadata,\n renderGutterUtility,\n
|
|
1
|
+
{"version":3,"file":"MultiFileDiff.js","names":[],"sources":["../../src/react/MultiFileDiff.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { DIFFS_TAG_NAME } from '../constants';\nimport type { FileContents } from '../types';\nimport { parseDiffFromFile } from '../utils/parseDiffFromFile';\nimport type { DiffBasePropsReact } from './types';\nimport { renderDiffChildren } from './utils/renderDiffChildren';\nimport { templateRender } from './utils/templateRender';\nimport { useFileDiffInstance } from './utils/useFileDiffInstance';\n\nexport type { FileContents };\n\nexport interface MultiFileDiffProps<\n LAnnotation,\n> extends DiffBasePropsReact<LAnnotation> {\n oldFile: FileContents;\n newFile: FileContents;\n disableWorkerPool?: boolean;\n}\n\nexport function MultiFileDiff<LAnnotation = undefined>({\n oldFile,\n newFile,\n options,\n metrics,\n lineAnnotations,\n selectedLines,\n className,\n style,\n prerenderedHTML,\n renderAnnotation,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderMetadata,\n renderGutterUtility,\n disableWorkerPool = false,\n}: MultiFileDiffProps<LAnnotation>): React.JSX.Element {\n const fileDiff = useMemo(() => {\n return parseDiffFromFile(oldFile, newFile, options?.parseDiffOptions);\n }, [oldFile, newFile, options?.parseDiffOptions]);\n const { ref, getHoveredLine } = useFileDiffInstance({\n fileDiff,\n options,\n metrics,\n lineAnnotations,\n selectedLines,\n prerenderedHTML,\n hasGutterRenderUtility: renderGutterUtility != null,\n hasCustomHeader: renderCustomHeader != null,\n disableWorkerPool,\n });\n const children = renderDiffChildren({\n fileDiff,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderMetadata,\n renderAnnotation,\n lineAnnotations,\n renderGutterUtility,\n getHoveredLine,\n });\n return (\n <DIFFS_TAG_NAME ref={ref} className={className} style={style}>\n {templateRender(children, prerenderedHTML)}\n </DIFFS_TAG_NAME>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAsBA,SAAgB,cAAuC,EACrD,SACA,SACA,SACA,SACA,iBACA,eACA,WACA,OACA,iBACA,kBACA,oBACA,oBACA,sBACA,qBACA,oBAAoB,SACiC;CACrD,MAAM,WAAW,cAAc;AAC7B,SAAO,kBAAkB,SAAS,SAAS,SAAS,iBAAiB;IACpE;EAAC;EAAS;EAAS,SAAS;EAAiB,CAAC;CACjD,MAAM,EAAE,KAAK,mBAAmB,oBAAoB;EAClD;EACA;EACA;EACA;EACA;EACA;EACA,wBAAwB,uBAAuB;EAC/C,iBAAiB,sBAAsB;EACvC;EACD,CAAC;AAWF,QACE,oBAAC;EAAoB;EAAgB;EAAkB;YACpD,eAZY,mBAAmB;GAClC;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CAAC,EAG4B,gBAAgB;GAC3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PatchDiff.d.ts","names":["DiffBasePropsReact","PatchDiffProps","LAnnotation","PatchDiff","patch","options","metrics","lineAnnotations","selectedLines","className","style","prerenderedHTML","renderAnnotation","renderCustomHeader","renderHeaderPrefix","renderHeaderMetadata","renderGutterUtility","
|
|
1
|
+
{"version":3,"file":"PatchDiff.d.ts","names":["DiffBasePropsReact","PatchDiffProps","LAnnotation","PatchDiff","patch","options","metrics","lineAnnotations","selectedLines","className","style","prerenderedHTML","renderAnnotation","renderCustomHeader","renderHeaderPrefix","renderHeaderMetadata","renderGutterUtility","disableWorkerPool","React","JSX","Element"],"sources":["../../src/react/PatchDiff.d.ts"],"sourcesContent":["import type { DiffBasePropsReact } from './types';\nexport interface PatchDiffProps<LAnnotation> extends DiffBasePropsReact<LAnnotation> {\n patch: string;\n disableWorkerPool?: boolean;\n}\nexport declare function PatchDiff<LAnnotation = undefined>({ patch, options, metrics, lineAnnotations, selectedLines, className, style, prerenderedHTML, renderAnnotation, renderCustomHeader, renderHeaderPrefix, renderHeaderMetadata, renderGutterUtility, disableWorkerPool }: PatchDiffProps<LAnnotation>): React.JSX.Element;\n//# sourceMappingURL=PatchDiff.d.ts.map"],"mappings":";;;UACiBC,oCAAoCD,mBAAmBE;;EAAvDD,iBAAc,CAAA,EAAA,OAAAC;AAI/B;AAA6DE,iBAArCD,SAAqCC,CAAAA,cAAAA,SAAAA,CAAAA,CAAAA;EAAAA,KAAAA;EAAAA,OAAAA;EAAAA,OAAAA;EAAAA,eAAAA;EAAAA,aAAAA;EAAAA,SAAAA;EAAAA,KAAAA;EAAAA,eAAAA;EAAAA,gBAAAA;EAAAA,kBAAAA;EAAAA,kBAAAA;EAAAA,oBAAAA;EAAAA,mBAAAA;EAAAA;AAAAA,CAAAA,EAAsNH,cAAtNG,CAAqOF,WAArOE,CAAAA,CAAAA,EAAoPc,KAAAA,CAAMC,GAAAA,CAAIC,OAA9PhB"}
|
package/dist/react/PatchDiff.js
CHANGED
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
|
|
4
4
|
import { DIFFS_TAG_NAME } from "../constants.js";
|
|
5
5
|
import { getSingularPatch } from "../utils/getSingularPatch.js";
|
|
6
|
-
import { templateRender } from "./utils/templateRender.js";
|
|
7
6
|
import { renderDiffChildren } from "./utils/renderDiffChildren.js";
|
|
7
|
+
import { templateRender } from "./utils/templateRender.js";
|
|
8
8
|
import { useFileDiffInstance } from "./utils/useFileDiffInstance.js";
|
|
9
9
|
import { useMemo } from "react";
|
|
10
10
|
import { jsx } from "react/jsx-runtime";
|
|
11
11
|
|
|
12
12
|
//#region src/react/PatchDiff.tsx
|
|
13
|
-
function PatchDiff({ patch, options, metrics, lineAnnotations, selectedLines, className, style, prerenderedHTML, renderAnnotation, renderCustomHeader, renderHeaderPrefix, renderHeaderMetadata, renderGutterUtility,
|
|
13
|
+
function PatchDiff({ patch, options, metrics, lineAnnotations, selectedLines, className, style, prerenderedHTML, renderAnnotation, renderCustomHeader, renderHeaderPrefix, renderHeaderMetadata, renderGutterUtility, disableWorkerPool = false }) {
|
|
14
14
|
const fileDiff = usePatch(patch);
|
|
15
15
|
const { ref, getHoveredLine } = useFileDiffInstance({
|
|
16
16
|
fileDiff,
|
|
@@ -19,7 +19,7 @@ function PatchDiff({ patch, options, metrics, lineAnnotations, selectedLines, cl
|
|
|
19
19
|
lineAnnotations,
|
|
20
20
|
selectedLines,
|
|
21
21
|
prerenderedHTML,
|
|
22
|
-
hasGutterRenderUtility: renderGutterUtility != null
|
|
22
|
+
hasGutterRenderUtility: renderGutterUtility != null,
|
|
23
23
|
hasCustomHeader: renderCustomHeader != null,
|
|
24
24
|
disableWorkerPool
|
|
25
25
|
});
|
|
@@ -35,7 +35,6 @@ function PatchDiff({ patch, options, metrics, lineAnnotations, selectedLines, cl
|
|
|
35
35
|
renderAnnotation,
|
|
36
36
|
lineAnnotations,
|
|
37
37
|
renderGutterUtility,
|
|
38
|
-
renderHoverUtility,
|
|
39
38
|
getHoveredLine
|
|
40
39
|
}), prerenderedHTML)
|
|
41
40
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PatchDiff.js","names":[],"sources":["../../src/react/PatchDiff.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { DIFFS_TAG_NAME } from '../constants';\nimport type { FileDiffMetadata } from '../types';\nimport { getSingularPatch } from '../utils/getSingularPatch';\nimport type { DiffBasePropsReact } from './types';\nimport { renderDiffChildren } from './utils/renderDiffChildren';\nimport { templateRender } from './utils/templateRender';\nimport { useFileDiffInstance } from './utils/useFileDiffInstance';\n\nexport interface PatchDiffProps<\n LAnnotation,\n> extends DiffBasePropsReact<LAnnotation> {\n patch: string;\n disableWorkerPool?: boolean;\n}\n\nexport function PatchDiff<LAnnotation = undefined>({\n patch,\n options,\n metrics,\n lineAnnotations,\n selectedLines,\n className,\n style,\n prerenderedHTML,\n renderAnnotation,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderMetadata,\n renderGutterUtility,\n
|
|
1
|
+
{"version":3,"file":"PatchDiff.js","names":[],"sources":["../../src/react/PatchDiff.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { DIFFS_TAG_NAME } from '../constants';\nimport type { FileDiffMetadata } from '../types';\nimport { getSingularPatch } from '../utils/getSingularPatch';\nimport type { DiffBasePropsReact } from './types';\nimport { renderDiffChildren } from './utils/renderDiffChildren';\nimport { templateRender } from './utils/templateRender';\nimport { useFileDiffInstance } from './utils/useFileDiffInstance';\n\nexport interface PatchDiffProps<\n LAnnotation,\n> extends DiffBasePropsReact<LAnnotation> {\n patch: string;\n disableWorkerPool?: boolean;\n}\n\nexport function PatchDiff<LAnnotation = undefined>({\n patch,\n options,\n metrics,\n lineAnnotations,\n selectedLines,\n className,\n style,\n prerenderedHTML,\n renderAnnotation,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderMetadata,\n renderGutterUtility,\n disableWorkerPool = false,\n}: PatchDiffProps<LAnnotation>): React.JSX.Element {\n const fileDiff = usePatch(patch);\n const { ref, getHoveredLine } = useFileDiffInstance({\n fileDiff,\n options,\n metrics,\n lineAnnotations,\n selectedLines,\n prerenderedHTML,\n hasGutterRenderUtility: renderGutterUtility != null,\n hasCustomHeader: renderCustomHeader != null,\n disableWorkerPool,\n });\n const children = renderDiffChildren({\n fileDiff,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderMetadata,\n renderAnnotation,\n lineAnnotations,\n renderGutterUtility,\n getHoveredLine,\n });\n return (\n <DIFFS_TAG_NAME ref={ref} className={className} style={style}>\n {templateRender(children, prerenderedHTML)}\n </DIFFS_TAG_NAME>\n );\n}\n\nfunction usePatch(patch: string): FileDiffMetadata {\n return useMemo<FileDiffMetadata>(() => getSingularPatch(patch), [patch]);\n}\n"],"mappings":";;;;;;;;;;;;AAmBA,SAAgB,UAAmC,EACjD,OACA,SACA,SACA,iBACA,eACA,WACA,OACA,iBACA,kBACA,oBACA,oBACA,sBACA,qBACA,oBAAoB,SAC6B;CACjD,MAAM,WAAW,SAAS,MAAM;CAChC,MAAM,EAAE,KAAK,mBAAmB,oBAAoB;EAClD;EACA;EACA;EACA;EACA;EACA;EACA,wBAAwB,uBAAuB;EAC/C,iBAAiB,sBAAsB;EACvC;EACD,CAAC;AAWF,QACE,oBAAC;EAAoB;EAAgB;EAAkB;YACpD,eAZY,mBAAmB;GAClC;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CAAC,EAG4B,gBAAgB;GAC3B;;AAIrB,SAAS,SAAS,OAAiC;AACjD,QAAO,cAAgC,iBAAiB,MAAM,EAAE,CAAC,MAAM,CAAC"}
|
|
@@ -36,7 +36,6 @@ declare function UnresolvedFile<LAnnotation = undefined>({
|
|
|
36
36
|
renderHeaderPrefix,
|
|
37
37
|
renderHeaderMetadata,
|
|
38
38
|
renderGutterUtility,
|
|
39
|
-
renderHoverUtility,
|
|
40
39
|
renderMergeConflictUtility,
|
|
41
40
|
disableWorkerPool
|
|
42
41
|
}: UnresolvedFileProps<LAnnotation>): React.JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UnresolvedFile.d.ts","names":["ReactNode","FileDiffOptions","UnresolvedFile","UnresolvedFileClass","UnresolvedFileHunksRendererOptions","FileContents","HunkSeparators","MergeConflictResolution","MergeConflictDiffAction","FileDiffProps","RenderMergeConflictActionContext","RenderMergeConflictActions","MergeConflictActionsTypeOption","UnresolvedFileReactOptions","LAnnotation","HTMLElement","Omit","UnresolvedFileProps","file","options","lineAnnotations","selectedLines","className","style","prerenderedHTML","renderAnnotation","renderCustomHeader","renderHeaderPrefix","renderHeaderMetadata","renderGutterUtility","
|
|
1
|
+
{"version":3,"file":"UnresolvedFile.d.ts","names":["ReactNode","FileDiffOptions","UnresolvedFile","UnresolvedFileClass","UnresolvedFileHunksRendererOptions","FileContents","HunkSeparators","MergeConflictResolution","MergeConflictDiffAction","FileDiffProps","RenderMergeConflictActionContext","RenderMergeConflictActions","MergeConflictActionsTypeOption","UnresolvedFileReactOptions","LAnnotation","HTMLElement","Omit","UnresolvedFileProps","file","options","lineAnnotations","selectedLines","className","style","prerenderedHTML","renderAnnotation","renderCustomHeader","renderHeaderPrefix","renderHeaderMetadata","renderGutterUtility","renderMergeConflictUtility","disableWorkerPool","React","JSX","Element"],"sources":["../../src/react/UnresolvedFile.d.ts"],"sourcesContent":["import type { ReactNode } from 'react';\nimport type { FileDiffOptions } from '../components/FileDiff';\nimport type { UnresolvedFile as UnresolvedFileClass } from '../components/UnresolvedFile';\nimport type { UnresolvedFileHunksRendererOptions } from '../renderers/UnresolvedFileHunksRenderer';\nimport type { FileContents, HunkSeparators, MergeConflictResolution } from '../types';\nimport { type MergeConflictDiffAction } from '../utils/parseMergeConflictDiffFromFile';\nimport type { FileDiffProps } from './FileDiff';\nexport interface RenderMergeConflictActionContext {\n resolveConflict(resolution: MergeConflictResolution): void;\n}\nexport type RenderMergeConflictActions = (action: MergeConflictDiffAction, context: RenderMergeConflictActionContext) => ReactNode;\nexport type MergeConflictActionsTypeOption = 'none' | 'default' | RenderMergeConflictActions;\nexport interface UnresolvedFileReactOptions<LAnnotation> extends Omit<FileDiffOptions<LAnnotation>, 'hunkSeparators' | 'diffStyle' | 'onMergeConflictAction' | 'onPostRender'>, UnresolvedFileHunksRendererOptions {\n hunkSeparators?: HunkSeparators;\n onPostRender?(node: HTMLElement, instance: UnresolvedFileClass<LAnnotation>): unknown;\n maxContextLines?: number;\n}\nexport interface UnresolvedFileProps<LAnnotation> extends Omit<FileDiffProps<LAnnotation>, 'fileDiff' | 'options'> {\n file: FileContents;\n options?: UnresolvedFileReactOptions<LAnnotation>;\n renderMergeConflictUtility?(action: MergeConflictDiffAction, getInstance: () => UnresolvedFileClass<LAnnotation> | undefined): ReactNode;\n disableWorkerPool?: boolean;\n}\nexport declare function UnresolvedFile<LAnnotation = undefined>({ file, options, lineAnnotations, selectedLines, className, style, prerenderedHTML, renderAnnotation, renderCustomHeader, renderHeaderPrefix, renderHeaderMetadata, renderGutterUtility, renderMergeConflictUtility, disableWorkerPool }: UnresolvedFileProps<LAnnotation>): React.JSX.Element;\n//# sourceMappingURL=UnresolvedFile.d.ts.map"],"mappings":";;;;;;;;;UAOiBU,gCAAAA;8BACeH;AADhC;AAGYI,KAAAA,0BAAAA,GAA0B,CAAA,MAAA,EAAYH,uBAAZ,EAAA,OAAA,EAA8CE,gCAA9C,EAAA,GAAmFV,SAAnF;AAAYQ,KACtCI,8BAAAA,GADsCJ,MAAAA,GAAAA,SAAAA,GACgBG,0BADhBH;AAAkCE,UAEnEG,0BAFmEH,CAAAA,WAAAA,CAAAA,SAEnBM,IAFmBN,CAEdT,eAFcS,CAEEI,WAFFJ,CAAAA,EAAAA,gBAAAA,GAAAA,WAAAA,GAAAA,uBAAAA,GAAAA,cAAAA,CAAAA,EAE4FN,kCAF5FM,CAAAA;EAAqCV,cAAAA,CAAAA,EAGpGM,cAHoGN;EAAS,YAAA,EAAA,IAAA,EAI1Ge,WAJ0G,EAAA,QAAA,EAInFZ,gBAJmF,CAI/DW,WAJ+D,CAAA,CAAA,EAAA,OAAA;EACtHF,eAAAA,CAAAA,EAAAA,MAAAA;AACZ;AAAsFE,UAKrEG,mBALqEH,CAAAA,WAAAA,CAAAA,SAK5BE,IAL4BF,CAKvBL,aALuBK,CAKTA,WALSA,CAAAA,EAAAA,UAAAA,GAAAA,SAAAA,CAAAA,CAAAA;EAAhBb,IAAAA,EAM5DI,YAN4DJ;EACjDK,OAAAA,CAAAA,EAMPO,0BANOP,CAMoBQ,WANpBR,CAAAA;EACGS,0BAAAA,EAAAA,MAAAA,EAMgBP,uBANhBO,EAAAA,WAAAA,EAAAA,GAAAA,GAM4DZ,gBAN5DY,CAMgFD,WANhFC,CAAAA,GAAAA,SAAAA,CAAAA,EAM2Gf,SAN3Ge;EAA2CD,iBAAAA,CAAAA,EAAAA,OAAAA;;AAFFE,iBAWzCd,cAXyCc,CAAAA,cAAAA,SAAAA,CAAAA,CAAAA;EAAAA,IAAAA;EAAAA,OAAAA;EAAAA,eAAAA;EAAAA,aAAAA;EAAAA,SAAAA;EAAAA,KAAAA;EAAAA,eAAAA;EAAAA,gBAAAA;EAAAA,kBAAAA;EAAAA,kBAAAA;EAAAA,oBAAAA;EAAAA,mBAAAA;EAAAA,0BAAAA;EAAAA;AAAAA,CAAAA,EAWyOC,mBAXzOD,CAW6PF,WAX7PE,CAAAA,CAAAA,EAW4QgB,KAAAA,CAAMC,GAAAA,CAAIC,OAXtRlB"}
|