blog/src/types/index.d.ts
2025-04-07 01:17:25 +08:00

94 lines
1.8 KiB
TypeScript

import type { supportedLangs } from '@/i18n/config'
type Exclude<T, U> = T extends U ? never : T
export interface ThemeConfig {
site: {
title: string
subtitle: string
description: string
i18nTitle: boolean
author: string
url: string
favicon: string
}
color: {
mode: 'light' | 'dark' | 'auto'
light: {
primary: string
secondary: string
background: string
}
dark: {
primary: string
secondary: string
background: string
}
}
global: {
locale: typeof supportedLangs[number]
moreLocales: typeof supportedLangs[number][]
fontStyle: 'sans' | 'serif'
dateFormat: 'YYYY-MM-DD' | 'MM-DD-YYYY' | 'DD-MM-YYYY' | 'MONTH DAY YYYY' | 'DAY MONTH YYYY'
titleGap: 1 | 2 | 3
katex: boolean
}
comment: {
enabled: boolean
provider?: 'waline' | 'giscus'
waline?: {
serverURL?: string
emoji?: string[]
search?: boolean
imageUploader?: boolean
},
giscus?: {
repo: string
repoID: string
category: string
categoryID: string
mapping: 'pathname' | 'url' | 'title'
inputPosition: 'top' | 'bottom'
loading: 'lazy' | 'embed'
}
}
seo?: {
twitterID?: string
verification?: {
google?: string
bing?: string
yandex?: string
baidu?: string
}
googleAnalyticsID?: string
umamiAnalyticsID?: string
follow?: {
feedID?: string
userID?: string
}
apiflashKey?: string
}
footer: {
links: {
name: string
url: string
}[]
startYear: number
}
preload: {
linkPrefetch: 'hover' | 'tap' | 'viewport' | 'load'
commentURL?: string
imageHostURL?: string
customGoogleAnalyticsJS?: string
customUmamiAnalyticsJS?: string
}
}
export default ThemeConfig