void 0.1.6 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENT_PROMPT.md +15 -0
- package/README.md +62 -123
- package/dist/auth-BdsJ0Aff.d.mts +43 -0
- package/dist/auth-cmd-Dx8oPKZC.mjs +43 -0
- package/dist/auth-migrations-BAtAck2g.mjs +117 -0
- package/dist/better-auth-shared-C9_GHSkR.d.mts +71 -0
- package/dist/better-auth-shared-CdYmQGry.mjs +163 -0
- package/dist/cache-W82I8ihI.mjs +47 -0
- package/dist/cancel-deploy-BOBTqqh0.mjs +59 -0
- package/dist/cf-access-Dee5cXxL.mjs +22 -0
- package/dist/chunk-DJd-R1mw.mjs +34 -0
- package/dist/cli/cli.d.mts +1 -0
- package/dist/cli/cli.mjs +1807 -0
- package/dist/client-snXOjrp1.mjs +565 -0
- package/dist/collect-CjeZgz5D.mjs +55 -0
- package/dist/config-BIa9HwVX.mjs +573 -0
- package/dist/config-BzM9Dy7T.mjs +37 -0
- package/dist/config-CvHtTM0q.mjs +30 -0
- package/dist/create-project-BIA15W7z.mjs +90 -0
- package/dist/db-DsRoMcfN.mjs +895 -0
- package/dist/defer-DcxEsVH1.mjs +49 -0
- package/dist/delete-DAP6yDc7.mjs +64 -0
- package/dist/deploy-BPKblFx6.mjs +2424 -0
- package/dist/discover-B7FkXBLB.mjs +40 -0
- package/dist/dist-DUyXJLkq.mjs +2667 -0
- package/dist/dist-Dayj3gCK.mjs +1287 -0
- package/dist/domain-BGofcQ6I.mjs +79 -0
- package/dist/dotenv-DwO4ti0Z.mjs +173 -0
- package/dist/drizzle-NnudE_UN.mjs +232 -0
- package/dist/env-CyG3tvU0.mjs +301 -0
- package/dist/env-helpers-Dr9Y7RnE.d.mts +52 -0
- package/dist/env-raw-BDL4TvdN.mjs +32 -0
- package/dist/env-types-DknSA4SO.mjs +64 -0
- package/dist/env-validation-DJKjR_8q.mjs +163 -0
- package/dist/fetch-error-BQ8sZ5Nd.mjs +266 -0
- package/dist/fetch-error-CVZ5CGA-.d.mts +20 -0
- package/dist/gen-U0Ktr4Zd.mjs +761 -0
- package/dist/handler-B0ds0OHJ.d.mts +269 -0
- package/dist/head-P-egrtFE.d.mts +45 -0
- package/dist/headers-DCXc7mDs.mjs +279 -0
- package/dist/index.d.mts +32 -0
- package/dist/index.mjs +4695 -0
- package/dist/init-C7wS5iGP.mjs +2625 -0
- package/dist/link-p2R6NbgN.mjs +49 -0
- package/dist/list-Bfel-QLc.mjs +113 -0
- package/dist/log-DXdqnmhF.mjs +26 -0
- package/dist/login-CkcXUiIu.mjs +72 -0
- package/dist/logs-DmkrRvx6.mjs +98 -0
- package/dist/magic-string.es-D6g9UnIy.mjs +1011 -0
- package/dist/mcp-CaQzfeUi.mjs +373 -0
- package/dist/node-DDfXj10V.mjs +54 -0
- package/dist/output-BwlcIYSR.mjs +139 -0
- package/dist/pages/client.d.mts +198 -0
- package/dist/pages/client.mjs +980 -0
- package/dist/pages/head-client.d.mts +15 -0
- package/dist/pages/head-client.mjs +90 -0
- package/dist/pages/head.d.mts +2 -0
- package/dist/pages/head.mjs +112 -0
- package/dist/pages/index.d.mts +38 -0
- package/dist/pages/index.mjs +76 -0
- package/dist/pages/islands-plugin.d.mts +50 -0
- package/dist/pages/islands-plugin.mjs +195 -0
- package/dist/pages/prefetch.d.mts +31 -0
- package/dist/pages/prefetch.mjs +90 -0
- package/dist/pages/protocol.d.mts +3 -0
- package/dist/pages/protocol.mjs +193 -0
- package/dist/pages/serialize.d.mts +10 -0
- package/dist/pages/serialize.mjs +14 -0
- package/dist/pathe.M-eThtNZ-D-kmWkCS.mjs +150 -0
- package/dist/plugin-inference-oZ6Ybu2_.mjs +2447 -0
- package/dist/prepare-BAtWufvm.mjs +99 -0
- package/dist/preset-D4I73kT4.mjs +221 -0
- package/dist/project-TqORyHn8.mjs +72 -0
- package/dist/project-cmd-B7lQp3F3.mjs +67 -0
- package/dist/project-slug-CKam8lF9.mjs +11 -0
- package/dist/project-tsconfig-DfkESbDL.mjs +63 -0
- package/dist/protocol-BWzXs2A2.d.mts +34 -0
- package/dist/providers-B3aMxWzP.mjs +67 -0
- package/dist/resolve-project-Br5BR03U.mjs +29 -0
- package/dist/rollback-gyC59l7U.mjs +92 -0
- package/dist/route-types-DReF1gUY.mjs +255 -0
- package/dist/routes-stub.d.mts +55 -0
- package/dist/routes-stub.mjs +1 -0
- package/dist/runner-6Ep3fNQu.mjs +123 -0
- package/dist/runner-pg-D0wWHYnr.mjs +57 -0
- package/dist/runtime/ai.d.mts +127 -0
- package/dist/runtime/ai.mjs +348 -0
- package/dist/runtime/auth-client-react.d.mts +8 -0
- package/dist/runtime/auth-client-react.mjs +6 -0
- package/dist/runtime/auth-client-solid.d.mts +8 -0
- package/dist/runtime/auth-client-solid.mjs +6 -0
- package/dist/runtime/auth-client-svelte.d.mts +8 -0
- package/dist/runtime/auth-client-svelte.mjs +6 -0
- package/dist/runtime/auth-client-vue.d.mts +8 -0
- package/dist/runtime/auth-client-vue.mjs +6 -0
- package/dist/runtime/auth-client.d.mts +8 -0
- package/dist/runtime/auth-client.mjs +6 -0
- package/dist/runtime/auth.d.mts +2 -0
- package/dist/runtime/auth.mjs +22 -0
- package/dist/runtime/better-auth-pg.d.mts +11 -0
- package/dist/runtime/better-auth-pg.mjs +51 -0
- package/dist/runtime/better-auth.d.mts +11 -0
- package/dist/runtime/better-auth.mjs +33 -0
- package/dist/runtime/client.d.mts +6 -0
- package/dist/runtime/client.mjs +5 -0
- package/dist/runtime/db-pg.d.mts +2 -0
- package/dist/runtime/db-pg.mjs +1 -0
- package/dist/runtime/db.d.mts +17 -0
- package/dist/runtime/db.mjs +30 -0
- package/dist/runtime/drizzle-arktype.d.mts +1 -0
- package/dist/runtime/drizzle-arktype.mjs +2 -0
- package/dist/runtime/drizzle-valibot.d.mts +1 -0
- package/dist/runtime/drizzle-valibot.mjs +2 -0
- package/dist/runtime/drizzle-zod.d.mts +1 -0
- package/dist/runtime/drizzle-zod.mjs +2 -0
- package/dist/runtime/env-helpers.d.mts +2 -0
- package/dist/runtime/env-helpers.mjs +173 -0
- package/dist/runtime/env-public-client.d.mts +22 -0
- package/dist/runtime/env-public-client.mjs +54 -0
- package/dist/runtime/env-public.d.mts +143 -0
- package/dist/runtime/env-public.mjs +366 -0
- package/dist/runtime/env.d.mts +13 -0
- package/dist/runtime/env.mjs +51 -0
- package/dist/runtime/fetch-stream.d.mts +51 -0
- package/dist/runtime/fetch-stream.mjs +81 -0
- package/dist/runtime/fetch.d.mts +59 -0
- package/dist/runtime/fetch.mjs +18 -0
- package/dist/runtime/handler.d.mts +3 -0
- package/dist/runtime/handler.mjs +85 -0
- package/dist/runtime/isr.d.mts +26 -0
- package/dist/runtime/isr.mjs +43 -0
- package/dist/runtime/kv.d.mts +48 -0
- package/dist/runtime/kv.mjs +106 -0
- package/dist/runtime/log.d.mts +24 -0
- package/dist/runtime/log.mjs +31 -0
- package/dist/runtime/migration-handler-pg.d.mts +6 -0
- package/dist/runtime/migration-handler-pg.mjs +85 -0
- package/dist/runtime/migration-handler.d.mts +19 -0
- package/dist/runtime/migration-handler.mjs +92 -0
- package/dist/runtime/queues.d.mts +7 -0
- package/dist/runtime/queues.mjs +8 -0
- package/dist/runtime/remote/binding-handler.d.mts +15 -0
- package/dist/runtime/remote/binding-handler.mjs +208 -0
- package/dist/runtime/remote/index.d.mts +8 -0
- package/dist/runtime/remote/index.mjs +461 -0
- package/dist/runtime/response.d.mts +14 -0
- package/dist/runtime/response.mjs +30 -0
- package/dist/runtime/sandbox.d.mts +17 -0
- package/dist/runtime/sandbox.mjs +19 -0
- package/dist/runtime/schema-d1.d.mts +1 -0
- package/dist/runtime/schema-d1.mjs +2 -0
- package/dist/runtime/schema-pg.d.mts +1 -0
- package/dist/runtime/schema-pg.mjs +2 -0
- package/dist/runtime/seed.d.mts +30 -0
- package/dist/runtime/seed.mjs +6 -0
- package/dist/runtime/storage.d.mts +7 -0
- package/dist/runtime/storage.mjs +14 -0
- package/dist/runtime/validator.d.mts +2 -0
- package/dist/runtime/validator.mjs +72 -0
- package/dist/runtime/ws-server.d.mts +26 -0
- package/dist/runtime/ws-server.mjs +296 -0
- package/dist/runtime/ws.d.mts +123 -0
- package/dist/runtime/ws.mjs +103 -0
- package/dist/scan-Ba4hFwlH.mjs +324 -0
- package/dist/scan-C6HMEIdW.mjs +318 -0
- package/dist/secret-CeRSukgM.mjs +109 -0
- package/dist/skills-ipldjlKE.mjs +62 -0
- package/dist/standard-schema-9CRjx-uR.d.mts +42 -0
- package/dist/subcommand-prompt-BKjuNAPb.mjs +349 -0
- package/dist/sveltekit.d.mts +20 -0
- package/dist/sveltekit.mjs +61 -0
- package/dist/types-mHOEwpW4.d.mts +57 -0
- package/dist/validate-CaMavMxu.mjs +146 -0
- package/dist/yarn-pnp-BFqMV_bl.mjs +196 -0
- package/getting-started-prompt.txt +26 -0
- package/package.json +322 -30
- package/schema.json +364 -0
- package/skills/migrate-vite-cloudflare-to-void/SKILL.md +175 -0
- package/skills/void/SKILL.md +75 -0
- package/skills/void/command/void.md +7 -0
- package/skills/void/docs/guide/ai.md +235 -0
- package/skills/void/docs/guide/app-types.md +103 -0
- package/skills/void/docs/guide/auth.md +257 -0
- package/skills/void/docs/guide/database/d1.md +106 -0
- package/skills/void/docs/guide/database/postgresql.md +106 -0
- package/skills/void/docs/guide/database.md +418 -0
- package/skills/void/docs/guide/deployment.md +98 -0
- package/skills/void/docs/guide/edge/headers.md +79 -0
- package/skills/void/docs/guide/edge/prerendering.md +83 -0
- package/skills/void/docs/guide/edge/redirects.md +116 -0
- package/skills/void/docs/guide/edge/revalidation.md +131 -0
- package/skills/void/docs/guide/edge/rewrites.md +354 -0
- package/skills/void/docs/guide/edge/static-assets.md +72 -0
- package/skills/void/docs/guide/env-vars.md +298 -0
- package/skills/void/docs/guide/index.md +80 -0
- package/skills/void/docs/guide/jobs.md +91 -0
- package/skills/void/docs/guide/kv.md +107 -0
- package/skills/void/docs/guide/pages-routing/actions-and-forms.md +419 -0
- package/skills/void/docs/guide/pages-routing/head.md +130 -0
- package/skills/void/docs/guide/pages-routing/islands.md +405 -0
- package/skills/void/docs/guide/pages-routing/layouts.md +362 -0
- package/skills/void/docs/guide/pages-routing/loaders.md +267 -0
- package/skills/void/docs/guide/pages-routing/markdown.md +625 -0
- package/skills/void/docs/guide/pages-routing/overview.md +236 -0
- package/skills/void/docs/guide/pages-routing/view-transitions.md +140 -0
- package/skills/void/docs/guide/queues.md +140 -0
- package/skills/void/docs/guide/quickstart.md +233 -0
- package/skills/void/docs/guide/remote-dev.md +67 -0
- package/skills/void/docs/guide/sandboxes.md +82 -0
- package/skills/void/docs/guide/server-routing.md +246 -0
- package/skills/void/docs/guide/ssg.md +74 -0
- package/skills/void/docs/guide/ssr.md +105 -0
- package/skills/void/docs/guide/storage.md +67 -0
- package/skills/void/docs/guide/type-safety.md +179 -0
- package/skills/void/docs/guide/typed-fetch.md +113 -0
- package/skills/void/docs/guide/websockets.md +190 -0
- package/skills/void/docs/index.md +48 -0
- package/skills/void/docs/integrations/agents.md +84 -0
- package/skills/void/docs/integrations/cloudflare.md +284 -0
- package/skills/void/docs/integrations/frameworks/analog.md +182 -0
- package/skills/void/docs/integrations/frameworks/astro.md +197 -0
- package/skills/void/docs/integrations/frameworks/nuxt.md +164 -0
- package/skills/void/docs/integrations/frameworks/overview.md +136 -0
- package/skills/void/docs/integrations/frameworks/react-router.md +137 -0
- package/skills/void/docs/integrations/frameworks/sveltekit.md +191 -0
- package/skills/void/docs/integrations/frameworks/tanstack-start.md +140 -0
- package/skills/void/docs/integrations/hono.md +97 -0
- package/skills/void/docs/integrations/nodejs-bun-deno.md +210 -0
- package/skills/void/docs/node_modules/@iconify/vue/README.md +408 -0
- package/skills/void/docs/node_modules/@iconify/vue/offline/readme.md +5 -0
- package/skills/void/docs/node_modules/@voidzero-dev/vitepress-theme/README.md +103 -0
- package/skills/void/docs/node_modules/oxc-minify/README.md +78 -0
- package/skills/void/docs/node_modules/reka-ui/README.md +80 -0
- package/skills/void/docs/node_modules/vitepress/README.md +28 -0
- package/skills/void/docs/node_modules/vitepress/template/api-examples.md +49 -0
- package/skills/void/docs/node_modules/vitepress/template/index.md +28 -0
- package/skills/void/docs/node_modules/vitepress/template/markdown-examples.md +85 -0
- package/skills/void/docs/node_modules/vitepress-plugin-group-icons/README.md +101 -0
- package/skills/void/docs/node_modules/void/AGENTS.md +204 -0
- package/skills/void/docs/node_modules/void/AGENT_PROMPT.md +15 -0
- package/skills/void/docs/node_modules/void/README.md +89 -0
- package/skills/void/docs/node_modules/void/node_modules/@clack/prompts/CHANGELOG.md +591 -0
- package/skills/void/docs/node_modules/void/node_modules/@clack/prompts/README.md +375 -0
- package/skills/void/docs/node_modules/void/node_modules/@cloudflare/sandbox/README.md +174 -0
- package/skills/void/docs/node_modules/void/node_modules/@cloudflare/vite-plugin/README.md +37 -0
- package/skills/void/docs/node_modules/void/node_modules/@cloudflare/workers-types/README.md +135 -0
- package/skills/void/docs/node_modules/void/node_modules/@electric-sql/pglite/README.md +189 -0
- package/skills/void/docs/node_modules/void/node_modules/@hono/oauth-providers/CHANGELOG.md +143 -0
- package/skills/void/docs/node_modules/void/node_modules/@hono/oauth-providers/README.md +1272 -0
- package/skills/void/docs/node_modules/void/node_modules/@napi-rs/keyring/README.md +19 -0
- package/skills/void/docs/node_modules/void/node_modules/@types/better-sqlite3/README.md +15 -0
- package/skills/void/docs/node_modules/void/node_modules/@types/node/README.md +15 -0
- package/skills/void/docs/node_modules/void/node_modules/@types/pg/README.md +15 -0
- package/skills/void/docs/node_modules/void/node_modules/@typescript/native-preview/README.md +22 -0
- package/skills/void/docs/node_modules/void/node_modules/@typescript/native-preview/vendor/vscode-jsonrpc/README.md +69 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/README.md +152 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@shikijs/engine-javascript/README.md +9 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@shikijs/transformers/README.md +9 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@types/node/README.md +15 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/gray-matter/CHANGELOG.md +24 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/gray-matter/README.md +565 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-exit/README.md +124 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-anchor/README.md +600 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-attrs/README.md +386 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-container/README.md +95 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-emoji/README.md +101 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/pathe/README.md +73 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/shiki/README.md +15 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/tinyglobby/README.md +25 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/tsdown/README.md +55 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite/LICENSE.md +2230 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite/README.md +20 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vue/README.md +58 -0
- package/skills/void/docs/node_modules/void/node_modules/arktype/README.md +165 -0
- package/skills/void/docs/node_modules/void/node_modules/better-auth/LICENSE.md +20 -0
- package/skills/void/docs/node_modules/void/node_modules/better-auth/README.md +32 -0
- package/skills/void/docs/node_modules/void/node_modules/better-sqlite3/README.md +99 -0
- package/skills/void/docs/node_modules/void/node_modules/blake3-jit/README.md +108 -0
- package/skills/void/docs/node_modules/void/node_modules/drizzle-arktype/README.md +51 -0
- package/skills/void/docs/node_modules/void/node_modules/drizzle-kit/README.md +79 -0
- package/skills/void/docs/node_modules/void/node_modules/drizzle-orm/README.md +44 -0
- package/skills/void/docs/node_modules/void/node_modules/drizzle-valibot/README.md +51 -0
- package/skills/void/docs/node_modules/void/node_modules/drizzle-zod/README.md +65 -0
- package/skills/void/docs/node_modules/void/node_modules/es-module-lexer/README.md +390 -0
- package/skills/void/docs/node_modules/void/node_modules/estree-walker/README.md +48 -0
- package/skills/void/docs/node_modules/void/node_modules/hono/README.md +85 -0
- package/skills/void/docs/node_modules/void/node_modules/ignore/README.md +452 -0
- package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/CHANGELOG.md +76 -0
- package/{LICENSE → skills/void/docs/node_modules/void/node_modules/jsonc-parser/LICENSE.md} +21 -21
- package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/README.md +364 -0
- package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/SECURITY.md +41 -0
- package/skills/void/docs/node_modules/void/node_modules/magic-string/README.md +325 -0
- package/skills/void/docs/node_modules/void/node_modules/ofetch/README.md +398 -0
- package/skills/void/docs/node_modules/void/node_modules/pathe/README.md +73 -0
- package/skills/void/docs/node_modules/void/node_modules/pg/README.md +95 -0
- package/skills/void/docs/node_modules/void/node_modules/pglite-server/LICENSE.md +21 -0
- package/skills/void/docs/node_modules/void/node_modules/pglite-server/README.md +135 -0
- package/skills/void/docs/node_modules/void/node_modules/picocolors/README.md +21 -0
- package/skills/void/docs/node_modules/void/node_modules/tinyglobby/README.md +25 -0
- package/skills/void/docs/node_modules/void/node_modules/tsdown/README.md +55 -0
- package/skills/void/docs/node_modules/void/node_modules/valibot/LICENSE.md +9 -0
- package/skills/void/docs/node_modules/void/node_modules/valibot/README.md +94 -0
- package/skills/void/docs/node_modules/void/node_modules/vite/LICENSE.md +2230 -0
- package/skills/void/docs/node_modules/void/node_modules/vite/README.md +20 -0
- package/skills/void/docs/node_modules/void/node_modules/wrangler/README.md +63 -0
- package/skills/void/docs/node_modules/void/node_modules/zod/README.md +191 -0
- package/skills/void/docs/node_modules/void/skills/migrate-vite-cloudflare-to-void/SKILL.md +175 -0
- package/skills/void/docs/node_modules/void/skills/void/SKILL.md +75 -0
- package/skills/void/docs/node_modules/void/skills/void/command/void.md +7 -0
- package/skills/void/docs/reference/api.md +917 -0
- package/skills/void/docs/reference/cli.md +561 -0
- package/skills/void/docs/reference/config.md +408 -0
- package/skills/void/docs/reference/resource-inference.md +149 -0
- package/skills/void/docs/reference/structure.md +176 -0
- package/.npmignore +0 -29
- package/.travis.yml +0 -9
- package/favicon.ico +0 -0
- package/index.js +0 -14
- package/lib/Job.js +0 -150
- package/lib/Void.js +0 -99
- package/lib/scan.js +0 -19
- package/test/credentials.js +0 -20
- package/test/job.js +0 -64
- package/test/static/dir1/test6.html +0 -0
- package/test/static/dir2/test7.html +0 -0
- package/test/static/dir2/test8.html +0 -0
- package/test/static/dir2/test9.html +0 -0
- package/test/static/test1.html +0 -0
- package/test/static/test2.html +0 -0
- package/test/static/test3.html +0 -0
- package/test/void.js +0 -31
- /package/{test/static/dir1/test4.html → skills/void/docs/integrations/auth-providers.md} +0 -0
- /package/{test/static/dir1/test5.html → skills/void/docs/integrations/payment-processors.md} +0 -0
|
@@ -0,0 +1,625 @@
|
|
|
1
|
+
---
|
|
2
|
+
outline: deep
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<script setup>
|
|
6
|
+
function mdFileItems(ext) {
|
|
7
|
+
return [
|
|
8
|
+
{
|
|
9
|
+
name: "pages/",
|
|
10
|
+
children: [
|
|
11
|
+
{ name: `layout.island${ext}` },
|
|
12
|
+
{ name: `index.island${ext}` },
|
|
13
|
+
{
|
|
14
|
+
name: "docs/",
|
|
15
|
+
children: [
|
|
16
|
+
{ name: `layout.island${ext}`, description: "docs layout (sidebar, TOC)" },
|
|
17
|
+
{ name: "getting-started.md" },
|
|
18
|
+
{ name: "configuration.md" },
|
|
19
|
+
{
|
|
20
|
+
name: "guides/",
|
|
21
|
+
children: [
|
|
22
|
+
{ name: "deployment.md" },
|
|
23
|
+
],
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
},
|
|
27
|
+
],
|
|
28
|
+
},
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
</script>
|
|
33
|
+
|
|
34
|
+
# Markdown
|
|
35
|
+
|
|
36
|
+
Markdown pages let you use `.md` files as first-class pages in Void's file-based routing. They compile to static HTML at build time with zero client JavaScript, integrate with the layout chain, and can embed interactive framework components as [islands](./islands).
|
|
37
|
+
|
|
38
|
+
The `@void/md` package is opt-in as it contains markdown processing and syntax highlighting dependencies that are not necessarily needed in every app.
|
|
39
|
+
|
|
40
|
+
## Setup
|
|
41
|
+
|
|
42
|
+
Install `@void/md` alongside your framework adapter:
|
|
43
|
+
|
|
44
|
+
::: code-group
|
|
45
|
+
|
|
46
|
+
```sh [React]
|
|
47
|
+
npm install @void/md @void/react
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
```sh [Vue]
|
|
51
|
+
npm install @void/md @void/vue
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
```sh [Svelte]
|
|
55
|
+
npm install @void/md @void/svelte
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
```sh [Solid]
|
|
59
|
+
npm install @void/md @void/solid
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
:::
|
|
63
|
+
|
|
64
|
+
Add the plugin to your Vite config **after** the framework adapter:
|
|
65
|
+
|
|
66
|
+
::: code-group
|
|
67
|
+
|
|
68
|
+
```ts [React]
|
|
69
|
+
// vite.config.ts
|
|
70
|
+
import { defineConfig } from 'vite';
|
|
71
|
+
import { voidPlugin } from 'void';
|
|
72
|
+
import { voidReact } from '@void/react/plugin';
|
|
73
|
+
import { voidMarkdown } from '@void/md/plugin';
|
|
74
|
+
|
|
75
|
+
export default defineConfig({
|
|
76
|
+
plugins: [voidPlugin(), voidReact(), voidMarkdown()],
|
|
77
|
+
});
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
```ts [Vue]
|
|
81
|
+
// vite.config.ts
|
|
82
|
+
import { defineConfig } from 'vite';
|
|
83
|
+
import { voidPlugin } from 'void';
|
|
84
|
+
import { voidVue } from '@void/vue/plugin';
|
|
85
|
+
import { voidMarkdown } from '@void/md/plugin';
|
|
86
|
+
|
|
87
|
+
export default defineConfig({
|
|
88
|
+
plugins: [voidPlugin(), voidVue(), voidMarkdown()],
|
|
89
|
+
});
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
```ts [Svelte]
|
|
93
|
+
// vite.config.ts
|
|
94
|
+
import { defineConfig } from 'vite';
|
|
95
|
+
import { voidPlugin } from 'void';
|
|
96
|
+
import { voidSvelte } from '@void/svelte/plugin';
|
|
97
|
+
import { voidMarkdown } from '@void/md/plugin';
|
|
98
|
+
|
|
99
|
+
export default defineConfig({
|
|
100
|
+
plugins: [voidPlugin(), voidSvelte(), voidMarkdown()],
|
|
101
|
+
});
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
```ts [Solid]
|
|
105
|
+
// vite.config.ts
|
|
106
|
+
import { defineConfig } from 'vite';
|
|
107
|
+
import { voidPlugin } from 'void';
|
|
108
|
+
import { voidSolid } from '@void/solid/plugin';
|
|
109
|
+
import { voidMarkdown } from '@void/md/plugin';
|
|
110
|
+
|
|
111
|
+
export default defineConfig({
|
|
112
|
+
plugins: [voidPlugin(), voidSolid(), voidMarkdown()],
|
|
113
|
+
});
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
:::
|
|
117
|
+
|
|
118
|
+
That's it. Any `.md` file in `pages/` is now a routable page.
|
|
119
|
+
|
|
120
|
+
## Page Anatomy
|
|
121
|
+
|
|
122
|
+
A markdown page has three optional parts: a script block, frontmatter, and the body.
|
|
123
|
+
|
|
124
|
+
```md
|
|
125
|
+
<script>
|
|
126
|
+
import Counter from "../components/Counter.vue" with { island: "visible" }
|
|
127
|
+
</script>
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
title: Getting Started
|
|
132
|
+
description: Learn how to use Void
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
# Getting Started
|
|
137
|
+
|
|
138
|
+
Welcome to Void. Here's an interactive demo:
|
|
139
|
+
|
|
140
|
+
<Counter />
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
- **`<script>` block:** extracted before markdown compilation. Island imports use `with { island: "..." }` syntax (see [islands](./islands)). Any other code in the block becomes a [client script](#client-scripts) that runs in the browser.
|
|
144
|
+
- **Frontmatter:** YAML metadata between `---` fences. Layouts can read it through [`useFrontmatter()`](#frontmatter-access).
|
|
145
|
+
- **Body:** standard markdown plus GFM. Uppercase tags such as `<Counter />` reference imported components and render as islands.
|
|
146
|
+
|
|
147
|
+
## Client Scripts
|
|
148
|
+
|
|
149
|
+
The `<script>` block can contain both island imports and regular JavaScript. Island imports (with `{ island }`) go through the SSR + hydration pipeline as usual. Everything else is bundled as a client module and executed when the page loads.
|
|
150
|
+
|
|
151
|
+
```md
|
|
152
|
+
<script>
|
|
153
|
+
import Counter from "./Counter.vue" with { island: "visible" }
|
|
154
|
+
import { format } from "date-fns"
|
|
155
|
+
|
|
156
|
+
document.querySelector('.date').textContent = format(new Date(), 'PPP')
|
|
157
|
+
</script>
|
|
158
|
+
|
|
159
|
+
# My Post
|
|
160
|
+
|
|
161
|
+
<Counter />
|
|
162
|
+
|
|
163
|
+
Published: <span class="date"></span>
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
In this example:
|
|
167
|
+
|
|
168
|
+
- `Counter` is an island, so it is SSR'd and hydrated on the client
|
|
169
|
+
- `date-fns` and the `querySelector` call are client code, so they are bundled and run on page load
|
|
170
|
+
|
|
171
|
+
Each page's client script is code-split into its own chunk via dynamic import, so only the current page's script is loaded. Pages without client code ship zero extra JS.
|
|
172
|
+
|
|
173
|
+
Client scripts work in both dev (served on-demand, HMR support) and production builds.
|
|
174
|
+
|
|
175
|
+
## File Structure
|
|
176
|
+
|
|
177
|
+
Markdown pages live in `pages/` alongside regular pages and route the same way:
|
|
178
|
+
|
|
179
|
+
<FileTree :items="mdFileItems" adapter-tabs default-expanded />
|
|
180
|
+
|
|
181
|
+
A `.md` file inherits layouts, supports companion `.server.ts` files for dynamic data, and [auto-prerenders](/guide/edge/prerendering) when static. The rules are the same as any other page.
|
|
182
|
+
|
|
183
|
+
## Frontmatter Access
|
|
184
|
+
|
|
185
|
+
Use `useFrontmatter()` in layout components to read the current page's frontmatter:
|
|
186
|
+
|
|
187
|
+
::: code-group
|
|
188
|
+
|
|
189
|
+
```tsx [React]
|
|
190
|
+
import { useFrontmatter } from '@void/md';
|
|
191
|
+
|
|
192
|
+
export default function DocsLayout({ children }) {
|
|
193
|
+
const fm = useFrontmatter();
|
|
194
|
+
return (
|
|
195
|
+
<div>
|
|
196
|
+
<h1>{fm.title}</h1>
|
|
197
|
+
{children}
|
|
198
|
+
</div>
|
|
199
|
+
);
|
|
200
|
+
}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
```vue [Vue]
|
|
204
|
+
<script setup>
|
|
205
|
+
import { useFrontmatter } from '@void/md';
|
|
206
|
+
|
|
207
|
+
const fm = useFrontmatter();
|
|
208
|
+
// fm.title, fm.description, etc.
|
|
209
|
+
</script>
|
|
210
|
+
|
|
211
|
+
<template>
|
|
212
|
+
<h1>{{ fm.title }}</h1>
|
|
213
|
+
<slot />
|
|
214
|
+
</template>
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
```svelte [Svelte]
|
|
218
|
+
<script>
|
|
219
|
+
import { useFrontmatter } from "@void/md";
|
|
220
|
+
|
|
221
|
+
const fm = useFrontmatter();
|
|
222
|
+
</script>
|
|
223
|
+
|
|
224
|
+
<h1>{fm.title}</h1>
|
|
225
|
+
<slot />
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
```tsx [Solid]
|
|
229
|
+
import { useFrontmatter } from '@void/md';
|
|
230
|
+
|
|
231
|
+
export default function DocsLayout(props) {
|
|
232
|
+
const fm = useFrontmatter();
|
|
233
|
+
return (
|
|
234
|
+
<div>
|
|
235
|
+
<h1>{fm.title}</h1>
|
|
236
|
+
{props.children}
|
|
237
|
+
</div>
|
|
238
|
+
);
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
:::
|
|
243
|
+
|
|
244
|
+
## Pages Virtual Module
|
|
245
|
+
|
|
246
|
+
Import `@void/md/pages` to get metadata for all markdown pages at build time. Use it to build sidebars, navigation, or search indexes:
|
|
247
|
+
|
|
248
|
+
```ts
|
|
249
|
+
import pages from '@void/md/pages';
|
|
250
|
+
// [{ path: "/docs/getting-started", title: "Getting Started", frontmatter: {...}, headings: [...] }, ...]
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
Each entry has this shape:
|
|
254
|
+
|
|
255
|
+
```ts
|
|
256
|
+
interface MdPage {
|
|
257
|
+
path: string; // route path
|
|
258
|
+
title: string; // from frontmatter.title or first h1
|
|
259
|
+
frontmatter: Record<string, unknown>; // full parsed frontmatter
|
|
260
|
+
headings: { depth: number; slug: string; text: string }[]; // extracted headings
|
|
261
|
+
}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
The array is sorted by path and updates on HMR in dev when `.md` files are added, removed, or changed.
|
|
265
|
+
|
|
266
|
+
## Default CSS Theme
|
|
267
|
+
|
|
268
|
+
The markdown plugin provides a minimal default theme. Unlike Vitepress, this theme is CSS only - it is designed to be built on top of. The theme ships two entry points depending on your needs:
|
|
269
|
+
|
|
270
|
+
### Full theme (reset + baseline + content)
|
|
271
|
+
|
|
272
|
+
For standalone markdown sites that need a complete stylesheet, use this package. It includes a modern CSS reset, baseline body styles, and all markdown content styles:
|
|
273
|
+
|
|
274
|
+
```css
|
|
275
|
+
@import '@void/md/theme.css';
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### Content only (scoped to `.void-md`)
|
|
279
|
+
|
|
280
|
+
For embedding markdown in an existing app that already has its own reset and global styles, use this one. It only includes the `.void-md`-scoped content styles:
|
|
281
|
+
|
|
282
|
+
```css
|
|
283
|
+
@import '@void/md/theme-content.css';
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
### Usage
|
|
287
|
+
|
|
288
|
+
Wrap your markdown content in a `.void-md` element to scope the styles:
|
|
289
|
+
|
|
290
|
+
```html
|
|
291
|
+
<main class="void-md">
|
|
292
|
+
<slot />
|
|
293
|
+
</main>
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
The theme covers:
|
|
297
|
+
|
|
298
|
+
- **Prose:** headings, paragraphs, lists, blockquotes, tables, inline code, links, horizontal rules, task lists, `<kbd>`, `<mark>`, definition lists, and footnotes. Dark mode works through `prefers-color-scheme` and the `data-theme` attribute.
|
|
299
|
+
- **Code blocks:** Shiki dual-theme highlighting with CSS-driven switching and zero JS.
|
|
300
|
+
- **Containers:** styles for `:::tip`, `:::warning`, `:::danger`, `:::info`, and `:::details`.
|
|
301
|
+
- **GitHub alerts:** support for `> [!NOTE]`, `> [!TIP]`, `> [!WARNING]`, and similar syntax.
|
|
302
|
+
|
|
303
|
+
### CSS Variables
|
|
304
|
+
|
|
305
|
+
All styles are customizable via CSS variables set on `.void-md`. Override them to match your brand:
|
|
306
|
+
|
|
307
|
+
```css
|
|
308
|
+
.void-md {
|
|
309
|
+
--vmd-link: #8b5cf6;
|
|
310
|
+
--vmd-link-hover: #7c3aed;
|
|
311
|
+
}
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
| Variable | Light default | Dark default | Description |
|
|
315
|
+
| ------------------- | ------------------------------------------------------------------------------ | ------------ | ---------------------------------------------------------------------- |
|
|
316
|
+
| `--vmd-font-body` | `system-ui, -apple-system, "Segoe UI", Roboto, sans-serif` | default | Body font stack |
|
|
317
|
+
| `--vmd-font-mono` | `ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Consolas, monospace` | default | Monospace font stack |
|
|
318
|
+
| `--vmd-text` | `#1a1a2e` | `#e2e8f0` | Primary text color |
|
|
319
|
+
| `--vmd-text-muted` | `#64748b` | `#94a3b8` | Secondary/muted text (blockquotes, line numbers, footnotes) |
|
|
320
|
+
| `--vmd-link` | `#2563eb` | `#60a5fa` | Link color |
|
|
321
|
+
| `--vmd-link-hover` | `#1d4ed8` | `#93bbfd` | Link hover color |
|
|
322
|
+
| `--vmd-border` | `#e2e8f0` | `#334155` | Borders (h2 underline, tables, inline code, `<kbd>`, horizontal rules) |
|
|
323
|
+
| `--vmd-bg-soft` | `#f8fafc` | `#1e293b` | Soft background (table headers, inline code, code blocks, `<kbd>`) |
|
|
324
|
+
| `--vmd-line-height` | `1.75` | default | Body line height |
|
|
325
|
+
|
|
326
|
+
Dark mode values apply automatically via `prefers-color-scheme: dark` (auto mode) and `[data-theme="dark"]` (explicit toggle). To force light mode on a dark-preference system, set `data-theme="light"` on `<html>`.
|
|
327
|
+
|
|
328
|
+
Users who want full control can skip the import and write their own CSS.
|
|
329
|
+
|
|
330
|
+
## Markdown Features
|
|
331
|
+
|
|
332
|
+
All features produce static HTML at build time with zero client JS (except the copy button).
|
|
333
|
+
|
|
334
|
+
### Containers
|
|
335
|
+
|
|
336
|
+
```md
|
|
337
|
+
::: tip
|
|
338
|
+
Helpful advice here.
|
|
339
|
+
:::
|
|
340
|
+
|
|
341
|
+
::: warning
|
|
342
|
+
Watch out for this.
|
|
343
|
+
:::
|
|
344
|
+
|
|
345
|
+
::: danger
|
|
346
|
+
This will break things.
|
|
347
|
+
:::
|
|
348
|
+
|
|
349
|
+
::: info
|
|
350
|
+
Some context.
|
|
351
|
+
:::
|
|
352
|
+
|
|
353
|
+
::: details Click to expand
|
|
354
|
+
Hidden content here.
|
|
355
|
+
:::
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
Custom titles work too: `::: tip Pro Tip`.
|
|
359
|
+
|
|
360
|
+
### GitHub Alerts
|
|
361
|
+
|
|
362
|
+
```md
|
|
363
|
+
> [!NOTE]
|
|
364
|
+
> Useful information.
|
|
365
|
+
|
|
366
|
+
> [!TIP]
|
|
367
|
+
> Helpful advice.
|
|
368
|
+
|
|
369
|
+
> [!IMPORTANT]
|
|
370
|
+
> Key information.
|
|
371
|
+
|
|
372
|
+
> [!WARNING]
|
|
373
|
+
> Potential issues.
|
|
374
|
+
|
|
375
|
+
> [!CAUTION]
|
|
376
|
+
> Dangerous actions.
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
### Syntax Highlighting
|
|
380
|
+
|
|
381
|
+
Code blocks are highlighted at build time with [Shiki](https://shiki.style) using dual light and dark themes by default: `github-light` and `github-dark`. No client-side JavaScript is needed because theme switching is pure CSS.
|
|
382
|
+
|
|
383
|
+
### Line Highlighting
|
|
384
|
+
|
|
385
|
+
Highlight specific lines with `{lines}` in the code fence meta:
|
|
386
|
+
|
|
387
|
+
````md
|
|
388
|
+
```ts {1,3-5}
|
|
389
|
+
const a = 1; // highlighted
|
|
390
|
+
const b = 2;
|
|
391
|
+
const c = 3; // highlighted
|
|
392
|
+
const d = 4; // highlighted
|
|
393
|
+
const e = 5; // highlighted
|
|
394
|
+
```
|
|
395
|
+
````
|
|
396
|
+
|
|
397
|
+
### Diff, Focus, and Error Levels
|
|
398
|
+
|
|
399
|
+
Use inline comments to annotate lines:
|
|
400
|
+
|
|
401
|
+
```ts
|
|
402
|
+
export function hello() {
|
|
403
|
+
console.log('old'); // [!code --]
|
|
404
|
+
console.log('new'); // [!code ++]
|
|
405
|
+
console.log('look here'); // [!code focus]
|
|
406
|
+
console.log('problem'); // [!code error]
|
|
407
|
+
console.log('careful'); // [!code warning]
|
|
408
|
+
}
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
### Copy Button
|
|
412
|
+
|
|
413
|
+
Code blocks include a copy button. That is the only feature here that needs client-side JS, and it only adds a roughly 200 byte inline script for the clipboard API. The script is injected only when code blocks are present.
|
|
414
|
+
|
|
415
|
+
### Line Numbers
|
|
416
|
+
|
|
417
|
+
Enable per code block with `:line-numbers` or disable with `:no-line-numbers`:
|
|
418
|
+
|
|
419
|
+
````md
|
|
420
|
+
```ts :line-numbers
|
|
421
|
+
const a = 1;
|
|
422
|
+
const b = 2;
|
|
423
|
+
```
|
|
424
|
+
````
|
|
425
|
+
|
|
426
|
+
Start from a specific number with `:line-numbers=5`.
|
|
427
|
+
|
|
428
|
+
### Snippet Imports
|
|
429
|
+
|
|
430
|
+
Import code from external files:
|
|
431
|
+
|
|
432
|
+
```md
|
|
433
|
+
<<< ./path/to/file.ts
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
### Emoji
|
|
437
|
+
|
|
438
|
+
Shortcodes convert to unicode: `:tada:` becomes :tada:, `:rocket:` becomes :rocket:.
|
|
439
|
+
|
|
440
|
+
### Attributes
|
|
441
|
+
|
|
442
|
+
Add classes, IDs, or attributes to any element:
|
|
443
|
+
|
|
444
|
+
```md
|
|
445
|
+
# Heading {.custom-class #my-id}
|
|
446
|
+
|
|
447
|
+
Paragraph with attributes. {.note}
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
### Heading Anchors
|
|
451
|
+
|
|
452
|
+
All headings get permalink anchors automatically, enabling direct linking to any section.
|
|
453
|
+
|
|
454
|
+
### Table of Contents
|
|
455
|
+
|
|
456
|
+
Use the `[[toc]]` directive to render an inline table of contents from the page's headings.
|
|
457
|
+
|
|
458
|
+
### Images
|
|
459
|
+
|
|
460
|
+
Image paths are normalized automatically. Images are lazy-loaded by default.
|
|
461
|
+
|
|
462
|
+
### Links
|
|
463
|
+
|
|
464
|
+
External links automatically get `target="_blank" rel="noreferrer"`. Internal `.md` references resolve to their route paths.
|
|
465
|
+
|
|
466
|
+
## Plugin Options
|
|
467
|
+
|
|
468
|
+
```ts
|
|
469
|
+
voidMarkdown({
|
|
470
|
+
shiki: {
|
|
471
|
+
themes: { light: 'github-light', dark: 'github-dark' }, // Shiki themes
|
|
472
|
+
langs: ['sql', 'graphql'], // additional languages
|
|
473
|
+
},
|
|
474
|
+
});
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
| Option | Type | Default | Description |
|
|
478
|
+
| -------------- | -------------------------------- | ------------------------------------------------ | ---------------------------- |
|
|
479
|
+
| `shiki.themes` | `{ light: string; dark: string}` | `{ light: "github-light", dark: "github-dark" }` | Shiki color themes |
|
|
480
|
+
| `shiki.langs` | `string[]` | Common web languages | Additional languages to load |
|
|
481
|
+
|
|
482
|
+
## Example: Docs Layout with Sidebar
|
|
483
|
+
|
|
484
|
+
Here's a full example of a docs layout using `useFrontmatter()` and `@void/md/pages` to build a sidebar:
|
|
485
|
+
|
|
486
|
+
::: code-group
|
|
487
|
+
|
|
488
|
+
```tsx [React]
|
|
489
|
+
// pages/docs/layout.island.tsx
|
|
490
|
+
import '@void/md/theme-content.css';
|
|
491
|
+
import { useFrontmatter } from '@void/md';
|
|
492
|
+
import pages from '@void/md/pages';
|
|
493
|
+
import { useRouter } from '@void/react';
|
|
494
|
+
|
|
495
|
+
const docPages = pages.filter((p) => p.path.startsWith('/docs/'));
|
|
496
|
+
|
|
497
|
+
export default function DocsLayout({ children }) {
|
|
498
|
+
const fm = useFrontmatter();
|
|
499
|
+
const { path } = useRouter();
|
|
500
|
+
|
|
501
|
+
return (
|
|
502
|
+
<div className="docs-layout">
|
|
503
|
+
<aside>
|
|
504
|
+
<nav>
|
|
505
|
+
{docPages.map((page) => (
|
|
506
|
+
<a key={page.path} href={page.path} className={page.path === path ? 'active' : ''}>
|
|
507
|
+
{page.title}
|
|
508
|
+
</a>
|
|
509
|
+
))}
|
|
510
|
+
</nav>
|
|
511
|
+
</aside>
|
|
512
|
+
<main className="void-md">
|
|
513
|
+
<h1>{fm.title}</h1>
|
|
514
|
+
{children}
|
|
515
|
+
</main>
|
|
516
|
+
</div>
|
|
517
|
+
);
|
|
518
|
+
}
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
```vue [Vue]
|
|
522
|
+
<!-- pages/docs/layout.island.vue -->
|
|
523
|
+
<script setup>
|
|
524
|
+
import { useFrontmatter } from '@void/md';
|
|
525
|
+
import pages from '@void/md/pages';
|
|
526
|
+
import { useRouter } from '@void/vue';
|
|
527
|
+
|
|
528
|
+
const fm = useFrontmatter();
|
|
529
|
+
const { path } = useRouter();
|
|
530
|
+
const docPages = pages.filter((p) => p.path.startsWith('/docs/'));
|
|
531
|
+
</script>
|
|
532
|
+
|
|
533
|
+
<style>
|
|
534
|
+
@import '@void/md/theme-content.css';
|
|
535
|
+
</style>
|
|
536
|
+
|
|
537
|
+
<template>
|
|
538
|
+
<div class="docs-layout">
|
|
539
|
+
<aside>
|
|
540
|
+
<nav>
|
|
541
|
+
<a
|
|
542
|
+
v-for="page in docPages"
|
|
543
|
+
:key="page.path"
|
|
544
|
+
:href="page.path"
|
|
545
|
+
:class="{ active: page.path === path }"
|
|
546
|
+
>
|
|
547
|
+
{{ page.title }}
|
|
548
|
+
</a>
|
|
549
|
+
</nav>
|
|
550
|
+
</aside>
|
|
551
|
+
<main class="void-md">
|
|
552
|
+
<h1>{{ fm.title }}</h1>
|
|
553
|
+
<slot />
|
|
554
|
+
</main>
|
|
555
|
+
</div>
|
|
556
|
+
</template>
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
```svelte [Svelte]
|
|
560
|
+
<!-- pages/docs/layout.island.svelte -->
|
|
561
|
+
<script>
|
|
562
|
+
import "@void/md/theme-content.css";
|
|
563
|
+
import { useFrontmatter } from "@void/md";
|
|
564
|
+
import pages from "@void/md/pages";
|
|
565
|
+
import { useRouter } from "@void/svelte";
|
|
566
|
+
|
|
567
|
+
const fm = useFrontmatter();
|
|
568
|
+
const { path } = useRouter();
|
|
569
|
+
const docPages = pages.filter((p) => p.path.startsWith("/docs/"));
|
|
570
|
+
</script>
|
|
571
|
+
|
|
572
|
+
<div class="docs-layout">
|
|
573
|
+
<aside>
|
|
574
|
+
<nav>
|
|
575
|
+
{#each docPages as page}
|
|
576
|
+
<a href={page.path} class:active={page.path === path}>
|
|
577
|
+
{page.title}
|
|
578
|
+
</a>
|
|
579
|
+
{/each}
|
|
580
|
+
</nav>
|
|
581
|
+
</aside>
|
|
582
|
+
<main class="void-md">
|
|
583
|
+
<h1>{fm.title}</h1>
|
|
584
|
+
<slot />
|
|
585
|
+
</main>
|
|
586
|
+
</div>
|
|
587
|
+
```
|
|
588
|
+
|
|
589
|
+
```tsx [Solid]
|
|
590
|
+
// pages/docs/layout.island.tsx
|
|
591
|
+
import '@void/md/theme-content.css';
|
|
592
|
+
import { useFrontmatter } from '@void/md';
|
|
593
|
+
import pages from '@void/md/pages';
|
|
594
|
+
import { useRouter } from '@void/solid';
|
|
595
|
+
import { For } from 'solid-js';
|
|
596
|
+
|
|
597
|
+
const docPages = pages.filter((p) => p.path.startsWith('/docs/'));
|
|
598
|
+
|
|
599
|
+
export default function DocsLayout(props) {
|
|
600
|
+
const fm = useFrontmatter();
|
|
601
|
+
const { path } = useRouter();
|
|
602
|
+
|
|
603
|
+
return (
|
|
604
|
+
<div class="docs-layout">
|
|
605
|
+
<aside>
|
|
606
|
+
<nav>
|
|
607
|
+
<For each={docPages}>
|
|
608
|
+
{(page) => (
|
|
609
|
+
<a href={page.path} classList={{ active: page.path === path() }}>
|
|
610
|
+
{page.title}
|
|
611
|
+
</a>
|
|
612
|
+
)}
|
|
613
|
+
</For>
|
|
614
|
+
</nav>
|
|
615
|
+
</aside>
|
|
616
|
+
<main class="void-md">
|
|
617
|
+
<h1>{fm.title}</h1>
|
|
618
|
+
{props.children}
|
|
619
|
+
</main>
|
|
620
|
+
</div>
|
|
621
|
+
);
|
|
622
|
+
}
|
|
623
|
+
```
|
|
624
|
+
|
|
625
|
+
:::
|