diff --git a/packages/experiments-playground/package.json b/packages/experiments-playground/package.json index c0080231b..77e0fe98a 100644 --- a/packages/experiments-playground/package.json +++ b/packages/experiments-playground/package.json @@ -10,7 +10,7 @@ "type-check": "vue-tsc --build" }, "dependencies": { - "vue": "~3.6.0-alpha.2", + "vue": "~3.6.0-alpha.7", "vue-router": "workspace:*" }, "devDependencies": { diff --git a/packages/playground/package.json b/packages/playground/package.json index 147529366..5d77e3e37 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -10,7 +10,7 @@ "preview": "vite preview --port 4173" }, "dependencies": { - "vue": "~3.6.0-alpha.2" + "vue": "~3.6.0-alpha.7" }, "devDependencies": { "@types/node": "^24.7.2", diff --git a/packages/router/package.json b/packages/router/package.json index 7d9bea937..d198482e0 100644 --- a/packages/router/package.json +++ b/packages/router/package.json @@ -148,6 +148,6 @@ "tsdown": "^0.17.2", "tsup": "^8.5.0", "vite": "^7.1.10", - "vue": "~3.6.0-alpha.2" + "vue": "~3.6.0-alpha.7" } } diff --git a/packages/router/src/RouterLink.ts b/packages/router/src/RouterLink.ts index 06cb083c0..012a00883 100644 --- a/packages/router/src/RouterLink.ts +++ b/packages/router/src/RouterLink.ts @@ -467,7 +467,7 @@ function getOriginalPath(record: RouteRecord | undefined): string { * @param globalClass * @param defaultClass */ -const getLinkClass = ( +export const getLinkClass = ( propClass: string | undefined, globalClass: string | undefined, defaultClass: string diff --git a/packages/router/src/VaporRouterLink.ts b/packages/router/src/VaporRouterLink.ts new file mode 100644 index 000000000..df5b897af --- /dev/null +++ b/packages/router/src/VaporRouterLink.ts @@ -0,0 +1,85 @@ +import { routerKey } from './injectionSymbols' +import { + _RouterLinkI, + getLinkClass, + type RouterLinkProps, + useLink, +} from './RouterLink' +import { RouteLocationRaw } from './typed-routes' +import { + computed, + createDynamicComponent, + createPlainElement, + defineVaporComponent, + inject, + PropType, + reactive, +} from 'vue' + +export const VaporRouterLinkImpl = defineVaporComponent({ + name: 'VaporRouterLink', + props: { + to: { + type: [String, Object] as PropType, + required: true, + }, + replace: Boolean, + activeClass: String, + // inactiveClass: String, + exactActiveClass: String, + custom: Boolean, + ariaCurrentValue: { + type: String as PropType, + default: 'page', + }, + viewTransition: Boolean, + }, + + setup(props, { slots, attrs }) { + const link = reactive(useLink(props)) + const { options } = inject(routerKey)! + + const elClass = computed(() => ({ + [getLinkClass( + props.activeClass, + options.linkActiveClass, + 'router-link-active' + )]: link.isActive, + // [getLinkClass( + // props.inactiveClass, + // options.linkInactiveClass, + // 'router-link-inactive' + // )]: !link.isExactActive, + [getLinkClass( + props.exactActiveClass, + options.linkExactActiveClass, + 'router-link-exact-active' + )]: link.isExactActive, + })) + + return createDynamicComponent(() => { + if (props.custom && slots.default) { + return slots.default(link) + } + return createPlainElement( + 'a', + { + 'aria-current': () => + link.isExactActive ? props.ariaCurrentValue : null, + href: () => link.href, + // this would override user added attrs but Vue will still add + // the listener, so we end up triggering both + onClick: () => link.navigate, + class: () => elClass.value, + $: [() => attrs], + }, + slots + ) + }) + }, +}) + +// @ts-ignore +VaporRouterLinkImpl.useLink = useLink + +export const VaporRouterLink: _RouterLinkI = VaporRouterLinkImpl as any diff --git a/packages/router/src/VaporRouterView.ts b/packages/router/src/VaporRouterView.ts new file mode 100644 index 000000000..8ed53ef3a --- /dev/null +++ b/packages/router/src/VaporRouterView.ts @@ -0,0 +1,188 @@ +import { + inject, + provide, + PropType, + ref, + unref, + ComponentPublicInstance, + VNodeProps, + computed, + AllowedComponentProps, + ComponentCustomProps, + watch, + VNode, + createTemplateRefSetter, + createComponent, + defineVaporComponent, + type VaporComponent, + createDynamicComponent, +} from 'vue' +import type { RouteLocationNormalizedLoaded } from './typed-routes' +import type { RouteLocationMatched } from './types' +import { + matchedRouteKey, + viewDepthKey, + routerViewLocationKey, +} from './injectionSymbols' +import { assign } from './utils' +import { isSameRouteRecord } from './location' +import type { RouterViewProps, RouterViewDevtoolsContext } from './RouterView' + +export type { RouterViewProps, RouterViewDevtoolsContext } + +export const VaporRouterViewImpl = /*#__PURE__*/ defineVaporComponent({ + name: 'VaporRouterView', + // #674 we manually inherit them + inheritAttrs: false, + props: { + name: { + type: String as PropType, + default: 'default', + }, + route: Object as PropType, + }, + + setup(props, { attrs, slots }) { + const injectedRoute = inject(routerViewLocationKey)! + const routeToDisplay = computed( + () => props.route || injectedRoute.value + ) + const injectedDepth = inject(viewDepthKey, 0) + // The depth changes based on empty components option, which allows passthrough routes e.g. routes with children + // that are used to reuse the `path` property + const depth = computed(() => { + let initialDepth = unref(injectedDepth) + const { matched } = routeToDisplay.value + let matchedRoute: RouteLocationMatched | undefined + while ( + (matchedRoute = matched[initialDepth]) && + !matchedRoute.components + ) { + initialDepth++ + } + return initialDepth + }) + const matchedRouteRef = computed( + () => routeToDisplay.value.matched[depth.value] + ) + + provide( + viewDepthKey, + computed(() => depth.value + 1) + ) + provide(matchedRouteKey, matchedRouteRef) + provide(routerViewLocationKey, routeToDisplay) + + const viewRef = ref() + + // watch at the same time the component instance, the route record we are + // rendering, and the name + watch( + () => [viewRef.value, matchedRouteRef.value, props.name] as const, + ([instance, to, name], [oldInstance, from]) => { + // copy reused instances + if (to) { + // this will update the instance for new instances as well as reused + // instances when navigating to a new route + to.instances[name] = instance + // the component instance is reused for a different route or name, so + // we copy any saved update or leave guards. With async setup, the + // mounting component will mount before the matchedRoute changes, + // making instance === oldInstance, so we check if guards have been + // added before. This works because we remove guards when + // unmounting/deactivating components + if (from && from !== to && instance && instance === oldInstance) { + if (!to.leaveGuards.size) { + to.leaveGuards = from.leaveGuards + } + if (!to.updateGuards.size) { + to.updateGuards = from.updateGuards + } + } + } + + // trigger beforeRouteEnter next callbacks + if ( + instance && + to && + // if there is no instance but to and from are the same this might be + // the first visit + (!from || !isSameRouteRecord(to, from) || !oldInstance) + ) { + ;(to.enterCallbacks[name] || []).forEach(callback => + callback(instance) + ) + } + }, + { flush: 'post' } + ) + + const ViewComponent = computed(() => { + const matchedRoute = matchedRouteRef.value + return matchedRoute && matchedRoute.components![props.name] + }) + + // props from route configuration + const routeProps = computed(() => { + const route = routeToDisplay.value + const currentName = props.name + const matchedRoute = matchedRouteRef.value + const routePropsOption = matchedRoute && matchedRoute.props[currentName] + return routePropsOption + ? routePropsOption === true + ? route.params + : typeof routePropsOption === 'function' + ? routePropsOption(route) + : routePropsOption + : null + }) + + const setRef = createTemplateRefSetter() + + const initComponent = () => { + if (!ViewComponent.value) return [] + const instance = createComponent(ViewComponent.value as VaporComponent, { + $: [() => assign({}, routeProps.value, attrs)], + }) + setRef(instance, viewRef) + return instance + } + + if (slots.default) { + return slots.default({ + // lazy initialization via getter (created on demand) for KeepAlive + get Component() { + return initComponent() + }, + get route() { + return routeToDisplay.value + }, + }) + } + return createDynamicComponent(initComponent) + }, +}) + +// export the public type for h/tsx inference +// also to avoid inline import() in generated d.ts files +/** + * Component to display the current route the user is at. + */ +export const VaporRouterView = VaporRouterViewImpl as unknown as { + new (): { + $props: AllowedComponentProps & + ComponentCustomProps & + VNodeProps & + RouterViewProps + + $slots: { + default?: ({ + Component, + route, + }: { + Component: VNode + route: RouteLocationNormalizedLoaded + }) => VNode[] + } + } +} diff --git a/packages/router/src/experimental/route-resolver/matchers/matcher-pattern-path-star.ts b/packages/router/src/experimental/route-resolver/matchers/matcher-pattern-path-star.ts index 7c28f7bd3..2c60940dc 100644 --- a/packages/router/src/experimental/route-resolver/matchers/matcher-pattern-path-star.ts +++ b/packages/router/src/experimental/route-resolver/matchers/matcher-pattern-path-star.ts @@ -16,7 +16,10 @@ import { MatcherPatternPath } from './matcher-pattern' * ``` */ export class MatcherPatternPathStar - implements MatcherPatternPath<{ pathMatch: string }> + implements + MatcherPatternPath<{ + pathMatch: string + }> { private path: string constructor(path: string = '') { diff --git a/packages/router/src/index.ts b/packages/router/src/index.ts index ca57f5309..6ac909107 100644 --- a/packages/router/src/index.ts +++ b/packages/router/src/index.ts @@ -166,7 +166,9 @@ export type { UseLinkOptions, UseLinkReturn, } from './RouterLink' +export { VaporRouterLink } from './VaporRouterLink' export { RouterView } from './RouterView' +export { VaporRouterView } from './VaporRouterView' export type { RouterViewProps } from './RouterView' export type { TypesConfig } from './config' diff --git a/packages/router/vitest.config.ts b/packages/router/vitest.config.ts index 7d52527d6..d0f5a605e 100644 --- a/packages/router/vitest.config.ts +++ b/packages/router/vitest.config.ts @@ -3,7 +3,10 @@ import Vue from '@vitejs/plugin-vue' export default defineConfig({ resolve: { - alias: [], + alias: { + // cjs does not export vapor runtime, use esm instead. + vue: 'vue/dist/vue.esm-bundler.js', + }, }, define: { __DEV__: true, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2e5f986f5..adbb522dd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,7 +13,7 @@ importers: version: 2.4.4 '@vitejs/plugin-vue': specifier: ^6.0.1 - version: 6.0.1(vite@7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1))(vue@3.6.0-alpha.2(typescript@5.9.3)) + version: 6.0.1(vite@7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1))(vue@3.6.0-alpha.7(typescript@5.9.3)) '@vitest/browser': specifier: ^3.2.4 version: 3.2.4(playwright@1.56.0)(vite@7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1))(vitest@3.2.4) @@ -67,7 +67,7 @@ importers: version: 3.2.4(@types/node@24.7.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.0)(jiti@2.6.1)(jsdom@26.1.0)(terser@5.43.1)(yaml@2.8.1) vitest-browser-vue: specifier: ^1.1.0 - version: 1.1.0(@vitest/browser@3.2.4)(vitest@3.2.4)(vue@3.6.0-alpha.2(typescript@5.9.3)) + version: 1.1.0(@vitest/browser@3.2.4)(vitest@3.2.4)(vue@3.6.0-alpha.7(typescript@5.9.3)) packages/docs: dependencies: @@ -85,7 +85,7 @@ importers: version: 1.6.4(markdown-it@14.1.0)(vite@7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1)) vitepress-translation-helper: specifier: ^0.2.2 - version: 0.2.2(vitepress@1.6.4(@algolia/client-search@5.37.0)(@types/node@24.7.2)(axios@1.10.0)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.43.1)(typescript@5.9.3))(vue@3.6.0-alpha.2(typescript@5.9.3)) + version: 0.2.2(vitepress@1.6.4(@algolia/client-search@5.37.0)(@types/node@24.7.2)(axios@1.10.0)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.43.1)(typescript@5.9.3))(vue@3.6.0-alpha.7(typescript@5.9.3)) vue-router: specifier: workspace:* version: link:../router @@ -93,8 +93,8 @@ importers: packages/experiments-playground: dependencies: vue: - specifier: ~3.6.0-alpha.2 - version: 3.6.0-alpha.2(typescript@5.9.3) + specifier: ~3.6.0-alpha.7 + version: 3.6.0-alpha.7(typescript@5.9.3) vue-router: specifier: workspace:* version: link:../router @@ -107,10 +107,10 @@ importers: version: 24.7.2 '@vitejs/plugin-vue': specifier: ^6.0.1 - version: 6.0.1(vite@7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1))(vue@3.6.0-alpha.2(typescript@5.9.3)) + version: 6.0.1(vite@7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1))(vue@3.6.0-alpha.7(typescript@5.9.3)) '@vue/tsconfig': specifier: ^0.8.1 - version: 0.8.1(typescript@5.9.3)(vue@3.6.0-alpha.2(typescript@5.9.3)) + version: 0.8.1(typescript@5.9.3)(vue@3.6.0-alpha.7(typescript@5.9.3)) typescript: specifier: ~5.9.3 version: 5.9.3 @@ -119,7 +119,7 @@ importers: version: 7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1) vite-plugin-vue-devtools: specifier: ^8.0.2 - version: 8.0.2(vite@7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1))(vue@3.6.0-alpha.2(typescript@5.9.3)) + version: 8.0.2(vite@7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1))(vue@3.6.0-alpha.7(typescript@5.9.3)) vue-tsc: specifier: ^3.1.1 version: 3.1.1(typescript@5.9.3) @@ -127,21 +127,21 @@ importers: packages/playground: dependencies: vue: - specifier: ~3.6.0-alpha.2 - version: 3.6.0-alpha.2(typescript@5.9.3) + specifier: ~3.6.0-alpha.7 + version: 3.6.0-alpha.7(typescript@5.9.3) devDependencies: '@types/node': specifier: ^24.7.2 version: 24.7.2 '@vitejs/plugin-vue': specifier: ^6.0.1 - version: 6.0.1(vite@7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1))(vue@3.6.0-alpha.2(typescript@5.9.3)) + version: 6.0.1(vite@7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1))(vue@3.6.0-alpha.7(typescript@5.9.3)) '@vue/compiler-sfc': specifier: ~3.5.22 version: 3.5.22 '@vue/tsconfig': specifier: ^0.8.1 - version: 0.8.1(typescript@5.9.3)(vue@3.6.0-alpha.2(typescript@5.9.3)) + version: 0.8.1(typescript@5.9.3)(vue@3.6.0-alpha.7(typescript@5.9.3)) vite: specifier: ^7.1.10 version: 7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1) @@ -181,13 +181,13 @@ importers: version: 7.0.0-dev.20251013.1 '@vitejs/plugin-vue': specifier: ^6.0.1 - version: 6.0.1(vite@7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1))(vue@3.6.0-alpha.2(typescript@5.9.3)) + version: 6.0.1(vite@7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1))(vue@3.6.0-alpha.7(typescript@5.9.3)) '@vue/compiler-sfc': specifier: ~3.5.22 version: 3.5.22 '@vue/server-renderer': specifier: ~3.5.22 - version: 3.5.22(vue@3.6.0-alpha.2(typescript@5.9.3)) + version: 3.5.22(vue@3.6.0-alpha.7(typescript@5.9.3)) '@vue/test-utils': specifier: ^2.4.6 version: 2.4.6 @@ -237,8 +237,8 @@ importers: specifier: ^7.1.10 version: 7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1) vue: - specifier: ~3.6.0-alpha.2 - version: 3.6.0-alpha.2(typescript@5.9.3) + specifier: ~3.6.0-alpha.7 + version: 3.6.0-alpha.7(typescript@5.9.3) packages: @@ -1617,29 +1617,29 @@ packages: '@vue/compiler-core@3.5.22': resolution: {integrity: sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==} - '@vue/compiler-core@3.6.0-alpha.2': - resolution: {integrity: sha512-2aPvrCWKKhKKU4TaX6N6+cY4LcLIlIc+tcxJHw029mZr7KGb/w+98UxU9o3mYe/CLo5c5v8ps4IlE/Tm4H/eZA==} + '@vue/compiler-core@3.6.0-alpha.7': + resolution: {integrity: sha512-/Vbduf1Sk6DpJkgyezTPPiULaFeMDxCwXpDvDiIjOPDarqtn7oplLpCgxJgMhdKVJVno22r1xqAEXxR+HDWQkw==} '@vue/compiler-dom@3.5.22': resolution: {integrity: sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==} - '@vue/compiler-dom@3.6.0-alpha.2': - resolution: {integrity: sha512-WHFo0z5QXXkBQk65NPrze1RO4RG6vAHcMudRG604zs2VsMkJPXBL5CAFcae3R6aoU3wwbIYHkklbMOelegS90w==} + '@vue/compiler-dom@3.6.0-alpha.7': + resolution: {integrity: sha512-3cNYa1sHJLqoBJrzhcjUrv+Us4mH54IhmTiYwjZP0Ov8anMpwdW5Bu+0LVvRLYpNoilW9OdTZyo7+xh8p1Jn3Q==} '@vue/compiler-sfc@3.5.22': resolution: {integrity: sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==} - '@vue/compiler-sfc@3.6.0-alpha.2': - resolution: {integrity: sha512-QFwY1M5lYTo6Qt0rSQKXEp9aZngaKtT4WRlITAuioNeFoK5Y5stElr6sw2dopsaPzjbAJftDbQ7MgtMjOZ9XQg==} + '@vue/compiler-sfc@3.6.0-alpha.7': + resolution: {integrity: sha512-nDohrY7Qb7/HJNVAuXpA/jsnk+VX6VbDmtLA4zFhK7OaqcmaxYCaTuQzfRN/DRBRB2tEb/cNaiS8ArZ/3ZtloQ==} '@vue/compiler-ssr@3.5.22': resolution: {integrity: sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==} - '@vue/compiler-ssr@3.6.0-alpha.2': - resolution: {integrity: sha512-BtP+A4xL7QSCf/P1eOvJw9XG1wojK3nqjJXSABcwXeIv0SJgBpi4CZ/obVUPAiUWMmdJDV3bdSwqQtkiXqOmug==} + '@vue/compiler-ssr@3.6.0-alpha.7': + resolution: {integrity: sha512-OHTUffG2w255imuw4BrIyjNwzIfFi0ywhwR1ZLvE5mjoQq5cWDZgVz7/t51aNZJncx/BQ6bnR5+rppLocYuF2Q==} - '@vue/compiler-vapor@3.6.0-alpha.2': - resolution: {integrity: sha512-/qmhrcOrVmBsZiQEpDMH5coH/hx7v1uflKCXDcvWhl7XaPfNWBeVwIndU/s/8mtOz+5nuCZrGtbqozXc4tfQzw==} + '@vue/compiler-vapor@3.6.0-alpha.7': + resolution: {integrity: sha512-d8CMxs1lMRw1jPanQgZhaRgXh/iX6czh4FHMHDTDXJYBp2Rr0R9yEV7N8hoiRjDf4TjxvlTFCuuuYXytOLpZ8g==} '@vue/devtools-api@6.6.4': resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} @@ -1675,41 +1675,41 @@ packages: '@vue/reactivity@3.5.22': resolution: {integrity: sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A==} - '@vue/reactivity@3.6.0-alpha.2': - resolution: {integrity: sha512-dqCEZHz7dy5u0fZV1ILObnH2YCA+I6UHuOt7PLGb1NBEAAUbO251nOK9OfecZEEPsvMJRl3P9rNqdJmAvIcHTg==} + '@vue/reactivity@3.6.0-alpha.7': + resolution: {integrity: sha512-2CtOq8u8rbfX6Zr+N0Hswqt2KtyZFSsBDAvkPa7A/Ia95/sChrN6RDJsLmf0+RF0kV/XacVRiBoeCArp/YJAOQ==} '@vue/runtime-core@3.5.22': resolution: {integrity: sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ==} - '@vue/runtime-core@3.6.0-alpha.2': - resolution: {integrity: sha512-OPEIqs/q2rTZWTJm8VVSsI9B2OgsKdtprKEqzw3L74tBGDwNRleCGxGxu2T3LUpPlOtQFkSCZTIh1M52/6PG0w==} + '@vue/runtime-core@3.6.0-alpha.7': + resolution: {integrity: sha512-wX9mSkfOYy61Lvw0yo448Z4o6YFZ1KToFi3tssc3VcgJ3aYRb3ED9+4KSibLy/GawJatyJCA2Op3GUujfyPe8g==} '@vue/runtime-dom@3.5.22': resolution: {integrity: sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww==} - '@vue/runtime-dom@3.6.0-alpha.2': - resolution: {integrity: sha512-oYrpDYpbRqv/pgqM1SJEN7w9oahCjj6Txatz7McMJ++CX0WyFqAChi3Zvxr06Vrte+OCWA86t6Ot8K+mKV0QAA==} + '@vue/runtime-dom@3.6.0-alpha.7': + resolution: {integrity: sha512-lfgRBBhTjGRrla/Fbxc8FPKbuJ+Mzi0lMpC1CBbqdyEqEodfuU78IWzdc14i3WIhz3PbU3wIeeaZUkU5taJXlw==} - '@vue/runtime-vapor@3.6.0-alpha.2': - resolution: {integrity: sha512-UdGN6tcXIMTD/OFR7qI8V+ID4lji7K5A90i68OjiCr8nevtGxjfYPB3Lz5Lg7S6sckPCnFTECHExzWOmE7aV0A==} + '@vue/runtime-vapor@3.6.0-alpha.7': + resolution: {integrity: sha512-inodgjKZgaDXsFjks/R6jIaQ7saKPWPBu9a2lYAHMKd6D5A/AJU1i10wNL7b1EnjAadAUe2mQ6HCHYOmeLhK4A==} peerDependencies: - '@vue/runtime-dom': 3.6.0-alpha.2 + '@vue/runtime-dom': 3.6.0-alpha.7 '@vue/server-renderer@3.5.22': resolution: {integrity: sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ==} peerDependencies: vue: 3.5.22 - '@vue/server-renderer@3.6.0-alpha.2': - resolution: {integrity: sha512-Zw+fX/FlRqfwzrv5EmCyLBN5bOZWsRo3SnxQKqPl1yA5xGDe+FIe9cjII/X7hlFdC9Vb4lmQBvOQSnTeTj8ygA==} + '@vue/server-renderer@3.6.0-alpha.7': + resolution: {integrity: sha512-v60F/cKFklR8j/cfyV5rY649yIo1Wc12Q5S6btCKJ0bJDesx9IeBY5n0p9A4Hh/1syx4YPqk0atuYDXVUS/Q/Q==} peerDependencies: - vue: 3.6.0-alpha.2 + vue: 3.6.0-alpha.7 '@vue/shared@3.5.22': resolution: {integrity: sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==} - '@vue/shared@3.6.0-alpha.2': - resolution: {integrity: sha512-/tviorcvTBm63BIg/oEpU+tuU3NUrLkWWPrljCH//2vHwc/RJZ7wxq6vPLWfTcuSc82uxDWZXDTKxUjN8/JmGQ==} + '@vue/shared@3.6.0-alpha.7': + resolution: {integrity: sha512-+4M8SiMOT68B7PCIBWjFDaAVjfAzxBSU7Ia3mW3W0R9iyYjbm3KBeHjBmnvYyAagq9ql3VWfz28mPF6HMvT8RA==} '@vue/test-utils@2.4.6': resolution: {integrity: sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==} @@ -4570,8 +4570,8 @@ packages: typescript: optional: true - vue@3.6.0-alpha.2: - resolution: {integrity: sha512-xn3jwLo6eMqxEKEAW8TWX+KSm7K2jTrNZ5Q3+H5Bu9P3mkoz8w0lUQHrO5WcnSVZfmR7vvw4/5XSYQe2XeDzdw==} + vue@3.6.0-alpha.7: + resolution: {integrity: sha512-+/gdBadJSo8lENlOtDOUKo3818cyl4Cjjh1O1HutVLm7UnQF59496xnlS4j0ug0QaQwI3UnvEjlqsbMhSP2scw==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -5936,11 +5936,11 @@ snapshots: vite: 5.4.20(@types/node@24.7.2)(terser@5.43.1) vue: 3.5.22(typescript@5.9.3) - '@vitejs/plugin-vue@6.0.1(vite@7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1))(vue@3.6.0-alpha.2(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.1(vite@7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1))(vue@3.6.0-alpha.7(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.29 vite: 7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1) - vue: 3.6.0-alpha.2(typescript@5.9.3) + vue: 3.6.0-alpha.7(typescript@5.9.3) '@vitest/browser@3.2.4(playwright@1.56.0)(vite@7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1))(vitest@3.2.4)': dependencies: @@ -6084,10 +6084,10 @@ snapshots: estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-core@3.6.0-alpha.2': + '@vue/compiler-core@3.6.0-alpha.7': dependencies: '@babel/parser': 7.28.5 - '@vue/shared': 3.6.0-alpha.2 + '@vue/shared': 3.6.0-alpha.7 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 @@ -6097,10 +6097,10 @@ snapshots: '@vue/compiler-core': 3.5.22 '@vue/shared': 3.5.22 - '@vue/compiler-dom@3.6.0-alpha.2': + '@vue/compiler-dom@3.6.0-alpha.7': dependencies: - '@vue/compiler-core': 3.6.0-alpha.2 - '@vue/shared': 3.6.0-alpha.2 + '@vue/compiler-core': 3.6.0-alpha.7 + '@vue/shared': 3.6.0-alpha.7 '@vue/compiler-sfc@3.5.22': dependencies: @@ -6114,14 +6114,14 @@ snapshots: postcss: 8.5.6 source-map-js: 1.2.1 - '@vue/compiler-sfc@3.6.0-alpha.2': + '@vue/compiler-sfc@3.6.0-alpha.7': dependencies: '@babel/parser': 7.28.5 - '@vue/compiler-core': 3.6.0-alpha.2 - '@vue/compiler-dom': 3.6.0-alpha.2 - '@vue/compiler-ssr': 3.6.0-alpha.2 - '@vue/compiler-vapor': 3.6.0-alpha.2 - '@vue/shared': 3.6.0-alpha.2 + '@vue/compiler-core': 3.6.0-alpha.7 + '@vue/compiler-dom': 3.6.0-alpha.7 + '@vue/compiler-ssr': 3.6.0-alpha.7 + '@vue/compiler-vapor': 3.6.0-alpha.7 + '@vue/shared': 3.6.0-alpha.7 estree-walker: 2.0.2 magic-string: 0.30.21 postcss: 8.5.6 @@ -6132,16 +6132,16 @@ snapshots: '@vue/compiler-dom': 3.5.22 '@vue/shared': 3.5.22 - '@vue/compiler-ssr@3.6.0-alpha.2': + '@vue/compiler-ssr@3.6.0-alpha.7': dependencies: - '@vue/compiler-dom': 3.6.0-alpha.2 - '@vue/shared': 3.6.0-alpha.2 + '@vue/compiler-dom': 3.6.0-alpha.7 + '@vue/shared': 3.6.0-alpha.7 - '@vue/compiler-vapor@3.6.0-alpha.2': + '@vue/compiler-vapor@3.6.0-alpha.7': dependencies: '@babel/parser': 7.28.5 - '@vue/compiler-dom': 3.6.0-alpha.2 - '@vue/shared': 3.6.0-alpha.2 + '@vue/compiler-dom': 3.6.0-alpha.7 + '@vue/shared': 3.6.0-alpha.7 estree-walker: 2.0.2 source-map-js: 1.2.1 @@ -6151,7 +6151,7 @@ snapshots: dependencies: '@vue/devtools-kit': 7.7.7 - '@vue/devtools-core@8.0.2(vite@7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1))(vue@3.6.0-alpha.2(typescript@5.9.3))': + '@vue/devtools-core@8.0.2(vite@7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1))(vue@3.6.0-alpha.7(typescript@5.9.3))': dependencies: '@vue/devtools-kit': 8.0.2 '@vue/devtools-shared': 8.0.2 @@ -6159,7 +6159,7 @@ snapshots: nanoid: 5.1.6 pathe: 2.0.3 vite-hot-client: 2.1.0(vite@7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1)) - vue: 3.6.0-alpha.2(typescript@5.9.3) + vue: 3.6.0-alpha.7(typescript@5.9.3) transitivePeerDependencies: - vite @@ -6207,19 +6207,19 @@ snapshots: dependencies: '@vue/shared': 3.5.22 - '@vue/reactivity@3.6.0-alpha.2': + '@vue/reactivity@3.6.0-alpha.7': dependencies: - '@vue/shared': 3.6.0-alpha.2 + '@vue/shared': 3.6.0-alpha.7 '@vue/runtime-core@3.5.22': dependencies: '@vue/reactivity': 3.5.22 '@vue/shared': 3.5.22 - '@vue/runtime-core@3.6.0-alpha.2': + '@vue/runtime-core@3.6.0-alpha.7': dependencies: - '@vue/reactivity': 3.6.0-alpha.2 - '@vue/shared': 3.6.0-alpha.2 + '@vue/reactivity': 3.6.0-alpha.7 + '@vue/shared': 3.6.0-alpha.7 '@vue/runtime-dom@3.5.22': dependencies: @@ -6228,18 +6228,18 @@ snapshots: '@vue/shared': 3.5.22 csstype: 3.1.3 - '@vue/runtime-dom@3.6.0-alpha.2': + '@vue/runtime-dom@3.6.0-alpha.7': dependencies: - '@vue/reactivity': 3.6.0-alpha.2 - '@vue/runtime-core': 3.6.0-alpha.2 - '@vue/shared': 3.6.0-alpha.2 + '@vue/reactivity': 3.6.0-alpha.7 + '@vue/runtime-core': 3.6.0-alpha.7 + '@vue/shared': 3.6.0-alpha.7 csstype: 3.1.3 - '@vue/runtime-vapor@3.6.0-alpha.2(@vue/runtime-dom@3.6.0-alpha.2)': + '@vue/runtime-vapor@3.6.0-alpha.7(@vue/runtime-dom@3.6.0-alpha.7)': dependencies: - '@vue/reactivity': 3.6.0-alpha.2 - '@vue/runtime-dom': 3.6.0-alpha.2 - '@vue/shared': 3.6.0-alpha.2 + '@vue/reactivity': 3.6.0-alpha.7 + '@vue/runtime-dom': 3.6.0-alpha.7 + '@vue/shared': 3.6.0-alpha.7 '@vue/server-renderer@3.5.22(vue@3.5.22(typescript@5.9.3))': dependencies: @@ -6247,31 +6247,31 @@ snapshots: '@vue/shared': 3.5.22 vue: 3.5.22(typescript@5.9.3) - '@vue/server-renderer@3.5.22(vue@3.6.0-alpha.2(typescript@5.9.3))': + '@vue/server-renderer@3.5.22(vue@3.6.0-alpha.7(typescript@5.9.3))': dependencies: '@vue/compiler-ssr': 3.5.22 '@vue/shared': 3.5.22 - vue: 3.6.0-alpha.2(typescript@5.9.3) + vue: 3.6.0-alpha.7(typescript@5.9.3) - '@vue/server-renderer@3.6.0-alpha.2(vue@3.6.0-alpha.2(typescript@5.9.3))': + '@vue/server-renderer@3.6.0-alpha.7(vue@3.6.0-alpha.7(typescript@5.9.3))': dependencies: - '@vue/compiler-ssr': 3.6.0-alpha.2 - '@vue/shared': 3.6.0-alpha.2 - vue: 3.6.0-alpha.2(typescript@5.9.3) + '@vue/compiler-ssr': 3.6.0-alpha.7 + '@vue/shared': 3.6.0-alpha.7 + vue: 3.6.0-alpha.7(typescript@5.9.3) '@vue/shared@3.5.22': {} - '@vue/shared@3.6.0-alpha.2': {} + '@vue/shared@3.6.0-alpha.7': {} '@vue/test-utils@2.4.6': dependencies: js-beautify: 1.15.1 vue-component-type-helpers: 2.0.21 - '@vue/tsconfig@0.8.1(typescript@5.9.3)(vue@3.6.0-alpha.2(typescript@5.9.3))': + '@vue/tsconfig@0.8.1(typescript@5.9.3)(vue@3.6.0-alpha.7(typescript@5.9.3))': optionalDependencies: typescript: 5.9.3 - vue: 3.6.0-alpha.2(typescript@5.9.3) + vue: 3.6.0-alpha.7(typescript@5.9.3) '@vueuse/core@12.8.2(typescript@5.9.3)': dependencies: @@ -9160,9 +9160,9 @@ snapshots: transitivePeerDependencies: - supports-color - vite-plugin-vue-devtools@8.0.2(vite@7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1))(vue@3.6.0-alpha.2(typescript@5.9.3)): + vite-plugin-vue-devtools@8.0.2(vite@7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1))(vue@3.6.0-alpha.7(typescript@5.9.3)): dependencies: - '@vue/devtools-core': 8.0.2(vite@7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1))(vue@3.6.0-alpha.2(typescript@5.9.3)) + '@vue/devtools-core': 8.0.2(vite@7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1))(vue@3.6.0-alpha.7(typescript@5.9.3)) '@vue/devtools-kit': 8.0.2 '@vue/devtools-shared': 8.0.2 execa: 9.6.0 @@ -9225,12 +9225,12 @@ snapshots: transitivePeerDependencies: - supports-color - vitepress-translation-helper@0.2.2(vitepress@1.6.4(@algolia/client-search@5.37.0)(@types/node@24.7.2)(axios@1.10.0)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.43.1)(typescript@5.9.3))(vue@3.6.0-alpha.2(typescript@5.9.3)): + vitepress-translation-helper@0.2.2(vitepress@1.6.4(@algolia/client-search@5.37.0)(@types/node@24.7.2)(axios@1.10.0)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.43.1)(typescript@5.9.3))(vue@3.6.0-alpha.7(typescript@5.9.3)): dependencies: minimist: 1.2.8 simple-git: 3.28.0 vitepress: 1.6.4(@algolia/client-search@5.37.0)(@types/node@24.7.2)(axios@1.10.0)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.43.1)(typescript@5.9.3) - vue: 3.6.0-alpha.2(typescript@5.9.3) + vue: 3.6.0-alpha.7(typescript@5.9.3) transitivePeerDependencies: - supports-color @@ -9283,12 +9283,12 @@ snapshots: - typescript - universal-cookie - vitest-browser-vue@1.1.0(@vitest/browser@3.2.4)(vitest@3.2.4)(vue@3.6.0-alpha.2(typescript@5.9.3)): + vitest-browser-vue@1.1.0(@vitest/browser@3.2.4)(vitest@3.2.4)(vue@3.6.0-alpha.7(typescript@5.9.3)): dependencies: '@vitest/browser': 3.2.4(playwright@1.56.0)(vite@7.1.10(@types/node@24.7.2)(jiti@2.6.1)(terser@5.43.1)(yaml@2.8.1))(vitest@3.2.4) '@vue/test-utils': 2.4.6 vitest: 3.2.4(@types/node@24.7.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.0)(jiti@2.6.1)(jsdom@26.1.0)(terser@5.43.1)(yaml@2.8.1) - vue: 3.6.0-alpha.2(typescript@5.9.3) + vue: 3.6.0-alpha.7(typescript@5.9.3) vitest@3.2.4(@types/node@24.7.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.0)(jiti@2.6.1)(jsdom@26.1.0)(terser@5.43.1)(yaml@2.8.1): dependencies: @@ -9355,14 +9355,14 @@ snapshots: optionalDependencies: typescript: 5.9.3 - vue@3.6.0-alpha.2(typescript@5.9.3): + vue@3.6.0-alpha.7(typescript@5.9.3): dependencies: - '@vue/compiler-dom': 3.6.0-alpha.2 - '@vue/compiler-sfc': 3.6.0-alpha.2 - '@vue/runtime-dom': 3.6.0-alpha.2 - '@vue/runtime-vapor': 3.6.0-alpha.2(@vue/runtime-dom@3.6.0-alpha.2) - '@vue/server-renderer': 3.6.0-alpha.2(vue@3.6.0-alpha.2(typescript@5.9.3)) - '@vue/shared': 3.6.0-alpha.2 + '@vue/compiler-dom': 3.6.0-alpha.7 + '@vue/compiler-sfc': 3.6.0-alpha.7 + '@vue/runtime-dom': 3.6.0-alpha.7 + '@vue/runtime-vapor': 3.6.0-alpha.7(@vue/runtime-dom@3.6.0-alpha.7) + '@vue/server-renderer': 3.6.0-alpha.7(vue@3.6.0-alpha.7(typescript@5.9.3)) + '@vue/shared': 3.6.0-alpha.7 optionalDependencies: typescript: 5.9.3