diff --git a/apps/web-antd/src/views/dashboard/analytics/analytics-visits-sales.vue b/apps/web-antd/src/views/dashboard/analytics/analytics-visits-sales.vue index 02f50912..6ff52086 100644 --- a/apps/web-antd/src/views/dashboard/analytics/analytics-visits-sales.vue +++ b/apps/web-antd/src/views/dashboard/analytics/analytics-visits-sales.vue @@ -24,7 +24,7 @@ onMounted(() => { { name: '定制', value: 310 }, { name: '技术支持', value: 274 }, { name: '远程', value: 400 }, - ].sort((a, b) => { + ].toSorted((a, b) => { return a.value - b.value; }), name: '商业占比', diff --git a/apps/web-ele/src/views/dashboard/analytics/analytics-visits-sales.vue b/apps/web-ele/src/views/dashboard/analytics/analytics-visits-sales.vue index 02f50912..6ff52086 100644 --- a/apps/web-ele/src/views/dashboard/analytics/analytics-visits-sales.vue +++ b/apps/web-ele/src/views/dashboard/analytics/analytics-visits-sales.vue @@ -24,7 +24,7 @@ onMounted(() => { { name: '定制', value: 310 }, { name: '技术支持', value: 274 }, { name: '远程', value: 400 }, - ].sort((a, b) => { + ].toSorted((a, b) => { return a.value - b.value; }), name: '商业占比', diff --git a/apps/web-naive/src/views/dashboard/analytics/analytics-visits-sales.vue b/apps/web-naive/src/views/dashboard/analytics/analytics-visits-sales.vue index 02f50912..6ff52086 100644 --- a/apps/web-naive/src/views/dashboard/analytics/analytics-visits-sales.vue +++ b/apps/web-naive/src/views/dashboard/analytics/analytics-visits-sales.vue @@ -24,7 +24,7 @@ onMounted(() => { { name: '定制', value: 310 }, { name: '技术支持', value: 274 }, { name: '远程', value: 400 }, - ].sort((a, b) => { + ].toSorted((a, b) => { return a.value - b.value; }), name: '商业占比', diff --git a/apps/web-tdesign/package.json b/apps/web-tdesign/package.json index 9ff0bb7b..aa504d32 100644 --- a/apps/web-tdesign/package.json +++ b/apps/web-tdesign/package.json @@ -44,11 +44,8 @@ "dayjs": "catalog:", "es-toolkit": "catalog:", "pinia": "catalog:", - "tdesign-vue-next": "^1.17.1", + "tdesign-vue-next": "catalog:", "vue": "catalog:", "vue-router": "catalog:" - }, - "devDependencies": { - "@types/lodash-es": "^4.17.12" } } diff --git a/apps/web-tdesign/src/views/dashboard/analytics/analytics-visits-sales.vue b/apps/web-tdesign/src/views/dashboard/analytics/analytics-visits-sales.vue index 02f50912..6ff52086 100644 --- a/apps/web-tdesign/src/views/dashboard/analytics/analytics-visits-sales.vue +++ b/apps/web-tdesign/src/views/dashboard/analytics/analytics-visits-sales.vue @@ -24,7 +24,7 @@ onMounted(() => { { name: '定制', value: 310 }, { name: '技术支持', value: 274 }, { name: '远程', value: 400 }, - ].sort((a, b) => { + ].toSorted((a, b) => { return a.value - b.value; }), name: '商业占比', diff --git a/cspell.json b/cspell.json index 4e853e97..6b94b723 100644 --- a/cspell.json +++ b/cspell.json @@ -42,6 +42,7 @@ "sortablejs", "styl", "taze", + "tdesign", "ui-kit", "uicons", "unplugin", diff --git a/docs/.vitepress/config/plugins/demo-preview.ts b/docs/.vitepress/config/plugins/demo-preview.ts index 03b1698c..ba3863b0 100644 --- a/docs/.vitepress/config/plugins/demo-preview.ts +++ b/docs/.vitepress/config/plugins/demo-preview.ts @@ -84,7 +84,7 @@ export const demoPreviewPlugin = (md: MarkdownRenderer) => { return ''; } const firstString = 'index.vue'; - childFiles = childFiles.sort((a, b) => { + childFiles = childFiles.toSorted((a, b) => { if (a === firstString) return -1; if (b === firstString) return 1; return a.localeCompare(b, 'en', { sensitivity: 'base' }); diff --git a/internal/lint-configs/commitlint-config/index.mjs b/internal/lint-configs/commitlint-config/index.mjs index 3d854399..36c3b09a 100644 --- a/internal/lint-configs/commitlint-config/index.mjs +++ b/internal/lint-configs/commitlint-config/index.mjs @@ -21,7 +21,7 @@ const scopeComplete = execSync('git status --porcelain || true') .trim() .split('\n') .find((r) => ~r.indexOf('M src')) - ?.replace(/(\/)/g, '%%') + ?.replaceAll(/(\/)/g, '%%') ?.match(/src%%((\w|-)*)/)?.[1] ?.replace(/s$/, ''); diff --git a/internal/lint-configs/eslint-config/src/configs/command.ts b/internal/lint-configs/eslint-config/src/configs/command.ts index 67651b23..d0c902de 100644 --- a/internal/lint-configs/eslint-config/src/configs/command.ts +++ b/internal/lint-configs/eslint-config/src/configs/command.ts @@ -3,7 +3,6 @@ import createCommand from 'eslint-plugin-command/config'; export async function command() { return [ { - // @ts-expect-error - no types ...createCommand(), }, ]; diff --git a/internal/lint-configs/eslint-config/src/configs/node.ts b/internal/lint-configs/eslint-config/src/configs/node.ts index fa960d85..f8f26643 100644 --- a/internal/lint-configs/eslint-config/src/configs/node.ts +++ b/internal/lint-configs/eslint-config/src/configs/node.ts @@ -35,7 +35,7 @@ export async function node(): Promise { 'error', { ignores: [], - version: '>=18.0.0', + version: '>=20.12.0', }, ], 'n/prefer-global/buffer': ['error', 'never'], diff --git a/internal/lint-configs/eslint-config/src/configs/perfectionist.ts b/internal/lint-configs/eslint-config/src/configs/perfectionist.ts index 136bfa33..4a7d12fe 100644 --- a/internal/lint-configs/eslint-config/src/configs/perfectionist.ts +++ b/internal/lint-configs/eslint-config/src/configs/perfectionist.ts @@ -4,7 +4,6 @@ import { interopDefault } from '../util'; export async function perfectionist(): Promise { const perfectionistPlugin = await interopDefault( - // @ts-expect-error - no types import('eslint-plugin-perfectionist'), ); diff --git a/internal/lint-configs/eslint-config/src/configs/turbo.ts b/internal/lint-configs/eslint-config/src/configs/turbo.ts index 9f6bf75b..bcc27eb6 100644 --- a/internal/lint-configs/eslint-config/src/configs/turbo.ts +++ b/internal/lint-configs/eslint-config/src/configs/turbo.ts @@ -4,7 +4,6 @@ import { interopDefault } from '../util'; export async function turbo(): Promise { const [pluginTurbo] = await Promise.all([ - // @ts-expect-error - no types interopDefault(import('eslint-config-turbo')), ] as const); diff --git a/internal/lint-configs/eslint-config/src/configs/typescript.ts b/internal/lint-configs/eslint-config/src/configs/typescript.ts index cff9aa4b..2f6f9765 100644 --- a/internal/lint-configs/eslint-config/src/configs/typescript.ts +++ b/internal/lint-configs/eslint-config/src/configs/typescript.ts @@ -5,7 +5,6 @@ import { interopDefault } from '../util'; export async function typescript(): Promise { const [pluginTs, parserTs] = await Promise.all([ interopDefault(import('@typescript-eslint/eslint-plugin')), - // @ts-expect-error missing types interopDefault(import('@typescript-eslint/parser')), ] as const); @@ -27,11 +26,11 @@ export async function typescript(): Promise { }, }, plugins: { - '@typescript-eslint': pluginTs, + '@typescript-eslint': pluginTs as any, }, rules: { - ...pluginTs.configs['eslint-recommended'].overrides?.[0].rules, - ...pluginTs.configs.strict.rules, + ...pluginTs.configs['eslint-recommended']?.overrides?.[0]?.rules, + ...pluginTs.configs.strict?.rules, '@typescript-eslint/ban-ts-comment': [ 'error', { diff --git a/internal/lint-configs/eslint-config/src/configs/vue.ts b/internal/lint-configs/eslint-config/src/configs/vue.ts index a64c55af..5db72992 100644 --- a/internal/lint-configs/eslint-config/src/configs/vue.ts +++ b/internal/lint-configs/eslint-config/src/configs/vue.ts @@ -6,7 +6,6 @@ export async function vue(): Promise { const [pluginVue, parserVue, parserTs] = await Promise.all([ interopDefault(import('eslint-plugin-vue')), interopDefault(import('vue-eslint-parser')), - // @ts-expect-error missing types interopDefault(import('@typescript-eslint/parser')), ] as const); diff --git a/internal/lint-configs/eslint-config/tsconfig.json b/internal/lint-configs/eslint-config/tsconfig.json index b2ec3b61..dbd3bcc8 100644 --- a/internal/lint-configs/eslint-config/tsconfig.json +++ b/internal/lint-configs/eslint-config/tsconfig.json @@ -1,6 +1,9 @@ { "$schema": "https://json.schemastore.org/tsconfig", "extends": "@vben/tsconfig/node.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, "include": ["src"], "exclude": ["node_modules"] } diff --git a/internal/tailwind-config/package.json b/internal/tailwind-config/package.json index 07b26be4..269558cd 100644 --- a/internal/tailwind-config/package.json +++ b/internal/tailwind-config/package.json @@ -53,6 +53,7 @@ "@tailwindcss/typography": "catalog:", "autoprefixer": "catalog:", "cssnano": "catalog:", + "jiti": "catalog:", "postcss": "catalog:", "postcss-antd-fixes": "catalog:", "postcss-import": "catalog:", diff --git a/internal/vite-config/src/config/application.ts b/internal/vite-config/src/config/application.ts index f9808cc7..a5d33c60 100644 --- a/internal/vite-config/src/config/application.ts +++ b/internal/vite-config/src/config/application.ts @@ -114,7 +114,7 @@ function createCssOptions(injectGlobalScss = true): CSSOptions { } return content; }, - api: 'modern', + // api: 'modern', importers: [new NodePackageImporter()], }, } diff --git a/package.json b/package.json index 8fc73127..0d6b6c90 100644 --- a/package.json +++ b/package.json @@ -93,14 +93,14 @@ "unbuild": "catalog:", "vite": "catalog:", "vitest": "catalog:", - "vue": "^3.5.24", + "vue": "catalog:", "vue-tsc": "catalog:" }, "engines": { - "node": ">=20.10.0", - "pnpm": ">=9.12.0" + "node": ">=20.12.0", + "pnpm": ">=10.0.0" }, - "packageManager": "pnpm@10.21.0", + "packageManager": "pnpm@10.22.0", "pnpm": { "peerDependencyRules": { "allowedVersions": { @@ -112,7 +112,7 @@ "@ctrl/tinycolor": "catalog:", "clsx": "catalog:", "esbuild": "0.25.3", - "jiti": "^2.6.1", + "jiti": "catalog:", "pinia": "catalog:", "vue": "catalog:" }, diff --git a/packages/@core/base/design/src/design-tokens/index.ts b/packages/@core/base/design/src/design-tokens/index.ts index 2d031d81..4bf1467d 100644 --- a/packages/@core/base/design/src/design-tokens/index.ts +++ b/packages/@core/base/design/src/design-tokens/index.ts @@ -1,4 +1,2 @@ import './default.css'; import './dark.css'; - -export {}; diff --git a/packages/@core/base/design/src/index.ts b/packages/@core/base/design/src/index.ts index d7c05340..952caef7 100644 --- a/packages/@core/base/design/src/index.ts +++ b/packages/@core/base/design/src/index.ts @@ -4,5 +4,3 @@ import './css/global.css'; import './css/transition.css'; import './css/nprogress.css'; import './css/ui.css'; - -export {}; diff --git a/packages/@core/preferences/src/preferences.ts b/packages/@core/preferences/src/preferences.ts index f43bf39e..7fb245e3 100644 --- a/packages/@core/preferences/src/preferences.ts +++ b/packages/@core/preferences/src/preferences.ts @@ -224,12 +224,8 @@ class PreferenceManager { const dom = document.documentElement; const COLOR_WEAK = 'invert-mode'; const COLOR_GRAY = 'grayscale-mode'; - colorWeakMode - ? dom.classList.add(COLOR_WEAK) - : dom.classList.remove(COLOR_WEAK); - colorGrayMode - ? dom.classList.add(COLOR_GRAY) - : dom.classList.remove(COLOR_GRAY); + dom.classList.toggle(COLOR_WEAK, colorWeakMode); + dom.classList.toggle(COLOR_GRAY, colorGrayMode); } } } diff --git a/packages/@core/ui-kit/popup-ui/src/alert/AlertBuilder.ts b/packages/@core/ui-kit/popup-ui/src/alert/AlertBuilder.ts index 521a9647..910a4611 100644 --- a/packages/@core/ui-kit/popup-ui/src/alert/AlertBuilder.ts +++ b/packages/@core/ui-kit/popup-ui/src/alert/AlertBuilder.ts @@ -144,24 +144,26 @@ export async function vbenPrompt( const modelValue = ref(defaultValue); const inputComponentRef = ref(null); - const staticContents: Component[] = []; - - staticContents.push(h(VbenRenderContent, { content, renderBr: true })); + const staticContents: Component[] = [ + h(VbenRenderContent, { content, renderBr: true }), + ]; const modelPropName = _modelPropName || 'modelValue'; const componentProps = { ..._componentProps }; // 每次渲染时都会重新计算的内容函数 const contentRenderer = () => { - const currentProps = { ...componentProps }; + const currentProps = { + ...componentProps, + [modelPropName]: modelValue.value, + [`onUpdate:${modelPropName}`]: (val: T) => { + modelValue.value = val; + }, + }; // 设置当前值 - currentProps[modelPropName] = modelValue.value; // 设置更新处理函数 - currentProps[`onUpdate:${modelPropName}`] = (val: T) => { - modelValue.value = val; - }; // 创建输入组件 inputComponentRef.value = h( 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 682d95e6..60ba512c 100644 --- a/packages/@core/ui-kit/popup-ui/src/modal/modal.vue +++ b/packages/@core/ui-kit/popup-ui/src/modal/modal.vue @@ -104,6 +104,10 @@ const shouldDraggable = computed( () => draggable.value && !shouldFullscreen.value && header.value, ); +const shouldCentered = computed( + () => centered.value && !shouldFullscreen.value, +); + const getAppendTo = computed(() => { return appendToMain.value ? `#${ELEMENT_ID_MAIN_CONTENT}>div:not(.absolute)>div` @@ -115,6 +119,7 @@ const { dragging, transform } = useModalDraggable( headerRef, shouldDraggable, getAppendTo, + shouldCentered, ); const firstOpened = ref(false); @@ -132,7 +137,9 @@ watch( dialogRef.value = innerContentRef.$el; // reopen modal reassign value const { offsetX, offsetY } = transform; - dialogRef.value.style.transform = `translate(${offsetX}px, ${offsetY}px)`; + dialogRef.value.style.transform = shouldCentered.value + ? `translate(${offsetX}px, calc(-50% + ${offsetY}px))` + : `translate(${offsetX}px, ${offsetY}px)`; } }, { immediate: true }, @@ -239,7 +246,7 @@ function handleClosed() { 'shadow-3xl': !bordered, 'left-0 top-0 size-full max-h-full !translate-x-0 !translate-y-0': shouldFullscreen, - 'top-1/2 !-translate-y-1/2': centered && !shouldFullscreen, + 'top-1/2': centered && !shouldFullscreen, 'duration-300': !dragging, hidden: isClosed, }, diff --git a/packages/@core/ui-kit/popup-ui/src/modal/use-modal-draggable.ts b/packages/@core/ui-kit/popup-ui/src/modal/use-modal-draggable.ts index 8237b011..84910b74 100644 --- a/packages/@core/ui-kit/popup-ui/src/modal/use-modal-draggable.ts +++ b/packages/@core/ui-kit/popup-ui/src/modal/use-modal-draggable.ts @@ -14,6 +14,7 @@ export function useModalDraggable( dragRef: Ref, draggable: ComputedRef, containerSelector?: ComputedRef, + centered?: ComputedRef, ) { const transform = reactive({ offsetX: 0, @@ -73,7 +74,10 @@ export function useModalDraggable( transform.offsetY = moveY; if (targetRef.value) { - targetRef.value.style.transform = `translate(${moveX}px, ${moveY}px)`; + const isCentered = centered?.value; + targetRef.value.style.transform = isCentered + ? `translate(${moveX}px, calc(-50% + ${moveY}px))` + : `translate(${moveX}px, ${moveY}px)`; dragging.value = true; } }; @@ -108,7 +112,7 @@ export function useModalDraggable( const target = unrefElement(targetRef); if (target) { - target.style.transform = 'none'; + target.style.transform = ''; } }; diff --git a/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSubContent.vue b/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSubContent.vue index 04ccc26b..85e63c01 100644 --- a/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSubContent.vue +++ b/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSubContent.vue @@ -27,7 +27,14 @@ const forwarded = useForwardPropsEmits(delegatedProps, emits); v-bind="forwarded" :class=" cn( - 'z-50 min-w-32 overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2', + 'z-50 min-w-32 overflow-hidden rounded-md', + 'border border-border', + 'bg-popover p-1 text-popover-foreground shadow-lg', + 'data-[state=open]:animate-in data-[state=closed]:animate-out', + 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0', + 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95', + 'data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2', + 'data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2', props.class, ) " diff --git a/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSubContent.vue b/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSubContent.vue index 9f3621b7..38756caf 100644 --- a/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSubContent.vue +++ b/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSubContent.vue @@ -27,7 +27,14 @@ const forwarded = useForwardPropsEmits(delegatedProps, emits); v-bind="forwarded" :class=" cn( - 'z-50 min-w-32 overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2', + 'z-50 min-w-32 overflow-hidden rounded-md', + 'border border-border', + 'bg-popover p-1 text-popover-foreground shadow-lg', + 'data-[state=open]:animate-in data-[state=closed]:animate-out', + 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0', + 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95', + 'data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2', + 'data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2', props.class, ) " diff --git a/packages/@core/ui-kit/shadcn-ui/src/ui/tree/tree.vue b/packages/@core/ui-kit/shadcn-ui/src/ui/tree/tree.vue index ee228f04..c2c7607f 100644 --- a/packages/@core/ui-kit/shadcn-ui/src/ui/tree/tree.vue +++ b/packages/@core/ui-kit/shadcn-ui/src/ui/tree/tree.vue @@ -220,7 +220,7 @@ function onSelect(item: FlattenedItem>, isSelected: boolean) { ); }) ?.parents?.filter((item) => !get(item, props.disabledField)) - ?.reverse() + ?.toReversed() .forEach((p) => { const children = flattenData.value.filter((i) => { return ( @@ -380,7 +380,7 @@ defineExpose({