From de5cf15734447ad3f648ed6494348693533b56b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Viktor=20L=C3=A1z=C3=A1r?= Date: Fri, 17 Apr 2026 11:31:02 +0200 Subject: [PATCH 01/15] chore: initial publish --- .changeset/lazy-terms-invent.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .changeset/lazy-terms-invent.md diff --git a/.changeset/lazy-terms-invent.md b/.changeset/lazy-terms-invent.md new file mode 100644 index 0000000..5acc216 --- /dev/null +++ b/.changeset/lazy-terms-invent.md @@ -0,0 +1,19 @@ +--- +"@virtual-frame/analog": patch +"@virtual-frame/angular": patch +"virtual-frame": patch +"@virtual-frame/next": patch +"@virtual-frame/nuxt": patch +"@virtual-frame/react": patch +"@virtual-frame/react-router": patch +"@virtual-frame/react-server": patch +"@virtual-frame/solid": patch +"@virtual-frame/solid-start": patch +"@virtual-frame/store": patch +"@virtual-frame/svelte": patch +"@virtual-frame/sveltekit": patch +"@virtual-frame/tanstack-start": patch +"@virtual-frame/vue": patch +--- + +Initial publish From 78e03e528400db6a63765721213108103aaece3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Viktor=20L=C3=A1z=C3=A1r?= Date: Fri, 17 Apr 2026 11:50:26 +0200 Subject: [PATCH 02/15] fix: workflows and format --- .changeset/config.json | 5 +- .github/actions/setup/action.yml | 13 +- .github/workflows/ci.yml | 14 +- CODE_OF_CONDUCT.md | 22 +- README.md | 5 +- SECURITY.md | 14 +- SUPPORT.md | 18 +- docs/.vitepress/theme/Footer.vue | 24 +- docs/.vitepress/theme/LandingContent.vue | 212 +++-- docs/.vitepress/theme/custom.css | 195 ++++- docs/api/index.md | 84 +- docs/guide/analog.md | 54 +- docs/guide/angular.md | 43 +- docs/guide/cross-origin.md | 74 +- docs/guide/getting-started.md | 16 +- docs/guide/nextjs.md | 53 +- docs/guide/nuxt.md | 39 +- docs/guide/react-router.md | 50 +- docs/guide/react-server.md | 65 +- docs/guide/react.md | 44 +- docs/guide/selector.md | 26 +- docs/guide/shadow-dom.md | 44 +- docs/guide/solid-start.md | 33 +- docs/guide/solid.md | 48 +- docs/guide/ssr.md | 53 +- docs/guide/store.md | 100 ++- docs/guide/streaming-fps.md | 41 +- docs/guide/svelte.md | 32 +- docs/guide/sveltekit.md | 21 +- docs/guide/tanstack-start.md | 50 +- docs/guide/testing.md | 15 +- docs/guide/troubleshooting.md | 6 +- docs/guide/vanilla.md | 34 +- docs/guide/vue.md | 42 +- docs/guide/what-is-virtual-frame.md | 8 +- e2e/helpers/ports.ts | 39 +- e2e/helpers/server.ts | 51 +- e2e/specs/analog.spec.ts | 10 +- e2e/specs/angular.spec.ts | 22 +- e2e/specs/hono-ssr.spec.ts | 15 +- e2e/specs/nextjs-app.spec.ts | 28 +- e2e/specs/nextjs-pages.spec.ts | 12 +- e2e/specs/nuxt.spec.ts | 10 +- e2e/specs/react-router.spec.ts | 4 +- e2e/specs/react-server.spec.ts | 16 +- e2e/specs/react.spec.ts | 29 +- e2e/specs/rspack-mf.spec.ts | 44 +- e2e/specs/solid-start.spec.ts | 8 +- e2e/specs/solid.spec.ts | 22 +- e2e/specs/svelte.spec.ts | 18 +- e2e/specs/sveltekit.spec.ts | 22 +- e2e/specs/tanstack-start.spec.ts | 13 +- e2e/specs/vanilla.spec.ts | 24 +- e2e/specs/vue.spec.ts | 22 +- examples/analog-host/package.json | 6 +- examples/analog-host/src/app/app.component.ts | 4 +- .../analog-host/src/app/app.config.server.ts | 5 +- examples/analog-host/src/app/app.config.ts | 3 +- .../analog-host/src/app/pages/index.page.ts | 212 +++-- examples/analog-host/src/main.server.ts | 5 +- examples/analog-host/src/main.ts | 8 +- examples/analog-host/src/routeTree.gen.ts | 6 +- examples/analog-remote/index.html | 5 +- examples/analog-remote/package.json | 6 +- .../analog-remote/src/app/app.component.ts | 12 +- .../src/app/app.config.server.ts | 5 +- examples/analog-remote/src/app/app.config.ts | 6 +- .../app/components/async-data.component.ts | 93 +- .../src/app/components/counter.component.ts | 75 +- .../app/components/echo-input.component.ts | 72 +- .../app/components/navigation.component.ts | 80 +- .../src/app/components/timestamp.component.ts | 18 +- .../app/components/toggle-check.component.ts | 34 +- .../analog-remote/src/app/pages/about.page.ts | 77 +- .../analog-remote/src/app/pages/index.page.ts | 76 +- examples/analog-remote/src/main.server.ts | 8 +- examples/analog-remote/src/main.ts | 8 +- examples/analog-remote/src/routeTree.gen.ts | 8 +- .../src/server/routes/api/slow-data.ts | 3 +- examples/analog-remote/vite.config.ts | 7 +- examples/angular/package.json | 2 +- examples/angular/src/app/app.component.ts | 5 +- examples/hono-ssr/package.json | 2 +- examples/hono-ssr/src/index.tsx | 23 +- .../app/components/HostFrames.tsx | 18 +- examples/nextjs-app-host/app/layout.tsx | 9 +- examples/nextjs-app-host/app/page.tsx | 6 +- examples/nextjs-app-host/tsconfig.json | 14 +- examples/nextjs-app-remote/app/about/page.tsx | 8 +- .../app/components/NextFont.tsx | 12 +- .../app/components/NextHead.tsx | 13 +- .../app/components/NextImage.tsx | 4 +- .../app/components/NextLink.tsx | 3 +- .../app/components/NextSuspense.tsx | 5 +- .../app/components/ToggleCheck.tsx | 6 +- examples/nextjs-app-remote/app/layout.tsx | 6 +- examples/nextjs-app-remote/app/page.tsx | 7 +- examples/nextjs-app-remote/next.config.mjs | 4 +- examples/nextjs-app-remote/tsconfig.json | 14 +- examples/nextjs-pages-host/pages/index.tsx | 30 +- examples/nextjs-pages-host/tsconfig.json | 21 +- .../components/ToggleCheck.tsx | 6 +- examples/nextjs-pages-remote/pages/index.tsx | 7 +- examples/nextjs-pages-remote/tsconfig.json | 21 +- examples/nuxt-host/components/HostFrames.vue | 36 +- examples/nuxt-host/package.json | 4 +- examples/nuxt-host/pages/index.vue | 18 +- examples/nuxt-host/server/api/frame.ts | 5 +- examples/nuxt-remote/components/EchoInput.vue | 6 +- examples/nuxt-remote/components/NuxtAsync.vue | 8 +- examples/nuxt-remote/components/NuxtFont.vue | 19 +- examples/nuxt-remote/components/NuxtHead.vue | 13 +- examples/nuxt-remote/components/NuxtImage.vue | 8 +- examples/nuxt-remote/nuxt.config.ts | 4 +- examples/nuxt-remote/package.json | 4 +- examples/nuxt-remote/pages/about.vue | 8 +- examples/nuxt-remote/pages/index.vue | 13 +- examples/nuxt-remote/server/api/slow-data.ts | 3 +- examples/react-host/src/App.tsx | 8 +- examples/react-remote/src/App.tsx | 4 +- examples/react-remote/src/Counter.tsx | 4 +- .../.react-router/types/+future.ts | 4 +- .../.react-router/types/+routes.ts | 12 +- .../.react-router/types/+server-build.d.ts | 2 +- .../.react-router/types/app/+types/root.ts | 22 +- .../types/app/routes/+types/home.ts | 33 +- .../app/components/HostFrames.tsx | 27 +- examples/react-router-host/app/root.tsx | 12 +- .../react-router-host/app/routes/home.tsx | 11 +- .../react-router-host/app/styles/globals.css | 8 +- examples/react-router-host/package.json | 6 +- .../.react-router/types/+future.ts | 4 +- .../.react-router/types/+routes.ts | 12 +- .../.react-router/types/+server-build.d.ts | 2 +- .../.react-router/types/app/+types/root.ts | 22 +- .../types/app/routes/+types/home.ts | 33 +- .../app/components/ToggleCheck.tsx | 6 +- examples/react-router-remote/app/root.tsx | 12 +- .../react-router-remote/app/routes/home.tsx | 6 +- .../app/styles/globals.css | 8 +- examples/react-router-remote/package.json | 6 +- .../app/components/HostFrames.tsx | 18 +- .../app/components/StoreControls.tsx | 4 +- examples/react-server-host/app/layout.tsx | 6 +- examples/react-server-host/app/page.tsx | 11 +- examples/react-server-host/package.json | 2 +- .../app/components/ToggleCheck.tsx | 6 +- examples/react-server-remote/app/layout.tsx | 6 +- examples/react-server-remote/app/page.tsx | 7 +- examples/rspack-mf-host/@mf-types/index.d.ts | 41 +- .../@mf-types/mf_remote/Counter.d.ts | 4 +- .../@mf-types/mf_remote/apis.d.ts | 5 +- .../compiled-types/components/Counter.d.ts | 9 +- examples/rspack-mf-host/README.md | 10 +- examples/rspack-mf-host/src/App.tsx | 29 +- examples/rspack-mf-remote/rspack.config.js | 7 +- examples/rspack-mf-remote/src/App.tsx | 5 +- .../src/components/Counter.tsx | 12 +- examples/shared/forms.html | 42 +- examples/shared/hello.html | 124 +-- examples/shared/media.html | 21 +- examples/shared/showcase.html | 109 +-- examples/shared/svg.html | 193 +---- examples/solid-start-host/app.config.ts | 6 +- examples/solid-start-host/package.json | 4 +- examples/solid-start-host/src/app.tsx | 4 +- .../solid-start-host/src/routes/index.tsx | 14 +- examples/solid-start-remote/app.config.ts | 6 +- examples/solid-start-remote/package.json | 4 +- examples/solid-start-remote/src/app.tsx | 4 +- .../solid-start-remote/src/routes/about.tsx | 7 +- .../solid-start-remote/src/routes/index.tsx | 14 +- examples/solid/src/App.jsx | 3 +- .../sveltekit-host/src/routes/+page.server.ts | 5 +- .../src/components/HostFrames.tsx | 28 +- .../tanstack-start-host/src/routeTree.gen.ts | 62 +- .../tanstack-start-host/src/routes/__root.tsx | 10 +- .../tanstack-start-host/src/routes/index.tsx | 11 +- .../src/styles/globals.css | 8 +- .../src/components/ToggleCheck.tsx | 6 +- .../src/routeTree.gen.ts | 62 +- .../src/routes/__root.tsx | 10 +- .../src/routes/index.tsx | 6 +- .../src/styles/globals.css | 8 +- examples/vanilla/index.html | 35 +- examples/vue/package.json | 4 +- examples/vue/src/App.vue | 5 +- packages/analog/src/client.ts | 20 +- packages/analog/test/client.test.ts | 13 +- packages/analog/test/server.test.ts | 2 +- packages/analog/vitest.config.ts | 3 +- packages/angular/src/directive.ts | 34 +- packages/angular/src/store.ts | 8 +- packages/angular/vitest.config.ts | 3 +- packages/core/src/bridge.ts | 45 +- packages/core/src/core.ts | 801 ++++++------------ packages/core/src/element.ts | 18 +- packages/core/src/ssr.ts | 65 +- packages/core/test/advanced.test.ts | 30 +- packages/core/test/bridge.test.ts | 16 +- packages/core/test/canvas.test.ts | 12 +- packages/core/test/core.test.ts | 44 +- packages/core/test/element.test.ts | 3 +- packages/core/test/events.test.ts | 25 +- .../core/test/fixtures/accessibility.html | 7 +- packages/core/test/fixtures/forms.html | 8 +- packages/core/test/fixtures/misc.html | 14 +- packages/core/test/fixtures/svg.html | 44 +- packages/core/test/fonts.test.ts | 17 +- packages/core/test/helpers.ts | 3 +- packages/core/test/mutations.test.ts | 12 +- packages/core/test/projection.test.ts | 12 +- packages/core/test/scroll.test.ts | 14 +- packages/core/test/svg.test.ts | 10 +- packages/core/vitest.config.ts | 3 +- packages/next/src/client.tsx | 16 +- packages/next/src/index.server.tsx | 9 +- packages/next/src/index.ts | 5 +- packages/next/src/store.ts | 8 +- packages/next/test/VirtualFrame.test.tsx | 8 +- packages/next/test/setup.ts | 3 +- packages/next/tsdown.config.ts | 8 +- packages/next/vitest.config.ts | 10 +- packages/nuxt/src/VirtualFrameSSR.vue | 249 +++--- packages/nuxt/test/VirtualFrame.test.ts | 6 +- packages/nuxt/vitest.config.ts | 3 +- packages/react-router/src/client.tsx | 19 +- packages/react-router/src/index.ts | 4 +- packages/react-router/src/store.ts | 8 +- .../react-router/test/VirtualFrame.test.tsx | 17 +- packages/react-router/test/setup.ts | 3 +- packages/react-router/vitest.config.ts | 10 +- packages/react-server/src/cache.ts | 5 +- packages/react-server/src/client.tsx | 15 +- packages/react-server/src/index.server.tsx | 4 +- packages/react-server/src/store.ts | 8 +- .../react-server/test/VirtualFrame.test.tsx | 12 +- packages/react-server/test/setup.ts | 3 +- packages/react-server/tsdown.config.ts | 17 +- packages/react-server/vitest.config.ts | 10 +- packages/react/src/index.tsx | 53 +- packages/react/test/VirtualFrame.test.tsx | 11 +- packages/react/test/setup.ts | 3 +- packages/react/vite.config.ts | 7 +- packages/react/vitest.config.ts | 10 +- packages/solid-start/src/VirtualFrameSSR.tsx | 37 +- packages/solid-start/src/index.tsx | 5 +- packages/solid-start/test/client.test.tsx | 42 +- packages/solid-start/test/server.test.ts | 7 +- packages/solid-start/vite.config.ts | 5 +- packages/solid-start/vitest.config.ts | 8 +- packages/solid/src/index.tsx | 43 +- packages/solid/test/VirtualFrame.test.tsx | 7 +- packages/solid/vite.config.ts | 5 +- packages/solid/vitest.config.ts | 3 +- packages/store/src/index.ts | 8 +- packages/store/src/operation.ts | 9 +- packages/store/src/proxy.ts | 49 +- packages/store/test/log.test.ts | 63 +- packages/store/test/operation.test.ts | 111 +-- packages/store/test/port.test.ts | 8 +- packages/store/vitest.config.ts | 3 +- packages/svelte/src/composables.ts | 16 +- packages/svelte/test/VirtualFrame.test.ts | 12 +- packages/svelte/vite.config.ts | 4 +- packages/svelte/vitest.config.ts | 3 +- packages/sveltekit/src/index.ts | 5 +- packages/sveltekit/test/server.test.ts | 7 +- packages/sveltekit/vitest.config.ts | 8 +- packages/tanstack-start/src/client.tsx | 19 +- packages/tanstack-start/src/index.ts | 4 +- packages/tanstack-start/src/store.ts | 8 +- .../tanstack-start/test/VirtualFrame.test.tsx | 17 +- packages/tanstack-start/test/setup.ts | 3 +- packages/tanstack-start/tsdown.config.ts | 6 +- packages/tanstack-start/vitest.config.ts | 10 +- packages/vue/src/VirtualFrame.vue | 214 +++-- packages/vue/src/composables.ts | 21 +- packages/vue/test/VirtualFrame.test.ts | 6 +- packages/vue/vitest.config.ts | 3 +- src/routeTree.gen.ts | 19 +- 281 files changed, 2776 insertions(+), 4356 deletions(-) diff --git a/.changeset/config.json b/.changeset/config.json index 3bcb600..26ffa0c 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -1,9 +1,6 @@ { "$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json", - "changelog": [ - "@changesets/changelog-github", - { "repo": "level0x40/virtual-frame" } - ], + "changelog": ["@changesets/changelog-github", { "repo": "level0x40/virtual-frame" }], "commit": false, "fixed": [], "linked": [], diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index ad54d5b..757081a 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -1,5 +1,5 @@ name: Setup -description: Install pnpm, set up Node.js with pnpm cache, and install dependencies (frozen lockfile). +description: Install Vite+ (vp), set up Node.js with dependency caching, and install dependencies (frozen lockfile). inputs: node-version: @@ -10,15 +10,12 @@ inputs: runs: using: composite steps: - - name: Setup pnpm - uses: pnpm/action-setup@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 + - name: Setup Vite+ + uses: voidzero-dev/setup-vp@v1 with: node-version: ${{ inputs.node-version }} - cache: pnpm + cache: true - name: Install dependencies shell: bash - run: pnpm install --frozen-lockfile + run: vp install --frozen-lockfile diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 61bc4fd..8768480 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -61,10 +61,10 @@ jobs: - uses: ./.github/actions/setup - name: Check formatting - run: pnpm format:check + run: vp run format:check - name: Lint - run: pnpm lint + run: vp run lint # ────────────────────────────────────────────────────────────────────── # Type-check across the workspace. Today this is a real CI gap. @@ -78,7 +78,7 @@ jobs: - uses: ./.github/actions/setup - name: Typecheck all packages - run: pnpm typecheck + run: vp run typecheck # ────────────────────────────────────────────────────────────────────── # Unit + browser tests via vitest. @@ -96,7 +96,7 @@ jobs: run: pnpm exec playwright install --with-deps chromium - name: Run vitest - run: pnpm test:run + run: vp run test:run - name: Upload coverage if: always() @@ -121,7 +121,7 @@ jobs: - uses: ./.github/actions/setup - name: Build all packages - run: pnpm build + run: vp run build # ────────────────────────────────────────────────────────────────────── # End-to-end Playwright suite — boots real example apps in dev and prod @@ -141,7 +141,7 @@ jobs: run: pnpm exec playwright install --with-deps chromium - name: Run E2E suite - run: pnpm test:e2e + run: vp run test:e2e - name: Upload Playwright report if: failure() @@ -173,7 +173,7 @@ jobs: - uses: ./.github/actions/setup - name: Verify changeset present - run: pnpm changeset status --since=origin/${{ github.base_ref }} + run: vp run changeset status --since=origin/${{ github.base_ref }} # ────────────────────────────────────────────────────────────────────── # Aggregate gate — single status for branch protection to require. diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 67f9def..1cddbb2 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,4 +1,3 @@ - # Contributor Covenant Code of Conduct ## Our Pledge @@ -11,19 +10,19 @@ We pledge to act and interact in ways that contribute to an open, welcoming, div Examples of behavior that contributes to a positive environment for our community include: -* Demonstrating empathy and kindness toward other people -* Being respectful of differing opinions, viewpoints, and experiences -* Giving and gracefully accepting constructive feedback -* Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience -* Focusing on what is best not just for us as individuals, but for the overall community +- Demonstrating empathy and kindness toward other people +- Being respectful of differing opinions, viewpoints, and experiences +- Giving and gracefully accepting constructive feedback +- Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience +- Focusing on what is best not just for us as individuals, but for the overall community Examples of unacceptable behavior include: -* The use of sexualized language or imagery, and sexual attention or advances of any kind -* Trolling, insulting or derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or email address, without their explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting +- The use of sexualized language or imagery, and sexual attention or advances of any kind +- Trolling, insulting or derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or email address, without their explicit permission +- Other conduct which could reasonably be considered inappropriate in a professional setting ## Enforcement Responsibilities @@ -82,4 +81,3 @@ For answers to common questions about this code of conduct, see the FAQ at [http [Mozilla CoC]: https://github.com/mozilla/diversity [FAQ]: https://www.contributor-covenant.org/faq [translations]: https://www.contributor-covenant.org/translations - diff --git a/README.md b/README.md index 060ac00..73fb11d 100644 --- a/README.md +++ b/README.md @@ -102,10 +102,7 @@ npm install virtual-frame import "virtual-frame/element"; - + ``` ### React diff --git a/SECURITY.md b/SECURITY.md index ff5d943..f71891e 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -6,10 +6,10 @@ We take the security of Virtual Frame seriously. This document explains how to r Security fixes land on the latest minor release line of each package. We do not back-port to older minors. -| Package family | Supported | -| ---------------------------- | ---------------------------------- | -| `virtual-frame` (core) | Latest minor | -| `@virtual-frame/*` bindings | Latest minor | +| Package family | Supported | +| ---------------------------------------------------------- | ------------ | +| `virtual-frame` (core) | Latest minor | +| `@virtual-frame/*` bindings | Latest minor | | `@virtual-frame/*` integrations (Next/Nuxt/SvelteKit/etc.) | Latest minor | While the project remains pre-1.0 (`0.x`), every `0.x` minor bump may include breaking changes; security fixes target the most recent published minor only. @@ -39,11 +39,11 @@ If you'd like to encrypt your report, request our PGP key in the first message. ### What to expect -| Timeframe | What we do | -| ------------------ | -------------------------------------------------------------------------- | +| Timeframe | What we do | +| ----------------------- | -------------------------------------------------------------------------- | | Within 3 business days | Initial acknowledgement — we've received your report and are assessing it. | | Within 10 business days | Triage outcome — confirmed, declined, or duplicate, with reasoning. | -| Within 90 days | Fix released, advisory published, and credit assigned (if accepted). | +| Within 90 days | Fix released, advisory published, and credit assigned (if accepted). | For critical issues actively exploited in the wild, we'll work with you on an accelerated disclosure timeline. diff --git a/SUPPORT.md b/SUPPORT.md index df69cd5..8438e5b 100644 --- a/SUPPORT.md +++ b/SUPPORT.md @@ -13,15 +13,15 @@ The fastest answer is usually in the docs: ## Where to ask -| You want to… | Go here | -| ---------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | -| Ask a question, share an idea, get architectural advice | [GitHub Discussions](https://github.com/level0x40/virtual-frame/discussions) | -| Report a reproducible bug | [Open a bug report](https://github.com/level0x40/virtual-frame/issues/new?template=bug_report.yml) | -| Request a feature or API change | [Open a feature request](https://github.com/level0x40/virtual-frame/issues/new?template=feature_request.yml) | -| Request a new framework binding | [Open an integration request](https://github.com/level0x40/virtual-frame/issues/new?template=framework_integration.yml) | -| Report a documentation problem | [Open a docs issue](https://github.com/level0x40/virtual-frame/issues/new?template=documentation.yml) | -| Report a security vulnerability | See [SECURITY.md](./SECURITY.md) — **do not open a public issue** | -| Discuss commercial use, licensing, partnerships, or consulting | | +| You want to… | Go here | +| -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | +| Ask a question, share an idea, get architectural advice | [GitHub Discussions](https://github.com/level0x40/virtual-frame/discussions) | +| Report a reproducible bug | [Open a bug report](https://github.com/level0x40/virtual-frame/issues/new?template=bug_report.yml) | +| Request a feature or API change | [Open a feature request](https://github.com/level0x40/virtual-frame/issues/new?template=feature_request.yml) | +| Request a new framework binding | [Open an integration request](https://github.com/level0x40/virtual-frame/issues/new?template=framework_integration.yml) | +| Report a documentation problem | [Open a docs issue](https://github.com/level0x40/virtual-frame/issues/new?template=documentation.yml) | +| Report a security vulnerability | See [SECURITY.md](./SECURITY.md) — **do not open a public issue** | +| Discuss commercial use, licensing, partnerships, or consulting | | ## Before opening an issue diff --git a/docs/.vitepress/theme/Footer.vue b/docs/.vitepress/theme/Footer.vue index 158b208..351e779 100644 --- a/docs/.vitepress/theme/Footer.vue +++ b/docs/.vitepress/theme/Footer.vue @@ -2,16 +2,8 @@