diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..16ca3928 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Resource composition hashes commit exact Markdown bytes across platforms. +packages/resources/pages/*.md text eol=lf diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 69d3a83d..5c140808 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,8 +24,16 @@ jobs: node-version: 24 cache: pnpm - run: pnpm install --frozen-lockfile + - run: pnpm --filter @fastppt/fonts verify-fonts - run: pnpm --filter @fastppt/e2e exec playwright install --with-deps chromium - run: pnpm typecheck - run: pnpm lint - - run: pnpm test - - run: pnpm build + # Each package launches its own workers/Slidev builds on the shared runner. + - run: pnpm test --concurrency=2 + - run: pnpm build --concurrency=2 + - uses: actions/upload-artifact@v4 + if: failure() + with: + name: browser-test-results + path: tests/e2e/test-results + if-no-files-found: ignore diff --git a/.gitignore b/.gitignore index 480b9745..02f40bdf 100644 --- a/.gitignore +++ b/.gitignore @@ -20,8 +20,8 @@ task_plan.md /ppts/ /decks/ assets/ -!packages/components/src/assets/ -!packages/components/src/assets/fastppt-icon.svg +!apps/web/src/components/ui/assets/ +!apps/web/src/components/ui/assets/fastppt-icon.svg # FastPPT workspace files .codex/ @@ -64,3 +64,11 @@ assets/ /packages/resources/visual-comparison/*-progress.json !packages/animations/manifest.csv + +!packages/fonts/assets/ +packages/fonts/assets/* +!packages/fonts/assets/fonts/ +packages/fonts/assets/fonts/* +!packages/fonts/assets/fonts/*.ttf +!packages/fonts/assets/licenses/ +!packages/fonts/assets/licenses/*.txt diff --git a/README.md b/README.md index 0849c08d..652e9e67 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,8 @@ FastPPT Web - 现代浏览器 - Claude Code 或 Codex CLI(只使用对应 Agent 时需要) +源码工作区的共享包从官方 npm registry 消费:`apps/web/package.json` 中的 `@fastrd/ui-foundation`、`@fastrd/ui-vue`,以及 `packages/harness-codex/package.json` 中的 `@fastrd/harness-transport` 均精确锁定 `0.1.2`。在仓库根目录执行 `pnpm install --frozen-lockfile --registry=https://registry.npmjs.org/`,统一使用根 `pnpm-lock.yaml`。更新锁前先用 `npm view <包名>@0.1.2 version dist --json --registry=https://registry.npmjs.org/` 确认版本、tarball 和 provenance;发布尚未可用时等待发布完成,不切换到 GitHub tarball。 + ### 安装 CLI 全局安装: diff --git a/apps/cli/tests/core.test.ts b/apps/cli/tests/core.test.ts index 60d55fe3..2d74da8b 100644 --- a/apps/cli/tests/core.test.ts +++ b/apps/cli/tests/core.test.ts @@ -262,7 +262,7 @@ describe('CLI core service integration', () => { revision: written.revision, }) const installed = (await run(['skills', 'install'])) as { - statuses: Array<{ skillId: string; state: string }> + statuses: Array<{ skillId: string; kind: string; state: string }> } expect( installed.statuses.filter( @@ -271,9 +271,11 @@ describe('CLI core service integration', () => { item.skillId === 'fastppt-ppt-generate', ), ).toHaveLength(4) - expect(installed.statuses.every((item) => item.state === 'installed')).toBe( - true, - ) + for (const item of installed.statuses) { + expect(item, item.skillId).toMatchObject({ + state: item.kind === 'theme' ? 'on-demand' : 'installed', + }) + } expect( await readFile( join(workspaceRoot, '.agents/skills/fastppt/references/cli.md'), diff --git a/apps/gateway/src/app.ts b/apps/gateway/src/app.ts index cb78dd40..331c4571 100644 --- a/apps/gateway/src/app.ts +++ b/apps/gateway/src/app.ts @@ -1477,7 +1477,7 @@ export async function createGateway( // Script-free resource iframes have opaque origins. Their local webfonts // need CORS, so allow only immutable font reads from that sandbox origin. const sandboxFont = origin === 'null' && (request.method === 'GET' || request.method === 'HEAD') - && (/^\/api\/v1\/resources\/assets\/[a-f0-9]{24}\.woff2(?:\?|$)/.test(request.url) || /^\/api\/v1\/animations\/runtime\.js(?:\?|$)/.test(request.url)) + && (/^\/api\/v1\/resources\/assets\/[a-f0-9]+\.woff2(?:\?|$)/.test(request.url) || /^\/api\/v1\/animations\/runtime\.js(?:\?|$)/.test(request.url)) if (sandboxFont) return if (!origin || config.allowedWebOrigins.includes(origin)) return request.log.warn({ origin }, 'Rejected browser origin') diff --git a/apps/gateway/tests/app.test.ts b/apps/gateway/tests/app.test.ts index ec5ef31a..e612a56f 100644 --- a/apps/gateway/tests/app.test.ts +++ b/apps/gateway/tests/app.test.ts @@ -879,10 +879,12 @@ describe('gateway', () => { expect( foreignLocalOrigin.headers['access-control-allow-origin'], ).toBeUndefined() - const fontPath = '/api/v1/resources/assets/000000000000000000000000.woff2' - expect((await app.inject({ method: 'GET', url: fontPath, headers: { origin: 'null' } })).statusCode).toBe(404) - for (const [method, url] of [['POST', fontPath], ['GET', '/api/v1/workspace'], ['GET', fontPath.replace('.woff2', '.png')]] as const) - expect((await app.inject({ method, url, headers: { origin: 'null' } })).statusCode).toBe(403) + for (const length of [24, 64]) { + const fontPath = `/api/v1/resources/assets/${'0'.repeat(length)}.woff2` + expect((await app.inject({ method: 'GET', url: fontPath, headers: { origin: 'null' } })).statusCode).toBe(404) + for (const [method, url] of [['POST', fontPath], ['GET', '/api/v1/workspace'], ['GET', fontPath.replace('.woff2', '.png')]] as const) + expect((await app.inject({ method, url, headers: { origin: 'null' } })).statusCode).toBe(403) + } }) it('returns precise not-found errors for runs and browser inspections', async () => { @@ -1926,10 +1928,9 @@ describe('gateway', () => { const fixtureThemes = createThemeFixture() const app = await makeApp(root, undefined, fixtureThemes) openApps.push(app) - const sample = resolve( - dirname(fileURLToPath(import.meta.url)), - '../../../references/pptx-renderer/docs/example/1-chart-and-complex/source.pptx', - ) + const sample = join(root, 'source.pptx') + const { writeEditablePptx } = await import('@fastppt/slidewave/server') + await writeEditablePptx(exportSnapshot, sample, { embedFonts: false }) const pptx = readFileSync(sample) const response = await app.inject({ method: 'POST', @@ -1940,7 +1941,7 @@ describe('gateway', () => { themeName: 'import-test', }, }) - expect(response.statusCode).toBe(200) + expect(response.statusCode, response.body).toBe(200) const result = ImportPptxThemeResultSchema.parse(response.json()) expect(result.themeId).toBe('slidev-theme-import-test') expect(result.skillId).toBe('fastppt-theme-import-test') @@ -2225,7 +2226,7 @@ describe('gateway', () => { components: expect.any(Array), message: expect.any(String), }) - }) + }, 30_000) // Writes, imports and approves a real PPTX, including registry reload. it('rejects non-PPTX theme imports before starting extraction', async () => { const root = mkdtempSync(join(tmpdir(), 'fastppt-import-invalid-')) diff --git a/apps/web/package.json b/apps/web/package.json index 1bda6080..5f174134 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -26,7 +26,8 @@ "zod": "catalog:", "@fastppt/markdown": "workspace:*", "markdown-it": "^14.3.0", - "@fastppt/components": "workspace:*" + "@fastrd/ui-vue": "0.1.2", + "@fastrd/ui-foundation": "0.1.2" }, "devDependencies": { "@vitejs/plugin-vue": "^6.0.1", diff --git a/apps/web/src/color-mode.ts b/apps/web/src/color-mode.ts new file mode 100644 index 00000000..9cd39657 --- /dev/null +++ b/apps/web/src/color-mode.ts @@ -0,0 +1,9 @@ +import { initColorMode } from '@fastrd/ui-foundation' +import { computed, shallowRef } from 'vue' + +const controller = initColorMode({ storageKey: 'fastppt.color-mode' }) +const resolved = shallowRef(controller.resolved) +const unsubscribe = controller.subscribe(state => { resolved.value = state.resolved }) +export const isDark = computed(() => resolved.value === 'dark') +export const toggleColorMode = () => controller.setMode(isDark.value ? 'light' : 'dark') +if (import.meta.hot) import.meta.hot.dispose(() => { unsubscribe(); controller.dispose() }) diff --git a/apps/web/src/components/AppErrorBoundary.vue b/apps/web/src/components/AppErrorBoundary.vue index c4f46b13..195a4cd9 100644 --- a/apps/web/src/components/AppErrorBoundary.vue +++ b/apps/web/src/components/AppErrorBoundary.vue @@ -1,5 +1,5 @@ @@ -380,33 +343,12 @@ code { .catalog-state.error { color: var(--color-danger); } -.modal-backdrop { - position: fixed; - z-index: 1000; - inset: 0; - display: grid; - place-items: center; - padding: 24px; - background: var(--color-overlay); -} -.theme-modal { +.theme-modal[open] { display: grid; grid-template-rows: auto minmax(0, 1fr); - width: min(820px, 100%); + width: min(820px, calc(100vw - 48px)); max-height: min(760px, calc(100dvh - 48px)); overflow: hidden; - border: 1px solid var(--color-border-strong); - border-radius: 14px; - background: var(--color-panel-raised); - box-shadow: var(--shadow-modal); -} -.modal-header { - display: flex; - align-items: start; - justify-content: space-between; - gap: 24px; - padding: 20px 22px; - border-bottom: 1px solid var(--color-border); } .modal-header h2 { margin-top: 4px; diff --git a/packages/components/src/BrandMark.vue b/apps/web/src/components/ui/BrandMark.vue similarity index 62% rename from packages/components/src/BrandMark.vue rename to apps/web/src/components/ui/BrandMark.vue index 3c9cf6b5..a85d3bd7 100644 --- a/packages/components/src/BrandMark.vue +++ b/apps/web/src/components/ui/BrandMark.vue @@ -1,9 +1,10 @@ diff --git a/packages/components/src/color-mode.ts b/packages/components/src/color-mode.ts deleted file mode 100644 index 8835c213..00000000 --- a/packages/components/src/color-mode.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { computed, readonly, shallowRef } from 'vue' - -export type ColorMode = 'light' | 'dark' -export type ColorModePreference = ColorMode | 'system' -const STORAGE_KEY = 'fastppt.color-mode' -const mode = shallowRef('light') -let preference: ColorModePreference = 'system' -let initialized = false -let systemQuery: MediaQueryList | undefined - -function apply(): void { - mode.value = - preference === 'system' - ? systemQuery?.matches - ? 'dark' - : 'light' - : preference - document.documentElement.dataset.theme = mode.value -} - -export function initializeColorMode(): void { - if (initialized || typeof window === 'undefined') return - initialized = true - systemQuery = window.matchMedia('(prefers-color-scheme: dark)') - try { - const saved = localStorage.getItem(STORAGE_KEY) - if (saved === 'light' || saved === 'dark') preference = saved - } catch { - /* System preference remains usable without storage. */ - } - apply() - systemQuery.addEventListener('change', () => { - if (preference === 'system') apply() - }) -} - -export function setColorMode(value: ColorModePreference): void { - initializeColorMode() - preference = value - try { - if (value === 'system') localStorage.removeItem(STORAGE_KEY) - else localStorage.setItem(STORAGE_KEY, value) - } catch { - /* The current session still keeps the selected mode. */ - } - apply() -} - -export function useColorMode() { - initializeColorMode() - return { - mode: readonly(mode), - isDark: computed(() => mode.value === 'dark'), - toggle: () => setColorMode(mode.value === 'dark' ? 'light' : 'dark'), - } -} diff --git a/packages/components/src/index.ts b/packages/components/src/index.ts deleted file mode 100644 index 7490ad6d..00000000 --- a/packages/components/src/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -export * from './primitives.js' -export { default as Select } from './Select.vue' -export type { SelectOption as SelectItem } from './Select.vue' -export { default as Icon } from './Icon.vue' -export { default as BrandMark } from './BrandMark.vue' -export { fastpptIconUrl } from './brand.js' -export { default as Modal } from './Modal.vue' -export { - initializeColorMode, - setColorMode, - useColorMode, -} from './color-mode.js' -export type { ColorMode, ColorModePreference } from './color-mode.js' diff --git a/packages/components/src/primitives.ts b/packages/components/src/primitives.ts deleted file mode 100644 index c7123af5..00000000 --- a/packages/components/src/primitives.ts +++ /dev/null @@ -1,203 +0,0 @@ -import { - h, - mergeProps, - withDirectives, - vModelDynamic, - vModelText, - vModelSelect, - type FunctionalComponent, - type HTMLAttributes, - type InputHTMLAttributes, - type TextareaHTMLAttributes, - type SelectHTMLAttributes, - type SVGAttributes, -} from 'vue' - -type ElementProps = HTMLAttributes & { as?: string } - -// Functional roots deliberately preserve native DOM refs for editors, frames, -// dialogs and resize handles. Styling and control behavior live in this package. -function element( - name: string, - tag: string, - className = '', -): FunctionalComponent { - const component: FunctionalComponent = ( - props, - { attrs, slots }, - ) => - h( - props.as ?? tag, - mergeProps(attrs, { class: className }), - slots.default?.(), - ) - component.displayName = name - component.props = ['as'] - component.inheritAttrs = false - return component -} - -export const Box = element('Box', 'div') -export const Text = element('Text', 'span') -export const Heading = element('Heading', 'h2', 'fp-heading') -export const Panel = element('Panel', 'section') -export const ModalBody = element('ModalBody', 'div', 'fp-modal-body') -export const Header = element('Header', 'header') -export const Footer = element('Footer', 'footer') -export const Nav = element('Nav', 'nav') -export const Aside = element('Aside', 'aside') -export const Main = element('Main', 'main') -export const Article = element('Article', 'article') -export const Form = element('Form', 'form') -export const Field = element('Field', 'label', 'fp-field') -export const Fieldset = element('Fieldset', 'fieldset', 'fp-fieldset') -export const Legend = element('Legend', 'legend', 'fp-legend') -export const Disclosure = element('Disclosure', 'details', 'fp-disclosure') -export const DisclosureTrigger: FunctionalComponent = ( - props, - { attrs, slots }, -) => h(props.as ?? 'summary', mergeProps(attrs, { - class: ['fp-disclosure-trigger', `fp-disclosure-trigger--${props.size ?? 'sm'}`], -}), slots.default?.()) -DisclosureTrigger.props = ['as', 'size'] -DisclosureTrigger.inheritAttrs = false -export const List = element('List', 'ul') -export const ListItem = element('ListItem', 'li') -export const DescriptionList = element('DescriptionList', 'dl') -export const Term = element('Term', 'dt') -export const Description = element('Description', 'dd') -export const Table = element('Table', 'table', 'fp-table') -export const TableHead = element('TableHead', 'thead') -export const TableBody = element('TableBody', 'tbody') -export const TableRow = element('TableRow', 'tr') -export const TableCell = element('TableCell', 'td') -export const TableHeader = element('TableHeader', 'th') -export const TableCaption = element('TableCaption', 'caption') -export const Frame = element('Frame', 'iframe') -export const Image = element('Image', 'img') -export const DialogSurface = element('DialogSurface', 'dialog', 'fp-dialog') -export const Progress = element('Progress', 'progress', 'fp-progress') -export const Link = element('Link', 'a', 'fp-link') -export const Svg: FunctionalComponent = ( - _props, - { attrs, slots }, -) => h('svg', attrs, slots.default?.()) -export const SvgPath: FunctionalComponent = ( - _props, - { attrs }, -) => h('path', attrs) - -interface ButtonProps extends HTMLAttributes { - variant?: 'primary' | 'secondary' | 'quiet' | 'icon' | 'navigation' | 'danger' - size?: 'xs' | 'sm' | 'md' - type?: 'button' | 'submit' | 'reset' - disabled?: boolean -} -export const Button: FunctionalComponent = ( - props, - { attrs, slots }, -) => - h( - 'button', - mergeProps(attrs, { - type: props.type ?? 'button', - disabled: props.disabled, - class: [ - 'fp-button', - `fp-button--${props.variant ?? 'secondary'}`, - `fp-button--${props.size ?? 'sm'}`, - ], - }), - slots.default?.(), - ) -Button.props = ['variant', 'size', 'type', 'disabled'] -Button.inheritAttrs = false - -interface ModelProps { - modelValue?: unknown - modelModifiers?: { number?: boolean; trim?: boolean; lazy?: boolean } - 'onUpdate:modelValue'?: (value: unknown) => void -} -interface TextFieldProps extends Omit, ModelProps { - size?: 'xs' | 'sm' | 'md' -} -export const TextField: FunctionalComponent = ( - props, - { attrs }, -) => { - const kind = typeof attrs.type === 'string' ? attrs.type : 'text' - const vnode = h( - 'input', - mergeProps(attrs, { - class: [ - 'fp-input', - `fp-input--${kind}`, - `fp-input--${props.size ?? 'md'}`, - ], - 'onUpdate:modelValue': props['onUpdate:modelValue'], - }), - ) - return props['onUpdate:modelValue'] - ? withDirectives(vnode, [ - [ - vModelDynamic, - props.modelValue, - undefined, - props.modelModifiers ?? {}, - ], - ]) - : vnode -} -TextField.props = [ - 'size', - 'modelValue', - 'modelModifiers', - 'onUpdate:modelValue', -] -TextField.inheritAttrs = false - -export const TextArea: FunctionalComponent< - TextareaHTMLAttributes & ModelProps -> = (props, { attrs }) => { - const vnode = h( - 'textarea', - mergeProps(attrs, { - class: 'fp-textarea', - 'onUpdate:modelValue': props['onUpdate:modelValue'], - }), - ) - return props['onUpdate:modelValue'] - ? withDirectives(vnode, [ - [vModelText, props.modelValue, undefined, props.modelModifiers ?? {}], - ]) - : vnode -} -TextArea.props = ['modelValue', 'modelModifiers', 'onUpdate:modelValue'] -TextArea.inheritAttrs = false - -export const SelectField: FunctionalComponent< - SelectHTMLAttributes & ModelProps -> = (props, { attrs, slots }) => { - const vnode = h( - 'select', - mergeProps(attrs, { - class: 'fp-select', - 'onUpdate:modelValue': props['onUpdate:modelValue'], - }), - slots.default?.(), - ) - return props['onUpdate:modelValue'] - ? withDirectives(vnode, [ - [vModelSelect, props.modelValue, undefined, props.modelModifiers ?? {}], - ]) - : vnode -} -SelectField.props = ['modelValue', 'modelModifiers', 'onUpdate:modelValue'] -SelectField.inheritAttrs = false -export const SelectOption = element('SelectOption', 'option') - -export const RichText: FunctionalComponent< - HTMLAttributes & { html: string } -> = (props, { attrs }) => h('div', mergeProps(attrs, { innerHTML: props.html })) -RichText.props = ['html'] -RichText.inheritAttrs = false diff --git a/packages/components/src/styles.css b/packages/components/src/styles.css deleted file mode 100644 index 7ef7b081..00000000 --- a/packages/components/src/styles.css +++ /dev/null @@ -1,422 +0,0 @@ -@import './tokens.css'; - -/* Only this package owns control appearance. Applications own arrangement. */ -.fp-button { - display: inline-flex; - align-items: center; - justify-content: center; - gap: 6px; - min-width: 0; - min-height: var(--control-height-sm); - padding: 5px 11px; - border: 1px solid var(--color-border-strong); - border-radius: 6px; - background: var(--color-panel); - color: var(--color-secondary); - font-family: var(--font-sans); - font-size: 12px; - font-weight: 500; - line-height: 1.4; - text-decoration: none; - vertical-align: middle; - white-space: nowrap; - cursor: pointer; - box-shadow: none; - transition: - background-color 160ms ease, - border-color 160ms ease, - color 160ms ease; -} -.fp-button:hover:not(:disabled) { - background: var(--color-selected); - border-color: var(--color-accent); - color: var(--color-accent-strong); -} -.fp-button:active:not(:disabled) { - background: var(--color-selected); -} -.fp-button--md { - min-height: 38px; - padding: 8px 16px; - font-size: 13px; -} -.fp-button--xs { - min-height: var(--control-height-xs); - height: var(--control-height-xs); - padding: 1px 6px; - font-size: 10px; -} -.fp-button--primary { - background: var(--color-accent-fill); - border-color: var(--color-accent-fill); - color: var(--color-on-accent); - font-weight: 600; -} -.fp-button--primary:hover:not(:disabled), -.fp-button--primary:active:not(:disabled) { - background: var(--color-accent-hover); - border-color: var(--color-accent-hover); - color: var(--color-on-accent); -} -.fp-button--quiet, -.fp-button--icon, -.fp-button--navigation { - background: transparent; - border-color: transparent; -} -.fp-button--quiet:hover:not(:disabled), -.fp-button--icon:hover:not(:disabled), -.fp-button--navigation:hover:not(:disabled) { - border-color: transparent; -} -.fp-button--icon { - width: var(--control-height-sm); - height: var(--control-height-sm); - min-height: var(--control-height-sm); - flex-shrink: 0; - padding: 5px; -} -.fp-button--icon.fp-button--xs { - width: var(--control-height-xs); - height: var(--control-height-xs); - min-height: var(--control-height-xs); - padding: 4px; -} -.fp-button--navigation { - border-radius: 0; -} -.fp-button[aria-pressed='true'], -.fp-button[aria-selected='true'], -.fp-button.active, -.fp-button.selected { - background: var(--color-selected); - color: var(--color-accent-strong); -} -.fp-button--navigation[aria-selected='true'] { - box-shadow: inset 2px 0 var(--color-accent); -} -.fp-button--primary[aria-pressed='true'] { - background: var(--color-accent-fill); - color: var(--color-on-accent); -} -.fp-button--danger { - color: var(--color-danger); -} -.fp-button--danger:hover:not(:disabled) { - color: var(--color-danger); - border-color: var(--color-danger); - background: var(--color-danger-soft); -} -.fp-button:disabled { - opacity: 1; - color: var(--color-placeholder); - background: var(--color-disabled); - border-color: var(--color-border); - cursor: not-allowed; - box-shadow: none; -} -.fp-button--primary:disabled { - background: var(--color-accent-disabled); - border-color: var(--color-accent-disabled); - color: #ffffff; -} -.fp-input, -.fp-textarea, -.fp-select { - min-width: 0; - max-width: 100%; - min-height: 36px; - padding: 7px 10px; - border: 1px solid var(--color-border-strong); - border-radius: 6px; - background: var(--color-panel); - color: var(--color-text); - font-family: var(--font-sans); - font-size: 13px; - line-height: 1.5; - box-shadow: none; - transition: - border-color 160ms ease, - box-shadow 160ms ease; -} -.fp-input:hover:not(:disabled), -.fp-textarea:hover:not(:disabled), -.fp-select:hover:not(:disabled) { - border-color: #98a2b3; -} -.fp-input:focus, -.fp-textarea:focus, -.fp-select:focus { - outline: none; - border-color: var(--color-accent); - box-shadow: var(--focus-ring); -} -.fp-input:disabled, -.fp-textarea:disabled, -.fp-select:disabled { - opacity: 1; - background: var(--color-disabled); - color: var(--color-placeholder); - cursor: not-allowed; -} -.fp-input::placeholder, -.fp-textarea::placeholder { - color: var(--color-placeholder); -} -.fp-textarea { - resize: vertical; -} -.fp-input--sm { - height: var(--control-height-sm); - min-height: var(--control-height-sm); - padding: 4px 8px; - font-size: 12px; - line-height: 1.4; -} -.fp-input--xs { - height: var(--control-height-xs); - min-height: var(--control-height-xs); - padding: 1px 6px; - font-size: 11px; - line-height: 1.4; -} -.fp-input--number.fp-input--xs { - appearance: textfield; -} -.fp-input--number.fp-input--xs::-webkit-inner-spin-button, -.fp-input--number.fp-input--xs::-webkit-outer-spin-button { - appearance: none; - margin: 0; -} -.fp-select { - appearance: none; - padding-right: 32px; - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' stroke='%23697586' stroke-width='1.5'%3E%3Cpath d='m4 6 4 4 4-4'/%3E%3C/svg%3E"); - background-repeat: no-repeat; - background-position: right 9px center; -} -.fp-select[multiple] { - background-image: none; - padding-right: 10px; -} -.fp-input--checkbox, -.fp-input--radio { - appearance: none; - display: inline-block; - flex: 0 0 auto; - width: 16px; - height: 16px; - min-height: 16px; - margin: 0; - padding: 0; - border-radius: 4px; - vertical-align: middle; - cursor: pointer; -} -.fp-input--checkbox:checked { - background: var(--color-accent-fill) - url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' fill='none' stroke='white' stroke-width='1.7'%3E%3Cpath d='m3 7 3 3 5-6'/%3E%3C/svg%3E") - center no-repeat; - border-color: var(--color-accent-fill); -} -.fp-input--radio { - border-radius: 50%; -} -.fp-input--radio:checked { - border: 5px solid var(--color-accent-fill); -} -.fp-input--range { - min-height: 24px; - padding: 0; - border: 0; - background: transparent; - accent-color: var(--color-accent-strong); -} -.fp-input--file { - max-width: 100%; - padding: 5px; - font-size: 12px; -} -.fp-input--file::file-selector-button { - margin-right: 10px; - padding: 5px 10px; - border: 1px solid var(--color-border-strong); - border-radius: 4px; - background: var(--color-panel-raised); - color: var(--color-secondary); - font: inherit; - cursor: pointer; -} -.fp-field { - display: grid; - gap: 6px; - color: var(--color-secondary); - font-size: 12px; -} -.fp-fieldset { - min-width: 0; - padding: 14px; - border: 1px solid var(--color-border); - border-radius: 8px; -} -.fp-legend { - padding: 0 5px; - color: var(--color-secondary); - font-size: 12px; - font-weight: 600; -} -.fp-disclosure-trigger { - color: var(--color-secondary); - font-size: 12px; - cursor: pointer; -} -.fp-disclosure-trigger:hover { - color: var(--color-accent-strong); -} -.fp-dialog { - border: 1px solid var(--color-border); - border-radius: 12px; - background: var(--color-panel); - color: var(--color-text); - box-shadow: var(--shadow-modal); -} -.fp-dialog::backdrop { - background: var(--color-overlay); -} -.fp-link { - color: var(--color-accent-strong); - text-underline-offset: 3px; -} -.fp-progress { - accent-color: var(--color-accent-strong); -} -.fp-heading { - color: var(--color-text); - font-weight: 600; -} -.fp-table { - border-collapse: collapse; - text-align: left; -} -.fp-table th { - color: var(--color-secondary); - font-weight: 600; - background: var(--color-panel-raised); -} -.fp-table th, -.fp-table td { - padding: 12px; - border-bottom: 1px solid var(--color-border); -} -@media (max-width: 600px) { - .fp-button--navigation[aria-selected='true'] { - box-shadow: inset 0 -2px var(--color-accent); - } -} -.fp-disclosure-trigger { - display: flex; - align-items: center; - gap: 6px; - min-height: var(--control-height-sm); - padding: 5px 8px; - border: 1px solid transparent; - border-radius: 5px; - list-style: none; - line-height: 1.4; -} -.fp-disclosure-trigger::-webkit-details-marker { - display: none; -} -.fp-disclosure-trigger::after { - content: '⌄'; - margin-left: auto; - color: var(--color-muted); -} -.fp-disclosure-trigger:hover { - background: var(--color-hover); -} -.fp-disclosure-trigger--xs { - min-height: var(--control-height-xs); - padding: 1px 6px; - font-size: 11px; -} -.fp-modal-backdrop { - position: fixed; - inset: 0; - z-index: 1100; - display: grid; - place-items: center; - padding: 24px; - background: var(--color-overlay); -} -.fp-modal { - --fp-modal-padding: 24px; - width: min(620px, 100%); - min-width: 0; - max-height: calc(100dvh - 48px); - overflow: auto; - border: 1px solid var(--color-border); - border-radius: 12px; - background: var(--color-panel); - color: var(--color-text); - box-shadow: var(--shadow-modal); -} -.fp-modal--lg { - width: min(880px, 100%); -} -.fp-modal--xl { - width: min(1100px, 100%); -} -.fp-modal > header, -.fp-modal > footer { - display: flex; - align-items: center; - justify-content: space-between; - gap: 16px; - padding: 18px var(--fp-modal-padding); -} -.fp-modal > header { - border-bottom: 1px solid var(--color-border); -} -.fp-modal > footer { - justify-content: flex-end; - gap: 8px; - border-top: 1px solid var(--color-border); -} -.fp-modal-body { - display: grid; - gap: 16px; - padding: var(--fp-modal-padding); -} -.fp-modal-body > :where(h1, h2, h3, p, ul, ol) { - margin: 0; -} -@media (max-width: 600px) { - .fp-modal-backdrop { - padding: 12px; - } - .fp-modal { - --fp-modal-padding: 16px; - max-height: calc(100dvh - 24px); - border-radius: 10px; - } - .fp-modal > header, - .fp-modal > footer { - padding: 16px; - } -} - -.fp-modal > header > div { - min-width: 0; -} -.fp-modal h1, -.fp-modal h2 { - overflow-wrap: anywhere; -} - -:root[data-theme='dark'] .fp-select { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' stroke='%239aa8b9' stroke-width='1.5'%3E%3Cpath d='m4 6 4 4 4-4'/%3E%3C/svg%3E"); -} -:root[data-theme='dark'] .fp-select[multiple] { - background-image: none; -} diff --git a/packages/components/src/tokens.css b/packages/components/src/tokens.css deleted file mode 100644 index 769ba68d..00000000 --- a/packages/components/src/tokens.css +++ /dev/null @@ -1,200 +0,0 @@ -:root { - color-scheme: light; - --color-canvas: #f6f6f9; - --color-panel: #ffffff; - --color-panel-raised: #f8fafc; - --color-preview-shell: #eef0f4; - --color-border: #e4e7ec; - --color-border-strong: #d0d5dd; - --color-text: #101820; - --color-secondary: #475467; - --color-muted: #697586; - --color-placeholder: #98a2b3; - --color-accent: #2f8af5; - /* Compact IDE controls need a darker fill for readable white labels. */ - --color-accent-strong: #1769d3; - --color-accent-fill: #1769d3; - --color-accent-disabled: #a6c6ee; - --color-accent-hover: #004ab2; - --color-brand: #004ab2; - --color-on-accent: #ffffff; - --color-selected: #e8f3ff; - --color-hover: #eff2f6; - --color-danger: #d92d20; - --color-danger-soft: #fff1f0; - --color-warning: #946200; - --color-warning-soft: #fff8e8; - --color-success: #128252; - --color-disabled: #eff1f4; - --color-overlay: rgb(16 24 32 / 36%); - --color-preview-dot: #d6dbe3; - --shadow-popover: 0 8px 28px rgb(16 24 40 / 12%); - --shadow-modal: 0 24px 64px rgb(16 24 40 / 18%); - --focus-ring: 0 0 0 3px rgb(47 138 245 / 18%); - --control-height-xs: 20px; - --control-height-sm: 30px; - --scrollbar-track: transparent; - --scrollbar-thumb: #d0d5dd; - --scrollbar-thumb-hover: #98a2b3; - --font-sans: - -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans SC', - 'PingFang SC', 'Microsoft YaHei', sans-serif; - --font-mono: 'JetBrains Mono', 'SFMono-Regular', Consolas, monospace; - font-family: var(--font-sans); - font-synthesis: none; -} -* { - box-sizing: border-box; - scrollbar-width: thin; - scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track); -} -*::-webkit-scrollbar { - width: 8px; - height: 8px; -} -*::-webkit-scrollbar-track { - background: var(--scrollbar-track); -} -*::-webkit-scrollbar-thumb { - min-width: 28px; - min-height: 28px; - border: 2px solid transparent; - border-radius: 8px; - background: var(--scrollbar-thumb); - background-clip: padding-box; -} -*::-webkit-scrollbar-thumb:hover { - background: var(--scrollbar-thumb-hover); - background-clip: padding-box; -} -html, -body, -#app { - width: 100%; - min-width: 320px; - min-height: 100%; - margin: 0; -} -body { - color: var(--color-text); - background: var(--color-canvas); - font-size: 14px; - line-height: 1.55; -} -button, -input, -textarea, -select { - font: inherit; -} -button { - color: inherit; -} -button:not(:disabled), -summary { - cursor: pointer; -} -button, -summary, -a, -input, -textarea, -select { - -webkit-tap-highlight-color: transparent; -} -button, -summary { - transition: - background-color 160ms ease, - border-color 160ms ease, - color 160ms ease; -} -button:disabled { - opacity: 0.48; - cursor: not-allowed; -} -:where(button, a, summary, input, textarea, select, [tabindex]):focus-visible { - outline: 2px solid var(--color-accent); - outline-offset: 2px; -} -:where(input, textarea, select):focus-visible { - outline: none; - box-shadow: var(--focus-ring); -} -input::placeholder, -textarea::placeholder { - color: var(--color-placeholder); -} -input[type='checkbox'], -input[type='radio'], -progress { - accent-color: var(--color-accent-strong); -} -.icon-button { - display: grid; - place-items: center; - width: 28px; - height: 28px; - padding: 5px; - border: 0; - border-radius: 4px; - background: transparent; - color: var(--color-muted); -} -.icon-button:hover { - color: var(--color-accent-strong); - background: var(--color-selected); -} -body.resizing-workspace { - cursor: col-resize; - user-select: none; -} -body.resizing-workspace iframe { - pointer-events: none; -} -@media (prefers-reduced-motion: reduce) { - *, - *::before, - *::after { - animation-duration: 0.01ms !important; - animation-iteration-count: 1 !important; - transition-duration: 0.01ms !important; - scroll-behavior: auto !important; - } -} - -:root[data-theme='dark'] { - color-scheme: dark; - --color-canvas: #11161e; - --color-panel: #171e27; - --color-panel-raised: #1c2530; - --color-preview-shell: #10161e; - --color-border: #2a3543; - --color-border-strong: #3b4859; - --color-text: #f4f7fa; - --color-secondary: #b6c1ce; - --color-muted: #9aa8b9; - --color-placeholder: #8290a3; - --color-accent: #5ba3ea; - --color-accent-strong: #8bc4ff; - --color-accent-fill: #0e639c; - --color-accent-hover: #1177bb; - --color-accent-disabled: #284c6e; - --color-brand: #b7dcff; - --color-on-accent: #ffffff; - --color-selected: #16385f; - --color-hover: #253141; - --color-danger: #ff848c; - --color-danger-soft: #351a20; - --color-warning: #f0c36b; - --color-warning-soft: #332814; - --color-success: #56c787; - --color-disabled: #222e3d; - --color-overlay: rgb(0 0 0 / 56%); - --color-preview-dot: #354052; - --shadow-popover: 0 8px 28px rgb(0 0 0 / 32%); - --shadow-modal: 0 24px 64px rgb(0 0 0 / 48%); - --focus-ring: 0 0 0 3px rgb(91 163 234 / 24%); - --scrollbar-thumb: #3b4859; - --scrollbar-thumb-hover: #687384; -} diff --git a/packages/components/src/use-dialog-focus.ts b/packages/components/src/use-dialog-focus.ts deleted file mode 100644 index 3ffbb6c6..00000000 --- a/packages/components/src/use-dialog-focus.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { nextTick, onUnmounted, watch, type ShallowRef } from 'vue' - -/** Focus is scoped to the active dialog and restored to its caller on dismissal. */ -export function useDialogFocus( - dialog: ShallowRef, - isOpen: () => boolean, - close: () => void, -) { - let returnFocus: HTMLElement | null = null - watch( - isOpen, - async (open) => { - if (!open) { - returnFocus?.focus() - return - } - returnFocus = document.activeElement as HTMLElement | null - await nextTick() - dialog.value - ?.querySelector( - 'input:not(:disabled), textarea:not(:disabled), button:not(:disabled)', - ) - ?.focus() - }, - { immediate: true }, - ) - onUnmounted(() => returnFocus?.focus()) - - function onDialogKeydown(event: KeyboardEvent): void { - if (event.defaultPrevented) return - const nestedDialog = (event.target as HTMLElement | null)?.closest( - 'dialog[open]', - ) - if (nestedDialog && nestedDialog !== dialog.value) return - if (event.key === 'Escape') { - event.preventDefault() - event.stopPropagation() - close() - return - } - if (event.key !== 'Tab') return - const nodes = [ - ...(dialog.value?.querySelectorAll( - 'button:not(:disabled),input:not(:disabled),textarea:not(:disabled),select:not(:disabled),a[href],[tabindex="0"]', - ) ?? []), - ].filter((node) => node.getClientRects().length > 0) - const first = nodes[0], - last = nodes.at(-1) - if (event.shiftKey && document.activeElement === first) { - event.preventDefault() - last?.focus() - } else if (!event.shiftKey && document.activeElement === last) { - event.preventDefault() - first?.focus() - } - } - return { onDialogKeydown } -} diff --git a/packages/components/tsconfig.json b/packages/components/tsconfig.json deleted file mode 100644 index e3e97c7b..00000000 --- a/packages/components/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "../../tsconfig.base.json", - "compilerOptions": { - "noEmit": true, - "module": "ESNext", - "moduleResolution": "Bundler", - "lib": ["ES2023", "DOM", "DOM.Iterable"] - }, - "include": ["src/**/*.ts", "src/**/*.vue"] -} diff --git a/packages/fastppt-mcp/tests/server.test.ts b/packages/fastppt-mcp/tests/server.test.ts index c592f4d7..3b53e614 100644 --- a/packages/fastppt-mcp/tests/server.test.ts +++ b/packages/fastppt-mcp/tests/server.test.ts @@ -96,7 +96,25 @@ layout: content describe('FastPPT MCP', () => { it('resolves SVG href and CSS webfont assets even when a resource exceeds the inline source budget', async () => { - const { service } = await fixture() + // Image packs are installed separately. Exercise the real MCP/file boundary + // with a local pack; this test resolves asset bytes, it does not render fonts. + const pack = await temporaryDirectory('fastppt-resource-pack-') + await mkdir(join(pack, 'pages')) + await mkdir(join(pack, 'assets')) + const markdown = '---\nlayout: none\n---\n\n\n' + ''.repeat(300) + await writeFile(join(pack, 'pages/9a04224856b0-0134.md'), markdown) + await writeFile(join(pack, 'assets/aa.svg'), '') + await writeFile(join(pack, 'assets/bb.woff2'), 'opaque asset bytes for path resolution') + await writeFile(join(pack, 'index.json'), JSON.stringify({ version: 1, entries: [{ id: '9a04224856b0-0134', file: 'pages/9a04224856b0-0134.md' }] })) + const previousRoot = process.env.FASTPPT_RESOURCES_ROOT + let service: FastPptMcpService + try { + process.env.FASTPPT_RESOURCES_ROOT = pack + service = (await fixture()).service + } finally { + if (previousRoot === undefined) delete process.env.FASTPPT_RESOURCES_ROOT + else process.env.FASTPPT_RESOURCES_ROOT = previousRoot + } const reference = await service.resources.read('9a04224856b0-0134') expect(reference).toBeDefined() const hrefs = [...reference!.markdown.matchAll(/xlink:href="(\.\.\/assets\/[^"<>]+)"/g)].map(match => match[1]!) @@ -109,6 +127,7 @@ describe('FastPPT MCP', () => { await Promise.all([server.connect(serverTransport), client.connect(clientTransport)]) try { const response = await client.callTool({ name: 'read_resource', arguments: { id: '9a04224856b0-0134', maxChars: 4000 } }) + expect(response.isError, JSON.stringify(response.content)).not.toBe(true) const data = response.structuredContent as { markdown: string | null; sourceChars: number; assets: { reference: string; localPath: string }[] } expect(data.sourceChars).toBe(reference!.markdown.length) expect(data.markdown).toBeNull() diff --git a/packages/fonts/THIRD_PARTY_NOTICES.md b/packages/fonts/THIRD_PARTY_NOTICES.md index 052e17c4..6caca1a1 100644 --- a/packages/fonts/THIRD_PARTY_NOTICES.md +++ b/packages/fonts/THIRD_PARTY_NOTICES.md @@ -1,35 +1,51 @@ # Third-party font notices -The fonts bundled in `assets/fonts/` come from their respective projects. All are -free for commercial use; the license files are reproduced from each project. - -| Family | File | Source | License | -| --- | --- | --- | --- | -| Inter | `inter-variable.ttf` | google/fonts | [OFL-1.1](https://openfontlicense.org) | -| Space Grotesk | `space-grotesk-variable.ttf` | google/fonts | OFL-1.1 | -| Fira Code | `fira-code-variable.ttf` | google/fonts | OFL-1.1 | -| JetBrains Mono | `jetbrains-mono-variable.ttf` | google/fonts | OFL-1.1 | -| Space Mono | `space-mono-regular.ttf` | google/fonts | OFL-1.1 | -| Nunito Sans | `nunito-sans-variable.ttf` | google/fonts | OFL-1.1 | -| Sofia Sans | `sofia-sans-variable.ttf` | google/fonts | OFL-1.1 | -| Lexend | `lexend-variable.ttf` | google/fonts | OFL-1.1 | -| Caveat | `caveat-variable.ttf` | google/fonts | OFL-1.1 | -| Shantell Sans | `shantell-sans-variable.ttf` | google/fonts | OFL-1.1 | -| Noto Sans SC | `noto-sans-sc-variable.ttf` | google/fonts | OFL-1.1 | -| Noto Serif SC | `noto-serif-sc-variable.ttf` | google/fonts | OFL-1.1 | -| LXGW WenKai (霞鹜文楷) | `lxgw-wenkai-regular.ttf` | [lxgw/LxgwWenKai](https://github.com/lxgw/LxgwWenKai) | OFL-1.1 | -| ZCOOL KuaiLe | `zcool-kuale-regular.ttf` | google/fonts | OFL-1.1 | -| MiSans | `misans-regular.ttf`, `misans-bold.ttf` and `misans/` web subsets | [misans npm](https://www.npmjs.com/package/misans) version 4.1 | Xiaomi [MiSans license](https://hyperos.mi.com/font/en/) | - -MiSans browser previews use version 4.1 per-unicode-range WOFF2 subsets. The -complete Regular/Bold TTF files are merged from those same subsets, ensuring -English, numbers and Chinese use the same glyph version in PPTX exports. - -Regenerate the binaries with: - -```bash -pnpm --filter @fastppt/fonts fetch-fonts +FastPPT uses MiSans and the OFL fonts below in its themes and editable PPTX +exports. The complete binaries and license texts are checked into this private +workspace package and copied together into the FastPPT CLI distribution. +Do not publish or redistribute MiSans as a standalone font package. + +| Family | Files | License | +| --- | --- | --- | +| Inter | `inter-variable.ttf` | OFL-1.1 | +| Space Grotesk | `space-grotesk-variable.ttf` | OFL-1.1 | +| Fira Code | `fira-code-variable.ttf` | OFL-1.1 | +| JetBrains Mono | `jetbrains-mono-variable.ttf` | OFL-1.1 | +| Space Mono | `space-mono-regular.ttf` | OFL-1.1 | +| Nunito Sans | `nunito-sans-variable.ttf` | OFL-1.1 | +| Sofia Sans | `sofia-sans-variable.ttf` | OFL-1.1 | +| Lexend | `lexend-variable.ttf` | OFL-1.1 | +| Caveat | `caveat-variable.ttf` | OFL-1.1 | +| Shantell Sans | `shantell-sans-variable.ttf` | OFL-1.1 | +| Noto Sans SC | `noto-sans-sc-variable.ttf` | OFL-1.1 | +| Noto Serif SC | `noto-serif-sc-variable.ttf` | OFL-1.1 | +| LXGW WenKai | `lxgw-wenkai-regular.ttf` | OFL-1.1 | +| MiSans / MiSans Semibold | `misans-regular.ttf`, `misans-semibold.ttf`, `misans-bold.ttf` | Xiaomi MiSans license | + +`assets/licenses/COPYRIGHTS.txt` preserves the OFL copyright notices from the +bundled fonts' name tables; `assets/licenses/OFL.txt` contains the full license. +The original name tables remain embedded in every binary. + +The 13 OFL binaries are restored byte-for-byte from FastPPT commit +`62abbaef872bc8e1cb6f28f35439eaabbb512083`. MiSans uses the complete, unmodified +TTF files from `raw/Normal/ttf/` at `dsrkafuu/misans` commit +`caf1ccdb565f3cc47699e92937db7a677cbb877d` (the source commit of `misans@4.1.0`). +The fonts report version 4.003. Browser previews and PPTX embedding use the +same files. No web subsets are merged or regenerated. + +MiSans copyright: Copyright © 2020-2023 Beijing Xiaomi Mobile Software Co.,Ltd. +All Rights Reserved. `assets/licenses/MiSans.txt` reproduces the license published +at . Its restrictions on adaptation and +standalone font redistribution apply; it is not covered by the npm wrapper's +Apache license or by the other fonts' OFL license. + +`font-integrity.json` records the fixed sources and SHA-256 of every binary. +CI verifies these bytes before running the original tests and builds: + +```sh +pnpm --filter @fastppt/fonts verify-fonts ``` -MiSans embedding requires the Regular/Bold TTF files; a missing binary is reported as -an export warning instead of silently substituting another family. +An ordinary checkout supplies the full catalog without downloads, Python or +fontTools. To update a font, replace it with its upstream original, retain its +license and attribution, and update the corresponding integrity entry. diff --git a/packages/fonts/assets/fonts/caveat-variable.ttf b/packages/fonts/assets/fonts/caveat-variable.ttf new file mode 100644 index 00000000..f84acf2c Binary files /dev/null and b/packages/fonts/assets/fonts/caveat-variable.ttf differ diff --git a/packages/fonts/assets/fonts/fira-code-variable.ttf b/packages/fonts/assets/fonts/fira-code-variable.ttf new file mode 100644 index 00000000..83f2b387 Binary files /dev/null and b/packages/fonts/assets/fonts/fira-code-variable.ttf differ diff --git a/packages/fonts/assets/fonts/inter-variable.ttf b/packages/fonts/assets/fonts/inter-variable.ttf new file mode 100644 index 00000000..047c92f6 Binary files /dev/null and b/packages/fonts/assets/fonts/inter-variable.ttf differ diff --git a/packages/fonts/assets/fonts/jetbrains-mono-variable.ttf b/packages/fonts/assets/fonts/jetbrains-mono-variable.ttf new file mode 100644 index 00000000..aa310be8 Binary files /dev/null and b/packages/fonts/assets/fonts/jetbrains-mono-variable.ttf differ diff --git a/packages/fonts/assets/fonts/lexend-variable.ttf b/packages/fonts/assets/fonts/lexend-variable.ttf new file mode 100644 index 00000000..f7099910 Binary files /dev/null and b/packages/fonts/assets/fonts/lexend-variable.ttf differ diff --git a/packages/fonts/assets/fonts/lxgw-wenkai-regular.ttf b/packages/fonts/assets/fonts/lxgw-wenkai-regular.ttf new file mode 100644 index 00000000..3e050e87 Binary files /dev/null and b/packages/fonts/assets/fonts/lxgw-wenkai-regular.ttf differ diff --git a/packages/fonts/assets/fonts/misans-bold.ttf b/packages/fonts/assets/fonts/misans-bold.ttf new file mode 100644 index 00000000..eda4bea1 Binary files /dev/null and b/packages/fonts/assets/fonts/misans-bold.ttf differ diff --git a/packages/fonts/assets/fonts/misans-regular.ttf b/packages/fonts/assets/fonts/misans-regular.ttf new file mode 100644 index 00000000..a408ed81 Binary files /dev/null and b/packages/fonts/assets/fonts/misans-regular.ttf differ diff --git a/packages/fonts/assets/fonts/misans-semibold.ttf b/packages/fonts/assets/fonts/misans-semibold.ttf new file mode 100644 index 00000000..013e68dd Binary files /dev/null and b/packages/fonts/assets/fonts/misans-semibold.ttf differ diff --git a/packages/fonts/assets/fonts/noto-sans-sc-variable.ttf b/packages/fonts/assets/fonts/noto-sans-sc-variable.ttf new file mode 100644 index 00000000..fb0637ba Binary files /dev/null and b/packages/fonts/assets/fonts/noto-sans-sc-variable.ttf differ diff --git a/packages/fonts/assets/fonts/noto-serif-sc-variable.ttf b/packages/fonts/assets/fonts/noto-serif-sc-variable.ttf new file mode 100644 index 00000000..eab063fa Binary files /dev/null and b/packages/fonts/assets/fonts/noto-serif-sc-variable.ttf differ diff --git a/packages/fonts/assets/fonts/nunito-sans-variable.ttf b/packages/fonts/assets/fonts/nunito-sans-variable.ttf new file mode 100644 index 00000000..ccc85657 Binary files /dev/null and b/packages/fonts/assets/fonts/nunito-sans-variable.ttf differ diff --git a/packages/fonts/assets/fonts/shantell-sans-variable.ttf b/packages/fonts/assets/fonts/shantell-sans-variable.ttf new file mode 100644 index 00000000..e40efb05 Binary files /dev/null and b/packages/fonts/assets/fonts/shantell-sans-variable.ttf differ diff --git a/packages/fonts/assets/fonts/sofia-sans-variable.ttf b/packages/fonts/assets/fonts/sofia-sans-variable.ttf new file mode 100644 index 00000000..a7d5426f Binary files /dev/null and b/packages/fonts/assets/fonts/sofia-sans-variable.ttf differ diff --git a/packages/fonts/assets/fonts/space-grotesk-variable.ttf b/packages/fonts/assets/fonts/space-grotesk-variable.ttf new file mode 100644 index 00000000..a1b2e6c2 Binary files /dev/null and b/packages/fonts/assets/fonts/space-grotesk-variable.ttf differ diff --git a/packages/fonts/assets/fonts/space-mono-regular.ttf b/packages/fonts/assets/fonts/space-mono-regular.ttf new file mode 100644 index 00000000..1cfa3653 Binary files /dev/null and b/packages/fonts/assets/fonts/space-mono-regular.ttf differ diff --git a/packages/fonts/assets/licenses/COPYRIGHTS.txt b/packages/fonts/assets/licenses/COPYRIGHTS.txt new file mode 100644 index 00000000..34715b6e --- /dev/null +++ b/packages/fonts/assets/licenses/COPYRIGHTS.txt @@ -0,0 +1,19 @@ +The following notices are recorded in the bundled fonts' name tables. +These fonts are distributed under the accompanying SIL Open Font License 1.1. + +Caveat: Copyright 2014 The Caveat Project Authors (https://github.com/googlefonts/caveat) +Fira Code: Copyright 2014-2020 The Fira Code Project Authors (https://github.com/tonsky/FiraCode) +Inter: Copyright 2016 The Inter Project Authors (https://github.com/rsms/inter) +JetBrains Mono: Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono) +Lexend: Copyright 2019 The Lexend Project Authors (https://github.com/googlefonts/lexend) +LXGW WenKai: Copyright 2021-2026 LXGW (https://github.com/lxgw/LxgwWenKai) + Copyright 2020 The Klee Project Authors (https://github.com/fontworks-fonts/Klee) +Noto Sans SC: (c) 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. +Noto Serif SC: (c) 2017-2024 Adobe (http://www.adobe.com/). +Nunito Sans: Copyright 2016 The Nunito Sans Project Authors (https://github.com/Fonthausen/NunitoSans) +Shantell Sans: Copyright 2022 The Shantell Sans Project Authors (https://github.com/arrowtype/shantell-sans) +Sofia Sans: Copyright 2019 The Sofia Sans Project Authors (https://github.com/lettersoup/Sofia-Sans) +Space Grotesk: Copyright 2020 The Space Grotesk Project Authors (https://github.com/floriankarsten/space-grotesk) +Space Mono: Copyright 2016 The Space Mono Project Authors (https://github.com/googlefonts/spacemono) + +MiSans is used in FastPPT under its separate Xiaomi license in MiSans.txt. diff --git a/packages/fonts/assets/licenses/MiSans.txt b/packages/fonts/assets/licenses/MiSans.txt new file mode 100644 index 00000000..ff463663 --- /dev/null +++ b/packages/fonts/assets/licenses/MiSans.txt @@ -0,0 +1,21 @@ +MiSans Fonts Intellectual Property License Agreement + +Source: https://hyperos.mi.com/font/en/download/ +Retrieved: 2026-11-12 + +This MiSans Fonts Intellectual Property License Agreement +(hereinafter the "Agreement") is a legal agreement between you and +Xiaomi Inc. (hereinafter "Xiaomi" or the "Licensor") regarding the +installation and use of MiSans fonts (hereinafter "MiSans" or +"MiSans Fonts"). You must accept all terms and conditions set +forth in this Agreement before using all or any part of MiSans. +Installing and using MiSans will be deemed as your acceptance of +this Agreement and your consent to be bound by the terms of this +Agreement. If you have any objections, please do not install +and/or use MiSans and delete all MiSans font packages +immediately. + +Subject to the terms and conditions of this Agreement, the Licensor hereby grants you a non-transferable, non-exclusive, royalty-free, revocable, worldwide copyright license to use MiSans Fonts in accordance with this Agreement, provided that the following conditions are met: +You should specifically note in the software that MiSans Fonts was used. +You may not adapt or redevelop MiSans Fonts or any of its components. +You may not separately lease, sublicense, give, loan or further distribute MiSans Fonts or its components; nor may you redistribute or sell the font software or any copies thereof. This restriction does not apply to any other work you create using MiSans Fonts. If you use MiSans Fonts to create promotional materials, logos, apps, etc., you have the right to distribute or sell such works. diff --git a/packages/fonts/assets/licenses/OFL.txt b/packages/fonts/assets/licenses/OFL.txt new file mode 100644 index 00000000..815c90bf --- /dev/null +++ b/packages/fonts/assets/licenses/OFL.txt @@ -0,0 +1,84 @@ +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/packages/fonts/font-integrity.json b/packages/fonts/font-integrity.json new file mode 100644 index 00000000..3cbb39bd --- /dev/null +++ b/packages/fonts/font-integrity.json @@ -0,0 +1,24 @@ +{ + "sources": { + "ofl": "FastR-D/FastPPT@62abbaef872bc8e1cb6f28f35439eaabbb512083:packages/fonts/assets/fonts", + "misans": "dsrkafuu/misans@caf1ccdb565f3cc47699e92937db7a677cbb877d:raw/Normal/ttf" + }, + "sha256": { + "caveat-variable.ttf": "0bdb6b660482d31531b3945849fba5916b3ef8695da7024a9e6b9ee3c4157988", + "fira-code-variable.ttf": "9335b082b3c7850d98a64b584f3417f65355f3471278bb5eeb8c6c0e8657aeeb", + "inter-variable.ttf": "29160a80ff49ddcab2c97711247e08b1fab27a484a329ce8b813d820dc559031", + "jetbrains-mono-variable.ttf": "48715a42ec242c21e9f02692891e147d022299a52e48d5e413e1a942193ffeda", + "lexend-variable.ttf": "3add53e641fbc81da64da4bb254285e2831b52b029527bc0714e2b9610832ee6", + "lxgw-wenkai-regular.ttf": "39ad71264b588165b469e35e6afb162a378dacd1f95348160240ba9038ac3009", + "misans-bold.ttf": "c01078cf5e0ca166672612e29ae8c94f3a6b224d047ffbf3801e33003051ec0e", + "misans-regular.ttf": "6aa32ded55e110a95be10080e0c322f2382681cd581c5cbb24f4fd4ce96fbb08", + "misans-semibold.ttf": "c7dc0cc24679c52af0a137d6a1edce7cf816af2a76ba9256d54b220cb0ea232c", + "noto-sans-sc-variable.ttf": "a3041811a78c361b1de50f953c805e0244951c21c5bd412f7232ef0d899af0da", + "noto-serif-sc-variable.ttf": "050080d9255a86808f2945bffac582b31ef32bc36411ce29563b4961670c66f9", + "nunito-sans-variable.ttf": "f934d7142fb4784bf828da485b7dcbd90c0c80d514e9d49a5da0ed3a1ae2491d", + "shantell-sans-variable.ttf": "d98a7913853f78d71aa0b86daf66b5eddb5a3266c07bfd51ef70632b88c41084", + "sofia-sans-variable.ttf": "a3e1019b8867e21b75d26a7b59d4eb2c81d1acf6b69b9ae6cedca269fb68e291", + "space-grotesk-variable.ttf": "acad6de1fc93436f5c0f1f4137751ef04f1aea3063e7036535970ffcfbd79f72", + "space-mono-regular.ttf": "95837e182baeeada83368f7748db28357f0a1b75c6b84ff7065b5edf933c8e18" + } +} diff --git a/packages/fonts/package.json b/packages/fonts/package.json index 75d43d7f..55881f71 100644 --- a/packages/fonts/package.json +++ b/packages/fonts/package.json @@ -78,13 +78,13 @@ "lint": "eslint . --max-warnings=0", "test": "vitest run --passWithNoTests", "format": "prettier --write .", - "fetch-fonts": "node scripts/fetch-fonts.mjs" + "verify-fonts": "node scripts/verify-fonts.mjs" }, "files": [ "assets", "src" ], - "license": "OFL-1.1", + "license": "SEE LICENSE IN THIRD_PARTY_NOTICES.md", "devDependencies": { "@types/node": "catalog:", "typescript": "catalog:", diff --git a/packages/fonts/scripts/fetch-fonts.mjs b/packages/fonts/scripts/fetch-fonts.mjs deleted file mode 100644 index 08d3b1a7..00000000 --- a/packages/fonts/scripts/fetch-fonts.mjs +++ /dev/null @@ -1,134 +0,0 @@ -#!/usr/bin/env node -/** - * Fetch the FastPPT self-hosted font catalog into packages/fonts/assets/fonts/. - * - * All fonts are OFL (or otherwise free for commercial use, see THIRD_PARTY_NOTICES.md). - * Latin + Noto CJK come from the google/fonts repo (raw.githubusercontent.com). - * LXGW WenKai comes from its official GitHub repo. MiSans 4.1 is reconstructed - * into complete static TTF faces from the official npm web-font package. - * - * Run `pnpm --filter @fastppt/fonts fetch-fonts`. Re-running skips existing files. - */ - -import { mkdir, readdir, rm, stat, writeFile } from 'node:fs/promises' -import { existsSync } from 'node:fs' -import { dirname, join } from 'node:path' -import { fileURLToPath } from 'node:url' - -const packageRoot = join(dirname(fileURLToPath(import.meta.url)), '..') -const outDir = join(packageRoot, 'assets', 'fonts') -await mkdir(outDir, { recursive: true }) - -const GF = (family, file) => - `https://raw.githubusercontent.com/google/fonts/main/ofl/${family}/${file}` - -/** @type {Array<{ family: string; file: string; url: string; minBytes: number; note: string }>} */ -const FONTS = [ - // Latin — variable TTFs from google/fonts - { family: 'Inter', file: 'inter-variable.ttf', url: GF('inter', 'Inter%5Bopsz%2Cwght%5D.ttf'), minBytes: 250_000, note: 'OFL' }, - { family: 'Space Grotesk', file: 'space-grotesk-variable.ttf', url: GF('spacegrotesk', 'SpaceGrotesk%5Bwght%5D.ttf'), minBytes: 120_000, note: 'OFL' }, - { family: 'Fira Code', file: 'fira-code-variable.ttf', url: GF('firacode', 'FiraCode%5Bwght%5D.ttf'), minBytes: 180_000, note: 'OFL' }, - { family: 'JetBrains Mono', file: 'jetbrains-mono-variable.ttf', url: GF('jetbrainsmono', 'JetBrainsMono%5Bwght%5D.ttf'), minBytes: 180_000, note: 'OFL' }, - { family: 'Space Mono', file: 'space-mono-regular.ttf', url: GF('spacemono', 'SpaceMono-Regular.ttf'), minBytes: 60_000, note: 'OFL' }, - { family: 'Nunito Sans', file: 'nunito-sans-variable.ttf', url: GF('nunitosans', 'NunitoSans%5BYTLC%2Copsz%2Cwdth%2Cwght%5D.ttf'), minBytes: 150_000, note: 'OFL' }, - { family: 'Sofia Sans', file: 'sofia-sans-variable.ttf', url: GF('sofiasans', 'SofiaSans%5Bwght%5D.ttf'), minBytes: 120_000, note: 'OFL' }, - { family: 'Lexend', file: 'lexend-variable.ttf', url: GF('lexend', 'Lexend%5Bwght%5D.ttf'), minBytes: 120_000, note: 'OFL' }, - { family: 'Caveat', file: 'caveat-variable.ttf', url: GF('caveat', 'Caveat%5Bwght%5D.ttf'), minBytes: 80_000, note: 'OFL' }, - { family: 'Shantell Sans', file: 'shantell-sans-variable.ttf', url: GF('shantellsans', 'ShantellSans%5BBNCE%2CINFM%2CSPAC%2Cwght%5D.ttf'), minBytes: 180_000, note: 'OFL' }, - - // CJK — full variable/static TTFs - { family: 'Noto Sans SC', file: 'noto-sans-sc-variable.ttf', url: GF('notosanssc', 'NotoSansSC%5Bwght%5D.ttf'), minBytes: 5_000_000, note: 'OFL' }, - { family: 'Noto Serif SC', file: 'noto-serif-sc-variable.ttf', url: GF('notoserifsc', 'NotoSerifSC%5Bwght%5D.ttf'), minBytes: 5_000_000, note: 'OFL' }, - - // LXGW WenKai (霞鹜文楷) — official repo - { family: 'LXGW WenKai', file: 'lxgw-wenkai-regular.ttf', url: 'https://raw.githubusercontent.com/lxgw/LxgwWenKai/main/fonts/TTF/LXGWWenKai-Regular.ttf', minBytes: 3_000_000, note: 'OFL' }, - -] - -async function download(font) { - const target = join(outDir, font.file) - try { - const existing = await stat(target) - if (existing.size >= font.minBytes) { - console.log(`skip ${font.family.padEnd(16)} ${font.file} (exists)`) - return true - } - } catch { - /* not present */ - } - console.log(`fetch ${font.family.padEnd(16)} ${font.file}`) - const controller = new AbortController() - const timer = setTimeout(() => controller.abort(), 180_000) - try { - const response = await fetch(font.url, { signal: controller.signal, redirect: 'follow' }) - if (!response.ok) { - console.log(` !! ${font.family}: HTTP ${response.status}`) - return false - } - const bytes = Buffer.from(await response.arrayBuffer()) - if (bytes.byteLength < font.minBytes) { - console.log(` !! ${font.family}: ${bytes.byteLength} bytes < ${font.minBytes} (likely error page)`) - return false - } - await writeFile(target, bytes) - console.log(` ok ${font.family}: ${(bytes.byteLength / 1024 / 1024).toFixed(1)} MiB`) - return true - } catch (cause) { - console.log(` !! ${font.family}: ${cause instanceof Error ? cause.message : String(cause)}`) - return false - } finally { - clearTimeout(timer) - } -} - -{ - const targets = ['Regular', 'Semibold', 'Bold'].map((weight) => - join(outDir, `misans-${weight.toLowerCase()}.ttf`), - ) - if (targets.every((target) => existsSync(target))) { - console.log('skip MiSans complete TTFs (present)') - } else { - console.log('fetch and merge MiSans 4.1 web fonts') - const tarball = await fetch('https://registry.npmjs.org/misans/-/misans-4.1.0.tgz', { redirect: 'follow' }) - if (!tarball.ok) { - console.log(` !! MiSans tarball: HTTP ${tarball.status}`) - } else { - const tmp = join(packageRoot, '.misans-fetch') - await rm(tmp, { recursive: true, force: true }) - await mkdir(tmp, { recursive: true }) - await writeFile(join(tmp, 'm.tgz'), Buffer.from(await tarball.arrayBuffer())) - const { execFileSync } = await import('node:child_process') - execFileSync('tar', ['-xzf', join(tmp, 'm.tgz'), '-C', tmp]) - const srcDir = join(tmp, 'package', 'lib', 'Normal') - for (const weight of ['Regular', 'Semibold', 'Bold']) { - const target = join(outDir, `misans-${weight.toLowerCase()}.ttf`) - if (existsSync(target)) continue - const sources = (await readdir(srcDir)) - .filter( - (file) => - file.startsWith(`MiSans-${weight}.`) && file.endsWith('.woff2'), - ) - .sort() - .map((file) => join(srcDir, file)) - try { - execFileSync('python3', [ - '-m', - 'fontTools.merge', - ...sources, - `--output-file=${target}`, - ]) - console.log(` ok MiSans ${weight}: merged version 4.1 TTF`) - } catch { - console.log( - ` !! MiSans ${weight}: install Python fonttools[woff] to merge web subsets`, - ) - } - } - await rm(tmp, { recursive: true, force: true }) - } - } -} - -const results = await Promise.all(FONTS.map(download)) -const ok = results.filter(Boolean).length -console.log(`\n${ok}/${FONTS.length} fonts available. Missing families will fall back at theme/embed level.`) diff --git a/packages/fonts/scripts/generate-css.mjs b/packages/fonts/scripts/generate-css.mjs index b195e02a..3cb04a4f 100644 --- a/packages/fonts/scripts/generate-css.mjs +++ b/packages/fonts/scripts/generate-css.mjs @@ -1,7 +1,7 @@ #!/usr/bin/env node /** * Generates src/index.css (all families) and src/families/.css (one - * family each) from the catalog. Run after fetch-fonts. Themes should import + * family each) from the catalog. Themes should import * per-family entries so Vite only bundles the fonts they use. */ import { mkdir, writeFile } from 'node:fs/promises' diff --git a/packages/fonts/scripts/verify-fonts.mjs b/packages/fonts/scripts/verify-fonts.mjs new file mode 100644 index 00000000..e522af34 --- /dev/null +++ b/packages/fonts/scripts/verify-fonts.mjs @@ -0,0 +1,15 @@ +import { createHash } from 'node:crypto' +import { readFile } from 'node:fs/promises' + +const manifest = JSON.parse( + await readFile(new URL('../font-integrity.json', import.meta.url), 'utf8'), +) +for (const [file, expected] of Object.entries(manifest.sha256)) { + const bytes = await readFile( + new URL(`../assets/fonts/${file}`, import.meta.url), + ) + if (createHash('sha256').update(bytes).digest('hex') !== expected) { + throw new Error(`Font integrity mismatch: ${file}`) + } +} +console.log(`Verified ${Object.keys(manifest.sha256).length} bundled fonts`) diff --git a/packages/fonts/src/registry.mjs b/packages/fonts/src/registry.mjs index d06466cb..35ca1a79 100644 --- a/packages/fonts/src/registry.mjs +++ b/packages/fonts/src/registry.mjs @@ -10,6 +10,8 @@ * in the `@font-face` rules in `src/index.css`. */ +import { fileURLToPath } from 'node:url' + /** @typedef {{ file: string; license: string; variable?: boolean; subset?: boolean; weight?: number; style?: 'normal'|'italic'; faces?: Record }} FontFile */ /** @type {Record} */ @@ -60,7 +62,7 @@ export const OPTIONAL_FONT_FILES = {} export function resolveFontPath(family) { const entry = FONT_FILES[family] ?? OPTIONAL_FONT_FILES[family] if (!entry) return undefined - return new URL(`../${entry.file}`, import.meta.url).pathname + return fileURLToPath(new URL(`../${entry.file}`, import.meta.url)) } /** @@ -71,14 +73,14 @@ export function resolveFontPath(family) { export function resolveFontDescriptor(family) { const entry = FONT_FILES[family] ?? OPTIONAL_FONT_FILES[family] if (!entry) return undefined - const path = new URL(`../${entry.file}`, import.meta.url).pathname + const path = fileURLToPath(new URL(`../${entry.file}`, import.meta.url)) const faces = entry.faces ? Object.fromEntries( Object.entries(entry.faces).map(([face, descriptor]) => [ face, { ...descriptor, - path: new URL(`../${descriptor.file}`, import.meta.url).pathname, + path: fileURLToPath(new URL(`../${descriptor.file}`, import.meta.url)), }, ]), ) diff --git a/packages/fonts/tests/registry.test.mjs b/packages/fonts/tests/registry.test.mjs index 8cbce05d..f6fda0f4 100644 --- a/packages/fonts/tests/registry.test.mjs +++ b/packages/fonts/tests/registry.test.mjs @@ -1,7 +1,11 @@ import { existsSync } from 'node:fs' import { describe, expect, it } from 'vitest' -import { FONT_FILES, resolveFontPath } from '../src/registry.mjs' +import { + FONT_FILES, + resolveFontDescriptor, + resolveFontPath, +} from '../src/registry.mjs' describe('@fastppt/fonts registry', () => { it('resolves every registered family to an existing bundled binary', () => { @@ -11,6 +15,14 @@ describe('@fastppt/fonts registry', () => { const path = resolveFontPath(family) expect(path, `path for ${family}`).toBeTruthy() expect(existsSync(path), `binary exists for ${family}`).toBe(true) + const descriptor = resolveFontDescriptor(family) + expect(descriptor.path).toBe(path) + for (const [face, entry] of Object.entries(descriptor.faces ?? {})) { + expect( + existsSync(entry.path), + `binary exists for ${family} ${face}`, + ).toBe(true) + } } }) diff --git a/packages/harness-codex/package.json b/packages/harness-codex/package.json index 07ccac51..27b03094 100644 --- a/packages/harness-codex/package.json +++ b/packages/harness-codex/package.json @@ -14,6 +14,7 @@ "format": "prettier --write ." }, "dependencies": { + "@fastrd/harness-transport": "0.1.2", "@fastppt/harness-core": "workspace:*", "@fastppt/protocol": "workspace:*", "zod": "catalog:" diff --git a/packages/harness-codex/src/codex-adapter.ts b/packages/harness-codex/src/codex-adapter.ts index b1c1dd31..269c9ae4 100644 --- a/packages/harness-codex/src/codex-adapter.ts +++ b/packages/harness-codex/src/codex-adapter.ts @@ -1,4 +1,5 @@ import { execFile } from 'node:child_process' +import { constants as bufferConstants } from 'node:buffer' import { randomUUID } from 'node:crypto' import { access } from 'node:fs/promises' import { join, resolve } from 'node:path' @@ -17,7 +18,7 @@ import { } from '@fastppt/protocol' import { z } from 'zod' -import { JsonlRpcClient, RpcError } from './jsonl-rpc.js' +import { JsonlRpcClient, RpcError } from '@fastrd/harness-transport' import type { ApprovalDecisionInput, @@ -48,7 +49,7 @@ import type { JsonlRpcClientOptions, RpcCommand, RpcMessage, -} from './jsonl-rpc.js' +} from '@fastrd/harness-transport' const execFileAsync = promisify(execFile) @@ -269,6 +270,9 @@ export class CodexAdapter implements HarnessAdapter { : (options.imageSkillPath ?? defaultImageSkillPath(process.env)) const codexCommand = options.codexCommand ?? 'codex' const rpcOptions: JsonlRpcClientOptions = { + // The previous readline transport had only Node's UTF-16 string ceiling. + // A code unit needs at most 3 UTF-8 bytes; retain that runtime envelope. + maxRecordBytes: 3 * bufferConstants.MAX_STRING_LENGTH, commandFactory: options.commandFactory ?? (() => ({ diff --git a/packages/harness-codex/src/index.ts b/packages/harness-codex/src/index.ts index 967a8084..00889f0a 100644 --- a/packages/harness-codex/src/index.ts +++ b/packages/harness-codex/src/index.ts @@ -8,4 +8,4 @@ export { type JsonlRpcClientOptions, type RpcCommand, type RpcMessage, -} from './jsonl-rpc.js' +} from '@fastrd/harness-transport' diff --git a/packages/harness-codex/src/jsonl-rpc.ts b/packages/harness-codex/src/jsonl-rpc.ts deleted file mode 100644 index 70467517..00000000 --- a/packages/harness-codex/src/jsonl-rpc.ts +++ /dev/null @@ -1,362 +0,0 @@ -import { spawn, type ChildProcess } from 'node:child_process' -import { createInterface } from 'node:readline' - -export interface RpcCommand { - command: string - args: readonly string[] - cwd: string - env?: NodeJS.ProcessEnv -} - -export interface JsonlRpcClientOptions { - commandFactory: () => RpcCommand - requestTimeoutMs?: number - stopTimeoutMs?: number - maxStderrLines?: number - onStderrLine?: (line: string) => void -} - -export interface RpcMessage { - id?: string | number - method?: string - params?: unknown - result?: unknown - error?: { - code?: number - message?: string - data?: unknown - } -} - -interface PendingRequest { - method: string - resolve: (value: unknown) => void - reject: (error: Error) => void - timer: ReturnType - removeAbort?: () => void -} - -export class RpcError extends Error { - constructor( - message: string, - public readonly code: string, - public readonly details: Record = {}, - ) { - super(message) - this.name = 'RpcError' - } -} - -function isRecord(value: unknown): value is Record { - return typeof value === 'object' && value !== null && !Array.isArray(value) -} - -function parseMessage(line: string): RpcMessage { - let value: unknown - try { - value = JSON.parse(line) - } catch (cause) { - throw new RpcError( - 'Codex app-server emitted invalid JSON', - 'INVALID_JSON', - { - line: line.slice(0, 1000), - cause: cause instanceof Error ? cause.message : String(cause), - }, - ) - } - if (!isRecord(value)) - throw new RpcError( - 'Codex app-server message must be an object', - 'INVALID_MESSAGE', - ) - const error = isRecord(value.error) - ? { - ...(typeof value.error.code === 'number' - ? { code: value.error.code } - : {}), - ...(typeof value.error.message === 'string' - ? { message: value.error.message } - : {}), - ...('data' in value.error ? { data: value.error.data } : {}), - } - : undefined - return { - ...(typeof value.id === 'string' || typeof value.id === 'number' - ? { id: value.id } - : {}), - ...(typeof value.method === 'string' ? { method: value.method } : {}), - ...('params' in value ? { params: value.params } : {}), - ...('result' in value ? { result: value.result } : {}), - ...(error ? { error } : {}), - } -} - -export class JsonlRpcClient { - readonly #options: Required< - Pick< - JsonlRpcClientOptions, - 'requestTimeoutMs' | 'stopTimeoutMs' | 'maxStderrLines' - > - > & - Pick & { - onStderrLine: ((line: string) => void) | undefined - } - readonly #pending = new Map() - readonly #messageListeners = new Set<(message: RpcMessage) => void>() - readonly #exitListeners = new Set<(error: RpcError) => void>() - readonly #protocolErrorListeners = new Set<(error: RpcError) => void>() - readonly #stderr: string[] = [] - #child: ChildProcess | undefined - #nextId = 1 - #expectedExit = false - - constructor(options: JsonlRpcClientOptions) { - this.#options = { - commandFactory: options.commandFactory, - requestTimeoutMs: options.requestTimeoutMs ?? 30_000, - stopTimeoutMs: options.stopTimeoutMs ?? 5_000, - maxStderrLines: options.maxStderrLines ?? 100, - onStderrLine: options.onStderrLine, - } - } - - get running(): boolean { - return this.#child !== undefined && this.#child.exitCode === null - } - - get processId(): number | undefined { - return this.#child?.pid - } - - get stderr(): readonly string[] { - return this.#stderr - } - - onMessage(listener: (message: RpcMessage) => void): () => void { - this.#messageListeners.add(listener) - return () => this.#messageListeners.delete(listener) - } - - onExit(listener: (error: RpcError) => void): () => void { - this.#exitListeners.add(listener) - return () => this.#exitListeners.delete(listener) - } - - onProtocolError(listener: (error: RpcError) => void): () => void { - this.#protocolErrorListeners.add(listener) - return () => this.#protocolErrorListeners.delete(listener) - } - - start(): void { - if (this.running) return - const command = this.#options.commandFactory() - this.#expectedExit = false - const child = spawn(command.command, [...command.args], { - cwd: command.cwd, - env: command.env, - shell: false, - stdio: ['pipe', 'pipe', 'pipe'], - }) - this.#child = child - const lines = createInterface({ input: child.stdout }) - lines.on('line', (line) => { - if (!line.trim()) return - try { - this.#receive(parseMessage(line)) - } catch (cause) { - const error = - cause instanceof RpcError - ? cause - : new RpcError(String(cause), 'PROTOCOL_ERROR') - for (const listener of this.#protocolErrorListeners) listener(error) - } - }) - const stderrLines = child.stderr - ? createInterface({ input: child.stderr }) - : undefined - stderrLines?.on('line', (line) => { - const output = line.trim() - if (!output) return - this.#stderr.push(output) - if (this.#stderr.length > this.#options.maxStderrLines) - this.#stderr.splice( - 0, - this.#stderr.length - this.#options.maxStderrLines, - ) - this.#options.onStderrLine?.(output) - }) - child.once('error', (cause) => this.#handleExit(cause.message)) - child.once('exit', (code, signal) => { - if (this.#expectedExit) return - this.#handleExit( - `Codex app-server exited (${signal ?? `code ${String(code)}`})`, - ) - }) - } - - async request( - method: string, - params: unknown = {}, - options: { timeoutMs?: number; signal?: AbortSignal } = {}, - ): Promise { - this.#assertRunning() - const id = this.#nextId++ - const timeoutMs = options.timeoutMs ?? this.#options.requestTimeoutMs - const result = new Promise((resolve, reject) => { - const timer = setTimeout(() => { - this.#pending.delete(id) - reject( - new RpcError(`Codex RPC timed out: ${method}`, 'REQUEST_TIMEOUT', { - method, - timeoutMs, - }), - ) - }, timeoutMs) - const pending: PendingRequest = { method, resolve, reject, timer } - if (options.signal) { - const abort = (): void => { - clearTimeout(timer) - this.#pending.delete(id) - reject( - new RpcError(`Codex RPC aborted: ${method}`, 'REQUEST_ABORTED'), - ) - } - options.signal.addEventListener('abort', abort, { once: true }) - pending.removeAbort = () => - options.signal?.removeEventListener('abort', abort) - } - this.#pending.set(id, pending) - }) - this.#write({ id, method, params }) - return (await result) as T - } - - notify(method: string, params: unknown = {}): void { - this.#assertRunning() - this.#write({ method, params }) - } - - respond(id: string | number, result: unknown): void { - this.#assertRunning() - this.#write({ id, result }) - } - - respondError( - id: string | number, - code: number, - message: string, - data?: unknown, - ): void { - this.#assertRunning() - this.#write({ - id, - error: { code, message, ...(data === undefined ? {} : { data }) }, - }) - } - - async stop(): Promise { - const child = this.#child - if (!child || child.exitCode !== null) { - this.#child = undefined - return - } - this.#expectedExit = true - child.kill('SIGTERM') - let exited = await this.#waitForExit(child) - if (!exited) { - child.kill('SIGKILL') - exited = await this.#waitForExit(child) - } - if (!exited) - throw new RpcError( - 'Codex app-server did not exit after SIGKILL', - 'PROCESS_STOP_FAILED', - { pid: child.pid }, - ) - this.#child = undefined - this.#rejectPending( - new RpcError('Codex app-server was stopped', 'PROCESS_STOPPED'), - ) - } - - async #waitForExit(child: ChildProcess): Promise { - if (child.exitCode !== null || child.signalCode !== null) return true - return await new Promise((resolve) => { - const onExit = (): void => { - clearTimeout(timer) - resolve(true) - } - const timer = setTimeout(() => { - child.removeListener('exit', onExit) - resolve(false) - }, this.#options.stopTimeoutMs) - child.once('exit', onExit) - }) - } - - #assertRunning(): void { - if (!this.running) - throw new RpcError( - 'Codex app-server is not running', - 'PROCESS_NOT_RUNNING', - ) - } - - #write(message: RpcMessage): void { - const input = this.#child?.stdin - if (!input?.writable) - throw new RpcError( - 'Codex app-server stdin is unavailable', - 'STDIN_CLOSED', - ) - input.write(`${JSON.stringify(message)}\n`) - } - - #receive(message: RpcMessage): void { - if ( - message.id !== undefined && - (message.result !== undefined || message.error) - ) { - const pending = this.#pending.get(message.id) - if (pending) { - this.#pending.delete(message.id) - clearTimeout(pending.timer) - pending.removeAbort?.() - if (message.error) - pending.reject( - new RpcError( - message.error.message ?? `Codex RPC failed: ${pending.method}`, - 'REMOTE_ERROR', - { - method: pending.method, - remoteCode: message.error.code, - data: message.error.data, - }, - ), - ) - else pending.resolve(message.result) - return - } - } - for (const listener of this.#messageListeners) listener(message) - } - - #handleExit(message: string): void { - this.#child = undefined - const error = new RpcError(message, 'PROCESS_EXITED', { - stderr: [...this.#stderr], - }) - this.#rejectPending(error) - for (const listener of this.#exitListeners) listener(error) - } - - #rejectPending(error: RpcError): void { - for (const pending of this.#pending.values()) { - clearTimeout(pending.timer) - pending.removeAbort?.() - pending.reject(error) - } - this.#pending.clear() - } -} diff --git a/packages/harness-codex/tests/codex-adapter.test.ts b/packages/harness-codex/tests/codex-adapter.test.ts index b9f8f639..1c32f445 100644 --- a/packages/harness-codex/tests/codex-adapter.test.ts +++ b/packages/harness-codex/tests/codex-adapter.test.ts @@ -30,6 +30,7 @@ let lastTurnInput = null rl.on('line', line => { const message = JSON.parse(line) if (message.id === 900 && !message.method) { + if (message.result?.decision !== 'accept') process.exit(23) send({ method: 'serverRequest/resolved', params: { threadId: activeThread, requestId: 900 } }) send({ method: 'item/completed', params: { threadId: activeThread, turnId: activeTurn, item: { id: 'cmd-1', type: 'commandExecution', command: 'pnpm test', cwd: process.cwd(), status: 'completed' } } }) send({ method: 'item/completed', params: { threadId: activeThread, turnId: activeTurn, item: { id: 'agent-2', type: 'agentMessage', text: 'Finished' } } }) @@ -40,12 +41,23 @@ rl.on('line', line => { case 'initialize': send({ id: message.id, result: { userAgent: 'fixture' } }); break case 'initialized': break case 'thread/list': send({ id: message.id, result: { data: [thread('thread-listed')], nextCursor: null } }); break - case 'thread/read': send({ id: message.id, result: { thread: thread(message.params.threadId) } }); break - case 'thread/start': send({ id: message.id, result: { thread: thread('thread-created') } }); break + case 'thread/read': { + if (message.params.includeTurns !== true) process.exit(27) + const history = thread(message.params.threadId) + if (message.params.threadId === 'large-history') history.turns[0].items[1].text = 'x'.repeat(2_100_000) + if (message.params.threadId === 'unicode-history') history.turns[0].items[1].text = '中'.repeat(700_000) + send({ id: message.id, result: { thread: history } }); break + } + case 'thread/start': + if (message.params.sandbox !== 'danger-full-access' || message.params.approvalPolicy !== 'never') process.exit(24) + send({ id: message.id, result: { thread: thread('thread-created') } }); break case 'thread/name/set': send({ id: message.id, result: {} }); break - case 'thread/resume': send({ id: message.id, result: { thread: thread(message.params.threadId) } }); break + case 'thread/resume': + if (message.params.sandbox !== 'danger-full-access' || message.params.approvalPolicy !== 'never') process.exit(25) + send({ id: message.id, result: { thread: thread(message.params.threadId) } }); break case 'thread/fork': send({ id: message.id, result: { thread: thread('thread-forked') } }); break case 'turn/start': { + if (message.params.sandboxPolicy.type !== 'dangerFullAccess' || message.params.approvalPolicy !== 'never') process.exit(26) lastTurnInput = message.params.input activeThread = message.params.threadId activeTurn = message.params.input[0].text.includes('cancel') ? 'turn-cancel' : 'turn-run' @@ -142,6 +154,27 @@ describe('CodexAdapter', () => { await codex.dispose() }) + it.each([ + ['large-history', 'x'.repeat(2_100_000)], + ['unicode-history', '中'.repeat(700_000)], + ])('reads complete %s above 2MB without disconnecting another request', async (sessionId, content) => { + const codex = adapter() + try { + const [history, page] = await Promise.all([ + codex.getSession({ sessionId }), + codex.listSessions({ cwd: process.cwd() }), + ]) + expect(history.summary.id).toBe(sessionId) + expect(history.messages.map(message => message.content)).toEqual(['Hello', content]) + expect(page.data[0]?.id).toBe('thread-listed') + await expect(codex.getSession({ sessionId: 'thread-listed' })).resolves.toMatchObject({ + messages: [{ content: 'Hello' }, { content: 'Hi there' }], + }) + } finally { + await codex.dispose() + } + }) + it('normalizes streams and resolves reverse-RPC approvals', async () => { const codex = adapter() const events: UnifiedAgentEvent[] = [] diff --git a/packages/harness-codex/tests/jsonl-rpc.test.ts b/packages/harness-codex/tests/jsonl-rpc.test.ts index 67685e44..b3a9b04d 100644 --- a/packages/harness-codex/tests/jsonl-rpc.test.ts +++ b/packages/harness-codex/tests/jsonl-rpc.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' -import { JsonlRpcClient } from '../src/jsonl-rpc.js' +import { JsonlRpcClient } from '@fastrd/harness-transport' const rpcFixture = String.raw` const readline = require('node:readline') diff --git a/packages/palettes/vitest.config.ts b/packages/palettes/vitest.config.ts new file mode 100644 index 00000000..48eb1deb --- /dev/null +++ b/packages/palettes/vitest.config.ts @@ -0,0 +1,5 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { include: ['tests/**/*.test.ts'] }, +}) diff --git a/packages/resources/package.json b/packages/resources/package.json index a07e5725..05adaa8e 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -6,7 +6,7 @@ "exports": { ".": "./src/index.ts" }, "scripts": { "build": "tsc -p tsconfig.json", - "typecheck": "tsc --noEmit", + "typecheck": "tsc -p tsconfig.tests.json --noEmit", "test": "vitest run", "scan": "python3 scripts/scan.py" }, diff --git a/packages/resources/tests/resources.test.ts b/packages/resources/tests/resources.test.ts index 84273773..7e911c89 100644 --- a/packages/resources/tests/resources.test.ts +++ b/packages/resources/tests/resources.test.ts @@ -3,7 +3,7 @@ import { mkdtemp, mkdir, readFile, symlink, writeFile } from 'node:fs/promises' import { tmpdir } from 'node:os' import { join } from 'node:path' import { createHash } from 'node:crypto' -import { ResourceLibrary, rankResources, summarizeComposition, type LayoutResource } from '../src/index.js' +import { ResourceLibrary, rankResources, resolveResourcesRoot, summarizeComposition, type LayoutResource } from '../src/index.js' const sample = (id: string, tags: string[], status: LayoutResource['status'] = 'reconstructed'): LayoutResource => ({ id, title: id, kind: 'diagram', description: tags.join(' '), tags, style: 'neutral', scenarios: '', source: 'fixture.pptx', sourcePage: 1, file: `pages/${id}.md`, aspect: 16 / 9, density: 'balanced', @@ -73,7 +73,7 @@ describe('resource retrieval', () => { const library = new ResourceLibrary(root) const current = await library.read('semantic') expect(current?.composition?.objects).toHaveLength(60) - expect(current?.compositionPath).toContain('compositions/semantic.json') + expect(current?.compositionPath).toBe(join(root, 'compositions', 'semantic.json')) const summary = summarizeComposition(current!.composition!) expect(summary.objects).toHaveLength(16) expect(summary.objects[0]?.text).toHaveLength(160) @@ -86,7 +86,7 @@ describe('resource retrieval', () => { it('indexes every source page exactly once, with readable single-page files and evidence', async () => { const library = new ResourceLibrary() const entries = await library.entries() - const report = JSON.parse(await readFile(new URL('../scan-report.json', import.meta.url), 'utf8')) as { pageCount: number; sources: { pages: number; entries: string[] }[] } + const report = JSON.parse(await readFile(join(await resolveResourcesRoot(), 'scan-report.json'), 'utf8')) as { pageCount: number; sources: { pages: number; entries: string[] }[] } expect(entries.length).toBe(report.pageCount) expect(new Set(entries.map(item => item.id)).size).toBe(entries.length) expect(report.sources.flatMap(source => source.entries).sort()).toEqual(entries.map(item => item.id).sort()) diff --git a/packages/resources/tsconfig.json b/packages/resources/tsconfig.json index 4b33a5d1..74045f4d 100644 --- a/packages/resources/tsconfig.json +++ b/packages/resources/tsconfig.json @@ -1,6 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { + "rootDir": "src", "outDir": "dist", "types": [ "node" @@ -8,7 +9,6 @@ "tsBuildInfoFile": "dist/.tsbuildinfo" }, "include": [ - "src/**/*.ts", - "tests/**/*.ts" + "src/**/*.ts" ] } diff --git a/packages/resources/tsconfig.tests.json b/packages/resources/tsconfig.tests.json new file mode 100644 index 00000000..186dcd27 --- /dev/null +++ b/packages/resources/tsconfig.tests.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "tsBuildInfoFile": "dist/.tests.tsbuildinfo" + }, + "include": ["src/**/*.ts", "tests/**/*.ts"] +} diff --git a/packages/resources/vitest.config.ts b/packages/resources/vitest.config.ts new file mode 100644 index 00000000..48eb1deb --- /dev/null +++ b/packages/resources/vitest.config.ts @@ -0,0 +1,5 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { include: ['tests/**/*.test.ts'] }, +}) diff --git a/packages/slidewave/test/fonts/embed.test.ts b/packages/slidewave/test/fonts/embed.test.ts index aed70857..d9effdb4 100644 --- a/packages/slidewave/test/fonts/embed.test.ts +++ b/packages/slidewave/test/fonts/embed.test.ts @@ -1,6 +1,7 @@ import { mkdtemp, readFile, rm } from 'node:fs/promises' import { tmpdir } from 'node:os' import { join, posix } from 'node:path' +import { fileURLToPath } from 'node:url' import JSZip from 'jszip' import { describe, expect, it } from 'vitest' @@ -21,7 +22,7 @@ const TEST_CATALOG: Record = { const testResolveFont = (family: string): { path: string; variable?: boolean } | undefined => { const entry = TEST_CATALOG[family] if (!entry) return undefined - return { path: new URL(entry.file, FONT_ROOT).pathname, variable: entry.variable } + return { path: fileURLToPath(new URL(entry.file, FONT_ROOT)), variable: entry.variable } } function textElement(id: string, text: string, fontFamily: string): Record { @@ -98,7 +99,7 @@ describe('PPTX font embedding', () => { expect(Buffer.from(extractEotFontData(eot)).equals(font)).toBe(true) if (inherited) expect(await output.file('ppt/slides/slide1.xml')!.async('string')).not.toMatch(/]* cap=/) } - }) + }, 30_000) // Two PPTX exports retain the complete original CJK font. it('still pins the requested weight when retaining a variable font for capitalization', async () => { const element = textElement('caps', 'a', 'Inter') diff --git a/packages/theme-registry/src/index.ts b/packages/theme-registry/src/index.ts index 93435b22..bd559a02 100644 --- a/packages/theme-registry/src/index.ts +++ b/packages/theme-registry/src/index.ts @@ -407,7 +407,7 @@ async function loadTheme(packageRoot: string): Promise { layoutIds.add(layout.id) const layoutPath = await resolveOwnedPath( packageRoot, - join('layouts', `${layout.id}.vue`), + posix.join('layouts', `${layout.id}.vue`), 'layout', ) if (!(await stat(layoutPath)).isFile()) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9675540a..51c5faa7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -41,7 +41,7 @@ catalogs: version: 8.2.0 vitest: specifier: ^4.1.10 - version: 4.1.10 + version: 4.1.12 zod: specifier: ^4.0.14 version: 4.4.3 @@ -491,9 +491,6 @@ importers: '@codemirror/view': specifier: ^6.38.1 version: 6.43.7 - '@fastppt/components': - specifier: workspace:* - version: link:../../packages/components '@fastppt/markdown': specifier: workspace:* version: link:../../packages/markdown @@ -503,6 +500,12 @@ importers: '@fastppt/slidewave': specifier: workspace:* version: link:../../packages/slidewave + '@fastrd/ui-foundation': + specifier: 0.1.2 + version: 0.1.2 + '@fastrd/ui-vue': + specifier: 0.1.2 + version: 0.1.2(vue@3.5.40(typescript@6.0.3)) '@unocss/reset': specifier: ^66.3.3 version: 66.7.5 @@ -520,7 +523,7 @@ importers: version: 3.5.40(typescript@6.0.3) vue-router: specifier: ^5.2.0 - version: 5.2.0(@vue/compiler-sfc@3.5.40)(esbuild@0.28.1)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + version: 5.2.0(@vue/compiler-sfc@3.5.40)(esbuild@0.28.1)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) zod: specifier: 'catalog:' version: 4.4.3 @@ -530,19 +533,19 @@ importers: version: 14.1.2 '@vitejs/plugin-vue': specifier: ^6.0.1 - version: 6.0.8(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + version: 6.0.8(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) typescript: specifier: 'catalog:' version: 6.0.3 unocss: specifier: ^66.3.3 - version: 66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + version: 66.7.5(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) vite: specifier: ^8.2.0 - version: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + version: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 4.1.10(@types/node@26.1.2)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + version: 4.1.10(@types/node@26.6.6)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) vue-tsc: specifier: ^3.0.4 version: 3.3.9(typescript@6.0.3) @@ -569,21 +572,6 @@ importers: specifier: 'catalog:' version: 4.1.10(@types/node@26.1.2)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - packages/components: - devDependencies: - typescript: - specifier: 'catalog:' - version: 6.0.3 - vitest: - specifier: 'catalog:' - version: 4.1.10(@types/node@26.1.2)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vue: - specifier: 3.5.40 - version: 3.5.40(typescript@6.0.3) - vue-tsc: - specifier: 3.3.9 - version: 3.3.9(typescript@6.0.3) - packages/config: dependencies: zod: @@ -754,6 +742,9 @@ importers: '@fastppt/protocol': specifier: workspace:* version: link:../protocol + '@fastrd/harness-transport': + specifier: 0.1.2 + version: 0.1.2 zod: specifier: 'catalog:' version: 4.4.3 @@ -820,7 +811,7 @@ importers: dependencies: '@slidev/parser': specifier: 52.19.0 - version: 52.19.0(typescript@6.0.3)(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) + version: 52.19.0(esbuild@0.28.1)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) prettier: specifier: ^3.6.2 version: 3.9.6 @@ -830,10 +821,10 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 22.20.1 + version: 26.6.6 vitest: specifier: 'catalog:' - version: 3.2.7(@types/debug@4.1.13)(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) + version: 4.1.12(@types/node@26.6.6)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) packages/palettes: dependencies: @@ -893,7 +884,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.10(@types/node@26.1.2)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + version: 4.1.10(@types/node@26.6.6)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) packages/presentation-ir: dependencies: @@ -928,7 +919,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.10(@types/node@26.1.2)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + version: 4.1.10(@types/node@26.6.6)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) packages/resources: devDependencies: @@ -955,17 +946,17 @@ importers: version: link:../slidewave '@slidev/cli': specifier: 'catalog:' - version: 52.19.0(@nuxt/kit@3.21.10)(@types/markdown-it@14.1.2)(@types/node@22.20.1)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(hono@4.13.0)(lightningcss@1.33.0)(markdown-it-async@2.2.0)(markdown-it@14.3.0)(playwright-chromium@1.62.1)(postcss@8.5.25)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(tsx@4.23.5) + version: 52.19.0(@nuxt/kit@3.21.10)(@types/markdown-it@14.1.2)(@types/node@26.6.6)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(hono@4.13.0)(markdown-it-async@2.2.0)(markdown-it@14.3.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(playwright-chromium@1.62.1)(postcss@8.5.25)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(tsx@4.23.5) '@slidev/theme-default': specifier: 'catalog:' version: 0.25.0 devDependencies: '@types/node': specifier: 'catalog:' - version: 22.20.1 + version: 26.6.6 vitest: specifier: 'catalog:' - version: 3.2.7(@types/debug@4.1.13)(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) + version: 4.1.12(@types/node@26.6.6)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) packages/slidewave: dependencies: @@ -1021,10 +1012,10 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 22.20.1 + version: 26.6.6 vitest: specifier: 'catalog:' - version: 3.2.7(@types/debug@4.1.13)(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) + version: 4.1.12(@types/node@26.6.6)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) packages/workspace: dependencies: @@ -1096,6 +1087,9 @@ importers: '@types/node': specifier: 'catalog:' version: 26.1.2 + fontverter: + specifier: 2.0.0 + version: 2.0.0 typescript: specifier: 'catalog:' version: 6.0.3 @@ -1168,7 +1162,7 @@ importers: version: link:../../packages/fonts '@slidev/types': specifier: ^51.1.1 - version: 51.8.2(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(markdown-it-async@2.2.0)(typescript@5.9.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + version: 51.8.2(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(markdown-it-async@2.2.0)(typescript@5.9.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) '@vueuse/core': specifier: ^12.7.0 version: 12.8.2(typescript@5.9.3) @@ -1178,7 +1172,7 @@ importers: devDependencies: '@slidev/cli': specifier: 51.1.1 - version: 51.1.1(@babel/parser@7.29.8)(@nuxt/kit@3.21.10)(@types/markdown-it@14.1.2)(@types/node@26.1.2)(@vue/compiler-sfc@3.5.40)(lightningcss@1.33.0)(markdown-it-async@2.2.0)(playwright-chromium@1.50.1)(postcss@8.5.2)(tsx@4.23.5) + version: 51.1.1(@babel/parser@7.29.8)(@nuxt/kit@3.21.10)(@types/markdown-it@14.1.2)(@types/node@26.6.6)(@vue/compiler-sfc@3.5.40)(lightningcss@1.33.0)(markdown-it-async@2.2.0)(playwright-chromium@1.50.1)(postcss@8.5.2)(tsx@4.23.5) playwright-chromium: specifier: 1.50.1 version: 1.50.1 @@ -1220,22 +1214,22 @@ importers: version: 1.2.3 '@slidev/client': specifier: 'catalog:' - version: 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@oxc-project/types@0.142.0)(@vitejs/devtools-kit@0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(lightningcss@1.33.0)(markdown-it-async@2.2.0)(oxc-parser@0.131.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + version: 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@oxc-project/types@0.142.0)(@vitejs/devtools-kit@0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(lightningcss@1.33.0)(markdown-it-async@2.2.0)(oxc-parser@0.131.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) '@slidev/types': specifier: 'catalog:' - version: 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + version: 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) pinia: specifier: ^4.0.2 version: 4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)) unocss: specifier: ^66.3.3 - version: 66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + version: 66.7.5(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) unocss-preset-palette: specifier: ^0.5.0 version: 0.5.0(@unocss/core@66.7.5)(@unocss/preset-mini@66.7.5) vite: specifier: 'catalog:' - version: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + version: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) vue: specifier: ^3.5.18 version: 3.5.40(typescript@6.0.3) @@ -1275,11 +1269,11 @@ importers: version: 4.3.0(vue@3.5.40(typescript@6.0.3)) '@slidev/types': specifier: ^52.14.1 - version: 52.19.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + version: 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) devDependencies: '@slidev/cli': specifier: ^52.14.1 - version: 52.19.0(@nuxt/kit@3.21.10)(@types/markdown-it@14.1.2)(@types/node@26.1.2)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(hono@4.13.0)(markdown-it-async@2.2.0)(markdown-it@14.3.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(playwright-chromium@1.62.1)(postcss@8.5.25)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(tsx@4.23.5) + version: 52.19.0(@nuxt/kit@3.21.10)(@types/markdown-it@14.1.2)(@types/node@26.6.6)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(hono@4.13.0)(markdown-it-async@2.2.0)(markdown-it@14.3.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(playwright-chromium@1.62.1)(postcss@8.5.25)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(tsx@4.23.5) themes/slidev-theme-narrative: dependencies: @@ -1300,11 +1294,11 @@ importers: version: link:../../packages/fonts '@slidev/types': specifier: ^52.14.1 - version: 52.19.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + version: 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) devDependencies: '@slidev/cli': specifier: ^52.14.1 - version: 52.19.0(@nuxt/kit@3.21.10)(@types/markdown-it@14.1.2)(@types/node@26.1.2)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(hono@4.13.0)(markdown-it-async@2.2.0)(markdown-it@14.3.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(playwright-chromium@1.62.1)(postcss@8.5.25)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(tsx@4.23.5) + version: 52.19.0(@nuxt/kit@3.21.10)(@types/markdown-it@14.1.2)(@types/node@26.6.6)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(hono@4.13.0)(markdown-it-async@2.2.0)(markdown-it@14.3.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(playwright-chromium@1.62.1)(postcss@8.5.25)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(tsx@4.23.5) themes/slidev-theme-nmt: dependencies: @@ -1359,11 +1353,11 @@ importers: version: link:../../packages/fonts '@slidev/types': specifier: ^52.10.1 - version: 52.19.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + version: 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) devDependencies: '@slidev/cli': specifier: ^52.10.1 - version: 52.19.0(@nuxt/kit@3.21.10)(@types/markdown-it@14.1.2)(@types/node@26.1.2)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(hono@4.13.0)(markdown-it-async@2.2.0)(markdown-it@14.3.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(playwright-chromium@1.62.1)(postcss@8.5.25)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(tsx@4.23.5) + version: 52.19.0(@nuxt/kit@3.21.10)(@types/markdown-it@14.1.2)(@types/node@26.6.6)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(hono@4.13.0)(markdown-it-async@2.2.0)(markdown-it@14.3.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(playwright-chromium@1.62.1)(postcss@8.5.25)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(tsx@4.23.5) playwright-chromium: specifier: ^1.57.0 version: 1.62.1 @@ -1375,10 +1369,10 @@ importers: version: link:../../packages/fonts '@slidev/parser': specifier: ^52.14.2 - version: 52.19.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + version: 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) '@slidev/types': specifier: ^52.14.2 - version: 52.19.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + version: 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) markdown-it: specifier: ^14.3.0 version: 14.3.0 @@ -1439,11 +1433,11 @@ importers: version: link:../../packages/fonts '@slidev/types': specifier: 'catalog:' - version: 52.19.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + version: 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) devDependencies: '@slidev/cli': specifier: ^52.0.0 - version: 52.19.0(@nuxt/kit@3.21.10)(@types/markdown-it@14.1.2)(@types/node@26.1.2)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(hono@4.13.0)(markdown-it-async@2.2.0)(markdown-it@14.3.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(playwright-chromium@1.62.1)(postcss@8.5.25)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(tsx@4.23.5) + version: 52.19.0(@nuxt/kit@3.21.10)(@types/markdown-it@14.1.2)(@types/node@26.6.6)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(hono@4.13.0)(markdown-it-async@2.2.0)(markdown-it@14.3.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(playwright-chromium@1.62.1)(postcss@8.5.25)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(tsx@4.23.5) themes/slidev-theme-squircle: dependencies: @@ -1458,7 +1452,7 @@ importers: version: 5.3.0 '@slidev/types': specifier: ^52.16.0 - version: 52.19.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.17.19)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + version: 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.17.19)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) gen-interface-jp: specifier: ^0.6.2 version: 0.6.2 @@ -1468,7 +1462,7 @@ importers: devDependencies: '@slidev/cli': specifier: ^52.16.0 - version: 52.19.0(@nuxt/kit@3.21.10)(@types/markdown-it@14.1.2)(@types/node@26.1.2)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.17.19)(hono@4.13.0)(markdown-it-async@2.2.0)(markdown-it@14.3.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(playwright-chromium@1.62.1)(postcss@8.5.25)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(tsx@4.23.5) + version: 52.19.0(@nuxt/kit@3.21.10)(@types/markdown-it@14.1.2)(@types/node@26.6.6)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.17.19)(hono@4.13.0)(markdown-it-async@2.2.0)(markdown-it@14.3.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(playwright-chromium@1.62.1)(postcss@8.5.25)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(tsx@4.23.5) playwright-chromium: specifier: ^1.60.0 version: 1.62.1 @@ -1582,14 +1576,14 @@ importers: version: 4.4.1 slidev-addon-gsap: specifier: ^0.0.4 - version: 0.0.4(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3) + version: 0.0.4(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) devDependencies: '@slidev/cli': specifier: ^52.16.0 - version: 52.19.0(@nuxt/kit@3.21.10)(@types/markdown-it@14.1.2)(@types/node@26.1.2)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(hono@4.13.0)(markdown-it-async@2.2.0)(markdown-it@14.3.0)(playwright-chromium@1.62.1)(postcss@8.5.25)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(tsx@4.23.5) + version: 52.19.0(@nuxt/kit@3.21.10)(@types/markdown-it@14.1.2)(@types/node@26.6.6)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(hono@4.13.0)(markdown-it-async@2.2.0)(markdown-it@14.3.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(playwright-chromium@1.62.1)(postcss@8.5.25)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(tsx@4.23.5) '@slidev/parser': specifier: ^52.16.0 - version: 52.19.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3) + version: 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) vue: specifier: ^3.5.38 version: 3.5.40(typescript@6.0.3) @@ -2677,6 +2671,18 @@ packages: '@fastify/websocket@11.3.0': resolution: {integrity: sha512-g89ag4BCcD9YP5wBZXixzoLnuf5j89p/sXFcfpCiv2pdEkYYukBEoK3heVzqsp0EAtszVDc2BBZG0KZqeAShIA==} + '@fastrd/harness-transport@0.1.2': + resolution: {integrity: sha512-W5+AMNxuTRhq7u/XbVDZslTVs9UfETISn60RIqZTGXuRs7Of5ui3R67KBQo6TyaiPm5BSZ+PWV/3MpjnHP4NWA==} + engines: {node: '>=22'} + + '@fastrd/ui-foundation@0.1.2': + resolution: {integrity: sha512-Jobx7DanQOejVRFfsT5DFXND7rtcvSUzZ5Zui+lY3oAuretz8vwkzqHh1Gd0+ezJubw82WeFsnsXdvbWB4t1YA==} + + '@fastrd/ui-vue@0.1.2': + resolution: {integrity: sha512-IMG946+q3KvsJEfibZWE4asPiJynj7T7Z9ICEbJgck8PIYPvcbOY/a2gkyA5pVR/sujnudNgJZO4fUTulg6H8w==} + peerDependencies: + vue: ^3.5.0 + '@fix-webm-duration/fix@1.0.1': resolution: {integrity: sha512-rRN4CpWQaXRbCXYqKIxnsUq8OSWSGq/SVlnxxkx0HxMZZ1u0qnB24P766o8QS5YaMMqAOFAzmsMmfZ2OWucOLQ==} @@ -3993,6 +3999,9 @@ packages: '@types/node@26.1.2': resolution: {integrity: sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==} + '@types/node@26.6.6': + resolution: {integrity: sha512-MzQj+8Kx3XI40OmUAE6Qoh58ZMNstNNMwn2nfd3qWsfe7nDNSqJNzes4njhz6AHwrSHOffSLwXU6yb474Q4aog==} + '@types/picomatch@4.0.3': resolution: {integrity: sha512-iG0T6+nYJ9FAPmx9SsUlnwcq1ZVRuCXcVEvWnntoPlrOpwtSTKNDC9uVAxTsC3PUvJ+99n4RpAcNgBbHX3JSnQ==} @@ -4416,25 +4425,25 @@ packages: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 vue: ^3.2.25 - '@vitest/expect@3.2.7': - resolution: {integrity: sha512-E8eBXaKibuvH2pSZErOjdVb5vF4PbKYcrnluBTYxEk1l/VhhwZg1kZQsdtjq+CsF5CFydf2Rdkz7jDHKSisi3w==} - '@vitest/expect@4.1.10': resolution: {integrity: sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==} - '@vitest/mocker@3.2.7': - resolution: {integrity: sha512-Trr0hYO9CM3Wj6ksWHRhK9IZpIY6wTMO5u/MqXurMxT57sWBaOPEtP3Oq60ihZuh5JsiagKfz95OcxdEP6dBrA==} + '@vitest/expect@4.1.12': + resolution: {integrity: sha512-vFlTt+YEu9WBpNjdGayNmlMVzrWPi1+sv853/7t2FU7hpO5gAFBKHzQmkCq5Xjpr+evegF2994LQT3hF3mRlqQ==} + + '@vitest/mocker@4.1.10': + resolution: {integrity: sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==} peerDependencies: msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/mocker@4.1.10': - resolution: {integrity: sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==} + '@vitest/mocker@4.1.12': + resolution: {integrity: sha512-fKShNpKZzupWZuY0z7egydvL0sqW4INEZBEExMBMAa6izlENEVHwoXgdaTCaBZ5fwlr4xf2o1wXC83n9RpO+NA==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -4444,36 +4453,36 @@ packages: vite: optional: true - '@vitest/pretty-format@3.2.7': - resolution: {integrity: sha512-KUHlwqVu0sRlhCdyPdQ/wBoTfRahjUky1MubOmYw9fWfIZy1gNoHpuaaQBPAaMaVYdQYHJLurzj8ECCj5OwTqA==} - '@vitest/pretty-format@4.1.10': resolution: {integrity: sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==} - '@vitest/runner@3.2.7': - resolution: {integrity: sha512-sB9y4ovltoQP+WaUPwmSxO9WIg9Ig694Di5PalVPsYHklAdE027mehpWF2SQSVq+k6sFgaivbTjTJwZLSHbedA==} + '@vitest/pretty-format@4.1.12': + resolution: {integrity: sha512-XW9O8+Mxx4VpCtkYdMJLZQQwsVryP9wk7cPKDxtXFfwSak6yRh5+2fep/Y0XF/ElBvJHq8bcYdi6aeuai0opZA==} '@vitest/runner@4.1.10': resolution: {integrity: sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==} - '@vitest/snapshot@3.2.7': - resolution: {integrity: sha512-7C+MwShwtBSI5Buwoyg3s/iY1eHL9PKAf+O1wVh/TdnjXUtkoL/9YQtre90i4MtNXM6edP1wJ2zOBpfCyhIS7g==} + '@vitest/runner@4.1.12': + resolution: {integrity: sha512-NKlVKCr5QnCe8jijdMnmkpHHU+WTqiLFR6G0pHji9uRjXK9xJl1k1nTw6F3pOOj2PDcsDt2GKQMI7wIsaT491w==} '@vitest/snapshot@4.1.10': resolution: {integrity: sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==} - '@vitest/spy@3.2.7': - resolution: {integrity: sha512-Q2eQGI6d2L/hBtZ0qNuKcAGid68XK6cv1xsoaIma6PaJhHPoqcEJhYpXZ/5myCMqkNgtP6UKuBhbc0nHKnrkuQ==} + '@vitest/snapshot@4.1.12': + resolution: {integrity: sha512-ko1y1Qgb/slzQ9mr+b89Cuqud8WG1TKtsPD8r7ZUBdvVOGt85Af2HwCqHujrhwJq95hs/9RM7fcAPg57o1vlzw==} '@vitest/spy@4.1.10': resolution: {integrity: sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==} - '@vitest/utils@3.2.7': - resolution: {integrity: sha512-x6BDOd7dyo3PFLY3I9/HJ25X/6OurhGXk2/B9gOZNPF7XDVjeBK4k01lQE5uvDpbuheErh91qYuE1E2OEjK3Rw==} + '@vitest/spy@4.1.12': + resolution: {integrity: sha512-RGq9x4JNGNTZHEJxvN0oSiJjeSCExm0n2gZKKJZHY9cX5AVA6M7VJILBT3ZJ/tJ/0J9uWT7fETV9/btoi//vSg==} '@vitest/utils@4.1.10': resolution: {integrity: sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==} + '@vitest/utils@4.1.12': + resolution: {integrity: sha512-Q3awXrwOfEV+qc3WmO5ONyE0yO7Q1gQ9/oyHxGLZ/pl7N3NO/ZztqQwKLuwMkV+CA1JYSIeO3gkHnRDIo4AVaA==} + '@volar/language-core@2.4.28': resolution: {integrity: sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==} @@ -4873,10 +4882,6 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chai@5.3.3: - resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} - engines: {node: '>=18'} - chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} @@ -4890,10 +4895,6 @@ packages: character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - check-error@2.1.3: - resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} - engines: {node: '>= 16'} - chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -5246,10 +5247,6 @@ packages: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} - deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} - deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -5537,9 +5534,6 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - es-module-lexer@2.3.1: resolution: {integrity: sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==} @@ -6220,9 +6214,6 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-tokens@9.0.1: - resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - js-yaml@3.15.1: resolution: {integrity: sha512-S99WuO3HlhO3XN41EtYUNl9zzXjoJx7QvmipxsJVxtCBT0YHEFy+iOJhjSvrmV12nYhWpZaM8lPHkJm0yUMbag==} hasBin: true @@ -6419,9 +6410,6 @@ packages: longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - loupe@3.2.1: - resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} - lowercase-keys@3.0.0: resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -6937,10 +6925,6 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@2.0.1: - resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} - engines: {node: '>= 14.16'} - pdf-lib@1.17.1: resolution: {integrity: sha512-V/mpyJAoTsN4cnP31vc0wfNA1+p20evqqnap0KLoRUN0Yk/p3wN52DOEsL4oBFcLdb76hlpKPtzJIgo67j/XLw==} @@ -7526,9 +7510,6 @@ packages: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} - std-env@3.10.0: - resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} - std-env@4.2.0: resolution: {integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==} @@ -7576,9 +7557,6 @@ packages: resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} engines: {node: '>=14.16'} - strip-literal@3.1.0: - resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} - style-mod@4.1.3: resolution: {integrity: sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==} @@ -7625,22 +7603,10 @@ packages: resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} - tinypool@1.1.1: - resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} - engines: {node: ^18.0.0 || >=20.0.0} - - tinyrainbow@2.0.0: - resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} - engines: {node: '>=14.0.0'} - tinyrainbow@3.1.1: resolution: {integrity: sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==} engines: {node: '>=14.0.0'} - tinyspy@4.0.4: - resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} - engines: {node: '>=14.0.0'} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -7796,6 +7762,9 @@ packages: undici-types@8.3.0: resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} + undici-types@8.9.0: + resolution: {integrity: sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==} + undici@5.29.0: resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} engines: {node: '>=14.0'} @@ -8101,11 +8070,6 @@ packages: peerDependencies: vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 || ^8.0.0 - vite-node@3.2.4: - resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - vite-plugin-inspect@0.10.6: resolution: {integrity: sha512-R3pwljjBbjFM2sZvy6Zvynnm51oaEwLYyYPk9Wp2lF97w/YMBq+KtTJXpCA17IO2pImX0bWA6WB05kuqRnkuyQ==} engines: {node: '>=14'} @@ -8226,46 +8190,6 @@ packages: yaml: optional: true - vite@7.3.6: - resolution: {integrity: sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - jiti: '>=1.21.0' - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - vite@8.2.0: resolution: {integrity: sha512-pn+CFpM0lwDeKwmOq1ZaBK/9sjorZcgqxki6MbY/jPEVd9vichIlmlD4HmQ5wdP5EgqQCFRaACBxMC7uEGc6lQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -8317,26 +8241,39 @@ packages: vite: optional: true - vitest@3.2.7: - resolution: {integrity: sha512-KrxIJ62Fd89gfysR4WotlgZABiz2dqFPgqGzX7s+CwsqLFomRH7777ZcrOD6+WVAh7khPQP41A+BKbpcJFrdEg==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vitest@4.1.10: + resolution: {integrity: sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.2.7 - '@vitest/ui': 3.2.7 + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.1.10 + '@vitest/browser-preview': 4.1.10 + '@vitest/browser-webdriverio': 4.1.10 + '@vitest/coverage-istanbul': 4.1.10 + '@vitest/coverage-v8': 4.1.10 + '@vitest/ui': 4.1.10 happy-dom: '*' jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: '@edge-runtime/vm': optional: true - '@types/debug': + '@opentelemetry/api': optional: true '@types/node': optional: true - '@vitest/browser': + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': optional: true '@vitest/ui': optional: true @@ -8345,20 +8282,20 @@ packages: jsdom: optional: true - vitest@4.1.10: - resolution: {integrity: sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==} + vitest@4.1.12: + resolution: {integrity: sha512-5eWdz2yb3ajxWF3C8C4TjkXl7FGm3n2E/VlazALrQHzK7nYMSGFnCZto0bbPNl77AwkOZVLk0YnBAejUu0NiWA==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.10 - '@vitest/browser-preview': 4.1.10 - '@vitest/browser-webdriverio': 4.1.10 - '@vitest/coverage-istanbul': 4.1.10 - '@vitest/coverage-v8': 4.1.10 - '@vitest/ui': 4.1.10 + '@vitest/browser-playwright': 4.1.12 + '@vitest/browser-preview': 4.1.12 + '@vitest/browser-webdriverio': ^4.1.11 + '@vitest/coverage-istanbul': 4.1.12 + '@vitest/coverage-v8': 4.1.12 + '@vitest/ui': 4.1.12 happy-dom: '*' jsdom: '*' vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -9042,50 +8979,21 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@devframes/hub@0.8.0(devframe@0.8.0(cac@7.0.0)(srvx@0.12.5))': - dependencies: - '@standard-schema/spec': 1.1.0 - destr: 2.0.5 - devframe: 0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5) - nostics: 1.2.0 - pathe: 2.0.3 - perfect-debounce: 2.1.0 - tinyexec: 1.3.0 - zigpty: 0.2.1 - '@devframes/hub@0.8.0(devframe@0.8.0)': dependencies: '@standard-schema/spec': 1.1.0 destr: 2.0.5 - devframe: 0.8.0 + devframe: 0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5) nostics: 1.2.0 pathe: 2.0.3 perfect-debounce: 2.1.0 tinyexec: 1.3.0 zigpty: 0.2.1 - '@devframes/json-render@0.8.0(@devframes/hub@0.8.0(devframe@0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)))(devframe@0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5))': - dependencies: - '@json-render/core': 0.19.0(zod@4.4.3) - devframe: 0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5) - nostics: 1.2.0 - zod: 4.4.3 - optionalDependencies: - '@devframes/hub': 0.8.0(devframe@0.8.0(cac@7.0.0)(srvx@0.12.5)) - - '@devframes/json-render@0.8.0(@devframes/hub@0.8.0(devframe@0.8.0(cac@7.0.0)(srvx@0.12.5)))(devframe@0.8.0(cac@7.0.0)(srvx@0.12.5))': - dependencies: - '@json-render/core': 0.19.0(zod@4.4.3) - devframe: 0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5) - nostics: 1.2.0 - zod: 4.4.3 - optionalDependencies: - '@devframes/hub': 0.8.0(devframe@0.8.0(cac@7.0.0)(srvx@0.12.5)) - '@devframes/json-render@0.8.0(@devframes/hub@0.8.0(devframe@0.8.0))(devframe@0.8.0)': dependencies: '@json-render/core': 0.19.0(zod@4.4.3) - devframe: 0.8.0 + devframe: 0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5) nostics: 1.2.0 zod: 4.4.3 optionalDependencies: @@ -9494,6 +9402,15 @@ snapshots: - bufferutil - utf-8-validate + '@fastrd/harness-transport@0.1.2': {} + + '@fastrd/ui-foundation@0.1.2': {} + + '@fastrd/ui-vue@0.1.2(vue@3.5.40(typescript@6.0.3))': + dependencies: + '@fastrd/ui-foundation': 0.1.2 + vue: 3.5.40(typescript@6.0.3) + '@fix-webm-duration/fix@1.0.1': dependencies: '@fix-webm-duration/parser': 1.0.1 @@ -10569,7 +10486,7 @@ snapshots: - vue-template-compiler - vue-template-es2015-compiler - '@slidev/cli@51.1.1(@babel/parser@7.29.8)(@nuxt/kit@3.21.10)(@types/markdown-it@14.1.2)(@types/node@26.1.2)(@vue/compiler-sfc@3.5.40)(lightningcss@1.33.0)(markdown-it-async@2.2.0)(playwright-chromium@1.50.1)(postcss@8.5.2)(tsx@4.23.5)': + '@slidev/cli@51.1.1(@babel/parser@7.29.8)(@nuxt/kit@3.21.10)(@types/markdown-it@14.1.2)(@types/node@26.6.6)(@vue/compiler-sfc@3.5.40)(lightningcss@1.33.0)(markdown-it-async@2.2.0)(playwright-chromium@1.50.1)(postcss@8.5.2)(tsx@4.23.5)': dependencies: '@antfu/ni': 23.3.1 '@antfu/utils': 9.3.0 @@ -10580,13 +10497,13 @@ snapshots: '@shikijs/markdown-it': 2.5.0(markdown-it-async@2.2.0) '@shikijs/twoslash': 2.5.0(typescript@5.9.3) '@shikijs/vitepress-twoslash': 2.5.0(@nuxt/kit@3.21.10)(typescript@5.9.3) - '@slidev/client': 51.1.1(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(markdown-it-async@2.2.0)(postcss@8.5.2)(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) - '@slidev/parser': 51.1.1(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(markdown-it-async@2.2.0)(postcss@8.5.2)(typescript@5.9.3)(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) - '@slidev/types': 51.1.1(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(markdown-it-async@2.2.0)(postcss@8.5.2)(typescript@5.9.3)(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) + '@slidev/client': 51.1.1(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(markdown-it-async@2.2.0)(postcss@8.5.2)(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) + '@slidev/parser': 51.1.1(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(markdown-it-async@2.2.0)(postcss@8.5.2)(typescript@5.9.3)(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) + '@slidev/types': 51.1.1(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(markdown-it-async@2.2.0)(postcss@8.5.2)(typescript@5.9.3)(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) '@unocss/extractor-mdc': 65.5.0 '@unocss/reset': 65.5.0 - '@vitejs/plugin-vue': 5.2.4(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) - '@vitejs/plugin-vue-jsx': 4.2.0(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) + '@vitejs/plugin-vue': 5.2.4(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) + '@vitejs/plugin-vue-jsx': 4.2.0(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) chokidar: 4.0.3 cli-progress: 3.12.0 connect: 3.7.0 @@ -10626,18 +10543,18 @@ snapshots: sirv: 3.0.2 source-map-js: 1.2.1 typescript: 5.9.3 - unocss: 65.5.0(postcss@8.5.2)(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) + unocss: 65.5.0(postcss@8.5.2)(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) unplugin-icons: 22.5.0(@vue/compiler-sfc@3.5.40) unplugin-vue-components: 28.8.0(@babel/parser@7.29.8)(@nuxt/kit@3.21.10)(vue@3.5.40(typescript@5.9.3)) - unplugin-vue-markdown: 28.3.1(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) + unplugin-vue-markdown: 28.3.1(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) untun: 0.1.3 uqr: 0.1.3 - vite: 6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) - vite-plugin-inspect: 10.3.0(@nuxt/kit@3.21.10)(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-remote-assets: 0.6.0(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-static-copy: 2.3.2(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-vue-server-ref: 0.4.2(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) - vitefu: 1.1.3(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) + vite: 6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) + vite-plugin-inspect: 10.3.0(@nuxt/kit@3.21.10)(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-remote-assets: 0.6.0(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-static-copy: 2.3.2(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-vue-server-ref: 0.4.2(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) + vitefu: 1.1.3(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) vue: 3.5.40(typescript@5.9.3) yaml: 2.9.0 yargs: 17.7.3 @@ -10921,7 +10838,7 @@ snapshots: - unloader - webpack - '@slidev/cli@52.19.0(@nuxt/kit@3.21.10)(@types/markdown-it@14.1.2)(@types/node@22.20.1)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(hono@4.13.0)(lightningcss@1.33.0)(markdown-it-async@2.2.0)(markdown-it@14.3.0)(playwright-chromium@1.62.1)(postcss@8.5.25)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(tsx@4.23.5)': + '@slidev/cli@52.19.0(@nuxt/kit@3.21.10)(@types/markdown-it@14.1.2)(@types/node@26.1.2)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(hono@4.13.0)(markdown-it-async@2.2.0)(markdown-it@14.3.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(playwright-chromium@1.62.1)(postcss@8.5.25)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(tsx@4.23.5)': dependencies: '@antfu/ni': 30.3.0 '@antfu/utils': 9.3.0 @@ -10936,13 +10853,13 @@ snapshots: '@shikijs/markdown-it': 4.4.1(markdown-it-async@2.2.0) '@shikijs/twoslash': 4.4.1(typescript@6.0.3) '@shikijs/vitepress-twoslash': 4.4.1(@nuxt/kit@3.21.10)(typescript@6.0.3) - '@slidev/client': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(lightningcss@1.33.0)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - '@slidev/parser': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - '@slidev/types': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@slidev/client': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@oxc-project/types@0.142.0)(@vitejs/devtools-kit@0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(lightningcss@1.33.0)(markdown-it-async@2.2.0)(oxc-parser@0.131.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@slidev/parser': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@slidev/types': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) '@unocss/extractor-mdc': 66.7.5 '@unocss/reset': 66.7.5 - '@vitejs/plugin-vue': 6.0.8(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - '@vitejs/plugin-vue-jsx': 5.1.6(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@vitejs/plugin-vue': 6.0.8(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@vitejs/plugin-vue-jsx': 5.1.6(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) ansis: 4.3.1 chokidar: 5.0.0 cli-progress: 3.12.0 @@ -10981,19 +10898,19 @@ snapshots: sirv: 3.0.2 source-map-js: 1.2.1 typescript: 6.0.3 - unhead: 3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - unocss: 66.7.5(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unhead: 3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unocss: 66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) unplugin-icons: 23.0.1(@vue/compiler-sfc@3.5.40) - unplugin-vue-components: 32.1.0(@nuxt/kit@3.21.10)(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - unplugin-vue-markdown: 32.0.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unplugin-vue-components: 32.1.0(@nuxt/kit@3.21.10)(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + unplugin-vue-markdown: 32.0.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) untun: 0.2.2 uqr: 0.1.3 - vite: 8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - vite-plugin-inspect: 12.0.2(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-remote-assets: 2.1.0(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-static-copy: 4.1.1(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-vue-server-ref: 1.0.0(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - vitefu: 1.1.3(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite-plugin-inspect: 12.0.2(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-remote-assets: 2.1.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-static-copy: 4.1.1(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-vue-server-ref: 1.0.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + vitefu: 1.1.3(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) vue: 3.5.40(typescript@6.0.3) yaml: 2.9.0 yargs: 18.1.0 @@ -11046,7 +10963,7 @@ snapshots: - unloader - webpack - '@slidev/cli@52.19.0(@nuxt/kit@3.21.10)(@types/markdown-it@14.1.2)(@types/node@26.1.2)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.17.19)(hono@4.13.0)(markdown-it-async@2.2.0)(markdown-it@14.3.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(playwright-chromium@1.62.1)(postcss@8.5.25)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(tsx@4.23.5)': + '@slidev/cli@52.19.0(@nuxt/kit@3.21.10)(@types/markdown-it@14.1.2)(@types/node@26.6.6)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.17.19)(hono@4.13.0)(markdown-it-async@2.2.0)(markdown-it@14.3.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(playwright-chromium@1.62.1)(postcss@8.5.25)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(tsx@4.23.5)': dependencies: '@antfu/ni': 30.3.0 '@antfu/utils': 9.3.0 @@ -11061,13 +10978,13 @@ snapshots: '@shikijs/markdown-it': 4.4.1(markdown-it-async@2.2.0) '@shikijs/twoslash': 4.4.1(typescript@6.0.3) '@shikijs/vitepress-twoslash': 4.4.1(@nuxt/kit@3.21.10)(typescript@6.0.3) - '@slidev/client': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.17.19)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - '@slidev/parser': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.17.19)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - '@slidev/types': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.17.19)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@slidev/client': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.17.19)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@slidev/parser': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.17.19)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@slidev/types': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.17.19)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) '@unocss/extractor-mdc': 66.7.5 '@unocss/reset': 66.7.5 - '@vitejs/plugin-vue': 6.0.8(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - '@vitejs/plugin-vue-jsx': 5.1.6(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@vitejs/plugin-vue': 6.0.8(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@vitejs/plugin-vue-jsx': 5.1.6(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) ansis: 4.3.1 chokidar: 5.0.0 cli-progress: 3.12.0 @@ -11106,19 +11023,19 @@ snapshots: sirv: 3.0.2 source-map-js: 1.2.1 typescript: 6.0.3 - unhead: 3.3.1(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - unocss: 66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unhead: 3.3.1(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unocss: 66.7.5(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) unplugin-icons: 23.0.1(@vue/compiler-sfc@3.5.40) - unplugin-vue-components: 32.1.0(@nuxt/kit@3.21.10)(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - unplugin-vue-markdown: 32.0.0(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unplugin-vue-components: 32.1.0(@nuxt/kit@3.21.10)(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + unplugin-vue-markdown: 32.0.0(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) untun: 0.2.2 uqr: 0.1.3 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - vite-plugin-inspect: 12.0.2(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-remote-assets: 2.1.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-static-copy: 4.1.1(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-vue-server-ref: 1.0.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - vitefu: 1.1.3(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite-plugin-inspect: 12.0.2(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-remote-assets: 2.1.0(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-static-copy: 4.1.1(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-vue-server-ref: 1.0.0(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + vitefu: 1.1.3(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) vue: 3.5.40(typescript@6.0.3) yaml: 2.9.0 yargs: 18.1.0 @@ -11171,7 +11088,7 @@ snapshots: - unloader - webpack - '@slidev/cli@52.19.0(@nuxt/kit@3.21.10)(@types/markdown-it@14.1.2)(@types/node@26.1.2)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(hono@4.13.0)(markdown-it-async@2.2.0)(markdown-it@14.3.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(playwright-chromium@1.62.1)(postcss@8.5.25)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(tsx@4.23.5)': + '@slidev/cli@52.19.0(@nuxt/kit@3.21.10)(@types/markdown-it@14.1.2)(@types/node@26.6.6)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(hono@4.13.0)(markdown-it-async@2.2.0)(markdown-it@14.3.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(playwright-chromium@1.62.1)(postcss@8.5.25)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(tsx@4.23.5)': dependencies: '@antfu/ni': 30.3.0 '@antfu/utils': 9.3.0 @@ -11186,13 +11103,13 @@ snapshots: '@shikijs/markdown-it': 4.4.1(markdown-it-async@2.2.0) '@shikijs/twoslash': 4.4.1(typescript@6.0.3) '@shikijs/vitepress-twoslash': 4.4.1(@nuxt/kit@3.21.10)(typescript@6.0.3) - '@slidev/client': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - '@slidev/parser': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - '@slidev/types': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@slidev/client': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@oxc-project/types@0.142.0)(@vitejs/devtools-kit@0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(lightningcss@1.33.0)(markdown-it-async@2.2.0)(oxc-parser@0.131.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@slidev/parser': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@slidev/types': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) '@unocss/extractor-mdc': 66.7.5 '@unocss/reset': 66.7.5 - '@vitejs/plugin-vue': 6.0.8(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - '@vitejs/plugin-vue-jsx': 5.1.6(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@vitejs/plugin-vue': 6.0.8(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@vitejs/plugin-vue-jsx': 5.1.6(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) ansis: 4.3.1 chokidar: 5.0.0 cli-progress: 3.12.0 @@ -11231,19 +11148,19 @@ snapshots: sirv: 3.0.2 source-map-js: 1.2.1 typescript: 6.0.3 - unhead: 3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - unocss: 66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unhead: 3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unocss: 66.7.5(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) unplugin-icons: 23.0.1(@vue/compiler-sfc@3.5.40) - unplugin-vue-components: 32.1.0(@nuxt/kit@3.21.10)(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - unplugin-vue-markdown: 32.0.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unplugin-vue-components: 32.1.0(@nuxt/kit@3.21.10)(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + unplugin-vue-markdown: 32.0.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) untun: 0.2.2 uqr: 0.1.3 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - vite-plugin-inspect: 12.0.2(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-remote-assets: 2.1.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-static-copy: 4.1.1(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-vue-server-ref: 1.0.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - vitefu: 1.1.3(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite-plugin-inspect: 12.0.2(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-remote-assets: 2.1.0(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-static-copy: 4.1.1(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-vue-server-ref: 1.0.0(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + vitefu: 1.1.3(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) vue: 3.5.40(typescript@6.0.3) yaml: 2.9.0 yargs: 18.1.0 @@ -11296,154 +11213,29 @@ snapshots: - unloader - webpack - '@slidev/cli@52.19.0(@nuxt/kit@3.21.10)(@types/markdown-it@14.1.2)(@types/node@26.1.2)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(hono@4.13.0)(markdown-it-async@2.2.0)(markdown-it@14.3.0)(playwright-chromium@1.62.1)(postcss@8.5.25)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(tsx@4.23.5)': + '@slidev/client@0.50.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(postcss@8.5.25)(rollup@4.62.4)(vite@6.4.3(@types/node@18.19.130)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: - '@antfu/ni': 30.3.0 - '@antfu/utils': 9.3.0 - '@comark/markdown-it': 0.3.4(@types/markdown-it@14.1.2)(markdown-it@14.3.0) + '@antfu/utils': 0.7.10 '@iconify-json/carbon': 1.2.25 '@iconify-json/ph': 1.2.2 '@iconify-json/svg-spinners': 1.2.4 - '@lillallol/outline-pdf': 4.0.0 - '@modelcontextprotocol/node': 2.0.0(@modelcontextprotocol/server@2.0.0)(hono@4.13.0) - '@modelcontextprotocol/server': 2.0.0 - '@shikijs/magic-move': 4.4.1(shiki@4.4.1)(vue@3.5.40(typescript@6.0.3)) - '@shikijs/markdown-it': 4.4.1(markdown-it-async@2.2.0) - '@shikijs/twoslash': 4.4.1(typescript@6.0.3) - '@shikijs/vitepress-twoslash': 4.4.1(@nuxt/kit@3.21.10)(typescript@6.0.3) - '@slidev/client': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - '@slidev/parser': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - '@slidev/types': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - '@unocss/extractor-mdc': 66.7.5 - '@unocss/reset': 66.7.5 - '@vitejs/plugin-vue': 6.0.8(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - '@vitejs/plugin-vue-jsx': 5.1.6(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - ansis: 4.3.1 - chokidar: 5.0.0 - cli-progress: 3.12.0 - connect: 3.7.0 - fast-deep-equal: 3.1.3 - fast-glob: 3.3.3 - get-port-please: 3.2.0 - global-directory: 5.0.0 - htmlparser2: 12.0.0 - is-installed-globally: 1.0.0 - jiti: 2.7.0 - katex: 0.18.1 - local-pkg: 1.2.1 - lz-string: 1.5.0 - magic-string: 1.1.0 - magic-string-stack: 2.0.0 - markdown-exit: 1.1.0-beta.2 - markdown-it-footnote: 4.0.0 - markdown-it-github-alerts: 1.0.1(markdown-it@14.3.0) - mlly: 1.8.2 - monaco-editor: 0.56.0 - obug: 2.1.4 - open: 11.0.0 - pathe: 2.0.3 - pdf-lib: 1.17.1 - picomatch: 4.0.5 - plantuml-encoder: 1.4.0 - postcss-nested: 8.0.1(postcss@8.5.25) - pptxgenjs: 4.0.1 - prompts: 2.4.2 - public-ip: 8.0.0 - resolve-from: 5.0.0 - resolve-global: 2.0.0 - semver: 7.8.5 - shiki: 4.4.1 - sirv: 3.0.2 - source-map-js: 1.2.1 - typescript: 6.0.3 - unhead: 3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - unocss: 66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - unplugin-icons: 23.0.1(@vue/compiler-sfc@3.5.40) - unplugin-vue-components: 32.1.0(@nuxt/kit@3.21.10)(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - unplugin-vue-markdown: 32.0.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - untun: 0.2.2 - uqr: 0.1.3 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - vite-plugin-inspect: 12.0.2(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-remote-assets: 2.1.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-static-copy: 4.1.1(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-vue-server-ref: 1.0.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - vitefu: 1.1.3(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vue: 3.5.40(typescript@6.0.3) - yaml: 2.9.0 - yargs: 18.1.0 - zod: 4.4.3 - optionalDependencies: - playwright-chromium: 1.62.1 - transitivePeerDependencies: - - '@farmfe/core' - - '@modelcontextprotocol/client' - - '@nuxt/kit' - - '@oxc-project/types' - - '@pinia/colada' - - '@rspack/core' - - '@svgr/core' - - '@svgx/core' - - '@types/markdown-it' - - '@types/node' - - '@unhead/cli' - - '@unocss/astro' - - '@unocss/postcss' - - '@unocss/webpack' - - '@vitejs/devtools' - - '@vitejs/devtools-kit' - - '@vue/compiler-sfc' - - bun-types-no-globals - - cac - - esbuild - - hono - - less - - lightningcss - - magicast - - markdown-it - - markdown-it-async - - oxc-parser - - pinia - - postcss - - react - - rolldown - - rollup - - sass - - sass-embedded - - solid-js - - srvx - - stylus - - sugarss - - supports-color - - svelte - - terser - - tsx - - unloader - - webpack - - '@slidev/client@0.50.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(postcss@8.5.25)(rollup@4.62.4)(vite@6.4.3(@types/node@18.19.130)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))': - dependencies: - '@antfu/utils': 0.7.10 - '@iconify-json/carbon': 1.2.25 - '@iconify-json/ph': 1.2.2 - '@iconify-json/svg-spinners': 1.2.4 - '@shikijs/monaco': 1.29.2 - '@shikijs/vitepress-twoslash': 1.29.2(@nuxt/kit@3.21.10)(typescript@5.6.3) - '@slidev/parser': 0.50.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(postcss@8.5.25)(rollup@4.62.4)(typescript@5.6.3)(vite@6.4.3(@types/node@18.19.130)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) - '@slidev/rough-notation': 0.1.0 - '@slidev/types': 0.50.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(postcss@8.5.25)(rollup@4.62.4)(typescript@5.6.3)(vite@6.4.3(@types/node@18.19.130)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) - '@typescript/ata': 0.9.8(typescript@5.6.3) - '@unhead/vue': 1.11.20(vue@3.5.40(typescript@5.6.3)) - '@unocss/reset': 0.65.4 - '@vueuse/core': 12.8.2(typescript@5.6.3) - '@vueuse/math': 12.8.2(typescript@5.6.3) - '@vueuse/motion': 2.2.6(vue@3.5.40(typescript@5.6.3)) - drauu: 0.4.3 - file-saver: 2.0.5 - floating-vue: 5.2.2(@nuxt/kit@3.21.10)(vue@3.5.40(typescript@5.6.3)) - fuse.js: 7.5.0 - html-to-image: 1.11.13 - katex: 0.16.47 + '@shikijs/monaco': 1.29.2 + '@shikijs/vitepress-twoslash': 1.29.2(@nuxt/kit@3.21.10)(typescript@5.6.3) + '@slidev/parser': 0.50.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(postcss@8.5.25)(rollup@4.62.4)(typescript@5.6.3)(vite@6.4.3(@types/node@18.19.130)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) + '@slidev/rough-notation': 0.1.0 + '@slidev/types': 0.50.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(postcss@8.5.25)(rollup@4.62.4)(typescript@5.6.3)(vite@6.4.3(@types/node@18.19.130)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) + '@typescript/ata': 0.9.8(typescript@5.6.3) + '@unhead/vue': 1.11.20(vue@3.5.40(typescript@5.6.3)) + '@unocss/reset': 0.65.4 + '@vueuse/core': 12.8.2(typescript@5.6.3) + '@vueuse/math': 12.8.2(typescript@5.6.3) + '@vueuse/motion': 2.2.6(vue@3.5.40(typescript@5.6.3)) + drauu: 0.4.3 + file-saver: 2.0.5 + floating-vue: 5.2.2(@nuxt/kit@3.21.10)(vue@3.5.40(typescript@5.6.3)) + fuse.js: 7.5.0 + html-to-image: 1.11.13 + katex: 0.16.47 lz-string: 1.5.0 mermaid: 11.16.0 monaco-editor: 0.51.0 @@ -11476,7 +11268,7 @@ snapshots: - vue-template-compiler - vue-template-es2015-compiler - '@slidev/client@51.1.1(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(markdown-it-async@2.2.0)(postcss@8.5.2)(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))': + '@slidev/client@51.1.1(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(markdown-it-async@2.2.0)(postcss@8.5.2)(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: '@antfu/utils': 9.3.0 '@iconify-json/carbon': 1.2.25 @@ -11485,9 +11277,9 @@ snapshots: '@shikijs/engine-javascript': 2.5.0 '@shikijs/monaco': 2.5.0 '@shikijs/vitepress-twoslash': 2.5.0(@nuxt/kit@3.21.10)(typescript@5.9.3) - '@slidev/parser': 51.1.1(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(markdown-it-async@2.2.0)(postcss@8.5.2)(typescript@5.9.3)(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) + '@slidev/parser': 51.1.1(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(markdown-it-async@2.2.0)(postcss@8.5.2)(typescript@5.9.3)(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) '@slidev/rough-notation': 0.1.0 - '@slidev/types': 51.1.1(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(markdown-it-async@2.2.0)(postcss@8.5.2)(typescript@5.9.3)(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) + '@slidev/types': 51.1.1(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(markdown-it-async@2.2.0)(postcss@8.5.2)(typescript@5.9.3)(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) '@typescript/ata': 0.9.8(typescript@5.9.3) '@unhead/vue': 1.11.20(vue@3.5.40(typescript@5.9.3)) '@unocss/reset': 65.5.0 @@ -11509,7 +11301,7 @@ snapshots: shiki: 2.5.0 shiki-magic-move: 1.4.0(shiki@2.5.0)(vue@3.5.40(typescript@5.9.3)) typescript: 5.9.3 - unocss: 65.5.0(postcss@8.5.2)(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) + unocss: 65.5.0(postcss@8.5.2)(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) vue: 3.5.40(typescript@5.9.3) vue-router: 4.6.4(vue@3.5.40(typescript@5.9.3)) yaml: 2.9.0 @@ -11774,235 +11566,7 @@ snapshots: '@slidev/rough-notation': 0.1.0 '@slidev/types': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) '@typescript/ata': 0.9.8(typescript@6.0.3) - '@unhead/vue': 3.3.1(@oxc-project/types@0.142.0)(@vitejs/devtools-kit@0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.131.0)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - '@unocss/extractor-mdc': 66.7.5 - '@unocss/preset-mini': 66.7.5 - '@unocss/reset': 66.7.5 - '@vueuse/core': 14.4.0(vue@3.5.40(typescript@6.0.3)) - '@vueuse/math': 14.4.0(vue@3.5.40(typescript@6.0.3)) - '@vueuse/motion': 3.0.3(vue@3.5.40(typescript@6.0.3)) - ansis: 4.3.1 - drauu: 1.0.0 - file-saver: 2.0.5 - fitty: 2.4.2 - floating-vue: 5.2.2(@nuxt/kit@3.21.10)(vue@3.5.40(typescript@6.0.3)) - fuse.js: 7.5.0 - katex: 0.18.1 - lz-string: 1.5.0 - mermaid: 11.16.0 - monaco-editor: 0.56.0 - nanotar: 0.3.0 - pptxgenjs: 4.0.1 - recordrtc: 5.6.2 - shiki: 4.4.1 - typescript: 6.0.3 - unocss: 66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vue: 3.5.40(typescript@6.0.3) - vue-router: 5.2.0(@vue/compiler-sfc@3.5.40)(esbuild@0.28.1)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - yaml: 2.9.0 - transitivePeerDependencies: - - '@farmfe/core' - - '@modelcontextprotocol/client' - - '@modelcontextprotocol/server' - - '@nuxt/kit' - - '@oxc-project/types' - - '@pinia/colada' - - '@rspack/core' - - '@svgr/core' - - '@svgx/core' - - '@unhead/cli' - - '@unocss/astro' - - '@unocss/postcss' - - '@unocss/webpack' - - '@vitejs/devtools-kit' - - '@vue/compiler-sfc' - - bun-types-no-globals - - cac - - esbuild - - lightningcss - - magicast - - markdown-it-async - - oxc-parser - - pinia - - react - - rolldown - - rollup - - solid-js - - srvx - - supports-color - - svelte - - unloader - - vite - - webpack - - '@slidev/client@52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.17.19)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': - dependencies: - '@antfu/utils': 9.3.0 - '@fix-webm-duration/fix': 1.0.1 - '@iconify-json/carbon': 1.2.25 - '@iconify-json/ph': 1.2.2 - '@iconify-json/svg-spinners': 1.2.4 - '@shikijs/engine-javascript': 4.4.1 - '@shikijs/magic-move': 4.4.1(shiki@4.4.1)(vue@3.5.40(typescript@6.0.3)) - '@shikijs/monaco': 4.4.1 - '@shikijs/vitepress-twoslash': 4.4.1(@nuxt/kit@3.21.10)(typescript@6.0.3) - '@slidev/parser': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.17.19)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - '@slidev/rough-notation': 0.1.0 - '@slidev/types': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.17.19)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - '@typescript/ata': 0.9.8(typescript@6.0.3) - '@unhead/vue': 3.3.1(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - '@unocss/extractor-mdc': 66.7.5 - '@unocss/preset-mini': 66.7.5 - '@unocss/reset': 66.7.5 - '@vueuse/core': 14.4.0(vue@3.5.40(typescript@6.0.3)) - '@vueuse/math': 14.4.0(vue@3.5.40(typescript@6.0.3)) - '@vueuse/motion': 3.0.3(vue@3.5.40(typescript@6.0.3)) - ansis: 4.3.1 - drauu: 1.0.0 - file-saver: 2.0.5 - fitty: 2.4.2 - floating-vue: 5.2.2(@nuxt/kit@3.21.10)(vue@3.5.40(typescript@6.0.3)) - fuse.js: 7.5.0 - katex: 0.18.1 - lz-string: 1.5.0 - mermaid: 11.16.0 - monaco-editor: 0.56.0 - nanotar: 0.3.0 - pptxgenjs: 4.0.1 - recordrtc: 5.6.2 - shiki: 4.4.1 - typescript: 6.0.3 - unocss: 66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vue: 3.5.40(typescript@6.0.3) - vue-router: 5.2.0(@vue/compiler-sfc@3.5.40)(esbuild@0.17.19)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - yaml: 2.9.0 - transitivePeerDependencies: - - '@farmfe/core' - - '@modelcontextprotocol/client' - - '@modelcontextprotocol/server' - - '@nuxt/kit' - - '@oxc-project/types' - - '@pinia/colada' - - '@rspack/core' - - '@svgr/core' - - '@svgx/core' - - '@unhead/cli' - - '@unocss/astro' - - '@unocss/postcss' - - '@unocss/webpack' - - '@vitejs/devtools-kit' - - '@vue/compiler-sfc' - - bun-types-no-globals - - cac - - esbuild - - lightningcss - - magicast - - markdown-it-async - - oxc-parser - - pinia - - react - - rolldown - - rollup - - solid-js - - srvx - - supports-color - - svelte - - unloader - - vite - - webpack - - '@slidev/client@52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(lightningcss@1.33.0)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': - dependencies: - '@antfu/utils': 9.3.0 - '@fix-webm-duration/fix': 1.0.1 - '@iconify-json/carbon': 1.2.25 - '@iconify-json/ph': 1.2.2 - '@iconify-json/svg-spinners': 1.2.4 - '@shikijs/engine-javascript': 4.4.1 - '@shikijs/magic-move': 4.4.1(shiki@4.4.1)(vue@3.5.40(typescript@6.0.3)) - '@shikijs/monaco': 4.4.1 - '@shikijs/vitepress-twoslash': 4.4.1(@nuxt/kit@3.21.10)(typescript@6.0.3) - '@slidev/parser': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - '@slidev/rough-notation': 0.1.0 - '@slidev/types': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - '@typescript/ata': 0.9.8(typescript@6.0.3) - '@unhead/vue': 3.3.1(esbuild@0.28.1)(lightningcss@1.33.0)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - '@unocss/extractor-mdc': 66.7.5 - '@unocss/preset-mini': 66.7.5 - '@unocss/reset': 66.7.5 - '@vueuse/core': 14.4.0(vue@3.5.40(typescript@6.0.3)) - '@vueuse/math': 14.4.0(vue@3.5.40(typescript@6.0.3)) - '@vueuse/motion': 3.0.3(vue@3.5.40(typescript@6.0.3)) - ansis: 4.3.1 - drauu: 1.0.0 - file-saver: 2.0.5 - fitty: 2.4.2 - floating-vue: 5.2.2(@nuxt/kit@3.21.10)(vue@3.5.40(typescript@6.0.3)) - fuse.js: 7.5.0 - katex: 0.18.1 - lz-string: 1.5.0 - mermaid: 11.16.0 - monaco-editor: 0.56.0 - nanotar: 0.3.0 - pptxgenjs: 4.0.1 - recordrtc: 5.6.2 - shiki: 4.4.1 - typescript: 6.0.3 - unocss: 66.7.5(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vue: 3.5.40(typescript@6.0.3) - vue-router: 5.2.0(@vue/compiler-sfc@3.5.40)(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - yaml: 2.9.0 - transitivePeerDependencies: - - '@farmfe/core' - - '@modelcontextprotocol/client' - - '@modelcontextprotocol/server' - - '@nuxt/kit' - - '@oxc-project/types' - - '@pinia/colada' - - '@rspack/core' - - '@svgr/core' - - '@svgx/core' - - '@unhead/cli' - - '@unocss/astro' - - '@unocss/postcss' - - '@unocss/webpack' - - '@vitejs/devtools-kit' - - '@vue/compiler-sfc' - - bun-types-no-globals - - cac - - esbuild - - lightningcss - - magicast - - markdown-it-async - - oxc-parser - - pinia - - react - - rolldown - - rollup - - solid-js - - srvx - - supports-color - - svelte - - unloader - - vite - - webpack - - '@slidev/client@52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': - dependencies: - '@antfu/utils': 9.3.0 - '@fix-webm-duration/fix': 1.0.1 - '@iconify-json/carbon': 1.2.25 - '@iconify-json/ph': 1.2.2 - '@iconify-json/svg-spinners': 1.2.4 - '@shikijs/engine-javascript': 4.4.1 - '@shikijs/magic-move': 4.4.1(shiki@4.4.1)(vue@3.5.40(typescript@6.0.3)) - '@shikijs/monaco': 4.4.1 - '@shikijs/vitepress-twoslash': 4.4.1(@nuxt/kit@3.21.10)(typescript@6.0.3) - '@slidev/parser': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - '@slidev/rough-notation': 0.1.0 - '@slidev/types': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - '@typescript/ata': 0.9.8(typescript@6.0.3) - '@unhead/vue': 3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@unhead/vue': 3.3.1(@oxc-project/types@0.142.0)(@vitejs/devtools-kit@0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.131.0)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) '@unocss/extractor-mdc': 66.7.5 '@unocss/preset-mini': 66.7.5 '@unocss/reset': 66.7.5 @@ -12063,7 +11627,7 @@ snapshots: - vite - webpack - '@slidev/client@52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': + '@slidev/client@52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@oxc-project/types@0.142.0)(@vitejs/devtools-kit@0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(lightningcss@1.33.0)(markdown-it-async@2.2.0)(oxc-parser@0.131.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: '@antfu/utils': 9.3.0 '@fix-webm-duration/fix': 1.0.1 @@ -12074,11 +11638,11 @@ snapshots: '@shikijs/magic-move': 4.4.1(shiki@4.4.1)(vue@3.5.40(typescript@6.0.3)) '@shikijs/monaco': 4.4.1 '@shikijs/vitepress-twoslash': 4.4.1(@nuxt/kit@3.21.10)(typescript@6.0.3) - '@slidev/parser': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@slidev/parser': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) '@slidev/rough-notation': 0.1.0 - '@slidev/types': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@slidev/types': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) '@typescript/ata': 0.9.8(typescript@6.0.3) - '@unhead/vue': 3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@unhead/vue': 3.3.1(@oxc-project/types@0.142.0)(@vitejs/devtools-kit@0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.131.0)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) '@unocss/extractor-mdc': 66.7.5 '@unocss/preset-mini': 66.7.5 '@unocss/reset': 66.7.5 @@ -12100,9 +11664,9 @@ snapshots: recordrtc: 5.6.2 shiki: 4.4.1 typescript: 6.0.3 - unocss: 66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unocss: 66.7.5(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) vue: 3.5.40(typescript@6.0.3) - vue-router: 5.2.0(@vue/compiler-sfc@3.5.40)(esbuild@0.28.1)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + vue-router: 5.2.0(@vue/compiler-sfc@3.5.40)(esbuild@0.28.1)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) yaml: 2.9.0 transitivePeerDependencies: - '@farmfe/core' @@ -12139,7 +11703,7 @@ snapshots: - vite - webpack - '@slidev/client@52.19.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)': + '@slidev/client@52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.17.19)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: '@antfu/utils': 9.3.0 '@fix-webm-duration/fix': 1.0.1 @@ -12150,11 +11714,11 @@ snapshots: '@shikijs/magic-move': 4.4.1(shiki@4.4.1)(vue@3.5.40(typescript@6.0.3)) '@shikijs/monaco': 4.4.1 '@shikijs/vitepress-twoslash': 4.4.1(@nuxt/kit@3.21.10)(typescript@6.0.3) - '@slidev/parser': 52.19.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3) + '@slidev/parser': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.17.19)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) '@slidev/rough-notation': 0.1.0 - '@slidev/types': 52.19.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3) + '@slidev/types': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.17.19)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) '@typescript/ata': 0.9.8(typescript@6.0.3) - '@unhead/vue': 3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vue@3.5.40(typescript@6.0.3)) + '@unhead/vue': 3.3.1(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) '@unocss/extractor-mdc': 66.7.5 '@unocss/preset-mini': 66.7.5 '@unocss/reset': 66.7.5 @@ -12176,9 +11740,9 @@ snapshots: recordrtc: 5.6.2 shiki: 4.4.1 typescript: 6.0.3 - unocss: 66.7.5(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unocss: 66.7.5(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) vue: 3.5.40(typescript@6.0.3) - vue-router: 5.2.0(@vue/compiler-sfc@3.5.40)(esbuild@0.28.1)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + vue-router: 5.2.0(@vue/compiler-sfc@3.5.40)(esbuild@0.17.19)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) yaml: 2.9.0 transitivePeerDependencies: - '@farmfe/core' @@ -12240,10 +11804,10 @@ snapshots: - vue-template-compiler - vue-template-es2015-compiler - '@slidev/parser@51.1.1(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(markdown-it-async@2.2.0)(postcss@8.5.2)(typescript@5.9.3)(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))': + '@slidev/parser@51.1.1(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(markdown-it-async@2.2.0)(postcss@8.5.2)(typescript@5.9.3)(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: '@antfu/utils': 9.3.0 - '@slidev/types': 51.1.1(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(markdown-it-async@2.2.0)(postcss@8.5.2)(typescript@5.9.3)(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) + '@slidev/types': 51.1.1(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(markdown-it-async@2.2.0)(postcss@8.5.2)(typescript@5.9.3)(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) yaml: 2.9.0 transitivePeerDependencies: - '@nuxt/kit' @@ -12260,10 +11824,10 @@ snapshots: - vue-template-compiler - vue-template-es2015-compiler - '@slidev/parser@52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.17.19)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': + '@slidev/parser@52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.17.19)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: '@antfu/utils': 9.3.0 - '@slidev/types': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.17.19)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@slidev/types': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.17.19)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) pathe: 2.0.3 yaml: 2.9.0 transitivePeerDependencies: @@ -12430,112 +11994,10 @@ snapshots: - vite - webpack - '@slidev/parser@52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': - dependencies: - '@antfu/utils': 9.3.0 - '@slidev/types': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - pathe: 2.0.3 - yaml: 2.9.0 - transitivePeerDependencies: - - '@farmfe/core' - - '@modelcontextprotocol/client' - - '@modelcontextprotocol/server' - - '@nuxt/kit' - - '@pinia/colada' - - '@rspack/core' - - '@svgr/core' - - '@svgx/core' - - '@unocss/astro' - - '@unocss/postcss' - - '@unocss/webpack' - - '@vue/compiler-sfc' - - bun-types-no-globals - - cac - - esbuild - - markdown-it-async - - pinia - - rolldown - - rollup - - srvx - - supports-color - - svelte - - typescript - - unloader - - vite - - webpack - - '@slidev/parser@52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': - dependencies: - '@antfu/utils': 9.3.0 - '@slidev/types': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - pathe: 2.0.3 - yaml: 2.9.0 - transitivePeerDependencies: - - '@farmfe/core' - - '@modelcontextprotocol/client' - - '@modelcontextprotocol/server' - - '@nuxt/kit' - - '@pinia/colada' - - '@rspack/core' - - '@svgr/core' - - '@svgx/core' - - '@unocss/astro' - - '@unocss/postcss' - - '@unocss/webpack' - - '@vue/compiler-sfc' - - bun-types-no-globals - - cac - - esbuild - - markdown-it-async - - pinia - - rolldown - - rollup - - srvx - - supports-color - - svelte - - typescript - - unloader - - vite - - webpack - - '@slidev/parser@52.19.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': - dependencies: - '@antfu/utils': 9.3.0 - '@slidev/types': 52.19.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - pathe: 2.0.3 - yaml: 2.9.0 - transitivePeerDependencies: - - '@farmfe/core' - - '@modelcontextprotocol/client' - - '@modelcontextprotocol/server' - - '@nuxt/kit' - - '@pinia/colada' - - '@rspack/core' - - '@svgr/core' - - '@svgx/core' - - '@unocss/astro' - - '@unocss/postcss' - - '@unocss/webpack' - - '@vue/compiler-sfc' - - bun-types-no-globals - - cac - - esbuild - - markdown-it-async - - pinia - - rolldown - - rollup - - srvx - - supports-color - - svelte - - typescript - - unloader - - vite - - webpack - - '@slidev/parser@52.19.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)': + '@slidev/parser@52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: '@antfu/utils': 9.3.0 - '@slidev/types': 52.19.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3) + '@slidev/types': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) pathe: 2.0.3 yaml: 2.9.0 transitivePeerDependencies: @@ -12566,10 +12028,10 @@ snapshots: - vite - webpack - '@slidev/parser@52.19.0(typescript@6.0.3)(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))': + '@slidev/parser@52.19.0(esbuild@0.28.1)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: '@antfu/utils': 9.3.0 - '@slidev/types': 52.19.0(typescript@6.0.3)(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) + '@slidev/types': 52.19.0(esbuild@0.28.1)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) pathe: 2.0.3 yaml: 2.9.0 transitivePeerDependencies: @@ -12714,23 +12176,23 @@ snapshots: - vue-template-compiler - vue-template-es2015-compiler - '@slidev/types@51.1.1(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(markdown-it-async@2.2.0)(postcss@8.5.2)(typescript@5.9.3)(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))': + '@slidev/types@51.1.1(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(markdown-it-async@2.2.0)(postcss@8.5.2)(typescript@5.9.3)(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: '@antfu/utils': 9.3.0 '@shikijs/markdown-it': 2.5.0(markdown-it-async@2.2.0) - '@vitejs/plugin-vue': 5.2.4(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) - '@vitejs/plugin-vue-jsx': 4.2.0(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) + '@vitejs/plugin-vue': 5.2.4(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) + '@vitejs/plugin-vue-jsx': 4.2.0(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) katex: 0.16.47 mermaid: 11.16.0 monaco-editor: 0.51.0 shiki: 2.5.0 - unocss: 65.5.0(postcss@8.5.2)(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) + unocss: 65.5.0(postcss@8.5.2)(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) unplugin-icons: 22.5.0(@vue/compiler-sfc@3.5.40) - unplugin-vue-markdown: 28.3.1(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-inspect: 10.3.0(@nuxt/kit@3.21.10)(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-remote-assets: 0.6.0(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-static-copy: 2.3.2(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-vue-server-ref: 0.4.2(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) + unplugin-vue-markdown: 28.3.1(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-inspect: 10.3.0(@nuxt/kit@3.21.10)(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-remote-assets: 0.6.0(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-static-copy: 2.3.2(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-vue-server-ref: 0.4.2(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) vue: 3.5.40(typescript@5.9.3) vue-router: 4.6.4(vue@3.5.40(typescript@5.9.3)) transitivePeerDependencies: @@ -12748,23 +12210,23 @@ snapshots: - vue-template-compiler - vue-template-es2015-compiler - '@slidev/types@51.8.2(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(markdown-it-async@2.2.0)(typescript@5.9.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': + '@slidev/types@51.8.2(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(markdown-it-async@2.2.0)(typescript@5.9.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: '@antfu/utils': 9.3.0 '@shikijs/markdown-it': 3.23.0(markdown-it-async@2.2.0) - '@vitejs/plugin-vue': 5.2.4(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) - '@vitejs/plugin-vue-jsx': 4.2.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) + '@vitejs/plugin-vue': 5.2.4(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) + '@vitejs/plugin-vue-jsx': 4.2.0(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) katex: 0.16.47 mermaid: 11.16.0 monaco-editor: 0.52.2 shiki: 3.23.0 - unocss: 66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unocss: 66.7.5(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) unplugin-icons: 22.5.0(@vue/compiler-sfc@3.5.40) - unplugin-vue-markdown: 28.3.1(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-inspect: 11.4.1(@nuxt/kit@3.21.10)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-remote-assets: 2.1.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-static-copy: 3.4.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-vue-server-ref: 1.0.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) + unplugin-vue-markdown: 28.3.1(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-inspect: 11.4.1(@nuxt/kit@3.21.10)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-remote-assets: 2.1.0(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-static-copy: 3.4.0(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-vue-server-ref: 1.0.0(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) vue: 3.5.40(typescript@5.9.3) vue-router: 4.6.4(vue@3.5.40(typescript@5.9.3)) transitivePeerDependencies: @@ -12783,25 +12245,25 @@ snapshots: - vue-template-compiler - vue-template-es2015-compiler - '@slidev/types@52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.17.19)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': + '@slidev/types@52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.17.19)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: '@antfu/utils': 9.3.0 '@shikijs/markdown-it': 4.4.1(markdown-it-async@2.2.0) - '@vitejs/plugin-vue': 6.0.8(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - '@vitejs/plugin-vue-jsx': 5.1.6(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@vitejs/plugin-vue': 6.0.8(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@vitejs/plugin-vue-jsx': 5.1.6(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) katex: 0.18.1 mermaid: 11.16.0 monaco-editor: 0.56.0 shiki: 4.4.1 - unocss: 66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unocss: 66.7.5(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) unplugin-icons: 23.0.1(@vue/compiler-sfc@3.5.40) - unplugin-vue-markdown: 32.0.0(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-inspect: 12.0.2(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-remote-assets: 2.1.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-static-copy: 4.1.1(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-vue-server-ref: 1.0.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + unplugin-vue-markdown: 32.0.0(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-inspect: 12.0.2(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-remote-assets: 2.1.0(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-static-copy: 4.1.1(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-vue-server-ref: 1.0.0(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) vue: 3.5.40(typescript@6.0.3) - vue-router: 5.2.0(@vue/compiler-sfc@3.5.40)(esbuild@0.17.19)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + vue-router: 5.2.0(@vue/compiler-sfc@3.5.40)(esbuild@0.17.19)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) transitivePeerDependencies: - '@farmfe/core' - '@modelcontextprotocol/client' @@ -13018,166 +12480,25 @@ snapshots: - vite - webpack - '@slidev/types@52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': - dependencies: - '@antfu/utils': 9.3.0 - '@shikijs/markdown-it': 4.4.1(markdown-it-async@2.2.0) - '@vitejs/plugin-vue': 6.0.8(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - '@vitejs/plugin-vue-jsx': 5.1.6(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - katex: 0.18.1 - mermaid: 11.16.0 - monaco-editor: 0.56.0 - shiki: 4.4.1 - unocss: 66.7.5(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - unplugin-icons: 23.0.1(@vue/compiler-sfc@3.5.40) - unplugin-vue-markdown: 32.0.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-inspect: 12.0.2(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-remote-assets: 2.1.0(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-static-copy: 4.1.1(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-vue-server-ref: 1.0.0(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - vue: 3.5.40(typescript@6.0.3) - vue-router: 5.2.0(@vue/compiler-sfc@3.5.40)(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - transitivePeerDependencies: - - '@farmfe/core' - - '@modelcontextprotocol/client' - - '@modelcontextprotocol/server' - - '@nuxt/kit' - - '@pinia/colada' - - '@rspack/core' - - '@svgr/core' - - '@svgx/core' - - '@unocss/astro' - - '@unocss/postcss' - - '@unocss/webpack' - - '@vue/compiler-sfc' - - bun-types-no-globals - - cac - - esbuild - - markdown-it-async - - pinia - - rolldown - - rollup - - srvx - - supports-color - - svelte - - typescript - - unloader - - vite - - webpack - - '@slidev/types@52.19.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.17.19)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': - dependencies: - '@antfu/utils': 9.3.0 - '@shikijs/markdown-it': 4.4.1(markdown-it-async@2.2.0) - '@vitejs/plugin-vue': 6.0.8(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - '@vitejs/plugin-vue-jsx': 5.1.6(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - katex: 0.18.1 - mermaid: 11.16.0 - monaco-editor: 0.56.0 - shiki: 4.4.1 - unocss: 66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - unplugin-icons: 23.0.1(@vue/compiler-sfc@3.5.40) - unplugin-vue-markdown: 32.0.0(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-inspect: 12.0.2(@nuxt/kit@3.21.10)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-remote-assets: 2.1.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-static-copy: 4.1.1(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-vue-server-ref: 1.0.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - vue: 3.5.40(typescript@6.0.3) - vue-router: 5.2.0(@vue/compiler-sfc@3.5.40)(esbuild@0.17.19)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - transitivePeerDependencies: - - '@farmfe/core' - - '@modelcontextprotocol/client' - - '@modelcontextprotocol/server' - - '@nuxt/kit' - - '@pinia/colada' - - '@rspack/core' - - '@svgr/core' - - '@svgx/core' - - '@unocss/astro' - - '@unocss/postcss' - - '@unocss/webpack' - - '@vue/compiler-sfc' - - bun-types-no-globals - - cac - - esbuild - - markdown-it-async - - pinia - - rolldown - - rollup - - srvx - - supports-color - - svelte - - typescript - - unloader - - vite - - webpack - - '@slidev/types@52.19.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': - dependencies: - '@antfu/utils': 9.3.0 - '@shikijs/markdown-it': 4.4.1(markdown-it-async@2.2.0) - '@vitejs/plugin-vue': 6.0.8(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - '@vitejs/plugin-vue-jsx': 5.1.6(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - katex: 0.18.1 - mermaid: 11.16.0 - monaco-editor: 0.56.0 - shiki: 4.4.1 - unocss: 66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - unplugin-icons: 23.0.1(@vue/compiler-sfc@3.5.40) - unplugin-vue-markdown: 32.0.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-inspect: 12.0.2(@nuxt/kit@3.21.10)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-remote-assets: 2.1.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-static-copy: 4.1.1(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-vue-server-ref: 1.0.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - vue: 3.5.40(typescript@6.0.3) - vue-router: 5.2.0(@vue/compiler-sfc@3.5.40)(esbuild@0.28.1)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - transitivePeerDependencies: - - '@farmfe/core' - - '@modelcontextprotocol/client' - - '@modelcontextprotocol/server' - - '@nuxt/kit' - - '@pinia/colada' - - '@rspack/core' - - '@svgr/core' - - '@svgx/core' - - '@unocss/astro' - - '@unocss/postcss' - - '@unocss/webpack' - - '@vue/compiler-sfc' - - bun-types-no-globals - - cac - - esbuild - - markdown-it-async - - pinia - - rolldown - - rollup - - srvx - - supports-color - - svelte - - typescript - - unloader - - vite - - webpack - - '@slidev/types@52.19.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)': + '@slidev/types@52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: '@antfu/utils': 9.3.0 '@shikijs/markdown-it': 4.4.1(markdown-it-async@2.2.0) - '@vitejs/plugin-vue': 6.0.8(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - '@vitejs/plugin-vue-jsx': 5.1.6(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@vitejs/plugin-vue': 6.0.8(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@vitejs/plugin-vue-jsx': 5.1.6(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) katex: 0.18.1 mermaid: 11.16.0 monaco-editor: 0.56.0 shiki: 4.4.1 - unocss: 66.7.5(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unocss: 66.7.5(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) unplugin-icons: 23.0.1(@vue/compiler-sfc@3.5.40) - unplugin-vue-markdown: 32.0.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-inspect: 12.0.2(@nuxt/kit@3.21.10)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-remote-assets: 2.1.0(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-static-copy: 4.1.1(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-vue-server-ref: 1.0.0(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + unplugin-vue-markdown: 32.0.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-inspect: 12.0.2(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-remote-assets: 2.1.0(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-static-copy: 4.1.1(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-vue-server-ref: 1.0.0(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) vue: 3.5.40(typescript@6.0.3) - vue-router: 5.2.0(@vue/compiler-sfc@3.5.40)(esbuild@0.28.1)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + vue-router: 5.2.0(@vue/compiler-sfc@3.5.40)(esbuild@0.28.1)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) transitivePeerDependencies: - '@farmfe/core' - '@modelcontextprotocol/client' @@ -13206,25 +12527,25 @@ snapshots: - vite - webpack - '@slidev/types@52.19.0(typescript@6.0.3)(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))': + '@slidev/types@52.19.0(esbuild@0.28.1)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: '@antfu/utils': 9.3.0 '@shikijs/markdown-it': 4.4.1(markdown-it-async@2.2.0) - '@vitejs/plugin-vue': 6.0.8(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - '@vitejs/plugin-vue-jsx': 5.1.6(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@vitejs/plugin-vue': 6.0.8(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@vitejs/plugin-vue-jsx': 5.1.6(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) katex: 0.18.1 mermaid: 11.16.0 monaco-editor: 0.56.0 shiki: 4.4.1 - unocss: 66.7.5(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) + unocss: 66.7.5(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) unplugin-icons: 23.0.1(@vue/compiler-sfc@3.5.40) - unplugin-vue-markdown: 32.0.0(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-inspect: 12.0.2(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-remote-assets: 2.1.0(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-static-copy: 4.1.1(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-plugin-vue-server-ref: 1.0.0(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + unplugin-vue-markdown: 32.0.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-inspect: 12.0.2(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-remote-assets: 2.1.0(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-static-copy: 4.1.1(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite-plugin-vue-server-ref: 1.0.0(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) vue: 3.5.40(typescript@6.0.3) - vue-router: 5.2.0(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + vue-router: 5.2.0(esbuild@0.28.1)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) transitivePeerDependencies: - '@farmfe/core' - '@modelcontextprotocol/client' @@ -13477,6 +12798,10 @@ snapshots: dependencies: undici-types: 8.3.0 + '@types/node@26.6.6': + dependencies: + undici-types: 8.9.0 + '@types/picomatch@4.0.3': {} '@types/prismjs@1.26.6': {} @@ -13674,28 +12999,7 @@ snapshots: lightningcss: 1.33.0 oxc-parser: 0.131.0 rolldown: 1.2.2 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - transitivePeerDependencies: - - '@farmfe/core' - - '@oxc-project/types' - - '@rspack/core' - - bun-types-no-globals - - rollup - - unloader - - '@unhead/bundler@3.3.1(@oxc-project/types@0.142.0)(@vitejs/devtools-kit@0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.131.0)(rolldown@1.2.2)(rollup@4.62.4)(unhead@3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': - dependencies: - magic-string: 1.1.0 - oxc-walker: 1.1.1(@oxc-project/types@0.142.0)(oxc-parser@0.131.0)(rolldown@1.2.2) - unhead: 3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - optionalDependencies: - '@vitejs/devtools-kit': 0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - esbuild: 0.28.1 - lightningcss: 1.33.0 - oxc-parser: 0.131.0 - rolldown: 1.2.2 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - '@farmfe/core' - '@oxc-project/types' @@ -13704,16 +13008,19 @@ snapshots: - rollup - unloader - '@unhead/bundler@3.3.1(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(unhead@3.3.1(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': + '@unhead/bundler@3.3.1(@oxc-project/types@0.142.0)(@vitejs/devtools-kit@0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.131.0)(rolldown@1.2.2)(rollup@4.62.4)(unhead@3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: magic-string: 1.1.0 oxc-walker: 1.1.1(@oxc-project/types@0.142.0)(oxc-parser@0.131.0)(rolldown@1.2.2) - unhead: 3.3.1(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - unplugin: 3.3.0(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unhead: 3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) optionalDependencies: - esbuild: 0.17.19 + '@vitejs/devtools-kit': 0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + esbuild: 0.28.1 + lightningcss: 1.33.0 + oxc-parser: 0.131.0 rolldown: 1.2.2 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - '@farmfe/core' - '@oxc-project/types' @@ -13722,17 +13029,19 @@ snapshots: - rollup - unloader - '@unhead/bundler@3.3.1(esbuild@0.28.1)(lightningcss@1.33.0)(rolldown@1.2.2)(rollup@4.62.4)(unhead@3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': + '@unhead/bundler@3.3.1(@oxc-project/types@0.142.0)(@vitejs/devtools-kit@0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.131.0)(rolldown@1.2.2)(rollup@4.62.4)(unhead@3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: magic-string: 1.1.0 oxc-walker: 1.1.1(@oxc-project/types@0.142.0)(oxc-parser@0.131.0)(rolldown@1.2.2) - unhead: 3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unhead: 3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) optionalDependencies: + '@vitejs/devtools-kit': 0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) esbuild: 0.28.1 lightningcss: 1.33.0 + oxc-parser: 0.131.0 rolldown: 1.2.2 - vite: 8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - '@farmfe/core' - '@oxc-project/types' @@ -13741,15 +13050,16 @@ snapshots: - rollup - unloader - '@unhead/bundler@3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(unhead@3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4))': + '@unhead/bundler@3.3.1(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(unhead@3.3.1(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: magic-string: 1.1.0 oxc-walker: 1.1.1(@oxc-project/types@0.142.0)(oxc-parser@0.131.0)(rolldown@1.2.2) - unhead: 3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unhead: 3.3.1(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unplugin: 3.3.0(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) optionalDependencies: - esbuild: 0.28.1 + esbuild: 0.17.19 rolldown: 1.2.2 + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - '@farmfe/core' - '@oxc-project/types' @@ -13881,38 +13191,15 @@ snapshots: - rollup - unloader - '@unhead/vue@3.3.1(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': - dependencies: - '@unhead/bundler': 3.3.1(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(unhead@3.3.1(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - hookable: 6.1.1 - unhead: 3.3.1(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - unplugin: 3.3.0(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vue: 3.5.40(typescript@6.0.3) - optionalDependencies: - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - transitivePeerDependencies: - - '@farmfe/core' - - '@oxc-project/types' - - '@rspack/core' - - '@unhead/cli' - - '@vitejs/devtools-kit' - - bun-types-no-globals - - esbuild - - lightningcss - - oxc-parser - - rolldown - - rollup - - unloader - - '@unhead/vue@3.3.1(esbuild@0.28.1)(lightningcss@1.33.0)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': + '@unhead/vue@3.3.1(@oxc-project/types@0.142.0)(@vitejs/devtools-kit@0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.131.0)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': dependencies: - '@unhead/bundler': 3.3.1(esbuild@0.28.1)(lightningcss@1.33.0)(rolldown@1.2.2)(rollup@4.62.4)(unhead@3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@unhead/bundler': 3.3.1(@oxc-project/types@0.142.0)(@vitejs/devtools-kit@0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.131.0)(rolldown@1.2.2)(rollup@4.62.4)(unhead@3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) hookable: 6.1.1 - unhead: 3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unhead: 3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) vue: 3.5.40(typescript@6.0.3) optionalDependencies: - vite: 8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - '@farmfe/core' - '@oxc-project/types' @@ -13927,36 +13214,15 @@ snapshots: - rollup - unloader - '@unhead/vue@3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': + '@unhead/vue@3.3.1(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': dependencies: - '@unhead/bundler': 3.3.1(@oxc-project/types@0.142.0)(@vitejs/devtools-kit@0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.131.0)(rolldown@1.2.2)(rollup@4.62.4)(unhead@3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@unhead/bundler': 3.3.1(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(unhead@3.3.1(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) hookable: 6.1.1 - unhead: 3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unhead: 3.3.1(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unplugin: 3.3.0(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) vue: 3.5.40(typescript@6.0.3) optionalDependencies: - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - transitivePeerDependencies: - - '@farmfe/core' - - '@oxc-project/types' - - '@rspack/core' - - '@unhead/cli' - - '@vitejs/devtools-kit' - - bun-types-no-globals - - esbuild - - lightningcss - - oxc-parser - - rolldown - - rollup - - unloader - - '@unhead/vue@3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vue@3.5.40(typescript@6.0.3))': - dependencies: - '@unhead/bundler': 3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(unhead@3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)) - hookable: 6.1.1 - unhead: 3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vue: 3.5.40(typescript@6.0.3) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - '@farmfe/core' - '@oxc-project/types' @@ -14007,13 +13273,13 @@ snapshots: - supports-color - vue - '@unocss/astro@65.5.0(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3))': + '@unocss/astro@65.5.0(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3))': dependencies: '@unocss/core': 65.5.0 '@unocss/reset': 65.5.0 - '@unocss/vite': 65.5.0(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) + '@unocss/vite': 65.5.0(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) optionalDependencies: - vite: 6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - vue @@ -14442,7 +13708,7 @@ snapshots: - supports-color - vue - '@unocss/vite@65.5.0(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3))': + '@unocss/vite@65.5.0(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3))': dependencies: '@ampproject/remapping': 2.3.0 '@unocss/config': 65.5.0 @@ -14452,23 +13718,10 @@ snapshots: magic-string: 0.30.21 tinyglobby: 0.2.17 unplugin-utils: 0.2.5 - vite: 6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - vue - '@unocss/vite@66.7.5(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))': - dependencies: - '@jridgewell/remapping': 2.3.5 - '@unocss/config': 66.7.5 - '@unocss/core': 66.7.5 - '@unocss/inspector': 66.7.5 - chokidar: 5.0.0 - magic-string: 0.30.21 - pathe: 2.0.3 - tinyglobby: 0.2.17 - unplugin-utils: 0.3.2 - vite: 7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) - '@unocss/vite@66.7.5(vite@8.2.0(@types/node@18.19.130)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: '@jridgewell/remapping': 2.3.5 @@ -14482,7 +13735,7 @@ snapshots: unplugin-utils: 0.3.2 vite: 8.2.0(@types/node@18.19.130)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - '@unocss/vite@66.7.5(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': + '@unocss/vite@66.7.5(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: '@jridgewell/remapping': 2.3.5 '@unocss/config': 66.7.5 @@ -14493,9 +13746,9 @@ snapshots: pathe: 2.0.3 tinyglobby: 0.2.17 unplugin-utils: 0.3.2 - vite: 8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - '@unocss/vite@66.7.5(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': + '@unocss/vite@66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: '@jridgewell/remapping': 2.3.5 '@unocss/config': 66.7.5 @@ -14506,9 +13759,9 @@ snapshots: pathe: 2.0.3 tinyglobby: 0.2.17 unplugin-utils: 0.3.2 - vite: 8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - '@unocss/vite@66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': + '@unocss/vite@66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: '@jridgewell/remapping': 2.3.5 '@unocss/config': 66.7.5 @@ -14519,9 +13772,9 @@ snapshots: pathe: 2.0.3 tinyglobby: 0.2.17 unplugin-utils: 0.3.2 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - '@unocss/vite@66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': + '@unocss/vite@66.7.5(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: '@jridgewell/remapping': 2.3.5 '@unocss/config': 66.7.5 @@ -14532,9 +13785,9 @@ snapshots: pathe: 2.0.3 tinyglobby: 0.2.17 unplugin-utils: 0.3.2 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - '@unocss/vite@66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': + '@unocss/vite@66.7.5(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: '@jridgewell/remapping': 2.3.5 '@unocss/config': 66.7.5 @@ -14545,7 +13798,7 @@ snapshots: pathe: 2.0.3 tinyglobby: 0.2.17 unplugin-utils: 0.3.2 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) '@upsetjs/venn.js@2.0.0': optionalDependencies: @@ -14554,8 +13807,8 @@ snapshots: '@vitejs/devtools-kit@0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@18.19.130)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: - '@devframes/hub': 0.8.0(devframe@0.8.0(cac@7.0.0)(srvx@0.12.5)) - '@devframes/json-render': 0.8.0(@devframes/hub@0.8.0(devframe@0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)))(devframe@0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)) + '@devframes/hub': 0.8.0(devframe@0.8.0) + '@devframes/json-render': 0.8.0(@devframes/hub@0.8.0(devframe@0.8.0))(devframe@0.8.0) devframe: 0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5) local-pkg: 1.2.1 mlly: 1.8.2 @@ -14568,26 +13821,10 @@ snapshots: - cac - srvx - '@vitejs/devtools-kit@0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': - dependencies: - '@devframes/hub': 0.8.0(devframe@0.8.0(cac@7.0.0)(srvx@0.12.5)) - '@devframes/json-render': 0.8.0(@devframes/hub@0.8.0(devframe@0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)))(devframe@0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)) - devframe: 0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5) - local-pkg: 1.2.1 - mlly: 1.8.2 - nostics: 1.2.0 - nypm: 0.6.9 - vite: 8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - transitivePeerDependencies: - - '@modelcontextprotocol/client' - - '@modelcontextprotocol/server' - - cac - - srvx - '@vitejs/devtools-kit@0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: - '@devframes/hub': 0.8.0(devframe@0.8.0(cac@7.0.0)(srvx@0.12.5)) - '@devframes/json-render': 0.8.0(@devframes/hub@0.8.0(devframe@0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)))(devframe@0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)) + '@devframes/hub': 0.8.0(devframe@0.8.0) + '@devframes/json-render': 0.8.0(@devframes/hub@0.8.0(devframe@0.8.0))(devframe@0.8.0) devframe: 0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5) local-pkg: 1.2.1 mlly: 1.8.2 @@ -14600,26 +13837,10 @@ snapshots: - cac - srvx - '@vitejs/devtools-kit@0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': - dependencies: - '@devframes/hub': 0.8.0(devframe@0.8.0(cac@7.0.0)(srvx@0.12.5)) - '@devframes/json-render': 0.8.0(@devframes/hub@0.8.0(devframe@0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)))(devframe@0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)) - devframe: 0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5) - local-pkg: 1.2.1 - mlly: 1.8.2 - nostics: 1.2.0 - nypm: 0.6.9 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - transitivePeerDependencies: - - '@modelcontextprotocol/client' - - '@modelcontextprotocol/server' - - cac - - srvx - '@vitejs/devtools-kit@0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: - '@devframes/hub': 0.8.0(devframe@0.8.0(cac@7.0.0)(srvx@0.12.5)) - '@devframes/json-render': 0.8.0(@devframes/hub@0.8.0(devframe@0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)))(devframe@0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)) + '@devframes/hub': 0.8.0(devframe@0.8.0) + '@devframes/json-render': 0.8.0(@devframes/hub@0.8.0(devframe@0.8.0))(devframe@0.8.0) devframe: 0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5) local-pkg: 1.2.1 mlly: 1.8.2 @@ -14634,8 +13855,8 @@ snapshots: '@vitejs/devtools-kit@0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: - '@devframes/hub': 0.8.0(devframe@0.8.0(cac@7.0.0)(srvx@0.12.5)) - '@devframes/json-render': 0.8.0(@devframes/hub@0.8.0(devframe@0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)))(devframe@0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)) + '@devframes/hub': 0.8.0(devframe@0.8.0) + '@devframes/json-render': 0.8.0(@devframes/hub@0.8.0(devframe@0.8.0))(devframe@0.8.0) devframe: 0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5) local-pkg: 1.2.1 mlly: 1.8.2 @@ -14648,48 +13869,48 @@ snapshots: - cac - srvx - '@vitejs/devtools-kit@0.4.12(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': + '@vitejs/devtools-kit@0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: - '@devframes/hub': 0.8.0(devframe@0.8.0(cac@7.0.0)(srvx@0.12.5)) - '@devframes/json-render': 0.8.0(@devframes/hub@0.8.0(devframe@0.8.0(cac@7.0.0)(srvx@0.12.5)))(devframe@0.8.0(cac@7.0.0)(srvx@0.12.5)) + '@devframes/hub': 0.8.0(devframe@0.8.0) + '@devframes/json-render': 0.8.0(@devframes/hub@0.8.0(devframe@0.8.0))(devframe@0.8.0) devframe: 0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5) local-pkg: 1.2.1 mlly: 1.8.2 nostics: 1.2.0 nypm: 0.6.9 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - '@modelcontextprotocol/client' - '@modelcontextprotocol/server' - cac - srvx - '@vitejs/devtools-kit@0.4.12(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': + '@vitejs/devtools-kit@0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: - '@devframes/hub': 0.8.0(devframe@0.8.0(cac@7.0.0)(srvx@0.12.5)) - '@devframes/json-render': 0.8.0(@devframes/hub@0.8.0(devframe@0.8.0(cac@7.0.0)(srvx@0.12.5)))(devframe@0.8.0(cac@7.0.0)(srvx@0.12.5)) + '@devframes/hub': 0.8.0(devframe@0.8.0) + '@devframes/json-render': 0.8.0(@devframes/hub@0.8.0(devframe@0.8.0))(devframe@0.8.0) devframe: 0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5) local-pkg: 1.2.1 mlly: 1.8.2 nostics: 1.2.0 nypm: 0.6.9 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - '@modelcontextprotocol/client' - '@modelcontextprotocol/server' - cac - srvx - '@vitejs/devtools-kit@0.4.12(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))': + '@vitejs/devtools-kit@0.4.12(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: '@devframes/hub': 0.8.0(devframe@0.8.0) '@devframes/json-render': 0.8.0(@devframes/hub@0.8.0(devframe@0.8.0))(devframe@0.8.0) - devframe: 0.8.0 + devframe: 0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5) local-pkg: 1.2.1 mlly: 1.8.2 nostics: 1.2.0 nypm: 0.6.9 - vite: 7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - '@modelcontextprotocol/client' - '@modelcontextprotocol/server' @@ -14707,13 +13928,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue-jsx@4.2.0(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3))': + '@vitejs/plugin-vue-jsx@4.2.0(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3))': dependencies: '@babel/core': 7.29.7 '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) '@rolldown/pluginutils': 1.0.1 '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.29.7) - vite: 6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) vue: 3.5.40(typescript@5.9.3) transitivePeerDependencies: - supports-color @@ -14740,29 +13961,17 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue-jsx@4.2.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3))': + '@vitejs/plugin-vue-jsx@4.2.0(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3))': dependencies: '@babel/core': 7.29.7 '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) '@rolldown/pluginutils': 1.0.1 '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.29.7) - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) vue: 3.5.40(typescript@5.9.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue-jsx@5.1.6(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': - dependencies: - '@babel/core': 7.29.7 - '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) - '@rolldown/pluginutils': 1.0.1 - '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.7) - vite: 7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) - vue: 3.5.40(typescript@6.0.3) - transitivePeerDependencies: - - supports-color - '@vitejs/plugin-vue-jsx@5.1.6(vite@8.2.0(@types/node@18.19.130)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.6.3))': dependencies: '@babel/core': 7.29.7 @@ -14775,62 +13984,62 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue-jsx@5.1.6(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': + '@vitejs/plugin-vue-jsx@5.1.6(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': dependencies: '@babel/core': 7.29.7 '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) '@rolldown/pluginutils': 1.0.1 '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.7) - vite: 8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) vue: 3.5.40(typescript@6.0.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue-jsx@5.1.6(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': + '@vitejs/plugin-vue-jsx@5.1.6(vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': dependencies: '@babel/core': 7.29.7 '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) '@rolldown/pluginutils': 1.0.1 '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.7) - vite: 8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) vue: 3.5.40(typescript@6.0.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue-jsx@5.1.6(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': + '@vitejs/plugin-vue-jsx@5.1.6(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': dependencies: '@babel/core': 7.29.7 '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) '@rolldown/pluginutils': 1.0.1 '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.7) - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) vue: 3.5.40(typescript@6.0.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue-jsx@5.1.6(vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': + '@vitejs/plugin-vue-jsx@5.1.6(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': dependencies: '@babel/core': 7.29.7 '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) '@rolldown/pluginutils': 1.0.1 '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.7) - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) vue: 3.5.40(typescript@6.0.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue-jsx@5.1.6(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': + '@vitejs/plugin-vue-jsx@5.1.6(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': dependencies: '@babel/core': 7.29.7 '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) '@rolldown/pluginutils': 1.0.1 '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.7) - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) vue: 3.5.40(typescript@6.0.3) transitivePeerDependencies: - supports-color @@ -14840,9 +14049,9 @@ snapshots: vite: 6.4.3(@types/node@18.19.130)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) vue: 3.5.40(typescript@5.6.3) - '@vitejs/plugin-vue@5.2.4(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3))': + '@vitejs/plugin-vue@5.2.4(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3))': dependencies: - vite: 6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) vue: 3.5.40(typescript@5.9.3) '@vitejs/plugin-vue@5.2.4(vite@8.2.0(@types/node@18.19.130)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.6.3))': @@ -14855,41 +14064,23 @@ snapshots: vite: 8.2.0(@types/node@18.19.130)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) vue: 3.5.40(typescript@6.0.3) - '@vitejs/plugin-vue@5.2.4(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3))': + '@vitejs/plugin-vue@5.2.4(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3))': dependencies: - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) vue: 3.5.40(typescript@5.9.3) - '@vitejs/plugin-vue@6.0.8(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': - dependencies: - '@rolldown/pluginutils': 1.0.1 - vite: 7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) - vue: 3.5.40(typescript@6.0.3) - '@vitejs/plugin-vue@6.0.8(vite@8.2.0(@types/node@18.19.130)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.6.3))': dependencies: '@rolldown/pluginutils': 1.0.1 vite: 8.2.0(@types/node@18.19.130)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) vue: 3.5.40(typescript@5.6.3) - '@vitejs/plugin-vue@6.0.8(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': - dependencies: - '@rolldown/pluginutils': 1.0.1 - vite: 8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - vue: 3.5.40(typescript@6.0.3) - '@vitejs/plugin-vue@6.0.8(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': dependencies: '@rolldown/pluginutils': 1.0.1 vite: 8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) vue: 3.5.40(typescript@6.0.3) - '@vitejs/plugin-vue@6.0.8(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': - dependencies: - '@rolldown/pluginutils': 1.0.1 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - vue: 3.5.40(typescript@6.0.3) - '@vitejs/plugin-vue@6.0.8(vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': dependencies: '@rolldown/pluginutils': 1.0.1 @@ -14902,13 +14093,17 @@ snapshots: vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) vue: 3.5.40(typescript@6.0.3) - '@vitest/expect@3.2.7': + '@vitejs/plugin-vue@6.0.8(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': dependencies: - '@types/chai': 5.2.3 - '@vitest/spy': 3.2.7 - '@vitest/utils': 3.2.7 - chai: 5.3.3 - tinyrainbow: 2.0.0 + '@rolldown/pluginutils': 1.0.1 + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vue: 3.5.40(typescript@6.0.3) + + '@vitejs/plugin-vue@6.0.8(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': + dependencies: + '@rolldown/pluginutils': 1.0.1 + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vue: 3.5.40(typescript@6.0.3) '@vitest/expect@4.1.10': dependencies: @@ -14919,13 +14114,14 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.1 - '@vitest/mocker@3.2.7(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))': + '@vitest/expect@4.1.12': dependencies: - '@vitest/spy': 3.2.7 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - vite: 7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.1.12 + '@vitest/utils': 4.1.12 + chai: 6.2.2 + tinyrainbow: 3.1.1 '@vitest/mocker@4.1.10(vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: @@ -14943,29 +14139,38 @@ snapshots: optionalDependencies: vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - '@vitest/pretty-format@3.2.7': + '@vitest/mocker@4.1.10(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': dependencies: - tinyrainbow: 2.0.0 + '@vitest/spy': 4.1.10 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + + '@vitest/mocker@4.1.12(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': + dependencies: + '@vitest/spy': 4.1.12 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) '@vitest/pretty-format@4.1.10': dependencies: tinyrainbow: 3.1.1 - '@vitest/runner@3.2.7': + '@vitest/pretty-format@4.1.12': dependencies: - '@vitest/utils': 3.2.7 - pathe: 2.0.3 - strip-literal: 3.1.0 + tinyrainbow: 3.1.1 '@vitest/runner@4.1.10': dependencies: '@vitest/utils': 4.1.10 pathe: 2.0.3 - '@vitest/snapshot@3.2.7': + '@vitest/runner@4.1.12': dependencies: - '@vitest/pretty-format': 3.2.7 - magic-string: 0.30.21 + '@vitest/utils': 4.1.12 pathe: 2.0.3 '@vitest/snapshot@4.1.10': @@ -14975,17 +14180,16 @@ snapshots: magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@3.2.7': + '@vitest/snapshot@4.1.12': dependencies: - tinyspy: 4.0.4 + '@vitest/pretty-format': 4.1.12 + '@vitest/utils': 4.1.12 + magic-string: 0.30.21 + pathe: 2.0.3 '@vitest/spy@4.1.10': {} - '@vitest/utils@3.2.7': - dependencies: - '@vitest/pretty-format': 3.2.7 - loupe: 3.2.1 - tinyrainbow: 2.0.0 + '@vitest/spy@4.1.12': {} '@vitest/utils@4.1.10': dependencies: @@ -14993,6 +14197,12 @@ snapshots: convert-source-map: 2.0.0 tinyrainbow: 3.1.1 + '@vitest/utils@4.1.12': + dependencies: + '@vitest/pretty-format': 4.1.12 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.1 + '@volar/language-core@2.4.28': dependencies: '@volar/source-map': 2.4.28 @@ -15698,14 +14908,6 @@ snapshots: ccount@2.0.1: {} - chai@5.3.3: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.3 - deep-eql: 5.0.2 - loupe: 3.2.1 - pathval: 2.0.1 - chai@6.2.2: {} character-entities-html4@2.1.0: {} @@ -15714,8 +14916,6 @@ snapshots: character-entities@2.0.2: {} - check-error@2.1.3: {} - chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -16079,8 +15279,6 @@ snapshots: dependencies: mimic-response: 3.1.0 - deep-eql@5.0.2: {} - deep-is@0.1.4: {} deep-object-diff@1.1.9: {} @@ -16112,20 +15310,6 @@ snapshots: detect-libc@2.1.2: {} - devframe@0.8.0: - dependencies: - '@standard-schema/spec': 1.1.0 - birpc: 4.0.0 - crossws: 0.4.10(srvx@0.12.5) - destr: 2.0.5 - h3: 2.0.1-rc.26(crossws@0.4.10) - mrmime: 2.0.1 - nostics: 1.2.0 - pathe: 2.0.3 - ufo: 1.6.4 - transitivePeerDependencies: - - srvx - devframe@0.8.0(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5): dependencies: '@standard-schema/spec': 1.1.0 @@ -16276,8 +15460,6 @@ snapshots: es-errors@1.3.0: {} - es-module-lexer@1.7.0: {} - es-module-lexer@2.3.1: {} es-object-atoms@1.1.2: @@ -17099,8 +16281,6 @@ snapshots: js-tokens@4.0.0: {} - js-tokens@9.0.1: {} - js-yaml@3.15.1: dependencies: argparse: 1.0.10 @@ -17266,8 +16446,6 @@ snapshots: longest-streak@3.1.0: {} - loupe@3.2.1: {} - lowercase-keys@3.0.0: {} lru-cache@11.5.2: {} @@ -17943,8 +17121,6 @@ snapshots: pathe@2.0.3: {} - pathval@2.0.1: {} - pdf-lib@1.17.1: dependencies: '@pdf-lib/standard-fonts': 1.0.0 @@ -18614,10 +17790,10 @@ snapshots: - vite - webpack - slidev-addon-gsap@0.0.4(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3): + slidev-addon-gsap@0.0.4(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: - '@slidev/client': 52.19.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5) - '@slidev/types': 52.19.0(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3) + '@slidev/client': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@oxc-project/types@0.142.0)(@vitejs/devtools-kit@0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(lightningcss@1.33.0)(markdown-it-async@2.2.0)(oxc-parser@0.131.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@slidev/types': 52.19.0(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(@vue/compiler-sfc@3.5.40)(cac@7.0.0)(esbuild@0.28.1)(markdown-it-async@2.2.0)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(srvx@0.12.5)(typescript@6.0.3)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) gsap: 3.15.0 two.js: 0.8.23 transitivePeerDependencies: @@ -18732,8 +17908,6 @@ snapshots: statuses@2.0.2: {} - std-env@3.10.0: {} - std-env@4.2.0: {} stoppable@1.1.0: {} @@ -18782,10 +17956,6 @@ snapshots: strip-json-comments@5.0.3: {} - strip-literal@3.1.0: - dependencies: - js-tokens: 9.0.1 - style-mod@4.1.3: {} style-value-types@5.1.2: @@ -18836,14 +18006,8 @@ snapshots: fdir: 6.5.0(picomatch@4.0.5) picomatch: 4.0.5 - tinypool@1.1.1: {} - - tinyrainbow@2.0.0: {} - tinyrainbow@3.1.1: {} - tinyspy@4.0.4: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -19042,6 +18206,8 @@ snapshots: undici-types@8.3.0: {} + undici-types@8.9.0: {} + undici@5.29.0: dependencies: '@fastify/busboy': 2.1.1 @@ -19061,12 +18227,12 @@ snapshots: '@unhead/shared': 1.11.20 hookable: 5.5.3 - unhead@3.3.1(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + unhead@3.3.1(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: hookable: 6.1.1 - unplugin: 3.3.0(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unplugin: 3.3.0(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) optionalDependencies: - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - '@farmfe/core' - '@rspack/core' @@ -19109,12 +18275,12 @@ snapshots: - unloader - webpack - unhead@3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + unhead@3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: hookable: 6.1.1 - unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) optionalDependencies: - vite: 8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - '@farmfe/core' - '@rspack/core' @@ -19125,12 +18291,12 @@ snapshots: - unloader - webpack - unhead@3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + unhead@3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: hookable: 6.1.1 - unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) optionalDependencies: - vite: 8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - '@farmfe/core' - '@rspack/core' @@ -19141,12 +18307,12 @@ snapshots: - unloader - webpack - unhead@3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + unhead@3.3.1(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: hookable: 6.1.1 - unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) optionalDependencies: - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - '@farmfe/core' - '@rspack/core' @@ -19269,9 +18435,9 @@ snapshots: - supports-color - vue - unocss@65.5.0(postcss@8.5.2)(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)): + unocss@65.5.0(postcss@8.5.2)(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)): dependencies: - '@unocss/astro': 65.5.0(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) + '@unocss/astro': 65.5.0(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) '@unocss/cli': 65.5.0 '@unocss/core': 65.5.0 '@unocss/postcss': 65.5.0(postcss@8.5.2) @@ -19287,36 +18453,14 @@ snapshots: '@unocss/transformer-compile-class': 65.5.0 '@unocss/transformer-directives': 65.5.0 '@unocss/transformer-variant-group': 65.5.0 - '@unocss/vite': 65.5.0(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) + '@unocss/vite': 65.5.0(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)) optionalDependencies: - vite: 6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - postcss - supports-color - vue - unocss@66.7.5(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)): - dependencies: - '@unocss/cli': 66.7.5 - '@unocss/core': 66.7.5 - '@unocss/preset-attributify': 66.7.5 - '@unocss/preset-icons': 66.7.5 - '@unocss/preset-mini': 66.7.5 - '@unocss/preset-tagify': 66.7.5 - '@unocss/preset-typography': 66.7.5 - '@unocss/preset-uno': 66.7.5 - '@unocss/preset-web-fonts': 66.7.5 - '@unocss/preset-wind': 66.7.5 - '@unocss/preset-wind3': 66.7.5 - '@unocss/preset-wind4': 66.7.5 - '@unocss/transformer-attributify-jsx': 66.7.5 - '@unocss/transformer-compile-class': 66.7.5 - '@unocss/transformer-directives': 66.7.5 - '@unocss/transformer-variant-group': 66.7.5 - '@unocss/vite': 66.7.5(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) - transitivePeerDependencies: - - vite - unocss@66.7.5(vite@8.2.0(@types/node@18.19.130)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: '@unocss/cli': 66.7.5 @@ -19339,7 +18483,7 @@ snapshots: transitivePeerDependencies: - vite - unocss@66.7.5(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + unocss@66.7.5(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: '@unocss/cli': 66.7.5 '@unocss/core': 66.7.5 @@ -19357,11 +18501,11 @@ snapshots: '@unocss/transformer-compile-class': 66.7.5 '@unocss/transformer-directives': 66.7.5 '@unocss/transformer-variant-group': 66.7.5 - '@unocss/vite': 66.7.5(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@unocss/vite': 66.7.5(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) transitivePeerDependencies: - vite - unocss@66.7.5(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + unocss@66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: '@unocss/cli': 66.7.5 '@unocss/core': 66.7.5 @@ -19379,11 +18523,11 @@ snapshots: '@unocss/transformer-compile-class': 66.7.5 '@unocss/transformer-directives': 66.7.5 '@unocss/transformer-variant-group': 66.7.5 - '@unocss/vite': 66.7.5(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@unocss/vite': 66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) transitivePeerDependencies: - vite - unocss@66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + unocss@66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: '@unocss/cli': 66.7.5 '@unocss/core': 66.7.5 @@ -19401,11 +18545,11 @@ snapshots: '@unocss/transformer-compile-class': 66.7.5 '@unocss/transformer-directives': 66.7.5 '@unocss/transformer-variant-group': 66.7.5 - '@unocss/vite': 66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@unocss/vite': 66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) transitivePeerDependencies: - vite - unocss@66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + unocss@66.7.5(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: '@unocss/cli': 66.7.5 '@unocss/core': 66.7.5 @@ -19423,11 +18567,11 @@ snapshots: '@unocss/transformer-compile-class': 66.7.5 '@unocss/transformer-directives': 66.7.5 '@unocss/transformer-variant-group': 66.7.5 - '@unocss/vite': 66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@unocss/vite': 66.7.5(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) transitivePeerDependencies: - vite - unocss@66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + unocss@66.7.5(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: '@unocss/cli': 66.7.5 '@unocss/core': 66.7.5 @@ -19445,7 +18589,7 @@ snapshots: '@unocss/transformer-compile-class': 66.7.5 '@unocss/transformer-directives': 66.7.5 '@unocss/transformer-variant-group': 66.7.5 - '@unocss/vite': 66.7.5(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@unocss/vite': 66.7.5(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) transitivePeerDependencies: - vite @@ -19534,7 +18678,7 @@ snapshots: transitivePeerDependencies: - supports-color - unplugin-vue-components@32.1.0(@nuxt/kit@3.21.10)(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): + unplugin-vue-components@32.1.0(@nuxt/kit@3.21.10)(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): dependencies: chokidar: 5.0.0 local-pkg: 1.2.1 @@ -19543,7 +18687,7 @@ snapshots: obug: 2.1.4 picomatch: 4.0.5 tinyglobby: 0.2.17 - unplugin: 3.3.0(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unplugin: 3.3.0(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) unplugin-utils: 0.3.2 vue: 3.5.40(typescript@6.0.3) optionalDependencies: @@ -19584,7 +18728,7 @@ snapshots: - vite - webpack - unplugin-vue-components@32.1.0(@nuxt/kit@3.21.10)(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): + unplugin-vue-components@32.1.0(@nuxt/kit@3.21.10)(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): dependencies: chokidar: 5.0.0 local-pkg: 1.2.1 @@ -19593,7 +18737,7 @@ snapshots: obug: 2.1.4 picomatch: 4.0.5 tinyglobby: 0.2.17 - unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) unplugin-utils: 0.3.2 vue: 3.5.40(typescript@6.0.3) optionalDependencies: @@ -19609,7 +18753,7 @@ snapshots: - vite - webpack - unplugin-vue-components@32.1.0(@nuxt/kit@3.21.10)(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): + unplugin-vue-components@32.1.0(@nuxt/kit@3.21.10)(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): dependencies: chokidar: 5.0.0 local-pkg: 1.2.1 @@ -19618,7 +18762,7 @@ snapshots: obug: 2.1.4 picomatch: 4.0.5 tinyglobby: 0.2.17 - unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) unplugin-utils: 0.3.2 vue: 3.5.40(typescript@6.0.3) optionalDependencies: @@ -19634,7 +18778,7 @@ snapshots: - vite - webpack - unplugin-vue-components@32.1.0(@nuxt/kit@3.21.10)(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): + unplugin-vue-components@32.1.0(@nuxt/kit@3.21.10)(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): dependencies: chokidar: 5.0.0 local-pkg: 1.2.1 @@ -19643,7 +18787,7 @@ snapshots: obug: 2.1.4 picomatch: 4.0.5 tinyglobby: 0.2.17 - unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) unplugin-utils: 0.3.2 vue: 3.5.40(typescript@6.0.3) optionalDependencies: @@ -19701,7 +18845,7 @@ snapshots: transitivePeerDependencies: - rollup - unplugin-vue-markdown@28.3.1(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)): + unplugin-vue-markdown@28.3.1(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: '@mdit-vue/plugin-component': 2.1.4 '@mdit-vue/plugin-frontmatter': 2.1.4 @@ -19711,9 +18855,9 @@ snapshots: markdown-it-async: 2.2.0 unplugin: 2.3.11 unplugin-utils: 0.2.5 - vite: 6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) - unplugin-vue-markdown@28.3.1(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + unplugin-vue-markdown@28.3.1(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: '@mdit-vue/plugin-component': 2.1.4 '@mdit-vue/plugin-frontmatter': 2.1.4 @@ -19723,17 +18867,17 @@ snapshots: markdown-it-async: 2.2.0 unplugin: 2.3.11 unplugin-utils: 0.2.5 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - unplugin-vue-markdown@32.0.0(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + unplugin-vue-markdown@32.0.0(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: '@mdit-vue/plugin-component': 3.0.2 '@mdit-vue/plugin-frontmatter': 3.0.2 '@mdit-vue/types': 3.0.2 markdown-exit: 1.0.0-beta.9 - unplugin: 3.3.0(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unplugin: 3.3.0(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) unplugin-utils: 0.3.2 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - '@farmfe/core' - '@rspack/core' @@ -19782,25 +18926,6 @@ snapshots: - unloader - webpack - unplugin-vue-markdown@32.0.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): - dependencies: - '@mdit-vue/plugin-component': 3.0.2 - '@mdit-vue/plugin-frontmatter': 3.0.2 - '@mdit-vue/types': 3.0.2 - markdown-exit: 1.0.0-beta.9 - unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - unplugin-utils: 0.3.2 - vite: 8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - transitivePeerDependencies: - - '@farmfe/core' - - '@rspack/core' - - bun-types-no-globals - - esbuild - - rolldown - - rollup - - unloader - - webpack - unplugin-vue-markdown@32.0.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: '@mdit-vue/plugin-component': 3.0.2 @@ -19839,15 +18964,15 @@ snapshots: - unloader - webpack - unplugin-vue-markdown@32.0.0(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)): + unplugin-vue-markdown@32.0.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: '@mdit-vue/plugin-component': 3.0.2 '@mdit-vue/plugin-frontmatter': 3.0.2 '@mdit-vue/types': 3.0.2 markdown-exit: 1.0.0-beta.9 - unplugin: 3.3.0(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) unplugin-utils: 0.3.2 - vite: 7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - '@farmfe/core' - '@rspack/core' @@ -19865,7 +18990,7 @@ snapshots: picomatch: 4.0.5 webpack-virtual-modules: 0.6.2 - unplugin@3.3.0(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + unplugin@3.3.0(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: '@jridgewell/remapping': 2.3.5 picomatch: 4.0.5 @@ -19874,7 +18999,7 @@ snapshots: esbuild: 0.17.19 rolldown: 1.2.2 rollup: 4.62.4 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@18.19.130)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: @@ -19898,17 +19023,6 @@ snapshots: rollup: 4.62.4 vite: 8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): - dependencies: - '@jridgewell/remapping': 2.3.5 - picomatch: 4.0.5 - webpack-virtual-modules: 0.6.2 - optionalDependencies: - esbuild: 0.28.1 - rolldown: 1.2.2 - rollup: 4.62.4 - vite: 8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: '@jridgewell/remapping': 2.3.5 @@ -19931,13 +19045,16 @@ snapshots: rollup: 4.62.4 vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - unplugin@3.3.0(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)): + unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: '@jridgewell/remapping': 2.3.5 picomatch: 4.0.5 webpack-virtual-modules: 0.6.2 optionalDependencies: - vite: 7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) + esbuild: 0.28.1 + rolldown: 1.2.2 + rollup: 4.62.4 + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) untun@0.1.3: dependencies: @@ -19988,36 +19105,15 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-dev-rpc@2.0.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + vite-dev-rpc@2.0.0(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: birpc: 4.0.0 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - vite-hot-client: 2.2.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - - vite-hot-client@2.2.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): - dependencies: - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite-hot-client: 2.2.0(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - vite-node@3.2.4(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0): + vite-hot-client@2.2.0(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: - cac: 6.7.14 - debug: 4.4.3 - es-module-lexer: 1.7.0 - pathe: 2.0.3 - vite: 7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) vite-plugin-inspect@0.10.6(@nuxt/kit@3.21.10)(rollup@4.62.4)(vite@6.4.3(@types/node@18.19.130)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: @@ -20073,20 +19169,20 @@ snapshots: - rollup - supports-color - vite-plugin-inspect@10.3.0(@nuxt/kit@3.21.10)(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)): + vite-plugin-inspect@10.3.0(@nuxt/kit@3.21.10)(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: ansis: 3.17.0 debug: 4.4.3 error-stack-parser-es: 1.0.5 open: 10.2.0 sirv: 3.0.2 - vite: 6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) optionalDependencies: '@nuxt/kit': 3.21.10 transitivePeerDependencies: - supports-color - vite-plugin-inspect@11.4.1(@nuxt/kit@3.21.10)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + vite-plugin-inspect@11.4.1(@nuxt/kit@3.21.10)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: ansis: 4.3.1 error-stack-parser-es: 1.0.5 @@ -20096,8 +19192,8 @@ snapshots: perfect-debounce: 2.1.0 sirv: 3.0.2 unplugin-utils: 0.3.2 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - vite-dev-rpc: 2.0.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite-dev-rpc: 2.0.0(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) optionalDependencies: '@nuxt/kit': 3.21.10 @@ -20121,26 +19217,6 @@ snapshots: - cac - srvx - vite-plugin-inspect@12.0.2(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): - dependencies: - '@vitejs/devtools-kit': 0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - ansis: 4.3.1 - error-stack-parser-es: 2.0.1 - obug: 2.1.4 - ohash: 2.0.11 - open: 11.0.0 - perfect-debounce: 2.1.0 - sirv: 3.0.2 - unplugin-utils: 0.3.2 - vite: 8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - optionalDependencies: - '@nuxt/kit': 3.21.10 - transitivePeerDependencies: - - '@modelcontextprotocol/client' - - '@modelcontextprotocol/server' - - cac - - srvx - vite-plugin-inspect@12.0.2(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: '@vitejs/devtools-kit': 0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) @@ -20161,26 +19237,6 @@ snapshots: - cac - srvx - vite-plugin-inspect@12.0.2(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): - dependencies: - '@vitejs/devtools-kit': 0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) - ansis: 4.3.1 - error-stack-parser-es: 2.0.1 - obug: 2.1.4 - ohash: 2.0.11 - open: 11.0.0 - perfect-debounce: 2.1.0 - sirv: 3.0.2 - unplugin-utils: 0.3.2 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - optionalDependencies: - '@nuxt/kit': 3.21.10 - transitivePeerDependencies: - - '@modelcontextprotocol/client' - - '@modelcontextprotocol/server' - - cac - - srvx - vite-plugin-inspect@12.0.2(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: '@vitejs/devtools-kit': 0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) @@ -20221,9 +19277,9 @@ snapshots: - cac - srvx - vite-plugin-inspect@12.0.2(@nuxt/kit@3.21.10)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + vite-plugin-inspect@12.0.2(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: - '@vitejs/devtools-kit': 0.4.12(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@vitejs/devtools-kit': 0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) ansis: 4.3.1 error-stack-parser-es: 2.0.1 obug: 2.1.4 @@ -20232,7 +19288,7 @@ snapshots: perfect-debounce: 2.1.0 sirv: 3.0.2 unplugin-utils: 0.3.2 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) optionalDependencies: '@nuxt/kit': 3.21.10 transitivePeerDependencies: @@ -20241,9 +19297,9 @@ snapshots: - cac - srvx - vite-plugin-inspect@12.0.2(@nuxt/kit@3.21.10)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + vite-plugin-inspect@12.0.2(@modelcontextprotocol/server@2.0.0)(@nuxt/kit@3.21.10)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: - '@vitejs/devtools-kit': 0.4.12(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@vitejs/devtools-kit': 0.4.12(@modelcontextprotocol/server@2.0.0)(cac@7.0.0)(srvx@0.12.5)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) ansis: 4.3.1 error-stack-parser-es: 2.0.1 obug: 2.1.4 @@ -20252,7 +19308,7 @@ snapshots: perfect-debounce: 2.1.0 sirv: 3.0.2 unplugin-utils: 0.3.2 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) optionalDependencies: '@nuxt/kit': 3.21.10 transitivePeerDependencies: @@ -20261,9 +19317,9 @@ snapshots: - cac - srvx - vite-plugin-inspect@12.0.2(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)): + vite-plugin-inspect@12.0.2(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: - '@vitejs/devtools-kit': 0.4.12(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) + '@vitejs/devtools-kit': 0.4.12(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) ansis: 4.3.1 error-stack-parser-es: 2.0.1 obug: 2.1.4 @@ -20272,7 +19328,7 @@ snapshots: perfect-debounce: 2.1.0 sirv: 3.0.2 unplugin-utils: 0.3.2 - vite: 7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - '@modelcontextprotocol/client' - '@modelcontextprotocol/server' @@ -20291,7 +19347,7 @@ snapshots: transitivePeerDependencies: - supports-color - vite-plugin-remote-assets@0.6.0(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)): + vite-plugin-remote-assets@0.6.0(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: '@antfu/utils': 0.7.10 axios: 1.19.0(debug@4.4.3) @@ -20299,7 +19355,7 @@ snapshots: debug: 4.4.3 fs-extra: 11.4.0 magic-string: 0.30.21 - vite: 6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - supports-color @@ -20327,16 +19383,6 @@ snapshots: transitivePeerDependencies: - supports-color - vite-plugin-remote-assets@2.1.0(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)): - dependencies: - debug: 4.4.3 - magic-string: 0.30.21 - node-fetch-native: 1.6.7 - ohash: 2.0.11 - vite: 7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) - transitivePeerDependencies: - - supports-color - vite-plugin-remote-assets@2.1.0(vite@8.2.0(@types/node@18.19.130)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: debug: 4.4.3 @@ -20347,53 +19393,53 @@ snapshots: transitivePeerDependencies: - supports-color - vite-plugin-remote-assets@2.1.0(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + vite-plugin-remote-assets@2.1.0(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: debug: 4.4.3 magic-string: 0.30.21 node-fetch-native: 1.6.7 ohash: 2.0.11 - vite: 8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - supports-color - vite-plugin-remote-assets@2.1.0(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + vite-plugin-remote-assets@2.1.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: debug: 4.4.3 magic-string: 0.30.21 node-fetch-native: 1.6.7 ohash: 2.0.11 - vite: 8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - supports-color - vite-plugin-remote-assets@2.1.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + vite-plugin-remote-assets@2.1.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: debug: 4.4.3 magic-string: 0.30.21 node-fetch-native: 1.6.7 ohash: 2.0.11 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - supports-color - vite-plugin-remote-assets@2.1.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + vite-plugin-remote-assets@2.1.0(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: debug: 4.4.3 magic-string: 0.30.21 node-fetch-native: 1.6.7 ohash: 2.0.11 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - supports-color - vite-plugin-remote-assets@2.1.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + vite-plugin-remote-assets@2.1.0(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: debug: 4.4.3 magic-string: 0.30.21 node-fetch-native: 1.6.7 ohash: 2.0.11 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - supports-color @@ -20406,14 +19452,14 @@ snapshots: picocolors: 1.1.1 vite: 6.4.3(@types/node@18.19.130)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) - vite-plugin-static-copy@2.3.2(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)): + vite-plugin-static-copy@2.3.2(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: chokidar: 3.6.0 fast-glob: 3.3.3 fs-extra: 11.4.0 p-map: 7.0.6 picocolors: 1.1.1 - vite: 6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) vite-plugin-static-copy@2.3.2(vite@8.2.0(@types/node@18.19.130)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: @@ -20433,21 +19479,13 @@ snapshots: picocolors: 1.1.1 vite: 8.2.0(@types/node@18.19.130)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - vite-plugin-static-copy@3.4.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): - dependencies: - chokidar: 3.6.0 - p-map: 7.0.6 - picocolors: 1.1.1 - tinyglobby: 0.2.17 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - - vite-plugin-static-copy@4.1.1(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)): + vite-plugin-static-copy@3.4.0(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: chokidar: 3.6.0 p-map: 7.0.6 picocolors: 1.1.1 tinyglobby: 0.2.17 - vite: 7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) vite-plugin-static-copy@4.1.1(vite@8.2.0(@types/node@18.19.130)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: @@ -20457,45 +19495,45 @@ snapshots: tinyglobby: 0.2.17 vite: 8.2.0(@types/node@18.19.130)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - vite-plugin-static-copy@4.1.1(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + vite-plugin-static-copy@4.1.1(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: chokidar: 3.6.0 p-map: 7.0.6 picocolors: 1.1.1 tinyglobby: 0.2.17 - vite: 8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - vite-plugin-static-copy@4.1.1(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + vite-plugin-static-copy@4.1.1(vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: chokidar: 3.6.0 p-map: 7.0.6 picocolors: 1.1.1 tinyglobby: 0.2.17 - vite: 8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - vite-plugin-static-copy@4.1.1(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + vite-plugin-static-copy@4.1.1(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: chokidar: 3.6.0 p-map: 7.0.6 picocolors: 1.1.1 tinyglobby: 0.2.17 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - vite-plugin-static-copy@4.1.1(vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + vite-plugin-static-copy@4.1.1(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: chokidar: 3.6.0 p-map: 7.0.6 picocolors: 1.1.1 tinyglobby: 0.2.17 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - vite-plugin-static-copy@4.1.1(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + vite-plugin-static-copy@4.1.1(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: chokidar: 3.6.0 p-map: 7.0.6 picocolors: 1.1.1 tinyglobby: 0.2.17 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) vite-plugin-vue-server-ref@0.4.2(vite@6.4.3(@types/node@18.19.130)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.6.3)): dependencies: @@ -20509,14 +19547,14 @@ snapshots: transitivePeerDependencies: - supports-color - vite-plugin-vue-server-ref@0.4.2(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)): + vite-plugin-vue-server-ref@0.4.2(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)): dependencies: '@antfu/utils': 0.7.10 debug: 4.4.3 klona: 2.0.6 mlly: 1.8.2 ufo: 1.6.4 - vite: 6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) vue: 3.5.40(typescript@5.9.3) transitivePeerDependencies: - supports-color @@ -20545,17 +19583,6 @@ snapshots: transitivePeerDependencies: - supports-color - vite-plugin-vue-server-ref@1.0.0(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): - dependencies: - debug: 4.4.3 - klona: 2.0.6 - mlly: 1.8.2 - ufo: 1.6.4 - vite: 7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) - vue: 3.5.40(typescript@6.0.3) - transitivePeerDependencies: - - supports-color - vite-plugin-vue-server-ref@1.0.0(vite@8.2.0(@types/node@18.19.130)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.6.3)): dependencies: debug: 4.4.3 @@ -20567,68 +19594,68 @@ snapshots: transitivePeerDependencies: - supports-color - vite-plugin-vue-server-ref@1.0.0(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): + vite-plugin-vue-server-ref@1.0.0(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): dependencies: debug: 4.4.3 klona: 2.0.6 mlly: 1.8.2 ufo: 1.6.4 - vite: 8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) vue: 3.5.40(typescript@6.0.3) transitivePeerDependencies: - supports-color - vite-plugin-vue-server-ref@1.0.0(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): + vite-plugin-vue-server-ref@1.0.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): dependencies: debug: 4.4.3 klona: 2.0.6 mlly: 1.8.2 ufo: 1.6.4 - vite: 8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) vue: 3.5.40(typescript@6.0.3) transitivePeerDependencies: - supports-color - vite-plugin-vue-server-ref@1.0.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): + vite-plugin-vue-server-ref@1.0.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): dependencies: debug: 4.4.3 klona: 2.0.6 mlly: 1.8.2 ufo: 1.6.4 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) vue: 3.5.40(typescript@6.0.3) transitivePeerDependencies: - supports-color - vite-plugin-vue-server-ref@1.0.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): + vite-plugin-vue-server-ref@1.0.0(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): dependencies: debug: 4.4.3 klona: 2.0.6 mlly: 1.8.2 ufo: 1.6.4 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) vue: 3.5.40(typescript@6.0.3) transitivePeerDependencies: - supports-color - vite-plugin-vue-server-ref@1.0.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)): + vite-plugin-vue-server-ref@1.0.0(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@5.9.3)): dependencies: debug: 4.4.3 klona: 2.0.6 mlly: 1.8.2 ufo: 1.6.4 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) vue: 3.5.40(typescript@5.9.3) transitivePeerDependencies: - supports-color - vite-plugin-vue-server-ref@1.0.0(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): + vite-plugin-vue-server-ref@1.0.0(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): dependencies: debug: 4.4.3 klona: 2.0.6 mlly: 1.8.2 ufo: 1.6.4 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) vue: 3.5.40(typescript@6.0.3) transitivePeerDependencies: - supports-color @@ -20649,7 +19676,7 @@ snapshots: tsx: 4.23.5 yaml: 2.9.0 - vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0): + vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.5) @@ -20658,23 +19685,7 @@ snapshots: rollup: 4.62.4 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 26.1.2 - fsevents: 2.3.3 - jiti: 2.7.0 - lightningcss: 1.33.0 - tsx: 4.23.5 - yaml: 2.9.0 - - vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0): - dependencies: - esbuild: 0.27.7 - fdir: 6.5.0(picomatch@4.0.5) - picomatch: 4.0.5 - postcss: 8.5.25 - rollup: 4.62.4 - tinyglobby: 0.2.17 - optionalDependencies: - '@types/node': 22.20.1 + '@types/node': 26.6.6 fsevents: 2.3.3 jiti: 2.7.0 lightningcss: 1.33.0 @@ -20711,7 +19722,7 @@ snapshots: tsx: 4.23.5 yaml: 2.9.0 - vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0): + vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0): dependencies: lightningcss: 1.33.0 picomatch: 4.0.5 @@ -20719,14 +19730,14 @@ snapshots: rolldown: 1.2.2 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 22.20.1 + '@types/node': 25.9.5 esbuild: 0.28.1 fsevents: 2.3.3 jiti: 2.7.0 tsx: 4.23.5 yaml: 2.9.0 - vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0): + vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0): dependencies: lightningcss: 1.33.0 picomatch: 4.0.5 @@ -20734,14 +19745,14 @@ snapshots: rolldown: 1.2.2 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 25.9.5 - esbuild: 0.28.1 + '@types/node': 26.1.2 + esbuild: 0.27.7 fsevents: 2.3.3 jiti: 2.7.0 tsx: 4.23.5 yaml: 2.9.0 - vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0): + vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0): dependencies: lightningcss: 1.33.0 picomatch: 4.0.5 @@ -20750,13 +19761,13 @@ snapshots: tinyglobby: 0.2.17 optionalDependencies: '@types/node': 26.1.2 - esbuild: 0.17.19 + esbuild: 0.28.1 fsevents: 2.3.3 jiti: 2.7.0 tsx: 4.23.5 yaml: 2.9.0 - vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0): + vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0): dependencies: lightningcss: 1.33.0 picomatch: 4.0.5 @@ -20764,14 +19775,14 @@ snapshots: rolldown: 1.2.2 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 26.1.2 - esbuild: 0.27.7 + '@types/node': 26.6.6 + esbuild: 0.17.19 fsevents: 2.3.3 jiti: 2.7.0 tsx: 4.23.5 yaml: 2.9.0 - vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0): + vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0): dependencies: lightningcss: 1.33.0 picomatch: 4.0.5 @@ -20779,7 +19790,7 @@ snapshots: rolldown: 1.2.2 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 26.1.2 + '@types/node': 26.6.6 esbuild: 0.28.1 fsevents: 2.3.3 jiti: 2.7.0 @@ -20790,22 +19801,14 @@ snapshots: optionalDependencies: vite: 6.4.3(@types/node@18.19.130)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) - vitefu@1.1.3(vite@6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)): - optionalDependencies: - vite: 6.4.3(@types/node@26.1.2)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) - - vitefu@1.1.3(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + vitefu@1.1.3(vite@6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)): optionalDependencies: - vite: 8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 6.4.3(@types/node@26.6.6)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) vitefu@1.1.3(vite@8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): optionalDependencies: vite: 8.2.0(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - vitefu@1.1.3(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): - optionalDependencies: - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - vitefu@1.1.3(vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): optionalDependencies: vite: 8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) @@ -20814,52 +19817,45 @@ snapshots: optionalDependencies: vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) - vitest@3.2.7(@types/debug@4.1.13)(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0): + vitefu@1.1.3(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + optionalDependencies: + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + + vitefu@1.1.3(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + optionalDependencies: + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + + vitest@4.1.10(@types/node@26.1.2)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: - '@types/chai': 5.2.3 - '@vitest/expect': 3.2.7 - '@vitest/mocker': 3.2.7(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) - '@vitest/pretty-format': 3.2.7 - '@vitest/runner': 3.2.7 - '@vitest/snapshot': 3.2.7 - '@vitest/spy': 3.2.7 - '@vitest/utils': 3.2.7 - chai: 5.3.3 - debug: 4.4.3 + '@vitest/expect': 4.1.10 + '@vitest/mocker': 4.1.10(vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.10 + '@vitest/runner': 4.1.10 + '@vitest/snapshot': 4.1.10 + '@vitest/spy': 4.1.10 + '@vitest/utils': 4.1.10 + es-module-lexer: 2.3.1 expect-type: 1.4.0 magic-string: 0.30.21 + obug: 2.1.4 pathe: 2.0.3 picomatch: 4.0.5 - std-env: 3.10.0 + std-env: 4.2.0 tinybench: 2.9.0 - tinyexec: 0.3.2 + tinyexec: 1.3.0 tinyglobby: 0.2.17 - tinypool: 1.1.1 - tinyrainbow: 2.0.0 - vite: 7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) - vite-node: 3.2.4(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) + tinyrainbow: 3.1.1 + vite: 8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/debug': 4.1.13 - '@types/node': 22.20.1 + '@types/node': 26.1.2 transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - vitest@4.1.10(@types/node@26.1.2)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + vitest@4.1.10(@types/node@26.1.2)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.10 - '@vitest/mocker': 4.1.10(vite@8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@vitest/mocker': 4.1.10(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.10 '@vitest/runner': 4.1.10 '@vitest/snapshot': 4.1.10 @@ -20876,17 +19872,17 @@ snapshots: tinyexec: 1.3.0 tinyglobby: 0.2.17 tinyrainbow: 3.1.1 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 26.1.2 transitivePeerDependencies: - msw - vitest@4.1.10(@types/node@26.1.2)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + vitest@4.1.10(@types/node@26.6.6)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.10 - '@vitest/mocker': 4.1.10(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@vitest/mocker': 4.1.10(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.10 '@vitest/runner': 4.1.10 '@vitest/snapshot': 4.1.10 @@ -20903,10 +19899,37 @@ snapshots: tinyexec: 1.3.0 tinyglobby: 0.2.17 tinyrainbow: 3.1.1 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 26.1.2 + '@types/node': 26.6.6 + transitivePeerDependencies: + - msw + + vitest@4.1.12(@types/node@26.6.6)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + dependencies: + '@vitest/expect': 4.1.12 + '@vitest/mocker': 4.1.12(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.12 + '@vitest/runner': 4.1.12 + '@vitest/snapshot': 4.1.12 + '@vitest/spy': 4.1.12 + '@vitest/utils': 4.1.12 + es-module-lexer: 2.3.1 + expect-type: 1.4.0 + magic-string: 0.30.21 + obug: 2.1.4 + pathe: 2.0.3 + picomatch: 4.0.5 + std-env: 4.2.0 + tinybench: 2.9.0 + tinyexec: 1.3.0 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.1 + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 26.6.6 transitivePeerDependencies: - msw @@ -20975,7 +19998,7 @@ snapshots: '@vue/devtools-api': 6.6.4 vue: 3.5.40(typescript@6.0.3) - vue-router@5.2.0(@vue/compiler-sfc@3.5.40)(esbuild@0.17.19)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): + vue-router@5.2.0(@vue/compiler-sfc@3.5.40)(esbuild@0.17.19)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): dependencies: '@babel/generator': 8.0.0 '@vue-macros/common': 3.1.4(vue@3.5.40(typescript@6.0.3)) @@ -20992,14 +20015,14 @@ snapshots: picomatch: 4.0.5 scule: 1.3.0 tinyglobby: 0.2.17 - unplugin: 3.3.0(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unplugin: 3.3.0(esbuild@0.17.19)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) unplugin-utils: 0.3.2 vue: 3.5.40(typescript@6.0.3) yaml: 2.9.0 optionalDependencies: '@vue/compiler-sfc': 3.5.40 pinia: 4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)) - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.17.19)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - '@farmfe/core' - '@rspack/core' @@ -21150,7 +20173,7 @@ snapshots: - unloader - webpack - vue-router@5.2.0(@vue/compiler-sfc@3.5.40)(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): + vue-router@5.2.0(@vue/compiler-sfc@3.5.40)(esbuild@0.28.1)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): dependencies: '@babel/generator': 8.0.0 '@vue-macros/common': 3.1.4(vue@3.5.40(typescript@6.0.3)) @@ -21167,13 +20190,14 @@ snapshots: picomatch: 4.0.5 scule: 1.3.0 tinyglobby: 0.2.17 - unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) unplugin-utils: 0.3.2 vue: 3.5.40(typescript@6.0.3) yaml: 2.9.0 optionalDependencies: '@vue/compiler-sfc': 3.5.40 - vite: 8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + pinia: 4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - '@farmfe/core' - '@rspack/core' @@ -21184,7 +20208,7 @@ snapshots: - unloader - webpack - vue-router@5.2.0(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): + vue-router@5.2.0(esbuild@0.28.1)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): dependencies: '@babel/generator': 8.0.0 '@vue-macros/common': 3.1.4(vue@3.5.40(typescript@6.0.3)) @@ -21201,12 +20225,12 @@ snapshots: picomatch: 4.0.5 scule: 1.3.0 tinyglobby: 0.2.17 - unplugin: 3.3.0(vite@7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0)) + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.2)(rollup@4.62.4)(vite@8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) unplugin-utils: 0.3.2 vue: 3.5.40(typescript@6.0.3) yaml: 2.9.0 optionalDependencies: - vite: 7.3.6(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.6.6)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) transitivePeerDependencies: - '@farmfe/core' - '@rspack/core' diff --git a/scripts/eslint-ui-boundaries.mjs b/scripts/eslint-ui-boundaries.mjs index 0471747f..25d419e7 100644 --- a/scripts/eslint-ui-boundaries.mjs +++ b/scripts/eslint-ui-boundaries.mjs @@ -1,10 +1,10 @@ const rule = { meta: { type: 'problem', - docs: { description: 'Keep native HTML inside @fastppt/components.' }, + docs: { description: 'Use @fastrd/ui-vue primitives in application templates.' }, schema: [], messages: { - native: '业务模板禁止裸 HTML <{{tag}}>;请使用 @fastppt/components。', + native: '业务模板禁止裸 HTML <{{tag}}>;请使用 @fastrd/ui-vue。', escape: '交互元素不能通过 Box/as 绕过组件库,请使用对应控件组件。', }, }, diff --git a/scripts/extract-theme.mjs b/scripts/extract-theme.mjs index 02a6632c..40002731 100644 --- a/scripts/extract-theme.mjs +++ b/scripts/extract-theme.mjs @@ -22,6 +22,7 @@ import { mkdir, readFile, writeFile } from 'node:fs/promises' import { createRequire } from 'node:module' import { createHash } from 'node:crypto' import { basename, join, resolve } from 'node:path' +import { pathToFileURL } from 'node:url' // jszip is a dependency of @fastppt/slidewave. Resolve it from the repo layout // (dev) or the packaged CLI layout (dist/node_modules/@fastppt/slidewave). @@ -32,7 +33,7 @@ async function resolveJszip() { ] for (const candidate of candidates) { try { - return (await import(createRequire(candidate).resolve('jszip'))).default + return (await import(pathToFileURL(createRequire(candidate).resolve('jszip')).href)).default } catch { /* try next */ } diff --git a/scripts/theme-smoke.mjs b/scripts/theme-smoke.mjs index f58b07c4..9b362900 100644 --- a/scripts/theme-smoke.mjs +++ b/scripts/theme-smoke.mjs @@ -10,10 +10,13 @@ const skill = await readFile(join(packageRoot, manifest.skill.sourceDir, 'SKILL. if (packageJson.name !== manifest.packageName || packageJson.version !== manifest.skill.version) throw new Error('Theme package identity/version does not match its manifest') -if (!skill.startsWith('---\n') || !skill.includes(`name: ${manifest.skill.id}`)) +if (!/^---\r?\n/.test(skill) || !skill.includes(`name: ${manifest.skill.id}`)) throw new Error('Theme Skill frontmatter does not match its manifest') -for (const sourceDirectory of ['components', 'layouts']) { +const sourceDirectories = (await readdir(packageRoot)).filter((name) => + ['components', 'layouts'].includes(name), +) +for (const sourceDirectory of sourceDirectories) { const files = (await readdir(join(packageRoot, sourceDirectory))).filter((file) => file.endsWith('.vue'), ) diff --git a/tests/e2e/fixtures/server.ts b/tests/e2e/fixtures/server.ts index 82077b4f..febc0464 100644 --- a/tests/e2e/fixtures/server.ts +++ b/tests/e2e/fixtures/server.ts @@ -1,5 +1,7 @@ import { layoutSystemSfc } from '@fastppt/fastppt-mcp/theme-design' import { cp, readFile, readdir, rm, mkdir, writeFile } from 'node:fs/promises' +import { createHash } from 'node:crypto' +import { createRequire } from 'node:module' import { basename, dirname, resolve } from 'node:path' import { fileURLToPath, pathToFileURL } from 'node:url' import type { NativeMasterLayout } from '@fastppt/slidewave/server' @@ -43,6 +45,7 @@ const here = dirname(fileURLToPath(import.meta.url)) const repositoryRoot = resolve(here, '../../..') export const E2E_WORKSPACE = '/tmp/fastppt-e2e-workspace' const fixtureThemesRoot = '/tmp/fastppt-e2e-themes' +const fixtureResourcesRoot = '/tmp/fastppt-e2e-resources' function delay(milliseconds: number): Promise { return new Promise((resolveDelay) => setTimeout(resolveDelay, milliseconds)) @@ -462,6 +465,10 @@ await writeFile( resolve(E2E_WORKSPACE, 'landing.md'), '---\ntheme: slidev-theme-landing\ntitle: Landing E2E\n---\n\n# Landing E2E\n\n---\n\n# Landing E2E second slide\n', ) +await writeFile( + resolve(E2E_WORKSPACE, 'notes-qa.md'), + '---\ntheme: slidev-theme-academy\nlayout: content\ntitle: Notes E2E\n---\n\n# Notes page 1\n\n---\nlayout: content\n---\n\n# Notes page 2\n\n---\nlayout: content\n---\n\n# Notes page 3\n\n---\nlayout: content\n---\n\n# Notes page 4\n', +) const copyTheme = (source: string, target: string) => cp(source, target, { recursive: true, filter: path => !['.theme-build', 'dist', '.turbo'].includes(basename(path)) }) await copyTheme(resolve(repositoryRoot, 'themes'), fixtureThemesRoot) @@ -489,6 +496,26 @@ await writeFile(resolve(ruleThemeRoot, 'agent/SKILL.md'), (await readFile(resolv await writeFile(resolve(ruleThemeRoot, 'agent/theme-rules.json'), JSON.stringify({ version: 1, rules: [{ id: 'deck.pages', kind: 'max-slides', value: 1, severity: 'error' }] })) await writeFile(resolve(E2E_WORKSPACE, 'rule-exceptions.md'), `---\ntheme: ${ruleThemeId}\nlayout: default\n---\n\n# First review page\n\n---\n\n# Second review page\n`) +// Exercise resource HTTP delivery with a local, reproducible webfont pack. +// Private reference-library binaries are installed separately from the checkout. +await rm(fixtureResourcesRoot, { recursive: true, force: true }) +await cp(resolve(repositoryRoot, 'packages/resources'), fixtureResourcesRoot, { + recursive: true, + filter: path => !['node_modules', 'dist', '.turbo'].includes(basename(path)), +}) +const fontverter = createRequire(import.meta.url)('fontverter') as { + convert(font: Buffer, format: 'woff2'): Promise +} +const webfont = await fontverter.convert(await readFile(resolve(repositoryRoot, 'packages/fonts/assets/fonts/space-mono-regular.ttf')), 'woff2') +const fontName = `${createHash('sha256').update(webfont).digest('hex')}.woff2` +await mkdir(resolve(fixtureResourcesRoot, 'assets'), { recursive: true }) +await writeFile(resolve(fixtureResourcesRoot, 'assets', fontName), webfont) +await writeFile(resolve(fixtureResourcesRoot, 'pages/font-qa.md'), `---\ntitle: Local font QA\n---\n

