diff --git a/.changeset/pre.json b/.changeset/pre.json index c881010e6..b2bf7fecd 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -2,7 +2,6 @@ "mode": "pre", "tag": "next", "initialVersions": { - "docs": "0.0.7", "@example/blog": "0.0.1", "@example/blog-multiple-authors": "0.0.1", "@example/component": "0.0.1", diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 4b2ea919e..066a3a27d 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -11,5 +11,6 @@ ## Docs - - + + + diff --git a/.github/labeler.yml b/.github/labeler.yml index 93519be57..e743b95f7 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -6,20 +6,9 @@ example: '🚨 action': - .github/workflows/** -docs: -- docs/** - test: - packages/**/*.test.js -i18n: -- any: - - 'docs/src/pages/*/**' - - '!docs/src/pages/core-concepts/**' - - '!docs/src/pages/guides/**' - - '!docs/src/pages/migration/**' - - '!docs/src/pages/reference/**' - core: - packages/astro/** diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bf508d631..3a483b017 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,7 +7,6 @@ on: pull_request: paths-ignore: - '.vscode/**' - - 'docs/**' - 'examples/**' # Automatically cancel in-progress actions on the same branch diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3a3cd5400..11b4d8a9a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,7 +17,7 @@ yarn: "^1.22.10" ### Setting up your local repo -Astro uses yarn workspaces, so you should **always run `yarn install` from the top-level project directory.** running `yarn install` in the top-level project root will install dependencies for `astro`, `docs`, and every package in the repo. +Astro uses yarn workspaces, so you should **always run `yarn install` from the top-level project directory.** running `yarn install` in the top-level project root will install dependencies for `astro`, and every package in the repo. ```shell git clone && cd ... @@ -76,7 +76,7 @@ yarn lint ### Making a Pull Request -When making a pull request, be sure to add a changeset when something has changed with Astro. Non-packages (`examples/*`, `docs/*`) do not need changesets. +When making a pull request, be sure to add a changeset when something has changed with Astro. Non-packages (`examples/*`) do not need changesets. ```shell yarn changeset @@ -145,7 +145,7 @@ To release a snapshot, run the following locally: # 1: yarn changeset version --snapshot XXX # 2: (Manual) review the diff, and make sure that you're not releasing more than you need to. -git checkout -- examples/ docs/ +git checkout -- examples/ # 3: yarn release --tag next--XXX # 4: (Manual) review the publish, and if you're happy then you can throw out all local changes @@ -192,7 +192,7 @@ When in prerelease mode, the automatic PR release process will no longer release 1. Run `yarn changeset version` to create your new release. 1. Run `yarn release` to publish your new release. 1. Run `git push && git push --tags` to push your new release to GitHub. -1. Run `git push release/0.X:latest` to push your release branch to `latest`. This will trigger an update to the docs site, etc. +1. Run `git push release/0.X:latest` to push your release branch to `latest`. 1. Go to https://github.com/withastro/astro/releases/new and create a new release. Copy the new changelog entry from https://github.com/withastro/astro/blob/latest/packages/astro/CHANGELOG.md. 1. Post in Discord #announcements channel, if needed! diff --git a/docs/.nvmrc b/docs/.nvmrc deleted file mode 100644 index 31102b28d..000000000 --- a/docs/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -14.18.1 diff --git a/docs/.prettierignore b/docs/.prettierignore deleted file mode 100644 index 76add878f..000000000 --- a/docs/.prettierignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -dist \ No newline at end of file diff --git a/docs/.prettierrc b/docs/.prettierrc deleted file mode 100644 index c3a4e0672..000000000 --- a/docs/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "singleQuote": true, - "tabWidth": 2, - "endOfLine": "auto", - "trailingComma": "es5", - "printWidth": 80 -} diff --git a/docs/.stackblitzrc b/docs/.stackblitzrc deleted file mode 100644 index 0dfa8f1e0..000000000 --- a/docs/.stackblitzrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "startCommand": "npm start", - "env": { - "ENABLE_CJS_IMPORTS": true - } -} diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md deleted file mode 100644 index 429cbfdf6..000000000 --- a/docs/CHANGELOG.md +++ /dev/null @@ -1,55 +0,0 @@ -# docs - -## 0.0.7 - -### Patch Changes - -- 6b8630c6: Github pages disclaimer - -## 0.0.6 - -### Patch Changes - -- 788c769d: # Hoisted scripts - - This change adds support for hoisted scripts, allowing you to bundle scripts together for a page and hoist them to the top (in the head): - - ```astro - - ``` - -## 0.0.5 - -## 0.0.5-next.0 - -### Patch Changes - -- 78b5bde1: Adds support for Astro.resolve - - `Astro.resolve()` helps with creating URLs relative to the current Astro file, allowing you to reference files within your `src/` folder. - - Astro _does not_ resolve relative links within HTML, such as images: - - ```html - - ``` - - The above will be sent to the browser as-is and the browser will resolve it relative to the current **page**. If you want it to be resolved relative to the .astro file you are working in, use `Astro.resolve`: - - ```astro - - ``` - -## 0.0.4 - -### Patch Changes - -- adc767c5: change Spanish translations for Getting Started page - -## 0.0.3 - -### Patch Changes - -- 70f0a09: Added remark-slug to default plugins diff --git a/docs/README.md b/docs/README.md index c99ef1ea9..8dd578be3 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,24 +1,3 @@ -# Astro Docs Astro logo +# Astro Docs -## Contributing - -### Pull Requests - -Every pull request needs to be reviewed by another contributor to the documentation to help with the overall quality of the documentation. - -## Running this project - -- Clone the Project - - `git clone git@github.com:withastro/astro.git` -- Run `yarn install` to install latest dependencies. - > This project uses yarn to manage dependencies. [Make sure that you have yarn v1 installed.](https://classic.yarnpkg.com/) -- Run `yarn workspace docs dev` to start the dev server. -- Run `yarn workspace docs build` to build the final site for production. - > The environment variable `SNOWPACK_PUBLIC_GITHUB_TOKEN` must be set to a personal access token with `public_repo` permissions to prevent rate-limiting. - -## Deploying - -The site is automatically deployed when commits land in `latest`, via Netlify. - -The "next" docs are automatically deployed when commits land in `main`, via Netlify at . +**⚠️ The Astro docs are now managed at https://github.com/withastro/docs ⚠️** diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs deleted file mode 100644 index 94290bf17..000000000 --- a/docs/astro.config.mjs +++ /dev/null @@ -1,12 +0,0 @@ -// @ts-check -export default /** @type {import('astro').AstroUserConfig} */ ({ - buildOptions: { - site: 'https://docs.astro.build/', - }, - renderers: [ - // Our main renderer for frontend components - '@astrojs/renderer-preact', - // Needed for Algolia search component - '@astrojs/renderer-react', - ], -}); diff --git a/docs/jsconfig.json b/docs/jsconfig.json deleted file mode 100644 index 56c62bf9f..000000000 --- a/docs/jsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": ".", - "paths": { - "~/*": ["src/*"] - } - } -} diff --git a/docs/package.json b/docs/package.json deleted file mode 100644 index 9f3c7debd..000000000 --- a/docs/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "docs", - "version": "0.0.7", - "private": true, - "scripts": { - "dev": "astro dev", - "start": "astro dev", - "build": "astro build", - "preview": "astro preview", - "lint": "run-p --aggregate-output lint:linkcheck", - "lint:a11y": "start-test 'yarn build && yarn preview' 3000 'yarn lint:a11y:local'", - "lint:a11y:local": "pa11y-ci --sitemap 'http://localhost:3000/sitemap.xml' --sitemap-find 'https://docs.astro.build' --sitemap-replace 'http://localhost:3000'", - "lint:a11y:remote": "pa11y-ci --sitemap 'https://docs.astro.build/sitemap.xml'", - "lint:linkcheck": "start-test 'yarn dev --silent' 3000 'yarn lint:linkcheck:local'", - "lint:linkcheck:local": "blc -roe --user-agent 'broken-link-checker/0.7.8' 'http://localhost:3000/en/getting-started'", - "lint:linkcheck:remote": "blc -ro --user-agent 'broken-link-checker/0.7.8' 'https://docs.astro.build/'" - }, - "devDependencies": { - "astro": "^0.23.0-next.0", - "broken-link-checker": "^0.7.8", - "npm-run-all": "^4.1.5", - "pa11y-ci": "^3.0.1", - "prettier": "^2.4.1", - "start-server-and-test": "^1.12.6" - }, - "dependencies": { - "@docsearch/react": "^1.0.0-alpha.28" - }, - "volta": { - "node": "14.18.1" - } -} diff --git a/docs/public/code.css b/docs/public/code.css deleted file mode 100644 index 3cb74322f..000000000 --- a/docs/public/code.css +++ /dev/null @@ -1,101 +0,0 @@ -.language-css > code, -.language-sass > code, -.language-scss > code { - color: #fd9170; -} - -.language-diff .token.prefix.deleted, -.language-diff .token.prefix.inserted { - user-select: none; -} - -[class*='language-'] .namespace { - opacity: 0.7; -} - -.token.plain-text, -[class*='language-bash'] span.token, -[class*='language-shell'] span.token { - color: hsla(var(--color-gray-90), 1); -} - -[class*='language-bash'] span.token, -[class*='language-shell'] span.token { - font-style: bold; -} - -.token.prolog, -.token.comment, -[class*='language-bash'] span.token.comment, -[class*='language-shell'] span.token.comment { - color: hsla(var(--color-gray-70), 1); -} - -.token.selector, -.token.tag, -.token.unit, -.token.url, -.token.variable, -.token.entity, -.token.deleted { - color: #fa5e5b; -} - -.token.boolean, -.token.constant, -.token.doctype, -.token.number, -.token.regex, -.token.builtin, -.token.class, -.token.hexcode, -.token.class-name, -.token.attr-name { - color: hsla(var(--color-yellow), 1); -} - -.token.atrule, -.token.attribute, -.token.attr-value .token.punctuation, -.token.attr-value, -.token.pseudo-class, -.token.pseudo-element, -.token.string { - color: hsla(var(--color-green), 1); -} - -.token.symbol, -.token.function, -.token.id, -.token.important { - color: hsla(var(--color-blue), 1); -} - -.token.important, -.token.id { - font-weight: bold; -} - -.token.cdata, -.token.char, -.token.property { - color: #23b1af; -} - -.token.inserted { - color: hsla(var(--color-green), 1); -} - -.token.keyword { - color: #ff657c; - font-style: italic; -} - -.token.operator { - color: hsla(var(--color-gray-70), 1); -} - -.token.attr-value .token.attr-equals, -.token.punctuation { - color: hsla(var(--color-gray-80), 1); -} diff --git a/docs/public/default-og-image.png b/docs/public/default-og-image.png deleted file mode 100644 index 97903207e..000000000 Binary files a/docs/public/default-og-image.png and /dev/null differ diff --git a/docs/public/favicon.ico b/docs/public/favicon.ico deleted file mode 100644 index 578ad458b..000000000 Binary files a/docs/public/favicon.ico and /dev/null differ diff --git a/docs/public/favicon.svg b/docs/public/favicon.svg deleted file mode 100644 index 542f90aec..000000000 --- a/docs/public/favicon.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - diff --git a/docs/public/index.css b/docs/public/index.css deleted file mode 100644 index 54e4124fd..000000000 --- a/docs/public/index.css +++ /dev/null @@ -1,390 +0,0 @@ -* { - box-sizing: border-box; - margin: 0; -} - -/* Global focus outline reset */ -*:focus:not(:focus-visible) { - outline: none; -} - -:root { - --user-font-scale: 1rem - 16px; - --max-width: calc(100% - 1rem); -} - -@media (min-width: 50em) { - :root { - --max-width: 46em; - } -} - -@media (prefers-reduced-motion: no-preference) { - :root { - scroll-behavior: smooth; - } -} - -body { - display: flex; - flex-direction: column; - min-height: 100vh; - font-family: var(--font-body); - font-size: 1rem; - font-size: clamp(0.9rem, 0.75rem + 0.375vw + var(--user-font-scale), 1rem); - line-height: 1.5; - max-width: 100vw; -} - -nav ul { - list-style: none; - padding: 0; -} - -.content > section > * + * { - margin-top: 1.25rem; -} - -.content > section > :first-child { - margin-top: 0; -} - -/* Typography */ -h1, -h2, -h3, -h4, -h5, -h6 { - margin-bottom: 1rem; - font-weight: bold; - line-height: 1; -} - -h1, -h2 { - max-width: 40ch; -} - -:is(h2, h3):not(:first-child) { - margin-top: 3rem; -} - -:is(h4, h5, h6):not(:first-child) { - margin-top: 2rem; -} - -h1 { - font-size: 3.25rem; - font-weight: 800; -} - -h2 { - font-size: 2.5rem; -} - -h3 { - font-size: 1.75rem; -} - -h4 { - font-size: 1.3rem; -} - -h5 { - font-size: 1rem; -} - -p, -.content ul { - line-height: 1.65em; -} - -p, -.content ul { - color: var(--theme-text-light); -} - -small, -.text_small { - font-size: 0.833rem; -} - -a { - color: var(--theme-text-accent); - text-underline-offset: 0.08em; - align-items: center; - gap: 0.5rem; -} - -article > section :is(ul, ol) > * + * { - margin-top: 0.25rem; -} - -article > section nav :is(ul, ol) > * + * { - margin-top: inherit; -} - -article > section li > :is(p, pre, blockquote):not(:first-child) { - margin-top: 1rem; -} - -article > section :is(ul, ol) { - padding-left: 1em; -} - -article > section nav :is(ul, ol) { - padding-left: inherit; -} - -article > section nav { - margin-top: 1rem; - margin-bottom: 2rem; -} - -article > section ::marker { - font-weight: bold; - color: var(--theme-text-light); -} - -article > section iframe { - width: 100%; - height: auto; - aspect-ratio: 16 / 9; -} - -a > code:not([class*='language']) { - position: relative; - color: var(--theme-text-accent); - background: transparent; - text-underline-offset: var(--padding-block); -} - -a > code:not([class*='language'])::before { - content: ''; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - display: block; - background: var(--theme-accent); - opacity: var(--theme-accent-opacity); - border-radius: var(--border-radius); -} - -a:hover, -a:focus { - text-decoration: underline; -} - -a:focus { - outline: 2px solid currentColor; - outline-offset: 0.25em; -} - -strong { - font-weight: 600; - color: inherit; -} - -/* Supporting Content */ -code { - font-family: var(--font-mono); - font-size: 0.85em; -} - -code:not([class*='language']) { - --border-radius: 3px; - --padding-block: 0.2rem; - --padding-inline: 0.4rem; - color: var(--theme-code-inline-text); - background-color: var(--theme-code-inline-bg); - padding: var(--padding-block) var(--padding-inline); - margin: calc(var(--padding-block) * -1) -0.125em; - border-radius: var(--border-radius); - box-shadow: 0 2px 1px 0 rgba(0, 0, 0, 0.08); - word-break: break-word; -} - -pre > code:not([class*='language']) { - background-color: transparent; - padding: 0; - margin: 0; - border-radius: 0; - color: inherit; -} - -pre > code { - font-size: 1em; -} - -table, -pre { - position: relative; - --padding-block: 1rem; - --padding-inline: 2rem; - padding: var(--padding-block) var(--padding-inline); - padding-right: calc(var(--padding-inline) * 2); - margin-left: calc(var(--padding-inline) * -1); - margin-right: calc(var(--padding-inline) * -1); - font-family: var(--font-mono); - - line-height: 1.5; - font-size: 0.85em; - overflow-y: hidden; - overflow-x: auto; -} - -table { - width: 100%; - padding: var(--padding-block) 0; - margin: 0; - border-collapse: collapse; -} - -/* Zebra striping */ -tr:nth-of-type(odd) { - background: var(--theme-bg-hover); -} -th { - background: var(--color-black); - color: var(--theme-color); - font-weight: bold; -} -td, -th { - padding: 6px; - text-align: left; -} - -pre { - background-color: var(--theme-code-bg); - color: var(--theme-code-text); -} - -blockquote code:not([class*='language']) { - background-color: var(--theme-bg); -} - -@media (min-width: 37.75em) { - pre { - --padding-inline: 1.25rem; - border-radius: 8px; - margin-left: 0; - margin-right: 0; - } -} - -blockquote { - margin: 2rem 0; - padding: 1.25em 1.5rem; - border-left: 3px solid var(--theme-text-light); - background-color: var(--theme-bg-offset); - border-radius: 0 0.25rem 0.25rem 0; - line-height: 1.7; -} - -img { - max-width: 100%; -} - -.flex { - display: flex; - align-items: center; -} - -button { - display: flex; - align-items: center; - justify-items: center; - gap: 0.25em; - padding: 0.33em 0.67em; - border: 0; - background: var(--theme-bg); - display: flex; - font-size: 1rem; - align-items: center; - gap: 0.25em; - border-radius: 99em; - color: var(--theme-text); - background-color: var(--theme-bg); -} - -h2.heading { - font-size: 1rem; - font-weight: 700; - padding: 0.1rem 1rem; - text-transform: uppercase; - margin-bottom: 0.5rem; -} - -.header-link { - font-size: 1rem; - padding: 0.1rem 0 0.1rem 1rem; - border-left: 4px solid var(--theme-divider); -} - -.header-link:hover, -.header-link:focus { - border-left-color: var(--theme-accent); - color: var(--theme-accent); -} -.header-link:focus-within { - color: var(--theme-text-light); - border-left-color: hsla(var(--color-gray-40), 1); -} -.header-link svg { - opacity: 0.6; -} -.header-link:hover svg { - opacity: 0.8; -} -.header-link a { - display: inline-flex; - gap: 0.5em; - width: 100%; - padding: 0.15em 0 0.15em 0; -} - -.header-link.depth-3 { - padding-left: 2rem; -} -.header-link.depth-4 { - padding-left: 3rem; -} - -.header-link a { - font: inherit; - color: inherit; - text-decoration: none; -} - -/* Screenreader Only Text */ -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border-width: 0; -} - -.focus\:not-sr-only:focus, -.focus\:not-sr-only:focus-visible { - position: static; - width: auto; - height: auto; - padding: 0; - margin: 0; - overflow: visible; - clip: auto; - white-space: normal; -} - -:target { - scroll-margin: calc(var(--theme-sidebar-offset, 5rem) + 2rem) 0 2rem; -} diff --git a/docs/public/make-scrollable-code-focusable.js b/docs/public/make-scrollable-code-focusable.js deleted file mode 100644 index f2b7030f7..000000000 --- a/docs/public/make-scrollable-code-focusable.js +++ /dev/null @@ -1,3 +0,0 @@ -Array.from(document.getElementsByTagName('pre')).forEach((element) => { - element.setAttribute('tabindex', '0'); -}); diff --git a/docs/public/theme.css b/docs/public/theme.css deleted file mode 100644 index 44a933434..000000000 --- a/docs/public/theme.css +++ /dev/null @@ -1,126 +0,0 @@ -:root { - --font-fallback: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, - sans-serif, Apple Color Emoji, Segoe UI Emoji; - --font-body: system-ui, var(--font-fallback); - --font-mono: 'IBM Plex Mono', Consolas, 'Andale Mono WT', 'Andale Mono', - 'Lucida Console', 'Lucida Sans Typewriter', 'DejaVu Sans Mono', - 'Bitstream Vera Sans Mono', 'Liberation Mono', 'Nimbus Mono L', Monaco, - 'Courier New', Courier, monospace; - - /* - * Variables with --color-base prefix define - * the hue, and saturation values to be used for - * hsla colors. - * - * ex: - * - * --color-base-{color}: {hue}, {saturation}; - * - */ - - --color-base-white: 0, 0%; - --color-base-black: 240, 100%; - --color-base-gray: 215, 14%; - --color-base-blue: 212, 100%; - --color-base-blue-dark: 212, 72%; - --color-base-green: 158, 79%; - --color-base-orange: 22, 100%; - --color-base-purple: 269, 79%; - --color-base-red: 351, 100%; - --color-base-yellow: 41, 100%; - - /* - * Color palettes are made using --color-base - * variables, along with a lightness value to - * define different variants. - * - */ - - --color-gray-5: var(--color-base-gray), 5%; - --color-gray-10: var(--color-base-gray), 10%; - --color-gray-20: var(--color-base-gray), 20%; - --color-gray-30: var(--color-base-gray), 30%; - --color-gray-40: var(--color-base-gray), 40%; - --color-gray-50: var(--color-base-gray), 50%; - --color-gray-60: var(--color-base-gray), 60%; - --color-gray-70: var(--color-base-gray), 70%; - --color-gray-80: var(--color-base-gray), 80%; - --color-gray-90: var(--color-base-gray), 90%; - --color-gray-95: var(--color-base-gray), 95%; - - --color-blue: var(--color-base-blue), 61%; - --color-blue-dark: var(--color-base-blue-dark), 39%; - --color-green: var(--color-base-green), 42%; - --color-orange: var(--color-base-orange), 50%; - --color-purple: var(--color-base-purple), 54%; - --color-red: var(--color-base-red), 54%; - --color-yellow: var(--color-base-yellow), 59%; -} - -:root { - color-scheme: light; - --theme-accent: hsla(var(--color-orange), 1); - --theme-text-accent: hsla(var(--color-orange), 1); - --theme-accent-opacity: 0.1; - --theme-divider: hsla(var(--color-gray-95), 1); - --theme-text: hsla(var(--color-gray-10), 1); - --theme-text-light: hsla(var(--color-gray-40), 1); - /* @@@: not used anywhere */ - --theme-text-lighter: hsla(var(--color-gray-80), 1); - --theme-bg: hsla(var(--color-base-white), 100%, 1); - --theme-bg-hover: hsla(var(--color-gray-95), 1); - --theme-bg-offset: hsla(var(--color-gray-90), 1); - --theme-bg-accent: hsla(var(--color-orange), var(--theme-accent-opacity)); - --theme-code-inline-bg: hsla(var(--color-gray-95), 1); - --theme-code-inline-text: var(--theme-text); - --theme-code-bg: hsla(217, 19%, 27%, 1); - --theme-code-text: hsla(var(--color-gray-95), 1); - --theme-navbar-bg: hsla(var(--color-base-white), 100%, 1); - --theme-navbar-height: 6rem; - --theme-selection-color: hsla(var(--color-orange), 1); - --theme-selection-bg: hsla(var(--color-orange), var(--theme-accent-opacity)); -} - -body { - background: var(--theme-bg); - color: var(--theme-text); -} - -:root.theme-dark { - color-scheme: dark; - --theme-accent-opacity: 0.4; - --theme-accent: hsla(var(--color-orange), 1); - --theme-text-accent: hsla(var(--color-orange), 1); - --theme-divider: hsla(var(--color-gray-10), 1); - --theme-text: hsla(var(--color-gray-90), 1); - --theme-text-light: hsla(var(--color-gray-80), 1); - - /* @@@: not used anywhere */ - --theme-text-lighter: hsla(var(--color-gray-40), 1); - --theme-bg: hsla(215, 28%, 17%, 1); - --theme-bg-hover: hsla(var(--color-gray-40), 1); - --theme-bg-offset: hsla(var(--color-gray-5), 1); - --theme-code-inline-bg: hsla(var(--color-gray-10), 1); - --theme-code-inline-text: hsla(var(--color-base-white), 100%, 1); - --theme-code-bg: hsla(var(--color-gray-5), 1); - --theme-code-text: hsla(var(--color-base-white), 100%, 1); - --theme-navbar-bg: hsla(215, 28%, 17%, 1); - --theme-selection-color: hsla(var(--color-base-white), 100%, 1); - --theme-selection-bg: hsla(var(--color-purple), var(--theme-accent-opacity)); - - /* DocSearch [Algolia] */ - --docsearch-modal-background: var(--theme-bg); - --docsearch-searchbox-focus-background: var(--theme-divider); - --docsearch-footer-background: var(--theme-divider); - --docsearch-text-color: var(--theme-text); - --docsearch-hit-background: var(--theme-divider); - --docsearch-hit-shadow: none; - --docsearch-hit-color: var(--theme-text); - --docsearch-footer-shadow: inset 0 2px 10px #000; - --docsearch-modal-shadow: inset 0 0 8px #000; -} - -::selection { - color: var(--theme-selection-color); - background-color: var(--theme-selection-bg); -} diff --git a/docs/reference/api-reference.md b/docs/reference/api-reference.md deleted file mode 100644 index ae1cb2e9b..000000000 --- a/docs/reference/api-reference.md +++ /dev/null @@ -1,195 +0,0 @@ ---- -layout: ~/layouts/MainLayout.astro -title: API Reference ---- - -## `Astro` global - -The `Astro` global is available in all contexts in `.astro` files. It has the following functions: - -### `Astro.fetchContent()` - -`Astro.fetchContent()` is a way to load local `*.md` files into your static site setup. You can either use this on its own, or within [Astro Collections](/core-concepts/collections). - -```jsx -// ./src/components/my-component.astro ---- -const data = Astro.fetchContent('../pages/post/*.md'); // returns an array of posts that live at ./src/pages/post/*.md ---- - -
-{data.slice(0, 3).map((post) => ( -
-

{post.title}

-

{post.description}

- Read more -
-))} -
-``` - -`.fetchContent()` only takes one parameter: a relative URL glob of which local files you'd like to import. Currently only `*.md` files are supported. It's synchronous, and returns an array of items of type: - -```js -{ - /** frontmatter from the post.. example frontmatter: - title: '', - tag: '', - date: '', - image: '', - author: '', - description: '', - **/ - astro: { - headers: [], // an array of h1...h6 elements in the markdown file - source: '', // raw source of the markdown file - html: '' // rendered HTML of the markdown file - }, - url: '' // the rendered path - }[] -``` - -### `Astro.slots` - -`Astro.slots` returns an object with any slotted regions passed into the current Astro file. - -```js -const { - heading as headingSlot, // true or undefined, based on whether `<* slot="heading">` was used. - default as defaultSlot, // true or undefined, based on whether `<* slot>` or `<* default>` was used. -} = Astro.slots; -``` - -### `Astro.request` - -`Astro.request` returns an object with the following properties: - -| Name | Type | Description | -| :------------- | :---- | :---------------------------------------------- | -| `url` | `URL` | The URL of the request being rendered. | -| `canonicalURL` | `URL` | [Canonical URL][canonical] of the current page. | - -⚠️ Temporary restriction: this is only accessible in top-level pages and not in sub-components. - -### `Astro.site` - -`Astro.site` returns a `URL` made from `buildOptions.site` in your Astro config. If undefined, this will return a URL generated from `localhost`. - -## Collections API - -### `collection` prop - -```jsx -const { collection } = Astro.props; -``` - -When using the [Collections API](/core-concepts/collections), `collection` is a prop exposed to the page with the following shape: - -| Name | Type | Description | -| :------------------------ | :-------------------: | :-------------------------------------------------------------------------------------------------------------------------------- | -| `collection.data` | `Array` | Array of data returned from `data()` for the current page. | -| `collection.start` | `number` | Index of first item on current page, starting at `0` (e.g. if `pageSize: 25`, this would be `0` on page 1, `25` on page 2, etc.). | -| `collection.end` | `number` | Index of last item on current page. | -| `collection.total` | `number` | The total number of items across all pages. | -| `collection.page.current` | `number` | The current page number, starting with `1`. | -| `collection.page.size` | `number` | How many items per-page. | -| `collection.page.last` | `number` | The total number of pages. | -| `collection.url.current` | `string` | Get the URL of the current page (useful for canonical URLs) | -| `collection.url.prev` | `string \| undefined` | Get the URL of the previous page (will be `undefined` if on page 1). | -| `collection.url.next` | `string \| undefined` | Get the URL of the next page (will be `undefined` if no more pages). | -| `collection.params` | `object` | If page params were used, this returns a `{ key: value }` object of all values. | - -### `createCollection()` - -```jsx -export async function createCollection() { - return { - async data({ params }) { - // load data - }, - pageSize: 25, - routes: [{ tag: 'movie' }, { tag: 'television' }], - permalink: ({ params }) => `/tag/${params.tag}`, - }; -} -``` - -When using the [Collections API](/core-concepts/collections), `createCollection()` is an async function that returns an object of the following shape: - -| Name | Type | Description | -| :---------- | :--------------------------------------: | :--------------------------------------------------------------------------------------------------------- | -| `data` | `async ({ params }) => any[]` | **Required.** Load an array of data with this function to be returned. | -| `pageSize` | `number` | Specify number of items per page (default: `25`). | -| `routes` | `params[]` | **Required for URL Params.** Return an array of all possible URL `param` values in `{ name: value }` form. | -| `permalink` | `({ params }) => string` | **Required for URL Params.** Given a `param` object of `{ name: value }`, generate the final URL.\* | -| `rss` | [RSS](/reference/api-reference#rss-feed) | Optional: generate an RSS 2.0 feed from this collection ([docs](/reference/api-reference#rss-feed)) | - -_\* Note: don't create confusing URLs with `permalink`, e.g. rearranging params conditionally based on their values._ - -⚠️ `createCollection()` executes in its own isolated scope before page loads. Therefore you can't reference anything from its parent scope. If you need to load data you may fetch or use async `import()`s within the function body for anything you need (that's why it's `async`—to give you this ability). If it wasn't isolated, then `collection` would be undefined! Therefore, duplicating imports between `createCollection()` and your Astro component is OK. - -#### RSS Feed - -You can optionally generate an RSS 2.0 feed from `createCollection()` by adding an `rss` option. Here are all the options: - -```jsx -export async function createCollection() { - return { - async data({ params }) { - // load data - }, - pageSize: 25, - rss: { - title: 'My RSS Feed', - description: 'Description of the feed', - /** (optional) add xmlns:* properties to root element */ - xmlns: { - itunes: 'http://www.itunes.com/dtds/podcast-1.0.dtd', - content: 'http://purl.org/rss/1.0/modules/content/', - }, - /** (optional) add arbitrary XML to */ - customData: `en-us -The Sunset Explorers`, - /** Format each item from things returned in data() */ - item: (item) => ({ - title: item.title, - description: item.description, - pubDate: item.pubDate + 'Z', // enforce GMT timezone (otherwise it'll be different based on where it's built) - /** (optional) add arbitrary XML to each */ - customData: `${item.type} -${item.duration} -${item.explicit || false}`, - }), - }, - }; -} -``` - -Astro will generate an RSS 2.0 feed at `/feed/[collection].xml` (for example, `/src/pages/$podcast.xml` would generate `/feed/podcast.xml`). - -⚠️ Even though Astro will create the RSS feed for you, you'll still need to add `` tags manually in your `` HTML: - -```html - -``` - -## `import.meta` - -All ESM modules include a `import.meta` property. Astro adds `import.meta.env` through [Vite](https://vitejs.dev/guide/env-and-mode.html). - -**import.meta.env.SSR** can be used to know when rendering on the server. Sometimes you might want different logic, for example a component that should only be rendered in the client: - -```jsx -import { h } from 'preact'; - -export default function () { - return import.meta.env.SSR ?
: ; -} -``` - -[canonical]: https://en.wikipedia.org/wiki/Canonical_link_element diff --git a/docs/src/components/Card.astro b/docs/src/components/Card.astro deleted file mode 100644 index 21b5deb68..000000000 --- a/docs/src/components/Card.astro +++ /dev/null @@ -1,62 +0,0 @@ ---- -const { data, index } = Astro.props; -const hasScreenshot = !!data.demo; -const backgroundStyle = hasScreenshot - ? `url('https://v1.screenshot.11ty.dev/${encodeURIComponent( - data.demo - )}/medium/9:16/')` - : `linear-gradient(60deg, var(--theme-bg-accent), var(--theme-accent))`; ---- - - - - diff --git a/docs/src/components/Footer/AvatarList.astro b/docs/src/components/Footer/AvatarList.astro deleted file mode 100644 index 5eb0c3692..000000000 --- a/docs/src/components/Footer/AvatarList.astro +++ /dev/null @@ -1,176 +0,0 @@ ---- -// fetch all commits for just this page's path - -export interface Props { - path: string; -} - -const { path } = Astro.props as Props; -const commitPath = 'docs/' + path; -const url = `https://api.github.com/repos/withastro/astro/commits?path=${commitPath}`; -const commitsURL = `https://github.com/withastro/astro/commits/main/${commitPath}`; - -async function getCommits(url) { - try { - const token = import.meta.env.SNOWPACK_PUBLIC_GITHUB_TOKEN; - if (!token) { - throw new Error( - 'Cannot find "SNOWPACK_PUBLIC_GITHUB_TOKEN" used for escaping rate-limiting.' - ); - } - - const auth = `Basic ${Buffer.from(token, 'binary').toString('base64')}`; - - const res = await fetch(url, { - method: 'GET', - headers: { - Authorization: auth, - 'User-Agent': 'astro-docs/1.0', - }, - }); - - const data = await res.json(); - - if (!res.ok) { - throw new Error( - `Request to fetch commits failed. Reason: ${res.statusText} - Message: ${data.message}` - ); - } - - return data; - } catch (e) { - console.warn(`[error] /src/components/AvatarList.astro - ${e?.message ?? e}`); - return new Array(); - } -} - -function removeDups(arr) { - if (!arr) { - return new Array(); - } - let map = new Map(); - - for (let item of arr) { - let author = item.author; - // Deduplicate based on author.id - map.set(author.id, { login: author.login, id: author.id }); - } - - return Array.from(map.values()); -} - -const data = await getCommits(url); -const unique = removeDups(data); -const recentContributors = unique.slice(0, 3); // only show avatars for the 3 most recent contributors -const additionalContributors = unique.length - recentContributors.length; // list the rest of them as # of extra contributors ---- - - -
-
    - {recentContributors.map((item) => ( -
  • - - {`Contributor - -
  • - ))} -
- {additionalContributors > 0 && ( - - {`and ${additionalContributors} additional contributor${ - additionalContributors > 1 ? 's' : '' - }.`} - - )} - {unique.length === 0 && Contributors} -
- - diff --git a/docs/src/components/Footer/Footer.astro b/docs/src/components/Footer/Footer.astro deleted file mode 100644 index d13f832e5..000000000 --- a/docs/src/components/Footer/Footer.astro +++ /dev/null @@ -1,16 +0,0 @@ ---- -import AvatarList from './AvatarList.astro'; -const { path } = Astro.props; ---- - -
- -
- - diff --git a/docs/src/components/HeadCommon.astro b/docs/src/components/HeadCommon.astro deleted file mode 100644 index ca0782b60..000000000 --- a/docs/src/components/HeadCommon.astro +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/src/components/HeadSEO.astro b/docs/src/components/HeadSEO.astro deleted file mode 100644 index 6b62c9d1f..000000000 --- a/docs/src/components/HeadSEO.astro +++ /dev/null @@ -1,52 +0,0 @@ ---- -import { SITE, OPEN_GRAPH } from '../config.ts'; -import { getLanguageFromURL } from '../util.ts'; -export interface Props { - content: any; - site: any; - canonicalURL: URL; -} -const { content = {}, canonicalURL } = Astro.props; -const imageSrc = content?.image?.src ?? OPEN_GRAPH.image.src; -const canonicalImageSrc = new URL(imageSrc, Astro.site); -const imageAlt = content?.image?.alt ?? OPEN_GRAPH.image.alt; -const lang = canonicalURL && getLanguageFromURL(canonicalURL.pathname); ---- - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/src/components/Header/AstroLogo.astro b/docs/src/components/Header/AstroLogo.astro deleted file mode 100644 index 860b2d2b1..000000000 --- a/docs/src/components/Header/AstroLogo.astro +++ /dev/null @@ -1,36 +0,0 @@ ---- -const { size } = Astro.props; ---- - - diff --git a/docs/src/components/Header/Header.astro b/docs/src/components/Header/Header.astro deleted file mode 100644 index 2196670c8..000000000 --- a/docs/src/components/Header/Header.astro +++ /dev/null @@ -1,184 +0,0 @@ ---- -import SkipToContent from './SkipToContent.astro'; -import SidebarToggle from './SidebarToggle.tsx'; -import LanguageSelect from './LanguageSelect.tsx'; -import Search from './Search.tsx'; -import { getLanguageFromURL } from '../../util.ts'; -const { currentPage } = Astro.props; -const lang = currentPage && getLanguageFromURL(currentPage); ---- - -
- - -
- - diff --git a/docs/src/components/Header/LanguageSelect.css b/docs/src/components/Header/LanguageSelect.css deleted file mode 100644 index 4c6cf6123..000000000 --- a/docs/src/components/Header/LanguageSelect.css +++ /dev/null @@ -1,50 +0,0 @@ -.language-select { - flex-grow: 1; - width: 48px; - box-sizing: border-box; - margin: 0; - padding: 0.33em 2rem; - overflow: visible; - font-weight: 500; - font-size: 1rem; - font-family: inherit; - line-height: inherit; - background-color: var(--theme-bg); - border-color: var(--theme-text-lighter); - color: var(--theme-text-light); - border-style: solid; - border-width: 1px; - border-radius: 0.25rem; - outline: 0; - cursor: pointer; - transition-timing-function: ease-out; - transition-duration: 0.2s; - transition-property: border-color, color; - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e"); - background-position: 97%; - background-repeat: no-repeat; - background-size: 1.5em 1.5em; - -webkit-font-smoothing: antialiased; - -webkit-appearance: none; -} -.language-select-wrapper .language-select:hover, -.language-select-wrapper .language-select:focus { - color: var(--theme-text); - border-color: var(--theme-text-light); -} -.language-select-wrapper { - color: var(--theme-text-light); - position: relative; -} -.language-select-wrapper > svg { - position: absolute; - top: 8px; - left: 8px; - pointer-events: none; -} - -@media (min-width: 50em) { - .language-select { - width: 100%; - } -} diff --git a/docs/src/components/Header/LanguageSelect.tsx b/docs/src/components/Header/LanguageSelect.tsx deleted file mode 100644 index 70fb405a4..000000000 --- a/docs/src/components/Header/LanguageSelect.tsx +++ /dev/null @@ -1,102 +0,0 @@ -import type { FunctionalComponent } from 'preact'; -import { h } from 'preact'; -import './LanguageSelect.css'; - -const LanguageSelect: FunctionalComponent<{ lang: string }> = ({ lang }) => { - return ( -
- - -
- ); -}; - -export default LanguageSelect; diff --git a/docs/src/components/Header/Search.css b/docs/src/components/Header/Search.css deleted file mode 100644 index 42da3832c..000000000 --- a/docs/src/components/Header/Search.css +++ /dev/null @@ -1,75 +0,0 @@ -/** Style Algolia */ -:root { - --docsearch-primary-color: var(--theme-accent); - --docsearch-logo-color: var(--theme-text); -} - -.DocSearch-Modal .DocSearch-Hit a { - box-shadow: none; - border: 1px solid var(--theme-accent); -} - -/** Style Search Bar */ -.search-placeholder { - flex-grow: 1; - text-align: initial; -} -.search-input { - flex-grow: 1; - box-sizing: border-box; - width: 100%; - margin: 0; - padding: 0.33em 0.5em; - overflow: visible; - font-weight: 500; - font-size: 1rem; - font-family: inherit; - line-height: inherit; - background-color: var(--theme-divider); - border-color: var(--theme-divider); - color: var(--theme-text-light); - border-style: solid; - border-width: 1px; - border-radius: 0.25rem; - outline: 0; - cursor: pointer; - transition-timing-function: ease-out; - transition-duration: 0.2s; - transition-property: border-color, color; - -webkit-font-smoothing: antialiased; -} -.search-input:hover, -.search-input:focus { - color: var(--theme-text); - border-color: var(--theme-text-light); -} -.search-input:hover::placeholder, -.search-input:focus::placeholder { - color: var(--theme-text-light); -} -.search-input::placeholder { - color: var(--theme-text-light); -} -.search-hint { - padding: 3px 5px; - display: none; - display: none; - align-items: center; - justify-content: center; - letter-spacing: 0.125em; - font-size: 13px; - font-family: var(--font-mono); - pointer-events: none; - border-color: var(--theme-text-lighter); - color: var(--theme-text-light); - border-style: solid; - border-width: 1px; - border-radius: 0.25rem; - line-height: 14px; -} - -@media (min-width: 50em) { - .search-hint { - display: flex; - } -} diff --git a/docs/src/components/Header/Search.tsx b/docs/src/components/Header/Search.tsx deleted file mode 100644 index 8f2cfe649..000000000 --- a/docs/src/components/Header/Search.tsx +++ /dev/null @@ -1,93 +0,0 @@ -/* jsxImportSource: react */ -import { useState, useCallback, useRef } from 'react'; -import { createPortal } from 'react-dom'; -import * as docsearch from '@docsearch/react'; -import '@docsearch/css/dist/style.css'; -import './Search.css'; - -const { DocSearchModal, useDocSearchKeyboardEvents } = - (docsearch as unknown as { default: typeof docsearch }).default || docsearch; - -export default function Search(props) { - const [isOpen, setIsOpen] = useState(false); - const searchButtonRef = useRef(); - const [initialQuery, setInitialQuery] = useState(null); - const { lang = 'en' } = props; - - const onOpen = useCallback(() => { - setIsOpen(true); - }, [setIsOpen]); - - const onClose = useCallback(() => { - setIsOpen(false); - }, [setIsOpen]); - - const onInput = useCallback( - (e) => { - setIsOpen(true); - setInitialQuery(e.key); - }, - [setIsOpen, setInitialQuery] - ); - - useDocSearchKeyboardEvents({ - isOpen, - onOpen, - onClose, - onInput, - searchButtonRef, - }); - - return ( - <> - - {isOpen && - createPortal( - { - return items.map((item) => { - // We transform the absolute URL into a relative URL to - // work better on localhost, preview URLS. - const a = document.createElement('a'); - a.href = item.url; - const hash = a.hash === '#overview' ? '' : a.hash; - return { - ...item, - url: `${a.pathname}${hash}`, - }; - }); - }} - />, - document.body - )} - - ); -} diff --git a/docs/src/components/Header/SidebarToggle.tsx b/docs/src/components/Header/SidebarToggle.tsx deleted file mode 100644 index 2be9dee9a..000000000 --- a/docs/src/components/Header/SidebarToggle.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import type { FunctionalComponent } from 'preact'; -import { h, Fragment } from 'preact'; -import { useState, useEffect } from 'preact/hooks'; - -const MenuToggle: FunctionalComponent = () => { - const [sidebarShown, setSidebarShown] = useState(false); - - useEffect(() => { - const body = document.getElementsByTagName('body')[0]; - if (sidebarShown) { - body.classList.add('mobile-sidebar-toggle'); - } else { - body.classList.remove('mobile-sidebar-toggle'); - } - }, [sidebarShown]); - - return ( - - ); -}; - -export default MenuToggle; diff --git a/docs/src/components/Header/SkipToContent.astro b/docs/src/components/Header/SkipToContent.astro deleted file mode 100644 index 9e3844e6f..000000000 --- a/docs/src/components/Header/SkipToContent.astro +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/docs/src/components/LeftSidebar/LeftSidebar.astro b/docs/src/components/LeftSidebar/LeftSidebar.astro deleted file mode 100644 index a37b04d53..000000000 --- a/docs/src/components/LeftSidebar/LeftSidebar.astro +++ /dev/null @@ -1,186 +0,0 @@ ---- -import { SIDEBAR } from '../../config.ts'; -import { - getLanguageFromURL, - removeLeadingSlash, - removeTrailingSlash, -} from '../../util.ts'; -const { currentPage } = Astro.props; - -// Get the slug w/o a leading or trailing slash -const currentPageMatch = removeLeadingSlash(removeTrailingSlash(currentPage)); -const langCode = getLanguageFromURL(currentPage); -// SIDEBAR is a flat array. Group it by sections to properly render. -const sidebarSections = SIDEBAR[langCode].reduce((col, item) => { - if (item.header) { - col.push({ ...item, children: [] }); - } else { - col[col.length - 1].children.push(item); - } - return col; -}, []); ---- - - - - - - diff --git a/docs/src/components/PageContent/PageContent.astro b/docs/src/components/PageContent/PageContent.astro deleted file mode 100644 index da9939e50..000000000 --- a/docs/src/components/PageContent/PageContent.astro +++ /dev/null @@ -1,78 +0,0 @@ ---- -import MoreMenu from '../RightSidebar/MoreMenu.astro'; -import TableOfContents from '../RightSidebar/TableOfContents.tsx'; -import { getLanguageFromURL } from '../../util.ts'; -import { SIDEBAR } from '../../config.ts'; -const { content, githubEditUrl, currentPage } = Astro.props; -const title = content.title; -const headers = content.astro?.headers; -const langCode = getLanguageFromURL(currentPage); -const links = SIDEBAR[langCode].filter( - (x) => x.link && typeof x.header === 'undefined' -); -// handle cases with a trailing slash or not -const index = links.findIndex( - (x) => `/${x.link}/` === currentPage || `/${x.link}` === currentPage -); -const next = - index !== -1 ? (index === links.length - 1 ? null : links[index + 1]) : null; -const previous = index !== -1 ? (index === 0 ? null : links[index - 1]) : null; ---- - -
-
-

{title}

- {headers && ( - - )} - -
- - {(previous || next) && ( - - )} -
- - diff --git a/docs/src/components/RightSidebar/MoreMenu.astro b/docs/src/components/RightSidebar/MoreMenu.astro deleted file mode 100644 index 981a1a9b8..000000000 --- a/docs/src/components/RightSidebar/MoreMenu.astro +++ /dev/null @@ -1,91 +0,0 @@ ---- -import ThemeToggleButton from './ThemeToggleButton.tsx'; -const { editHref } = Astro.props; ---- - -

More

- -
- -
- - diff --git a/docs/src/components/RightSidebar/RightSidebar.astro b/docs/src/components/RightSidebar/RightSidebar.astro deleted file mode 100644 index f447f4408..000000000 --- a/docs/src/components/RightSidebar/RightSidebar.astro +++ /dev/null @@ -1,29 +0,0 @@ ---- -import TableOfContents from './TableOfContents.tsx'; -import MoreMenu from './MoreMenu.astro'; -const { content, githubEditUrl } = Astro.props; -const headers = content.astro?.headers; ---- - - - - diff --git a/docs/src/components/RightSidebar/TableOfContents.tsx b/docs/src/components/RightSidebar/TableOfContents.tsx deleted file mode 100644 index 64ed93ba1..000000000 --- a/docs/src/components/RightSidebar/TableOfContents.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import type { FunctionalComponent } from 'preact'; -import { h, Fragment } from 'preact'; -import { useState, useEffect, useRef } from 'preact/hooks'; - -const TableOfContents: FunctionalComponent<{ headers: any[] }> = ({ - headers = [], -}) => { - const itemOffsets = useRef([]); - const [activeId, setActiveId] = useState(undefined); - - useEffect(() => { - const getItemOffsets = () => { - const titles = document.querySelectorAll('article :is(h1, h2, h3, h4)'); - itemOffsets.current = Array.from(titles).map((title) => ({ - id: title.id, - topOffset: title.getBoundingClientRect().top + window.scrollY, - })); - }; - - getItemOffsets(); - window.addEventListener('resize', getItemOffsets); - - return () => { - window.removeEventListener('resize', getItemOffsets); - }; - }, []); - - return ( - <> -

On this page

-
    - - {headers - .filter(({ depth }) => depth > 1 && depth < 4) - .map((header) => ( - - ))} -
- - ); -}; - -export default TableOfContents; diff --git a/docs/src/components/RightSidebar/ThemeToggleButton.css b/docs/src/components/RightSidebar/ThemeToggleButton.css deleted file mode 100644 index d8cd7c2ac..000000000 --- a/docs/src/components/RightSidebar/ThemeToggleButton.css +++ /dev/null @@ -1,38 +0,0 @@ -.theme-toggle { - display: inline-flex; - align-items: center; - gap: 0.25em; - padding: 0.33em 0.67em; - border-radius: 99em; - background-color: var(--theme-code-inline-bg); -} - -.theme-toggle > label:focus-within { - outline: 2px solid transparent; - box-shadow: 0 0 0 0.08em var(--theme-accent), 0 0 0 0.12em white; -} - -.theme-toggle > label { - color: var(--theme-code-inline-text); - position: relative; - display: flex; - align-items: center; - justify-content: center; - opacity: 0.5; - cursor: pointer; -} - -.theme-toggle .checked { - color: var(--theme-accent); - opacity: 1; -} - -input[name='theme-toggle'] { - position: absolute; - opacity: 0; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: -1; -} diff --git a/docs/src/components/RightSidebar/ThemeToggleButton.tsx b/docs/src/components/RightSidebar/ThemeToggleButton.tsx deleted file mode 100644 index 3cdc5bc0c..000000000 --- a/docs/src/components/RightSidebar/ThemeToggleButton.tsx +++ /dev/null @@ -1,83 +0,0 @@ -import type { FunctionalComponent } from 'preact'; -import { h, Fragment } from 'preact'; -import { useState, useEffect } from 'preact/hooks'; -import './ThemeToggleButton.css'; - -const themes = ['light', 'dark']; - -const icons = [ - - - , - - - , -]; - -function ThemeToggle() { - const [theme, setTheme] = useState(() => { - if (import.meta.env.SSR) { - return undefined; - } - if (typeof localStorage !== 'undefined' && localStorage.getItem('theme')) { - return localStorage.getItem('theme'); - } - if (window.matchMedia('(prefers-color-scheme: dark)').matches) { - return 'dark'; - } - return 'light'; - }); - - useEffect(() => { - const root = document.documentElement; - if (theme === 'light') { - root.classList.remove('theme-dark'); - } else { - root.classList.add('theme-dark'); - } - }, [theme]); - - return ( -
- {themes.map((t, i) => { - const icon = icons[i]; - const checked = t === theme; - return ( - - ); - })} -
- ); -} - -export default ThemeToggle; diff --git a/docs/src/config.ts b/docs/src/config.ts deleted file mode 100644 index 8514a171f..000000000 --- a/docs/src/config.ts +++ /dev/null @@ -1,204 +0,0 @@ -export const SIDEBAR = { - en: [ - { text: 'Setup', header: true }, - { text: 'Getting Started', link: 'en/getting-started' }, - { text: 'Quickstart', link: 'en/quick-start' }, - { text: 'Installation', link: 'en/installation' }, - { text: 'Themes', link: 'en/themes' }, - { text: 'Astro vs. X', link: 'en/comparing-astro-vs-other-tools' }, - { text: 'Migrate to v0.21', link: 'en/migration/0.21.0' }, - - { text: 'Basics', header: true }, - { text: 'Project Structure', link: 'en/core-concepts/project-structure' }, - { text: 'Component Syntax', link: 'en/core-concepts/astro-components' }, - { text: 'Pages', link: 'en/core-concepts/astro-pages' }, - { text: 'Layouts', link: 'en/core-concepts/layouts' }, - { text: 'Routing', link: 'en/core-concepts/routing' }, - { text: 'Partial Hydration', link: 'en/core-concepts/component-hydration' }, - - { text: 'Guides', header: true }, - { text: 'Styling & CSS', link: 'en/guides/styling' }, - { text: 'Markdown', link: 'en/guides/markdown-content' }, - { text: 'Debugging', link: 'en/guides/debugging' }, - { text: 'Data Fetching', link: 'en/guides/data-fetching' }, - { text: 'Pagination', link: 'en/guides/pagination' }, - { text: 'RSS', link: 'en/guides/rss' }, - { text: 'Supported Imports', link: 'en/guides/imports' }, - { text: 'Aliases', link: 'en/guides/aliases' }, - { text: 'Environment Variables', link: 'en/guides/environment-variables' }, - { text: 'Deploy to the web', link: 'en/guides/deploy' }, - { text: 'Publish to npm', link: 'en/guides/publish-to-npm' }, - - { text: 'Reference', header: true }, - { text: 'Built-In Components', link: 'en/reference/builtin-components' }, - { text: 'API Reference', link: 'en/reference/api-reference' }, - { text: 'CLI Reference', link: 'en/reference/cli-reference' }, - { - text: 'Configuration Reference', - link: 'en/reference/configuration-reference', - }, - { text: 'Renderer Reference', link: 'en/reference/renderer-reference' }, - ], - de: [ - { text: 'Einrichtung', header: true }, - { text: 'Erste Schritte', link: 'de/getting-started' }, - { text: 'Schnellstart', link: 'de/quick-start' }, - { text: 'Installation', link: 'de/installation' }, - { text: 'Vorlagen', link: 'de/themes' }, - { text: 'Astro vs. X', link: 'de/comparing-astro-vs-other-tools' }, - { text: 'Umstellung auf v0.21', link: 'de/migration/0.21.0' }, - - { text: 'Grundlagen', header: true }, - { text: 'Projektstruktur', link: 'de/core-concepts/project-structure' }, - { text: 'Astro-Komponenten', link: 'de/core-concepts/astro-components' }, - { text: 'Astro-Seiten', link: 'de/core-concepts/astro-pages' }, - { text: 'Layouts', link: 'de/core-concepts/layouts' }, - { text: 'Routing', link: 'de/core-concepts/routing' }, - { text: 'Partial Hydration', link: 'de/core-concepts/component-hydration' }, - - { text: 'Anleitungen', header: true }, - { text: 'Styling & CSS', link: 'de/guides/styling' }, - - { text: 'Referenz', header: true }, - ], - nl: [ - { text: 'Welkom', header: true }, - { text: 'Beginnen', link: 'nl/getting-started' }, - { text: 'Snel start', link: 'nl/quick-start' }, - ], - fi: [ - { text: 'Tervetuloa', header: true }, - { text: 'Aloittaminen', link: 'fi/getting-started' }, - { text: 'Pika-aloitus', link: 'fi/quick-start' }, - { text: 'Asennus', link: 'fi/installation' }, - ], - es: [ - { text: 'Configuración', header: true }, - { text: 'Empezando', link: 'es/getting-started' }, - { text: 'Comienzo rápido', link: 'es/quick-start' }, - { text: 'Instalación', link: 'es/installation' }, - { text: 'Astro vs. X', link: 'es/comparing-astro-vs-other-tools' }, - - { text: 'Fundamentos', header: true }, - { - text: 'Estructura del Proyecto', - link: 'es/core-concepts/project-structure', - }, - { - text: 'Sintaxis del Componente', - link: 'es/core-concepts/astro-components', - }, - { text: 'Páginas', link: 'es/core-concepts/astro-pages' }, - { text: 'Maquetas', link: 'es/core-concepts/layouts' }, - { text: 'Enrutamiento', link: 'es/core-concepts/routing' }, - { - text: 'Hidratación parcial', - link: 'es/core-concepts/component-hydration', - }, - - { text: 'Guías', header: true }, - { text: 'Estilo y CSS', link: 'es/guides/styling' }, - { text: 'Markdown', link: 'es/guides/markdown-content' }, - { text: 'Depuración', link: 'es/guides/debugging' }, - { text: 'Obtención de datos', link: 'es/guides/data-fetching' }, - { text: 'Paginación', link: 'es/guides/pagination' }, - { text: 'RSS', link: 'es/guides/rss' }, - { text: 'Importaciones admitidas', link: 'es/guides/imports' }, - { text: 'Alias', link: 'es/guides/aliases' }, - { text: 'Desplegar en la web', link: 'es/guides/deploy' }, - { text: 'Publicar en npm', link: 'es/guides/publish-to-npm' }, - - { text: 'Referencia', header: true }, - { - text: 'Componentes incorporados', - link: 'es/reference/builtin-components', - }, - { text: 'Referencia de API', link: 'es/reference/api-reference' }, - { text: 'Referencia de CLI', link: 'es/reference/cli-reference' }, - { - text: 'Referencia de configuración', - link: 'es/reference/configuration-reference', - }, - { - text: 'Referencia de renderizador', - link: 'es/reference/renderer-reference', - }, - ], - 'zh-CN': [ - { text: '起步', header: true }, - { text: '入门指南', link: 'zh-CN/getting-started' }, - { text: '快速入门', link: 'zh-CN/quick-start' }, - { text: '安装指南', link: 'zh-CN/installation' }, - { text: '模板样例', link: 'zh-CN/examples' }, - { - text: 'Astro 对比其他框架', - link: 'zh-CN/comparing-astro-vs-other-tools', - }, - ], - 'zh-TW': [ - { text: '設定', header: true }, - { text: '新手上路', link: 'zh-TW/getting-started' }, - { text: '快速開始', link: 'zh-TW/quick-start' }, - { text: '安裝', link: 'zh-TW/installation' }, - { text: '佈景主題', link: 'zh-TW/themes' }, - ], - bg: [ - { text: 'Главни', header: true }, - { text: 'Започваме!', link: 'bg/getting-started' }, - ], - fr: [ - { text: 'Bienvenue', header: true }, - { text: 'Bien démarrer', link: 'fr/getting-started' }, - { text: 'Démarrage rapide', link: 'fr/quick-start' }, - { text: 'Installation', link: 'fr/installation' }, - ], - bn: [ - { text: 'সেটআপ', header: true }, - { text: 'শুরু করুন', link: 'bn/getting-started' }, - ], - kr: [ - { text: '환영합니다', header: true }, - { text: '시작하기', link: 'kr/getting-started' }, - ], - ar: [ - { text: 'التهيئة', header: true }, - { text: 'باشر البدأ', link: 'ar/getting-started' }, - ], - da: [ - { text: 'Velkommen', header: true }, - { text: 'Introduktion', link: 'da/getting-started' }, - ], - ja: [ - { text: 'セットアップ', header: true }, - { text: 'はじめに', link: 'ja/getting-started' }, - { text: 'クイックスタート', link: 'ja/quick-start' }, - { text: 'インストール', link: 'ja/installation' }, - { text: 'テーマ', link: 'ja/themes' }, - { text: 'Astro vs. X', link: 'ja/comparing-astro-vs-other-tools' }, - ], - ru: [ - { text: 'Введение', header: true }, - { text: 'Начало работы', link: 'ru/getting-started' }, - { text: 'Быстрый старт', link: 'ru/quick-start' }, - ], - it: [ - { text: 'Impostare', header: true }, - { text: 'Come iniziare', link: 'it/getting-started' }, - ], -}; - -export const SITE = { - title: 'Astro Documentation', - description: 'Build faster websites with less client-side Javascript.', -}; - -export const OPEN_GRAPH = { - locale: 'en_US', - image: { - src: '/default-og-image.png?v=1', - alt: - 'astro logo on a starry expanse of space,' + - ' with a purple saturn-like planet floating in the right foreground', - }, - twitter: 'astrodotbuild', -}; diff --git a/docs/src/data/components.json b/docs/src/data/components.json deleted file mode 100644 index 1abe45fc0..000000000 --- a/docs/src/data/components.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "official": [], - "community": [ - { - "name": "Accessible Astro Components", - "description": "A set of accessible modals, buttons, toggles and more.", - "github": "https://www.npmjs.com/package/accessible-astro-components", - "demo": null - }, - { - "name": "Astro Static Tweet", - "description": "A lightweight static-HTML tweet embed.", - "github": "https://www.npmjs.com/package/@rebelchris/astro-static-tweet", - "demo": null - }, - { - "name": "Astro SEO", - "description": "SEO tags for your website.", - "github": "https://github.com/jonasmerlin/astro-seo", - "demo": null - }, - { - "name": "Astro SPA", - "description": "A component for Astro JS that turns a website into an SPA.", - "github": "https://www.npmjs.com/package/astro-spa", - "demo": [ - "https://ohka-bots-site-astro-ksoqn4flk7-li4hm4z1a-tc-001.vercel.app/", - "https://astro-spafy-component-demo.netlify.app/" - ] - } - ] -} diff --git a/docs/src/data/themes.json b/docs/src/data/themes.json deleted file mode 100644 index 27142ac3c..000000000 --- a/docs/src/data/themes.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "featured": [ - { - "name": "Ink", - "description": "Crisp, minimal, personal blog theme for Astro", - "github": "https://github.com/one-aalam/astro-ink", - "demo": "https://astro-ink.vercel.app/", - "sandbox": "https://github.dev/one-aalam/astro-ink", - "command": "npm init astro -- --template one-aalam/astro-ink" - } - ], - "official": [ - { - "name": "Starter Kit", - "description": "A default starter project for Astro. Flexible enough to handle anything that you might want to build.", - "github": "https://github.com/withastro/astro/tree/main/examples/starter", - "demo": null, - "sandbox": "https://github.dev/withastro/astro/tree/main/examples/starter", - "command": "npm init astro" - }, - { - "name": "Docs", - "description": "A documentation website theme, complete with i18n, search, dark mode and more.", - "github": "https://github.com/withastro/astro/tree/main/examples/docs", - "demo": null, - "sandbox": "https://github.dev/withastro/astro/tree/main/examples/docs", - "command": "npm init astro -- --template docs" - }, - { - "name": "Blog", - "description": "A blog theme, perfect for personal and company blogs.", - "github": "https://github.com/withastro/astro/tree/main/examples/blog", - "demo": null, - "sandbox": "https://github.dev/withastro/astro/tree/main/examples/blog", - "command": "npm init astro -- --template blog" - }, - { - "name": "Portfolio", - "description": "A portfolio theme, perfect for your personal or professional online portfolio.", - "github": "https://github.com/withastro/astro/tree/main/examples/portfolio", - "demo": null, - "sandbox": "https://github.dev/withastro/astro/tree/main/examples/portfolio", - "command": "npm init astro -- --template portfolio" - }, - { - "name": "Portfolio-svelte", - "description": "A portfolio theme using Svelte components, perfect for your personal or professional online portfolio.", - "github": "https://github.com/withastro/astro/tree/main/examples/portfolio-svelte", - "demo": null, - "sandbox": "https://github.dev/withastro/astro/tree/main/examples/portfolio-svelte", - "command": "npm init astro -- --template portfolio-svelte" - }, - { - "name": "Minimal", - "description": "A minimal theme, with just the bare minimum needed to get started.", - "github": "https://github.com/withastro/astro/tree/main/examples/minimal", - "demo": null, - "sandbox": "https://github.dev/withastro/astro/tree/main/examples/minimal", - "command": "npm init astro -- --template minimal" - } - ], - "community": [ - { - "name": "Accessible Astro Starter", - "description": "A starter project with accessible features using Astro static site builder.", - "github": "https://github.com/markteekman/accessible-astro-starter", - "demo": "https://accessible-astro.markteekman.nl/", - "sandbox": "https://github.dev/markteekman/accessible-astro-starter", - "command": "npm init astro -- --template markteekman/accessible-astro-starter" - }, - { - "name": "Astro Theme Creek", - "description": "Creek is an open source blog theme for Astro SSG.", - "github": "https://github.com/robertguss/Astro-Theme-Creek", - "demo": "https://astro-theme-creek.netlify.app/", - "sandbox": "https://github.dev/robertguss/Astro-Theme-Creek", - "command": "npm init astro -- --template robertguss/Astro-Theme-Creek" - } - ] -} diff --git a/docs/src/layouts/MainLayout.astro b/docs/src/layouts/MainLayout.astro deleted file mode 100644 index b439b139f..000000000 --- a/docs/src/layouts/MainLayout.astro +++ /dev/null @@ -1,126 +0,0 @@ ---- -import HeadCommon from '../components/HeadCommon.astro'; -import HeadSEO from '../components/HeadSEO.astro'; -import Header from '../components/Header/Header.astro'; -import Footer from '../components/Footer/Footer.astro'; -import PageContent from '../components/PageContent/PageContent.astro'; -import LeftSidebar from '../components/LeftSidebar/LeftSidebar.astro'; -import RightSidebar from '../components/RightSidebar/RightSidebar.astro'; -import { SITE } from '../config.ts'; - -const { content = {}, hideRightSidebar = false } = Astro.props; -const currentPage = Astro.request.url.pathname; -const currentFile = `src/pages${currentPage.replace(/\/$/, '')}.md`; -const githubEditUrl = `https://github.com/withastro/astro/blob/main/docs/${currentFile}`; -const formatTitle = (content, SITE) => - content.title ? `${content.title} 🚀 ${SITE.title}` : SITE.title; ---- - - - - - - {formatTitle(content, SITE)} - - - - -
-
- -
- - - -
- -
- - diff --git a/docs/src/layouts/SplashLayout.astro b/docs/src/layouts/SplashLayout.astro deleted file mode 100644 index 7e4ea55b6..000000000 --- a/docs/src/layouts/SplashLayout.astro +++ /dev/null @@ -1,48 +0,0 @@ ---- -import HeadCommon from '../components/HeadCommon.astro'; -import Header from '../components/Header/Header.astro'; -import { SITE } from '../config.ts'; - -const { title } = Astro.props; ---- - - - - - {`${title} 🚀 ${SITE.title}`} - - - - -
-
-
- -
-
- - diff --git a/docs/src/pages/404.astro b/docs/src/pages/404.astro deleted file mode 100644 index 8a0bfbb5b..000000000 --- a/docs/src/pages/404.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -import SplashLayout from '../layouts/SplashLayout.astro'; ---- - - -

404

-

This page isn't in our solar system.

- Take me home. -
diff --git a/docs/src/pages/[...slug].astro b/docs/src/pages/[...slug].astro deleted file mode 100644 index 613e2b3d5..000000000 --- a/docs/src/pages/[...slug].astro +++ /dev/null @@ -1,19 +0,0 @@ ---- -export async function getStaticPaths() { - // get english pages that moved from `/` to `/en/` - const englishPages = Astro.fetchContent('./en/**/*.md'); - - // add pages that are `*.astro` files as well - const otherPages = [{ url: "/en/themes" }]; - return [...englishPages, ...otherPages].map((page) => ({ - params: { - slug: page.url.slice(4), - }, - props: { - englishSlug: page.url, - } - })); -} ---- - - diff --git a/docs/src/pages/ar/getting-started.md b/docs/src/pages/ar/getting-started.md deleted file mode 100644 index 81d214ab2..000000000 --- a/docs/src/pages/ar/getting-started.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -layout: ~/layouts/MainLayout.astro -title: باشر بالبدأ -lang: ar -dir: rtl ---- - -Astro هو باني موقع ثابت. تعرف أكثر حول ماهية Astro من خلال [صفحتنا الرئيسية](https://astro.build/) أو نشرة [الإصدارات](https://astro.build/blog/introducing-astro). تُعد هذه الصفحة نُبذة موجزة للتوثيق الخاص بـAstro وأيضًا لكل المصادر التي تتعلق به. - -إن كنت تتطلع عن ملخص سريع حول ما هو Astro بشكلٍ عام؟ [تفقد صفحتنا الرئيسية.](https://astro.build/blog/introducing-astro) - -## جرب Astro - -أبسط طريقة لتجرب Astro هي بتنفيذ أمر `npm init astro` في داخل مُجلد جديد على جهازك، وسيقوم Astro CLI بمُساعدتك على بدأ مشروع Astro جديد. - -لتباشر البدأ باستخدام Astro من خلال 5 خطوات سريعة وبسيطة، تفقد [دليل البدأ-بسرعة](quick-start). - -أو إقرأ [دليل التثبيت](/installation) إن كنت تريد الغوص في عملية تهيئة Astro. - -### أمثلة على بعض المشاريع - -أن كنت تفضل التعلم عن طريق الأمثلة، ألقي نظرةٍ على [مكتبة الأمثلة الشاملة](https://github.com/withastro/astro/tree/main/examples) المتواجدة على Github. - -بمقدورك الإطلاع على أي من هذه الأمثلة وتجربتها مُباشرةً على جهازك، -فقط نفذ الأمر npm init astro متبوعًا بـ -`--template`. الإشارة `--template` أيضًا تدعم الامثلة الخارجية التي يصنعها المجتمع - -```bash -# أمر تهيئة أحد القوالب الرسمية التي يوفرها استرو -npm init astro -- --template [OFFICIAL_EXAMPLE_NAME] -# أمر تهيئة القوالب الخارجية التي يوفرها المُجتمع -npm init astro -- --template [GITHUB_USER]/[REPO_NAME] -npm init astro -- --template [GITHUB_USER]/[REPO_NAME]/path/to/example -``` - -### جربه على المُتصفح - -إن كنت مهتمًا وتريد اللعب وتجربة Astro على المتصفح، بمقدورك استخدام online code playground، جرب قالب مشروعنا "Hello World" على [CodeSandbox](https://codesandbox.io/s/astro-template-hugb3). - -_ملحوظة: بعض المُميزات مُقتصرة على CodeSandbx (مثلاً: التحديث السريع "Fast Refresh") حاليًا._ - -## تعلمُ Astro - -يأتي العديد الأشخاص من خلفياتِ تعلم مُختلفة إلى Astro، أيًا كانت طريقة التعليم التي تفضلها سواءً أكنت تفضل الطريقة النظرية أو الطريقة العملية، نتمنى أن تجد هذا القسم مفيدًا. - -- إن كُنت تُفضل **التعلم من خلال التجربة العملية**، أبدأ من خلال [مكتبتنا للأمثلة](https://github.com/withastro/astro/tree/main/examples). -- إن كُنت تُفضل **التعلم من خلال الفهم خطوةً بخطوة**، أبدأ من خلال [دليل المفاهيم الأساسية والإرشادات](/core-concepts/project-structure). - -مثل أي تقنيةٍ ليست بمألوفة، Astro يأتيك بمنحنى تعليمي مختلف بعض الشيء، ولكن على أي حال، مع بعض الصبر والممارسة، نحن متأكدون بأنك _ستتأقلم معه_ في وقتٍ هين دون أن تشعر. - -### تعلمُ تركيب .astro النحوي (syntax) - -مع بدأ تعلمك لـAstro ستلاحظ العديد من الملفات التي تنتهي بصيغة .astro هي ملفات مكتوبة بـ Astro’s Component Syntax والتي تعد: طريقة كتابة مشابهة جدًا لملفات HTML يستخدمها Astro في القوالب. -صممت هذه الصيغة لتكون قريبة ومشابهة للـ HTML و JSX، إن كنت تعرف أحدهما فستتأقلم مع .astro بسهولة. - -تفقد دليلنا المساعد [مكونات Astro](/core-concepts/astro-components) سيكون مدخل يساعدك على تعلم Astro syntax، ويعد أفضل طريقة للتعلم. - -### مرجع للـAPI - -يُفيدك هذا الجزء من التوثيق حينما تريد الإطلاع أكثر بشأن تفاصيل Astro API. على سبيل المثال، يتضمن [مرجع الإعداد](/reference/configuration-reference) قائمة لكل الإعدادات الممكنة المتاحة لكي تستخدمها. [المكونات المصممة مسبقًا](/reference/builtin-components) تتضمن قائمة بكل العناصر الرئيسية مثل `` و ``. - -### إصدارات التوثيق - -هذا التوثيق يُسلط الضوء دومًا على أخر إصدار مستقر من Astro، وريثما نصل إلى إصدار 1.0 الرئيسي سنقوم بإضافة القابلية لتصفح اللإصدارات المختلفة من التوثيق. - -## أبقى مُطلعًا - -حساب [@astrodotbuild](https://twitter.com/astrodotbuild) على تويتر هو المصدر الرسمي لأخر المُستجدات من فريق Astro. - -ونحن أيضًا نُعد نشرة إصدارات ونعلن عنها في [مُجتمعنا على ديسكورد](https://astro.build/chat) على قناة #announcements - -ليست كل إصدارات Astro تملك تدوينة نشرةٍ خاصة بها، لكن ستجد سجلًا للتغيرات في ملف [`CHANGELOG.md` في مستودع Astro](https://github.com/withastro/astro/blob/main/packages/astro/CHANGELOG.md). - -## شيءٌ ما ناقص؟ - -إن كان هناك شيءُ ما غير مُوثق أو لو كنت تشعر بالحيرة والإرتباك من جزءٍ معين في التوثيق، لا تتردد في [رفع طلب خطبٌ ما في ملف التوثيق](https://github.com/withastro/astro/issues/new/choose)، مع اقتراحك للتحسين، أو قم بتغريد تغريدةٍ إلى حسابنا على تويتر [@astrodotbuild](https://twitter.com/astrodotbuild)، نحب سماع آرائك! - -## التَقدِير - -دليل باشر بالبدأ معتمدٌ على دليل البدأ الخاص بـ[React](https://ar.reactjs.org/). diff --git a/docs/src/pages/bg/getting-started.md b/docs/src/pages/bg/getting-started.md deleted file mode 100644 index 31f6143c0..000000000 --- a/docs/src/pages/bg/getting-started.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -layout: ~/layouts/MainLayout.astro -title: Започваме! ---- - -Astro е модерен builder за статични сайтове. Научете всичко за Astro от [нашата начална страница](https://astro.build/) или от [release поста](https://astro.build/blog/introducing-astro). Тази страница е оглед на документацията на Astro и всички свързани ресурси. - -## Пробвайте Astro - -Най-лесният начин да пробвате Astro е да изпълните `npm init astro` в нова локална директория. Нашият CLI Wizard ще Ви помогне да започнете нов Astro проект. - -За да започнете с Astro в 5 бързи и лесни стъпки, посетете нашия [Гид за бърз старт](quick-start). - -Алтернативно, можете да прочетете нашия [Инсталационен гид](/installation) за всичко относно настройката на Astro. - -### Онлайн площадки (playgrounds) - -Ако искате да си експериментирате с Astro в браузъра, можете да използвате онлайн площадка за код. Пробвайте нашия "Hello World!" темплейт на [CodeSandbox](https://codesandbox.io/s/astro-template-hugb3). - -_Бележка: някои функционалности (например: Fast Refresh) са лимитирани на CodeSandbox засега._ - -## Научете Astro - -Всякакви видове хора с различни методи за обучение се ориентират към Astro. Независимо дали предпочитате по-теоретичен, или по-практически подход, ние се надяваме че ще намерите тази секция за полезна. - -- Ако предпочитате да **учите чрез практика**, започнете с нашата [библиотека с примери](https://github.com/withastro/astro/tree/main/examples). -- Ако предпочитате да **учите концепции стъпка по стъпка**, започнете с нашите [базови концепции и гидове](/core-concepts/project-structure). - -Като всяка непозната технология, Astro изисква известно време, за да се научи. Но с практика и малко търпение, ние сме сигурни, че _ще го схванете_ за нула време. - -### Научете `.astro` синтаксис - -Когато започнете да учите Astro, ще видите много файлове с разширение `.astro`. Това е **Компонентният синтаксис на Astro** - -специален файлов формат наподобяващ HTML, който Astro използва за изграждане на страници (templating). Направен е, така че да е познат на всеки с HTML или JSX опит. - -Нашият помощен гид за [Astro компонентите](/core-concepts/astro-components) Ви запознава със синтаксисът на Astro и е най-добрият начин да се научите. - -### API Справка - -Тази секция е полезна, когато искате да научите повече детайли относно даден Astro API. Например - [Конфигурационната справка](/reference/configuration-reference) изброява всички възможни конфигурационни опции. [Справката за вградени компоненти](/reference/builtin-components) изброява всички възможни базови (core) компоненти, като `` и ``. - -### Версия на документацията - -Тази документация винаги рефлектира последната стабилна версия на Astro. Когато пуснем версия 1.0, ще добавим опция за преглед на предишни или бъдещи версии. - -## Бъдете информирани - -Официалният източник за новини от екипа на Astro е Twitter акаунтът - [@astrodotbuild](https://twitter.com/astrodotbuild). - -Публикуваме и съобщения относно нови версии в [нашия Discord сървър](https://astro.build/chat) в #announcements канала. - -Не всяка нова версия на Astro заслужава собствен блог пост, но можете да намерите регистър на промените за всеки релийз в [`CHANGELOG.MD` файла, намиращ се в репото на Astro](https://github.com/withastro/astro/blob/main/packages/astro/CHANGELOG.md). - -## Нещо липсва? - -Ако нещо липсва в документацията или намирате нещо за объркващо, моля [подайте го като issue за документацията](https://github.com/withastro/astro/issues/new/choose) с Вашите предложения за подобрение или пуснете tweet към [@astrodotbuild](https://twitter.com/astrodotbuild). Обичаме да чуваме от Вас! - -## Credit - -Първоначално този гид е базиран на документацията на [React](https://reactjs.org/). diff --git a/docs/src/pages/bn/getting-started.md b/docs/src/pages/bn/getting-started.md deleted file mode 100644 index 351e47e9c..000000000 --- a/docs/src/pages/bn/getting-started.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -layout: ~/layouts/MainLayout.astro -title: শুরু করুন ---- - -Astro হচ্ছে একটি আধুনিক স্ট্যাটিক ওয়েবসাইট বিল্ডার। Astro সম্পর্কে বিস্তারিত জানুন [আমাদের হোমপেজ](https://astro.build/) থেকে অথবা [আমাদের রিলিজ পোস্ট](https://astro.build/blog/introducing-astro) থেকে। এই পেজটি Astro-এর ডকুমেন্টেশন এবং এ সম্পর্কিত সকল বিষয়ের একটি সারাংশ। - -## Astro ব্যবহার করুন - -Astro ব্যবহার করার সবচেয়ে সহজ উপায় হচ্ছে আপনার কম্পিউটারের নতুন কোন ফোল্ডারে `npm init astro` রান করা। আমাদের সিএলআই উইজার্ড আপনাকে একটি নতুন Astro প্রোজেক্ট শুরু করতে সাহায্য করবে। - -মাত্র ৫টি সহজ ও ছোট ধাপে Astro নিয়ে কাজ করা শুরু করতে , আমাদের [কুইকস্টার্ট গাইডটি](quick-start) চেক করুন। - -অথবা, Astro সেটআপ এর উপর সম্পূর্ণ একটি ওয়াকথ্রুর জন্য আমাদের [ইন্সটলেশন গাইডটি](/installation) চেক করুন। - -### অনলাইন প্লেগ্রাউন্ড - -আপনি যদি ব্রাউজারে Astro নিয়ে কাজ করতে চান, তাহলে আপনি একটি অনলাইন কোড প্লেগ্রাউন্ড ব্যবহার করতে পারেন। এজন্য আমাদের [কোডস্যান্ডবক্স](https://codesandbox.io/s/astro-template-hugb3)-এর "Hello World!" টেমপ্লেটটি ব্যবহার করতে পারেন। - -_দ্রষ্টব্য: বর্তমানে কোডস্যান্ডবক্সে কিছু ফিচার (যেমন: ফাস্ট রিফ্রেশ) প্রাথমিক পর্যায়ে রয়েছে।_ - -## Astro শিখুন - -বিভিন্ন ব্যাকগ্রাউন্ডের বিভিন্ন ধরণের মানুষ বিভিন্ন পদ্ধতিতে শিখার আগ্রহ নিয়ে Astro-তে আসে। আপনি ব্যবহারিক বা তাত্ত্বিক যে পদ্ধতিতেই শিখতে পছন্দ করেন, আমাদের আশা এই অংশটি আপনাকে সহায়তা করবে। - -- যদি আপনি **করে করে** শিখতে পছন্দ করেন, তাহলে আমাদের [উদাহরণগুলো](https://github.com/withastro/astro/tree/main/examples) দিয়ে শুরু করুন। -- আর যদি আপনি **ধাপে ধাপে** বিষয়গুলো বুঝতে চান, তাহলে আমাদের [মৌলিক ধারণা এবং সহায়িকাসমূহ](/core-concepts/project-structure) দেখুন। - -অন্যান্য যেকোনো অপরিচিত প্রযুক্তির মতো, Astro শিখতেও কিছুটা প্রচেষ্টার প্রয়োজন রয়েছে। কিন্তু, আমরা জানি, আপনি লেগে থাকলে অতি দ্রুতই এর সাথে মানিয়ে নিতে _পারবেন_। - -### `.astro` সিনট্যাক্স শিখুন - -আপনি যখন Astro শিখা শুরু করবেন, আপনি অনেকগুলো `.astro` ফাইল খেয়াল করবেন। এটা **Astro-এর কম্পোনেন্ট সিনট্যাক্স**, একটি বিশেষ এইচটিএমএল-এর মতো ফাইল ফরম্যাট যা Astro টেমপ্লেটিং-এর জন্য ব্যবহার করে। এটাকে এইচটিএমএল এবং জেএসএক্স-এর সাথে মিল রেখে তৈরি করা হয়েছে। - -আমাদের [Astro কম্পোনেন্ট](/core-concepts/astro-components)-এর উপর সহায়ক গাইডটি আপনাকে Astro সিনট্যাক্স-এর সাথে পরিচিত করে তুলবে, আর এটিই শিখার সবচেয়ে ভালো উপায়। - -### এপিআই রেফারেন্স - -যদি আপনি কোনো নির্দিষ্ট Astro এপিআই-এর সম্বন্ধে বিস্তারিত জানতে চান তাহলে এই ডকুমেন্টেশনটি আপনাকে সাহায্য করবে। উদাহরণস্বরূপ, [কনফিগারেশন রেফারেন্সে](/reference/configuration-reference) সকল কনফিগারেশন অপশনের তালিকা দেয়া আছে। [বিল্ট-ইন কম্পোনেন্টস রেফারেন্সে](/reference/builtin-components) সকল বিল্ট-ইন কম্পোনেন্টের তালিকা দেয়া আছে, যেমন `` আর ``। - -### ভার্সনকৃত ডকুমেন্টেশন - -এই ডকুমেন্টেশনটি সবসময় Astro-এর লেটেস্ট ভার্সনকে প্রতিফলিত করে। যখন আমরা v1.0-এর মাইলফলকটি স্পর্শ করব, তখন আমরা ভার্সনকৃত ডকুমেন্টেশন ফিচারটি সংযোজন করব। - -## অবগত থাকুন - -[@astrodotbuild](https://twitter.com/astrodotbuild) টুইটার অ্যাকাউন্টটি Astro টিম থেকে যেকোনো আপডেট পাওয়ার অফিসিয়াল মাধ্যম। - -আমরা আমাদের [ডিসকর্ড সার্ভারের](https://astro.build/chat) **#announcements** চ্যানেলেও যেকোনো নতুন বিজ্ঞপ্তি প্রকাশ করে থাকি। - -প্রতিটি Astro রিলিজের জন্য আমরা নতুন ব্লগ পোস্ট করি না, কিন্তু আপনি Astro রিপোজিটরির [`CHANGELOG.md`](https://github.com/withastro/astro/blob/main/packages/astro/CHANGELOG.md) ফাইলে প্রতিটি রিলিজের বিস্তারিত পরিবর্তনসূচি দেখতে পারবেন। - -## কিছু অনুপস্থিত মনে হচ্ছে? - -আপনার যদি ডকুমেন্টেশনে কোনো কিছু অনুপস্থিত মনে হয় বা কোনো অংশকে বিভ্রান্তিকর মনে হয়, তাহলে দয়া করে আপনার পরামর্শসহ [একটি ইস্যু ফাইল করুন](https://github.com/withastro/astro/issues/new/choose) অথবা [@astrodotbuild](https://twitter.com/astrodotbuild) টুইটার অ্যাকাউন্টটিতে টুইট করুন। আমরা আপনাদের পরামর্শ শুনতে সর্বদা আগ্রহী! - -## ক্রেডিট - -এই গাইডটি মূলত [React-এর](https://reactjs.org/) **শুরু করুন** গাইডের উপর ভিত্তি করে লিখা হয়েছিল। diff --git a/docs/src/pages/da/getting-started.md b/docs/src/pages/da/getting-started.md deleted file mode 100644 index f6798f8b8..000000000 --- a/docs/src/pages/da/getting-started.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -layout: ~/layouts/MainLayout.astro -title: Introduktion -description: En grundlæggende introduktion til Astro. -lang: da ---- - -Astro er en moderne statisk side bygger. Lær hvad Astro handler om på [vores hjemmeside](https://astro.build/) eller [vores udgivelsesmeddelelser](https://astro.build/blog/introducing-astro). Denne side er et overblik over Astro-dokumentationen og alle relaterede ressourcer. - -## Prøv Astro - -Den nemmeste måde at prøve Astro på er ved at køre `npm init astro` i en ny mappe på din maskine. Vores CLI-guide vil hjælpe dig med at starte et nyt Astro projekt. - -Besøg vores [Hurtigstartsguide](/quick-start) for at komme i gang med Astro i 5 hurtige og nemme trin. - -Alternativt kan du læse vores [Installationsguide](/installation) for en fuld gennemgang af hvordan du sætter Astro op. - -### Eksempelprojekter - -Hvis du foretrækker at lære Astro ved hjælp af eksempler, kan du tjekke vores [fulde bibliotek af eksempler](https://github.com/withastro/astro/tree/main/examples) på GitHub. - -Du kan tjekke alle disse eksempler på din lokale maskine ved at køre `npm init astro` med CLI-flaget `--template`. Flaget `--template` understøtter også tredjeparts-skabeloner lavet af fællesskabet. - -```bash -# Kør init-guiden og brug denne officielle skabelon -npm init astro -- --template [OFFICIEL_EKSEMPEL_NAVN] -# Kør init-guiden og brug denne skabelon lavet af fællesskabet -npm init astro -- --template [GITHUB_BRUGER]/[REPO_NAVN] -npm init astro -- --template [GITHUB_BRUGER]/[REPO_NAVN]/sti/til/eksempel -``` - -### Online Legepladser - -Hvis du er interesseret i at lege med Astro i browseren, kan du straks starte et nyt Astro projekt med vores brugerflade på [astro.new](https://astro.new/). - -Du kan prøve Astro i online kodeeditorer som Stackblitz, CodeSandbox, Gitpod eller GitHub Codespaces. Klik på "Open in Stackblitz" linket i et af eksemplerne i vores [liste af eksempler](https://github.com/withastro/astro/tree/main/examples). Eller, [klik her](https://stackblitz.com/fork/astro) for at starte et nyt projekt i [Stackblitz](https://stackblitz.com/fork/astro). - -## Lær Astro - -Alle slags mennesker kommer til Astro fra forskellige baggrunde og medbringer forskellige læringsstile. Uanset om du foretrækker en mere teoretisk eller praktisk tilgang, håber vi at du finder dette afsnit nyttigt. - -- Hvis du foretrækker at **lære ved at gøre**, kan du starte med vores [liste af eksempler](https://github.com/withastro/astro/tree/main/examples). -- Hvis du foretrækker at **lære koncepter trin for trin**, kan du starte med vores [grundlæggende koncepter og vejledninger](/core-concepts/project-structure). - -Som enhver anden ukendt teknologi har Astro en lille indlæringskurve. Men med øvelse og lidt tålmodighed, ved vi at du _vil_ få styr på det på ingen tid. - -### Lær `.astro` Syntaks - -Når du begynder at lære Astro, vil du se mange filer med filtypen `.astro`. Dette er **Astros Komponent Syntaks**: et specielt HTML-lignende filformat som Astro bruger til templating. Det er designet til at føles bekendt for alle med HTML- eller JSX-erfaring - -Vores nyttige guide om [Astro-komponenter](/core-concepts/astro-components) introducerer dig til Astro-syntaksen, og er den bedste måde at lære på. - -### API Reference - -Dette dokumentationsafsnit er nyttigt når du vil lære flere detaljer om en bestemt Astro API. F.eks. indeholder [Konfigurationsreference](/reference/configuration-reference) en liste over alle tilgængelige konfigurationsmuligheder. [Indbyggede komponenter-reference](/reference/builtin-components) indeholder en liste over alle tilgængelige kernekomponenter, såsom `` og ``. - -### Versioneret dokumentation - -Denne dokumentation afspejler altid den seneste stabile version af Astro. Når vi når v1.0-milepælen, vil vi tilføje muligheden for at se versioneret dokumentation. - -## Hold dig orienteret - -Twitter-kontoen [@astrodotbuild](https://twitter.com/astrodotbuild) er den officielle kilde til opdateringer fra Astro-teamet. - -Vi sender også udgivelsesmeddelelser til vores [Discord-fællesskab](https://astro.build/chat) i #announcements kanalen. - -Ikke hver Astro udgivelse fortjener sit eget blogindlæg, men du kan finde en detaljeret ændringsliste for hver udgivelse i [`CHANGELOG.md` filen i Astro-repositoriet](https://github.com/withastro/astro/blob/main/packages/astro/CHANGELOG.md). - -## Mangler der noget? - -Hvis der mangler noget i dokumentationen, eller hvis du synes, at en del er forvirrende, skal du [indsende et Issue om dokumentationen](https://github.com/withastro/astro/issues/new/choose) med dit forslag til forbedringer, eller tweet på [@astrodotbuild](https://twitter.com/astrodotbuild) Twitter-kontoen. Vi elsker at høre fra dig! - -## Kredit - -Denne startvejledning var oprindeligt baseret på [React's](https://reactjs.org/) startvejledning. diff --git a/docs/src/pages/de/404.astro b/docs/src/pages/de/404.astro deleted file mode 100644 index 7107cc49a..000000000 --- a/docs/src/pages/de/404.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -import SplashLayout from '../../layouts/SplashLayout.astro'; ---- - - -

404

-

Diese Seite befindet sich nicht in unserem Sonnensystem.

- Bring mich nach Hause. -
diff --git a/docs/src/pages/de/comparing-astro-vs-other-tools.md b/docs/src/pages/de/comparing-astro-vs-other-tools.md deleted file mode 100644 index 7462ced85..000000000 --- a/docs/src/pages/de/comparing-astro-vs-other-tools.md +++ /dev/null @@ -1,233 +0,0 @@ ---- -layout: ~/layouts/MainLayout.astro -title: Vergleiche Astro -description: Vergleiche Astro mit anderen statischen Site-Renderern wie Gatsby, Next.js, Nuxt, Hugo, Eleventy und weiteren. ---- - -Wir werden oft gefragt, "Wie verhält sich Astro im Vergleich zu meinem bevorzugten Site-Renderer **\_\_\_\_**?" Diese Anleitung wurde verfasst, um diese Frage für verschiedene populäre Site-Renderer und Astro-Alternativen zu beantworten. - -Falls dein bevorzugter Site-Renderer hier nicht aufgeführt ist, [frag uns danach in Discord](https://astro.build/chat). - -## Projektstatus - -Eine kurze Anmerkung zum Entwicklungsstand des Projektes: **Astro ist noch im Beta-Stadium.** Viele der Werkzeuge, die hier aufgeführt werden, sind sehr viel weiter fortgeschritten. Einige sind mehr als zwölf Jahre älter als Astro! - -Einige Features sind noch nicht verfügbar und Teile der API noch nicht vollständig. Wie auch immer, das Projekt wird bezüglich seiner Fehleranfälligkeit als stabil angesehen und verschiedene Websites wurden schon für den produktiven Einsatz mit Astro umgesetzt. Dies ist ein wichtiger Punkt, wenn es um eine Entscheidung in Bezug auf den Einsatz von Astro geht. - -## Docusaurus vs. Astro - -[Docusaurus](https://docusaurus.io/) ist ein populärer Dokumentationssite-Renderer. Docusaurus verwendet React, um deine Website-UI zu generieren, während Astro in diesem Bereich React, Preact, Vue, Svelte, Solid und andere unterstützt - sowie auch eine an HTML angelehnte Komponenten-Syntax, die sich ähnlich verhält wie HTML + JSX. - -Docusaurus wurde entwickelt, um Dokumentationswebsites zu erzeugen und bietet einige dokumentationsspezifische Features, über die Astro nicht verfügt. Stattdessen kannst du in Astro auf dokumentationsspezifische Features mittels einer offiziellen [`docs`](https://github.com/withastro/astro/tree/main/examples/docs)-Vorlage zugreifen, die du für deine Site verwenden kannst. Diese Dokumentationswebsite wurde unter Verwendung dieser Vorlage erstellt! - -### Leistungsvergleich Docusaurus vs. Astro - -In den meisten Fällen werden Astro-Websites deutlich schneller laden als Docusaurus-Websites. Dies liegt vor allem daran, dass Astro unnötiges JavaScript vermeidet und nur diejenigen Komponenten einer Seite mit JavaScript anreichert, die dies benötigen. Dieses Feature wird [Partial Hydration](/de/core-concepts/component-hydration) genannt. - -Docusaurus unterstützt Partial Hydration nicht. Stattdessen wird die gesamte Seite im Browser mit JavaScript angereichert, selbst wenn der größte Teil der Seite statisch ist. Dies führt zu längeren Ladezeiten und insgesamt schlechterer Leistung deiner Website. Es gibt keine Möglichkeit dieses Verhalten in Docusaurus abzuschalten. - -### Fallstudie: Kompilieren einer Dokumentationswebsite - -[docusaurus.io/docs](https://docusaurus.io/docs) ist die offizielle Docusaurus-Dokumentationswebsite - kompiliert mit Docusaurus. Die Website bietet ein ausreichend ähnliches Design und ausreichend ähnliche Funktionalität, um sie mit der offiziellen Astro-Dokumentationswebsite zu vergleichen. Dies ermöglicht uns einen **_grob realistischen_** Vergleich zwischen beiden Site-Renderern. - -- **Docusaurus Leistungswert**: 61 von 100 [(vollständige Prüfung)](https://lighthouse-dot-webdotdevsite.appspot.com//lh/html?url=https%3A%2F%2Fdocusaurus.io%2Fdocs) -- **Astro Leistungswert**: 99 von 100 [(vollständige Prüfung)](https://lighthouse-dot-webdotdevsite.appspot.com//lh/html?url=https%3A%2F%2Fdocs.astro.build%2Fgetting-started) - -Ein wesentlicher Grund für diesen Leistungsunterschied liegt in Astros geringerer JavaScript-Last: [docusaurus.io/docs](https://docusaurus.io/docs) lädt **238kB** JavaScript mit dem ersten Seitenaufruf während [docs.astro.build](https://docs.astro.build) **78.7kB** (67% weniger JavaScript insgesamt) _nach_ dem ersten Seitenaufruf lädt. - -## Elder.js vs. Astro - -[Elder.js](https://elderguide.com/tech/elderjs/) ist ein Site-Renderer für Svelte mit stark ausgeprägten eigenen Vorstellungen. - -Elder.js verwendet Svelte, um deine Website zu rendern. Astro ist hierin flexibler: Du kannst frei entscheiden mit welcher UI-Komponenten-Bibliothek du deine Oberfläche erzeugen willst (React, Preact, Vue, Svelte, Solid und andere), oder du verwendest die an HTML angelehnte Komponenten-Syntax von Astro, die sich ähnlich verhält wie HTML + JSX. - -Elder.js hat eine besondere Stellung in dieser Auflistung, da es neben Astro der einzige Site-Renderer ist, der [Partial Hydration](/de/core-concepts/component-hydration) unterstützt. Sowohl Astro als auch Elder.js vermeiden automatisch unnötiges JavaScript auf der Seite und reichern nur die Komponenten damit an, die dies benötigen. Elders API für Partial Hydration unterscheidet sich etwas von der, die Astro verwendet. Und Astro unterstützt einige Features, über die Elder.js nicht verfügt (wie z. B. `client:media`). Wie auch immer, beide Werkzeuge erzeugen bezüglich der Leistung betrachtet sehr ähnliche Sites. - -Elder.js verwendet eine spezifische Routing-Lösung, die für neue Entwickler ungewohnt erscheinen kann. Astro verwendet [dateibasiertes Routing](/de/core-concepts/routing), das sich für alle vertraut anfühlen sollte, die Erfahrung mit Next.js, SvelteKit oder auch anderen Site-Renderern wie Eleventy haben. - -Elder.js wurde entwickelt, um große Websites zu erzeugen - und behauptet, es könne eine Website mit ca 20.000 Seiten in weniger als 10 Minuten rendern (auf einer durchschnittlichen VM). Zum Zeitpunkt der Erstellung dieses Textes rendert Astro ca 1.000 Seiten in 66 Sekunden, aber wurde noch nicht mit Projekten im Umfang von 20.000 Seiten getestet. Astro ist noch in einem frühen Beta-Stadium, und Elder.js Render-Geschwindigkeit zu erreichen ist ein Ziel für Astro v1.0. - -Elder.js unterstützt sowohl statische Site-Generierung (SSG) als auch Server-seitiges Rendering (SSR). Zum jetzigen Zeitpunkt unterstützt Astro nur statische Site-Generierung (SSG). - -## Eleventy vs. Astro - -[Eleventy](https://www.11ty.dev/) ist ein beliebter statischer Site-Renderer auf der Grundlage von Node.js. - -Eleventy verwendet verschiedene [ältere Sprachen für HTML-Templates](https://www.11ty.dev/docs/languages/), um deine Website zu rendern: Nunjucks, Liquid, Pug, EJS und andere. Astro erlaubt dir deine Websites mit deiner bevorzugten UI-Komponenten-Bibliothek (React, Preact, Vue, Svelte und andere) zu erzeugen, oder du verwendest die an HTML angelehnte Komponenten-Syntax von Astro, die sich ähnlich verhält wie HTML + JSX. Eleventy unterstützt keine modernen UI-Bibliotheken für die Erstellung von HTML-Templates. - -### Leistungsvergleich Eleventy vs. Astro - -Konzeptuell ist Eleventy auf Augenhöhe mit Astros "minimalistischem Einsatz von Client-seitigem JavaScript" bei der Web-Entwicklung. Eleventy und Astro bieten somit eine ähnliche Leistungsgrundlage durch ihre jeweilige Null-JavaScript-Strategie. - -Eleventy erreicht dies, indem es dich dazu anhält JavaScript gänzlich zu vermeiden. Eleventy-Sites werden oft mit sehr wenig bis hin zu gar keinem JavaScript geschrieben. Dies wird allerdings dann zum Thema, wenn du tatsächlich Client-seitig JavaScript einsetzen musst. Es bleibt dann dir überlassen eine entsprechende Build-Pipeline für deine Skripte und weitere Elemente aufzubauen. Dies kann sich sehr zeitaufwendig gestalten, und es zwingt dich das Packen der Anwendung, sowie Minifizierung und weitere komplizierte Optimierungen von Hand aufzusetzen. - -Im Gegensatz dazu kompiliert Astro automatisch dein Client-seitiges JavaScript & CSS für dich. Astro entfernt automatisch unnötiges JavaScript von der Seite und reichert nur die individuellen Komponenten damit an, die dies benötigen. Dieses Feature wird [Partial Hydration](/de/core-concepts/component-hydration) genannt. Während es dir natürlich möglich ist dieses Feature in Eleventy von Hand einzurichten, steht es dir in Astro bereits von vornherein zur Verfügung. - -## Gatsby vs. Astro - -[Gatsby](https://www.gatsbyjs.com/) ist eine beliebte Website- und Anwendungsbibliothek für React. - -Gatsby verwendet React, um deine Website zu rendern. Astro ist hierin flexibler: Du kannst frei entscheiden mit welcher UI-Komponenten-Bibliothek du deine Oberfläche erzeugen willst (React, Preact, Vue, Svelte, Solid und andere), oder du verwendest die an HTML angelehnte Komponenten-Syntax von Astro, die sich ähnlich verhält wie HTML + JSX. - -Gatsby v4 unterstützt statische Site-Generierung (Static Site Generation, SSG) mit inkrementellen Rebuilds sowie verzögerte statische Generierung (Deferred Static Generation, DSG), aber auch Server-seitiges Rendering (Server-Side Rendering, SSR). Zur Zeit unterstützt Astro nur statische Site-Generierung (SSG). - -Gatsby erfordert für deine gesamte Arbeit mit Site-Inhalten eine eigene GraphQL-API. Während einige Entwicklerinnen und Entwickler an diesem Modell Gefallen finden, besteht eine häufig geäußerte Kritik an Gatsby darin, dass dieses Modell auf Dauer zu komplex und schwer aufrechtzuerhalten ist, insbesondere wenn Sites sehr umfangreich werden. Für die Arbeit mit Astro ist GraphQL nicht erforderlich, stattdessen bietet es gewohnte API (wie `fetch()` und `await` auf oberster Ebene), um Daten nah bei ihrer Anwendung zu laden. - -### Leistungsvergleich Gatsby vs. Astro - -In den meisten Fällen werden Astro-Websites deutlich schneller laden als Gatsby-Websites. Dies liegt vor allem daran, dass Astro unnötiges JavaScript vermeidet und nur diejenigen Komponenten einer Seite mit JavaScript anreichert, die dies benötigen. Dieses Feature wird [Partial Hydration](/de/core-concepts/component-hydration) genannt. - -Gatsby unterstützt Partial Hydration nicht und lässt stattdessen den Browser die gesamte Seite erneut laden und mit JavaScript anreichern, selbst wenn der größte Teil der Seite statisch ist. Dies führt zu längeren Ladezeiten und schlechterer Leistung für deine Website. Gatsby verfügt über ein [Community Plugin](https://www.gatsbyjs.com/plugins/gatsby-plugin-no-javascript/), das sämtliches JavaScript von einer Seite entfernt, doch dies führt auch dazu, dass viele Websites nicht mehr wie beabsichtigt funktionieren. In Bezug auf Interaktivität auf einzelnen Seiten ist entprechend nur eine Entscheidung zwischen ganz oder gar nicht möglich. - -Gatsby verfügt über ein großes Plugin-Ökosystem, was in Abhängigkeit von dem, was du benötigst, Gatsby zur besseren Wahl machen kann. [gatsby-plugin-image](https://www.gatsbyjs.com/plugins/gatsby-plugin-image/) z. B. ist ein beliebtes Plugin für Bildoptimierungen, das Gatsby zur besseren Wahl für bilderlastige Websites machen könnte. - -### Fallstudie: Kompilieren einer Dokumentationswebsite - -[gatsbyjs.com/docs](https://www.gatsbyjs.com/docs/quick-start/) ist die offizielle Gatsby-Dokumentationswebsite - kompiliert mit Gatsby. Die Website bietet ein ausreichend ähnliches Design und ausreichend ähnliche Funktionalität, um sie mit der offiziellen Astro-Dokumentationswebsite zu vergleichen. Dies ermöglicht uns einen **_grob realistischen_** Vergleich zwischen beiden Site-Renderern. - -- **Gatsby Leistungswert**: 64 von 100 [(vollständige Prüfung)](https://lighthouse-dot-webdotdevsite.appspot.com//lh/html?url=https%3A%2F%2Fwww.gatsbyjs.com%2Fdocs%2Fquick-start%2F) -- **Astro Leistungswert**: 99 von 100 [(vollständige Prüfung)](https://lighthouse-dot-webdotdevsite.appspot.com//lh/html?url=https%3A%2F%2Fdocs.astro.build%2Fgetting-started) - -Ein wesentlicher Grund für diesen Leistungsunterschied liegt in Astros geringerer JavaScript-Last: [gatsbyjs.com/docs](https://www.gatsbyjs.com/docs/quick-start/) lädt **417kB** JavaScript mit dem ersten Seitenaufruf während [docs.astro.build](https://docs.astro.build) **78.7kB** (81% weniger JavaScript insgesamt) _nach_ dem ersten Seitenaufruf lädt. - -## Hugo vs. Astro - -[Hugo](https://gohugo.io/) ist ein beliebter statischer Site-Renderer auf der Grundlage von Go. - -Hugo verwendet eine eigene [Templating Language](https://gohugo.io/templates/introduction/), um deine Website zu rendern. Astro erlaubt dir deine Websites mit deiner bevorzugten UI-Komponenten-Bibliothek (React, Preact, Vue, Svelte, Solid und andere) zu erzeugen, oder du verwendest die an HTML angelehnte Komponenten-Syntax von Astro, die sich ähnlich verhält wie HTML + JSX. Hugo unterstützt keine modernen UI-Bibliotheken für die Erstellung von HTML-Templates. - -### Leistungsvergleich Hugo vs. Astro - -Konzeptuell ist Hugo auf Augenhöhe mit Astros "minimalistischem Einsatz von Client-seitigem JavaScript" bei der Web-Entwicklung. Hugo und Astro bieten somit eine ähnliche Leistungsgrundlage durch ihre jeweilige Null-JavaScript-Strategie. - -Sowohl Hugo als auch Astro bieten von vornherein Unterstützung beim Kompilieren, Packen und Minifizieren von JavaScript. Astro entfernt automatisch unnötiges JavaScript von der Seite und reichert nur die individuellen Komponenten damit an, die dies benötigen. Dieses Feature wird [Partial Hydration](/de/core-concepts/component-hydration) genannt. Während es dir natürlich möglich ist dieses Feature in Hugo von Hand einzurichten, steht es dir in Astro ebenfalls bereits von vornherein zur Verfügung. - -## Jekyll vs. Astro - -[Jekyll](https://jekyllrb.com/) ist ein beliebter statischer Site-Renderer auf der Grundlage von Ruby. - -Jekyll verwendet eine ältere [Templating Language](https://jekyllrb.com/docs/liquid/) mit dem Namen Liquid, um deine Website zu rendern. Astro erlaubt dir deine Websites mit deiner bevorzugten UI-Komponenten-Bibliothek (React, Preact, Vue, Svelte, Solid und andere) zu erzeugen, oder du verwendest die an HTML angelehnte Komponenten-Syntax von Astro, die sich ähnlich verhält wie HTML + JSX. Jekyll unterstützt keine modernen UI-Bibliotheken für die Erstellung von HTML-Templates. - -### Leistungsvergleich Jekyll vs. Astro - -Konzeptuell ist Jekyll auf Augenhöhe mit Astros "minimalistischem Einsatz von Client-seitigem JavaScript" bei der Web-Entwicklung. Jekyll und Astro bieten somit eine ähnliche Leistungsgrundlage durch ihre jeweilige Null-JavaScript-Strategie. - -Jekyll erreicht dies, indem es dich dazu anhält JavaScript gänzlich zu vermeiden. Jekyll-Sites werden oft mit sehr wenig bis hin zu gar keinem JavaScript geschrieben. Dies wird allerdings dann zum Thema, wenn du tatsächlich Client-seitig JavaScript einsetzen musst. Es bleibt dann dir überlassen eine entsprechende Build-Pipeline für deine Skripte und weitere Elemente aufzubauen. Dies kann sich sehr zeitaufwendig gestalten, und es zwingt dich das Packen der Anwendung, sowie Minifizierung und weitere komplizierte Optimierungen von Hand aufzusetzen. - -Im Gegensatz dazu kompiliert Astro automatisch dein Client-seitiges JavaScript für dich. Astro sendet nur die minimal notwendige Menge an JavaScript an den Browser, minifiziert, gepackt und optimiert für die Veröffentlichung. Dieses Feature wird [Partial Hydration](/de/core-concepts/component-hydration) genannt. Während es dir natürlich möglich ist dieses Feature in Jekyll von Hand einzurichten, steht es dir in Astro bereits von vornherein zur Verfügung. - -## SvelteKit vs. Astro - -[SvelteKit](https://kit.svelte.dev/) ist eine beliebte Website- und Anwendungsbibliothek für Svelte. - -SvelteKit verwendet Svelte, um deine Website zu rendern. Astro ist hierin flexibler: Du kannst frei entscheiden mit welcher UI-Komponenten-Bibliothek du deine Oberfläche erzeugen willst (React, Preact, Vue, Svelte, Solid und andere), oder du verwendest die an HTML angelehnte Komponenten-Syntax von Astro, die sich ähnlich verhält wie HTML + JSX. - -Sowohl SvelteKit als auch Astro sind Bibliotheken für die Erzeugung von Websites. SvelteKit funktioniert am besten mit hochdynamischen Websites (wie Dashboards und Nachrichteneingängen), während Astro am besten mit größtenteils statischen Websites funktioniert (wie Content- und E-Commerce-Websites). - -SvelteKit unterstützt sowohl statische Site-Generierung (Static Site Generation, SSG) als auch Server-seitiges Rendering (Server-Side Rendering, SSR). Zur Zeit unterstützt Astro nur statische Site-Generierung (SSG). - -### Leistungsvergleich SvelteKit vs. Astro - -In den meisten Fällen werden Astro-Websites schneller laden als SvelteKit-Websites. Dies liegt vor allem daran, dass Astro unnötiges JavaScript vermeidet und nur diejenigen Komponenten einer Seite mit JavaScript anreichert, die dies benötigen. Dieses Feature wird [Partial Hydration](/de/core-concepts/component-hydration) genannt. - -SvelteKit unterstützt Partial Hydration nicht und lässt stattdessen den Browser die gesamte Seite erneut laden und mit JavaScript anreichern, selbst wenn der größte Teil der Seite statisch ist. Dies führt zu längeren Ladezeiten und schlechterer Leistung für deine Website. SvelteKit unterstützt mit [Page-Level Static und Zero-JavaScript Pages](https://kit.svelte.dev/docs#ssr-and-javascript-hydrate) das Entfernen von JavaScript per Seite oder für die gesamte Anwendung. Wie auch immer, eine Unterstützung für die Anreicherung individueller Komponenten einer Seite ist nicht geplant. In Bezug auf Interaktivität auf einzelnen Seiten ist entprechend nur eine Entscheidung zwischen ganz oder gar nicht möglich. - -### Fallstudie: Kompilieren einer Dokumentationswebsite - -[kit.svelte.dev](https://kit.svelte.dev/docs#ssr-and-javascript-hydrate) ist die offizielle SvelteKit-Dokumentationswebsite - kompiliert mit SvelteKit. Die Website bietet ein ausreichend ähnliches Design und ausreichend ähnliche Funktionalität, um sie mit der offiziellen Astro-Dokumentationswebsite zu vergleichen. Dies ermöglicht uns einen **_grob realistischen_** Vergleich zwischen beiden Site-Renderern. - -Ein wichtiger zu beachtender Unterschied zwischen beiden Sites im Test: SveltKits Dokumentation wird als einzelne Seite ausgeliefert, während Astros Dokumentation in einzelne Seiten geteilt ausgeliefert wird. Diese höhere Content-Last dürfte einen leicht negativen Einfluss auf die Leistung haben und ist nicht auf das Werkzeug an sich zurückzuführen. - -- **SvelteKit Leistungswert**: 92 von 100 [(vollständige Prüfung)](https://lighthouse-dot-webdotdevsite.appspot.com//lh/html?url=https%3A%2F%2Fkit.svelte.dev%2Fdocs) -- **Astro Leistungswert**: 99 von 100 [(vollständige Prüfung)](https://lighthouse-dot-webdotdevsite.appspot.com//lh/html?url=https%3A%2F%2Fdocs.astro.build%2Fgetting-started) - -Der Leistungswert von SvelteKit in diesem Test ist vergleichbar mit dem von Astro. - -## Next.js vs. Astro - -[Next.js](https://nextjs.org/) ist eine beliebte Website- und Anwendungsbibliothek für React. - -Next.js verwendet React, um deine Website zu rendern. Astro ist hierin flexibler: Du kannst frei entscheiden mit welcher UI-Komponenten-Bibliothek du deine Oberfläche erzeugen willst (React, Preact, Vue, Svelte, Solid und andere), oder du verwendest die an HTML angelehnte Komponenten-Syntax von Astro, die sich ähnlich verhält wie HTML + JSX. - -Sowohl Next.js als auch Astro sind Bibliotheken für die Erzeugung von Websites. Next.js funktioniert am besten mit hochdynamischen Websites (wie Dashboards und Nachrichteneingängen), während Astro am besten mit größtenteils statischen Websites funktioniert (wie Content- und E-Commerce-Websites). - -Next.js unterstützt sowohl statische Site-Generierung (Static Site Generation, SSG) als auch Server-seitiges Rendering (Server-Side Rendering, SSR). Zur Zeit unterstützt Astro nur statische Site-Generierung (SSG). - -### Leistungsvergleich Next.js vs. Astro - -In den meisten Fällen werden Astro-Websites deutlich schneller laden als Next.js-Websites. Dies liegt vor allem daran, dass Astro unnötiges JavaScript vermeidet und nur diejenigen Komponenten einer Seite mit JavaScript anreichert, die dies benötigen. Dieses Feature wird [Partial Hydration](/de/core-concepts/component-hydration) genannt. - -Next.js unterstützt Partial Hydration nicht und lässt stattdessen den Browser die gesamte Seite erneut laden und mit JavaScript anreichern, selbst wenn der größte Teil der Seite statisch ist. Dies führt zu längeren Ladezeiten und schlechterer Leistung für deine Website. Next.js verfügt über [Experimental Support](https://piccalil.li/blog/new-year-new-website/#heading-no-client-side-react-code) für vollständig statische, Null-JavaScript-Seiten. Wie auch immer, eine Unterstützung für die Anreicherung individueller Komponenten einer Seite ist nicht geplant. In Bezug auf Interaktivität auf einzelnen Seiten ist entprechend nur eine Entscheidung zwischen ganz oder gar nicht möglich. - -Next.js verfügt über sehr gute integrierte Bildoptimierungen, was Next.js zur besseren Wahl für bilderlastige Websites machen könnte. - -### Fallstudie: Kompilieren einer Dokumentationswebsite - -[nextjs.org/docs](https://nextjs.org/docs/getting-started) ist die offizielle Next.js-Dokumentationswebsite - kompiliert mit Next.js. Die Website bietet ein ausreichend ähnliches Design und ausreichend ähnliche Funktionalität, um sie mit der offiziellen Astro-Dokumentationswebsite zu vergleichen. Dies ermöglicht uns einen **_grob realistischen_** Vergleich zwischen beiden Site-Renderern. - -- **Next.js Leistungswert**: 59 von 100 [(vollständige Prüfung)](https://lighthouse-dot-webdotdevsite.appspot.com//lh/html?url=https%3A%2F%2Fnextjs.org%2Fdocs%2Fgetting-started) -- **Astro Leistungswert**: 99 von 100 [(vollständige Prüfung)](https://lighthouse-dot-webdotdevsite.appspot.com//lh/html?url=https%3A%2F%2Fdocs.astro.build%2Fgetting-started) - -Ein wesentlicher Grund für diesen Leistungsunterschied liegt in Astros geringerer JavaScript-Last: [nextjs.org/docs](https://nextjs.org/docs/getting-started) lädt **463kB** JavaScript mit dem ersten Seitenaufruf, während [docs.astro.build](https://docs.astro.build) **78.7kB** (83% weniger JavaScript insgesamt) _nach_ dem ersten Seitenaufruf lädt. - -## Nuxt vs. Astro - -[Nuxt](https://nuxtjs.org/) ist eine beliebte Website- und Anwendungsbibliothek für Vue. Es ist ähnlich aufgebaut wie Next.js. - -Nuxt verwendet Vue, um deine Website zu rendern. Astro ist hierin flexibler: Du kannst frei entscheiden mit welcher UI-Komponenten-Bibliothek du deine Oberfläche erzeugen willst (React, Preact, Vue, Svelte, Solid und andere), oder du verwendest die an HTML angelehnte Komponenten-Syntax von Astro, die sich ähnlich verhält wie HTML + JSX. - -Sowohl Nuxt als auch Astro sind Bibliotheken für die Erzeugung von Websites. Nuxt funktioniert am besten mit hochdynamischen Websites (wie Dashboards und Nachrichteneingängen), während Astro am besten mit größtenteils statischen Websites funktioniert (wie Content- und E-Commerce-Websites). - -Nuxt unterstützt sowohl statische Site-Generierung (Static Site Generation, SSG) als auch Server-seitiges Rendering (Server-Side Rendering, SSR). Zur Zeit unterstützt Astro nur statische Site-Generierung (SSG). - -### Leistungsvergleich Nuxt vs. Astro - -In den meisten Fällen werden Astro-Websites deutlich schneller laden als Nuxt-Websites. Dies liegt vor allem daran, dass Astro unnötiges JavaScript vermeidet und nur diejenigen Komponenten einer Seite mit JavaScript anreichert, die dies benötigen. Dieses Feature wird [Partial Hydration](/de/core-concepts/component-hydration) genannt. - -Nuxt unterstützt Partial Hydration nicht und lässt stattdessen den Browser die gesamte Seite erneut laden und mit JavaScript anreichern, selbst wenn der größte Teil der Seite statisch ist. Dies führt zu längeren Ladezeiten und schlechterer Leistung für deine Website. Es besteht keine Möglichkeit dieses Verhalten abzuschalten. - -Nuxt verfügt über sehr gute integrierte Bildoptimierungen, was Nuxt zur besseren Wahl für bilderlastige Websites machen könnte. - -### Fallstudie: Kompilieren einer Dokumentationswebsite - -[nuxtjs.org/docs](https://nuxtjs.org/docs/2.x/get-started/installation) ist die offizielle Nuxt-Dokumentationswebsite - kompiliert mit Nuxt. Die Website bietet ein ausreichend ähnliches Design und ausreichend ähnliche Funktionalität, um sie mit der offiziellen Astro-Dokumentationswebsite zu vergleichen. Dies ermöglicht uns einen **_grob realistischen_** Vergleich zwischen beiden Site-Renderern. - -- **Nuxt Leistungswert**: 48 von 100 [(vollständige Prüfung)](https://lighthouse-dot-webdotdevsite.appspot.com//lh/html?url=https%3A%2F%2Fnuxtjs.org%2Fdocs%2F2.x%2Fget-started%2Finstallation) -- **Astro Leistungswert**: 99 von 100 [(vollständige Prüfung)](https://lighthouse-dot-webdotdevsite.appspot.com//lh/html?url=https%3A%2F%2Fdocs.astro.build%2Fgetting-started) - -Ein wesentlicher Grund für diesen Leistungsunterschied liegt in Astros geringerer JavaScript-Last: [nuxtjs.org/docs](https://nuxtjs.org/docs/2.x/get-started/installation) lädt **469kb** JavaScript mit dem ersten Seitenaufruf, während [docs.astro.build](https://docs.astro.build) **78.7kB** (83% weniger JavaScript insgesamt) _nach_ dem ersten Seitenaufruf lädt. - -## VuePress vs. Astro - -[VuePress](https://vuepress.vuejs.org/guide/) ist ein populärer Dokumentationssite-Renderer auf der Grundlage von Vue. VuePress verwendet Vue, um deine Website-UI zu generieren, während Astro in diesem Bereich React, Preact, Vue, Svelte, Solid und andere unterstützt - sowie auch eine an HTML angelehnte Komponenten-Syntax, die sich ähnlich verhält wie HTML + JSX. - -VuePress wurde entwickelt, um Dokumentationswebsites zu erzeugen und bietet einige dokumentationsspezifische Features, über die Astro nicht verfügt. Stattdessen verfügst du in Astro über dokumentationsspezifische Features mittels einer offiziellen [`docs`](https://github.com/withastro/astro/tree/main/examples/docs)-Vorlage, die du für deine Site verwenden kannst. Diese Website wurde unter Verwendung dieser Vorlage erstellt! - -Evan You (Erfinder von Vue) arbeitet zur Zeit an einer neuen Version von VuePress, genannt [VitePress](https://vitepress.vuejs.org/). Wenn du eine moderne Alternative zu VuePress suchst, [lies Evans Post](https://github.com/withastro/astro/issues/1159#issue-974035962) darüber, warum VitePress hierfür eine bessere Option darstellen kann. - -### Leistungsvergleich VuePress vs. Astro - -In den meisten Fällen werden Astro-Websites deutlich schneller laden als VuePress-Websites. Dies liegt vor allem daran, dass Astro unnötiges JavaScript vermeidet und nur diejenigen Komponenten einer Seite mit JavaScript anreichert, die dies benötigen. Dieses Feature wird [Partial Hydration](/de/core-concepts/component-hydration) genannt. - -VuePress unterstützt Partial Hydration nicht und lässt stattdessen den Browser die gesamte Seite erneut laden und mit JavaScript anreichern, selbst wenn der größte Teil der Seite statisch ist. Dies führt zu längeren Ladezeiten und schlechterer Leistung für deine Website. Es besteht keine Möglichkeit dieses Verhalten abzuschalten. - -### Fallstudie: Kompilieren einer Dokumentationswebsite - -[vuepress.vuejs.org](https://vuepress.vuejs.org/guide/) ist die offizielle VuePress-Dokumentationswebsite - kompiliert mit VuePress. Die Website bietet ein ausreichend ähnliches Design und ausreichend ähnliche Funktionalität, um sie mit der offiziellen Astro-Dokumentationswebsite zu vergleichen. Dies ermöglicht uns einen **_grob realistischen_** Vergleich zwischen beiden Site-Renderern. - -- **Vuepress Leistungswert**: 63 von 100 [(vollständige Prüfung)](https://lighthouse-dot-webdotdevsite.appspot.com//lh/html?url=https%3A%2F%2Fvuepress.vuejs.org%2Fguide%2F) -- **Astro Leistungswert**: 99 von 100 [(vollständige Prüfung)](https://lighthouse-dot-webdotdevsite.appspot.com//lh/html?url=https%3A%2F%2Fdocs.astro.build%2Fgetting-started) - -Ein wesentlicher Grund für diesen Leistungsunterschied liegt in Astros geringerer JavaScript-Last: [vuepress.vuejs.org](https://vuepress.vuejs.org/guide/) lädt **166kb** JavaScript mit dem ersten Seitenaufruf, während [docs.astro.build](https://docs.astro.build) **78.7kB** (53% weniger JavaScript insgesamt) _nach_ dem ersten Seitenaufruf lädt. - -## Zola vs. Astro - -[Zola](https://www.getzola.org/) ist ein beliebter statischer Site-Renderer auf der Grundlage von Rust. - -Zola verwendet [Tera](https://tera.netlify.app/), um deine Website zu rendern. Astro erlaubt dir deine Websites mit deiner bevorzugten UI-Komponenten-Bibliothek (React, Preact, Vue, Svelte, Solid und andere) zu erzeugen, oder du verwendest die an HTML angelehnte Komponenten-Syntax von Astro, die sich ähnlich verhält wie HTML + JSX. Zola unterstützt keine modernen UI-Bibliotheken für die Erstellung von HTML-Templates. - -### Leistungsvergleich Zola vs. Astro - -Konzeptuell ist Zola auf Augenhöhe mit Astros "minimalistischem Einsatz von Client-seitigem JavaScript" bei der Web-Entwicklung. Zola und Astro bieten somit eine ähnliche Leistungsgrundlage durch ihre jeweilige Null-JavaScript-Strategie. - -Sowohl Zola als auch Astro bieten Unterstützung beim Kompilieren, Packen und Minifizieren von JavaScript. Zola benötigt hierfür ein zusätzliches Werkzeug wie Webpack, um JavaScript zu packen und zu verarbeiten. Astro entfernt automatisch unnötiges JavaScript von der Seite und reichert nur die individuellen Komponenten damit an, die dies benötigen. Dieses Feature wird [Partial Hydration](/de/core-concepts/component-hydration) genannt. Während es dir natürlich möglich ist dieses Feature in Zola von Hand einzurichten, steht es dir in Astro bereits von vornherein zur Verfügung. diff --git a/docs/src/pages/de/core-concepts/astro-components.md b/docs/src/pages/de/core-concepts/astro-components.md deleted file mode 100644 index 18ce76789..000000000 --- a/docs/src/pages/de/core-concepts/astro-components.md +++ /dev/null @@ -1,386 +0,0 @@ ---- -layout: ~/layouts/MainLayout.astro -title: Astro-Komponenten -description: Einführung in die .astro-Komponenten-Syntax. ---- - -**Astro-Komponenten** (Dateien mit der Endung `.astro`) sind die Grundlage des Server-seitigen Templating in Astro. Du kannst dir die Astro-Komponenten-Syntax als HTML - erweitert um JavaScript - vorstellen. - -Eine neue Syntax kann zu Beginn einschüchternd wirken, daher haben wir bei der Entwicklung der Astro-Komponenten-Syntax besonders darauf geachtet, dass sie sich für Web-Entwickler so vertraut wie möglich anfühlt. Sie lehnt sich sehr stark an Modelle an, die du wahrscheinlich schon kennst: Komponenten, Frontmatter, Props und JSX-Ausdrücke. Wir sind zuversichtlich, dass du mit Hilfe dieser Anleitung in kürzester Zeit Astro-Komponenten schreiben wirst, besonders wenn du bereits mit HTML & JavaScript vertraut bist. - -## Syntax-Übersicht - -Eine einzelne `.astro`-Datei repräsentiert eine einzelne Astro-Komponente in deinem Projekt. Dieses Modell wird als **Single-File Component (SFC)** bezeichnet. Sowohl Svelte (`.svelte`) als auch Vue (`.vue`) folgen ebenfalls diesem Modell. - -Im Weiteren findest du eine eingehende Beschreibung der verschiedenen Elemente und Merkmale der Astro-Komponenten-Syntax. Du kannst sie von Anfang bis Ende durchlesen oder auch zwischen den Abschnitten springen. - -### HTML-Template - -Die Astro-Komponenten-Syntax ist eine Obermenge von HTML. **Wenn du HTML kennst, weißt du bereits genug, um deine erste Komponente zu schreiben.** - -Zum Beispiel ist diese dreizeilige Datei eine gültige Astro-Komponente: - -```html - -
-

Hallo Welt!

-
-``` - -Eine Astro-Komponente repräsentiert einen Schnipsel HTML in deinem Projekt. Dies kann eine mehrfach verwendbare Komponente sein, oder eine vollständige Seite HTML einschließlich ``-, ``- und ``-Elementen. Lies auch unsere Anleitung zu [Astro-Seiten](/de/core-concepts/astro-pages), um zu lernen wie du deine erste vollständige HTML-Seite mit Astro erzeugen kannst. - -**Jede Astro-Komponente muss ein HTML-Template beinhalten.** Auch wenn du deine Komponente auf vielfältige Weise erweitern kannst (siehe unten), bestimmt am Ende des Tages doch das HTML-Template, wie deine gerenderte Komponente aussehen wird. - -### CSS-Styles - -CSS-Regeln innerhalb eines ` -
-``` - -```html - - - - - - - ... - - -``` - -Die Verwendung von ` - -

Ich bin ein Style im Scope der Komponente, und ich bin rot!

-

- Ich bin ein Style im Scope der Komponente, und ich bin kursiv!! -

-``` - -Beachte dass der `h1`-Selektor hier nicht über die Komponente hinaus wirksam wird! Die Styles werden nicht auf andere `h1`-Tags außerhalb dieses Dokuments angewandt - auch nicht in untergeordneten Komponenten. - -_Tipp: Auch wenn es möglich ist hier Element-Selektoren zu verwenden, sollten doch bevorzugt Klassen-Namen verwendet werden. Das ist nicht nur ein klein wenig performanter, es ist auch leichter zu lesen, insbesondere in einem umfangreichen Dokument._ - -### Globale Styles - -Natürlich besteht die tatsächliche Macht von CSS darin, Styles so häufig wie möglich wiederzuverwenden! Die bevorzugte Methode um globale Styles einzubinden, ist die Verwendung eines ``-Tags im ``-Block, ganz so wie du es gewohnt bist. Diese Methode kann in Astro auch im Zusammenhang mit dem ` - - -

Seitentitel im Scope

- -``` - -_Beachte: `Astro.resolve()` ist ein nützliches Hilfsmittel, um Verweise auf Dateien von überall her aufzulösen ([docs][astro-resolve])_ - -#### Styling untergeordneter Elemente - -Falls du Styles, die im Scope der Komponente gesetzt werden, auch auf untergeordnete Komponenten anwenden willst, kannst du auf die `:global()`-Funktion aus den [CSS-Modules][css-modules] zurückgreifen: - -```astro - ---- -import PostContent from './Post.astro'; ---- - - -

Titel

-
- -
-``` - -Dies ist eine sehr gute Methode, um Dinge zu stylen wie Blogposts oder Dokumente, die mit Inhalten aus einem CMS außerhalb von Astro gefüttert werden. Aber Vorsicht, wenn untergeordnete Elemente frei von Abhängigkeiten gestaltet werden, bricht dies auch die Verkapselung der Komponente auf. Das Arbeiten mit Komponenten die unterschiedlich aussehen, abhängig davon ob sie ein bestimmtes übergeordnetes Element haben oder nicht, kann sehr schnell unübersichtlich werden. - -#### Globale Styles innerhalb eines ` - -

Globaler Style

-``` - -Dasselbe kannst du erreichen, indem du einem Selektor die `:global()`-Funktion voranstellst: - -```html - -``` - -Es wird empfohlen diese Methoden nur dort einzusetzen, wo ein ``-Tag nicht funktionieren würde. Es ist sehr schwer irrige globale Styles aufzuspüren, wenn sie verteilt auftreten und nicht in einer zentralen CSS-Datei stehen. - -📚 Lies unseren vollständigen Artikel über die Syntax in [Astro-Komponenten][astro-component], um mehr über die Verwendung des ` - -``` - -Alternativ zu einer Datei `src/styles/global.css` kannst du Tailwind-Utilities auch in einzelnen `pages/*.astro`-Komponenten in einem ` - -``` - -_Beachte: Wir verwenden hier in sämtlichen Beispielen `lang="scss"`, welches das Verschachteln und Teilen von [Farben und Variablen][sass-use] stark vereinfacht. Dies ist jedoch gänzlich optional, und du kannst ebenso gut normales CSS verwenden._ - -Die `.btn`-Klasse ist auf die Komponente begrenzt und wird nicht über das Dokument hinaus wirksam. Dies bedeutet, du kannst dich **auf das Styling und musst dich nicht auf die Benennung konzentrieren**. Dieser Ansatz, der das Lokale an den Anfang stellt, fügt sich sehr gut in das ESM-getriebene Design von Astro, das Einkapselung und Wiederverwendbarkeit über eine globale Wirksamkeit stellt. Auch wenn es sich um ein einfaches Beispiel handelt, sollte festgehalten werden, dass dies **extrem gut skaliert**. Und für den Fall, dass du gemeinsame Werte zwischen Komponenten teilen willst, empfehlen wir das [Sass-Modulsystem][sass-use], das sehr einfach zu verwenden ist und sich perfekt in ein Design einfügt, in dem die Komponente an den Anfang gestellt wird. - -Im Kontrast zu diesem Ansatz erlaubt Astro auch globale Styles mittels der `:global()` und ` - - -``` - -Dies ist allerdings nicht erstrebenswert, da nun `