feat(other): The menu supports jumping to external links and fixing some known problems

This commit is contained in:
vben 2024-05-21 21:45:48 +08:00
parent 399334ac57
commit c31d21be50
43 changed files with 505 additions and 243 deletions

View File

@ -26,17 +26,18 @@
"dependencies": {
"@vben-core/design": "workspace:*",
"@vben-core/design-tokens": "workspace:*",
"@vben-core/toolkit": "workspace:*",
"@vben-core/typings": "workspace:*",
"@vben/common-ui": "workspace:*",
"@vben/constants": "workspace:*",
"@vben/hooks": "workspace:*",
"@vben/icons": "workspace:*",
"@vben/layouts": "workspace:*",
"@vben/locales": "workspace:*",
"@vben/preference": "workspace:*",
"@vben/stores": "workspace:*",
"@vben/utils": "workspace:*",
"ant-design-vue": "^4.2.1",
"axios": "^1.6.8",
"axios": "^1.7.1",
"dayjs": "^1.11.11",
"vue": "^3.4.27",
"vue-router": "^4.3.2"

View File

@ -1,8 +1,6 @@
<script lang="ts" setup>
import type { NotificationItem } from '@vben/common-ui';
import { openWindow } from '@vben-core/toolkit';
import { Notification, UserDropdown } from '@vben/common-ui';
import {
IcRoundCreditScore,
@ -14,6 +12,7 @@ import { BasicLayout } from '@vben/layouts';
import { $t } from '@vben/locales';
import { preference } from '@vben/preference';
import { useAccessStore } from '@vben/stores';
import { openWindow } from '@vben/utils';
import { computed, ref } from 'vue';
import { useRouter } from 'vue-router';

View File

@ -1,9 +1,9 @@
import type { ExRouteRecordRaw, MenuRecordRaw } from '@vben-core/typings';
import { filterTree, mapTree, traverseTreeValues } from '@vben-core/toolkit';
import type { RouteRecordRaw, Router } from 'vue-router';
import { useAccessStore } from '@vben/stores';
import { filterTree, mapTree, traverseTreeValues } from '@vben/utils';
import { dynamicRoutes } from '../routes';
@ -120,6 +120,7 @@ async function generatorMenus(
hideChildrenInMenu = false,
icon,
orderNo,
target,
title = '',
} = meta || {};
@ -138,7 +139,7 @@ async function generatorMenus(
});
}
// 隐藏子菜单
const resultPath = hideChildrenInMenu ? redirect : path;
const resultPath = hideChildrenInMenu ? redirect : target || path;
return {
badge,
badgeType,

View File

@ -1,7 +1,7 @@
import { startProgress, stopProgress } from '@vben-core/toolkit';
import type { Router } from 'vue-router';
import { preference } from '@vben/preference';
import { startProgress, stopProgress } from '@vben/utils';
import { configAccessGuard } from './access';

View File

@ -1,6 +1,6 @@
import { traverseTreeValues } from '@vben-core/toolkit';
import type { RouteRecordName, RouteRecordRaw } from 'vue-router';
import { traverseTreeValues } from '@vben/utils';
import { createRouter, createWebHashHistory } from 'vue-router';
import { createRouteGuard } from './guard';

View File

@ -4,6 +4,7 @@ import { builtinRoutes } from './builtin';
import { Layout } from './layout';
import { nestedRoutes } from './modules/nested';
import { outsideRoutes } from './modules/outside';
import { vbenRoutes } from './modules/vben';
/** 动态路由 */
const dynamicRoutes: RouteRecordRaw[] = [
@ -31,30 +32,7 @@ const dynamicRoutes: RouteRecordRaw[] = [
},
...nestedRoutes,
...outsideRoutes,
// 关于
{
component: Layout,
meta: {
hideChildrenInMenu: true,
icon: 'https://cdn.jsdelivr.net/gh/vbenjs/vben-cdn-static@0.1.2/vben-admin/admin-logo.png',
keepAlive: false,
title: '关于',
},
name: 'AboutLayout',
path: '/about',
redirect: '/about/index',
children: [
{
name: 'About',
path: 'index',
component: () => import('@/views/about/index.vue'),
meta: {
keepAlive: false,
title: '关于',
},
},
],
},
...vbenRoutes,
];
/** 排除在主框架外的路由,这些路由没有菜单和顶部及其他框架内容 */

View File

@ -0,0 +1,50 @@
import type { RouteRecordRaw } from 'vue-router';
import { VBEN_GITHUB_URL } from '@vben/constants';
import { $t } from '@vben/locales/helper';
import { preference } from '@vben/preference';
import { IFrameView, Layout } from '@/router/routes/layout';
export const vbenRoutes: RouteRecordRaw[] = [
{
component: Layout,
meta: {
icon: preference.logo,
title: 'Vben Admin',
},
name: 'AboutLayout',
path: '/vben-admin',
redirect: '/vben-admin/about',
children: [
{
name: 'About',
path: 'about',
component: () => import('@/views/about/index.vue'),
meta: {
icon: 'mdi:creative-commons',
title: $t('page.about'),
},
},
{
name: 'AboutDocument',
path: 'document',
component: () => import('@/views/about/index.vue'),
meta: {
icon: 'mdi:flame-circle',
title: $t('page.document'),
},
},
{
name: 'Github',
path: 'github',
component: IFrameView,
meta: {
icon: 'mdi:github',
target: VBEN_GITHUB_URL,
title: 'Github',
},
},
],
},
];

View File

@ -37,8 +37,8 @@
"devDependencies": {
"@eslint/js": "^9.3.0",
"@types/eslint": "^8.56.10",
"@typescript-eslint/eslint-plugin": "^7.9.0",
"@typescript-eslint/parser": "^7.9.0",
"@typescript-eslint/eslint-plugin": "^7.10.0",
"@typescript-eslint/parser": "^7.10.0",
"eslint": "^8.57.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-eslint-comments": "^3.2.0",
@ -54,7 +54,7 @@
"eslint-plugin-unused-imports": "^3.2.0",
"eslint-plugin-vitest": "^0.5.4",
"eslint-plugin-vue": "^9.26.0",
"globals": "^15.2.0",
"globals": "^15.3.0",
"jsonc-eslint-parser": "^2.4.0",
"vue-eslint-parser": "^9.4.2"
}

View File

@ -47,7 +47,7 @@
"./*": "./*"
},
"dependencies": {
"@iconify/json": "^2.2.211",
"@iconify/json": "^2.2.212",
"@iconify/tailwind": "^1.1.1",
"@tailwindcss/forms": "^0.5.7",
"autoprefixer": "^10.4.19",

View File

@ -38,7 +38,7 @@
"html-minifier-terser": "^7.2.0",
"resolve.exports": "^2.0.2",
"vite-plugin-lib-inject-css": "^2.1.1",
"vite-plugin-vue-devtools": "^7.2.0"
"vite-plugin-vue-devtools": "^7.2.1"
},
"devDependencies": {
"@types/html-minifier-terser": "^7.0.2",

View File

@ -48,7 +48,7 @@
"test": "vitest"
},
"devDependencies": {
"@changesets/cli": "^2.27.2",
"@changesets/cli": "^2.27.3",
"@ls-lint/ls-lint": "^2.2.3",
"@types/jsdom": "^21.1.6",
"@types/node": "^20.12.12",
@ -79,7 +79,7 @@
"node": ">=18.7.0",
"pnpm": ">=8.5.0"
},
"packageManager": "pnpm@9.1.1",
"packageManager": "pnpm@9.1.2",
"pnpm": {
"overrides": {
"@ctrl/tinycolor": "4.1.0",

View File

@ -80,6 +80,10 @@ declare module 'vue-router' {
* ->
*/
orderNo?: number;
/**
* -
*/
target?: string;
/**
*
*/

View File

@ -100,12 +100,7 @@ onBeforeUnmount(() => {
</VbenTooltip>
<div v-show="!showTooltip" :class="[e('content')]">
<VbenMenuBadge v-bind="props" />
<VbenIcon
v-if="isTopLevelMenuItem"
:class="nsMenu.e('icon')"
:icon="icon"
fallback
/>
<VbenIcon :class="nsMenu.e('icon')" :icon="icon" fallback />
<slot></slot>
<slot name="title"></slot>

View File

@ -1,6 +1,6 @@
<script lang="ts" setup>
import { IcRoundMoreHoriz } from '@vben-core/iconify';
import { useNamespace } from '@vben-core/toolkit';
import { isHttpUrl, useNamespace } from '@vben-core/toolkit';
import { UseResizeObserverReturn, useResizeObserver } from '@vueuse/core';
import {
@ -241,7 +241,10 @@ function handleMenuItemClick(data: MenuItemClicked) {
if (!path || !parentPaths) {
return;
}
activePath.value = path;
if (!isHttpUrl(path)) {
activePath.value = path;
}
emit('select', path, parentPaths);
}

View File

@ -86,7 +86,7 @@ const iconArrowStyle = computed(() => {
<slot></slot>
<VbenIcon
v-if="isTopLevelMenuSubmenu && !isMenuMore"
v-if="!isMenuMore"
:class="nsMenu.e('icon')"
:icon="icon"
fallback

View File

@ -16,7 +16,7 @@
--menu-item-collapse-margin-y: 4px;
--menu-item-collapse-margin-x: 0px;
--menu-item-radius: 0px;
--menu-item-indent: 24px;
--menu-item-indent: 16px;
--menu-font-size: 14px;
--menu-dark-background: 0deg 0% 100% / 10%;
--menu-light-background: 192deg 1% 93%;

View File

@ -1,5 +1,5 @@
<script lang="ts" setup>
import { Icon } from '@vben-core/iconify';
import { VbenIcon } from '@vben-core/shadcn-ui';
import type { IBreadcrumb } from './interface';
@ -32,7 +32,7 @@ function handleClick(path?: string) {
<li>
<a href="javascript:void 0" @click.stop="handleClick(item.path)">
<span class="flex-center h-full">
<Icon
<VbenIcon
v-if="item.icon && showIcon"
class="mr-1 size-5 flex-shrink-0"
:icon="item.icon"

View File

@ -1,5 +1,6 @@
<script lang="ts" setup>
import { IcRoundKeyboardArrowDown, Icon } from '@vben-core/iconify';
import { IcRoundKeyboardArrowDown } from '@vben-core/iconify';
import { VbenIcon } from '@vben-core/shadcn-ui';
import {
Breadcrumb,
@ -49,7 +50,7 @@ function handleClick(path?: string) {
<div v-if="item.items?.length ?? 0 > 0">
<DropdownMenu>
<DropdownMenuTrigger class="flex items-center gap-1">
<Icon
<VbenIcon
v-if="item.icon && showIcon"
class="size-5"
:icon="item.icon"
@ -74,21 +75,26 @@ function handleClick(path?: string) {
href="javascript:void 0"
@click.stop="handleClick(item.path)"
>
<Icon
v-if="item.icon && showIcon"
class="size-4"
:class="{ 'size-5': item.isHome }"
:icon="item.icon"
/>
{{ item.title }}
<div class="flex-center">
<VbenIcon
v-if="item.icon && showIcon"
class="mr-1 size-4"
:class="{ 'size-5': item.isHome }"
:icon="item.icon"
/>
{{ item.title }}
</div>
</BreadcrumbLink>
<BreadcrumbPage v-else>
<Icon
v-if="item.icon && showIcon"
class="size-4"
:icon="item.icon"
/>
{{ item.title }}
<div class="flex-center">
<VbenIcon
v-if="item.icon && showIcon"
class="mr-1 size-4"
:class="{ 'size-5': item.isHome }"
:icon="item.icon"
/>
{{ item.title }}
</div>
</BreadcrumbPage>
</BreadcrumbItem>
<BreadcrumbSeparator

View File

@ -29,7 +29,7 @@ const props = withDefaults(defineProps<Props>(), {
const emit = defineEmits<{ close: [string]; unPushPin: [TabItem] }>();
const gap = 7;
const gap = 6;
const active = defineModel<string>('active');
const { b, e, is } = useNamespace('tabs-ui');

View File

@ -2,7 +2,7 @@
@include b('tabs-ui') {
--tabs-background: hsl(var(--color-background));
--tabs-gap: 8px;
--tabs-gap: 10px;
--tabs-divider: hsl(var(--color-border));
--tabs-hover: hsl(var(--color-heavy));
--tabs-active-background: hsl(var(--color-primary) / 15%);
@ -30,7 +30,6 @@
color: hsl(var(--color-muted-foreground));
cursor: pointer;
user-select: none;
// mask-image: linear-gradient(to right, #000 calc(100% - 0px), transparent);
@include is('active') {
z-index: 1;
@ -49,10 +48,10 @@
background-color: var(--tabs-active-background);
}
// .#{$namespace}-tab-background__before,
// .#{$namespace}-tab-background__after {
// fill: var(--tabs-active-background);
// }
.#{$namespace}-tab-background__before,
.#{$namespace}-tab-background__after {
fill: var(--tabs-active-background);
}
}
@include e('content') {
@ -95,7 +94,7 @@
height: 100%;
font-size: 12px;
border-radius: 50%;
// transition: all 0.15s ease;
transition: all 0.15s ease;
&:hover {
color: hsl(var(--color-foreground));
@ -185,15 +184,15 @@
height: 100%;
margin: 0 7px;
&::before {
position: absolute;
top: 20%;
right: 100%;
width: 1px;
height: 60%;
content: '';
background-color: var(--tabs-divider);
}
// &::before {
// position: absolute;
// top: 20%;
// right: 100%;
// width: 1px;
// height: 60%;
// content: '';
// background-color: var(--tabs-divider);
// }
// &::after {
// position: absolute;

View File

@ -1,8 +1,11 @@
<script lang="ts" setup>
import { VbenAdminLayout } from '@vben-core/layout-ui';
import { VbenBackTop, VbenLogo } from '@vben-core/shadcn-ui';
import { mapTree } from '@vben-core/toolkit';
import { MenuRecordRaw } from '@vben-core/typings';
import { PreferenceWidget } from '@vben/common-ui';
import { $t } from '@vben/locales';
import { preference, updatePreference, usePreference } from '@vben/preference';
import { computed } from 'vue';
@ -80,6 +83,15 @@ const {
sideMenus,
sideVisible,
} = useMixedMenu();
function wrapperMenus(menus: MenuRecordRaw[]) {
return mapTree(menus, (item) => {
return {
...item,
name: $t(item.name),
};
});
}
</script>
<template>
@ -154,7 +166,7 @@ const {
:rounded="isMenuRounded"
mode="horizontal"
:theme="headerMenuTheme"
:menus="headerMenus"
:menus="wrapperMenus(headerMenus)"
:default-active="headerActive"
@select="handleMenuSelect"
/>
@ -175,7 +187,7 @@ const {
:collapse-show-title="preference.sideCollapseShowTitle"
:collapse="preference.sideCollapse"
:theme="theme"
:menus="sideMenus"
:menus="wrapperMenus(sideMenus)"
:default-active="sideActive"
@select="handleMenuSelect"
/>
@ -195,7 +207,7 @@ const {
<template #side-extra>
<LayoutExtraMenu
:rounded="isMenuRounded"
:menus="extraMenus"
:menus="wrapperMenus(extraMenus)"
:collapse="preference.sideExtraCollapse"
:theme="theme"
/>

View File

@ -3,7 +3,9 @@ import type { MenuRecordRaw } from '@vben-core/typings';
import { Menu, MenuProps } from '@vben-core/menu-ui';
import { useRoute, useRouter } from 'vue-router';
import { useRoute } from 'vue-router';
import { useNavigation } from './use-navigation';
interface Props extends MenuProps {
collspae?: boolean;
@ -13,10 +15,10 @@ interface Props extends MenuProps {
defineProps<Props>();
const route = useRoute();
const router = useRouter();
const { navigation } = useNavigation();
function handleSelect(key: string) {
router.push(key);
async function handleSelect(key: string) {
await navigation(key);
}
</script>

View File

@ -3,17 +3,18 @@ import type { MenuRecordRaw } from '@vben-core/typings';
import { preference } from '@vben/preference';
import { useAccessStore } from '@vben/stores';
import { computed, ref } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import { useRoute } from 'vue-router';
import { findRootMenuByPath } from './helper';
import { useNavigation } from './use-navigation';
function useExtraMenu() {
const accessStore = useAccessStore();
const { navigation } = useNavigation();
const menus = computed(() => accessStore.getAccessMenus);
const route = useRoute();
const router = useRouter();
const extraMenus = ref<MenuRecordRaw[]>([]);
const extraVisible = ref<boolean>(false);
const extraActiveMenu = ref('');
@ -22,14 +23,14 @@ function useExtraMenu() {
*
* @param menu
*/
const handleMixedMenuSelect = (menu: MenuRecordRaw) => {
const handleMixedMenuSelect = async (menu: MenuRecordRaw) => {
extraMenus.value = menu?.children ?? [];
extraActiveMenu.value = menu.parents?.[0] ?? menu.path;
const hasChildren = extraMenus.value.length > 0;
extraVisible.value = hasChildren;
if (!hasChildren) {
router.push(menu.path);
await navigation(menu.path);
}
};

View File

@ -3,15 +3,15 @@ import type { MenuRecordRaw } from '@vben-core/typings';
import { preference, usePreference } from '@vben/preference';
import { useAccessStore } from '@vben/stores';
import { computed, onBeforeMount, ref } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import { useRoute } from 'vue-router';
import { findRootMenuByPath } from './helper';
import { useNavigation } from './use-navigation';
function useMixedMenu() {
const accessStore = useAccessStore();
const { navigation } = useNavigation();
const route = useRoute();
const router = useRouter();
const splitSideMenus = ref<MenuRecordRaw[]>([]);
const rootMenuPath = ref<string>('');
@ -75,7 +75,7 @@ function useMixedMenu() {
*/
const handleMenuSelect = (key: string, mode?: string) => {
if (!isMixedNav.value || mode === 'vertical') {
router.push(key);
navigation(key);
return;
}
@ -83,7 +83,7 @@ function useMixedMenu() {
rootMenuPath.value = rootMenu?.path ?? '';
splitSideMenus.value = rootMenu?.children ?? [];
if (splitSideMenus.value.length === 0) {
router.push(key);
navigation(key);
}
};

View File

@ -0,0 +1,19 @@
import { isHttpUrl, openWindow } from '@vben-core/toolkit';
import { useRouter } from 'vue-router';
function useNavigation() {
const router = useRouter();
const navigation = async (path: string) => {
if (isHttpUrl(path)) {
openWindow(path, { target: '_blank' });
} else {
await router.push(path);
}
};
return { navigation };
}
export { useNavigation };

View File

@ -12,7 +12,12 @@ import {
MdiPinOff,
} from '@vben-core/iconify';
import { filterTree } from '@vben-core/toolkit';
import type {
RouteLocationNormalized,
RouteRecordNormalized,
} from 'vue-router';
import { $t } from '@vben/locales';
import { storeToRefs, useAccessStore, useTabsStore } from '@vben/stores';
import { computed, watch } from 'vue';
import { useRoute, useRouter } from 'vue-router';
@ -39,6 +44,9 @@ function useTabs() {
const affixTabs = filterTree(router.getRoutes(), (route) => {
return !!route.meta?.affixTab;
});
affixTabs.forEach((tab) => {
Object.assign(tab, wrapperTabLocale(tab));
});
tabsStore.setAffixTabs(affixTabs);
};
@ -52,6 +60,18 @@ function useTabs() {
await tabsStore.closeTabByKey(key, router);
};
function wrapperTabLocale(
tab: RouteLocationNormalized | RouteRecordNormalized,
) {
return {
...tab,
meta: {
...tab.meta,
title: $t(tab.meta.title as string),
},
};
}
watch(
() => accessMenus.value,
() => {
@ -63,7 +83,7 @@ function useTabs() {
watch(
() => route.path,
() => {
tabsStore.addTab(route);
tabsStore.addTab(wrapperTabLocale(route) as RouteLocationNormalized);
},
{ immediate: true },
);

View File

@ -4,6 +4,7 @@ import type { IBreadcrumb } from '@vben-core/shadcn-ui';
import { VbenBackgroundBreadcrumb, VbenBreadcrumb } from '@vben-core/shadcn-ui';
import { BreadcrumbStyle } from '@vben-core/typings';
import { $t } from '@vben/locales';
import { computed } from 'vue';
import { useRoute, useRouter } from 'vue-router';
@ -43,7 +44,7 @@ const breadcrumbs = computed((): IBreadcrumb[] => {
resultBreadcrumb.push({
icon: icon as string,
path: path || route.path,
title: (title || name) as string,
title: $t((title || name) as string),
// items: children.map((child) => {
// return {
// icon: child?.meta?.icon as string,

View File

@ -0,0 +1,7 @@
import { defineBuildConfig } from 'unbuild';
export default defineBuildConfig({
clean: true,
declaration: true,
entries: ['src/index'],
});

View File

@ -0,0 +1,45 @@
{
"name": "@vben/constants",
"version": "1.0.0",
"type": "module",
"license": "MIT",
"homepage": "https://github.com/vbenjs/vue-vben-admin",
"repository": {
"type": "git",
"url": "git+https://github.com/vbenjs/vue-vben-admin.git",
"directory": "packages/constants"
},
"bugs": {
"url": "https://github.com/vbenjs/vue-vben-admin/issues"
},
"scripts": {
"build": "pnpm unbuild",
"stub": "pnpm unbuild --stub"
},
"files": [
"dist"
],
"sideEffects": [
"**/*.css"
],
"main": "./dist/index.mjs",
"module": "./dist/index.mjs",
"imports": {
"#*": "./src/*"
},
"exports": {
".": {
"development": "./src/index.ts",
"types": "./src/index.ts",
"default": "./dist/index.mjs"
}
},
"publishConfig": {
"exports": {
".": {
"types": "./dist/index.d.ts",
"default": "./dist/index.mjs"
}
}
}
}

View File

@ -0,0 +1 @@
export * from './vben';

View File

@ -0,0 +1 @@
export const VBEN_GITHUB_URL = 'https://github.com/vbenjs/vue-vben-admin';

View File

@ -0,0 +1,5 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"extends": "@vben/tsconfig/library.json",
"include": ["src"]
}

View File

@ -5,6 +5,7 @@ export default defineBuildConfig({
declaration: true,
entries: [
'src/index',
'src/helper',
{
builder: 'mkdist',
input: './src/langs',

View File

@ -35,6 +35,11 @@
},
"./langs/*": {
"default": "./dist/langs/*"
},
"./helper": {
"development": "./src/helper.ts",
"types": "./src/helper.ts",
"default": "./dist/helper.mjs"
}
},
"publishConfig": {

View File

@ -0,0 +1,8 @@
/**
* IDE I18的提示
*/
function $t(key: string) {
return key;
}
export { $t };

View File

@ -149,3 +149,7 @@ authentication:
send-code: Get Security code
send-text: "Reacquire in {0}s"
third-party-login: Or continue with
page:
about: About
document: Document

View File

@ -148,3 +148,7 @@ authentication:
send-code: 获取验证码
send-text: "{0}秒后重新获取"
third-party-login: 其他登录方式
page:
about: 关于
document: 文档

View File

@ -0,0 +1,7 @@
import { defineBuildConfig } from 'unbuild';
export default defineBuildConfig({
clean: true,
declaration: true,
entries: ['src/index'],
});

View File

@ -0,0 +1,48 @@
{
"name": "@vben/utils",
"version": "1.0.0",
"type": "module",
"license": "MIT",
"homepage": "https://github.com/vbenjs/vue-vben-admin",
"repository": {
"type": "git",
"url": "git+https://github.com/vbenjs/vue-vben-admin.git",
"directory": "packages/utils"
},
"bugs": {
"url": "https://github.com/vbenjs/vue-vben-admin/issues"
},
"scripts": {
"build": "pnpm unbuild",
"stub": "pnpm unbuild --stub"
},
"files": [
"dist"
],
"sideEffects": [
"**/*.css"
],
"main": "./dist/index.mjs",
"module": "./dist/index.mjs",
"imports": {
"#*": "./src/*"
},
"exports": {
".": {
"development": "./src/index.ts",
"types": "./src/index.ts",
"default": "./dist/index.mjs"
}
},
"publishConfig": {
"exports": {
".": {
"types": "./dist/index.d.ts",
"default": "./dist/index.mjs"
}
}
},
"dependencies": {
"@vben-core/toolkit": "workspace:*"
}
}

View File

@ -0,0 +1 @@
export * from '@vben-core/toolkit';

View File

@ -0,0 +1,5 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"extends": "@vben/tsconfig/library.json",
"include": ["src"]
}

View File

@ -13,8 +13,8 @@ importers:
.:
devDependencies:
'@changesets/cli':
specifier: ^2.27.2
version: 2.27.2
specifier: ^2.27.3
version: 2.27.3
'@ls-lint/ls-lint':
specifier: ^2.2.3
version: 2.2.3
@ -99,15 +99,15 @@ importers:
'@vben-core/design-tokens':
specifier: workspace:*
version: link:../../packages/@vben-core/shared/design-tokens
'@vben-core/toolkit':
specifier: workspace:*
version: link:../../packages/@vben-core/shared/toolkit
'@vben-core/typings':
specifier: workspace:*
version: link:../../packages/@vben-core/shared/typings
'@vben/common-ui':
specifier: workspace:*
version: link:../../packages/business/common-ui
'@vben/constants':
specifier: workspace:*
version: link:../../packages/constants
'@vben/hooks':
specifier: workspace:*
version: link:../../packages/hooks
@ -126,12 +126,15 @@ importers:
'@vben/stores':
specifier: workspace:*
version: link:../../packages/stores
'@vben/utils':
specifier: workspace:*
version: link:../../packages/utils
ant-design-vue:
specifier: ^4.2.1
version: 4.2.1(vue@3.4.27(typescript@5.4.5))
axios:
specifier: ^1.6.8
version: 1.6.8
specifier: ^1.7.1
version: 1.7.1
dayjs:
specifier: ^1.11.11
version: 1.11.11
@ -167,8 +170,8 @@ importers:
internal/lint-configs/eslint-config:
dependencies:
eslint-plugin-command:
specifier: ^0.2.2
version: 0.2.2(eslint@8.57.0)
specifier: ^0.2.3
version: 0.2.3(eslint@8.57.0)
devDependencies:
'@eslint/js':
specifier: ^9.3.0
@ -177,11 +180,11 @@ importers:
specifier: ^8.56.10
version: 8.56.10
'@typescript-eslint/eslint-plugin':
specifier: ^7.9.0
version: 7.9.0(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
specifier: ^7.10.0
version: 7.10.0(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/parser':
specifier: ^7.9.0
version: 7.9.0(eslint@8.57.0)(typescript@5.4.5)
specifier: ^7.10.0
version: 7.10.0(eslint@8.57.0)(typescript@5.4.5)
eslint:
specifier: ^8.57.0
version: 8.57.0
@ -193,7 +196,7 @@ importers:
version: 3.2.0(eslint@8.57.0)
eslint-plugin-i:
specifier: ^2.29.1
version: 2.29.1(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)
version: 2.29.1(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)
eslint-plugin-jsdoc:
specifier: ^48.2.5
version: 48.2.5(eslint@8.57.0)
@ -220,16 +223,16 @@ importers:
version: 53.0.0(eslint@8.57.0)
eslint-plugin-unused-imports:
specifier: ^3.2.0
version: 3.2.0(@typescript-eslint/eslint-plugin@7.9.0(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)
version: 3.2.0(@typescript-eslint/eslint-plugin@7.10.0(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)
eslint-plugin-vitest:
specifier: ^0.5.4
version: 0.5.4(@typescript-eslint/eslint-plugin@7.9.0(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)(vitest@1.6.0(@types/node@20.12.12)(jsdom@24.0.0)(sass@1.77.2)(terser@5.31.0))
version: 0.5.4(@typescript-eslint/eslint-plugin@7.10.0(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)(vitest@1.6.0(@types/node@20.12.12)(jsdom@24.0.0)(sass@1.77.2)(terser@5.31.0))
eslint-plugin-vue:
specifier: ^9.26.0
version: 9.26.0(eslint@8.57.0)
globals:
specifier: ^15.2.0
version: 15.2.0
specifier: ^15.3.0
version: 15.3.0
jsonc-eslint-parser:
specifier: ^2.4.0
version: 2.4.0
@ -328,8 +331,8 @@ importers:
internal/tailwind-config:
dependencies:
'@iconify/json':
specifier: ^2.2.211
version: 2.2.211
specifier: ^2.2.212
version: 2.2.212
'@iconify/tailwind':
specifier: ^1.1.1
version: 1.1.1
@ -392,8 +395,8 @@ importers:
specifier: ^2.1.1
version: 2.1.1(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))
vite-plugin-vue-devtools:
specifier: ^7.2.0
version: 7.2.0(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))
specifier: ^7.2.1
version: 7.2.1(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))
devDependencies:
'@types/html-minifier-terser':
specifier: ^7.0.2
@ -616,7 +619,7 @@ importers:
version: 10.9.0(vue@3.4.27(typescript@5.4.5))
'@vueuse/integrations':
specifier: ^10.9.0
version: 10.9.0(async-validator@4.2.5)(axios@1.6.8)(nprogress@0.2.0)(qrcode@1.5.3)(vue@3.4.27(typescript@5.4.5))
version: 10.9.0(async-validator@4.2.5)(axios@1.7.1)(nprogress@0.2.0)(qrcode@1.5.3)(vue@3.4.27(typescript@5.4.5))
qrcode:
specifier: ^1.5.3
version: 1.5.3
@ -677,6 +680,8 @@ importers:
specifier: workspace:*
version: link:../../@vben-core/shared/typings
packages/constants: {}
packages/hooks:
dependencies:
vue:
@ -746,6 +751,12 @@ importers:
specifier: ^4.3.2
version: 4.3.2(vue@3.4.27(typescript@5.4.5))
packages/utils:
dependencies:
'@vben-core/toolkit':
specifier: workspace:*
version: link:../@vben-core/shared/toolkit
scripts/vsh:
dependencies:
'@vben/node-utils':
@ -761,8 +772,8 @@ importers:
specifier: ^1.4.7
version: 1.4.7
publint:
specifier: ^0.2.7
version: 0.2.7
specifier: ^0.2.8
version: 0.2.8
packages:
@ -1089,8 +1100,8 @@ packages:
'@changesets/changelog-git@0.2.0':
resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==}
'@changesets/cli@2.27.2':
resolution: {integrity: sha512-6/kADjKMOrlLwNr/Y5HAq7T9oGOA2Lq5A59AGtwQCCiXuSGp4EgszzdJFeBiF8pdz7Wn1HaLzSUBhAaNToEJqg==}
'@changesets/cli@2.27.3':
resolution: {integrity: sha512-ve/VpWApILlSs8cr0okNx5C2LKRawI9XZgvfmf58S8sar2nhx5DPJREFXYZBahs0FeTfvH0rdVl+nGe8QF45Ig==}
hasBin: true
'@changesets/config@3.0.0':
@ -1786,8 +1797,8 @@ packages:
'@humanwhocodes/object-schema@2.0.3':
resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
'@iconify/json@2.2.211':
resolution: {integrity: sha512-bg/rNpMYwjXJrOR8R56AuMuuNxcSgf/lw/EqtRUyPP1bbiXytF5VJModXohysnsN46M/gr+ydRUjIXRa/vuotA==}
'@iconify/json@2.2.212':
resolution: {integrity: sha512-d1IXjpbSwk8V3C9D+mruRTJRPqZZpCnOWh9zyG/Zc5zJmPDLBEHNTKz+ZmeiJQ6LdzgjwLJai1WgFvt1HWVIPw==}
'@iconify/tailwind@1.1.1':
resolution: {integrity: sha512-4mmA//qjZigv7D4KlqcVSYTqfRIJzyts2/lSCAJfCL0rVMIE76+ifJnaE5jxCo1+nYGBF8FsFo0qFOs+sX4EnA==}
@ -1886,7 +1897,6 @@ packages:
'@ls-lint/ls-lint@2.2.3':
resolution: {integrity: sha512-ekM12jNm/7O2I/hsRv9HvYkRdfrHpiV1epVuI2NP+eTIcEgdIdKkKCs9KgQydu/8R5YXTov9aHdOgplmCHLupw==}
cpu: [x64, arm64, s390x]
os: [darwin, linux, win32]
hasBin: true
@ -2264,8 +2274,8 @@ packages:
'@types/which@3.0.3':
resolution: {integrity: sha512-2C1+XoY0huExTbs8MQv1DuS5FS86+SEjdM9F/+GS61gg5Hqbtj8ZiDSx8MfWcyei907fIPbfPGCOrNUTnVHY1g==}
'@typescript-eslint/eslint-plugin@7.9.0':
resolution: {integrity: sha512-6e+X0X3sFe/G/54aC3jt0txuMTURqLyekmEHViqyA2VnxhLMpvA6nqmcjIy+Cr9tLDHPssA74BP5Mx9HQIxBEA==}
'@typescript-eslint/eslint-plugin@7.10.0':
resolution: {integrity: sha512-PzCr+a/KAef5ZawX7nbyNwBDtM1HdLIT53aSA2DDlxmxMngZ43O8SIePOeX8H5S+FHXeI6t97mTt/dDdzY4Fyw==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
'@typescript-eslint/parser': ^7.0.0
@ -2275,8 +2285,8 @@ packages:
typescript:
optional: true
'@typescript-eslint/parser@7.9.0':
resolution: {integrity: sha512-qHMJfkL5qvgQB2aLvhUSXxbK7OLnDkwPzFalg458pxQgfxKDfT1ZDbHQM/I6mDIf/svlMkj21kzKuQ2ixJlatQ==}
'@typescript-eslint/parser@7.10.0':
resolution: {integrity: sha512-2EjZMA0LUW5V5tGQiaa2Gys+nKdfrn2xiTIBLR4fxmPmVSvgPcKNW+AE/ln9k0A4zDUti0J/GZXMDupQoI+e1w==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
@ -2285,16 +2295,16 @@ packages:
typescript:
optional: true
'@typescript-eslint/scope-manager@7.10.0':
resolution: {integrity: sha512-7L01/K8W/VGl7noe2mgH0K7BE29Sq6KAbVmxurj8GGaPDZXPr8EEQ2seOeAS+mEV9DnzxBQB6ax6qQQ5C6P4xg==}
engines: {node: ^18.18.0 || >=20.0.0}
'@typescript-eslint/scope-manager@7.8.0':
resolution: {integrity: sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==}
engines: {node: ^18.18.0 || >=20.0.0}
'@typescript-eslint/scope-manager@7.9.0':
resolution: {integrity: sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==}
engines: {node: ^18.18.0 || >=20.0.0}
'@typescript-eslint/type-utils@7.9.0':
resolution: {integrity: sha512-6Qy8dfut0PFrFRAZsGzuLoM4hre4gjzWJB6sUvdunCYZsYemTkzZNwF1rnGea326PHPT3zn5Lmg32M/xfJfByA==}
'@typescript-eslint/type-utils@7.10.0':
resolution: {integrity: sha512-D7tS4WDkJWrVkuzgm90qYw9RdgBcrWmbbRkrLA4d7Pg3w0ttVGDsvYGV19SH8gPR5L7OtcN5J1hTtyenO9xE9g==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
@ -2303,6 +2313,10 @@ packages:
typescript:
optional: true
'@typescript-eslint/types@7.10.0':
resolution: {integrity: sha512-7fNj+Ya35aNyhuqrA1E/VayQX9Elwr8NKZ4WueClR3KwJ7Xx9jcCdOrLW04h51de/+gNbyFMs+IDxh5xIwfbNg==}
engines: {node: ^18.18.0 || >=20.0.0}
'@typescript-eslint/types@7.8.0':
resolution: {integrity: sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==}
engines: {node: ^18.18.0 || >=20.0.0}
@ -2311,6 +2325,15 @@ packages:
resolution: {integrity: sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==}
engines: {node: ^18.18.0 || >=20.0.0}
'@typescript-eslint/typescript-estree@7.10.0':
resolution: {integrity: sha512-LXFnQJjL9XIcxeVfqmNj60YhatpRLt6UhdlFwAkjNc6jSUlK8zQOl1oktAP8PlWFzPQC1jny/8Bai3/HPuvN5g==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
'@typescript-eslint/typescript-estree@7.8.0':
resolution: {integrity: sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==}
engines: {node: ^18.18.0 || >=20.0.0}
@ -2320,14 +2343,11 @@ packages:
typescript:
optional: true
'@typescript-eslint/typescript-estree@7.9.0':
resolution: {integrity: sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==}
'@typescript-eslint/utils@7.10.0':
resolution: {integrity: sha512-olzif1Fuo8R8m/qKkzJqT7qwy16CzPRWBvERS0uvyc+DHd8AKbO4Jb7kpAvVzMmZm8TrHnI7hvjN4I05zow+tg==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
eslint: ^8.56.0
'@typescript-eslint/utils@7.8.0':
resolution: {integrity: sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==}
@ -2335,20 +2355,14 @@ packages:
peerDependencies:
eslint: ^8.56.0
'@typescript-eslint/utils@7.9.0':
resolution: {integrity: sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==}
'@typescript-eslint/visitor-keys@7.10.0':
resolution: {integrity: sha512-9ntIVgsi6gg6FIq9xjEO4VQJvwOqA3jaBFQJ/6TK5AvEup2+cECI6Fh7QiBxmfMHXU0V0J4RyPeOU1VDNzl9cg==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
'@typescript-eslint/visitor-keys@7.8.0':
resolution: {integrity: sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==}
engines: {node: ^18.18.0 || >=20.0.0}
'@typescript-eslint/visitor-keys@7.9.0':
resolution: {integrity: sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==}
engines: {node: ^18.18.0 || >=20.0.0}
'@ungap/structured-clone@1.2.0':
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
@ -2430,16 +2444,16 @@ packages:
'@vue/devtools-api@6.6.1':
resolution: {integrity: sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==}
'@vue/devtools-core@7.2.0':
resolution: {integrity: sha512-cHSeu70rTtubt2DYia+VDGNTC1m84Xyuk5eNTjmOpMLECaJnWnzCv6kR84EZp7rG+MVZalJG+4ecX2GaTbU3cQ==}
'@vue/devtools-core@7.2.1':
resolution: {integrity: sha512-OyWl455UnJIVgZ6lo5WQ79WbDMoXtSRwyNKp9WzCZ0HhuQywIk4qv59KtLRe75uVmtGBde4hXNaSyRm+x9bY6g==}
'@vue/devtools-kit@7.2.0':
resolution: {integrity: sha512-Kx+U0QiQg/g714euYKfnCdhTcOycSlH1oyTE57D0sAmisdsRCNLfXcnnIwcFY2jdCpuz9DNbuE0VWQuYF5zAZQ==}
'@vue/devtools-kit@7.2.1':
resolution: {integrity: sha512-Wak/fin1X0Q8LLIfCAHBrdaaB+R6IdpSXsDByPHbQ3BmkCP0/cIo/oEGp9i0U2+gEqD4L3V9RDjNf1S34DTzQQ==}
peerDependencies:
vue: ^3.0.0
'@vue/devtools-shared@7.2.0':
resolution: {integrity: sha512-gVr3IjKjU7axNvclRgICgy1gq/TDnF1hhBAEox+l5mMXZiTIFVIm1zpcIPssc0HxMDgzy+lXqOVsY4DGyZ+ZeA==}
'@vue/devtools-shared@7.2.1':
resolution: {integrity: sha512-PCJF4UknJmOal68+X9XHyVeQ+idv0LFujkTOIW30+GaMJqwFVN9LkQKX4gLqn61KkGMdJTzQ1bt7EJag3TI6AA==}
'@vue/language-core@1.8.27':
resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==}
@ -2705,8 +2719,8 @@ packages:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'}
axios@1.6.8:
resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==}
axios@1.7.1:
resolution: {integrity: sha512-+LV37nQcd1EpFalkXksWNBiA17NZ5m5/WspmHGmZmdx1qBOg/VNq/c4eRJiA9VQQHBOs+N0ZhhdU10h2TyNK7Q==}
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@ -3588,8 +3602,8 @@ packages:
eslint-import-resolver-webpack:
optional: true
eslint-plugin-command@0.2.2:
resolution: {integrity: sha512-St9OM9w9/vjltIze9yhXPHKyc+wRHw3M/ql9Kvw+9BYE5BTsFz0f7nlI7xFIkOBEHs2MyZQCQLP1bV/qAT3q2w==}
eslint-plugin-command@0.2.3:
resolution: {integrity: sha512-1bBYNfjZg60N2ZpLV5ATYSYyueIJ+zl5yKrTs0UFDdnyu07dNSZ7Xplnc+Wb6SXTdc1sIaoIrnuyhvztcltX6A==}
peerDependencies:
eslint: '*'
@ -4049,8 +4063,8 @@ packages:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
globals@15.2.0:
resolution: {integrity: sha512-FQ5YwCHZM3nCmtb5FzEWwdUc9K5d3V/w9mzcz8iGD1gC/aOTHc6PouYu0kkKipNJqHAT7m51sqzQjEjIP+cK0A==}
globals@15.3.0:
resolution: {integrity: sha512-cCdyVjIUVTtX8ZsPkq1oCsOsLmGIswqnjZYMJJTGaNApj1yHtLSymKhwH51ttirREn75z3p4k051clwg7rvNKA==}
engines: {node: '>=18'}
globalthis@1.0.4:
@ -5238,6 +5252,9 @@ packages:
picocolors@1.0.0:
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
picocolors@1.0.1:
resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
picomatch@2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
@ -5807,8 +5824,8 @@ packages:
psl@1.9.0:
resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==}
publint@0.2.7:
resolution: {integrity: sha512-tLU4ee3110BxWfAmCZggJmCUnYWgPTr0QLnx08sqpLYa8JHRiOudd+CgzdpfU5x5eOaW2WMkpmOrFshRFYK7Mw==}
publint@0.2.8:
resolution: {integrity: sha512-C5MjGJ7gpanqaDpgBN+6QhjvXcoj0/YpbucoW29oO5729CGTMzfr3wZTIYcpzB1xl9ZfEqj4KL86P2Z50pt/JA==}
engines: {node: '>=16'}
hasBin: true
@ -6856,8 +6873,8 @@ packages:
mockjs: '>=1.1.0'
vite: '>=4.0.0'
vite-plugin-vue-devtools@7.2.0:
resolution: {integrity: sha512-bFWwx/YF9M+aXTjDo0/6DrC7+WCzLg7wAmFoQA3Gd7cv5WV4u65hHSZN8bq0zhgHqtYQZdWnp0L2z6JNCwcIGg==}
vite-plugin-vue-devtools@7.2.1:
resolution: {integrity: sha512-4k7QNZz0nSojoePQoxnE5fIzi8RU1QJHc0TEg4golv2phZxhBGfjScZD2B8X6bcrRbUQ9CaRKN0dzBs1xtzzNg==}
engines: {node: '>=v14.21.3'}
peerDependencies:
vite: ^3.1.0 || ^4.0.0-0 || ^5.0.0-0
@ -7553,7 +7570,7 @@ snapshots:
dependencies:
'@changesets/types': 6.0.0
'@changesets/cli@2.27.2':
'@changesets/cli@2.27.3':
dependencies:
'@babel/runtime': 7.24.5
'@changesets/apply-release-plan': 7.0.1
@ -8245,7 +8262,7 @@ snapshots:
'@humanwhocodes/object-schema@2.0.3': {}
'@iconify/json@2.2.211':
'@iconify/json@2.2.212':
dependencies:
'@iconify/types': 2.0.0
pathe: 1.1.2
@ -8758,14 +8775,14 @@ snapshots:
'@types/which@3.0.3': {}
'@typescript-eslint/eslint-plugin@7.9.0(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)':
'@typescript-eslint/eslint-plugin@7.10.0(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)':
dependencies:
'@eslint-community/regexpp': 4.10.0
'@typescript-eslint/parser': 7.9.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/scope-manager': 7.9.0
'@typescript-eslint/type-utils': 7.9.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/utils': 7.9.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.9.0
'@typescript-eslint/parser': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/scope-manager': 7.10.0
'@typescript-eslint/type-utils': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/utils': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.10.0
eslint: 8.57.0
graphemer: 1.4.0
ignore: 5.3.1
@ -8776,12 +8793,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5)':
'@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5)':
dependencies:
'@typescript-eslint/scope-manager': 7.9.0
'@typescript-eslint/types': 7.9.0
'@typescript-eslint/typescript-estree': 7.9.0(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.9.0
'@typescript-eslint/scope-manager': 7.10.0
'@typescript-eslint/types': 7.10.0
'@typescript-eslint/typescript-estree': 7.10.0(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.10.0
debug: 4.3.4
eslint: 8.57.0
optionalDependencies:
@ -8789,20 +8806,20 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/scope-manager@7.10.0':
dependencies:
'@typescript-eslint/types': 7.10.0
'@typescript-eslint/visitor-keys': 7.10.0
'@typescript-eslint/scope-manager@7.8.0':
dependencies:
'@typescript-eslint/types': 7.8.0
'@typescript-eslint/visitor-keys': 7.8.0
'@typescript-eslint/scope-manager@7.9.0':
'@typescript-eslint/type-utils@7.10.0(eslint@8.57.0)(typescript@5.4.5)':
dependencies:
'@typescript-eslint/types': 7.9.0
'@typescript-eslint/visitor-keys': 7.9.0
'@typescript-eslint/type-utils@7.9.0(eslint@8.57.0)(typescript@5.4.5)':
dependencies:
'@typescript-eslint/typescript-estree': 7.9.0(typescript@5.4.5)
'@typescript-eslint/utils': 7.9.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/typescript-estree': 7.10.0(typescript@5.4.5)
'@typescript-eslint/utils': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
debug: 4.3.4
eslint: 8.57.0
ts-api-utils: 1.3.0(typescript@5.4.5)
@ -8811,10 +8828,27 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/types@7.10.0': {}
'@typescript-eslint/types@7.8.0': {}
'@typescript-eslint/types@7.9.0': {}
'@typescript-eslint/typescript-estree@7.10.0(typescript@5.4.5)':
dependencies:
'@typescript-eslint/types': 7.10.0
'@typescript-eslint/visitor-keys': 7.10.0
debug: 4.3.4
globby: 11.1.0
is-glob: 4.0.3
minimatch: 9.0.4
semver: 7.6.2
ts-api-utils: 1.3.0(typescript@5.4.5)
optionalDependencies:
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
'@typescript-eslint/typescript-estree@7.8.0(typescript@5.4.5)':
dependencies:
'@typescript-eslint/types': 7.8.0
@ -8830,20 +8864,16 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/typescript-estree@7.9.0(typescript@5.4.5)':
'@typescript-eslint/utils@7.10.0(eslint@8.57.0)(typescript@5.4.5)':
dependencies:
'@typescript-eslint/types': 7.9.0
'@typescript-eslint/visitor-keys': 7.9.0
debug: 4.3.4
globby: 11.1.0
is-glob: 4.0.3
minimatch: 9.0.4
semver: 7.6.2
ts-api-utils: 1.3.0(typescript@5.4.5)
optionalDependencies:
typescript: 5.4.5
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
'@typescript-eslint/scope-manager': 7.10.0
'@typescript-eslint/types': 7.10.0
'@typescript-eslint/typescript-estree': 7.10.0(typescript@5.4.5)
eslint: 8.57.0
transitivePeerDependencies:
- supports-color
- typescript
'@typescript-eslint/utils@7.8.0(eslint@8.57.0)(typescript@5.4.5)':
dependencies:
@ -8859,27 +8889,16 @@ snapshots:
- supports-color
- typescript
'@typescript-eslint/utils@7.9.0(eslint@8.57.0)(typescript@5.4.5)':
'@typescript-eslint/visitor-keys@7.10.0':
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
'@typescript-eslint/scope-manager': 7.9.0
'@typescript-eslint/types': 7.9.0
'@typescript-eslint/typescript-estree': 7.9.0(typescript@5.4.5)
eslint: 8.57.0
transitivePeerDependencies:
- supports-color
- typescript
'@typescript-eslint/types': 7.10.0
eslint-visitor-keys: 3.4.3
'@typescript-eslint/visitor-keys@7.8.0':
dependencies:
'@typescript-eslint/types': 7.8.0
eslint-visitor-keys: 3.4.3
'@typescript-eslint/visitor-keys@7.9.0':
dependencies:
'@typescript-eslint/types': 7.9.0
eslint-visitor-keys: 3.4.3
'@ungap/structured-clone@1.2.0': {}
'@vitejs/plugin-vue-jsx@3.1.0(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))':
@ -9013,10 +9032,10 @@ snapshots:
'@vue/devtools-api@6.6.1': {}
'@vue/devtools-core@7.2.0(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))':
'@vue/devtools-core@7.2.1(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue/devtools-kit': 7.2.0(vue@3.4.27(typescript@5.4.5))
'@vue/devtools-shared': 7.2.0
'@vue/devtools-kit': 7.2.1(vue@3.4.27(typescript@5.4.5))
'@vue/devtools-shared': 7.2.1
mitt: 3.0.1
nanoid: 3.3.7
pathe: 1.1.2
@ -9025,16 +9044,16 @@ snapshots:
- vite
- vue
'@vue/devtools-kit@7.2.0(vue@3.4.27(typescript@5.4.5))':
'@vue/devtools-kit@7.2.1(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue/devtools-shared': 7.2.0
'@vue/devtools-shared': 7.2.1
hookable: 5.5.3
mitt: 3.0.1
perfect-debounce: 1.0.0
speakingurl: 14.0.1
vue: 3.4.27(typescript@5.4.5)
'@vue/devtools-shared@7.2.0':
'@vue/devtools-shared@7.2.1':
dependencies:
rfdc: 1.3.1
@ -9102,14 +9121,14 @@ snapshots:
- '@vue/composition-api'
- vue
'@vueuse/integrations@10.9.0(async-validator@4.2.5)(axios@1.6.8)(nprogress@0.2.0)(qrcode@1.5.3)(vue@3.4.27(typescript@5.4.5))':
'@vueuse/integrations@10.9.0(async-validator@4.2.5)(axios@1.7.1)(nprogress@0.2.0)(qrcode@1.5.3)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vueuse/core': 10.9.0(vue@3.4.27(typescript@5.4.5))
'@vueuse/shared': 10.9.0(vue@3.4.27(typescript@5.4.5))
vue-demi: 0.14.7(vue@3.4.27(typescript@5.4.5))
optionalDependencies:
async-validator: 4.2.5
axios: 1.6.8
axios: 1.7.1
nprogress: 0.2.0
qrcode: 1.5.3
transitivePeerDependencies:
@ -9314,7 +9333,7 @@ snapshots:
dependencies:
possible-typed-array-names: 1.0.0
axios@1.6.8:
axios@1.7.1:
dependencies:
follow-redirects: 1.15.6
form-data: 4.0.0
@ -10308,17 +10327,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
eslint-module-utils@2.8.1(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0):
eslint-module-utils@2.8.1(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0):
dependencies:
debug: 3.2.7
optionalDependencies:
'@typescript-eslint/parser': 7.9.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/parser': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
transitivePeerDependencies:
- supports-color
eslint-plugin-command@0.2.2(eslint@8.57.0):
eslint-plugin-command@0.2.3(eslint@8.57.0):
dependencies:
'@es-joy/jsdoccomment': 0.43.0
eslint: 8.57.0
@ -10336,13 +10355,13 @@ snapshots:
eslint: 8.57.0
ignore: 5.3.1
eslint-plugin-i@2.29.1(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0):
eslint-plugin-i@2.29.1(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0):
dependencies:
debug: 4.3.4
doctrine: 3.0.0
eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0)
eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0)
get-tsconfig: 4.7.4
is-glob: 4.0.3
minimatch: 3.1.2
@ -10386,7 +10405,7 @@ snapshots:
eslint: 8.57.0
eslint-plugin-es-x: 7.6.0(eslint@8.57.0)
get-tsconfig: 4.7.4
globals: 15.2.0
globals: 15.3.0
ignore: 5.3.1
minimatch: 9.0.4
semver: 7.6.2
@ -10448,19 +10467,19 @@ snapshots:
transitivePeerDependencies:
- supports-color
eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@7.9.0(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0):
eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@7.10.0(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0):
dependencies:
eslint: 8.57.0
eslint-rule-composer: 0.3.0
optionalDependencies:
'@typescript-eslint/eslint-plugin': 7.9.0(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/eslint-plugin': 7.10.0(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@7.9.0(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)(vitest@1.6.0(@types/node@20.12.12)(jsdom@24.0.0)(sass@1.77.2)(terser@5.31.0)):
eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@7.10.0(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)(vitest@1.6.0(@types/node@20.12.12)(jsdom@24.0.0)(sass@1.77.2)(terser@5.31.0)):
dependencies:
'@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5)
eslint: 8.57.0
optionalDependencies:
'@typescript-eslint/eslint-plugin': 7.9.0(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/eslint-plugin': 7.10.0(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
vitest: 1.6.0(@types/node@20.12.12)(jsdom@24.0.0)(sass@1.77.2)(terser@5.31.0)
transitivePeerDependencies:
- supports-color
@ -10895,7 +10914,7 @@ snapshots:
globals@14.0.0: {}
globals@15.2.0: {}
globals@15.3.0: {}
globalthis@1.0.4:
dependencies:
@ -12055,6 +12074,8 @@ snapshots:
picocolors@1.0.0: {}
picocolors@1.0.1: {}
picomatch@2.3.1: {}
pidtree@0.6.0: {}
@ -12574,10 +12595,10 @@ snapshots:
psl@1.9.0: {}
publint@0.2.7:
publint@0.2.8:
dependencies:
npm-packlist: 5.1.3
picocolors: 1.0.0
picocolors: 1.0.1
sade: 1.8.1
punycode@2.3.1: {}
@ -13781,11 +13802,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
vite-plugin-vue-devtools@7.2.0(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5)):
vite-plugin-vue-devtools@7.2.1(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5)):
dependencies:
'@vue/devtools-core': 7.2.0(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))
'@vue/devtools-kit': 7.2.0(vue@3.4.27(typescript@5.4.5))
'@vue/devtools-shared': 7.2.0
'@vue/devtools-core': 7.2.1(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))
'@vue/devtools-kit': 7.2.1(vue@3.4.27(typescript@5.4.5))
'@vue/devtools-shared': 7.2.1
execa: 8.0.1
sirv: 2.0.4
vite: 5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)

View File

@ -84,6 +84,10 @@
"name": "@vben/layouts",
"path": "packages/business/layouts",
},
{
"name": "@vben/constants",
"path": "packages/constants",
},
{
"name": "@vben/hooks",
"path": "packages/hooks",
@ -104,6 +108,10 @@
"name": "@vben/stores",
"path": "packages/stores",
},
{
"name": "@vben/utils",
"path": "packages/utils",
},
{
"name": "@vben/vsh",
"path": "scripts/vsh",