Local webfont 0123456789

`) +const resourceIndex = JSON.parse(await readFile(resolve(fixtureResourcesRoot, 'index.json'), 'utf8')) as { version: number; entries: unknown[] } +resourceIndex.entries.push({ id: 'font-qa', title: 'Local font QA', kind: 'layout', description: 'Bundled Space Mono webfont', tags: [], style: 'plain', scenarios: 'font loading', source: 'packages/fonts/assets/fonts/space-mono-regular.ttf', sourcePage: 1, file: 'pages/font-qa.md', aspect: 16 / 9, density: 'airy', status: 'reconstructed', warnings: [], license: 'OFL-1.1', stats: { objects: 1, textBlocks: 1 }, searchText: 'local webfont' }) +await writeFile(resolve(fixtureResourcesRoot, 'index.json'), JSON.stringify(resourceIndex)) +process.env.FASTPPT_RESOURCES_ROOT = fixtureResourcesRoot + const app = await createGateway( { host: '127.0.0.1', @@ -523,6 +550,7 @@ async function close(): Promise { } finally { await rm(E2E_WORKSPACE, { recursive: true, force: true }) await rm(fixtureThemesRoot, { recursive: true, force: true }) + await rm(fixtureResourcesRoot, { recursive: true, force: true }) } } process.once('SIGINT', () => void close()) diff --git a/tests/e2e/package.json b/tests/e2e/package.json index bcb7ee58..a0c5c8b5 100644 --- a/tests/e2e/package.json +++ b/tests/e2e/package.json @@ -27,6 +27,7 @@ "devDependencies": { "@playwright/test": "1.62.1", "@types/node": "catalog:", + "fontverter": "2.0.0", "typescript": "catalog:" } } diff --git a/tests/e2e/playwright.config.ts b/tests/e2e/playwright.config.ts index 1a7670d1..713ced05 100644 --- a/tests/e2e/playwright.config.ts +++ b/tests/e2e/playwright.config.ts @@ -1,7 +1,7 @@ import { defineConfig } from '@playwright/test' import { existsSync } from 'node:fs' -const systemChrome = '/usr/bin/google-chrome' +const systemChrome = process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH ?? '/usr/bin/google-chrome' export default defineConfig({ testDir: './specs', diff --git a/tests/e2e/specs/creative-animation.spec.ts b/tests/e2e/specs/creative-animation.spec.ts index 72a0b7f6..716932d5 100644 --- a/tests/e2e/specs/creative-animation.spec.ts +++ b/tests/e2e/specs/creative-animation.spec.ts @@ -22,7 +22,7 @@ test('exports captured creative objects as native animated groups with original const response=await page.request.get('http://127.0.0.1:4317/api/v1/animations/c9f1632d31e4-0006');const value=CreativeAnimationDetailSchema.parse(await response.json()) const body=String(value.markdown).replace(/^---\n[\s\S]*?\n---\n/,'') await page.goto('/');await page.setContent(`
${body}
`) - const path=`http://127.0.0.1:4318/@fs${root}packages/slidewave/src/slidev/capture.ts` + const path=`http://127.0.0.1:4328/@fs/${root.replaceAll('\\', '/')}packages/slidewave/src/slidev/capture.ts` const slide=await page.evaluate(async path=>{const{captureHtmlSlide}=await import(path) as {captureHtmlSlide:(el:HTMLElement,opts:{snapshotVersion:number})=>Promise};return captureHtmlSlide(document.querySelector('#creative-root')!,{snapshotVersion:2})},path) const snapshot=HtmlDeckSnapshotSchema.parse({version:2,source:'slidev',slides:[slide],warnings:[]}) const effects=value.motion.groups.flatMap(group=>group.effects).map(effect=>{ diff --git a/tests/e2e/specs/fastppt.spec.ts b/tests/e2e/specs/fastppt.spec.ts index b1e4723c..7315aeac 100644 --- a/tests/e2e/specs/fastppt.spec.ts +++ b/tests/e2e/specs/fastppt.spec.ts @@ -1,4 +1,4 @@ -import { rm } from 'node:fs/promises' +import { rename, rm } from 'node:fs/promises' import { fileURLToPath } from 'node:url' import { expect, test, type Locator } from '@playwright/test' @@ -158,8 +158,7 @@ test('runs the complete local workspace, Harness, editor, preview and export flo await page.setViewportSize({ width: 1600, height: 900 }) async function pickOption(picker: Locator, label: string): Promise { - await picker.click() - await page.getByRole('option', { name: label, exact: true }).click() + await picker.selectOption({ label }) } async function createConfiguredSession(): Promise { @@ -193,7 +192,7 @@ test('runs the complete local workspace, Harness, editor, preview and export flo ).toBeVisible() if (switchDuringRun) { await pickOption(deckPicker, 'landing') - await expect(deckPicker).toHaveText('landing') + await expect(deckPicker.locator('option:checked')).toHaveText('landing') } await expect(sendButton).toBeVisible() } @@ -290,21 +289,25 @@ test('runs the complete local workspace, Harness, editor, preview and export flo await download.saveAs(downloadPath) expect(wakeLockFailures).toEqual([]) - await rm(`${workspace}/.claude/skills/fastppt-theme-academy`, { - recursive: true, - force: true, - }) - await page.setViewportSize({ width: 1600, height: 900 }) - await page.getByRole('tab', { name: '对话' }).click() - await pickOption(harnessPicker, 'Claude') - await pickOption(deckPicker, 'slides') - await expect( - page.getByText('missing', { exact: false }).first(), - ).toBeVisible() - await page.getByRole('tab', { name: '对话' }).click() - await composer.fill('This must not enter the Harness') - await expect(page.getByRole('button', { name: '发送' })).toBeDisabled() - await expect(page.getByText('发送已禁用', { exact: false })).toBeVisible() + // Common Skills are required; unselected theme Skills are loaded on demand. + const commonSkill = `${workspace}/.claude/skills/fastppt` + const skillBackup = `${workspace}/.claude/fastppt-e2e-skill-backup` + await rename(commonSkill, skillBackup) + try { + await page.setViewportSize({ width: 1600, height: 900 }) + await page.getByRole('tab', { name: '对话' }).click() + await pickOption(harnessPicker, 'Claude') + await pickOption(deckPicker, 'slides') + await page.getByRole('button', { name: '查看 Skill 与 MCP 安装状态' }).click() + const status = page.getByRole('dialog', { name: 'Skill 与 MCP 安装状态' }) + await expect(status.locator('.status-row').filter({ has: page.locator('.row-main', { hasText: /^\s*fastppt\s*$/ }) })).toContainText('缺失') + await status.getByRole('button', { name: '关闭', exact: true }).click() + await composer.fill('This must not enter the Harness') + await expect(page.getByRole('button', { name: '发送' })).toBeDisabled() + await expect(page.getByText('发送已禁用', { exact: false })).toBeVisible() + } finally { + await rename(skillBackup, commonSkill) + } await page.locator('body').click({ position: { x: 20, y: 20 } }) await page.keyboard.press('Control+Shift+P') @@ -433,7 +436,7 @@ test('runs the complete local workspace, Harness, editor, preview and export flo await page.keyboard.press('Control+Shift+P') await expect(page.getByRole('dialog', { name: '命令面板' })).toBeVisible() - await page.getByRole('dialog', { name: '命令面板' }).getByRole('button', { name: '创建向导' }).click() + await page.getByRole('dialog', { name: '命令面板' }).getByRole('button', { name: '新建演示文稿' }).click() const wizard = page.getByRole('dialog', { name: '创建向导' }) await expect(wizard).toBeVisible() await wizard.getByRole('button', { name: '关闭' }).click() @@ -447,7 +450,7 @@ test('resumes creation decisions and carries the final delivery step into a real const openWizard = async () => { await expect(page.getByText('fastppt-e2e-workspace').first()).toBeVisible() await page.keyboard.press('Control+Shift+P') - await page.getByRole('dialog', { name: '命令面板' }).getByRole('button', { name: '创建向导' }).click() + await page.getByRole('dialog', { name: '命令面板' }).getByRole('button', { name: '新建演示文稿' }).click() } await openWizard() const wizard = page.getByRole('dialog', { name: '创建向导' }) @@ -561,10 +564,10 @@ test('grants separate rule exceptions for a real PPTX export and revokes publica await page.goto('/') const picker = page.getByLabel('Preview deck') await expect(picker).toBeVisible() - await picker.click() - await page.getByRole('option', { name: 'rule-exceptions', exact: true }).click() + await picker.selectOption({ label: 'rule-exceptions' }) await expect(page.frameLocator('iframe[title="Slidev preview"]').locator('.slidev-layout').filter({ hasText: 'First review page' }).first()).toBeVisible() const panel = page.locator('.rule-exceptions') + await page.locator('.preview-more > summary').click() await panel.locator('summary').first().click() await expect(panel.locator('.rule-issue')).toContainText('deck.pages') const grant = panel.getByRole('button', { name: '批准此问题例外' }) @@ -581,6 +584,7 @@ test('grants separate rule exceptions for a real PPTX export and revokes publica expect(failed.themeRules.readback.source).toBe('pptx-xml') expect(failed.themeRules.readback.slides).toHaveLength(2) expect(failed.themeRules.readback.issues[0]?.exception).toBeUndefined() + await page.locator('.preview-more > summary').click() await panel.getByLabel('例外检查阶段').selectOption('readback') await expect(panel.locator('.rule-issue')).toContainText('deck.pages') await panel.getByLabel('批准原因 · deck.pages').fill('Confirmed the exported two-page structure.') @@ -597,6 +601,7 @@ test('grants separate rule exceptions for a real PPTX export and revokes publica expect((await download.body()).subarray(0, 2).toString()).toBe('PK') const published = await (await request.get(`http://127.0.0.1:4317/api/v1/exports/${secondJob.id}`)).json() as { themeRules: { readback: { issues: unknown[] } } } expect(published.themeRules.readback.issues[0]).toMatchObject({ severity: 'error', status: 'violation', exception: { reason: 'Confirmed the exported two-page structure.' } }) + await page.locator('.preview-more > summary').click() await expect(panel.locator('.exception-record')).toHaveCount(2) await panel.locator('.exception-record').filter({ hasText: 'Confirmed the exported two-page structure.' }).getByRole('button', { name: '撤销例外' }).click() await expect(panel.locator('.exception-record').filter({ hasText: 'Confirmed the exported two-page structure.' })).toContainText('已撤销') @@ -630,8 +635,7 @@ test('keeps animation targets from the current deck when an earlier response arr await page.goto('/') const picker = page.getByLabel('Preview deck') await expect(picker).toBeVisible() - await picker.click() - await page.getByRole('option', { name: 'slides', exact: true }).click() + await picker.selectOption({ label: 'slides' }) let releaseOld!: () => void let oldStarted!: () => void let oldDelivered!: () => void @@ -652,8 +656,7 @@ test('keeps animation targets from the current deck when an earlier response arr try { await page.getByRole('tab', { name: '动画', exact: true }).click() await started - await picker.click() - await page.getByRole('option', { name: 'landing', exact: true }).click() + await picker.selectOption({ label: 'landing' }) const target = page.locator('.timeline-details').getByLabel('对象') await expect(target).toHaveValue('current-deck-target') releaseOld() @@ -668,8 +671,7 @@ test('applies motion presets by scope and preserves manual overrides when saving await page.goto('/') const picker = page.getByLabel('Preview deck') await expect(picker).toBeVisible() - await picker.click() - await page.getByRole('option', { name: 'slides', exact: true }).click() + await picker.selectOption({ label: 'slides' }) await page.route('**/api/v1/decks/*/animations', async route => { if (route.request().method() === 'GET') await route.fulfill({ json: { version: 1, animations: [] } }) else await route.continue() @@ -686,6 +688,7 @@ test('applies motion presets by scope and preserves manual overrides when saving }) await page.getByRole('tab', { name: '动画', exact: true }).click() const panel = page.locator('.animation-panel') + await panel.locator('.timeline-details > summary').click() const save = async () => { const sent = page.waitForRequest(req => req.method() === 'PUT' && /\/animations$/.test(new URL(req.url()).pathname)) await panel.getByRole('button', { name: '保存动画', exact: true }).click() @@ -726,8 +729,7 @@ test('renders imported placeholder geometry and measures visible content in the const response = await request.put(`http://127.0.0.1:4317/api/v1/decks/${deck.id}/markdown`, { data: { expectedRevision: deck.revision, content: markdown } }) expect(response.ok()).toBe(true) await page.goto('/') - await page.getByLabel('Preview deck').click() - await page.getByRole('option', { name: 'slides', exact: true }).click() + await page.getByLabel('Preview deck').selectOption({ label: 'slides' }) const iframe = page.getByTitle('Slidev preview') const preview = iframe.contentFrame() await expect(preview.getByRole('heading', { name: 'Imported title 中文 عربي' })).toBeVisible() @@ -819,8 +821,7 @@ test('keeps source paragraph levels independent through nested lists, editing an const content = '---\ntheme: slidev-theme-academy\nlayout: source-levels\n---\n\n::ph-0::\n\n
  • First 一级
    • Second 二级
  • Third 一级
