mirror of
https://github.com/fantastic-admin/basic.git
synced 2026-10-06 16:03:23 +08:00
147 lines
3.9 KiB
TypeScript
Executable File
147 lines
3.9 KiB
TypeScript
Executable File
import path from 'node:path'
|
|
import { fileURLToPath } from 'node:url'
|
|
import { darkTheme, lightTheme } from '@fantastic-admin/themes'
|
|
import { entriesToCss, toArray } from '@unocss/core'
|
|
import {
|
|
defineConfig,
|
|
presetAttributify,
|
|
presetIcons,
|
|
presetTypography,
|
|
presetWind4,
|
|
transformerCompileClass,
|
|
transformerDirectives,
|
|
transformerVariantGroup,
|
|
} from 'unocss'
|
|
import { presetAnimations } from 'unocss-preset-animations'
|
|
|
|
const projectRoot = path.dirname(fileURLToPath(import.meta.url))
|
|
|
|
export default defineConfig({
|
|
content: {
|
|
pipeline: {
|
|
include: [
|
|
/\.(vue|svelte|[jt]sx|mdx?|astro|elm|php|phtml|html)($|\?)/,
|
|
'src/**/*.{js,ts}',
|
|
path.resolve(projectRoot, 'packages/components/**/*.{vue,js,ts}'),
|
|
],
|
|
},
|
|
},
|
|
shortcuts: [
|
|
[/^flex-?(col)?-(start|end|center|baseline|stretch)-?(start|end|center|between|around|evenly|left|right)?$/, ([, col, items, justify]) => {
|
|
const cls = ['flex']
|
|
if (col === 'col') {
|
|
cls.push('flex-col')
|
|
}
|
|
if (items === 'center' && !justify) {
|
|
cls.push('items-center')
|
|
cls.push('justify-center')
|
|
}
|
|
else {
|
|
cls.push(`items-${items}`)
|
|
if (justify) {
|
|
cls.push(`justify-${justify}`)
|
|
}
|
|
}
|
|
return cls.join(' ')
|
|
}],
|
|
],
|
|
presets: [
|
|
presetWind4(),
|
|
presetAnimations(),
|
|
presetAttributify(),
|
|
presetIcons({
|
|
collectionsNodeResolvePath: projectRoot,
|
|
extraProperties: {
|
|
'display': 'inline-block',
|
|
'vertical-align': 'middle',
|
|
},
|
|
}),
|
|
presetTypography(),
|
|
{
|
|
name: 'unocss-preset-shadcn',
|
|
preflights: [
|
|
{
|
|
getCSS: () => {
|
|
const returnCss = [
|
|
toArray(':root').map(root => `${root}{color-scheme:light;${entriesToCss(Object.entries(lightTheme))}}`).join(''),
|
|
toArray('.dark').map(root => `${root}{color-scheme:dark;${entriesToCss(Object.entries(darkTheme))}}`).join(''),
|
|
]
|
|
return `
|
|
${returnCss.join('\n')}
|
|
|
|
::selection {
|
|
color: oklch(var(--primary-foreground));
|
|
background-color: oklch(var(--primary));
|
|
}
|
|
|
|
* {
|
|
border-color: oklch(var(--border));
|
|
scrollbar-color: oklch(var(--border)) transparent;
|
|
scrollbar-width: thin;
|
|
}
|
|
|
|
body {
|
|
color: oklch(var(--foreground));
|
|
background: oklch(var(--background));
|
|
}
|
|
|
|
button:not(:disabled),
|
|
[role="button"]:not(:disabled) {
|
|
cursor: pointer;
|
|
}
|
|
`
|
|
},
|
|
},
|
|
],
|
|
theme: {
|
|
colors: {
|
|
background: 'oklch(var(--background))',
|
|
foreground: 'oklch(var(--foreground))',
|
|
card: {
|
|
DEFAULT: 'oklch(var(--card))',
|
|
foreground: 'oklch(var(--card-foreground))',
|
|
},
|
|
popover: {
|
|
DEFAULT: 'oklch(var(--popover))',
|
|
foreground: 'oklch(var(--popover-foreground))',
|
|
},
|
|
primary: {
|
|
DEFAULT: 'oklch(var(--primary))',
|
|
foreground: 'oklch(var(--primary-foreground))',
|
|
},
|
|
secondary: {
|
|
DEFAULT: 'oklch(var(--secondary))',
|
|
foreground: 'oklch(var(--secondary-foreground))',
|
|
},
|
|
muted: {
|
|
DEFAULT: 'oklch(var(--muted))',
|
|
foreground: 'oklch(var(--muted-foreground))',
|
|
},
|
|
accent: {
|
|
DEFAULT: 'oklch(var(--accent))',
|
|
foreground: 'oklch(var(--accent-foreground))',
|
|
},
|
|
destructive: 'oklch(var(--destructive))',
|
|
border: 'oklch(var(--border))',
|
|
input: 'oklch(var(--input))',
|
|
ring: 'oklch(var(--ring))',
|
|
},
|
|
radius: {
|
|
xl: 'calc(var(--radius) + 4px)',
|
|
lg: 'var(--radius)',
|
|
md: 'calc(var(--radius) - 2px)',
|
|
sm: 'calc(var(--radius) - 4px)',
|
|
},
|
|
},
|
|
},
|
|
],
|
|
transformers: [
|
|
transformerDirectives(),
|
|
transformerVariantGroup(),
|
|
transformerCompileClass(),
|
|
],
|
|
configDeps: [
|
|
path.resolve(projectRoot, 'packages/themes/index.ts'),
|
|
],
|
|
})
|