@miethe/ui 0.2.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/CHANGELOG.md +77 -0
- package/README.md +1536 -0
- package/dist/bulk-actions/Button.d.ts +28 -0
- package/dist/bulk-actions/Button.d.ts.map +1 -0
- package/dist/bulk-actions/Button.js +45 -0
- package/dist/bulk-actions/Button.js.map +1 -0
- package/dist/bulk-actions/bulk-action-bar.d.ts +91 -0
- package/dist/bulk-actions/bulk-action-bar.d.ts.map +1 -0
- package/dist/bulk-actions/bulk-action-bar.js +94 -0
- package/dist/bulk-actions/bulk-action-bar.js.map +1 -0
- package/dist/bulk-actions/index.d.ts +5 -0
- package/dist/bulk-actions/index.d.ts.map +1 -0
- package/dist/bulk-actions/index.js +7 -0
- package/dist/bulk-actions/index.js.map +1 -0
- package/dist/bulk-actions/utils.d.ts +6 -0
- package/dist/bulk-actions/utils.d.ts.map +1 -0
- package/dist/bulk-actions/utils.js +9 -0
- package/dist/bulk-actions/utils.js.map +1 -0
- package/dist/components/ui/alert.d.ts +9 -0
- package/dist/components/ui/alert.d.ts.map +1 -0
- package/dist/components/ui/alert.js +23 -0
- package/dist/components/ui/alert.js.map +1 -0
- package/dist/components/ui/button.d.ts +12 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +34 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/collapsible.d.ts +6 -0
- package/dist/components/ui/collapsible.d.ts.map +1 -0
- package/dist/components/ui/collapsible.js +7 -0
- package/dist/components/ui/collapsible.js.map +1 -0
- package/dist/components/ui/skeleton.d.ts +4 -0
- package/dist/components/ui/skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeleton.js +7 -0
- package/dist/components/ui/skeleton.js.map +1 -0
- package/dist/content-viewer/ContentPane.d.ts +107 -0
- package/dist/content-viewer/ContentPane.d.ts.map +1 -0
- package/dist/content-viewer/ContentPane.js +247 -0
- package/dist/content-viewer/ContentPane.js.map +1 -0
- package/dist/content-viewer/ContentViewerProvider.d.ts +83 -0
- package/dist/content-viewer/ContentViewerProvider.d.ts.map +1 -0
- package/dist/content-viewer/ContentViewerProvider.js +92 -0
- package/dist/content-viewer/ContentViewerProvider.js.map +1 -0
- package/dist/content-viewer/FileTree.d.ts +71 -0
- package/dist/content-viewer/FileTree.d.ts.map +1 -0
- package/dist/content-viewer/FileTree.js +294 -0
- package/dist/content-viewer/FileTree.js.map +1 -0
- package/dist/content-viewer/adapters.d.ts +101 -0
- package/dist/content-viewer/adapters.d.ts.map +1 -0
- package/dist/content-viewer/adapters.js +32 -0
- package/dist/content-viewer/adapters.js.map +1 -0
- package/dist/content-viewer/index.d.ts +8 -0
- package/dist/content-viewer/index.d.ts.map +1 -0
- package/dist/content-viewer/index.js +5 -0
- package/dist/content-viewer/index.js.map +1 -0
- package/dist/diff/DiffViewer.d.ts +112 -0
- package/dist/diff/DiffViewer.d.ts.map +1 -0
- package/dist/diff/DiffViewer.js +414 -0
- package/dist/diff/DiffViewer.js.map +1 -0
- package/dist/diff/diff.d.ts +32 -0
- package/dist/diff/diff.d.ts.map +1 -0
- package/dist/diff/diff.js +8 -0
- package/dist/diff/diff.js.map +1 -0
- package/dist/diff/index.d.ts +4 -0
- package/dist/diff/index.d.ts.map +1 -0
- package/dist/diff/index.js +3 -0
- package/dist/diff/index.js.map +1 -0
- package/dist/display/FilePreviewPane.d.ts +31 -0
- package/dist/display/FilePreviewPane.d.ts.map +1 -0
- package/dist/display/FilePreviewPane.js +144 -0
- package/dist/display/FilePreviewPane.js.map +1 -0
- package/dist/display/FrontmatterDisplay.d.ts +33 -0
- package/dist/display/FrontmatterDisplay.d.ts.map +1 -0
- package/dist/display/FrontmatterDisplay.js +79 -0
- package/dist/display/FrontmatterDisplay.js.map +1 -0
- package/dist/display/index.d.ts +5 -0
- package/dist/display/index.d.ts.map +1 -0
- package/dist/display/index.js +4 -0
- package/dist/display/index.js.map +1 -0
- package/dist/editor/MarkdownEditor.d.ts +28 -0
- package/dist/editor/MarkdownEditor.d.ts.map +1 -0
- package/dist/editor/MarkdownEditor.js +160 -0
- package/dist/editor/MarkdownEditor.js.map +1 -0
- package/dist/editor/SplitPreview.d.ts +28 -0
- package/dist/editor/SplitPreview.d.ts.map +1 -0
- package/dist/editor/SplitPreview.js +34 -0
- package/dist/editor/SplitPreview.js.map +1 -0
- package/dist/editor/index.d.ts +5 -0
- package/dist/editor/index.d.ts.map +1 -0
- package/dist/editor/index.js +4 -0
- package/dist/editor/index.js.map +1 -0
- package/dist/filters/filters-dropdown.d.ts +24 -0
- package/dist/filters/filters-dropdown.d.ts.map +1 -0
- package/dist/filters/filters-dropdown.js +36 -0
- package/dist/filters/filters-dropdown.js.map +1 -0
- package/dist/filters/index.d.ts +9 -0
- package/dist/filters/index.d.ts.map +1 -0
- package/dist/filters/index.js +5 -0
- package/dist/filters/index.js.map +1 -0
- package/dist/filters/sort-dropdown.d.ts +13 -0
- package/dist/filters/sort-dropdown.d.ts.map +1 -0
- package/dist/filters/sort-dropdown.js +20 -0
- package/dist/filters/sort-dropdown.js.map +1 -0
- package/dist/filters/tag-filter-popover.d.ts +39 -0
- package/dist/filters/tag-filter-popover.d.ts.map +1 -0
- package/dist/filters/tag-filter-popover.js +72 -0
- package/dist/filters/tag-filter-popover.js.map +1 -0
- package/dist/filters/tool-filter-popover.d.ts +42 -0
- package/dist/filters/tool-filter-popover.d.ts.map +1 -0
- package/dist/filters/tool-filter-popover.js +67 -0
- package/dist/filters/tool-filter-popover.js.map +1 -0
- package/dist/hooks/use-debounce.d.ts +9 -0
- package/dist/hooks/use-debounce.d.ts.map +1 -0
- package/dist/hooks/use-debounce.js +21 -0
- package/dist/hooks/use-debounce.js.map +1 -0
- package/dist/hooks/use-intersection-observer.d.ts +11 -0
- package/dist/hooks/use-intersection-observer.d.ts.map +1 -0
- package/dist/hooks/use-intersection-observer.js +25 -0
- package/dist/hooks/use-intersection-observer.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/pickers/EntityPickerDialog.d.ts +233 -0
- package/dist/pickers/EntityPickerDialog.d.ts.map +1 -0
- package/dist/pickers/EntityPickerDialog.js +355 -0
- package/dist/pickers/EntityPickerDialog.js.map +1 -0
- package/dist/pickers/EntityPickerViewToggle.d.ts +8 -0
- package/dist/pickers/EntityPickerViewToggle.d.ts.map +1 -0
- package/dist/pickers/EntityPickerViewToggle.js +17 -0
- package/dist/pickers/EntityPickerViewToggle.js.map +1 -0
- package/dist/pickers/index.d.ts +5 -0
- package/dist/pickers/index.d.ts.map +1 -0
- package/dist/pickers/index.js +3 -0
- package/dist/pickers/index.js.map +1 -0
- package/dist/primitives/Badge.d.ts +16 -0
- package/dist/primitives/Badge.d.ts.map +1 -0
- package/dist/primitives/Badge.js +43 -0
- package/dist/primitives/Badge.js.map +1 -0
- package/dist/primitives/BaseArtifactModal.d.ts +114 -0
- package/dist/primitives/BaseArtifactModal.d.ts.map +1 -0
- package/dist/primitives/BaseArtifactModal.js +76 -0
- package/dist/primitives/BaseArtifactModal.js.map +1 -0
- package/dist/primitives/Dialog.d.ts +20 -0
- package/dist/primitives/Dialog.d.ts.map +1 -0
- package/dist/primitives/Dialog.js +24 -0
- package/dist/primitives/Dialog.js.map +1 -0
- package/dist/primitives/DropdownMenu.d.ts +28 -0
- package/dist/primitives/DropdownMenu.d.ts.map +1 -0
- package/dist/primitives/DropdownMenu.js +34 -0
- package/dist/primitives/DropdownMenu.js.map +1 -0
- package/dist/primitives/EnterpriseOwnerBadge.d.ts +9 -0
- package/dist/primitives/EnterpriseOwnerBadge.d.ts.map +1 -0
- package/dist/primitives/EnterpriseOwnerBadge.js +12 -0
- package/dist/primitives/EnterpriseOwnerBadge.js.map +1 -0
- package/dist/primitives/GroupedSelect.d.ts +30 -0
- package/dist/primitives/GroupedSelect.d.ts.map +1 -0
- package/dist/primitives/GroupedSelect.js +47 -0
- package/dist/primitives/GroupedSelect.js.map +1 -0
- package/dist/primitives/Input.d.ts +6 -0
- package/dist/primitives/Input.d.ts.map +1 -0
- package/dist/primitives/Input.js +9 -0
- package/dist/primitives/Input.js.map +1 -0
- package/dist/primitives/LockIcon.d.ts +11 -0
- package/dist/primitives/LockIcon.d.ts.map +1 -0
- package/dist/primitives/LockIcon.js +15 -0
- package/dist/primitives/LockIcon.js.map +1 -0
- package/dist/primitives/MaskedSecretInput.d.ts +16 -0
- package/dist/primitives/MaskedSecretInput.d.ts.map +1 -0
- package/dist/primitives/MaskedSecretInput.js +42 -0
- package/dist/primitives/MaskedSecretInput.js.map +1 -0
- package/dist/primitives/ModalHeader.d.ts +66 -0
- package/dist/primitives/ModalHeader.d.ts.map +1 -0
- package/dist/primitives/ModalHeader.js +58 -0
- package/dist/primitives/ModalHeader.js.map +1 -0
- package/dist/primitives/Popover.d.ts +9 -0
- package/dist/primitives/Popover.d.ts.map +1 -0
- package/dist/primitives/Popover.js +13 -0
- package/dist/primitives/Popover.js.map +1 -0
- package/dist/primitives/ScrollArea.d.ts +6 -0
- package/dist/primitives/ScrollArea.d.ts.map +1 -0
- package/dist/primitives/ScrollArea.js +11 -0
- package/dist/primitives/ScrollArea.js.map +1 -0
- package/dist/primitives/SearchableCombobox.d.ts +30 -0
- package/dist/primitives/SearchableCombobox.d.ts.map +1 -0
- package/dist/primitives/SearchableCombobox.js +124 -0
- package/dist/primitives/SearchableCombobox.js.map +1 -0
- package/dist/primitives/SearchablePickerDialog.d.ts +20 -0
- package/dist/primitives/SearchablePickerDialog.d.ts.map +1 -0
- package/dist/primitives/SearchablePickerDialog.js +78 -0
- package/dist/primitives/SearchablePickerDialog.js.map +1 -0
- package/dist/primitives/StatusBadge.d.ts +21 -0
- package/dist/primitives/StatusBadge.d.ts.map +1 -0
- package/dist/primitives/StatusBadge.js +25 -0
- package/dist/primitives/StatusBadge.js.map +1 -0
- package/dist/primitives/TabNavigation.d.ts +68 -0
- package/dist/primitives/TabNavigation.d.ts.map +1 -0
- package/dist/primitives/TabNavigation.js +74 -0
- package/dist/primitives/TabNavigation.js.map +1 -0
- package/dist/primitives/Tabs.d.ts +8 -0
- package/dist/primitives/Tabs.d.ts.map +1 -0
- package/dist/primitives/Tabs.js +14 -0
- package/dist/primitives/Tabs.js.map +1 -0
- package/dist/primitives/Tooltip.d.ts +8 -0
- package/dist/primitives/Tooltip.d.ts.map +1 -0
- package/dist/primitives/Tooltip.js +12 -0
- package/dist/primitives/Tooltip.js.map +1 -0
- package/dist/primitives/VerticalTabNavigation.d.ts +75 -0
- package/dist/primitives/VerticalTabNavigation.d.ts.map +1 -0
- package/dist/primitives/VerticalTabNavigation.js +166 -0
- package/dist/primitives/VerticalTabNavigation.js.map +1 -0
- package/dist/primitives/ViewModeToggle.d.ts +12 -0
- package/dist/primitives/ViewModeToggle.d.ts.map +1 -0
- package/dist/primitives/ViewModeToggle.js +56 -0
- package/dist/primitives/ViewModeToggle.js.map +1 -0
- package/dist/primitives/WizardShell.d.ts +81 -0
- package/dist/primitives/WizardShell.d.ts.map +1 -0
- package/dist/primitives/WizardShell.js +73 -0
- package/dist/primitives/WizardShell.js.map +1 -0
- package/dist/primitives/index.d.ts +38 -0
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/index.js +24 -0
- package/dist/primitives/index.js.map +1 -0
- package/dist/primitives/utils.d.ts +6 -0
- package/dist/primitives/utils.d.ts.map +1 -0
- package/dist/primitives/utils.js +9 -0
- package/dist/primitives/utils.js.map +1 -0
- package/dist/types/index.d.ts +63 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +9 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +63 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +345 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/perf-marks.d.ts +28 -0
- package/dist/utils/perf-marks.d.ts.map +1 -0
- package/dist/utils/perf-marks.js +45 -0
- package/dist/utils/perf-marks.js.map +1 -0
- package/dist/utils/readme-utils.d.ts +67 -0
- package/dist/utils/readme-utils.d.ts.map +1 -0
- package/dist/utils/readme-utils.js +164 -0
- package/dist/utils/readme-utils.js.map +1 -0
- package/dist/utils/type-colors.d.ts +70 -0
- package/dist/utils/type-colors.d.ts.map +1 -0
- package/dist/utils/type-colors.js +118 -0
- package/dist/utils/type-colors.js.map +1 -0
- package/package.json +131 -0
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
4
|
+
import { ChevronDown, ChevronRight, X, Loader2 } from 'lucide-react';
|
|
5
|
+
import { Badge } from '../primitives/Badge';
|
|
6
|
+
import { Button } from '../components/ui/button';
|
|
7
|
+
import { Skeleton } from '../components/ui/skeleton';
|
|
8
|
+
import { cn } from '../primitives/utils';
|
|
9
|
+
import { markStart, markEnd } from '../utils/perf-marks';
|
|
10
|
+
/**
|
|
11
|
+
* Maximum number of files to render in the sidebar by default.
|
|
12
|
+
* When the diff contains more files than this, only the first N are shown
|
|
13
|
+
* and a "Show all N files" banner appears at the bottom of the sidebar.
|
|
14
|
+
*/
|
|
15
|
+
const LARGE_DIFF_FILE_THRESHOLD = 50;
|
|
16
|
+
/**
|
|
17
|
+
* Maximum number of lines in a unified diff before the file is considered
|
|
18
|
+
* "large" and collapsed by default in the diff panel. The user must click
|
|
19
|
+
* "Load diff" to expand and parse the content.
|
|
20
|
+
*/
|
|
21
|
+
const LARGE_DIFF_LINE_THRESHOLD = 1000;
|
|
22
|
+
/**
|
|
23
|
+
* Maximum size in bytes for a unified diff string before it is treated as
|
|
24
|
+
* "large" and collapsed by default (whichever threshold is hit first).
|
|
25
|
+
*/
|
|
26
|
+
const LARGE_DIFF_BYTES_THRESHOLD = 50 * 1024; // 50 KB
|
|
27
|
+
/**
|
|
28
|
+
* Returns true when a unified diff string exceeds either the line or byte threshold.
|
|
29
|
+
*/
|
|
30
|
+
function isLargeFileDiff(unifiedDiff) {
|
|
31
|
+
if (unifiedDiff.length > LARGE_DIFF_BYTES_THRESHOLD)
|
|
32
|
+
return true;
|
|
33
|
+
let lineCount = 0;
|
|
34
|
+
for (let i = 0; i < unifiedDiff.length; i++) {
|
|
35
|
+
if (unifiedDiff[i] === '\n') {
|
|
36
|
+
lineCount++;
|
|
37
|
+
if (lineCount >= LARGE_DIFF_LINE_THRESHOLD)
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
function DiffLine({ content, type, lineNumber }) {
|
|
44
|
+
const lineClasses = cn('flex font-mono text-sm border-b border-border/50', type === 'addition' && 'bg-green-500/10 text-green-700 dark:text-green-400', type === 'deletion' && 'bg-red-500/10 text-red-700 dark:text-red-400', type === 'context' && 'text-foreground', type === 'header' && 'bg-muted/50 text-muted-foreground font-semibold');
|
|
45
|
+
return (_jsxs("div", { className: lineClasses, children: [_jsx("span", { className: "w-12 flex-shrink-0 select-none border-r border-border/50 pr-2 text-right text-gray-400", children: lineNumber !== undefined ? lineNumber : '' }), _jsx("span", { className: "flex-1 whitespace-pre px-2", children: content })] }));
|
|
46
|
+
}
|
|
47
|
+
function SpacerLine() {
|
|
48
|
+
return (_jsxs("div", { className: "flex bg-muted/40 font-mono text-sm", children: [_jsx("span", { className: "w-12 flex-shrink-0 select-none border-r border-border/50 pr-2 text-right text-gray-400", children: "\u00A0" }), _jsx("span", { className: "flex-1 whitespace-pre px-2", children: "\u00A0" })] }));
|
|
49
|
+
}
|
|
50
|
+
/** Predetermined widths for skeleton lines to avoid hydration mismatches */
|
|
51
|
+
const LINE_WIDTHS = [72, 55, 88, 43, 65, 80, 50, 95, 60, 75, 48, 83];
|
|
52
|
+
/**
|
|
53
|
+
* DiffViewerSkeleton - Loading skeleton matching the DiffViewer layout
|
|
54
|
+
*
|
|
55
|
+
* Mimics the side-by-side diff viewer structure:
|
|
56
|
+
* - Summary header bar with skeleton badges
|
|
57
|
+
* - File list sidebar with skeleton entries
|
|
58
|
+
* - Main diff area with side-by-side skeleton code lines
|
|
59
|
+
*/
|
|
60
|
+
export function DiffViewerSkeleton() {
|
|
61
|
+
return (_jsxs("div", { className: "flex h-full min-h-0 min-w-0 flex-col overflow-hidden", children: [_jsx("div", { className: "flex flex-shrink-0 items-center justify-between border-b p-4", children: _jsxs("div", { className: "flex items-center gap-4", children: [_jsx(Skeleton, { className: "h-6 w-28" }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Skeleton, { className: "h-5 w-12" }), _jsx(Skeleton, { className: "h-5 w-12" }), _jsx(Skeleton, { className: "h-5 w-12" })] })] }) }), _jsxs("div", { className: "flex min-h-0 min-w-0 flex-1 overflow-hidden", children: [_jsx("div", { className: "min-h-0 w-64 flex-shrink-0 overflow-y-auto border-r bg-muted/20", children: _jsx("div", { className: "space-y-1 p-2", children: Array.from({ length: 4 }).map((_, i) => (_jsxs("div", { className: "flex items-center gap-2 rounded px-2 py-1.5", children: [_jsx(Skeleton, { className: "h-3 w-3 flex-shrink-0" }), _jsx(Skeleton, { className: "h-4 flex-1" }), _jsx(Skeleton, { className: "h-5 w-16 flex-shrink-0" })] }, i))) }) }), _jsxs("div", { className: "flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden", children: [_jsx("div", { className: "flex-shrink-0 border-b bg-muted/30 px-4 py-2", children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsx(Skeleton, { className: "h-4 w-48" }), _jsx(Skeleton, { className: "h-5 w-16" })] }) }), _jsxs("div", { className: "flex min-h-0 min-w-0 flex-1 overflow-hidden", children: [_jsxs("div", { className: "flex min-h-0 min-w-0 flex-1 flex-col border-r", children: [_jsx("div", { className: "flex-shrink-0 border-b bg-muted/50 px-4 py-2", children: _jsx(Skeleton, { className: "h-4 w-20" }) }), _jsx("div", { className: "min-h-0 min-w-0 flex-1 p-0", children: Array.from({ length: 12 }).map((_, i) => (_jsxs("div", { className: "flex border-b border-border/50 font-mono text-sm", children: [_jsx("span", { className: "w-12 flex-shrink-0 border-r border-border/50 px-2 py-0.5", children: _jsx(Skeleton, { className: "h-3.5 w-6" }) }), _jsx("span", { className: "flex-1 px-2 py-0.5", children: _jsx(Skeleton, { className: "h-3.5", style: { width: `${LINE_WIDTHS[i % LINE_WIDTHS.length]}%` } }) })] }, i))) })] }), _jsxs("div", { className: "flex min-h-0 min-w-0 flex-1 flex-col", children: [_jsx("div", { className: "flex-shrink-0 border-b bg-muted/50 px-4 py-2", children: _jsx(Skeleton, { className: "h-4 w-20" }) }), _jsx("div", { className: "min-h-0 min-w-0 flex-1 p-0", children: Array.from({ length: 12 }).map((_, i) => (_jsxs("div", { className: "flex border-b border-border/50 font-mono text-sm", children: [_jsx("span", { className: "w-12 flex-shrink-0 border-r border-border/50 px-2 py-0.5", children: _jsx(Skeleton, { className: "h-3.5 w-6" }) }), _jsx("span", { className: "flex-1 px-2 py-0.5", children: _jsx(Skeleton, { className: "h-3.5", style: { width: `${LINE_WIDTHS[(i + 5) % LINE_WIDTHS.length]}%` } }) })] }, i))) })] })] })] })] })] }));
|
|
62
|
+
}
|
|
63
|
+
function parseDiff(unifiedDiff) {
|
|
64
|
+
const lines = unifiedDiff.split('\n');
|
|
65
|
+
const parsed = [];
|
|
66
|
+
let leftLineNum = 0;
|
|
67
|
+
let rightLineNum = 0;
|
|
68
|
+
for (const line of lines) {
|
|
69
|
+
// Skip file headers
|
|
70
|
+
if (line.startsWith('---') || line.startsWith('+++')) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
// Parse hunk header: @@ -1,5 +1,6 @@
|
|
74
|
+
if (line.startsWith('@@')) {
|
|
75
|
+
const match = line.match(/@@ -(\d+),?\d* \+(\d+),?\d* @@/);
|
|
76
|
+
if (match && match[1] && match[2]) {
|
|
77
|
+
leftLineNum = parseInt(match[1], 10);
|
|
78
|
+
rightLineNum = parseInt(match[2], 10);
|
|
79
|
+
}
|
|
80
|
+
parsed.push({
|
|
81
|
+
type: 'header',
|
|
82
|
+
content: line,
|
|
83
|
+
});
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
// Parse diff lines
|
|
87
|
+
if (line.startsWith('+')) {
|
|
88
|
+
parsed.push({
|
|
89
|
+
rightLineNumber: rightLineNum++,
|
|
90
|
+
type: 'addition',
|
|
91
|
+
content: line.substring(1),
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
else if (line.startsWith('-')) {
|
|
95
|
+
parsed.push({
|
|
96
|
+
leftLineNumber: leftLineNum++,
|
|
97
|
+
type: 'deletion',
|
|
98
|
+
content: line.substring(1),
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
// Context line (no prefix or space prefix)
|
|
103
|
+
const content = line.startsWith(' ') ? line.substring(1) : line;
|
|
104
|
+
parsed.push({
|
|
105
|
+
leftLineNumber: leftLineNum++,
|
|
106
|
+
rightLineNumber: rightLineNum++,
|
|
107
|
+
type: 'context',
|
|
108
|
+
content,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return parsed;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Compute sidebar stats (additions + deletions count) from a raw unified diff string
|
|
116
|
+
* without allocating full ParsedDiffLine objects. O(n) line scan with minimal allocations.
|
|
117
|
+
*/
|
|
118
|
+
function computeDiffStats(unifiedDiff) {
|
|
119
|
+
let additions = 0;
|
|
120
|
+
let deletions = 0;
|
|
121
|
+
const lines = unifiedDiff.split('\n');
|
|
122
|
+
for (const line of lines) {
|
|
123
|
+
if (line.startsWith('---') || line.startsWith('+++') || line.startsWith('@@'))
|
|
124
|
+
continue;
|
|
125
|
+
if (line.startsWith('+'))
|
|
126
|
+
additions++;
|
|
127
|
+
else if (line.startsWith('-'))
|
|
128
|
+
deletions++;
|
|
129
|
+
}
|
|
130
|
+
return { additions, deletions };
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Map a numeric tier level to a human-readable tier name.
|
|
134
|
+
*
|
|
135
|
+
* The mapping mirrors the enterprise edition tiers defined in the backend.
|
|
136
|
+
* Unknown tier levels fall back to a generic "Tier N" label.
|
|
137
|
+
*/
|
|
138
|
+
function tierName(tier) {
|
|
139
|
+
const names = {
|
|
140
|
+
0: 'Developer',
|
|
141
|
+
1: 'Team',
|
|
142
|
+
2: 'Enterprise',
|
|
143
|
+
};
|
|
144
|
+
return names[tier] ?? `Tier ${tier}`;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* TierBadge — renders an enterprise tier pill for use in diff panel headers.
|
|
148
|
+
*
|
|
149
|
+
* Displays the numeric tier alongside its human-readable name derived from
|
|
150
|
+
* the ownerType, e.g. "Tier 1 · Team" or "Tier 2 · Enterprise".
|
|
151
|
+
*/
|
|
152
|
+
function TierBadge({ tier, ownerType }) {
|
|
153
|
+
// Resolve name: prefer ownerType label if it already looks like a tier name,
|
|
154
|
+
// otherwise fall back to the tier number mapping.
|
|
155
|
+
const resolvedName = ownerType
|
|
156
|
+
? ownerType.charAt(0).toUpperCase() + ownerType.slice(1)
|
|
157
|
+
: tierName(tier);
|
|
158
|
+
const variantMap = {
|
|
159
|
+
0: 'outline',
|
|
160
|
+
1: 'secondary',
|
|
161
|
+
2: 'default',
|
|
162
|
+
};
|
|
163
|
+
const variant = variantMap[tier] ?? 'secondary';
|
|
164
|
+
return (_jsxs("span", { className: "inline-flex items-center gap-1.5", children: [_jsxs(Badge, { variant: variant, className: "text-xs font-medium tabular-nums", children: ["Tier ", tier] }), _jsx("span", { className: "text-xs text-muted-foreground", children: resolvedName })] }));
|
|
165
|
+
}
|
|
166
|
+
function FileStatusBadge({ status }) {
|
|
167
|
+
const variants = {
|
|
168
|
+
added: { variant: 'default', label: 'Added' },
|
|
169
|
+
modified: { variant: 'secondary', label: 'Modified' },
|
|
170
|
+
deleted: { variant: 'destructive', label: 'Deleted' },
|
|
171
|
+
unchanged: { variant: 'outline', label: 'Unchanged' },
|
|
172
|
+
};
|
|
173
|
+
const { variant, label } = variants[status];
|
|
174
|
+
return (_jsx(Badge, { variant: variant, className: "text-xs", children: label }));
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* DiffViewer - Side-by-side diff viewer with file browser
|
|
178
|
+
*
|
|
179
|
+
* Displays unified diffs in a professional side-by-side format. Features include:
|
|
180
|
+
* - File list sidebar with expandable items showing change statistics
|
|
181
|
+
* - Side-by-side diff panels with independent scrollbars
|
|
182
|
+
* - Color-coded additions (green), deletions (red), and context lines
|
|
183
|
+
* - File status badges (added, modified, deleted, unchanged)
|
|
184
|
+
* - Change summary (total files added, modified, deleted)
|
|
185
|
+
* - Optional sync conflict resolution actions (keep local/remote/merge)
|
|
186
|
+
*
|
|
187
|
+
* @example
|
|
188
|
+
* Basic diff viewer:
|
|
189
|
+
* ```tsx
|
|
190
|
+
* <DiffViewer
|
|
191
|
+
* files={diffData.files}
|
|
192
|
+
* leftLabel="Collection"
|
|
193
|
+
* rightLabel="Project"
|
|
194
|
+
* onClose={() => closeDiff()}
|
|
195
|
+
* />
|
|
196
|
+
* ```
|
|
197
|
+
*
|
|
198
|
+
* @example
|
|
199
|
+
* With sync resolution actions:
|
|
200
|
+
* ```tsx
|
|
201
|
+
* <DiffViewer
|
|
202
|
+
* files={diffData.files}
|
|
203
|
+
* leftLabel="Collection"
|
|
204
|
+
* rightLabel="Project"
|
|
205
|
+
* showResolutionActions={true}
|
|
206
|
+
* onResolve={(resolution) => handleResolve(resolution)}
|
|
207
|
+
* localLabel="Project"
|
|
208
|
+
* remoteLabel="Collection"
|
|
209
|
+
* isResolving={isResolving}
|
|
210
|
+
* previewMode={true}
|
|
211
|
+
* />
|
|
212
|
+
* ```
|
|
213
|
+
*
|
|
214
|
+
* @param props - DiffViewerProps configuration
|
|
215
|
+
* @returns Full-height diff viewer component
|
|
216
|
+
*/
|
|
217
|
+
export function DiffViewer({ files, leftLabel = 'Before', rightLabel = 'After', onClose, showResolutionActions = false, onResolve, localLabel, remoteLabel, previewMode = false, isResolving = false, isLoading = false, tierContext, }) {
|
|
218
|
+
const [selectedFileIndex, setSelectedFileIndex] = useState(0);
|
|
219
|
+
const [expandedFiles, setExpandedFiles] = useState(new Set([0]));
|
|
220
|
+
/**
|
|
221
|
+
* When the diff has more than LARGE_DIFF_FILE_THRESHOLD files, the sidebar
|
|
222
|
+
* initially renders only the first N. This flag lifts that cap.
|
|
223
|
+
*/
|
|
224
|
+
const [showAllFiles, setShowAllFiles] = useState(false);
|
|
225
|
+
/**
|
|
226
|
+
* Set of file indices for which the user has explicitly requested to load
|
|
227
|
+
* the full diff content. Files whose unified_diff is "large" (exceeds line/
|
|
228
|
+
* byte thresholds) start collapsed; clicking "Load diff" adds them here.
|
|
229
|
+
*/
|
|
230
|
+
const [loadedLargeFiles, setLoadedLargeFiles] = useState(new Set());
|
|
231
|
+
const selectedFile = files[selectedFileIndex];
|
|
232
|
+
/**
|
|
233
|
+
* On-demand parse cache keyed by file_path.
|
|
234
|
+
*
|
|
235
|
+
* Previously, a `parsedDiffs` useMemo iterated ALL files and called parseDiff() on every
|
|
236
|
+
* unified_diff string at mount time, regardless of whether the user ever expanded those files.
|
|
237
|
+
* For large diffs (50+ files) this blocked the main thread unnecessarily on mount.
|
|
238
|
+
*
|
|
239
|
+
* Now we parse lazily: only when a file is first selected or first expanded in the sidebar.
|
|
240
|
+
* The cache persists across renders via useRef so each file is parsed at most once per
|
|
241
|
+
* component lifetime. If the `files` prop identity changes (new data arrives) we clear
|
|
242
|
+
* the cache so stale results are never served.
|
|
243
|
+
*/
|
|
244
|
+
const parseCacheRef = useRef(new Map());
|
|
245
|
+
const filesCacheKeyRef = useRef('');
|
|
246
|
+
// Invalidate the parse cache when the files array changes (new diff data received)
|
|
247
|
+
const filesKey = files.map((f) => f.file_path).join(',');
|
|
248
|
+
if (filesKey !== filesCacheKeyRef.current) {
|
|
249
|
+
filesCacheKeyRef.current = filesKey;
|
|
250
|
+
parseCacheRef.current = new Map();
|
|
251
|
+
// Reset large-diff UX state so new data starts fresh
|
|
252
|
+
setShowAllFiles(false);
|
|
253
|
+
setLoadedLargeFiles(new Set());
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Get parsed lines for a given file path, parsing on first access and caching the result.
|
|
257
|
+
* Only call this for files the user has actually expanded/selected.
|
|
258
|
+
*/
|
|
259
|
+
const getParsedLines = (filePath, unifiedDiff) => {
|
|
260
|
+
const cache = parseCacheRef.current;
|
|
261
|
+
if (!cache.has(filePath)) {
|
|
262
|
+
cache.set(filePath, parseDiff(unifiedDiff));
|
|
263
|
+
}
|
|
264
|
+
return cache.get(filePath);
|
|
265
|
+
};
|
|
266
|
+
/**
|
|
267
|
+
* Sidebar stat cache: stores pre-computed {additions, deletions} per file_path.
|
|
268
|
+
* Uses the lightweight computeDiffStats scanner (no object allocation per line)
|
|
269
|
+
* instead of the full parseDiff. Keyed separately from parseCacheRef because
|
|
270
|
+
* sidebar stats are shown without needing full ParsedDiffLine arrays.
|
|
271
|
+
*/
|
|
272
|
+
const statsCacheRef = useRef(new Map());
|
|
273
|
+
const statsCacheKeyRef = useRef('');
|
|
274
|
+
if (filesKey !== statsCacheKeyRef.current) {
|
|
275
|
+
statsCacheKeyRef.current = filesKey;
|
|
276
|
+
statsCacheRef.current = new Map();
|
|
277
|
+
}
|
|
278
|
+
const getFileStats = (filePath, unifiedDiff) => {
|
|
279
|
+
const cache = statsCacheRef.current;
|
|
280
|
+
if (!cache.has(filePath)) {
|
|
281
|
+
cache.set(filePath, computeDiffStats(unifiedDiff));
|
|
282
|
+
}
|
|
283
|
+
return cache.get(filePath);
|
|
284
|
+
};
|
|
285
|
+
// Parsed diff for the currently selected file -- computed on demand, cached in parseCacheRef
|
|
286
|
+
const parsedDiff = useMemo(() => {
|
|
287
|
+
return selectedFile?.unified_diff
|
|
288
|
+
? getParsedLines(selectedFile.file_path, selectedFile.unified_diff)
|
|
289
|
+
: [];
|
|
290
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
291
|
+
}, [selectedFile?.file_path, selectedFile?.unified_diff]);
|
|
292
|
+
// Performance instrumentation: start timing diff summary and render on mount
|
|
293
|
+
useEffect(() => {
|
|
294
|
+
markStart('diff-viewer.summary-ready');
|
|
295
|
+
}, []);
|
|
296
|
+
// Refs for synchronized scrolling between left and right panels
|
|
297
|
+
const leftScrollRef = useRef(null);
|
|
298
|
+
const rightScrollRef = useRef(null);
|
|
299
|
+
// Synchronized scrolling between left and right diff panels
|
|
300
|
+
useEffect(() => {
|
|
301
|
+
const leftScroll = leftScrollRef.current;
|
|
302
|
+
const rightScroll = rightScrollRef.current;
|
|
303
|
+
if (!leftScroll || !rightScroll)
|
|
304
|
+
return;
|
|
305
|
+
let isSyncing = false;
|
|
306
|
+
const syncScroll = (source, target) => {
|
|
307
|
+
if (isSyncing)
|
|
308
|
+
return;
|
|
309
|
+
isSyncing = true;
|
|
310
|
+
target.scrollTop = source.scrollTop;
|
|
311
|
+
requestAnimationFrame(() => {
|
|
312
|
+
isSyncing = false;
|
|
313
|
+
});
|
|
314
|
+
};
|
|
315
|
+
const onLeftScroll = () => syncScroll(leftScroll, rightScroll);
|
|
316
|
+
const onRightScroll = () => syncScroll(rightScroll, leftScroll);
|
|
317
|
+
leftScroll.addEventListener('scroll', onLeftScroll);
|
|
318
|
+
rightScroll.addEventListener('scroll', onRightScroll);
|
|
319
|
+
return () => {
|
|
320
|
+
leftScroll.removeEventListener('scroll', onLeftScroll);
|
|
321
|
+
rightScroll.removeEventListener('scroll', onRightScroll);
|
|
322
|
+
};
|
|
323
|
+
}, [selectedFile]);
|
|
324
|
+
// Performance instrumentation: mark when diff summary data arrives (files prop populated)
|
|
325
|
+
const diffSummaryMarked = useRef(false);
|
|
326
|
+
useEffect(() => {
|
|
327
|
+
if (files.length > 0 && !diffSummaryMarked.current) {
|
|
328
|
+
diffSummaryMarked.current = true;
|
|
329
|
+
markEnd('diff-viewer.summary-ready');
|
|
330
|
+
}
|
|
331
|
+
}, [files]);
|
|
332
|
+
// Performance instrumentation: mark when the full diff content finishes rendering
|
|
333
|
+
// (fires after paint for the current selected file's unified diff)
|
|
334
|
+
const prevFilesKey = useRef('');
|
|
335
|
+
useEffect(() => {
|
|
336
|
+
if (files.length > 0 && filesKey !== prevFilesKey.current) {
|
|
337
|
+
prevFilesKey.current = filesKey;
|
|
338
|
+
markStart('diff-viewer.render');
|
|
339
|
+
// Defer end mark until after browser has painted the diff content
|
|
340
|
+
const id = requestAnimationFrame(() => {
|
|
341
|
+
markEnd('diff-viewer.render');
|
|
342
|
+
});
|
|
343
|
+
return () => cancelAnimationFrame(id);
|
|
344
|
+
}
|
|
345
|
+
}, [files, filesKey]);
|
|
346
|
+
// Memoize summary calculation (reads only file.status, no diff parsing needed)
|
|
347
|
+
const summary = useMemo(() => {
|
|
348
|
+
return files.reduce((acc, file) => {
|
|
349
|
+
if (file.status === 'added')
|
|
350
|
+
acc.added++;
|
|
351
|
+
else if (file.status === 'modified')
|
|
352
|
+
acc.modified++;
|
|
353
|
+
else if (file.status === 'deleted')
|
|
354
|
+
acc.deleted++;
|
|
355
|
+
else
|
|
356
|
+
acc.unchanged++;
|
|
357
|
+
return acc;
|
|
358
|
+
}, { added: 0, modified: 0, deleted: 0, unchanged: 0 });
|
|
359
|
+
}, [files]);
|
|
360
|
+
const toggleFileExpansion = (index) => {
|
|
361
|
+
const newExpanded = new Set(expandedFiles);
|
|
362
|
+
if (newExpanded.has(index)) {
|
|
363
|
+
newExpanded.delete(index);
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
newExpanded.add(index);
|
|
367
|
+
}
|
|
368
|
+
setExpandedFiles(newExpanded);
|
|
369
|
+
};
|
|
370
|
+
if (isLoading) {
|
|
371
|
+
return _jsx(DiffViewerSkeleton, {});
|
|
372
|
+
}
|
|
373
|
+
if (files.length === 0) {
|
|
374
|
+
return (_jsx("div", { className: "flex h-64 items-center justify-center text-muted-foreground", children: _jsx("p", { children: "No changes to display" }) }));
|
|
375
|
+
}
|
|
376
|
+
return (_jsxs("div", { className: "flex h-full min-h-0 min-w-0 flex-col overflow-hidden", children: [_jsxs("div", { className: "flex flex-shrink-0 items-center justify-between border-b p-4", children: [_jsxs("div", { className: "flex items-center gap-4", children: [_jsx("h3", { className: "text-lg font-semibold", children: "Diff Viewer" }), _jsxs("div", { className: "flex items-center gap-2 text-sm", children: [summary.added > 0 && (_jsxs("span", { className: "text-green-600 dark:text-green-400", children: ["+", summary.added] })), summary.modified > 0 && (_jsxs("span", { className: "text-blue-600 dark:text-blue-400", children: ["~", summary.modified] })), summary.deleted > 0 && (_jsxs("span", { className: "text-red-600 dark:text-red-400", children: ["-", summary.deleted] }))] })] }), onClose && (_jsx(Button, { variant: "ghost", size: "icon", onClick: onClose, children: _jsx(X, { className: "h-4 w-4" }) }))] }), _jsxs("div", { className: "flex min-h-0 min-w-0 flex-1 overflow-hidden", children: [_jsx("div", { className: "min-h-0 w-64 flex-shrink-0 overflow-y-auto border-r bg-muted/20", children: _jsxs("div", { className: "space-y-1 p-2", children: [(showAllFiles ? files : files.slice(0, LARGE_DIFF_FILE_THRESHOLD)).map((file, index) => {
|
|
377
|
+
const isExpanded = expandedFiles.has(index);
|
|
378
|
+
const isSelected = index === selectedFileIndex;
|
|
379
|
+
return (_jsxs("div", { children: [_jsxs("button", { onClick: () => {
|
|
380
|
+
setSelectedFileIndex(index);
|
|
381
|
+
if (!isExpanded) {
|
|
382
|
+
toggleFileExpansion(index);
|
|
383
|
+
}
|
|
384
|
+
}, className: cn('flex w-full items-center gap-2 rounded px-2 py-1.5 text-left text-sm transition-colors hover:bg-accent', isSelected && 'bg-accent'), children: [_jsx("span", { role: "button", tabIndex: -1, onClick: (e) => {
|
|
385
|
+
e.stopPropagation();
|
|
386
|
+
toggleFileExpansion(index);
|
|
387
|
+
}, className: "flex-shrink-0", children: isExpanded ? (_jsx(ChevronDown, { className: "h-3 w-3" })) : (_jsx(ChevronRight, { className: "h-3 w-3" })) }), _jsx("span", { className: "flex-1 truncate font-mono text-xs", children: file.file_path }), _jsx(FileStatusBadge, { status: file.status })] }), isExpanded && file.status === 'modified' && file.unified_diff && (() => {
|
|
388
|
+
const stats = getFileStats(file.file_path, file.unified_diff);
|
|
389
|
+
return (_jsx("div", { className: "ml-6 mt-1 space-y-0.5 text-xs text-muted-foreground", children: _jsxs("div", { className: "font-mono", children: [stats.additions, " additions, ", stats.deletions, " deletions"] }) }));
|
|
390
|
+
})()] }, index));
|
|
391
|
+
}), !showAllFiles && files.length > LARGE_DIFF_FILE_THRESHOLD && (_jsxs("div", { className: "mt-2 rounded border border-border/60 bg-muted/40 px-3 py-2 text-xs text-muted-foreground", children: [_jsxs("p", { className: "mb-1.5", children: ["Showing ", LARGE_DIFF_FILE_THRESHOLD, " of ", files.length, " files"] }), _jsxs(Button, { variant: "outline", size: "sm", className: "h-7 w-full text-xs", onClick: () => setShowAllFiles(true), children: ["Load all ", files.length, " files"] })] }))] }) }), _jsxs("div", { className: "flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden", children: [_jsx("div", { className: "flex-shrink-0 border-b bg-muted/30 px-4 py-2", children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "font-mono text-sm font-semibold", children: selectedFile?.file_path }), _jsx(FileStatusBadge, { status: selectedFile?.status || 'unchanged' })] }) }), selectedFile?.status === 'modified' && selectedFile.unified_diff ? (
|
|
392
|
+
// Large-file guard: if the diff exceeds the line/byte threshold AND the user
|
|
393
|
+
// has not explicitly loaded it, show a collapsed placeholder instead of
|
|
394
|
+
// parsing and rendering potentially thousands of DOM nodes.
|
|
395
|
+
isLargeFileDiff(selectedFile.unified_diff) &&
|
|
396
|
+
!loadedLargeFiles.has(selectedFileIndex) ? (_jsxs("div", { className: "flex flex-1 flex-col items-center justify-center gap-3 p-6 text-center text-sm text-muted-foreground", children: [_jsxs("p", { className: "max-w-xs", children: ["This file diff is large (", Math.round(selectedFile.unified_diff.length / 1024), " KB). Loading it may slow down the browser."] }), _jsx(Button, { variant: "outline", size: "sm", onClick: () => setLoadedLargeFiles((prev) => new Set([...prev, selectedFileIndex])), children: "Load diff" })] })) : (_jsxs("div", { className: "flex min-h-0 min-w-0 flex-1 overflow-hidden", children: [_jsxs("div", { className: "flex min-h-0 min-w-0 flex-1 flex-col border-r", children: [_jsx("div", { className: "flex flex-shrink-0 items-center gap-2 border-b bg-muted/50 px-4 py-2 text-sm font-medium", children: tierContext ? (_jsx(TierBadge, { tier: tierContext.leftTier, ownerType: tierContext.leftOwnerType })) : (leftLabel) }), _jsx("div", { ref: leftScrollRef, className: "min-h-0 min-w-0 flex-1 overflow-auto", tabIndex: 0, "aria-label": "Left diff panel \u2014 scroll to see more", children: parsedDiff.map((line, idx) => {
|
|
397
|
+
if (line.type === 'addition') {
|
|
398
|
+
return _jsx(SpacerLine, {}, idx);
|
|
399
|
+
}
|
|
400
|
+
if (line.type === 'header') {
|
|
401
|
+
return (_jsx(DiffLine, { content: line.content, type: "header", side: "left" }, idx));
|
|
402
|
+
}
|
|
403
|
+
return (_jsx(DiffLine, { content: line.content, type: line.type, lineNumber: line.leftLineNumber, side: "left" }, idx));
|
|
404
|
+
}) })] }), _jsxs("div", { className: "flex min-h-0 min-w-0 flex-1 flex-col", children: [_jsx("div", { className: "flex flex-shrink-0 items-center gap-2 border-b bg-muted/50 px-4 py-2 text-sm font-medium", children: tierContext ? (_jsx(TierBadge, { tier: tierContext.rightTier, ownerType: tierContext.rightOwnerType })) : (rightLabel) }), _jsx("div", { ref: rightScrollRef, className: "min-h-0 min-w-0 flex-1 overflow-auto", tabIndex: 0, "aria-label": "Right diff panel \u2014 scroll to see more", children: parsedDiff.map((line, idx) => {
|
|
405
|
+
if (line.type === 'deletion') {
|
|
406
|
+
return _jsx(SpacerLine, {}, idx);
|
|
407
|
+
}
|
|
408
|
+
if (line.type === 'header') {
|
|
409
|
+
return (_jsx(DiffLine, { content: line.content, type: "header", side: "right" }, idx));
|
|
410
|
+
}
|
|
411
|
+
return (_jsx(DiffLine, { content: line.content, type: line.type, lineNumber: line.rightLineNumber, side: "right" }, idx));
|
|
412
|
+
}) })] })] }))) : selectedFile?.status === 'added' ? (_jsxs("div", { className: "flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden", children: [_jsxs("div", { className: "flex-shrink-0 bg-green-500/10 px-4 py-2 text-sm text-green-700 dark:text-green-400", children: ["This file was added in ", rightLabel] }), _jsx("div", { className: "min-h-0 min-w-0 flex-1 overflow-y-auto p-4 text-sm text-muted-foreground", children: "Content preview not available for added files." })] })) : selectedFile?.status === 'deleted' ? (_jsxs("div", { className: "flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden", children: [_jsxs("div", { className: "flex-shrink-0 bg-red-500/10 px-4 py-2 text-sm text-red-700 dark:text-red-400", children: ["This file was deleted from ", leftLabel] }), _jsx("div", { className: "min-h-0 min-w-0 flex-1 overflow-y-auto p-4 text-sm text-muted-foreground", children: "Content preview not available for deleted files." })] })) : (_jsx("div", { className: "flex flex-1 items-center justify-center text-muted-foreground", children: _jsx("p", { children: "No changes in this file" }) }))] })] }), showResolutionActions && (_jsxs("div", { className: "flex flex-shrink-0 items-center justify-end gap-2 border-t bg-muted/20 p-4", children: [previewMode && (_jsx("span", { className: "mr-auto text-sm text-muted-foreground", children: "Preview mode - select which version to keep" })), _jsxs(Button, { variant: "outline", onClick: () => onResolve?.('keep_local'), disabled: isResolving, className: "hover:bg-accent", title: `Keep the ${localLabel || 'local (project)'} version`, children: ["Keep ", localLabel || 'Local (Project)'] }), _jsxs(Button, { variant: "outline", onClick: () => onResolve?.('keep_remote'), disabled: isResolving, className: "hover:bg-accent", title: `Keep the ${remoteLabel || 'remote (collection)'} version`, children: ["Keep ", remoteLabel || 'Remote (Collection)'] }), _jsx(Button, { variant: "secondary", onClick: () => onResolve?.('merge'), disabled: isResolving, className: "hover:bg-secondary/80", title: "Manually merge changes (coming soon)", children: "Merge" }), isResolving && _jsx(Loader2, { className: "ml-2 h-4 w-4 animate-spin text-muted-foreground" })] }))] }));
|
|
413
|
+
}
|
|
414
|
+
//# sourceMappingURL=DiffViewer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiffViewer.js","sourceRoot":"","sources":["../../src/diff/DiffViewer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @skillmeat/content-viewer — Diff Types
|
|
3
|
+
*
|
|
4
|
+
* Generic diff types used by DiffViewer. These mirror the SkillMeat API
|
|
5
|
+
* FileDiff model but contain no domain-specific logic.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Diff information for a single file within an artifact comparison.
|
|
9
|
+
*/
|
|
10
|
+
export interface FileDiff {
|
|
11
|
+
/**
|
|
12
|
+
* Relative path to file within artifact
|
|
13
|
+
*/
|
|
14
|
+
file_path: string;
|
|
15
|
+
/**
|
|
16
|
+
* Change status of file
|
|
17
|
+
*/
|
|
18
|
+
status: 'added' | 'modified' | 'deleted' | 'unchanged';
|
|
19
|
+
/**
|
|
20
|
+
* SHA-256 hash for the left/before version (e.g. collection)
|
|
21
|
+
*/
|
|
22
|
+
collection_hash?: string | null;
|
|
23
|
+
/**
|
|
24
|
+
* SHA-256 hash for the right/after version (e.g. project)
|
|
25
|
+
*/
|
|
26
|
+
project_hash?: string | null;
|
|
27
|
+
/**
|
|
28
|
+
* Unified diff content (for modified files)
|
|
29
|
+
*/
|
|
30
|
+
unified_diff?: string | null;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/diff/diff.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;IACvD;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/diff/diff.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/diff/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC9D,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACjF,YAAY,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/diff/index.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface FilePreviewPaneProps {
|
|
2
|
+
filePath: string | null;
|
|
3
|
+
content: string | null;
|
|
4
|
+
tier: 'source' | 'collection' | 'project';
|
|
5
|
+
isLoading: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* FilePreviewPane - Displays file content with appropriate rendering
|
|
9
|
+
*
|
|
10
|
+
* Features:
|
|
11
|
+
* - Markdown rendering with basic HTML conversion
|
|
12
|
+
* - Syntax-highlighted code display
|
|
13
|
+
* - Plain text display for other files
|
|
14
|
+
* - Loading skeleton state
|
|
15
|
+
* - Empty state when no file selected
|
|
16
|
+
* - Error state for unavailable content
|
|
17
|
+
* - Tier badge showing which version is displayed
|
|
18
|
+
* - Dark mode support
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```tsx
|
|
22
|
+
* <FilePreviewPane
|
|
23
|
+
* filePath="README.md"
|
|
24
|
+
* content={fileContent}
|
|
25
|
+
* tier="collection"
|
|
26
|
+
* isLoading={false}
|
|
27
|
+
* />
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare function FilePreviewPane({ filePath, content, tier, isLoading }: FilePreviewPaneProps): import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
//# sourceMappingURL=FilePreviewPane.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilePreviewPane.d.ts","sourceRoot":"","sources":["../../src/display/FilePreviewPane.tsx"],"names":[],"mappings":"AAYA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,QAAQ,GAAG,YAAY,GAAG,SAAS,CAAC;IAC1C,SAAS,EAAE,OAAO,CAAC;CACpB;AA8LD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,oBAAoB,2CAgD3F"}
|