\n' expect((await request.put(`http://127.0.0.1:4317/api/v1/decks/${deck.id}/markdown`, { data: { expectedRevision: deck.revision, content } })).ok()).toBe(true) await page.goto('/') - await page.getByLabel('Preview deck').click() - await page.getByRole('option', { name: 'slides', exact: true }).click() + await page.getByLabel('Preview deck').selectOption({ label: 'slides' }) const preview = page.getByTitle('Slidev preview').contentFrame() const paragraphs = preview.locator('[data-fastppt-text-level]') await expect.poll(async () => ({ count: await paragraphs.count(), errors: renderErrors })).toEqual({ count: 3, errors: [] }) @@ -873,8 +874,7 @@ test('captures and binds an explicit rich text frame as one editable placeholder const content = '---\ntheme: slidev-theme-academy\nlayout: source-levels\n---\n\n::ph-0::\n\n

First 强调 link

  • Level one
    • Second 二级
      nextHIDDEN

\n' expect((await request.put(`http://127.0.0.1:4317/api/v1/decks/${deck.id}/markdown`, { data: { expectedRevision: deck.revision, content } })).ok()).toBe(true) await page.goto('/') - await page.getByLabel('Preview deck').click() - await page.getByRole('option', { name: 'slides', exact: true }).click() + await page.getByLabel('Preview deck').selectOption({ label: 'slides' }) const preview = page.getByTitle('Slidev preview').contentFrame() await expect(preview.locator('#rich-body [data-fastppt-text-level]')).toHaveCount(4) // A group animation must not be applied again to each paragraph descendant. @@ -945,8 +945,7 @@ test('retains independent source languages through nested lists, inline override const content = '---\ntheme: slidev-theme-academy\nlayout: source-languages\n---\n\n::ph-0::\n\n

