@abelfubu/dv 1.0.0 → 1.0.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/diff-view.d.ts +1 -1
- package/dist/components/diff-view.d.ts.map +1 -1
- package/dist/components/diff-view.js +69 -8
- package/dist/components/diff-view.test.d.ts.map +1 -1
- package/dist/components/diff-view.test.js +54 -0
- package/dist/themes/aura.json +69 -0
- package/dist/themes/ayu.json +80 -0
- package/dist/themes/catppuccin-frappe.json +233 -0
- package/dist/themes/catppuccin-macchiato.json +233 -0
- package/dist/themes/catppuccin.json +112 -0
- package/dist/themes/cobalt2.json +228 -0
- package/dist/themes/cursor.json +249 -0
- package/dist/themes/dracula.json +219 -0
- package/dist/themes/everforest.json +241 -0
- package/dist/themes/flexoki.json +237 -0
- package/dist/themes/github-light.json +56 -0
- package/dist/themes/github.json +244 -244
- package/dist/themes/gruvbox.json +95 -0
- package/dist/themes/kanagawa.json +77 -0
- package/dist/themes/lucent-orng.json +227 -0
- package/dist/themes/material.json +235 -0
- package/dist/themes/matrix.json +77 -0
- package/dist/themes/mercury.json +252 -0
- package/dist/themes/monokai.json +221 -0
- package/dist/themes/muted-slate.json +56 -0
- package/dist/themes/nightowl.json +221 -0
- package/dist/themes/nord.json +223 -0
- package/dist/themes/one-dark.json +84 -0
- package/dist/themes/opencode-light.json +62 -0
- package/dist/themes/opencode.json +245 -0
- package/dist/themes/orng.json +245 -0
- package/dist/themes/palenight.json +222 -0
- package/dist/themes/rosepine.json +234 -0
- package/dist/themes/solarized.json +223 -0
- package/dist/themes/synthwave84.json +226 -0
- package/dist/themes/tokyonight.json +243 -0
- package/dist/themes/vercel.json +255 -0
- package/dist/themes/vesper.json +218 -0
- package/dist/themes/zenburn.json +223 -0
- package/dist/themes.d.ts.map +1 -1
- package/dist/themes.js +4 -4
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff-view.d.ts","sourceRoot":"","sources":["../../src/components/diff-view.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,
|
|
1
|
+
{"version":3,"file":"diff-view.d.ts","sourceRoot":"","sources":["../../src/components/diff-view.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAqB,KAAK,cAAc,EAAmD,MAAM,gBAAgB,CAAA;AAIxH,MAAM,WAAW,WAAW;IAC1B,iBAAiB,IAAI,cAAc,GAAG,IAAI,CAAA;CAC3C;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,OAAO,GAAG,SAAS,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;IACnC,4DAA4D;IAC5D,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,+EAA+E;IAC/E,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,4DAA4D;IAC5D,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACjD,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAuHD,eAAO,MAAM,QAAQ,mFAiKnB,CAAA"}
|
|
@@ -3,9 +3,55 @@ import { jsx as _jsx } from "@opentuah/react/jsx-runtime";
|
|
|
3
3
|
// Wraps opentui's <diff> element with theme-aware colors and syntax styles.
|
|
4
4
|
// Supports split and unified view modes with line numbers.
|
|
5
5
|
import * as React from "react";
|
|
6
|
-
import {
|
|
6
|
+
import { RGBA, SyntaxStyle } from "@opentuah/core";
|
|
7
7
|
import { getSyntaxTheme, getResolvedTheme, rgbaToHex } from "../themes.js";
|
|
8
8
|
import { balanceDelimiters } from "../balance-delimiters.js";
|
|
9
|
+
function getSideLineColorConfig(side, line) {
|
|
10
|
+
if (!side)
|
|
11
|
+
return null;
|
|
12
|
+
const { gutter, content } = side.getLineColors();
|
|
13
|
+
const g = gutter.get(line);
|
|
14
|
+
const c = content.get(line);
|
|
15
|
+
if (!g && !c)
|
|
16
|
+
return null;
|
|
17
|
+
const config = {};
|
|
18
|
+
if (g)
|
|
19
|
+
config.gutter = g;
|
|
20
|
+
if (c)
|
|
21
|
+
config.content = c;
|
|
22
|
+
return config;
|
|
23
|
+
}
|
|
24
|
+
function snapshotLineColors(diffRenderable, line) {
|
|
25
|
+
const { leftSide, rightSide } = diffRenderable;
|
|
26
|
+
return {
|
|
27
|
+
left: getSideLineColorConfig(leftSide, line),
|
|
28
|
+
right: getSideLineColorConfig(rightSide, line),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function isTransparent(color) {
|
|
32
|
+
if (!color)
|
|
33
|
+
return true;
|
|
34
|
+
if (typeof color === "string")
|
|
35
|
+
return color.toLowerCase() === "transparent" || color === "#00000000";
|
|
36
|
+
return color.a === 0;
|
|
37
|
+
}
|
|
38
|
+
function restoreSideLineColor(side, line, color) {
|
|
39
|
+
if (!side)
|
|
40
|
+
return;
|
|
41
|
+
const hasVisibleColor = color && ((color.gutter && !isTransparent(color.gutter)) ||
|
|
42
|
+
(color.content && !isTransparent(color.content)));
|
|
43
|
+
if (hasVisibleColor) {
|
|
44
|
+
side.setLineColor(line, color);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
side.clearLineColor(line);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function restoreLineColors(diffRenderable, line, base) {
|
|
51
|
+
const { leftSide, rightSide } = diffRenderable;
|
|
52
|
+
restoreSideLineColor(leftSide, line, base.left);
|
|
53
|
+
restoreSideLineColor(rightSide, line, base.right);
|
|
54
|
+
}
|
|
9
55
|
function getLuminance(color) {
|
|
10
56
|
return color.r * 0.2126 + color.g * 0.7152 + color.b * 0.0722;
|
|
11
57
|
}
|
|
@@ -83,36 +129,51 @@ export const DiffView = React.forwardRef(function DiffView({ diff, view, filetyp
|
|
|
83
129
|
const activeSelectionColor = React.useMemo(() => {
|
|
84
130
|
return selectionColor ?? "#264F78";
|
|
85
131
|
}, [selectionColor]);
|
|
86
|
-
// Track previously-applied highlights so we can clear only our own overrides.
|
|
87
132
|
const prevCursorRef = React.useRef(null);
|
|
88
133
|
const prevSelectionRef = React.useRef(null);
|
|
134
|
+
// Reset highlight tracking when the underlying diff surface is rebuilt so
|
|
135
|
+
// we do not try to clear lines on a stale renderable.
|
|
136
|
+
React.useEffect(() => {
|
|
137
|
+
prevCursorRef.current = null;
|
|
138
|
+
prevSelectionRef.current = null;
|
|
139
|
+
}, [diff, view, themeName]);
|
|
89
140
|
// Apply cursor line and selection highlights to the underlying DiffRenderable.
|
|
90
141
|
React.useEffect(() => {
|
|
91
142
|
const diffRenderable = diffRef.current;
|
|
92
143
|
if (!diffRenderable)
|
|
93
144
|
return;
|
|
94
|
-
//
|
|
145
|
+
// Restore previous cursor override.
|
|
95
146
|
if (prevCursorRef.current) {
|
|
96
|
-
diffRenderable.
|
|
147
|
+
restoreLineColors(diffRenderable, prevCursorRef.current.line, prevCursorRef.current.base);
|
|
97
148
|
}
|
|
98
|
-
//
|
|
149
|
+
// Restore previous selection overrides.
|
|
99
150
|
if (prevSelectionRef.current) {
|
|
100
|
-
|
|
151
|
+
const { start, end, base } = prevSelectionRef.current;
|
|
152
|
+
for (let line = start; line <= end; line++) {
|
|
153
|
+
restoreLineColors(diffRenderable, line, base.get(line) ?? { left: null, right: null });
|
|
154
|
+
}
|
|
101
155
|
}
|
|
102
156
|
prevCursorRef.current = null;
|
|
103
157
|
prevSelectionRef.current = null;
|
|
104
158
|
if (!focused)
|
|
105
159
|
return;
|
|
160
|
+
// Snapshot the cursor line's base color before applying any override.
|
|
161
|
+
const cursorBase = snapshotLineColors(diffRenderable, cursorLine);
|
|
162
|
+
// Snapshot and apply selection range.
|
|
106
163
|
if (selection) {
|
|
107
164
|
const start = Math.min(selection.start, selection.end);
|
|
108
165
|
const end = Math.max(selection.start, selection.end);
|
|
109
166
|
if (end >= start) {
|
|
167
|
+
const selectionBase = new Map();
|
|
168
|
+
for (let line = start; line <= end; line++) {
|
|
169
|
+
selectionBase.set(line, snapshotLineColors(diffRenderable, line));
|
|
170
|
+
}
|
|
110
171
|
diffRenderable.highlightLines(start, end, activeSelectionColor);
|
|
111
|
-
prevSelectionRef.current = { start, end, color: activeSelectionColor };
|
|
172
|
+
prevSelectionRef.current = { start, end, color: activeSelectionColor, base: selectionBase };
|
|
112
173
|
}
|
|
113
174
|
}
|
|
114
175
|
diffRenderable.setLineColor(cursorLine, activeCursorColor);
|
|
115
|
-
prevCursorRef.current = { line: cursorLine,
|
|
176
|
+
prevCursorRef.current = { line: cursorLine, base: cursorBase };
|
|
116
177
|
}, [focused, cursorLine, selection, activeCursorColor, activeSelectionColor]);
|
|
117
178
|
return (_jsx("box", { style: { backgroundColor: colors.bgPanel }, children: _jsx("diff", { ref: diffRef, diff: balancedDiff, view: view, fg: colors.text, treeSitterClient: undefined, filetype: filetype, syntaxStyle: syntaxStyle, showLineNumbers: true, wrapMode: wrapMode,
|
|
118
179
|
// `addedBg`/`removedBg` are used by opentui as the base colors for word-level highlights.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff-view.test.d.ts","sourceRoot":"","sources":["../../src/components/diff-view.test.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"diff-view.test.d.ts","sourceRoot":"","sources":["../../src/components/diff-view.test.tsx"],"names":[],"mappings":"AAUA,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,wBAAwB,EAAE,OAAO,GAAG,SAAS,CAAA;CAClD"}
|
|
@@ -2,6 +2,7 @@ import { jsx as _jsx } from "@opentuah/react/jsx-runtime";
|
|
|
2
2
|
// Tests for DiffView theme reactivity when switching themes at runtime.
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { afterEach, describe, expect, it } from "bun:test";
|
|
5
|
+
import { act } from "react";
|
|
5
6
|
import { testRender } from "@opentuah/react/test-utils";
|
|
6
7
|
import { getDataPaths } from "@opentuah/core";
|
|
7
8
|
import { DiffView } from "./diff-view.js";
|
|
@@ -186,6 +187,19 @@ describe("DiffView", () => {
|
|
|
186
187
|
}
|
|
187
188
|
useAppStore.setState({ themeName: "github" });
|
|
188
189
|
});
|
|
190
|
+
it("uses transparent background for context lines when transparentBackground is enabled", async () => {
|
|
191
|
+
testSetup = await setupTest(_jsx(DiffView, { diff: sampleDiff, view: "unified", filetype: "txt", themeName: "github", transparentBackground: true }), {
|
|
192
|
+
width: 80,
|
|
193
|
+
height: 8,
|
|
194
|
+
});
|
|
195
|
+
await testSetup.renderOnce();
|
|
196
|
+
const frame = testSetup.captureSpans();
|
|
197
|
+
const contextLine = getLineWithToken(frame, "keep");
|
|
198
|
+
const contextSpan = contextLine.spans.find((span) => span.text === "keep");
|
|
199
|
+
expect(contextSpan).toBeDefined();
|
|
200
|
+
const bg = Array.from(contextSpan.bg.buffer);
|
|
201
|
+
expect(bg[3]).toBeCloseTo(0, 4);
|
|
202
|
+
});
|
|
189
203
|
it("updates diff background colors after theme switch", async () => {
|
|
190
204
|
useAppStore.setState({ themeName: "github" });
|
|
191
205
|
testSetup = await setupTest(_jsx(ThemeToggleHarness, {}), {
|
|
@@ -293,6 +307,46 @@ describe("DiffView", () => {
|
|
|
293
307
|
expect.closeTo(86 / 255, 4),
|
|
294
308
|
]);
|
|
295
309
|
});
|
|
310
|
+
it("restores the diff background color when the cursor moves past a line", async () => {
|
|
311
|
+
let setCursorLine = () => { };
|
|
312
|
+
function CursorMoveHarness() {
|
|
313
|
+
const [line, setLine] = React.useState(2);
|
|
314
|
+
setCursorLine = setLine;
|
|
315
|
+
return (_jsx(DiffView, { diff: sampleDiff, view: "unified", filetype: "txt", themeName: "github", focused: true, cursorLine: line, cursorColor: "#123456" }));
|
|
316
|
+
}
|
|
317
|
+
testSetup = await setupTest(_jsx(CursorMoveHarness, {}), {
|
|
318
|
+
width: 80,
|
|
319
|
+
height: 8,
|
|
320
|
+
});
|
|
321
|
+
await testSetup.renderOnce();
|
|
322
|
+
// Capture the original context background before the cursor moves over it.
|
|
323
|
+
const frameBefore = testSetup.captureSpans();
|
|
324
|
+
const contextLineBefore = getLineWithToken(frameBefore, "keep");
|
|
325
|
+
expect(contextLineBefore).toBeDefined();
|
|
326
|
+
const contextBg = Array.from(contextLineBefore.spans[0].bg.buffer).slice(0, 3);
|
|
327
|
+
// Move the cursor from the added line to the context line.
|
|
328
|
+
globalThis.IS_REACT_ACT_ENVIRONMENT = true;
|
|
329
|
+
act(() => setCursorLine(3));
|
|
330
|
+
globalThis.IS_REACT_ACT_ENVIRONMENT = false;
|
|
331
|
+
await testSetup.renderOnce();
|
|
332
|
+
const frameAfter = testSetup.captureSpans();
|
|
333
|
+
const addedLine = getLineWithToken(frameAfter, "new");
|
|
334
|
+
const removedLine = getLineWithToken(frameAfter, "old");
|
|
335
|
+
expect(addedLine).toBeDefined();
|
|
336
|
+
expect(removedLine).toBeDefined();
|
|
337
|
+
const addedSpan = addedLine.spans.find((span) => span.text === "new");
|
|
338
|
+
const removedSpan = removedLine.spans.find((span) => span.text === "old");
|
|
339
|
+
expect(addedSpan).toBeDefined();
|
|
340
|
+
expect(removedSpan).toBeDefined();
|
|
341
|
+
const addedBg = Array.from(addedSpan.bg.buffer).slice(0, 3);
|
|
342
|
+
const removedBg = Array.from(removedSpan.bg.buffer).slice(0, 3);
|
|
343
|
+
// After moving the cursor, the added and removed lines should show their
|
|
344
|
+
// original diff backgrounds, not the default context background.
|
|
345
|
+
expect(addedBg).not.toEqual(contextBg);
|
|
346
|
+
expect(removedBg).not.toEqual(contextBg);
|
|
347
|
+
// They should also be different from each other (added vs removed).
|
|
348
|
+
expect(addedBg).not.toEqual(removedBg);
|
|
349
|
+
});
|
|
296
350
|
it("does not highlight a cursor line when not focused", async () => {
|
|
297
351
|
testSetup = await setupTest(_jsx(DiffView, { diff: sampleDiff, view: "unified", filetype: "txt", themeName: "github", focused: false, cursorLine: 2, cursorColor: "#123456" }), {
|
|
298
352
|
width: 80,
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://opencode.ai/theme.json",
|
|
3
|
+
"defs": {
|
|
4
|
+
"darkBg": "#0f0f0f",
|
|
5
|
+
"darkBgPanel": "#15141b",
|
|
6
|
+
"darkBorder": "#2d2d2d",
|
|
7
|
+
"darkFgMuted": "#6d6d6d",
|
|
8
|
+
"darkFg": "#edecee",
|
|
9
|
+
"purple": "#a277ff",
|
|
10
|
+
"pink": "#f694ff",
|
|
11
|
+
"blue": "#82e2ff",
|
|
12
|
+
"red": "#ff6767",
|
|
13
|
+
"orange": "#ffca85",
|
|
14
|
+
"cyan": "#61ffca",
|
|
15
|
+
"green": "#9dff65"
|
|
16
|
+
},
|
|
17
|
+
"theme": {
|
|
18
|
+
"primary": "purple",
|
|
19
|
+
"secondary": "pink",
|
|
20
|
+
"accent": "purple",
|
|
21
|
+
"error": "red",
|
|
22
|
+
"warning": "orange",
|
|
23
|
+
"success": "cyan",
|
|
24
|
+
"info": "purple",
|
|
25
|
+
"text": "darkFg",
|
|
26
|
+
"textMuted": "darkFgMuted",
|
|
27
|
+
"background": "darkBg",
|
|
28
|
+
"backgroundPanel": "darkBgPanel",
|
|
29
|
+
"backgroundElement": "darkBgPanel",
|
|
30
|
+
"border": "darkBorder",
|
|
31
|
+
"borderActive": "darkFgMuted",
|
|
32
|
+
"borderSubtle": "darkBorder",
|
|
33
|
+
"diffAdded": "cyan",
|
|
34
|
+
"diffRemoved": "red",
|
|
35
|
+
"diffContext": "darkFgMuted",
|
|
36
|
+
"diffHunkHeader": "darkFgMuted",
|
|
37
|
+
"diffHighlightAdded": "cyan",
|
|
38
|
+
"diffHighlightRemoved": "red",
|
|
39
|
+
"diffAddedBg": "#354933",
|
|
40
|
+
"diffRemovedBg": "#3f191a",
|
|
41
|
+
"diffContextBg": "darkBgPanel",
|
|
42
|
+
"diffLineNumber": "darkBorder",
|
|
43
|
+
"diffAddedLineNumberBg": "#162620",
|
|
44
|
+
"diffRemovedLineNumberBg": "#26161a",
|
|
45
|
+
"markdownText": "darkFg",
|
|
46
|
+
"markdownHeading": "purple",
|
|
47
|
+
"markdownLink": "pink",
|
|
48
|
+
"markdownLinkText": "purple",
|
|
49
|
+
"markdownCode": "cyan",
|
|
50
|
+
"markdownBlockQuote": "darkFgMuted",
|
|
51
|
+
"markdownEmph": "orange",
|
|
52
|
+
"markdownStrong": "purple",
|
|
53
|
+
"markdownHorizontalRule": "darkFgMuted",
|
|
54
|
+
"markdownListItem": "purple",
|
|
55
|
+
"markdownListEnumeration": "purple",
|
|
56
|
+
"markdownImage": "pink",
|
|
57
|
+
"markdownImageText": "purple",
|
|
58
|
+
"markdownCodeBlock": "darkFg",
|
|
59
|
+
"syntaxComment": "darkFgMuted",
|
|
60
|
+
"syntaxKeyword": "pink",
|
|
61
|
+
"syntaxFunction": "purple",
|
|
62
|
+
"syntaxVariable": "purple",
|
|
63
|
+
"syntaxString": "cyan",
|
|
64
|
+
"syntaxNumber": "green",
|
|
65
|
+
"syntaxType": "purple",
|
|
66
|
+
"syntaxOperator": "pink",
|
|
67
|
+
"syntaxPunctuation": "darkFg"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://opencode.ai/theme.json",
|
|
3
|
+
"defs": {
|
|
4
|
+
"darkBg": "#0B0E14",
|
|
5
|
+
"darkBgAlt": "#0D1017",
|
|
6
|
+
"darkLine": "#11151C",
|
|
7
|
+
"darkPanel": "#0F131A",
|
|
8
|
+
"darkFg": "#BFBDB6",
|
|
9
|
+
"darkFgMuted": "#565B66",
|
|
10
|
+
"darkGutter": "#6C7380",
|
|
11
|
+
"darkTag": "#39BAE6",
|
|
12
|
+
"darkFunc": "#FFB454",
|
|
13
|
+
"darkEntity": "#59C2FF",
|
|
14
|
+
"darkString": "#AAD94C",
|
|
15
|
+
"darkRegexp": "#95E6CB",
|
|
16
|
+
"darkMarkup": "#F07178",
|
|
17
|
+
"darkKeyword": "#FF8F40",
|
|
18
|
+
"darkSpecial": "#E6B673",
|
|
19
|
+
"darkComment": "#ACB6BF",
|
|
20
|
+
"darkConstant": "#D2A6FF",
|
|
21
|
+
"darkOperator": "#F29668",
|
|
22
|
+
"darkAdded": "#7FD962",
|
|
23
|
+
"darkRemoved": "#F26D78",
|
|
24
|
+
"darkAccent": "#E6B450",
|
|
25
|
+
"darkError": "#D95757",
|
|
26
|
+
"darkIndentActive": "#6C7380"
|
|
27
|
+
},
|
|
28
|
+
"theme": {
|
|
29
|
+
"primary": "darkEntity",
|
|
30
|
+
"secondary": "darkConstant",
|
|
31
|
+
"accent": "darkAccent",
|
|
32
|
+
"error": "darkError",
|
|
33
|
+
"warning": "darkSpecial",
|
|
34
|
+
"success": "darkAdded",
|
|
35
|
+
"info": "darkTag",
|
|
36
|
+
"text": "darkFg",
|
|
37
|
+
"textMuted": "darkFgMuted",
|
|
38
|
+
"background": "darkBg",
|
|
39
|
+
"backgroundPanel": "darkPanel",
|
|
40
|
+
"backgroundElement": "darkBgAlt",
|
|
41
|
+
"border": "darkGutter",
|
|
42
|
+
"borderActive": "darkIndentActive",
|
|
43
|
+
"borderSubtle": "darkLine",
|
|
44
|
+
"diffAdded": "darkAdded",
|
|
45
|
+
"diffRemoved": "darkRemoved",
|
|
46
|
+
"diffContext": "darkComment",
|
|
47
|
+
"diffHunkHeader": "darkComment",
|
|
48
|
+
"diffHighlightAdded": "darkString",
|
|
49
|
+
"diffHighlightRemoved": "darkMarkup",
|
|
50
|
+
"diffAddedBg": "#20303b",
|
|
51
|
+
"diffRemovedBg": "#37222c",
|
|
52
|
+
"diffContextBg": "darkPanel",
|
|
53
|
+
"diffLineNumber": "darkGutter",
|
|
54
|
+
"diffAddedLineNumberBg": "#1b2b34",
|
|
55
|
+
"diffRemovedLineNumberBg": "#2d1f26",
|
|
56
|
+
"markdownText": "darkFg",
|
|
57
|
+
"markdownHeading": "darkConstant",
|
|
58
|
+
"markdownLink": "darkEntity",
|
|
59
|
+
"markdownLinkText": "darkTag",
|
|
60
|
+
"markdownCode": "darkString",
|
|
61
|
+
"markdownBlockQuote": "darkSpecial",
|
|
62
|
+
"markdownEmph": "darkSpecial",
|
|
63
|
+
"markdownStrong": "darkFunc",
|
|
64
|
+
"markdownHorizontalRule": "darkFgMuted",
|
|
65
|
+
"markdownListItem": "darkEntity",
|
|
66
|
+
"markdownListEnumeration": "darkTag",
|
|
67
|
+
"markdownImage": "darkEntity",
|
|
68
|
+
"markdownImageText": "darkTag",
|
|
69
|
+
"markdownCodeBlock": "darkFg",
|
|
70
|
+
"syntaxComment": "darkComment",
|
|
71
|
+
"syntaxKeyword": "darkKeyword",
|
|
72
|
+
"syntaxFunction": "darkFunc",
|
|
73
|
+
"syntaxVariable": "darkEntity",
|
|
74
|
+
"syntaxString": "darkString",
|
|
75
|
+
"syntaxNumber": "darkConstant",
|
|
76
|
+
"syntaxType": "darkSpecial",
|
|
77
|
+
"syntaxOperator": "darkOperator",
|
|
78
|
+
"syntaxPunctuation": "darkFg"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://opencode.ai/theme.json",
|
|
3
|
+
"defs": {
|
|
4
|
+
"frappeRosewater": "#f2d5cf",
|
|
5
|
+
"frappeFlamingo": "#eebebe",
|
|
6
|
+
"frappePink": "#f4b8e4",
|
|
7
|
+
"frappeMauve": "#ca9ee6",
|
|
8
|
+
"frappeRed": "#e78284",
|
|
9
|
+
"frappeMaroon": "#ea999c",
|
|
10
|
+
"frappePeach": "#ef9f76",
|
|
11
|
+
"frappeYellow": "#e5c890",
|
|
12
|
+
"frappeGreen": "#a6d189",
|
|
13
|
+
"frappeTeal": "#81c8be",
|
|
14
|
+
"frappeSky": "#99d1db",
|
|
15
|
+
"frappeSapphire": "#85c1dc",
|
|
16
|
+
"frappeBlue": "#8da4e2",
|
|
17
|
+
"frappeLavender": "#babbf1",
|
|
18
|
+
"frappeText": "#c6d0f5",
|
|
19
|
+
"frappeSubtext1": "#b5bfe2",
|
|
20
|
+
"frappeSubtext0": "#a5adce",
|
|
21
|
+
"frappeOverlay2": "#949cb8",
|
|
22
|
+
"frappeOverlay1": "#838ba7",
|
|
23
|
+
"frappeOverlay0": "#737994",
|
|
24
|
+
"frappeSurface2": "#626880",
|
|
25
|
+
"frappeSurface1": "#51576d",
|
|
26
|
+
"frappeSurface0": "#414559",
|
|
27
|
+
"frappeBase": "#303446",
|
|
28
|
+
"frappeMantle": "#292c3c",
|
|
29
|
+
"frappeCrust": "#232634"
|
|
30
|
+
},
|
|
31
|
+
"theme": {
|
|
32
|
+
"primary": {
|
|
33
|
+
"dark": "frappeBlue",
|
|
34
|
+
"light": "frappeBlue"
|
|
35
|
+
},
|
|
36
|
+
"secondary": {
|
|
37
|
+
"dark": "frappeMauve",
|
|
38
|
+
"light": "frappeMauve"
|
|
39
|
+
},
|
|
40
|
+
"accent": {
|
|
41
|
+
"dark": "frappePink",
|
|
42
|
+
"light": "frappePink"
|
|
43
|
+
},
|
|
44
|
+
"error": {
|
|
45
|
+
"dark": "frappeRed",
|
|
46
|
+
"light": "frappeRed"
|
|
47
|
+
},
|
|
48
|
+
"warning": {
|
|
49
|
+
"dark": "frappeYellow",
|
|
50
|
+
"light": "frappeYellow"
|
|
51
|
+
},
|
|
52
|
+
"success": {
|
|
53
|
+
"dark": "frappeGreen",
|
|
54
|
+
"light": "frappeGreen"
|
|
55
|
+
},
|
|
56
|
+
"info": {
|
|
57
|
+
"dark": "frappeTeal",
|
|
58
|
+
"light": "frappeTeal"
|
|
59
|
+
},
|
|
60
|
+
"text": {
|
|
61
|
+
"dark": "frappeText",
|
|
62
|
+
"light": "frappeText"
|
|
63
|
+
},
|
|
64
|
+
"textMuted": {
|
|
65
|
+
"dark": "frappeSubtext1",
|
|
66
|
+
"light": "frappeSubtext1"
|
|
67
|
+
},
|
|
68
|
+
"background": {
|
|
69
|
+
"dark": "frappeBase",
|
|
70
|
+
"light": "frappeBase"
|
|
71
|
+
},
|
|
72
|
+
"backgroundPanel": {
|
|
73
|
+
"dark": "frappeMantle",
|
|
74
|
+
"light": "frappeMantle"
|
|
75
|
+
},
|
|
76
|
+
"backgroundElement": {
|
|
77
|
+
"dark": "frappeCrust",
|
|
78
|
+
"light": "frappeCrust"
|
|
79
|
+
},
|
|
80
|
+
"border": {
|
|
81
|
+
"dark": "frappeSurface0",
|
|
82
|
+
"light": "frappeSurface0"
|
|
83
|
+
},
|
|
84
|
+
"borderActive": {
|
|
85
|
+
"dark": "frappeSurface1",
|
|
86
|
+
"light": "frappeSurface1"
|
|
87
|
+
},
|
|
88
|
+
"borderSubtle": {
|
|
89
|
+
"dark": "frappeSurface2",
|
|
90
|
+
"light": "frappeSurface2"
|
|
91
|
+
},
|
|
92
|
+
"diffAdded": {
|
|
93
|
+
"dark": "frappeGreen",
|
|
94
|
+
"light": "frappeGreen"
|
|
95
|
+
},
|
|
96
|
+
"diffRemoved": {
|
|
97
|
+
"dark": "frappeRed",
|
|
98
|
+
"light": "frappeRed"
|
|
99
|
+
},
|
|
100
|
+
"diffContext": {
|
|
101
|
+
"dark": "frappeOverlay2",
|
|
102
|
+
"light": "frappeOverlay2"
|
|
103
|
+
},
|
|
104
|
+
"diffHunkHeader": {
|
|
105
|
+
"dark": "frappePeach",
|
|
106
|
+
"light": "frappePeach"
|
|
107
|
+
},
|
|
108
|
+
"diffHighlightAdded": {
|
|
109
|
+
"dark": "frappeGreen",
|
|
110
|
+
"light": "frappeGreen"
|
|
111
|
+
},
|
|
112
|
+
"diffHighlightRemoved": {
|
|
113
|
+
"dark": "frappeRed",
|
|
114
|
+
"light": "frappeRed"
|
|
115
|
+
},
|
|
116
|
+
"diffAddedBg": {
|
|
117
|
+
"dark": "#29342b",
|
|
118
|
+
"light": "#29342b"
|
|
119
|
+
},
|
|
120
|
+
"diffRemovedBg": {
|
|
121
|
+
"dark": "#3a2a31",
|
|
122
|
+
"light": "#3a2a31"
|
|
123
|
+
},
|
|
124
|
+
"diffContextBg": {
|
|
125
|
+
"dark": "frappeMantle",
|
|
126
|
+
"light": "frappeMantle"
|
|
127
|
+
},
|
|
128
|
+
"diffLineNumber": {
|
|
129
|
+
"dark": "frappeSurface1",
|
|
130
|
+
"light": "frappeSurface1"
|
|
131
|
+
},
|
|
132
|
+
"diffAddedLineNumberBg": {
|
|
133
|
+
"dark": "#223025",
|
|
134
|
+
"light": "#223025"
|
|
135
|
+
},
|
|
136
|
+
"diffRemovedLineNumberBg": {
|
|
137
|
+
"dark": "#2f242b",
|
|
138
|
+
"light": "#2f242b"
|
|
139
|
+
},
|
|
140
|
+
"markdownText": {
|
|
141
|
+
"dark": "frappeText",
|
|
142
|
+
"light": "frappeText"
|
|
143
|
+
},
|
|
144
|
+
"markdownHeading": {
|
|
145
|
+
"dark": "frappeMauve",
|
|
146
|
+
"light": "frappeMauve"
|
|
147
|
+
},
|
|
148
|
+
"markdownLink": {
|
|
149
|
+
"dark": "frappeBlue",
|
|
150
|
+
"light": "frappeBlue"
|
|
151
|
+
},
|
|
152
|
+
"markdownLinkText": {
|
|
153
|
+
"dark": "frappeSky",
|
|
154
|
+
"light": "frappeSky"
|
|
155
|
+
},
|
|
156
|
+
"markdownCode": {
|
|
157
|
+
"dark": "frappeGreen",
|
|
158
|
+
"light": "frappeGreen"
|
|
159
|
+
},
|
|
160
|
+
"markdownBlockQuote": {
|
|
161
|
+
"dark": "frappeYellow",
|
|
162
|
+
"light": "frappeYellow"
|
|
163
|
+
},
|
|
164
|
+
"markdownEmph": {
|
|
165
|
+
"dark": "frappeYellow",
|
|
166
|
+
"light": "frappeYellow"
|
|
167
|
+
},
|
|
168
|
+
"markdownStrong": {
|
|
169
|
+
"dark": "frappePeach",
|
|
170
|
+
"light": "frappePeach"
|
|
171
|
+
},
|
|
172
|
+
"markdownHorizontalRule": {
|
|
173
|
+
"dark": "frappeSubtext0",
|
|
174
|
+
"light": "frappeSubtext0"
|
|
175
|
+
},
|
|
176
|
+
"markdownListItem": {
|
|
177
|
+
"dark": "frappeBlue",
|
|
178
|
+
"light": "frappeBlue"
|
|
179
|
+
},
|
|
180
|
+
"markdownListEnumeration": {
|
|
181
|
+
"dark": "frappeSky",
|
|
182
|
+
"light": "frappeSky"
|
|
183
|
+
},
|
|
184
|
+
"markdownImage": {
|
|
185
|
+
"dark": "frappeBlue",
|
|
186
|
+
"light": "frappeBlue"
|
|
187
|
+
},
|
|
188
|
+
"markdownImageText": {
|
|
189
|
+
"dark": "frappeSky",
|
|
190
|
+
"light": "frappeSky"
|
|
191
|
+
},
|
|
192
|
+
"markdownCodeBlock": {
|
|
193
|
+
"dark": "frappeText",
|
|
194
|
+
"light": "frappeText"
|
|
195
|
+
},
|
|
196
|
+
"syntaxComment": {
|
|
197
|
+
"dark": "frappeOverlay2",
|
|
198
|
+
"light": "frappeOverlay2"
|
|
199
|
+
},
|
|
200
|
+
"syntaxKeyword": {
|
|
201
|
+
"dark": "frappeMauve",
|
|
202
|
+
"light": "frappeMauve"
|
|
203
|
+
},
|
|
204
|
+
"syntaxFunction": {
|
|
205
|
+
"dark": "frappeBlue",
|
|
206
|
+
"light": "frappeBlue"
|
|
207
|
+
},
|
|
208
|
+
"syntaxVariable": {
|
|
209
|
+
"dark": "frappeRed",
|
|
210
|
+
"light": "frappeRed"
|
|
211
|
+
},
|
|
212
|
+
"syntaxString": {
|
|
213
|
+
"dark": "frappeGreen",
|
|
214
|
+
"light": "frappeGreen"
|
|
215
|
+
},
|
|
216
|
+
"syntaxNumber": {
|
|
217
|
+
"dark": "frappePeach",
|
|
218
|
+
"light": "frappePeach"
|
|
219
|
+
},
|
|
220
|
+
"syntaxType": {
|
|
221
|
+
"dark": "frappeYellow",
|
|
222
|
+
"light": "frappeYellow"
|
|
223
|
+
},
|
|
224
|
+
"syntaxOperator": {
|
|
225
|
+
"dark": "frappeSky",
|
|
226
|
+
"light": "frappeSky"
|
|
227
|
+
},
|
|
228
|
+
"syntaxPunctuation": {
|
|
229
|
+
"dark": "frappeText",
|
|
230
|
+
"light": "frappeText"
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|