mirror of
https://github.com/lutinglt/gitea-github-theme.git
synced 2025-10-26 13:00:31 +00:00
Compare commits
5 Commits
49b08975d2
...
a6efed8f03
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a6efed8f03 | ||
|
|
98446a9bb3 | ||
|
|
7fe76d6444 | ||
|
|
ce1bc3b762 | ||
|
|
f68ad71ddb |
2
.github/release.md
vendored
2
.github/release.md
vendored
@@ -26,6 +26,8 @@
|
||||
- Issue/PR 评论边框样式同步
|
||||
- Code/Runner/PR 提示框样式同步
|
||||
- 下拉菜单样式同步
|
||||
- 选择下拉菜单样式同步
|
||||
- 热力图颜色和样式同步
|
||||
|
||||
## 🎈 Perf
|
||||
|
||||
|
||||
@@ -62,5 +62,8 @@
|
||||
"prettier-plugin-organize-imports"
|
||||
],
|
||||
"organizeImportsSkipDestructiveCodeActions": false
|
||||
},
|
||||
"dependencies": {
|
||||
"typescript-styled-plugin": "^0.18.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -121,6 +121,21 @@ export type GithubColor = {
|
||||
bgColor: string;
|
||||
};
|
||||
};
|
||||
contribution: {
|
||||
default: {
|
||||
bgColor: {
|
||||
num0: string;
|
||||
num1: string;
|
||||
num2: string;
|
||||
num3: string;
|
||||
num4: string;
|
||||
num5: string;
|
||||
};
|
||||
borderColor: {
|
||||
num0: string;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
export function defineGithubTheme(githubColor: GithubColor): Theme {
|
||||
@@ -343,6 +358,26 @@ export function defineGithubTheme(githubColor: GithubColor): Theme {
|
||||
small: `0px 0px 0px 1px ${themeVars.color.light.border}, 0px 6px 12px -3px ${themeVars.color.shadow.self}, 0px 6px 18px 0px ${themeVars.color.shadow.self};`,
|
||||
},
|
||||
},
|
||||
contribution: {
|
||||
default: {
|
||||
bgColor: {
|
||||
num0: githubColor.contribution.default.bgColor.num0,
|
||||
num1: githubColor.contribution.default.bgColor.num1,
|
||||
num2: githubColor.contribution.default.bgColor.num2,
|
||||
num3: githubColor.contribution.default.bgColor.num3,
|
||||
num4: githubColor.contribution.default.bgColor.num4,
|
||||
num5: githubColor.contribution.default.bgColor.num5,
|
||||
},
|
||||
borderColor: {
|
||||
num0: githubColor.contribution.default.borderColor.num0,
|
||||
num1: themeVars.github.contribution.default.borderColor.num0,
|
||||
num2: themeVars.github.contribution.default.borderColor.num0,
|
||||
num3: themeVars.github.contribution.default.borderColor.num0,
|
||||
num4: themeVars.github.contribution.default.borderColor.num0,
|
||||
num5: themeVars.github.contribution.default.borderColor.num0,
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
return defineTheme({
|
||||
isDarkTheme: githubColor.isDarkTheme,
|
||||
|
||||
@@ -175,4 +175,31 @@ export const github = {
|
||||
small: null,
|
||||
},
|
||||
},
|
||||
/** 热力图 */
|
||||
contribution: {
|
||||
default: {
|
||||
bgColor: {
|
||||
num0: null,
|
||||
num1: null,
|
||||
num2: null,
|
||||
num3: null,
|
||||
num4: null,
|
||||
/** github 无此颜色需自行计算
|
||||
* @example 可参考这个颜色 `--color-prettylights-syntax-string-regexp`
|
||||
*/
|
||||
num5: null,
|
||||
},
|
||||
borderColor: {
|
||||
num0: null,
|
||||
num1: null,
|
||||
num2: null,
|
||||
num3: null,
|
||||
num4: null,
|
||||
/** github 无此颜色需自行计算
|
||||
* @example 目前均取 num0 的值
|
||||
*/
|
||||
num5: null,
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
// Made by Luting ^-^
|
||||
.vch__day__square,
|
||||
.vch__legend__wrapper rect {
|
||||
rx: 2px;
|
||||
ry: 2px;
|
||||
width: 9px;
|
||||
height: 9px;
|
||||
outline: 1px solid rgba(255, 255, 255, 0.05);
|
||||
border-radius: 0.5px;
|
||||
outline-offset: -1px;
|
||||
}
|
||||
|
||||
.vch__legend__wrapper rect {
|
||||
rx: 3px;
|
||||
ry: 3px;
|
||||
border-radius: 1px;
|
||||
}
|
||||
|
||||
.vch__day__square,
|
||||
.vch__legend__wrapper rect {
|
||||
&[style="fill: var(--color-secondary-alpha-60);"] {
|
||||
outline: 1px solid rgba(27, 31, 35, 0.06);
|
||||
background: #161b22;
|
||||
fill: #161b22 !important;
|
||||
}
|
||||
|
||||
&[style="fill: var(--color-primary-light-4);"] {
|
||||
background: #0e4429;
|
||||
fill: #0e4429 !important;
|
||||
}
|
||||
|
||||
&[style="fill: var(--color-primary-light-2);"] {
|
||||
background: #006d32;
|
||||
fill: #006d32 !important;
|
||||
}
|
||||
|
||||
&[style="fill: var(--color-primary);"] {
|
||||
background: #238636;
|
||||
fill: #238636 !important;
|
||||
}
|
||||
|
||||
&[style="fill: var(--color-primary-dark-2);"] {
|
||||
background: #39d353;
|
||||
fill: #39d353 !important;
|
||||
}
|
||||
|
||||
&[style="fill: var(--color-primary-dark-4);"] {
|
||||
background: #44ff61;
|
||||
fill: #44ff61 !important;
|
||||
}
|
||||
}
|
||||
51
styles/components/heatmap.tsx
Normal file
51
styles/components/heatmap.tsx
Normal file
@@ -0,0 +1,51 @@
|
||||
import { css, themeVars } from "src/types/vars";
|
||||
|
||||
export const heatmap = css`
|
||||
.vch__container {
|
||||
// 覆盖热力图和图例的背景色
|
||||
.vch__day__square,
|
||||
.vch__legend__wrapper rect {
|
||||
// 圆角
|
||||
rx: 2.5px;
|
||||
ry: 2.5px;
|
||||
// hover 时的圆角
|
||||
border-radius: 0.75px;
|
||||
// 宽度和高度可以用来控制间隔
|
||||
width: 9.5px;
|
||||
height: 9.5px;
|
||||
// 边框
|
||||
outline: 0.5px solid ${themeVars.github.contribution.default.borderColor.num0};
|
||||
// 边框向内偏移
|
||||
outline-offset: -0.5px;
|
||||
|
||||
&[style="fill: var(--color-secondary-alpha-60);"] {
|
||||
fill: ${themeVars.github.contribution.default.bgColor.num0} !important;
|
||||
}
|
||||
|
||||
&[style="fill: var(--color-primary-light-4);"] {
|
||||
fill: ${themeVars.github.contribution.default.bgColor.num1} !important;
|
||||
outline-color: ${themeVars.github.contribution.default.borderColor.num1};
|
||||
}
|
||||
|
||||
&[style="fill: var(--color-primary-light-2);"] {
|
||||
fill: ${themeVars.github.contribution.default.bgColor.num2} !important;
|
||||
outline-color: ${themeVars.github.contribution.default.borderColor.num2};
|
||||
}
|
||||
|
||||
&[style="fill: var(--color-primary);"] {
|
||||
fill: ${themeVars.github.contribution.default.bgColor.num3} !important;
|
||||
outline-color: ${themeVars.github.contribution.default.borderColor.num3};
|
||||
}
|
||||
|
||||
&[style="fill: var(--color-primary-dark-2);"] {
|
||||
fill: ${themeVars.github.contribution.default.bgColor.num4} !important;
|
||||
outline-color: ${themeVars.github.contribution.default.borderColor.num4};
|
||||
}
|
||||
|
||||
&[style="fill: var(--color-primary-dark-4);"] {
|
||||
fill: ${themeVars.github.contribution.default.bgColor.num5} !important;
|
||||
outline-color: ${themeVars.github.contribution.default.borderColor.num5};
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
@@ -2,6 +2,7 @@ import "./actions";
|
||||
import "./clone";
|
||||
import "./dashboard";
|
||||
import "./diff";
|
||||
import "./heatmap";
|
||||
import "./issue";
|
||||
import "./repo";
|
||||
import "./setting";
|
||||
|
||||
@@ -53,3 +53,19 @@ export const commit = css`
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
// 文件列表页面下的分支按钮
|
||||
export const branchButton = css`
|
||||
.page-content.repository.file.list {
|
||||
.ui.dropdown.branch-selector-dropdown > .menu > .menu {
|
||||
// 显示默认分支的标签
|
||||
.ui.label {
|
||||
background-color: ${themeVars.color.menu};
|
||||
border: 1px solid ${themeVars.color.light.border};
|
||||
margin-top: 1px;
|
||||
margin-left: auto;
|
||||
margin-right: 16px; // gitea 有 RSS 留出足够的空间
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
@@ -1,144 +0,0 @@
|
||||
// Made by Luting ^-^
|
||||
// 下拉菜单动画
|
||||
@keyframes overlay-appear {
|
||||
0% {
|
||||
opacity: 0;
|
||||
transform: translateY(-12px);
|
||||
}
|
||||
|
||||
35% {
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
|
||||
100% {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
// 下拉菜单
|
||||
.ui.dropdown .menu {
|
||||
margin-top: 3.75px !important;
|
||||
border-radius: 12px !important;
|
||||
overflow: hidden auto;
|
||||
box-shadow:
|
||||
0px 0px 0px 0.5px #30363d,
|
||||
0px 6px 12px -3px #01040966,
|
||||
0px 6px 18px 0px #01040966;
|
||||
animation: 200ms cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running overlay-appear;
|
||||
|
||||
> .item {
|
||||
padding: 8px 10px !important;
|
||||
}
|
||||
}
|
||||
|
||||
.ui.dropdown .menu,
|
||||
.branch-tag-item.active,
|
||||
.ui.pointing.dropdown > .menu:not(.hidden):after {
|
||||
background: var(--color-box-header) !important;
|
||||
}
|
||||
|
||||
%item-style {
|
||||
background: #1f6feb;
|
||||
}
|
||||
|
||||
.ui.dropdown .menu > .item.context:hover {
|
||||
@extend %item-style;
|
||||
}
|
||||
|
||||
.user-main-content,
|
||||
.repo-setting-content,
|
||||
.user-setting-content,
|
||||
.org-setting-content,
|
||||
.admin-setting-content {
|
||||
.ui.dropdown .menu > .item {
|
||||
&:hover {
|
||||
@extend %item-style;
|
||||
|
||||
a {
|
||||
color: var(--color-text);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 按钮菜单选项(主要为仓库)
|
||||
.tippy-box .flex-items-block,
|
||||
.ui.dropdown > .visible.menu .scrolling.menu,
|
||||
.ui.button.dropdown .menu {
|
||||
.item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
border-radius: var(--border-radius);
|
||||
margin: 0 8px;
|
||||
|
||||
&:first-of-type {
|
||||
border-radius: var(--border-radius);
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
&:last-of-type {
|
||||
border-radius: var(--border-radius);
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 下拉菜单分隔线
|
||||
.ui.dropdown .menu > .divider {
|
||||
border: 0;
|
||||
height: 1px;
|
||||
background-color: #3d444db3;
|
||||
margin-top: calc(7px);
|
||||
margin-bottom: 8px;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.ui.dropdown.branch-selector-dropdown > .visible.menu {
|
||||
// 仓库分支列表下查看操作按钮
|
||||
> .item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
border-radius: var(--border-radius);
|
||||
margin: 8px;
|
||||
padding: 6px 8px !important;
|
||||
}
|
||||
|
||||
.scrolling.menu .item {
|
||||
padding: 6px 16px !important;
|
||||
|
||||
// 分支菜单下划线
|
||||
&:before {
|
||||
content: " ";
|
||||
display: block;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
border-width: 1px 0px 0px;
|
||||
border-style: solid;
|
||||
border-image: initial;
|
||||
border-color: #3d444db3;
|
||||
}
|
||||
|
||||
&:first-of-type:before {
|
||||
border-color: transparent;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
&:before {
|
||||
border-color: transparent;
|
||||
}
|
||||
|
||||
+ :before {
|
||||
border-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
.ui.label {
|
||||
margin-top: 1px;
|
||||
margin-left: auto;
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12,27 +12,35 @@ export const dropdown = css`
|
||||
border: unset !important;
|
||||
border-radius: 12px !important;
|
||||
box-shadow: ${themeVars.github.shadow.floating.small} !important;
|
||||
|
||||
> .item {
|
||||
// 忽略隐藏
|
||||
> .item:not(.tw-hidden) {
|
||||
display: flex !important;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
padding: 8px 10px !important;
|
||||
border-radius: ${otherThemeVars.border.radius} !important;
|
||||
margin: 0 0.5rem;
|
||||
&:first-child {
|
||||
&:first-of-type {
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
&:last-child {
|
||||
// 不知道为什么提交差异对比页面操作中的 cherrypick 按钮无法被选中
|
||||
&.cherry-pick-button,
|
||||
&:last-of-type {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
&:hover {
|
||||
background-color: ${themeVars.github.control.transparent.bgColor.hover} !important;
|
||||
}
|
||||
&.active,
|
||||
&.selected {
|
||||
background-color: ${themeVars.color.active} !important;
|
||||
&:hover {
|
||||
background-color: ${themeVars.github.control.transparent.bgColor.hover} !important;
|
||||
}
|
||||
}
|
||||
svg {
|
||||
color: ${themeVars.color.text.light.num1};
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
}
|
||||
> .divider {
|
||||
margin: 0.5rem 0;
|
||||
@@ -54,4 +62,37 @@ export const dropdown = css`
|
||||
.ui.selection.dropdown .menu > .item {
|
||||
border: unset;
|
||||
}
|
||||
// 修复一些菜单下的菜单元素溢出问题
|
||||
// 目前主要为分支菜单
|
||||
.ui.dropdown .menu .menu {
|
||||
border-radius: 12px !important;
|
||||
}
|
||||
// 修复仪表板切换控制用户按钮阴影被覆盖缺少边框线的问题
|
||||
.ui.dropdown .menu.context-user-switch .scrolling.menu {
|
||||
box-shadow: ${themeVars.github.shadow.floating.small} !important;
|
||||
}
|
||||
`;
|
||||
|
||||
// 选择框的下拉菜单看起来像普通按钮
|
||||
export const selectionDropdown = css`
|
||||
.ui.selection.dropdown,
|
||||
.ui.selection.dropdown.active {
|
||||
background-color: ${themeVars.color.button};
|
||||
border-color: ${themeVars.color.light.border};
|
||||
border-radius: ${otherThemeVars.border.radius};
|
||||
padding: 9px 16px;
|
||||
min-height: 33px;
|
||||
&:focus {
|
||||
background: ${themeVars.color.button};
|
||||
border-color: ${themeVars.color.light.border};
|
||||
}
|
||||
&:hover {
|
||||
background: ${themeVars.color.hover.self};
|
||||
border-color: ${themeVars.color.light.border};
|
||||
}
|
||||
}
|
||||
.ui.selection.dropdown.active {
|
||||
border-bottom-left-radius: ${otherThemeVars.border.radius} !important;
|
||||
border-bottom-right-radius: ${otherThemeVars.border.radius} !important;
|
||||
}
|
||||
`;
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// organize-imports-ignore
|
||||
// tslint:disable:ordered-imports
|
||||
// 组件导入有顺序, 禁止插件优化
|
||||
import "./radius"; // 圆角, 此样式为基础样式, 确保在其他样式之前导入
|
||||
import "./button"; // 按钮
|
||||
import "./chroma"; // 代码高亮
|
||||
import "./codemirror"; // codemirror 样式
|
||||
@@ -5,6 +9,5 @@ import "./dropdown"; // 下拉框
|
||||
import "./input"; // 输入框
|
||||
import "./label"; // 标签
|
||||
import "./modal"; // 弹窗
|
||||
import "./radius"; // 圆角
|
||||
import "./svg"; // svg 图标
|
||||
import "./tippy"; // 提示框
|
||||
|
||||
@@ -280,3 +280,11 @@ export const fixRadius = css`
|
||||
border-bottom-right-radius: ${otherThemeVars.border.radius};
|
||||
}
|
||||
`;
|
||||
|
||||
// 修复一些根本无法理解的生效顺序
|
||||
export const fixWhyRadius = css`
|
||||
// Issue 菜单第一个按钮
|
||||
.ui.secondary.menu .item {
|
||||
border-radius: ${otherThemeVars.border.radius};
|
||||
}
|
||||
`;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { animation } from "src/core/theme";
|
||||
import { css, themeVars } from "src/types/vars";
|
||||
import { css, otherThemeVars, themeVars } from "src/types/vars";
|
||||
|
||||
// 一些界面内的提示框, 比如克隆按钮, PR信息, Runner信息 等
|
||||
export const tippyBox = css`
|
||||
@@ -23,5 +23,17 @@ export const tippyBox = css`
|
||||
}
|
||||
}
|
||||
}
|
||||
// 差异对比中文件路径行右侧的三个点菜单
|
||||
&[data-theme="menu"] {
|
||||
.tippy-content {
|
||||
padding: 0.5rem;
|
||||
.item {
|
||||
border-radius: ${otherThemeVars.border.radius};
|
||||
&:hover {
|
||||
background-color: ${themeVars.github.control.transparent.bgColor.hover};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
@@ -105,7 +105,9 @@ const github: GithubColor = {
|
||||
bgColor: {
|
||||
active: "#656c7640",
|
||||
hover: "#656c7633",
|
||||
selected: "#656c761a",
|
||||
// 非官方颜色, 实在是太淡了
|
||||
// selected: "#656c761a",
|
||||
selected: "#656c762a",
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -117,6 +119,21 @@ const github: GithubColor = {
|
||||
bgColor: "#21283066",
|
||||
},
|
||||
},
|
||||
contribution: {
|
||||
default: {
|
||||
bgColor: {
|
||||
num0: "#151b23",
|
||||
num1: "#033a16",
|
||||
num2: "#196c2e",
|
||||
num3: "#2ea043",
|
||||
num4: "#56d364",
|
||||
num5: "#7ee787",
|
||||
},
|
||||
borderColor: {
|
||||
num0: "#0104090d",
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export default defineGithubTheme(github);
|
||||
|
||||
@@ -3,6 +3,12 @@
|
||||
"plugins": [
|
||||
{
|
||||
"name": "typescript-plugin-css-modules"
|
||||
},
|
||||
{
|
||||
"name": "typescript-styled-plugin",
|
||||
"lint": {
|
||||
"validProperties": "rx,ry"
|
||||
}
|
||||
}
|
||||
],
|
||||
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
|
||||
@@ -11,7 +17,6 @@
|
||||
"lib": ["ES2023"],
|
||||
"module": "ESNext",
|
||||
"skipLibCheck": true,
|
||||
|
||||
/* Bundler mode */
|
||||
"moduleResolution": "bundler",
|
||||
"allowImportingTsExtensions": true,
|
||||
@@ -19,7 +24,6 @@
|
||||
"moduleDetection": "force",
|
||||
"noEmit": true,
|
||||
"jsx": "react-jsx",
|
||||
|
||||
/* Linting */
|
||||
"strict": true,
|
||||
"noUnusedLocals": true,
|
||||
|
||||
Reference in New Issue
Block a user