Base

Clear

  • Outer
    • Nested

Inline 中文 tail

Authored

Third

\n' expect((await request.put(`http://127.0.0.1:4317/api/v1/decks/${deck.id}/markdown`, { data: { expectedRevision: deck.revision, content } })).ok()).toBe(true) await page.goto('/') - await page.getByLabel('Preview deck').click() - await page.getByRole('option', { name: 'slides', exact: true }).click() + await page.getByLabel('Preview deck').selectOption({ label: 'slides' }) const preview = page.getByTitle('Slidev preview').contentFrame() const frame = preview.locator('#language-frame') await expect(frame.locator('[data-fastppt-text-level]')).toHaveCount(8) @@ -993,8 +992,7 @@ test('keeps source text body insets and vertical alignment through resizing and const content = '---\ntheme: slidev-theme-academy\nlayout: source-text-body\n---\n\n::ph-0::\n\n

底部对齐 A long line remains unwrapped when the source text body disables wrapping.

\n' expect((await request.put(`http://127.0.0.1:4317/api/v1/decks/${deck.id}/markdown`, { data: { expectedRevision: deck.revision, content } })).ok()).toBe(true) await page.goto('/') - await page.getByLabel('Preview deck').click() - await page.getByRole('option', { name: 'slides', exact: true }).click() + await page.getByLabel('Preview deck').selectOption({ label: 'slides' }) const preview = page.getByTitle('Slidev preview').contentFrame() await expect(preview.locator('#body-frame')).toBeVisible() const measure = () => preview.locator('#body-frame').evaluate(element => { @@ -1047,8 +1045,7 @@ test('keeps source bullet markers editable, separate from text, and synchronized const content = '---\ntheme: slidev-theme-academy\nlayout: source-bullets\n---\n\n::ph-0::\n\n

