mirror of
https://github.com/lutinglt/gitea-github-theme.git
synced 2025-10-27 05:31:04 +00:00
Compare commits
5 Commits
065d7893d8
...
v1.24.4.25
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3b5a596b2f | ||
|
|
41deab68c9 | ||
|
|
a4ae937291 | ||
|
|
babb174b24 | ||
|
|
dca1c34518 |
12
.github/release.md
vendored
12
.github/release.md
vendored
@@ -1,6 +1,14 @@
|
|||||||
## ✨ Feature
|
## ✨ Feature
|
||||||
|
|
||||||
|
- 支持自动颜色主题 (跟随系统)
|
||||||
- 支持亮色主题
|
- 支持亮色主题
|
||||||
|
- 支持柔和的暗色主题 (dark-dimmed)
|
||||||
|
|
||||||
|
## 🌈 Style
|
||||||
|
|
||||||
|
#### 更符合 GitHub 风格
|
||||||
|
|
||||||
|
- 同步查看文件内容时的代码高亮色 (由于词法分析器的差异和解析问题, 只能实现大概相似, 目前观察到在 TypeScript 下词法分析器表现非常糟糕)
|
||||||
|
|
||||||
## 🎈 Perf
|
## 🎈 Perf
|
||||||
|
|
||||||
@@ -8,4 +16,6 @@
|
|||||||
|
|
||||||
## 🐞 Fix
|
## 🐞 Fix
|
||||||
|
|
||||||
- 修复仓库页面与探索页面下仓库主题标签字重不一致的问题
|
- 修复仓库页面与探索页面下仓库主题标签字重不一致的问题
|
||||||
|
- 修复发布页面下的分支按钮点击时高度变化问题
|
||||||
|
- 修复首页/登录页/注册页下导航栏右侧按钮样式问题 #10
|
||||||
|
|||||||
1
.github/workflows/release.yml
vendored
1
.github/workflows/release.yml
vendored
@@ -19,6 +19,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
export TZ=Asia/Shanghai
|
export TZ=Asia/Shanghai
|
||||||
TAG="v$(npm run -s version).$(date +%y%m%d%H%M)"
|
TAG="v$(npm run -s version).$(date +%y%m%d%H%M)"
|
||||||
|
tar -zcf dist/theme-github.tar.gz --remove-files dist/theme-github-auto.css dist/theme-github-light.css dist/theme-github-dark.css dist/theme-github-soft-dark.css
|
||||||
gh release create "$TAG" dist/* --notes-file .github/release.md --draft -t $TAG
|
gh release create "$TAG" dist/* --notes-file .github/release.md --draft -t $TAG
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ github.token }}
|
GH_TOKEN: ${{ github.token }}
|
||||||
|
|||||||
@@ -11,16 +11,19 @@
|
|||||||
|
|
||||||
## 安装
|
## 安装
|
||||||
|
|
||||||
1. 在发布页下载最新的 `theme-github-dark.css` 放入 `gitea/public/assets/css` 目录下
|
1. 在发布页下载最新的 CSS 主题文件放入 `gitea/public/assets/css` 目录下
|
||||||
2. 修改 `gitea/conf/app.ini`,并将 `, github` 附加到 `[ui]` 下的 `THEMES` 末尾
|
2. 修改 `gitea/conf/app.ini`,并将 CSS 文件名去掉 `theme-` 的名称附加到 `[ui]` 下的 `THEMES` 末尾
|
||||||
3. 重启 Gitea
|
3. 重启 Gitea
|
||||||
4. 在设置中查看主题
|
4. 在设置中查看主题
|
||||||
|
5. 自动颜色主题需要亮色和暗色的主题文件
|
||||||
|
|
||||||
|
例: 主题文件名为 `theme-github-dark.css`,则添加 `github-dark` 到 `THEMES` 末尾
|
||||||
|
|
||||||
`gitea/conf/app.ini` 例:
|
`gitea/conf/app.ini` 例:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
[ui]
|
[ui]
|
||||||
THEMES = gitea-dark, github-dark
|
THEMES = gitea-auto, gitea-light, gitea-dark, github-auto, github-light, github-dark, github-soft-dark
|
||||||
```
|
```
|
||||||
|
|
||||||
详细请查看 Gitea 文档
|
详细请查看 Gitea 文档
|
||||||
|
|||||||
2
TODO.md
2
TODO.md
@@ -4,8 +4,6 @@
|
|||||||
- issue/PR 列表样式 github 布局
|
- issue/PR 列表样式 github 布局
|
||||||
- styles/themes 库组件导出整理
|
- styles/themes 库组件导出整理
|
||||||
- defineTheme 颜色生成代码重构
|
- defineTheme 颜色生成代码重构
|
||||||
- 亮色主题适配/测试
|
|
||||||
- 自动颜色主题生成
|
|
||||||
|
|
||||||
### 其他
|
### 其他
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
import { rgba, saturate } from "polished";
|
import { rgba, saturate } from "polished";
|
||||||
import { scaleColorLight } from "src/functions";
|
import { scaleColorLight } from "src/functions";
|
||||||
import type { Ansi, Console, Diff, Github, Message, Named, Other, Primary, Secondary } from "src/types";
|
import type { Ansi, Chroma, Console, Diff, Github, Message, Named, Other, Primary, Secondary } from "src/types";
|
||||||
import { themeVars } from "src/types/vars";
|
import { themeVars } from "src/types/vars";
|
||||||
|
import { prettylightsDark, prettylightsLight } from "./prettylights";
|
||||||
import type { Theme } from "./theme";
|
import type { Theme } from "./theme";
|
||||||
|
|
||||||
type ThemeColor = {
|
type ThemeColor = {
|
||||||
@@ -57,7 +58,7 @@ type ThemeColor = {
|
|||||||
|
|
||||||
/** 定义颜色, 用于生成颜色主题
|
/** 定义颜色, 用于生成颜色主题
|
||||||
* @example
|
* @example
|
||||||
* 文件名: "dark.css.tsx"
|
* 文件名: "dark.css.ts"
|
||||||
* import type { Console, Diff, Other } from "src/types";
|
* import type { Console, Diff, Other } from "src/types";
|
||||||
* import { defineTheme, themeVars } from "src";
|
* import { defineTheme, themeVars } from "src";
|
||||||
*
|
*
|
||||||
@@ -70,7 +71,6 @@ type ThemeColor = {
|
|||||||
* ...
|
* ...
|
||||||
* }
|
* }
|
||||||
* ...
|
* ...
|
||||||
* // 会经过 lightningcss 打包处理生成最终的 CSS
|
|
||||||
* export default defineTheme({
|
* export default defineTheme({
|
||||||
* isDarkTheme: true,
|
* isDarkTheme: true,
|
||||||
* primary: "#0969da",
|
* primary: "#0969da",
|
||||||
@@ -80,7 +80,7 @@ type ThemeColor = {
|
|||||||
* other,
|
* other,
|
||||||
* })
|
* })
|
||||||
*/
|
*/
|
||||||
export function defineTheme(themeColor: ThemeColor): Theme {
|
export function defineTheme(themeColor: ThemeColor, chroma: Chroma | null = null): Theme {
|
||||||
const brightDir = themeColor.isDarkTheme ? -1 : 1;
|
const brightDir = themeColor.isDarkTheme ? -1 : 1;
|
||||||
|
|
||||||
const primary: Primary = {
|
const primary: Primary = {
|
||||||
@@ -341,6 +341,7 @@ export function defineTheme(themeColor: ThemeColor): Theme {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
isDarkTheme: themeColor.isDarkTheme.toString(),
|
isDarkTheme: themeColor.isDarkTheme.toString(),
|
||||||
|
chroma: chroma || (themeColor.isDarkTheme ? prettylightsDark : prettylightsLight),
|
||||||
color: {
|
color: {
|
||||||
primary,
|
primary,
|
||||||
secondary,
|
secondary,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { saturate } from "polished";
|
import { saturate } from "polished";
|
||||||
import type { Console, Diff, Other } from "src";
|
import type { Console, Diff, Other } from "src";
|
||||||
import { scaleColorLight } from "src/functions";
|
import { scaleColorLight } from "src/functions";
|
||||||
import type { Github } from "src/types";
|
import type { Chroma, Github } from "src/types";
|
||||||
import { themeVars } from "src/types/vars";
|
import { themeVars } from "src/types/vars";
|
||||||
import { defineTheme } from "./color";
|
import { defineTheme } from "./color";
|
||||||
import type { Theme } from "./theme";
|
import type { Theme } from "./theme";
|
||||||
@@ -144,7 +144,7 @@ export type GithubColor = {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
export function defineGithubTheme(githubColor: GithubColor): Theme {
|
export function defineGithubTheme(githubColor: GithubColor, chroma: Chroma | null = null): Theme {
|
||||||
const console: Console = {
|
const console: Console = {
|
||||||
fg: {
|
fg: {
|
||||||
self: githubColor.fgColor.default,
|
self: githubColor.fgColor.default,
|
||||||
@@ -394,30 +394,33 @@ export function defineGithubTheme(githubColor: GithubColor): Theme {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
return defineTheme({
|
return defineTheme(
|
||||||
isDarkTheme: githubColor.isDarkTheme,
|
{
|
||||||
primary: githubColor.fgColor.accent,
|
isDarkTheme: githubColor.isDarkTheme,
|
||||||
primaryContrast: githubColor.fgColor.default,
|
primary: githubColor.fgColor.accent,
|
||||||
secondary: githubColor.borderColor.default,
|
primaryContrast: githubColor.fgColor.default,
|
||||||
red: githubColor.fgColor.danger,
|
secondary: githubColor.borderColor.default,
|
||||||
orange: githubColor.fgColor.severe,
|
red: githubColor.fgColor.danger,
|
||||||
yellow: githubColor.fgColor.attention,
|
orange: githubColor.fgColor.severe,
|
||||||
olive: githubColor.display.olive.fgColor,
|
yellow: githubColor.fgColor.attention,
|
||||||
green: githubColor.fgColor.success,
|
olive: githubColor.display.olive.fgColor,
|
||||||
cyan: githubColor.display.cyan.fgColor,
|
green: githubColor.fgColor.success,
|
||||||
teal: githubColor.display.teal.fgColor,
|
cyan: githubColor.display.cyan.fgColor,
|
||||||
blue: githubColor.fgColor.accent,
|
teal: githubColor.display.teal.fgColor,
|
||||||
violet: githubColor.display.indigo.fgColor,
|
blue: githubColor.fgColor.accent,
|
||||||
purple: githubColor.fgColor.done,
|
violet: githubColor.display.indigo.fgColor,
|
||||||
pink: githubColor.fgColor.sponsors,
|
purple: githubColor.fgColor.done,
|
||||||
brown: githubColor.display.brown.fgColor,
|
pink: githubColor.fgColor.sponsors,
|
||||||
black: githubColor.fgColor.black,
|
brown: githubColor.display.brown.fgColor,
|
||||||
grey: githubColor.fgColor.neutral,
|
black: githubColor.fgColor.black,
|
||||||
gold: githubColor.display.lemon.fgColor,
|
grey: githubColor.fgColor.neutral,
|
||||||
white: githubColor.fgColor.white,
|
gold: githubColor.display.lemon.fgColor,
|
||||||
console,
|
white: githubColor.fgColor.white,
|
||||||
diff,
|
console,
|
||||||
other,
|
diff,
|
||||||
github,
|
other,
|
||||||
});
|
github,
|
||||||
|
},
|
||||||
|
chroma
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
262
src/core/prettylights.ts
Normal file
262
src/core/prettylights.ts
Normal file
@@ -0,0 +1,262 @@
|
|||||||
|
import type { Chroma } from "src/types";
|
||||||
|
|
||||||
|
export type prettylightsColor = {
|
||||||
|
syntax: {
|
||||||
|
brackethighlighter: {
|
||||||
|
angle: string;
|
||||||
|
unmatched: string;
|
||||||
|
};
|
||||||
|
carriage: {
|
||||||
|
return: {
|
||||||
|
bg: string;
|
||||||
|
text: string;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
comment: string;
|
||||||
|
constant: string;
|
||||||
|
constantOtherReferenceLink: string;
|
||||||
|
entity: string;
|
||||||
|
entityTag: string;
|
||||||
|
invalid: {
|
||||||
|
illegal: {
|
||||||
|
bg: string;
|
||||||
|
text: string;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
keyword: string;
|
||||||
|
markup: {
|
||||||
|
bold: string;
|
||||||
|
changed: {
|
||||||
|
bg: string;
|
||||||
|
text: string;
|
||||||
|
};
|
||||||
|
deleted: {
|
||||||
|
bg: string;
|
||||||
|
text: string;
|
||||||
|
};
|
||||||
|
heading: string;
|
||||||
|
ignored: {
|
||||||
|
bg: string;
|
||||||
|
text: string;
|
||||||
|
};
|
||||||
|
inserted: {
|
||||||
|
bg: string;
|
||||||
|
text: string;
|
||||||
|
};
|
||||||
|
italic: string;
|
||||||
|
list: string;
|
||||||
|
};
|
||||||
|
metaDiffRange: string;
|
||||||
|
storageModifierImport: string;
|
||||||
|
string: string;
|
||||||
|
stringRegexp: string;
|
||||||
|
sublimelinterGutterMark: string;
|
||||||
|
variable: string;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export function prettylights2Chroma(prettylights: prettylightsColor): Chroma {
|
||||||
|
return {
|
||||||
|
textWhiteSpace: prettylights.syntax.brackethighlighter.unmatched,
|
||||||
|
err: prettylights.syntax.brackethighlighter.unmatched,
|
||||||
|
keyword: {
|
||||||
|
self: prettylights.syntax.keyword,
|
||||||
|
constant: prettylights.syntax.constant,
|
||||||
|
declaration: prettylights.syntax.keyword,
|
||||||
|
namespace: prettylights.syntax.keyword,
|
||||||
|
pseudo: prettylights.syntax.constant,
|
||||||
|
reserved: prettylights.syntax.keyword,
|
||||||
|
type: prettylights.syntax.markup.bold,
|
||||||
|
},
|
||||||
|
name: {
|
||||||
|
self: prettylights.syntax.markup.bold,
|
||||||
|
attribute: prettylights.syntax.entityTag,
|
||||||
|
builtin: prettylights.syntax.entity,
|
||||||
|
builtinPseudo: prettylights.syntax.markup.bold,
|
||||||
|
class: prettylights.syntax.variable,
|
||||||
|
constant: prettylights.syntax.variable,
|
||||||
|
decorator: prettylights.syntax.entity,
|
||||||
|
entity: prettylights.syntax.variable,
|
||||||
|
exception: prettylights.syntax.variable,
|
||||||
|
function: prettylights.syntax.entity,
|
||||||
|
functionMagic: prettylights.syntax.entity,
|
||||||
|
label: prettylights.syntax.constant,
|
||||||
|
other: prettylights.syntax.markup.bold,
|
||||||
|
namespace: prettylights.syntax.markup.bold,
|
||||||
|
property: prettylights.syntax.constant,
|
||||||
|
tag: prettylights.syntax.entityTag,
|
||||||
|
variable: prettylights.syntax.constant,
|
||||||
|
variableClass: prettylights.syntax.constant,
|
||||||
|
variableGlobal: prettylights.syntax.constant,
|
||||||
|
variableInstance: prettylights.syntax.constant,
|
||||||
|
variableMagic: prettylights.syntax.markup.bold,
|
||||||
|
},
|
||||||
|
literal: {
|
||||||
|
self: prettylights.syntax.string,
|
||||||
|
date: prettylights.syntax.constant,
|
||||||
|
},
|
||||||
|
string: {
|
||||||
|
self: prettylights.syntax.string,
|
||||||
|
affix: prettylights.syntax.string,
|
||||||
|
backtick: prettylights.syntax.string,
|
||||||
|
char: prettylights.syntax.string,
|
||||||
|
delimiter: prettylights.syntax.string,
|
||||||
|
doc: prettylights.syntax.comment,
|
||||||
|
double: prettylights.syntax.string,
|
||||||
|
escape: prettylights.syntax.string,
|
||||||
|
heredoc: prettylights.syntax.string,
|
||||||
|
interpol: prettylights.syntax.string,
|
||||||
|
other: prettylights.syntax.string,
|
||||||
|
regex: prettylights.syntax.stringRegexp,
|
||||||
|
single: prettylights.syntax.string,
|
||||||
|
symbol: prettylights.syntax.string,
|
||||||
|
},
|
||||||
|
number: {
|
||||||
|
self: prettylights.syntax.constant,
|
||||||
|
bin: prettylights.syntax.constant,
|
||||||
|
float: prettylights.syntax.constant,
|
||||||
|
hex: prettylights.syntax.constant,
|
||||||
|
integer: prettylights.syntax.constant,
|
||||||
|
integerLong: prettylights.syntax.constant,
|
||||||
|
oct: prettylights.syntax.constant,
|
||||||
|
},
|
||||||
|
operator: {
|
||||||
|
self: prettylights.syntax.constant,
|
||||||
|
word: prettylights.syntax.constant,
|
||||||
|
},
|
||||||
|
punctuation: prettylights.syntax.markup.bold,
|
||||||
|
comment: {
|
||||||
|
self: prettylights.syntax.comment,
|
||||||
|
hashbang: prettylights.syntax.comment,
|
||||||
|
multiline: prettylights.syntax.comment,
|
||||||
|
preproc: prettylights.syntax.constant,
|
||||||
|
preprocFile: prettylights.syntax.constant,
|
||||||
|
single: prettylights.syntax.comment,
|
||||||
|
special: prettylights.syntax.comment,
|
||||||
|
},
|
||||||
|
generic: {
|
||||||
|
self: prettylights.syntax.markup.bold,
|
||||||
|
deleted: prettylights.syntax.markup.deleted.text,
|
||||||
|
emph: prettylights.syntax.markup.italic,
|
||||||
|
error: prettylights.syntax.invalid.illegal.text,
|
||||||
|
heading: prettylights.syntax.markup.heading,
|
||||||
|
inserted: prettylights.syntax.markup.inserted.text,
|
||||||
|
output: prettylights.syntax.markup.bold,
|
||||||
|
prompt: prettylights.syntax.markup.bold,
|
||||||
|
strong: prettylights.syntax.markup.bold,
|
||||||
|
subheading: prettylights.syntax.markup.heading,
|
||||||
|
traceback: prettylights.syntax.invalid.illegal.text,
|
||||||
|
underline: prettylights.syntax.markup.italic,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export const prettylightsDark = prettylights2Chroma({
|
||||||
|
syntax: {
|
||||||
|
brackethighlighter: {
|
||||||
|
angle: "#9198a1",
|
||||||
|
unmatched: "#f85149",
|
||||||
|
},
|
||||||
|
carriage: {
|
||||||
|
return: {
|
||||||
|
bg: "#b62324",
|
||||||
|
text: "#f0f6fc",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
comment: "#9198a1",
|
||||||
|
constant: "#79c0ff",
|
||||||
|
constantOtherReferenceLink: "#a5d6ff",
|
||||||
|
entity: "#d2a8ff",
|
||||||
|
entityTag: "#7ee787",
|
||||||
|
invalid: {
|
||||||
|
illegal: {
|
||||||
|
bg: "#8e1519",
|
||||||
|
text: "#f0f6fc",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
keyword: "#ff7b72",
|
||||||
|
markup: {
|
||||||
|
bold: "#f0f6fc",
|
||||||
|
changed: {
|
||||||
|
bg: "#5a1e02",
|
||||||
|
text: "#ffdfb6",
|
||||||
|
},
|
||||||
|
deleted: {
|
||||||
|
bg: "#67060c",
|
||||||
|
text: "#ffdcd7",
|
||||||
|
},
|
||||||
|
heading: "#1f6feb",
|
||||||
|
ignored: {
|
||||||
|
bg: "#1158c7",
|
||||||
|
text: "#f0f6fc",
|
||||||
|
},
|
||||||
|
inserted: {
|
||||||
|
bg: "#033a16",
|
||||||
|
text: "#aff5b4",
|
||||||
|
},
|
||||||
|
italic: "#f0f6fc",
|
||||||
|
list: "#f2cc60",
|
||||||
|
},
|
||||||
|
metaDiffRange: "#d2a8ff",
|
||||||
|
storageModifierImport: "#f0f6fc",
|
||||||
|
string: "#a5d6ff",
|
||||||
|
stringRegexp: "#7ee787",
|
||||||
|
sublimelinterGutterMark: "#3d444d",
|
||||||
|
variable: "#ffa657",
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
export const prettylightsLight = prettylights2Chroma({
|
||||||
|
syntax: {
|
||||||
|
brackethighlighter: {
|
||||||
|
angle: "#59636e",
|
||||||
|
unmatched: "#82071e",
|
||||||
|
},
|
||||||
|
carriage: {
|
||||||
|
return: {
|
||||||
|
bg: "#cf222e",
|
||||||
|
text: "#f6f8fa",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
comment: "#59636e",
|
||||||
|
constant: "#0550ae",
|
||||||
|
constantOtherReferenceLink: "#0a3069",
|
||||||
|
entity: "#6639ba",
|
||||||
|
entityTag: "#0550ae",
|
||||||
|
invalid: {
|
||||||
|
illegal: {
|
||||||
|
bg: "#82071e",
|
||||||
|
text: "#f6f8fa",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
keyword: "#cf222e",
|
||||||
|
markup: {
|
||||||
|
bold: "#1f2328",
|
||||||
|
changed: {
|
||||||
|
bg: "#ffd8b5",
|
||||||
|
text: "#953800",
|
||||||
|
},
|
||||||
|
deleted: {
|
||||||
|
bg: "#ffebe9",
|
||||||
|
text: "#82071e",
|
||||||
|
},
|
||||||
|
heading: "#0550ae",
|
||||||
|
ignored: {
|
||||||
|
bg: "#0550ae",
|
||||||
|
text: "#d1d9e0",
|
||||||
|
},
|
||||||
|
inserted: {
|
||||||
|
bg: "#dafbe1",
|
||||||
|
text: "#116329",
|
||||||
|
},
|
||||||
|
italic: "#1f2328",
|
||||||
|
list: "#3b2300",
|
||||||
|
},
|
||||||
|
metaDiffRange: "#8250df",
|
||||||
|
storageModifierImport: "#1f2328",
|
||||||
|
string: "#0a3069",
|
||||||
|
stringRegexp: "#116329",
|
||||||
|
sublimelinterGutterMark: "#818b98",
|
||||||
|
variable: "#953800",
|
||||||
|
}
|
||||||
|
})
|
||||||
@@ -4,15 +4,6 @@ import type { MapLeafNodes, WithOptionalLayer } from "./types";
|
|||||||
|
|
||||||
export type Theme = WithOptionalLayer<MapLeafNodes<typeof themeVars, string>>;
|
export type Theme = WithOptionalLayer<MapLeafNodes<typeof themeVars, string>>;
|
||||||
|
|
||||||
function stringToBoolean(str: string, name: string): boolean {
|
|
||||||
try {
|
|
||||||
return JSON.parse(str);
|
|
||||||
} catch (error) {
|
|
||||||
console.error(error);
|
|
||||||
throw new Error(`Invalid boolean value(${name}): ${str}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const overlayAppearDown = "overlay-appear-down";
|
export const overlayAppearDown = "overlay-appear-down";
|
||||||
export const animationDown = `200ms cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running ${overlayAppearDown}`;
|
export const animationDown = `200ms cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running ${overlayAppearDown}`;
|
||||||
export const overlayAppearUp = "overlay-appear-up";
|
export const overlayAppearUp = "overlay-appear-up";
|
||||||
@@ -42,7 +33,7 @@ const emoji = `
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
export function createTheme(theme: Theme): void {
|
export function createTheme(theme: Theme): void {
|
||||||
const isDarkTheme = stringToBoolean(theme.isDarkTheme, "isDarkTheme");
|
const isDarkTheme: boolean = JSON.parse(theme.isDarkTheme);
|
||||||
if (isDarkTheme) {
|
if (isDarkTheme) {
|
||||||
globalStyle(emoji, { filter: "invert(100%) hue-rotate(180deg)" });
|
globalStyle(emoji, { filter: "invert(100%) hue-rotate(180deg)" });
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -78,23 +78,41 @@ export function themePlugin(): Plugin {
|
|||||||
for (const [key, value] of Object.entries(bundle)) {
|
for (const [key, value] of Object.entries(bundle)) {
|
||||||
// 仅为了类型检查, 逻辑上输出中全是 asset 类型
|
// 仅为了类型检查, 逻辑上输出中全是 asset 类型
|
||||||
if (value.type === "asset") {
|
if (value.type === "asset") {
|
||||||
const name = `${prefix}${value.names[0]}`;
|
const name = `${prefix}${key}`;
|
||||||
const fileName = `${prefix}${value.fileName}`;
|
const fileName = `${prefix}${value.fileName}`;
|
||||||
const originalFileName = value.originalFileNames.pop();
|
const originalFileName = value.originalFileNames.pop();
|
||||||
const type = value.type;
|
const type = value.type;
|
||||||
const source = `${styles}${value.source.toString()}`;
|
const source = `${styles}${value.source.toString()}`;
|
||||||
// 添加主题到输出
|
// 添加主题到输出
|
||||||
this.emitFile({ name, fileName, source, type, originalFileName });
|
this.emitFile({ name, fileName, source, type, originalFileName });
|
||||||
|
// 自动颜色主题
|
||||||
|
const isDark = key.endsWith("dark.css");
|
||||||
|
const darkName = key.replace("light.css", "dark.css");
|
||||||
|
const lightName = key.replace("dark.css", "light.css");
|
||||||
|
const autoName = `${prefix}${key.replace("dark.css", "auto.css").replace("light.css", "auto.css")}`;
|
||||||
|
const findTheme = isDark ? lightName : darkName;
|
||||||
|
if (findTheme in bundle) {
|
||||||
|
const lightContent = `@import "./${prefix}${lightName}" (prefers-color-scheme: light);`;
|
||||||
|
const darkContent = `@import "./${prefix}${darkName}" (prefers-color-scheme: dark);`;
|
||||||
|
this.emitFile({
|
||||||
|
name: autoName,
|
||||||
|
fileName: autoName,
|
||||||
|
type: "asset",
|
||||||
|
source: `${lightContent}\n${darkContent}`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// 删除原始的样式文件, 自动颜色主题因为删除, 永远不会生成两次
|
||||||
delete bundle[key];
|
delete bundle[key];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
writeBundle() {
|
writeBundle() {
|
||||||
|
// 上传到服务器
|
||||||
const server = process.env.SSH_SERVER;
|
const server = process.env.SSH_SERVER;
|
||||||
const user = process.env.SSH_USER || "root";
|
const user = process.env.SSH_USER || "root";
|
||||||
const path = process.env.GITEA_THEME_PATH;
|
const theme_path = process.env.GITEA_THEME_PATH;
|
||||||
if (server && path) {
|
if (server && theme_path) {
|
||||||
const cmd = `scp dist/${prefix}*.css ${user}@${server}:${path}`;
|
const cmd = `scp dist/${prefix}*.css ${user}@${server}:${theme_path}`;
|
||||||
console.log("[themePlugin] exec:", cmd);
|
console.log("[themePlugin] exec:", cmd);
|
||||||
try {
|
try {
|
||||||
execSync(cmd, { stdio: "inherit" });
|
execSync(cmd, { stdio: "inherit" });
|
||||||
@@ -105,6 +123,7 @@ export function themePlugin(): Plugin {
|
|||||||
} else {
|
} else {
|
||||||
console.log("[themePlugin] no SSH_SERVER or GITEA_THEME_PATH, skip upload");
|
console.log("[themePlugin] no SSH_SERVER or GITEA_THEME_PATH, skip upload");
|
||||||
}
|
}
|
||||||
|
console.log("[themePlugin] exec end.");
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
255
src/types/color/chroma.ts
Normal file
255
src/types/color/chroma.ts
Normal file
@@ -0,0 +1,255 @@
|
|||||||
|
// 注释来自 AI
|
||||||
|
export const chroma = {
|
||||||
|
textWhiteSpace: "text-white-space",
|
||||||
|
err: null,
|
||||||
|
keyword: {
|
||||||
|
/** 所有关键字
|
||||||
|
* @example class function var if else return
|
||||||
|
*/
|
||||||
|
self: null,
|
||||||
|
/** 常量关键字
|
||||||
|
* @example true false null
|
||||||
|
*/
|
||||||
|
constant: null,
|
||||||
|
/** 声明关键字
|
||||||
|
* @example var let const
|
||||||
|
*/
|
||||||
|
declaration: null,
|
||||||
|
/** 命名空间关键字
|
||||||
|
* @example package import export
|
||||||
|
*/
|
||||||
|
namespace: null,
|
||||||
|
/** 伪关键字
|
||||||
|
* @example this super __init__
|
||||||
|
*/
|
||||||
|
pseudo: null,
|
||||||
|
/** 保留关键字
|
||||||
|
* @example yield await goto
|
||||||
|
*/
|
||||||
|
reserved: null,
|
||||||
|
/** 类型关键字
|
||||||
|
* @example int float string bool
|
||||||
|
*/
|
||||||
|
type: null,
|
||||||
|
},
|
||||||
|
name: {
|
||||||
|
/** 通用标识符 */
|
||||||
|
self: null,
|
||||||
|
/** 属性名
|
||||||
|
* @example obj.foo HTML/XML 属性名 id="foo"
|
||||||
|
*/
|
||||||
|
attribute: null,
|
||||||
|
/** 内置函数/对象
|
||||||
|
* @example Math.PI Math.max
|
||||||
|
*/
|
||||||
|
builtin: null,
|
||||||
|
/** 内置伪标识符
|
||||||
|
* @example this super self
|
||||||
|
*/
|
||||||
|
builtinPseudo: null,
|
||||||
|
/** 类名 */
|
||||||
|
class: null,
|
||||||
|
/** 常量名 */
|
||||||
|
constant: null,
|
||||||
|
/** 装饰器 */
|
||||||
|
decorator: null,
|
||||||
|
/** 实体名
|
||||||
|
* @example HTML实体名 < > &
|
||||||
|
*/
|
||||||
|
entity: null,
|
||||||
|
/** 异常类名 */
|
||||||
|
exception: null,
|
||||||
|
/** 函数名 */
|
||||||
|
function: null,
|
||||||
|
/** 魔术方法名
|
||||||
|
* @example __init__ __str__
|
||||||
|
*/
|
||||||
|
functionMagic: null,
|
||||||
|
/** 对象属性 */
|
||||||
|
property: null,
|
||||||
|
/** 标签名
|
||||||
|
* @example 跳转标签
|
||||||
|
*/
|
||||||
|
label: null,
|
||||||
|
/** 命名空间 */
|
||||||
|
namespace: null,
|
||||||
|
/** 其他未归类的标识符 */
|
||||||
|
other: null,
|
||||||
|
/** 标签名
|
||||||
|
* @example 跳转标签
|
||||||
|
*/
|
||||||
|
tag: null,
|
||||||
|
/** 变量名 */
|
||||||
|
variable: null,
|
||||||
|
/** 类变量 */
|
||||||
|
variableClass: null,
|
||||||
|
/** 全局变量 */
|
||||||
|
variableGlobal: null,
|
||||||
|
/** 实例变量 */
|
||||||
|
variableInstance: null,
|
||||||
|
/** 魔术变量
|
||||||
|
* @example __name__ __doc__
|
||||||
|
*/
|
||||||
|
variableMagic: null,
|
||||||
|
},
|
||||||
|
literal: {
|
||||||
|
/** 通用字面量 */
|
||||||
|
self: null,
|
||||||
|
/** 日期字面量
|
||||||
|
* @example SQL 日期
|
||||||
|
*/
|
||||||
|
date: null,
|
||||||
|
},
|
||||||
|
string: {
|
||||||
|
/** 通用字符串 */
|
||||||
|
self: null,
|
||||||
|
/** 字符串前缀/后缀
|
||||||
|
* @example f"..." 的 f
|
||||||
|
*/
|
||||||
|
affix: null,
|
||||||
|
/** 反引号字符串
|
||||||
|
* @example `string`
|
||||||
|
*/
|
||||||
|
backtick: null,
|
||||||
|
/** 字符字面量
|
||||||
|
* @example 'a'
|
||||||
|
*/
|
||||||
|
char: null,
|
||||||
|
/** 字符串分隔符
|
||||||
|
* @example 引号自身
|
||||||
|
*/
|
||||||
|
delimiter: null,
|
||||||
|
/** 文档字符串
|
||||||
|
* @example """docstring"""
|
||||||
|
*/
|
||||||
|
doc: null,
|
||||||
|
/** 双引号字符串
|
||||||
|
* @example "string"
|
||||||
|
*/
|
||||||
|
double: null,
|
||||||
|
/** 转义字符
|
||||||
|
* @example \n \t
|
||||||
|
*/
|
||||||
|
escape: null,
|
||||||
|
/** 定界字符串
|
||||||
|
* @example <<EOF EOF>>
|
||||||
|
*/
|
||||||
|
heredoc: null,
|
||||||
|
/** 插值字符串
|
||||||
|
* @example ${name}
|
||||||
|
*/
|
||||||
|
interpol: null,
|
||||||
|
/** 其他类型字符串 */
|
||||||
|
other: null,
|
||||||
|
/** 正则表达式字面量
|
||||||
|
* @example /^abc/
|
||||||
|
*/
|
||||||
|
regex: null,
|
||||||
|
/** 单引号字符串
|
||||||
|
* @example 'string'
|
||||||
|
*/
|
||||||
|
single: null,
|
||||||
|
/** 符号字符串
|
||||||
|
* @example ruby 的 :symbol
|
||||||
|
*/
|
||||||
|
symbol: null,
|
||||||
|
},
|
||||||
|
number: {
|
||||||
|
/** 通用数字 */
|
||||||
|
self: null,
|
||||||
|
/** 二进制数字
|
||||||
|
* @example 0b1010
|
||||||
|
*/
|
||||||
|
bin: null,
|
||||||
|
/** 浮点数
|
||||||
|
* @example 1.23
|
||||||
|
*/
|
||||||
|
float: null,
|
||||||
|
/** 十六进制数字
|
||||||
|
* @example 0x123
|
||||||
|
*/
|
||||||
|
hex: null,
|
||||||
|
/** 普通整数
|
||||||
|
* @example 123
|
||||||
|
*/
|
||||||
|
integer: null,
|
||||||
|
/** 长整数
|
||||||
|
* @example 123L
|
||||||
|
*/
|
||||||
|
integerLong: null,
|
||||||
|
/** 八进制数字
|
||||||
|
* @example 0o123
|
||||||
|
*/
|
||||||
|
oct: null,
|
||||||
|
},
|
||||||
|
operator: {
|
||||||
|
/** 运算符
|
||||||
|
* @example + - * / =
|
||||||
|
*/
|
||||||
|
self: null,
|
||||||
|
/** 单词运算符
|
||||||
|
* @example and or not in is
|
||||||
|
*/
|
||||||
|
word: null,
|
||||||
|
},
|
||||||
|
/** 标点符号
|
||||||
|
* @example , . : ; ( ) [ ] { }
|
||||||
|
*/
|
||||||
|
punctuation: null,
|
||||||
|
comment: {
|
||||||
|
/** 通用注释 */
|
||||||
|
self: null,
|
||||||
|
/** Hashbang 注释
|
||||||
|
* @example #!/bin/bash
|
||||||
|
*/
|
||||||
|
hashbang: null,
|
||||||
|
/** 多行注释 */
|
||||||
|
multiline: null,
|
||||||
|
/** 预处理器注释
|
||||||
|
* @example #include <stdio.h>
|
||||||
|
*/
|
||||||
|
preproc: null,
|
||||||
|
/** 预处理器文件注释
|
||||||
|
* @example 如 python 的编码声明 # -*- coding: utf-8 -*-
|
||||||
|
*/
|
||||||
|
preprocFile: null,
|
||||||
|
/** 单行注释 */
|
||||||
|
single: null,
|
||||||
|
/** 特殊注释
|
||||||
|
* @example JavaDoc 的 `@param`
|
||||||
|
*/
|
||||||
|
special: null,
|
||||||
|
},
|
||||||
|
generic: {
|
||||||
|
/** 通用文本容器 */
|
||||||
|
self: null,
|
||||||
|
/** 被删除的内容 */
|
||||||
|
deleted: null,
|
||||||
|
/** 强调文本 (斜体) */
|
||||||
|
emph: null,
|
||||||
|
/** 错误信息 */
|
||||||
|
error: null,
|
||||||
|
/** 标题
|
||||||
|
* @example Markdown 标题 #
|
||||||
|
*/
|
||||||
|
heading: null,
|
||||||
|
/** 新增内容 */
|
||||||
|
inserted: null,
|
||||||
|
/** 程序输出文本 */
|
||||||
|
output: null,
|
||||||
|
/** 交互式提示符
|
||||||
|
* @example shell 的 $
|
||||||
|
*/
|
||||||
|
prompt: null,
|
||||||
|
/** 强调文本 (粗体) */
|
||||||
|
strong: null,
|
||||||
|
/** 子标题
|
||||||
|
* @example Markdown 子标题 ##
|
||||||
|
*/
|
||||||
|
subheading: null,
|
||||||
|
/** 堆栈跟踪信息 */
|
||||||
|
traceback: null,
|
||||||
|
/** 下划线文本 */
|
||||||
|
underline: null,
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
export { chroma } from "./chroma";
|
||||||
export { ansi, console } from "./console";
|
export { ansi, console } from "./console";
|
||||||
export { diff } from "./diff";
|
export { diff } from "./diff";
|
||||||
export { github } from "./github";
|
export { github } from "./github";
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import type { MapLeafNodes } from "src/core/types";
|
import type { MapLeafNodes } from "src/core/types";
|
||||||
import * as color from "./color";
|
import * as color from "./color";
|
||||||
|
|
||||||
|
/** 代码高亮色 */
|
||||||
|
export type Chroma = MapLeafNodes<typeof color.chroma, string>;
|
||||||
/** 主色调(强调色) */
|
/** 主色调(强调色) */
|
||||||
export type Primary = MapLeafNodes<typeof color.primary, string>;
|
export type Primary = MapLeafNodes<typeof color.primary, string>;
|
||||||
/** 副色调(边框色) */
|
/** 副色调(边框色) */
|
||||||
|
|||||||
@@ -1,17 +1,23 @@
|
|||||||
import { createGlobalThemeContract } from "@vanilla-extract/css";
|
import { createGlobalThemeContract } from "@vanilla-extract/css";
|
||||||
import * as color from "./color";
|
import * as color from "./color";
|
||||||
|
|
||||||
export function varMapper(value: string | null, path: string[]) {
|
function varMapper(prefix: string | null = null) {
|
||||||
if (value === null) {
|
return (value: string | null, path: string[]) => {
|
||||||
path = path.filter(item => item !== "self");
|
if (value === null) {
|
||||||
path = path.map(item => item.replace(/^num/, ""));
|
path = path.filter(item => item !== "self");
|
||||||
return path.join("-");
|
path = path.map(item => item.replace(/^num/, ""));
|
||||||
}
|
value = path.join("-");
|
||||||
return value;
|
}
|
||||||
|
if (prefix) {
|
||||||
|
value = `${prefix}-${value}`;
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const vars = {
|
const vars = {
|
||||||
isDarkTheme: "is-dark-theme",
|
isDarkTheme: "is-dark-theme",
|
||||||
|
chroma: color.chroma,
|
||||||
color: {
|
color: {
|
||||||
...color.other,
|
...color.other,
|
||||||
...color.message,
|
...color.message,
|
||||||
@@ -36,22 +42,20 @@ const otherVars = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const customVars = {
|
const customVars = {
|
||||||
custom: {
|
cloneMenuWidth: "clone-menu-width",
|
||||||
cloneMenuWidth: "custom-clone-menu-width",
|
explore: {
|
||||||
explore: {
|
repolistColumns: "explore-repolist-columns",
|
||||||
repolistColumns: "custom-explore-repolist-columns",
|
userlistColumns: "explore-userlist-columns",
|
||||||
userlistColumns: "custom-explore-userlist-columns",
|
},
|
||||||
},
|
userRepolistColumns: "user-repolist-columns",
|
||||||
userRepolistColumns: "custom-user-repolist-columns",
|
org: {
|
||||||
org: {
|
repolistColumns: "org-repolist-columns",
|
||||||
repolistColumns: "custom-org-repolist-columns",
|
userlistColumns: "org-userlist-columns",
|
||||||
userlistColumns: "custom-org-userlist-columns",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export const themeVars = createGlobalThemeContract(vars, varMapper);
|
export const themeVars = createGlobalThemeContract(vars, varMapper());
|
||||||
export const otherThemeVars = createGlobalThemeContract(otherVars, varMapper);
|
export const otherThemeVars = createGlobalThemeContract(otherVars, varMapper());
|
||||||
export const customThemeVars = createGlobalThemeContract(customVars, varMapper);
|
export const customThemeVars = createGlobalThemeContract(customVars, varMapper("custom"));
|
||||||
|
|
||||||
export { css } from "@linaria/core";
|
export { css } from "@linaria/core";
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ export const clone = css`
|
|||||||
font-family: var(--fontStack-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, monospace);
|
font-family: var(--fontStack-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, monospace);
|
||||||
min-width: 150px;
|
min-width: 150px;
|
||||||
max-width: 400px;
|
max-width: 400px;
|
||||||
width: ${customThemeVars.custom.cloneMenuWidth};
|
width: ${customThemeVars.cloneMenuWidth};
|
||||||
&:hover {
|
&:hover {
|
||||||
border: 1px solid ${themeVars.color.light.border};
|
border: 1px solid ${themeVars.color.light.border};
|
||||||
border-radius: ${otherThemeVars.border.radius};
|
border-radius: ${otherThemeVars.border.radius};
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ export const commit = css`
|
|||||||
// 作者
|
// 作者
|
||||||
.author {
|
.author {
|
||||||
// 作者名称
|
// 作者名称
|
||||||
a.author-wrapper {
|
.author-wrapper {
|
||||||
color: ${themeVars.color.text.light.num1};
|
color: ${themeVars.color.text.light.num1};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ export const diff = css`
|
|||||||
}
|
}
|
||||||
/* 展开/收缩按钮 */
|
/* 展开/收缩按钮 */
|
||||||
.code-expander-button {
|
.code-expander-button {
|
||||||
|
color: ${themeVars.color.text.light.num1};
|
||||||
height: 28px !important;
|
height: 28px !important;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { fallbackVar } from "src/functions";
|
import { fallbackVar } from "src/functions";
|
||||||
import { css, customThemeVars, otherThemeVars, themeVars } from "src/types/vars";
|
import { css, customThemeVars, otherThemeVars, themeVars } from "src/types/vars";
|
||||||
|
|
||||||
const userRepoVar = fallbackVar(customThemeVars.custom.userRepolistColumns, "2");
|
const userRepoVar = fallbackVar(customThemeVars.userRepolistColumns, "2");
|
||||||
const exploreRepoVar = fallbackVar(customThemeVars.custom.explore.repolistColumns, "2");
|
const exploreRepoVar = fallbackVar(customThemeVars.explore.repolistColumns, "2");
|
||||||
const orgRepoVar = fallbackVar(customThemeVars.custom.org.repolistColumns, "1");
|
const orgRepoVar = fallbackVar(customThemeVars.org.repolistColumns, "1");
|
||||||
|
|
||||||
// 仓库列表
|
// 仓库列表
|
||||||
export const repoList = css`
|
export const repoList = css`
|
||||||
@@ -88,8 +88,8 @@ export const repoList = css`
|
|||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const exploreUserVar = fallbackVar(customThemeVars.custom.explore.userlistColumns, "3");
|
const exploreUserVar = fallbackVar(customThemeVars.explore.userlistColumns, "3");
|
||||||
const orgUserVar = fallbackVar(customThemeVars.custom.org.userlistColumns, "2");
|
const orgUserVar = fallbackVar(customThemeVars.org.userlistColumns, "2");
|
||||||
|
|
||||||
// 用户列表
|
// 用户列表
|
||||||
export const userList = css`
|
export const userList = css`
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ export const releaseTagMenu = css`
|
|||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
&.active {
|
&.active {
|
||||||
background: ${themeVars.github.bgColor.accent.emphasis} !important;
|
background: ${themeVars.github.bgColor.accent.emphasis} !important;
|
||||||
|
color: ${themeVars.color.white};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -101,6 +102,8 @@ export const rightButton = css`
|
|||||||
&.tags {
|
&.tags {
|
||||||
.ui.small.button {
|
.ui.small.button {
|
||||||
background-color: ${themeVars.color.button};
|
background-color: ${themeVars.color.button};
|
||||||
|
border-color: ${themeVars.color.light.border};
|
||||||
|
color: ${themeVars.color.text.light.self};
|
||||||
padding: 5px 16px;
|
padding: 5px 16px;
|
||||||
min-height: auto;
|
min-height: auto;
|
||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
|
|||||||
@@ -1,277 +1,286 @@
|
|||||||
import { css } from "src/types/vars";
|
import { css, themeVars } from "src/types/vars";
|
||||||
|
|
||||||
export const chroma = css`
|
// https://github.com/go-gitea/gitea/blob/main/web_src/css/chroma/base.css
|
||||||
|
export const chromaBase = css`
|
||||||
.chroma {
|
.chroma {
|
||||||
background-color: var(--color-code-bg);
|
// LineTableTD
|
||||||
|
|
||||||
.lntd {
|
.lntd {
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
border: 0;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
border: 0;
|
||||||
}
|
}
|
||||||
|
// LineTable
|
||||||
.lntable {
|
.lntable {
|
||||||
border-spacing: 0;
|
border-spacing: 0;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
border: 0;
|
border: 0;
|
||||||
width: auto;
|
width: auto;
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
display: block;
|
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
}
|
|
||||||
|
|
||||||
.hl {
|
|
||||||
width: 100%;
|
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
// LineHighlight
|
||||||
|
.hl {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
// LineNumbersTable
|
||||||
.lnt,
|
.lnt,
|
||||||
|
// LineNumbers
|
||||||
.ln {
|
.ln {
|
||||||
margin-right: 0.4em;
|
margin-right: 0.4em;
|
||||||
padding: 0 0.4em;
|
padding: 0 0.4em;
|
||||||
}
|
}
|
||||||
|
// GenericStrong
|
||||||
.gs {
|
.gs {
|
||||||
font-weight: var(--font-weight-semibold);
|
font-weight: var(--font-weight-semibold);
|
||||||
}
|
}
|
||||||
|
// GenericUnderline
|
||||||
.gl {
|
.gl {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
.bp {
|
// https://github.com/alecthomas/chroma/blob/6428fb4e65f3c1493491571c8a6a8f1add1da822/types.go#L208
|
||||||
color: #fabd2f;
|
export const chromaCode = css`
|
||||||
}
|
.chroma {
|
||||||
|
// TextWhiteSpace
|
||||||
.c,
|
|
||||||
.c1,
|
|
||||||
.ch,
|
|
||||||
.cm {
|
|
||||||
color: #777e94;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cp {
|
|
||||||
color: #8ec07c;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cpf {
|
|
||||||
color: #79c0ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cs {
|
|
||||||
color: #9075cd;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dl {
|
|
||||||
color: #79c0ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gd {
|
|
||||||
color: #fff;
|
|
||||||
background-color: #5f3737;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ge {
|
|
||||||
color: #ddee30;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gh {
|
|
||||||
color: #ffaa10;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gi {
|
|
||||||
color: #fff;
|
|
||||||
background-color: #3a523a;
|
|
||||||
}
|
|
||||||
|
|
||||||
.go {
|
|
||||||
color: #777e94;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gp {
|
|
||||||
color: #ebdbb2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gr {
|
|
||||||
color: #f43;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gs {
|
|
||||||
color: #ebdbb2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gt {
|
|
||||||
color: #7ee787;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gu {
|
|
||||||
color: #a5d6ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.il {
|
|
||||||
color: #79c0ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.k {
|
|
||||||
color: #ff7b72;
|
|
||||||
}
|
|
||||||
|
|
||||||
.kc {
|
|
||||||
color: #79c0ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.kd {
|
|
||||||
color: #ff7b72;
|
|
||||||
}
|
|
||||||
|
|
||||||
.kn {
|
|
||||||
color: #ff7b72;
|
|
||||||
}
|
|
||||||
|
|
||||||
.kp {
|
|
||||||
color: #5f8700;
|
|
||||||
}
|
|
||||||
|
|
||||||
.kr {
|
|
||||||
color: #7ee787;
|
|
||||||
}
|
|
||||||
|
|
||||||
.kt {
|
|
||||||
color: #ff7b72;
|
|
||||||
}
|
|
||||||
|
|
||||||
.m,
|
|
||||||
.mb,
|
|
||||||
.mf,
|
|
||||||
.mh,
|
|
||||||
.mi,
|
|
||||||
.mo {
|
|
||||||
color: #79c0ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.n {
|
|
||||||
color: #c9d1d9;
|
|
||||||
}
|
|
||||||
|
|
||||||
.na {
|
|
||||||
color: #d2a8ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nb {
|
|
||||||
color: #a5d6ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nc {
|
|
||||||
color: #e6edf3;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nd {
|
|
||||||
color: #79c0ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ne {
|
|
||||||
color: #7ee787;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nf,
|
|
||||||
.ni {
|
|
||||||
color: #d2a8ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nl {
|
|
||||||
color: #7ee787;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nn {
|
|
||||||
color: #e6edf3;
|
|
||||||
}
|
|
||||||
|
|
||||||
.no {
|
|
||||||
color: #79c0ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nt {
|
|
||||||
color: #7ee787;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nv {
|
|
||||||
color: #ebdbb2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nx {
|
|
||||||
color: #b6bac5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.o {
|
|
||||||
color: #7ee787;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ow {
|
|
||||||
color: #5f8700;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p {
|
|
||||||
color: #d2d4db;
|
|
||||||
}
|
|
||||||
|
|
||||||
.s,
|
|
||||||
.s1,
|
|
||||||
.s2 {
|
|
||||||
color: #a5d6ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sa {
|
|
||||||
color: #79c0ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sb {
|
|
||||||
color: #a5d6ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sc {
|
|
||||||
color: #79c0ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sd {
|
|
||||||
color: #777e94;
|
|
||||||
}
|
|
||||||
|
|
||||||
.se {
|
|
||||||
color: #7ee787;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sh {
|
|
||||||
color: #79c0ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.si {
|
|
||||||
color: #ffaa10;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sr {
|
|
||||||
color: #9075cd;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ss {
|
|
||||||
color: #7ee787;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sx {
|
|
||||||
color: #ffaa10;
|
|
||||||
}
|
|
||||||
|
|
||||||
.vc {
|
|
||||||
color: #7ee787;
|
|
||||||
}
|
|
||||||
|
|
||||||
.vg,
|
|
||||||
.vi {
|
|
||||||
color: #ffaa10;
|
|
||||||
}
|
|
||||||
|
|
||||||
.w {
|
.w {
|
||||||
color: #7f8699;
|
color: ${themeVars.chroma.textWhiteSpace};
|
||||||
|
}
|
||||||
|
// Error
|
||||||
|
.err {
|
||||||
|
color: ${themeVars.chroma.err};
|
||||||
|
}
|
||||||
|
// Keyword
|
||||||
|
.k {
|
||||||
|
color: ${themeVars.chroma.keyword.self};
|
||||||
|
}
|
||||||
|
.kc {
|
||||||
|
color: ${themeVars.chroma.keyword.constant};
|
||||||
|
}
|
||||||
|
.kd {
|
||||||
|
color: ${themeVars.chroma.keyword.declaration};
|
||||||
|
}
|
||||||
|
.kn {
|
||||||
|
color: ${themeVars.chroma.keyword.namespace};
|
||||||
|
}
|
||||||
|
.kp {
|
||||||
|
color: ${themeVars.chroma.keyword.pseudo};
|
||||||
|
}
|
||||||
|
.kr {
|
||||||
|
color: ${themeVars.chroma.keyword.reserved};
|
||||||
|
}
|
||||||
|
.kt {
|
||||||
|
color: ${themeVars.chroma.keyword.type};
|
||||||
|
}
|
||||||
|
// Name
|
||||||
|
.n {
|
||||||
|
color: ${themeVars.chroma.name.self};
|
||||||
|
}
|
||||||
|
.na {
|
||||||
|
color: ${themeVars.chroma.name.attribute};
|
||||||
|
}
|
||||||
|
.nb {
|
||||||
|
color: ${themeVars.chroma.name.builtin};
|
||||||
|
}
|
||||||
|
.bp {
|
||||||
|
color: ${themeVars.chroma.name.builtinPseudo};
|
||||||
|
}
|
||||||
|
.nc {
|
||||||
|
color: ${themeVars.chroma.name.class};
|
||||||
|
}
|
||||||
|
.no {
|
||||||
|
color: ${themeVars.chroma.name.constant};
|
||||||
|
}
|
||||||
|
.nd {
|
||||||
|
color: ${themeVars.chroma.name.decorator};
|
||||||
|
}
|
||||||
|
.ni {
|
||||||
|
color: ${themeVars.chroma.name.entity};
|
||||||
|
}
|
||||||
|
.ne {
|
||||||
|
color: ${themeVars.chroma.name.exception};
|
||||||
|
}
|
||||||
|
.nf {
|
||||||
|
color: ${themeVars.chroma.name.function};
|
||||||
|
}
|
||||||
|
.fm {
|
||||||
|
color: ${themeVars.chroma.name.functionMagic};
|
||||||
|
}
|
||||||
|
.py {
|
||||||
|
color: ${themeVars.chroma.name.property};
|
||||||
|
}
|
||||||
|
.nl {
|
||||||
|
color: ${themeVars.chroma.name.label};
|
||||||
|
}
|
||||||
|
.nn {
|
||||||
|
color: ${themeVars.chroma.name.namespace};
|
||||||
|
}
|
||||||
|
.nx {
|
||||||
|
color: ${themeVars.chroma.name.other};
|
||||||
|
}
|
||||||
|
.nt {
|
||||||
|
color: ${themeVars.chroma.name.tag};
|
||||||
|
}
|
||||||
|
.nv {
|
||||||
|
color: ${themeVars.chroma.name.variable};
|
||||||
|
}
|
||||||
|
.vc {
|
||||||
|
color: ${themeVars.chroma.name.variableClass};
|
||||||
|
}
|
||||||
|
.vg {
|
||||||
|
color: ${themeVars.chroma.name.variableGlobal};
|
||||||
|
}
|
||||||
|
.vi {
|
||||||
|
color: ${themeVars.chroma.name.variableInstance};
|
||||||
|
}
|
||||||
|
.vm {
|
||||||
|
color: ${themeVars.chroma.name.variableMagic};
|
||||||
|
}
|
||||||
|
// Literal
|
||||||
|
.l {
|
||||||
|
color: ${themeVars.chroma.literal.self};
|
||||||
|
}
|
||||||
|
.ld {
|
||||||
|
color: ${themeVars.chroma.literal.date};
|
||||||
|
}
|
||||||
|
// String
|
||||||
|
.s {
|
||||||
|
color: ${themeVars.chroma.string.self};
|
||||||
|
}
|
||||||
|
.sa {
|
||||||
|
color: ${themeVars.chroma.string.affix};
|
||||||
|
}
|
||||||
|
.sb {
|
||||||
|
color: ${themeVars.chroma.string.backtick};
|
||||||
|
}
|
||||||
|
.sc {
|
||||||
|
color: ${themeVars.chroma.string.char};
|
||||||
|
}
|
||||||
|
.dl {
|
||||||
|
color: ${themeVars.chroma.string.delimiter};
|
||||||
|
}
|
||||||
|
.sd {
|
||||||
|
color: ${themeVars.chroma.string.doc};
|
||||||
|
}
|
||||||
|
.s2 {
|
||||||
|
color: ${themeVars.chroma.string.double};
|
||||||
|
}
|
||||||
|
.se {
|
||||||
|
color: ${themeVars.chroma.string.escape};
|
||||||
|
}
|
||||||
|
.sh {
|
||||||
|
color: ${themeVars.chroma.string.heredoc};
|
||||||
|
}
|
||||||
|
.si {
|
||||||
|
color: ${themeVars.chroma.string.interpol};
|
||||||
|
}
|
||||||
|
.sx {
|
||||||
|
color: ${themeVars.chroma.string.other};
|
||||||
|
}
|
||||||
|
.sr {
|
||||||
|
color: ${themeVars.chroma.string.regex};
|
||||||
|
}
|
||||||
|
.s1 {
|
||||||
|
color: ${themeVars.chroma.string.single};
|
||||||
|
}
|
||||||
|
.ss {
|
||||||
|
color: ${themeVars.chroma.string.symbol};
|
||||||
|
}
|
||||||
|
// Number
|
||||||
|
.m {
|
||||||
|
color: ${themeVars.chroma.number.self};
|
||||||
|
}
|
||||||
|
.mb {
|
||||||
|
color: ${themeVars.chroma.number.bin};
|
||||||
|
}
|
||||||
|
.mf {
|
||||||
|
color: ${themeVars.chroma.number.float};
|
||||||
|
}
|
||||||
|
.mh {
|
||||||
|
color: ${themeVars.chroma.number.hex};
|
||||||
|
}
|
||||||
|
.mi {
|
||||||
|
color: ${themeVars.chroma.number.integer};
|
||||||
|
}
|
||||||
|
.il {
|
||||||
|
color: ${themeVars.chroma.number.integerLong};
|
||||||
|
}
|
||||||
|
.mo {
|
||||||
|
color: ${themeVars.chroma.number.oct};
|
||||||
|
}
|
||||||
|
// Operator
|
||||||
|
.o {
|
||||||
|
color: ${themeVars.chroma.operator.self};
|
||||||
|
}
|
||||||
|
.ow {
|
||||||
|
color: ${themeVars.chroma.operator.word};
|
||||||
|
}
|
||||||
|
// Punctuation
|
||||||
|
.p {
|
||||||
|
color: ${themeVars.chroma.punctuation};
|
||||||
|
}
|
||||||
|
// Comment
|
||||||
|
.c {
|
||||||
|
color: ${themeVars.chroma.comment.self};
|
||||||
|
}
|
||||||
|
.ch {
|
||||||
|
color: ${themeVars.chroma.comment.hashbang};
|
||||||
|
}
|
||||||
|
.cm {
|
||||||
|
color: ${themeVars.chroma.comment.multiline};
|
||||||
|
}
|
||||||
|
.cp {
|
||||||
|
color: ${themeVars.chroma.comment.preproc};
|
||||||
|
}
|
||||||
|
.cpf {
|
||||||
|
color: ${themeVars.chroma.comment.preprocFile};
|
||||||
|
}
|
||||||
|
.c1 {
|
||||||
|
color: ${themeVars.chroma.comment.single};
|
||||||
|
}
|
||||||
|
.cs {
|
||||||
|
color: ${themeVars.chroma.comment.special};
|
||||||
|
}
|
||||||
|
// Generic
|
||||||
|
.g {
|
||||||
|
color: ${themeVars.chroma.generic.self};
|
||||||
|
}
|
||||||
|
.gd {
|
||||||
|
color: ${themeVars.chroma.generic.deleted};
|
||||||
|
}
|
||||||
|
.ge {
|
||||||
|
color: ${themeVars.chroma.generic.emph};
|
||||||
|
}
|
||||||
|
.gr {
|
||||||
|
color: ${themeVars.chroma.generic.error};
|
||||||
|
}
|
||||||
|
.gh {
|
||||||
|
color: ${themeVars.chroma.generic.heading};
|
||||||
|
}
|
||||||
|
.gi {
|
||||||
|
color: ${themeVars.chroma.generic.inserted};
|
||||||
|
}
|
||||||
|
.go {
|
||||||
|
color: ${themeVars.chroma.generic.output};
|
||||||
|
}
|
||||||
|
.gp {
|
||||||
|
color: ${themeVars.chroma.generic.prompt};
|
||||||
|
}
|
||||||
|
.gs {
|
||||||
|
color: ${themeVars.chroma.generic.strong};
|
||||||
|
}
|
||||||
|
.gu {
|
||||||
|
color: ${themeVars.chroma.generic.subheading};
|
||||||
|
}
|
||||||
|
.gt {
|
||||||
|
color: ${themeVars.chroma.generic.traceback};
|
||||||
|
}
|
||||||
|
.gu {
|
||||||
|
color: ${themeVars.chroma.generic.underline};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|||||||
@@ -120,6 +120,11 @@ export const selectionDropdown = css`
|
|||||||
${activeItemAfterStyle};
|
${activeItemAfterStyle};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 发布版本页面的分支按钮, 覆盖 Gitea 的样式, 避免按钮元素高度不一致
|
||||||
|
.repository.new.release .target .selection.dropdown {
|
||||||
|
padding-top: 8px;
|
||||||
|
padding-bottom: 8px;
|
||||||
|
}
|
||||||
// 这个按钮项目前只在创建仓库的拥有者
|
// 这个按钮项目前只在创建仓库的拥有者
|
||||||
// 不实现伪元素, 因为 .item 设置溢出的元素会被截断
|
// 不实现伪元素, 因为 .item 设置溢出的元素会被截断
|
||||||
.ui.selection.dropdown.ellipsis-text-items,
|
.ui.selection.dropdown.ellipsis-text-items,
|
||||||
|
|||||||
@@ -2,7 +2,8 @@ import { css, otherThemeVars, themeVars } from "src/types/vars";
|
|||||||
|
|
||||||
export const navbarRight = css`
|
export const navbarRight = css`
|
||||||
#navbar {
|
#navbar {
|
||||||
.navbar-right {
|
// 进入用户页面后, 避免注册, 登录和首页等意外覆盖
|
||||||
|
.navbar-right:has(.user-menu) {
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
// 右侧按钮, 但不包括头像
|
// 右侧按钮, 但不包括头像
|
||||||
> .item:not(:last-child) {
|
> .item:not(:last-child) {
|
||||||
|
|||||||
@@ -24,13 +24,13 @@ export default defineGithubTheme({
|
|||||||
default: "#f0f6fc",
|
default: "#f0f6fc",
|
||||||
disabled: "#656c7699",
|
disabled: "#656c7699",
|
||||||
done: "#ab7df8",
|
done: "#ab7df8",
|
||||||
|
muted: "#9198a1",
|
||||||
neutral: "#9198a1",
|
neutral: "#9198a1",
|
||||||
severe: "#db6d28",
|
severe: "#db6d28",
|
||||||
sponsors: "#db61a2",
|
sponsors: "#db61a2",
|
||||||
success: "#3fb950",
|
success: "#3fb950",
|
||||||
black: "#010409",
|
black: "#010409",
|
||||||
white: "#ffffff",
|
white: "#ffffff",
|
||||||
muted: "#9198a1",
|
|
||||||
},
|
},
|
||||||
bgColor: {
|
bgColor: {
|
||||||
accent: { emphasis: "#1f6feb", muted: "#388bfd1a" },
|
accent: { emphasis: "#1f6feb", muted: "#388bfd1a" },
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
import { defineGithubTheme } from "src/core/github";
|
import { defineGithubTheme } from "src/core/github";
|
||||||
|
|
||||||
// [TODO] chroma 语法高亮的颜色
|
|
||||||
|
|
||||||
export default defineGithubTheme({
|
export default defineGithubTheme({
|
||||||
isDarkTheme: false,
|
isDarkTheme: false,
|
||||||
display: {
|
display: {
|
||||||
@@ -26,13 +24,13 @@ export default defineGithubTheme({
|
|||||||
default: "#1f2328",
|
default: "#1f2328",
|
||||||
disabled: "#818b98",
|
disabled: "#818b98",
|
||||||
done: "#8250df",
|
done: "#8250df",
|
||||||
|
muted: "#59636e",
|
||||||
neutral: "#59636e",
|
neutral: "#59636e",
|
||||||
severe: "#bc4c00",
|
severe: "#bc4c00",
|
||||||
sponsors: "#bf3989",
|
sponsors: "#bf3989",
|
||||||
success: "#1a7f37",
|
success: "#1a7f37",
|
||||||
black: "#1f2328",
|
black: "#1f2328",
|
||||||
white: "#ffffff",
|
white: "#ffffff",
|
||||||
muted: "#59636e",
|
|
||||||
},
|
},
|
||||||
bgColor: {
|
bgColor: {
|
||||||
accent: { emphasis: "#0969da", muted: "#ddf4ff" },
|
accent: { emphasis: "#0969da", muted: "#ddf4ff" },
|
||||||
|
|||||||
129
themes/soft-dark.css.ts
Normal file
129
themes/soft-dark.css.ts
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
import { defineGithubTheme } from "src/core/github";
|
||||||
|
import { prettylights2Chroma } from "src/core/prettylights";
|
||||||
|
|
||||||
|
export default defineGithubTheme(
|
||||||
|
{
|
||||||
|
isDarkTheme: true,
|
||||||
|
display: {
|
||||||
|
brown: { fgColor: "#b69a6d" },
|
||||||
|
cyan: { fgColor: "#07ace4" },
|
||||||
|
indigo: { fgColor: "#9899ec" },
|
||||||
|
lemon: { fgColor: "#ba9b12" },
|
||||||
|
olive: { fgColor: "#a2a626" },
|
||||||
|
teal: { fgColor: "#1cb0ab" },
|
||||||
|
},
|
||||||
|
diffBlob: {
|
||||||
|
addtionNum: { bgColor: "#57ab5a4d" },
|
||||||
|
addtionWord: { bgColor: "#46954a66" },
|
||||||
|
deletionNum: { bgColor: "#e5534b4d" },
|
||||||
|
deletionWord: { bgColor: "#e5534b66" },
|
||||||
|
hunkNum: { bgColor: { rest: "#143d79" } },
|
||||||
|
},
|
||||||
|
fgColor: {
|
||||||
|
accent: "#478be6",
|
||||||
|
attention: "#c69026",
|
||||||
|
danger: "#e5534b",
|
||||||
|
default: "#d1d7e0",
|
||||||
|
disabled: "#656c76",
|
||||||
|
done: "#986ee2",
|
||||||
|
muted: "#9198a1",
|
||||||
|
neutral: "#9198a1",
|
||||||
|
severe: "#cc6b2c",
|
||||||
|
sponsors: "#c96198",
|
||||||
|
success: "#57ab5a",
|
||||||
|
black: "#010409",
|
||||||
|
white: "#cdd9e5",
|
||||||
|
},
|
||||||
|
bgColor: {
|
||||||
|
accent: { emphasis: "#316dca", muted: "#4184e41a" },
|
||||||
|
attention: { muted: "#ae7c1426" },
|
||||||
|
success: { emphasis: "#347d39", muted: "#46954a26" },
|
||||||
|
danger: { muted: "#e5534b1a" },
|
||||||
|
done: { emphasis: "#8256d0" },
|
||||||
|
default: "#212830",
|
||||||
|
inset: "#151b23",
|
||||||
|
muted: "#262c36",
|
||||||
|
neutral: { muted: "#656c7633" },
|
||||||
|
},
|
||||||
|
borderColor: {
|
||||||
|
accent: { emphasis: "#316dca" },
|
||||||
|
default: "#3d444d",
|
||||||
|
attention: { emphasis: "#966600" },
|
||||||
|
success: { emphasis: "#347d39" },
|
||||||
|
done: { emphasis: "#8256d0" },
|
||||||
|
muted: "#3d444db3",
|
||||||
|
translucent: "#cdd9e526",
|
||||||
|
},
|
||||||
|
button: {
|
||||||
|
primary: { fgColor: { rest: "#ffffff" }, bgColor: { hover: "#3b8640" } },
|
||||||
|
danger: { fgColor: { rest: "#ea5c53", hover: "#ffffff" }, bgColor: { hover: "#ad2e2c" } },
|
||||||
|
},
|
||||||
|
control: {
|
||||||
|
bgColor: { active: "#3d444d", hover: "#2f3742", rest: "#2a313c" },
|
||||||
|
transparent: { bgColor: { active: "#656c7633", hover: "#656c7626", selected: "#656c761a" } },
|
||||||
|
},
|
||||||
|
shadow: { floating: { small: "#01040966" } },
|
||||||
|
overlay: { backdrop: { bgColor: "#262c3666" } },
|
||||||
|
underlineNav: { borderColor: { active: "#ec775c" } },
|
||||||
|
contribution: {
|
||||||
|
default: {
|
||||||
|
bgColor: { num0: "#2a313c", num1: "#1b4721", num2: "#2b6a30", num3: "#46954a", num4: "#6bc46d" },
|
||||||
|
borderColor: { num0: "#0104090d" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
prettylights2Chroma({
|
||||||
|
syntax: {
|
||||||
|
brackethighlighter: {
|
||||||
|
angle: "#9198a1",
|
||||||
|
unmatched: "#e5534b",
|
||||||
|
},
|
||||||
|
carriage: {
|
||||||
|
return: {
|
||||||
|
bg: "#ad2e2c",
|
||||||
|
text: "#f0f6fc",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
comment: "#9198a1",
|
||||||
|
constant: "#6cb6ff",
|
||||||
|
constantOtherReferenceLink: "#96d0ff",
|
||||||
|
entity: "#dcbdfb",
|
||||||
|
entityTag: "#8ddb8c",
|
||||||
|
invalid: {
|
||||||
|
illegal: {
|
||||||
|
bg: "#922323",
|
||||||
|
text: "#f0f6fc",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
keyword: "#f47067",
|
||||||
|
markup: {
|
||||||
|
bold: "#f0f6fc",
|
||||||
|
changed: {
|
||||||
|
bg: "#682d0f",
|
||||||
|
text: "#ffddb0",
|
||||||
|
},
|
||||||
|
deleted: {
|
||||||
|
bg: "#78191b",
|
||||||
|
text: "#ffd8d3",
|
||||||
|
},
|
||||||
|
heading: "#316dca",
|
||||||
|
ignored: {
|
||||||
|
bg: "#255ab2",
|
||||||
|
text: "#f0f6fc",
|
||||||
|
},
|
||||||
|
inserted: {
|
||||||
|
bg: "#1b4721",
|
||||||
|
text: "#b4f1b4",
|
||||||
|
},
|
||||||
|
italic: "#f0f6fc",
|
||||||
|
list: "#eac55f",
|
||||||
|
},
|
||||||
|
metaDiffRange: "#dcbdfb",
|
||||||
|
storageModifierImport: "#f0f6fc",
|
||||||
|
string: "#96d0ff",
|
||||||
|
stringRegexp: "#8ddb8c",
|
||||||
|
sublimelinterGutterMark: "#3d444d",
|
||||||
|
variable: "#f69d50",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
);
|
||||||
Reference in New Issue
Block a user