@schemavaults/ui 0.66.0 → 0.68.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ui/datatable/datatable.d.ts +33 -3
- package/dist/components/ui/datatable/datatable.js +42 -6
- package/dist/components/ui/datatable/datatable.js.map +1 -1
- package/dist/components/ui/diff-viewer/compute-line-diff.d.ts +37 -0
- package/dist/components/ui/diff-viewer/compute-line-diff.js +124 -0
- package/dist/components/ui/diff-viewer/compute-line-diff.js.map +1 -0
- package/dist/components/ui/diff-viewer/diff-viewer-variants.d.ts +6 -0
- package/dist/components/ui/diff-viewer/diff-viewer-variants.js +8 -0
- package/dist/components/ui/diff-viewer/diff-viewer-variants.js.map +1 -0
- package/dist/components/ui/diff-viewer/diff-viewer.d.ts +38 -0
- package/dist/components/ui/diff-viewer/diff-viewer.js +121 -0
- package/dist/components/ui/diff-viewer/diff-viewer.js.map +1 -0
- package/dist/components/ui/diff-viewer/index.d.ts +5 -0
- package/dist/components/ui/diff-viewer/index.js +3 -0
- package/dist/components/ui/diff-viewer/index.js.map +1 -0
- package/dist/components/ui/index.d.ts +2 -0
- package/dist/components/ui/index.js +1 -0
- package/dist/components/ui/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { type ColumnDef, type VisibilityState, type Row, type CellContext, type Cell } from "@tanstack/react-table";
|
|
1
|
+
import { type ColumnDef, type VisibilityState, type Row, type CellContext, type Cell, type RowSelectionState } from "@tanstack/react-table";
|
|
2
2
|
import { type ReactElement, type FC } from "react";
|
|
3
|
-
export type { ColumnDef, ColumnDef as DatatableColumnDef, Row as DatatableRow, CellContext as DatatableCellContext, Cell as DatatableCell, };
|
|
3
|
+
export type { ColumnDef, ColumnDef as DatatableColumnDef, Row as DatatableRow, CellContext as DatatableCellContext, Cell as DatatableCell, RowSelectionState, RowSelectionState as DatatableRowSelectionState, };
|
|
4
4
|
export interface DatatableProps<TData extends object, TValue = unknown> {
|
|
5
5
|
data: TData[];
|
|
6
6
|
columns: ColumnDef<TData, TValue>[];
|
|
@@ -27,6 +27,36 @@ export interface DatatableProps<TData extends object, TValue = unknown> {
|
|
|
27
27
|
id: string;
|
|
28
28
|
desc: boolean;
|
|
29
29
|
};
|
|
30
|
+
/**
|
|
31
|
+
* Renders a leading checkbox column (with a select-all checkbox in the header)
|
|
32
|
+
* so rows can be selected. Selection state is reflected by `row.getIsSelected()`
|
|
33
|
+
* and highlights the row. Defaults to false.
|
|
34
|
+
*
|
|
35
|
+
* Selection can be observed/controlled regardless of this flag via
|
|
36
|
+
* `selected` / `onSelectedChange`; this prop only toggles the built-in
|
|
37
|
+
* checkbox UI. Provide your own column if you want custom selection controls.
|
|
38
|
+
*/
|
|
39
|
+
enableRowSelection?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Controlled row-selection state, keyed by row id (see `getRowId`). When
|
|
42
|
+
* provided, the component becomes controlled and renders exactly this
|
|
43
|
+
* selection. Pair with `onSelectedChange` to update it. Omit for uncontrolled
|
|
44
|
+
* behavior with internally-managed selection.
|
|
45
|
+
*/
|
|
46
|
+
selected?: RowSelectionState;
|
|
47
|
+
/**
|
|
48
|
+
* Called with the next row-selection state whenever the selection changes
|
|
49
|
+
* (e.g. a checkbox is toggled). Receives a fully-resolved `RowSelectionState`
|
|
50
|
+
* — a `Record<rowId, boolean>` — so a `useState` setter can be passed directly.
|
|
51
|
+
*/
|
|
52
|
+
onSelectedChange?: (selected: RowSelectionState) => void;
|
|
53
|
+
/**
|
|
54
|
+
* Resolves the unique id for a row, which becomes the key used in the
|
|
55
|
+
* selection state. Defaults to the row index. Provide this (e.g.
|
|
56
|
+
* `(user) => user.id`) so controlled selection keys map to your own ids
|
|
57
|
+
* and stay stable across sorting, filtering, and pagination.
|
|
58
|
+
*/
|
|
59
|
+
getRowId?: (originalRow: TData, index: number) => string;
|
|
30
60
|
}
|
|
31
|
-
export declare function Datatable<TData extends object, TValue = unknown>({ data, columns, initialVisibleColumns, datatypeLabel, searchColumn, enableGlobalFilter, HeaderButtons, defaultPageSize, pageSizeOptions, sortableColumns, defaultSort, }: DatatableProps<TData, TValue>): ReactElement;
|
|
61
|
+
export declare function Datatable<TData extends object, TValue = unknown>({ data, columns, initialVisibleColumns, datatypeLabel, searchColumn, enableGlobalFilter, HeaderButtons, defaultPageSize, pageSizeOptions, sortableColumns, defaultSort, enableRowSelection, selected, onSelectedChange, getRowId, }: DatatableProps<TData, TValue>): ReactElement;
|
|
32
62
|
export default Datatable;
|
|
@@ -3,20 +3,38 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import { flexRender, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable, } from "@tanstack/react-table";
|
|
4
4
|
import { ArrowDown, ArrowUp, ArrowUpDown, ChevronDown } from "lucide-react";
|
|
5
5
|
import { Button } from "../../ui/button";
|
|
6
|
+
import { Checkbox } from "../../ui/checkbox";
|
|
6
7
|
import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuTrigger, } from "../../ui/dropdown-menu";
|
|
7
8
|
import { Input } from "../../ui/input";
|
|
8
9
|
import { PaginationControls } from "../../ui/pagination";
|
|
9
10
|
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "../../ui/select";
|
|
10
11
|
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "../../ui/table";
|
|
11
|
-
import { useMemo, useState } from "react";
|
|
12
|
+
import { useCallback, useMemo, useState, } from "react";
|
|
12
13
|
/** Default page size options shown in the rows-per-page selector. */
|
|
13
14
|
const DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 50, 100];
|
|
14
|
-
|
|
15
|
+
/** Column id for the built-in checkbox selection column. */
|
|
16
|
+
const SELECTION_COLUMN_ID = "__select__";
|
|
17
|
+
export function Datatable({ data, columns, initialVisibleColumns, datatypeLabel, searchColumn, enableGlobalFilter = false, HeaderButtons, defaultPageSize = 10, pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS, sortableColumns, defaultSort, enableRowSelection = false, selected, onSelectedChange, getRowId, }) {
|
|
15
18
|
const [sorting, setSorting] = useState(defaultSort ? [defaultSort] : []);
|
|
16
19
|
const [columnFilters, setColumnFilters] = useState([]);
|
|
17
20
|
const [globalFilter, setGlobalFilter] = useState("");
|
|
18
21
|
const [columnVisibility, setColumnVisibility] = useState(initialVisibleColumns);
|
|
19
|
-
|
|
22
|
+
// Row selection supports both controlled (`selected` provided) and
|
|
23
|
+
// uncontrolled (internal state) usage. When controlled, `selected` is the
|
|
24
|
+
// source of truth; otherwise we manage it locally. Either way,
|
|
25
|
+
// `onSelectedChange` is notified with the fully-resolved next selection.
|
|
26
|
+
const [internalRowSelection, setInternalRowSelection] = useState({});
|
|
27
|
+
const isSelectionControlled = selected !== undefined;
|
|
28
|
+
const rowSelection = selected ?? internalRowSelection;
|
|
29
|
+
const handleRowSelectionChange = useCallback((updaterOrValue) => {
|
|
30
|
+
const nextSelection = typeof updaterOrValue === "function"
|
|
31
|
+
? updaterOrValue(rowSelection)
|
|
32
|
+
: updaterOrValue;
|
|
33
|
+
if (!isSelectionControlled) {
|
|
34
|
+
setInternalRowSelection(nextSelection);
|
|
35
|
+
}
|
|
36
|
+
onSelectedChange?.(nextSelection);
|
|
37
|
+
}, [isSelectionControlled, onSelectedChange, rowSelection]);
|
|
20
38
|
// Determine search mode
|
|
21
39
|
const tanstackGlobalSearchEnabled = enableGlobalFilter || Array.isArray(searchColumn);
|
|
22
40
|
const searchableColumns = Array.isArray(searchColumn)
|
|
@@ -45,9 +63,27 @@ export function Datatable({ data, columns, initialVisibleColumns, datatypeLabel,
|
|
|
45
63
|
enableSorting: colId ? sortableSet.has(colId) : false,
|
|
46
64
|
};
|
|
47
65
|
}), [columns, sortableSet]);
|
|
66
|
+
// Optionally prepend a checkbox column for row selection. The header holds a
|
|
67
|
+
// select-all checkbox (indeterminate when only some page rows are selected)
|
|
68
|
+
// and each cell toggles that row.
|
|
69
|
+
const tableColumns = useMemo(() => {
|
|
70
|
+
if (!enableRowSelection) {
|
|
71
|
+
return columnsWithSorting;
|
|
72
|
+
}
|
|
73
|
+
const selectionColumn = {
|
|
74
|
+
id: SELECTION_COLUMN_ID,
|
|
75
|
+
header: ({ table }) => (_jsx(Checkbox, { checked: table.getIsAllPageRowsSelected() ||
|
|
76
|
+
(table.getIsSomePageRowsSelected() && "indeterminate"), onCheckedChange: (value) => table.toggleAllPageRowsSelected(!!value), "aria-label": "Select all rows on this page" })),
|
|
77
|
+
cell: ({ row }) => (_jsx(Checkbox, { checked: row.getIsSelected(), disabled: !row.getCanSelect(), onCheckedChange: (value) => row.toggleSelected(!!value), "aria-label": "Select row" })),
|
|
78
|
+
enableSorting: false,
|
|
79
|
+
enableHiding: false,
|
|
80
|
+
};
|
|
81
|
+
return [selectionColumn, ...columnsWithSorting];
|
|
82
|
+
}, [enableRowSelection, columnsWithSorting]);
|
|
48
83
|
const table = useReactTable({
|
|
49
84
|
data,
|
|
50
|
-
columns:
|
|
85
|
+
columns: tableColumns,
|
|
86
|
+
...(getRowId && { getRowId }),
|
|
51
87
|
initialState: {
|
|
52
88
|
pagination: {
|
|
53
89
|
pageSize: defaultPageSize,
|
|
@@ -60,7 +96,7 @@ export function Datatable({ data, columns, initialVisibleColumns, datatypeLabel,
|
|
|
60
96
|
getSortedRowModel: getSortedRowModel(),
|
|
61
97
|
getFilteredRowModel: getFilteredRowModel(),
|
|
62
98
|
onColumnVisibilityChange: setColumnVisibility,
|
|
63
|
-
onRowSelectionChange:
|
|
99
|
+
onRowSelectionChange: handleRowSelectionChange,
|
|
64
100
|
...(tanstackGlobalSearchEnabled && {
|
|
65
101
|
globalFilterFn: searchableColumns
|
|
66
102
|
? multiColumnFilterFn
|
|
@@ -98,7 +134,7 @@ export function Datatable({ data, columns, initialVisibleColumns, datatypeLabel,
|
|
|
98
134
|
return (_jsx(DropdownMenuCheckboxItem, { className: "capitalize cursor-pointer", checked: column.getIsVisible(), onCheckedChange: (value) => column.toggleVisibility(!!value), children: column["id"].toUpperCase() }, column.id));
|
|
99
135
|
}) })] })] })] }), _jsx("div", { className: "rounded-md border w-full", children: _jsxs(Table, { children: [_jsx(TableHeader, { children: table.getHeaderGroups().map((headerGroup) => (_jsx(TableRow, { children: headerGroup.headers.map((header) => {
|
|
100
136
|
return (_jsx(TableHead, { children: header.isPlaceholder ? null : header.column.getCanSort() ? (_jsxs(Button, { variant: "ghost", className: "-ml-4", onClick: () => header.column.toggleSorting(header.column.getIsSorted() === "asc"), children: [flexRender(header.column.columnDef.header, header.getContext()), header.column.getIsSorted() === "asc" ? (_jsx(ArrowUp, { className: "ml-2 h-4 w-4" })) : header.column.getIsSorted() === "desc" ? (_jsx(ArrowDown, { className: "ml-2 h-4 w-4" })) : (_jsx(ArrowUpDown, { className: "ml-2 h-4 w-4" }))] })) : (flexRender(header.column.columnDef.header, header.getContext())) }, header.id));
|
|
101
|
-
}) }, headerGroup.id))) }), _jsx(TableBody, { children: table.getRowModel().rows?.length ? (table.getRowModel().rows.map((row) => (_jsx(TableRow, { "data-state": row.getIsSelected() && "selected", children: row.getVisibleCells().map((cell) => (_jsx(TableCell, { children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id))) }, row.id)))) : (_jsx(TableRow, { children: _jsx(TableCell, { colSpan:
|
|
137
|
+
}) }, headerGroup.id))) }), _jsx(TableBody, { children: table.getRowModel().rows?.length ? (table.getRowModel().rows.map((row) => (_jsx(TableRow, { "data-state": row.getIsSelected() && "selected", children: row.getVisibleCells().map((cell) => (_jsx(TableCell, { children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id))) }, row.id)))) : (_jsx(TableRow, { children: _jsx(TableCell, { colSpan: table.getVisibleLeafColumns().length, className: "h-24 text-center", children: "No results." }) })) })] }) }), _jsxs("div", { className: "flex flex-col sm:flex-row items-center justify-between gap-4 py-4 w-full", children: [(enableRowSelection || isSelectionControlled) && (_jsxs("div", { className: "text-sm text-muted-foreground", children: [table.getFilteredSelectedRowModel().rows.length, " of", " ", table.getFilteredRowModel().rows.length, " row(s) selected."] })), _jsxs("div", { className: "flex flex-col sm:flex-row items-center gap-4 sm:ml-auto", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-sm text-muted-foreground whitespace-nowrap", children: "Rows per page" }), _jsxs(Select, { value: String(table.getState().pagination.pageSize), onValueChange: (value) => {
|
|
102
138
|
table.setPageSize(Number(value));
|
|
103
139
|
}, children: [_jsx(SelectTrigger, { size: "sm", className: "w-[70px]", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: pageSizeOptions.map((size) => (_jsx(SelectItem, { value: String(size), children: size }, size))) })] })] }), _jsx(PaginationControls, { className: "mx-0 w-auto justify-end", size: "sm", variant: "outline", page: table.getState().pagination.pageIndex + 1, totalPages: Math.max(1, table.getPageCount()), onPageChange: (nextPage) => {
|
|
104
140
|
table.setPageIndex(nextPage - 1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datatable.js","sourceRoot":"","sources":["../../../../src/components/ui/datatable/datatable.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EASL,UAAU,EACV,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,
|
|
1
|
+
{"version":3,"file":"datatable.js","sourceRoot":"","sources":["../../../../src/components/ui/datatable/datatable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export declare const diffOpTypes: readonly ["equal", "insert", "delete"];
|
|
2
|
+
export type DiffOpType = (typeof diffOpTypes)[number];
|
|
3
|
+
export interface DiffOp {
|
|
4
|
+
type: DiffOpType;
|
|
5
|
+
/** The line text. For "equal" this is identical on both sides. */
|
|
6
|
+
text: string;
|
|
7
|
+
/** 1-based line number in the old source (undefined for inserts). */
|
|
8
|
+
oldLineNumber?: number;
|
|
9
|
+
/** 1-based line number in the new source (undefined for deletes). */
|
|
10
|
+
newLineNumber?: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Compute a line-by-line diff between two strings using the classic
|
|
14
|
+
* longest-common-subsequence dynamic-programming algorithm. Time and space
|
|
15
|
+
* complexity are O(m * n), which is acceptable for typical document-sized
|
|
16
|
+
* inputs (up to a few thousand lines).
|
|
17
|
+
*/
|
|
18
|
+
export declare function computeLineDiff(oldText: string, newText: string): DiffOp[];
|
|
19
|
+
export interface DiffStats {
|
|
20
|
+
additions: number;
|
|
21
|
+
deletions: number;
|
|
22
|
+
unchanged: number;
|
|
23
|
+
}
|
|
24
|
+
export declare function summarizeDiff(ops: readonly DiffOp[]): DiffStats;
|
|
25
|
+
export interface SplitDiffRow {
|
|
26
|
+
/** The op for the left (old) side, if any. */
|
|
27
|
+
left?: DiffOp;
|
|
28
|
+
/** The op for the right (new) side, if any. */
|
|
29
|
+
right?: DiffOp;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Convert a flat sequence of diff ops into rows suitable for side-by-side
|
|
33
|
+
* display. Contiguous runs of delete/insert ops are zipped together so that
|
|
34
|
+
* a deleted line lines up horizontally with the corresponding inserted line
|
|
35
|
+
* when possible.
|
|
36
|
+
*/
|
|
37
|
+
export declare function buildSplitRows(ops: readonly DiffOp[]): SplitDiffRow[];
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
export const diffOpTypes = ["equal", "insert", "delete"];
|
|
2
|
+
/**
|
|
3
|
+
* Compute a line-by-line diff between two strings using the classic
|
|
4
|
+
* longest-common-subsequence dynamic-programming algorithm. Time and space
|
|
5
|
+
* complexity are O(m * n), which is acceptable for typical document-sized
|
|
6
|
+
* inputs (up to a few thousand lines).
|
|
7
|
+
*/
|
|
8
|
+
export function computeLineDiff(oldText, newText) {
|
|
9
|
+
const oldLines = oldText.split("\n");
|
|
10
|
+
const newLines = newText.split("\n");
|
|
11
|
+
const m = oldLines.length;
|
|
12
|
+
const n = newLines.length;
|
|
13
|
+
const dp = new Uint32Array((m + 1) * (n + 1));
|
|
14
|
+
const stride = n + 1;
|
|
15
|
+
for (let i = 1; i <= m; i++) {
|
|
16
|
+
for (let j = 1; j <= n; j++) {
|
|
17
|
+
if (oldLines[i - 1] === newLines[j - 1]) {
|
|
18
|
+
dp[i * stride + j] = dp[(i - 1) * stride + (j - 1)] + 1;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
const up = dp[(i - 1) * stride + j];
|
|
22
|
+
const left = dp[i * stride + (j - 1)];
|
|
23
|
+
dp[i * stride + j] = up >= left ? up : left;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const ops = [];
|
|
28
|
+
let i = m;
|
|
29
|
+
let j = n;
|
|
30
|
+
while (i > 0 && j > 0) {
|
|
31
|
+
if (oldLines[i - 1] === newLines[j - 1]) {
|
|
32
|
+
ops.push({
|
|
33
|
+
type: "equal",
|
|
34
|
+
text: oldLines[i - 1],
|
|
35
|
+
oldLineNumber: i,
|
|
36
|
+
newLineNumber: j,
|
|
37
|
+
});
|
|
38
|
+
i--;
|
|
39
|
+
j--;
|
|
40
|
+
}
|
|
41
|
+
else if (dp[(i - 1) * stride + j] >= dp[i * stride + (j - 1)]) {
|
|
42
|
+
ops.push({
|
|
43
|
+
type: "delete",
|
|
44
|
+
text: oldLines[i - 1],
|
|
45
|
+
oldLineNumber: i,
|
|
46
|
+
});
|
|
47
|
+
i--;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
ops.push({
|
|
51
|
+
type: "insert",
|
|
52
|
+
text: newLines[j - 1],
|
|
53
|
+
newLineNumber: j,
|
|
54
|
+
});
|
|
55
|
+
j--;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
while (i > 0) {
|
|
59
|
+
ops.push({
|
|
60
|
+
type: "delete",
|
|
61
|
+
text: oldLines[i - 1],
|
|
62
|
+
oldLineNumber: i,
|
|
63
|
+
});
|
|
64
|
+
i--;
|
|
65
|
+
}
|
|
66
|
+
while (j > 0) {
|
|
67
|
+
ops.push({
|
|
68
|
+
type: "insert",
|
|
69
|
+
text: newLines[j - 1],
|
|
70
|
+
newLineNumber: j,
|
|
71
|
+
});
|
|
72
|
+
j--;
|
|
73
|
+
}
|
|
74
|
+
ops.reverse();
|
|
75
|
+
return ops;
|
|
76
|
+
}
|
|
77
|
+
export function summarizeDiff(ops) {
|
|
78
|
+
let additions = 0;
|
|
79
|
+
let deletions = 0;
|
|
80
|
+
let unchanged = 0;
|
|
81
|
+
for (const op of ops) {
|
|
82
|
+
if (op.type === "insert")
|
|
83
|
+
additions++;
|
|
84
|
+
else if (op.type === "delete")
|
|
85
|
+
deletions++;
|
|
86
|
+
else
|
|
87
|
+
unchanged++;
|
|
88
|
+
}
|
|
89
|
+
return { additions, deletions, unchanged };
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Convert a flat sequence of diff ops into rows suitable for side-by-side
|
|
93
|
+
* display. Contiguous runs of delete/insert ops are zipped together so that
|
|
94
|
+
* a deleted line lines up horizontally with the corresponding inserted line
|
|
95
|
+
* when possible.
|
|
96
|
+
*/
|
|
97
|
+
export function buildSplitRows(ops) {
|
|
98
|
+
const rows = [];
|
|
99
|
+
let cursor = 0;
|
|
100
|
+
while (cursor < ops.length) {
|
|
101
|
+
const op = ops[cursor];
|
|
102
|
+
if (op.type === "equal") {
|
|
103
|
+
rows.push({ left: op, right: op });
|
|
104
|
+
cursor++;
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
const deletes = [];
|
|
108
|
+
const inserts = [];
|
|
109
|
+
while (cursor < ops.length && ops[cursor].type !== "equal") {
|
|
110
|
+
const next = ops[cursor];
|
|
111
|
+
if (next.type === "delete")
|
|
112
|
+
deletes.push(next);
|
|
113
|
+
else
|
|
114
|
+
inserts.push(next);
|
|
115
|
+
cursor++;
|
|
116
|
+
}
|
|
117
|
+
const pairCount = Math.max(deletes.length, inserts.length);
|
|
118
|
+
for (let k = 0; k < pairCount; k++) {
|
|
119
|
+
rows.push({ left: deletes[k], right: inserts[k] });
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return rows;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=compute-line-diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compute-line-diff.js","sourceRoot":"","sources":["../../../../src/components/ui/diff-viewer/compute-line-diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const diffViewerVariantIds: readonly ["default", "subtle", "contrast"];
|
|
2
|
+
export type DiffViewerVariant = (typeof diffViewerVariantIds)[number];
|
|
3
|
+
export declare const diffViewerSizeIds: readonly ["sm", "md", "lg"];
|
|
4
|
+
export type DiffViewerSize = (typeof diffViewerSizeIds)[number];
|
|
5
|
+
export declare const diffViewerModeIds: readonly ["unified", "split"];
|
|
6
|
+
export type DiffViewerMode = (typeof diffViewerModeIds)[number];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff-viewer-variants.js","sourceRoot":"","sources":["../../../../src/components/ui/diff-viewer/diff-viewer-variants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,SAAS;IACT,QAAQ;IACR,UAAU;CAC0B,CAAC;AAGvC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAsC,CAAC;AAGzF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,OAAO,CAAsC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type VariantProps } from "class-variance-authority";
|
|
2
|
+
import { type HTMLAttributes, type ReactElement, type ReactNode, type Ref } from "react";
|
|
3
|
+
import { diffViewerModeIds, diffViewerSizeIds, diffViewerVariantIds, type DiffViewerMode, type DiffViewerSize, type DiffViewerVariant } from "./diff-viewer-variants";
|
|
4
|
+
declare const diffViewerVariants: (props?: ({
|
|
5
|
+
variant?: "default" | "subtle" | "contrast" | null | undefined;
|
|
6
|
+
size?: "sm" | "lg" | "md" | null | undefined;
|
|
7
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
8
|
+
export interface DiffViewerProps extends Omit<HTMLAttributes<HTMLDivElement>, "title">, VariantProps<typeof diffViewerVariants> {
|
|
9
|
+
/** The original text (the "before" state). */
|
|
10
|
+
oldValue: string;
|
|
11
|
+
/** The updated text (the "after" state). */
|
|
12
|
+
newValue: string;
|
|
13
|
+
/** Display mode. `unified` (default) shows one column; `split` shows two. */
|
|
14
|
+
mode?: DiffViewerMode;
|
|
15
|
+
/** Optional title rendered in the header (e.g. a file path). */
|
|
16
|
+
title?: ReactNode;
|
|
17
|
+
/** Label shown above the old/left column. Defaults to "Before". */
|
|
18
|
+
oldLabel?: ReactNode;
|
|
19
|
+
/** Label shown above the new/right column. Defaults to "After". */
|
|
20
|
+
newLabel?: ReactNode;
|
|
21
|
+
/** When true, displays line numbers in the gutter. Defaults to true. */
|
|
22
|
+
showLineNumbers?: boolean;
|
|
23
|
+
/** When true, shows additions/deletions counts in the header. Defaults to true. */
|
|
24
|
+
showStats?: boolean;
|
|
25
|
+
/** When true, long lines wrap rather than scroll horizontally. Defaults to false. */
|
|
26
|
+
wrap?: boolean;
|
|
27
|
+
/** Optional max-height applied to the scroll container, e.g. "20rem". */
|
|
28
|
+
maxHeight?: string;
|
|
29
|
+
/** Optional ref to the outer wrapper element. */
|
|
30
|
+
ref?: Ref<HTMLDivElement>;
|
|
31
|
+
}
|
|
32
|
+
declare function DiffViewer({ oldValue, newValue, mode, title, oldLabel, newLabel, showLineNumbers, showStats, wrap, maxHeight, variant, size, className, ref, ...props }: DiffViewerProps): ReactElement;
|
|
33
|
+
declare namespace DiffViewer {
|
|
34
|
+
var displayName: string;
|
|
35
|
+
}
|
|
36
|
+
export { DiffViewer, diffViewerVariants, diffViewerVariantIds, diffViewerSizeIds, diffViewerModeIds, };
|
|
37
|
+
export type { DiffViewerVariant, DiffViewerSize, DiffViewerMode };
|
|
38
|
+
export default DiffViewer;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { cva } from "class-variance-authority";
|
|
4
|
+
import { useMemo, } from "react";
|
|
5
|
+
import { cn } from "../../../lib/utils";
|
|
6
|
+
import { buildSplitRows, computeLineDiff, summarizeDiff, } from "./compute-line-diff";
|
|
7
|
+
import { diffViewerModeIds, diffViewerSizeIds, diffViewerVariantIds, } from "./diff-viewer-variants";
|
|
8
|
+
const diffViewerVariants = cva("relative overflow-hidden rounded-md border font-mono", {
|
|
9
|
+
variants: {
|
|
10
|
+
variant: {
|
|
11
|
+
default: "border-border bg-card text-foreground",
|
|
12
|
+
subtle: "border-transparent bg-muted/60 text-foreground",
|
|
13
|
+
contrast: "border-foreground/10 bg-foreground/[0.03] text-foreground",
|
|
14
|
+
},
|
|
15
|
+
size: {
|
|
16
|
+
sm: "text-xs",
|
|
17
|
+
md: "text-sm",
|
|
18
|
+
lg: "text-base",
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
defaultVariants: {
|
|
22
|
+
variant: "default",
|
|
23
|
+
size: "md",
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
const diffViewerHeaderVariants = cva("flex flex-wrap items-center justify-between gap-2 border-b px-3 py-2", {
|
|
27
|
+
variants: {
|
|
28
|
+
variant: {
|
|
29
|
+
default: "border-border/60 bg-background/40",
|
|
30
|
+
subtle: "border-border/40 bg-transparent",
|
|
31
|
+
contrast: "border-foreground/10 bg-foreground/[0.04]",
|
|
32
|
+
},
|
|
33
|
+
size: {
|
|
34
|
+
sm: "text-[11px]",
|
|
35
|
+
md: "text-xs",
|
|
36
|
+
lg: "text-sm",
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
defaultVariants: {
|
|
40
|
+
variant: "default",
|
|
41
|
+
size: "md",
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
const diffViewerBodyPaddingVariants = cva("leading-6", {
|
|
45
|
+
variants: {
|
|
46
|
+
size: {
|
|
47
|
+
sm: "leading-5",
|
|
48
|
+
md: "leading-6",
|
|
49
|
+
lg: "leading-7",
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
defaultVariants: { size: "md" },
|
|
53
|
+
});
|
|
54
|
+
const lineNumberClasses = "select-none px-2 py-0 text-right tabular-nums text-muted-foreground/70";
|
|
55
|
+
const equalRowClasses = "bg-transparent";
|
|
56
|
+
const insertRowClasses = "bg-emerald-500/10 text-emerald-700 dark:bg-emerald-400/10 dark:text-emerald-300";
|
|
57
|
+
const deleteRowClasses = "bg-destructive/10 text-destructive dark:text-red-300";
|
|
58
|
+
const emptyRowClasses = "bg-muted/40";
|
|
59
|
+
const markerClasses = "select-none px-2 text-center font-semibold";
|
|
60
|
+
function DiffViewer({ oldValue, newValue, mode = "unified", title, oldLabel = "Before", newLabel = "After", showLineNumbers = true, showStats = true, wrap = false, maxHeight, variant, size, className, ref, ...props }) {
|
|
61
|
+
const ops = useMemo(() => computeLineDiff(oldValue, newValue), [oldValue, newValue]);
|
|
62
|
+
const stats = useMemo(() => summarizeDiff(ops), [ops]);
|
|
63
|
+
const splitRows = useMemo(() => (mode === "split" ? buildSplitRows(ops) : []), [ops, mode]);
|
|
64
|
+
const resolvedVariant = variant ?? "default";
|
|
65
|
+
const resolvedSize = size ?? "md";
|
|
66
|
+
return (_jsxs("div", { ref: ref, "data-slot": "diff-viewer", "data-mode": mode, "data-variant": resolvedVariant, className: cn(diffViewerVariants({ variant, size }), className), ...props, children: [_jsxs("div", { "data-slot": "diff-viewer-header", className: cn(diffViewerHeaderVariants({ variant, size })), children: [_jsx("div", { className: "flex min-w-0 items-center gap-2", children: title !== undefined && (_jsx("span", { "data-slot": "diff-viewer-title", className: "truncate font-sans font-medium opacity-90", children: title })) }), showStats && (_jsxs("div", { "data-slot": "diff-viewer-stats", className: "flex shrink-0 items-center gap-2 font-sans", "aria-label": `${stats.additions} additions, ${stats.deletions} deletions`, children: [_jsxs("span", { className: "inline-flex items-center gap-1 rounded bg-emerald-500/15 px-1.5 py-0.5 font-mono font-semibold text-emerald-700 dark:text-emerald-300", children: ["+", stats.additions] }), _jsxs("span", { className: "inline-flex items-center gap-1 rounded bg-destructive/15 px-1.5 py-0.5 font-mono font-semibold text-destructive dark:text-red-300", children: ["-", stats.deletions] })] }))] }), _jsx("div", { "data-slot": "diff-viewer-body", className: cn("overflow-auto", diffViewerBodyPaddingVariants({ size: resolvedSize })), style: maxHeight !== undefined ? { maxHeight } : undefined, children: mode === "split" ? (_jsx(SplitView, { rows: splitRows, showLineNumbers: showLineNumbers, wrap: wrap, oldLabel: oldLabel, newLabel: newLabel })) : (_jsx(UnifiedView, { ops: ops, showLineNumbers: showLineNumbers, wrap: wrap })) })] }));
|
|
67
|
+
}
|
|
68
|
+
DiffViewer.displayName = "DiffViewer";
|
|
69
|
+
function UnifiedView({ ops, showLineNumbers, wrap, }) {
|
|
70
|
+
const cellWhitespace = wrap
|
|
71
|
+
? "whitespace-pre-wrap break-words"
|
|
72
|
+
: "whitespace-pre";
|
|
73
|
+
const gridTemplate = showLineNumbers
|
|
74
|
+
? "grid-cols-[auto_auto_auto_1fr]"
|
|
75
|
+
: "grid-cols-[auto_1fr]";
|
|
76
|
+
return (_jsx("div", { role: "table", "aria-label": "Unified diff", "data-slot": "diff-viewer-unified", className: cn("grid min-w-full", gridTemplate), children: ops.map((op, idx) => {
|
|
77
|
+
const rowClasses = op.type === "insert"
|
|
78
|
+
? insertRowClasses
|
|
79
|
+
: op.type === "delete"
|
|
80
|
+
? deleteRowClasses
|
|
81
|
+
: equalRowClasses;
|
|
82
|
+
const marker = op.type === "insert" ? "+" : op.type === "delete" ? "-" : " ";
|
|
83
|
+
return (_jsxs("div", { role: "row", "data-op": op.type, className: cn("contents"), children: [showLineNumbers && (_jsx("span", { role: "cell", className: cn(lineNumberClasses, rowClasses), children: op.oldLineNumber ?? "" })), showLineNumbers && (_jsx("span", { role: "cell", className: cn(lineNumberClasses, rowClasses), children: op.newLineNumber ?? "" })), _jsx("span", { role: "cell", "aria-hidden": "true", className: cn(markerClasses, rowClasses), children: marker }), _jsx("span", { role: "cell", className: cn("pr-3", cellWhitespace, rowClasses), children: op.text.length === 0 ? "" : op.text })] }, idx));
|
|
84
|
+
}) }));
|
|
85
|
+
}
|
|
86
|
+
function SplitView({ rows, showLineNumbers, wrap, oldLabel, newLabel, }) {
|
|
87
|
+
const cellWhitespace = wrap
|
|
88
|
+
? "whitespace-pre-wrap break-words"
|
|
89
|
+
: "whitespace-pre";
|
|
90
|
+
const sidePattern = showLineNumbers ? "auto auto 1fr" : "auto 1fr";
|
|
91
|
+
const gridTemplateColumns = `${sidePattern} ${sidePattern}`;
|
|
92
|
+
const columnsPerSide = showLineNumbers ? 3 : 2;
|
|
93
|
+
return (_jsxs("div", { role: "table", "aria-label": "Side-by-side diff", "data-slot": "diff-viewer-split", className: cn("grid min-w-full"), style: { gridTemplateColumns }, children: [_jsx("div", { role: "columnheader", className: "border-b border-border/60 bg-muted/40 px-3 py-1 font-sans text-xs font-medium text-muted-foreground", style: { gridColumn: `span ${columnsPerSide}` }, children: oldLabel }), _jsx("div", { role: "columnheader", className: "border-b border-l border-border/60 bg-muted/40 px-3 py-1 font-sans text-xs font-medium text-muted-foreground", style: { gridColumn: `span ${columnsPerSide}` }, children: newLabel }), rows.map((row, idx) => {
|
|
94
|
+
const leftOp = row.left;
|
|
95
|
+
const rightOp = row.right;
|
|
96
|
+
const leftRowClasses = leftOp === undefined
|
|
97
|
+
? emptyRowClasses
|
|
98
|
+
: leftOp.type === "delete"
|
|
99
|
+
? deleteRowClasses
|
|
100
|
+
: equalRowClasses;
|
|
101
|
+
const rightRowClasses = rightOp === undefined
|
|
102
|
+
? emptyRowClasses
|
|
103
|
+
: rightOp.type === "insert"
|
|
104
|
+
? insertRowClasses
|
|
105
|
+
: equalRowClasses;
|
|
106
|
+
const leftMarker = leftOp?.type === "delete" ? "-" : " ";
|
|
107
|
+
const rightMarker = rightOp?.type === "insert" ? "+" : " ";
|
|
108
|
+
return (_jsxs("div", { role: "row", "data-row-index": idx, className: "contents", children: [showLineNumbers && (_jsx("span", { role: "cell", className: cn(lineNumberClasses, leftRowClasses), children: leftOp?.oldLineNumber ?? "" })), _jsx("span", { role: "cell", "aria-hidden": "true", className: cn(markerClasses, leftRowClasses), children: leftMarker }), _jsx("span", { role: "cell", className: cn("pr-3", cellWhitespace, leftRowClasses), children: leftOp === undefined
|
|
109
|
+
? ""
|
|
110
|
+
: leftOp.text.length === 0
|
|
111
|
+
? ""
|
|
112
|
+
: leftOp.text }), showLineNumbers && (_jsx("span", { role: "cell", className: cn(lineNumberClasses, rightRowClasses, "border-l border-border/40"), children: rightOp?.newLineNumber ?? "" })), _jsx("span", { role: "cell", "aria-hidden": "true", className: cn(markerClasses, rightRowClasses, !showLineNumbers && "border-l border-border/40"), children: rightMarker }), _jsx("span", { role: "cell", className: cn("pr-3", cellWhitespace, rightRowClasses), children: rightOp === undefined
|
|
113
|
+
? ""
|
|
114
|
+
: rightOp.text.length === 0
|
|
115
|
+
? ""
|
|
116
|
+
: rightOp.text })] }, idx));
|
|
117
|
+
})] }));
|
|
118
|
+
}
|
|
119
|
+
export { DiffViewer, diffViewerVariants, diffViewerVariantIds, diffViewerSizeIds, diffViewerModeIds, };
|
|
120
|
+
export default DiffViewer;
|
|
121
|
+
//# sourceMappingURL=diff-viewer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff-viewer.js","sourceRoot":"","sources":["../../../../src/components/ui/diff-viewer/diff-viewer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { DiffViewer, DiffViewer as default, diffViewerVariants, diffViewerVariantIds, diffViewerSizeIds, diffViewerModeIds, } from "./diff-viewer";
|
|
2
|
+
export type { DiffViewerProps, } from "./diff-viewer";
|
|
3
|
+
export type { DiffViewerVariant, DiffViewerSize, DiffViewerMode, } from "./diff-viewer-variants";
|
|
4
|
+
export { computeLineDiff, summarizeDiff, buildSplitRows, diffOpTypes, } from "./compute-line-diff";
|
|
5
|
+
export type { DiffOp, DiffOpType, DiffStats, SplitDiffRow, } from "./compute-line-diff";
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { DiffViewer, DiffViewer as default, diffViewerVariants, diffViewerVariantIds, diffViewerSizeIds, diffViewerModeIds, } from "./diff-viewer";
|
|
2
|
+
export { computeLineDiff, summarizeDiff, buildSplitRows, diffOpTypes, } from "./compute-line-diff";
|
|
3
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ui/diff-viewer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,UAAU,IAAI,OAAO,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AASvB,OAAO,EACL,eAAe,EACf,aAAa,EACb,cAAc,EACd,WAAW,GACZ,MAAM,qBAAqB,CAAC"}
|
|
@@ -144,6 +144,8 @@ export * from "./secret-reveal";
|
|
|
144
144
|
export type * from "./secret-reveal";
|
|
145
145
|
export * from "./json-viewer";
|
|
146
146
|
export type * from "./json-viewer";
|
|
147
|
+
export * from "./diff-viewer";
|
|
148
|
+
export type * from "./diff-viewer";
|
|
147
149
|
export * from "./segmented-control";
|
|
148
150
|
export type * from "./segmented-control";
|
|
149
151
|
export * from "./marquee";
|
|
@@ -71,6 +71,7 @@ export * from "./number-input";
|
|
|
71
71
|
export * from "./code-block";
|
|
72
72
|
export * from "./secret-reveal";
|
|
73
73
|
export * from "./json-viewer";
|
|
74
|
+
export * from "./diff-viewer";
|
|
74
75
|
export * from "./segmented-control";
|
|
75
76
|
export * from "./marquee";
|
|
76
77
|
export * from "./toggle";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"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"}
|