HIDDEN中文 First marker follows this visible run. This long paragraph wraps onto another line so the hanging marker stays outside the body and never becomes part of the text. This line keeps the same indentation.

Explicit symbol font, size and color.
Soft break

No marker at level three.

Ninth level returns to the base marker style.

  • Local cancellation.

\n' expect((await request.put(`http://127.0.0.1:4317/api/v1/decks/${deck.id}/markdown`, { data: { expectedRevision: deck.revision, content } })).ok()).toBe(true) await page.goto('/') - await page.getByLabel('Preview deck').click() - await page.getByRole('option', { name: 'slides', exact: true }).click() + await page.getByLabel('Preview deck').selectOption({ label: 'slides' }) const preview = page.getByTitle('Slidev preview').contentFrame() const frame = preview.locator('#bullet-frame') await expect(frame).toBeVisible() @@ -1121,8 +1118,7 @@ test('recomputes native automatic numbering by DOM order and keeps frame and res const content = '---\ntheme: slidev-theme-academy\nlayout: source-numbering\n---\n\n::ph-0::\n\n

A

B

C

Plain

D

E

F

Hidden

  • Restart

    After

Independent

\n' expect((await request.put(`http://127.0.0.1:4317/api/v1/decks/${deck.id}/markdown`, { data: { expectedRevision: deck.revision, content } })).ok()).toBe(true) await page.goto('/') - await page.getByLabel('Preview deck').click() - await page.getByRole('option', { name: 'slides', exact: true }).click() + await page.getByLabel('Preview deck').selectOption({ label: 'slides' }) const preview = page.getByTitle('Slidev preview').contentFrame() const frame = preview.locator('#number-frame'), markers = frame.locator('[data-fastppt-bullet-marker]') await expect(frame).toBeVisible() @@ -1183,8 +1179,7 @@ test('measures literal source tabs across runs, explicit clears, soft breaks and const content = '---\ntheme: slidev-theme-academy\nlayout: source-tabs\n---\n\n::ph-0::\n\n

