feat: support code-group-icons, default not enable, close #509

This commit is contained in:
YunYouJun 2025-03-14 23:24:35 +08:00
parent 3ffc4a386a
commit 07936971c9
10 changed files with 66 additions and 21 deletions

View File

@ -109,4 +109,6 @@ export default defineValaxyConfig<ThemeConfig>({
// }),
addonTest(),
],
groupIcons: {},
})

View File

@ -3,7 +3,7 @@ import pkg from '../../package.json'
</script>
<template>
<div text="white sm" bg="dark" rounded-lg>
<div class="p-4" text="white sm" bg="dark" rounded-lg>
<pre>
🌌 Valaxy <span text-blue>v{{ pkg.version }}</span>

View File

@ -669,7 +669,17 @@ Details Content
## Add Code Block Title {lang="en"}
使用以下语法:
默认**关闭**,你可以通过将其设置为空对象来开启:
```ts [valaxy.config.ts]
import { defineValaxyConfig } from 'valaxy'
export default defineValaxyConfig({
groupIcons: {}
})
```
此时,使用以下语法:
````md
```ts [valaxy.config.ts]

View File

@ -223,4 +223,6 @@ export default defineValaxyConfig<PressTheme.Config>({
],
// theme: 'material-theme-palenight',
},
groupIcons: {},
})

View File

@ -1,4 +1,6 @@
<script setup lang="ts">
// import it in setup/main.ts for ssg
import 'virtual:group-icons.css'
// import { defineAsyncComponent } from 'vue'
/**
* @see @valaxyjs/devtools

View File

@ -14,8 +14,12 @@ import AppLink from './components/AppLink.vue'
import setupMain from './setup/main'
import { setupValaxyDevTools } from './utils/dev'
// generate user styles
/**
* user styles
* virtual module
*/
import '#valaxy/styles'
import 'uno.css'
const valaxyConfig = initValaxyConfig()

View File

@ -27,7 +27,6 @@ import footnotePlugin from 'markdown-it-footnote'
// https://www.npmjs.com/package/markdown-it-image-figures
import imageFigures from 'markdown-it-image-figures'
import TaskLists from 'markdown-it-task-lists'
import { groupIconMdPlugin } from 'vitepress-plugin-group-icons'
import { linkPlugin } from './plugins/link'
import { containerPlugin } from './plugins/markdown-it/container'
@ -152,12 +151,15 @@ export async function setupMarkdownPlugins(
md.use(TaskLists)
if (options?.config.groupIcons) {
const { groupIconMdPlugin } = await import('vitepress-plugin-group-icons')
md.use(groupIconMdPlugin, {
titleBar: { includeSnippet: true },
})
}
if (mdOptions.config)
mdOptions.config(md)
md.use(groupIconMdPlugin, {
titleBar: { includeSnippet: true },
})
return md as MarkdownIt
}

View File

@ -12,7 +12,6 @@ import { resolve } from 'pathe'
import Components from 'unplugin-vue-components/vite'
import Layouts from 'vite-plugin-vue-layouts'
import { groupIconVitePlugin } from 'vitepress-plugin-group-icons'
import { customElements } from '../constants'
import { createConfigPlugin } from './extendConfig'
import { createMarkdownPlugin } from './markdown'
@ -123,18 +122,44 @@ export async function ViteValaxyPlugins(
include: roots.map(root => `${root}/locales/**`),
}),
groupIconVitePlugin({
customIcon: {
nodejs: 'vscode-icons:file-type-node',
playwright: 'vscode-icons:file-type-playwright',
typedoc: 'vscode-icons:file-type-typedoc',
eslint: 'vscode-icons:file-type-eslint',
},
...valaxyConfig.groupIcons,
}),
createFixPlugins(options),
]
if (valaxyConfig.groupIcons) {
const { groupIconVitePlugin } = await import('vitepress-plugin-group-icons')
plugins.push(
groupIconVitePlugin({
customIcon: {
nodejs: 'vscode-icons:file-type-node',
playwright: 'vscode-icons:file-type-playwright',
typedoc: 'vscode-icons:file-type-typedoc',
eslint: 'vscode-icons:file-type-eslint',
},
...valaxyConfig.groupIcons,
}),
)
}
else {
// virtual module placeholder
const virtualCssId = 'virtual:group-icons.css'
const resolvedVirtualCssId = `\0${virtualCssId}`
plugins.push({
name: 'valaxy:virtual:group-icons.css',
resolveId(id) {
if (id === virtualCssId) {
return resolvedVirtualCssId
}
return void 0
},
async load(id) {
if (id === resolvedVirtualCssId) {
return ''
}
return void 0
},
})
}
if (valaxyConfig.visualizer) {
try {
const visualizer = (await import('rollup-plugin-visualizer')).visualizer

View File

@ -160,7 +160,7 @@ export interface ValaxyExtendConfig {
* @see https://github.com/btd/rollup-plugin-visualizer
*/
visualizer?: PluginVisualizerOptions
groupIcons?: GroupIconsOptions
groupIcons?: Partial<GroupIconsOptions>
/**
* unocss presets
* @see https://unocss.dev/guide/presets

View File

@ -38,8 +38,6 @@ export const templateStyles: VirtualModuleTemplate = {
// https://unocss.dev/guide/style-reset#tailwind-compat
// minus the background color override for buttons to avoid conflicts with UI frameworks
imports.unshift(`import "${await resolveImportUrl('@unocss/reset/tailwind-compat.css')}"`)
imports.push('import "uno.css"')
imports.push('import "virtual:group-icons.css"')
return imports.join('\n')
},