diff --git a/.gitignore b/.gitignore index 3399f39c0..df1f37a8a 100644 --- a/.gitignore +++ b/.gitignore @@ -50,3 +50,10 @@ vite.config.ts.* *.sw? .history .cursor + +# AI +.agent +.agents +.claude +.codex +skills-lock.json diff --git a/.npmrc b/.npmrc index aeac1ae91..6d28fabf4 100644 --- a/.npmrc +++ b/.npmrc @@ -1,8 +1,8 @@ registry=https://registry.npmmirror.com public-hoist-pattern[]=lefthook public-hoist-pattern[]=eslint -public-hoist-pattern[]=prettier -public-hoist-pattern[]=prettier-plugin-tailwindcss +public-hoist-pattern[]=oxfmt +public-hoist-pattern[]=oxlint public-hoist-pattern[]=stylelint public-hoist-pattern[]=*postcss* public-hoist-pattern[]=@commitlint/* diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index d0b0ca133..000000000 --- a/.prettierignore +++ /dev/null @@ -1,18 +0,0 @@ -dist -dev-dist -.local -.output.js -node_modules -.nvmrc -coverage -CODEOWNERS -.nitro -.output - - -**/*.svg -**/*.sh - -public -.npmrc -*-lock.yaml diff --git a/.prettierrc.mjs b/.prettierrc.mjs deleted file mode 100644 index 3e25d2cfa..000000000 --- a/.prettierrc.mjs +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@vben/prettier-config'; diff --git a/.stylelintignore b/.stylelintignore index f4b2db2c1..3adb33b22 100644 --- a/.stylelintignore +++ b/.stylelintignore @@ -2,3 +2,7 @@ dist public __tests__ coverage +.codex +.claude +.agent +.agents diff --git a/.vscode/extensions.json b/.vscode/extensions.json index e8dc9ed9b..9da1daba8 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -2,12 +2,12 @@ "recommendations": [ // Vue 3 的语言支持 "Vue.volar", - // 将 ESLint JavaScript 集成到 VS Code 中。 - "dbaeumer.vscode-eslint", + // 将 oxlint 集成到 VS Code 中。 + "oxc.oxc-vscode", // Visual Studio Code 的官方 Stylelint 扩展 "stylelint.vscode-stylelint", - // 使用 Prettier 的代码格式化程序 - "esbenp.prettier-vscode", + // 使用 oxfmt 的代码格式化程序 + "oxc.oxc-vscode", // 支持 dotenv 文件语法 "mikestead.dotenv", // 源代码的拼写检查器 diff --git a/.vscode/settings.json b/.vscode/settings.json index 588357bba..d58dc940c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,6 @@ { - "tailwindCSS.experimental.configFile": "internal/tailwind-config/src/index.ts", + "tailwindCSS.experimental.configFile": "packages/@core/base/design/src/css/global.css", + "tailwindCSS.lint.suggestCanonicalClasses": "ignore", // workbench "workbench.list.smoothScrolling": true, "workbench.startupEditor": "newUntitledFile", @@ -31,39 +32,49 @@ "editor.autoClosingOvertype": "always", "editor.autoClosingQuotes": "beforeWhitespace", "editor.wordSeparators": "`~!@#%^&*()=+[{]}\\|;:'\",.<>/?", + "editor.quickSuggestions": { + "strings": "on" + }, + + // lint && format + "oxc.enable": true, + "oxc.typeAware": true, + "oxc.configPath": "oxlint.config.ts", + "oxc.fmt.configPath": "oxfmt.config.ts", "editor.codeActionsOnSave": { - "source.fixAll.eslint": "explicit", + "source.fixAll.oxc": "explicit", "source.fixAll.stylelint": "explicit", "source.organizeImports": "never" }, - "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.defaultFormatter": "oxc.oxc-vscode", "[html]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" + "editor.defaultFormatter": "oxc.oxc-vscode" }, "[css]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" + "editor.defaultFormatter": "oxc.oxc-vscode" }, "[scss]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" + "editor.defaultFormatter": "oxc.oxc-vscode" }, "[javascript]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" + "editor.defaultFormatter": "oxc.oxc-vscode" }, "[typescript]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" + "editor.defaultFormatter": "oxc.oxc-vscode" }, "[json]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" + "editor.defaultFormatter": "oxc.oxc-vscode" }, "[markdown]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" + "editor.defaultFormatter": "oxc.oxc-vscode" }, "[jsonc]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" + "editor.defaultFormatter": "oxc.oxc-vscode" }, "[vue]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" + "editor.defaultFormatter": "oxc.oxc-vscode" }, + // extensions "extensions.ignoreRecommendations": true, @@ -79,6 +90,7 @@ "files.insertFinalNewline": true, "files.simpleDialog.enable": true, "files.associations": { + "*.css": "tailwindcss", "*.ejs": "html", "*.art": "html", "**/tsconfig.json": "jsonc", @@ -118,7 +130,7 @@ // search "search.searchEditor.singleClickBehaviour": "peekDefinition", "search.followSymlinks": false, - // 在使用搜索功能时,将这些文件夹/文件排除在外 + // 使用搜索功能时,将这些文件和文件夹排除在外 "search.exclude": { "**/node_modules": true, "**/*.log": true, @@ -193,7 +205,7 @@ "*": false }, - "cssVariables.lookupFiles": ["packages/core/base/design/src/**/*.css"], + "cssVariables.lookupFiles": ["packages/@core/base/design/src/**/*.css"], "i18n-ally.localesPaths": [ "packages/locales/src/langs", @@ -218,12 +230,10 @@ "*.env": "$(capture).env.*", "README.md": "README*,CHANGELOG*,LICENSE,CNAME", "package.json": "pnpm-lock.yaml,pnpm-workspace.yaml,.gitattributes,.gitignore,.gitpod.yml,.npmrc,.browserslistrc,.node-version,.git*,.tazerc.json", - "eslint.config.mjs": ".eslintignore,.prettierignore,.stylelintignore,.commitlintrc.*,.prettierrc.*,stylelint.config.*,.lintstagedrc.mjs,cspell.json,lefthook.yml", - "tailwind.config.mjs": "postcss.*" + "oxlint.config.ts": ".eslintignore,.stylelintignore,.commitlintrc.*,stylelint.config.*,.lintstagedrc.mjs,cspell.json,lefthook.yml,oxfmt.config.*,eslint.config.*" }, "commentTranslate.hover.enabled": false, "commentTranslate.multiLineMerge": true, "vue.server.hybridMode": true, - "typescript.tsdk": "node_modules/typescript/lib", - "oxc.enable": false + "typescript.tsdk": "node_modules/typescript/lib" } diff --git a/apps/web-antd/package.json b/apps/web-antd/package.json index 75506ad31..904f69a77 100644 --- a/apps/web-antd/package.json +++ b/apps/web-antd/package.json @@ -1,6 +1,6 @@ { "name": "@vben/web-antd", - "version": "5.6.0", + "version": "5.7.0", "homepage": "https://vben.pro", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/apps/web-antd/postcss.config.mjs b/apps/web-antd/postcss.config.mjs deleted file mode 100644 index 3d8070455..000000000 --- a/apps/web-antd/postcss.config.mjs +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@vben/tailwind-config/postcss'; diff --git a/apps/web-antd/src/views/dashboard/analytics/index.vue b/apps/web-antd/src/views/dashboard/analytics/index.vue index 5e3d6d285..e794c99a9 100644 --- a/apps/web-antd/src/views/dashboard/analytics/index.vue +++ b/apps/web-antd/src/views/dashboard/analytics/index.vue @@ -76,10 +76,10 @@ const chartTabs: TabOption[] = [
- + - + diff --git a/apps/web-antd/tailwind.config.mjs b/apps/web-antd/tailwind.config.mjs deleted file mode 100644 index f17f556fa..000000000 --- a/apps/web-antd/tailwind.config.mjs +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@vben/tailwind-config'; diff --git a/apps/web-antd/tsconfig.json b/apps/web-antd/tsconfig.json index 33f79aaf8..3bf28ff0d 100644 --- a/apps/web-antd/tsconfig.json +++ b/apps/web-antd/tsconfig.json @@ -2,7 +2,6 @@ "$schema": "https://json.schemastore.org/tsconfig", "extends": "@vben/tsconfig/web-app.json", "compilerOptions": { - "baseUrl": ".", "paths": { "#/*": ["./src/*"] }, diff --git a/apps/web-antd/tsconfig.node.json b/apps/web-antd/tsconfig.node.json index c2f0d86cc..36e9fb5fb 100644 --- a/apps/web-antd/tsconfig.node.json +++ b/apps/web-antd/tsconfig.node.json @@ -6,5 +6,5 @@ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", "noEmit": false }, - "include": ["vite.config.mts"] + "include": ["vite.config.ts"] } diff --git a/apps/web-antd/vite.config.mts b/apps/web-antd/vite.config.ts similarity index 100% rename from apps/web-antd/vite.config.mts rename to apps/web-antd/vite.config.ts diff --git a/apps/web-antdv-next/package.json b/apps/web-antdv-next/package.json index 704cef04b..928084d99 100644 --- a/apps/web-antdv-next/package.json +++ b/apps/web-antdv-next/package.json @@ -1,6 +1,6 @@ { "name": "@vben/web-antdv-next", - "version": "5.6.0", + "version": "5.7.0", "homepage": "https://vben.pro", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/apps/web-antdv-next/postcss.config.mjs b/apps/web-antdv-next/postcss.config.mjs deleted file mode 100644 index 3d8070455..000000000 --- a/apps/web-antdv-next/postcss.config.mjs +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@vben/tailwind-config/postcss'; diff --git a/apps/web-antdv-next/src/store/auth.ts b/apps/web-antdv-next/src/store/auth.ts index 6f7a3750c..90af35c8d 100644 --- a/apps/web-antdv-next/src/store/auth.ts +++ b/apps/web-antdv-next/src/store/auth.ts @@ -98,8 +98,7 @@ export const useAuthStore = defineStore('auth', () => { } async function fetchUserInfo() { - let userInfo: null | UserInfo = null; - userInfo = await getUserInfoApi(); + const userInfo = await getUserInfoApi(); userStore.setUserInfo(userInfo); return userInfo; } diff --git a/apps/web-antdv-next/src/views/_core/authentication/code-login.vue b/apps/web-antdv-next/src/views/_core/authentication/code-login.vue index acfd1fd78..02370f7dc 100644 --- a/apps/web-antdv-next/src/views/_core/authentication/code-login.vue +++ b/apps/web-antdv-next/src/views/_core/authentication/code-login.vue @@ -55,8 +55,7 @@ const formSchema = computed((): VbenFormSchema[] => { * @param values 登录表单数据 */ async function handleLogin(values: Recordable) { - // eslint-disable-next-line no-console - console.log(values); + void values; } diff --git a/apps/web-antdv-next/src/views/_core/authentication/forget-password.vue b/apps/web-antdv-next/src/views/_core/authentication/forget-password.vue index fef0d4279..10444d0ae 100644 --- a/apps/web-antdv-next/src/views/_core/authentication/forget-password.vue +++ b/apps/web-antdv-next/src/views/_core/authentication/forget-password.vue @@ -29,8 +29,7 @@ const formSchema = computed((): VbenFormSchema[] => { }); function handleSubmit(value: Recordable) { - // eslint-disable-next-line no-console - console.log('reset email:', value); + void value; } diff --git a/apps/web-antdv-next/src/views/_core/authentication/register.vue b/apps/web-antdv-next/src/views/_core/authentication/register.vue index b1a5de726..8c4295310 100644 --- a/apps/web-antdv-next/src/views/_core/authentication/register.vue +++ b/apps/web-antdv-next/src/views/_core/authentication/register.vue @@ -82,8 +82,7 @@ const formSchema = computed((): VbenFormSchema[] => { }); function handleSubmit(value: Recordable) { - // eslint-disable-next-line no-console - console.log('register submit:', value); + void value; } diff --git a/apps/web-antdv-next/src/views/dashboard/analytics/index.vue b/apps/web-antdv-next/src/views/dashboard/analytics/index.vue index 5e3d6d285..e794c99a9 100644 --- a/apps/web-antdv-next/src/views/dashboard/analytics/index.vue +++ b/apps/web-antdv-next/src/views/dashboard/analytics/index.vue @@ -76,10 +76,10 @@ const chartTabs: TabOption[] = [
- + - + diff --git a/apps/web-antdv-next/tailwind.config.mjs b/apps/web-antdv-next/tailwind.config.mjs deleted file mode 100644 index f17f556fa..000000000 --- a/apps/web-antdv-next/tailwind.config.mjs +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@vben/tailwind-config'; diff --git a/apps/web-antdv-next/tsconfig.json b/apps/web-antdv-next/tsconfig.json index 02c287fe6..858a0ec08 100644 --- a/apps/web-antdv-next/tsconfig.json +++ b/apps/web-antdv-next/tsconfig.json @@ -2,7 +2,6 @@ "$schema": "https://json.schemastore.org/tsconfig", "extends": "@vben/tsconfig/web-app.json", "compilerOptions": { - "baseUrl": ".", "paths": { "#/*": ["./src/*"] } diff --git a/apps/web-antdv-next/tsconfig.node.json b/apps/web-antdv-next/tsconfig.node.json index c2f0d86cc..36e9fb5fb 100644 --- a/apps/web-antdv-next/tsconfig.node.json +++ b/apps/web-antdv-next/tsconfig.node.json @@ -6,5 +6,5 @@ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", "noEmit": false }, - "include": ["vite.config.mts"] + "include": ["vite.config.ts"] } diff --git a/apps/web-antdv-next/vite.config.mts b/apps/web-antdv-next/vite.config.ts similarity index 100% rename from apps/web-antdv-next/vite.config.mts rename to apps/web-antdv-next/vite.config.ts diff --git a/apps/web-ele/package.json b/apps/web-ele/package.json index f04fa87b8..d842d8261 100644 --- a/apps/web-ele/package.json +++ b/apps/web-ele/package.json @@ -1,6 +1,6 @@ { "name": "@vben/web-ele", - "version": "5.6.0", + "version": "5.7.0", "homepage": "https://vben.pro", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/apps/web-ele/postcss.config.mjs b/apps/web-ele/postcss.config.mjs deleted file mode 100644 index 3d8070455..000000000 --- a/apps/web-ele/postcss.config.mjs +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@vben/tailwind-config/postcss'; diff --git a/apps/web-ele/src/types/element-plus-style-css.d.ts b/apps/web-ele/src/types/element-plus-style-css.d.ts new file mode 100644 index 000000000..ba7a76672 --- /dev/null +++ b/apps/web-ele/src/types/element-plus-style-css.d.ts @@ -0,0 +1,4 @@ +declare module 'element-plus/es/components/*/style/css' { + const sideEffect: undefined; + export default sideEffect; +} diff --git a/apps/web-ele/src/views/dashboard/analytics/index.vue b/apps/web-ele/src/views/dashboard/analytics/index.vue index 5e3d6d285..e794c99a9 100644 --- a/apps/web-ele/src/views/dashboard/analytics/index.vue +++ b/apps/web-ele/src/views/dashboard/analytics/index.vue @@ -76,10 +76,10 @@ const chartTabs: TabOption[] = [
- + - + diff --git a/apps/web-ele/tailwind.config.mjs b/apps/web-ele/tailwind.config.mjs deleted file mode 100644 index f17f556fa..000000000 --- a/apps/web-ele/tailwind.config.mjs +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@vben/tailwind-config'; diff --git a/apps/web-ele/tsconfig.json b/apps/web-ele/tsconfig.json index 33f79aaf8..3bf28ff0d 100644 --- a/apps/web-ele/tsconfig.json +++ b/apps/web-ele/tsconfig.json @@ -2,7 +2,6 @@ "$schema": "https://json.schemastore.org/tsconfig", "extends": "@vben/tsconfig/web-app.json", "compilerOptions": { - "baseUrl": ".", "paths": { "#/*": ["./src/*"] }, diff --git a/apps/web-ele/tsconfig.node.json b/apps/web-ele/tsconfig.node.json index c2f0d86cc..36e9fb5fb 100644 --- a/apps/web-ele/tsconfig.node.json +++ b/apps/web-ele/tsconfig.node.json @@ -6,5 +6,5 @@ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", "noEmit": false }, - "include": ["vite.config.mts"] + "include": ["vite.config.ts"] } diff --git a/apps/web-ele/vite.config.mts b/apps/web-ele/vite.config.ts similarity index 100% rename from apps/web-ele/vite.config.mts rename to apps/web-ele/vite.config.ts diff --git a/apps/web-naive/package.json b/apps/web-naive/package.json index 1f117998b..450e9c066 100644 --- a/apps/web-naive/package.json +++ b/apps/web-naive/package.json @@ -1,6 +1,6 @@ { "name": "@vben/web-naive", - "version": "5.6.0", + "version": "5.7.0", "homepage": "https://vben.pro", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/apps/web-naive/postcss.config.mjs b/apps/web-naive/postcss.config.mjs deleted file mode 100644 index 3d8070455..000000000 --- a/apps/web-naive/postcss.config.mjs +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@vben/tailwind-config/postcss'; diff --git a/apps/web-naive/src/views/dashboard/analytics/index.vue b/apps/web-naive/src/views/dashboard/analytics/index.vue index 5e3d6d285..e794c99a9 100644 --- a/apps/web-naive/src/views/dashboard/analytics/index.vue +++ b/apps/web-naive/src/views/dashboard/analytics/index.vue @@ -76,10 +76,10 @@ const chartTabs: TabOption[] = [
- + - + diff --git a/apps/web-naive/tailwind.config.mjs b/apps/web-naive/tailwind.config.mjs deleted file mode 100644 index f17f556fa..000000000 --- a/apps/web-naive/tailwind.config.mjs +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@vben/tailwind-config'; diff --git a/apps/web-naive/tsconfig.json b/apps/web-naive/tsconfig.json index 02c287fe6..858a0ec08 100644 --- a/apps/web-naive/tsconfig.json +++ b/apps/web-naive/tsconfig.json @@ -2,7 +2,6 @@ "$schema": "https://json.schemastore.org/tsconfig", "extends": "@vben/tsconfig/web-app.json", "compilerOptions": { - "baseUrl": ".", "paths": { "#/*": ["./src/*"] } diff --git a/apps/web-naive/tsconfig.node.json b/apps/web-naive/tsconfig.node.json index c2f0d86cc..36e9fb5fb 100644 --- a/apps/web-naive/tsconfig.node.json +++ b/apps/web-naive/tsconfig.node.json @@ -6,5 +6,5 @@ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", "noEmit": false }, - "include": ["vite.config.mts"] + "include": ["vite.config.ts"] } diff --git a/apps/web-naive/vite.config.mts b/apps/web-naive/vite.config.ts similarity index 100% rename from apps/web-naive/vite.config.mts rename to apps/web-naive/vite.config.ts diff --git a/apps/web-tdesign/package.json b/apps/web-tdesign/package.json index 0f7669f12..1374be31a 100644 --- a/apps/web-tdesign/package.json +++ b/apps/web-tdesign/package.json @@ -1,6 +1,6 @@ { "name": "@vben/web-tdesign", - "version": "5.6.0", + "version": "5.7.0", "homepage": "https://vben.pro", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/apps/web-tdesign/postcss.config.mjs b/apps/web-tdesign/postcss.config.mjs deleted file mode 100644 index 3d8070455..000000000 --- a/apps/web-tdesign/postcss.config.mjs +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@vben/tailwind-config/postcss'; diff --git a/apps/web-tdesign/src/views/dashboard/analytics/index.vue b/apps/web-tdesign/src/views/dashboard/analytics/index.vue index 5e3d6d285..e794c99a9 100644 --- a/apps/web-tdesign/src/views/dashboard/analytics/index.vue +++ b/apps/web-tdesign/src/views/dashboard/analytics/index.vue @@ -76,10 +76,10 @@ const chartTabs: TabOption[] = [
- + - + diff --git a/apps/web-tdesign/tailwind.config.mjs b/apps/web-tdesign/tailwind.config.mjs deleted file mode 100644 index f17f556fa..000000000 --- a/apps/web-tdesign/tailwind.config.mjs +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@vben/tailwind-config'; diff --git a/apps/web-tdesign/tsconfig.json b/apps/web-tdesign/tsconfig.json index 02c287fe6..858a0ec08 100644 --- a/apps/web-tdesign/tsconfig.json +++ b/apps/web-tdesign/tsconfig.json @@ -2,7 +2,6 @@ "$schema": "https://json.schemastore.org/tsconfig", "extends": "@vben/tsconfig/web-app.json", "compilerOptions": { - "baseUrl": ".", "paths": { "#/*": ["./src/*"] } diff --git a/apps/web-tdesign/tsconfig.node.json b/apps/web-tdesign/tsconfig.node.json index c2f0d86cc..36e9fb5fb 100644 --- a/apps/web-tdesign/tsconfig.node.json +++ b/apps/web-tdesign/tsconfig.node.json @@ -6,5 +6,5 @@ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", "noEmit": false }, - "include": ["vite.config.mts"] + "include": ["vite.config.ts"] } diff --git a/apps/web-tdesign/vite.config.mts b/apps/web-tdesign/vite.config.ts similarity index 100% rename from apps/web-tdesign/vite.config.mts rename to apps/web-tdesign/vite.config.ts diff --git a/cspell.json b/cspell.json index 33f0a7f4c..be3527752 100644 --- a/cspell.json +++ b/cspell.json @@ -15,6 +15,7 @@ "cascader", "clsx", "cropperjs", + "dedup", "defu", "demi", "dotenv", @@ -46,6 +47,9 @@ "noreferrer", "nprogress", "nuxt", + "organisation", + "oxfmt", + "oxlint", "pinia", "prefixs", "publint", @@ -56,8 +60,11 @@ "sonner", "sortablejs", "styl", + "tabler", "taze", "tdesign", + "tsgolint", + "Turborepo", "ui-kit", "uicons", "unplugin", diff --git a/docs/.vitepress/components/demo-preview.vue b/docs/.vitepress/components/demo-preview.vue index 983a95062..cca9c749d 100644 --- a/docs/.vitepress/components/demo-preview.vue +++ b/docs/.vitepress/components/demo-preview.vue @@ -27,7 +27,7 @@ const parsedFiles = computed(() => {
- + ERROR: The preview directory does not exist. Please check the 'dir' diff --git a/docs/.vitepress/components/preview-group.vue b/docs/.vitepress/components/preview-group.vue index e08e921aa..ccf1f7e87 100644 --- a/docs/.vitepress/components/preview-group.vue +++ b/docs/.vitepress/components/preview-group.vue @@ -56,15 +56,15 @@ const toggleOpen = () => { - diff --git a/packages/@core/ui-kit/menu-ui/src/sub-menu.vue b/packages/@core/ui-kit/menu-ui/src/sub-menu.vue index e4d471fb0..57e17dee6 100644 --- a/packages/@core/ui-kit/menu-ui/src/sub-menu.vue +++ b/packages/@core/ui-kit/menu-ui/src/sub-menu.vue @@ -4,7 +4,6 @@ import type { MenuRecordRaw } from '@vben-core/typings'; import { computed } from 'vue'; import { MenuBadge, MenuItem, SubMenu as SubMenuComp } from './components'; -// eslint-disable-next-line import/no-self-import import SubMenu from './sub-menu.vue'; interface Props { diff --git a/packages/@core/ui-kit/menu-ui/tailwind.config.mjs b/packages/@core/ui-kit/menu-ui/tailwind.config.mjs deleted file mode 100644 index f17f556fa..000000000 --- a/packages/@core/ui-kit/menu-ui/tailwind.config.mjs +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@vben/tailwind-config'; diff --git a/packages/@core/ui-kit/popup-ui/package.json b/packages/@core/ui-kit/popup-ui/package.json index 338da305f..fb885d3a5 100644 --- a/packages/@core/ui-kit/popup-ui/package.json +++ b/packages/@core/ui-kit/popup-ui/package.json @@ -1,6 +1,6 @@ { "name": "@vben-core/popup-ui", - "version": "5.6.0", + "version": "5.7.0", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/packages/@core/ui-kit/popup-ui/postcss.config.mjs b/packages/@core/ui-kit/popup-ui/postcss.config.mjs deleted file mode 100644 index 3d8070455..000000000 --- a/packages/@core/ui-kit/popup-ui/postcss.config.mjs +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@vben/tailwind-config/postcss'; diff --git a/packages/@core/ui-kit/popup-ui/src/alert/alert.vue b/packages/@core/ui-kit/popup-ui/src/alert/alert.vue index 6b52a1121..0aae28904 100644 --- a/packages/@core/ui-kit/popup-ui/src/alert/alert.vue +++ b/packages/@core/ui-kit/popup-ui/src/alert/alert.vue @@ -147,7 +147,7 @@ async function handleOpenChange(val: boolean) { :class=" cn( containerClass, - 'left-0 right-0 mx-auto flex max-h-[80%] flex-col p-0 duration-300 sm:w-[520px] sm:max-w-[80%] sm:rounded-[var(--radius)]', + 'inset-x-0 mx-auto flex max-h-[80%] flex-col p-0 duration-300 sm:w-[520px] sm:max-w-[80%] sm:rounded-(--radius)', { 'border border-border': bordered, 'shadow-3xl': !bordered, diff --git a/packages/@core/ui-kit/popup-ui/src/drawer/__tests__/drawer-api.test.ts b/packages/@core/ui-kit/popup-ui/src/drawer/__tests__/drawer-api.test.ts index 365a2e4a0..8420bb9cb 100644 --- a/packages/@core/ui-kit/popup-ui/src/drawer/__tests__/drawer-api.test.ts +++ b/packages/@core/ui-kit/popup-ui/src/drawer/__tests__/drawer-api.test.ts @@ -13,21 +13,20 @@ vi.mock('@vben-core/shared/store', () => { return this._state; } private _state: DrawerState; + private subscribers: Array<(state: DrawerState) => void> = []; - private options: any; - - constructor(initialState: DrawerState, options: any) { + constructor(initialState: DrawerState) { this._state = initialState; - this.options = options; - } - - batch(cb: () => void) { - cb(); } setState(fn: (prev: DrawerState) => DrawerState) { this._state = fn(this._state); - this.options.onUpdate(); + this.subscribers.forEach((sub) => sub(this._state)); + } + + subscribe(fn: (state: DrawerState) => void) { + this.subscribers.push(fn); + return { unsubscribe: () => {} }; } }, }; diff --git a/packages/@core/ui-kit/popup-ui/src/drawer/drawer-api.ts b/packages/@core/ui-kit/popup-ui/src/drawer/drawer-api.ts index a4a3ac4aa..f5d9f3365 100644 --- a/packages/@core/ui-kit/popup-ui/src/drawer/drawer-api.ts +++ b/packages/@core/ui-kit/popup-ui/src/drawer/drawer-api.ts @@ -56,23 +56,18 @@ export class DrawerApi { title: '', }; - this.store = new Store( - { - ...defaultState, - ...storeState, - }, - { - onUpdate: () => { - const state = this.store.state; - if (state?.isOpen === this.state?.isOpen) { - this.state = state; - } else { - this.state = state; - this.api.onOpenChange?.(!!state?.isOpen); - } - }, - }, - ); + this.store = new Store({ + ...defaultState, + ...storeState, + }); + + this.store.subscribe((state) => { + const prevIsOpen = this.state?.isOpen; + this.state = state; + if (state?.isOpen !== prevIsOpen) { + this.api.onOpenChange?.(!!state?.isOpen); + } + }); this.state = this.store.state; this.api = { onBeforeClose, diff --git a/packages/@core/ui-kit/popup-ui/src/drawer/drawer.vue b/packages/@core/ui-kit/popup-ui/src/drawer/drawer.vue index ceca51e77..ea7bcb230 100644 --- a/packages/@core/ui-kit/popup-ui/src/drawer/drawer.vue +++ b/packages/@core/ui-kit/popup-ui/src/drawer/drawer.vue @@ -186,8 +186,8 @@ const getForceMount = computed(() => { :append-to="getAppendTo" :class=" cn('flex w-[520px] flex-col', drawerClass, { - '!w-full': isMobile || placement === 'bottom' || placement === 'top', - 'max-h-[100vh]': placement === 'bottom' || placement === 'top', + 'w-full!': isMobile || placement === 'bottom' || placement === 'top', + 'max-h-screen': placement === 'bottom' || placement === 'top', hidden: isClosed, }) " @@ -210,7 +210,7 @@ const getForceMount = computed(() => { v-if="showHeader" :class=" cn( - '!flex flex-row items-center justify-between border-b px-6 py-5', + 'flex! flex-row items-center justify-between border-b px-6 py-5', headerClass, { 'px-4 py-3': closable, @@ -224,7 +224,7 @@ const getForceMount = computed(() => { v-if="closable && closeIconPlacement === 'left'" as-child :disabled="submitting" - class="ml-[2px] cursor-pointer rounded-full opacity-80 transition-opacity hover:opacity-100 focus:outline-none disabled:pointer-events-none data-[state=open]:bg-secondary" + class="ml-[2px] cursor-pointer rounded-full opacity-80 transition-opacity hover:opacity-100 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-secondary" > @@ -234,7 +234,7 @@ const getForceMount = computed(() => { @@ -265,7 +265,7 @@ const getForceMount = computed(() => { v-if="closable && closeIconPlacement === 'right'" as-child :disabled="submitting" - class="ml-[2px] cursor-pointer rounded-full opacity-80 transition-opacity hover:opacity-100 focus:outline-none disabled:pointer-events-none data-[state=open]:bg-secondary" + class="ml-[2px] cursor-pointer rounded-full opacity-80 transition-opacity hover:opacity-100 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-secondary" > diff --git a/packages/@core/ui-kit/popup-ui/src/modal/__tests__/modal-api.test.ts b/packages/@core/ui-kit/popup-ui/src/modal/__tests__/modal-api.test.ts index 1edd477e7..5067f5fa5 100644 --- a/packages/@core/ui-kit/popup-ui/src/modal/__tests__/modal-api.test.ts +++ b/packages/@core/ui-kit/popup-ui/src/modal/__tests__/modal-api.test.ts @@ -12,21 +12,20 @@ vi.mock('@vben-core/shared/store', () => { return this._state; } private _state: ModalState; + private subscribers: Array<(state: ModalState) => void> = []; - private options: any; - - constructor(initialState: ModalState, options: any) { + constructor(initialState: ModalState) { this._state = initialState; - this.options = options; - } - - batch(cb: () => void) { - cb(); } setState(fn: (prev: ModalState) => ModalState) { this._state = fn(this._state); - this.options.onUpdate(); + this.subscribers.forEach((sub) => sub(this._state)); + } + + subscribe(fn: (state: ModalState) => void) { + this.subscribers.push(fn); + return { unsubscribe: () => {} }; } }, }; diff --git a/packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts b/packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts index f60870b3f..650155871 100644 --- a/packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts +++ b/packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts @@ -62,25 +62,19 @@ export class ModalApi { animationType: 'slide', }; - this.store = new Store( - { - ...defaultState, - ...storeState, - }, - { - onUpdate: () => { - const state = this.store.state; + this.store = new Store({ + ...defaultState, + ...storeState, + }); - // 每次更新状态时,都会调用 onOpenChange 回调函数 - if (state?.isOpen === this.state?.isOpen) { - this.state = state; - } else { - this.state = state; - this.api.onOpenChange?.(!!state?.isOpen); - } - }, - }, - ); + this.store.subscribe((state) => { + // 每次更新状态时,都会调用 onOpenChange 回调函数 + const prevIsOpen = this.state?.isOpen; + this.state = state; + if (state?.isOpen !== prevIsOpen) { + this.api.onOpenChange?.(!!state?.isOpen); + } + }); this.state = this.store.state; diff --git a/packages/@core/ui-kit/popup-ui/src/modal/modal.ts b/packages/@core/ui-kit/popup-ui/src/modal/modal.ts index fa41344ee..4debaff4b 100644 --- a/packages/@core/ui-kit/popup-ui/src/modal/modal.ts +++ b/packages/@core/ui-kit/popup-ui/src/modal/modal.ts @@ -1,6 +1,6 @@ import type { Component, Ref } from 'vue'; -import type { MaybePromise } from '@vben-core/typings'; +import type { ClassType, MaybePromise } from '@vben-core/typings'; import type { ModalApi } from './modal-api'; @@ -30,7 +30,7 @@ export interface ModalProps { */ centered?: boolean; - class?: string; + class?: ClassType; /** * 是否显示右上角的关闭按钮 @@ -60,7 +60,7 @@ export interface ModalProps { * 确定按钮文字 */ confirmText?: string; - contentClass?: string; + contentClass?: ClassType; /** * 弹窗描述 */ @@ -79,7 +79,7 @@ export interface ModalProps { * @default true */ footer?: boolean; - footerClass?: string; + footerClass?: ClassType; /** * 是否全屏 * @default false @@ -95,7 +95,7 @@ export interface ModalProps { * @default true */ header?: boolean; - headerClass?: string; + headerClass?: ClassType; /** * 弹窗是否显示 * @default false diff --git a/packages/@core/ui-kit/popup-ui/src/modal/modal.vue b/packages/@core/ui-kit/popup-ui/src/modal/modal.vue index e93e4c12d..0fe26f64b 100644 --- a/packages/@core/ui-kit/popup-ui/src/modal/modal.vue +++ b/packages/@core/ui-kit/popup-ui/src/modal/modal.vue @@ -240,14 +240,13 @@ function handleClosed() { :append-to="getAppendTo" :class=" cn( - 'left-0 right-0 top-[10vh] mx-auto flex max-h-[80%] w-[520px] flex-col p-0', - shouldFullscreen ? 'sm:rounded-none' : 'sm:rounded-[var(--radius)]', + 'inset-x-0 top-[10vh] mx-auto flex max-h-[80%] w-[520px] flex-col p-0', + shouldFullscreen ? 'sm:rounded-none' : 'sm:rounded-(--radius)', modalClass, { 'border border-border': bordered, 'shadow-3xl': !bordered, - 'left-0 top-0 size-full max-h-full !translate-x-0 !translate-y-0': - shouldFullscreen, + 'top-0 left-0 size-full max-h-full translate-0!': shouldFullscreen, 'top-1/2': centered && !shouldFullscreen, 'duration-300': !dragging, hidden: isClosed, @@ -320,7 +319,7 @@ function handleClosed() {