A 中文 D

A B C

A B C

A B C

A B
C D

\n' expect((await request.put(`http://127.0.0.1:4317/api/v1/decks/${deck.id}/markdown`, { data: { expectedRevision: deck.revision, content } })).ok()).toBe(true) await page.goto('/') - await page.getByLabel('Preview deck').click() - await page.getByRole('option', { name: 'slides', exact: true }).click() + await page.getByLabel('Preview deck').selectOption({ label: 'slides' }) const preview = page.getByTitle('Slidev preview').contentFrame(), frame = preview.locator('#tab-frame') await expect(frame).toBeVisible() const markers = frame.locator('[data-fastppt-tab]') @@ -1272,8 +1267,7 @@ test('measures centered and right tab fields across inline runs, breaks, collisi const content = '---\ntheme: slidev-theme-academy\nlayout: source-tabs\n---\n\n::ph-0::\n\n

A AB中文 CD

A AB中文 CD

A E

A BB
X YY

A MMMMMMMMMMMMMMMMMMMMMMMMMMMM

A F G H

A {{ "BB\\nX" }} YY

\n' expect((await request.put(`http://127.0.0.1:4317/api/v1/decks/${deck.id}/markdown`, { data: { expectedRevision: deck.revision, content } })).ok()).toBe(true) await page.goto('/') - await page.getByLabel('Preview deck').click() - await page.getByRole('option', { name: 'slides', exact: true }).click() + await page.getByLabel('Preview deck').selectOption({ label: 'slides' }) const preview = page.getByTitle('Slidev preview').contentFrame(), frame = preview.locator('#aligned-frame') await expect(frame).toBeVisible() await expect(frame.locator('[data-fastppt-tab]')).toHaveCount(14) @@ -1327,8 +1321,7 @@ layout: source-tabs ` expect((await request.put(`http://127.0.0.1:4317/api/v1/decks/${deck.id}/markdown`, { data: { expectedRevision: deck.revision, content } })).ok()).toBe(true) await page.goto('/') - await page.getByLabel('Preview deck').click() - await page.getByRole('option', { name: 'slides', exact: true }).click() + await page.getByLabel('Preview deck').selectOption({ label: 'slides' }) const preview = page.getByTitle('Slidev preview').contentFrame(), frame = preview.locator('#decimal-frame') await expect(frame).toBeVisible() await expect(frame.locator('[data-fastppt-tab]')).toHaveCount(17) @@ -1402,8 +1395,7 @@ test('captures automatic tab lines and reselects stops after wrapping without ad const content = '---\ntheme: slidev-theme-academy\nlayout: source-wrapped-tabs\n---\n' + bodies.map((body, index) => `\n::ph-${index}::\n\n
${body}
\n`).join('') expect((await request.put(`http://127.0.0.1:4317/api/v1/decks/${deck.id}/markdown`, { data: { expectedRevision: deck.revision, content } })).ok()).toBe(true) await page.goto('/') - await page.getByLabel('Preview deck').click() - await page.getByRole('option', { name: 'slides', exact: true }).click() + await page.getByLabel('Preview deck').selectOption({ label: 'slides' }) const preview = page.getByTitle('Slidev preview').contentFrame(), root = preview.locator('.source-layout') await expect(preview.locator('#flow-3')).toBeVisible() const capturePath = `http://127.0.0.1:4328/@fs${fileURLToPath(new URL('../../../packages/slidewave/src/slidev/capture.ts', import.meta.url))}` @@ -1466,8 +1458,7 @@ test('measures bullet first-line occupancy, alignment and baselines without chan const content = '---\ntheme: slidev-theme-academy\nlayout: source-bullet-geometry\n---\n' + [0, 1, 2, 3].map(index => `\n::ph-${index}::\n\n

