mirror of
https://github.com/fmhy/edit.git
synced 2025-07-28 23:02:16 +10:00
140 lines
3.2 KiB
TypeScript
140 lines
3.2 KiB
TypeScript
/**
|
|
* Copyright (c) 2025 taskylizard. Apache License 2.0.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
import type { Rule } from 'unocss'
|
|
import { colors, shortcuts } from '@fmhy/colors'
|
|
import {
|
|
defineConfig,
|
|
presetAttributify,
|
|
presetIcons,
|
|
presetUno,
|
|
presetWebFonts,
|
|
transformerDirectives
|
|
} from 'unocss'
|
|
|
|
const colorScales = [
|
|
'50',
|
|
'100',
|
|
'200',
|
|
'300',
|
|
'400',
|
|
'500',
|
|
'600',
|
|
'700',
|
|
'800',
|
|
'900',
|
|
'950'
|
|
] as const
|
|
|
|
const colorPattern = Object.keys(colors).join('|')
|
|
const createColorRules = (type: 'text' | 'bg' | 'border'): Rule[] => {
|
|
const property =
|
|
type === 'text'
|
|
? 'color'
|
|
: type === 'bg'
|
|
? 'background-color'
|
|
: 'border-color'
|
|
|
|
return colorScales.map(
|
|
(scale) =>
|
|
[
|
|
new RegExp(`^${type}-(${colorPattern})-${scale}$`),
|
|
([, color]) => ({ [property]: colors[color][scale] })
|
|
] as const
|
|
)
|
|
}
|
|
|
|
export default defineConfig({
|
|
content: {
|
|
filesystem: ['.vitepress/config.mts', '.vitepress/constants.ts']
|
|
},
|
|
theme: {
|
|
colors: {
|
|
...colors,
|
|
primary: 'var(--vp-c-brand-1)',
|
|
bg: 'var(--vp-c-bg)',
|
|
'bg-alt': 'var(--vp-c-bg-alt)',
|
|
'bg-elv': 'var(--vp-c-bg-elv)',
|
|
text: 'var(--vp-c-text-1)',
|
|
'text-2': 'var(--vp-c-text-2)',
|
|
div: 'var(--vp-c-divider)'
|
|
}
|
|
},
|
|
rules: [
|
|
// Brand color utilities
|
|
[
|
|
/^brand-(\d+)$/,
|
|
([, d]) => ({ color: `var(--vp-c-brand-${d})` })
|
|
] as const,
|
|
[
|
|
/^bg-brand-(\d+)$/,
|
|
([, d]) => ({ 'background-color': `var(--vp-c-brand-${d})` })
|
|
] as const,
|
|
[
|
|
/^border-brand-(\d+)$/,
|
|
([, d]) => ({ 'border-color': `var(--vp-c-brand-${d})` })
|
|
] as const,
|
|
[
|
|
/^text-brand-(\d+)$/,
|
|
([, d]) => ({ color: `var(--vp-c-brand-${d})` })
|
|
] as const,
|
|
|
|
// Color scale utilities
|
|
...createColorRules('text'),
|
|
...createColorRules('bg'),
|
|
...createColorRules('border'),
|
|
|
|
[
|
|
'kbd',
|
|
{
|
|
display: 'inline-block',
|
|
padding: '0.2em 0.4em',
|
|
fontSize: '0.75em',
|
|
fontWeight: '500',
|
|
lineHeight: '1',
|
|
color: 'var(--vp-c-text-1)',
|
|
backgroundColor: 'rgb(var(--vp-c-bg-alt))',
|
|
borderRadius: '4px'
|
|
}
|
|
]
|
|
],
|
|
presets: [
|
|
presetUno(),
|
|
presetAttributify(),
|
|
presetIcons({
|
|
autoInstall: true,
|
|
scale: 1.2,
|
|
extraProperties: {
|
|
display: 'inline-block',
|
|
'vertical-align': 'middle'
|
|
},
|
|
collections: {
|
|
custom: {
|
|
privateersclub: () =>
|
|
fetch('https://megathread.pages.dev/favicon.svg').then((r) =>
|
|
r.text()
|
|
)
|
|
}
|
|
}
|
|
}),
|
|
presetWebFonts({
|
|
fonts: {
|
|
mono: 'Geist Mono'
|
|
}
|
|
})
|
|
],
|
|
transformers: [transformerDirectives()]
|
|
})
|