AAAA BBBB CCCC

AAAA BBBB CCCC

AAAA BBBB CCCC

AAAA BBBB

AAAAAAAAAAAAAAAAAAAA

Small

Large
Soft

Points

Hidden

\n`).join('') expect((await request.put(`http://127.0.0.1:4317/api/v1/decks/${deck.id}/markdown`, { data: { expectedRevision: deck.revision, content } })).ok()).toBe(true) await page.goto('/') - await page.getByLabel('Preview deck').click() - await page.getByRole('option', { name: 'slides', exact: true }).click() + await page.getByLabel('Preview deck').selectOption({ label: 'slides' }) const preview = page.getByTitle('Slidev preview').contentFrame() const root = preview.locator('.source-layout') await expect(preview.locator('#geometry-0')).toBeVisible() @@ -1547,8 +1538,7 @@ test('projects source decorations onto editable runs with independent cancellati const content = '---\ntheme: slidev-theme-academy\nlayout: source-decorations\n---\n\n::ph-0::\n\n

Both 中文

Strike only

Underline only

Plain HTML underline HTML strike

Local strike Cancelled Resumed

Base Strike Neither Both

Decorated bullet body

Before
After Link

A B

\n\n::ph-1::\n\n

Ordinary 中文 strike

\n' expect((await request.put(`http://127.0.0.1:4317/api/v1/decks/${deck.id}/markdown`, { data: { expectedRevision: deck.revision, content } })).ok()).toBe(true) await page.goto('/') - await page.getByLabel('Preview deck').click() - await page.getByRole('option', { name: 'slides', exact: true }).click() + await page.getByLabel('Preview deck').selectOption({ label: 'slides' }) const preview = page.getByTitle('Slidev preview').contentFrame(), root = preview.locator('.source-layout'), frame = preview.locator('#decorations') await expect(frame).toBeVisible() const projected = () => frame.locator('[data-fastppt-text-decoration-run]').evaluateAll(elements => elements.map(element => ({ text: element.textContent, lines: getComputedStyle(element).textDecorationLine }))) @@ -1624,8 +1614,7 @@ test('preserves signed source letter spacing through levels, inline edits, tabs, const content = '---\ntheme: slidev-theme-academy\nlayout: source-letter-spacing\n---\n\n::ph-0::\n\n

AAAA

BBBB

CCCC

Fractional

AZeroNegativeLink

Before
After

A B

Latin中文

\n' + [1, 2, 3].map(index => `\n::ph-${index}::\n\n

AAAA BBBB CCCC

\n`).join('') + '\n::ph-4::\n\n

Ordinary中文

\n' expect((await request.put(`http://127.0.0.1:4317/api/v1/decks/${deck.id}/markdown`, { data: { expectedRevision: deck.revision, content } })).ok()).toBe(true) await page.goto('/') - await page.getByLabel('Preview deck').click() - await page.getByRole('option', { name: 'slides', exact: true }).click() + await page.getByLabel('Preview deck').selectOption({ label: 'slides' }) const preview = page.getByTitle('Slidev preview').contentFrame(), root = preview.locator('.source-layout'), frame = preview.locator('#spacing') await expect(frame).toBeVisible() const computedSpacing = () => frame.locator('p').evaluateAll(paragraphs => paragraphs.map(element => Number(((parseFloat(getComputedStyle(element).letterSpacing) || 0) * 960 / parseFloat(getComputedStyle(element.closest('.source-layout')!).width)).toFixed(2)))) @@ -1691,8 +1680,7 @@ test('preserves source baseline ratios without shrinking fonts or double-shiftin const content = '---\ntheme: slidev-theme-academy\nlayout: source-baseline\n---\n\n::ph-0::\n\n

Raised 中文

Normal

Lowered

AZeroDownLinkSmall

Before
After

A RaisedLowered

Bullet

\n\n::ph-1::\n\n

A AAAA BBBB CCCC
End

\n\n::ph-2::\n\n

Ordinary中文

Ordinary中文

\n' expect((await request.put(`http://127.0.0.1:4317/api/v1/decks/${deck.id}/markdown`, { data: { expectedRevision: deck.revision, content } })).ok()).toBe(true) await page.goto('/') - await page.getByLabel('Preview deck').click() - await page.getByRole('option', { name: 'slides', exact: true }).click() + await page.getByLabel('Preview deck').selectOption({ label: 'slides' }) const preview = page.getByTitle('Slidev preview').contentFrame(), root = preview.locator('.source-layout'), frame = preview.locator('#baseline') await expect(frame).toBeVisible() const geometry = () => frame.locator('p').evaluateAll(paragraphs => paragraphs.map(element => { @@ -1800,8 +1788,7 @@ test('preserves kerning thresholds through font boundaries, resizing, editing an const content = '---\ntheme: slidev-theme-academy\nlayout: source-kerning\n---\n\n::ph-0::\n\n

AVATAR To WA

AVATAR To WA

AVATAR To WA

AVATAR To WA

SmallAlwaysLarge

Before
After

AVATAR To WA

Latin中文

\n\n::ph-1::\n\n

AVATAR To WA

\n\n::ph-2::\n\n

AVATAR To WA

\n\n::ph-3::\n\n

Ordinary中文

\n' expect((await request.put(`http://127.0.0.1:4317/api/v1/decks/${deck.id}/markdown`, { data: { expectedRevision: deck.revision, content } })).ok()).toBe(true) await page.goto('/') - await page.getByLabel('Preview deck').click() - await page.getByRole('option', { name: 'slides', exact: true }).click() + await page.getByLabel('Preview deck').selectOption({ label: 'slides' }) const preview = page.getByTitle('Slidev preview').contentFrame(), root = preview.locator('.source-layout'), frame = preview.locator('#kerning') await expect(frame).toBeVisible() const modes = () => frame.locator('[data-fastppt-text-kerning]').evaluateAll(elements => elements.filter(element => element.tagName === 'SPAN').map(element => ({ text: element.textContent, mode: getComputedStyle(element).fontKerning }))) @@ -1882,8 +1869,7 @@ test('preserves original capitalization text through templates, Unicode expansio const content = '---\ntheme: slidev-theme-academy\nlayout: source-capitalization\n---\n\n::ph-0::\n\n

Straße中文

Straße

Abc xyz

Abc xyz

i ı I İ i

Before
After

Straße xyz

LinkedShift

Body

\n\n::ph-1::\n\n

Straße StraßeStraße

\n\n::ph-2::\n\n

Straße中文

\n' expect((await request.put(`http://127.0.0.1:4317/api/v1/decks/${deck.id}/markdown`, { data: { expectedRevision: deck.revision, content } })).ok()).toBe(true) await page.goto('/') - await page.getByLabel('Preview deck').click() - await page.getByRole('option', { name: 'slides', exact: true }).click() + await page.getByLabel('Preview deck').selectOption({ label: 'slides' }) const preview = page.getByTitle('Slidev preview').contentFrame(), root = preview.locator('.source-layout'), frame = preview.locator('#capitals') await expect(frame).toBeVisible() const modes = () => frame.locator('p').evaluateAll(elements => elements.slice(0, 4).map(element => { diff --git a/tests/e2e/specs/library-workspace.spec.ts b/tests/e2e/specs/library-workspace.spec.ts index 0136dec5..5ef4f7e5 100644 --- a/tests/e2e/specs/library-workspace.spec.ts +++ b/tests/e2e/specs/library-workspace.spec.ts @@ -51,7 +51,8 @@ test('keeps seven workspace tabs and direct creation actions and a compact previ await expect(page.getByRole('heading', { name: '讲稿备注' })).toBeVisible() await page.keyboard.press('Control+Shift+P') const commands = page.getByRole('dialog', { name: '命令面板' }) - await expect(commands.getByRole('button', { name: /演示/ })).toHaveCount(0) + await expect(commands.getByRole('button', { name: '新建演示文稿' })).toBeVisible() + await expect(commands.getByRole('button', { name: /^(进入演示|开始演示|打开演示)$/ })).toHaveCount(0) await commands.getByRole('button', { name: '关闭', exact: true }).click() await page.getByRole('tab', { name: '对话', exact: true }).click() await page.screenshot({ path: '/tmp/fastppt-compact-workspace.png' }) diff --git a/tests/e2e/specs/managed-theme-dialogs.spec.ts b/tests/e2e/specs/managed-theme-dialogs.spec.ts new file mode 100644 index 00000000..3cdc35ab --- /dev/null +++ b/tests/e2e/specs/managed-theme-dialogs.spec.ts @@ -0,0 +1,114 @@ +import { expect, test, type Locator, type Page } from '@playwright/test' +import type { ThemeSummary } from '@fastppt/protocol' + +const themes: ThemeSummary[] = ['Academy', 'Landing'].map(name => ({ + themeId: `slidev-theme-${name.toLowerCase()}`, + packageName: `slidev-theme-${name.toLowerCase()}`, + displayName: name, + version: '0.1.0', + description: `${name} theme description`, + repositoryUrl: 'https://github.com/FastR-D/FastPPT', + skillId: `fastppt-theme-${name.toLowerCase()}`, + skillVersion: '0.1.0', + layouts: [{ id: 'cover', label: '学术封面' }], + supportedFeatures: [{ id: 'citations', label: '引用', description: '保留学术引用' }], + registryVersion: 'ui-v1', + available: true, +})) + +test.beforeEach(async ({ page }) => { + await page.route('**/api/v1/themes', route => route.fulfill({ json: themes })) + await page.route('**/api/v1/themes/*/skill', route => { + const theme = themes.find(theme => route.request().url().includes(theme.themeId))! + return route.fulfill({ json: { themeId: theme.themeId, skillId: theme.skillId, version: theme.skillVersion, fileName: 'SKILL.md', content: `# ${theme.displayName} skill source` } }) + }) + await page.route('**/api/v1/managed/status', route => route.fulfill({ json: { + registryVersion: 'ui-v1', + skills: [ + { harness: 'claude', skillId: 'fastppt-base', kind: 'base', expectedVersion: '0.1.0', state: 'installed', targetPath: '/fixture/base', managed: true }, + { harness: 'claude', skillId: 'fastppt-theme-academy', kind: 'theme', themeId: 'slidev-theme-academy', expectedVersion: '0.1.0', state: 'missing', targetPath: '/fixture/theme', managed: true, message: 'Theme installation required' }, + ], + mcp: [{ harness: 'claude', state: 'pending-trust', configPath: '/fixture/mcp', managed: true, message: 'Confirm MCP trust' }], + } })) +}) + +async function expectNativeFocus(page: Page, dialog: Locator, background: Locator) { + await expect(dialog).toBeVisible() + await expect.poll(() => dialog.evaluate(element => element instanceof HTMLDialogElement && element.matches(':modal'))).toBe(true) + await expect.poll(() => dialog.evaluate(element => element.contains(document.activeElement))).toBe(true) + await background.evaluate(element => (element as HTMLElement).focus()) + await expect(background).not.toBeFocused() + expect(await dialog.evaluate(element => element.contains(document.activeElement))).toBe(true) + await dialog.getByRole('heading').first().click() + await expect(dialog).toBeVisible() + await expect(page.locator('dialog[open]')).toHaveCount(1) +} + +for (const kind of ['status', 'details', 'skill'] as const) { + test(`owns native focus, inertness and every close path for ${kind}`, async ({ page }) => { + await page.goto('/') + if (kind !== 'status') await page.getByRole('tab', { name: '主题', exact: true }).click() + const trigger = kind === 'status' + ? page.getByRole('button', { name: '查看 Skill 与 MCP 安装状态', exact: true }) + : page.getByRole('button', { name: kind === 'details' ? '查看 Academy 详细功能' : '查看 fastppt-theme-academy 文件', exact: true }) + const dialog = page.getByRole('dialog', { name: kind === 'status' ? 'Skill 与 MCP 安装状态' : kind === 'details' ? 'Academy' : 'fastppt-theme-academy', exact: true }) + for (const action of ['escape', 'backdrop', 'button']) { + await trigger.click() + await expectNativeFocus(page, dialog, trigger) + if (kind === 'status') { + await expect(dialog).toContainText('1/2 个 Skill 已安装') + await expect(dialog).toContainText('Theme installation required') + await expect(dialog).toContainText('Confirm MCP trust') + } else if (kind === 'details') { + await expect(dialog).toContainText('保留学术引用') + await expect(dialog).toContainText('学术封面') + } else await expect(dialog).toContainText('# Academy skill source') + if (action === 'escape') await page.keyboard.press('Escape') + else if (action === 'button') await dialog.getByRole('button', { name: kind === 'status' ? '关闭' : '关闭弹窗', exact: true }).click() + else { + const box = (await dialog.boundingBox())! + await page.mouse.move(box.x - 8, box.y + box.height / 2) + await page.mouse.down() + await expect(dialog).toBeVisible() + await page.mouse.up() + } + await expect(dialog).toBeHidden() + await expect(page.locator('dialog[open]')).toHaveCount(0) + await expect(trigger).toBeFocused() + } + }) +} + +test('keeps a dismissed Skill request closed and preserves loading, error and source states', async ({ page }) => { + let release!: () => void + const held = new Promise(resolve => { release = resolve }) + let attempts = 0 + await page.route('**/api/v1/themes/slidev-theme-academy/skill', async route => { + attempts++ + if (attempts === 1) await held + if (attempts === 2) await route.fulfill({ status: 503, json: { error: { code: 'SKILL_READ', message: 'Skill source unavailable', retryable: false, requestId: 'ui-v1' } } }) + else await route.fulfill({ json: { themeId: themes[0]!.themeId, skillId: themes[0]!.skillId, version: '0.1.0', fileName: 'SKILL.md', content: '# Fresh Academy source' } }) + }) + await page.goto('/') + await page.getByRole('tab', { name: '主题', exact: true }).click() + const trigger = page.getByRole('button', { name: '查看 fastppt-theme-academy 文件', exact: true }) + const dialog = page.getByRole('dialog', { name: 'fastppt-theme-academy', exact: true }) + await trigger.click() + await expect(dialog).toContainText('正在读取 SKILL.md') + await page.keyboard.press('Escape') + await expect(dialog).toBeHidden() + const delivered = page.waitForResponse(response => response.url().endsWith('/slidev-theme-academy/skill')) + release() + await delivered + await expect(dialog).toBeHidden() + await expect(trigger).toBeFocused() + await trigger.click() + await expect(dialog).toContainText('Skill source unavailable') + await dialog.getByRole('button', { name: '关闭弹窗', exact: true }).click() + await trigger.click() + await expect(dialog).toContainText('# Fresh Academy source') + await expect(dialog).not.toContainText('Skill source unavailable') + await page.keyboard.press('Escape') + await expect(dialog).toBeHidden() + await expect(trigger).toBeFocused() +}) diff --git a/tests/e2e/specs/native-html.spec.ts b/tests/e2e/specs/native-html.spec.ts index f4064243..260604cc 100644 --- a/tests/e2e/specs/native-html.spec.ts +++ b/tests/e2e/specs/native-html.spec.ts @@ -13,7 +13,7 @@ test('captures an HTML compound polygon once and exports an editable hole with c const metadata={version:1,fillRule:'evenodd',paths:[{closed:true,points:[[0,0],[1,0],[1,1],[0,1]]},{closed:true,points:[[.25,.25],[.75,.25],[.75,.75],[.25,.75]]}],fill:'#123456',stroke:'none',strokeWidthRatio:0,fillOpacity:.5} const payload=JSON.stringify(metadata).replaceAll('"','"') await page.setContent(`
`) - const path=`http://127.0.0.1:4318/@fs${root}packages/slidewave/src/slidev/capture.ts` + const path=`http://127.0.0.1:4328/@fs/${root.replaceAll('\\', '/')}packages/slidewave/src/slidev/capture.ts` const slide=await page.evaluate(async path=>{const {captureHtmlSlide}=await import(path) as {captureHtmlSlide:(node:HTMLElement,options:{snapshotVersion:number})=>Promise};return captureHtmlSlide(document.querySelector('#capture-root')!,{snapshotVersion:2})},path) const targets=slide.elements.filter(e=>e.source.anchor==='target') expect(targets).toHaveLength(1) @@ -39,7 +39,7 @@ test('exports a converted library page as separate editable geometry and text',a await page.setContent((await library.preview('11ebacee969e-0010'))!) await page.evaluate(()=>document.fonts.ready) const sourceCount=await page.locator('[data-fastppt-geometry]').count() - const path=`http://127.0.0.1:4318/@fs${root}packages/slidewave/src/slidev/capture.ts` + const path=`http://127.0.0.1:4328/@fs/${root.replaceAll('\\', '/')}packages/slidewave/src/slidev/capture.ts` const slide=await page.evaluate(async path=>{ const {captureHtmlSlide}=await import(path) as {captureHtmlSlide:(node:HTMLElement,options:{snapshotVersion:number})=>Promise} return captureHtmlSlide(document.querySelector('main > div')!,{snapshotVersion:2}) diff --git a/tests/e2e/specs/native-table.spec.ts b/tests/e2e/specs/native-table.spec.ts index db63cb2a..1d833839 100644 --- a/tests/e2e/specs/native-table.spec.ts +++ b/tests/e2e/specs/native-table.spec.ts @@ -227,16 +227,14 @@ th, td { border: 1px solid #808080 !important; border-radius: 0 !important; padd await page.goto('/') const picker = page.getByLabel('Preview deck') await expect(picker).toBeVisible() - await picker.click() - await page - .getByRole('option', { name: 'native-structured', exact: true }) - .click() + await picker.selectOption({ label: 'native-structured' }) await expect( page .getByTitle('Slidev preview') .contentFrame() .getByRole('heading', { name: '原生数据表格' }), ).toBeVisible() + await page.locator('.preview-more > summary').click() await page.locator('.export-options summary').click() await page.getByLabel('导出策略').selectOption('strict-editable') await page.getByLabel('导出审查', { exact: true }).uncheck() diff --git a/tests/e2e/specs/notes-workspace.spec.ts b/tests/e2e/specs/notes-workspace.spec.ts index 13b82443..99fd0343 100644 --- a/tests/e2e/specs/notes-workspace.spec.ts +++ b/tests/e2e/specs/notes-workspace.spec.ts @@ -1,6 +1,14 @@ -import { expect, test } from '@playwright/test' +import { expect, test, type Page } from '@playwright/test' import type { DeckNotesDocument } from '@fastppt/protocol' +async function openNotesDeck(page: Page): Promise { + await page.goto('/') + const picker = page.getByLabel('Preview deck') + await expect(picker).toBeVisible() + await picker.selectOption({ label: 'notes-qa' }) + await expect(page.frameLocator('.preview-stage iframe').getByRole('heading', { name: 'Notes page 1', exact: true })).toBeVisible() +} + test('links the notes outline, editor and preview without losing drafts on page changes or failed saves', async ({ page }) => { const errors: string[] = [] page.on('pageerror', error => errors.push(error.message)) @@ -31,7 +39,7 @@ test('links the notes outline, editor and preview without losing drafts on page } await route.fulfill({ json: notes }) }) - await page.goto('/') + await openNotesDeck(page) await expect.poll(async () => Number((await page.locator('.status-pages').innerText()).match(/\/ (\d+) 页/)?.[1])).toBeGreaterThanOrEqual(3) pageCount = Number((await page.locator('.status-pages').innerText()).match(/\/ (\d+) 页/)?.[1]) expect(pageCount).toBeGreaterThanOrEqual(3) @@ -80,18 +88,17 @@ test('links the notes outline, editor and preview without losing drafts on page }) test('uses a shared SVG icon and equally compact preview controls without a black surround', async ({ page }) => { - await page.goto('/') + await openNotesDeck(page) const preview = page.locator('.preview-panel') const frame = page.frameLocator('.preview-stage iframe') await expect(frame.locator('#slide-content')).toBeVisible() await expect.poll(() => frame.locator('#slide-container').evaluate(element => getComputedStyle(element).backgroundColor)).toBe('rgba(0, 0, 0, 0)') - const controls = preview.locator('.preview-identity .app-select, .page-indicator input, .preview-actions > button, .preview-more > summary') + const controls = preview.locator('.preview-identity select, .page-indicator input, .preview-actions > button, .preview-more > summary') const heights = await controls.evaluateAll(elements => elements.map(element => element.getBoundingClientRect().height)) expect(heights.length).toBeGreaterThanOrEqual(6) - heights.forEach(height => expect(height).toBe(20)) + heights.forEach(height => expect(height).toBe(24)) const selection = preview.getByRole('button', { name: '框选修改', exact: true }) await expect(selection).toBeEnabled() - await expect(selection).toHaveClass(/fp-button--primary/) await expect.poll(async () => (await selection.evaluate(element => getComputedStyle(element).backgroundColor)) === (await preview.getByRole('button', { name: '导出 PPTX', exact: true }).evaluate(element => getComputedStyle(element).backgroundColor))).toBe(true) const logo = page.locator('.brand-mark') await expect(logo).toHaveAttribute('src', /^(data:image\/svg\+xml|.*fastppt-icon.*\.svg)/) @@ -99,7 +106,7 @@ test('uses a shared SVG icon and equally compact preview controls without a blac }) test('keeps the editor file tree above the page outline and shares page selection with the preview', async ({ page }) => { - await page.goto('/') + await openNotesDeck(page) await page.getByRole('tab', { name: '编辑', exact: true }).click() const sidebar = page.getByRole('complementary', { name: '编辑导航', exact: true }) const files = sidebar.getByRole('complementary', { name: '文件树', exact: true }) @@ -115,7 +122,7 @@ test('keeps the editor file tree above the page outline and shares page selectio }) test('turns pages with the wheel over the outline and the unused preview area', async ({ page }) => { - await page.goto('/') + await openNotesDeck(page) await page.getByRole('tab', { name: '编辑', exact: true }).click() const outline = page.getByRole('complementary', { name: '页面大纲', exact: true }) await outline.locator('.slide-item').nth(2).click() diff --git a/tests/e2e/specs/resources.spec.ts b/tests/e2e/specs/resources.spec.ts index d5b03f02..0a3ff4ef 100644 --- a/tests/e2e/specs/resources.spec.ts +++ b/tests/e2e/specs/resources.spec.ts @@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test' test('loads source webfonts inside the script-free opaque resource sandbox', async ({ page }) => { await page.goto('http://127.0.0.1:4317/health') - await page.setContent('') + await page.setContent('') const frame = page.frameLocator('iframe[title="font-qa"]') await expect(frame.locator('[data-resource-text]').first()).toBeVisible() await expect.poll(async () => frame.locator('html').evaluate(() => [...document.fonts].filter(font => font.family.includes('fp-') && font.status === 'loaded').length)).toBeGreaterThan(0) diff --git a/tests/e2e/specs/standalone-tabs.spec.ts b/tests/e2e/specs/standalone-tabs.spec.ts index 6cc18d42..51dfa23f 100644 --- a/tests/e2e/specs/standalone-tabs.spec.ts +++ b/tests/e2e/specs/standalone-tabs.spec.ts @@ -115,7 +115,7 @@ test('generated theme preserves source tabs in standalone Slidev without the hos .poll( async () => { try { - return (await fetch('http://127.0.0.1:4332')).ok + return (await fetch('http://localhost:4332')).ok } catch { return false } @@ -124,8 +124,10 @@ test('generated theme preserves source tabs in standalone Slidev without the hos ) .toBe(true), failed, - ]) - await page.goto('http://127.0.0.1:4332/1') + ]).catch((cause: unknown) => { + throw new Error(`Standalone Slidev did not become ready: ${serverOutput}`, { cause }) + }) + await page.goto('http://localhost:4332/1') const frame = page.locator('#standalone-frame') await expect(frame.locator('[data-fastppt-tab]')).toHaveCount(2) expect(await frame.textContent()).toBe('A\tB\tC') @@ -152,7 +154,7 @@ test('generated theme preserves source tabs in standalone Slidev without the hos return Math.round((element.getBoundingClientRect().left - paragraph.getBoundingClientRect().left) / root.getBoundingClientRect().width * 1000) }))).toEqual([150, 150]) await expect(decimal.locator('[data-fastppt-tab-error]')).toHaveCount(0) - await page.goto('http://127.0.0.1:4332/2') + await page.goto('http://localhost:4332/2') const flow = page.locator('#standalone-flow') await expect(flow).toBeVisible() await expect.poll(() => flow.locator('[data-fastppt-tab]').evaluateAll(elements => elements.map(element => { @@ -160,7 +162,7 @@ test('generated theme preserves source tabs in standalone Slidev without the hos return [Math.round((element.getBoundingClientRect().left - paragraph.getBoundingClientRect().left) * factor), Math.round(element.getBoundingClientRect().width * factor), Math.round((element.getBoundingClientRect().top - paragraph.getBoundingClientRect().top) * factor)] }))).toEqual([[0, 72, 30], [0, 240, 30]]) await expect(flow.locator('[data-fastppt-tab-error]')).toHaveCount(0) - await page.goto('http://127.0.0.1:4332/3') + await page.goto('http://localhost:4332/3') const bullets = page.locator('#standalone-bullets') await expect(bullets).toBeVisible() const measured = () => bullets.locator('p').evaluateAll(elements => elements.map(element => { @@ -172,7 +174,7 @@ test('generated theme preserves source tabs in standalone Slidev without the hos await page.setViewportSize({ width: 1200, height: 800 }) await expect.poll(measured).toEqual([{ label: '*', prefix: 32, baseline: 0 }, { label: '1234.', prefix: 40, baseline: 0 }, { label: '*', prefix: 41.6, baseline: 0 }]) await expect(bullets.locator('[data-fastppt-bullet-error]')).toHaveCount(0) - await page.goto('http://127.0.0.1:4332/4') + await page.goto('http://localhost:4332/4') const decorations = page.locator('#standalone-decorations') await expect(decorations).toBeVisible() const decorationStyles = () => decorations.locator('[data-fastppt-text-decoration-run]').evaluateAll(elements => elements.map(element => ({ text: element.textContent, line: getComputedStyle(element).textDecorationLine, skipInk: getComputedStyle(element).textDecorationSkipInk }))) @@ -192,7 +194,7 @@ test('generated theme preserves source tabs in standalone Slidev without the hos await writeFile(entry, (await readFile(entry, 'utf8')).replace('Strike only', 'Edited strike').replace('data-fastppt-level="2"', 'data-fastppt-level="9"')) await expect(decorations).toContainText('Edited strike') await expect.poll(decorationStyles).toEqual(expect.arrayContaining([{ text: 'Edited strike', line: 'none', skipInk: 'none' }])) - await page.goto('http://127.0.0.1:4332/5') + await page.goto('http://localhost:4332/5') const spacing = page.locator('#standalone-spacing') await expect(spacing).toBeVisible() const spacingValues = () => spacing.locator('p').evaluateAll(elements => elements.map(element => Number(((parseFloat(getComputedStyle(element).letterSpacing) || 0) * 960 / parseFloat(getComputedStyle(element.closest('.source-layout')!).width)).toFixed(2)))) @@ -203,7 +205,7 @@ test('generated theme preserves source tabs in standalone Slidev without the hos await writeFile(entry, (await readFile(entry, 'utf8')).replace('data-fastppt-level="2">Zero', 'data-fastppt-level="3">Edited compact')) await expect(spacing).toContainText('Edited compact') await expect.poll(spacingValues).toEqual([2, -2, -2, 2, 2]) - await page.goto('http://127.0.0.1:4332/6') + await page.goto('http://localhost:4332/6') const baseline = page.locator('#standalone-baseline') await expect(baseline).toBeVisible() const baselines = () => baseline.locator('[data-fastppt-text-baseline-run]').evaluateAll(elements => elements.map(element => { @@ -217,7 +219,7 @@ test('generated theme preserves source tabs in standalone Slidev without the hos await writeFile(entry, (await readFile(entry, 'utf8')).replace('data-fastppt-baseline="0">Reset', 'data-fastppt-baseline="-10">Edited baseline')) await expect(baseline).toContainText('Edited baseline') await expect.poll(baselines).toEqual([30, -25, -10, 30, 30, 30]) - await page.goto('http://127.0.0.1:4332/7') + await page.goto('http://localhost:4332/7') const kerning = page.locator('#standalone-kerning') await expect(kerning).toBeVisible() const modes = () => kerning.locator('p > [data-fastppt-script-text] > span').evaluateAll(elements => elements.map(element => getComputedStyle(element).fontKerning)) @@ -228,12 +230,12 @@ test('generated theme preserves source tabs in standalone Slidev without the hos await writeFile(entry, (await readFile(entry, 'utf8')).replace('data-fastppt-level="3">AVATAR', 'data-fastppt-level="2">Edited AVATAR')) await expect(kerning).toContainText('Edited AVATAR') await expect.poll(modes).toEqual(['normal', 'normal', 'normal', 'normal']) - await page.goto('http://127.0.0.1:4332/8') + await page.goto('http://localhost:4332/8') const fixedKerning = page.locator('[data-fastppt-layout-object="MCP Pairs"] > span') await expect(fixedKerning).toHaveCSS('font-kerning', 'none') await fixedKerning.evaluate(element => { (element as HTMLElement).style.fontSize = '4cqw' }) await expect(fixedKerning).toHaveCSS('font-kerning', 'normal') - await page.goto('http://127.0.0.1:4332/9') + await page.goto('http://localhost:4332/9') const capitalization = page.locator('#standalone-capitalization') await expect(capitalization).toBeVisible() const capitalizationText = () => capitalization.locator('p').evaluateAll(elements => elements.map(element => ({ original: element.textContent, display: (element as HTMLElement).innerText }))) @@ -243,10 +245,10 @@ test('generated theme preserves source tabs in standalone Slidev without the hos await expect(capitalization.locator('[data-fastppt-tab-error]')).toHaveCount(0) await writeFile(entry, (await readFile(entry, 'utf8')).replace('

Straße

', '

Edited Straße

')) await expect(capitalization.locator('p').first()).toHaveJSProperty('innerText', 'Edited Straße') - await page.goto('http://127.0.0.1:4332/10') + await page.goto('http://localhost:4332/10') await expect(page.locator('[data-fastppt-layout-object="MCP Capitals"] > span')).toHaveCSS('font-variant-caps', 'small-caps') - await page.goto('http://127.0.0.1:4332/11') + await page.goto('http://localhost:4332/11') const rtl = page.locator('#standalone-rtl') await expect(rtl).toBeVisible() expect(await rtl.textContent()).toBe('مرحبا بالعالم 123 ABCשלום עולם 123 ABC') diff --git a/tests/e2e/specs/workbench.spec.ts b/tests/e2e/specs/workbench.spec.ts index f81874ae..08f33ec3 100644 --- a/tests/e2e/specs/workbench.spec.ts +++ b/tests/e2e/specs/workbench.spec.ts @@ -170,9 +170,11 @@ test('keeps session configuration keyboard focus inside the dialog', async ({ await expect(dialog).toBeVisible() await dialog.getByRole('button', { name: '关闭', exact: true }).focus() await page.keyboard.press('Shift+Tab') - await expect( - dialog.getByRole('button', { name: '取消', exact: true }), - ).toBeFocused() + // Native dialogs may focus the dialog surface at the traversal boundary. + await expect(trigger).not.toBeFocused() + await expect.poll(() => dialog.evaluate(element => element.contains(document.activeElement))).toBe(true) + await page.keyboard.press('Tab') + await expect.poll(() => dialog.evaluate(element => element.contains(document.activeElement))).toBe(true) await page.keyboard.press('Control+k') await expect(page.getByRole('dialog', { name: '创建向导' })).toHaveCount(0) await page.keyboard.press('Escape') @@ -180,6 +182,27 @@ test('keeps session configuration keyboard focus inside the dialog', async ({ await expect(trigger).toBeFocused() }) +test('keeps deck selector arrow keys native instead of turning preview pages', async ({ page }) => { + await page.goto('/') + const picker = page.getByRole('combobox', { name: 'Preview deck', exact: true }) + await expect(picker).toBeEnabled() + await picker.selectOption({ index: 0 }) + const first = await picker.inputValue() + await picker.evaluate(element => { + element.addEventListener('keydown', event => { + element.setAttribute('data-key-prevented', String(event.defaultPrevented)) + }) + }) + await picker.press('ArrowRight') + await expect(picker).not.toHaveValue(first) + await expect(picker).toHaveAttribute('data-key-prevented', 'false') + await expect(picker).toBeFocused() + const heights = await page.locator('.preview-identity select, .page-indicator input, .preview-actions > button, .preview-more > summary') + .evaluateAll(elements => elements.map(element => element.getBoundingClientRect().height)) + expect(heights.length).toBeGreaterThanOrEqual(6) + heights.forEach(height => expect(height).toBe(24)) +}) + test('uses the shared button and field styles throughout the creation wizard', async ({ page, }) => { @@ -193,13 +216,7 @@ test('uses the shared button and field styles throughout the creation wizard', a const wizard = page.getByRole('dialog', { name: '创建向导' }) const next = wizard.getByRole('button', { name: '保存并继续', exact: true }) await expect(next).toBeEnabled() - await expect(next).toHaveClass(/fp-button--primary/) - await expect(next).toHaveClass(/fp-button--md/) - await expect(wizard.getByRole('button', { name: '稍后继续' })).toHaveClass( - /fp-button--secondary/, - ) - await expect(wizard.getByLabel('推荐选项')).toHaveClass(/fp-select/) - await expect(wizard.getByLabel('本步备注')).toHaveClass(/fp-textarea/) + await expect(next).toHaveCSS('background-color', 'rgb(21, 95, 184)') await wizard.getByLabel('推荐选项').selectOption('从零创建') await wizard.getByLabel('本步备注').fill('组件库表单验证') await wizard.getByLabel('锁定本步决策').check() @@ -215,16 +232,16 @@ test('uses the shared button and field styles throughout the creation wizard', a test('switches color modes and restores the saved choice', async ({ page }) => { await page.emulateMedia({ colorScheme: 'light' }) await page.goto('/') - await expect(page.locator('html')).toHaveAttribute('data-theme', 'light') + await expect(page.locator('html')).toHaveAttribute('data-fastui-theme', 'light') await page.getByRole('button', { name: '切换到深色模式' }).click() - await expect(page.locator('html')).toHaveAttribute('data-theme', 'dark') + await expect(page.locator('html')).toHaveAttribute('data-fastui-theme', 'dark') await expect( page.getByRole('button', { name: '切换到浅色模式' }), ).toHaveAttribute('aria-pressed', 'true') await page.reload() - await expect(page.locator('html')).toHaveAttribute('data-theme', 'dark') + await expect(page.locator('html')).toHaveAttribute('data-fastui-theme', 'dark') await page.getByRole('button', { name: '切换到浅色模式' }).click() - await expect(page.locator('html')).toHaveAttribute('data-theme', 'light') + await expect(page.locator('html')).toHaveAttribute('data-fastui-theme', 'light') expect( await page.evaluate(() => localStorage.getItem('fastppt.color-mode')), ).toBe('light') @@ -235,13 +252,13 @@ test('follows the system color scheme until the user selects a mode', async ({ }) => { await page.emulateMedia({ colorScheme: 'dark' }) await page.goto('/') - await expect(page.locator('html')).toHaveAttribute('data-theme', 'dark') + await expect(page.locator('html')).toHaveAttribute('data-fastui-theme', 'dark') await page.emulateMedia({ colorScheme: 'light' }) - await expect(page.locator('html')).toHaveAttribute('data-theme', 'light') + await expect(page.locator('html')).toHaveAttribute('data-fastui-theme', 'light') await page.getByRole('button', { name: '切换到深色模式' }).click() await page.emulateMedia({ colorScheme: 'dark' }) await page.emulateMedia({ colorScheme: 'light' }) - await expect(page.locator('html')).toHaveAttribute('data-theme', 'dark') + await expect(page.locator('html')).toHaveAttribute('data-fastui-theme', 'dark') }) test('keeps the unsaved editor draft when changing color modes', async ({ diff --git a/themes/slidev-theme-academy/assets/logo.png b/themes/slidev-theme-academy/assets/logo.png new file mode 100644 index 00000000..54941a8a Binary files /dev/null and b/themes/slidev-theme-academy/assets/logo.png differ diff --git a/themes/slidev-theme-academy/public/ATLAS/ATLAS-Detector.webp b/themes/slidev-theme-academy/public/ATLAS/ATLAS-Detector.webp new file mode 100644 index 00000000..0b9a3b2d Binary files /dev/null and b/themes/slidev-theme-academy/public/ATLAS/ATLAS-Detector.webp differ diff --git a/themes/slidev-theme-academy/public/ATLAS/ATLAS-Logo.png b/themes/slidev-theme-academy/public/ATLAS/ATLAS-Logo.png new file mode 100644 index 00000000..5dbc4758 Binary files /dev/null and b/themes/slidev-theme-academy/public/ATLAS/ATLAS-Logo.png differ diff --git a/themes/slidev-theme-academy/public/videos/sample_video.mp4 b/themes/slidev-theme-academy/public/videos/sample_video.mp4 new file mode 100644 index 00000000..bf25b6c6 Binary files /dev/null and b/themes/slidev-theme-academy/public/videos/sample_video.mp4 differ diff --git a/themes/slidev-theme-landing/public/LAB.png b/themes/slidev-theme-landing/public/LAB.png new file mode 100644 index 00000000..a595376f Binary files /dev/null and b/themes/slidev-theme-landing/public/LAB.png differ diff --git a/themes/slidev-theme-landing/public/WHU.png b/themes/slidev-theme-landing/public/WHU.png new file mode 100644 index 00000000..ed02a648 Binary files /dev/null and b/themes/slidev-theme-landing/public/WHU.png differ diff --git a/themes/slidev-theme-nmt/public/images/ajg-designer.png b/themes/slidev-theme-nmt/public/images/ajg-designer.png new file mode 100644 index 00000000..73e5dd4a Binary files /dev/null and b/themes/slidev-theme-nmt/public/images/ajg-designer.png differ diff --git a/themes/slidev-theme-practicum/public/decor/decor-17.png b/themes/slidev-theme-practicum/public/decor/decor-17.png new file mode 100644 index 00000000..78e47e5f Binary files /dev/null and b/themes/slidev-theme-practicum/public/decor/decor-17.png differ diff --git a/themes/slidev-theme-practicum/public/decor/decor-18.png b/themes/slidev-theme-practicum/public/decor/decor-18.png new file mode 100644 index 00000000..3f6fa975 Binary files /dev/null and b/themes/slidev-theme-practicum/public/decor/decor-18.png differ diff --git a/themes/slidev-theme-practicum/public/decor/decor-2.png b/themes/slidev-theme-practicum/public/decor/decor-2.png new file mode 100644 index 00000000..3decd329 Binary files /dev/null and b/themes/slidev-theme-practicum/public/decor/decor-2.png differ diff --git a/themes/slidev-theme-practicum/public/decor/decor-5.png b/themes/slidev-theme-practicum/public/decor/decor-5.png new file mode 100644 index 00000000..cce0957d Binary files /dev/null and b/themes/slidev-theme-practicum/public/decor/decor-5.png differ diff --git a/themes/slidev-theme-practicum/public/decor/decor-6.png b/themes/slidev-theme-practicum/public/decor/decor-6.png new file mode 100644 index 00000000..c47e4251 Binary files /dev/null and b/themes/slidev-theme-practicum/public/decor/decor-6.png differ diff --git a/themes/slidev-theme-practicum/public/decor/decor-7.png b/themes/slidev-theme-practicum/public/decor/decor-7.png new file mode 100644 index 00000000..61785fcd Binary files /dev/null and b/themes/slidev-theme-practicum/public/decor/decor-7.png differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-1.webp b/themes/slidev-theme-practicum/public/photos/photo-1.webp new file mode 100644 index 00000000..99006f80 Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-1.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-10.webp b/themes/slidev-theme-practicum/public/photos/photo-10.webp new file mode 100644 index 00000000..d8aec4fc Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-10.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-11.webp b/themes/slidev-theme-practicum/public/photos/photo-11.webp new file mode 100644 index 00000000..4990b635 Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-11.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-12.webp b/themes/slidev-theme-practicum/public/photos/photo-12.webp new file mode 100644 index 00000000..7effc755 Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-12.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-13.webp b/themes/slidev-theme-practicum/public/photos/photo-13.webp new file mode 100644 index 00000000..796341f5 Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-13.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-14.webp b/themes/slidev-theme-practicum/public/photos/photo-14.webp new file mode 100644 index 00000000..86bebbdd Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-14.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-15.webp b/themes/slidev-theme-practicum/public/photos/photo-15.webp new file mode 100644 index 00000000..44404c73 Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-15.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-16.webp b/themes/slidev-theme-practicum/public/photos/photo-16.webp new file mode 100644 index 00000000..77bca4c3 Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-16.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-17.webp b/themes/slidev-theme-practicum/public/photos/photo-17.webp new file mode 100644 index 00000000..efcd644d Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-17.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-18.webp b/themes/slidev-theme-practicum/public/photos/photo-18.webp new file mode 100644 index 00000000..3500fb80 Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-18.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-19.webp b/themes/slidev-theme-practicum/public/photos/photo-19.webp new file mode 100644 index 00000000..04bc0364 Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-19.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-2.webp b/themes/slidev-theme-practicum/public/photos/photo-2.webp new file mode 100644 index 00000000..e40ad80d Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-2.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-20.webp b/themes/slidev-theme-practicum/public/photos/photo-20.webp new file mode 100644 index 00000000..4cf67d66 Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-20.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-21.webp b/themes/slidev-theme-practicum/public/photos/photo-21.webp new file mode 100644 index 00000000..59915ba6 Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-21.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-22.webp b/themes/slidev-theme-practicum/public/photos/photo-22.webp new file mode 100644 index 00000000..aedf975f Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-22.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-23.webp b/themes/slidev-theme-practicum/public/photos/photo-23.webp new file mode 100644 index 00000000..ae712b29 Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-23.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-24.webp b/themes/slidev-theme-practicum/public/photos/photo-24.webp new file mode 100644 index 00000000..396d8773 Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-24.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-25.webp b/themes/slidev-theme-practicum/public/photos/photo-25.webp new file mode 100644 index 00000000..13416241 Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-25.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-26.webp b/themes/slidev-theme-practicum/public/photos/photo-26.webp new file mode 100644 index 00000000..b4fd2a13 Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-26.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-27.webp b/themes/slidev-theme-practicum/public/photos/photo-27.webp new file mode 100644 index 00000000..105f225f Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-27.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-28.webp b/themes/slidev-theme-practicum/public/photos/photo-28.webp new file mode 100644 index 00000000..ffb36ed4 Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-28.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-29.webp b/themes/slidev-theme-practicum/public/photos/photo-29.webp new file mode 100644 index 00000000..9ad1d2e4 Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-29.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-3.webp b/themes/slidev-theme-practicum/public/photos/photo-3.webp new file mode 100644 index 00000000..cf1b2760 Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-3.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-30.webp b/themes/slidev-theme-practicum/public/photos/photo-30.webp new file mode 100644 index 00000000..ccb094a4 Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-30.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-4.webp b/themes/slidev-theme-practicum/public/photos/photo-4.webp new file mode 100644 index 00000000..1adbf5b8 Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-4.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-5.webp b/themes/slidev-theme-practicum/public/photos/photo-5.webp new file mode 100644 index 00000000..487383e2 Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-5.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-6.webp b/themes/slidev-theme-practicum/public/photos/photo-6.webp new file mode 100644 index 00000000..4e136d92 Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-6.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-7.webp b/themes/slidev-theme-practicum/public/photos/photo-7.webp new file mode 100644 index 00000000..7e224682 Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-7.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-8.webp b/themes/slidev-theme-practicum/public/photos/photo-8.webp new file mode 100644 index 00000000..b615f00c Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-8.webp differ diff --git a/themes/slidev-theme-practicum/public/photos/photo-9.webp b/themes/slidev-theme-practicum/public/photos/photo-9.webp new file mode 100644 index 00000000..39d76d0e Binary files /dev/null and b/themes/slidev-theme-practicum/public/photos/photo-9.webp differ diff --git a/themes/slidev-theme-tud-db/assets/fonts/FiraCode-VariableFont_wght.ttf b/themes/slidev-theme-tud-db/assets/fonts/FiraCode-VariableFont_wght.ttf new file mode 100644 index 00000000..d7077f1d Binary files /dev/null and b/themes/slidev-theme-tud-db/assets/fonts/FiraCode-VariableFont_wght.ttf differ diff --git a/themes/slidev-theme-tud-db/assets/fonts/NotoSans-Italic-VariableFont_wdth,wght.ttf b/themes/slidev-theme-tud-db/assets/fonts/NotoSans-Italic-VariableFont_wdth,wght.ttf new file mode 100644 index 00000000..6245ba01 Binary files /dev/null and b/themes/slidev-theme-tud-db/assets/fonts/NotoSans-Italic-VariableFont_wdth,wght.ttf differ diff --git a/themes/slidev-theme-tud-db/assets/fonts/NotoSans-VariableFont_wdth,wght.ttf b/themes/slidev-theme-tud-db/assets/fonts/NotoSans-VariableFont_wdth,wght.ttf new file mode 100644 index 00000000..9530d84d Binary files /dev/null and b/themes/slidev-theme-tud-db/assets/fonts/NotoSans-VariableFont_wdth,wght.ttf differ