diff --git a/.changeset/yellow-trams-rush.md b/.changeset/yellow-trams-rush.md new file mode 100644 index 000000000..34cb782f1 --- /dev/null +++ b/.changeset/yellow-trams-rush.md @@ -0,0 +1,5 @@ +--- +"docs": minor +--- + +Migrate from Starlight 0.29.2 to Doks 1.9 diff --git a/.gitignore b/.gitignore index aa210b113..16f77abe3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,20 +1,7 @@ -# build output -dist/ -# generated types -.astro/ - -# dependencies -node_modules/ - -# logs -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* - -# environment variables .env -.env.production - -# macOS-specific files -.DS_Store +.netlify +.hugo_build.lock +node_modules +public +resources +hugo_stats.json diff --git a/.npmignore b/.npmignore new file mode 100644 index 000000000..f9b6220d1 --- /dev/null +++ b/.npmignore @@ -0,0 +1,2 @@ +!.npmrc +!.gitignore \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..d09288bd9 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,12 @@ +*.html +*.ico +*.png +*.jp*g +*.toml +*.*ignore +*.svg +*.xml +LICENSE +.npmrc +.gitkeep +*.woff* diff --git a/.prettierrc.yaml b/.prettierrc.yaml new file mode 100644 index 000000000..f99840602 --- /dev/null +++ b/.prettierrc.yaml @@ -0,0 +1,19 @@ +# Default config +tabWidth: 4 +endOfLine: crlf +singleQuote: true +printWidth: 100000 +trailingComma: none +bracketSameLine: true +quoteProps: consistent +experimentalTernaries: true + +# Overrided config +overrides: + - files: ["*.md", "*.json", "*.yaml"] + options: + tabWidth: 2 + singleQuote: false + - files: ["*.scss"] + options: + singleQuote: false diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 22a15055d..5126693b7 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,4 +1,3 @@ { - "recommendations": ["astro-build.astro-vscode"], - "unwantedRecommendations": [] + "recommendations": ["budparr.language-hugo-vscode", "yzhang.markdown-all-in-one", "tamasfe.even-better-toml", "dbaeumer.vscode-eslint", "DavidAnson.vscode-markdownlint", "stylelint.vscode-stylelint", "thuliteio.hugo-shortcodes"] } diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index d64220976..000000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "command": "./node_modules/.bin/astro dev", - "name": "Development server", - "request": "launch", - "type": "node-terminal" - } - ] -} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..b0d1a53d2 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "editor.wordWrap": "off", + "files.trimTrailingWhitespace": true, + "files.insertFinalNewline": true, + "editor.tabSize": 2, + "editor.insertSpaces": true +} diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index c56c6988e..000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,9 +0,0 @@ -# docs - -## 0.2.0 - -### Minor Changes - -- [#10](https://github.com/thuliteio/docs/pull/10) [`09337f8`](https://github.com/thuliteio/docs/commit/09337f84014f2d201d0f73587a3e68aa1a931efc) Thanks [@h-enk](https://github.com/h-enk)! - Update for migration from Hyas to Thulite - -- [#8](https://github.com/thuliteio/docs/pull/8) [`9fd7b7c`](https://github.com/thuliteio/docs/commit/9fd7b7c6dbe29c2da0da3c55e1f29e58a96b4d81) Thanks [@h-enk](https://github.com/h-enk)! - Update for Thulite diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..d8ca175ac --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020-2026 Thulite + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/archetypes/default.md b/archetypes/default.md new file mode 100644 index 000000000..3ad3dd269 --- /dev/null +++ b/archetypes/default.md @@ -0,0 +1,16 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +description: "" +summary: "" +date: {{ .Date }} +lastmod: {{ .Date }} +draft: true +weight: 999 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- diff --git a/assets/favicon.png b/assets/favicon.png new file mode 100644 index 000000000..9227095eb Binary files /dev/null and b/assets/favicon.png differ diff --git a/assets/favicon.svg b/assets/favicon.svg new file mode 100644 index 000000000..7df7427aa --- /dev/null +++ b/assets/favicon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/images/.gitkeep b/assets/images/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/assets/images/vincent-van-zalinge-e5VzJJDODbQ-unsplash.jpg b/assets/images/vincent-van-zalinge-e5VzJJDODbQ-unsplash.jpg new file mode 100644 index 000000000..8e73d5b5a Binary files /dev/null and b/assets/images/vincent-van-zalinge-e5VzJJDODbQ-unsplash.jpg differ diff --git a/assets/js/custom.js b/assets/js/custom.js new file mode 100644 index 000000000..bed14cf07 --- /dev/null +++ b/assets/js/custom.js @@ -0,0 +1,45 @@ +// Put your custom JS code here +// Homepage FAQ accordion: keep only one
open at a time. +document.addEventListener("DOMContentLoaded", () => { + const body = document.body; + + if (!body.classList.contains("home")) { + return; + } + + const faqDetails = document.querySelectorAll(".section-footer details"); + + if (!faqDetails.length) { + return; + } + + let hasOpenDetail = false; + faqDetails.forEach((detail) => { + if (!detail.hasAttribute("open")) { + return; + } + + if (!hasOpenDetail) { + hasOpenDetail = true; + return; + } + + detail.open = false; + detail.removeAttribute("open"); + }); + + faqDetails.forEach((detail) => { + detail.addEventListener("toggle", () => { + if (!detail.open) { + return; + } + + faqDetails.forEach((otherDetail) => { + if (otherDetail !== detail) { + otherDetail.open = false; + otherDetail.removeAttribute("open"); + } + }); + }); + }); +}); diff --git a/assets/js/docsearch.js b/assets/js/docsearch.js new file mode 100644 index 000000000..6f79f4814 --- /dev/null +++ b/assets/js/docsearch.js @@ -0,0 +1,17 @@ +import docsearch from '@docsearch/js'; + +docsearch({ + container: '#docsearch', + appId: '70H5139H21', + indexName: 'thulite', + apiKey: '5c2d653189f5d57721370f43d0deba25', + // askAi: 'YOUR_ALGOLIA_ASSISTANT_ID', + insights: true +}); + +const onClick = function () { + document.getElementsByClassName('DocSearch-Button')[0].click(); +}; + +document.getElementById('searchToggleMobile').onclick = onClick; +document.getElementById('searchToggleDesktop').onclick = onClick; diff --git a/assets/scss/common/_custom.scss b/assets/scss/common/_custom.scss new file mode 100644 index 000000000..5a7e6e748 --- /dev/null +++ b/assets/scss/common/_custom.scss @@ -0,0 +1,405 @@ +// Put your custom SCSS code here + +// DocSearch +/*! purgecss start ignore */ + +// @import "@docsearch/css/dist/_variables"; +@import "common/variables-docsearch"; + +// @import "@docsearch/css/dist/button"; +@import "@docsearch/css/dist/modal"; + +.DocSearch-Container { + z-index: 2000 !important; +} + +.DocSearch-Hit-title { + overflow: hidden; +} + +.DocSearch-Hit-icon { + display: flex; + align-items: center; +} + +.DocSearch-Hits mark { + padding: 0; +} + +/* +@media (max-width: 768px) { + .DocSearch-Modal { + position: fixed !important; + } +} +*/ + +/*! purgecss end ignore */ + +.home .sticky-top { + position: relative; +} + +.home .navbar { + background-color: transparent; + + /* + &::after { + content: ''; + position: absolute; + inset: 0; + backdrop-filter: blur(16px); + z-index: -1; + } + */ +} + +.home .border-top { + border-top: 1px solid $gray-200 !important; +} + +@include color-mode(dark) { + .home .border-top { + border-top: 1px solid $border-dark !important; + } +} + +.page-wash { + pointer-events: none; + z-index: -1; + position: absolute; + inset: 0 0 auto 0; + height: 720px; + max-height: 100vh; + background-image: + url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140' viewBox='0 0 140 140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.15' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='0.12'/%3E%3C/svg%3E"), + linear-gradient(to bottom, oklch(from var(--bs-primary) l c h / 0.08) 0%, oklch(from var(--bs-primary) l c h / 0.05) 16%, transparent 58%), + radial-gradient(54% 36% at 50% 0%, oklch(from var(--bs-primary) calc(l + 0.02) c h / 0.18) 0%, oklch(from var(--bs-primary) l c h / 0.1) 36%, transparent 78%); + background-size: 280px 280px, 100% auto, #{"min(1100px, 100%)"} 540px; + background-position: left top, center top, center top; + background-repeat: repeat, no-repeat, no-repeat; + -webkit-mask-image: linear-gradient(to bottom, black 0%, black 52%, transparent 100%); + mask-image: linear-gradient(to bottom, black 0%, black 52%, transparent 100%); +} + +.section-header { + padding: 3rem 0; + + .header-content { + padding-top: 2rem; + } +} + +.section-main { + padding: 1rem 0; + + .row { + margin: 1rem 0; + } + + .col-lg-5 { + display: flex; + + .card { + margin: 0; + padding: 0.75rem; + height: 100%; + width: 100%; + + h3 { + margin-top: 0 + } + + p { + margin-bottom: 0; + } + } + } +} + +.section-prefooter { + padding: 3rem 0 5rem; +} + +.section-footer { + padding: 1rem 0 3rem; +} + +.home .btn-lg { + font-size: 1.125rem; +} + +@include media-breakpoint-up(lg) { + .section-header { + padding: 5rem 0; + + .header-content { + padding-top: 3rem; + } + } + + .section-main { + padding: 3rem 0; + } + + .section-prefooter { + padding: 5rem; + } + + .section-footer { + padding: 3rem 0; + } + + .home .btn-lg { + font-size: 1.1875rem; + } +} + +.btn-toggle { + text-transform: none; +} + +.docs-links h3, +.docs-links .h3, +.page-links h3, +.page-links .h3 { + text-transform: none; +} + +.section-cards { + .card { + margin: 0; + padding: 1rem; + height: 100%; + } + + .card-title { + margin-top: 0; + } +} + +@include media-breakpoint-up(lg) { + .section-cards .col-lg-7:nth-child(2n) .card { + margin-top: 3rem; + margin-bottom: -3rem; + } +} + +.content dl dt { + margin-bottom: 0.5rem; + margin-top: 1.5rem; +} + +.content dl dd { + margin-bottom: 1rem; + margin-left: 1rem; +} + +.navbar-brand { + font-family: $font-family-monospace; + font-weight: $headings-font-weight; + margin-right: auto; +} + +@include color-mode(dark) { + .navbar-brand { + color: $white; + } +} + +.link--text { + text-decoration: underline; + text-decoration-thickness: 1px; + text-underline-offset: 0.15em; + + &:hover, + &:focus, + &:active { + color: $link-color; + text-decoration: underline; + text-decoration-thickness: 1px; + text-underline-offset: 0.15em; + } + +} + +@include color-mode(dark) { + .link--text { + text-decoration: underline; + text-decoration-thickness: 1px; + text-underline-offset: 0.15em; + + &:hover, + &:focus, + &:active { + color: $link-color-dark; + text-decoration: underline; + text-decoration-thickness: 1px; + text-underline-offset: 0.15em; + } + + } +} + +.home .footer { + border-top: 0; +} + +.footer .text-muted { + &:hover, + &:focus, + &:active { + text-decoration: underline; + text-decoration-thickness: 1px; + text-underline-offset: 0.15em; + } +} + +.expressive-code pre > code { + font-family: $font-family-monospace; +} + +.icon-link { + display: inline-flex; + // gap: 0.375rem; + gap: 0.25rem; + align-items: center; + text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5)); + text-underline-offset: 0.25em; + backface-visibility: hidden; +} + +.card.w-50 { + width: 100% !important; +} + +@include media-breakpoint-up(sm) { + .card.w-50 { + width: calc(50% - 0.5rem) !important; + } +} + +.dropdown-menu { + border: 1px solid var(--sl-color-gray-6) !important; + box-shadow: none !important; + margin-left: 0.75rem; + padding: 0 0.25rem; + + .dropdown-item { + margin: 0.25rem 0; + padding-left: 0.625rem; + + &:hover, + &:focus, + &:active { + background-color: var(--sl-color-gray-7); + border-radius: 0.25rem; + color: inherit; + } + + &.active { + background-color: var(--sl-color-gray-7); + } + } +} + +@include color-mode(dark) { + .dropdown-menu { + border: 1px solid var(--sl-color-gray-6) !important; + box-shadow: none !important; + margin-left: 0.75rem; + padding: 0 0.25rem; + background-color: var(--sl-color-black); + + .dropdown-item { + margin: 0.25rem 0; + padding-left: 0.625rem; + + &:hover, + &:focus, + &:active { + background-color: var(--sl-color-gray-6); + border-radius: 0.25rem; + color: inherit; + } + + &.active { + background-color: var(--sl-color-gray-6); + } + } + } +} + +@include media-breakpoint-down(lg) { + .dropdown-menu { + margin-left: 0 !important; + padding: 0 0.25rem !important; + + } + + .dropdown:not(#ai-dropdown) .dropdown-menu { + border-radius: 0.25rem !important; + } +} + +.nav-link-name-post { + margin-left: 0.125rem; +} + +.nav-link-name-pre { + margin-right: 0.375rem; +} + +.preview-content svg { + margin-top: 0.25rem; + margin-bottom: 0.5rem !important; +} + +h2 code { + font-size: calc(1.325rem + 0.9vw); +} + +h3 code { + font-size: calc(1.3rem + 0.6vw); +} + +h4 code { + font-size: calc(1.275rem + 0.3vw); +} + +.card h5 { + font-family: $font-family-base; +} + +.preview { + table, + .expressive-code, + dl, + dt, + dd { + margin-top: 0; + margin-bottom: 0; + } + + h1, + h2, + h3, + p, + blockquote, + ol, + ul { + margin-bottom: 0; + } + + h3#custom-id { + margin-top: 0; + } + + dt { + margin-top: 0 !important; + } + + dd { + margin-bottom: 0 !important; + } +} diff --git a/assets/scss/common/_fonts.scss b/assets/scss/common/_fonts.scss new file mode 100644 index 000000000..4a4cbc360 --- /dev/null +++ b/assets/scss/common/_fonts.scss @@ -0,0 +1,24 @@ +// Font declarations for the project +// This file contains @font-face rules for loading custom fonts + +/* geist-mono-latin-wght-normal */ +@font-face { + font-family: "Geist Mono Variable"; + font-style: normal; + font-display: swap; + font-weight: 100 900; + src: url(fonts/geist-mono/files/geist-mono-latin-wght-normal.woff2) format("woff2-variations"); + unicode-range: + U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, + U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +/* geist-latin-wght-normal */ +@font-face { + font-family: "Geist Variable"; + font-style: normal; + font-display: swap; + font-weight: 100 900; + src: url(fonts/geist/files/geist-latin-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD; +} diff --git a/assets/scss/common/_variables-custom.scss b/assets/scss/common/_variables-custom.scss new file mode 100644 index 000000000..6920b9793 --- /dev/null +++ b/assets/scss/common/_variables-custom.scss @@ -0,0 +1,29 @@ +// Put your custom (S)CSS variables here + +// Quickly modify global styling by enabling or disabling optional features. + +$enable-responsive-font-sizes: true; + +// Prefix for :root CSS variables +$variable-prefix: bs-; + +// scss-docs-start font-variables +// stylelint-disable +$font-family-sans-serif: "Geist Variable", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; +$font-family-monospace:"Geist Mono Variable", SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +// stylelint-enable +$font-family-base: var(--#{$variable-prefix}font-sans-serif); +$font-family-code: var(--#{$variable-prefix}font-monospace); +$font-size-base: 1rem; // Assumes the browser default, typically `16px` +$font-size-md: $font-size-base * 1.125; +$font-size-xl: $font-size-base * 1.375; +$font-size-lg: $font-size-base * 1.25; +$font-size-md: $font-size-base * 1.125; +$font-size-sm: $font-size-base * 0.875; +$font-weight-light: 300; +$font-weight-normal: 400; +$font-weight-base: $font-weight-normal; +$line-height-base: 1.6; +$headings-font-family: $font-family-monospace; +$headings-font-weight: 300; +$headings-line-height: 1.25; diff --git a/assets/scss/common/_variables-docsearch.scss b/assets/scss/common/_variables-docsearch.scss new file mode 100644 index 000000000..f619728be --- /dev/null +++ b/assets/scss/common/_variables-docsearch.scss @@ -0,0 +1,84 @@ +/*! @docsearch/css Variables 4.6.3 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */ +:root { + --docsearch-primary-color: #003dff; + --docsearch-soft-primary-color: rgba(0, 61, 255, .1); + --docsearch-subtle-color: #d6d6e7; + --docsearch-text-color: #36395a; + --docsearch-error-color: #ef5350; + --docsearch-success-color: #e8f5e9; + --docsearch-secondary-text-color: #5a5e9a; + --docsearch-background-color: #f5f5fa; + --docsearch-spacing: 12px; + --docsearch-icon-stroke-width: 1.4; + --docsearch-focus-color: #005fcc; + --docsearch-highlight-color: #003dff; + --docsearch-muted-color: #9698c3; + --docsearch-muted-color-darker: rgba(120, 122, 165, .25); + --docsearch-icon-color: #5a5e9a; + --docsearch-container-background: rgba(101, 108, 133, .8); + --docsearch-logo-color: #003dff; + --docsearch-border-radius: 4px; + --docsearch-search-button-background: #fff; + --docsearch-search-button-text-color: var(--docsearch-secondary-text-color); + --docsearch-modal-width: 800px; + --docsearch-modal-height: 600px; + --docsearch-modal-variable-height: 60dvh; + --docsearch-modal-background: #f5f6f7; + --docsearch-modal-shadow: rgba(0, 0, 0, .2) 0px 12px 28px 0px, rgba(0, 0, 0, .1) 0px 2px 4px 0px, hsla(0, 0%, 100%, .05) 0px 0px 0px 1px inset; + --docsearch-searchbox-height: 56px; + --docsearch-searchbox-initial-height: 56px; + --docsearch-searchbox-background: #ffffffa6; + --docsearch-searchbox-focus-background: #ffffffa6; + --docsearch-actions-width: 99px; + --docsearch-actions-height: 44px; + --docsearch-hit-height: 56px; + --docsearch-hit-color: #444950; + --docsearch-hit-highlight-color: rgba(0, 61, 255, .1); + --docsearch-hit-background: #fff; + --docsearch-key-background: #f5f5fa; + --docsearch-key-color: #5a5e9a; + --docsearch-key-pressed-shadow: inset 0 2px 4px rgba(120, 122, 165, .25); + --docsearch-footer-height: 52px; + --docsearch-footer-background: #ffffffa6; + --docsearch-footer-shadow: 0 -1px 0 0 #e0e3e8, 0 -3px 6px 0 rgba(69, 98, 155, .12); + --fav-out-dur: 160ms; + --del-dur: 150ms; + --ease-smooth: cubic-bezier(0.25, 0.8, 0.4, 1); + --ease-fast: cubic-bezier(0.45, 0.15, 0.6, 0.9); + --shadow-pop: 0 4px 12px rgba(0, 0, 0, .06); + --shimmer-bg: linear-gradient(90deg, #e0e3e8 0%, var(--docsearch-muted-color) 20%, var(--docsearch-muted-color) 60%, #e0e3e8 95%); + --docsearch-dropdown-menu-background: var(--docsearch-hit-background); + --docsearch-dropdown-menu-item-hover-background: var(--docsearch-modal-background); +} + +html[data-bs-theme="dark"] { + --docsearch-text-color: #c4c7dc; + --docsearch-secondary-text-color: #b6b7d5; + --docsearch-subtle-color: #212139; + --docsearch-error-color: #ef5350; + --docsearch-success-color: rgba(67, 160, 71, .2); + --docsearch-highlight-color: #457aff; + --docsearch-focus-color: #9ac8ff; + --docsearch-background-color: #36395a; + --docsearch-icon-color: #b6b7d5; + --docsearch-container-background: rgba(9, 10, 17, .8); + --docsearch-modal-background: #15172a; + --docsearch-modal-shadow: inset 1px 1px 0 0 #2c2e40, 0 3px 8px 0 #000309; + --docsearch-searchbox-background: #000000a6; + --docsearch-searchbox-focus-background: #000000a6; + --docsearch-hit-color: #bec3c9; + --docsearch-hit-shadow: none; + --docsearch-hit-background: #090a11; + --docsearch-key-background: #36395a; + --docsearch-key-color: #b6b7d5; + --docsearch-key-pressed-shadow: inset 0 2px 4px rgba(12, 13, 20, .4); + --docsearch-footer-background: #000000a6; + --docsearch-footer-shadow: inset 0 1px 0 0 rgba(73, 76, 106, .5), 0 -4px 8px 0 rgba(0, 0, 0, .2); + --docsearch-logo-color: #fff; + --docsearch-muted-color: #7f8497; + --shimmer-bg: linear-gradient(90deg, #e0e3e8 0%, var(--docsearch-muted-color) 20%, var(--docsearch-muted-color) 60%, #e0e3e8 95%); + --docsearch-dropdown-menu-background: var(--docsearch-hit-background); + --docsearch-dropdown-menu-item-hover-background: var(--docsearch-modal-background); + --docsearch-search-button-background: var(--docsearch-modal-background); + --docsearch-search-button-text-color: var(--docsearch-text-color); +} diff --git a/assets/svgs/cabin.svg b/assets/svgs/cabin.svg new file mode 100644 index 000000000..71cf1b77c --- /dev/null +++ b/assets/svgs/cabin.svg @@ -0,0 +1 @@ + diff --git a/assets/svgs/microsoft.svg b/assets/svgs/microsoft.svg new file mode 100644 index 000000000..7255954d3 --- /dev/null +++ b/assets/svgs/microsoft.svg @@ -0,0 +1 @@ + diff --git a/assets/svgs/thulite.svg b/assets/svgs/thulite.svg new file mode 100644 index 000000000..70c3bb276 --- /dev/null +++ b/assets/svgs/thulite.svg @@ -0,0 +1 @@ + diff --git a/astro.config.mjs b/astro.config.mjs deleted file mode 100644 index 1f0d211c1..000000000 --- a/astro.config.mjs +++ /dev/null @@ -1,146 +0,0 @@ -import { defineConfig } from 'astro/config'; -import starlight from '@astrojs/starlight'; -import starlightDocSearch from '@astrojs/starlight-docsearch'; - -// https://astro.build/config -export default defineConfig({ - redirects: { - '/': { - status: 301, - destination: '/getting-started/', - }, - }, - site: 'https://docs.thulite.io/', - integrations: [starlight({ - head: [ - { - tag: 'meta', - attrs: { - property: 'og:image', - content: 'https://docs.thulite.io/cover-docs.png', - }, - }, - { - tag: 'meta', - attrs: { - name: 'twitter:image', - content: 'https://docs.thulite.io/cover-docs.png', - }, - }, - { - tag: 'script', - attrs: { - src: 'https://plausible.io/js/script.js', - 'data-domain': 'docs.thulite.io', - defer: true, - }, - }, - ], - title: 'Thulite Docs', - description: 'Node.js web framework designed for speed and security. Build the website you want with integrations, and deploy everywhere, all powered by Hugo and npm.', - components: { - MarkdownContent: './src/components/starlight/MarkdownContent.astro', - TableOfContents: './src/components/TableOfContents.astro', - }, - plugins: [ - starlightDocSearch({ - appId: '70H5139H21', - apiKey: '401f8b545478ebe52faeeeb6cf77cefc', - indexName: 'thulite', - }), - ], - logo: { - light: './src/assets/light-logo.svg', - dark: './src/assets/dark-logo.svg', - alt: 'Thulite', - replacesTitle: true, - }, - editLink: { - baseUrl: 'https://github.com/thuliteio/docs/edit/main/', - }, - sidebar: [ - { - label: 'Start Here', - items: [ - { label: 'Getting Started', link: '/getting-started/'}, - { label: 'Installation', link: '/install/auto/' }, - { label: 'Editor Setup', link: '/editor-setup/' }, - { label: 'Upgrade Thulite', link: '/upgrade-thulite/' }, - ], - }, - { - label: 'Concepts', - autogenerate: { directory: 'concepts' }, - }, - { - label: 'Basics', - autogenerate: { directory: 'basics' }, - }, - { - label: 'Built-ins', - collapsed: true, - items: [ - { label: 'Archetypes', link: '/guides/archetypes/' }, - { label: 'Data', link: '/guides/data/' }, - { label: 'Internationalization', link: '/guides/internationalization/' }, - { label: 'Static', link: '/guides/static/' }, - ], - }, - { - label: 'Add-ons', - items: [ - { label: 'Add integrations', link: '/guides/integrations/' }, - { label: 'Add a theme', link: '/guides/themes/' }, - { label: 'Email obfuscation', link: '/guides/email-obfuscation/' }, - ], - }, - { - label: 'Recipes', - items: [ - { label: 'Add analytics', link: '/guides/analytics/' }, - { label: 'Connect a CMS', link: '/guides/cms/' }, - { label: 'Deploy your site', link: '/guides/deploy/' }, - ], - }, - { - label: 'Guides', - items: [ - { label: 'Markdown', link: '/guides/markdown/' }, - { label: 'CSS & Styling', link: '/guides/styles/' }, - { label: 'JavaScript', link: '/guides/scripts/' }, - { label: 'Images', link: '/guides/images/' }, - { label: 'Fonts', link: '/guides/fonts/' }, - ], - }, - { - label: 'Reference', - collapsed: true, - items: [ - { label: 'Configuration', link: '/reference/configuration/' }, - { label: 'Frontmatter', link: '/reference/frontmatter/' }, - { label: 'Markdown', link: '/reference/markdown/' }, - ], - }, - ], - social: { - openCollective: 'https://opencollective.com/thulite', - github: 'https://github.com/thuliteio', - 'x.com': 'https://x.com/thuliteio', - mastodon: 'https://fosstodon.org/@thulite', - }, - customCss: [ - // Relative path to your custom CSS file - './src/styles/custom.css', - ], - lastUpdated: true, - favicon: '/favicon.svg', - titleDelimiter: '—', - }) - ], - // Process images with sharp: https://docs.astro.build/en/guides/assets/#using-sharp - image: { - service: { - entrypoint: 'astro/assets/services/sharp' - } - } -}); diff --git a/bun.lockb b/bun.lockb deleted file mode 100644 index 39d83b93c..000000000 Binary files a/bun.lockb and /dev/null differ diff --git a/config/_default/hugo.toml b/config/_default/hugo.toml new file mode 100644 index 000000000..5d82c20d9 --- /dev/null +++ b/config/_default/hugo.toml @@ -0,0 +1,103 @@ +title = "Thulite Docs" +baseurl = "http://localhost/" +disableAliases = true +disableHugoGeneratorInject = true +disableKinds = ["taxonomy", "term"] +enableEmoji = true +enableGitInfo = true +enableRobotsTXT = true +languageCode = "en-US" +rssLimit = 10 +summarylength = 20 # 70 (default) + +# Multilingual +defaultContentLanguage = "en" +disableLanguages = ["de", "nl"] +defaultContentLanguageInSubdir = false + +copyRight = "Copyright (c) 2020-2026 Thulite" + +[build.buildStats] + enable = true + +[outputs] + home = ["html", "rss", "sitemap", "searchIndex", "llms"] + page = ["html", "markdown"] + section = ["html", "rss", "sitemap"] + taxonomy = ["html", "rss", "sitemap"] + term = ["html", "rss", "sitemap"] + +[outputFormats.searchIndex] + mediaType = "application/json" + baseName = "search-index" + isPlainText = true + notAlternative = true + +[outputFormats.markdown] + baseName = "index" + isHTML = false + isPlainText = true + mediaType = "text/markdown" + +[outputFormats.llms] + baseName = "llms" + isHTML = false + isPlainText = true + mediaType = "text/plain" + +# Add output format for section sitemap.xml +[outputFormats.sitemap] + mediaType = "application/xml" + baseName = "sitemap" + isHTML = false + isPlainText = true + noUgly = true + rel = "sitemap" + +[sitemap] + changefreq = "monthly" + filename = "sitemap.xml" + priority = 0.5 + +[caches] + [caches.getresource] + dir = ":cacheDir/:project" + maxAge = -1 # "30m" + +[taxonomies] + contributor = "contributors" + category = "categories" + tag = "tags" + +[permalinks] + blog = "/blog/:slug/" + docs = "/docs/:sections[1:]/:slug/" +# docs = "/docs/1.0/:sections[1:]/:slug/" + +[minify.tdewolff.html] + keepComments = true # If set to false, build signatures are removed + keepWhitespace = false + +[pagination] + pagerSize = 10 + +[related] + threshold = 80 + includeNewer = true + toLower = false + [[related.indices]] + name = "categories" + weight = 100 + [[related.indices]] + name = "tags" + weight = 80 + [[related.indices]] + name = "date" + weight = 10 + +[imaging] + anchor = "Center" + bgColor = "#ffffff" + hint = "photo" + quality = 85 + resampleFilter = "Lanczos" diff --git a/config/_default/languages.toml b/config/_default/languages.toml new file mode 100644 index 000000000..b093ea8d4 --- /dev/null +++ b/config/_default/languages.toml @@ -0,0 +1,34 @@ +[en] + languageName = "English" + contentDir = "content/en" + weight = 10 + [en.params] + languageISO = "EN" + languageTag = "en-US" + # footer = 'Brought to you by Thulite' + footer = '© 2026 Thulite' + ## alertText = 'Doks version 1.0 just shipped!' + alertText = 'Get Hugo Shortcodes' + +[de] + languageName = "German" + contentDir = "content/de" + weight = 15 + [de.params] + languageISO = "DE" + languageTag = "de-DE" + footer = 'Gebaut mit Thulite' + alertText = 'Neue Version ist da! Doks v0.5' + +[nl] + languageName = "Nederlands" + contentDir = "content/nl" + weight = 20 + [nl.params] + languageISO = "NL" + languageTag = "nl-NL" + titleAddition = "Modern documentatie-thema" + description = "Doks is een Hugo-thema waarmee je moderne documentatie-websites kunt bouwen die veilig, snel en klaar voor SEO zijn — standaard." + titleHome = "Doks thema" + footer = 'Mogelijk gemaakt door Netlify, Hugo, en Doks' + alertText = 'Introductie van het Doks-kinderthema, verschillende DX + UX-updates en meer! Bekijk Doks v0.2' diff --git a/config/_default/markup.toml b/config/_default/markup.toml new file mode 100644 index 000000000..d4118dcdb --- /dev/null +++ b/config/_default/markup.toml @@ -0,0 +1,38 @@ +defaultMarkdownHandler = "goldmark" + +[goldmark] + [goldmark.extensions] + linkify = false + [goldmark.extensions.passthrough] + enable = true + [goldmark.extensions.passthrough.delimiters] + block = [['\[', '\]'], ['$$', '$$']] + inline = [['\(', '\)']] + [goldmark.parser] + autoHeadingID = true + autoHeadingIDType = "github" + [goldmark.parser.attribute] + block = true + title = true + [goldmark.renderer] + unsafe = true + +[highlight] + anchorLineNos = false + codeFences = true + guessSyntax = false + hl_Lines = '' + hl_inline = false + lineAnchors = '' + lineNoStart = 1 + lineNos = false + lineNumbersInTable = false + noClasses = false + noHl = false + style = 'monokai' + tabWidth = 2 + +[tableOfContents] + endLevel = 4 + ordered = false + startLevel = 2 diff --git a/config/_default/menus/menus.en.toml b/config/_default/menus/menus.en.toml new file mode 100644 index 000000000..ca07c9757 --- /dev/null +++ b/config/_default/menus/menus.en.toml @@ -0,0 +1,144 @@ +# [[docs]] +# name = "Prologue" +# weight = 10 +# identifier = "prologue" +# url = "/docs/prologue/" + +# [[docs]] +# name = "Help" +# weight = 60 +# identifier = "help" +# url = "/docs/help/" + +# [[docs]] +# name = "Lorem" +# weight = 70 +# identifier = "lorem" +# url = "/docs/lorem/" + +[[guide]] + name = "Lorem" + weight = 10 + identifier = "lorem" + url = "/guide/lorem/" + +[[tutorial]] + name = "Lorem" + weight = 10 + identifier = "lorem" + url = "/tutorial/lorem/" + +# [[main]] +# name = "Documentation" +# url = "/docs/start-here/getting-started/" +# # url = "/docs/1.0/prologue/introduction/" +# weight = 10 + +[[main]] + name = "Documentation" + url = 'https://docs.thulite.io/' + weight = 10 + +[[main]] + identifier = "thulite-docs" + name = "Thulite" + url = 'https://docs.thulite.io/' + parent = "Documentation" + weight = 11 + +[[main]] + name = "SEO" + url = 'https://seo.thulite.io/' + parent = "Documentation" + weight = 13 + +[[main]] + name = "Images" + url = 'https://images.thulite.io/' + parent = "Documentation" + weight = 15 + +[[main]] + name = "SVG" + url = 'https://svg.thulite.io/' + parent = "Documentation" + weight = 17 + +[[main]] + name = "Doks" + url = 'https://getdoks.org/' + parent = "Documentation" + weight = 19 + +[[main]] + name = "Thulite" + url = "https://thulite.io/" + weight = 13 +# post = '' +# [[main.params]] +# rel = 'external' + +[[main]] + name = "Blog" + url = "https://thulite.io/blog/" + weight = 15 + +[[main]] + name = "Community" + url = "https://github.com/orgs/thuliteio/discussions" + post = '' + weight = 20 + +# [[social]] +# name = "Twitter" +# pre = '' +# url = "https://twitter.com/getdoks" +# weight = 10 +# +# [[social]] +# name = "Discord" +# pre = '' +# url = "https://getdoks.org/chat" +# weight = 20 + +[[social]] + name = "GitHub" + pre = '' + url = "https://github.com/thuliteio/thulite" + weight = 30 + +# [[social]] +# name = "LinkedIn" +# pre = '' +# url = "https://www.linkedin.com/" +# weight = 40 + +# [[sidebar_docs]] +# name = "Guides" +# pageRef = "/docs/guides" +# weight = 10 +# +# [[sidebar_docs]] +# name = "Reference" +# pageRef = "/docs/reference" +# weight = 20 +# +# [[sidebar_docs]] +# name = "Resources" +# pageRef = "/docs/resources" +# weight = 30 + +[[footer]] + name = "Privacy Policy" + url = "https://thulite.io/privacy/" + weight = 10 + +[[footer]] + name = "Terms of Service" + url = "https://thulite.io/terms/" + weight = 20 + +# [[footer]] +# name = "Terms of Service" +# url = "/terms/" +# weight = 20 diff --git a/config/_default/menus/menus.nl.toml b/config/_default/menus/menus.nl.toml new file mode 100644 index 000000000..e530352aa --- /dev/null +++ b/config/_default/menus/menus.nl.toml @@ -0,0 +1,39 @@ +[[docs]] + name = "Prologue" + weight = 10 + identifier = "prologue" + url = "/docs/prologue/" + +[[docs]] + name = "Help" + weight = 60 + identifier = "help" + url = "/docs/help/" + +[[main]] + name = "Docs" + url = "/docs/prologue/introduction/" + weight = 10 + +# [[main]] +# name = "Blog" +# url = "/blog/" +# weight = 20 + +[[social]] + name = "GitHub" + pre = "" + url = "https://github.com/h-enk/doks" + post = "v0.1.0" + weight = 10 + +[[social]] + name = "Twitter" + pre = "" + url = "https://twitter.com/getdoks" + weight = 20 + +# [[footer]] +# name = "Privacy" +# url = "/privacy-policy/" +# weight = 10 diff --git a/config/_default/module.toml b/config/_default/module.toml new file mode 100644 index 000000000..17a1bd378 --- /dev/null +++ b/config/_default/module.toml @@ -0,0 +1,112 @@ +# Module Configuration File +# +# This file configures Hugo module settings, particularly module mounts which +# define how content is organized within the project. +# +# Mounts specify file paths in your project that Hugo should use when building +# the site. They allow for custom directory structures and integrating content +# from different locations. + +## content +[[mounts]] + source = "content" + target = "content" + +## data +[[mounts]] + source = "node_modules/@thulite/doks-core/data" + target = "data" + +[[mounts]] + source = "data" + target = "data" + +## layouts +[[mounts]] + source = "layouts" + target = "layouts" + +[[mounts]] + files = ['! home.html'] + source = "node_modules/@thulite/doks-core/layouts" + target = "layouts" + +[[mounts]] + source = "node_modules/@thulite/core/layouts" + target = "layouts" + +[[mounts]] + source = "node_modules/@thulite/seo/layouts" + target = "layouts" + +[[mounts]] + source = "node_modules/@thulite/images/layouts" + target = "layouts" + +[[mounts]] + source = "node_modules/@thulite/inline-svg/layouts" + target = "layouts" + +## i18n +[[mounts]] + source = "node_modules/@thulite/doks-core/i18n" + target = "i18n" + +[[mounts]] + source = "i18n" + target = "i18n" + +## archetypes +[[mounts]] + source = "node_modules/@thulite/doks-core/archetypes" + target = "archetypes" + +[[mounts]] + source = "archetypes" + target = "archetypes" + +## assets +[[mounts]] + source = "node_modules/@thulite/core/assets" + target = "assets" + +[[mounts]] + source = "node_modules/@thulite/doks-core/assets" + target = "assets" + +[[mounts]] + source = "node_modules/@tabler/icons/icons/outline" + target = "assets/svgs/tabler-icons" + +[[mounts]] + source = "node_modules/simple-icons/icons" + target = "assets/svgs/simple-icons" + +[[mounts]] + source = "node_modules/@thulite/images/assets" + target = "assets" + +[[mounts]] + source = "hugo_stats.json" + target = "assets/watching/hugo_stats.json" + +[[mounts]] + source = "assets" + target = "assets" + +## static +[[mounts]] + source = "node_modules/@thulite/doks-core/static" + target = "static" + +[[mounts]] + source = "node_modules/@fontsource-variable/geist-mono" + target = "static/fonts/geist-mono" + +[[mounts]] + source = "node_modules/@fontsource-variable/geist" + target = "static/fonts/geist" + +[[mounts]] + source = "static" + target = "static" diff --git a/config/_default/params.toml b/config/_default/params.toml new file mode 100644 index 000000000..04fe063af --- /dev/null +++ b/config/_default/params.toml @@ -0,0 +1,150 @@ +# Hugo +title = "My Docs" +description = "Congrats on setting up a new Doks project!" +images = ["cover.png"] + +# mainSections +mainSections = ["start-here", "basics", "advanced", "reference"] + +# Enable mathematical rendering on every page (unless you set the `math` parameter to `false` in front matter) +math = false # false (default) or true +mathEngine = "KaTeX" # "KaTeX" (default) or "MathJax" + +[social] + twitter = "getdoks" + +# Add-ons +[add_ons] + docSearch = true # false (default) or true + +# Doks (@thulite/doks-core) +[doks] + # Color mode + colorMode = "auto" # auto (default), light or dark + colorModeToggler = true # true (default) or false (this setting is only relevant when colorMode = auto) + + # Navbar + navbarSticky = true # true (default) or false + containerBreakpoint = "fluid" # "", "sm", "md", "lg", "xl", "xxl", or "fluid" (default) + + ## Button + navBarButton = false # false (default) or true + navBarButtonUrl = "/docs/prologue/introduction/" + navBarButtonText = "Get started" + + # FlexSearch + flexSearch = false # true (default) or false + searchExclKinds = [] # list of page kinds to exclude from search indexing (e.g. ["home", "taxonomy", "term"] ) + searchExclTypes = [] # list of content types to exclude from search indexing (e.g. ["blog", "docs", "legal", "contributors", "categories"]) + showSearch = [] # [] (all pages, default) or homepage (optionally) and list of sections (e.g. ["homepage", "blog", "guides"]) + indexSummary = false # true or false (default); whether to index only the `.Summary` instead of the full `.Content`; limits the respective JSON field size and thus increases loading time + + ## Search results + showDate = false # false (default) or true + showSummary = true # true (default) or false + searchLimit = 99 # 0 (no limit, default) or natural number + + # Global alert + alert = false # false (default) or true + alertDismissable = true # true (default) or false + + # Bootstrap + bootstrapJavascript = true # false (default) or true + + # Nav + sectionSwitcher = true # true or false (default) + sectionNav = ["start-here", "basics", "advanced", "reference"] # ["docs"] (default) or list of sections (e.g. ["docs", "guides"]) + toTopButton = false # false (default) or true + breadcrumbTrail = false # false (default) or true + headlineHash = true # true (default) or false + scrollSpy = true # true (default) or false + + # Multilingual + multilingualMode = false # false (default) or true + showMissingLanguages = true # whether or not to show untranslated languages in the language menu; true (default) or false + + # Versioning + docsVersioning = false # false (default) or true + docsVersion = "1.0" + + # UX + headerBar = false # true (default) or false + backgroundDots = true # true (default) or false + aiButtons = true # true (default) or false + + # Homepage + sectionFooter = false # false (default) or true + + # Blog + relatedPosts = false # false (default) or true + imageList = true # true (default) or false + imageSingle = true # true (default) or false + + # Repository + editPage = true # false (default) or true + lastMod = true # false (default) or true + repoHost = "GitHub" # GitHub (default), Gitea, GitLab, Bitbucket, or BitbucketServer + docsRepo = "https://github.com/thuliteio/docs" + docsRepoBranch = "main" # main (default), master, or + docsRepoSubPath = "" # "" (none, default) or + + krokiURL = "https://kroki.io" # "https://kroki.io" (default) or custom URL like http://localhost:8000. + + # SCSS colors + # backGround = "yellowgreen" + ## Dark theme + # textDark = "#dee2e6" # "#dee2e6" (default), "#dee2e6" (orignal), or custom color + # accentDark = "#5d2f86" # "#5d2f86" (default), "#5d2f86" (original), or custom color + ## Light theme + # textLight = "#1d2d35" # "#1d2d35" (default), "#1d2d35" (orignal), or custom color + # accentLight = "#8ed6fb" # "#8ed6fb" (default), "#8ed6fb" (orignal), or custom color + + # [doks.menu] + # [doks.menu.section] + # auto = true # true (default) or false + # collapsibleSidebar = true # true (default) or false + +# Debug +[render_hooks.image] + errorLevel = 'ignore' # ignore (default), warning, or error (fails the build) + +[render_hooks.link] + errorLevel = 'ignore' # ignore (default), warning, or error (fails the build) + highlightBroken = false # true or false (default) + +# Images (@thulite/images) +[thulite_images] + [thulite_images.defaults] + decoding = "async" # sync, async, or auto (default) + fetchpriority = "auto" # high, low, or auto (default) + loading = "lazy" # eager or lazy (default) + widths = [480, 576, 768, 1025, 1200, 1440] # [640, 768, 1024, 1366, 1600, 1920] for example + sizes = "auto" # 100vw (default), 75vw, or auto for example + process = "" # "fill 1600x900" or "fill 2100x900" for example + lqip = "16x webp q20" # "16x webp q20" or "21x webp q20" for example + +# Inline SVG (@thulite/inline-svg) +[inline_svg] + iconSetDir = "tabler-icons" # tabler-icons (default) + iconSetVariant = "" # outline (default) or filled + +# SEO (@thulite/seo) +[seo] + [seo.title] + separator = "" # "|" (default) + suffix = "" # title hugo.toml (default) + [seo.description] + summaryFallback = "" # "" (default) + [seo.favicons] + icon = "favicon.png" # favicon.png (default) + svgIcon = "favicon.svg" # favicon.svg (default) + [seo.schemas] + type = "Organization" # Organization (default) or Person + logo = "favicon-512x512.png" # Logo of Organization — favicon-512x512.png (default) + name = "Thulite" # Name of Organization or Person + sameAs = [] # E.g. ["https://github.com/thuliteio/thulite", "https://fosstodon.org/@thulite"] + images = ["cover.png"] # ["cover.png"] (default) + article = [] # Article sections + newsArticle = [] # NewsArticle sections + blogPosting = ["blog"] # BlogPosting sections + product = [] # Product sections diff --git a/config/babel.config.js b/config/babel.config.js new file mode 100644 index 000000000..8482b9c15 --- /dev/null +++ b/config/babel.config.js @@ -0,0 +1,17 @@ +module.exports = { + presets: [ + [ + '@babel/preset-env', + { + targets: { + browsers: [ + // Best practice: https://github.com/babel/babel/issues/7789 + '>=1%', + 'not ie 11', + 'not op_mini all' + ] + } + } + ] + ] +}; diff --git a/config/next/hugo.toml b/config/next/hugo.toml new file mode 100644 index 000000000..8d1b518e7 --- /dev/null +++ b/config/next/hugo.toml @@ -0,0 +1,2 @@ +# Overrides for next environment +baseurl = "/" diff --git a/config/postcss.config.js b/config/postcss.config.js new file mode 100644 index 000000000..ec729fe5b --- /dev/null +++ b/config/postcss.config.js @@ -0,0 +1,62 @@ +import autoprefixer from 'autoprefixer'; +import purgeCSSPlugin from '@fullhuman/postcss-purgecss'; + +const purgecss = purgeCSSPlugin({ + content: ['./hugo_stats.json'], + defaultExtractor: (content) => { + const els = JSON.parse(content).htmlElements; + return [...(els.tags || []), ...(els.classes || []), ...(els.ids || [])]; + }, + dynamicAttributes: [ + 'aria-expanded', + 'aria-selected', + 'data-bs-popper', + 'data-bs-target', + 'data-bs-theme', + 'data-dark-mode', + 'data-global-alert', + 'data-pane', // tabs.js + 'data-popper-placement', + 'data-sizes', + 'data-toggle-tab', // tabs.js + 'id', + 'size', + 'type' + ], + safelist: [ + 'active', + 'btn-clipboard', // clipboards.js + 'clipboard', // clipboards.js + 'disabled', + 'hidden', + 'modal-backdrop', // search-modal.js + 'selected', // search-modal.js + 'show', + 'img-fluid', + 'blur-up', + 'lazyload', + 'lazyloaded', + 'alert-link', + 'container-fw ', + 'container-lg', + 'container-fluid', + 'offcanvas-backdrop', + 'figcaption', + 'dt', + 'dd', + 'showing', + 'hiding', + 'page-item', + 'page-link', + 'not-content', + 'copy', + 'btn-copy', + ] +}); + +export default { + plugins: [ + autoprefixer(), + ...(process.env.HUGO_ENVIRONMENT === "production" ? [purgecss] : []), + ], +}; diff --git a/config/production/hugo.toml b/config/production/hugo.toml new file mode 100644 index 000000000..575f19241 --- /dev/null +++ b/config/production/hugo.toml @@ -0,0 +1,2 @@ +# Overrides for production environment +baseurl = "/" diff --git a/content/404.md b/content/404.md new file mode 100644 index 000000000..632f258aa --- /dev/null +++ b/content/404.md @@ -0,0 +1,17 @@ +--- +title: "Page not found" +date: 2026-02-17T13:06:19+01:00 +description: "The page you're looking for doesn’t exist or has moved. Check the URL, use the navigation to browse sections, or return to the homepage." +draft: false +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "noindex" # custom robot tags (optional) +--- + +Sorry, we can't find the page you're looking for. + +Use the navigation above or go back to the [homepage](/). diff --git a/content/_index.md b/content/_index.md new file mode 100644 index 000000000..cd14e0799 --- /dev/null +++ b/content/_index.md @@ -0,0 +1,41 @@ +--- +title: "Build production-ready websites" +description: "" +lead: "Thulite websites. Simple setup. Sensible defaults." +date: 2023-09-07T16:33:54+02:00 +lastmod: 2026-03-23T16:15:33+01:00 +draft: false +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- + +```bash +npm create thulite@latest + +> npx +> create-thulite + +│ +◇ Project name: +│ thulite-project +│ +◇ Select a template: +│ Doks theme +│ +◇ Select a variant: +│ With recommended integrations (SEO and Images) +│ +◇ Install with npm and start now? +│ Yes +│ +◇ Scaffolding project in /home/h-enk/thulite-project... +│ +◇ Installing dependencies with npm... +│ +◇ Starting dev server... +``` diff --git a/content/advanced/_index.md b/content/advanced/_index.md new file mode 100644 index 000000000..2f1b92160 --- /dev/null +++ b/content/advanced/_index.md @@ -0,0 +1,20 @@ +--- +title: "Advanced" +description: "" +summary: "" +date: 2026-04-27T11:59:45+02:00 +lastmod: 2026-04-27T11:59:45+02:00 +draft: false +weight: 300 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) + section: + title: "Advanced" + iconName: "settings-2" + startUrl: "/advanced/internationalization/" +--- diff --git a/content/advanced/analytics/_index.md b/content/advanced/analytics/_index.md new file mode 100644 index 000000000..834c9df51 --- /dev/null +++ b/content/advanced/analytics/_index.md @@ -0,0 +1,18 @@ +--- +title: "Analytics" +description: "" +summary: "" +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 700 +params: + toc: true + sidebar: + collapsed: false + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- diff --git a/content/advanced/analytics/cabin-analytics.md b/content/advanced/analytics/cabin-analytics.md new file mode 100644 index 000000000..e9974555f --- /dev/null +++ b/content/advanced/analytics/cabin-analytics.md @@ -0,0 +1,34 @@ +--- +title: "Cabin Analytics" +description: "Cabin Analytics is a privacy-first, carbon conscious web analytics service." +summary: "Cabin Analytics is a privacy-first, carbon conscious web analytics service." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 711 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +[Cabin Analytics](https://withcabin.com/) is a privacy-first, carbon conscious web analytics service. + +## Prerequisites + +To follow this guide, you'll need an existing [Thulite](https://thulite.io/) site and a [Cabin](https://withcabin.com/settings/domains) project. + +## Add script + +Add to `layouts/partials/head/script-header.html`: + +```html + +``` + +## Resources + +- [Cabin Analytics Documentation](https://docs.withcabin.com/) +- [Privacy law compliance](https://docs.withcabin.com/privacy.html) diff --git a/src/content/docs/guides/analytics/fathom-analytics.mdx b/content/advanced/analytics/fathom-analytics.md similarity index 50% rename from src/content/docs/guides/analytics/fathom-analytics.mdx rename to content/advanced/analytics/fathom-analytics.md index 31b606b9d..490b23f72 100644 --- a/src/content/docs/guides/analytics/fathom-analytics.mdx +++ b/content/advanced/analytics/fathom-analytics.md @@ -1,19 +1,26 @@ --- -title: "Add Fathom Analytics to your Thulite Site" -description: How to add ananlytics to your Thulite site using Fathom Analytics. -type: analytics -stub: false -service: Fathom +title: "Fathom Analytics" +description: "Fathom Analytics is a Google Analytics alternative that doesn't compromise visitor privacy for data." +summary: "Fathom Analytics is a Google Analytics alternative that doesn't compromise visitor privacy for data." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 713 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) --- -import List from '~/components/List.astro'; - [Fathom Analytics](https://usefathom.com/) is a Google Analytics alternative that doesn't compromise visitor privacy for data. -## Set up Fathom +## Prerequisites To follow this guide, you'll need an existing [Thulite](https://thulite.io/) site and a [Fathom](https://usefathom.com/docs/start/create) project. -### Add script +## Add script Add to `layouts/partials/head/script-header.html`: @@ -21,9 +28,7 @@ Add to `layouts/partials/head/script-header.html`: ``` -## Official Resources +## Resources - - [Advanced embed script settings](https://usefathom.com/docs/script/script-advanced) - [If Fathom isn't working on your site](https://usefathom.com/docs/troubleshooting/not-working) - diff --git a/src/content/docs/guides/analytics/google-analytics.mdx b/content/advanced/analytics/google-analytics.md similarity index 59% rename from src/content/docs/guides/analytics/google-analytics.mdx rename to content/advanced/analytics/google-analytics.md index f8e82cf60..bce46f5ff 100644 --- a/src/content/docs/guides/analytics/google-analytics.mdx +++ b/content/advanced/analytics/google-analytics.md @@ -1,23 +1,32 @@ --- -title: "Add Google Analytics to your Thulite Site" -description: How to add ananlytics to your Thulite site using Google Analytics. -type: analytics -stub: false -service: Google Analytics +title: "Google Analytics" +description: "Google Analytics is an analytics service that enables you to measure traffic and engagement across your websites and apps." +summary: "Google Analytics is an analytics service that enables you to measure traffic and engagement across your websites and apps." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 715 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) --- -import List from '~/components/List.astro'; - [Google Analytics](https://marketingplatform.google.com/about/analytics/) is an analytics service that enables you to measure traffic and engagement across your websites and apps. -:::note[Using Google Analytics GA4 with CSP] +{{< callout context="note" title="Using Google Analytics GA4 with CSP" icon="info-circle" >}} + Don't forget to update your `Content-Security-Policy` HTTP response header when using Google Analytics. [See an example](https://content-security-policy.com/examples/google-analytics/) -::: -## Set up Google Analytics +{{< /callout >}} + +## Prerequisites To follow this guide, you'll need an existing [Thulite](https://thulite.io/) site and a [Google Analytics 4](https://support.google.com/analytics/answer/10089681) property. -### Add script +## Add script Add to `layouts/partials/head/script-header.html`: @@ -25,7 +34,7 @@ Add to `layouts/partials/head/script-header.html`: {{ template "_internal/google_analytics.html" . }} ``` -### Add tracking ID +## Add tracking ID Add your tracking ID to `config/_default/hugo.toml`: @@ -35,10 +44,8 @@ Add your tracking ID to `config/_default/hugo.toml`: ID = 'G-MEASUREMENT_ID' ``` -## Official Resources +## Resources - - [Set up Analytics for a website and/or app](https://support.google.com/analytics/answer/9304153?sjid=14124496534625981645-EU) - [The Google tag and Tag Manager](https://developers.google.com/analytics/devguides/collection/ga4/tag-options) - [Introduction to Google Analytics 4](https://developers.google.com/analytics/devguides/collection/ga4) - diff --git a/content/advanced/analytics/overview.md b/content/advanced/analytics/overview.md new file mode 100644 index 000000000..3c1d661de --- /dev/null +++ b/content/advanced/analytics/overview.md @@ -0,0 +1,30 @@ +--- +title: "Analytics Overview" +linkTitle: "Overview" +description: "Choose an analytics guide below to add a service to your Thulite project." +summary: "Choose an analytics guide below to add a service to your Thulite project." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 710 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Choose an analytics guide below to add your preferred service to a Thulite project. + +## Analytics Guides + +{{< card-grid >}} +{{< link-card src="svgs/cabin.svg" title="Cabin Analytics" href="/advanced/analytics/cabin-analytics/" >}} +{{< link-card src="svgs/simple-icons/fathom.svg" title="Fathom Analytics" href="/advanced/analytics/fathom-analytics/" >}} +{{< /card-grid >}} + +{{< card-grid >}} +{{< link-card src="svgs/simple-icons/googleanalytics.svg" title="Google Analytics" href="/advanced/analytics/google-analytics/" >}} +{{< link-card src="svgs/simple-icons/plausibleanalytics.svg" title="Plausible Analytics" href="/advanced/analytics/plausible-analytics/" >}} +{{< /card-grid >}} diff --git a/src/content/docs/guides/analytics/plausible-analytics.mdx b/content/advanced/analytics/plausible-analytics.md similarity index 57% rename from src/content/docs/guides/analytics/plausible-analytics.mdx rename to content/advanced/analytics/plausible-analytics.md index 54928ed18..b4ba933b9 100644 --- a/src/content/docs/guides/analytics/plausible-analytics.mdx +++ b/content/advanced/analytics/plausible-analytics.md @@ -1,19 +1,26 @@ --- -title: "Add Plausible Analytics to your Thulite Site" -description: How to add ananlytics to your Thulite site using Plausible Analytics. -type: analytics -stub: false -service: Plausible +title: "Plausible Analytics" +description: "Plausible Analytics ia an easy to use and privacy-friendly Google Analytics alternative." +summary: "Plausible Analytics ia an easy to use and privacy-friendly Google Analytics alternative." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 717 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) --- -import List from '~/components/List.astro'; - [Plausible Analytics](https://plausible.io/) ia an easy to use and privacy-friendly Google Analytics alternative. -## Set up Plausible +## Prerequisites To follow this guide, you'll need an existing [Thulite](https://thulite.io/) site and a [Plausible](https://plausible.io/) project. -### Add parameters +## Add parameters Add the following parameters to `config/_default/params.toml` and update with your `plausibleDomain`: @@ -23,7 +30,7 @@ Add the following parameters to `config/_default/params.toml` and update with yo plausibleDomain = "example.com" # "example.com" (default) ``` -### Add script +## Add script Add to `layouts/partials/head/script-header.html`: @@ -32,9 +39,7 @@ Add to `layouts/partials/head/script-header.html`: ``` -## Official Resources +## Resources - - [Content Security Policy](https://github.com/plausible/docs/issues/20) - [Plausible Analytics Docs](https://plausible.io/docs/) - diff --git a/content/advanced/cms/_index.md b/content/advanced/cms/_index.md new file mode 100644 index 000000000..9b1db95f2 --- /dev/null +++ b/content/advanced/cms/_index.md @@ -0,0 +1,18 @@ +--- +title: "CMS" +description: "" +summary: "" +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 800 +params: + toc: true + sidebar: + collapsed: false + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- diff --git a/content/advanced/cms/cloudcannon.md b/content/advanced/cms/cloudcannon.md new file mode 100644 index 000000000..e18fc145f --- /dev/null +++ b/content/advanced/cms/cloudcannon.md @@ -0,0 +1,22 @@ +--- +title: "CloudCannon" +description: "CloudCannon is a Git-based content management system that provides a visual editor for your content." +summary: "CloudCannon is a Git-based content management system that provides a visual editor for your content." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 811 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +[CloudCannon](https://cloudcannon.com) is a Git-based content management system that provides a visual editor for your content. + +## Resources + +- [The Hugo CMS for visual page building](https://cloudcannon.com/hugo-cms/) +- [Hugo Support in CloudCannon](https://cloudcannon.com/blog/hugo-support-in-cloudcannon/) diff --git a/src/content/docs/guides/cms/decap-cms.mdx b/content/advanced/cms/decap-cms.md similarity index 75% rename from src/content/docs/guides/cms/decap-cms.mdx rename to content/advanced/cms/decap-cms.md index 159e837cf..f8ede2889 100644 --- a/src/content/docs/guides/cms/decap-cms.mdx +++ b/content/advanced/cms/decap-cms.md @@ -1,25 +1,26 @@ --- -title: Decap CMS & Thulite -description: Add content to your Thulite project using Decap as a CMS -type: cms -stub: true -service: Decap CMS +title: "Decap Cms" +description: "Decap CMS (formerly Netlify CMS) is an open-source, Git-based content management system." +summary: "Decap CMS (formerly Netlify CMS) is an open-source, Git-based content management system." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 813 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) --- -import List from '~/components/List.astro'; - [Decap CMS](https://www.decapcms.org/) (formerly Netlify CMS) is an open-source, Git-based content management system. -## Official Resources - - -- [How to integrate Decap CMS with Hugo](https://decapcms.org/docs/hugo/). -- [Hugo template with Decap CMS](https://github.com/decaporg/one-click-hugo-cms) - - ## Example -Here is an example of a simple configuration `config.yml` : -``` +Here is a simple `config.yml` configuration example: + +```yml {title="config.yml"} locale: 'fr' backend: name: gitea @@ -46,11 +47,11 @@ collections: - { label: 'Date de publication', name: 'date', widget: 'datetime' } - { label: 'Date de mise à jour', name: 'lastmod', widget: 'datetime' } - { label: 'Brouillon', name: 'draft', widget: 'boolean', default: true } - - { - label: 'Menu', name: 'menu', widget: 'object', required: false, collapsed: true, + - { + label: 'Menu', name: 'menu', widget: 'object', required: false, collapsed: true, fields: [ { - label: 'docs', name: 'docs', widget: 'object', required: false, collapsed: true, + label: 'docs', name: 'docs', widget: 'object', required: false, collapsed: true, fields: [ { label: 'Parent', name: 'parent', widget: 'string' }, { label: 'Identifiant', name: 'identifier', widget: 'string' } @@ -60,8 +61,8 @@ collections: } - { label: 'Poid', name: 'weight', widget: 'number', value_type: 'integer' } - { label: 'toc', name: 'toc', widget: 'boolean', default: true } - - { - label: 'SEO', name: 'seo', widget: 'object', required: false, collapsed: true, + - { + label: 'SEO', name: 'seo', widget: 'object', required: false, collapsed: true, fields: [ { label: 'Titre', name: 'title', widget: 'string' }, { label: 'Description', name: 'description', widget: 'string' }, @@ -71,3 +72,8 @@ collections: } - { label: 'Body', name: 'body', widget: 'markdown' } ``` + +## Resources + +- [How to integrate Decap CMS with Hugo](https://decapcms.org/docs/hugo/). +- [Hugo template with Decap CMS](https://github.com/decaporg/one-click-hugo-cms) diff --git a/content/advanced/cms/overview.md b/content/advanced/cms/overview.md new file mode 100644 index 000000000..2e6095e2d --- /dev/null +++ b/content/advanced/cms/overview.md @@ -0,0 +1,29 @@ +--- +title: "CMS Overview" +linkTitle: "Overview" +description: "Choose a CMS guide below to connect a headless CMS to your Thulite project." +summary: "Choose a CMS guide below to connect a headless CMS to your Thulite project." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 810 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Choose a CMS guide below to connect a headless CMS to your Thulite project. + +## CMS Guides + +{{< card-grid >}} +{{< link-card src="svgs/simple-icons/cloudcannon.svg" title="CloudCannon" href="/advanced/cms/cloudcannon/" >}} +{{< link-card src="svgs/simple-icons/decapcms.svg" title="Decap CMS" href="/advanced/cms/decap-cms/" >}} +{{< /card-grid >}} + +{{< card-grid >}} +{{< link-card src="svgs/simple-icons/tina.svg" title="Tina CMS" href="/advanced/cms/tina-cms/" class="w-50" >}} +{{< /card-grid >}} diff --git a/content/advanced/cms/tina-cms.md b/content/advanced/cms/tina-cms.md new file mode 100644 index 000000000..733965ae7 --- /dev/null +++ b/content/advanced/cms/tina-cms.md @@ -0,0 +1,159 @@ +--- +title: "Tina CMS" +description: "Tina CMS is a Git-backed headless content management system." +summary: "Tina CMS is a Git-backed headless content management system." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 815 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +[Tina CMS](https://tina.io/) is a Git-backed headless content management system. + +## Prerequisites + +To follow this guide, you'll need an existing [Thulite](https://thulite.io/) site. + +## Setup + +{{< steps >}} +{{< step >}} + +Run one of the following commands to initialize Tina in your Thulite project. + +{{< tabs "initialize-tina-command" >}} +{{< tab "npm" >}} + +```bash +npx @tinacms/cli@latest init +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +pnpm dlx @tinacms/cli@latest init +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +yarn dlx @tinacms/cli@latest init +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +bunx @tinacms/cli@latest init +``` + +{{< /tab >}} +{{< /tabs >}} + +- When prompted for a Cloud ID, press Enter to skip. You can generate one later if you decide to use Tina Cloud. +- When prompted with "What framework are you using?", choose `Other`. +- When asked where public assets are stored, press Enter. + +After the command finishes, you should have a `.tina` folder in the project root and a generated `hello-world.md` file in `content/posts`. + +{{< /step >}} +{{< step >}} + +Update the `dev` script in `package.json`: + +```json {title="package.json"} +{ + "scripts": { + "dev": "tinacms dev -c \"hugo server --disableFastRender --noHTTPCache\"" + } +} +``` + +{{< /step >}} +{{< step >}} + +Tina CMS is now set up in local mode. Test it by running the `dev` script, then navigating to `/admin/index.html#/collections/post`. + +Editing the “Hello, World!” post will update the `content/posts/hello-world.md` file in your project directory. + +{{< /step >}} +{{< step >}} + +Set up your Tina collections by editing the `schema.collections` property in `.tina/config.ts`. + +For example, you can add a required `posted` front matter field to posts: + +```js {title=".tina/config.ts"} +import { defineConfig } from "tinacms"; + +// Your hosting provider likely exposes this as an environment variable +const branch = process.env.HEAD || process.env.VERCEL_GIT_COMMIT_REF || "main"; + +export default defineConfig({ + branch, + clientId: null, // Get this from tina.io + token: null, // Get this from tina.io + build: { + outputFolder: "admin", + publicFolder: "public", + }, + media: { + tina: { + mediaRoot: "images", + publicFolder: "public", + }, + }, + schema: { + collections: [ + { + name: "posts", + label: "Posts", + path: "src/content/posts", + format: 'mdx', + fields: [ + { + type: "string", + name: "title", + label: "Title", + isTitle: true, + required: true, + }, + { + type: "datetime", + name: "posted", + label: "Date Posted", + required: true, + }, + { + type: "rich-text", + name: "body", + label: "Body", + isBody: true, + }, + ], + }, + ], + }, +}); +``` + +Learn more about collections in the [Tina docs](https://tina.io/docs/reference/collections/). +{{< /step >}} +{{< step >}} + +In production, Tina CMS can commit changes directly to your GitHub repository. For production setup, you can use [TinaCloud](https://tina.io/docs/tinacloud) or self-host the [Tina Data Layer](https://tina.io/docs/self-hosted/overview/). + +{{< /step >}} +{{< /steps >}} + +## Resources + +- [Hugo + TinaCMS Setup Guide](https://tina.io/docs/frameworks/hugo/). diff --git a/content/advanced/internationalization.md b/content/advanced/internationalization.md new file mode 100644 index 000000000..b84d8b13f --- /dev/null +++ b/content/advanced/internationalization.md @@ -0,0 +1,74 @@ +--- +title: "Internationalization" +description: "Set up and manage multilingual content in your Thulite project." +summary: "Set up and manage multilingual content in your Thulite project." +date: 2026-03-25T08:23:03+01:00 +lastmod: 2026-03-25T08:23:03+01:00 +draft: false +weight: 305 +toc: true +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- + +Internationalization (i18n) in Thulite is powered by Hugo's multilingual mode. + +## Quick setup + +1. Define your languages in `config/_default/languages.toml`. +2. Create language-specific content directories (for example, `content/en`, `content/de`, `content/nl`). +3. Add translated pages with matching paths in each language directory. +4. Add UI string translations in `i18n/*.toml`. + +## Configure languages + +In `config/_default/languages.toml`, each language has its own settings: + +```toml {title="languages.toml"} +[en] + languageName = "English" + contentDir = "content/en" + weight = 10 + +[de] + languageName = "German" + contentDir = "content/de" + weight = 15 +``` + +`contentDir` tells Hugo where to find content for each language. + +## Add translated content + +Keep the same relative path for each translation. + +- English: `content/en/docs/getting-started.md` +- German: `content/de/docs/getting-started.md` + +This keeps URLs and page structure aligned across languages. + +## Translate interface strings + +Store shared UI translations in `i18n` files, such as: + +- `i18n/en.toml` +- `i18n/de.toml` +- `i18n/nl.toml` + +Example: + +```toml +[read_more] +other = "Read more" +``` + +Use Hugo's `i18n` function in templates to render translated strings. + +## Resources + +- [Multilingual mode](https://gohugo.io/content-management/multilingual/) diff --git a/content/advanced/performance/_index.md b/content/advanced/performance/_index.md new file mode 100644 index 000000000..f57608fd9 --- /dev/null +++ b/content/advanced/performance/_index.md @@ -0,0 +1,18 @@ +--- +title: "Performance" +description: "" +summary: "" +date: 2026-05-18T08:09:49+02:00 +lastmod: 2026-05-18T08:09:49+02:00 +draft: false +weight: 400 +params: + toc: true + sidebar: + collapsed: false + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- diff --git a/content/advanced/performance/caching.md b/content/advanced/performance/caching.md new file mode 100644 index 000000000..1e16b4dbe --- /dev/null +++ b/content/advanced/performance/caching.md @@ -0,0 +1,61 @@ +--- +title: "Caching" +description: "Use build caches and immutable asset caching in Thulite." +summary: "Configure Hugo caches, ship fingerprinted assets, and validate cache behavior." +date: 2026-05-18T08:11:14+02:00 +lastmod: 2026-05-18T08:11:14+02:00 +draft: false +weight: 411 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- + +Caching in Thulite has two layers: + +- Build-time cache (Hugo resource and data caches) +- Runtime cache (browser and CDN caching for generated assets) + +## Configure Hugo build caches + +Set cache directories in your Hugo config so repeated builds are faster and deterministic: + +```toml {title="config/_default/hugo.toml"} +[caches] + [caches.getresource] + dir = ":cacheDir/:project" + maxAge = -1 +``` + +For projects using Thulite Core, you can also configure `getjson`, `getcsv`, `images`, and `assets` caches. + +## Use fingerprinted assets for long-lived caching + +Thulite Core fingerprints CSS and JavaScript bundles. Because filenames change when content changes, you can safely cache those files aggressively. + +Recommended strategy: + +- HTML: short cache lifetime or revalidate often +- Fingerprinted CSS/JS/fonts/images: long cache lifetime (for example `max-age=31536000, immutable`) + +## Add cache headers at the edge + +Set cache headers in your host or CDN config (for example Netlify). Keep document caching conservative and static fingerprinted assets aggressive. + +## Verify caching behavior + +After `npm run build`, check `public/` for fingerprinted assets and validate headers in browser dev tools: + +- HTML responses are revalidated as expected +- Fingerprinted assets return long-lived cache headers +- A new build changes asset filenames when content changes + +## Related + +- [Configuration](/start-here/configuration/) +- [Verification](/start-here/verification/) +- [Thulite Core integration](/basics/integrations/core/) diff --git a/content/advanced/performance/optimization.md b/content/advanced/performance/optimization.md new file mode 100644 index 000000000..df6455507 --- /dev/null +++ b/content/advanced/performance/optimization.md @@ -0,0 +1,85 @@ +--- +title: "Optimization" +description: "Optimize Thulite builds and delivery with a few high-impact defaults." +summary: "Minify output, reduce CSS/JS payload, defer non-critical work, and verify results." +date: 2026-05-18T08:11:22+02:00 +lastmod: 2026-05-18T08:11:22+02:00 +draft: false +weight: 413 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- + +Optimization in Thulite is mostly about shipping less code and doing less work on first load. + +## Build for production + +Use a production build with garbage collection and minification (`hugo build --gc --minify`): + +{{< tabs "build-command" >}} +{{< tab "npm" >}} + +```bash +npm run build +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +pnpm run build +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +yarn build +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +bun run build +``` + +{{< /tab >}} +{{< /tabs >}} + +This removes unused build artifacts and compresses generated output. + +## Keep CSS lean + +Thulite uses PostCSS and can remove unused selectors in production (via `hugo_stats.json` + PurgeCSS). Keep your safelist current for dynamic classes. + +## Ship optimized assets + +Thulite Core compiles and fingerprints CSS/JS bundles. This gives: + +- Smaller assets in production +- Stable integrity hashes +- Efficient browser caching with automatic cache busting on content change + +## Defer non-critical work + +Thulite Core supports async script loading, link prefetching using [Quicklink](https://getquick.link/), and native image lazy loading. These reduce main-thread and network pressure during initial render. + +## Verify with real checks + +After each change, run a production build and validate: + +- Lighthouse / PageSpeed scores +- JavaScript and CSS payload size +- No regressions in Core Web Vitals + +## Related + +- [Caching](/advanced/performance/caching/) +- [Verification](/start-here/verification/) +- [Thulite Core integration](/basics/integrations/core/) diff --git a/content/advanced/performance/overview.md b/content/advanced/performance/overview.md new file mode 100644 index 000000000..df0b64b7a --- /dev/null +++ b/content/advanced/performance/overview.md @@ -0,0 +1,33 @@ +--- +title: "Performance Overview" +linkTitle: "Overview" +description: "Improve load speed and runtime efficiency in Thulite." +summary: "Learn how to configure caching and apply high-impact optimization defaults." +date: 2026-05-18T08:14:59+02:00 +lastmod: 2026-05-18T08:14:59+02:00 +draft: false +weight: 410 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Use this section to improve how fast your Thulite site builds, renders, and delivers assets in production. + +## Performance Guides + +{{< card-grid >}} +{{< link-card + title="Caching" + description="Configure build and runtime caching for faster repeat visits and safer cache busting." + href="/advanced/performance/caching/" +>}} +{{< link-card + title="Optimization" + description="Reduce payload size and defer non-critical work to improve Core Web Vitals." + href="/advanced/performance/optimization/" +>}} +{{< /card-grid >}} diff --git a/content/advanced/security/_index.md b/content/advanced/security/_index.md new file mode 100644 index 000000000..3b14d403a --- /dev/null +++ b/content/advanced/security/_index.md @@ -0,0 +1,18 @@ +--- +title: "Security" +description: "" +summary: "" +date: 2026-05-18T08:11:58+02:00 +lastmod: 2026-05-18T08:11:58+02:00 +draft: false +weight: 500 +params: + toc: true + sidebar: + collapsed: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- diff --git a/content/advanced/security/content-security-policy.md b/content/advanced/security/content-security-policy.md new file mode 100644 index 000000000..d1f23d797 --- /dev/null +++ b/content/advanced/security/content-security-policy.md @@ -0,0 +1,59 @@ +--- +title: "Content Security Policy" +description: "Define and enforce a strict Content Security Policy for Thulite sites." +summary: "Start strict, allow only required sources, and roll out safely with report-only checks." +date: 2026-05-18T08:13:01+02:00 +lastmod: 2026-05-18T08:13:01+02:00 +draft: false +weight: 511 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- + +Content Security Policy (CSP) reduces XSS risk by restricting where scripts, styles, fonts, and other resources can load from. + +## Start with a strict baseline + +Use `self` by default and add only domains your site actually needs. + +```toml {title="netlify.toml"} +[[headers]] + for = "/*" + [headers.values] + Content-Security-Policy = "default-src 'self'; manifest-src 'self'; connect-src 'self'; font-src 'self'; img-src 'self' data:; script-src 'self'; style-src 'self'; frame-ancestors 'none'; base-uri 'self'; object-src 'none'" +``` + +## Handle inline and third-party scripts explicitly + +If inline scripts are required, prefer nonces or hashes instead of `unsafe-inline`. + +- Nonce: good when values are generated per response +- Hash: good for stable inline snippets +- Third-party sources: add only exact hosts you trust + +## Roll out with report-only first + +Deploy a `Content-Security-Policy-Report-Only` header, review violations, then enforce once clean. + +## Keep CSP aligned with asset strategy + +Thulite/Core generates fingerprinted assets and SRI attributes, which work well with a strict CSP. When integrations change, re-check CSP so new endpoints and assets are explicitly allowed. + +## Verify after every release + +In browser dev tools, confirm: + +- No blocked first-party scripts or styles +- No unexpected external domains +- No CSP violations on key pages + +## Related + +- [Headers](/advanced/security/headers/) +- [Optimization](/advanced/performance/optimization/) +- [Caching](/advanced/performance/caching/) diff --git a/content/advanced/security/email-obfuscation.md b/content/advanced/security/email-obfuscation.md new file mode 100644 index 000000000..e678cb3a9 --- /dev/null +++ b/content/advanced/security/email-obfuscation.md @@ -0,0 +1,104 @@ +--- +title: "Email Obfuscation" +description: "Obfuscate email addresses in Thulite with a simple, effective CSS technique." +summary: "Obfuscate email addresses in Thulite with a simple, effective CSS technique." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 515 +toc: true +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +This guide shows how to obfuscate email addresses in Thulite using a simple, effective CSS technique. + +## Background + +The article [Email address obfuscation: What works in 2026?](https://spencermortensen.com/articles/email-obfuscation/) by Spencer Mortensen reviews ways to hide email addresses from spam bots while keeping them readable for users. It compares plain text, HTML entities, CSS display properties, JavaScript techniques, and other methods. + +Results suggest that methods like CSS `display: none` and some JavaScript approaches are highly effective, while options like HTML comments and symbol substitution offer limited protection. + +## Setup + +{{< steps >}} +{{< step >}} + +Add a default (fallback) email address to `config/_default/params.toml`: + +```toml {title="params.toml"} +# defaultEmail +defaultEmail = "email@example.com" +``` + +{{< /step >}} +{{< step >}} + +Add the following CSS to `assets/scss/common/_custom.scss`: + +```scss {title="_custom.scss"} +span.email b { + display: none; +} +``` + +{{< /step >}} +{{< step >}} + +Create the shortcode file `layouts/shortcodes/email.html` with the following content: + +```html {title="email.html"} +{{- /* Set defaults and get args. */}} +{{- $address := index .Params 0 | default site.Params.defaultEmail }} + +{{- /* Get parts. */}} +{{- $addressParts := split $address "@" }} +{{- $userName := (index $addressParts 0) }} +{{- $rootDomain := (index $addressParts 1) }} +{{- $rootDomainParts := split $rootDomain "." }} +{{- $domainName := (index $rootDomainParts 0) }} +{{- $topLevelDomain := (index $rootDomainParts 1) }} + +{{- /* Render. */}} + +``` + +This shortcode uses the provided email address or falls back to `defaultEmail`. It then splits the address into `userName`, `domainName`, and `topLevelDomain` and renders the obfuscated HTML. +{{< /step >}} +{{< /steps >}} + +## Usage + +You can now use the shortcode in Markdown with `defaultEmail`: + +```md +{{}} +``` + +Rendering: + +```html + +``` + +Or provide an email address explicitly: + +```md +{{}} +``` + +Rendering: + +```html + +``` + +## Resources + +- [Email address obfuscation: What works in 2026?](https://spencermortensen.com/articles/email-obfuscation/) diff --git a/content/advanced/security/headers.md b/content/advanced/security/headers.md new file mode 100644 index 000000000..2f773df6c --- /dev/null +++ b/content/advanced/security/headers.md @@ -0,0 +1,60 @@ +--- +title: "Headers" +description: "Set secure HTTP response headers for your Thulite site." +summary: "Use a small, high-impact header baseline and validate behavior after each deploy." +date: 2026-05-18T08:13:33+02:00 +lastmod: 2026-05-18T08:13:33+02:00 +draft: false +weight: 513 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- + +Security headers are a low-cost way to harden your site at the edge. + +## Start with a safe baseline + +Use these headers for all routes (example for Netlify): + +```toml {title="netlify.toml"} +[[headers]] + for = "/*" + [headers.values] + Strict-Transport-Security = "max-age=31536000; includeSubDomains; preload" + X-Content-Type-Options = "nosniff" + X-Frame-Options = "SAMEORIGIN" + Referrer-Policy = "strict-origin" + Permissions-Policy = "geolocation=(self), microphone=(), camera=()" +``` + +## Add CSP separately and keep it strict + +Treat CSP as its own policy and iterate carefully as scripts and integrations evolve. + +- Start with `default-src 'self'` +- Add only required origins +- Prefer nonces/hashes over `unsafe-inline` + +## Be intentional with cache headers + +Apply long-lived caching to fingerprinted static assets, and shorter/revalidated caching to HTML. + +## Validate after deployment + +In browser dev tools and scanners, confirm: + +- Headers are present on HTML and static assets +- HTTPS and HSTS are active +- No unexpected framing or MIME issues +- No CSP violations on critical pages + +## Related + +- [Content Security Policy](/advanced/security/content-security-policy/) +- [Caching](/advanced/performance/caching/) +- [Verification](/start-here/verification/) diff --git a/content/advanced/security/overview.md b/content/advanced/security/overview.md new file mode 100644 index 000000000..3e2cbd2e0 --- /dev/null +++ b/content/advanced/security/overview.md @@ -0,0 +1,42 @@ +--- +title: "Security Overview" +linkTitle: "Overview" +description: "Harden your Thulite site with practical security controls." +summary: "Configure CSP, response headers, and email obfuscation to reduce common web risks." +date: 2026-05-18T08:14:51+02:00 +lastmod: 2026-05-18T08:14:51+02:00 +draft: false +weight: 510 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Use this section to apply essential security protections at the framework and hosting layer. + +## Security Guides + +{{< card-grid >}} +{{< link-card + title="Content Security Policy" + description="Restrict allowed resource sources to reduce XSS and injection risk." + href="/advanced/security/content-security-policy/" +>}} +{{< link-card + title="Headers" + description="Set secure HTTP headers such as HSTS, nosniff, and permissions policy." + href="/advanced/security/headers/" +>}} +{{< /card-grid >}} + +{{< card-grid >}} +{{< link-card + title="Email Obfuscation" + description="Protect published email addresses from basic scraping bots." + href="/advanced/security/email-obfuscation/" + class="w-50" +>}} +{{< /card-grid >}} diff --git a/content/advanced/seo/_index.md b/content/advanced/seo/_index.md new file mode 100644 index 000000000..723619828 --- /dev/null +++ b/content/advanced/seo/_index.md @@ -0,0 +1,18 @@ +--- +title: "SEO" +description: "" +summary: "" +date: 2026-05-18T08:13:50+02:00 +lastmod: 2026-05-18T08:13:50+02:00 +draft: false +weight: 600 +params: + toc: true + sidebar: + collapsed: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- diff --git a/content/advanced/seo/overview.md b/content/advanced/seo/overview.md new file mode 100644 index 000000000..bf7e6086a --- /dev/null +++ b/content/advanced/seo/overview.md @@ -0,0 +1,26 @@ +--- +title: "SEO Overview" +linkTitle: "Overview" +description: "" +summary: "" +date: 2026-05-18T08:14:40+02:00 +lastmod: 2026-05-18T08:14:40+02:00 +draft: false +weight: 610 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Use this section to improve crawlability, metadata quality, and search visibility for production sites. + +## SEO Guides + +{{< link-card + title="Thulite SEO" + description="Official documentation for SEO configuration, metadata, and validation in Thulite projects." + href="https://seo.thulite.io/" +>}} diff --git a/content/basics/_index.md b/content/basics/_index.md new file mode 100644 index 000000000..576d7bc56 --- /dev/null +++ b/content/basics/_index.md @@ -0,0 +1,20 @@ +--- +title: "Basics" +description: "" +summary: "" +date: 2026-04-27T11:59:36+02:00 +lastmod: 2026-04-27T11:59:36+02:00 +draft: false +weight: 200 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) + section: + title: "Basics" + iconName: "box" + startUrl: "/basics/project-structure/" +--- diff --git a/content/basics/archetypes.md b/content/basics/archetypes.md new file mode 100644 index 000000000..16589fffa --- /dev/null +++ b/content/basics/archetypes.md @@ -0,0 +1,17 @@ +--- +title: "Archetypes" +description: "" +summary: "" +date: 2026-03-25T08:23:03+01:00 +lastmod: 2026-03-25T08:23:03+01:00 +draft: false +weight: 220 +toc: true +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- diff --git a/content/basics/deployment/_index.md b/content/basics/deployment/_index.md new file mode 100644 index 000000000..3f54a815f --- /dev/null +++ b/content/basics/deployment/_index.md @@ -0,0 +1,18 @@ +--- +title: "Deployment" +description: "" +summary: "" +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 500 +params: + toc: true + sidebar: + collapsed: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- diff --git a/content/basics/deployment/cloudflare-pages.md b/content/basics/deployment/cloudflare-pages.md new file mode 100644 index 000000000..0bcc4302f --- /dev/null +++ b/content/basics/deployment/cloudflare-pages.md @@ -0,0 +1,157 @@ +--- +title: "Cloudflare Pages" +description: "You can deploy your Thulite project on Cloudflare Pages, a JAMstack platform for frontend developers to collaborate and deploy websites." +summary: "You can deploy your Thulite project on Cloudflare Pages, a JAMstack platform for frontend developers to collaborate and deploy websites." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 511 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Deploy your Thulite project on [Cloudflare Pages](https://pages.cloudflare.com/), a JAMstack platform for building and shipping frontend sites. + +## Prerequisites + +To get started, you need: + +- A Cloudflare account. If you do not already have one, you can create a free account during setup. +- Your app code pushed to a [GitHub](https://github.com/) or [GitLab](https://about.gitlab.com/) repository. + +## Deploy with Git + +{{< steps >}} +{{< step >}} +Set up a new project on Cloudflare Pages. +{{< /step >}} +{{< step >}} +Push your code to your Git repository (GitHub or GitLab). +{{< /step >}} +{{< step >}} +Log in to the Cloudflare dashboard, then select your account in Account Home > Pages. +{{< /step >}} +{{< step >}} +Select Create a new project, then choose Connect Git. +{{< /step >}} +{{< step >}} +Select the Git project you want to deploy, then click Begin setup. +{{< /step >}} +{{< step >}} +Use the following build settings: + +- Framework preset: `exit 0` +- Build command: `npm run build` +- Build output directory: `public` +{{< /step >}} +{{< step >}} +Click the Save and Deploy button. +{{< /step >}} +{{< /steps >}} + +## Deploy with Wrangler + +{{< steps >}} +{{< step >}} +Install the [Wrangler CLI](https://developers.cloudflare.com/workers/wrangler/get-started/) in your project: +{{< tabs "install-wrangler" >}} +{{< tab "npm" >}} + +```bash +npm install wrangler --save-dev +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +pnpm add wrangler --save-dev +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +yarn add --dev wrangler +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +bun install wrangler --save-dev +``` + +{{< /tab >}} +{{< /tabs >}} +{{< /step >}} +{{< step >}} +Authorize Wrangler with your Cloudflare account using OAuth: + +```bash +wrangler login +``` + +{{< /step >}} +{{< step >}} +Run your build command: + +{{< tabs "run-build" >}} +{{< tab "npm" >}} + +```bash +npm run build +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +pnpm run build +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +yarn run build +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +bun run build +``` + +{{< /tab >}} +{{< /tabs >}} + +{{< /step >}} +{{< step >}} +Deploy the build output directory to Cloudflare Pages: + +```bash +wrangler pages deploy public +``` + +{{< /step >}} +{{< /steps >}} + +After Wrangler uploads your assets, it provides a preview URL so you can inspect your site. You will also see the new project in the Cloudflare Pages dashboard. + +### Enable local preview with Wrangler + +Update the preview script to run `wrangler` instead of Thulite's built-in preview command: + +```json title="package.json" +"preview": "wrangler pages dev ./public" +``` + +## Troubleshooting + +If you run into errors, check whether your local `node` version (`node -v`) matches the `NODE_VERSION` environment variable in Cloudflare Pages settings. diff --git a/content/basics/deployment/github-pages.md b/content/basics/deployment/github-pages.md new file mode 100644 index 000000000..6e621c03b --- /dev/null +++ b/content/basics/deployment/github-pages.md @@ -0,0 +1,154 @@ +--- +title: "Github Pages" +description: "You can use GitHub Pages to host a Thulite website directly from a repository on GitHub.com." +summary: "You can use GitHub Pages to host a Thulite website directly from a repository on GitHub.com." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 513 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Use [GitHub Pages](https://docs.github.com/en/pages) to host a Thulite site directly from a repository on [GitHub.com](https://github.com/). + +{{< callout context="tip" icon="bulb" >}} +Looking for an example? Check out the [official GitHub Pages Doks example project](https://github.com/thuliteio/doks-gh-pages)! +{{< /callout >}} + +## How to deploy + +Deploy your Thulite site to GitHub Pages with [GitHub Actions](https://github.com/features/actions), which builds and publishes your site automatically. Your source code must be hosted on GitHub. + +Follow these steps: + +{{< steps >}} +{{< step >}} + +Create `.github/workflows/deploy.yml` in your project and paste in the workflow below. + +```yaml {title="deploy.yml"} +# Sample workflow for building and deploying a Thulite site to GitHub Pages +name: Deploy Thulite site to Pages + +on: + # Runs on pushes targeting the default branch + push: + branches: + - main + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +# Default to bash +defaults: + run: + shell: bash + +jobs: + # Build job + build: + runs-on: ubuntu-latest + env: + HUGO_VERSION: 0.161.1 + steps: + - name: Install Hugo CLI + run: | + wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \ + && sudo dpkg -i ${{ runner.temp }}/hugo.deb + - name: Install Dart Sass + run: sudo snap install dart-sass + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: recursive + fetch-depth: 0 + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '24' + cache: 'npm' + - name: Setup Pages + id: pages + uses: actions/configure-pages@v4 + - name: Install dependencies + run: "[[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true" + - name: Build production website + env: + # For maximum backward compatibility with Hugo modules + HUGO_ENVIRONMENT: production + HUGO_ENV: production + TZ: America/Los_Angeles + run: | + npm run build \ + -- \ + --baseURL "${{ steps.pages.outputs.base_url }}/" + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: ./public + + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 + +``` + +{{< /step >}} +{{< step >}} + +In GitHub, open your repository's Settings and go to Pages. +{{< /step >}} +{{< step >}} + +Set Source to GitHub Actions. +{{< /step >}} +{{< step >}} + +Commit the workflow file and push to GitHub. +{{< /step >}} +{{< step >}} + +Copy the "Your site is published at" URL and set it as `baseurl` in `./config/production/hugo.toml`. +{{< /step >}} +{{< step >}} + +Push the changes and wait for the action to complete successfully (about 30 seconds). +{{< /step >}} +{{< /steps >}} + +That's it. After about a minute, your site is available at the "Your site is published at" URL. Each push to your Thulite repository triggers an automatic deployment. + +{{< callout context="tip" icon="bulb" title="Set up a custom domain" >}} +You can optionally set up a custom domain by adding the following `./public/CNAME` file to your project: + +```txt +sub.mydomain.com +``` + +This will deploy your site at your custom domain instead of `user.github.io`. Don't forget to also [configure DNS for your domain provider](https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site#configuring-a-subdomain). +{{< /callout >}} diff --git a/content/basics/deployment/gitlab-pages.md b/content/basics/deployment/gitlab-pages.md new file mode 100644 index 000000000..3eef3f4c4 --- /dev/null +++ b/content/basics/deployment/gitlab-pages.md @@ -0,0 +1,66 @@ +--- +title: "Gitlab Pages" +description: "You can use GitLab Pages to host a Thulite site for your GitLab projects, groups, or user account." +summary: "You can use GitLab Pages to host a Thulite site for your GitLab projects, groups, or user account." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 515 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Use [GitLab Pages](https://docs.gitlab.com/user/project/pages/) to host a Thulite site for your [GitLab](https://about.gitlab.com/) projects, groups, or user account. + +{{< callout context="tip" icon="bulb" >}} +Looking for an example? Check out the [GitLab Pages Doks example project](https://gitlab.com/h-enk/doks-gitlab-pages)! +{{< /callout >}} + +## How to deploy + +Follow these steps to deploy your Thulite site to GitLab Pages. + +{{< steps >}} +{{< step >}} + +Create `.gitlab-ci.yml` in the root of your project with the content below. This pipeline builds and deploys your site when you push changes: + +```yaml {title=".gitlab-ci.yml"} +# The Docker image that will be used to build your app +image: node:lts +# Functions that should be executed before the build script is run +before_script: + - npm ci +pages: + script: + - npm run build + artifacts: + paths: + # The folder that contains the files to be exposed at the Page URL + - public + rules: + # This ensures that only pushes to the default branch will trigger + # a pages deploy + - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH +``` + +{{< /step >}} +{{< step >}} + +In GitLab, open your repository's Deploy tab and go to Pages. +{{< /step >}} +{{< step >}} + +Copy the Access pages URL and set it as `baseurl` in `./config/production/hugo.toml`. +{{< /step >}} +{{< step >}} + +Push the changes to GitLab. +{{< /step >}} +{{< /steps >}} + +That's it. After about a minute, your site is available at the Access pages URL. diff --git a/content/basics/deployment/google-firebase.md b/content/basics/deployment/google-firebase.md new file mode 100644 index 000000000..0df7ac27b --- /dev/null +++ b/content/basics/deployment/google-firebase.md @@ -0,0 +1,97 @@ +--- +title: "Google Firebase" +description: "Firebase Hosting is a service provided by Google's Firebase app development platform, which can be used to deploy a Thulite site." +summary: "Firebase Hosting is a service provided by Google's Firebase app development platform, which can be used to deploy a Thulite site." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 517 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Use [Firebase Hosting](https://firebase.google.com/products/hosting), part of [Firebase](https://firebase.google.com/), to deploy a Thulite site. + +## Prerequisites + +To follow this guide, install [firebase-tools](https://github.com/firebase/firebase-tools). + +## How to deploy + +{{< steps >}} +{{< step >}} + +Create `firebase.json` at the root of your project with the following content: + +```json {title="firebase.json"} +{ + "hosting": { + "public": "public", + "ignore": [] + } +} +``` + +{{< /step >}} +{{< step >}} + +Create `.firebaserc` at the root of your project with the following content: + +```json {title= ".firebaserc"} +{ + "projects": { + "default": "" + } +} +``` + +{{< /step >}} +{{< step >}} +Run your build command: + +{{< tabs "run-build" >}} +{{< tab "npm" >}} + +```bash +npm run build +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +pnpm run build +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +yarn run build +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +bun run build +``` + +{{< /tab >}} +{{< /tabs >}} + +{{< /step >}} +{{< step >}} + +Deploy your site: + +```bash +firebase deploy +``` + +{{< /step >}} +{{< /steps >}} diff --git a/content/basics/deployment/microsoft-azure.md b/content/basics/deployment/microsoft-azure.md new file mode 100644 index 000000000..b8acd83af --- /dev/null +++ b/content/basics/deployment/microsoft-azure.md @@ -0,0 +1,102 @@ +--- +title: "Microsoft Azure" +description: "Azure is a cloud platform from Microsoft. You can deploy your Thulite site with Microsoft Azure's Static Web Apps service." +summary: "Azure is a cloud platform from Microsoft. You can deploy your Thulite site with Microsoft Azure's Static Web Apps service." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 519 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Use [Azure](https://azure.microsoft.com/en-us) and its [Static Web Apps](https://azure.microsoft.com/en-us/products/app-service/static/) service to deploy your Thulite site. + +{{< callout context="tip" icon="bulb" >}} +Looking for an example? Check out the [official Microsoft Azure Doks example project](https://github.com/thuliteio/doks-microsoft-azure)! +{{< /callout >}} + +This guide shows how to deploy a Thulite site hosted on GitHub using Visual Studio Code. For other setups, see Microsoft's guide for the [Azure Pipelines Task](https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/azure-static-web-app-v0?view=azure-pipelines). + +## Prerequisites + +To follow this guide, you need: + +- An Azure account and subscription key. You can create a [free Azure account here](https://azure.microsoft.com/free). +- Your app code pushed to [GitHub](https://github.com/). +- The [SWA Extension](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurestaticwebapps) in [Visual Studio Code](https://code.visualstudio.com/). + +## How to deploy + +{{< steps >}} +{{< step >}} +Open your project in VS Code. +{{< /step >}} +{{< step >}} +Open the Static Web Apps extension, sign in to Azure, and click + to create a new Static Web App. You will be prompted to choose a subscription key. +{{< /step >}} +{{< step >}} +Follow the wizard to name your app, choose a framework preset, and set the app root (usually `/`) and build output location (use `/public`). Because Thulite is not in Azure's built-in templates, select `custom`. The wizard then creates a [GitHub Action](https://github.com/features/actions) in your repo's `.github` folder (created automatically if needed). + +The GitHub Action deploys your app. You can track progress in your repository's Actions tab on GitHub. When it completes successfully, click Browse Website in the SWA extension progress window to open the deployed site. +{{< /step >}} +{{< /steps >}} + +## Known Issues + +Builds can fail if your Node or Hugo version is outdated. + +### Node version + +To resolve this, update your project's `package.json` with this snippet: + +```json {title="package.json"} +{ + "engines": { + "node": ">=24.13.0" + }, +} +``` + +### Hugo version + +To resolve this, update your workflow file by providing a value for `HUGO_VERSION` in the `env` section: + +```yaml {title="workflow.yml"} +jobs: + build_and_deploy_job: + if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed') + runs-on: ubuntu-latest + name: Build and Deploy Job + steps: + - uses: actions/checkout@v3 + with: + submodules: true + lfs: false + - name: Build And Deploy + id: builddeploy + uses: Azure/static-web-apps-deploy@v1 + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_NICE_BUSH_0D736421E }} + repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments) + action: "upload" + ###### Repository/Build Configurations - These values can be configured to match your app requirements. ###### + # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig + app_location: "/" # App source code path + api_location: "api" # Api source code path - optional + output_location: "public" # Built app content directory - optional + ###### End of Repository/Build Configurations ###### + env: + HUGO_VERSION: 0.161.1 + +``` + +## Resources + +- [Deploy a Hugo site to Azure Static Web Apps](https://learn.microsoft.com/en-us/azure/static-web-apps/publish-hugo) +- [Custom Hugo version](https://learn.microsoft.com/en-us/azure/static-web-apps/publish-hugo#custom-hugo-version) +- [Microsoft Azure Static Web Apps documentation](https://learn.microsoft.com/en-us/azure/static-web-apps/) diff --git a/src/content/docs/guides/deploy/netlify.mdx b/content/basics/deployment/netlify.md similarity index 85% rename from src/content/docs/guides/deploy/netlify.mdx rename to content/basics/deployment/netlify.md index 3296b807c..30e305b24 100644 --- a/src/content/docs/guides/deploy/netlify.mdx +++ b/content/basics/deployment/netlify.md @@ -1,12 +1,19 @@ --- -title: Deploy your Thulite Site to Netlify -description: How to deploy your Thulite site to the web on Netlify. -type: deploy -stub: false -service: Netlify +title: "Netlify" +description: "Netlify offers hosting and serverless backend services for web applications and static websites. Any Thulite site can be hosted on Netlify!" +summary: "Netlify offers hosting and serverless backend services for web applications and static websites. Any Thulite site can be hosted on Netlify!" +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 521 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) --- -import List from '~/components/List.astro'; - [Netlify](https://netlify.com) offers hosting and serverless backend services for web applications and static websites. Any Thulite site can be hosted on Netlify! This guide includes instructions for deploying to Netlify through the website UI or Netlify's CLI. @@ -46,9 +53,9 @@ To configure the default settings, create a `netlify.toml` file with the followi publish = "public" ``` - + - More info at ["Deploy with git"](https://docs.netlify.com/site-deploys/create-deploys/#deploy-with-git) on Netlify's docs - + ### CLI Deployment @@ -71,9 +78,9 @@ You can also create a new site on Netlify and link up your Git repository by ins The CLI will add a deploy key to the repository, which means your site will be automatically rebuilt on Netlify every time you `git push`. - + - More details from Netlify on [Netlify CLI](https://docs.netlify.com/site-deploys/create-deploys/#netlify-cli) - + ### Set a Node.js Version diff --git a/content/basics/deployment/overview.md b/content/basics/deployment/overview.md new file mode 100644 index 000000000..316a3765b --- /dev/null +++ b/content/basics/deployment/overview.md @@ -0,0 +1,41 @@ +--- +title: "Deployment Overview" +linkTitle: "Overview" +description: "**Ready to build and deploy your Thulite site?** Follow one of our guides to different deployment services or scroll down for general guidance about deploying a Thulit..." +summary: "**Ready to build and deploy your Thulite site?** Follow one of our guides to different deployment services or scroll down for general guidance about deploying a Thulit..." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 510 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +. + +## Deployment Guides + +{{< card-grid >}} +{{< link-card src="svgs/simple-icons/cloudflarepages.svg" title="Cloudflare Pages" href="/basics/deployment/cloudflare-pages/" >}} +{{< link-card src="svgs/simple-icons/github.svg" title="GitHub Pages" href="/basics/deployment/github-pages/" >}} +{{< /card-grid >}} + +{{< card-grid >}} +{{< link-card src="svgs/simple-icons/gitlab.svg" title="GitLab Pages" href="/basics/deployment/gitlab-pages/" >}} +{{< link-card src="svgs/simple-iconsfirebase.svg" title="Google Firebase" href="/basics/deployment/google-firebase/" >}} +{{< /card-grid >}} + +{{< card-grid >}} +{{< link-card src="svgs/microsoft.svg" title="Microsoft Azure" href="/basics/deployment/microsoft-azure/" >}} +{{< link-card src="svgs/simple-icons/netlify.svg" title="Netlify" href="/basics/deployment/netlify/" >}} +{{< /card-grid >}} + +{{< card-grid >}} + +{{< link-card src="svgs/simple-icons/render.svg" title="Render" href="/basics/deployment/render/" >}} +{{< link-card src="svgs/simple-icons/vercel.svg" title="Vercel" href="/basics/deployment/vercel/" >}} +{{< /card-grid >}} diff --git a/src/content/docs/guides/deploy/render.mdx b/content/basics/deployment/render.md similarity index 62% rename from src/content/docs/guides/deploy/render.mdx rename to content/basics/deployment/render.md index e690d9c54..efab17b69 100644 --- a/src/content/docs/guides/deploy/render.mdx +++ b/content/basics/deployment/render.md @@ -1,11 +1,19 @@ --- -title: Deploy your Thulite Site to Render -description: How to deploy your Thulite site to the web using Render. -type: deploy -stub: false -service: Render +title: "Render" +description: "You can deploy your Thulite project to Render, a service to build websites with free TLS certificates, a global CDN, DDoS protection, private networks, and auto deploy..." +summary: "You can deploy your Thulite project to Render, a service to build websites with free TLS certificates, a global CDN, DDoS protection, private networks, and auto deploy..." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 523 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) --- - You can deploy your Thulite project to [Render](https://render.com/), a service to build websites with free TLS certificates, a global CDN, DDoS protection, private networks, and auto deploys from Git. ## How to deploy @@ -17,4 +25,4 @@ You can deploy your Thulite project to [Render](https://render.com/), a service - **build command:** `npm run build` - **publish directory:** `public` - **Environment variables (advanced)**: By default, Render uses Node.js 14.17.0, but Thulite [requires a higher version](/install/auto/#prerequisites). Add an environment variable with a **Variable key** of `NODE_VERSION` and a **Value** of `18.14.1` or higher to tell Render to use a compatible Node.js version. Alternatively, add a [`.node-version`](https://render.com/docs/node-version) or [`.nvmrc`](https://render.com/docs/node-version) file to your project to specify a Node.js version. -5. Click the **Create Static Site** button \ No newline at end of file +5. Click the **Create Static Site** button diff --git a/src/content/docs/guides/deploy/vercel.mdx b/content/basics/deployment/vercel.md similarity index 73% rename from src/content/docs/guides/deploy/vercel.mdx rename to content/basics/deployment/vercel.md index 773483e17..2edd3793e 100644 --- a/src/content/docs/guides/deploy/vercel.mdx +++ b/content/basics/deployment/vercel.md @@ -1,12 +1,19 @@ --- -title: Deploy your Thulite Site to Vercel -description: How to deploy your Thulite site to the web on Vercel. -type: deploy -stub: false -service: Vercel +title: "Vercel" +description: "You can use Vercel to deploy a Thulite site to their global edge network with zero configuration." +summary: "You can use Vercel to deploy a Thulite site to their global edge network with zero configuration." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 525 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) --- -import List from '~/components/List.astro'; - You can use [Vercel](http://vercel.com/) to deploy a Thulite site to their global edge network with zero configuration. This guide includes instructions for deploying to Vercel through the website UI or Vercel's CLI. @@ -24,9 +31,9 @@ You can deploy to Vercel through the website UI or using Vercel’s CLI (command After your project has been imported and deployed, all subsequent pushes to branches will generate [Preview Deployments](https://vercel.com/docs/concepts/deployments/preview-deployments), and all changes made to the Production Branch (commonly “main”) will result in a [Production Deployment](https://vercel.com/docs/concepts/deployments/environments#production). - + - Learn more about Vercel's [Git Integration](https://vercel.com/docs/concepts/git). - + ### CLI Deployment @@ -43,8 +50,7 @@ After your project has been imported and deployed, all subsequent pushes to bran ### Project config with vercel.json -You can use `vercel.json` to override the default behavior of Vercel and to configure additional settings. For example, you may wish to attach headers to HTTP responses from your Deployments. +You can use `vercel.json` to override the default behavior of Vercel and to configure additional settings. For example, you may wish to attach headers to HTTP responses from your Deployments. + - - Learn more about [Vercel's project configuration](https://vercel.com/docs/project-configuration). - diff --git a/src/content/docs/guides/fonts.md b/content/basics/fonts.md similarity index 88% rename from src/content/docs/guides/fonts.md rename to content/basics/fonts.md index 3859f7073..335330344 100644 --- a/src/content/docs/guides/fonts.md +++ b/content/basics/fonts.md @@ -1,6 +1,9 @@ --- -title: Using custom fonts +title: Fonts description: A guide in my new Starlight docs site. +weight: 250 +params: + toc: true --- Guides lead a user through a specific task they want to accomplish, often with a sequence of steps. diff --git a/src/content/docs/guides/images.md b/content/basics/images.md similarity index 88% rename from src/content/docs/guides/images.md rename to content/basics/images.md index ea5d29d0e..7b18da1ef 100644 --- a/src/content/docs/guides/images.md +++ b/content/basics/images.md @@ -1,6 +1,9 @@ --- -title: Using images +title: Images description: A guide in my new Starlight docs site. +weight: 245 +params: + toc: true --- Guides lead a user through a specific task they want to accomplish, often with a sequence of steps. diff --git a/content/basics/integrations/_index.md b/content/basics/integrations/_index.md new file mode 100644 index 000000000..91efd186f --- /dev/null +++ b/content/basics/integrations/_index.md @@ -0,0 +1,18 @@ +--- +title: "Integrations" +description: "" +summary: "" +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 400 +params: + toc: true + sidebar: + collapsed: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- diff --git a/content/basics/integrations/bolt-core.md b/content/basics/integrations/bolt-core.md new file mode 100644 index 000000000..4f5974cbe --- /dev/null +++ b/content/basics/integrations/bolt-core.md @@ -0,0 +1,21 @@ +--- +title: "Bolt core" +description: "Foundational integration for the Bolt theme." +summary: "Foundational integration for the Bolt theme." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 411 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Bolt core is the foundational integration for the [Bolt theme](/basics/templates/bolt/), enabling smooth operation and advanced customizations within Thulite. + +## Links + +- [View repository](https://github.com/thuliteio/bolt-core) diff --git a/content/basics/integrations/bootstrap.md b/content/basics/integrations/bootstrap.md new file mode 100644 index 000000000..76a21838f --- /dev/null +++ b/content/basics/integrations/bootstrap.md @@ -0,0 +1,21 @@ +--- +title: "Bootstrap" +description: "Bootstrap framework integration for Thulite." +summary: "Bootstrap framework integration for Thulite." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 413 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Bootstrap is the official [Bootstrap](https://getbootstrap.com/) integration for Thulite, enabling rapid, responsive UI development with Bootstrap components. + +## Links + +- [View repository](https://github.com/thuliteio/bootstrap) diff --git a/content/basics/integrations/core.md b/content/basics/integrations/core.md new file mode 100644 index 000000000..29dff3f41 --- /dev/null +++ b/content/basics/integrations/core.md @@ -0,0 +1,22 @@ +--- +title: "Core" +description: "Foundational integration providing essential Thulite services." +summary: "Foundational integration providing essential Thulite services." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 415 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Core is the foundational integration for Thulite, providing essential services and enabling seamless interoperability across the ecosystem. + +## Links + +- [View repository](https://github.com/thuliteio/core) +- [View documentation](https://docs.thulite.io/) diff --git a/content/basics/integrations/doks-core.md b/content/basics/integrations/doks-core.md new file mode 100644 index 000000000..418297a3d --- /dev/null +++ b/content/basics/integrations/doks-core.md @@ -0,0 +1,22 @@ +--- +title: "Doks core" +description: "Foundational integration for the Doks theme." +summary: "Foundational integration for the Doks theme." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 417 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Doks core is the foundational integration for the [Doks theme](/basics/templates/doks/), enabling efficient documentation experiences and robust theme support. + +## Links + +- [View repository](https://github.com/thuliteio/doks-core) +- [View documentation](https://getdoks.org/) diff --git a/content/basics/integrations/images.md b/content/basics/integrations/images.md new file mode 100644 index 000000000..a6d156850 --- /dev/null +++ b/content/basics/integrations/images.md @@ -0,0 +1,22 @@ +--- +title: "Images" +description: "Official image optimization integration for Thulite." +summary: "Official image optimization integration for Thulite." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 419 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Images is the official image optimization integration for Thulite, streamlining asset management and enabling responsive image delivery. + +## Links + +- [View repository](https://github.com/thuliteio/images) +- [View documentation](https://images.thulite.io/) diff --git a/content/basics/integrations/inline-svg.md b/content/basics/integrations/inline-svg.md new file mode 100644 index 000000000..8dc10bdf6 --- /dev/null +++ b/content/basics/integrations/inline-svg.md @@ -0,0 +1,22 @@ +--- +title: "Inline SVG" +description: "Official inline SVG integration for Thulite." +summary: "Official inline SVG integration for Thulite." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 421 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Inline SVG is the official SVG integration for Thulite, enabling embedded SVG graphics with dynamic and interactive support. + +## Links + +- [View repository](https://github.com/thuliteio/inline-svg) +- [View documentation](https://svg.thulite.io/) diff --git a/content/basics/integrations/overview.md b/content/basics/integrations/overview.md new file mode 100644 index 000000000..0cd3e338a --- /dev/null +++ b/content/basics/integrations/overview.md @@ -0,0 +1,41 @@ +--- +title: "Integrations Overview" +linkTitle: "Overview" +description: "Official Thulite integrations extend functionality for styling, optimization, and metadata management." +summary: "Official Thulite integrations extend functionality for styling, optimization, and metadata management." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 410 +toc: true +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Thulite integrations add new functionality and behaviors to your projects. Use official integrations to extend styling frameworks, optimize assets, and manage metadata—or build custom integrations for specialized needs. + +## Official Integrations + +{{< card-grid >}} + {{< link-card src="svgs/thulite.svg" title="@thulite/bolt-core" description="Foundational integration for the Bolt theme." href="/basics/integrations/bolt-core/" >}} + {{< link-card src="svgs/thulite.svg" title="@thulite/bootstrap" description="Bootstrap framework integration and components." href="/basics/integrations/bootstrap/" >}} +{{< /card-grid >}} + +{{< card-grid >}} + {{< link-card src="svgs/thulite.svg" title="@thulite/core" description="Foundational services and interoperability." href="/basics/integrations/core/" >}} + {{< link-card src="svgs/thulite.svg" title="@thulite/doks-core" description="Foundational integration for the Doks theme." href="/basics/integrations/doks-core/" >}} +{{< /card-grid >}} + +{{< card-grid >}} + {{< link-card src="svgs/thulite.svg" title="@thulite/images" description="Image optimization and responsive delivery." href="/basics/integrations/images/" >}} + {{< link-card src="svgs/thulite.svg" title="@thulite/inline-svg" description="Embedded SVG graphics with dynamic support." href="/basics/integrations/inline-svg/" >}} +{{< /card-grid >}} + +{{< card-grid >}} + {{< link-card src="svgs/thulite.svg" title="@thulite/seo" description="Metadata management and search optimization." href="/basics/integrations/seo/" >}} + {{< link-card src="svgs/thulite.svg" title="@thulite/tailwindcss" description="Tailwind CSS utility-first styling framework." href="/basics/integrations/tailwindcss/" >}} +{{< /card-grid >}} diff --git a/content/basics/integrations/seo.md b/content/basics/integrations/seo.md new file mode 100644 index 000000000..b0f52157e --- /dev/null +++ b/content/basics/integrations/seo.md @@ -0,0 +1,22 @@ +--- +title: "SEO" +description: "Official SEO integration for Thulite." +summary: "Official SEO integration for Thulite." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 423 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +SEO is the official SEO integration for Thulite, simplifying metadata management for improved search visibility and content discoverability. + +## Links + +- [View repository](https://github.com/thuliteio/seo) +- [View documentation](https://seo.thulite.io/) diff --git a/content/basics/integrations/tailwindcss.md b/content/basics/integrations/tailwindcss.md new file mode 100644 index 000000000..5ac8461e9 --- /dev/null +++ b/content/basics/integrations/tailwindcss.md @@ -0,0 +1,21 @@ +--- +title: "Tailwind CSS" +description: "Tailwind CSS framework integration for Thulite." +summary: "Tailwind CSS framework integration for Thulite." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 425 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Tailwind CSS is the official [Tailwind CSS](https://tailwindcss.com/) integration for Thulite, enabling utility-first styling for rapid, responsive UI development. + +## Links + +- [View repository](https://github.com/thuliteio/tailwindcss) diff --git a/content/basics/layouts.md b/content/basics/layouts.md new file mode 100644 index 000000000..9007d9044 --- /dev/null +++ b/content/basics/layouts.md @@ -0,0 +1,56 @@ +--- +title: "Layouts" +description: "__Layouts__ are files that live in the `layouts` directory of your Thulite project. They are used to provide a reusable UI structure, such as a page template." +summary: "__Layouts__ are files that live in the `layouts` directory of your Thulite project. They are used to provide a reusable UI structure, such as a page template." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 225 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +__Layouts__ are files that live in the `layouts` directory of your Thulite project. They are used to provide a reusable UI structure, such as a page template. + +## Examples + +For example, the default Thulite [base template](https://gohugo.io/templates/base/#define-the-base-template) looks like this: + +```html title="baseof.html" + + + {{ partial "head/head.html" . }} + {{ partial "head/body-class.html" . }} + + {{ block "main" . }}{{ end }} + {{ if templates.Exists "partials/footer/script-footer.html" -}} + {{ partial "footer/script-footer.html" . }} + {{ else -}} + {{ partial "footer/script-footer-core.html" . }} + {{ end -}} + + +``` + +## Hugo documentation + +Thulite leverages Hugo's [templates](https://gohugo.io/templates/). Here are some relevant topics: + +{{< card-grid >}} +{{< link-card src="svgs/simple-icons/hugo.svg" title="Introduction to templating" description="Create templates to render your content, resources, and data." href="https://gohugo.io/templates/introduction/" target="_blank" >}} +{{< link-card src="svgs/simple-icons/hugo.svg" title="Template lookup order" description="Hugo uses a template for a given page, starting from the most specific." href="https://gohugo.io/templates/lookup-order/" target="_blank" >}} +{{< /card-grid >}} + +{{< card-grid >}} +{{< link-card src="svgs/simple-icons/hugo.svg" title="Base templates and blocks" description="Base and block constructs define the outer shell of your master templates." href="https://gohugo.io/templates/base/" target="_blank" >}} +{{< link-card src="svgs/simple-icons/hugo.svg" title="Single page templates" description="Single page templates are the primary view of content in Hugo." href="https://gohugo.io/templates/single-page-templates/" target="_blank" >}} +{{< /card-grid >}} + +{{< card-grid >}} +{{< link-card src="svgs/simple-icons/hugo.svg" title="List page templates" description="List page templates render multiple pieces of content in a HTML page." href="https://gohugo.io/templates/lists/" target="_blank" >}} +{{< link-card src="svgs/simple-icons/hugo.svg" title="Partial templates" description="Partials are context-aware components in your list and page templates." href="https://gohugo.io/templates/partials/" target="_blank" >}} +{{< /card-grid >}} diff --git a/src/content/docs/guides/markdown.md b/content/basics/markdown.md similarity index 88% rename from src/content/docs/guides/markdown.md rename to content/basics/markdown.md index ebd0f3bc7..5f3929aba 100644 --- a/src/content/docs/guides/markdown.md +++ b/content/basics/markdown.md @@ -1,6 +1,9 @@ --- -title: Example Guide +title: Markdown description: A guide in my new Starlight docs site. +weight: 210 +params: + toc: true --- Guides lead a user through a specific task they want to accomplish, often with a sequence of steps. diff --git a/content/basics/pages.md b/content/basics/pages.md new file mode 100644 index 000000000..1755e8323 --- /dev/null +++ b/content/basics/pages.md @@ -0,0 +1,103 @@ +--- +title: "Pages" +description: "__Pages__ are files that live in the `content` directory of your Thulite project. They are responsible for handling routing, data loading, and overall page layout for..." +summary: "__Pages__ are files that live in the `content` directory of your Thulite project. They are responsible for handling routing, data loading, and overall page layout for..." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 205 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Pages are files that live in the `content` directory of your Thulite project. They are responsible for handling routing, data loading, and overall page layout for every page in your website. + +## Create new content + +You can create new content by running the [`create` command](/basics/commands/#create) in your terminal. + +### Examples + +For example, create an about page using a [leaf bundle](https://gohugo.io/content-management/page-bundles/#leaf-bundles): + +{{< tabs "package-manager-1" >}} +{{< tab "npm" >}} + +```bash +npm run create content about/index.md +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +pnpm run create content about/index.md +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +yarn run create content about/index.md +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +bun run create content about/index.md +``` + +{{< /tab >}} +{{< /tabs >}} + +Or, create a home page using a [branch bundle](https://gohugo.io/content-management/page-bundles/#branch-bundles): + +{{< tabs "package-manager-1" >}} +{{< tab "npm" >}} + +```bash +npm run create content _index.md +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +pnpm run create content _index.md +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +yarn run create content _index.md +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +bun run create content _index.md +``` + +{{< /tab >}} +{{< /tabs >}} + +## Hugo documentation + +Thulite leverages Hugo's [content management](https://gohugo.io/content-management/). Here are some relevant topics: + +{{< card-grid >}} +{{< link-card src="svgs/simple-icons/hugo.svg" title="Content organization" description="Organize your content in a manner that reflects the rendered website." href="https://gohugo.io/content-management/organization/" target="_blank" >}} +{{< link-card src="svgs/simple-icons/hugo.svg" title="Page bundles" description="Use page bundles to logically associate one or more resources with content." href="https://gohugo.io/content-management/page-bundles/" target="_blank" >}} +{{< /card-grid >}} + +{{< card-grid >}} +{{< link-card src="svgs/simple-icons/hugo.svg" title="Content formats" description="Create your content using multiple content formats." href="https://gohugo.io/content-management/formats/" target="_blank" >}} +{{< link-card src="svgs/simple-icons/hugo.svg" title="Front matter" description="Use front matter to add metadata to your content." href="https://gohugo.io/content-management/front-matter/" target="_blank" >}} +{{< /card-grid >}} diff --git a/content/basics/partials.md b/content/basics/partials.md new file mode 100644 index 000000000..75c448deb --- /dev/null +++ b/content/basics/partials.md @@ -0,0 +1,16 @@ +--- +title: "Partials" +description: "" +summary: "" +date: 2026-05-15T16:27:22+02:00 +lastmod: 2026-05-15T16:27:22+02:00 +draft: false +weight: 230 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- diff --git a/content/basics/project-structure.md b/content/basics/project-structure.md new file mode 100644 index 000000000..cea2b4a1a --- /dev/null +++ b/content/basics/project-structure.md @@ -0,0 +1,121 @@ +--- +title: "Project Structure" +description: "Understand the Thulite project structure and where to place content, templates, and assets." +summary: "A concise guide to the key directories and files in a Thulite project." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 200 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Your project created with `create thulite` comes with a practical default structure. +This page explains what each top-level directory is for and where to put your files. + +## At a glance + +Thulite follows the Hugo [directory structure](https://gohugo.io/getting-started/directory-structure/). +Most projects include these key directories and files: + +- `assets` - processed assets (styles, scripts, images) +- `config` - Hugo/Thulite configuration +- `content` - pages and section content +- `layouts` - templates, partials, and shortcodes +- `static` - files copied as-is to output +- `package.json` - npm dependencies and scripts + +## Example tree + +{{< callout context="note" icon="info-circle" >}} + +For complete details, see the [Project Structure reference](/reference/project-structure/). + +{{< /callout >}} + +Typical starter structure: + +{{< tree >}} + +- {folder} archetypes + - {markdown} default.md +- {folder} assets + - {folder} scss + - {folder} common + - {brand-sass} _custom.scss + - {brand-sass} _variables-custom.scss + - {brand-sass} app.scss + - {png} favicon.png + - {svg} favicon.svg +- {folder} config + - {folder} _default + - {toml} hugo.toml + - {toml} module.toml + - {toml} params.toml +- {folder} content + - {markdown} _index.md +- {folder} layouts + - {html} home.html +- {folder} static + - {png} cover.png +- {json} package.json + +{{< /tree >}} + +### `archetypes` + +`default.md` + +Template used when creating new content files. + +### `assets` + +`favicon.png`, `favicon.svg` + +Use `assets/` for files that should be bundled, transformed, or optimized. + +#### `scss` + +Storing styles in `assets/scss/` is conventional, but not required. Any stylesheet in `assets/` can be processed when imported correctly. + +Use `app.scss` as your entrypoint. Put custom variables in `common/_variables-custom.scss` and custom styles in `common/_custom.scss`. + +### `config` + +#### `_default` + +- `hugo.toml`: core [Hugo configuration](https://gohugo.io/configuration/all/) +- `module.toml`: [Hugo mounts](https://gohugo.io/configuration/module/#mounts), including links from `node_modules` to project directories +- `params.toml`: site-level [Thulite settings](/start-here/configuration/#update-parameters), including theme and integration options + +### `content` + +Use `content/` for [pages](/basics/pages/), sections, and page bundles (including page resources). + +### `layouts` + +[Layouts](/basics/layouts/) define shared page structure and rendering templates. + +### `static` + +Files in `static/` are copied to the output unchanged. + +This is ideal for assets like fonts or icons, and special files like `robots.txt` and `manifest.webmanifest`. + +You can place CSS and JavaScript here, but they will not be bundled or optimized. + +{{< callout context="tip" icon="bulb" >}} + +As a rule, keep your own CSS and JavaScript in `assets/`. + +{{< /callout >}} + +### `package.json` + +`package.json` defines dependencies and scripts such as `npm run dev` and `npm run build`. + +You can use [dependencies and devDependencies](https://docs.npmjs.com/specifying-dependencies-and-devdependencies-in-a-package-json-file). For most Thulite projects, placing packages in `dependencies` is a practical default. diff --git a/src/content/docs/guides/scripts.md b/content/basics/scripts.md similarity index 92% rename from src/content/docs/guides/scripts.md rename to content/basics/scripts.md index cac2ff3f9..996090cd8 100644 --- a/src/content/docs/guides/scripts.md +++ b/content/basics/scripts.md @@ -1,6 +1,9 @@ --- title: Scripts description: A guide in my new Starlight docs site. +weight: 240 +params: + toc: true --- Guides lead a user through a specific task they want to accomplish, often with a sequence of steps. diff --git a/content/basics/shortcodes.md b/content/basics/shortcodes.md new file mode 100644 index 000000000..0dd080b7f --- /dev/null +++ b/content/basics/shortcodes.md @@ -0,0 +1,16 @@ +--- +title: "Shortcodes" +description: "" +summary: "" +date: 2026-05-15T16:27:08+02:00 +lastmod: 2026-05-15T16:27:08+02:00 +draft: false +weight: 215 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- diff --git a/src/content/docs/guides/styles.md b/content/basics/styles.md similarity index 91% rename from src/content/docs/guides/styles.md rename to content/basics/styles.md index a64b03271..3508a99ef 100644 --- a/src/content/docs/guides/styles.md +++ b/content/basics/styles.md @@ -1,6 +1,9 @@ --- title: Styles description: A guide in my new Starlight docs site. +weight: 235 +params: + toc: true --- Guides lead a user through a specific task they want to accomplish, often with a sequence of steps. diff --git a/content/basics/templates/_index.md b/content/basics/templates/_index.md new file mode 100644 index 000000000..433662b91 --- /dev/null +++ b/content/basics/templates/_index.md @@ -0,0 +1,18 @@ +--- +title: "Templates" +description: "" +summary: "" +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 300 +params: + toc: true + sidebar: + collapsed: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- diff --git a/content/basics/templates/basic.md b/content/basics/templates/basic.md new file mode 100644 index 000000000..d38a8cbf1 --- /dev/null +++ b/content/basics/templates/basic.md @@ -0,0 +1,22 @@ +--- +title: "Basic" +description: "Minimal Thulite starter for simple sites and quick customization." +summary: "Minimal Thulite starter for simple sites and quick customization." +date: 2026-05-18T15:01:27+02:00 +lastmod: 2026-05-18T15:01:27+02:00 +draft: false +weight: 315 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Basic is a minimal Thulite starter built for simplicity and speed. It gives you a clean foundation for straightforward sites and quick customization. + +## Links + +- [View repository](https://github.com/thuliteio/basic-starter) +- [View demo](https://basic-rec.thulite.io/) diff --git a/content/basics/templates/bolt.md b/content/basics/templates/bolt.md new file mode 100644 index 000000000..2fc19ba8e --- /dev/null +++ b/content/basics/templates/bolt.md @@ -0,0 +1,22 @@ +--- +title: "Bolt" +description: "Lightweight Thulite blog theme focused on readability and performance." +summary: "Lightweight Thulite blog theme focused on readability and performance." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 320 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Bolt is a minimal, elegant blog theme for Thulite built for fast, distraction-free reading. Its lightweight footprint and clean HTML styling make it a strong fit for writers who value simplicity and performance. It also includes dark/light mode, tag support, reading time estimates, and related posts. + +## Links + +- [View repository](https://github.com/thuliteio/bolt) +- [View demo](https://bolt.thulite.io/) diff --git a/content/basics/templates/bootstrap.md b/content/basics/templates/bootstrap.md new file mode 100644 index 000000000..534074432 --- /dev/null +++ b/content/basics/templates/bootstrap.md @@ -0,0 +1,22 @@ +--- +title: "Bootstrap" +description: "Bootstrap-based Thulite starter with responsive components and preconfigured styles." +summary: "Bootstrap-based Thulite starter with responsive components and preconfigured styles." +date: 2026-05-18T15:01:40+02:00 +lastmod: 2026-05-18T15:01:40+02:00 +draft: false +weight: 325 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Bootstrap is a Thulite starter built on [Bootstrap](https://getbootstrap.com/) for responsive, component-based development. It includes preconfigured styles and components so you can ship polished pages faster. + +## Links + +- [View repository](https://github.com/thuliteio/bootstrap-starter) +- [View demo](https://bootstrap-rec.thulite.io/) diff --git a/content/basics/templates/doks.md b/content/basics/templates/doks.md new file mode 100644 index 000000000..e67ffab67 --- /dev/null +++ b/content/basics/templates/doks.md @@ -0,0 +1,23 @@ +--- +title: "Doks" +description: "Modern Thulite documentation theme with search, i18n, and versioning support." +summary: "Modern Thulite documentation theme with search, i18n, and versioning support." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 330 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Doks is a modern documentation theme for Thulite built for clarity, speed, and ease of use. Its clean layout and strong readability make it ideal for technical docs, knowledge bases, and project wikis. It includes configurable search, code highlighting, and built-in support for internationalization and versioning. + +## Links + +- [View repository](https://github.com/thuliteio/doks) +- [View demo](https://doks.thulite.io/) +- [View documentation](https://getdoks.org/) diff --git a/content/basics/templates/overview.md b/content/basics/templates/overview.md new file mode 100644 index 000000000..c63704e94 --- /dev/null +++ b/content/basics/templates/overview.md @@ -0,0 +1,35 @@ +--- +title: "Templates Overview" +linkTitle: "Overview" +description: "Compare official Thulite templates and choose the right starting point for your site." +summary: "Compare official Thulite templates and choose the right starting point for your site." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 310 +toc: true +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Thulite provides official starter templates and themes for common use cases like blogs, docs, and framework-based projects. Start with the option that best matches your content and styling workflow. + +## Official Templates + +{{< card-grid >}} + {{< link-card src="svgs/thulite.svg" title="Basic starter" description="Minimal starter for simple sites and fast customization." href="/basics/templates/basic/" >}} + {{< link-card src="svgs/thulite.svg" title="Bolt theme" description="Clean blog theme focused on readability and performance." href="/basics/templates/bolt/" >}} +{{< /card-grid >}} + +{{< card-grid >}} + {{< link-card src="svgs/thulite.svg" title="Bootstrap starter" description="Starter built around Bootstrap with responsive defaults." href="/basics/templates/bootstrap/" >}} + {{< link-card src="svgs/thulite.svg" title="Doks theme" description="Modern docs theme with search, i18n, and versioning support." href="/basics/templates/doks/" >}} +{{< /card-grid >}} + +{{< card-grid >}} + {{< link-card src="svgs/thulite.svg" title="Tailwind CSS starter" description="Utility-first starter powered by Tailwind CSS." href="/basics/templates/tailwind-css/" class="w-50" >}} +{{< /card-grid >}} diff --git a/content/basics/templates/tailwind-css.md b/content/basics/templates/tailwind-css.md new file mode 100644 index 000000000..0e9f1413d --- /dev/null +++ b/content/basics/templates/tailwind-css.md @@ -0,0 +1,22 @@ +--- +title: "Tailwind CSS" +description: "Tailwind CSS Thulite starter for utility-first styling and rapid iteration." +summary: "Tailwind CSS Thulite starter for utility-first styling and rapid iteration." +date: 2026-05-18T15:01:54+02:00 +lastmod: 2026-05-18T15:01:54+02:00 +draft: false +weight: 335 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Tailwind CSS is a Thulite starter built for utility-first styling and rapid iteration. It provides a streamlined setup for customizing layout and design with [Tailwind CSS](https://tailwindcss.com/). + +## Links + +- [View repository](https://github.com/thuliteio/tailwindcss-starter) +- [View demo](https://tailwindcss-rec.thulite.io/) diff --git a/content/reference/_index.md b/content/reference/_index.md new file mode 100644 index 000000000..ce50f17f5 --- /dev/null +++ b/content/reference/_index.md @@ -0,0 +1,20 @@ +--- +title: "Reference" +description: "" +summary: "" +date: 2026-03-25T10:59:04+01:00 +lastmod: 2026-03-25T10:59:04+01:00 +draft: false +weight: 400 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) + section: + title: "Reference" + iconName: "file-text" + startUrl: "/reference/cli/" +--- diff --git a/content/reference/cli.md b/content/reference/cli.md new file mode 100644 index 000000000..2fa74e16d --- /dev/null +++ b/content/reference/cli.md @@ -0,0 +1,113 @@ +--- +title: "CLI" +description: "This reference guide describes the create-thulite CLI and all of its options." +summary: "This reference guide describes the create-thulite CLI and all of its options." +date: 2026-04-28T14:55:21+02:00 +lastmod: 2026-04-28T14:55:21+02:00 +draft: false +weight: 405 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +This reference guide describes the `create-thulite` CLI and all of its options. + +## Usage + +```bash +npm create thulite@latest [DIRECTORY] [TEMPLATE] -- [OPTIONS] +``` + +The CLI creates a new Thulite project in the specified directory, using the specified template. When running in a TTY (interactive terminal), it starts in interactive mode and prompts for any missing information. + +## Arguments + +### `DIRECTORY` + +The name of the directory to create the project in. A string — for example `"my-project"`. Defaults to `"thulite-project"` when not provided in non-interactive mode, or prompted for in interactive mode. + +### `TEMPLATE` + +The template to scaffold the project from. A string — must be one of the [available template names](#--template). Can be passed as the second positional argument as a shorthand for `--template`. + +## Options + +### `--template` + +**Alias:** `-t` + +The template to scaffold the project from. A string — must be one of the available template names listed below. When omitted in interactive mode, the CLI will prompt for a framework and variant selection. When omitted in non-interactive mode, defaults to `"basic"`. + +**Templates with recommended integrations (SEO and Images):** + +| Name | Description | +|---|---| +| `doks` | Doks theme | +| `bolt` | Bolt theme | +| `tailwindcss-rec` | Tailwind CSS starter | +| `bootstrap-rec` | Bootstrap starter | +| `basic-rec` | Basic starter | + +**Templates without recommended integrations:** + +| Name | Description | +|---|---| +| `tailwindcss` | Tailwind CSS starter | +| `bootstrap` | Bootstrap starter | +| `basic` | Basic starter | + +**Examples:** + +```bash +npm create thulite@latest my-project -- --template doks +npm create thulite@latest my-project -- -t tailwindcss-rec +npm create thulite@latest my-project doks +``` + +### `--immediate` + +**Alias:** `-i` + +A boolean flag. When set, the CLI will automatically install dependencies and start the development server after scaffolding. When omitted in interactive mode, the CLI will prompt whether to install and start now. When omitted in non-interactive mode, defaults to `false`. + +**Example:** + +```bash +npm create thulite@latest my-project -- --template basic-rec --immediate +``` + +### `--overwrite` + +A boolean flag. When set, any existing files in the target directory will be removed before scaffolding. When omitted in interactive mode, the CLI will prompt how to proceed if the target directory is not empty. When omitted in non-interactive mode, the operation is cancelled if the target directory is not empty. + +**Example:** + +```bash +npm create thulite@latest my-project -- --overwrite +``` + +### `--interactive` / `--no-interactive` + +A boolean flag. Forces the CLI to run in interactive or non-interactive mode, overriding the automatic TTY detection. Use `--no-interactive` to run without prompts, for example in CI/CD environments. Defaults to the result of TTY detection. + +**Example:** + +```bash +npm create thulite@latest my-project -- --template doks --no-interactive +``` + +### `--help` + +**Alias:** `-h` + +A boolean flag. Prints the help message describing usage, available options, and templates, then exits. + +**Example:** + +```bash +npm create thulite@latest -- --help +``` diff --git a/content/reference/commands.md b/content/reference/commands.md new file mode 100644 index 000000000..770e764ec --- /dev/null +++ b/content/reference/commands.md @@ -0,0 +1,330 @@ +--- +title: "Commands" +description: "You can use the `scripts` in `package.json` to create new content and develop, format, build, and preview your project from a terminal window." +summary: "You can use the `scripts` in `package.json` to create new content and develop, format, build, and preview your project from a terminal window." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 410 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +You can use the `scripts` in `package.json` to create new content and develop, format, build, and preview your project from a terminal window. + +## `package.json` scripts + +{{< callout context="note" icon="info-circle" >}} + +You can add scripts to the `scripts` section for any commands you use frequently. + +{{< /callout >}} + +The following scripts for the most common commands (`create`, `dev`, `format`, `build`, and `preview`) are added for you automatically when you [create a new project](/start-here/installation/#create-a-new-project). + +```json {title="package.json"} +{ + "scripts": { + "create": "hugo new", + "dev": "hugo server --disableFastRender --noHTTPCache", + "format": "prettier **/** -w -c", + "build": "hugo --minify --gc", + "preview": "vite preview --outDir public" + } +} +``` + +You will often use these commands, or the scripts that run them, without any flags. Add flags to the command when you want to customize the command’s behavior. For example, you may wish to start the development server on a different port, or build your site with verbose logs for debugging. + +{{< tabs "command-flags" >}} +{{< tab "npm" >}} + +```bash +# run the dev server on port 3000 using the `dev` script in `package.json` +npm run dev -- --port 3000 + +# build your site with verbose logs using the `build` script in `package.json` +npm run build -- --verbose +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +# run the dev server on port 3000 using the `dev` script in `package.json` +pnpm dev --port 3000 + +# build your site with verbose logs using the `build` script in `package.json` +pnpm build --verbose +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +# run the dev server on port 3000 using the `dev` script in `package.json` +yarn dev --port 3000 + +# build your site with verbose logs using the `build` script in `package.json` +yarn build --verbose +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +# run the dev server on port 3000 using the `dev` script in `package.json` +bun run dev --port 3000 + +# build your site with verbose logs using the `build` script in `package.json` +bun run build --verbose +``` + +{{< /tab >}} +{{< /tabs >}} + +{{< callout context="note" icon="info-circle" >}} + +The extra `--` before any flag is necessary for `npm` to pass your flags to the script. + +{{< /callout >}} + +{{< callout context="note" icon="info-circle" >}} + +You can find the available flags for a command on the command's linked script page below. + +{{< /callout >}} + +### `create` + +Run the following command in your terminal to [create new content](https://gohugo.io/commands/hugo_new_content/): + +{{< tabs "create-command" >}} + +{{< tab "npm" >}} + +```bash +# npm run create [path] [flags] +npm run create +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +# pnpm run create [path] [flags] +pnpm run create +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +# yarn run create [path] [flags] +yarn run create +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +# bun run create [path] [flags] +bun run create +``` + +{{< /tab >}} +{{< /tabs >}} + +For example, create an about page in the `content` directory of your project: + +{{< tabs "create-page-command" >}} + +{{< tab "npm" >}} + +```bash +npm run create about.md +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +pnpm run create about.md +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +yarn run create about.md +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +bun run create about.md +``` + +{{< /tab >}} +{{< /tabs >}} + +### `dev` + +Run the following command in your terminal to start the [Hugo development server](https://gohugo.io/commands/hugo_server/): + +{{< tabs "dev-command" >}} +{{< tab "npm" >}} + +```bash +# npm run dev [flags] +npm run dev +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +# pnpm dev [flags] +pnpm dev +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +# yarn dev [flags] +yarn dev +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +# bun run dev [flags] +bun run dev +``` + +{{< /tab >}} +{{< /tabs >}} + +### `format` + +Run the following command in your terminal to run the [Prettier code formatter](https://prettier.io/docs/cli): + +{{< tabs "format-command" >}} +{{< tab "npm" >}} + +```bash +# npm run format [flags] +npm run format +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +# pnpm format [flags] +pnpm format +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +# yarn format [flags] +yarn format +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +# bun run format [flags] +bun run format +``` + +{{< /tab >}} +{{< /tabs >}} + +### `build` + +Run the following command in your terminal to [create a production build](https://gohugo.io/commands/hugo/): + +{{< tabs "build-command" >}} +{{< tab "npm" >}} + +```bash +# npm run build [flags] +npm run build +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +# pnpm build [flags] +pnpm build +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +# yarn build [flags] +yarn build +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +# bun run build [flags] +bun run build +``` + +{{< /tab >}} +{{< /tabs >}} + +### `preview` + +Run the following command in your terminal to [locally preview the production build](https://vite.dev/guide/cli.html#vite-preview): + +{{< tabs "preview-command" >}} +{{< tab "npm" >}} + +```bash +# npm run preview [flags] +npm run preview +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +# pnpm preview [flags] +pnpm preview +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +# yarn preview [flags] +yarn preview +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +# bun run preview [flags] +bun run preview +``` + +{{< /tab >}} +{{< /tabs >}} diff --git a/content/reference/configuration/_index.md b/content/reference/configuration/_index.md new file mode 100644 index 000000000..882b9122a --- /dev/null +++ b/content/reference/configuration/_index.md @@ -0,0 +1,18 @@ +--- +title: "Configuration" +description: "" +summary: "" +date: 2026-05-12T09:40:44+02:00 +lastmod: 2026-05-12T09:40:44+02:00 +draft: false +weight: 420 +params: + toc: true + sidebar: + collapsed: false + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- diff --git a/content/reference/configuration/menus.md b/content/reference/configuration/menus.md new file mode 100644 index 000000000..f51b2e55d --- /dev/null +++ b/content/reference/configuration/menus.md @@ -0,0 +1,50 @@ +--- +title: "Menus" +description: "Create __menus__ by defining entries, localizing each entry, and rendering the resulting data structure." +summary: "Create __menus__ by defining entries, localizing each entry, and rendering the resulting data structure." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 429 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Create __menus__ by defining entries, localizing each entry, and rendering the resulting data structure. + + +## Examples + +For example, to define entries for the main menu: + +```toml title="config/_default/menus.toml" +[[main]] + name = 'Home' + pageRef = '/' + weight = 10 + +[[main]] + name = 'Products' + pageRef = '/products' + weight = 20 + +[[main]] + name = 'Services' + pageRef = '/services' + weight = 30 + +``` + +## Hugo documentation + +Thulite leverages Hugo's [menus](https://gohugo.io/content-management/menus/). Here are some relevant topics: + +{{< card-grid >}} + {{< link-card title="Menus" description="There are three ways to define menu entries" href="https://gohugo.io/content-management/menus/" target="_blank" >}} + {{< link-card title="Localization" description="Localization of menu entries depends on how you define them." href="https://gohugo.io/content-management/multilingual/#menus" target="_blank" >}} + {{< link-card title="Templates" description="Create templates to render one or more menus." href="https://gohugo.io/templates/menu-templates/" target="_blank" >}} +{{< /card-grid >}} diff --git a/content/reference/configuration/overview.md b/content/reference/configuration/overview.md new file mode 100644 index 000000000..854105d11 --- /dev/null +++ b/content/reference/configuration/overview.md @@ -0,0 +1,97 @@ +--- +title: "Configuration Overview" +linkTitle: "Overview" +description: "Here's how a Thulite project configuration is organized, and the configuration files you will find in your new project." +summary: "Here's how a Thulite project configuration is organized, and the configuration files you will find in your new project." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 421 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Here's how a Thulite project configuration is organized, and the configuration files you will find in your new project. + +## Example + +A common Thulite project configuration directory might look like this: + +{{< tree >}} + +- {folder} config + - {folder} _default + - {toml} hugo.toml + - {toml} markup.toml + - {toml} menus.toml + - {toml} module.toml + - {toml} params.toml + - {folder} next + - {toml} hugo.toml + - {toml} params.toml + - {folder} production + - {toml} hugo.toml + - {toml} params.toml +- {brand-javascript} babel.config.js +- {brand-javascript} postcss.config.js + +{{< /tree >}} + +## `config/_default/` + +### `hugo.toml` + +The `hugo.toml` file includes [Hugo configuration](https://gohugo.io/getting-started/configuration/) options for your Thulite project. Here you can specify taxonomies to use, build options, server options, and more. + +### `markup.toml` + +The `markup.toml` file is where you [configure rendering](https://gohugo.io/getting-started/configuration-markup/) of markup to HTML. + +### `menus.toml` + +The `menus.toml` file is where you [define menu entries](https://gohugo.io/content-management/menus/). + +### `module.toml` + +The `module.toml` file specifies the [Hugo mounts](https://gohugo.io/hugo-modules/configuration/#module-configuration-mounts), logically linking `node_modules` directories to component folders (ex: `assets`, `layouts`) — making Thulite Integrations available in your Thulite project. + +### `params.toml` + +The `params.toml` file is where you set [Thulite configuration](/reference/configuration/) options like e.g. options for themes and integrations. + +## `config/next/` + +Overrides for your next environment. + +## `config/production/` + +Overrides for your production environment. + +{{< callout context="tip" icon="rocket" >}} +Set `baseurl` in `hugo.toml` to the absolute URL (protocol, host, path, and trailing slash) of your published site (e.g., https://www.example.org/docs/). +{{< /callout >}} + +## `babel.config.js` + +The `babel.config.js` file is where you configure [Babel](https://babeljs.io/). Thulite supports processing JavaScript files with Babel. + +## `postcss.config.js` + +The `postcss.config.js` file is where you configure [PostCSS](https://postcss.org/). Thulite uses PostCSS to add vendor prefixes to CSS rules using [Autoprefixer](https://github.com/postcss/autoprefixer) and to remove unused CSS from your project using [PurgeCSS](https://purgecss.com/). + +## Hugo documentation + +Thulite leverages Hugo's [configuration](https://gohugo.io/getting-started/configuration/). Here are some relevant topics: + +{{< card-grid >}} +{{< link-card title="Configure Hugo" description="How to configure your Hugo site." href="https://gohugo.io/getting-started/configuration/" target="_blank" >}} +{{< link-card title="Babel" description="Hugo Pipes can process JavaScript files with Babel." href="https://gohugo.io/hugo-pipes/babel/" target="_blank" >}} +{{< /card-grid >}} +{{< card-grid >}} +{{< link-card title="PostCSS" description="Process CSS files with PostCSS, using any of the available plugins." href="https://gohugo.io/hugo-pipes/postcss/" target="_blank" >}} +{{< link-card title="CSS purging with PostCSS" description="There are several ways to set up CSS purging with PostCSS in Hugo." href="https://gohugo.io/hugo-pipes/postprocess/#css-purging-with-postcss" target="_blank" >}} +{{< /card-grid >}} diff --git a/content/reference/configuration/page-frontmatter.md b/content/reference/configuration/page-frontmatter.md new file mode 100644 index 000000000..20608c659 --- /dev/null +++ b/content/reference/configuration/page-frontmatter.md @@ -0,0 +1,23 @@ +--- +title: "Page Frontmatter" +description: "" +summary: "" +date: 2026-03-25T13:02:07+01:00 +lastmod: 2026-03-25T13:02:11+01:00 +draft: false +weight: 427 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- + +Reference pages are ideal for outlining how things work in terse and clear terms. +Less concerned with telling a story or addressing a specific use case, they should give a comprehensive outline of what your documenting. + +## Further reading + +- Read [about reference](https://diataxis.fr/reference/) in the Diátaxis framework diff --git a/content/reference/configuration/parameters.md b/content/reference/configuration/parameters.md new file mode 100644 index 000000000..b6e987406 --- /dev/null +++ b/content/reference/configuration/parameters.md @@ -0,0 +1,16 @@ +--- +title: "Parameters" +description: "" +summary: "" +date: 2026-05-11T11:14:33+02:00 +lastmod: 2026-05-11T11:14:33+02:00 +draft: false +weight: 425 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- diff --git a/content/reference/configuration/settings.md b/content/reference/configuration/settings.md new file mode 100644 index 000000000..e77f82764 --- /dev/null +++ b/content/reference/configuration/settings.md @@ -0,0 +1,16 @@ +--- +title: "Settings" +description: "" +summary: "" +date: 2026-05-11T11:14:27+02:00 +lastmod: 2026-05-11T11:14:27+02:00 +draft: false +weight: 423 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- diff --git a/content/reference/markdown/_index.md b/content/reference/markdown/_index.md new file mode 100644 index 000000000..091d78c26 --- /dev/null +++ b/content/reference/markdown/_index.md @@ -0,0 +1,18 @@ +--- +title: "Markdown" +description: "" +summary: "" +date: 2026-05-12T12:43:49+02:00 +lastmod: 2026-05-12T12:43:49+02:00 +draft: false +weight: 430 +params: + toc: true + sidebar: + collapsed: false + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- diff --git a/content/reference/markdown/basic-syntax.md b/content/reference/markdown/basic-syntax.md new file mode 100644 index 000000000..f7a0c85fd --- /dev/null +++ b/content/reference/markdown/basic-syntax.md @@ -0,0 +1,160 @@ +--- +title: "Basic Syntax" +description: "" +summary: "" +date: 2026-05-12T12:44:14+02:00 +lastmod: 2026-05-12T12:44:14+02:00 +draft: false +weight: 433 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- + +A reference to the Markdown basic syntax elements supported by all Markdown applications. + +{{< callout icon="info-circle" >}} +Refer to the [Basic Syntax](https://markdownguide.offshoot.io/basic-syntax/) reference guide from The Markdown Guide for more information. +{{< /callout >}} + +## Heading + +```md +# H1 + +## H2 + +### H3 +``` + +{{< preview >}} + +# H1 + +## H2 + +### H3 + +{{< /preview >}} + +## Bold + +```md +**bold text** +``` + +{{< preview >}} + +**bold text** + +{{< /preview >}} + +## Italic + +```md +_italicized text_ +``` + +_italicized text_ + +{{< preview >}} + +_italicized text_ + +{{< /preview >}} + +## Blockquote + +```md +> blockquote +``` + +{{< preview >}} + +> blockquote + +{{< /preview >}} + +## Ordered List + +```md +1. First item +2. Second item +3. Third item +``` + +{{< preview >}} + +1. First item +2. Second item +3. Third item + +{{< /preview >}} + +## Unordered List + +```md +- First item +- Second item +- Third item +``` + +{{< preview >}} + +- First item +- Second item +- Third item + +{{< /preview >}} + +## Code + +```md +`code` +``` + +{{< preview >}} + +`code` + +{{< /preview >}} + +## Horizontal Rule + +```md +--- +``` + +{{< preview >}} + +--- + +{{< /preview >}} + +## Link + +```md +[Markdown Guide](https://www.markdownguide.org) +``` + +{{< preview >}} + +[Markdown Guide](https://www.markdownguide.org) + +{{< /preview >}} + +## Image + +```md +![A yellow and black bird sitting on top of a body of water](images/vincent-van-zalinge-e5VzJJDODbQ-unsplash.jpg) +``` + +{{< preview >}} + +![A yellow and black bird sitting on top of a body of water](images/vincent-van-zalinge-e5VzJJDODbQ-unsplash.jpg) + +{{< /preview >}} diff --git a/content/reference/markdown/extended-syntax.md b/content/reference/markdown/extended-syntax.md new file mode 100644 index 000000000..929883ca7 --- /dev/null +++ b/content/reference/markdown/extended-syntax.md @@ -0,0 +1,204 @@ +--- +title: "Extended Syntax" +description: "" +summary: "" +date: 2026-05-12T12:44:29+02:00 +lastmod: 2026-05-12T12:44:29+02:00 +draft: false +weight: 435 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +A reference to the extended Markdown syntax elements that add features beyond the basic syntax. + +{{< callout icon="info-circle" >}} +Refer to the [Extended Syntax](https://markdownguide.offshoot.io/extended-syntax/) reference guide from The Markdown Guide for more information. +{{< /callout >}} + +## Table + +```md +| Syntax | Description | +| --------- | ----------- | +| Header | Title | +| Paragraph | Text | +``` + +{{< preview >}} + +| Syntax | Description | +| --------- | ----------- | +| Header | Title | +| Paragraph | Text | + +{{< /preview >}} + +## Fenced Code Block + +````md +```json +{ + "firstName": "John", + "lastName": "Smith", + "age": 25 +} +``` +```` + +{{< preview >}} + +```json +{ + "firstName": "John", + "lastName": "Smith", + "age": 25 +} +``` + +{{< /preview >}} + +## Footnote + +```md +Here's a sentence with a footnote. [^1] + +[^1]: This is the footnote. +``` + +{{< preview >}} + +Here's a sentence with a footnote. [^1] + +[^1]: This is the footnote. + +{{< /preview >}} + +## Heading ID + +```md +### My Great Heading{#custom-id} +``` + +{{< preview >}} + +### My Great Heading{#custom-id} + +{{< /preview >}} + +### Rendered HTML + +```html +

My Great Heading

+``` + +## Definition List + +```md +term +: definition +``` + +{{< preview >}} + +term +: definition + +{{< /preview >}} + +## Strikethrough + +```md +~~The world is flat.~~ +``` + +{{< preview >}} + +~~The world is flat.~~ + +{{< /preview >}} + +## Task List + +```md +- [x] Write the press release +- [ ] Update the website +- [ ] Contact the media +{.list-unstyled} +``` + +{{< preview >}} + +- [x] Write the press release +- [ ] Update the website +- [ ] Contact the media +{.list-unstyled} + +{{< /preview >}} + +## Emoji + +{{< callout icon="outline/info-circle" >}} +Copy the emoji shortcode from [Emoji Cheat Sheet](https://www.webfx.com/tools/emoji-cheat-sheet/) by clicking on the emoji. +{{< /callout >}} + +
+
+
+ +
+
That is so funny! :joy:
+
+
+ +{{< preview >}} + +That is so funny! :joy: + +{{< /preview >}} + +## Unsupported elements + +{{< callout icon="outline/info-circle" >}} +Hugo does not [support](https://www.markdownguide.org/tools/hugo/#hugo-markdown-support) the highlight, subscript, and superscript elements. Use the HTML element itself instead. +{{< /callout >}} + +### Highlight + +```md +I need to highlight these very important words. +``` + +{{< preview >}} + +I need to highlight these very important words. + +{{< /preview >}} + +### Subscript + +```md +H2O +``` + +{{< preview >}} + +H2O + +{{< /preview >}} + +### Superscript + +```md +X2 +``` + +{{< preview >}} + +X2 + +{{< /preview >}} diff --git a/content/reference/markdown/overview.md b/content/reference/markdown/overview.md new file mode 100644 index 000000000..82304d36c --- /dev/null +++ b/content/reference/markdown/overview.md @@ -0,0 +1,26 @@ +--- +title: "Markdown Overview" +linkTitle: "Overview" +description: "" +summary: "" +date: 2026-03-25T13:02:07+01:00 +lastmod: 2026-03-25T13:02:11+01:00 +draft: false +weight: 431 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- + +Markdown is a lightweight markup language that lets you add formatting to plain text documents. Thulite uses [Hugo's built-in Markdown processor](https://gohugo.io/content-management/formats/), which supports both CommonMark (basic syntax) and a range of extended features. + +## Markdown + +{{< card-grid >}} +{{< link-card src="svgs/simple-icons/markdown.svg" title="Basic Syntax" href="/reference/markdown/basic-syntax/" >}} +{{< link-card src="svgs/simple-icons/markdown.svg" title="Extended Syntax" href="/reference/markdown/extended-syntax/" >}} +{{< /card-grid >}} diff --git a/src/content/docs/basics/project-structure.mdx b/content/reference/project-structure.md similarity index 59% rename from src/content/docs/basics/project-structure.mdx rename to content/reference/project-structure.md index 820018960..535f9a598 100644 --- a/src/content/docs/basics/project-structure.mdx +++ b/content/reference/project-structure.md @@ -1,10 +1,72 @@ --- -title: Project Structure -description: A reference page in my new Starlight docs site. -sidebar: - order: 0 +title: "Project Structure" +description: "Your new Thulite project generated from the `create thulite` CLI wizard already includes some files and folders. Others, you will create yourself and add to Thulite' e..." +summary: "Your new Thulite project generated from the `create thulite` CLI wizard already includes some files and folders. Others, you will create yourself and add to Thulite' e..." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 415 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) --- -import FileTree from '~/components/FileTree.astro'; +This guide. + +## Example + +Thulite basic starter (with recommended integrations): + +```bash +. +├── LICENSE +├── archetypes +│   └── default.md +├── assets +│   ├── favicon.png +│   ├── favicon.svg +│   ├── images +│   │   └── paul-pascale-FI9QMIVMdCM-unsplash.jpg +│   └── scss +│   ├── app.scss +│   └── common +│   ├── _custom.scss +│   └── _variables-custom.scss +├── config +│   ├── _default +│   │   ├── hugo.toml +│   │   ├── markup.toml +│   │   ├── menus.toml +│   │   ├── module.toml +│   │   └── params.toml +│   ├── babel.config.js +│   ├── next +│   │   └── hugo.toml +│   ├── postcss.config.js +│   └── production +│   └── hugo.toml +├── content +│   └── _index.md +├── layouts +│   ├── home.html +│   └── single.html +├── netlify.toml +├── package.json +└── static + ├── apple-touch-icon.png + ├── cover.png + ├── favicon.ico + └── icon.svg + +13 directories, 26 files +``` + + +--- + Your new Thulite project generated from the `create thulite` CLI wizard already includes some files and folders. Others, you will create yourself and add to Thulite' existing file structure. @@ -25,27 +87,27 @@ Thulite leverages the Hugo [directory structure](https://gohugo.io/getting-start A common Thulite project directory might look like this: - - -- assets/scss - - common - - _custom.scss - - _variables-custom.scss - - app.scss -- config - - _default - - hugo.toml - - module.toml - - params.toml -- content - - _index.md -- layouts - - index.html -- static - - favicon.svg -- package.json - - +{{< tree >}} + +- {folder} assets/scss + - {folder} common + - {brand-sass} _custom.scss + - {brand-sass} _variables-custom.scss + - {brand-sass} app.scss +- {folder} config + - {folder} _default + - {toml} hugo.toml + - {toml} module.toml + - {toml} params.toml +- {folder} content + - {markdown} _index.md +- {folder} layouts + - {html} index.html +- {folder} static + - {svg} favicon.svg +- {json} package.json + +{{< /tree >}} ### `assets/scss` @@ -54,23 +116,23 @@ It is a common convention to store your CSS or Sass files in a `assets/scss` dir The `app.scss` file is used to specify the CSS or Sass files to import (or use). Put your custom (S)CSS variables in `common/variables-custom` and custom (S)CSS code in `common/_custom.scss`. -### `config/_default/` +### `config/_default` The `hugo.toml` file includes [Hugo configuration](https://gohugo.io/getting-started/configuration/) options for your Thulite project. Here you can specify taxonomies to use, build options, server options, and more. The `module.toml` file specifies the [Hugo mounts](https://gohugo.io/hugo-modules/configuration/#module-configuration-mounts), logically linking `node_modules` directories to component folders (ex: `assets`, `layouts`) — making Thulite Integrations available in your Thulite project. -The `params.toml` file is where you set [Thulite configuration](/reference/configuration/) options like e.g. options for themes and integrations. +The `params.toml` file is where you set [Thulite configuration](/reference/configuration/) options like e.g. options for themes and integrations. -### `content/` +### `content` The `content/` directory is where you store [pages](/basics/pages/), organized in sections or page bundles (leaf bundles or branch bundles) and can contain page resources. -### `layouts/` +### `layouts` [Layouts](/basics/layouts/) are Thulite templates that define the UI structure shared by one or more pages. -### `static/` +### `static` The `static/` directory is for files and assets that do not need to be processed during Thulite' build process. These files will be copied into the build folder untouched. @@ -89,4 +151,4 @@ This is a file used by JavaScript package managers to manage your dependencies. There are [two kinds of dependencies](https://docs.npmjs.com/specifying-dependencies-and-devdependencies-in-a-package-json-file) you can specify in a `package.json`: `dependencies` and `devDependencies`. In most cases, these work the same: Thulite needs all dependencies at build time, and your package manager will install both. We recommend putting all of your dependencies in `dependencies` to start, and only use `devDependencies` if you find a specific need to do so. -For help creating a new `package.json` file for your project, check out the [manual setup](/install/manual/) instructions. \ No newline at end of file +For help creating a new `package.json` file for your project, check out the [manual setup](/install/manual/) instructions. diff --git a/content/start-here/_index.md b/content/start-here/_index.md new file mode 100644 index 000000000..30d071c6b --- /dev/null +++ b/content/start-here/_index.md @@ -0,0 +1,20 @@ +--- +title: "Start Here" +description: "" +summary: "" +date: 2026-03-25T10:58:25+01:00 +lastmod: 2026-03-25T10:58:25+01:00 +draft: false +weight: 100 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) + section: + title: "Start Here" + iconName: "rocket" + startUrl: "/start-here/getting-started/" +--- diff --git a/content/start-here/concepts/_index.md b/content/start-here/concepts/_index.md new file mode 100644 index 000000000..bdef73111 --- /dev/null +++ b/content/start-here/concepts/_index.md @@ -0,0 +1,20 @@ +--- +title: "Concepts" +description: "" +summary: "" +date: 2026-03-25T10:58:56+01:00 +lastmod: 2026-03-25T10:58:56+01:00 +draft: false +weight: 150 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) + section: + title: "Concepts" + iconName: "bulb" + startUrl: "/concepts/why-thulite/" +--- diff --git a/content/start-here/concepts/dependencies.md b/content/start-here/concepts/dependencies.md new file mode 100644 index 000000000..76c40249d --- /dev/null +++ b/content/start-here/concepts/dependencies.md @@ -0,0 +1,76 @@ +--- +title: "Dependencies" +description: "" +summary: "" +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 153 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- + +Thulite helps you [build scalable and maintainable websites](/start-here/concepts/why-thulite/#solid-architecture) and leverages npm to [explicitly declare and isolate dependencies](https://12factor.net/dependencies). + +## Explicit declaration and isolation + +The [Dependencies](https://12factor.net/dependencies) section of the Twelve-Factor App encourages every app to declare and isolate all required dependencies. + +In practice, this means: + +- Use a dependency manifest to list what your project needs. +- Use a package manager or module system to install dependencies in a reproducible way. +- Avoid hidden dependencies from the host machine. + +This improves reliability across environments and makes onboarding easier for new contributors. + +## JavaScript + +For JavaScript projects, this usually means declaring dependencies in `package.json` and installing them with [npm](https://www.npmjs.com/). + +npm installs packages into a local `node_modules` directory, so your project does not depend on globally installed system packages. This keeps builds consistent between local development, CI, and production. + +## Thulite + +In Thulite, [integrations](https://thulite.io/integrations/) are npm packages declared in your project's `package.json`. + +Thulite then uses Hugo's module configuration to [mount](https://gohugo.io/configuration/module/#mounts) relevant files from dependency `node_modules` directories into Hugo [component](https://gohugo.io/quick-reference/glossary/#component) directories. This makes those assets available to Hugo during the build process. + +### Pros + +- Centralizes dependency management in `package.json`. +- Familiar workflow for teams already using npm. +- Access to the broader JavaScript ecosystem and tooling. + +### Cons + +- Different from the default Hugo dependency workflow. + +## Hugo + +You can also manage dependencies with [Hugo Modules](https://gohugo.io/hugo-modules/use-modules/). In that approach: + +1. Declare dependencies in a `go.mod` file. +2. Use Hugo's module system to pin and resolve versions consistently. + +Hugo also provides [`hugo mod npm pack`](https://gohugo.io/commands/hugo_mod_npm_pack/), which generates a composite `package.json` from `package.hugo.json` files in your project and modules. + +### Pros + +- Aligns with the standard Hugo module workflow. + +### Cons + +- Using Hugo Modules requires you to have [Go](https://go.dev/dl/) installed. +- Using npm alongside Hugo Modules introduces _two_ dependency systems. +- Hugo's integrated npm support is still _experimental_. +- Hugo's integrated npm support is _limited_. For example, `scripts` in `package.json` are not supported. + +## Chosen approach + +Thulite chooses npm as the primary dependency manager because it keeps integrations and frontend tooling in one familiar workflow, without requiring Go or maintaining two parallel dependency systems. Hugo Modules are still used for mounting and composition, but npm-first dependency management gives most teams a simpler and more predictable setup. diff --git a/content/start-here/concepts/why-thulite.md b/content/start-here/concepts/why-thulite.md new file mode 100644 index 000000000..d8bc98067 --- /dev/null +++ b/content/start-here/concepts/why-thulite.md @@ -0,0 +1,88 @@ +--- +title: "Why Thulite?" +description: "" +summary: "" +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 151 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- + +Thulite is a web framework built for speed, security, and SEO, powered by Hugo and npm. It helps you create content-driven websites, including blogs, marketing sites, documentation portals, and e-commerce projects, with production-ready defaults from day one. + +If you need a site that loads quickly, stays secure, and ranks well, Thulite gives you a strong starting point. + +## Features + +Thulite is an all-in-one framework for modern websites. It includes the essentials out of the box, plus a growing ecosystem of [integrations](https://thulite.io/integrations/) and [templates](https://thulite.io/templates/) to match your use case. + +Some highlights include: + +- [Site generator](https://gohugo.io/): Use Hugo for fast builds and flexible content modeling. +- [Dependencies](/start-here/concepts/dependencies/): Manage project dependencies explicitly with npm. +- [Integrations](https://thulite.io/integrations/): Extend your project with integrations such as CSS frameworks, SEO optimization, and image handling. +- [Templates](https://thulite.io/templates/): Start from purpose-built templates for docs, blogs, landing pages, and more. + +## Design Principles + +These five design principles explain why Thulite exists, which problems it solves, and when it is the right fit for your team. + +Thulite is... + +- [Solid architecture](#solid-architecture): Build sites that are maintainable and scalable over time. +- [Fast by default](#fast-by-default): Avoid performance regressions by starting from optimized defaults. +- [Maximum secure](#maximum-secure): Keep your site aligned with current web security best practices. +- [Easy to use](#easy-to-use): You don't need to be an expert to build something with Thulite. +- [Developer-focused](#developer-focused): Get the tooling, docs, and community support needed to ship confidently. + +### Solid architecture + +Thulite applies ideas from [The Twelve-Factor App](https://12factor.net/) to promote maintainable architecture and reliable deployments. These principles encourage clear configuration, clean dependency management, and portable environments. + +The result is a project structure that scales from simple sites to larger multi-environment setups without becoming fragile. + +### Fast by default + +Performance matters for every website, but it is especially important for content-heavy experiences. Slow pages reduce engagement, conversions, and trust. Real-world studies consistently show measurable business impact from faster load times: + +- 43% faster LCP → 156% more conversions ([Ray-Ban](https://web.dev/case-studies/rayban-speculation-rules/), 2025) +- 42% faster LCP → 60% more visit-to-order conversions ([T-Mobile](https://web.dev/case-studies/t-mobile-case-study/), 2025) +- 18% faster load time → 8.9% more user engagement ([Monrif Publishing](https://web.dev/case-studies/monrif-cwv/), 2025) +- Performance improvements → 27% growth in lead generation ([Fotocasa](https://web.dev/case-studies/fotocasa-cwv/), 2025) + +Many frameworks make it easy to build pages that feel fast on a developer laptop but become slow in production, especially on mid-range mobile devices. + +Thulite combines architectural discipline with production-oriented optimizations and tools such as [Quicklink](https://getquick.link/). Our goal is simple: make it hard to accidentally ship a slow site. + +### Maximum secure + +Security incidents are common: service outages, defaced homepages, leaked credentials, and exposed payment data. The impact is technical, financial, and reputational. + +Website security is the practice of protecting systems against unauthorized access, modification, disruption, and data loss. + +Effective protection requires decisions across the full stack: application code, server configuration, authentication policies, and client-side behavior. + +Thulite helps by combining [MDN's web security guidelines](https://infosec.mozilla.org/guidelines/web_security) with sensible defaults, so your baseline stays aligned with modern standards. + +### Easy to use + +Thulite aims to be accessible to every web developer. It is designed to feel familiar, whether you are building your first static site or migrating from another stack. + +The framework removes unnecessary complexity during onboarding. You can start with basic HTML and CSS, then adopt advanced features incrementally as your project grows. + +### Developer-focused + +Thulite succeeds only if developers enjoy working with it. That is why the project invests heavily in usability, documentation, and long-term maintainability. + +From a solid CLI experience to actively maintained documentation, the focus is on helping teams move from setup to shipping with less friction. + +The community on Discussions is welcoming and active. Use [Q&A](https://github.com/orgs/thuliteio/discussions/categories/q-a) for project help, and share work in [Showcase](https://github.com/orgs/thuliteio/discussions/categories/showcase) for feedback. + +As an open-source project, Thulite welcomes contributions of all sizes and experience levels. You can join roadmap discussions, contribute fixes and features, and help improve the docs and ecosystem. diff --git a/content/start-here/configuration.md b/content/start-here/configuration.md new file mode 100644 index 000000000..b8977c86d --- /dev/null +++ b/content/start-here/configuration.md @@ -0,0 +1,130 @@ +--- +title: "Configuration" +description: "Update settings, parameters, and page frontmatter in your Thulite project." +summary: "Update settings, parameters, and page frontmatter in your Thulite project." +date: 2026-04-27T12:46:23+02:00 +lastmod: 2026-04-27T12:46:23+02:00 +draft: false +weight: 115 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +This page covers the main configuration tasks for a Thulite project. + +## Update settings + +Update your [settings](/reference/settings/) in `./config/_default/hugo.toml`: + +```toml {title="hugo.toml"} +title = "Thulite" +baseurl = "http://localhost/" +disableAliases = true +disableHugoGeneratorInject = true +disableKinds = ["taxonomy", "term"] +enableEmoji = true +enableGitInfo = false +enableRobotsTXT = true +languageCode = "en-US" +rssLimit = 10 +summarylength = 20 # 70 (default) + +copyRight = "Copyright (c) 2020-2026 Thulite" + +[build.buildStats] + enable = true + +[outputs] + home = ["HTML"] + +[caches] + [caches.getresource] + dir = ":cacheDir/:project" + maxAge = "30m" + +[taxonomies] + category = "categories" + +[permalinks] + blog = "/:title/" + +[minify.tdewolff.html] + keepComments = true # If set to false, build signatures are removed + keepWhitespace = false + +[related] + threshold = 80 + includeNewer = true + toLower = false + [[related.indices]] + name = "categories" + weight = 100 + [[related.indices]] + name = "tags" + weight = 80 + [[related.indices]] + name = "date" + weight = 10 +``` + +## Update parameters + +Update your [parameters](/reference/parameters/) in `./config/_default/params.toml`: + +```toml {title="params.toml"} +# Hugo +title = "My Thulite site" +description = "Congrats on setting up a new Thulite project!" +images = ["cover.png"] + +# Debug +[render_hooks.image] + errorLevel = 'ignore' # ignore (default), warning, or error (fails the build) + +[render_hooks.link] + errorLevel = 'ignore' # ignore (default), warning, or error (fails the build) + highlightBroken = false # true or false (default) +``` + +## Update page frontmatter + +Update your [page frontmatter](/reference/page-frontmatter/) in `./content/*.md` files: + +```md {title="_index.md"} +--- +title : "My Thulite site" +description: "Congrats on setting up a new Thulite project!" +lead: "Congrats on setting up a new Thulite project!" +date: 2026-04-28T17:01:41+02:00 +lastmod: 2026-04-28T17:01:52+02:00 +draft: false +--- +``` + +## Integrations + +{{< card-grid >}} +{{< link-card + title="Thulite SEO" + description="Update settings, parameters, and page frontmatter." + href="https://seo.thulite.io/docs/start-here/configuration/" +>}} +{{< link-card + title="Thulite Images" + description="Update settings and parameters." + href="https://images.thulite.io/docs/start-here/configuration/" +>}} +{{< /card-grid >}} + +{{< card-grid >}} +{{< link-card + title="Thulite SVG" + description="Update your project's parameters" + href="https://svg.thulite.io/docs/start-here/configuration/" + class="w-50" +>}} +{{< /card-grid >}} diff --git a/content/start-here/editor-setup.md b/content/start-here/editor-setup.md new file mode 100644 index 000000000..04da1c75d --- /dev/null +++ b/content/start-here/editor-setup.md @@ -0,0 +1,68 @@ +--- +title: "Editor Setup" +description: "Configure your editor and formatting tools for a smoother Thulite workflow." +summary: "Configure your editor and formatting tools for a smoother Thulite workflow." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 145 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +This page covers the editor and formatting tools we recommend for Thulite projects. + +## Editor choice + +Thulite works with any code editor, but we recommend [VS Code](https://code.visualstudio.com/) for the best experience. The VS Code engine also powers in-browser editors such as [GitHub Codespaces](https://github.com/features/codespaces). + +If you use VS Code, install these extensions: + +- [Hugo Language and Syntax Support](https://marketplace.visualstudio.com/items?itemName=budparr.language-hugo-vscode) +- [Markdown All in One](https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one) +- [Even Better TOML](https://marketplace.visualstudio.com/items?itemName=tamasfe.even-better-toml) +- [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) +- [markdownlint](https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint) +- [Stylelint](https://marketplace.visualstudio.com/items?itemName=stylelint.vscode-stylelint) +- [Hugo Shortcodes](https://marketplace.visualstudio.com/items?itemName=thuliteio.hugo-shortcodes) + +## Formatting + +Thulite includes Prettier and a `format` script for formatting JavaScript, HTML, CSS, and other supported files. You can customize the defaults by updating the `.prettierrc.yaml` and `.prettierignore` files in your project root. + +Use the command that matches your package manager: + +{{< tabs "package-manager-1" >}} +{{< tab "npm" >}} + +```bash +npm run format +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +pnpm run format +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +yarn format +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +bun run format +``` + +{{< /tab >}} +{{< /tabs >}} diff --git a/content/start-here/getting-started.md b/content/start-here/getting-started.md new file mode 100644 index 000000000..0c080d777 --- /dev/null +++ b/content/start-here/getting-started.md @@ -0,0 +1,74 @@ +--- +title: "Getting Started" +description: "Learn what Thulite is and get oriented with the key next steps." +summary: "Learn what Thulite is and get oriented with the key next steps." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 105 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Thulite is a web framework built for speed, security, and SEO, powered by Hugo and npm. It helps you build production-ready websites with exceptional performance, enterprise security, scalable architecture, and a developer-friendly workflow. + +## Prerequisites + +- [Hugo](https://github.com/gohugoio/hugo/releases/latest) (latest extended or extended/deploy edition) +- [Thulite](https://github.com/thuliteio/thulite/releases/latest) (latest version) +- [Node.js/npm](https://nodejs.org/en/download) (latest LTS version) + +## Quick start + +{{< card-grid >}} +{{< link-card + title="Installation" + description="Create a Thulite project using a template and optional integrations." + href="/start-here/installation/" +>}} +{{< link-card + title="Configuration" + description="Update settings, parameters, and page front matter." + href="/start-here/configuration/" +>}} +{{< /card-grid >}} + +{{< card-grid >}} +{{< link-card + title="Usage" + description="Learn how to use your Thulite project." + href="/start-here/usage/" +>}} +{{< link-card + title="Verification" + description="Validate your Thulite setup and output quality." + href="/start-here/verification/" +>}} +{{< /card-grid >}} + +{{< card-grid >}} +{{< link-card + title="Updating" + description="Update Thulite to the latest version." + href="/start-here/updating/overview/" +>}} +{{< link-card + title="Troubleshooting" + description="Diagnose and fix common issues." + href="/start-here/troubleshooting/" +>}} +{{< /card-grid >}} + +## Credits + +Thulite builds on the excellent work of the open-source ecosystem, especially: + +- [Hugo](https://gohugo.io/) +- [Vite](https://vite.dev/) +- [npm](https://www.npmjs.com/) + +Special thanks to the Thulite contributors, template authors, integration maintainers, and community members who continuously improve the framework and documentation. diff --git a/content/start-here/installation.md b/content/start-here/installation.md new file mode 100644 index 000000000..c39830e72 --- /dev/null +++ b/content/start-here/installation.md @@ -0,0 +1,132 @@ +--- +title: "Installation" +description: "Create a Thulite project using the CLI with a template and optional integrations." +summary: "Create a Thulite project using the CLI with a template and optional integrations." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 110 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- + +This page guides you through creating a new Thulite project with a template and optional integrations. + +## Create a new project + +Run the command for your package manager to start an interactive [CLI](/reference/cli/) setup: + +{{< tabs "create-new-site" >}} +{{< tab "npm" >}} + +```bash +npm create thulite@latest +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +pnpm create thulite +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +yarn create thulite +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +bun create thulite +``` + +{{< /tab >}} +{{< /tabs >}} + +This will guide you through an interactive setup process where you'll select your project name, [choose a template](https://thulite.io/templates/), and pick your preferred variant. Follow the prompts as shown below: + +{{< steps >}} +{{< step >}} + +Enter your project name /installation directory + +```txt {frame="none"} +│ +◆ Project name: +│ thulite-project +└ +``` + +{{< /step >}} +{{< step >}} + +Select a template + +```txt {frame="none"} +◆ Select a template: +│ ○ Doks theme +│ ○ Bolt theme +│ ○ Tailwind CSS starter +│ ○ Bootstrap starter +│ ● Basic starter +└ +``` + +{{< /step >}} +{{< step >}} + +Select a variant + +```txt {frame="none"} +◆ Select a variant: +│ ● With recommended integrations (SEO and Images) +│ ○ Without recommended integrations +└ +``` + +{{< /step >}} +{{< step >}} + +Install and start now? + +```txt {frame="none"} +◆ Install with npm and start now? +│ ● Yes / ○ No +└ +``` + +{{< /step >}} +{{< step >}} + +Scaffolding project + +```txt {frame="none"} +◇ Scaffolding project in /home/h-enk/thulite-project... +│ +◇ Installing dependencies with npm... +│ +◇ Starting dev server... +``` + +{{< /step >}} +{{< /steps >}} + +You'll now have a new [project directory](/basics/project-structure/) with all the necessary files and configurations for your site. +{.mt-3} + +## Configure Thulite + +{{< link-card + title="Configure Thulite" + description="Update settings, parameters, and page front matter." + href="/start-here/configuration/" +>}} diff --git a/content/start-here/troubleshooting.md b/content/start-here/troubleshooting.md new file mode 100644 index 000000000..788f126c3 --- /dev/null +++ b/content/start-here/troubleshooting.md @@ -0,0 +1,29 @@ +--- +title: "Troubleshooting" +description: "Diagnose and fix common issues with your Thulite installation and setup." +summary: "Diagnose and fix common issues with your Thulite installation and setup." +date: 2026-04-27T12:47:03+02:00 +lastmod: 2026-04-27T12:47:03+02:00 +draft: false +weight: 140 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +This page helps you find answers to common problems with Thulite. + +## Verify your setup + +Use the [Settings](/reference/settings/), [Parameters](/reference/parameters/), and [Page Frontmatter](/reference/page-frontmatter/) reference pages to confirm your configuration is correct. + +## Consult the documentation + +If you cannot find an answer in this documentation, visit the [Thulite SEO Docs](https://seo.thulite.io/), [Thulite Images Docs](https://images.thulite.io/), and [Thulite SVG Docs](https://svg.thulite.io/) for integration-level guidance. + +## Ask the community + +Check for known [issues on GitHub](https://github.com/thuliteio/thulite/issues), or ask for help in [Thulite Discussions](https://github.com/thuliteio/thulite/discussions). The community is active and happy to help. diff --git a/content/start-here/updating/_index.md b/content/start-here/updating/_index.md new file mode 100644 index 000000000..8c72d4370 --- /dev/null +++ b/content/start-here/updating/_index.md @@ -0,0 +1,18 @@ +--- +title: "Updating" +description: "" +summary: "" +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 130 +params: + toc: true + sidebar: + collapsed: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- diff --git a/content/start-here/updating/overview.md b/content/start-here/updating/overview.md new file mode 100644 index 000000000..d357421d4 --- /dev/null +++ b/content/start-here/updating/overview.md @@ -0,0 +1,168 @@ +--- +title: "Updating Overview" +linkTitle: "Overview" +description: "Learn how to update Thulite, track release changes, and use semantic versioning to plan safe upgrades." +summary: "Learn how to update Thulite, track release changes, and use semantic versioning to plan safe upgrades." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 131 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +This page explains how to update Thulite, where to check what changed between releases, and how version numbers affect your upgrade path. + +## Quick links + +- Release notes: [all releases](https://github.com/thuliteio/thulite/releases) or [latest release](https://github.com/thuliteio/thulite/releases/latest) +- Full change history: [CHANGELOG.md](https://github.com/thuliteio/thulite/blob/main/CHANGELOG.md) +- Breaking-change instructions: [Upgrade Guides](#upgrade-guides) + +## Update to the latest version + +Use the command that matches your package manager. + +{{< tabs "update-thulite-command" >}} +{{< tab "npm" >}} + +```bash +npm install thulite@latest +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +pnpm upgrade thulite --latest +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +yarn upgrade thulite --latest +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +bun update thulite --latest +``` + +{{< /tab >}} +{{< /tabs >}} + +### Install a specific version + +To install a specific [Thulite version](https://www.npmjs.com/package/thulite?activeTab=versions), run one of the following commands. + +{{< tabs "package-manager-1" >}} +{{< tab "npm" >}} + +```bash +npm install thulite@2.6.5 +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +pnpm install thulite@2.6.5 +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +yarn add thulite@2.6.5 +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +bun install thulite@2.6.5 +``` + +{{< /tab >}} +{{< /tabs >}} + +## Documentation updates + +The documentation tracks the latest Thulite behavior, including [minor](#minor-changes) and [major](#major-changes) releases. + +If your project is behind, you may see differences between docs and runtime behavior. Check `Added in:` version notes in the docs before using newer features, and make sure your project version supports them. + +Projects that stay on older major versions can diverge significantly from the current docs. To reduce confusion and avoid unsupported setups, upgrade to the latest major version when possible. + +### Upgrade Guides + +Each [major release](#major-changes) includes an upgrade guide with migration steps and breaking-change details. + +Main docs describe the latest version only. They do not compare historical behavior. Use upgrade guides when moving from one major version to another. + +Upgrade guides focus on changes that can require code updates, including breaking changes, deprecations, removals, replacements, and updated usage guidance. + +- [Upgrade to v2](/start-here/updating/v2/) + +## Semantic versioning + +Thulite follows [semantic versioning](https://semver.org/) to signal the impact of each release. + +Version numbers use the `X.Y.Z` pattern: + +- `X` = major +- `Y` = minor +- `Z` = patch + +### Patch changes + +Patch releases are the least disruptive. They typically require no changes in your project code. + +When a patch is released, only the last number increases (for example, `thulite@2.4.1` -> `thulite@2.4.2`). + +Patch releases can include: + +- Internal changes that do not alter public behavior: + - refactors + - performance improvements + - test coverage changes + - alignment with documented behavior +- Improvements to logging and error messages. +- Re-releases after a failed release. + +Most bug fixes are also released as patches, including cases where behavior previously relied on unintended implementation details. + +### Minor changes + +Minor releases usually add features and improvements without requiring changes to your code. + +A minor release can also mark features as `deprecated`, meaning they still work now but are planned for removal in a future major release. + +Minor releases can include: + +- Deprecations of existing features/options with a warning that they will be removed in an upcoming major release. +- New features. +- New options in integration hooks. + +A minor release may also bundle patch-level fixes. + +### Major changes + +Major releases include breaking changes for at least some existing projects. + +These releases can change public behavior, APIs, and usage patterns. Main docs are updated to the latest version, while older docs are kept only as historical references. + +Major releases can include: + +- Removal of previously deprecated functionalities. +- Changes to existing features. +- Changes to existing options in integration hooks. + +A major release may also include non-breaking improvements in the same release. diff --git a/content/start-here/updating/v2.md b/content/start-here/updating/v2.md new file mode 100644 index 000000000..797b1ef33 --- /dev/null +++ b/content/start-here/updating/v2.md @@ -0,0 +1,255 @@ +--- +title: "V2" +description: "This guide will help you migrate from Thulite v1 to Thulite v2." +summary: "This guide will help you migrate from Thulite v1 to Thulite v2." +date: 2026-03-24T08:10:51+01:00 +lastmod: 2026-03-24T08:10:51+01:00 +draft: false +weight: 133 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +Use this guide to migrate your project from Thulite v1 to Thulite v2. + +## Prerequisites + +- [Hugo](https://github.com/gohugoio/hugo/releases/latest) (latest extended or extended/deploy edition) +- [Thulite](https://github.com/thuliteio/thulite/releases/latest) (latest version) +- [Node.js/npm](https://nodejs.org/en/download) (latest LTS version) + +## Updating + +Follow the steps below to update your project. + +{{< steps >}} +{{< step >}} + +Remove currently installed dependencies to avoid version conflicts: + +{{< tabs "package-manager-1" >}} + {{< tab "npm" >}} + +```bash +npm run clean:install +``` + + {{< /tab >}} + {{< tab "pnpm" >}} + +```bash +pnpm run clean:install +``` + + {{< /tab >}} + {{< tab "Yarn" >}} + +```bash +yarn run clean:install +``` + + {{< /tab >}} + {{< tab "bun" >}} + +```bash +bun run clean:install +``` + + {{< /tab >}} +{{< /tabs >}} + +{{< /step >}} +{{< step >}} +Update `package.json` + +Replace the contents of your project's `package.json` with the following template: + +```json +// package.json +{ + "name": "thulite-project", + "version": "0.0.0", + "description": "Thulite", + "author": "Thulite", + "license": "MIT", + "scripts": { + "create": "hugo new", + "dev": "hugo server --disableFastRender --noHTTPCache", + "format": "prettier **/** -w -c", + "build": "hugo --minify --gc", + "preview": "vite preview --outDir public" + }, + "engines": { + "node": ">=20.11.0" + } +} +``` + +{{< /step >}} +{{< step >}} + +Install the latest Thulite dependency in your project: + +{{< tabs "package-manager-1" >}} + {{< tab "npm" >}} + +```bash +npm install thulite@latest +``` + + {{< /tab >}} + {{< tab "pnpm" >}} + +```bash +pnpm install thulite@latest +``` + + {{< /tab >}} + {{< tab "Yarn" >}} + +```bash +yarn add thulite@latest +``` + + {{< /tab >}} + {{< tab "bun" >}} + +```bash +bun install thulite@latest +``` + + {{< /tab >}} +{{< /tabs >}} + +{{< /step >}} +{{< step >}} + +Install the latest versions of Prettier and Vite as `devDependencies`: + +{{< tabs "package-manager-1" >}} + {{< tab "npm" >}} + +```bash +npm install -D prettier@latest vite@latest +``` + + {{< /tab >}} + {{< tab "pnpm" >}} + +```bash +pnpm install -D prettier@latest vite@latest +``` + + {{< /tab >}} + {{< tab "Yarn" >}} + +```bash +yarn add -D prettier@latest vite@latest +``` + + {{< /tab >}} + {{< tab "bun" >}} + +```bash +bun add -D prettier@latest vite@latest +``` + + {{< /tab >}} +{{< /tabs >}} + +{{< /step >}} +{{< step >}} + +Optionally, install the recommended integrations in your project: + +{{< tabs "package-manager-1" >}} + {{< tab "npm" >}} + +```bash +npm install @thulite/images@latest @thulite/seo@latest +``` + + {{< /tab >}} + {{< tab "pnpm" >}} + +```bash +pnpm install @thulite/images@latest @thulite/seo@latest +``` + + {{< /tab >}} + {{< tab "Yarn" >}} + +```bash +yarn add @thulite/images@latest @thulite/seo@latest +``` + + {{< /tab >}} + {{< tab "bun" >}} + +```bash +bun install @thulite/images@latest @thulite/seo@latest +``` + + {{< /tab >}} +{{< /tabs >}} + +{{< /step >}} +{{< /steps >}} + +{{< callout context="note" title="Need to continue?" icon="info-circle" >}} + +After upgrading Thulite to the latest version, you may not need to make any changes to your project at all! + +If you notice errors or unexpected behavior, review the sections below to identify project changes you may still need to make. + +{{< /callout >}} + +## Configuration + +Review your project configuration for Thulite and the recommended integrations: + +- [Thulite](/start-here/configuration/) +- [Images](https://images.thulite.io/docs/start-here/configuration/) +- [SEO](https://seo.thulite.io/docs/start-here/configuration/) +- [SVG](https://svg.thulite.io/docs/start-here/configuration/) + +## Known Issues + +### ENOENT + +If you get an `ENOENT` error, run the following command: + +{{< tabs "package-manager-1" >}} + {{< tab "npm" >}} + +```bash +npm run clean:install && npm install +``` + + {{< /tab >}} + {{< tab "pnpm" >}} + +```bash +pnpm run clean:install && pnpm install +``` + + {{< /tab >}} + {{< tab "Yarn" >}} + +```bash +yarn run clean:install && yarn install +``` + + {{< /tab >}} + {{< tab "bun" >}} + +```bash +bun run clean:install && bun install +``` + + {{< /tab >}} +{{< /tabs >}} diff --git a/content/start-here/usage.md b/content/start-here/usage.md new file mode 100644 index 000000000..45a235e36 --- /dev/null +++ b/content/start-here/usage.md @@ -0,0 +1,246 @@ +--- +title: "Usage" +description: "Learn the day-to-day workflow for editing, building, previewing, and deploying a Thulite site." +summary: "Learn the day-to-day workflow for editing, building, previewing, and deploying a Thulite site." +date: 2026-04-27T12:46:32+02:00 +lastmod: 2026-04-27T12:46:32+02:00 +draft: false +weight: 120 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +This guide covers the standard development workflow for a Thulite project. + +{{< callout context="note" icon="info-circle" >}} + +See [Commands](/reference/commands/) for full command details. + +{{< /callout >}} + +## Create content + +Add new pages with the `create` script. This command creates files in your `content/` directory using your project's archetypes. + +{{< tabs "create-content-command" >}} +{{< tab "npm" >}} + +```bash +npm run create about.md +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +pnpm run create about.md +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +yarn run create about.md +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +bun run create about.md +``` + +{{< /tab >}} +{{< /tabs >}} + +Set `draft: false` in front matter when the page is ready to publish. + +## Start development server + +Open your project folder in your editor and run the development server so your browser refreshes while you work. + +{{< tabs "start-development-server-command" >}} +{{< tab "npm" >}} + +```bash +npm run dev +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +pnpm run dev +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +yarn dev +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +bun run dev +``` + +{{< /tab >}} +{{< /tabs >}} + +When the server starts, open the local URL shown in your terminal (for example, `http://localhost:1313/`). + +## Format + +Run the formatter before building or opening a pull request to keep Markdown, styles, and scripts consistent. + +{{< tabs "format-command" >}} +{{< tab "npm" >}} + +```bash +npm run format +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +pnpm run format +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +yarn format +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +bun run format +``` + +{{< /tab >}} +{{< /tabs >}} + +## Build + +Before deploying, stop the development server (`Ctrl + C`) and create a production build. + +{{< tabs "build-command" >}} +{{< tab "npm" >}} + +```bash +npm run build +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +pnpm run build +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +yarn build +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +bun run build +``` + +{{< /tab >}} +{{< /tabs >}} + +This generates deploy-ready output in `public/` and surfaces build errors early. + +## Preview + +Preview the built site locally to validate what will actually be deployed. + +{{< tabs "preview-command" >}} +{{< tab "npm" >}} + +```bash +npm run preview +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +pnpm run preview +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +yarn preview +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +bun run preview +``` + +{{< /tab >}} +{{< /tabs >}} + +Preview uses your most recent build. If you make code changes after building, run the build command again before previewing. + +To test on other devices in your local network (for example, a phone), use `--host` with preview: + +{{< tabs "preview-network-command" >}} +{{< tab "npm" >}} + +```bash +npm run build && npm run preview -- --host +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +pnpm run build && pnpm run preview --host +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +yarn build && yarn preview --host +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +bun run build && bun run preview --host +``` + +{{< /tab >}} +{{< /tabs >}} + +## Deploy + +Once everything looks good in preview, deploy your site. + +- Follow the deployment guides in [Deploy overview](/basics/deploy/overview/). +- Use [Verification](/start-here/verification/) to validate quality and output before production updates. diff --git a/content/start-here/verification.md b/content/start-here/verification.md new file mode 100644 index 000000000..c230877fe --- /dev/null +++ b/content/start-here/verification.md @@ -0,0 +1,147 @@ +--- +title: "Verification" +description: "Validate that your Thulite project builds correctly and produces expected output before deployment." +summary: "Validate that your Thulite project builds correctly and produces expected output before deployment." +date: 2026-04-27T12:46:43+02:00 +lastmod: 2026-04-27T12:46:43+02:00 +draft: false +weight: 125 +params: + toc: true + seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- +This page helps you verify that Thulite is generating the expected pages, assets, and metadata. + +## Build your site + +Create a production build before inspecting the generated output. + +{{< tabs "verification-build-command" >}} +{{< tab "npm" >}} + +```bash +npm run build +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +pnpm run build +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +yarn build +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +bun run build +``` + +{{< /tab >}} +{{< /tabs >}} + +Check for: + +- A successful build with no unresolved content, template, or asset errors +- Generated output in `public/` +- Bundled CSS and JavaScript assets +- Generated `robots.txt`, `sitemap.xml`, and other expected top-level output files + +If the build fails, continue to [Troubleshooting](/start-here/troubleshooting/). + +## Inspect generated HTML + +Open page source in your browser or inspect files in `public/` to confirm the generated HTML matches your expectations. + +Check for: + +- A valid page `` and meta description +- Expected headings, navigation, and page content +- Canonical, Open Graph, and Twitter metadata when you use the SEO integration +- Correct stylesheet and script references +- Expected language, robots, and structured-data output for your configuration + +If you use Thulite Images or Inline SVG, also confirm that generated image and SVG markup appears correctly where expected. + +## Inspect generated site output + +Review the build output in `public/` and confirm that important files and sections are present. + +Check for: + +- `index.html` files for the pages and sections you expect to publish +- `sitemap.xml` and section sitemap files where configured +- `search-index.json` when your site uses search +- `manifest.webmanifest`, `robots.txt`, icons, fonts, and other static assets +- Fingerprinted CSS and JavaScript files for cache-friendly production builds + +Also verify that pages, static files, and section outputs use the expected URLs for your current `baseurl` and environment configuration. + +## Validate in the browser + +Preview the built site locally and verify behavior in real conditions. + +{{< tabs "verification-preview-command" >}} +{{< tab "npm" >}} + +```bash +npm run preview +``` + +{{< /tab >}} +{{< tab "pnpm" >}} + +```bash +pnpm run preview +``` + +{{< /tab >}} +{{< tab "Yarn" >}} + +```bash +yarn preview +``` + +{{< /tab >}} +{{< tab "bun" >}} + +```bash +bun run preview +``` + +{{< /tab >}} +{{< /tabs >}} + +Check for: + +- No broken internal links or missing pages +- No 404 responses for stylesheets, scripts, images, fonts, or icons +- Correct navigation, menus, and sidebar behavior +- Responsive layout behavior on desktop and mobile widths +- No unexpected console errors or visible rendering issues + +If your project includes optional integrations, validate those behaviors as well using the dedicated guides for [Thulite SEO](https://seo.thulite.io/docs/start-here/verification/), [Thulite Images](https://images.thulite.io/docs/start-here/verification/), and [Thulite SVG](https://svg.thulite.io/docs/start-here/verification/). + +## Use tools + +Use browser and auditing tools to validate output quality before deployment. + +For example: + +- [Lighthouse](https://developer.chrome.com/docs/lighthouse/overview) +- [PageSpeed Insights](https://pagespeed.web.dev/) +- [WAVE Web Accessibility Evaluation Tool](https://wave.webaim.org/) +- [Nu Html Checker](https://validator.w3.org/nu/) + +If anything looks incorrect, continue to [Troubleshooting](/start-here/troubleshooting/). diff --git a/hugo_stats.json b/hugo_stats.json new file mode 100644 index 000000000..341d086b6 --- /dev/null +++ b/hugo_stats.json @@ -0,0 +1,693 @@ +{ + "htmlElements": { + "tags": [ + "a", + "article", + "aside", + "base", + "blockquote", + "body", + "button", + "circle", + "code", + "dd", + "del", + "details", + "div", + "dl", + "dt", + "em", + "figcaption", + "figure", + "footer", + "g", + "h1", + "h2", + "h3", + "h4", + "h5", + "head", + "header", + "hr", + "html", + "img", + "input", + "kbd", + "li", + "line", + "link", + "main", + "mark", + "meta", + "nav", + "noscript", + "ol", + "p", + "path", + "pre", + "rect", + "script", + "section", + "small", + "span", + "strong", + "style", + "sub", + "summary", + "sup", + "svg", + "symbol", + "table", + "tbody", + "td", + "th", + "thead", + "title", + "tr", + "ul", + "use" + ], + "classes": [ + "/box", + "/brand-javascript", + "/brand-sass", + "/file-text", + "/folder", + "/html", + "/json", + "/markdown", + "/png", + "/rocket", + "/settings-2", + "/svg", + "/toml", + "404", + "active", + "advanced", + "align-items-center", + "align-items-start", + "anchor", + "article", + "basics", + "border-0", + "btn", + "btn-cta", + "btn-lg", + "btn-link", + "btn-outline-secondary", + "btn-primary", + "btn-sm", + "bulb", + "callout", + "callout-body", + "callout-content", + "callout-icon", + "callout-note", + "callout-tip", + "callout-title", + "card", + "card-body", + "card-nav", + "card-text", + "card-title", + "chevron-right", + "chroma", + "col", + "col-13", + "col-lg-10", + "col-lg-12", + "col-lg-16", + "col-lg-5", + "col-lg-7", + "col-lg-8", + "col-md-12", + "col-xl-3", + "col-xl-4", + "col-xl-8", + "col-xl-9", + "container", + "container-fluid", + "container-fw", + "content", + "d-flex", + "d-lg-block", + "d-lg-flex", + "d-lg-none", + "d-none", + "d-xl-block", + "d-xl-none", + "docs-content", + "docs-links", + "docs-sidebar", + "docs-toc", + "doks-sidebar", + "dropdown", + "dropdown-divider", + "dropdown-item", + "dropdown-menu", + "dropdown-menu-end", + "dropdown-toggle", + "edit-page", + "expressive-code", + "fade", + "feather", + "feather-calendar", + "feather-edit-2", + "file-text", + "flex-column", + "flex-grow-1", + "flex-lg-row", + "flex-md-row", + "flex-row", + "flex-sm-row", + "flex-xl-nowrap", + "folder-root", + "footer", + "footnote-backref", + "footnote-ref", + "footnotes", + "frame", + "fs-5", + "fs-6", + "fw-medium", + "g-4", + "gauge", + "h-auto", + "has-title", + "header", + "header-content", + "highlight", + "home", + "icon", + "icon-link", + "icon-tabler", + "icon-tabler-arrow-left", + "icon-tabler-arrow-right", + "icon-tabler-brand-github", + "icon-tabler-check", + "icon-tabler-chevron-down", + "icon-tabler-dots", + "icon-tabler-dots-vertical", + "icon-tabler-menu", + "icon-tabler-moon", + "icon-tabler-search", + "icon-tabler-selector", + "icon-tabler-sun", + "icon-tabler-x", + "icons-tabler-outline", + "info-circle", + "is-terminal", + "justify-content-between", + "justify-content-center", + "justify-content-end", + "last-modified", + "lead", + "link", + "link--text", + "list", + "list-inline", + "list-inline-item", + "list-nested", + "list-unstyled", + "m-2", + "mb-1", + "mb-3", + "mb-4", + "mb-lg-0", + "me-1", + "me-2", + "me-auto", + "me-lg-1", + "me-lg-3", + "ms-2", + "ms-auto", + "ms-lg-2", + "mt-1", + "mt-3", + "mt-4", + "mt-lg-0", + "mt-n3", + "mx-2", + "mx-auto", + "my-0", + "my-3", + "nav", + "nav-item", + "nav-link", + "nav-tabs", + "navbar", + "navbar-brand", + "navbar-expand-lg", + "navbar-nav", + "not-content", + "offcanvas", + "offcanvas-body", + "offcanvas-end", + "offcanvas-header", + "offcanvas-start", + "offcanvas-title", + "order-3", + "order-lg-4", + "p-0", + "page-footer-meta", + "page-header", + "page-links", + "page-nav", + "page-wash", + "pb-2", + "pb-5", + "pe-4", + "preview", + "preview-content", + "preview-figure", + "ps-3", + "pt-3", + "pt-4", + "reference", + "rocket", + "rounded", + "rounded-pill", + "row", + "section", + "section-divider", + "section-footer", + "section-header", + "section-main", + "section-nav", + "section-prefooter", + "section-switcher", + "shadow", + "show", + "single", + "social-link", + "stack-2", + "start-here", + "sticky-top", + "stretched-link", + "svg-inline", + "svg-inline-custom", + "svg-monochrome", + "tab-content", + "tab-pane", + "text-body-emphasis", + "text-body-secondary", + "text-center", + "text-decoration-none", + "text-end", + "text-lg-end", + "text-lg-start", + "text-muted", + "text-reset", + "text-start", + "thulite-steps", + "title", + "toc-mobile", + "toc-mobile-sticky", + "tree", + "visually-hidden", + "w-100", + "w-50", + "wrap" + ], + "ids": [ + "--help", + "--immediate", + "--interactive----no-interactive", + "--overwrite", + "--template", + "TableOfContents", + "_default", + "add-cache-headers-at-the-edge", + "add-csp-separately-and-keep-it-strict", + "add-parameters", + "add-script", + "add-tracking-id", + "add-translated-content", + "ai-dropdown", + "analytics-guides", + "archetypes", + "arguments", + "ask-the-community", + "assets", + "assetsscss", + "at-a-glance", + "babelconfigjs", + "background", + "be-intentional-with-cache-headers", + "blockquote", + "bold", + "build", + "build-for-production", + "build-your-site", + "buttonColorMode", + "chosen-approach", + "cli-deployment", + "cms-guides", + "code", + "config", + "config_default", + "confignext", + "configproduction", + "configuration", + "configure-hugo-build-caches", + "configure-languages", + "configure-thulite", + "cons", + "cons-1", + "consult-the-documentation", + "content", + "copy-markdown", + "create", + "create-a-new-project", + "create-content", + "create-new-content", + "credits", + "custom-id", + "defer-non-critical-work", + "definition-list", + "deploy", + "deploy-with-git", + "deploy-with-wrangler", + "deployment-guides", + "design-principles", + "dev", + "developer-focused", + "directories-and-files", + "directory", + "docsearch", + "docsearch-lvl0", + "documentation-updates", + "doks-docs-nav", + "easy-to-use", + "editor-choice", + "emoji", + "enable-local-preview-with-wrangler", + "enoent", + "example", + "example-project-tree", + "example-tree", + "examples", + "explicit-declaration-and-isolation", + "fast-by-default", + "features", + "fenced-code-block", + "fn:1", + "fnref:1", + "footnote", + "format", + "formatting", + "further-reading", + "h-rh-i-0", + "h1", + "h2", + "h3", + "handle-inline-and-third-party-scripts-explicitly", + "heading", + "heading-id", + "highlight", + "horizontal-rule", + "how-to-deploy", + "hugo", + "hugo-documentation", + "hugo-version", + "hugotoml", + "icon-arrow-right", + "image", + "inspect-generated-html", + "inspect-generated-site-output", + "install-a-specific-version", + "integrations", + "italic", + "javascript", + "keep-csp-aligned-with-asset-strategy", + "keep-css-lean", + "known-issues", + "layouts", + "link", + "links", + "major-changes", + "markdown", + "markuptoml", + "maximum-secure", + "menustoml", + "minor-changes", + "moduletoml", + "nav-tab", + "nav-tabContent", + "netlifytoml-file", + "node-version", + "offcanvasNavMain", + "offcanvasNavMainLabel", + "offcanvasNavSection", + "offcanvasNavSectionLabel", + "official-integrations", + "official-templates", + "options", + "ordered-list", + "packagejson", + "packagejson-scripts", + "paramstoml", + "patch-changes", + "performance-guides", + "postcssconfigjs", + "prerequisites", + "preview", + "project-config-with-verceljson", + "pros", + "pros-1", + "quick-links", + "quick-setup", + "quick-start", + "related", + "rendered-html", + "resources", + "roll-out-with-report-only-first", + "scss", + "searchToggleDesktop", + "searchToggleMobile", + "sectionSwitcher", + "security-guides", + "semantic-versioning", + "seo-guides", + "set-a-nodejs-version", + "setup", + "ship-optimized-assets", + "socialMenu", + "solid-architecture", + "start-development-server", + "start-with-a-safe-baseline", + "start-with-a-strict-baseline", + "static", + "strikethrough", + "subscript", + "superscript", + "svg-article", + "svg-box", + "svg-brand-javascript", + "svg-brand-sass", + "svg-bulb", + "svg-cabin", + "svg-chevron-right", + "svg-cloudcannon", + "svg-cloudflarepages", + "svg-decapcms", + "svg-fathom", + "svg-file-text", + "svg-folder", + "svg-folder-root", + "svg-gauge", + "svg-github", + "svg-gitlab", + "svg-googleanalytics", + "svg-html", + "svg-hugo", + "svg-info-circle", + "svg-json", + "svg-markdown", + "svg-microsoft", + "svg-netlify", + "svg-plausibleanalytics", + "svg-png", + "svg-render", + "svg-rocket", + "svg-settings-2", + "svg-simple-iconsfirebase", + "svg-stack-2", + "svg-svg", + "svg-thulite", + "svg-tina", + "svg-toml", + "svg-vercel", + "table", + "tabs-build-command-0", + "tabs-build-command-0-tab", + "tabs-build-command-1", + "tabs-build-command-1-tab", + "tabs-build-command-2", + "tabs-build-command-2-tab", + "tabs-build-command-3", + "tabs-build-command-3-tab", + "tabs-command-flags-0", + "tabs-command-flags-0-tab", + "tabs-command-flags-1", + "tabs-command-flags-1-tab", + "tabs-command-flags-2", + "tabs-command-flags-2-tab", + "tabs-command-flags-3", + "tabs-command-flags-3-tab", + "tabs-create-command-0", + "tabs-create-command-0-tab", + "tabs-create-command-1", + "tabs-create-command-1-tab", + "tabs-create-command-2", + "tabs-create-command-2-tab", + "tabs-create-command-3", + "tabs-create-command-3-tab", + "tabs-create-content-command-0", + "tabs-create-content-command-0-tab", + "tabs-create-content-command-1", + "tabs-create-content-command-1-tab", + "tabs-create-content-command-2", + "tabs-create-content-command-2-tab", + "tabs-create-content-command-3", + "tabs-create-content-command-3-tab", + "tabs-create-new-site-0", + "tabs-create-new-site-0-tab", + "tabs-create-new-site-1", + "tabs-create-new-site-1-tab", + "tabs-create-new-site-2", + "tabs-create-new-site-2-tab", + "tabs-create-new-site-3", + "tabs-create-new-site-3-tab", + "tabs-create-page-command-0", + "tabs-create-page-command-0-tab", + "tabs-create-page-command-1", + "tabs-create-page-command-1-tab", + "tabs-create-page-command-2", + "tabs-create-page-command-2-tab", + "tabs-create-page-command-3", + "tabs-create-page-command-3-tab", + "tabs-dev-command-0", + "tabs-dev-command-0-tab", + "tabs-dev-command-1", + "tabs-dev-command-1-tab", + "tabs-dev-command-2", + "tabs-dev-command-2-tab", + "tabs-dev-command-3", + "tabs-dev-command-3-tab", + "tabs-format-command-0", + "tabs-format-command-0-tab", + "tabs-format-command-1", + "tabs-format-command-1-tab", + "tabs-format-command-2", + "tabs-format-command-2-tab", + "tabs-format-command-3", + "tabs-format-command-3-tab", + "tabs-initialize-tina-command-0", + "tabs-initialize-tina-command-0-tab", + "tabs-initialize-tina-command-1", + "tabs-initialize-tina-command-1-tab", + "tabs-initialize-tina-command-2", + "tabs-initialize-tina-command-2-tab", + "tabs-initialize-tina-command-3", + "tabs-initialize-tina-command-3-tab", + "tabs-install-wrangler-0", + "tabs-install-wrangler-0-tab", + "tabs-install-wrangler-1", + "tabs-install-wrangler-1-tab", + "tabs-install-wrangler-2", + "tabs-install-wrangler-2-tab", + "tabs-install-wrangler-3", + "tabs-install-wrangler-3-tab", + "tabs-package-manager-1-0", + "tabs-package-manager-1-0-tab", + "tabs-package-manager-1-1", + "tabs-package-manager-1-1-tab", + "tabs-package-manager-1-2", + "tabs-package-manager-1-2-tab", + "tabs-package-manager-1-3", + "tabs-package-manager-1-3-tab", + "tabs-preview-command-0", + "tabs-preview-command-0-tab", + "tabs-preview-command-1", + "tabs-preview-command-1-tab", + "tabs-preview-command-2", + "tabs-preview-command-2-tab", + "tabs-preview-command-3", + "tabs-preview-command-3-tab", + "tabs-preview-network-command-0", + "tabs-preview-network-command-0-tab", + "tabs-preview-network-command-1", + "tabs-preview-network-command-1-tab", + "tabs-preview-network-command-2", + "tabs-preview-network-command-2-tab", + "tabs-preview-network-command-3", + "tabs-preview-network-command-3-tab", + "tabs-run-build-0", + "tabs-run-build-0-tab", + "tabs-run-build-1", + "tabs-run-build-1-tab", + "tabs-run-build-2", + "tabs-run-build-2-tab", + "tabs-run-build-3", + "tabs-run-build-3-tab", + "tabs-start-development-server-command-0", + "tabs-start-development-server-command-0-tab", + "tabs-start-development-server-command-1", + "tabs-start-development-server-command-1-tab", + "tabs-start-development-server-command-2", + "tabs-start-development-server-command-2-tab", + "tabs-start-development-server-command-3", + "tabs-start-development-server-command-3-tab", + "tabs-update-thulite-command-0", + "tabs-update-thulite-command-0-tab", + "tabs-update-thulite-command-1", + "tabs-update-thulite-command-1-tab", + "tabs-update-thulite-command-2", + "tabs-update-thulite-command-2-tab", + "tabs-update-thulite-command-3", + "tabs-update-thulite-command-3-tab", + "tabs-verification-build-command-0", + "tabs-verification-build-command-0-tab", + "tabs-verification-build-command-1", + "tabs-verification-build-command-1-tab", + "tabs-verification-build-command-2", + "tabs-verification-build-command-2-tab", + "tabs-verification-build-command-3", + "tabs-verification-build-command-3-tab", + "tabs-verification-preview-command-0", + "tabs-verification-preview-command-0-tab", + "tabs-verification-preview-command-1", + "tabs-verification-preview-command-1-tab", + "tabs-verification-preview-command-2", + "tabs-verification-preview-command-2-tab", + "tabs-verification-preview-command-3", + "tabs-verification-preview-command-3-tab", + "task-list", + "template", + "thulite", + "toc", + "translate-interface-strings", + "troubleshooting", + "unordered-list", + "unsupported-elements", + "update-page-frontmatter", + "update-parameters", + "update-settings", + "update-to-the-latest-version", + "updating", + "upgrade-guides", + "usage", + "use-fingerprinted-assets-for-long-lived-caching", + "use-tools", + "using-netlify-functions", + "validate-after-deployment", + "validate-in-the-browser", + "verify-after-every-release", + "verify-caching-behavior", + "verify-with-real-checks", + "verify-your-setup", + "website-ui-deployment" + ] + } +} diff --git a/i18n/de.toml b/i18n/de.toml new file mode 100644 index 000000000..1cb41f030 --- /dev/null +++ b/i18n/de.toml @@ -0,0 +1,51 @@ +[404_text] +other = "Die aufgerufene Seite existiert nicht oder wurde verschoben." + +[404_title] +other = "Seite nicht gefunden" + +[browse] +other = "Browse" + +[chapter_next] +other = "Danach" + +[chapter_previous] +other = "Davor" + +[edit_page] +other = "Editiere diese Seite auf" + +[get_started] +other = "Loslegen" + +[last_updated] +other = "Zuletzt aktualisiert am" + +[minute] +one = "Minute" +other = "Minuten" + +[on_this_page] +other = "Auf dieser Seite" + +[reading_time] +other = "Geschätzte Lesedauer" + +[search_loading] +other = "Suchindex wird geladen…" + +[search_no_recent] +other = "Keine kürzlich durchgeführten Suchanfragen" + +[search_no_results] +other = "Keine Resultate" + +[search_placeholder] +other = "Suche" + +[search_title] +other = "Suche" + +[video_unsupported] +other = "Ihr Browser unterstützt keine integrierten Videos, aber keine Sorge, Sie können <a href=\"{{ .RelPermalink }}\">es herunterladen</a> und mit Ihrem Lieblings-Videoplayer ansehen!" diff --git a/i18n/en.toml b/i18n/en.toml new file mode 100644 index 000000000..f7319b494 --- /dev/null +++ b/i18n/en.toml @@ -0,0 +1,54 @@ +[404_text] +other = "The page you are looking for doesn't exist or has been moved." + +[404_title] +other = "Page not found :(" + +[browse] +other = "Browse" + +[chapter_next] +other = "Next" + +[chapter_previous] +other = "Prev" + +[edit_page] +other = "Edit this page on" + +[get_started] +other = "Get Started" + +[view_demo] +other = "View on GitHub" + +[last_updated] +other = "Last updated on" + +[minute] +one = "minute" +other = "minutes" + +[on_this_page] +other = "On this page" + +[reading_time] +other = "Estimated reading time" + +[search_loading] +other = "Loading search index…" + +[search_no_recent] +other = "No recent searches" + +[search_no_results] +other = "No results" + +[search_placeholder] +other = "Search" + +[search_title] +other = "Search" + +[video_unsupported] +other = "Your browser doesn't support embedded videos, but don't worry, you can <a href=\"{{ .RelPermalink }}\">download it</a> and watch it with your favorite video player!" diff --git a/i18n/nl.toml b/i18n/nl.toml new file mode 100644 index 000000000..bdbf2d3ca --- /dev/null +++ b/i18n/nl.toml @@ -0,0 +1,51 @@ +[404_text] +other = "De gezochte pagina bestaat niet of deze is verplaatst." + +[404_title] +other = "Pagina niet gevonden :(" + +[browse] +other = "Browse" + +[chapter_next] +other = "Volgende" + +[chapter_previous] +other = "Voorheen" + +[edit_page] +other = "Bewerk deze pagina op" + +[get_started] +other = "Aan de slag" + +[last_updated] +other = "Laatst bijgewerkt op" + +[minute] +one = "minuut" +other = "minuten" + +[on_this_page] +other = "Op deze pagina" + +[reading_time] +other = "Geschatte leestijd" + +[search_loading] +other = "Zoekindex wordt geladen…" + +[search_no_recent] +other = "Geen recente zoekopdrachten" + +[search_no_results] +other = "Geen resultaten" + +[search_placeholder] +other = "Zoeken" + +[search_title] +other = "Zoeken" + +[video_unsupported] +other = "Je browser ondersteunt geen ingesloten video's, maar maak je geen zorgen, je kunt <a href=\"{{ .RelPermalink }}\">het downloaden</a> en bekijken met je favoriete videospeler!" diff --git a/layouts/_partials/footer/script-footer-custom.html b/layouts/_partials/footer/script-footer-custom.html new file mode 100644 index 000000000..aabe29f3c --- /dev/null +++ b/layouts/_partials/footer/script-footer-custom.html @@ -0,0 +1,20 @@ +{{/* Put your custom <script></script> tags here */}} +{{ if .IsHome -}} + {{ partial "footer/esbuild" (dict "src" "js/custom.js" "load" "defer" "transpile" false) -}} +{{ end -}} + +{{ if site.Params.add_ons.docSearch -}} + {{ partial "footer/esbuild" (dict "src" "js/docsearch.js" "load" "async" "transpile" false) -}} +{{ end -}} + +{{/* EXAMPLE - only load script for production +{{ if eq (hugo.Environment) "production" -}} + {{ partial "footer/esbuild" (dict "src" "js/instantpage.js" "load" "async" "transpile" false) -}} +{{ end -}} +*/}} + +{{/* EXAMPLE - only load script for a page type e.g. contact or gallery +{{ if eq .Type "gallery" -}} + {{ partial "footer/esbuild" (dict "src" "js/gallery.js" "load" "async" "transpile" false) -}} +{{ end -}} +*/}} diff --git a/layouts/_partials/head/custom-head.html b/layouts/_partials/head/custom-head.html new file mode 100644 index 000000000..0c59d7ffb --- /dev/null +++ b/layouts/_partials/head/custom-head.html @@ -0,0 +1 @@ +<!-- Custom head --> diff --git a/layouts/_partials/head/resource-hints.html b/layouts/_partials/head/resource-hints.html new file mode 100644 index 000000000..16de1aec8 --- /dev/null +++ b/layouts/_partials/head/resource-hints.html @@ -0,0 +1,4 @@ +<!-- Preload key fonts to improve performance --> +<link rel="preload" as="font" href="{{ "fonts/geist/files/geist-latin-wght-normal.woff2" | absURL }}" type="font/woff2" crossorigin> +<link rel="preload" as="font" href="{{ "fonts/geist-mono/files/geist-mono-latin-wght-normal.woff2" | absURL }}" type="font/woff2" crossorigin> +<link rel="preconnect" href="https://70H5139H21-dsn.algolia.net" crossorigin /> diff --git a/layouts/_partials/head/script-header.html b/layouts/_partials/head/script-header.html new file mode 100644 index 000000000..28b50f355 --- /dev/null +++ b/layouts/_partials/head/script-header.html @@ -0,0 +1,7 @@ +<!-- Insert scripts NOT needed by stylesheets here --> +<!-- Privacy-friendly analytics by Plausible --> +<script async src="https://plausible.io/js/pa-n3105NYLVB-7iqwW3GqWL.js"></script> +<script> + window.plausible=window.plausible||function(){(plausible.q=plausible.q||[]).push(arguments)},plausible.init=plausible.init||function(i){plausible.o=i||{}}; + plausible.init() +</script> diff --git a/layouts/_partials/header/header.html b/layouts/_partials/header/header.html new file mode 100644 index 000000000..2eeeed8d3 --- /dev/null +++ b/layouts/_partials/header/header.html @@ -0,0 +1,302 @@ +{{ if site.Params.doks.alert -}} + {{ partial "header/alert.html" . }} +{{ end -}} + +{{ if site.Params.doks.navbarSticky -}} +<div class="sticky-top"> +{{ end -}} + +{{ if site.Params.doks.headerBar -}} +<div class="header-bar"></div> +{{ end -}} + +<header class="navbar navbar-expand-lg"> + {{ with site.Params.doks.containerBreakpoint -}} + <div class="container-{{ . }}"> + {{ else -}} + <div class="container"> + {{ end -}} + + <!-- Site title --> + <a class="navbar-brand me-auto me-lg-3" href="{{ relLangURL "" }}">{{ .Site.Title }}</a> + + <!-- FlexSearch mobile --> + {{ partial "main/showFlexSearch" . }} + {{ $showFlexSearch := .Scratch.Get "showFlexSearch" -}} + {{ if $showFlexSearch -}} + <button type="button" id="searchToggleMobile" class="btn btn-link nav-link mx-2 d-lg-none" aria-label="Search website"> + <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-search" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> + <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> + <circle cx="10" cy="10" r="7"></circle> + <line x1="21" y1="21" x2="15" y2="15"></line> + </svg> + </button> + {{ end -}} + + <!-- DocSearch mobile --> + {{ if site.Params.add_ons.docSearch -}} + <div id="docsearch" class="d-none" tabindex="-1" aria-disabled="true"></div> + <button type="button" id="searchToggleMobile" class="btn btn-link nav-link mx-2 d-lg-none" aria-label="Search website"> + <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-search" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> + <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> + <circle cx="10" cy="10" r="7"></circle> + <line x1="21" y1="21" x2="15" y2="15"></line> + </svg> + </button> + {{ end -}} + + <!-- Section navigation --> + {{ if (in site.Params.doks.sectionNav .Section) -}} + <button class="btn btn-link d-lg-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasNavSection" aria-controls="offcanvasNavSection" aria-label="Open section navigation menu"> + <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-dots-vertical" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> + <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> + <path d="M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"></path> + <path d="M12 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"></path> + <path d="M12 5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"></path> + </svg> + </button> + <div class="offcanvas offcanvas-start d-lg-none" tabindex="-1" id="offcanvasNavSection" aria-labelledby="offcanvasNavSectionLabel"> + {{ if site.Params.doks.headerBar -}} + <div class="header-bar"></div> + {{ end -}} + <div class="offcanvas-header"> + <h5 class="offcanvas-title" id="offcanvasNavSectionLabel">{{ .Section | humanize }}</h5> + <button type="button" class="btn btn-link nav-link p-0 ms-auto" data-bs-dismiss="offcanvas" aria-label="Close"> + <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-x" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> + <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> + <path d="M18 6l-12 12"></path> + <path d="M6 6l12 12"></path> + </svg> + </button> + </div> + <div class="offcanvas-body"> + <aside class="doks-sidebar mt-n3"> + {{ if site.Params.doks.sectionSwitcher -}} + {{ partial "sidebar/section-switcher.html" . }} + {{ end -}} + <nav id="doks-docs-nav" aria-label="Tertiary navigation"> + {{ partial "sidebar/section-menu.html" . }} + </nav> + </aside> + </div> + </div> + {{ end -}} + + <!-- Main navigation button --> + <button class="btn btn-link nav-link mx-2 order-3 d-lg-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasNavMain" aria-controls="offcanvasNavMain" aria-label="Open main navigation menu"> + <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-menu" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> + <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> + <line x1="4" y1="8" x2="20" y2="8"></line> + <line x1="4" y1="16" x2="20" y2="16"></line> + </svg> + </button> + + <!-- Main navigation --> + <div class="offcanvas offcanvas-end h-auto" tabindex="-1" id="offcanvasNavMain" aria-labelledby="offcanvasNavMainLabel"> + {{ if site.Params.doks.headerBar -}} + <div class="header-bar d-lg-none"></div> + {{ end -}} + <div class="offcanvas-header"> + <h5 class="offcanvas-title" id="offcanvasNavMainLabel">{{ site.Title }}</h5> + <button type="button" class="btn btn-link nav-link p-0 ms-auto" data-bs-dismiss="offcanvas" aria-label="Close"> + <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-x" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> + <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> + <path d="M18 6l-12 12"></path> + <path d="M6 6l12 12"></path> + </svg> + </button> + </div> + <!-- + <div class="offcanvas-header"> + <h5 class="offcanvas-title fw-bold" id="offcanvasNavMainLabel">{{ .Site.Params.Title }}</h5> + <button class="btn btn-link nav-link ms-auto" type="button" data-bs-dismiss="offcanvas" aria-label="Close menu"> + <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-x" width="24" height="24" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> + <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> + <path d="M18 6l-12 12"></path> + <path d="M6 6l12 12"></path> + </svg> + </button> + </div> + --> + <div class="offcanvas-body d-flex flex-column flex-lg-row justify-content-between"> + <ul class="navbar-nav flex-grow-1"> + {{- $current := . -}} + {{- $section := $current.Section -}} + {{ range .Site.Menus.main -}} + {{- $active := or ($current.IsMenuCurrent "main" .) ($current.HasMenuCurrent "main" .) -}} + {{- $active = or $active (eq .Name $current.Title) -}} + {{- $active = or $active (eq .Name ($section | humanize)) -}} + {{- $active = or $active (and (eq .Name "Blog") (eq $current.Section "blog" "authors")) -}} + {{ if .HasChildren -}} + <li class="nav-item dropdown"> + <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false"> + {{ .Name -}} + <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-chevron-down" width="24" height="24" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> + <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> + <path d="M6 9l6 6l6 -6"></path> + </svg> + </a> + <ul class="dropdown-menu shadow rounded border-0"> + {{ range .Children -}} + {{- $active = eq .Name $current.Title -}} + <li><a class="dropdown-item{{ if $active }} active{{ end }}" href="{{ .URL | absURL }}"{{ if $active }} aria-current="true"{{ end }}>{{ .Name }}</a></li> + {{ end -}} + </ul> + </li> + {{ else -}} + <li class="nav-item"> + <a class="nav-link{{ if $active }} active{{ end }}" href="{{ .URL | absURL }}"{{ if $active }} aria-current="true"{{ end }}>{{ .Name }}</a> + </li> + {{ end -}} + {{ end -}} + </ul> + + <!-- FlexSearch desktop --> + {{ partial "main/showFlexSearch" . }} + {{ $showFlexSearch := .Scratch.Get "showFlexSearch" -}} + {{ if $showFlexSearch -}} + <button type="button" id="searchToggleDesktop" class="btn btn-link nav-link p-2 d-none d-lg-block" aria-label="Search website"> + <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-search" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> + <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> + <circle cx="10" cy="10" r="7"></circle> + <line x1="21" y1="21" x2="15" y2="15"></line> + </svg> + </button> + {{ end -}} + + <!-- DocSearch desktop --> + {{ if site.Params.add_ons.docSearch -}} + <button type="button" id="searchToggleDesktop" class="btn btn-link nav-link mx-2 d-none d-lg-block" aria-label="Search website"> + <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-search" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> + <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> + <circle cx="10" cy="10" r="7"></circle> + <line x1="21" y1="21" x2="15" y2="15"></line> + </svg> + </button> + {{ end -}} + + <!-- Language dropdown --> + {{ if eq site.Params.doks.multilingualMode true -}} + + <div class="dropdown mt-1 order-lg-2"> + <button class="btn btn-dropdown dropdown-toggle" id="doks-languages" data-bs-toggle="dropdown" aria-expanded="false" data-bs-display="static"> + <span class="dropdown-caret"> + <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-language" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> + <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> + <path d="M4 5h7"></path> + <path d="M9 3v2c0 4.418 -2.239 8 -5 8"></path> + <path d="M5 9c0 2.144 2.952 3.908 6.7 4"></path> + <path d="M12 20l4 -9l4 9"></path> + <path d="M19.1 18h-6.2"></path> + </svg> + <span id="doks-language-current">{{ .Site.Language.LanguageName }}</span> + <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-chevron-down" width="24" height="24" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> + <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> + <path d="M6 9l6 6l6 -6"></path> + </svg> + </span> + </button> + <ul class="dropdown-menu dropdown-menu-lg-end me-lg-2 shadow rounded border-0" aria-labelledby="doks-languages"> + + <li><span class="dropdown-item current" aria-current="true">{{ .Site.Language.LanguageName }}</span></li> + + <li><hr class="dropdown-divider"></li> + + {{ if site.Params.doks.showMissingLanguages -}} + {{ $translatedLangs := slice -}} + {{ range .Translations -}} + {{ $translatedLangs = $translatedLangs | append .Lang }} + {{- end }} + {{ range site.Languages -}} + {{ if and (ne $.Lang .Lang) (not (in $.Params.skipTranslations .Lang)) -}} + {{ $isTranslated := in $translatedLangs .Lang -}} + <li><a class="dropdown-item {{ if not $isTranslated }}untranslated{{ end }}" rel="alternate" href="{{ if $isTranslated }}{{ (index (where $.Translations "Lang" .Lang) 0).RelPermalink }}{{ else }}{{ .Lang | relURL }}{{ end }}" hreflang="{{ .Lang }}" lang="{{ .Lang }}">{{ .LanguageName }}</a></li> + {{- end }} + {{- end }} + {{ else -}} + {{ range .Translations -}} + <li><a class="dropdown-item" rel="alternate" href="{{ .RelPermalink }}" hreflang="{{ .Lang }}" lang="{{ .Lang }}">{{ .Language.LanguageName }}</a></li> + {{- end }} + {{- end }} + <!-- + <li><hr class="dropdown-divider"></li> + <li><a class="dropdown-item" href="/docs/contributing/how-to-contribute/">Help Translate</a></li> + --> + </ul> + </div> + {{ end -}} + + <!-- Versioning dropdown --> + {{ if eq site.Params.doks.docsVersioning true -}} + + <div class="dropdown mt-1 order-lg-3"> + <button class="btn btn-dropdown dropdown-toggle" id="doks-versions" data-bs-toggle="dropdown" aria-expanded="false" data-bs-display="static" aria-label="Toggle version menu"> + <span class="d-none">Doks</span> v{{ site.Params.doks.docsVersion }} + <span class="dropdown-caret"> + <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-chevron-down" width="24" height="24" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> + <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> + <path d="M6 9l6 6l6 -6"></path> + </svg> + </span> + </button> + <ul class="dropdown-menu dropdown-menu-lg-end me-lg-2 shadow rounded border-0" aria-labelledby="doks-versions"> + <li><a class="dropdown-item current" aria-current="true" href="/docs/{{ site.Params.doks.docsVersion }}/prologue/introduction/">Latest ({{ site.Params.doks.docsVersion }}.x)</a></li> + <li><hr class="dropdown-divider"></li> + <li><a class="dropdown-item" href="/docs/0.2/prologue/introduction/">v0.2.x</a></li> + <li><a class="dropdown-item" href="/docs/0.1/prologue/introduction/">v0.1.x</a></li> + <li><hr class="dropdown-divider"></li> + <li><a class="dropdown-item" href="/docs/versions/">All versions</a></li> + </ul> + </div> + {{ end -}} + + <!-- Color mode toggler --> + {{ if and (eq site.Params.doks.colorMode "auto") site.Params.doks.colorModeToggler -}} + <button id="buttonColorMode" class="btn btn-link nav-link mt-3 mt-lg-0 p-0 ms-lg-2 me-lg-1" type="button" aria-label="Toggle theme"> + <svg data-bs-theme-value="dark" xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-moon" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> + <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> + <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z"></path> + </svg> + <svg data-bs-theme-value="light" xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-sun" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> + <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> + <path d="M12 12m-4 0a4 4 0 1 0 8 0a4 4 0 1 0 -8 0m-5 0h1m8 -9v1m8 8h1m-9 8v1m-6.4 -15.4l.7 .7m12.1 -.7l-.7 .7m0 11.4l.7 .7m-12.1 -.7l-.7 .7"></path> + </svg> + </button> + {{ end -}} + + <!-- Social menu --> + {{ if .Site.Menus.social -}} + <ul id="socialMenu" class="nav flex-row order-lg-4"> + {{ range .Site.Menus.social -}} + <li class="nav-item"> + <a class="nav-link social-link" href="{{ .URL | relURL }}">{{ .Pre | safeHTML }}<small class="ms-2 visually-hidden">{{ .Name | safeHTML }}</small></a> + </li> + {{ end -}} + </ul> + {{ end -}} + + + <!-- Navbar button mobile --> + {{ if site.Params.doks.navBarButton -}} + <a class="btn btn-primary rounded-pill mt-2 btn-block d-lg-none" href="{{ site.Params.doks.navBarButtonUrl | absURL }}" role="button">{{ site.Params.doks.navBarButtonText }}</a> + {{ end -}} + </div> + </div> + + <!-- Navbar button desktop --> + {{ if site.Params.doks.navBarButton -}} + <a class="btn btn-primary rounded-pill ms-3 me-2 px-4 order-lg-3 d-none d-lg-block" href="{{ site.Params.doks.navBarButtonUrl | absURL }}" role="button">{{ site.Params.doks.navBarButtonText }}</a> + {{ end -}} + + </div> +</header> +{{ if site.Params.doks.navbarSticky -}} +</div> +{{ end -}} + +<!-- Search modal --> +{{ if site.Params.doks.flexSearch -}} +{{ partial "header/search-modal" . }} +{{ end -}} + + diff --git a/layouts/_partials/main/lvl0.html b/layouts/_partials/main/lvl0.html new file mode 100644 index 000000000..41a19513e --- /dev/null +++ b/layouts/_partials/main/lvl0.html @@ -0,0 +1,5 @@ +{{ $lvl0 := .FirstSection.Title }} +{{ if eq $lvl0 "Start Here" -}} + {{ $lvl0 = "Learn" }} +{{ end -}} +<span id="docsearch-lvl0" hidden>{{ $lvl0 }}</span> diff --git a/layouts/_partials/sidebar/render-section-menu.html b/layouts/_partials/sidebar/render-section-menu.html new file mode 100644 index 000000000..2004867e2 --- /dev/null +++ b/layouts/_partials/sidebar/render-section-menu.html @@ -0,0 +1,101 @@ +{{- /* +Based on: https://discourse.gohugo.io/t/automated-nested-menus/42835/2 + +Renders a recursive section menu starting from a page collection or menu. + +As it walks the tree, this partial: + + - Sets class="active" on the active list item + - Sets aria-current="page" on the active anchor + - Sets aria-current="true" on the ancestors of the active anchor + +If you feed it a single page, you must wrap the page in a slice. See examples +below. + +If you feed it a menu, menu entries defined in site configuration must use the +pageRef property, not the URL property. Everything must be a page. + +By default, a home page reference in the page collection or menu will be +skipped. To override this behavior, set $skipHome to false below. + +@param {page} currentPage The page currently being rendered. +@param {slice} nodes A slice of top level pages or a menu. + +@returns {template.HTML} + +@examples + + {{ with site.Menus.main }} + {{ partial "sidebar/render-section-menu.html" (dict "currentPage" $ "nodes" .) }} + {{ end }} + + {{ with site.Sections }} + {{ partial "sidebar/render-section-menu.html" (dict "currentPage" $ "nodes" .) }} + {{ end }} + + {{ with (.Site.GetPage "section" .Section).Sections }} + {{ partial "sidebar/render-section-menu.html" (dict "currentPage" $ "nodes" .) }} + {{ end }} + + {{ with slice (site.GetPage "/introduction") }} + {{ partial "sidebar/render-section-menu.html" (dict "currentPage" $ "nodes" .) }} + {{ end }} + +*/}} + +{{- /* Configure. */}} +{{- $skipHome := true }} + +{{- /* Get parameters. */}} +{{- $currentPage := .currentPage }} +{{- $nodes := .nodes }} + +{{- /* Render. */}} +<nav class="section-nav docs-links"> + <ul class="list-unstyled"> + {{- range $nodes }} + {{- if and .Page.IsHome $skipHome }} + {{- continue }} + {{- end }} + {{- template "walk" (dict "node" . "currentPage" $currentPage) }} + {{- end }} + </ul> +</nav> + +{{- /* Recursively render list items. */}} +{{- define "walk" }} + {{- $currentPage := .currentPage }} + {{- $node := .node }} + + {{- $linkContent := $node.Name }} + {{- with $node.Page.LinkTitle }} + {{- $linkContent = . }} + {{- end }} + + {{- $ariaCurrent := "" }} + {{- $liClass := "" }} + + {{- if in $currentPage.Ancestors $node.Page }} + {{- $ariaCurrent = "true" }} + {{- end }} + + {{- if $currentPage.Eq $node.Page }} + {{- $ariaCurrent = "page" }} + {{- $liClass = "active" }} + {{- end }} + + <li {{- with $liClass }} class="{{ . }}" {{ end -}}> + {{- with $node.Page.Pages }} + <details{{- with $ariaCurrent }} open{{- else}}{{- if ne $node.Page.Params.sidebar.collapsed true }} open{{- end }}{{- end}}> + <summary>{{ $linkContent }}</summary> + <ul class="list-unstyled list-nested"> + {{- range . }} + {{- template "walk" (dict "node" . "currentPage" $currentPage) }} + {{- end }} + </ul> + </details> + {{- else }} + <a {{- with $ariaCurrent }} aria-current="{{ . }}" {{- end }} href="{{- $node.Page.RelPermalink }}">{{ $linkContent }}</a> + {{- end }} + </li> +{{- end }} diff --git a/layouts/_shortcodes/email.html b/layouts/_shortcodes/email.html new file mode 100644 index 000000000..cb84ef656 --- /dev/null +++ b/layouts/_shortcodes/email.html @@ -0,0 +1,13 @@ +{{- /* Set defaults and get args. */}} +{{- $address := index .Params 0 | default site.Params.defaultEmail }} + +{{- /* Get parts. */}} +{{- $addressParts := split $address "@" }} +{{- $userName := (index $addressParts 0) }} +{{- $rootDomain := (index $addressParts 1) }} +{{- $rootDomainParts := split $rootDomain "." }} +{{- $domainName := (index $rootDomainParts 0) }} +{{- $topLevelDomain := (index $rootDomainParts 1) }} + +{{- /* Render. */}} +{{- printf "<span class=\"email\">%s@%s<b>.%s</b>.%s</span>" $userName $domainName $domainName $topLevelDomain | safeHTML -}} diff --git a/layouts/_shortcodes/link-card.html b/layouts/_shortcodes/link-card.html new file mode 100644 index 000000000..bc4915f15 --- /dev/null +++ b/layouts/_shortcodes/link-card.html @@ -0,0 +1,40 @@ +{{- $opts := dict + "page" . + "src" .Params.src + "href" .Params.href + "title" .Params.title + "description" .Params.description + "target" .Params.target + "class" .Params.class + "rel" .Params.rel +}} + +{{- with .Parent }} + {{- partial "inline/link-card.html" $opts }} +{{- else }} + <div class="card-nav d-flex flex-column flex-sm-row"> + {{- partial "inline/link-card.html" $opts }} + </div> +{{- end }} + +{{- define "_partials/inline/link-card.html" }} + <div class="card text-end w-100{{ with .class}} {{ . }}{{ end }}"> + <div class="card-body d-flex"> + <div class="d-flex flex-column me-auto text-start"> + {{ with .src }} + {{- partial "inline-svg" (dict "src" . "width" "32px" "class" "svg-inline-custom svg-monochrome text-body-emphasis" ) }} + {{ end }} + <h5 class="card-title my-0"><a href="{{ .href }}"{{ with .target}} target="{{ . }}"{{ end }} class="stretched-link text-reset text-decoration-none"{{ with .rel}} rel="{{ . }}"{{ end }}>{{ .title }}</a></h5> + {{ with .description }}<p class="card-text mt-1">{{ . }}</p>{{ end }} + </div> + <div class="d-flex flex-column justify-content-center"> + <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-arrow-right" width="20" height="20" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> + <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> + <path d="M5 12l14 0"></path> + <path d="M13 18l6 -6"></path> + <path d="M13 6l6 6"></path> + </svg> + </div> + </div> + </div> +{{- end -}} diff --git a/layouts/_shortcodes/preview.html b/layouts/_shortcodes/preview.html new file mode 100644 index 000000000..e9ac415b8 --- /dev/null +++ b/layouts/_shortcodes/preview.html @@ -0,0 +1,8 @@ +<figure class="preview-figure"> + <div class="preview"> + <figcaption>Preview</figcaption> + <div class="preview-content"> + {{ .Page.RenderString (dict "display" "block") .Inner }} + </div> + </div> +</figure> diff --git a/layouts/home.html b/layouts/home.html new file mode 100644 index 000000000..425b48e8f --- /dev/null +++ b/layouts/home.html @@ -0,0 +1,115 @@ +{{ define "sidebar-prefooter" }} + <div aria-hidden="true" class="page-wash"></div> + + <section class="section-header"> + <div class="container"> + <div class="row justify-content-center"> + <div class="col-lg-10 text-center"> + <h1 class="mt-1">{{ .Title }}</h1> + <p class="lead text-muted">{{ .Params.lead | safeHTML }}</p> + <a class="btn btn-primary btn-cta rounded-pill btn-lg my-3" href="/{{ if site.Params.doks.docsVersioning }}{{ site.Params.doks.docsVersion }}/{{ end }}start-here/getting-started/" role="button">{{ i18n "get_started" }}</a> + </div> + <div class="col-lg-12"> + <div class="header-content"> + {{ .Content }} + </div> + </div> + </div> + </div> + </section> + + <section class="section-main"> + <div class="container"> + <h2 class="text-center mt-lg-0">What's included</h2> + <div class="row justify-content-center g-4"> + <div class="col-lg-5"> + <div class="card"> + <div class="card-body"> + <h3 class="fs-5">{{ partial "inline-svg" (dict "src" "file-text" "stroke-width" "1.5" "class" "text-muted me-2" ) }}Structured content</h3> + <p class="text-muted fs-6">Write and manage content in Markdown with clear workflows.</p> + </div> + </div> + </div> + <div class="col-lg-5"> + <div class="card"> + <div class="card-body"> + <h3 class="fs-5">{{ partial "inline-svg" (dict "src" "folder-root" "stroke-width" "1.5" "class" "text-muted me-2" ) }}Simple project setup</h3> + <p class="text-muted fs-6">A clean, predictable structure that scales with your site.</p> + </div> + </div> + </div> + <div class="col-lg-5"> + <div class="card"> + <div class="card-body"> + <h3 class="fs-5">{{ partial "inline-svg" (dict "src" "stack-2" "stroke-width" "1.5" "class" "text-muted me-2" ) }}Modern web stack</h3> + <p class="text-muted fs-6">Built on a fast, maintainable, and standards-compliant stack.</p> + </div> + </div> + </div> + <div class="col-lg-5"> + <div class="card"> + <div class="card-body"> + <h3 class="fs-5">{{ partial "inline-svg" (dict "src" "gauge" "stroke-width" "1.5" "class" "text-muted me-2" ) }}SEO & Performance</h3> + <p class="text-muted fs-6">Optimized defaults for fast, search-friendly websites.</p> + </div> + </div> + </div> + <div class="col-lg-5"> + <div class="card"> + <div class="card-body"> + <h3 class="fs-5">{{ partial "inline-svg" (dict "src" "article" "stroke-width" "1.5" "class" "text-muted me-2" ) }}Content sites</h3> + <p class="text-muted fs-6">Ideal for documentation, blogs, and other content-heavy sites.</p> + </div> + </div> + </div> + </div> + </div> + </section> +{{ end }} + +{{ define "sidebar-footer" }} + <section class="section-prefooter"> + <div class="container"> + <h2 class="text-center mt-lg-0">Open source, MIT licensed</h2> + <div class="row justify-content-center"> + <div class="col-lg-7 text-center"> + <p class="text-muted fs-6">Help keep Thulite sustainable by supporting maintenance, documentation, and long-term development.</p> + <a target="_blank" href="https://github.com/sponsors/thuliteio" class="icon-link">Sponsor Thulite{{ partial "inline-svg" (dict "src" "chevron-right" "stroke-width" "1.5" ) }}</a> + </div> + </div> + </div> + </section> + + <section class="section-footer"> + <div class="container"> + <h2 class="text-center mt-lg-0">FAQs</h2> + <div class="row justify-content-center g-4"> + <div class="col-lg-8"> + <details><summary>What is Thulite?</summary><span class="fs-6">Thulite is a web framework for building fast, content-focused websites with a strong focus on performance, SEO, and developer experience.</span></details> + <details><summary>Who is Thulite for?</summary><span class="fs-6">Thulite is designed for developers and teams building documentation sites, marketing sites, or content-driven platforms.</span></details> + <details><summary>What makes Thulite different?</summary><span class="fs-6">Thulite combines performance, SEO, and content workflows into one integrated system—so you don't need to piece together multiple tools.</span></details> + <details><summary>Do I need to configure everything myself?</summary><span class="fs-6">No. Thulite comes with sensible defaults, so you can get started quickly without extensive setup.</span></details> + <details><summary>How does Thulite handle content?</summary><span class="fs-6">Content is managed in Markdown, making it easy to write, version, and publish.</span></details> + <details><summary>Is Thulite suitable for production sites?</summary><span class="fs-6">Yes. Thulite is built for real-world use, with a focus on performance, scalability, and maintainability.</span></details> + </div> + </div> + </div> + </section> + + <section class="section-prefooter"> + <div class="container"> + <div class="row justify-content-center"> + <div class="col-13 col-lg-7 text-center"> + <h2 class="text-center mt-lg-0">Thulite, ready in minutes</h2> + </div> + </div> + <div class="row justify-content-center"> + <div class="col-lg-5 text-center"> + <p class="text-muted fs-6">Get your Thulite project up and running in minutes — minimal setup, maximum control.</p> + <a href="/start-here/getting-started/" class="icon-link">{{ i18n "get_started" }}{{ partial "inline-svg" (dict "src" "chevron-right" "stroke-width" "1.5" ) }}</a> + </div> + </div> + </div> + </section> + +{{ end }} diff --git a/layouts/list.html b/layouts/list.html new file mode 100644 index 000000000..2836d875d --- /dev/null +++ b/layouts/list.html @@ -0,0 +1,67 @@ +{{ define "main" }} +<div class="row justify-content-center"> + <div class="col-md-12 col-lg-10 col-xl-8"> + <article> + <!-- <h1 class="text-center">{{ if eq .CurrentSection .FirstSection }}{{ .Section | humanize }}{{ else }}{{ .Title }}{{ end }}</h1> --> + <h1 class="text-center">{{ .Title }}</h1> + {{ with .Content }}<div class="text-center">{{ . }}</div>{{ end }} + + <svg xmlns="http://www.w3.org/2000/svg" style="display:none;" aria-hidden="true" focusable="false"> + <symbol id="icon-arrow-right" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> + <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> + <path d="M5 12l14 0"></path> + <path d="M13 18l6 -6"></path> + <path d="M13 6l6 6"></path> + </symbol> + </svg> + + <div class="card-nav d-flex flex-column flex-sm-row"> + {{ $currentSection := .CurrentSection }} + {{ $cards := where .Site.RegularPages "Section" .Section }} + {{ $scratch := newScratch }} + {{ $scratch.Set "visibleCount" 0 }} + {{ range $page := $cards }} + {{ if in ($page.RelPermalink | string) $currentSection.RelPermalink }} + {{ $scratch.Add "visibleCount" 1 }} + {{ $visibleCount := $scratch.Get "visibleCount" }} + + <div class="card text-end w-50"> + <div class="card-body d-flex"> + <div class="d-flex flex-column me-auto text-start"> + <h5 class="card-title my-0"><a href="{{ $page.RelPermalink }}" class="stretched-link text-reset text-decoration-none">{{ $page.Params.title | title }}</a></h5> + <!-- <p class="card-text mt-1">{{ .Summary }}</p> --> + </div> + <div class="d-flex flex-column justify-content-center"> + <svg class="icon icon-tabler icon-tabler-arrow-right" width="20" height="20" viewBox="0 0 24 24" stroke="currentColor" fill="none" aria-hidden="true" focusable="false"> + <use href="#icon-arrow-right"></use> + </svg> + </div> + </div> + </div> + + {{ if eq (mod $visibleCount 2) 0 }} + </div><div class="card-nav d-flex flex-column flex-sm-row"> + {{ end }} + + {{ end }} + {{ end }} + </div> + + <!-- + <div class="card-list"> + {{ $currentSection := .CurrentSection }} + {{ range where .Site.RegularPages.ByTitle "Section" .Section }} + {{ if in (.RelPermalink | string) $currentSection.RelPermalink }} + <div class="card my-3"> + <div class="card-body"> + <a class="stretched-link" href="{{ .RelPermalink }}">{{ .Params.title | title }} →</a> + </div> + </div> + {{ end }} + {{ end }} + </div> + --> + </article> + </div> +</div> +{{ end }} diff --git a/layouts/single.html b/layouts/single.html new file mode 100644 index 000000000..3457faeed --- /dev/null +++ b/layouts/single.html @@ -0,0 +1,76 @@ +{{ define "main" }} + <div class="row flex-xl-nowrap"> + {{ if (in site.Params.doks.sectionNav .Section) -}} + <div class="col-lg-5 col-xl-4 docs-sidebar{{ if ne site.Params.doks.navbarSticky true }} docs-sidebar-top{{ end }}{{ if site.Params.doks.headerBar }} docs-sidebar-offset{{ end }} d-none d-lg-block"> + {{ if site.Params.doks.sectionSwitcher -}} + {{ partial "sidebar/section-switcher.html" . }} + {{ end -}} + {{ partial "sidebar/section-menu.html" . }} + </div> + {{ end -}} + {{ if and (eq site.Params.doks.containerBreakpoint "fluid") (in .Site.Params.mainSections .Type) }} + <div class="col container-fw d-lg-flex flex-lg-row justify-content-center mx-auto"> + {{ end }} + {{ if ne .Params.toc false -}} + <nav class="docs-toc{{ if ne site.Params.doks.navbarSticky true }} docs-toc-top{{ end }}{{ if site.Params.doks.headerBar }} docs-toc-offset{{ end }} d-none d-xl-block col-xl-3" aria-label="Secondary navigation"> + {{ partial "sidebar/docs-toc-desktop.html" . }} + </nav> + {{ end -}} + {{ if and (eq site.Params.doks.containerBreakpoint "fluid") .Params.toc -}} + <main class="docs-content col-lg-16 col-xl-9"> + {{ else -}} + <main class="docs-content col-lg-11 col-xl-9 mx-xl-auto"> + {{ end -}} + {{ if ne .Params.toc false -}} + <nav class="toc-mobile toc-mobile-sticky d-xl-none" aria-label="Quaternary navigation"> + {{ partial "sidebar/docs-toc-mobile.html" . }} + </nav> + {{ end -}} + {{ if site.Params.doks.breadcrumbTrail -}} + <!-- https://discourse.gohugo.io/t/breadcrumb-navigation-for-highly-nested-content/27359/6 --> + <nav aria-label="breadcrumb"> + <ol class="breadcrumb"> + {{ partial "main/breadcrumb" . -}} + <li class="breadcrumb-item active" aria-current="page">{{ .Title }}</li> + </ol> + </nav> + {{ end }} + <div class="page-header d-flex flex-row justify-content-between align-items-start"> + <div> + <h1>{{ .Title }}</h1> + <!-- <p class="lead">{{ .Params.lead | safeHTML }}</p> --> + </div> + {{ if site.Params.doks.aiButtons -}} + <div> + {{ partial "main/ai-buttons.html" . }} + </div> + {{ end -}} + </div> + {{ if site.Params.doks.headlineHash -}} + {{ partial "main/headline-hash" .Content }} + {{ else -}} + {{ .Content }} + {{ end -}} + <div class="page-footer-meta d-flex flex-column flex-md-row justify-content-between"> + {{ if site.Params.doks.lastMod -}} + {{ partial "main/last-modified.html" . }} + {{ end -}} + {{ if site.Params.doks.editPage -}} + {{ partial "main/edit-page.html" . }} + {{ end -}} + </div> + {{ partial "main/docs-navigation.html" . }} + <!-- + {{ if not .Site.Params.options.collapsibleSidebar -}} + {{ partial "main/docs-navigation.html" . }} + {{ else -}} + <div class="my-n3"></div> + {{ end -}} + --> + </main> + {{ if and (eq site.Params.doks.containerBreakpoint "fluid") (in .Site.Params.mainSections .Type) }} + </div> + {{ end }} + </div> + {{ partial "main/lvl0" . }} +{{ end }} diff --git a/netlify.toml b/netlify.toml index 2ebecfb71..d72e811fb 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,41 +1,46 @@ -[build] - publish = "dist" - functions = "functions" - [build.environment] - NODE_VERSION = "20.18.0" - NPM_VERSION = "10.8.2" + DART_SASS_VERSION = "1.97.3" + GO_VERSION = "1.26.0" + HUGO_VERSION = "0.156.0" + NODE_VERSION = "24.13.1" + NPM_VERSION = "11.8.0" + TZ = "Europe/Amsterdam" -[context.production] - command = "bun run build" +[build] + publish = "public" + command = """\ + git config core.quotepath false && \ + npm install && \ + hugo build --gc --minify --baseURL "${URL}" + """ [context.deploy-preview] - command = "bun run build" + command = """\ + git config core.quotepath false && \ + npm install && \ + hugo build --gc --minify --baseURL "$DEPLOY_PRIME_URL" + """ [context.branch-deploy] - command = "bun run build" - -[context.next] - command = "bun run build" + command = """\ + git config core.quotepath false && \ + npm install && \ + hugo build --gc --minify --baseURL "$DEPLOY_PRIME_URL" + """ + +[dev] + framework = "#custom" + command = "bun run dev" + targetPort = 1313 + port = 8888 + publish = "public" + autoLaunch = false # Redirects and rewrites — https://docs.netlify.com/routing/redirects/#syntax-for-the-netlify-configuration-file [[redirects]] - from = "/" - to = "/getting-started/" - status = 301 - force = true - -[[redirects]] - from = "/install/" - to = "/install/auto/" - status = 301 - force = true - -[[redirects]] - from = "https://docs.gethyas.com/*" - to = "https://docs.thulite.io/:splat" - status = 301 - force = true + from = "/*" + to = "/404/" + status = 404 # Custom headers — https://docs.netlify.com/routing/headers/#syntax-for-the-netlify-configuration-file [[headers]] @@ -44,12 +49,11 @@ Strict-Transport-Security = "max-age=31536000; includeSubDomains; preload" X-Content-Type-Options = "nosniff" X-XSS-Protection = "1; mode=block" - # Content-Security-Policy = "default-src 'self'; manifest-src 'self'; connect-src 'self'; font-src 'self'; img-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'" + # Content-Security-Policy = "default-src 'self'; manifest-src 'self'; connect-src 'self'; font-src 'self'; img-src 'self' https://avatars.githubusercontent.com data:; script-src 'self' 'nonce-dXNlcj0iaGVsbG8iLGRvbWFpbj0iaGVua3ZlcmxpbmRlLmNvbSIsZG9jdW1lbnQud3JpdGUodXNlcisiQCIrZG9tYWluKTs=' 'sha256-aWZ3y/RxbBYKHXH0z8+8ljrHG1mSBvyzSfxSMjBSaXk='; style-src 'self'" X-Frame-Options = "SAMEORIGIN" Referrer-Policy = "strict-origin" Permissions-Policy = "geolocation=(self), microphone=(), camera=()" Cache-Control= ''' public, - max-age=604800, - immutable''' + max-age=31536000''' Access-Control-Allow-Origin = "*" diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..6634fb4e6 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5262 @@ +{ + "name": "docs", + "version": "0.2.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "docs", + "version": "0.2.0", + "license": "MIT", + "dependencies": { + "@docsearch/css": "^4.6.3", + "@docsearch/js": "^4.6.3", + "@fontsource-variable/geist": "^5.2.8", + "@fontsource-variable/geist-mono": "^5.2.7", + "@tabler/icons": "^3.41.1", + "@thulite/doks-core": "^1.9.3", + "@thulite/images": "^3.3.4", + "@thulite/inline-svg": "^1.2.2", + "@thulite/seo": "^2.4.3", + "simple-icons": "^16.18.1", + "thulite": "^2.6.5" + }, + "devDependencies": { + "@changesets/changelog-github": "^0.6.0", + "@changesets/cli": "^2.31.0", + "prettier": "^3.8.3", + "vite": "^8.0.10" + }, + "engines": { + "node": ">=24.13.0" + } + }, + "node_modules/@babel/cli": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.28.6.tgz", + "integrity": "sha512-6EUNcuBbNkj08Oj4gAZ+BUU8yLCgKzgVX4gaTh09Ya2C8ICM4P+G30g4m3akRxSYAp3A/gnWchrNst7px4/nUQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.28", + "commander": "^6.2.0", + "convert-source-map": "^2.0.0", + "fs-readdir-recursive": "^1.1.0", + "glob": "^7.2.0", + "make-dir": "^2.1.0", + "slash": "^2.0.0" + }, + "bin": { + "babel": "bin/babel.js", + "babel-external-helpers": "bin/babel-external-helpers.js" + }, + "engines": { + "node": ">=6.9.0" + }, + "optionalDependencies": { + "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", + "chokidar": "^3.6.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/cli/node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.3.tgz", + "integrity": "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.3.tgz", + "integrity": "sha512-RpLYy2sb51oNLjuu1iD3bwBqCBWUzjO0ocp+iaCP/lJtb2CPLcnC2Fftw+4sAzaMELGeWTgExSKADbdo0GFVzA==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.29.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", + "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "regexpu-core": "^6.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz", + "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "debug": "^4.4.3", + "lodash.debounce": "^4.0.8", + "resolve": "^1.22.11" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz", + "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz", + "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": { + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/-/plugin-bugfix-safari-rest-destructuring-rhs-array-7.29.3.tgz", + "integrity": "sha512-SRS46DFR4HqzUzCVgi90/xMoL+zeBDBvWdKYXSEzh79kXswNFEglUpMKxR04//dPqwYXWUBJ3mpUd933ru9Kmg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz", + "integrity": "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz", + "integrity": "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", + "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz", + "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz", + "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-remap-async-to-generator": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz", + "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz", + "integrity": "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz", + "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz", + "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz", + "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/template": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz", + "integrity": "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz", + "integrity": "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz", + "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz", + "integrity": "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz", + "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", + "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.29.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.4.tgz", + "integrity": "sha512-N7QmZ0xRZfjHOfZeQLJjwgX2zS9pdGHSVl/cjSGlo4dXMqvurfxXDMKY4RqEKzPozV78VMcd0lxyG13mlbKc4w==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz", + "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz", + "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz", + "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz", + "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz", + "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz", + "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz", + "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz", + "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz", + "integrity": "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz", + "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz", + "integrity": "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz", + "integrity": "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.29.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.5.tgz", + "integrity": "sha512-/69t2aEzGKHD76DyLbHysF/QH2LJOB8iFnYO37unDTKBTubzcMRv0f3H5EiN1Q6ajOd/eB7dAInF0qdFVS06kA==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.3", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": "^7.29.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.28.6", + "@babel/plugin-syntax-import-attributes": "^7.28.6", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.29.0", + "@babel/plugin-transform-async-to-generator": "^7.28.6", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.6", + "@babel/plugin-transform-class-properties": "^7.28.6", + "@babel/plugin-transform-class-static-block": "^7.28.6", + "@babel/plugin-transform-classes": "^7.28.6", + "@babel/plugin-transform-computed-properties": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-dotall-regex": "^7.28.6", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.6", + "@babel/plugin-transform-exponentiation-operator": "^7.28.6", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.28.6", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.28.6", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.28.6", + "@babel/plugin-transform-modules-systemjs": "^7.29.4", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", + "@babel/plugin-transform-numeric-separator": "^7.28.6", + "@babel/plugin-transform-object-rest-spread": "^7.28.6", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.28.6", + "@babel/plugin-transform-optional-chaining": "^7.28.6", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.28.6", + "@babel/plugin-transform-private-property-in-object": "^7.28.6", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.29.0", + "@babel/plugin-transform-regexp-modifiers": "^7.28.6", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.28.6", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.28.6", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@changesets/apply-release-plan": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.1.1.tgz", + "integrity": "sha512-9qPCm/rLx/xoOFXIHGB229+4GOL76S4MC+7tyOuTsR6+1jYlfFDQORdvwR5hDA6y4FL2BPt3qpbcQIS+dW85LA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/config": "^3.1.4", + "@changesets/get-version-range-type": "^0.4.0", + "@changesets/git": "^3.0.4", + "@changesets/should-skip-package": "^0.1.2", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "detect-indent": "^6.0.0", + "fs-extra": "^7.0.1", + "lodash.startcase": "^4.4.0", + "outdent": "^0.5.0", + "prettier": "^2.7.1", + "resolve-from": "^5.0.0", + "semver": "^7.5.3" + } + }, + "node_modules/@changesets/apply-release-plan/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/@changesets/assemble-release-plan": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.10.tgz", + "integrity": "sha512-rSDcqdJ9KbVyjpBIuCidhvZNIiVt1XaIYp73ycVQRIA5n/j6wQaEk0ChRLMUQ1vkxZe51PTQ9OIhbg6HQMW45A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.1.4", + "@changesets/should-skip-package": "^0.1.2", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "semver": "^7.5.3" + } + }, + "node_modules/@changesets/changelog-git": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.2.1.tgz", + "integrity": "sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.1.0" + } + }, + "node_modules/@changesets/changelog-github": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@changesets/changelog-github/-/changelog-github-0.6.0.tgz", + "integrity": "sha512-wA2/y4hR/A1K411cCT75rz0d46Iezxp1WYRFoFJDIUpkQ6oDBAIUiU7BZkDCmYgz0NBl94X1lgcZO+mHoiHnFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/get-github-info": "^0.8.0", + "@changesets/types": "^6.1.0", + "dotenv": "^8.1.0" + } + }, + "node_modules/@changesets/cli": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.31.0.tgz", + "integrity": "sha512-AhI4enNTgHu2IZr6K4WZyf0EPch4XVMn1yOMFmCD9gsfBGqMYaHXls5HyDv6/CL5axVQABz68eG30eCtbr2wFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/apply-release-plan": "^7.1.1", + "@changesets/assemble-release-plan": "^6.0.10", + "@changesets/changelog-git": "^0.2.1", + "@changesets/config": "^3.1.4", + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.1.4", + "@changesets/get-release-plan": "^4.0.16", + "@changesets/git": "^3.0.4", + "@changesets/logger": "^0.1.1", + "@changesets/pre": "^2.0.2", + "@changesets/read": "^0.6.7", + "@changesets/should-skip-package": "^0.1.2", + "@changesets/types": "^6.1.0", + "@changesets/write": "^0.4.0", + "@inquirer/external-editor": "^1.0.2", + "@manypkg/get-packages": "^1.1.3", + "ansi-colors": "^4.1.3", + "enquirer": "^2.4.1", + "fs-extra": "^7.0.1", + "mri": "^1.2.0", + "package-manager-detector": "^0.2.0", + "picocolors": "^1.1.0", + "resolve-from": "^5.0.0", + "semver": "^7.5.3", + "spawndamnit": "^3.0.1", + "term-size": "^2.1.0" + }, + "bin": { + "changeset": "bin.js" + } + }, + "node_modules/@changesets/config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.1.4.tgz", + "integrity": "sha512-pf0bvD/v6WI2cRlZ6hzpjtZdSlXDXMAJ+Iz7xfFzV4ZxJ8OGGAON+1qYc99ZPrijnt4xp3VGG7eNvAOGS24V1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.1.4", + "@changesets/logger": "^0.1.1", + "@changesets/should-skip-package": "^0.1.2", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "fs-extra": "^7.0.1", + "micromatch": "^4.0.8" + } + }, + "node_modules/@changesets/errors": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz", + "integrity": "sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==", + "dev": true, + "license": "MIT", + "dependencies": { + "extendable-error": "^0.1.5" + } + }, + "node_modules/@changesets/get-dependents-graph": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.4.tgz", + "integrity": "sha512-ZsS00x6WvmHq3sQv8oCMwL0f/z3wbXCVuSVTJwCnnmbC/iBdNJGFx1EcbMG4PC6sXRyH69liM4A2WKXzn/kRPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "picocolors": "^1.1.0", + "semver": "^7.5.3" + } + }, + "node_modules/@changesets/get-github-info": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@changesets/get-github-info/-/get-github-info-0.8.0.tgz", + "integrity": "sha512-cRnC+xdF0JIik7coko3iUP9qbnfi1iJQ3sAa6dE+Tx3+ET8bjFEm63PA4WEohgjYcmsOikPHWzPsMWWiZmntOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dataloader": "^1.4.0", + "node-fetch": "^2.5.0" + } + }, + "node_modules/@changesets/get-release-plan": { + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.16.tgz", + "integrity": "sha512-2K5Om6CrMPm45rtvckfzWo7e9jOVCKLCnXia5eUPaURH7/LWzri7pK1TycdzAuAtehLkW7VPbWLCSExTHmiI6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/assemble-release-plan": "^6.0.10", + "@changesets/config": "^3.1.4", + "@changesets/pre": "^2.0.2", + "@changesets/read": "^0.6.7", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3" + } + }, + "node_modules/@changesets/get-version-range-type": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz", + "integrity": "sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@changesets/git": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.4.tgz", + "integrity": "sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/errors": "^0.2.0", + "@manypkg/get-packages": "^1.1.3", + "is-subdir": "^1.1.1", + "micromatch": "^4.0.8", + "spawndamnit": "^3.0.1" + } + }, + "node_modules/@changesets/logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.1.1.tgz", + "integrity": "sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.1.0" + } + }, + "node_modules/@changesets/parse": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.4.3.tgz", + "integrity": "sha512-ZDmNc53+dXdWEv7fqIUSgRQOLYoUom5Z40gmLgmATmYR9NbL6FJJHwakcCpzaeCy+1D0m0n7mT4jj2B/MQPl7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.1.0", + "js-yaml": "^4.1.1" + } + }, + "node_modules/@changesets/pre": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-2.0.2.tgz", + "integrity": "sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/errors": "^0.2.0", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "fs-extra": "^7.0.1" + } + }, + "node_modules/@changesets/read": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.7.tgz", + "integrity": "sha512-D1G4AUYGrBEk8vj8MGwf75k9GpN6XL3wg8i42P2jZZwFLXnlr2Pn7r9yuQNbaMCarP7ZQWNJbV6XLeysAIMhTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/git": "^3.0.4", + "@changesets/logger": "^0.1.1", + "@changesets/parse": "^0.4.3", + "@changesets/types": "^6.1.0", + "fs-extra": "^7.0.1", + "p-filter": "^2.1.0", + "picocolors": "^1.1.0" + } + }, + "node_modules/@changesets/should-skip-package": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.2.tgz", + "integrity": "sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3" + } + }, + "node_modules/@changesets/types": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-6.1.0.tgz", + "integrity": "sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@changesets/write": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.4.0.tgz", + "integrity": "sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.1.0", + "fs-extra": "^7.0.1", + "human-id": "^4.1.1", + "prettier": "^2.7.1" + } + }, + "node_modules/@changesets/write/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/@docsearch/css": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-4.6.3.tgz", + "integrity": "sha512-nlOwcXcsNAptQl4vlL4MA78qNJKO0Qlds5GuBjCoePgkebTXLSf8Qt1oyZ3YBshYupKXG9VRGEsk1zr23d+bzQ==", + "license": "MIT" + }, + "node_modules/@docsearch/js": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-4.6.3.tgz", + "integrity": "sha512-qUIX2b4Apew3tv4F0qhmgShsl/Lfw4m6mqv/5/5dWNxwTcDdLMp2s3YwZ+NMGh3IKCg0pBaXm7Q5VdyU5Rj+cQ==", + "license": "MIT" + }, + "node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@fontsource-variable/geist": { + "version": "5.2.8", + "resolved": "https://registry.npmjs.org/@fontsource-variable/geist/-/geist-5.2.8.tgz", + "integrity": "sha512-cJ6m9e+8MQ5dCYJsLylfZrgBh6KkG4bOLckB35Tr9J/EqdkEM6QllH5PxqP1dhTvFup+HtMRPuz9xOjxXJggxw==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fontsource-variable/geist-mono": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@fontsource-variable/geist-mono/-/geist-mono-5.2.7.tgz", + "integrity": "sha512-ZKlZ5sjtalb2TwXKs400mAGDlt/+2ENLNySPx0wTz3bP3mWARCsUW+rpxzZc7e05d2qGch70pItt3K4qttbIYA==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fullhuman/postcss-purgecss": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-8.0.0.tgz", + "integrity": "sha512-fSRaBGf6+DYdfQMxedWfnIW8FSYE1LBpgy16jpK1L2vNb1HgeBRRZ+UX4UokNmW7YEAwPdvwkKdYtlkYpH+Aqg==", + "license": "MIT", + "dependencies": { + "purgecss": "^8.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@manypkg/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.5.5", + "@types/node": "^12.7.1", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0" + } + }, + "node_modules/@manypkg/find-root/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@manypkg/find-root/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@manypkg/get-packages": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", + "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.5.5", + "@changesets/types": "^4.0.1", + "@manypkg/find-root": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "^11.0.0", + "read-yaml-file": "^1.1.0" + } + }, + "node_modules/@manypkg/get-packages/node_modules/@changesets/types": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", + "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@manypkg/get-packages/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", + "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@nicolo-ribaudo/chokidar-2": { + "version": "2.1.8-no-fsevents.3", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", + "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", + "license": "MIT", + "optional": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.130.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.130.0.tgz", + "integrity": "sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.1.tgz", + "integrity": "sha512-fJI3I0r3C3Oj/zdBCpaCmBRZYf07xpaq4yCfDDoSFm+beWNzbIl26puW8RraUdugoJw/95zerNOn6jasAhzSmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.1.tgz", + "integrity": "sha512-cKnAhWEsV7TPcA/5EAteDp6KcJZBQ2G+BqE7zayMMi7kMvwRsbv7WT9aOnn0WNl4SKEIf43vjS31iUPu80nzXg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.1.tgz", + "integrity": "sha512-YKrVwQjIRBPo+5G/u03wGjbdy4q7pyzCe93DK9VJ7zkVmeg8LJ7GbgsiHWdR4xSoe4CAXRD7Bcjgbtr64bkXNg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.1.tgz", + "integrity": "sha512-z/oBsREo46SsFqBwYtFe0kpJeBijAT48O/WXLI4suiCLBkr03RTtTJMCzSdDd2znlh8VJizL09XVkQgk8IZonw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.1.tgz", + "integrity": "sha512-ik8q7GM11zxvYxFc2PeDcT6TBvhCQMaUxfph/M5l9sKuTs/Sjg3L+Byw0F7w0ZVLBZmx30P+gG0ECzzN+MFcmQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.1.tgz", + "integrity": "sha512-QoSx2EkyrrdZ6kcyE8stqZ62t0Yra8Fs5ia9lOxJrh6TMQJK7gQKmscdTHf7pOXKREKrVwOtJcQG3qVSfc866A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.1.tgz", + "integrity": "sha512-uwNwFpwKeNiZawfAWBgg0VIztPTV3ihhh1vV334h9ivnNLorxnQMU6Fz8wG1Zb4Qh9LC1/MkcyT3YlDXG3Rsgg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.1.tgz", + "integrity": "sha512-zY1bul7OWr7DFBiJ++wofXvnr8B45ce3QsQUhKrIhXsygAh7bTkwyeM1bi1a2g5C/yC/N8TZyGDEoMfm/l9mpg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.1.tgz", + "integrity": "sha512-0frlsT/f4Ft6I7SMESTKnF3cZsdicQn1dCMkF/jT9wDLE+gGoiQfv1nmT9e+s7s/fekvvy6tZM2jHvI2tkbJDQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.1.tgz", + "integrity": "sha512-XABVmGp9Tg0WspTVvwduTc4fpqy6JnAUrSQe6OuyqD/03nI7r0O9OWUkMIwFrjKAIqolvqoA4ZrJppgwE0Gxmw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.1.tgz", + "integrity": "sha512-bV4fzswuzVcKD90o/VM6QqKxnxlDq0g2BISDLNVmxrnhpv1DDbyPhCIjYfvzYLV+MvkKKnQt2Q6AO86SEBULUQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.1.tgz", + "integrity": "sha512-/Mh0Zhq3OP7fVs0kcQHZP6lZEthMGTaSf8UBQYSFEZDWGXXlEC+nJ6EqenaK2t4LBXMe3A+K/G2BVXXdtOr4PQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.1.tgz", + "integrity": "sha512-+1xc9X45l8ufsBAm6Gjvx2qDRIY9lTVt0cgWNcJ+1gdhXvkbxePA60yRTwSTuXL09CMhyJmjpV7E3NoyxbqFQQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "^1.1.4" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.1.tgz", + "integrity": "sha512-1D+UqZdfnuR+Jy1GgMJwi85bD40H21uNmOPRWQhw4oRSuolZ/B5rixZ45DK2KXOTCvmVCecauWgEhbw8bI7tOw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.1.tgz", + "integrity": "sha512-INAycaWuhlOK3wk4mRHGsdgwYWmd9cChdPdE9bwWmy6rn9VqVNYNFGhOdXrofXUxwHIncSiPNb8tNm8knDVIeQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tabler/icons": { + "version": "3.44.0", + "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-3.44.0.tgz", + "integrity": "sha512-Wn0AOZG9sg0L+bjfMqq4eNhC6pQjIrk94LvvWYNYkY8KH8wC3YILRzQlrnVJc4FUeMxH/AK97QsYCX35H3LndA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/codecalm" + } + }, + "node_modules/@thulite/bootstrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@thulite/bootstrap/-/bootstrap-1.2.3.tgz", + "integrity": "sha512-230kXC1QwBESDP2ye7hlfVs6OHvLFKxlb9NJxjTLzMnE5cDGTjR3Tf+2PQftVERBmItpgXTL559ZE3zo6CKZSw==", + "license": "MIT", + "dependencies": { + "@popperjs/core": "^2.11.8", + "bootstrap": "^5.3.8" + }, + "engines": { + "node": ">=20.11.0" + } + }, + "node_modules/@thulite/core": { + "version": "1.5.9", + "resolved": "https://registry.npmjs.org/@thulite/core/-/core-1.5.9.tgz", + "integrity": "sha512-8L1/GALG1wL+GPm4H4JnMhp+XXyPslnClM9uNQz/hYU2R9kKSPm3ED46jU8r2yboc/DzL+1vTg9M3BPtGNEixg==", + "license": "MIT", + "dependencies": { + "@babel/cli": "^7.28.6", + "@babel/core": "^7.29.0", + "@babel/preset-env": "^7.29.0", + "@fullhuman/postcss-purgecss": "^8.0.0", + "autoprefixer": "^10.4.24", + "lazysizes": "^5.3.2", + "modern-css-reset": "^1.4.0", + "postcss": "^8.5.6", + "postcss-cli": "^11.0.1", + "quicklink": "^3.0.1" + }, + "engines": { + "node": ">=20.11.0" + } + }, + "node_modules/@thulite/doks-core": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@thulite/doks-core/-/doks-core-1.9.3.tgz", + "integrity": "sha512-K4BssyW7LwA19fz628kkdWb9p+DMq1LawmkegNEHkXnz7kecO3lVldk/Yn5mm9Ib6tv32ECA61BQxefDD9XokQ==", + "license": "MIT", + "dependencies": { + "@thulite/bootstrap": "^1.2.3", + "basiclightbox": "^5.0.4", + "clipboard": "^2.0.11", + "flexsearch": "^0.8.212" + }, + "engines": { + "node": ">=20.11.0" + } + }, + "node_modules/@thulite/images": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@thulite/images/-/images-3.3.4.tgz", + "integrity": "sha512-l7fYyBFiiZWgFkaBLkINDrzDZ+KXTxWnvhTVPPEysL+TexzEubTY7b5s00iQoFZsUg4m+6flbYxZSupydFrEHg==", + "license": "MIT", + "engines": { + "node": ">=20.11.0" + } + }, + "node_modules/@thulite/inline-svg": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@thulite/inline-svg/-/inline-svg-1.2.2.tgz", + "integrity": "sha512-jbxeXQjJT5HFuRufckEbEAoZjHJZCHwLY/rjJS6Lhc9ZZuMMp6QaOVk4pJa0Ey1UBsTJLcACyfm/K47oGJBluQ==", + "license": "MIT", + "engines": { + "node": ">=20.11.0" + } + }, + "node_modules/@thulite/seo": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@thulite/seo/-/seo-2.4.3.tgz", + "integrity": "sha512-1Y8PJXjGQBoB+VgcC3+RiPxGyI0VshBgufloOtPGlolB+K+qSMY9SPla1mL2HzkLbteb2W9+9CktS7CA/f90Rg==", + "license": "MIT", + "engines": { + "node": ">=20.11.0" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/autoprefixer": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz", + "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "caniuse-lite": "^1.0.30001787", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz", + "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.8", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz", + "integrity": "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.8", + "core-js-compat": "^3.48.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz", + "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.8" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.29", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.29.tgz", + "integrity": "sha512-Asa2krT+XTPZINCS+2QcyS8WTkObE77RwkydwF7h6DmnKqbvlalz93m/dnphUyCa6SWSP51VgtEUf2FN+gelFQ==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/basiclightbox": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/basiclightbox/-/basiclightbox-5.0.4.tgz", + "integrity": "sha512-EsuNWmfcFXWZOe0txKXsllYOC7bDpoaVLc4HHHlYKB/roymlZs+FBdLUU6rx2yPpnJZhulwheKdPjqr2k0+NGQ==", + "license": "MIT" + }, + "node_modules/better-path-resolve": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", + "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-windows": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bootstrap": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.8.tgz", + "integrity": "sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT", + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001792", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001792.tgz", + "integrity": "sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chardet": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/clipboard": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", + "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", + "license": "MIT", + "dependencies": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.49.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz", + "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dataloader": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-1.4.0.tgz", + "integrity": "sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "license": "MIT" + }, + "node_modules/dependency-graph": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz", + "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.355", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.355.tgz", + "integrity": "sha512-LUPZhKzZPYSPme1jEYohpkA+ybYCJztr1quAdBd7E7h3+VOBVcKkwwtBJu41nrjawrRzfb8mtMfzWozoaK0ZIQ==", + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extendable-error": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz", + "integrity": "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flexsearch": { + "version": "0.8.212", + "resolved": "https://registry.npmjs.org/flexsearch/-/flexsearch-0.8.212.tgz", + "integrity": "sha512-wSyJr1GUWoOOIISRu+X2IXiOcVfg9qqBRyCPRUdLMIGJqPzMo+jMRlvE83t14v1j0dRMEaBbER/adQjp6Du2pw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/ts-thomas" + }, + { + "type": "paypal", + "url": "https://www.paypal.com/donate/?hosted_button_id=GEVR88FC9BWRW" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/flexsearch" + }, + { + "type": "patreon", + "url": "https://patreon.com/user?u=96245532" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/ts-thomas" + } + ], + "license": "Apache-2.0" + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "license": "MIT" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", + "license": "MIT", + "dependencies": { + "delegate": "^3.1.2" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/hasown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/human-id": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/human-id/-/human-id-4.1.3.tgz", + "integrity": "sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q==", + "dev": true, + "license": "MIT", + "bin": { + "human-id": "dist/cli.js" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-subdir": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", + "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "better-path-resolve": "1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/lazysizes": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/lazysizes/-/lazysizes-5.3.2.tgz", + "integrity": "sha512-22UzWP+Vedi/sMeOr8O7FWimRVtiNJV2HCa+V8+peZOw6QbswN9k58VUhd7i6iK5bw5QkYrF01LJbeJe0PV8jg==", + "license": "MIT" + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" + }, + "node_modules/lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/modern-css-reset": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/modern-css-reset/-/modern-css-reset-1.4.0.tgz", + "integrity": "sha512-0crZmSFmrxkI7159rvQWjpDhy0u4+Awg/iOycJdlVn0RSeft/a+6BrQHR3IqvmdK25sqt0o6Z5Ap7cWgUee2rw==", + "license": "MIT" + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-releases": { + "version": "2.0.44", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.44.tgz", + "integrity": "sha512-5WUyunoPMsvvEhS8AxHtRzP+oA8UCkJ7YRxatWKjngndhDGLiqEVAQKWjFAiAiuL8zMRGzGSJxFnLetoa43qGQ==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/outdent": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz", + "integrity": "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/p-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", + "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-map": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-manager-detector": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz", + "integrity": "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "quansync": "^0.2.7" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.3.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.6.tgz", + "integrity": "sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss": { + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.14.tgz", + "integrity": "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-cli": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.1.tgz", + "integrity": "sha512-0UnkNPSayHKRe/tc2YGW6XnSqqOA9eqpiRMgRlV1S6HdGi16vwJBx7lviARzbV1HpQHqLLRH3o8vTcB0cLc+5g==", + "license": "MIT", + "dependencies": { + "chokidar": "^3.3.0", + "dependency-graph": "^1.0.0", + "fs-extra": "^11.0.0", + "picocolors": "^1.0.0", + "postcss-load-config": "^5.0.0", + "postcss-reporter": "^7.0.0", + "pretty-hrtime": "^1.0.3", + "read-cache": "^1.0.0", + "slash": "^5.0.0", + "tinyglobby": "^0.2.12", + "yargs": "^17.0.0" + }, + "bin": { + "postcss": "index.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-cli/node_modules/fs-extra": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.5.tgz", + "integrity": "sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/postcss-cli/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/postcss-cli/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/postcss-cli/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/postcss-load-config": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-5.1.0.tgz", + "integrity": "sha512-G5AJ+IX0aD0dygOE0yFZQ/huFFMSNneyfp0e3/bT05a8OfPC5FUoZRPfGijUdGOJNMewJiwzcHJXFafFzeKFVA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1", + "yaml": "^2.4.2" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + } + } + }, + "node_modules/postcss-reporter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.1.0.tgz", + "integrity": "sha512-/eoEylGWyy6/DOiMP5lmFRdmDKThqgn7D6hP2dXKJI/0rJSO1ADFNngZfDzxL0YAxFvws+Rtpuji1YIHj4mySA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "thenby": "^1.3.4" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/prettier": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", + "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/purgecss": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-8.0.0.tgz", + "integrity": "sha512-QFJyps9y5oHeXnNA3Ql1EaAqWBivNwQn19Pw1lt9RxfB+4e+bIyqCyuombk79D6Fxe+lPXggVfI1WtRGEBwgbQ==", + "license": "MIT", + "dependencies": { + "commander": "^12.1.0", + "fast-glob": "^3.3.2", + "postcss": "^8.4.47", + "postcss-selector-parser": "^7.0.0" + }, + "bin": { + "purgecss": "bin/purgecss.js" + } + }, + "node_modules/purgecss/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/quansync": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", + "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quicklink": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/quicklink/-/quicklink-3.0.1.tgz", + "integrity": "sha512-sAMEpcCUCzjet214qVCm1hzxeF0YLo4wyphkIifeemmofk1vMrc5Sg/iNH32SKAIXqYvO6SPZgEP8obi9Ait9g==", + "license": "Apache-2.0", + "dependencies": { + "route-manifest": "^1.0.0", + "throttles": "^1.0.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19", + "react-dom": "^16.8.0 || ^17 || ^18 || ^19" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/read-cache/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-yaml-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz", + "integrity": "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.5", + "js-yaml": "^3.6.1", + "pify": "^4.0.1", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/read-yaml-file/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/read-yaml-file/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regexparam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexparam/-/regexparam-1.3.0.tgz", + "integrity": "sha512-6IQpFBv6e5vz1QAqI+V4k8P2e/3gRrqfCJ9FI+O1FLQTO+Uz6RXZEZOPmTJ6hlGj7gkERzY5BRCv09whKP96/g==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/regexpu-core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.2", + "regjsgen": "^0.8.0", + "regjsparser": "^0.13.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.2.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.1.tgz", + "integrity": "sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==", + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.1.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rolldown": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.1.tgz", + "integrity": "sha512-X0KQHljNnEkWNqqiz9zJrGunh1B0HgOxLXvnFpCOcadzcy5qohZ3tqMEUg00vncoRovXuK3ZqCT9KnnKzoInFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.130.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.1", + "@rolldown/binding-darwin-arm64": "1.0.1", + "@rolldown/binding-darwin-x64": "1.0.1", + "@rolldown/binding-freebsd-x64": "1.0.1", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.1", + "@rolldown/binding-linux-arm64-gnu": "1.0.1", + "@rolldown/binding-linux-arm64-musl": "1.0.1", + "@rolldown/binding-linux-ppc64-gnu": "1.0.1", + "@rolldown/binding-linux-s390x-gnu": "1.0.1", + "@rolldown/binding-linux-x64-gnu": "1.0.1", + "@rolldown/binding-linux-x64-musl": "1.0.1", + "@rolldown/binding-openharmony-arm64": "1.0.1", + "@rolldown/binding-wasm32-wasi": "1.0.1", + "@rolldown/binding-win32-arm64-msvc": "1.0.1", + "@rolldown/binding-win32-x64-msvc": "1.0.1" + } + }, + "node_modules/route-manifest": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/route-manifest/-/route-manifest-1.0.0.tgz", + "integrity": "sha512-qn0xJr4nnF4caj0erOLLAHYiNyzqhzpUbgDQcEHrmBoG4sWCDLnIXLH7VccNSxe9cWgbP2Kw/OjME+eH3CeRSA==", + "license": "MIT", + "dependencies": { + "regexparam": "^1.3.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-icons": { + "version": "16.19.0", + "resolved": "https://registry.npmjs.org/simple-icons/-/simple-icons-16.19.0.tgz", + "integrity": "sha512-muxcz/FDvWFPrKJdsjaz79qsBjtZeVKUVIFl7wLVOwb+yqAag8FPe8+hFlMVRnmAXYQIm4eUDDm2+dhOj0cFgQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/simple-icons" + }, + { + "type": "github", + "url": "https://github.com/sponsors/simple-icons" + } + ], + "license": "CC0-1.0", + "engines": { + "node": ">=0.12.18" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spawndamnit": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-3.0.1.tgz", + "integrity": "sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==", + "dev": true, + "license": "SEE LICENSE IN LICENSE", + "dependencies": { + "cross-spawn": "^7.0.5", + "signal-exit": "^4.0.1" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/thenby": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.4.1.tgz", + "integrity": "sha512-D5a/bO0KdalOE3q8MlrRmSxjbKZHT3MQmXkJP+r97Vw8MMwOZKOwUSEyTtK7eSMj2y0kyAjpYMRMZmmLw1FtNQ==", + "license": "Apache-2.0" + }, + "node_modules/throttles": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/throttles/-/throttles-1.0.1.tgz", + "integrity": "sha512-fab7Xg+zELr9KOv4fkaBoe/b3L0GMGLd0IBSCn16GoE/Qx6/OfCr1eGNyEcDU2pUA79qQfZ8kPQWlRuok4YwTw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/thulite": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/thulite/-/thulite-2.6.5.tgz", + "integrity": "sha512-TmKAwxv7lWVBau7EE6aJhh1swdm+d1Qo50ZkFcNo+WQfXAEoXsvPc2M7f+DxgTErYg3SN1Qy9Ael8dgsX/npiQ==", + "license": "MIT", + "dependencies": { + "@thulite/core": "^1.5.9" + }, + "engines": { + "node": ">=20.11.0" + } + }, + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/vite": { + "version": "8.0.13", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.13.tgz", + "integrity": "sha512-MFtjBYgzmSxmgA4RAfjIyXWpGe1oALnjgUTzzV7QLx/TKxCzjtMH6Fd9/eVK+5Fg1qNoz5VAwsmMs/NofrmJvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.14", + "rolldown": "1.0.1", + "tinyglobby": "^0.2.16" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.1.18", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + } + } +} diff --git a/package.json b/package.json index ba0b8d05b..16c036a37 100644 --- a/package.json +++ b/package.json @@ -1,38 +1,47 @@ { "name": "docs", "version": "0.2.0", - "description": "Thulite documentation", + "description": "Doks theme", "author": "Thulite", - "license": "UNLICENSED", - "type": "module", + "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/thuliteio/docs.git" + "url": "https://github.com/thuliteio/doks.git" }, "scripts": { - "dev": "astro dev", - "start": "astro dev", - "build": "astro build", - "preview": "astro preview", - "astro": "astro" + "create": "hugo new", + "dev": "hugo server --disableFastRender --noHTTPCache", + "format": "prettier **/** -w -c", + "build": "hugo --minify --gc", + "preview": "vite preview --outDir public", + "changeset": "changeset", + "changeset:status": "changeset status --verbose", + "changeset:version": "changeset version" }, "dependencies": { - "@astrojs/sitemap": "3.2.1", - "@astrojs/starlight": "^0.29.2", - "@astrojs/starlight-docsearch": "^0.3.0", - "astro": "^4.16.16", - "sharp": "^0.33.5" + "@docsearch/css": "^4.6.3", + "@docsearch/js": "^4.6.3", + "@fontsource-variable/geist": "^5.2.8", + "@fontsource-variable/geist-mono": "^5.2.7", + "@tabler/icons": "^3.41.1", + "@thulite/doks-core": "^1.9.3", + "@thulite/images": "^3.3.4", + "@thulite/inline-svg": "^1.2.2", + "@thulite/seo": "^2.4.3", + "simple-icons": "^16.18.1", + "thulite": "^2.6.5" + }, + "overrides": { + "minimatch": "^10.2.4", + "glob": "^13.0.6" }, "devDependencies": { - "@changesets/changelog-github": "^0.5.0", - "@changesets/cli": "^2.27.10", - "hast-util-from-html": "^2.0.2", - "hast-util-to-string": "^3.0.0", - "hastscript": "^9.0.0", - "rehype": "^13.0.1", - "unist-util-visit": "^5.0.0" + "@changesets/changelog-github": "^0.6.0", + "@changesets/cli": "^2.31.0", + "prettier": "^3.8.3", + "vite": "^8.0.10" }, "engines": { - "node": ">=20.11.0" + "node": ">=24.13.0" } -} \ No newline at end of file +} diff --git a/public/cover-docs.png b/public/cover-docs.png deleted file mode 100644 index 676bc944c..000000000 Binary files a/public/cover-docs.png and /dev/null differ diff --git a/public/favicon.svg b/public/favicon.svg index 9d9ae7d92..7df7427aa 100644 --- a/public/favicon.svg +++ b/public/favicon.svg @@ -1 +1,4 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M32.938 15.651C32.792 15.26 32.418 15 32 15H19.925L26.89 1.458c.219-.426.106-.947-.271-1.243C26.437.071 26.218 0 26 0c-.233 0-.466.082-.653.243L18 6.588 3.347 19.243c-.316.273-.43.714-.284 1.105S3.582 21 4 21h12.075L9.11 34.542c-.219.426-.106.947.271 1.243.182.144.401.215.619.215.233 0 .466-.082.653-.243L18 29.412l14.653-12.655c.317-.273.43-.714.285-1.106z"/></svg> \ No newline at end of file +<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg"> +<rect width="512" height="512" fill="#111111"/> +<rect x="153" y="121" width="206" height="270" stroke="white" stroke-width="50"/> +</svg> diff --git a/public/logos/alpine-js.svg b/public/logos/alpine-js.svg deleted file mode 100644 index 5a2fbb613..000000000 --- a/public/logos/alpine-js.svg +++ /dev/null @@ -1 +0,0 @@ -<svg viewBox="0 0 45.116 22.806" xmlns="http://www.w3.org/2000/svg" width="2500" height="1264"><g opacity=".8"><path d="M33.71 0L11.207 22.693l.113.113h22.586l11.21-11.304z" fill="#d8dee9"/><path d="M11.405 0l22.578 22.769-.039.037H11.209L0 11.502z" fill="#8ac0cf"/></g></svg> \ No newline at end of file diff --git a/public/logos/appwriteio.svg b/public/logos/appwriteio.svg deleted file mode 100644 index 5d962aeca..000000000 --- a/public/logos/appwriteio.svg +++ /dev/null @@ -1,4 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" fill="#F02E65" viewBox="0 0 384 290"> - <path fill-rule="evenodd" d="M245.43 251.19c-19.47 0-37.71-5.22-53.42-14.33a106.53 106.53 0 0 1-117.57-7.17A106.59 106.59 0 0 1 84.56 52.7a106.57 106.57 0 0 1 107.46-.33 106.09 106.09 0 0 1 53.4-14.33C304.3 38.04 352 85.76 352 144.62c0 58.85-47.71 106.57-106.57 106.57ZM174.18 65.36l.03-.03a86.9 86.9 0 1 0 40.62 37.51 87.25 87.25 0 0 0-40.66-37.48Z" clip-rule="evenodd"/> - <path d="M141.49 107.74c-.13.32-1.76 6.72-3.52 14.31-1.82 7.6-4.7 19.57-6.33 26.66-3.14 12.99-5.02 21.52-5.02 22.65 0 .31 1.94.56 4.33.56h4.33l1.94-8.66c1.13-4.7 3.64-15.49 5.65-23.96 2-8.47 4.45-18.76 5.4-22.9.93-4.14 1.87-7.9 2.06-8.34.2-.56-.88-.75-4.14-.75-2.44 0-4.58.19-4.7.43Zm-33.7 27.17-5.77 6.27 1.7 2.01a184.5 184.5 0 0 0 5.7 6.28l4.02 4.26h11.42l-5.4-5.84c-2.94-3.13-5.39-6.14-5.39-6.52 0-.44 2.26-3.26 5.02-6.27 2.76-3.07 5.02-5.71 5.02-6.03 0-.25-2.39-.43-5.27-.43h-5.2l-5.84 6.27Zm43.92-5.9c0 .2 1.07 1.38 2.38 2.7 4.9 4.9 8.35 9.04 8.16 9.85-.12.44-2.5 3.39-5.4 6.46l-5.2 5.7h5.84l5.83-.05 5.33-5.84c2.95-3.26 5.33-6.15 5.33-6.52 0-.31-2.5-3.26-5.64-6.59l-5.65-6.08h-5.46c-3.07 0-5.52.18-5.52.37Z"/> -</svg> diff --git a/public/logos/astro-image.svg b/public/logos/astro-image.svg deleted file mode 100644 index 2442be90b..000000000 --- a/public/logos/astro-image.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" fill="#fff" viewBox="0 0 24 24"> - <path fill-rule="evenodd" d="M19.3 4.5H4.7a.3.3 0 0 0-.2.3v14.4c0 .2.1.3.3.3h.1l9.9-9.8a1.8 1.8 0 0 1 2.4 0l2.3 2.2V4.7a.3.3 0 0 0-.2-.2zm.2 9.6-3.3-3.4a.3.3 0 0 0-.4 0l-8.7 8.8h12.2a.3.3 0 0 0 .2-.3v-5.1zM4.7 3A1.8 1.8 0 0 0 3 4.8v14.4c0 1 .8 1.8 1.8 1.8h14.4a1.8 1.8 0 0 0 1.8-1.8V4.8A1.8 1.8 0 0 0 19.2 3H4.8zm3.8 6.5a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm0 1.5a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5z"/> -</svg> diff --git a/public/logos/aws.svg b/public/logos/aws.svg deleted file mode 100644 index a216432a5..000000000 --- a/public/logos/aws.svg +++ /dev/null @@ -1 +0,0 @@ -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 304 182" style="enable-background:new 0 0 304 182" xml:space="preserve"><style>.st1{fill-rule:evenodd;clip-rule:evenodd;fill:#f90}</style><path d="M86.4 66.4c0 3.7.4 6.7 1.1 8.9.8 2.2 1.8 4.6 3.2 7.2.5.8.7 1.6.7 2.3 0 1-.6 2-1.9 3L83.2 92c-.9.6-1.8.9-2.6.9-1 0-2-.5-3-1.4-1.4-1.5-2.6-3.1-3.6-4.7-1-1.7-2-3.6-3.1-5.9-7.8 9.2-17.6 13.8-29.4 13.8-8.4 0-15.1-2.4-20-7.2-4.9-4.8-7.4-11.2-7.4-19.2 0-8.5 3-15.4 9.1-20.6 6.1-5.2 14.2-7.8 24.5-7.8 3.4 0 6.9.3 10.6.8 3.7.5 7.5 1.3 11.5 2.2v-7.3c0-7.6-1.6-12.9-4.7-16-3.2-3.1-8.6-4.6-16.3-4.6-3.5 0-7.1.4-10.8 1.3-3.7.9-7.3 2-10.8 3.4-1.6.7-2.8 1.1-3.5 1.3-.7.2-1.2.3-1.6.3-1.4 0-2.1-1-2.1-3.1v-4.9c0-1.6.2-2.8.7-3.5.5-.7 1.4-1.4 2.8-2.1 3.5-1.8 7.7-3.3 12.6-4.5C41 1.9 46.2 1.3 51.7 1.3c11.9 0 20.6 2.7 26.2 8.1 5.5 5.4 8.3 13.6 8.3 24.6v32.4zM45.8 81.6c3.3 0 6.7-.6 10.3-1.8 3.6-1.2 6.8-3.4 9.5-6.4 1.6-1.9 2.8-4 3.4-6.4.6-2.4 1-5.3 1-8.7v-4.2c-2.9-.7-6-1.3-9.2-1.7-3.2-.4-6.3-.6-9.4-.6-6.7 0-11.6 1.3-14.9 4-3.3 2.7-4.9 6.5-4.9 11.5 0 4.7 1.2 8.2 3.7 10.6 2.4 2.5 5.9 3.7 10.5 3.7zm80.3 10.8c-1.8 0-3-.3-3.8-1-.8-.6-1.5-2-2.1-3.9L96.7 10.2c-.6-2-.9-3.3-.9-4 0-1.6.8-2.5 2.4-2.5h9.8c1.9 0 3.2.3 3.9 1 .8.6 1.4 2 2 3.9l16.8 66.2 15.6-66.2c.5-2 1.1-3.3 1.9-3.9.8-.6 2.2-1 4-1h8c1.9 0 3.2.3 4 1 .8.6 1.5 2 1.9 3.9l15.8 67 17.3-67c.6-2 1.3-3.3 2-3.9.8-.6 2.1-1 3.9-1h9.3c1.6 0 2.5.8 2.5 2.5 0 .5-.1 1-.2 1.6-.1.6-.3 1.4-.7 2.5l-24.1 77.3c-.6 2-1.3 3.3-2.1 3.9-.8.6-2.1 1-3.8 1h-8.6c-1.9 0-3.2-.3-4-1-.8-.7-1.5-2-1.9-4L156 23l-15.4 64.4c-.5 2-1.1 3.3-1.9 4-.8.7-2.2 1-4 1h-8.6zm128.5 2.7c-5.2 0-10.4-.6-15.4-1.8-5-1.2-8.9-2.5-11.5-4-1.6-.9-2.7-1.9-3.1-2.8-.4-.9-.6-1.9-.6-2.8v-5.1c0-2.1.8-3.1 2.3-3.1.6 0 1.2.1 1.8.3.6.2 1.5.6 2.5 1 3.4 1.5 7.1 2.7 11 3.5 4 .8 7.9 1.2 11.9 1.2 6.3 0 11.2-1.1 14.6-3.3 3.4-2.2 5.2-5.4 5.2-9.5 0-2.8-.9-5.1-2.7-7-1.8-1.9-5.2-3.6-10.1-5.2L246 52c-7.3-2.3-12.7-5.7-16-10.2-3.3-4.4-5-9.3-5-14.5 0-4.2.9-7.9 2.7-11.1 1.8-3.2 4.2-6 7.2-8.2 3-2.3 6.4-4 10.4-5.2 4-1.2 8.2-1.7 12.6-1.7 2.2 0 4.5.1 6.7.4 2.3.3 4.4.7 6.5 1.1 2 .5 3.9 1 5.7 1.6 1.8.6 3.2 1.2 4.2 1.8 1.4.8 2.4 1.6 3 2.5.6.8.9 1.9.9 3.3v4.7c0 2.1-.8 3.2-2.3 3.2-.8 0-2.1-.4-3.8-1.2-5.7-2.6-12.1-3.9-19.2-3.9-5.7 0-10.2.9-13.3 2.8-3.1 1.9-4.7 4.8-4.7 8.9 0 2.8 1 5.2 3 7.1 2 1.9 5.7 3.8 11 5.5l14.2 4.5c7.2 2.3 12.4 5.5 15.5 9.6 3.1 4.1 4.6 8.8 4.6 14 0 4.3-.9 8.2-2.6 11.6-1.8 3.4-4.2 6.4-7.3 8.8-3.1 2.5-6.8 4.3-11.1 5.6-4.5 1.4-9.2 2.1-14.3 2.1z" style="fill:#fff"/><path class="st1" d="M273.5 143.7c-32.9 24.3-80.7 37.2-121.8 37.2-57.6 0-109.5-21.3-148.7-56.7-3.1-2.8-.3-6.6 3.4-4.4 42.4 24.6 94.7 39.5 148.8 39.5 36.5 0 76.6-7.6 113.5-23.2 5.5-2.5 10.2 3.6 4.8 7.6z"/><path class="st1" d="M287.2 128.1c-4.2-5.4-27.8-2.6-38.5-1.3-3.2.4-3.7-2.4-.8-4.5 18.8-13.2 49.7-9.4 53.3-5 3.6 4.5-1 35.4-18.6 50.2-2.7 2.3-5.3 1.1-4.1-1.9 4-9.9 12.9-32.2 8.7-37.5z"/></svg> diff --git a/public/logos/bootstrap.svg b/public/logos/bootstrap.svg deleted file mode 100644 index a9fb5c7c3..000000000 --- a/public/logos/bootstrap.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 408"><defs><linearGradient id="bs-logo-a" x1="76.079" x2="523.48" y1="10.798" y2="365.945" gradientUnits="userSpaceOnUse"><stop stop-color="#9013fe"/><stop offset="1" stop-color="#6610f2"/></linearGradient><linearGradient id="bs-logo-b" x1="193.508" x2="293.514" y1="109.74" y2="278.872" gradientUnits="userSpaceOnUse"><stop stop-color="#fff"/><stop offset="1" stop-color="#f1e5fc"/></linearGradient><filter xmlns="http://www.w3.org/2000/svg" id="bs-logo-c" width="197" height="249" x="161.901" y="83.457" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset dy="4"/><feGaussianBlur stdDeviation="8"/><feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0"/><feBlend in2="BackgroundImageFix" result="effect1_dropShadow"/><feBlend in="SourceGraphic" in2="effect1_dropShadow" result="shape"/></filter></defs><path fill="url(#bs-logo-a)" d="M56.481 53.32C55.515 25.58 77.128 0 106.342 0h299.353c29.214 0 50.827 25.58 49.861 53.32-.928 26.647.277 61.165 8.964 89.31 8.715 28.232 23.411 46.077 47.48 48.37v26c-24.069 2.293-38.765 20.138-47.48 48.37-8.687 28.145-9.892 62.663-8.964 89.311.966 27.739-20.647 53.319-49.861 53.319H106.342c-29.214 0-50.827-25.58-49.86-53.319.927-26.648-.278-61.166-8.966-89.311C38.802 237.138 24.07 219.293 0 217v-26c24.069-2.293 38.802-20.138 47.516-48.37 8.688-28.145 9.893-62.663 8.965-89.31z"/><path fill="url(#bs-logo-b)" filter="url(#bs-logo-c)" stroke="#fff" d="M267.103 312.457c47.297 0 75.798-23.158 75.798-61.355 0-28.873-20.336-49.776-50.532-53.085v-1.203c22.185-3.609 39.594-24.211 39.594-47.219 0-32.783-25.882-54.138-65.322-54.138h-88.74v217h89.202zm-54.692-189.48h45.911c24.958 0 39.131 11.128 39.131 31.279 0 21.505-16.484 33.535-46.372 33.535h-38.67v-64.814zm0 161.961v-71.431h45.602c32.661 0 49.608 12.03 49.608 35.49 0 23.459-16.484 35.941-47.605 35.941h-47.605z"/></svg> \ No newline at end of file diff --git a/public/logos/buddy.svg b/public/logos/buddy.svg deleted file mode 100644 index c9275f7d0..000000000 --- a/public/logos/buddy.svg +++ /dev/null @@ -1,12 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" class="h-12 lg:h-8 lg:mr-2 mb-5 lg:mb-0" clip-rule="evenodd" viewBox="0 0 36 41"> - <path fill="#0da7fe" d="M16.19 1.03a3.5 3.5 0 0 1 3.5 0l14.25 8.23a3.5 3.5 0 0 1 1.75 3.03v16.45a3.5 3.5 0 0 1-1.75 3.04L19.69 40a3.5 3.5 0 0 1-3.5 0 66030.71 66030.71 0 0 0-14.25-8.22A3.5 3.5 0 0 1 .2 28.73V12.3c0-1.25.67-2.4 1.75-3.03L16.2 1.03z"/> - <path fill="#1a67fd" d="m0 30.77 9.44-10.25L17.97 41 0 30.77z"/> - <path fill="#0da7fe" d="M9.44 20.52.12 10.2 0 30.77l9.44-10.25z"/> - <path fill="#05bbff" d="M9.44 20.52 17.97.02.12 10.2l9.32 10.32z"/> - <path fill="#00c9ff" d="M17.97.02 35.7 30.76 9.44 20.52"/> - <path fill="#1a86fd" d="M17.97 41.05 35.7 30.77 9.44 20.52l8.53 20.52z"/> - <path fill="#05bbff" d="M35.71 30.76V10.27L17.97.02 35.7 30.76z"/> - <path fill="#1a67fd" fill-opacity=".5" d="m15.38 12.45 8.59 8.59-8.6 8.6-2.25-2.26 6.34-6.34-6.34-6.34 2.26-2.25z"/> - <path fill="#d6ffff" d="m23.97 20.03-2.25-2.25-8.6 8.6 2.25 2.25 8.6-8.6z"/> - <path fill="#d6ffff" d="m15.38 11.43-2.26 2.26 8.6 8.6 2.25-2.26-8.6-8.6z"/> -</svg> diff --git a/public/logos/builderio.svg b/public/logos/builderio.svg deleted file mode 100644 index 457d4a818..000000000 --- a/public/logos/builderio.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 400 400"> - <path fill="#fd6a3c" d="m32.3 366-1.7 1.7a18.5 18.5 0 0 0-4.1 20.6 19.5 19.5 0 0 0 18 11.7h217.1c109.9 0 155.2-137.3 66.6-200l-1.1.8L32.3 366"/> - <path fill="#18b5f4" d="m32.3 34 294.8 165.2 1.1.8c88.5-62.7 43.3-200-66.6-200H44.5a19.8 19.8 0 0 0-18 11.7 18.3 18.3 0 0 0 4.1 20.6l1.7 1.7"/> - <path fill="#a97ff2" d="m32.5 366 294.8-165.2 1.1-.8-1.1-.8L32.5 34a233.4 233.4 0 0 1 69.7 166c0 62.1-25 121.8-69.7 166z"/> -</svg> diff --git a/public/logos/buttercms.svg b/public/logos/buttercms.svg deleted file mode 100644 index 2262ffff0..000000000 --- a/public/logos/buttercms.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 136 95.7"> - <path fill="#fff" d="M41.5 37.7c.6 0 1.1-.1 1.7-.4l17-9.1c1.7-.9 2.3-3 1.4-4.7-.9-1.7-3-2.3-4.7-1.4l-17 9.1c-1.7.9-2.3 3-1.4 4.7a3.3 3.3 0 0 0 3 1.8m25 13a3 3 0 0 0 1.6-.4l27-14.2a3.3 3.3 0 0 0 1.5-4.5v-.1c-.9-1.7-3-2.3-4.7-1.4l-27 14.2a3.3 3.3 0 0 0-1.5 4.5v.1a3.5 3.5 0 0 0 3.1 1.8m1.5 45a17 17 0 0 1-7.6-1.8L1.8 61.7A3.5 3.5 0 0 1 0 58.6V32.9c.1-1.2.5-2.3 1.2-3.3.8-1.1 1.8-2 3-2.6L50.5 1.8a17 17 0 0 1 15.2 0l19.8 10.8 2.4-1.3a17 17 0 0 1 15.2 0L131.7 27c1.9.9 3.4 2.6 4 4.6.2.4.2.8.2 1.3v25.4c0 1.3-.7 2.4-1.8 3L75.6 93.9a17 17 0 0 1-7.6 1.8zM6.9 41v15.6l56.8 31.2c2.8 1.2 5.9 1.2 8.6 0l56.8-31.5V41L75.6 70.2a17 17 0 0 1-15.2 0L6.9 41zM58.1 7c-1.5 0-3 .3-4.3.9L7.5 33.1l-.3.2.3.2 56.2 30.6a11 11 0 0 0 8.7 0l56.1-30.6.3-.2-.3-.2-28.8-15.7a11 11 0 0 0-8.7 0l-5.6 3.1-23-12.6c-1.4-.7-2.8-1-4.3-.9z"/> -</svg> diff --git a/public/logos/cabin.svg b/public/logos/cabin.svg deleted file mode 100644 index 13ef5c44e..000000000 --- a/public/logos/cabin.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg viewBox="0 0 82 103" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M44.167 103C48.8062 103 53.114 102.336 57.0905 101.008C61.0669 99.6795 64.641 97.8295 67.8127 95.4577C70.9844 93.0859 73.7063 90.3109 75.9786 87.1327C78.2508 83.9545 80.0024 80.5628 81.2332 76.9577L73.1383 72.2615C70.9607 77.6692 67.7653 81.9622 63.5522 85.1404C59.339 88.3186 54.2028 89.9077 48.1434 89.9077C44.8297 89.9077 41.7764 89.4333 38.9834 88.4846C36.1904 87.5359 33.7762 86.018 31.7406 83.9308C29.705 81.8436 28.1192 79.2346 26.983 76.1038C25.8469 72.9731 25.2789 69.1782 25.2789 64.7192V35.8308C25.2789 27.2923 27.0777 21.0308 30.6755 17.0462C34.2732 13.0615 39.2438 11.0692 45.5872 11.0692C51.6465 11.0692 56.262 12.5397 59.4337 15.4808C62.6054 18.4218 64.1913 22.3115 64.1913 27.15V33.5538H80.6651V1.96154H64.1913V10.2154H63.3392C62.7711 9.07692 61.919 7.91474 60.7829 6.72885C59.6467 5.54295 58.2266 4.47564 56.5224 3.52692C54.8182 2.5782 52.8063 1.79551 50.4867 1.17885C48.1671 0.562179 45.4925 0.253845 42.4628 0.253845C36.8768 0.253845 31.5039 1.36859 26.344 3.59808C21.1841 5.82756 16.6632 9.10064 12.7814 13.4173C8.89967 17.734 5.79899 23.1179 3.47939 29.5692C1.1598 36.0205 0 43.4205 0 51.7692C0 58.9795 0.970443 65.7154 2.91133 71.9769C4.85222 78.2385 7.71621 83.6699 11.5033 88.2712C15.2904 92.8724 19.9059 96.4776 25.3499 99.0865C30.7938 101.696 37.0662 103 44.167 103Z" fill="white"/> -</svg> diff --git a/public/logos/caisy.svg b/public/logos/caisy.svg deleted file mode 100644 index ca053fd51..000000000 --- a/public/logos/caisy.svg +++ /dev/null @@ -1,8 +0,0 @@ -<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M267.828 239.854C342.008 332.804 413.718 222.187 300.194 169.791L336.026 167.538C336.026 167.538 437.025 248.151 381.506 300.873C325.988 353.595 263.415 254.553 263.415 254.553L267.828 239.854Z" fill="#91C6FF"/> -<path d="M266.258 395.051C265.621 395.253 264.984 395.409 264.331 395.579L261.224 396.31C243.968 400.113 226.489 402.817 208.89 404.405C193.01 405.881 185.8 384.811 199.288 376.312C260.773 337.466 242.143 305.612 211.641 302.675C317.162 298.294 335.218 376.467 266.258 395.051Z" fill="#91C6FF"/> -<g style="mix-blend-mode:multiply" opacity="0.3"> -<path d="M269.723 394.072C268.62 394.321 267.455 394.709 266.227 395.036C275.55 390.7 281.766 385.402 285.821 379.761C308.476 348.296 259.561 319.006 235.29 342.951C248.047 320.56 232.649 304.68 211.625 302.676C312.547 307.135 334.425 374.074 269.723 394.072Z" fill="#008CFF"/> -</g> -<path d="M265.823 395.176C323.315 378.549 318.11 307.384 210.367 302.613C177.285 300.283 127.734 307.943 98.1329 261.685C71.065 219.219 80.8231 162.69 106.648 131.427C122.342 112.299 144.095 102.634 166.906 111.538C181.527 117.256 196.631 130.541 210.864 153.895C271.246 252.891 324.791 326.123 370.194 291.628C411.387 260.349 373.38 191.094 298.003 169.108C280.911 164.12 281.128 139.585 298.609 135.653C459.96 99.4024 498.542 339.579 265.823 395.176Z" fill="#008CFF"/> -</svg> diff --git a/public/logos/cleavr.svg b/public/logos/cleavr.svg deleted file mode 100644 index e5b456a49..000000000 --- a/public/logos/cleavr.svg +++ /dev/null @@ -1,126 +0,0 @@ - -<svg viewBox="0 0 256 256" fill="none" xmlns="http://www.w3.org/2000/svg"> - <path - d="M128 256C198.692 256 256 198.692 256 128C256 57.3075 198.692 0 128 0C57.3075 0 0 57.3075 0 128C0 198.692 57.3075 256 128 256Z" - fill="#0058F3" - /> - <g opacity="0.047"> - <path - opacity="0.047" - d="M204.197 148.146C198.799 135.723 193.493 123.346 189.987 110.266L106.555 132.623C110.059 145.702 111.638 159.299 113.214 172.894C144.754 170.273 187.879 154.438 204.197 148.146ZM179.249 121.41C179.115 120.922 179.08 120.412 179.145 119.91C179.21 119.408 179.374 118.924 179.627 118.485C179.88 118.047 180.217 117.663 180.62 117.356C181.022 117.049 181.481 116.824 181.971 116.695C182.459 116.562 182.968 116.527 183.47 116.592C183.972 116.657 184.456 116.821 184.894 117.074C185.332 117.327 185.716 117.664 186.023 118.066C186.33 118.468 186.555 118.927 186.683 119.416C186.817 119.905 186.852 120.415 186.787 120.917C186.722 121.419 186.558 121.903 186.305 122.341C186.052 122.779 185.715 123.163 185.312 123.471C184.91 123.778 184.451 124.002 183.961 124.131C182.978 124.349 181.948 124.19 181.076 123.687C180.204 123.183 179.552 122.371 179.249 121.41Z" - fill="#E7E8E9" - /> - <path - opacity="0.047" - d="M201.231 171.223C207.278 169.012 210.494 162.839 208.316 157.739C206.931 154.498 205.633 151.303 204.197 148.146C187.829 154.525 144.754 170.271 113.213 172.894C113.599 176.258 113.582 174.271 113.968 177.634C114.631 183.139 120.553 186.789 126.897 185.681C152.005 181.092 177.139 179.892 201.231 171.223Z" - fill="white" - /> - <path - opacity="0.047" - d="M117.374 129.764L120.895 142.905L101.329 148.151L97.8058 135.008L117.374 129.764Z" - fill="#E7E8E9" - /> - <g opacity="0.047"> - <g opacity="0.047" filter="url(#filter0_d)"> - <path - d="M49.7893 162.811L45.8413 148.077C45.5819 147.115 46.0859 146.242 47.0503 145.983L104.186 130.674C105.15 130.415 106.023 130.919 106.282 131.884L110.229 146.615C110.486 147.577 109.982 148.45 109.019 148.711L51.8843 164.019C50.9227 164.276 49.9614 163.721 49.7886 162.809L49.7893 162.811Z" - fill="black" - /> - </g> - <path - opacity="0.047" - d="M49.7893 162.811L45.8413 148.077C45.5819 147.115 46.0859 146.242 47.0503 145.983L104.186 130.674C105.15 130.415 106.023 130.919 106.282 131.884L110.229 146.615C110.486 147.577 109.982 148.45 109.019 148.711L51.8843 164.019C50.9227 164.276 49.9614 163.721 49.7886 162.809L49.7893 162.811Z" - fill="#2B2B2B" - /> - </g> - </g> - <g opacity="0.081"> - <path - opacity="0.081" - d="M201.412 124.774C193.939 113.477 186.564 102.209 180.84 89.9373L102.557 126.443C108.279 138.714 112.196 151.83 116.108 164.945C146.714 156.887 186.434 133.804 201.412 124.774ZM172.2 102.776C171.984 102.319 171.86 101.823 171.837 101.317C171.814 100.811 171.891 100.306 172.064 99.8305C172.237 99.3548 172.503 98.9182 172.846 98.5458C173.189 98.1734 173.602 97.8726 174.062 97.6608C174.519 97.445 175.015 97.322 175.52 97.2989C176.026 97.2758 176.531 97.353 177.006 97.526C177.482 97.699 177.918 97.9645 178.29 98.3071C178.663 98.6497 178.963 99.0626 179.175 99.522C179.391 99.9798 179.515 100.476 179.538 100.981C179.561 101.487 179.484 101.992 179.311 102.468C179.138 102.944 178.872 103.38 178.529 103.753C178.186 104.125 177.773 104.426 177.313 104.638C176.383 105.023 175.341 105.046 174.395 104.701C173.448 104.357 172.665 103.67 172.2 102.776Z" - fill="#E7E8E9" - /> - <path - opacity="0.081" - d="M202.498 148.015C208.07 144.788 210.164 138.15 207.134 133.506C205.207 130.555 203.374 127.634 201.411 124.774C186.4 133.898 146.714 156.885 116.108 164.945C117.072 168.191 116.71 166.237 117.674 169.483C119.283 174.789 125.749 177.355 131.804 175.162C155.734 166.283 180.277 160.737 202.498 148.015Z" - fill="white" - /> - <path - opacity="0.081" - d="M112.716 121.748L118.465 134.078L100.107 142.642L94.3556 130.311L112.716 121.748Z" - fill="#E7E8E9" - /> - </g> - <g opacity="0.205"> - <path - opacity="0.205" - d="M193.348 98.5813C184.027 88.7535 174.808 78.9374 167.04 67.846L96.2855 117.39C104.052 128.481 110.186 140.718 116.316 152.955C145.058 139.705 180.166 110.075 193.348 98.5813ZM160.76 81.9904C160.468 81.5771 160.26 81.11 160.15 80.6161C160.039 80.1222 160.027 79.6112 160.115 79.1127C160.203 78.6142 160.389 78.1381 160.662 77.7118C160.935 77.2855 161.29 76.9176 161.705 76.6291C162.119 76.3372 162.586 76.13 163.079 76.0194C163.573 75.9089 164.084 75.8972 164.582 75.9851C165.08 76.0729 165.556 76.2586 165.982 76.5313C166.408 76.804 166.776 77.1585 167.065 77.5741C167.357 77.9874 167.564 78.4545 167.675 78.9485C167.786 79.4424 167.798 79.9533 167.71 80.4518C167.622 80.9503 167.436 81.4264 167.163 81.8527C166.89 82.279 166.535 82.647 166.119 82.9354C165.27 83.4766 164.248 83.6798 163.256 83.5048C162.264 83.3299 161.373 82.7896 160.76 81.9904Z" - fill="#E7E8E9" - /> - <path - opacity="0.205" - d="M198.454 121.281C203.381 117.135 204.291 110.235 200.5 106.187C198.09 103.615 195.777 101.057 193.348 98.5814C180.149 110.173 145.058 139.703 116.316 152.955C117.829 155.984 117.134 154.123 118.647 157.151C121.152 162.098 127.966 163.502 133.548 160.291C155.573 147.391 178.78 137.667 198.454 121.281Z" - fill="white" - /> - <path - opacity="0.205" - d="M105.475 111.003L113.278 122.147L96.6858 133.769L88.8805 122.624L105.475 111.003Z" - fill="#E7E8E9" - /> - <path - opacity="0.205" - d="M53.2687 165.173L44.5196 152.677C43.9465 151.862 44.1216 150.869 44.9394 150.296L93.393 116.369C94.2109 115.796 95.2036 115.971 95.7763 116.789L104.524 129.282C105.095 130.097 104.92 131.09 104.104 131.665L55.6503 165.59C54.8348 166.161 53.7417 165.969 53.2671 165.17L53.2687 165.173Z" - fill="#2B2B2B" - /> - </g> - <path - d="M181.86 75.668C170.972 67.616 160.18 59.562 150.6 50L89.4961 111C99.0761 120.56 107.244 131.534 115.412 142.506C141.428 124.486 170.872 89.256 181.864 75.668H181.86ZM146.872 64.998C146.513 64.6425 146.227 64.2193 146.032 63.7527C145.837 63.2862 145.737 62.7856 145.737 62.28C145.737 61.7744 145.837 61.2738 146.032 60.8073C146.227 60.3407 146.513 59.9175 146.872 59.562C147.229 59.2031 147.653 58.9183 148.121 58.724C148.588 58.5296 149.089 58.4296 149.595 58.4296C150.101 58.4296 150.602 58.5296 151.07 58.724C151.537 58.9183 151.961 59.2031 152.318 59.562C152.678 59.9175 152.963 60.3407 153.158 60.8073C153.353 61.2738 153.453 61.7744 153.453 62.28C153.453 62.7856 153.353 63.2862 153.158 63.7527C152.963 64.2193 152.678 64.6425 152.318 64.998C151.574 65.6779 150.603 66.055 149.595 66.055C148.587 66.055 147.616 65.6779 146.872 64.998Z" - fill="#E7E8E9" - /> - <path - d="M190.836 97.108C194.97 92.176 194.668 85.23 190.23 81.908C187.408 79.796 184.684 77.682 181.862 75.668C170.87 89.358 141.426 124.488 115.41 142.506C117.426 145.224 116.418 143.512 118.434 146.23C121.762 150.658 128.72 150.86 133.66 146.734C153.122 130.226 174.3 116.636 190.836 97.108Z" - fill="white" - /> - <path - d="M97.4404 103.124L107.064 112.734L92.7344 127.04L83.1084 117.43L97.4404 103.124Z" - fill="#E7E8E9" - /> - <path - d="M55.4123 165.456L44.6203 154.686C43.9143 153.98 43.9143 152.974 44.6203 152.27L86.4683 110.496C87.1723 109.792 88.1823 109.792 88.8883 110.496L99.6763 121.266C100.382 121.972 100.382 122.978 99.6763 123.682L57.8323 165.456C57.1263 166.16 56.0163 166.16 55.4123 165.456Z" - fill="#2B2B2B" - /> - <defs> - <filter - id="filter0_d" - x="43.7737" - y="129.607" - width="72.522" - height="41.4751" - filterUnits="userSpaceOnUse" - color-interpolation-filters="sRGB" - > - <feFlood flood-opacity="0" result="BackgroundImageFix" /> - <feColorMatrix - in="SourceAlpha" - type="matrix" - values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" - /> - <feOffset dx="2" dy="3" /> - <feGaussianBlur stdDeviation="2" /> - <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0" /> - <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow" /> - <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow" result="shape" /> - </filter> - <linearGradient - id="paint0_linear" - x1="484.826" - y1="421.583" - x2="-1.66124e-05" - y2="7.01693" - gradientUnits="userSpaceOnUse" - > - <stop stop-color="#6A11CB" /> - <stop offset="1" stop-color="#2575FC" /> - </linearGradient> - </defs> -</svg> diff --git a/public/logos/cloudcannon.svg b/public/logos/cloudcannon.svg deleted file mode 100644 index 2fbd1d2e1..000000000 --- a/public/logos/cloudcannon.svg +++ /dev/null @@ -1,4 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" fill="#fff" viewBox="0 0 139 95"> - <path fill-rule="evenodd" d="M54.4 77.8a29 29 0 0 0 2 1c5.3 2.5 7.7 4.1 7.7 7.5 0 3.6-3 6.5-6.5 6.5a6.5 6.5 0 0 1-6.1-4.2A18.6 18.6 0 0 1 38 94.2a18.7 18.7 0 0 1-17.3-11.6 18.7 18.7 0 0 1-1.4-7.1l.3-3A26.4 26.4 0 0 1 1 51.7a27.7 27.7 0 0 1-.4-4.4 26.5 26.5 0 0 1 19-25.2v-.2l-.2-2.8A18.7 18.7 0 0 1 31 1.8a18.7 18.7 0 0 1 7-1.4C43.2.4 48 2.5 51.4 6a6.5 6.5 0 0 1 6-4.3c3.7 0 6.6 3 6.6 6.6 0 3.6-2.4 5.2-7.7 7.7l-1.5.7-.5.3-1.2.7-1 .6a2 2 0 0 0-.2.2l-.2.1c-1.6 1-3 2.3-4.5 3.5a.5.5 0 0 0-.1.1l-.1.1a54.5 54.5 0 0 0-1.7 1.7l-.2.3-.2.2-.7.8a22.6 22.6 0 0 0-1 1.2 34.8 34.8 0 0 0-7 21 34.5 34.5 0 0 0 7 20.8 23.1 23.1 0 0 0 2 2.3l.1.2 1.2 1.3.5.4a.5.5 0 0 1 0 .1.6.6 0 0 0 .2.1 35.7 35.7 0 0 0 4.5 3.5l.2.2.3.1.4.3.5.3.6.4.6.3Zm65-55.6c9.6 2.8 17 10.8 18.7 20.9a27.9 27.9 0 0 1 0 9c-1.7 10-9 18-18.7 20.9v.1c.2 1 .3 1.8.3 2.8a18.7 18.7 0 0 1-5.5 13.3 18.7 18.7 0 0 1-13.2 5.5A18.7 18.7 0 0 1 87.7 89a6.5 6.5 0 0 1-6.1 4.3 6.6 6.6 0 0 1-6.6-6.6c0-3.6 2.4-5.2 7.7-7.6a26.7 26.7 0 0 0 1.5-.8l.6-.3 1.2-.7.9-.6a1.8 1.8 0 0 0 .2-.1 2 2 0 0 1 .3-.2 35.8 35.8 0 0 0 4.4-3.5.4.4 0 0 0 .1-.1.5.5 0 0 1 .2-.1l1.6-1.7.2-.2.2-.3.7-.8 1-1.2a35 35 0 0 0 7-20.9 34.5 34.5 0 0 0-7-20.9 23.1 23.1 0 0 0-1.9-2.3l-.2-.2a18.6 18.6 0 0 0-1.6-1.7.5.5 0 0 1-.2 0 .5.5 0 0 0 0-.2 40.7 40.7 0 0 0-4.5-3.5 2 2 0 0 1-.3-.1l-.2-.2a10.5 10.5 0 0 0-.5-.3 12.7 12.7 0 0 1-.4-.3l-.6-.3-2.7-1.5c-5.2-2.4-7.7-4-7.7-7.6 0-3.6 3-6.6 6.6-6.6 2.8 0 5.1 1.8 6 4.3A18.6 18.6 0 0 1 101 .6 18.7 18.7 0 0 1 118.3 12a18.7 18.7 0 0 1 1.4 7.2l-.3 3Z" clip-rule="evenodd"/> - <path d="M90 47.5a20.4 20.4 0 0 0-12.6-18.9 20.4 20.4 0 0 0-7.8-1.5 20.4 20.4 0 0 0-18.9 12.6 20.4 20.4 0 0 0-1.5 7.8 20.4 20.4 0 0 0 12.6 18.8 20.4 20.4 0 0 0 7.8 1.6 20.4 20.4 0 0 0 18.8-12.6 20.4 20.4 0 0 0 1.6-7.8Z"/> -</svg> diff --git a/public/logos/cloudflare-pages.svg b/public/logos/cloudflare-pages.svg deleted file mode 100644 index f22c4afd6..000000000 --- a/public/logos/cloudflare-pages.svg +++ /dev/null @@ -1,4 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" fill="#F38020" viewBox="0 0 48 48"> - <path d="m21.4 7.5-2 3H9v27h8.7l-.5 3H7.5L6 39V9l1.5-1.5h13.9zm9.4 0h9.7L42 9v30l-1.5 1.5H26.6l2-3H39v-27h-8.7l.5-3z"/> - <path d="M21.4 28.5h-8.6l-1.3-2.3L27 2.2l2.7 1.1-3.3 16.2h8.7l1.3 2.3-15.6 24-2.7-1.1 3.2-16.2zM11.3 13.7a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm2.8 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm2.7 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"/> -</svg> diff --git a/public/logos/contentful.svg b/public/logos/contentful.svg deleted file mode 100644 index de40d9a3b..000000000 --- a/public/logos/contentful.svg +++ /dev/null @@ -1,7 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" data-name="Layer 1" viewBox="0 0 150 150"> - <path fill="#ffda00" d="M61.2 92.3a24.6 24.6 0 0 1-7.1-17.4 24.3 24.3 0 0 1 7.2-17.4 9.7 9.7 0 0 0-13.6-13.7 44 44 0 0 0-.2 62.1 9.7 9.7 0 1 0 13.7-13.6Z"/> - <path fill="#67b3ff" d="M61.3 57.5a24.6 24.6 0 0 1 17.5-7.2A24.3 24.3 0 0 1 96 57.6 9.7 9.7 0 1 0 109.8 44a43.8 43.8 0 0 0-62-.3 9.7 9.7 0 0 0 13.5 13.8Z"/> - <path fill="#eb5a68" d="M96 92.4a24.6 24.6 0 0 1-17.4 7.1 24.3 24.3 0 0 1-17.3-7.2 9.7 9.7 0 1 0-13.8 13.6 43.9 43.9 0 0 0 62.2.3 9.7 9.7 0 0 0-13.6-13.8Z"/> - <path fill="#47a1ff" d="M61.3 57.5a9.7 9.7 0 1 1 0-13.7 9.7 9.7 0 0 1 0 13.7Z"/> - <path fill="#d5465f" d="M61.1 106a9.7 9.7 0 1 1 .1-13.7 9.7 9.7 0 0 1 0 13.6Z"/> -</svg> diff --git a/public/logos/cosmic.svg b/public/logos/cosmic.svg deleted file mode 100644 index f59d0ceb3..000000000 --- a/public/logos/cosmic.svg +++ /dev/null @@ -1,14 +0,0 @@ -<svg width="509" height="500" viewBox="0 0 509 500" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M198.942 172.131C210.987 161.524 222.106 150.916 234.151 141.273C224.885 134.523 216.547 128.737 208.208 122.951C198.016 131.63 187.824 141.273 177.632 150.916C187.824 154.773 195.236 162.488 198.942 172.131Z" fill="#3DBFF5"/> -<path d="M169.345 221.419C191.641 221.479 209.763 203.179 209.822 180.545C209.88 157.91 191.853 139.512 169.557 139.452C147.261 139.392 129.139 157.693 129.081 180.327C129.022 202.962 147.049 221.359 169.345 221.419Z" fill="#3DBFF5"/> -<path d="M205.035 408.818C147.774 440.607 98.2764 448.555 75.9542 426.699C44.8972 395.903 73.0426 315.436 140.98 233.976C130.304 230.995 121.569 223.048 116.717 213.114C17.7223 326.364 -26.9222 440.607 16.7517 483.324C52.6614 519.087 139.039 495.245 234.151 431.666C224.446 424.712 214.74 416.765 205.035 408.818Z" fill="#3DBFF5"/> -<path d="M270.348 137.373C273.251 126.476 280.993 117.56 290.67 112.606C176.481 16.5085 60.3567 -26.0914 16.8101 16.5085C-18.9949 52.1736 4.22997 136.383 69.0661 229.508C76.8077 219.601 84.5493 210.685 92.2909 200.778C60.3567 144.308 51.6474 95.7642 73.9046 72.9782C105.839 42.2666 187.126 70.9968 270.348 137.373Z" fill="#3DBFF5"/> -<path d="M352.707 163.934C348.939 173.869 340.461 181.818 331.041 185.792C345.171 200.695 358.358 214.605 369.662 229.508C376.256 220.566 382.85 211.624 387.56 202.682C377.198 189.766 364.952 176.85 352.707 163.934Z" fill="#3DBFF5"/> -<path d="M322.966 204.918C345.499 204.918 363.337 186.925 363.337 163.934C363.337 140.944 345.499 122.951 322.966 122.951C300.434 122.951 282.595 140.944 282.595 163.934C282.595 185.926 300.434 204.918 322.966 204.918Z" fill="#3DBFF5"/> -<path d="M433.365 73.5376C464.549 104.299 436.288 184.677 368.073 266.047C378.793 269.023 387.563 276.962 392.436 286.885C490.86 173.761 535.687 58.6529 491.835 15.9834C455.778 -18.7476 369.048 5.06793 274.521 68.576C284.266 75.5222 294.011 83.4607 303.756 91.3993C361.252 59.6452 410.951 51.7067 433.365 73.5376Z" fill="#3DBFF5"/> -<path d="M316.969 319.672C303.127 333.522 288.363 346.382 274.521 358.254C283.749 365.178 292.054 371.114 301.282 377.049C314.2 366.168 326.196 354.296 339.115 341.436C328.964 337.479 321.582 329.565 316.969 319.672Z" fill="#3DBFF5"/> -<path d="M347.411 278.575C325.114 278.512 306.99 296.81 306.929 319.445C306.868 342.079 324.893 360.479 347.189 360.541C369.485 360.604 387.609 342.306 387.671 319.672C387.732 297.037 369.707 278.637 347.411 278.575Z" fill="#3DBFF5"/> -<path d="M177.631 314.208C163.502 299.305 150.314 285.395 139.01 270.492C132.416 279.434 125.822 288.376 121.112 297.317C132.416 310.234 143.72 323.15 155.966 336.066C159.734 326.13 167.27 318.182 177.631 314.208Z" fill="#3DBFF5"/> -<path d="M439.835 270.492C432.12 280.363 424.404 289.248 416.688 299.119C448.516 355.387 457.196 402.771 434.048 425.476C402.22 456.077 321.203 427.45 238.257 362.297C235.363 373.156 227.647 382.041 218.002 386.976C332.777 482.731 448.516 526.166 491.918 483.718C527.604 447.193 504.456 362.297 439.835 270.492Z" fill="#3DBFF5"/> -<path d="M226.182 336.281C226.24 313.647 208.213 295.25 185.917 295.19C163.62 295.13 145.499 313.431 145.441 336.065C145.382 358.7 163.41 377.097 185.706 377.157C208.002 377.216 226.124 358.916 226.182 336.281Z" fill="#3DBFF5"/> -</svg> diff --git a/public/logos/create-react-app.svg b/public/logos/create-react-app.svg deleted file mode 100644 index 7bd159976..000000000 --- a/public/logos/create-react-app.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 170.96 159.93"><defs><style>.cls-1{fill:#09d3ac}</style></defs><path d="M141.35,73.27c0-6.89-8.11-13-20.58-16.73,3-12.67,1.69-22.75-4.28-26.16a9.55,9.55,0,0,0-4.79-1.2c-5.57,0-12.61,3.89-19.72,10.62-7.11-6.68-14.13-10.55-19.69-10.55a9.46,9.46,0,0,0-4.86,1.22c-5.94,3.42-7.17,13.44-4.21,26.05-12.41,3.71-20.48,9.77-20.5,16.63s8.12,13,20.59,16.72c-3,12.68-1.7,22.75,4.28,26.16a9.41,9.41,0,0,0,4.78,1.2c5.58,0,12.62-3.89,19.73-10.62,7.1,6.68,14.12,10.55,19.69,10.55a9.59,9.59,0,0,0,4.86-1.22c5.94-3.42,7.16-13.44,4.21-26C133.27,86.18,141.34,80.12,141.35,73.27ZM96.56,42.06c8.19-7.33,13.31-8.12,15.13-8.12h0a4.71,4.71,0,0,1,2.42.58c2.86,1.63,4,7.38,3.09,15a56.73,56.73,0,0,1-1,5.79,97.7,97.7,0,0,0-12.58-2.07,98.47,98.47,0,0,0-8.24-10.08C95.75,42.79,96.15,42.42,96.56,42.06ZM71.77,78.94c.78,1.5,1.61,3,2.47,4.51S76,86.49,77,88c-2.71-.39-5.34-.88-7.84-1.46C69.86,84,70.75,81.5,71.77,78.94ZM69,59.9c2.53-.59,5.18-1.08,7.93-1.46-1,1.48-1.86,3-2.76,4.59s-1.69,3-2.46,4.52Q70.18,63.65,69,59.9Zm5.21,13.34q1.86-3.93,4.09-7.86c1.5-2.62,3.11-5.17,4.77-7.61,2.91-.22,5.91-.34,9-.33s6,.12,8.89.35c1.66,2.42,3.25,5,4.75,7.55s2.88,5.22,4.12,7.83c-1.23,2.62-2.6,5.25-4.08,7.85s-3.11,5.18-4.77,7.62c-2.91.23-5.91.34-9,.34s-6-.13-8.89-.36c-1.66-2.42-3.26-4.94-4.76-7.55S75.5,75.85,74.25,73.24Zm32.86-14.77c2.72.38,5.35.87,7.84,1.45-.74,2.47-1.62,5-2.64,7.55-.79-1.5-1.61-3-2.48-4.51S108,59.93,107.11,58.47Zm2.76,24.92q1.29-2.27,2.46-4.53c1,2.6,2,5.16,2.7,7.66-2.52.59-5.17,1.07-7.92,1.45Q108.52,85.75,109.87,83.39ZM92,46.56c1.8,1.92,3.57,4,5.3,6.23-1.71-.07-3.46-.12-5.23-.12s-3.58,0-5.33.12C88.45,50.57,90.2,48.48,92,46.56Zm-22.18-12A4.82,4.82,0,0,1,72.29,34a13.11,13.11,0,0,1,5.19,1.31,39.07,39.07,0,0,1,10,6.78l1.17,1.07a98.49,98.49,0,0,0-8.16,10,98.88,98.88,0,0,0-12.65,2.06c-.44-1.94-.8-3.84-1-5.67C65.8,42,67,36.24,69.81,34.6ZM64.53,85.26a58.75,58.75,0,0,1-5.54-2c-7.1-3-11.5-6.85-11.5-10.14S51.91,66,59,63.05a57.63,57.63,0,0,1,5.44-1.94A97.93,97.93,0,0,0,69,73.25,98.72,98.72,0,0,0,64.53,85.26Zm23,19.1c-8.19,7.33-13.31,8.11-15.14,8.11a4.69,4.69,0,0,1-2.42-.58c-2.86-1.63-4-7.38-3.09-15a56.07,56.07,0,0,1,1-5.78,99.51,99.51,0,0,0,12.58,2.06,97.17,97.17,0,0,0,8.24,10.08Zm4.57-4.51c-1.8-1.92-3.57-4-5.31-6.23,1.72.08,3.47.12,5.24.12s3.58,0,5.33-.11C95.63,95.85,93.87,97.93,92.09,99.85Zm22.18,12a4.82,4.82,0,0,1-2.48.59c-1.82,0-7-.8-15.16-8.1l-1.17-1.07a98.44,98.44,0,0,0,8.15-10,97,97,0,0,0,12.66-2.06c.44,1.94.79,3.84,1,5.67C118.27,104.42,117.12,110.18,114.27,111.81Zm10.8-28.44c-1.71.7-3.52,1.35-5.44,1.93a98.54,98.54,0,0,0-4.57-12.14,98.1,98.1,0,0,0,4.49-12,58.75,58.75,0,0,1,5.54,2c7.09,3,11.5,6.85,11.49,10.14S132.17,80.42,125.07,83.37ZM92,82.39a9.18,9.18,0,1,0-9.17-9.19A9.17,9.17,0,0,0,92,82.39ZM31,17.88V128.53H153.07V17.88ZM148.3,123.77H35.78V22.65H148.3Zm-85-33.9c-3,12.68-1.7,22.75,4.28,26.16a9.41,9.41,0,0,0,4.78,1.2c5.58,0,12.62-3.89,19.73-10.62,7.1,6.68,14.12,10.55,19.69,10.55a9.59,9.59,0,0,0,4.86-1.22c5.94-3.42,7.16-13.44,4.21-26,12.41-3.72,20.48-9.78,20.49-16.63s-8.11-13-20.58-16.73c3-12.67,1.69-22.75-4.28-26.16a9.55,9.55,0,0,0-4.79-1.2c-5.57,0-12.61,3.89-19.72,10.62-7.11-6.68-14.13-10.55-19.69-10.55a9.46,9.46,0,0,0-4.86,1.22c-5.94,3.42-7.17,13.44-4.21,26.05-12.41,3.71-20.48,9.77-20.5,16.63S50.84,86.13,63.31,89.87Zm24.21,14.49c-8.19,7.33-13.31,8.11-15.14,8.11a4.69,4.69,0,0,1-2.42-.58c-2.86-1.63-4-7.38-3.09-15a56.07,56.07,0,0,1,1-5.78,99.51,99.51,0,0,0,12.58,2.06,97.17,97.17,0,0,0,8.24,10.08Zm24.79-36.89c-.79-1.5-1.61-3-2.48-4.51s-1.8-3-2.72-4.49c2.72.38,5.35.87,7.84,1.45C114.21,62.39,113.33,64.92,112.31,67.47Zm2.72,19c-2.52.59-5.17,1.07-7.92,1.45q1.41-2.22,2.76-4.58t2.46-4.53C113.37,81.46,114.28,84,115,86.52Zm-5.21-13.35c-1.23,2.62-2.6,5.25-4.08,7.85s-3.11,5.18-4.77,7.62c-2.91.23-5.91.34-9,.34s-6-.13-8.89-.36c-1.66-2.42-3.26-4.94-4.76-7.55s-2.87-5.22-4.12-7.83q1.86-3.93,4.09-7.86c1.5-2.62,3.11-5.17,4.77-7.61,2.91-.22,5.91-.34,9-.33s6,.12,8.89.35c1.66,2.42,3.25,5,4.75,7.55S108.58,70.56,109.82,73.17ZM77,88c-2.71-.39-5.34-.88-7.84-1.46.74-2.46,1.63-5,2.65-7.55.78,1.5,1.61,3,2.47,4.51S76,86.49,77,88ZM74.21,63c-.87,1.5-1.69,3-2.46,4.52Q70.18,63.65,69,59.9c2.53-.59,5.18-1.08,7.93-1.46C76,59.92,75.11,61.45,74.21,63ZM92.09,99.85c-1.8-1.92-3.57-4-5.31-6.23,1.72.08,3.47.12,5.24.12s3.58,0,5.33-.11C95.63,95.85,93.87,97.93,92.09,99.85Zm22.18,12a4.82,4.82,0,0,1-2.48.59c-1.82,0-7-.8-15.16-8.1l-1.17-1.07a98.44,98.44,0,0,0,8.15-10,97,97,0,0,0,12.66-2.06c.44,1.94.79,3.84,1,5.67C118.27,104.42,117.12,110.18,114.27,111.81Zm5.28-50.66a58.75,58.75,0,0,1,5.54,2c7.09,3,11.5,6.85,11.49,10.14s-4.41,7.16-11.51,10.11c-1.71.7-3.52,1.35-5.44,1.93a98.54,98.54,0,0,0-4.57-12.14A98.1,98.1,0,0,0,119.55,61.15Zm-23-19.09c8.19-7.33,13.31-8.12,15.13-8.12h0a4.71,4.71,0,0,1,2.42.58c2.86,1.63,4,7.38,3.09,15a56.73,56.73,0,0,1-1,5.79,97.7,97.7,0,0,0-12.58-2.07,98.47,98.47,0,0,0-8.24-10.08C95.75,42.79,96.15,42.42,96.56,42.06ZM92,46.56c1.8,1.92,3.57,4,5.3,6.23-1.71-.07-3.46-.12-5.23-.12s-3.58,0-5.33.12C88.45,50.57,90.2,48.48,92,46.56Zm-22.18-12A4.82,4.82,0,0,1,72.29,34a13.11,13.11,0,0,1,5.19,1.31,39.07,39.07,0,0,1,10,6.78l1.17,1.07a98.49,98.49,0,0,0-8.16,10,98.88,98.88,0,0,0-12.65,2.06c-.44-1.94-.8-3.84-1-5.67C65.8,42,67,36.24,69.81,34.6ZM59,63.05a57.63,57.63,0,0,1,5.44-1.94A97.93,97.93,0,0,0,69,73.25a98.72,98.72,0,0,0-4.49,12,58.75,58.75,0,0,1-5.54-2c-7.1-3-11.5-6.85-11.5-10.14S51.91,66,59,63.05Zm33,1a9.18,9.18,0,1,0,9.17,9.19A9.17,9.17,0,0,0,92,64Zm0,0a9.18,9.18,0,1,0,9.17,9.19A9.17,9.17,0,0,0,92,64Zm0,0a9.18,9.18,0,1,0,9.17,9.19A9.17,9.17,0,0,0,92,64Zm49.35,9.24c0-6.89-8.11-13-20.58-16.73,3-12.67,1.69-22.75-4.28-26.16a9.55,9.55,0,0,0-4.79-1.2c-5.57,0-12.61,3.89-19.72,10.62-7.11-6.68-14.13-10.55-19.69-10.55a9.46,9.46,0,0,0-4.86,1.22c-5.94,3.42-7.17,13.44-4.21,26.05-12.41,3.71-20.48,9.77-20.5,16.63s8.12,13,20.59,16.72c-3,12.68-1.7,22.75,4.28,26.16a9.41,9.41,0,0,0,4.78,1.2c5.58,0,12.62-3.89,19.73-10.62,7.1,6.68,14.12,10.55,19.69,10.55a9.59,9.59,0,0,0,4.86-1.22c5.94-3.42,7.16-13.44,4.21-26C133.27,86.18,141.34,80.12,141.35,73.27ZM96.56,42.06c8.19-7.33,13.31-8.12,15.13-8.12h0a4.71,4.71,0,0,1,2.42.58c2.86,1.63,4,7.38,3.09,15a56.73,56.73,0,0,1-1,5.79,97.7,97.7,0,0,0-12.58-2.07,98.47,98.47,0,0,0-8.24-10.08C95.75,42.79,96.15,42.42,96.56,42.06ZM71.77,78.94c.78,1.5,1.61,3,2.47,4.51S76,86.49,77,88c-2.71-.39-5.34-.88-7.84-1.46C69.86,84,70.75,81.5,71.77,78.94ZM69,59.9c2.53-.59,5.18-1.08,7.93-1.46-1,1.48-1.86,3-2.76,4.59s-1.69,3-2.46,4.52Q70.18,63.65,69,59.9Zm5.21,13.34q1.86-3.93,4.09-7.86c1.5-2.62,3.11-5.17,4.77-7.61,2.91-.22,5.91-.34,9-.33s6,.12,8.89.35c1.66,2.42,3.25,5,4.75,7.55s2.88,5.22,4.12,7.83c-1.23,2.62-2.6,5.25-4.08,7.85s-3.11,5.18-4.77,7.62c-2.91.23-5.91.34-9,.34s-6-.13-8.89-.36c-1.66-2.42-3.26-4.94-4.76-7.55S75.5,75.85,74.25,73.24Zm32.86-14.77c2.72.38,5.35.87,7.84,1.45-.74,2.47-1.62,5-2.64,7.55-.79-1.5-1.61-3-2.48-4.51S108,59.93,107.11,58.47Zm2.76,24.92q1.29-2.27,2.46-4.53c1,2.6,2,5.16,2.7,7.66-2.52.59-5.17,1.07-7.92,1.45Q108.52,85.75,109.87,83.39ZM92,46.56c1.8,1.92,3.57,4,5.3,6.23-1.71-.07-3.46-.12-5.23-.12s-3.58,0-5.33.12C88.45,50.57,90.2,48.48,92,46.56Zm-22.18-12A4.82,4.82,0,0,1,72.29,34a13.11,13.11,0,0,1,5.19,1.31,39.07,39.07,0,0,1,10,6.78l1.17,1.07a98.49,98.49,0,0,0-8.16,10,98.88,98.88,0,0,0-12.65,2.06c-.44-1.94-.8-3.84-1-5.67C65.8,42,67,36.24,69.81,34.6ZM64.53,85.26a58.75,58.75,0,0,1-5.54-2c-7.1-3-11.5-6.85-11.5-10.14S51.91,66,59,63.05a57.63,57.63,0,0,1,5.44-1.94A97.93,97.93,0,0,0,69,73.25,98.72,98.72,0,0,0,64.53,85.26Zm23,19.1c-8.19,7.33-13.31,8.11-15.14,8.11a4.69,4.69,0,0,1-2.42-.58c-2.86-1.63-4-7.38-3.09-15a56.07,56.07,0,0,1,1-5.78,99.51,99.51,0,0,0,12.58,2.06,97.17,97.17,0,0,0,8.24,10.08Zm4.57-4.51c-1.8-1.92-3.57-4-5.31-6.23,1.72.08,3.47.12,5.24.12s3.58,0,5.33-.11C95.63,95.85,93.87,97.93,92.09,99.85Zm22.18,12a4.82,4.82,0,0,1-2.48.59c-1.82,0-7-.8-15.16-8.1l-1.17-1.07a98.44,98.44,0,0,0,8.15-10,97,97,0,0,0,12.66-2.06c.44,1.94.79,3.84,1,5.67C118.27,104.42,117.12,110.18,114.27,111.81Zm10.8-28.44c-1.71.7-3.52,1.35-5.44,1.93a98.54,98.54,0,0,0-4.57-12.14,98.1,98.1,0,0,0,4.49-12,58.75,58.75,0,0,1,5.54,2c7.09,3,11.5,6.85,11.49,10.14S132.17,80.42,125.07,83.37ZM92,82.39a9.18,9.18,0,1,0-9.17-9.19A9.17,9.17,0,0,0,92,82.39Zm-69.32,54.5V26.2L17.89,31V141.66H139.94l4.78-4.77Z" class="cls-1"/></svg> \ No newline at end of file diff --git a/public/logos/crystallize.svg b/public/logos/crystallize.svg deleted file mode 100644 index 940599ad2..000000000 --- a/public/logos/crystallize.svg +++ /dev/null @@ -1,6 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 57 85"> - <path fill="#BFF6F8" d="M45.7 37.4 33.4 85 17.6 74.8 29.8.3l18 29.1-2.1 8Z"/> - <path fill="#DFFAFB" d="M11.7 38.8 7.5 68.4 5 66.9.4 32.5l11.3 6.3Z"/> - <path fill="#CFF8FA" d="m25.1 19.2-9 54.7L9 69.3l8.8-61.5 7.4 11.4Z"/> - <path fill="#ACF3F6" d="M57.5 35.3 47.3 74.4 40.6 80l-5.4 4.3L46.7 40l10.8-4.6Z"/> -</svg> diff --git a/public/logos/datocms.svg b/public/logos/datocms.svg deleted file mode 100644 index 593bd9996..000000000 --- a/public/logos/datocms.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 94.652 95.261"><defs><linearGradient id="a" y1="47.631" x2="94.652" y2="47.631" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ff593d"/><stop offset="1" stop-color="#ff7751"/></linearGradient></defs><path d="M47.326 0H0v95.261h47.326c23.67 0 47.326-21.326 47.326-47.624S71 0 47.326 0Zm0 69.274a21.644 21.644 0 1 1 21.65-21.637 21.635 21.635 0 0 1-21.65 21.637Z" fill="url(#a)"/></svg> diff --git a/public/logos/decap-cms.svg b/public/logos/decap-cms.svg deleted file mode 100644 index 7977d8f5e..000000000 --- a/public/logos/decap-cms.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 72 72" fill="#FF0082"> - <path - d="M24.2 2.9 1.7 5l2.7 29.5 14.7-1.3-1.5-16 7.8-.7c7.8-.7 14 5.5 14.9 14.8L54.7 30C53.3 13.6 39.6 1.5 24.2 2.9zm31.5 36.2c0 9.3-5.7 16.1-13.5 16.1h-7.9V39.1H19.6v29.6h22.6c15.4 0 27.9-13.3 27.9-29.6H55.7z" - /> -</svg> diff --git a/public/logos/deno.svg b/public/logos/deno.svg deleted file mode 100644 index ebc717ea9..000000000 --- a/public/logos/deno.svg +++ /dev/null @@ -1 +0,0 @@ -<svg viewBox="0 0 5120 5120" xmlns="http://www.w3.org/2000/svg"><path d="m2560 0a2560 2560 0 1 1 0 5120 2560 2560 0 0 1 0-5120z"/><path d="m2460 1449c-744 0-1324 469-1324 1052 0 550 533 901 1359 884l25-1 91-3-23 60 3 6a668 668 0 0 1 18 47l2 6 3 10 4 14 3 9 4 10 3 11 4 16 5 17 3 11 5 18 5 19 4 19 5 20 4 14 5 22 5 22 7 30 3 16 5 24 5 25 6 26 7 37 6 30 8 42 4 21 7 33 6 34 8 46 9 48 8 50 9 51 9 52 9 54 9 56 7 43 11 73 5 30 12 77 9 63 8 48 9 66 5 33c549-73 1037-339 1393-728l11-12-51-190-135-505-84-314-74-276-46-168-29-106-17-64-16-56-6-24-4-13-2-7-2-6c-78-251-229-473-435-634-242-189-549-288-907-288zm-654 2669c-65-18-133 20-152 85l-1 3-112 416a2287 2287 0 0 0 215 93l17 7 121-451 1-3c16-66-23-133-89-150zm697-305c-66-18-134 20-153 85l-1 3-170 630v3a125 125 0 0 0 241 65l1-3 170-630v-3l3-14 1-5-4-21-6-29-4-18a125 125 0 0 0 -78-63zm-1185-649-8 19-1 4-170 630-1 3a125 125 0 0 0 241 66l1-3 154-572c-80-42-153-92-216-147zm-405-725c-66-17-134 21-153 85l-1 3-170 630v3a125 125 0 0 0 241 66l1-3 170-630v-3c16-66-23-133-88-151zm3811-143c-65-17-133 21-152 85l-1 3-170 630-1 3a125 125 0 0 0 242 66v-3l171-630v-4c16-65-23-132-89-150zm-4182-841a2284 2284 0 0 0 -267 838 124 124 0 0 0 62 38c65 17 133-21 152-85l1-3 170-630 1-3c16-66-23-133-89-151a127 127 0 0 0 -30-4zm3752 4c-66-17-133 21-153 85v3l-170 630-1 3a125 125 0 0 0 241 66l1-3 170-630 1-3c16-66-24-133-89-151z" fill="#fff"/><path d="m2620 1870a160 160 0 1 1 0 320 160 160 0 0 1 0-320z"/><path d="m1282 860c-65-17-133 21-152 85l-1 3-170 630-1 3a125 125 0 0 0 241 66l1-3 170-630 1-4c16-65-23-132-89-150zm2185 119c-66-17-134 21-153 85l-1 3-114 424a1399 1399 0 0 1 211 128l11 9 134-495v-3c16-66-23-133-88-151zm-1112-710a2299 2299 0 0 0 -238 34l-17 3-158 587-1 3a125 125 0 0 0 241 65l1-3 170-630 1-3a124 124 0 0 0 1-56zm1564 435-33 124-1 3a125 125 0 0 0 241 65l1-3 4-13a2312 2312 0 0 0 -197-165zm-989-414-60 223-1 3a125 125 0 0 0 241 65l1-3 63-235a2286 2286 0 0 0 -226-50z" fill="#fff"/></svg> \ No newline at end of file diff --git a/public/logos/directus.svg b/public/logos/directus.svg deleted file mode 100644 index c65619c6a..000000000 --- a/public/logos/directus.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 1024 1028"> - <path fill="#fff" fill-rule="evenodd" d="M752 578c-4-1-7-1-10-3l-5-3c-1-1-2-2-1-3 1-16-1-30 1-45 6-63 45-43 81-53 20-6 40-17 48-39 1-4 0-8-3-10-23-27-49-50-76-70-94-66-215-94-326-78-4 1-6 6-4 9 14 22 33 40 54 53 4 3 2 8-2 7-11-2-24-7-37-16h-4l-20 8c-4 2-5 7-2 9 56 49 137 56 201 18 4-3 10 2 9 6-2 7-5 17-7 30-16 80-61 74-118 54-112-41-176-6-233-75-4-5-11-7-15-3a53 53 0 0 0 5 85c2 2 4 1 6-1 3-4 6-7 10-9 3-2 5 4 2 7-12 10-15 23-23 48-13 39-7 80-65 90-31 2-30 22-41 53-13 38-30 54-62 87-4 4-4 11 0 16 13 10 26 11 39 5 32-13 57-55 81-83 26-30 89-17 137-47 26-15 41-35 36-66-1-4 5-7 7-3 4 9 6 18 7 27 1 3 3 4 5 4 52-3 119 54 181 70 4 1 6-4 4-7a115 115 0 0 1-16-38c-1-5 6-6 8-2 16 29 48 56 93 59 15 2 32 0 49-6 21-6 40-14 63-9 17 3 32 11 42 26 14 20 44 25 59 4 2-3 3-6 1-10-34-80-122-86-159-96Z" /> -</svg> diff --git a/public/logos/docker.svg b/public/logos/docker.svg deleted file mode 100644 index 297bb83f5..000000000 --- a/public/logos/docker.svg +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools --> -<svg width="800px" height="800px" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg"> - <circle cx="512" cy="512" r="512" style="fill:#0091e2"/> - <path d="M827.3 461.5c-1.6-1.3-16.1-12.2-46.7-12.2-8.1 0-16.2.6-24.2 2.1-5.9-40.7-39.5-60.5-41-61.4l-8.2-4.8-5.4 7.8c-6.8 10.5-11.7 22-14.6 34.2-5.5 23.2-2.2 45 9.6 63.6-14.2 7.9-37.1 9.9-41.7 10H277c-9.9 0-17.9 8-17.9 17.9-.4 33.1 5.2 66 16.5 97.1 13 34.2 32.4 59.3 57.6 74.7 28.2 17.3 74.1 27.2 126.2 27.2 23.5.1 47-2.1 70.1-6.4 32.1-5.9 63-17.1 91.4-33.2 23.4-13.6 44.5-30.8 62.4-51.1 29.9-33.9 47.8-71.7 61.1-105.2h5.3c32.8 0 53-13.1 64.1-24.1 7.4-7 13.2-15.5 16.9-25l2.3-6.9-5.7-4.3zM312 489.9h50.7c2.4 0 4.4-2 4.4-4.4v-45.1c0-2.4-2-4.4-4.4-4.5H312c-2.4 0-4.4 2-4.4 4.4v45.2c0 2.5 2 4.4 4.4 4.4m69.9 0h50.7c2.4 0 4.4-2 4.4-4.4v-45.1c0-2.4-2-4.4-4.4-4.5h-50.7c-2.5 0-4.5 2-4.5 4.5v45.1c0 2.5 2 4.4 4.5 4.4m70.8.1h50.7c2.4 0 4.4-2 4.4-4.4v-45.1c0-2.4-2-4.4-4.4-4.5h-50.7c-2.4 0-4.4 2-4.4 4.4v45.2c0 2.4 2 4.3 4.4 4.4m70.1 0h50.7c2.4 0 4.4-2 4.5-4.4v-45.1c0-2.5-2-4.5-4.5-4.5h-50.7c-2.4 0-4.4 2-4.4 4.4v45.2c0 2.4 1.9 4.4 4.4 4.4m-141-65h50.7c2.4 0 4.4-2 4.4-4.5v-45.1c0-2.4-2-4.4-4.4-4.4h-50.7c-2.5 0-4.4 2-4.5 4.4v45.1c.1 2.5 2.1 4.5 4.5 4.5m70.9 0h50.7c2.4 0 4.4-2 4.4-4.5v-45.1c0-2.4-2-4.4-4.4-4.4h-50.7c-2.4 0-4.4 2-4.4 4.4v45.1c0 2.5 2 4.5 4.4 4.5m70.1 0h50.7c2.5 0 4.4-2 4.5-4.5v-45.1c0-2.5-2-4.4-4.5-4.4h-50.7c-2.4 0-4.4 2-4.4 4.4v45.1c0 2.5 1.9 4.5 4.4 4.5m0-64.9h50.7c2.5 0 4.5-2 4.5-4.5v-45.2c0-2.4-2-4.4-4.5-4.4h-50.7c-2.4 0-4.4 2-4.4 4.4v45.2c0 2.5 1.9 4.5 4.4 4.5M593.4 490h50.7c2.4 0 4.4-2 4.4-4.4v-45.1c0-2.5-2-4.4-4.4-4.5h-50.7c-2.4 0-4.4 2-4.4 4.4v45.2c0 2.4 2 4.4 4.4 4.4" style="fill:#fff"/> -</svg> \ No newline at end of file diff --git a/public/logos/docusaurus.svg b/public/logos/docusaurus.svg deleted file mode 100644 index 54d8acd4a..000000000 --- a/public/logos/docusaurus.svg +++ /dev/null @@ -1,31 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 256 217.6"> - <g fill-rule="evenodd" transform="translate(-4 -22.6) scale(1.313)"> - <path fill="#fff" d="M99 52h84v34H99z"/> - <g fill="#3ecc5f"> - <path d="M23 163a20 20 0 0 1-17.3-10A20 20 0 0 0 23 183h20v-20H23z"/> - <path d="m113 57.4 70-4.4V43c0-11-9-20-20-20H73l-2.5-4.3a2.9 2.9 0 0 0-5 0L63 23l-2.5-4.3a2.9 2.9 0 0 0-5 0L53 23l-2.5-4.3a2.9 2.9 0 0 0-5 0L43 23l-4.2-4.1a2.9 2.9 0 0 0-4.8 1.3l-1.4 5-5.2-1.3a2.9 2.9 0 0 0-3.5 3.5l1.4 5.2-5.1 1.4a2.9 2.9 0 0 0-1.3 4.8l4.1 4.1v.1l-4.3 2.5a2.9 2.9 0 0 0 0 5L23 53l-4.3 2.5a2.9 2.9 0 0 0 0 5L23 63l-4.3 2.5a2.9 2.9 0 0 0 0 5L23 73l-4.3 2.5a2.9 2.9 0 0 0 0 5L23 83l-4.3 2.5a2.9 2.9 0 0 0 0 5L23 93l-4.3 2.5a2.9 2.9 0 0 0 0 5L23 103l-4.3 2.5a2.9 2.9 0 0 0 0 5L23 113l-4.3 2.5a2.9 2.9 0 0 0 0 5L23 123l-4.3 2.5a2.9 2.9 0 0 0 0 5L23 133l-4.3 2.5a2.9 2.9 0 0 0 0 5L23 143l-4.3 2.5a2.9 2.9 0 0 0 0 5L23 153l-4.3 2.5a2.9 2.9 0 0 0 0 5L23 163c0 11 9 20 20 20h120c11 0 20-9 20-20V83l-70-4.4a10.6 10.6 0 0 1 0-21.2"/> - <path d="M143 183h30v-40h-30z"/> - </g> - <path fill="#44d860" d="M193 158h-.6l-.2-.4a5 5 0 0 0 3.1-4.6 5 5 0 0 0-5-5 5 5 0 0 0-3 1l-.3-.3a5 5 0 0 0 1-3 5 5 0 0 0-9.6-2h-.5v-.7a5 5 0 1 0-10 0l.2.6-.5.2a5 5 0 0 0-9.6 2 5 5 0 0 0 1 2.9 20 20 0 0 0-6 14.3 20 20 0 0 0 39.4 5h.6a5 5 0 1 0 0-10"/> - <path fill="#3ecc5f" d="M153 123h30v-20h-30z"/> - <use xlink:href="#a" fill="#44d860"/> - <path d="M63 55.5a2.5 2.5 0 0 1-2.5-2.5 7.5 7.5 0 0 0-7.5-7.5 7.5 7.5 0 0 0-7.5 7.5 2.5 2.5 0 1 1-5 0 12.5 12.5 0 0 1 25 0 2.5 2.5 0 0 1-2.5 2.5"/> - <path fill="#ffff50" d="M103 183h60c11 0 20-9 20-20V93h-60c-11 0-20 9-20 20v70z"/> - <use xlink:href="#b"/> - <use xlink:href="#b" y="20"/> - <use xlink:href="#b" y="40"/> - <use xlink:href="#b" y="-9.8"/> - <use xlink:href="#b" y="10"/> - <use xlink:href="#b" y="30"/> - <path d="M183 61.6c-3.1.1-4.6 3.2-5.9 6-1.3 2.8-2.4 4.6-4 4.6-2-.1-3-2.2-4.2-4.5-1.3-2.6-2.8-5.5-6-5.4-3 0-4.5 2.8-5.8 5.1-1.3 2.6-2.3 4.1-4 4-2 0-3-1.8-4.2-3.8-1.3-2.2-2.9-4.7-6-4.6-3 0-4.4 2.3-5.7 4.4-1.4 2-2.3 3.4-4.2 3.3-2 0-3-1.5-4.1-3.2-1.4-1.8-2.9-4-6-3.9-2.9.1-4.3 2-5.6 3.7C116 68.8 115 70 113 70a1 1 0 1 0 0 2c3 0 4.5-1.8 5.8-3.5 1.2-1.5 2.2-2.8 4.2-2.9 2 0 2.9 1.2 4.2 3 1.3 2 2.8 4 5.8 4.1 3 .1 4.6-2.2 5.9-4.3C140 66.6 141 65 143 65c1.8-.1 2.8 1.3 4.2 3.6 1.3 2.2 2.7 4.7 5.8 4.8 3 .1 4.6-2.6 6-5 1-2.1 2.1-4 4-4.1 1.8 0 2.8 1.6 4.1 4.3 1.3 2.5 2.8 5.4 5.9 5.6h.1c3 0 4.5-3.1 5.8-5.8 1.2-2.4 2.2-4.7 4-4.8v-2z"/> - <path fill="#3ecc5f" d="M83 183h40v-40H83z"/> - <path fill="#44d860" d="M143 158h-.6l-.2-.4a5 5 0 0 0 3.1-4.6 5 5 0 0 0-5-5 5 5 0 0 0-3 1l-.3-.3a5 5 0 0 0 1-3 5 5 0 0 0-9.6-2h-.5v-.7a5 5 0 1 0-10 0l.2.6-.5.2a5 5 0 0 0-9.6 2 5 5 0 0 0 1 2.9 20 20 0 0 0-6 14.3 20 20 0 0 0 39.4 5h.6a5 5 0 1 0 0-10"/> - <path fill="#3ecc5f" d="M83 123h40v-20H83z"/> - <use xlink:href="#a" x="-60" fill="#44d860"/> - <path d="M143 41.8a3 3 0 0 1-.5-.1 2.5 2.5 0 0 1-.5-.1l-.4-.3-.4-.3-.3-.3a2.6 2.6 0 0 1-.2-.5 2.6 2.6 0 0 1-.1-.4 2.7 2.7 0 0 1 0-1v-.5a2.6 2.6 0 0 1 .3-.4l.3-.4.4-.3a2 2 0 0 1 .4-.3 2.5 2.5 0 0 1 .5-.1h1l.5.1.4.3.4.3a3.7 3.7 0 0 1 .3.4 2.5 2.5 0 0 1 .2.4l.1.5a2.8 2.8 0 0 1 0 .4 2.5 2.5 0 0 1-.6 1.8l-.4.3a2 2 0 0 1-.4.2l-.5.2a2 2 0 0 1-.5 0m20-1.2a2.5 2.5 0 0 1-1.8-.7 3.7 3.7 0 0 1-.3-.4 2.6 2.6 0 0 1-.2-.4 2.6 2.6 0 0 1-.1-.5l-.1-.5a2.5 2.5 0 0 1 .7-1.8l.4-.3a2 2 0 0 1 .4-.2 2.5 2.5 0 0 1 .5-.1h1.5l.4.3.4.3a2.5 2.5 0 0 1 .7 1.8 2.8 2.8 0 0 1 0 .5l-.2.5a3.5 3.5 0 0 1-.2.4 3.7 3.7 0 0 1-.3.4c-.2 0-.3.2-.4.3a2 2 0 0 1-.4.2l-.5.1a2 2 0 0 1-.5 0"/> - </g> - <defs> - <path id="a" d="M193 115.5a2.5 2.5 0 1 0 0-5h-.3v-.2a2.5 2.5 0 0 0-1-4.8 2.5 2.5 0 0 0-1.5.5l-.2-.1a2.5 2.5 0 0 0 .5-1.5 2.5 2.5 0 0 0-4.8-1A10 10 0 0 0 173 113a10 10 0 0 0 12.7 9.6 2.5 2.5 0 0 0 4.8-1c0-.5-.2-1-.5-1.4l.2-.2a2.5 2.5 0 0 0 1.5.5 2.5 2.5 0 0 0 1-4.8v-.2h.3"/> - <path id="b" d="M168 124h-50a1 1 0 1 1 0-2h50a1 1 0 1 1 0 2"/> - </defs> -</svg> diff --git a/public/logos/doks.svg b/public/logos/doks.svg deleted file mode 100644 index 4631bc535..000000000 --- a/public/logos/doks.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M32.415 9.586l-9-9C23.054.225 22.553 0 22 0c-1.104 0-1.999.896-2 2 0 .552.224 1.053.586 1.415l-3.859 3.859 9 9 3.859-3.859c.362.361.862.585 1.414.585 1.104 0 2.001-.896 2-2 0-.552-.224-1.052-.585-1.414z"/><path fill="#CCD6DD" d="M22 0H7C4.791 0 3 1.791 3 4v28c0 2.209 1.791 4 4 4h22c2.209 0 4-1.791 4-4V11h-9c-1 0-2-1-2-2V0z"/><path fill="#99AAB5" d="M22 0h-2v9c0 2.209 1.791 4 4 4h9v-2h-9c-1 0-2-1-2-2V0zm-5 8c0 .552-.448 1-1 1H8c-.552 0-1-.448-1-1s.448-1 1-1h8c.552 0 1 .448 1 1zm0 4c0 .552-.448 1-1 1H8c-.552 0-1-.448-1-1s.448-1 1-1h8c.552 0 1 .448 1 1zm12 4c0 .552-.447 1-1 1H8c-.552 0-1-.448-1-1s.448-1 1-1h20c.553 0 1 .448 1 1zm0 4c0 .553-.447 1-1 1H8c-.552 0-1-.447-1-1 0-.553.448-1 1-1h20c.553 0 1 .447 1 1zm0 4c0 .553-.447 1-1 1H8c-.552 0-1-.447-1-1 0-.553.448-1 1-1h20c.553 0 1 .447 1 1zm0 4c0 .553-.447 1-1 1H8c-.552 0-1-.447-1-1 0-.553.448-1 1-1h20c.553 0 1 .447 1 1z"/></svg> \ No newline at end of file diff --git a/public/logos/edgio.svg b/public/logos/edgio.svg deleted file mode 100644 index 439d0f9c3..000000000 --- a/public/logos/edgio.svg +++ /dev/null @@ -1,55 +0,0 @@ -<svg width="145" height="60" viewBox="0 0 145 60" fill="none" xmlns="http://www.w3.org/2000/svg"> - <path d="M30.4665 9.54917L35.0206 1.28735H0V46.477H29.9603L25.4053 38.2152H9.00553V27.8227H24.7364L27.2674 19.5546H9.00553V9.54917H30.4665Z" fill="url(#paint0_linear_3380_5580)" /> - <path d="M30.4665 9.54917L35.0206 1.28735H0V46.477H29.9603L25.4053 38.2152H9.00553V27.8227H24.7364L27.2674 19.5546H9.00553V9.54917H30.4665Z" fill="url(#paint1_linear_3380_5580)" /> - <path d="M52.2318 7.38105V18.4612C50.6883 16.6171 48.6698 15.2364 45.9698 14.6546C45.0036 14.4566 44.0195 14.3582 43.0332 14.361C34.3835 14.361 27.8965 21.429 27.8965 30.8224C27.8965 31.4407 27.9276 32.0474 27.9845 32.647C28.7593 41.1183 34.952 47.2829 43.0332 47.2829C47.3264 47.2829 50.3324 45.5775 52.3946 43.0208V46.4769H60.6252V0L52.2318 7.38105ZM44.5829 39.4401C39.6456 39.4401 36.515 35.6032 36.515 30.8224C36.515 26.0416 39.6456 22.2039 44.5829 22.2039C49.3948 22.2039 52.657 25.8851 52.657 30.8224C52.657 35.7597 49.3948 39.4401 44.5829 39.4401Z" fill="url(#paint2_linear_3380_5580)" /> - <path d="M52.2318 7.38105V18.4612C50.6883 16.6171 48.6698 15.2364 45.9698 14.6546C45.0036 14.4566 44.0195 14.3582 43.0332 14.361C34.3835 14.361 27.8965 21.429 27.8965 30.8224C27.8965 31.4407 27.9276 32.0474 27.9845 32.647C28.7593 41.1183 34.952 47.2829 43.0332 47.2829C47.3264 47.2829 50.3324 45.5775 52.3946 43.0208V46.4769H60.6252V0L52.2318 7.38105ZM44.5829 39.4401C39.6456 39.4401 36.515 35.6032 36.515 30.8224C36.515 26.0416 39.6456 22.2039 44.5829 22.2039C49.3948 22.2039 52.657 25.8851 52.657 30.8224C52.657 35.7597 49.3948 39.4401 44.5829 39.4401Z" fill="url(#paint3_linear_3380_5580)" /> - <path d="M52.2318 7.38105V18.4612C50.6883 16.6171 48.6698 15.2364 45.9698 14.6546C45.0036 14.4566 44.0195 14.3582 43.0332 14.361C34.3835 14.361 27.8965 21.429 27.8965 30.8224C27.8965 31.4407 27.9276 32.0474 27.9845 32.647C28.7593 41.1183 34.952 47.2829 43.0332 47.2829C47.3264 47.2829 50.3324 45.5775 52.3946 43.0208V46.4769H60.6252V0L52.2318 7.38105ZM44.5829 39.4401C39.6456 39.4401 36.515 35.6032 36.515 30.8224C36.515 26.0416 39.6456 22.2039 44.5829 22.2039C49.3948 22.2039 52.657 25.8851 52.657 30.8224C52.657 35.7597 49.3948 39.4401 44.5829 39.4401Z" fill="url(#paint4_radial_3380_5580)" /> - <path d="M87.8819 15.199V18.6855C85.7193 16.005 82.5863 14.3611 78.2011 14.3611C70.5834 14.3611 63.8027 20.7173 63.8027 30.3411C63.8027 39.9276 70.5834 46.2831 78.2011 46.2831C78.5204 46.2831 78.8327 46.2768 79.1357 46.2519H80.1543C84.0223 46.0393 85.8166 44.4771 87.8227 42.0591V44.2521C87.8227 49.6769 84.1415 52.545 78.9106 52.545C77.1208 52.5496 75.3405 52.2842 73.6299 51.7577L67.8406 57.5501C71.1526 59.1691 75.2964 60.0001 79.2649 60.0001C89.5951 60.0001 96.1445 53.9631 96.1445 43.8954V15.199H87.8819ZM80.3279 38.5407C75.5222 38.5407 72.4532 34.8595 72.4532 30.3411C72.4532 25.7854 75.5222 22.1105 80.3279 22.1105C85.0083 22.1105 88.177 25.66 88.177 30.3411C88.1762 34.9841 85.0075 38.5407 80.3272 38.5407H80.3279Z" fill="url(#paint5_linear_3380_5580)" /> - <path d="M87.8819 15.199V18.6855C85.7193 16.005 82.5863 14.3611 78.2011 14.3611C70.5834 14.3611 63.8027 20.7173 63.8027 30.3411C63.8027 39.9276 70.5834 46.2831 78.2011 46.2831C78.5204 46.2831 78.8327 46.2768 79.1357 46.2519H80.1543C84.0223 46.0393 85.8166 44.4771 87.8227 42.0591V44.2521C87.8227 49.6769 84.1415 52.545 78.9106 52.545C77.1208 52.5496 75.3405 52.2842 73.6299 51.7577L67.8406 57.5501C71.1526 59.1691 75.2964 60.0001 79.2649 60.0001C89.5951 60.0001 96.1445 53.9631 96.1445 43.8954V15.199H87.8819ZM80.3279 38.5407C75.5222 38.5407 72.4532 34.8595 72.4532 30.3411C72.4532 25.7854 75.5222 22.1105 80.3279 22.1105C85.0083 22.1105 88.177 25.66 88.177 30.3411C88.1762 34.9841 85.0075 38.5407 80.3272 38.5407H80.3279Z" fill="url(#paint6_radial_3380_5580)" /> - <path d="M87.8819 15.199V18.6855C85.7193 16.005 82.5863 14.3611 78.2011 14.3611C70.5834 14.3611 63.8027 20.7173 63.8027 30.3411C63.8027 39.9276 70.5834 46.2831 78.2011 46.2831C78.5204 46.2831 78.8327 46.2768 79.1357 46.2519H80.1543C84.0223 46.0393 85.8166 44.4771 87.8227 42.0591V44.2521C87.8227 49.6769 84.1415 52.545 78.9106 52.545C77.1208 52.5496 75.3405 52.2842 73.6299 51.7577L67.8406 57.5501C71.1526 59.1691 75.2964 60.0001 79.2649 60.0001C89.5951 60.0001 96.1445 53.9631 96.1445 43.8954V15.199H87.8819ZM80.3279 38.5407C75.5222 38.5407 72.4532 34.8595 72.4532 30.3411C72.4532 25.7854 75.5222 22.1105 80.3279 22.1105C85.0083 22.1105 88.177 25.66 88.177 30.3411C88.1762 34.9841 85.0075 38.5407 80.3272 38.5407H80.3279Z" fill="url(#paint7_radial_3380_5580)" /> - <path d="M99.7391 22.6167V46.477H108.164V15.2053L99.7391 22.6167ZM108.163 13.133H99.7383V4.70923H108.163V13.133Z" fill="url(#paint8_linear_3380_5580)" /> - <path d="M127.716 14.3619C117.998 14.3619 110.836 21.3987 110.836 30.8232C110.836 40.2477 118 47.2838 127.716 47.2838C137.465 47.2838 144.664 40.2469 144.664 30.8232C144.664 21.3995 137.464 14.3611 127.717 14.3611L127.716 14.3619ZM127.716 39.4378C122.973 39.4378 119.417 35.8882 119.417 30.8201C119.417 25.7519 122.972 22.2039 127.717 22.2039C132.492 22.2039 136.041 25.7543 136.041 30.8224C136.041 35.8906 132.49 39.4401 127.717 39.4401L127.716 39.4378Z" fill="url(#paint9_linear_3380_5580)" /> - <defs> - <linearGradient id="paint0_linear_3380_5580" x1="10.0234" y1="36.2912" x2="30.1513" y2="45.9939" gradientUnits="userSpaceOnUse"> - <stop stop-color="#82278D" /> - <stop offset="1" stop-color="#574BA7" /> - </linearGradient> - <linearGradient id="paint1_linear_3380_5580" x1="1.07546" y1="28.0661" x2="34.8994" y2="1.40279" gradientUnits="userSpaceOnUse"> - <stop stop-color="#82278D" stop-opacity="0" /> - <stop offset="1" stop-color="#624293" /> - </linearGradient> - <linearGradient id="paint2_linear_3380_5580" x1="27.0629" y1="31.147" x2="62.9254" y2="47.4306" gradientUnits="userSpaceOnUse"> - <stop stop-color="#663F9B" /> - <stop offset="1" stop-color="#1D82BB" /> - </linearGradient> - <linearGradient id="paint3_linear_3380_5580" x1="59.6439" y1="-0.395852" x2="49.1691" y2="26.0692" gradientUnits="userSpaceOnUse"> - <stop stop-color="#3C6497" /> - <stop offset="1" stop-color="#455CA1" stop-opacity="0" /> - </linearGradient> - <radialGradient id="paint4_radial_3380_5580" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(64.0072 12.8583) rotate(171.87) scale(9.34311 22.5267)"> - <stop stop-color="#366A9C" /> - <stop offset="1" stop-color="#366A9D" stop-opacity="0" /> - </radialGradient> - <linearGradient id="paint5_linear_3380_5580" x1="61.6258" y1="34.4868" x2="98.1704" y2="48.6567" gradientUnits="userSpaceOnUse"> - <stop stop-color="#2A76A8" /> - <stop offset="1" stop-color="#05A6A2" /> - </linearGradient> - <radialGradient id="paint6_radial_3380_5580" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(62.1223 64.7988) rotate(-24.1226) scale(39.4972 27.9894)"> - <stop stop-color="#0799D5" /> - <stop offset="1" stop-color="#03A9A4" stop-opacity="0" /> - </radialGradient> - <radialGradient id="paint7_radial_3380_5580" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(103.561 15.6843) rotate(153.407) scale(33.9101 24.0301)"> - <stop stop-color="#0A8A7C" /> - <stop offset="1" stop-color="#029792" stop-opacity="0" /> - </radialGradient> - <linearGradient id="paint8_linear_3380_5580" x1="105.467" y1="-2.78842" x2="110.403" y2="46.1532" gradientUnits="userSpaceOnUse"> - <stop stop-color="#119189" /> - <stop offset="1" stop-color="#03AA9C" /> - </linearGradient> - <linearGradient id="paint9_linear_3380_5580" x1="118.919" y1="15.9397" x2="142.637" y2="41.3736" gradientUnits="userSpaceOnUse"> - <stop stop-color="#06A082" /> - <stop offset="1" stop-color="#00B17C" /> - </linearGradient> - </defs> -</svg> - \ No newline at end of file diff --git a/public/logos/eleventy.svg b/public/logos/eleventy.svg deleted file mode 100644 index dedd9e1e2..000000000 --- a/public/logos/eleventy.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" cursor="default" viewBox="0 0 1568 2186"> - <path fill="#cbcbcb" fill-rule="evenodd" d="M848 615c-10 3-18 13-20 28l-2 19-10 201v3h-16c-18 0-24 1-30 7-5 5-9 13-11 22l-1 31c1 21 1 24 3 30 3 9 7 14 14 17 6 3 7 4 23 4l18 1v178c1 198 0 188 8 224 10 53 29 83 65 101 21 11 36 13 88 13 37 0 44-1 51-5 13-7 17-18 17-50s-4-42-19-49c-4-1-9-2-35-2-31 0-32-1-36-3-6-3-9-8-14-23-8-25-8-28-8-218V977h34c39 0 41 0 49-6 6-5 10-13 12-22a251 251 0 0 0-2-62c-3-8-8-14-14-17l-5-3-37-1h-37V756l-2-117c-3-11-8-18-16-23l-5-2-29-1c-22 0-29 0-33 2m-522 1a117158 117158 0 0 0-142 38c-6 3-13 10-15 17-2 5-2 6-2 43l1 43c3 7 9 14 14 17 8 4 14 4 34-1l20-5c1 0 2 0 2 345l1 345 2 7c4 16 12 25 23 27l43 1h37l5-3c10-5 16-15 19-32l1-413c0-395-1-406-2-410-7-18-21-24-41-19m227 17c-40 10-74 20-76 21-9 5-15 12-17 23-3 9-3 64-1 74 4 15 12 24 25 26l24-4 20-6c2 0 2 18 2 344l1 345 2 8c3 10 5 15 10 21 7 7 8 8 53 8 28 0 40-1 43-2 9-3 17-14 21-30l2-406-1-408c-2-16-6-25-15-30l-13-3c-8 0-12 1-80 19m533 234c-6 2-11 6-13 12-5 8-7 23-5 36 1 5 26 108 63 251 62 243 66 260 70 281 3 19 2 39-3 58-3 10-11 25-15 30-3 4-4 4-8 3l-20-5c-17-5-23-6-29-4-10 3-17 11-21 26-2 6-2 10-2 26-1 23 1 29 9 39 14 17 34 25 67 26 25 1 40-2 57-11 33-17 54-51 70-114 6-20 5-17 61-308l55-283c3-15 3-35 1-43-3-9-8-15-13-18-5-2-6-3-32-3-31 0-34 0-42 7-5 5-11 14-13 23a11519 11519 0 0 0-62 333v4l-1-3-27-122c-53-239-48-217-54-226-4-7-10-12-17-14-4-2-9-2-38-2l-38 1"/> -</svg> diff --git a/public/logos/fathom-analytics.svg b/public/logos/fathom-analytics.svg deleted file mode 100644 index e0c71012b..000000000 --- a/public/logos/fathom-analytics.svg +++ /dev/null @@ -1,7 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 67.851 50"> - <g transform="translate(11882.544 12524.362)"> - <path d="M81.249,324.048H78.86a1.962,1.962,0,0,0-1.855,1.318l-14.9,42.741a1.963,1.963,0,0,0,1.855,2.61h2.388a1.963,1.963,0,0,0,1.854-1.317l14.9-42.741a1.964,1.964,0,0,0-1.854-2.611" transform="translate(-11897.906 -12845.645)" fill="hsla(240, 75%, 76%, 1)"/> - <path d="M14.677,336.886v-1.948a1.964,1.964,0,0,0-1.963-1.964H8.957v-1.805c-.006-2.11.471-3.374.9-3.834l.02-.025a2.2,2.2,0,0,1,1.061-.579,25.624,25.624,0,0,1,4.2-.325h.722a1.964,1.964,0,0,0,1.963-1.964v-1.76a1.96,1.96,0,0,0-1.588-1.928c-.238-.046-.5-.093-.8-.138-.371-.057-2.317-.085-2.7-.086h-.027c-3.163,0-5.856.739-7.66,2.674l0,0c-1.762,1.941-2.4,4.687-2.4,8.023V368A1.964,1.964,0,0,0,4.6,369.962H6.993A1.962,1.962,0,0,0,8.957,368V338.849h3.756a1.962,1.962,0,0,0,1.963-1.963" transform="translate(-11885.184 -12844.891)" fill="#fff"/> - <path d="M43.125,337.381a14.827,14.827,0,0,0-7.629-1.813,17.368,17.368,0,0,0-7.612,1.546A12.219,12.219,0,0,0,22.7,341.75l-.009.013a1.694,1.694,0,0,0-.254.895,1.792,1.792,0,0,0,1.2,1.684h0l1.927.686a2.748,2.748,0,0,0,3.053-.863,7.86,7.86,0,0,1,.582-.637c1.261-1.224,3.132-1.945,6.044-1.956a10.514,10.514,0,0,1,3.686.574,5.038,5.038,0,0,1,2.175,1.529c1.091,1.339,1.778,3.408,1.842,6.374-2.806.044-5.3.161-7.446.362a34.983,34.983,0,0,0-7.946,1.654h0l-.009,0-.023.006,0,0a12.629,12.629,0,0,0-6.1,3.776,10.233,10.233,0,0,0-2.216,6.72v.064a10.849,10.849,0,0,0,1.67,6.015,10.4,10.4,0,0,0,4.665,3.87,16.69,16.69,0,0,0,6.692,1.232,15.255,15.255,0,0,0,5.159-.965,16.393,16.393,0,0,0,5.07-2.992c.3-.251.573-.52.843-.8a9.263,9.263,0,0,0,1.146,3.251,1.95,1.95,0,0,0,1.673.935h0l1.149-.013a1.964,1.964,0,0,0,1.941-1.963V350.166a18.409,18.409,0,0,0-1.426-7.523,11.334,11.334,0,0,0-4.662-5.262m-1.6,24.9a11.575,11.575,0,0,1-3.878,4.041,9.525,9.525,0,0,1-5.235,1.486,7.992,7.992,0,0,1-5.25-1.5,4.367,4.367,0,0,1-1.228-1.59,5.665,5.665,0,0,1-.42-2.242,5.093,5.093,0,0,1,.655-2.579,5.261,5.261,0,0,1,2.41-1.934,22.124,22.124,0,0,1,6.1-1.587,68.356,68.356,0,0,1,8.281-.581v1.215a10.274,10.274,0,0,1-1.432,5.269" transform="translate(-11888.733 -12848.114)" fill="#fff"/> - </g> -</svg> diff --git a/public/logos/firebase.svg b/public/logos/firebase.svg deleted file mode 100644 index 1c08f1399..000000000 --- a/public/logos/firebase.svg +++ /dev/null @@ -1 +0,0 @@ -<svg viewBox="0 0 111 151" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="a" x1="-3.5%" x2="100.8%" y1="17%" y2="92.9%"><stop offset="0" stop-color="#fff" stop-opacity=".1"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></linearGradient><path id="b" d="m95.8 33.6a3.4 3.4 0 0 0 -5.8-1.9l-17.7 17.9-14-26.6a3.3 3.3 0 0 0 -6 0l-7.7 14.4-19.2-35.4c-1.5-3-6-2.2-6.4 1l-18.5 118.2 49.5 27.7c3.1 1.7 7 1.7 10 0l50-27.7z"/><mask id="c" fill="#fff"><use fill="#fff" fill-rule="evenodd" xlink:href="#b"/></mask></defs><g fill="none" fill-rule="evenodd" transform="translate(.2)"><use fill="url(#a)" fill-rule="nonzero" xlink:href="#b"/><g fill-rule="nonzero" mask="url(#c)"><path d="m.5 121.2 18.6-118.2c.5-3.2 4.8-4 6.4-1l19.1 35.5 7.7-14.4a3.4 3.4 0 0 1 6 0l51.7 98h-109.5z" fill="#ffa000"/><path d="m64.5 75.2-20-37.6-44 83.6z" fill="#f57c00"/><path d="m110 121.2-14.2-87.6a3.4 3.4 0 0 0 -5.8-1.9l-89.5 89.5 49.5 27.7c3.1 1.7 7 1.7 10 0z" fill="#ffca28"/><path d="m95.8 33.6a3.4 3.4 0 0 0 -5.8-1.9l-17.7 17.9-14-26.6a3.3 3.3 0 0 0 -6 0l-7.7 14.4-19.2-35.4c-1.5-3-6-2.2-6.4 1l-18.5 118.2.5.3 71.2-71 17.8-17.9a3.5 3.5 0 0 1 5.8 1.9l14 86.7.2-.1-14.2-87.6zm-95.1 87.4 18.3-117.1c.5-3.3 4.8-4 6.4-1.1l19.1 35.6 7.7-14.5a3.4 3.4 0 0 1 6 0l13.8 26.1z" fill="#fff" fill-opacity=".2"/><path d="m60 148a10.4 10.4 0 0 1 -10 0l-49.4-27.6-.1.8 49.5 27.7c3.1 1.7 7 1.7 10 0l50-27.7v-.8z" fill="#a52714" opacity=".2"/></g><path d="m-26.9-6.7h164.3v163.7h-164.3z" mask="url(#c)"/><path d="m95.8 33.6a3.4 3.4 0 0 0 -5.8-1.9l-17.7 17.9-14-26.6a3.3 3.3 0 0 0 -6 0l-7.7 14.4-19.2-35.4c-1.5-3-6-2.2-6.4 1l-18.5 118.2 49.5 27.7c3.1 1.7 7 1.7 10 0l50-27.7z" fill="url(#a)" fill-rule="nonzero" mask="url(#c)"/></g></svg> \ No newline at end of file diff --git a/public/logos/flightcontrol.svg b/public/logos/flightcontrol.svg deleted file mode 100644 index e7b443058..000000000 --- a/public/logos/flightcontrol.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="700" height="200" viewBox="0 0 700 200" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M95.92 70.24V58.24H50.92V130H63.52V100.36H93.76V88.36H63.52V70.24H95.92ZM109.048 130H121.168L119.608 119.44V58.24H107.608V120.76L109.048 130ZM133.621 70.84H146.461V58H133.621V70.84ZM134.101 130H146.101V78.16H134.101V130ZM176.319 149.8H188.439C190.959 149.8 193.719 149.08 195.999 147.4C197.439 146.32 200.679 143.08 201.759 141.64C203.439 139.36 204.159 136.6 204.159 134.08V88.84L205.119 78.16H193.239L192.759 81.28C190.599 79.6 187.959 77.56 185.079 77.56H174.759C172.239 77.56 169.479 78.28 167.199 79.96C165.759 81.04 162.519 84.28 161.439 85.72C159.759 88 159.039 90.76 159.039 93.28V114.88C159.039 117.4 159.759 120.16 161.439 122.44C162.519 123.88 165.759 127.12 167.199 128.2C169.479 129.88 172.239 130.6 174.759 130.6H185.079C187.599 130.6 190.479 128.56 192.159 126.88V133.6C192.159 134.56 191.679 135.28 190.359 136.6C189.039 137.92 188.319 138.4 187.359 138.4H175.959C174.639 138.4 172.719 135.88 171.399 134.2L160.239 137.56C163.239 143.32 169.119 149.8 176.319 149.8ZM171.039 114.4V93.76C171.039 92.8 171.519 92.08 172.839 90.76C174.159 89.44 174.879 88.96 175.839 88.96H184.719C186.159 88.96 190.479 92.44 192.159 94.24V113.8C190.599 115.6 186.039 119.2 184.719 119.2H175.839C174.879 119.2 174.159 118.72 172.839 117.4C171.519 116.08 171.039 115.36 171.039 114.4ZM218.358 130H230.358V94.24C231.798 92.44 236.118 88.96 237.678 88.96H245.838C246.798 88.96 247.518 89.44 248.838 90.76C250.158 92.08 250.638 92.8 250.638 93.76V130H262.638V93.28C262.638 90.76 261.918 88 260.238 85.72C259.158 84.28 255.918 81.04 254.478 79.96C252.198 78.28 249.438 77.56 246.918 77.56H237.438C234.918 77.56 232.398 79.36 230.358 80.8V58.24H218.358V130ZM306.483 89.56V78.16H291.603V58.24H279.603V78.16H271.563V89.56H279.603V114.28C279.603 116.8 280.323 119.56 282.003 121.84C283.083 123.28 286.323 126.52 287.763 127.6C290.043 129.28 292.803 130 295.323 130H304.563V118.6H296.403C295.443 118.6 294.723 118.12 293.403 116.8C292.083 115.48 291.603 114.76 291.603 113.8V89.56H306.483ZM331.79 130.6H345.23C352.43 130.6 358.19 123.76 361.19 118L350.03 114.64C348.71 116.32 346.67 119.2 345.35 119.2H332.87C331.91 119.2 331.19 118.72 329.87 117.4C328.55 116.08 328.07 115.36 328.07 114.4V93.76C328.07 92.8 328.55 92.08 329.87 90.76C331.19 89.44 331.91 88.96 332.87 88.96H345.11C346.43 88.96 348.47 91.84 349.79 93.52L360.95 90.16C357.95 84.4 352.19 77.56 344.99 77.56H331.79C329.27 77.56 326.51 78.28 324.23 79.96C322.79 81.04 319.55 84.28 318.47 85.72C316.79 88 316.07 90.76 316.07 93.28V114.88C316.07 117.4 316.79 120.16 318.47 122.44C319.55 123.88 322.79 127.12 324.23 128.2C326.51 129.88 329.27 130.6 331.79 130.6ZM386.868 130.6H400.668C403.188 130.6 405.948 129.88 408.228 128.2C409.668 127.12 412.908 123.88 413.988 122.44C415.668 120.16 416.388 117.4 416.388 114.88V93.28C416.388 90.76 415.668 88 413.988 85.72C412.908 84.28 409.668 81.04 408.228 79.96C405.948 78.28 403.188 77.56 400.668 77.56H386.868C384.348 77.56 381.588 78.28 379.308 79.96C377.868 81.04 374.628 84.28 373.548 85.72C371.868 88 371.148 90.76 371.148 93.28V114.88C371.148 117.4 371.868 120.16 373.548 122.44C374.628 123.88 377.868 127.12 379.308 128.2C381.588 129.88 384.348 130.6 386.868 130.6ZM383.148 114.4V93.76C383.148 92.8 383.628 92.08 384.948 90.76C386.268 89.44 386.988 88.96 387.948 88.96H399.588C400.548 88.96 401.268 89.44 402.588 90.76C403.908 92.08 404.388 92.8 404.388 93.76V114.4C404.388 115.36 403.908 116.08 402.588 117.4C401.268 118.72 400.548 119.2 399.588 119.2H387.948C386.988 119.2 386.268 118.72 384.948 117.4C383.628 116.08 383.148 115.36 383.148 114.4ZM471.656 85.72C470.576 84.28 467.336 81.04 465.896 79.96C463.616 78.28 460.856 77.56 458.336 77.56H448.496C445.736 77.56 443.096 79.72 440.936 81.28L440.216 78.16H428.576L429.776 88.84V130H441.776V93.88C443.336 92.2 446.576 88.96 448.856 88.96H457.256C458.216 88.96 458.936 89.44 460.256 90.76C461.576 92.08 462.056 92.8 462.056 93.76V130H474.056V93.28C474.056 90.76 473.336 88 471.656 85.72ZM517.89 89.56V78.16H503.01V58.24H491.01V78.16H482.97V89.56H491.01V114.28C491.01 116.8 491.73 119.56 493.41 121.84C494.49 123.28 497.73 126.52 499.17 127.6C501.45 129.28 504.21 130 506.73 130H515.97V118.6H507.81C506.85 118.6 506.13 118.12 504.81 116.8C503.49 115.48 503.01 114.76 503.01 113.8V89.56H517.89ZM528.917 130H540.917V93.88C542.357 92.08 545.597 88.96 547.997 88.96H555.677C556.997 88.96 559.037 91.84 560.357 93.52L571.517 90.16C568.517 84.4 562.757 77.56 555.557 77.56H547.637C544.877 77.56 542.117 79.6 539.957 81.28L539.237 78.16H527.717L528.917 88.84V130ZM593.822 130.6H607.622C610.142 130.6 612.902 129.88 615.182 128.2C616.622 127.12 619.862 123.88 620.942 122.44C622.622 120.16 623.342 117.4 623.342 114.88V93.28C623.342 90.76 622.622 88 620.942 85.72C619.862 84.28 616.622 81.04 615.182 79.96C612.902 78.28 610.142 77.56 607.622 77.56H593.822C591.302 77.56 588.542 78.28 586.262 79.96C584.822 81.04 581.582 84.28 580.502 85.72C578.822 88 578.102 90.76 578.102 93.28V114.88C578.102 117.4 578.822 120.16 580.502 122.44C581.582 123.88 584.822 127.12 586.262 128.2C588.542 129.88 591.302 130.6 593.822 130.6ZM590.102 114.4V93.76C590.102 92.8 590.582 92.08 591.902 90.76C593.222 89.44 593.942 88.96 594.902 88.96H606.542C607.502 88.96 608.222 89.44 609.542 90.76C610.862 92.08 611.342 92.8 611.342 93.76V114.4C611.342 115.36 610.862 116.08 609.542 117.4C608.222 118.72 607.502 119.2 606.542 119.2H594.902C593.942 119.2 593.222 118.72 591.902 117.4C590.582 116.08 590.102 115.36 590.102 114.4ZM637.329 130H649.449L647.889 119.44V58.24H635.889V120.76L637.329 130Z" fill="white"/> -</svg> diff --git a/public/logos/frontmatter-cms.svg b/public/logos/frontmatter-cms.svg deleted file mode 100644 index ecb3d48f1..000000000 --- a/public/logos/frontmatter-cms.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 1201 1201"><g fill="#00eaff"><path d="M173 577H97V215h135v85h-59v52h55v82h-55v143zM463 577h-82l-38-129a137 137 0 0 0-5-22v151h-76V215h78c35 0 61 8 78 26 22 22 32 53 32 94 0 44-14 74-43 91l56 151zM338 382h5c9 0 17-4 22-13 6-8 9-19 9-32 0-28-11-41-33-41h-3v86zM693 397c0 55-10 100-29 135-20 34-45 51-77 51-28 0-52-13-71-40-26-33-38-83-38-150 0-64 13-114 39-147 20-26 43-38 69-38 33 0 59 17 78 51 20 34 29 80 29 138zm-79 1c0-66-9-99-27-99-10 0-17 9-22 26-6 16-8 39-8 70s2 55 7 71c5 17 12 26 21 26s16-9 21-25c5-17 8-40 8-69zM726 577V215h73l38 127 7 25 9 34 8 32a3207 3207 0 0 1-9-137v-81h73v362h-73l-38-133a1916 1916 0 0 1-20-76 2650 2650 0 0 1 5 117v92h-73zM1064 577h-77V301h-42v-86h163v86h-44v276z"/></g><g fill="#00eaff"><path d="M123 658h36l27 133a1428 1428 0 0 1 18 98v-3l6-38 5-35 5-24 24-131h36l29 327h-40l-7-111-1-14v-11l-2-43-1-41v-5l-1 6-3 21-3 14-5 30-2 11-26 144h-28l-25-124a1089 1089 0 0 1-16-102l-12 225H98l25-327zM396 658h32l67 327h-42l-11-63h-62l-12 64h-40l68-328zm40 230-10-53c-6-35-11-73-15-114a1296 1296 0 0 1-18 125l-7 42h50zM496 658h136v38h-47v290h-41V696h-48v-38zM638 658h136v38h-47v290h-41V696h-48v-38zM805 658h112v37h-70v104h62v37h-62v112h70v38H805V658zM963 658h55c23 0 40 5 51 17 14 15 21 38 21 68 0 24-4 42-11 57-8 14-18 23-32 26l57 160h-42l-57-161v161h-42V658zm42 145c16 0 27-4 34-12s10-21 10-40c0-10 0-19-2-26-1-7-3-13-6-18-3-4-7-8-12-10s-10-3-17-3h-7v109z"/></g><path fill="#00eaff" d="M97 94h170v43H97zM352 94h170v43H352zM610 94h170v43H610zM97 1061h170v43H97zM352 1061h170v43H352zM610 1061h170v43H610z"/></svg> diff --git a/public/logos/gatsby.svg b/public/logos/gatsby.svg deleted file mode 100644 index ef0654e7b..000000000 --- a/public/logos/gatsby.svg +++ /dev/null @@ -1,4 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28"> - <circle cx="14" cy="14" r="14" fill="#639"/> - <path fill="#fff" d="M6.2 21.8A10.9 10.9 0 0 1 3 14.2L13.9 25c-2.8-.1-5.6-1.1-7.7-3.2zm10.2 2.9L3.3 11.6a11 11 0 0 1 19.6-4.1l-1.5 1.3A9.2 9.2 0 0 0 14 5a9.1 9.1 0 0 0-8.5 6L17 22.5a9 9 0 0 0 5.8-6.5H18v-2h7a11 11 0 0 1-8.6 10.7z"/> -</svg> diff --git a/public/logos/ghost.png b/public/logos/ghost.png deleted file mode 100644 index 8d3419e02..000000000 Binary files a/public/logos/ghost.png and /dev/null differ diff --git a/public/logos/gitbook.svg b/public/logos/gitbook.svg deleted file mode 100644 index 3fafce936..000000000 --- a/public/logos/gitbook.svg +++ /dev/null @@ -1 +0,0 @@ -<svg fill="#90B0FF" width="256px" height="256px" viewBox="-1.44 -1.44 26.88 26.88" role="img" xmlns="http://www.w3.org/2000/svg" stroke="#4285FD"><g id="SVGRepo_bgCarrier" stroke-width="0"></g><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g><g id="SVGRepo_iconCarrier"><path d="M10.802 17.77a.703.703 0 1 1-.002 1.406.703.703 0 0 1 .002-1.406m11.024-4.347a.703.703 0 1 1 .001-1.406.703.703 0 0 1-.001 1.406m0-2.876a2.176 2.176 0 0 0-2.174 2.174c0 .233.039.465.115.691l-7.181 3.823a2.165 2.165 0 0 0-1.784-.937c-.829 0-1.584.475-1.95 1.216l-6.451-3.402c-.682-.358-1.192-1.48-1.138-2.502.028-.533.212-.947.493-1.107.178-.1.392-.092.62.027l.042.023c1.71.9 7.304 3.847 7.54 3.956.363.169.565.237 1.185-.057l11.564-6.014c.17-.064.368-.227.368-.474 0-.342-.354-.477-.355-.477-.658-.315-1.669-.788-2.655-1.25-2.108-.987-4.497-2.105-5.546-2.655-.906-.474-1.635-.074-1.765.006l-.252.125C7.78 6.048 1.46 9.178 1.1 9.397.457 9.789.058 10.57.006 11.539c-.08 1.537.703 3.14 1.824 3.727l6.822 3.518a2.175 2.175 0 0 0 2.15 1.862 2.177 2.177 0 0 0 2.173-2.14l7.514-4.073c.38.298.853.461 1.337.461A2.176 2.176 0 0 0 24 12.72a2.176 2.176 0 0 0-2.174-2.174"></path></g></svg> \ No newline at end of file diff --git a/public/logos/github.svg b/public/logos/github.svg deleted file mode 100644 index 6e69c1532..000000000 --- a/public/logos/github.svg +++ /dev/null @@ -1 +0,0 @@ -<svg viewBox="0 0 64 62.4" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="m32 0a32 32 0 0 0 -10.1 62.4c1.6.3 2.2-.7 2.2-1.5v-5.4c-8.9 1.9-10.8-4.3-10.8-4.3-1.5-3.7-3.6-4.7-3.6-4.7-2.9-2 .2-1.9.2-1.9 3.2.2 4.9 3.3 4.9 3.3 2.9 4.9 7.5 3.5 9.3 2.7a7 7 0 0 1 2-4.3c-7.1-.8-14.6-3.6-14.6-15.8 0-3.5 1.2-6.3 3.3-8.6a12 12 0 0 1 .3-8.5s2.7-.9 8.8 3.3a30.9 30.9 0 0 1 16 0c6.1-4.1 8.8-3.3 8.8-3.3a12 12 0 0 1 .3 8.5c2.1 2.2 3.3 5.1 3.3 8.6 0 12.3-7.5 15-14.6 15.8 1.1 1 2.2 2.9 2.2 5.9v8.8c0 .9.6 1.9 2.2 1.5a32.4 32.4 0 0 0 21.9-30.5 32 32 0 0 0 -32-32z" fill="#fff" fill-rule="evenodd"/></svg> \ No newline at end of file diff --git a/public/logos/gitlab.svg b/public/logos/gitlab.svg deleted file mode 100644 index aa24cc6f0..000000000 --- a/public/logos/gitlab.svg +++ /dev/null @@ -1 +0,0 @@ -<svg viewBox="0 0 380 380" xmlns="http://www.w3.org/2000/svg"><path d="m282.83 170.73-.27-.69-26.14-68.22a6.81 6.81 0 0 0 -2.69-3.24 7 7 0 0 0 -8 .43 7 7 0 0 0 -2.32 3.52l-17.65 54h-71.47l-17.65-54a6.86 6.86 0 0 0 -2.32-3.53 7 7 0 0 0 -8-.43 6.87 6.87 0 0 0 -2.69 3.24l-26.19 68.19-.26.69a48.54 48.54 0 0 0 16.1 56.1l.09.07.24.17 39.82 29.82 19.7 14.91 12 9.06a8.07 8.07 0 0 0 9.76 0l12-9.06 19.7-14.91 40.06-30 .1-.08a48.56 48.56 0 0 0 16.08-56.04z" fill="#e24329"/><path d="m282.83 170.73-.27-.69a88.3 88.3 0 0 0 -35.15 15.8l-57.41 43.41c19.55 14.79 36.57 27.64 36.57 27.64l40.06-30 .1-.08a48.56 48.56 0 0 0 16.1-56.08z" fill="#fc6d26"/><path d="m153.43 256.89 19.7 14.91 12 9.06a8.07 8.07 0 0 0 9.76 0l12-9.06 19.7-14.91s-17.04-12.89-36.59-27.64c-19.55 14.75-36.57 27.64-36.57 27.64z" fill="#fca326"/><path d="m132.58 185.84a88.19 88.19 0 0 0 -35.14-15.84l-.26.69a48.54 48.54 0 0 0 16.1 56.1l.09.07.24.17 39.82 29.82s17-12.85 36.57-27.64z" fill="#fc6d26"/></svg> \ No newline at end of file diff --git a/public/logos/google-analytics.svg b/public/logos/google-analytics.svg deleted file mode 100644 index 0bf4631b2..000000000 --- a/public/logos/google-analytics.svg +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 192 192" enable-background="new 0 0 192 192" xml:space="preserve"> -<rect x="0" y="0" fill="none" width="192" height="192"/> -<g> - <g> - <path fill="#F9AB00" d="M130,29v132c0,14.77,10.19,23,21,23c10,0,21-7,21-23V30c0-13.54-10-22-21-22S130,17.33,130,29z"/> - </g> - <g> - <path fill="#E37400" d="M75,96v65c0,14.77,10.19,23,21,23c10,0,21-7,21-23V97c0-13.54-10-22-21-22S75,84.33,75,96z"/> - </g> - <g> - <circle fill="#E37400" cx="41" cy="163" r="21"/> - </g> -</g> -</svg> diff --git a/public/logos/google-cloud.svg b/public/logos/google-cloud.svg deleted file mode 100644 index 39dc76aae..000000000 --- a/public/logos/google-cloud.svg +++ /dev/null @@ -1,6 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 97.8 78.6"> - <path fill="#ea4335" d="M62.2 21.7h3.1l8.6-8.4.4-3.6A38.2 38.2 0 0 0 12 28.3c.9-.7 2.9-.2 2.9-.2l17-2.8s.9-1.5 1.3-1.4a21.2 21.2 0 0 1 29-2.2z"/> - <path fill="#4285f4" d="M85.8 28.3A38.3 38.3 0 0 0 74.3 9.7l-12 12a21.2 21.2 0 0 1 7.9 16.5v2.2a10.6 10.6 0 1 1 0 21.2H48.9l-2.1 2.2v12.7l2 2.1h21.3a27.6 27.6 0 0 0 15.7-50.3z"/> - <path fill="#34a853" d="M27.6 78.6H49v-17H27.6a10.5 10.5 0 0 1-4.4-1l-3 1-8.5 8.5-.8 2.9a27.5 27.5 0 0 0 16.7 5.6z"/> - <path fill="#fbbc04" d="M27.6 23.4A27.6 27.6 0 0 0 11 73l12.4-12.3a10.6 10.6 0 1 1 14-14l12.3-12.4a27.6 27.6 0 0 0-22-11z"/> -</svg> diff --git a/public/logos/gridsome.svg b/public/logos/gridsome.svg deleted file mode 100644 index 3af8a5383..000000000 --- a/public/logos/gridsome.svg +++ /dev/null @@ -1,11 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 245 245"> - <path fill="url(#a)" d="M221 101c12 0 23 9 24 21 4 57-48 121-122 123C61 246 0 197 0 122c0-12 10-22 22-22 11 0 21 10 21 22 0 49 40 81 79 80 49-1 81-44 79-78 0-12 9-22 20-23Z"/> - <path fill="#00A672" d="M168 123c0-12 10-22 22-22h32c13 0 23 10 23 22s-10 22-23 22h-32c-12 0-22-10-22-22Zm-67 0a22 22 0 1 1 44 0 22 22 0 0 1-44 0Z"/> - <path fill="#00A672" fill-rule="evenodd" d="M144 21c0 12-9 21-21 22-50 2-81 42-80 80 1 12-8 22-20 22-12 1-22-9-23-21C-2 63 49 1 122 0c11 0 21 9 22 21Z" clip-rule="evenodd"/> - <defs> - <linearGradient id="a" x1="122.5" x2="122.5" y1="100.2" y2="244.8" gradientUnits="userSpaceOnUse"> - <stop stop-color="#00583E"/> - <stop offset="1" stop-color="#00835C"/> - </linearGradient> - </defs> -</svg> diff --git a/public/logos/heroku.svg b/public/logos/heroku.svg deleted file mode 100644 index 85f4dbf70..000000000 --- a/public/logos/heroku.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 72 80"> - <path fill="#FFF" fill-rule="evenodd" d="M64.8 0c4 0 7.2 3.2 7.2 7.2v65.6c0 4-3.2 7.2-7.2 7.2H7.2c-4 0-7.2-3.2-7.2-7.2V7.2C0 3.2 3.2 0 7.2 0Zm0 4H7.2A3.2 3.2 0 0 0 4 7.2v65.6C4 74.6 5.4 76 7.2 76h57.6c1.8 0 3.2-1.4 3.2-3.2V7.2C68 5.4 66.6 4 64.8 4ZM19 52l9 8-9 8V52Zm8-40v22.7c4-1.3 9.6-2.7 15-2.7 5 0 8 2 9.5 3.6 3.3 3.3 3.5 7.5 3.5 8.3V68h-8V44.1c0-1.9-1-4.1-5-4.1-7.8 0-16.4 3.7-17.3 4.1L19 46.7V12h8Zm28 0c-.5 4.5-2.4 8.9-6 13h-8a32 32 0 0 0 6-13Z"/> -</svg> diff --git a/public/logos/hugo.svg b/public/logos/hugo.svg deleted file mode 100644 index 64dc0c379..000000000 --- a/public/logos/hugo.svg +++ /dev/null @@ -1,14 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.4" aria-label="Logo" clip-rule="evenodd" viewBox="0 0 1500 410"> - <path fill="#FF4088" d="M335.1 261.9V139.6a45 45 0 0 0-22.1-38.7L199.8 34.4a52.6 52.6 0 0 0-54.3.6L45 97a58 58 0 0 0-27.5 49.3v125.2a56 56 0 0 0 27.7 48.4L150 381c13.9 8.1 31 8.3 45.2.5l116-64.6a46.7 46.7 0 0 0 23.9-40.8v-14.3z"/> - <path fill="#C9177E" d="M173.2 13.7h4.4l.3.1h1.1l.2.1h1l.2.1h.9l.2.1h.6l.3.1h.2l.3.1h.5l.3.1h.3l.3.1h.5v.1h.5l.3.1h.3l.2.1h.3l.3.1.3.1h.2l.3.1h.3v.1h.2l.3.1h.3l.2.1.3.1h.3l.2.1.3.1h.3l.2.1.3.1h.3v.1h.3l.2.1.3.1.3.1h.2v.1h.3l.3.2h.2l.3.1.3.1.2.1h.3v.1h.3l.2.2h.3l.2.1.3.1.3.1.2.1.3.1.3.1.2.1.3.1.2.1.3.1.3.1.2.1.3.2h.3l.2.2h.3v.1l.2.1.3.1.2.1.3.1.3.1.2.2h.3l.2.2.3.1.2.1.3.2h.2l.3.2.3.1.2.2h.2v.1l.3.1.3.1.2.2.3.1.2.1.3.2.2.1.3.2.2.1.3.1.2.2.2.1.3.2 113.3 66.6h.2l.2.2.2.1.2.2h.2v.1l.2.1.2.1.2.1.2.2.2.1.2.1.2.2.2.1.2.1.2.2h.2v.1l.2.1.2.1.2.2.2.1.2.2.2.1.2.1.2.2.1.1.2.1.2.2.2.1.2.2.2.1.2.2.2.1.2.2.2.1.3.3.4.3.4.3.3.3.4.3.3.3.4.3.3.3.4.4.3.3.4.3.3.3.4.3.3.4.3.3.4.4.3.3.3.3.3.4.3.3.4.4.3.3.3.4.3.3.3.4.3.4.3.3.3.4.3.3.3.4.2.4.3.4.3.3.3.4.3.4.2.4.3.4.3.4.2.4.3.3.2.4.3.4.2.4.3.4.2.4.3.4.2.4.2.4.3.4.2.4.2.4v.1l.2.4.2.4.3.4.2.4.2.4v.1l.2.4.2.4.2.4.2.5.1.4.2.4.2.4v.1l.2.4.1.4.2.5.2.4.2.4.1.5.2.4.1.5.2.4.1.4v.1l.1.4.2.4.1.5.2.4v.5h.1l.1.4.1.5.2.5v.4l.2.5.1.4v.1l.1.4.1.5v.4h.1v.5l.2.4v.5l.1.5.1.5v.5l.1.4v.3l.1.2v.7h.1v.7l.1.3v.7l.1.2v1.2l.1.3v145.2l-.1.3v.7l-.1.3v.7l-.1.3v.5l-.1.2v.3l-.1.2v.5l-.1.3v.5l-.1.2v.3l-.1.2v.5l-.1.2v.3l-.1.2v.3l-.1.2v.3l-.1.2v.2l-.1.3v.2l-.1.2v.3l-.1.2v.3l-.1.2-.1.2v.3l-.1.2-.1.2v.3l-.1.2v.3h-.1v.2l-.1.3-.1.2v.2l-.2.3v.4h-.1v.3l-.1.2-.1.2-.1.3v.2l-.2.3v.2l-.1.2-.1.3v.2l-.2.2v.3l-.1.2-.1.2v.3h-.1v.2l-.2.2v.3l-.2.2v.2l-.1.3-.1.2-.1.2-.1.2-.1.3-.1.2-.1.2-.1.3-.1.2-.1.2-.1.2-.1.3-.1.2-.1.2-.1.2-.1.2-.1.2-.1.3-.2.2v.2l-.2.2v.3l-.2.2-.1.2-.1.2-.1.3-.1.2-.2.2v.2h-.1l-.1.2-.1.2-.2.2v.3l-.2.2-.1.2-.1.2-.2.2v.2h-.1l-.1.2-.1.3-.2.2v.2h-.1l-.1.2-.2.2v.2h-.1l-.1.2-.2.2-.1.2-.1.2-.2.2-.1.2-.1.2-.2.2-.1.2-.2.2-.1.2-.1.2-.2.2-.1.2-.2.2-.1.2-.2.2-.1.2-.2.2-.1.2-.2.2-.1.2-.2.2-.1.2-.2.2-.1.2-.2.2-.1.1-.2.2-.2.2-.1.2-.2.2-.1.2-.2.2-.2.2-.1.2-.2.2-.1.1-.2.2-.2.2-.1.2-.2.2-.2.2-.1.2-.2.1-.2.2-.2.2-.1.2-.2.2-.2.1-.1.2-.2.2-.2.2-.2.1-.2.2-.1.2-.2.2-.2.1-.2.2-.2.2-.1.2-.2.1-.2.2-.2.2-.2.1-.2.2-.1.2-.2.1-.2.2-.2.1-.2.2-.2.2-.2.2-.2.1-.2.2-.2.1-.2.2-.2.1-.2.2-.1.2-.2.1-.2.2-.2.1-.2.2-.2.2-.2.1-.2.2-.2.1-.2.1-.2.2-.2.1-.2.2-.2.1-.3.2-.2.1-.2.2-.2.1-.2.1-.2.2-.2.1-.2.2-.2.1-.3.1-.2.2-.2.1-.2.2h-.2v.1l-.2.1-.2.2-.3.1-.2.1-.2.2h-.2v.1l-.2.1-.3.2h-.2v.1l-.2.1-.2.1-.3.1-115.9 64.7h-.2l-.2.2-.2.1-.2.1-.3.1-.2.1-.2.1-.2.2h-.2l-.2.2h-.3v.1l-.2.1-.2.1-.2.1-.2.1-.2.1-.2.1-.2.1-.3.1-.2.1-.2.1-.2.1-.2.1-.3.1-.2.1-.2.1-.2.1h-.2v.1h-.3l-.2.2h-.2l-.2.1-.3.1-.2.1-.2.1-.2.1h-.3l-.2.2h-.2l-.2.1-.3.1h-.2v.1h-.2l-.3.1-.2.1h-.2v.1h-.2l-.2.1-.3.1h-.2l-.2.1-.3.1-.4.2-.5.1-.4.1-.5.1-.5.2-.4.1-.5.1-.4.1h-.1l-.4.1-.5.1-.4.1h-.1l-.4.1-.5.1-.5.1h-.4v.1h-.5l-.5.1-.4.1h-.5v.1h-.5l-.4.1h-.5v.1h-.5l-.5.1h-.8l-.5.1h-1l-.4.1h-7.7l-.5-.1h-.5l-.4-.1h-.5l-.5-.1h-.5l-.4-.1h-.5v-.1h-.5l-.4-.1-.5-.1h-.5l-.4-.2h-.5l-.4-.1-.5-.1-.5-.1-.4-.1h-.1l-.4-.1-.5-.1-.4-.2h-.5v-.1l-.5-.1-.4-.1-.5-.2-.4-.1h-.1l-.4-.2h-.5v-.1l-.4-.1-.5-.2h-.2l-.3-.1h-.2v-.1h-.2l-.2-.2h-.3l-.2-.1h-.2v-.1h-.2l-.3-.2h-.2l-.2-.1-.2-.1-.3-.1-.2-.1-.2-.1h-.2v-.1h-.3l-.2-.2h-.2l-.3-.2h-.2l-.2-.1-.2-.1-.2-.1-.3-.1-.2-.1-.2-.1-.2-.1-.3-.1-.2-.1-.2-.1-.2-.1-.2-.2h-.2l-.3-.2h-.2v-.1l-.2-.1-.2-.1-.2-.1-.2-.1-.3-.2h-.2l-.2-.2h-.2v-.1l-.2-.1-.2-.1-.2-.1-.3-.2h-.2l-.2-.2-.2-.1-104.8-61.2-.2-.1-.3-.2-.2-.1-.3-.2-.2-.1-.3-.2-.2-.1-.3-.2-.2-.1-.3-.2h.1l-.2-.1-.3-.2-.2-.2-.3-.1-.2-.2-.2-.2-.3-.1-.2-.2-.3-.2-.2-.1-.2-.2-.3-.2-.2-.1-.2-.2-.3-.2-.2-.1-.2-.2-.3-.2-.2-.2-.2-.1-.3-.2-.2-.2-.2-.2-.2-.1-.2-.2-.3-.2-.2-.2-.2-.2-.2-.2-.2-.1-.2-.2-.3-.2-.2-.2-.2-.2-.2-.1-.2-.2-.2-.2-.3-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.1-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.3-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.1-.2-.2-.2-.2-.2-.2-.2-.2-.3-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.1-.2-.2-.2-.2-.3-.2-.2-.2-.2-.2-.2-.2-.2-.1-.2-.2-.2-.2-.3-.2-.2-.2-.2-.2-.2-.1-.2-.2-.2-.2-.3-.2-.2-.1-.2-.2-.2-.2-.2-.1-.3-.2-.2-.2-.2-.1-.2-.2-.3-.2-.2-.1-.2-.2-.2-.2-.3-.1-.2-.2-.2-.1-.3-.2-.2-.2-.2-.1-.3-.2-.2-.1-.2-.2-.3-.1-.2-.2-.2-.1-.3-.2-.2-.2-.2v-.3H14l-.1-.2-.2-.2-.1-.3-.2-.2-.1-.3-.2-.2-.1-.3-.2-.2-.1-.2-.1-.3-.2-.2-.1-.3-.1-.2-.2-.3-.1-.2-.1-.3-.2-.2v-.3l-.2-.2-.1-.3-.2-.2v-.3H11l-.1-.2-.1-.3-.2-.2v-.3l-.2-.2-.1-.3-.1-.2-.1-.3-.2-.2v-.3l-.2-.2-.1-.3-.1-.3-.1-.2-.2-.3v-.2l-.2-.3v-.2l-.2-.3v-.2l-.2-.3v-.3h-.1v-.2h-.1v-.3h-.1v-.2h-.1v-.3h-.1v-.3H8v-.2l-.2-.3v-.3l-.2-.2v-.3l-.2-.3v-.2l-.1-.3-.1-.3-.1-.2-.1-.3v-.5l-.2-.3v-.3l-.1-.3-.1-.2v-.3l-.2-.3v-.3l-.1-.2v-.3h-.1v-.2l-.1-.3v-.3H6v-.2l-.1-.3v-.3l-.1-.2-.1-.3v-.3l-.1-.2-.1-.3v-.3l-.1-.3-.1-.3v-.2l-.1-.3v-.3l-.1-.3v-.2l-.1-.3v-.3h-.1v-.3l-.1-.3v-.5l-.1-.3v-.3l-.1-.2v-.3l-.1-.3v-.5l-.1-.3v-.6l-.1-.3v-.6l-.1-.2v-.6l-.1-.3v-.6L4 277v-1.2l-.1-.3v-2.3l-.1-.2V142.8l.1-.3v-1.7l.1-.3v-.9l.1-.2v-.6l.1-.3v-.6l.1-.3v-.5l.1-.3v-.6l.1-.3v-.3l.1-.2v-.3l.1-.3v-.6l.2-.2v-.6l.1-.3v-.3l.1-.2v-.3l.1-.3.1-.3v-.2l.1-.3v-.3l.1-.2v-.3h.1v-.3l.1-.3v-.3l.2-.2v-.6l.1-.3.1-.2v-.3l.2-.3v-.3l.1-.2v-.3h.1v-.3l.2-.3v-.2l.1-.3.1-.3v-.2l.2-.3v-.3l.1-.2.1-.3.1-.3v-.2h.1v-.3l.2-.3v-.2l.2-.3v-.3l.1-.2.1-.3.1-.2.1-.3.1-.3.1-.2.1-.3.1-.3.1-.2.2-.3v-.2l.2-.3v-.3h.1l.1-.3.1-.2.1-.3.1-.2.1-.3.2-.3v-.2l.2-.3.1-.2.1-.3.1-.2.2-.3v-.2h.1l.1-.3.1-.2.1-.3.2-.2v-.3h.1l.1-.2.1-.3.2-.2.1-.3.1-.2.2-.3.1-.2.1-.3.2-.2.1-.3.1-.2.2-.2.1-.3.2-.2.1-.3.1-.2.2-.3.1-.2.2-.2.1-.3.2-.2.1-.3.2-.2.1-.2.2-.3.1-.2.2-.2.1-.3.2-.2.1-.2.2-.3.1-.2.2-.2.1-.3.2-.2.2-.2.1-.3.2-.2.2-.2.1-.3.2-.2.2-.2.1-.2.2-.3.2-.2.1-.2.2-.2.2-.2.1-.3.2-.2.2-.2.2-.2.2-.2.1-.3.2-.2.2-.2.2-.2.1-.2.2-.3.2-.2.2-.2.2-.2.2-.2.1-.2.2-.2.2-.3.2-.2.2-.2.2-.2.2-.2.2-.2.1-.2.2-.2.2-.2.2-.2.2-.2.2-.3.2-.2.2-.2.2-.2.2-.2.2-.2.2-.2.2-.2.2-.2.2-.2.2-.2.2-.2.3-.1.2-.2.2-.2.2-.2.2-.2.2-.2.2-.2.2-.2.2-.2.3-.1.2-.2.2-.2.2-.2.2-.2.2-.2.3-.1.2-.2.2-.2.2-.2.2-.2.3-.1.2-.2.2-.2.3-.2.2-.2.2-.1.2-.2.3-.2.2-.2.2-.1.2-.2.3-.2.2-.1.2-.2.3-.2.2-.1.3-.2.2-.1.2-.2.3-.2.2-.1.2-.2.3-.1.2-.2.3-.2.2-.1.3-.2.2-.1.2-.2.3-.1.2-.2 100.5-62 .3-.1.2-.2.3-.1.2-.2.3-.1.2-.2.3-.1.2-.1.3-.2.2-.1.2-.2h.3v-.1l.2-.1.3-.2.2-.1.3-.1.2-.2.3-.1.2-.1.3-.2h.3v-.1l.2-.1.3-.1.2-.1.3-.2h.2V20l.3-.1.3-.1.2-.1.3-.2h.2l.3-.2.2-.1.3-.1.2-.1.3-.1.3-.1.2-.1.3-.2h.3l.2-.2h.3v-.1h.2v-.1h.3V18h.5l.3-.2h.3l.2-.2h.3l.3-.1.2-.1.3-.1.3-.1.2-.1.3-.1h.3v-.1h.3l.2-.1.3-.1.3-.1h.2l.3-.2h.2l.3-.1.3-.1h.3l.2-.1.3-.1h.3l.2-.2h.6v-.1h.2l.3-.1h.3l.3-.1.2-.1h.3l.3-.1h.2l.3-.1h.3l.3-.1.2-.1h.3l.3-.1h.3l.2-.1h.3l.3-.1h.3l.2-.1h.6l.3-.1h.2l.3-.1h.6l.2-.1h.6l.3-.1h.8l.3-.1h.5l.3-.1h1.1l.3-.1h2l.3-.1h2zm-.2 27h-2.6l-.2.1h-.7l-.2.1h-.6l-.2.1h-.6l-.2.1h-.5l-.1.1h-.4l-.1.1h-.5l-.2.1h-.3l-.2.1h-.3l-.1.1h-.4l-.1.1h-.3l-.2.1h-.2l-.1.1h-.3l-.2.1h-.2l-.1.1h-.2l-.1.1h-.4l-.1.1h-.2l-.1.1h-.2l-.1.1h-.2l-.2.1h-.1l-.2.2h-.3l-.2.1h-.1l-.2.1h-.1l-.2.1h-.1l-.2.1-.2.1h-.1l-.2.1h-.1l-.2.2h-.3l-.2.1-.1.1h-.2l-.1.1-.2.1h-.1l-.2.1-.1.1h-.2l-.1.2h-.3l-.2.2h-.1l-.2.1h-.1l-.2.2h-.1l-.2.1h-.1l-.2.2h-.1l-.2.1h-.1l-.2.2h-.1l-.2.1-.1.1-.2.1h-.1l-.2.2h-.1l-.2.2h-.1l-.2.1-.1.1-.2.1h-.1l-.2.2L52 108.6l-.2.2h-.1l-.2.2h-.1l-.2.2H51l-.2.2h-.1l-.2.2h-.1l-.2.2h-.1l-.2.2h-.1l-.2.2h-.1l-.2.2-.2.2h-.2l-.1.2-.2.1v.1l-.2.1-.2.1-.1.1-.2.1v.2h-.2l-.2.2h-.1l-.1.2-.2.1-.1.1-.2.1v.1l-.2.1-.2.2-.2.2-.1.1-.2.1-.1.1-.1.1-.2.2-.2.2-.2.1v.1l-.2.2h-.1l-.2.2-.1.1-.1.1-.2.2-.2.2-.1.1-.2.2-.2.2-.1.1-.1.2H43v.2l-.2.1-.1.2-.1.1-.2.1v.2h-.2l-.1.2-.1.2h-.2v.2l-.2.2-.2.2-.1.2h-.1l-.2.2v.2h-.2v.2l-.2.2-.1.1-.1.2h-.1l-.1.2-.1.2-.1.1-.2.2-.2.2v.2l-.2.1v.2l-.2.1v.1l-.2.2v.1l-.2.2v.1l-.2.2v.1l-.2.2-.2.2v.2l-.1.1-.1.2-.1.1-.1.2v.1l-.2.2v.1l-.2.2v.1l-.2.2v.1l-.1.2-.1.1-.1.2-.1.1-.1.2v.1l-.2.2v.1l-.2.2v.2l-.1.1-.1.2v.1l-.2.2v.1l-.1.2-.1.1v.2l-.2.2v.1l-.1.2-.1.1v.2l-.2.1v.2l-.1.2v.1l-.2.2v.3l-.2.2v.1l-.1.2v.1l-.1.2-.1.2v.1l-.1.2-.1.2v.1l-.1.2-.1.1v.2l-.1.2-.1.1v.2l-.1.2v.1l-.1.2-.1.2v.1l-.1.2v.2l-.1.1v.2l-.1.2v.1l-.1.2v.2l-.1.1v.2l-.2.2v.3l-.1.2v.1l-.1.2v.2l-.1.1v.4l-.1.2v.1l-.1.2v.2l-.1.1v.4l-.1.2v.1l-.1.2v.2l-.1.2v.4l-.1.2v.4l-.1.2v.5l-.1.2v.3l-.1.2v.5l-.1.2v.5l-.1.2v.7l-.1.2v.9l-.1.2v1.8l-.1.1v129.7l.1.2v1.1l.1.1v.7l.1.2v.7l.1.2v.5l.1.2v.3l.1.2v.5l.1.2v.3l.1.2v.1l.1.2v.3l.1.2v.4l.1.1v.2l.1.2v.1l.1.2v.3l.1.2v.2l.1.1v.4l.1.1v.2l.1.2v.1l.1.2v.2l.1.1v.2l.1.2v.1l.1.2.1.1v.2l.1.2v.1l.1.2.1.1v.2l.1.2v.1l.1.2.1.1v.2l.1.2v.1l.2.2v.3l.1.2.1.1v.2l.1.1.1.2v.2l.1.1.1.2v.1l.1.2.1.2v.1l.2.2v.1l.1.2v.2l.2.1v.2l.1.1.1.2v.1l.2.2v.1l.1.2.1.1v.2l.2.1v.2l.1.1.1.2.1.1v.2l.2.1v.2l.1.1.1.2.1.1.1.1.1.2v.1l.2.2v.1l.2.2v.1l.1.2.1.1.1.1.1.2.1.1.1.2v.1l.2.2.2.2v.2l.2.1v.2l.2.1v.1l.2.2v.1l.2.2.1.1.1.1.1.2.1.1.1.2h.1l.1.2.1.2h.1l.2.2v.2h.2v.2l.2.2h.1l.1.2.1.1.1.2.1.1.2.1v.2h.2l.1.2.1.2h.1l.2.2v.1l.2.2h.1l.1.2.1.1.2.2.2.2.1.1.1.1.2.2.2.2.1.1.2.1v.2h.2l.1.2.1.1.2.1.1.2h.1l.2.2v.1l.2.1.1.1.2.1.1.2h.1l.2.2.1.1.1.1.2.1.1.1.1.1.2.2h.1l.2.2.2.2h.2l.1.2.1.1.2.1.1.1.2.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.2.1.1.1.2.1.1.1.2.1.1.1.2.1.1.1.2.1.1.1.1.1h.2l.1.2h.2l.1.2h.2l.2.1.1.1.2.1 104.7 61.2v.1h.2l.1.1h.1l.2.2h.2l.1.1.1.1h.1l.2.1.2.2h.2l.2.1.2.2h.2l.2.1.2.1h.1l.1.1h.2v.2h.5l.1.1h.2v.1h.2l.1.1h.1l.2.1.2.1h.1l.1.1h.2v.1h.2l.1.1h.1l.2.1h.2l.1.1h.2v.1h.2l.2.1.3.1h.2l.3.2h.5l.2.2h.3l.2.1h.3l.2.1h.3l.2.1h.3l.2.1h.3l.2.1h.3l.2.1h.3l.2.1h.6l.2.1h.5l.3.1h1l.3.1h4.8l.2-.1h.5l.3-.1h.5l.3-.1h.5l.2-.1h.3l.2-.1h.3l.2-.1h.3l.2-.1h.3l.2-.1.3-.1h.2l.3-.1.2-.1h.3l.2-.1.3-.1h.1l.1-.1h.3l.1-.1h.1l.1-.1h.3l.1-.1h.1l.2-.1.2-.1h.3v-.1h.2l.1-.1h.1l.2-.1.2-.1h.1l.1-.1h.2v-.1h.2l.1-.1h.1l.2-.1.2-.1h.1l.1-.1.2-.1.2-.1h.1l.1-.1.2-.1.2-.1h.1l.1-.1.2-.1.2-.1h.1l.1-.1.1-.1h.2l116-64.7.2-.1.1-.1h.2v-.1l.2-.1.1-.1h.1l.2-.1v-.1h.2l.1-.2h.1l.2-.1.2-.2h.1l.1-.1h.2v-.2h.2l.1-.1.1-.1h.1l.1-.2h.2v-.1l.2-.1h.1l.1-.2h.1l.1-.1.1-.1h.2v-.2h.2v-.1l.2-.1.1-.1.1-.1h.1l.1-.2h.1l.2-.1v-.1l.2-.1v-.1h.2v-.2h.2l.1-.2h.1l.1-.1.1-.1.1-.1.1-.1.1-.1.1-.1.1-.1.1-.1.1-.1.1-.1.1-.1.1-.1.1-.1.1-.1.1-.1.1-.1.1-.1.1-.1.1-.1.1-.1.1-.1v-.1l.2-.1v-.1l.2-.1v-.1l.1-.1.1-.1.1-.1.1-.1.1-.1.1-.1v-.1l.2-.1v-.1l.2-.1v-.1l.1-.1.1-.1.1-.1.1-.1.1-.1v-.1l.2-.2.1-.2h.1v-.2l.2-.1v-.1l.1-.1.1-.1v-.1l.2-.1v-.2h.1l.1-.2.2-.2v-.1l.1-.1v-.1l.2-.2.1-.2v-.1l.2-.1v-.1l.1-.1v-.2h.1l.1-.2v-.1l.2-.1v-.1l.1-.2.1-.2.1-.1v-.1l.1-.2h.1v-.2l.1-.1.1-.1v-.2h.1v-.2l.1-.1.1-.1v-.2h.1l.1-.2v-.1l.1-.1v-.2l.1-.1.1-.1v-.1l.1-.2.1-.2.1-.1v-.2l.1-.1v-.1l.1-.1v-.2l.1-.1v-.1l.1-.2.1-.2v-.1l.1-.2v-.1l.1-.1v-.2h.1v-.2l.1-.1v-.3l.1-.1v-.2l.1-.1v-.1l.1-.2.1-.2v-.1l.1-.2v-.2l.1-.2v-.1l.1-.1v-.2l.1-.2v-.3l.1-.1v-.3l.1-.1v-.4l.1-.1v-.2l.1-.1v-.4l.1-.1v-.3l.1-.2v-.4l.1-.1v-.4l.1-.1v-.6l.1-.1v-.7l.1-.2v-.8l.1-.1v-1.3l.1-.1V137h-.1v-1h-.1v-.7l-.1-.1v-.5l-.1-.3v-.2l-.1-.3v-.5l-.1-.2-.1-.3v-.2l-.1-.3v-.2l-.1-.3-.1-.2v-.3l-.1-.2-.1-.3v-.2l-.2-.3v-.2l-.1-.3v-.2l-.2-.3v-.2l-.1-.2-.1-.3-.1-.2-.1-.2v-.3l-.2-.2v-.3l-.2-.2v-.2l-.2-.3v-.2l-.2-.2v-.2l-.2-.3-.1-.2-.1-.2-.1-.3-.1-.2-.2-.2v-.2l-.2-.3-.1-.2-.1-.2-.2-.2v-.2l-.2-.3-.2-.2v-.2l-.2-.2-.2-.2v-.2l-.2-.2-.2-.2-.1-.3-.2-.2v-.2l-.2-.2-.2-.2-.1-.2-.2-.2-.1-.2-.2-.2-.2-.2-.1-.2-.2-.2-.1-.2-.2-.2-.2-.1-.1-.2-.2-.2-.2-.2-.2-.2-.1-.2-.2-.2-.2-.2-.2-.1-.1-.2-.2-.2-.2-.2-.2-.2-.2-.1-.2-.2-.2-.2-.2-.1-.2-.2-.2-.2-.2-.1-.2-.2-.1-.2-.3-.1-.1-.2h-.1l-.1-.1-.1-.1h-.1l-.1-.2h-.1l-.2-.1v-.1h-.2v-.2h-.2v-.1h-.2v-.2h-.2v-.1h-.2v-.2h-.2l-.1-.1h-.1l-.1-.1-.1-.1h-.1l-.2-.2h-.2v-.2h-.4l-.1-.2h-.1L193 46l-.2-.1h-.1l-.2-.2h-.1l-.2-.2h-.1l-.1-.1h-.2l-.1-.2h-.2l-.1-.1-.2-.1h-.1l-.2-.2h-.1l-.2-.1-.1-.1h-.2l-.1-.2h-.2l-.1-.1h-.2l-.2-.2h-.3l-.1-.2h-.3l-.2-.2h-.1l-.2-.1h-.1l-.2-.1h-.1l-.2-.2h-.3l-.2-.1-.1-.1h-.2l-.1-.1h-.2l-.1-.1-.2-.1h-.1l-.2-.1h-.2l-.1-.1h-.2l-.1-.1h-.2l-.1-.1h-.2l-.2-.1h-.1l-.2-.1h-.1l-.2-.1h-.1l-.2-.1h-.3l-.2-.1h-.1l-.2-.1h-.2l-.1-.1h-.3l-.2-.1h-.2l-.1-.1h-.3l-.2-.1h-.4l-.2-.1h-.2l-.2-.1h-.4l-.2-.1h-.5l-.2-.1h-.4l-.2-.1h-.5l-.1-.1h-.9l-.1-.1h-1.1l-.2-.1h-2.4z"/> - <path fill="#fff" fill-rule="nonzero" d="M97 310V102.6h43.3v75.5h71.9v-75.5h43.5v207.2h-43.5v-90.6h-72V310H97z"/> - <path fill="#0594CB" d="M715.9 259.3V136.6a44 44 0 0 0-21.8-38L580.6 31.7a52.6 52.6 0 0 0-54.3.6L430 91.7a67 67 0 0 0-31.8 57v120.1a56 56 0 0 0 27.8 48.5l104.7 61.2c13.9 8.1 31 8.3 45.2.4l116-64.5a46.7 46.7 0 0 0 23.9-40.8v-14.4z"/> - <path fill="#0083C0" d="M554 11h1.7l.2.1h2l.2.1h1.1l.3.1h1.1l.3.1h.5l.3.1h.8l.3.1h.5l.3.1h.5l.3.1h.3l.3.1h.5l.3.1h.3l.2.1h.3l.3.1h.3v.1h.2l.3.1h.3l.2.1h.3l.3.1h.2v.1h.3l.3.1h.2v.1h.3l.3.1.2.1h.3l.3.1h.2v.1h.3l.3.1.2.1.3.1h.3l.2.2h.3l.3.1.2.1h.3v.1h.3l.2.2h.3l.3.1.2.1.3.1.3.1.2.1h.3v.1h.3v.1h.2v.1h.3v.1h.3v.1h.2v.1h.3v.1l.2.1.3.1.3.1.2.1.3.1.2.1.3.1.2.2h.3l.3.2.2.1.3.1.2.1.3.1.3.2h.2v.1l.3.1.2.1.3.1.2.2h.3v.1l.2.1.3.2h.2v.1l.3.1.2.1.3.2.3.1.2.1.2.2.3.1.2.1.3.2.2.1.3.2.2.1L701 87h.2l.2.1.2.2.2.1.2.1.2.2h.2v.1l.2.1.2.1.2.1.2.2.2.1.2.1.2.2.3.2h.1l.3.3h.1l.3.2.4.3.4.3.4.3.4.2.3.3.4.3.4.3.3.3.4.3.3.3.4.3.4.3.3.3.4.3.3.3.4.3.3.3.3.3.4.4.3.3.3.3.4.3.3.4.3.3.3.4.4.3.3.3.3.4.3.3.3.4.3.3.3.4.3.3.3.4.3.4.3.3.2.4.3.4.3.3.3.4.2.4.3.3.3.4.2.4.3.4.3.4.2.4.3.4.2.4.3.4.2.3v.1l.2.3v.1l.3.3.2.4.2.4v.1l.3.4.2.4.2.4.2.4.2.4.2.4.2.4.2.4.2.5.2.4.2.4.2.4.2.4v.1l.2.4.2.4.1.4.2.5.2.4.1.4.2.5.2.4.1.4.2.5.1.4.2.5.1.4.1.4.2.5v.4h.1l.1.5.1.4.2.5v.4l.2.5.1.4.1.5.1.4.1.5.1.4v.1l.1.4v.5h.1v.5l.1.4.1.5v.5l.1.4.1.5v.5l.1.4v.5h.1v.9l.1.5v.5l.1.4v2.2l.1.2v141.5l-.1.3v1.3l-.1.2v1l-.1.3v.5l-.1.2v.8h-.1v.5l-.1.2v.5l-.1.3v.5l-.1.2v.5l-.1.3v.2l-.1.3v.2l-.1.2v.3l-.1.2v.3l-.1.2v.3l-.1.2v.3l-.1.2v.2h-.1v.3l-.1.2v.3l-.1.2-.1.3v.2l-.1.2v.3l-.2.2v.5l-.1.2-.1.3v.2l-.2.3v.2l-.1.2v.3h-.1v.2l-.2.2v.3l-.1.2v.3h-.1v.2l-.2.2v.3l-.1.2-.1.2v.3l-.2.2v.2l-.2.3v.2l-.1.2-.1.3-.1.2-.1.2v.3h-.1v.2l-.2.2v.3l-.2.2v.2l-.2.2v.3l-.2.2v.2l-.2.2v.3l-.2.2v.2h-.1l-.1.2-.1.3-.1.2-.1.2-.1.2-.2.2v.2l-.2.3v.2l-.2.2-.1.2-.1.2-.2.2v.3l-.2.2-.1.2-.1.2-.1.2-.2.3-.1.2-.1.2-.2.2v.2l-.2.2-.1.2-.1.2-.2.3-.1.2-.2.2v.2h-.1l-.1.2-.2.2v.2h-.1l-.1.2-.2.2v.2l-.2.2-.1.2-.2.2-.1.2-.2.2v.2h-.1l-.1.2-.2.2-.1.2-.2.2-.1.2-.2.2-.1.2-.2.2-.1.2-.2.2-.1.2-.2.2-.1.2-.2.2-.1.2-.2.2-.2.2-.1.2-.2.1-.1.2-.2.2-.1.2-.2.2-.1.2-.2.2-.2.2-.1.1-.2.2-.2.2-.1.2-.2.2-.2.1-.2.2-.1.2-.2.2-.2.2-.1.1-.2.2-.2.2-.2.2-.1.2-.2.1-.2.2-.2.2-.1.2-.2.1-.2.2-.2.2-.2.1-.2.2-.1.2-.2.2-.2.1-.2.2-.2.2-.2.1-.2.2-.1.2-.2.1-.2.2-.2.1-.2.2-.2.2-.2.1-.2.2-.2.1-.2.2-.1.2-.2.1-.2.2-.2.1-.2.2-.2.2-.2.1-.2.2-.2.1-.3.2-.2.1-.2.2-.2.1-.2.1-.2.2-.2.1-.2.2-.2.1-.2.2-.2.1-.2.1-.2.2-.2.1-.2.2-.3.1-.2.1-.2.2-.2.1-.2.1-.2.2-.2.1-.3.1-.2.2-.2.1-.2.1-.2.2-.2.1-.2.1-.3.2h-.2v.1l-.2.1-116 64.6-.2.1-.2.1-.2.1-.2.2h-.2v.1l-.3.1-.2.1-.2.1-.2.1-.2.1-.2.2h-.3l-.2.2h-.2v.1h-.2v.1h-.2v.1h-.3v.1h-.2v.1h-.2v.1h-.2v.1h-.2v.1h-.3v.1h-.2v.1h-.2v.1h-.2l-.2.2h-.3l-.2.2h-.2l-.2.1-.3.1-.2.1-.2.1-.2.1h-.2v.1h-.3l-.2.2h-.2l-.2.1-.3.1-.2.1h-.2l-.2.2h-.3l-.2.1h-.2v.1h-.2l-.3.1-.2.1-.2.1h-.3l-.2.1-.4.2-.5.1-.5.1-.4.1-.5.2h-.5l-.4.2-.5.1-.5.1-.4.1-.5.1-.4.1-.5.1h-.5v.1h-.4l-.5.2h-.5l-.4.1h-.5l-.5.1-.4.1h-.5l-.5.1h-.4l-.5.1h-.5l-.5.1h-.9l-.5.1h-7.5l-.5-.1h-.5l-.4-.1h-.5l-.5-.1h-.4l-.5-.1h-.5v-.1h-.5l-.4-.1-.5-.1h-.4l-.5-.2h-.5l-.4-.1-.5-.1-.5-.1-.4-.1-.5-.1-.5-.1-.4-.1-.5-.1-.5-.2h-.4v-.1l-.5-.1-.4-.1-.5-.2-.4-.1-.5-.1-.4-.2h-.3l-.2-.1-.2-.1h-.2v-.1h-.3l-.2-.1-.2-.1-.2-.1h-.3v-.1h-.2l-.2-.2h-.3l-.2-.1-.2-.1-.2-.1-.3-.1h-.2v-.1h-.2l-.2-.2h-.3l-.2-.2h-.2l-.2-.1-.3-.1-.2-.1-.2-.1-.2-.1-.3-.1-.2-.1-.2-.1-.2-.1-.2-.1-.3-.1-.2-.2h-.2l-.2-.2-.2-.1-.2-.1-.3-.1-.2-.1-.2-.1-.2-.2h-.2v-.1l-.2-.1-.2-.1-.3-.1-.2-.2h-.2v-.1l-.2-.1-.2-.1-.2-.1-.2-.2-104.8-61.2-.3-.1-.2-.2-.3-.1-.2-.2-.2-.1-.3-.2-.2-.1-.3-.2-.2-.1-.3-.2-.2-.1-.2-.2-.3-.1-.2-.2-.2-.2-.3-.1-.2-.2-.3-.1-.2-.2-.2-.2-.3-.1-.2-.2-.2-.2-.3-.1-.2-.2-.2-.2-.3-.2-.2-.1-.2-.2-.2-.2-.3-.2-.2-.2-.2-.1-.2-.2-.3-.2-.2-.2-.2-.2-.2-.1-.3-.2-.2-.2-.2-.2-.2-.2-.2-.2-.3-.2-.2-.1-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.3-.2-.2-.2-.2-.2-.2-.1-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.3-.1-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.1-.2-.2-.3-.2-.2-.2-.2-.2-.2-.2-.2-.1-.2-.2-.3-.2-.2-.2-.2-.1-.2-.2-.2-.2-.3-.1-.2-.2-.2-.2-.2-.1-.3-.2-.2-.2-.2-.1-.3-.2-.2-.2-.2-.1-.2-.2-.3-.2-.2-.1-.2-.2-.3-.1-.2-.2-.2-.1-.3-.2-.2-.2-.2-.1-.2-.2-.3-.1-.2-.1-.3-.2-.2-.1-.2-.2-.3-.1-.2-.1-.2-.2-.3-.1-.2-.2-.3-.1-.2-.2-.2-.1-.3-.1-.2-.2-.3-.1-.2-.1-.3-.2-.2-.1-.2-.1-.3-.2-.2v-.3h-.1l-.1-.2-.1-.3-.2-.2v-.3h-.1l-.1-.2-.1-.3-.1-.2-.2-.3v-.2h-.1l-.1-.3-.1-.3-.1-.2-.2-.3v-.2l-.2-.3-.1-.3-.1-.2-.1-.3-.1-.2-.1-.3-.1-.2-.1-.3-.2-.2v-.3l-.2-.3v-.2l-.2-.3v-.3l-.2-.2v-.3l-.2-.3v-.2l-.2-.3v-.2l-.1-.3-.1-.3-.1-.2-.1-.3-.1-.3-.1-.3-.1-.2v-.3l-.2-.3v-.2l-.1-.3-.1-.3-.1-.2v-.3h-.1v-.3l-.1-.2-.1-.3-.1-.3v-.3l-.1-.2-.1-.3-.1-.3v-.3l-.1-.2v-.3h-.1v-.3l-.1-.3-.1-.3v-.2l-.1-.3-.1-.3v-.3l-.1-.2v-.3l-.1-.3-.1-.3v-.3l-.1-.2v-.3l-.1-.3v-.3l-.1-.2v-.3l-.1-.3v-.3l-.1-.3v-.5l-.1-.3v-.2l-.1-.3v-.6h-.1v-.5l-.1-.3v-.5l-.1-.3v-1l-.1-.3v-.8l-.1-.3v-1.4l-.1-.3V143.6l.1-.3V142h.1v-1l.1-.3v-.6l.1-.4v-.6h.1v-.6l.1-.4v-.3l.1-.3v-.3l.1-.3v-.4l.1-.3v-.3l.1-.3v-.3l.1-.4v-.3l.1-.3v-.3l.1-.3.1-.4v-.3l.1-.3v-.3l.1-.3.1-.3v-.4l.1-.3.1-.3v-.3l.2-.3v-.3l.1-.4v-.3l.2-.3v-.3l.1-.3v-.3h.1v-.3l.2-.4v-.3l.1-.3.1-.3.1-.3.1-.3v-.3h.1v-.3l.2-.3v-.3l.2-.3v-.3l.2-.3v-.3l.2-.3v-.3l.2-.3v-.3l.2-.3v-.3l.2-.3.1-.3.1-.3.1-.3.1-.3.1-.3.2-.3v-.3l.2-.3.1-.3.1-.3.2-.3v-.3l.2-.3.1-.3.2-.3v-.3l.2-.3.1-.3.2-.2v-.3h.1l.1-.3.2-.3v-.3h.1l.1-.3.2-.3.1-.2.1-.3.2-.3.1-.3.1-.3.2-.3.1-.2.2-.3.1-.3.2-.3.1-.3.2-.2.1-.3.2-.3.1-.3.2-.3.1-.3.2-.2.1-.3.2-.3.2-.3.1-.2.2-.3.1-.3.2-.2.2-.3.1-.3.2-.3.2-.2.1-.3.2-.3.2-.2.1-.3.2-.3.2-.2.2-.3.1-.2.2-.3.2-.3.2-.2.1-.3.2-.2.2-.3.2-.3.2-.2.1-.3.2-.2.2-.3.2-.2.2-.3.2-.2.2-.3.1-.2.2-.3.2-.2.2-.3.2-.2.2-.3.2-.2.2-.3.2-.2.2-.3.2-.2.2-.3.2-.2.2-.2.2-.3.2-.2.2-.3.3-.2.2-.2.2-.3.2-.2.2-.3.2-.2.2-.2.2-.3.3-.2.2-.2.2-.3.2-.2.2-.2.3-.3.2-.2.2-.2.3-.2.2-.3.2-.2.2-.2.3-.2.2-.3.2-.2.3-.2.2-.2.2-.2.3-.3.2-.2.2-.2.3-.2.2-.2.3-.2.2-.3.2-.2.3-.2.2-.2.3-.2.2-.2.3-.2.2-.2.3-.2.2-.2.3-.2.2-.3.3-.2.2-.2.3-.2.2-.2.3-.2.2-.2.3-.2.3-.2.2-.2.3-.2.3-.1.2-.2.3-.2.2-.2.3-.2.3-.2.2-.2.3-.2.3-.1.2-.2.3-.2.2-.2.3-.2.3-.2.3-.1.2-.2.3-.2.3-.1.3-.2.3-.2.2-.2L519 20.8l.2-.1.3-.2.2-.1.3-.2.2-.1.3-.2.2-.1.3-.1.2-.2.3-.1.2-.2.3-.1.2-.1.3-.2.2-.1.3-.1.2-.2.3-.1.2-.1.3-.2h.2v-.1l.3-.1.2-.2h.3l.3-.2.2-.1.3-.1.2-.2h.3l.3-.2.2-.1.3-.1.2-.1.3-.1.3-.1.2-.2h.3l.2-.2h.3l.3-.2h.2v-.1h.3v-.1h.3v-.1h.2v-.1h.3v-.1h.2V15h.6v-.1h.2l.3-.2h.3l.2-.2h.3l.3-.1.2-.1.3-.1h.3V14h.2l.3-.2h.3l.2-.1.3-.1h.3l.2-.2h.3l.3-.1h.2l.3-.2h.3l.2-.1h.6l.3-.1h.2v-.1h.3l.3-.1.2-.1h.3l.3-.1.3-.1h.2l.3-.1h.3l.2-.1h.3l.3-.1h.3l.2-.1h.3l.3-.1h.2l.3-.1h.3l.3-.1h.5l.3-.1h.3l.3-.1h.8l.2-.1h.6l.3-.1h.8l.3-.1h1.1l.3-.1h1.9l.3-.1h2.3zm-.2 27h-2l-.1.1H550l-.1.1h-.9l-.1.1h-.7l-.2.1h-.5l-.2.1h-.5l-.1.1h-.3l-.2.1h-.2l-.2.1h-.4l-.2.1h-.2l-.2.1h-.4l-.1.1h-.2l-.2.1h-.3l-.1.1h-.2l-.1.1h-.4l-.1.1h-.2l-.1.1h-.2l-.2.1h-.1l-.2.1h-.1l-.2.1h-.1l-.2.1h-.2l-.1.1h-.2l-.1.1-.2.1h-.1l-.2.1h-.2l-.1.1h-.2l-.1.1-.2.1h-.1l-.2.1h-.1l-.2.1-.1.1h-.2l-.2.1-.1.1h-.2l-.1.1-.2.1h-.1l-.2.2h-.1l-.2.1h-.1l-.2.1-.1.1-.2.1h-.1l-.2.1-.1.1-.2.1h-.1l-.2.2h-.1l-.2.1-.1.1h-.2l-.1.2h-.2l-.1.1-.2.1h-.1l-.2.2h-.1l-.2.1-.1.1-.2.1-.1.1L437 103l-.2.1-.2.1-.2.2h-.2l-.2.2-.1.1-.2.1-.2.1-.2.2h-.2l-.1.2-.2.1-.2.2h-.2l-.1.2-.2.1-.2.2h-.2l-.1.2-.2.1-.2.2h-.2l-.1.2-.2.1-.2.2-.1.1-.2.1-.2.2h-.2l-.1.2-.2.2h-.1l-.2.2-.2.2h-.2l-.1.2-.2.2-.1.1-.2.2h-.2l-.1.2-.2.2-.1.1-.2.2-.2.1-.1.1-.2.2-.1.1-.2.2-.1.1-.2.2-.2.1-.1.2h-.2l-.1.2-.2.2-.1.1-.2.2-.1.1-.2.2-.1.1-.2.2-.1.1-.2.2-.1.2-.1.1-.2.2-.1.1-.2.2-.1.1-.2.2-.1.2-.1.1-.2.2-.1.1-.2.2-.1.2-.1.1-.2.2-.1.1-.1.2-.2.2-.1.1-.1.2-.2.2-.1.1-.1.2-.2.1v.2l-.2.2-.2.2v.1l-.2.2-.1.2-.2.1v.2l-.2.2-.1.1-.2.2v.2l-.2.2-.1.1-.1.2-.2.2v.1l-.2.2-.1.2-.1.2-.2.2v.1l-.2.2-.1.2-.1.2-.1.1-.1.2-.2.2v.2l-.2.2v.1l-.2.2-.1.2-.1.2-.1.2-.1.2-.1.1-.1.2-.1.2-.1.2-.2.2v.2l-.2.2v.1l-.2.2v.2l-.2.2v.2l-.1.2-.1.2-.1.2-.1.1-.1.2-.1.2-.1.2v.2l-.2.2v.2l-.2.2v.2l-.1.2-.1.1-.1.2v.2l-.2.2v.2l-.1.2-.1.2v.2l-.2.2v.2l-.1.2-.1.2v.2l-.2.2v.2l-.1.2-.1.2v.2l-.1.2-.1.2v.2l-.2.2v.4l-.2.2v.2l-.1.2v.2l-.1.2-.1.2v.2l-.1.2v.2l-.1.2-.1.2v.2l-.1.2v.2l-.1.2-.1.2v.2l-.1.2v.2l-.1.3v.2l-.1.2v.2l-.1.2v.2l-.1.2v.2l-.1.2v.2l-.1.2v.3l-.1.2v.4l-.1.2v.2l-.1.2v.4l-.1.2v.3l-.1.2v.4l-.1.2v.4l-.1.2v.7l-.1.2v.4l-.1.2v.7l-.1.2v.8l-.1.3v1l-.1.2v126.6l.1.2v.7l.1.2v.7l.1.1v.5l.1.2v.5l.1.2v.3l.1.2v.5l.1.2v.3l.1.2v.2l.1.1v.4l.1.1v.4l.1.2v.1l.1.2v.2l.1.1v.4l.1.1v.2l.1.2v.1l.1.2v.1l.1.2v.2l.1.1v.2l.1.2v.1l.1.2v.2l.1.1v.2l.1.2.1.1v.2l.1.1v.2l.1.2.1.1v.2l.1.1v.2l.1.2.1.1v.2l.1.2.1.1v.2l.1.1.1.2v.2l.1.1.1.2v.1l.2.2v.2l.1.1v.2l.1.1.1.2v.1l.1.2.1.1.1.2v.2l.2.1v.2l.1.1.1.2v.1l.2.2v.1l.1.2.1.1v.2l.2.1v.2l.1.1.1.2.1.1v.2l.2.1v.1l.2.2v.1l.1.2.1.1.1.2.1.1.1.2.1.1v.2l.2.1v.2l.2.1v.1l.2.2v.1l.1.2.1.1.1.2.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.2.1.1.1.2h.1l.1.2.1.2.1.1.2.2.2.2v.2l.2.1.1.1.1.2.1.1.1.1.1.2h.2v.2l.2.2.2.2.1.1.1.2h.2v.2l.2.2h.1l.1.2.2.1v.2h.2l.1.2.1.1.2.1v.2h.2l.1.2.1.1.2.2.2.2.1.1.2.1v.2h.2l.2.2v.1l.2.1.1.1.2.2h.1l.1.2.2.1v.1l.2.1.2.2.2.2h.2v.2l.2.1.2.1.1.1.2.1v.1l.2.2h.2l.1.2h.1l.2.2h.1l.2.2h.1l.1.2h.2l.1.2h.2l.1.2.1.1.2.1.1.1.2.1.1.1.2.1.1.1.1.1h.2l.1.2h.2l.1.2h.2l.1.2h.2l.1.2h.2l.1.2h.2l.1.1.2.1 104.7 61.2.1.1h.1l.2.1v.1h.2v.1h.2l.1.2h.4v.1l.2.1h.1l.1.1h.2v.1h.2l.1.2h.4v.1h.2l.1.1h.1l.2.1.2.2h.2l.2.1.2.1h.1l.1.1h.2v.1h.2l.1.1h.2v.1h.3l.1.1h.2v.1h.2l.1.1h.2v.1h.2l.1.1h.3l.2.2h.3l.2.1h.3l.2.2h.5l.3.2h.5l.2.1h.3l.2.1h.3l.2.1h.3l.2.1h.3l.3.1h.5l.2.1h.6l.2.1h1l.3.1h5.2l.2-.1h.5l.3-.1h.5l.3-.1h.5l.2-.1h.3l.2-.1h.3l.2-.1h.3l.2-.1h.3l.2-.1.3-.1h.2l.3-.1.2-.1h.3l.2-.2h.4l.1-.1h.2v-.1h.4l.2-.1.2-.1h.1l.1-.1h.2l.2-.1h.1l.2-.1.2-.1h.2l.2-.1.2-.1h.1l.1-.1h.2v-.1l.2-.1h.1l.1-.1h.2v-.1h.2l.1-.1h.1l.2-.1.2-.1h.1l.1-.1.2-.1.2-.1h.1l.1-.1.1-.1h.2v-.1h.2l.1-.2h.1l.2-.1 115.9-64.6h.1l.1-.1h.2v-.1l.2-.1h.1l.1-.2h.2v-.1h.2l.1-.2h.1l.2-.1.2-.2h.1l.1-.1.2-.1.2-.2h.1l.1-.1.1-.1h.2v-.2h.2l.1-.1.1-.1h.1l.1-.2h.1l.2-.1v-.1h.2v-.2h.2l.1-.1.1-.1.1-.1.1-.1h.1l.2-.2.2-.1v-.1l.2-.1v-.1l.2-.1.2-.2.2-.2.2-.1v-.1l.2-.1v-.1l.2-.1v-.1l.2-.1v-.1l.2-.1.2-.2.2-.2.2-.2.2-.2.1-.2h.1l.1-.2h.1l.1-.2.2-.2.2-.2.2-.2.1-.2h.1l.1-.2h.1v-.2h.2v-.2l.2-.1v-.1l.1-.1.1-.1v-.1l.2-.1v-.1l.1-.2h.1v-.2h.2v-.2l.1-.1.1-.1v-.1l.2-.1v-.2h.1l.1-.2.2-.2v-.1l.1-.1.1-.1v-.1l.2-.2.1-.2v-.1l.1-.1.1-.1v-.2h.2v-.2l.1-.1v-.1l.1-.1.1-.2.1-.2.1-.1v-.1l.2-.2v-.2l.2-.1v-.1l.1-.2.1-.2.1-.1v-.1l.1-.2.1-.2.1-.1v-.1l.1-.2v-.1l.1-.1v-.1l.2-.2v-.2l.1-.1v-.2h.1v-.2l.1-.1.1-.2v-.1l.1-.1v-.2h.1v-.2l.1-.1v-.2l.1-.1v-.1l.1-.2.1-.2v-.1l.1-.2.1-.2v-.3l.1-.1v-.1l.1-.2v-.1l.1-.1v-.4l.1-.1v-.1l.1-.2v-.2l.1-.2v-.1l.1-.1v-.2l.1-.2v-.2l.1-.2v-.2l.1-.1v-.4l.1-.1v-.4l.1-.1v-.5h.1v-.3l.1-.2v-.5l.1-.2v-.5l.1-.2v-.7l.1-.1v-1l.1-.1v-142l-.1-.3v-.5l-.1-.2v-.5l-.1-.3v-.5l-.1-.2v-.3l-.1-.2v-.2l-.1-.3v-.2l-.1-.3v-.2l-.1-.2-.1-.3v-.2l-.1-.3-.1-.2v-.2l-.1-.3-.1-.2v-.2l-.2-.3v-.2l-.1-.2-.1-.3v-.2l-.2-.2v-.2l-.1-.3-.1-.2-.1-.2-.1-.3-.1-.2-.1-.2-.1-.2-.1-.2-.1-.3-.1-.2-.1-.2-.1-.2-.2-.2v-.3l-.2-.2-.1-.2-.1-.2-.1-.2-.2-.2v-.2l-.2-.3-.1-.2-.2-.2v-.2l-.2-.2-.2-.2-.1-.2-.1-.2-.2-.2-.1-.2-.1-.2-.2-.2-.1-.2-.2-.2-.1-.2-.2-.2-.1-.2-.2-.2-.1-.2-.2-.1-.2-.2-.1-.2-.2-.2-.1-.2-.2-.2-.2-.2-.2-.1-.1-.2-.2-.2-.2-.2-.2-.2-.1-.1-.2-.2-.2-.2-.2-.1-.1-.2-.2-.2-.2-.2-.2-.1-.2-.2-.2-.2-.2-.1-.1-.2-.2-.1-.2-.2-.2-.2-.2-.1-.2-.2-.2-.1-.2-.2-.2-.1-.2-.1-.2-.2-.2-.1-.2-.2-.3-.1-.2-.2-.2-.1-.2-.1-.1-.1h-.1l-.1-.1-.1-.1h-.1l-.1-.1-.2-.1-113.5-66.9h-.1l-.2-.1-.1-.1-.2-.1h-.1l-.2-.2h-.1l-.2-.1-.1-.1h-.2l-.1-.2h-.2l-.1-.1-.2-.1h-.1l-.2-.1-.1-.1h-.2l-.1-.2h-.2l-.1-.1h-.2l-.1-.2h-.2l-.1-.1h-.2l-.1-.1-.2-.1h-.1l-.2-.1-.1-.1h-.2l-.1-.2h-.4l-.2-.1-.1-.1h-.2l-.1-.1h-.2l-.1-.1-.2-.1h-.1l-.2-.1h-.2l-.1-.1-.2-.1h-.1l-.2-.1h-.1l-.2-.1h-.2l-.1-.1h-.2l-.1-.1h-.2l-.1-.1h-.2l-.2-.1h-.1l-.2-.1h-.3l-.2-.1h-.1l-.2-.1h-.3l-.2-.1h-.1l-.2-.1h-.3l-.2-.1h-.3l-.1-.1h-.2l-.2-.1h-.4l-.2-.1h-.3l-.2-.1h-.3l-.2-.1h-.5l-.1-.1h-.7l-.1-.1h-.7l-.1-.1h-1.2l-.2-.1H554z"/> - <path fill="#fff" fill-rule="nonzero" d="M477.3 109.4h42.3v112.2c0 17.8.5 29.3 1.5 34.6a30.5 30.5 0 0 0 11.2 19.5c6.3 5 13.7 6.5 24.8 6.5 11.2 0 15-1.7 20.6-6.5 5.7-4.9 9.2-9.5 10.3-16.6 1.2-7 3.1-18.8 3.1-35.2V109.4h42.3v108.8c0 24.8-1 42.4-3.2 52.7a60.5 60.5 0 0 1-11.9 26 59.8 59.8 0 0 1-23 16.8 95.2 95.2 0 0 1-37.6 6.3c-18.7 0-32.9-2.3-42.6-6.8a61.2 61.2 0 0 1-22.9-17.8c-5.6-7.3-9.3-15-11-23a265.7 265.7 0 0 1-4-52.5V109.4z"/> - <path fill="#33BA91" d="M1099.4 259.3V136.8c0-15.8-8.5-30.4-22.3-38.3l-113.6-65a52.6 52.6 0 0 0-53.2.6l-96 57.6a67 67 0 0 0-32.6 57.5v119.5c0 20 10.6 38.4 27.8 48.5l104.8 61.2c13.9 8.1 31 8.3 45.2.5l115.9-64.6a46.7 46.7 0 0 0 24-40.8v-14.4z"/> - <path fill="#00A88A" d="M937.5 13.2h2.1l.3.1h1.4l.3.1h.8l.2.1h1.1l.3.1h.5l.3.1h.5l.3.1h.6l.2.1h.6l.2.1h.3l.3.1h.3l.2.1h.3l.3.1h.2l.3.1h.3l.2.1h.3l.3.1h.3l.2.1h.3l.3.1.2.1h.3l.3.1h.2l.3.1.3.1h.2l.3.2h.5l.3.2h.5v.1h.3l.3.1.2.1h.3v.1h.3l.3.2h.2l.3.1.3.1h.2l.3.2h.3l.2.1.3.1.3.1.2.1h.3v.1h.2l.3.2h.3l.2.2h.3l.2.2h.3l.2.2h.3l.3.2h.2l.3.2h.2l.3.2h.2l.3.2.3.1.2.1.3.1.2.1.3.2h.2l.3.2.2.1.3.1.3.1.2.2h.2l.3.2.2.1.3.2h.3l.2.2.2.1.3.2.2.1.3.1.2.2.3.1.2.1.3.2.2.1.2.2L1084 87h.2l.3.2.2.1.2.2h.2l.2.2.2.1.2.2h.2l.2.2.2.1.2.2h.2l.2.2.3.1.2.2h.2v.1l.2.1.2.2h.2l.2.2.2.1.2.2.2.1.1.2h.2v.1l.2.1.2.2.2.1.2.2.2.1.2.2.2.1.2.2h.2v.1l.2.1.2.2.1.1.2.2.2.2.2.1.2.2.2.1.2.2.3.2.4.4.3.3.4.3.3.3.4.3.3.4.4.3.3.3.3.4.4.3.3.3.3.4.4.3.3.4.3.3.3.4.3.3.4.4.3.3.3.4.3.4.3.3.3.4.3.4.3.3.2.4.3.4.3.4.3.4.2.3.3.4.3.4.2.4.3.4.2.4.3.4.2.4.3.4.2.4.3.4.2.4.3.4.2.4.2.4.2.4.3.4.2.4.2.5.2.4.2.4.2.4.2.4.2.5.2.4.2.4.2.4v.1l.2.4.2.4.1.5.2.4.2.4.1.5.2.4.2.5.1.4.2.4.1.5.2.4v.5h.1l.1.4.2.5.1.4.1.5.2.4v.5l.2.5.1.4.1.5.1.5.1.4v.5h.1v.5h.1v.4l.1.3v.2l.1.3v.4l.1.3v.2l.1.2v.5l.1.2v.5l.1.2v.8l.1.2v.7l.1.2v.7h.1v1.5l.1.2V278l-.1.2v1.3h-.1v.7l-.1.3v.5l-.1.2v.8l-.1.2v.5h-.1v.6l-.1.2v.3l-.1.2v.5l-.1.2v.3l-.1.2v.3l-.1.2v.3l-.1.2v.3l-.1.2v.3l-.1.2v.3l-.1.2v.2h-.1v.3l-.1.2v.2l-.1.3v.2h-.1v.3l-.1.2v.3l-.1.2-.1.2v.3l-.1.2-.1.3v.2h-.1v.2l-.1.3-.1.2v.2l-.1.3-.1.2-.1.2v.3l-.2.2v.2l-.1.3-.1.2v.2h-.1v.3l-.2.2v.2l-.1.3-.1.2-.1.2-.1.3-.1.2-.1.2v.2h-.1v.3l-.2.2v.2l-.2.3v.2l-.2.2v.3l-.2.2v.2l-.2.2v.3l-.2.2v.2h-.1l-.1.2-.1.3-.1.2-.1.2-.1.2-.1.3-.2.2v.2l-.2.2-.1.2-.1.2-.1.2-.1.3-.2.2v.2h-.1l-.1.2-.1.2-.1.2-.2.3-.1.2-.1.2-.1.2-.2.2v.2h-.1l-.1.2-.1.2-.2.2-.1.3-.1.2-.2.2-.1.2-.1.2-.2.2-.1.2-.1.2-.2.2-.1.2-.1.2-.2.2-.1.2-.1.2-.2.2-.1.2-.2.3-.1.2-.2.2-.1.2-.2.2-.1.2-.2.2-.1.1-.2.2-.1.2-.2.2-.1.2-.2.2-.1.2-.2.2-.1.2-.2.2-.2.2-.1.2-.2.2-.2.2-.1.1-.2.2-.1.2-.2.2-.2.2-.1.2-.2.2-.2.1-.1.2-.2.2-.2.2-.1.2-.2.1-.2.2-.2.2-.1.2-.2.2-.2.2-.2.1-.1.2-.2.2-.2.2-.2.1-.2.2-.1.2-.2.2-.2.1-.2.2-.2.2-.2.1-.1.2-.2.2-.2.1-.2.2-.2.2-.2.1-.2.2-.2.1-.2.2-.2.2-.1.1-.2.2-.2.1-.2.2-.2.1-.2.2-.2.2-.2.1-.2.2-.2.1-.2.2-.2.1-.2.2-.2.1-.2.2-.2.1-.2.2-.2.1-.2.2-.2.1-.2.2h-.2v.1l-.2.1-.2.2-.2.1-.3.2-.2.1-.2.2-.2.1-.2.1-.2.2-.2.1-.2.2h-.2v.1l-.2.1-.3.2h-.2v.1l-.2.1-.2.2h-.2v.1l-.3.1-.2.1-.2.2-.2.1-.3.1-116 64.6-.1.1-.2.2h-.3l-.2.2-.2.1-.2.1-.2.1-.2.2h-.2l-.3.2h-.2v.1l-.2.1-.2.1-.3.1-.2.1-.2.1-.2.1-.2.1-.3.1-.2.1-.2.1-.2.1-.2.1-.3.1-.2.1-.2.1-.2.1-.3.1h-.2v.1h-.2v.1h-.2l-.3.2h-.2l-.2.2h-.2l-.3.1-.2.1-.2.1h-.2v.1h-.3l-.2.2h-.2l-.2.1h-.3v.1h-.2l-.2.2h-.3l-.2.1h-.2l-.2.1-.3.1h-.3l-.4.2-.5.1-.5.2-.4.1-.5.1-.4.1h-.1l-.4.1-.5.1-.4.1-.5.1-.5.1-.4.1-.5.1-.5.1-.4.1h-.5v.1h-.5l-.4.1h-.5v.1h-.5l-.5.1h-.4l-.5.1h-.5l-.5.1h-.4l-.5.1h-1l-.4.1H939l-.5.1h-4.8l-.5-.1h-.9l-.5-.1h-.5l-.4-.1h-.5l-.5-.1h-.5v-.1h-.4l-.5-.1-.5-.1-.5-.1h-.4v-.1h-.5l-.5-.2h-.5l-.4-.2h-.5l-.5-.2h-.4l-.5-.2-.4-.1-.5-.1-.5-.1-.4-.2-.5-.1-.4-.1-.5-.2-.4-.1-.5-.2h-.2l-.3-.1-.2-.1-.2-.1h-.3l-.2-.2h-.2l-.2-.1-.2-.1h-.3l-.2-.2h-.2l-.2-.1-.3-.1-.2-.1-.2-.1-.2-.1h-.3v-.1h-.2l-.2-.2h-.2l-.2-.2h-.3l-.2-.2h-.2l-.2-.2h-.2l-.3-.2h-.2l-.2-.2h-.2l-.2-.2h-.3l-.2-.2h-.2l-.2-.2h-.3v-.1l-.2-.1-.2-.1-.2-.1-.2-.1-.2-.1-.3-.1-.2-.2h-.2l-.2-.2-.2-.1-.2-.1-.2-.2h-.2v-.1l-.3-.1-.2-.1-105-61.3-.2-.1-.2-.2-.3-.1-.2-.2-.3-.1-.2-.1-.3-.2-.2-.2-.3-.1-.2-.2-.3-.1-.2-.2-.2-.2-.3-.1-.2-.2-.3-.1-.2-.2-.2-.2-.3-.2-.2-.1-.2-.2-.2-.1-.3-.2-.2-.2-.2-.1-.3-.2-.2-.2-.2-.2-.2-.1-.3-.2-.2-.2-.2-.2-.2-.2-.3-.1-.2-.2-.2-.2-.2-.2-.3-.1-.2-.2-.2-.2-.2-.2-.2-.2-.3-.2-.2-.2-.2-.2-.2-.1-.2-.2-.2-.2-.2-.2-.3-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.1-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.3-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.1-.2-.2-.2-.2-.2-.2-.3-.2-.2-.2-.2-.1-.2-.2-.2-.2-.2-.2-.2-.2-.3-.1-.2-.2-.2-.2-.2-.2-.2-.1-.2-.2-.3-.2-.2-.2-.2-.1-.2-.2-.3-.2-.2-.1-.2-.2-.3-.2-.2-.1-.2-.2-.2-.2-.3-.1-.2-.2-.2-.1-.2-.2-.3-.1-.2-.2-.2-.2-.3-.1-.2-.2-.2-.1-.3-.2-.2-.1-.2-.2-.3-.1-.2-.2-.3-.1-.2-.2-.2-.1-.3-.2-.2v-.2h-.1l-.1-.3-.2-.2-.1-.3-.2-.2v-.3h-.1l-.1-.2-.2-.2-.1-.3-.1-.2-.2-.3-.1-.2-.1-.3-.2-.2v-.2l-.2-.3-.1-.2-.2-.3v-.2l-.2-.3-.1-.2-.1-.3-.2-.3v-.2l-.2-.3-.1-.2-.1-.3-.2-.2v-.3l-.2-.3v-.2h-.1l-.1-.3-.1-.2-.1-.3-.1-.3-.1-.2-.1-.3-.2-.2v-.3l-.2-.3v-.2l-.2-.3v-.3l-.2-.2v-.3l-.2-.2v-.3l-.2-.3v-.2l-.2-.3v-.3l-.2-.2v-.3l-.1-.2-.1-.3-.1-.3v-.2h-.1v-.3l-.2-.3v-.2l-.1-.3-.1-.3v-.3l-.2-.2v-.3l-.1-.3-.1-.3v-.2l-.2-.3v-.3l-.1-.3v-.2l-.1-.3-.1-.3v-.3l-.1-.2v-.3l-.2-.3v-.5h-.1v-.3l-.1-.3v-.3l-.1-.3v-.3l-.1-.3-.1-.3v-.2l-.1-.3v-.3l-.1-.3v-.3l-.1-.2v-.3l-.1-.3v-.6l-.1-.3v-.2l-.1-.3v-.6l-.1-.3v-1h-.1v-.8l-.1-.3V274l-.1-.2V272l-.1-.3V144.4l.1-.4v-1l.1-.3v-.6l.1-.4v-.9l.1-.4v-.6l.1-.4v-.3l.1-.3v-.6l.1-.3v-.4l.1-.3v-.3l.1-.3v-.3l.1-.4v-.3l.1-.3v-.3l.2-.3v-.7l.1-.3.1-.3v-.3l.1-.4.1-.3v-.3l.2-.3v-.6h.1v-.3l.1-.4.1-.3v-.3l.2-.3v-.3l.1-.3.1-.4.1-.3v-.3h.1v-.3l.2-.3v-.3l.1-.3.1-.3.1-.4.1-.3.1-.3.1-.3.1-.3.1-.3.1-.3.1-.3.1-.3.1-.3.1-.3.1-.3.1-.3.1-.3.1-.3.2-.3v-.3l.2-.3.1-.3.1-.3.1-.3.1-.3.2-.3v-.3l.2-.3.1-.3.1-.3.2-.3v-.3h.1l.1-.3.2-.3v-.3h.1l.1-.3.1-.3.2-.3.1-.3.1-.3.2-.2.1-.3.1-.3.2-.3.1-.3.2-.3.1-.3.1-.3.2-.2.1-.3.2-.3.1-.3.2-.3.1-.3.2-.3.1-.2.2-.3.1-.3.2-.3.2-.2.1-.3.2-.3.1-.3.2-.3.2-.2.1-.3.2-.3.2-.2.1-.3.2-.3.1-.3.2-.2.2-.3.2-.3.1-.2.2-.3.2-.3.2-.3.1-.2.2-.3.2-.2.2-.3.2-.3.1-.2.2-.3.2-.3.2-.2.2-.3.2-.2.2-.3.2-.2.1-.3.2-.3.2-.2.2-.3.2-.2.2-.3.2-.2.2-.3.2-.2.2-.3.2-.2.2-.3.2-.2.3-.3.2-.2.2-.3.2-.2.2-.3.2-.2.2-.3.2-.2.3-.2.2-.3.2-.2.2-.3.2-.2.2-.2.3-.3.2-.2.2-.2.2-.3.3-.2.2-.2.2-.3.2-.2.3-.2.2-.3.2-.2.3-.2.2-.2.2-.3.3-.2.2-.2.2-.2.3-.3.2-.2.3-.2.2-.2.2-.2.3-.3.2-.2.3-.2.2-.2.3-.2.2-.2.2-.2.3-.2.2-.3.3-.2.2-.2.3-.2.2-.2.3-.2.3-.2.2-.2.3-.2.2-.2.3-.2.2-.2.3-.2.3-.2.2-.2.3-.2.2-.2.3-.2.3-.2.2-.2.3-.2.3-.1.2-.2.3-.2.3-.2.2-.2.3-.2.3-.2.3-.1.2-.2.3-.2.3-.2.3-.2.2-.1.3-.2.3-.2.3-.2.3-.1.2-.2.3-.2 96-57.5.3-.1.2-.2.2-.1.3-.1.2-.2.3-.1.2-.2.2-.1.3-.1.2-.2.3-.1.2-.1.2-.2h.3l.2-.2.3-.1.2-.2h.3l.2-.2.3-.1.2-.1.3-.2h.2v-.1l.3-.1.2-.1.3-.1.2-.1.3-.2h.2V19l.3-.1.2-.1.3-.1.3-.1.2-.1.3-.1.2-.1.3-.1.2-.2h.3l.2-.2h.3l.3-.2h.2l.3-.1.2-.1.3-.1.2-.1.3-.1.3-.1.2-.1h.3v-.1h.2l.3-.2h.2l.3-.1.2-.1.3-.1h.3v-.1h.2l.3-.1.3-.1.2-.1h.3l.3-.1.2-.1.3-.1h.2l.3-.1.3-.1h.2l.3-.1.3-.1h.2l.3-.1.3-.1h.2l.3-.1.3-.1h.3l.2-.1h.3l.3-.1h.2v-.1h.3l.3-.1h.2l.3-.1h.5v-.1h.6l.2-.1h.3l.3-.1h.5l.3-.1h.5l.3-.1h.8l.3-.1h.8l.3-.1h.8l.2-.1h1.7l.2-.1h3.3zm-.2 27h-1.5l-.1.1h-1.3l-.2.1h-.8l-.1.1h-.7l-.1.1h-.7l-.1.1h-.3l-.2.1h-.5l-.1.1h-.4l-.1.1h-.3l-.2.1h-.3l-.2.1h-.3l-.2.1h-.1l-.2.1h-.3l-.2.1h-.1l-.2.1h-.3l-.2.1h-.1l-.2.1h-.1l-.2.1h-.1l-.2.1h-.2l-.1.1h-.2l-.1.1h-.2l-.1.1h-.2l-.2.1h-.1l-.2.1h-.1l-.2.1h-.1l-.2.1h-.1l-.2.1-.1.1h-.2l-.1.1h-.2l-.1.1-.2.1h-.1l-.2.1h-.1l-.2.1-.1.1h-.2l-.1.1-.2.1h-.1l-.2.2h-.2l-.1.2h-.2l-.1.1h-.2l-.1.1-.2.1h-.1l-.2.2h-.1l-.2.1h-.1l-.2.2h-.1l-.2.1-.2.2h-.2l-.1.1-.2.1h-.1l-.2.2h-.1l-.1.1-.2.1h-.1l-.2.2-96 57.5-.1.2h-.2l-.2.2-.2.1-.2.1-.2.1-.2.2h-.2l-.1.2-.2.1-.2.1-.2.2h-.2l-.1.2-.2.1-.2.2h-.2l-.2.2-.1.1-.2.2-.2.1-.2.1-.2.2h-.1l-.2.2-.2.2h-.2l-.1.2-.2.1-.2.2-.2.1-.1.1-.2.2-.2.1-.1.1-.2.2-.2.1-.1.2-.2.1-.2.1-.1.2-.2.1-.1.2-.2.1-.2.2-.1.1-.2.1-.2.2-.1.1-.2.2-.1.1-.2.2-.2.1-.1.2-.2.1-.1.2-.2.1-.1.2-.2.1-.1.2-.2.1-.1.2-.2.1-.1.2-.2.1-.1.2-.2.2-.1.1-.2.2v.1l-.2.2-.2.2-.1.1-.2.2-.1.1-.2.2v.2l-.2.1-.2.2-.1.1-.2.2v.2l-.2.1-.2.2-.1.1-.1.2-.2.2-.1.1-.1.2-.2.2-.1.1-.1.2-.2.2-.1.2-.1.1-.2.2v.2l-.2.1-.1.2-.2.2v.1l-.2.2-.1.2-.2.2v.1l-.2.2-.1.2-.2.2v.2l-.2.1-.1.2-.1.2-.2.2v.2l-.2.1-.1.2-.1.2-.1.2-.1.2-.2.1v.2l-.2.2v.2l-.2.2-.1.1-.1.2-.1.2-.1.2-.1.2-.1.2-.1.1-.2.2v.2l-.2.2v.2l-.2.2v.2l-.2.2v.2l-.2.2v.1l-.1.2-.1.2-.1.2-.1.2v.2l-.2.2v.2l-.2.2v.2l-.1.2-.1.2-.1.2-.1.1v.2l-.2.2v.2l-.1.2-.1.2v.2l-.2.2v.2l-.1.2-.1.2v.2l-.2.2v.2l-.1.2v.2l-.2.2v.2l-.1.2v.2l-.2.2v.4l-.2.2v.2l-.1.2v.2l-.1.3-.1.2v.2l-.1.2v.2l-.2.2v.4l-.1.2v.2l-.1.2v.2l-.1.2v.3l-.1.2v.2l-.1.2v.2l-.1.2v.2l-.1.2v.2l-.1.2v.3l-.1.2v.2l-.1.2v.2l-.1.2v.4l-.1.2v.3l-.1.2v.4l-.1.2v.4l-.1.2v.7l-.1.2v.4l-.1.2v.7l-.1.2v.9l-.1.2v1.1l-.1.2V273l.1.1v.7l.1.2v.7l.1.2v.5l.1.2v.3l.1.2v.5l.1.2v.2l.1.2v.4l.1.2v.2l.1.2v.2l.1.1v.4l.1.1v.2l.1.2v.1l.1.2v.3l.1.2v.2l.1.1v.2l.1.2v.1l.1.2v.2l.1.1v.2l.1.2v.1l.1.2v.2l.1.1v.2l.1.2.1.1v.2l.1.2v.1l.1.2.1.1v.2l.1.2v.1l.1.2.1.1v.2l.1.2.1.1v.2l.1.1.1.2v.2l.1.1.1.2v.1l.1.2.1.2v.1l.2.2v.1l.1.2v.1l.2.2v.2l.1.1v.2l.2.1v.2l.1.1.1.2v.1l.2.2v.1l.1.2.1.1v.2l.2.1v.2l.1.1.1.2.1.1v.2l.2.1v.2l.2.1v.2l.1.1.1.2.1.1.1.2h.1l.1.2v.2l.2.1v.2l.2.1v.2l.2.1v.2l.2.1v.2h.1l.1.2.1.2.1.1.1.2h.1l.1.2.2.2v.1l.2.1v.2l.2.1v.2h.2v.2l.2.2h.1l.1.2.1.1.1.2.1.1.1.1.1.2.2.1v.1l.2.2.2.2.1.2h.1l.1.2.2.1v.2l.2.1.1.1.1.2h.1l.2.2v.1l.2.2h.1l.1.2.2.1v.2h.2l.1.2.1.1.2.1v.2h.2l.1.2.2.1v.1l.2.1.1.2h.2l.1.2.1.1.2.1.1.1.1.1.2.2.2.2h.2l.1.2.1.1.2.1v.1l.2.1.2.2.2.2h.1l.2.2h.1l.2.2.1.1.1.1.2.1.1.1.2.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.2.1.1.1.2.1.1.1.2.1.1.1.2.1.1.1.2.1h.1l.2.2h.1l.2.2h.1l.2.2h.1l.2.1.1.1L920.8 367l.2.1.2.1.1.1h.1l.1.1.2.1.2.1h.1l.1.2h.2l.2.1.1.1h.1l.1.1h.2v.1l.2.1h.1l.1.1h.2v.1h.2l.1.1h.1l.2.1.2.1h.1l.1.1h.2v.1h.2l.1.1h.2v.1h.2l.1.1h.1l.2.1.2.1h.1l.1.1h.3l.1.1h.1l.2.1.3.1h.3l.2.2h.3l.2.1h.3l.2.2h.5l.3.1.2.1h.3l.2.1h.3l.2.1h.3l.2.1h.6l.2.1h.3l.2.1h.5l.3.1h.7l.3.1h1.8l.3.1h3.1l.2-.1h.8l.2-.1h.5l.3-.1h.5l.3-.1h.2l.3-.1h.2l.3-.1h.2l.3-.1h.2l.3-.1.2-.1h.3l.3-.1.2-.1h.3l.2-.1.3-.1h.2l.1-.1h.2v-.1h.3l.1-.1h.2v-.1h.4l.1-.1h.2v-.1h.2l.1-.1h.2l.1-.1h.1l.1-.1h.2v-.1h.2l.1-.1h.1l.2-.1.2-.1h.1l.1-.1h.2v-.1l.2-.1h.1l.1-.1h.2v-.1h.2l.1-.1.1-.1h.2v-.1h.2l.1-.1.1-.1h.1l.2-.1.2-.1.1-.1h.1l.2-.1 115.9-64.6h.1l.1-.1.2-.1h.1l.1-.2h.1l.2-.1.2-.1.1-.1h.1l.2-.2.2-.1h.1l.1-.2h.1l.2-.1.2-.2h.1l.1-.1.1-.1h.1l.2-.2.2-.1.1-.1h.1l.1-.2h.1l.2-.1v-.1l.2-.1.2-.2h.1l.1-.1.1-.1.1-.1.1-.1h.1l.1-.2h.2v-.2h.2v-.1l.2-.1.1-.1.1-.1.1-.1h.1l.1-.2h.1l.1-.2h.1l.1-.1.1-.1.1-.1.1-.1.1-.1.1-.1.1-.1h.1l.1-.2h.1l.1-.2h.1l.1-.2h.1l.1-.2h.1v-.2h.2v-.2h.2v-.2h.1l.1-.2h.1l.1-.2h.1l.1-.2.2-.2v-.1l.2-.1v-.1l.1-.1.1-.1.1-.1.1-.1v-.1l.2-.1v-.1l.1-.1.1-.1.1-.1v-.2h.2v-.2h.1l.1-.2v-.1l.2-.1v-.1l.1-.1.1-.2.2-.2.1-.2v-.1l.2-.1v-.1l.1-.1.1-.2.1-.2.1-.1.1-.1v-.1l.1-.1.1-.2.2-.2v-.1l.1-.1v-.2h.1v-.2l.1-.1.1-.1v-.1l.1-.2h.1v-.2l.1-.1.1-.1v-.2h.1v-.2l.1-.1.1-.2.1-.2v-.1l.1-.2.1-.2.1-.1v-.2h.1v-.2l.1-.1v-.1l.1-.2v-.1l.1-.1v-.2h.1v-.2l.1-.1.1-.2.1-.2v-.1l.1-.2v-.1l.1-.1v-.2l.1-.2v-.1l.1-.2v-.1l.1-.1v-.2h.1v-.2l.1-.1v-.4l.1-.1v-.2l.1-.1v-.1l.1-.2v-.2l.1-.2v-.2l.1-.1v-.3l.1-.2v-.2l.1-.2v-.2l.1-.2v-.2l.1-.1v-.4l.1-.2v-.3l.1-.1v-.4l.1-.1v-.6l.1-.1v-.6l.1-.1v-.8l.1-.1v-.9l.1-.1V133.8h-.1v-1h-.1v-.5l-.1-.2v-.4l-.1-.2v-.4l-.1-.2v-.3l-.1-.2v-.3l-.1-.2-.1-.3v-.2l-.1-.2v-.3l-.2-.2v-.3l-.1-.2v-.2l-.2-.3v-.2l-.1-.3v-.2l-.2-.2v-.3l-.1-.2-.1-.2-.1-.3v-.2l-.2-.2v-.3l-.2-.2v-.2l-.2-.3v-.2l-.2-.2v-.2l-.2-.3v-.2l-.2-.2-.1-.2-.1-.2-.2-.3v-.2l-.2-.2-.1-.2-.1-.2-.2-.3v-.2l-.2-.2-.2-.2v-.2l-.2-.2-.2-.2-.1-.2-.1-.3-.2-.2-.1-.2-.2-.2-.1-.2-.2-.2-.1-.2-.2-.2-.1-.2-.2-.2-.1-.1-.2-.2-.2-.2-.1-.2-.2-.2-.2-.2-.1-.2-.2-.2-.2-.2-.1-.1-.2-.2-.2-.2-.1-.2-.2-.2-.2-.1-.2-.2-.2-.2-.1-.2-.2-.1-.2-.2-.2-.2-.2-.1-.2-.2-.2-.2-.2-.1v-.1l-.2-.1-.2-.2-.2-.1v-.1h-.2v-.2h-.2v-.1l-.2-.1-.2-.1v-.1h-.2v-.2h-.2v-.1l-.2-.1-.2-.1-.1-.1h-.1l-.1-.2h-.1l-.1-.1h-.1l-.2-.1v-.1h-.2v-.1l-.2-.1-.2-.1-.1-.1h-.1l-.1-.2h-.3v-.2h-.2l-113.5-65h-.2l-.1-.2h-.2l-.1-.1-.1-.1h-.2l-.1-.2h-.2l-.1-.1-.2-.1h-.1l-.2-.2h-.1l-.2-.1h-.1l-.2-.1-.1-.1h-.2l-.1-.2h-.2l-.1-.1h-.2l-.1-.1-.2-.1h-.1l-.2-.1-.1-.1h-.2l-.1-.1-.2-.1h-.1l-.2-.1h-.1l-.2-.1-.1-.1h-.2l-.1-.1h-.2l-.1-.1h-.2l-.1-.1h-.2l-.1-.1h-.2l-.1-.1h-.2l-.2-.1h-.1l-.2-.1h-.1l-.2-.1h-.1l-.2-.1h-.1l-.2-.1h-.1l-.2-.1h-.2l-.1-.1h-.2l-.1-.1h-.3l-.2-.1h-.2l-.1-.1h-.3l-.2-.1h-.1l-.2-.1h-.3l-.2-.1h-.3l-.2-.1h-.4l-.2-.1h-.3l-.2-.1h-.4l-.2-.1h-.5l-.1-.1h-.7l-.1-.1h-.7l-.1-.1h-.8l-.2-.1h-1.7l-.2-.1h-1z"/> - <path fill="#EBB951" d="M1482.5 260V137.5a44 44 0 0 0-22.2-38.3l-113.7-65a52.6 52.6 0 0 0-53.1.6l-96 57.6a67 67 0 0 0-32.6 57.5v119.5c0 20 10.6 38.4 27.8 48.5l104.7 61.2c14 8.1 31.1 8.3 45.2.4l116-64.5a46.7 46.7 0 0 0 24-40.8v-14.4z"/> - <path fill="#FCD804" d="M1320.7 13.9h3.3l.2.1h1.7l.2.1h.8l.3.1h.8l.3.1h.5l.3.1h.8l.3.1h.5l.3.1h.2l.3.1h.3l.2.1h.6l.2.1h.3l.3.1h.3l.2.1h.3v.1h.3l.2.1h.3l.3.1h.2l.3.1.3.1h.2l.3.1.3.1h.2l.3.1.2.1h.3l.3.1.2.1h.3l.3.2h.2l.3.1h.3v.1h.2l.3.2h.2l.3.1.3.1.2.1.3.1h.2l.3.2h.2l.3.1.3.1.2.1.3.1.2.1.3.1.2.1.3.1.2.1.3.1.2.1.3.1.3.1.2.1.3.1.2.1.3.1.2.1.3.2h.2l.3.2.2.1.3.1.2.1.3.1.2.2h.3v.1l.2.1.3.1.2.2h.3l.2.2.3.1.2.1.3.2.2.1.3.2h.2v.1l.2.1.3.2.2.1.3.1.2.2 113.7 65 .2.1.2.1.2.1.2.2h.2v.1l.2.1.2.1.2.1.2.2.2.1.2.1.2.2h.2v.1l.2.1.2.2.2.1.2.1.2.2.2.1.2.1.2.2.2.1.2.1.2.2.2.1.2.2.2.1.2.1.2.2.1.1.2.2.2.1.2.1.2.2.2.1.2.2.2.1.1.2.2.1.2.2.2.1.2.2.1.1.2.2.4.3.3.3.4.3.3.3.4.4.3.3.4.3.3.3.4.4.3.3.3.3.4.4.3.3.3.4.3.3.4.4.3.3.3.4.3.3.3.4.3.3.3.4.3.3.3.4.3.4.3.3v.1l.3.3.3.4.2.4.3.3.3.4.2.4.3.4.3.4.2.4.3.4.2.4.3.4.2.4.3.4.2.4.2.4.3.4.2.4.2.4.2.4.3.4.2.4v.1l.2.4.2.4.2.4.2.4.2.4v.1l.2.4.2.4.2.4.2.5.2.4.2.4.1.5.2.4.2.4v.1l.1.4.2.4.1.5.2.4.1.4v.1l.2.4.1.4.2.5.1.4.1.5.2.4v.5h.1l.1.4.1.5.1.4v.1l.2.4v.5l.2.4v.5l.2.5v.4l.1.5v.2l.1.3v.2l.1.2v.3l.1.2v.7h.1v.5l.1.2v.5l.1.2v.7l.1.3v.9l.1.3v.9l.1.3v2.1l.1.3v141.1l-.1.2v1.3l-.1.3v.7l-.1.3v.7l-.1.3v.5l-.1.2v.6l-.1.2v.5l-.1.2v.6h-.1v.5l-.1.2v.3l-.1.2v.2l-.1.3v.2l-.1.3v.2l-.1.3v.2l-.1.3v.2l-.1.2v.3l-.1.2v.3h-.1v.2l-.1.3v.2l-.1.3-.1.2v.2l-.2.3v.5l-.2.2v.5h-.1v.2l-.2.3v.4h-.1v.3l-.2.2v.2l-.1.3v.2h-.1v.2l-.2.3v.2l-.1.2-.1.3-.1.2v.2h-.1v.3l-.2.2v.2l-.1.3-.1.2-.1.2-.1.3-.1.2-.1.2v.3h-.1v.2l-.2.2v.2l-.2.3v.2l-.2.2v.3l-.2.2v.2l-.2.2v.3l-.2.2v.2l-.2.2-.1.3-.1.2-.1.2-.1.2-.1.2-.2.3v.2l-.2.2-.1.2-.1.2-.1.2-.2.3v.2l-.2.2-.1.2-.1.2-.2.2v.3l-.2.2-.1.2-.2.2v.2h-.1l-.1.2-.1.2-.2.3v.2h-.1l-.1.2-.2.2v.2h-.1l-.1.2-.2.2-.1.2-.1.2-.2.2-.1.2-.2.2v.2l-.2.2-.2.2v.2h-.1l-.1.2-.2.2-.1.2-.2.2-.1.2-.2.2-.1.2-.2.2-.1.2-.2.2-.1.2-.2.2-.1.2-.2.2-.1.2-.2.2-.1.2-.2.2-.2.2-.1.2-.2.1-.1.2-.2.2-.1.2-.2.2-.2.2-.1.2-.2.2-.2.1-.1.2-.2.2-.2.2-.1.2-.2.2-.2.2-.1.1-.2.2-.2.2-.2.2-.1.1-.2.2-.2.2-.2.2-.2.2-.1.1-.2.2-.2.2-.2.1-.2.2-.1.2-.2.2-.2.1-.2.2-.2.2-.2.1-.2.2-.1.2-.2.1-.2.2-.2.2-.2.1-.2.2-.2.2-.2.1-.2.2-.2.1-.2.2-.1.2-.2.1-.2.2-.2.1-.2.2-.2.1-.2.2-.2.1-.2.2-.2.1-.2.2-.2.1-.2.2-.2.1-.3.2-.2.1-.2.2h-.2v.1l-.2.1-.2.2-.2.1-.2.2-.2.1-.2.2-.3.1-.2.2h-.2v.1l-.2.1-.2.2h-.2v.1l-.2.1-.2.2-.3.1-.2.1-.2.2h-.2l-.2.2-.3.1-.2.1-.2.2h-.2l-116 64.7h-.2v.1l-.2.1-.2.1-.3.1-.2.2h-.2l-.2.2-.2.1-.2.1-.3.1-.2.1-.2.1-.2.1-.2.1-.3.1-.2.1-.2.1-.2.1-.3.2h-.2l-.2.2h-.2l-.3.1-.2.1-.2.1-.2.1-.3.1-.2.1-.2.1h-.2v.1h-.3l-.2.2h-.2l-.2.2h-.2l-.3.1-.2.1h-.2v.1h-.2l-.3.2h-.2l-.2.1h-.2v.1h-.3l-.2.2h-.2l-.3.1h-.2l-.2.2h-.4v.1h-.3l-.4.2-.5.1-.4.2h-.5l-.5.2-.4.1-.5.1-.5.1-.4.2h-.5l-.4.2h-.5l-.5.1-.4.1-.5.1h-.5v.1h-.4l-.5.1-.5.1h-.5l-.4.2h-1l-.4.1h-1v.1h-.9l-.5.1h-1.4v.1h-5.7l-.4-.1h-1l-.5-.1h-.9l-.5-.1h-.4l-.5-.1-.5-.1h-.5l-.4-.1-.5-.1h-.5v-.1h-.4l-.5-.2h-.5l-.4-.1-.5-.1-.5-.1-.4-.1-.5-.1-.5-.2h-.4l-.5-.2-.5-.1-.4-.1-.5-.2-.4-.1-.5-.2-.4-.1h-.1l-.4-.2h-.3l-.2-.1-.2-.1h-.2l-.3-.2h-.2l-.2-.1-.3-.1h-.2v-.1h-.2l-.2-.1-.2-.1-.3-.1-.2-.1-.2-.1h-.3v-.1h-.2l-.2-.2h-.2l-.3-.1-.2-.1-.2-.1-.2-.1-.2-.1-.3-.1-.2-.1-.2-.1-.2-.1-.3-.1-.2-.1-.2-.1-.2-.1-.2-.1-.3-.1-.2-.2h-.2l-.2-.2-.2-.1-.2-.1-.3-.1-.2-.1-.2-.1-.2-.1-.2-.2h-.2l-.3-.2-.2-.1-.2-.1-.2-.2h-.2v-.1l-.2-.1-.2-.1-104.8-61.2-.2-.2-.3-.1-.2-.2-.3-.1-.2-.2-.3-.1-.2-.2-.3-.1-.2-.2-.3-.1-.2-.2-.2-.2-.3-.1-.2-.2-.3-.1-.2-.2-.2-.1-.3-.2-.2-.2-.3-.1-.2-.2-.2-.2-.3-.1-.2-.2-.2-.2-.2-.1-.3-.2-.2-.2-.2-.1-.2-.2-.3-.2-.2-.2-.2-.1-.2-.2-.3-.2-.2-.2-.2-.1-.2-.2-.2-.2-.3-.2-.2-.2-.2-.1-.2-.2-.2-.2-.2-.2-.2-.2-.3-.2-.2-.2-.2-.1-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.3-.2-.2-.2-.2-.1-.2-.2-.2-.2-.2-.2-.2-.2-.3-.2-.2-.1-.2-.2-.2-.2-.2-.2-.2-.2-.2-.1-.3-.2-.2-.2-.2-.2-.2-.1-.2-.2-.3-.2-.2-.1-.2-.2-.2-.2-.2-.1-.3-.2-.2-.2-.2-.1-.3-.2-.2-.2-.2-.1-.3-.2-.2-.1-.2-.2-.3-.2-.2-.1-.2-.2-.2-.1-.3-.2-.2-.1-.3-.2-.2-.1-.2-.2-.2-.1-.3-.2-.2-.1-.2-.2-.3-.1-.2-.2-.2-.1-.3-.1-.2-.2-.2-.1-.3-.2-.2-.1-.3-.1-.2-.2-.3-.1-.2-.2-.2v-.3h-.1l-.1-.2-.2-.3v-.2l-.2-.3-.1-.2-.2-.3v-.2l-.2-.3-.1-.2-.2-.3v-.2l-.2-.3-.1-.2-.1-.3-.2-.2v-.3l-.2-.2-.1-.3-.1-.3-.1-.2-.2-.3v-.2l-.2-.3v-.2l-.2-.3-.1-.2-.1-.3-.1-.3-.1-.2-.1-.3-.1-.3-.1-.2-.1-.3-.1-.3-.1-.2-.1-.3-.1-.3-.1-.2-.1-.3-.1-.3-.1-.2v-.3h-.1v-.3l-.2-.2v-.3l-.2-.3v-.2l-.1-.3-.1-.3v-.2h-.1v-.3l-.1-.3-.1-.3-.1-.2v-.3l-.2-.3v-.2l-.1-.3v-.3l-.2-.3v-.2l-.1-.3v-.3l-.2-.3v-.5l-.2-.3v-.5h-.1v-.3l-.1-.3v-.3l-.1-.2v-.3h-.1v-.3l-.1-.3v-.3l-.1-.2v-.3l-.1-.3v-.3l-.1-.2v-.6l-.1-.3v-.3l-.1-.3v-.2l-.1-.3v-.5l-.1-.3v-.6l-.1-.3v-.6l-.1-.2v-1l-.1-.3v-1.1l-.1-.3v-1.8l-.1-.3V145l.1-.3v-1l.1-.3v-1l.1-.3v-.7l.1-.3v-.7l.1-.3v-.3l.1-.3v-.4l.1-.3v-.3l.1-.3v-.3l.1-.4v-.3l.1-.3v-.3l.1-.3v-.4l.1-.3v-.3l.1-.3.1-.4v-.3l.1-.3.1-.3v-.3l.1-.3v-.4l.2-.3v-.3l.1-.3v-.3h.1v-.4l.1-.3.1-.3v-.3h.1v-.3l.2-.3v-.4l.1-.3.1-.3v-.3l.2-.3v-.3l.2-.3v-.3l.1-.3.1-.4.1-.3.1-.3.1-.3.1-.3.1-.3.1-.3.1-.3.1-.3.1-.3.1-.3.1-.3.1-.3.1-.4.2-.3v-.3l.2-.3.1-.3.1-.3.1-.3.1-.3.2-.3v-.3l.2-.3.1-.3.1-.3.2-.3v-.3l.2-.3.1-.3.2-.3v-.3h.1l.1-.3.2-.3v-.3h.1l.1-.2.2-.3.1-.3.1-.3.2-.3.1-.3.2-.3.1-.3.1-.2.2-.3.1-.3.2-.3.1-.3.2-.3.1-.3.2-.2.1-.3.2-.3.1-.3.2-.3.2-.2.1-.3.2-.3.1-.3.2-.3.2-.2.1-.3.2-.3.1-.3.2-.2.2-.3.1-.3.2-.3.2-.2.2-.3.1-.3.2-.2.2-.3.2-.3.1-.3.2-.2.2-.3.2-.3.2-.2.1-.3.2-.2.2-.3.2-.3.2-.2.2-.3.2-.2.2-.3.2-.3.1-.2.2-.3.2-.2.2-.3.2-.2.2-.3.2-.2.2-.3.2-.3.3-.2.2-.3.2-.2.2-.3.2-.2.2-.3.2-.2.2-.3.2-.2.2-.3.2-.2.2-.3.2-.2.3-.2.2-.3.2-.2.2-.2.2-.3.3-.2.2-.3.2-.2.2-.2.2-.3.3-.2.2-.2.2-.3.3-.2.2-.2.2-.2.2-.3.3-.2.2-.2.2-.3.3-.2.2-.2.3-.2.2-.3.2-.2.3-.2.2-.2.3-.2.2-.2.2-.2.3-.3.2-.2.3-.2.2-.2.3-.2.2-.2.3-.2.2-.3.3-.2.2-.2.3-.2.2-.2.3-.2.2-.2.3-.2.3-.2.2-.2.3-.2.2-.2.3-.2.3-.2.2-.2.3-.2.3-.2.2-.2.3-.2.3-.2.2-.1.3-.2.3-.2.3-.2.2-.2.3-.2.3-.1.2-.2.3-.2.3-.2.3-.1.3-.2.2-.2.3-.2.3-.1.3-.2.3-.2 96-57.6h.2l.2-.1.3-.2.2-.1.2-.2h.3v-.1l.2-.1.3-.2.2-.1.2-.1.3-.2h.2v-.1l.3-.1.2-.1.3-.2h.2V21l.3-.1.2-.1.2-.2h.3v-.1l.2-.1.3-.1.2-.2h.3l.2-.2.3-.1.2-.1.3-.1.2-.2h.3l.2-.2h.3l.2-.2.3-.1.2-.1.3-.1.3-.1.2-.1.3-.1.2-.1.3-.1.2-.1.3-.1.3-.1.2-.1.3-.1.2-.1.3-.1h.2v-.1h.3l.3-.2h.2l.3-.2h.3l.2-.1.3-.1h.3l.2-.2h.3l.2-.1.3-.1h.3l.2-.2h.3l.3-.1.2-.1h.3l.2-.1.3-.1h.2l.3-.1.3-.1h.2l.3-.2h.5l.3-.1h.3v-.1h.2l.3-.1h.3l.3-.1h.2l.3-.1h.3l.2-.1h.3l.3-.1h.2l.3-.1h.3l.2-.1h.6l.2-.1h.3l.3-.1h.5l.3-.1h.5l.3-.1h.8l.3-.1h.8l.3-.1h1.1l.2-.1h2l.2-.1h2.1zm-.3 27h-3.3l-.2.1h-1.1l-.2.1h-.6l-.2.1h-.4l-.2.1h-.5l-.1.1h-.4l-.1.1h-.5l-.2.1h-.3l-.1.1h-.2l-.2.1h-.3l-.1.1h-.2l-.2.1h-.3l-.1.1h-.2l-.2.1h-.3l-.1.1h-.2l-.1.1h-.2l-.2.1h-.1l-.2.1h-.1l-.2.1h-.1l-.2.1h-.2l-.1.1h-.2l-.1.1h-.2l-.1.1h-.2l-.1.1-.2.1h-.1l-.2.1h-.1l-.2.1-.1.1h-.2l-.1.1h-.2l-.1.1-.2.1h-.1l-.2.1h-.1l-.2.1-.1.1h-.2l-.1.1-.2.1h-.1l-.2.2h-.1l-.2.1h-.1l-.2.1-.1.1-.2.1h-.1l-.2.1-.1.1-.2.1h-.1l-.2.2h-.1l-.2.1-.1.1h-.2l-.1.2h-.2l-.1.1-.1.1h-.2l-.1.2h-.2l-96 57.6-.1.1-.2.1-.2.2h-.2l-.2.2-.2.1-.2.1-.2.1-.1.2h-.2l-.2.2-.2.1-.2.2-.2.1-.1.1-.2.1-.2.2h-.2l-.2.2-.1.1-.2.2h-.2l-.2.2-.1.1-.2.2-.2.1-.2.1-.2.2-.1.1-.2.1-.2.2-.1.1-.2.1-.2.2-.2.1-.1.1-.2.2-.2.1-.1.1-.2.2-.2.1-.1.2-.2.1-.1.1-.2.2-.2.1-.1.2-.2.1-.2.2-.1.1-.2.1-.1.2-.2.1-.2.2-.1.1-.2.2-.1.1-.2.2-.1.2-.2.1-.1.2-.2.1-.1.2-.2.1-.1.2-.2.1-.1.2-.2.2-.1.1-.2.2-.1.1-.2.2-.1.2-.2.1-.1.2-.2.1-.1.2-.1.2-.2.1-.1.2-.2.1v.2l-.2.2-.2.1-.1.2-.1.2-.2.1-.1.2-.1.2-.2.1v.2l-.2.2-.2.1v.2l-.2.2-.2.1v.2l-.2.2-.1.1-.2.2v.2l-.2.2-.1.1-.2.2v.2l-.2.2-.1.1-.1.2-.2.2v.2l-.2.2-.1.1-.1.2-.2.2v.2l-.2.1-.1.2-.1.2-.1.2-.1.2-.2.2v.1l-.2.2v.2l-.2.2-.1.2-.1.2-.1.2-.1.1-.1.2-.1.2-.1.2-.1.2-.1.2-.1.2-.1.1-.1.2-.1.2-.1.2-.1.2-.1.2-.1.2-.1.2v.2l-.2.2v.2l-.2.1v.2l-.1.2-.1.2-.1.2-.1.2v.2l-.2.2v.2l-.1.2-.1.2-.1.2v.2l-.2.2v.2l-.1.2-.1.2v.2l-.2.2v.2l-.1.2v.2l-.2.2v.2l-.1.2v.2l-.2.2v.2l-.1.2v.2l-.1.2-.1.2v.2l-.1.2v.2l-.2.2v.4l-.1.2-.1.2v.3l-.1.2v.2l-.1.2v.2l-.1.2-.1.2v.2l-.1.2v.2l-.1.2v.2l-.1.3v.2l-.1.2v.2l-.1.2v.2l-.1.2v.4l-.1.3v.2l-.1.2v.4l-.1.2v.5l-.1.2v.2l-.1.2v.6l-.1.3v.4l-.1.2v.6l-.1.2v.9l-.1.2v1l-.1.2v1.2l-.1.2V273l.1.1v.9l.1.2v.6l.1.2v.5l.1.2v.4l.1.1v.5l.1.2v.4l.1.1v.4l.1.1v.2l.1.2v.2l.1.2v.3l.1.2v.1l.1.2v.2l.1.1v.4l.1.1v.2l.1.2v.1l.1.2v.2l.1.1v.2l.1.1v.2l.1.2v.2l.1.1v.2l.1.1v.2l.1.2v.1l.1.2v.2l.1.1.1.2v.1l.1.2v.2l.1.1.1.2v.2l.1.1.1.2v.1l.1.2v.2l.2.1v.2l.1.1v.2l.1.1.1.2v.2l.1.1.1.2v.1l.2.2v.1l.1.2v.1l.2.2v.1l.1.2v.1l.2.2v.1l.1.2.1.1v.2l.2.2v.1l.1.2.1.1v.2l.2.1v.2l.1.1.1.1.1.2.1.1v.2l.2.1v.2l.1.1.1.2.1.1.1.2.1.1.1.2v.1l.2.1v.2l.2.1v.2l.2.1v.1l.2.2v.1l.2.2v.1l.2.2v.1l.2.1v.2l.2.1v.2l.2.1v.1l.2.2v.1l.2.1v.2l.2.1v.2l.2.1v.1l.2.2h.1l.1.2.1.1.1.2.1.1.1.1.2.2v.1l.2.1v.2l.2.1.1.1.1.2h.1l.2.2v.1l.2.2.1.1.1.1.2.2.2.2.1.1.1.2h.2v.2l.2.1.1.1.1.2h.2l.1.2.1.1.1.1.2.2h.1l.1.2.2.1.1.1.1.1.1.2h.2l.1.2.1.1.2.1.1.1.1.1.2.1.1.2h.1l.2.2.2.2.2.1.1.1.1.1.2.1.1.1.2.2h.1l.1.2h.2l.1.2h.2l.1.2h.1l.2.2h.1l.2.2h.1l.2.2.1.1.2.1.1.1h.2l.1.2h.2l.1.2h.1l.2.2h.1l.2.2h.1l.2.1.1.1.2.1.1.1.2.1.1.1.2.1 104.7 61.2h.1l.2.1v.1h.2l.1.1.1.1h.1l.2.1.2.1.1.1h.1l.1.1h.2v.1l.2.1h.1l.1.1h.2v.1h.2l.1.1h.1l.2.1.2.1.1.1h.1l.2.1.2.1h.1l.1.1h.2v.1h.2l.1.1h.1l.2.1.2.1h.2l.2.1.2.1h.1l.1.1h.2v.1h.4l.3.2h.2l.3.1.2.1h.3l.2.1.3.1h.2l.3.1h.2l.3.1.2.1h.3l.2.1h.3l.2.1h.6l.2.1h.3l.2.1h.3l.2.1h.8l.3.1h.8l.2.1h5.3l.2-.1h.6l.2-.1h.5l.3-.1h.2l.3-.1h.3l.2-.1h.3l.2-.1h.3l.2-.1h.3l.2-.2h.5l.3-.1.2-.1h.3l.2-.2h.4l.1-.1h.3v-.1h.2l.1-.1h.3l.1-.1h.1l.2-.1.2-.1h.2l.2-.1.2-.1h.1l.1-.1h.2v-.1h.2l.1-.1h.1l.2-.1.2-.1h.1l.1-.1h.2v-.1h.2l.1-.2h.3v-.1h.2l.1-.1.1-.1h.2v-.1h.2l.1-.1.1-.1h.2v-.1h.2l.1-.2h.4l116-64.5v-.1h.2l.1-.1.1-.1h.2l.1-.2h.2l.2-.2.2-.1h.1l.1-.2h.2v-.1h.2l.1-.1.1-.1h.1l.1-.2h.1l.2-.1v-.1h.2v-.2h.2l.1-.1.1-.1h.1l.1-.2h.1l.2-.1v-.1h.2v-.2h.2l.1-.1.1-.1.1-.1h.1l.1-.2h.1l.2-.2.2-.1v-.1l.2-.1v-.1h.2v-.2h.2v-.2h.2v-.2h.2v-.1l.2-.1v-.1l.2-.1v-.1h.2v-.2h.2v-.2h.2v-.2h.2v-.2h.2v-.2h.2v-.1l.1-.1.1-.1.1-.1.1-.1.1-.1.1-.1.1-.1.1-.1v-.1l.2-.1v-.1l.2-.2.1-.2h.1l.1-.2h.1v-.2h.2v-.2h.1l.1-.2.1-.1v-.1l.2-.1v-.1l.1-.1.1-.1.1-.2.2-.2.1-.2h.1v-.2l.2-.1v-.1l.1-.1.1-.1v-.2h.1l.1-.2h.1v-.2l.1-.1.1-.1v-.1l.2-.2.1-.2v-.1l.1-.1.1-.1v-.1l.1-.2h.1v-.2l.2-.1v-.1l.1-.1v-.2h.1l.1-.2v-.1l.1-.1.1-.2.1-.2.1-.1v-.1l.1-.2.1-.2.1-.1v-.2h.1l.1-.2v-.1l.1-.2.1-.2v-.1l.1-.1v-.2h.1l.1-.2v-.1l.1-.2.1-.2v-.1l.1-.2.1-.2v-.1l.1-.2v-.1l.1-.1v-.2h.1v-.2l.1-.1v-.2l.1-.1v-.3h.1v-.2l.1-.2v-.2l.1-.1v-.2l.1-.1v-.3l.1-.1v-.1l.1-.2v-.2l.1-.2v-.2l.1-.2v-.2l.1-.2v-.2l.1-.2v-.4h.1v-.5l.1-.1v-.3l.1-.1v-.4l.1-.2v-.5l.1-.2v-.5l.1-.2v-.8l.1-.1v-1.5l.1-.1V134.8l-.1-.2v-.8l-.1-.2v-.4l-.1-.2v-.5l-.1-.1v-.5l-.1-.3v-.2l-.1-.3v-.2l-.2-.3v-.5l-.1-.2v-.3l-.2-.2v-.5l-.2-.2v-.5l-.2-.3v-.2l-.1-.2-.1-.3v-.2l-.2-.2v-.3l-.2-.2v-.2l-.2-.3v-.2l-.2-.2v-.2l-.2-.3v-.2l-.2-.2v-.3l-.2-.2v-.2l-.2-.2-.1-.3-.1-.2-.2-.2v-.2l-.2-.2-.1-.3-.1-.2-.2-.2-.1-.2-.1-.2-.2-.2-.1-.2-.1-.3-.2-.2-.1-.2-.1-.2-.2-.2-.1-.2-.2-.2-.1-.2-.2-.2-.1-.2-.2-.2-.1-.2-.2-.2-.1-.2-.2-.2-.2-.2-.1-.2-.2-.2-.1-.2-.2-.1-.2-.2-.1-.2-.2-.2-.2-.2-.2-.2-.1-.1-.2-.2-.2-.2-.2-.2-.2-.1-.1-.2-.2-.2-.2-.2-.2-.1-.2-.2-.2-.1-.2-.2-.2-.2-.2-.1v-.1h-.2v-.2h-.2v-.1l-.2-.1-.2-.2-.2-.1-.2-.2-.2-.1v-.1h-.2v-.1l-.2-.1h-.1l-.1-.2h-.1l-.1-.1h-.1l-.1-.2h-.2l-.1-.2h-.2l-.2-.2h-.2v-.2h-.2v-.1h-.2l-.1-.1-.1-.1h-.1l-.2-.1L1340 46h-.2v-.1l-.2-.1h-.2l-.1-.1-.2-.1-.1-.1h-.2l-.1-.2h-.2l-.1-.1h-.2l-.1-.2h-.2l-.1-.1h-.2l-.1-.1-.2-.1h-.1l-.2-.1-.1-.1h-.2l-.1-.1-.2-.1h-.1l-.2-.1-.1-.1h-.2l-.1-.1h-.2l-.1-.1-.2-.1h-.1l-.2-.1h-.1l-.2-.1-.1-.1h-.2l-.1-.1h-.2l-.2-.1h-.1l-.2-.1h-.1l-.2-.1h-.1l-.2-.1h-.1l-.2-.1h-.1l-.2-.1h-.2l-.1-.1h-.2l-.1-.1h-.3l-.2-.1h-.1l-.2-.1h-.2l-.1-.1h-.3l-.2-.1h-.1l-.2-.1h-.3l-.2-.1h-.3l-.1-.1h-.3l-.2-.1h-.3l-.2-.1h-.5l-.1-.1h-.3l-.2-.1h-.6l-.2-.1h-.6l-.2-.1h-.6l-.2-.1h-1l-.1-.1h-2.9z"/> - <path fill="#fff" fill-rule="nonzero" d="M1040 204c0 47.2-9 61-26.9 80.6-17.9 19.7-41.6 27.6-71 27.6-27 0-48.8-9.6-67.7-26.3-20.9-18.4-36-47-36-78.9 0-31.4 11.6-58.5 32.4-78.7a107.4 107.4 0 0 1 73.3-29.2c33.8 0 68.8 16 90.4 47.6l-31.7 26.8c-13.4-25-33-33.5-60.8-34.3-30.8-.8-64.8 28.6-62.3 67.8 1.4 22 11.7 59.6 61 66.6 26 3.6 55.4-24 55.4-39h-48.7V197h92.5v7z"/> - <path fill="#fff" d="M1323.7 99.2a106.6 106.6 0 1 1 0 213 106.6 106.6 0 0 1 0-213zm0 39.5a67 67 0 1 1 0 134 67 67 0 0 1 0-134z"/> -</svg> diff --git a/public/logos/hygraph.svg b/public/logos/hygraph.svg deleted file mode 100644 index 0f4cda1fd..000000000 --- a/public/logos/hygraph.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg viewBox="0 0 150 150" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"> - <path d="M14.9 4.267 7.45 8.533l-3.725 2.134v12.8l3.725-2.134 3.725-2.133v-4.267L7.45 17.067V12.8l3.725-2.133L14.9 8.533v12.8l-3.725 2.134L0 29.866 3.725 32l3.725-2.134L14.9 25.6l3.726-2.133V2.133L14.9 0v4.267Z" style="fill:#fff" transform="translate(38.87 12.926) scale(3.87961)"/> -</svg> diff --git a/public/logos/jekyll.png b/public/logos/jekyll.png deleted file mode 100644 index c9a060813..000000000 Binary files a/public/logos/jekyll.png and /dev/null differ diff --git a/public/logos/keystatic.svg b/public/logos/keystatic.svg deleted file mode 100644 index 86c76559b..000000000 --- a/public/logos/keystatic.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 160 160"><path fill="#fff" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="11" d="M88.79 47.689a5.5 5.5 0 0 0-9.664-4.23l-33.334 39.6A5.5 5.5 0 0 0 50 92.1h23.762l-2.552 20.211a5.499 5.499 0 0 0 9.664 4.231l33.334-39.6A5.5 5.5 0 0 0 110 67.9H86.238l2.552-20.211Z"/></svg> \ No newline at end of file diff --git a/public/logos/keystonejs.svg b/public/logos/keystonejs.svg deleted file mode 100644 index 738241741..000000000 --- a/public/logos/keystonejs.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg viewBox="0 0 623 623" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M116.812 0C52.2987 0 0 52.2987 0 116.812V506.187C0 570.701 52.2987 623 116.812 623H506.187C570.701 623 623 570.701 623 506.187V116.812C623 52.2987 570.701 0 506.187 0H116.812ZM258.797 383.899V476.984H175.067V147.765H258.797V289.217H263.132L372.644 147.765H462.535L348.688 293.096L469.151 476.984H370.819L287.772 347.167L258.797 383.899Z" fill="white"/> -</svg> diff --git a/public/logos/kinsta.svg b/public/logos/kinsta.svg deleted file mode 100644 index 1c1124d5e..000000000 --- a/public/logos/kinsta.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="800" height="800" viewBox="0 0 800 800" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M356.139 359.628C351.656 355.081 346.338 351.444 340.476 348.916C334.465 346.335 327.988 345.018 321.448 345.048C315.3 345.037 309.204 346.179 303.477 348.416C297.808 350.621 292.592 353.848 288.088 357.938L280.179 348.749C279.757 348.264 279.236 347.873 278.652 347.605C278.068 347.336 277.433 347.194 276.79 347.19H276.54C275.95 347.19 275.366 347.307 274.821 347.533C274.276 347.759 273.782 348.091 273.365 348.509C272.949 348.927 272.619 349.423 272.394 349.968C272.169 350.514 272.055 351.099 272.056 351.689V453.334C272.053 454.529 272.523 455.675 273.364 456.523C274.204 457.371 275.346 457.851 276.54 457.857H295.664C296.256 457.856 296.841 457.737 297.388 457.509C297.934 457.281 298.43 456.948 298.847 456.528C299.265 456.108 299.596 455.609 299.821 455.061C300.046 454.514 300.161 453.927 300.159 453.334V394.692C300.143 391.871 300.701 389.077 301.8 386.479C302.853 383.953 304.389 381.657 306.32 379.719C308.311 377.739 310.673 376.173 313.272 375.111C315.87 374.048 318.653 373.511 321.459 373.53C324.251 373.513 327.016 374.072 329.582 375.172C334.641 377.342 338.661 381.391 340.797 386.468C341.89 389.067 342.448 391.86 342.439 394.68V453.406C342.439 454.601 342.911 455.748 343.754 456.595C344.596 457.443 345.74 457.922 346.934 457.929H366.034C367.228 457.922 368.37 457.443 369.21 456.595C370.051 455.747 370.521 454.6 370.518 453.406V394.692C370.554 388.07 369.243 381.509 366.665 375.41C364.184 369.531 360.613 364.176 356.139 359.628V359.628ZM573.078 347.476H497.725C496.535 347.482 495.395 347.961 494.557 348.806C493.719 349.652 493.25 350.796 493.253 351.987V371.03C493.251 371.62 493.366 372.203 493.59 372.748C493.814 373.293 494.143 373.789 494.558 374.207C494.973 374.625 495.466 374.956 496.01 375.183C496.553 375.41 497.136 375.528 497.725 375.529H502.482C503.675 375.533 504.819 376.009 505.661 376.855C506.504 377.7 506.977 378.846 506.977 380.04V408.392C506.943 414.993 508.25 421.533 510.819 427.614C515.878 439.477 525.307 448.935 537.15 454.025C543.195 456.63 549.715 457.951 556.297 457.905H573.126C573.718 457.903 574.304 457.785 574.85 457.557C575.396 457.329 575.892 456.995 576.31 456.575C576.727 456.155 577.058 455.657 577.283 455.109C577.508 454.561 577.623 453.974 577.621 453.382V434.338C577.623 433.747 577.508 433.16 577.283 432.613C577.057 432.066 576.727 431.568 576.309 431.149C575.891 430.73 575.395 430.398 574.849 430.171C574.303 429.944 573.717 429.827 573.126 429.827H556.25C553.388 429.835 550.555 429.256 547.925 428.125C545.397 427.039 543.097 425.484 541.146 423.543C539.211 421.601 537.673 419.3 536.615 416.771C535.509 414.134 534.955 411.298 534.985 408.439V380.088C534.985 378.896 535.457 377.752 536.297 376.907C537.137 376.061 538.278 375.583 539.469 375.577H573.114C574.306 375.577 575.45 375.103 576.293 374.259C577.136 373.416 577.61 372.271 577.61 371.078V352.034C577.616 351.436 577.503 350.842 577.278 350.288C577.053 349.734 576.72 349.23 576.298 348.805C575.876 348.381 575.374 348.045 574.822 347.817C574.269 347.589 573.676 347.473 573.078 347.476V347.476ZM695.576 345.429H695.385C694.718 345.426 694.058 345.573 693.455 345.859C692.852 346.146 692.321 346.564 691.901 347.083L685.3 354.998C684.924 355.454 684.461 355.83 683.938 356.106C683.416 356.381 682.844 356.55 682.256 356.604C681.667 356.657 681.074 356.593 680.511 356.415C679.948 356.238 679.425 355.95 678.973 355.569C677.368 354.201 675.679 352.903 673.931 351.654C670.958 349.524 667.807 347.656 664.511 346.071C661.247 344.5 657.838 343.252 654.331 342.346C650.864 341.459 647.301 341.007 643.722 341.001C636.214 340.955 628.774 342.416 621.839 345.298C615.119 348.061 609.017 352.14 603.893 357.295C598.688 362.625 594.579 368.925 591.798 375.839C588.789 383.381 587.29 391.44 587.386 399.56C587.238 408.001 588.737 416.39 591.798 424.257C594.526 431.139 598.643 437.383 603.893 442.599C609.013 447.598 615.111 451.484 621.804 454.013C628.793 456.667 636.212 458.002 643.687 457.952C647.246 457.949 650.791 457.493 654.236 456.596C657.725 455.694 661.121 454.467 664.38 452.93C667.675 451.381 670.827 449.545 673.8 447.443C675.489 446.253 677.106 445.062 678.688 443.765C679.16 443.38 679.707 443.096 680.294 442.93C680.88 442.765 681.495 442.722 682.099 442.803C682.703 442.884 683.284 443.089 683.806 443.404C684.328 443.719 684.78 444.137 685.134 444.634L691.865 454.001C692.419 454.778 693.205 455.358 694.111 455.658C695.016 455.957 695.994 455.959 696.901 455.665C697.808 455.37 698.597 454.794 699.155 454.019C699.712 453.245 700.008 452.313 700 451.359V349.928C700.003 348.739 699.536 347.597 698.7 346.751C697.864 345.906 696.728 345.426 695.54 345.417L695.576 345.429ZM669.554 410.772C668.129 414.303 666.092 417.555 663.536 420.377C661.011 423.151 657.99 425.427 654.628 427.09C651.249 428.761 647.528 429.624 643.758 429.613C640.053 429.634 636.375 428.968 632.912 427.649C629.574 426.388 626.554 424.41 624.063 421.853C621.449 419.153 619.424 415.939 618.117 412.414C615.233 404.076 615.233 395.009 618.117 386.67C619.435 383.151 621.458 379.938 624.063 377.231C626.56 374.685 629.579 372.711 632.912 371.447C636.376 370.131 640.053 369.465 643.758 369.483C647.528 369.467 651.25 370.331 654.628 372.006C657.996 373.659 661.019 375.937 663.536 378.719C666.091 381.542 668.128 384.793 669.554 388.324C672.489 395.527 672.489 403.593 669.554 410.796V410.772ZM124.857 347.274H105.507C104.916 347.272 104.33 347.387 103.783 347.613C103.237 347.838 102.74 348.169 102.321 348.587C101.902 349.005 101.57 349.501 101.343 350.048C101.117 350.595 101 351.181 101 351.773V453.418C101 454.615 101.475 455.764 102.319 456.612C103.164 457.459 104.311 457.937 105.507 457.941H124.822C125.413 457.939 125.999 457.821 126.546 457.593C127.092 457.364 127.588 457.031 128.005 456.611C128.423 456.191 128.753 455.693 128.979 455.145C129.204 454.597 129.319 454.01 129.317 453.418V351.773C129.317 350.581 128.845 349.439 128.005 348.595C127.164 347.752 126.024 347.277 124.833 347.274H124.857ZM203.945 354.939C204.505 354.284 204.866 353.482 204.986 352.629C205.106 351.776 204.98 350.906 204.623 350.122C204.265 349.338 203.692 348.672 202.969 348.203C202.246 347.734 201.405 347.482 200.544 347.476H178.851C178.203 347.477 177.564 347.619 176.976 347.892C176.389 348.165 175.868 348.564 175.45 349.059L131.862 399.774C131.136 400.595 130.735 401.653 130.735 402.75C130.735 403.846 131.136 404.905 131.862 405.725L175.45 456.429C175.869 456.922 176.39 457.318 176.978 457.589C177.565 457.86 178.204 458.001 178.851 458H200.52C201.383 457.996 202.227 457.744 202.952 457.275C203.677 456.805 204.252 456.138 204.61 455.352C204.968 454.565 205.093 453.693 204.971 452.838C204.849 451.982 204.485 451.18 203.922 450.525L165.21 405.713C164.488 404.891 164.09 403.833 164.09 402.738C164.09 401.643 164.488 400.585 165.21 399.762L203.945 354.939ZM246.058 347.262H245.82C245.174 347.262 244.535 347.402 243.947 347.674C243.36 347.945 242.839 348.34 242.419 348.833L241.515 349.892L223.545 370.733C222.834 371.551 222.445 372.6 222.451 373.685V453.43C222.449 454.02 222.564 454.606 222.788 455.152C223.013 455.699 223.343 456.195 223.759 456.614C224.175 457.033 224.67 457.366 225.215 457.593C225.76 457.821 226.344 457.939 226.934 457.941H246.034C247.226 457.934 248.366 457.456 249.206 456.611C250.046 455.766 250.518 454.622 250.518 453.43V351.773C250.518 350.58 250.046 349.437 249.206 348.591C248.366 347.746 247.226 347.268 246.034 347.262H246.058ZM475.782 399.036C472.539 396.093 468.765 393.795 464.662 392.264C460.318 390.649 455.715 389.843 451.081 389.884H421.812C420.885 389.895 419.967 389.712 419.115 389.348C418.263 388.983 417.496 388.444 416.865 387.765C416.196 387.093 415.67 386.294 415.317 385.415C414.963 384.536 414.79 383.595 414.807 382.647C414.813 380.789 415.553 379.008 416.865 377.693C418.177 376.377 419.955 375.634 421.812 375.625H474.26C475.45 375.622 476.591 375.146 477.431 374.303C478.272 373.459 478.744 372.317 478.744 371.126V351.987C478.745 351.396 478.63 350.811 478.406 350.264C478.181 349.718 477.852 349.221 477.435 348.802C477.019 348.383 476.524 348.05 475.979 347.823C475.435 347.595 474.85 347.477 474.26 347.476H421.8C417.095 347.443 412.432 348.375 408.1 350.213C399.708 353.75 393.041 360.443 389.535 368.852C387.729 373.21 386.799 377.882 386.799 382.599C386.799 387.317 387.729 391.989 389.535 396.346C393.063 404.78 399.716 411.519 408.1 415.152C412.423 417.024 417.089 417.972 421.8 417.937H451.984C453.479 417.926 454.924 418.472 456.039 419.468C457.154 420.465 457.858 421.841 458.014 423.329C458.089 424.154 457.99 424.986 457.725 425.771C457.46 426.556 457.033 427.277 456.474 427.888C455.914 428.498 455.233 428.985 454.474 429.317C453.715 429.649 452.896 429.819 452.068 429.816H391.271C390.682 429.817 390.099 429.935 389.556 430.162C389.013 430.389 388.519 430.72 388.104 431.138C387.689 431.556 387.36 432.051 387.136 432.596C386.912 433.142 386.798 433.725 386.799 434.315V453.358C386.798 453.947 386.912 454.531 387.136 455.076C387.36 455.621 387.689 456.117 388.104 456.535C388.519 456.952 389.013 457.284 389.556 457.511C390.099 457.738 390.682 457.856 391.271 457.857H451.021C455.613 457.866 460.16 456.962 464.401 455.199C468.641 453.436 472.489 450.848 475.723 447.586C478.898 444.362 481.446 440.577 483.239 436.421C485.101 432.1 486.049 427.44 486.022 422.734C486.071 418.145 485.121 413.6 483.239 409.415C481.456 405.498 478.914 401.974 475.758 399.048L475.782 399.036Z" fill="white"/> -</svg> diff --git a/public/logos/kontent-ai.svg b/public/logos/kontent-ai.svg deleted file mode 100644 index 1f7c91085..000000000 --- a/public/logos/kontent-ai.svg +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<svg id="Layer_1" - xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200"> - <defs> - <style>.cls-1{fill:#fff;}.cls-2{fill:#3dcca8;}</style> - </defs> - <path id="Path_4548" class="cls-2" d="M100,0C155.23,0,200,44.77,200,100s-44.77,100-100,100S0,155.23,0,100C0,44.77,44.77,0,100,0h0Z"/> - <g> - <path id="Path_4549" class="cls-1" d="M71.53,54.94v44.55c.01,.84-.59,1.57-1.42,1.71-5.69,1.14-27.04,3.99-27.04-14.23v-31.74c0-7.86,6.37-14.23,14.23-14.23s14.23,6.37,14.23,14.23"/> - <path id="Path_4550" class="cls-1" d="M114.23,83.41v44.7c-.06,.79-.64,1.44-1.42,1.57-5.69,1.13-27.04,3.98-27.04-14.24v-31.74c0-7.86,6.37-14.23,14.23-14.23s14.23,6.37,14.23,14.23"/> - <path id="Path_4551" class="cls-1" d="M156.94,111.88v44.7c-.06,.79-.64,1.44-1.42,1.57-5.69,1.13-27.04,3.98-27.04-14.24v-31.74c0-7.86,6.37-14.23,14.23-14.23s14.23,6.37,14.23,14.23"/> - </g> -</svg> \ No newline at end of file diff --git a/public/logos/lit.svg b/public/logos/lit.svg deleted file mode 100644 index 378e8065f..000000000 --- a/public/logos/lit.svg +++ /dev/null @@ -1,6 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 320"> - <path fill="#00E8FF" d="m64 192 26-45 38-19 64 64 11 62-11 66-64-64-38-26z"/> - <path fill="#283198" d="M128 256V128l64-64v128l-64 64ZM0 256l64 64 9-61-9-67-37 24-27 40Z"/> - <path fill="#324FFF" d="M64 192V64l64-64v128l-64 64Zm128 128V192l64-64v128l-64 64ZM0 256V128l64 64-64 64Z"/> - <path fill="#0FF" d="M64 320V192l64 64z"/> -</svg> diff --git a/public/logos/markdoc.svg b/public/logos/markdoc.svg deleted file mode 100644 index 68c9a182e..000000000 --- a/public/logos/markdoc.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 127 37"> - <path fill="#F9F036" d="M110.1 4.7H60.7a1.9 1.9 0 0 0-1.9 1.8v24.3c0 1 .8 1.9 1.9 1.9H110a1.9 1.9 0 0 0 1.9-1.9V6.5c0-1-.8-1.8-1.9-1.8Z"/> - <path fill="#18181B" d="M66.7 11v15h4.7c3.8 0 6.2-3.1 6.2-7.6 0-4.4-2.2-7.3-6.1-7.3h-4.8Zm4.5 13h-2V13h2c2.5 0 3.8 2.2 3.8 5.3 0 3.2-1.3 5.5-3.8 5.5Zm14.2 2.4c3.8 0 5.6-2.7 5.6-7.1v-1.5c0-4.4-1.8-7.1-5.6-7.1s-5.5 2.7-5.5 7v1.6c0 4.4 1.8 7 5.5 7Zm0-2.2c-2 0-2.9-1.5-2.9-4.9v-1.6c0-3.4 1-4.9 3-4.9s2.9 1.5 2.9 4.9v1.6c0 3.4-1 5-3 5ZM99 26.4c3.4 0 5.3-2.2 5.5-5.4l-2.5-.5c-.2 2.4-1.1 3.7-2.9 3.7-2 0-3-1.7-3-5v-1.5c0-3.3 1-4.9 3-4.9 1.7 0 2.7 1.3 2.9 3.7l2.6-.4c-.3-3.7-2.3-5.4-5.5-5.4-3.7 0-5.6 2.7-5.6 7v1.6c0 4.4 1.8 7 5.5 7Z"/> - <path fill="#fff" d="M7.5 22.4 8.6 17l.6-3.4h.1a96.2 96.2 0 0 0 0 4.2V26h2.2V11H8.3l-1.4 6.8a34.3 34.3 0 0 0-.3 1.9h-.1a34.3 34.3 0 0 0-.3-1.9L4.8 11H1.5v15h2.3V13.7l.6 3.4 1.1 5.3h2Zm14.9-.2 1 3.8H26l-4.5-15h-3L14 26h2.6l1-3.8h4.8Zm-2.4-9 1.8 6.9h-3.6c.9-2.8 1.4-5 1.8-6.9Zm13.4 6.7 3 6.1h2.9L36 19.4a4 4 0 0 0 2.8-3.9c0-2.8-1.9-4.5-5.1-4.5h-5.1v15H31v-6.1h2.3ZM31.1 18v-5h2.3c1.8 0 2.7 1 2.7 2.5 0 1.6-1 2.5-2.7 2.5h-2.3Zm15.6.8 3.6 7.2h3l-4.7-9 4.2-6h-3L45 18v-7h-2.6v15H45v-5l1.7-2.2Z"/> -</svg> diff --git a/public/logos/mdx.svg b/public/logos/mdx.svg deleted file mode 100644 index 5b873e98c..000000000 --- a/public/logos/mdx.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 138 57"> - <path fill="none" stroke="#fff" stroke-width="6" d="M17 44V19l13 14 14-14v25m27-4V11M57 27l14 14 13-14m39 14L93 12m1 29 29-29"/> -</svg> diff --git a/public/logos/microcms.svg b/public/logos/microcms.svg deleted file mode 100644 index a86b86b7f..000000000 --- a/public/logos/microcms.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="147" height="138" viewBox="0 0 147 138" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M111.137 40.426L118.209 47.4971L104.066 61.6392L96.9953 54.5682L111.137 40.426ZM72.2464 1.53609C70.2938 -0.416529 67.128 -0.416528 65.1753 1.53609L1.53572 65.1757C-0.416895 67.1283 -0.416897 70.2941 1.53572 72.2468L12.1419 82.853L12.1418 82.8531L19.2129 89.9242L33.355 75.782L26.2843 68.7113L68.7102 26.2855L75.7803 33.3556L89.9224 19.2134L82.8523 12.1434L82.853 12.1427L72.2464 1.53609ZM100.53 29.8197C98.5773 27.8671 95.4115 27.8671 93.4589 29.8197L26.2837 96.9949L40.4259 111.137L111.137 40.4263L100.53 29.8197ZM146.492 75.782L139.421 68.711L125.279 82.8531L132.35 89.9242L146.492 75.782ZM54.568 125.278L54.5674 125.279L65.174 135.885C67.1266 137.838 70.2925 137.838 72.2451 135.885L139.42 68.71L128.814 58.1034C126.861 56.1508 123.695 56.1508 121.743 58.1034L68.7101 111.136L61.6404 104.066L47.4983 118.208L54.568 125.278Z" fill="white"/> -</svg> diff --git a/public/logos/microsoft-azure.svg b/public/logos/microsoft-azure.svg deleted file mode 100644 index 67f0b21be..000000000 --- a/public/logos/microsoft-azure.svg +++ /dev/null @@ -1,23 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-slug-id="azure" viewBox="0 0 256 256"> - <defs> - <linearGradient id="a" x1="-960.61" x2="-1032.51" y1="283.4" y2="70.97" gradientTransform="matrix(1 0 0 -1 1075 318)" gradientUnits="userSpaceOnUse"> - <stop offset="0" stop-color="#114a8b"/> - <stop offset="1" stop-color="#0669bc"/> - </linearGradient> - <linearGradient id="b" x1="-938.14" x2="-954.78" y1="184.4" y2="178.78" gradientTransform="matrix(1 0 0 -1 1075 318)" gradientUnits="userSpaceOnUse"> - <stop offset="0" stop-opacity=".3"/> - <stop offset=".07" stop-opacity=".2"/> - <stop offset=".32" stop-opacity=".1"/> - <stop offset=".62" stop-opacity=".05"/> - <stop offset="1" stop-opacity="0"/> - </linearGradient> - <linearGradient id="c" x1="-947.29" x2="-868.36" y1="289.59" y2="79.31" gradientTransform="matrix(1 0 0 -1 1075 318)" gradientUnits="userSpaceOnUse"> - <stop offset="0" stop-color="#3ccbf4"/> - <stop offset="1" stop-color="#2892df"/> - </linearGradient> - </defs> - <path fill="url(#a)" d="M89.16 18.27h69.24L86.52 231.22a11.04 11.04 0 0 1-10.46 7.51H22.18a11.02 11.02 0 0 1-10.45-14.54L78.7 25.78a11.04 11.04 0 0 1 10.46-7.51z"/> - <path fill="#0078d4" d="M189.77 161.1H79.97a5.08 5.08 0 0 0-3.46 8.8l70.55 65.85a11.1 11.1 0 0 0 7.57 2.98h62.16z"/> - <path fill="url(#b)" d="M89.16 18.27a10.95 10.95 0 0 0-10.48 7.65L11.81 224.01a11.01 11.01 0 0 0 10.39 14.72h55.27a11.81 11.81 0 0 0 9.07-7.71l13.33-39.29 47.63 44.42a11.27 11.27 0 0 0 7.09 2.58h61.93l-27.16-77.63-79.2.02 48.48-142.85z"/> - <path fill="url(#c)" d="M177.6 25.76a11.02 11.02 0 0 0-10.45-7.5H89.98a11.02 11.02 0 0 1 10.45 7.5l66.97 198.42a11.02 11.02 0 0 1-10.45 14.55h77.17a11.02 11.02 0 0 0 10.44-14.54z"/> -</svg> diff --git a/public/logos/netlify.svg b/public/logos/netlify.svg deleted file mode 100644 index 24f693112..000000000 --- a/public/logos/netlify.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 128 113"><g clip-path="url(#a)"><path fill="#32E6E2" d="M34.6 94h-1.2l-6-6v-1.2l9.2-9.2H43l.8.8v6.4l-9.2 9.3Zm-7.2-68.2v-1.2l6-6h1.2l9.2 9.2v6.4l-.8.8h-6.4l-9.2-9.2Z"/><path fill="#fff" d="M80.5 74.6h-8.8l-.8-.7V53.3c0-3.6-1.4-6.5-5.8-6.6l-7.6.1-.4.5v26.6l-.8.7h-8.8l-.7-.7V38.8l.7-.8h19.8a14 14 0 0 1 13.9 14v21.9l-.7.7Z"/><path fill="#32E6E2" d="M35.8 61.5H.8l-.8-.8V52l.7-.7h35.1l.8.7v8.8l-.8.7Zm91.5 0H92.2l-.8-.8V52l.8-.7h35l.8.7v8.8l-.7.7ZM58.9 27V.7l.8-.7h8.8l.7.7v26.4l-.7.7h-8.8l-.8-.7Zm0 84.8V85.6l.8-.8h8.8l.7.8v26.3l-.7.7h-8.8l-.8-.7Z"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h128v112.6H0z"/></clipPath></defs></svg> \ No newline at end of file diff --git a/public/logos/nextjs.svg b/public/logos/nextjs.svg deleted file mode 100644 index e660c6057..000000000 --- a/public/logos/nextjs.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" fill="#fff" viewBox="0 0 394 80"> - <path d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7Zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6Zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7Z"/> - <path fill-rule="evenodd" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Z" clip-rule="evenodd"/> - <path d="M333.6 78.9c-1 0-1.8-.4-2.5-1-.8-.8-1.1-1.6-1.1-2.6s.3-1.8 1-2.5c.8-.7 1.6-1 2.6-1s1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8Zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1a8.5 8.5 0 0 1-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2.4.7 1 1.2 1.6 1.5.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5Zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2.1.5 3.1.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8Z"/> -</svg> diff --git a/public/logos/node.svg b/public/logos/node.svg deleted file mode 100644 index 819679b5f..000000000 --- a/public/logos/node.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" class="iconify iconify--logos" viewBox="0 0 256 289"> - <path fill="#539E43" d="M128 289c-4 0-8-2-11-3l-35-21c-6-3-3-4-1-5l16-7h2l27 16h3l106-61c1 0 2-1 2-3V83l-2-3-106-61h-3L20 80l-1 3v122l1 3 29 17c16 8 26-1 26-11V94c0-2 1-3 3-3h13c2 0 4 1 4 3v120c0 21-12 33-32 33-6 0-11 0-24-6l-28-16a22 22 0 0 1-11-19V83c0-8 4-15 11-19L117 3a24 24 0 0 1 22 0l106 61c7 4 11 11 11 19v123c0 8-4 15-11 19l-106 61a27 27 0 0 1-11 2Zm33-84c-47 0-56-22-56-40 0-1 1-3 3-3h14c1 0 3 1 3 3 2 14 8 21 36 21 22 0 32-5 32-17 0-7-3-12-38-16-29-3-47-9-47-32 0-22 18-34 49-34 34 0 50 11 52 37v2l-3 1h-13c-2 0-3-1-3-2-3-15-12-19-33-19-25 0-28 8-28 14 0 8 4 10 37 15 32 4 48 10 48 33-1 23-20 36-53 36Z"/> -</svg> diff --git a/public/logos/nuxtjs.svg b/public/logos/nuxtjs.svg deleted file mode 100644 index ebedd27fe..000000000 --- a/public/logos/nuxtjs.svg +++ /dev/null @@ -1,4 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 124 124"> - <path fill="#80EEC0" fill-rule="evenodd" d="M56 27c-3-5-12-5-15 0L6 88c-3 5 1 12 7 12h28c-3-2-4-7-2-10l27-46-10-17Z" clip-rule="evenodd"/> - <path fill="#00DC82" d="M78 40c3-4 9-4 12 0l29 50c3 4-1 10-6 10H55c-5 0-9-6-6-10l29-50Z"/> -</svg> diff --git a/public/logos/partytown.svg b/public/logos/partytown.svg deleted file mode 100644 index 5abb4b567..000000000 --- a/public/logos/partytown.svg +++ /dev/null @@ -1,15 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1518 1590"> - <circle cx="133.9" cy="339.9" r="70.5" fill="#ff37ad"/> - <circle cx="1213.1" cy="280.1" r="70.5" fill="#ff37ad"/> - <circle cx="1270.3" cy="1185.5" r="70.5" fill="#fcc954"/> - <circle cx="421.7" cy="70.5" r="70.5" fill="#fcc954"/> - <path fill="#2890e9" d="M839 630a55 55 0 0 1-54-68l6-27a151 151 0 0 1-52 12c-32 1-61-4-85-16a132 132 0 0 1-58-53c-26-46-24-105 6-153 28-45 76-69 128-65 41 3 76 18 104 44l15-47c28-101 38-203 38-204a55 55 0 0 1 109 10c0 5-10 113-42 225-16 56-34 103-56 141l4 26c5 43 1 89-10 134a55 55 0 0 1-53 41ZM719 370c-6 0-16 1-24 14-8 12-9 29-3 39 7 13 30 14 42 14 15-1 30-10 44-26a97 97 0 0 0-8-15 61 61 0 0 0-48-26h-3Z"/> - <path fill="#f0a420" d="M680 781C452 601 214 523 148 607a76 76 0 0 0-14 27 23 23 0 0 0-1 3v1a100 100 0 0 0-1 11L2 1405a158 158 0 0 0 214 173l701-279c12-5 43-23 51-34a72 72 0 0 0 6-7c66-83-65-297-294-477Z"/> - <ellipse cx="560.8" cy="932.7" fill="#fcc954" rx="193.2" ry="526" transform="rotate(-52 561 933)"/> - <ellipse cx="569.3" cy="922" fill="#f0a420" rx="158.5" ry="464.5" transform="rotate(-52 569 922)"/> - <path fill="#2e6ac9" d="M453 1484c-86 1-155-42-239-108-98-78-163-170-169-223l-27 163c12 46 56 105 120 155 53 42 106 70 161 74Zm-86-295C204 1060 98 913 101 828L74 987c2 75 90 197 216 296 112 89 229 151 319 139l152-61c-123 9-252-60-394-172Z"/> - <circle cx="705.3" cy="792.6" r="70.5" fill="#2890e9"/> - <path fill="none" stroke="#ff37ad" stroke-linecap="round" stroke-miterlimit="10" stroke-width="120" d="M1036 683s151-177 421-114"/> - <path fill="#ff37ad" d="M435 257a70 70 0 1 0-119 75c3 4 55 88 65 204 11 117-23 225-102 322 26 34 58 69 95 104a561 561 0 0 0 146-446 642 642 0 0 0-85-259Z"/> - <path fill="#2890e9" d="M1310 932c36 9 61 19 72 24a70 70 0 1 0 60-127 744 744 0 0 0-650 37 952 952 0 0 0-265 222 1181 1181 0 0 0 120 75 672 672 0 0 1 468-250 630 630 0 0 1 195 19Z"/> -</svg> diff --git a/public/logos/payload.svg b/public/logos/payload.svg deleted file mode 100644 index caa1c4617..000000000 --- a/public/logos/payload.svg +++ /dev/null @@ -1,4 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" fill="#fff" viewBox="0 0 30 30"> - <path d="m11.8 0 13.8 8.3V24l-10.4 6V14.3L1.4 6l10.4-6Z"/> - <path d="M10.8 29.1V17L.4 23l10.4 6Z"/> -</svg> diff --git a/public/logos/pelican.svg b/public/logos/pelican.svg deleted file mode 100644 index 16deb4a68..000000000 --- a/public/logos/pelican.svg +++ /dev/null @@ -1,11 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.4" clip-rule="evenodd" viewBox="0 0 579 626"> - <path fill="url(#a)" fill-rule="nonzero" d="m210.4 607.2-1.5-6.6a29 29 0 0 0-9.5-13.8 56.8 56.8 0 0 0-22.4-10.1c-4.6-1-9.4-1.6-14.2-1.7-34.6-.7-56.2.4-90.4-.9a105.3 105.3 0 0 0 16 10.9 116.2 116.2 0 0 0 25.7 10.6c5.6.6 10.7 1.2 14.7 3 1 .5 2 1 2.8 1.7a47 47 0 0 1 8.2 9c4.5 6 3.5 10.9 8.8 13.8l2 1c1.6.5 4 1.4 5.2-1l.3-1.3c-.4-1.4-2-2.6-2.9-3.3a17 17 0 0 1-3.4-2.9c-2.2-2.2-2.4-6-3.9-8.7 2-.8 12.1-2.2 14.3-1.9 4.6.2 8.2.6 11 3.4 1 .9 1.6 1.6 2.6 2.3l.2.2c4.3 3.1 8.3 4.3 11.9 5.4l2.7.8c1.3.5 2.5 1 3.7 1.8 1.4 1 3.8 3.4 3.9 5.5-3.5-1.2-1.2.3-6.4-.1l-7.7-.7a103 103 0 0 1-15-2v.5c-.2 4 2.6 6-3.7 13.4l-.2.3a45 45 0 0 1-13.2 6.4c-11.6 2.3-20.5-5.2-34.5-1.4-5 1.8-8.6 9.8-10.8 15.8-3 8-5.4 17.6-8.2 27a115.4 115.4 0 0 0 46.8-17.8 15.2 15.2 0 0 1 3.8-3.7c.3-.2 1-.3 2.2-.5 10.8-2 58.5-8.4 61.6-43 .3-3.5.1-7.3-.5-11.4Zm-107 18.6c-6.4-2-8-2.2-12-5.4 0 .4.1.7.3 1.1 10.7 6 22.6 10.5 35.1 12.8-3.9-9-8.5-7.4-23.4-8.5Zm29.5-4c-2.7-6.8-10.3-10.7-16.8-12.6-8.7-3-15 0-33.4-8.8l.4.7a115 115 0 0 0 34 17c4.2.4 8.2 1.1 11.9 3a21 21 0 0 1 4.7 3l-.8-2.4Z" transform="translate(-301.3 -2392.2) scale(4.16667)"/> - <path fill="#90d4d1" d="M174.3 89.5c-4-1-8-2.3-12-3.5A484 484 0 0 1 .7.3C9.6 27.8 49 56.8 76 68.3c34.2 14.5 68.2 17.9 98.3 21.2Zm-82.8 52.7c-16.1-9-31.6-19-46.5-29.7 41.7 66 94 65 141.7 70.5a483.8 483.8 0 0 1-95.2-40.8ZM227.1 251a481.3 481.3 0 0 1-146.4-53.6c5.7 16.6 26.4 42.7 54 48.6 11.8 4.2 8.6 3.2 29 2.5 29.7-1.5 44-2.4 65 6.2l-1.6-3.8Zm68.6 130.8-1 1.4A488.8 488.8 0 0 1 83.9 509.8a837.3 837.3 0 0 0 17-53.5 480.7 480.7 0 0 0 194.8-74.5Z"/> - <path fill="#14a0c4" d="M294.7 383.2c-25.2 34.5-38 100.5-52.7 138.6-21.5 55.6-51.3 95.6-116.5 101.3-16.4 1.5-115 5.2-125.5-.1.7-5.6 17-12.4 21.3-15.6C50 587.2 69 551 84 509.8a488.8 488.8 0 0 0 210.8-126.6Z"/> - <defs> - <linearGradient id="a" x1="0" x2="1" y1="0" y2="0" gradientTransform="translate(72.4 628.9) scale(138.584)" gradientUnits="userSpaceOnUse"> - <stop offset="0%" stop-color="#54c4c6"/> - <stop offset="100%" stop-color="#12bad5"/> - </linearGradient> - </defs> -</svg> diff --git a/public/logos/plausible.svg b/public/logos/plausible.svg deleted file mode 100644 index a0ee8f920..000000000 --- a/public/logos/plausible.svg +++ /dev/null @@ -1,29 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<svg viewBox="0 0 1000 1000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> - <!-- Generator: Sketch 64 (93537) - https://sketch.com --> - <title>Artboard - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/public/logos/preact.svg b/public/logos/preact.svg deleted file mode 100644 index 28d319471..000000000 --- a/public/logos/preact.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/public/logos/prefetch.svg b/public/logos/prefetch.svg deleted file mode 100644 index 781f68141..000000000 --- a/public/logos/prefetch.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/logos/preprcms.svg b/public/logos/preprcms.svg deleted file mode 100644 index 22f36e604..000000000 --- a/public/logos/preprcms.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/logos/prismic.svg b/public/logos/prismic.svg deleted file mode 100644 index 7d664a1e6..000000000 --- a/public/logos/prismic.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/logos/react.svg b/public/logos/react.svg deleted file mode 100644 index 0f021af4d..000000000 --- a/public/logos/react.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/logos/render.svg b/public/logos/render.svg deleted file mode 100644 index 99d456bb4..000000000 --- a/public/logos/render.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/logos/sanity.svg b/public/logos/sanity.svg deleted file mode 100644 index 74c2244ad..000000000 --- a/public/logos/sanity.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/public/logos/sitemap.svg b/public/logos/sitemap.svg deleted file mode 100644 index db118e358..000000000 --- a/public/logos/sitemap.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/logos/solid.svg b/public/logos/solid.svg deleted file mode 100644 index e26c05118..000000000 --- a/public/logos/solid.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/public/logos/space.svg b/public/logos/space.svg deleted file mode 100644 index 54c25f71a..000000000 --- a/public/logos/space.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/public/logos/spinal.svg b/public/logos/spinal.svg deleted file mode 100644 index 7e186a083..000000000 --- a/public/logos/spinal.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/logos/sst.svg b/public/logos/sst.svg deleted file mode 100644 index db353e58f..000000000 --- a/public/logos/sst.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/public/logos/statamic.svg b/public/logos/statamic.svg deleted file mode 100644 index 77439b505..000000000 --- a/public/logos/statamic.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/public/logos/storyblok.svg b/public/logos/storyblok.svg deleted file mode 100644 index ce16a6489..000000000 --- a/public/logos/storyblok.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/logos/strapi.svg b/public/logos/strapi.svg deleted file mode 100644 index 58b47d87d..000000000 --- a/public/logos/strapi.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/public/logos/supabase.svg b/public/logos/supabase.svg deleted file mode 100644 index 623cc0de8..000000000 --- a/public/logos/supabase.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/public/logos/surge.svg b/public/logos/surge.svg deleted file mode 100644 index 50c2e2822..000000000 --- a/public/logos/surge.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/public/logos/svelte.svg b/public/logos/svelte.svg deleted file mode 100644 index 8e14c260a..000000000 --- a/public/logos/svelte.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/public/logos/sveltekit.svg b/public/logos/sveltekit.svg deleted file mode 100644 index 8e14c260a..000000000 --- a/public/logos/sveltekit.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/public/logos/tailwind.svg b/public/logos/tailwind.svg deleted file mode 100644 index de1f1dee5..000000000 --- a/public/logos/tailwind.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/public/logos/thulite.svg b/public/logos/thulite.svg deleted file mode 100644 index 9d9ae7d92..000000000 --- a/public/logos/thulite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/logos/tigris.svg b/public/logos/tigris.svg deleted file mode 100644 index 89d1344b1..000000000 --- a/public/logos/tigris.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/public/logos/tina-cms.svg b/public/logos/tina-cms.svg deleted file mode 100644 index bb3aa1931..000000000 --- a/public/logos/tina-cms.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/public/logos/vercel.svg b/public/logos/vercel.svg deleted file mode 100644 index 5f54fdea9..000000000 --- a/public/logos/vercel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/logos/vue.svg b/public/logos/vue.svg deleted file mode 100644 index decb78adc..000000000 --- a/public/logos/vue.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/public/logos/vuepress.png b/public/logos/vuepress.png deleted file mode 100644 index eb767808c..000000000 Binary files a/public/logos/vuepress.png and /dev/null differ diff --git a/public/logos/wordpress.svg b/public/logos/wordpress.svg deleted file mode 100644 index ddc886068..000000000 --- a/public/logos/wordpress.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/public/logos/xata.svg b/public/logos/xata.svg deleted file mode 100644 index 4cea10ed6..000000000 --- a/public/logos/xata.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/public/robots.txt b/public/robots.txt index 9cadc4568..19de83294 100644 --- a/public/robots.txt +++ b/public/robots.txt @@ -1,4 +1,3 @@ User-agent: * -Allow: / - -Sitemap: https://docs.thulite.io/sitemap-index.xml +Disallow: /admin/ +Sitemap: http://localhost:3000/sitemap.xml diff --git a/src/assets/dark-logo.svg b/src/assets/dark-logo.svg deleted file mode 100644 index d5d6741f7..000000000 --- a/src/assets/dark-logo.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/assets/houston.webp b/src/assets/houston.webp deleted file mode 100644 index 930c16497..000000000 Binary files a/src/assets/houston.webp and /dev/null differ diff --git a/src/assets/light-logo.svg b/src/assets/light-logo.svg deleted file mode 100644 index e245d4941..000000000 --- a/src/assets/light-logo.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/components/AnalyticsGuidesNav.astro b/src/components/AnalyticsGuidesNav.astro deleted file mode 100644 index 2f75bb631..000000000 --- a/src/components/AnalyticsGuidesNav.astro +++ /dev/null @@ -1,45 +0,0 @@ ---- -// import { englishPages } from '~/content'; -import { analyticsPages } from '~/content'; -// import { isCmsEntry } from '~/content/config'; -import { isLogoKey } from '~/data/logos'; -import { getLanguageFromURL } from '~/util'; -import CardsNav from './NavGrid/CardsNav.astro'; - -const lang = getLanguageFromURL(Astro.url.pathname); -// const enPages = englishPages.filter(isCmsEntry); - -/** Array of services we have good content for and want to show first in the list. */ -const showFirst = ['Plausible', 'Fathom']; -// Reverse the array to make our logic simpler later. -showFirst.reverse(); - -const links = analyticsPages - .sort((a, b) => { - // Sort services in the `showFirst` array first. - const aPriority = showFirst.indexOf(a.data.service); - const bPriority = showFirst.indexOf(b.data.service); - if (aPriority !== -1 || bPriority !== -1) return aPriority > bPriority ? -1 : 1; - // Sort full guides before stubs. - if (a.data.stub && !b.data.stub) return 1; - if (!a.data.stub && b.data.stub) return -1; - // If they’re both stubs, or neither stubs, sort alphabetically. - return a.data.service.toLowerCase() > b.data.service.toLowerCase() ? 1 : -1; - }) - .map((page) => { - const { service } = page.data; - const pageUrl = '/' + page.slug.replace('en/', `${lang}/`) + '/'; - const logo = isLogoKey(page.slug.split('/').pop()); - return { title: service, href: pageUrl, logo }; - }); ---- - -
- -
- - diff --git a/src/components/Badge.astro b/src/components/Badge.astro deleted file mode 100644 index 5f9817e4f..000000000 --- a/src/components/Badge.astro +++ /dev/null @@ -1,32 +0,0 @@ ---- -export interface Props { - variant?: 'neutral' | 'accent'; -} -const { variant = 'neutral' } = Astro.props as Props; ---- - - - - diff --git a/src/components/BrandLogo.astro b/src/components/BrandLogo.astro deleted file mode 100644 index 2c063a99c..000000000 --- a/src/components/BrandLogo.astro +++ /dev/null @@ -1,62 +0,0 @@ ---- -import { type LogoKey, logos } from '~/data/logos'; - -export interface Props { - size?: `${number}rem` | `${number}px`; - shape?: 'circle' | 'rounded'; - brand: LogoKey; -} - -const { brand, size = '4rem', shape = 'circle' } = Astro.props as Props; -const { file, padding } = logos[brand] || {}; - -// Make a rough guess at the pixel size to use as width/height attributes -const [, value, unit] = /^(\d*(?:\.\d+)?)(\w+)$/.exec(size) || ['4', 'rem']; -const valueAsNumber = parseFloat(value); -const pixelSize = unit === 'px' ? valueAsNumber : valueAsNumber * 16; ---- - -{ - file && ( -
- -
- ) -} - - diff --git a/src/components/Button.astro b/src/components/Button.astro deleted file mode 100644 index 22ffd5890..000000000 --- a/src/components/Button.astro +++ /dev/null @@ -1,171 +0,0 @@ ---- -// Source: https://github.com/withastro/docs/blob/main/src/components/Button.astro - -const { class: className = '', style, href } = Astro.props; -// Wrap in because Houdini is disabled for a[href] for security - -const { variant = 'primary' } = Astro.props; ---- - - - - - - - - diff --git a/src/components/CMSGuidesNav.astro b/src/components/CMSGuidesNav.astro deleted file mode 100644 index 7e8c39be2..000000000 --- a/src/components/CMSGuidesNav.astro +++ /dev/null @@ -1,45 +0,0 @@ ---- -// import { englishPages } from '~/content'; -import { cmsPages } from '~/content'; -// import { isCmsEntry } from '~/content/config'; -import { isLogoKey } from '~/data/logos'; -import { getLanguageFromURL } from '~/util'; -import CardsNav from './NavGrid/CardsNav.astro'; - -const lang = getLanguageFromURL(Astro.url.pathname); -// const enPages = englishPages.filter(isCmsEntry); - -/** Array of services we have good content for and want to show first in the list. */ -const showFirst = ['Tina CMS', 'Decap CMS']; -// Reverse the array to make our logic simpler later. -showFirst.reverse(); - -const links = cmsPages - .sort((a, b) => { - // Sort services in the `showFirst` array first. - const aPriority = showFirst.indexOf(a.data.service); - const bPriority = showFirst.indexOf(b.data.service); - if (aPriority !== -1 || bPriority !== -1) return aPriority > bPriority ? -1 : 1; - // Sort full guides before stubs. - if (a.data.stub && !b.data.stub) return 1; - if (!a.data.stub && b.data.stub) return -1; - // If they’re both stubs, or neither stubs, sort alphabetically. - return a.data.service.toLowerCase() > b.data.service.toLowerCase() ? 1 : -1; - }) - .map((page) => { - const { service } = page.data; - const pageUrl = '/' + page.slug.replace('en/', `${lang}/`) + '/'; - const logo = isLogoKey(page.slug.split('/').pop()); - return { title: service, href: pageUrl, logo }; - }); ---- - -
- -
- - diff --git a/src/components/DeployGuidesNav.astro b/src/components/DeployGuidesNav.astro deleted file mode 100644 index f2cf1a88f..000000000 --- a/src/components/DeployGuidesNav.astro +++ /dev/null @@ -1,45 +0,0 @@ ---- -// import { englishPages } from '~/content'; -import { deployPages } from '~/content'; -// import { isCmsEntry } from '~/content/config'; -import { isLogoKey } from '~/data/logos'; -import { getLanguageFromURL } from '~/util'; -import CardsNav from './NavGrid/CardsNav.astro'; - -const lang = getLanguageFromURL(Astro.url.pathname); -// const enPages = englishPages.filter(isCmsEntry); - -/** Array of services we have good content for and want to show first in the list. */ -const showFirst = ['Netlify', 'Vercel', 'GitHub Pages', "GitLab Pages"]; -// Reverse the array to make our logic simpler later. -showFirst.reverse(); - -const links = deployPages - .sort((a, b) => { - // Sort services in the `showFirst` array first. - const aPriority = showFirst.indexOf(a.data.service); - const bPriority = showFirst.indexOf(b.data.service); - if (aPriority !== -1 || bPriority !== -1) return aPriority > bPriority ? -1 : 1; - // Sort full guides before stubs. - if (a.data.stub && !b.data.stub) return 1; - if (!a.data.stub && b.data.stub) return -1; - // If they’re both stubs, or neither stubs, sort alphabetically. - return a.data.service.toLowerCase() > b.data.service.toLowerCase() ? 1 : -1; - }) - .map((page) => { - const { service } = page.data; - const pageUrl = '/' + page.slug.replace('en/', `${lang}/`) + '/'; - const logo = isLogoKey(page.slug.split('/').pop()); - return { title: service, href: pageUrl, logo }; - }); ---- - -
- -
- - diff --git a/src/components/EthicalAds.astro b/src/components/EthicalAds.astro deleted file mode 100644 index 491745dd7..000000000 --- a/src/components/EthicalAds.astro +++ /dev/null @@ -1,45 +0,0 @@ ---- ---- - - -
- - diff --git a/src/components/FileTree.astro b/src/components/FileTree.astro deleted file mode 100644 index 005a946c9..000000000 --- a/src/components/FileTree.astro +++ /dev/null @@ -1,151 +0,0 @@ ---- -import { useTranslations } from '~/i18n/util'; -import { fileTreeProcessor } from './internal/rehype-file-tree'; - -const content = await Astro.slots.render('default'); -if (!/^\s*
    /.test(content)) { - throw new Error( - ` component expects its content to be an unordered list but found HTML starting with “${content.slice( - 0, - 20 - )}...”` - ); -} - -const t = useTranslations(Astro); - -const processedContent = await fileTreeProcessor.process({ - value: content, - data: { directoryLabel: t('fileTree.directoryLabel') }, -}); ---- - - - - diff --git a/src/components/IntegrationsNav.astro b/src/components/IntegrationsNav.astro deleted file mode 100644 index a02c70aa6..000000000 --- a/src/components/IntegrationsNav.astro +++ /dev/null @@ -1,60 +0,0 @@ ---- -import { integrationPages } from '~/content'; -import { - type IntegrationCategory, - type IntegrationEntry, -} from '~/content/config'; -import { isLogoKey } from '~/data/logos'; -import { useTranslations } from '~/i18n/util'; -import { getLanguageFromURL } from '~/util'; -import CardsNav from './NavGrid/CardsNav.astro'; - -interface Props { - category?: IntegrationCategory; -} - -const lang = getLanguageFromURL(Astro.url.pathname); - -function categoryLinksFromPages(pages: IntegrationEntry[], category: IntegrationCategory) { - return pages - .filter((page) => page.data.category === category) - .map((page) => { - const { service } = page.data; - const pageUrl = '/' + page.slug.replace('en/', `${lang}/`) + '/'; - return { - title: service, - href: pageUrl, - logo: isLogoKey(page.slug.split('/').pop()), - }; - }); -} - -const t = useTranslations(Astro); - -const allCategories = { - renderer: { - title: t('integrations.renderers'), - links: categoryLinksFromPages(integrationPages, 'renderer'), - }, - theme: { title: t('integrations.themes'), links: categoryLinksFromPages(integrationPages, 'theme') }, - other: { title: t('integrations.others'), links: categoryLinksFromPages(integrationPages, 'other') }, -}; -const category = allCategories[Astro.props.category!]; - -const categories = category ? [category] : allCategories; ---- - -{ - Object.values(categories).map((category) => ( - <> -

    {category.title}

    - - - )) -} - - diff --git a/src/components/List.astro b/src/components/List.astro deleted file mode 100644 index c2a969f73..000000000 --- a/src/components/List.astro +++ /dev/null @@ -1,35 +0,0 @@ ---- -const { emoji } = Astro.props ---- - -
    - -
    - - diff --git a/src/components/NavGrid/Card.astro b/src/components/NavGrid/Card.astro deleted file mode 100644 index 37920564d..000000000 --- a/src/components/NavGrid/Card.astro +++ /dev/null @@ -1,90 +0,0 @@ ---- -import type { LogoKey } from '~/data/logos'; -import BrandLogo from '../BrandLogo.astro'; - -export interface Props { - href: string; - logo?: LogoKey; - current?: boolean; - minimal?: boolean; - [key: string]: any; -} - -const { href, logo, current, minimal, class: classes, ...attrs } = Astro.props as Props; ---- - -
  • - {logo && } -
    -

    - - - -

    - {!minimal && } -
    -
  • - - diff --git a/src/components/NavGrid/CardsNav.astro b/src/components/NavGrid/CardsNav.astro deleted file mode 100644 index 87bce7827..000000000 --- a/src/components/NavGrid/CardsNav.astro +++ /dev/null @@ -1,63 +0,0 @@ ---- -import type { LogoKey } from '~/data/logos'; -import Badge from '../Badge.astro'; -import Card from './Card.astro'; -import Grid from './Grid.astro'; - -export interface Props { - minimal?: boolean; - links: { - title: string; - description?: string; - href: string; - logo?: LogoKey; - /** Map of tag IDs to translated tag display text, e.g. `{ static: 'Statisch' }`. */ - tags?: Record; - /** The language of the content if it differs from the main page language. */ - lang?: string; - }[]; - class?: string; -} - -const { links, minimal = false, class: classes } = Astro.props as Props; - -const currentPage = new URL(Astro.request.url).pathname; ---- - -
    - - - { - links.map(({ description, href, logo, title, tags, lang }) => ( - - - - {description &&

    {description}

    } - {tags && ( -
    - {Object.values(tags).map((tag) => ( - {tag} - ))} -
    - )} -
    -
    - )) - } -
    -
    - - diff --git a/src/components/NavGrid/Grid.astro b/src/components/NavGrid/Grid.astro deleted file mode 100644 index 83e4eff1c..000000000 --- a/src/components/NavGrid/Grid.astro +++ /dev/null @@ -1,37 +0,0 @@ ---- -export interface Props { - minimal?: boolean; -} - -const { minimal } = Astro.props as Props; ---- - -
      - -
    - - diff --git a/src/components/TableOfContents.astro b/src/components/TableOfContents.astro deleted file mode 100644 index 3bf6308b9..000000000 --- a/src/components/TableOfContents.astro +++ /dev/null @@ -1,45 +0,0 @@ ---- -import type { Props } from '@astrojs/starlight/props'; -import Default from '@astrojs/starlight/components/TableOfContents.astro' -import EthicalAds from './EthicalAds.astro'; ---- - - -

    Contribute

    - - - - - diff --git a/src/components/ThemesGuidesNav.astro b/src/components/ThemesGuidesNav.astro deleted file mode 100644 index 4913f7f3c..000000000 --- a/src/components/ThemesGuidesNav.astro +++ /dev/null @@ -1,45 +0,0 @@ ---- -// import { englishPages } from '~/content'; -import { themesPages } from '~/content'; -// import { isCmsEntry } from '~/content/config'; -import { isLogoKey } from '~/data/logos'; -import { getLanguageFromURL } from '~/util'; -import CardsNav from './NavGrid/CardsNav.astro'; - -const lang = getLanguageFromURL(Astro.url.pathname); -// const enPages = englishPages.filter(isCmsEntry); - -/** Array of services we have good content for and want to show first in the list. */ -const showFirst = ['Doks']; -// Reverse the array to make our logic simpler later. -showFirst.reverse(); - -const links = themesPages - .sort((a, b) => { - // Sort services in the `showFirst` array first. - const aPriority = showFirst.indexOf(a.data.service); - const bPriority = showFirst.indexOf(b.data.service); - if (aPriority !== -1 || bPriority !== -1) return aPriority > bPriority ? -1 : 1; - // Sort full guides before stubs. - if (a.data.stub && !b.data.stub) return 1; - if (!a.data.stub && b.data.stub) return -1; - // If they’re both stubs, or neither stubs, sort alphabetically. - return a.data.service.toLowerCase() > b.data.service.toLowerCase() ? 1 : -1; - }) - .map((page) => { - const { service } = page.data; - const pageUrl = '/' + page.slug.replace('en/', `${lang}/`) + '/'; - const logo = isLogoKey(page.slug.split('/').pop()); - return { title: service, href: pageUrl, logo }; - }); ---- - -
    - -
    - - diff --git a/src/components/internal/file-tree-icons.ts b/src/components/internal/file-tree-icons.ts deleted file mode 100644 index d4da0197b..000000000 --- a/src/components/internal/file-tree-icons.ts +++ /dev/null @@ -1,756 +0,0 @@ -/** - * Based on https://github.com/elviswolcott/seti-icons which - * is derived from https://github.com/jesseweed/seti-ui/ - * - * Copyright (c) 2014 Jesse Weed - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -const rawDefinitions = { - files: { - COMMIT_EDITMSG: ['git', 'ignore'], - MERGE_MSG: ['git', 'ignore'], - 'karma.conf.js': ['karma', 'green'], - 'karma.conf.coffee': ['karma', 'green'], - 'README.md': ['info', 'blue'], - 'README.txt': ['info', 'blue'], - README: ['info', 'blue'], - 'CHANGELOG.md': ['clock', 'blue'], - 'CHANGELOG.txt': ['clock', 'blue'], - CHANGELOG: ['clock', 'blue'], - 'CHANGES.md': ['clock', 'blue'], - 'CHANGES.txt': ['clock', 'blue'], - CHANGES: ['clock', 'blue'], - 'VERSION.md': ['clock', 'blue'], - 'VERSION.txt': ['clock', 'blue'], - VERSION: ['clock', 'blue'], - mvnw: ['maven', 'red'], - 'tsconfig.json': ['tsconfig', 'blue'], - 'swagger.json': ['json', 'green'], - 'swagger.yml': ['json', 'green'], - 'swagger.yaml': ['json', 'green'], - 'mime.types': ['config', 'grey-light'], - Jenkinsfile: ['jenkins', 'red'], - 'babel.config.js': ['babel', 'yellow'], - 'babel.config.json': ['babel', 'yellow'], - 'babel.config.cjs': ['babel', 'yellow'], - BUILD: ['bazel', 'green'], - 'BUILD.bazel': ['bazel', 'green'], - WORKSPACE: ['bazel', 'green'], - 'WORKSPACE.bazel': ['bazel', 'green'], - 'bower.json': ['bower', 'orange'], - 'Bower.json': ['bower', 'orange'], - 'firebase.json': ['firebase', 'orange'], - geckodriver: ['firefox', 'orange'], - 'Gruntfile.js': ['grunt', 'orange'], - 'gruntfile.babel.js': ['grunt', 'orange'], - 'Gruntfile.babel.js': ['grunt', 'orange'], - 'gruntfile.js': ['grunt', 'orange'], - 'Gruntfile.coffee': ['grunt', 'orange'], - 'gruntfile.coffee': ['grunt', 'orange'], - 'ionic.config.json': ['ionic', 'blue'], - 'Ionic.config.json': ['ionic', 'blue'], - 'ionic.project': ['ionic', 'blue'], - 'Ionic.project': ['ionic', 'blue'], - 'platformio.ini': ['platformio', 'orange'], - 'rollup.config.js': ['rollup', 'red'], - 'sass-lint.yml': ['sass', 'pink'], - 'stylelint.config.js': ['stylelint', 'white'], - 'stylelint.config.cjs': ['stylelint', 'white'], - 'yarn.clean': ['yarn', 'blue'], - 'yarn.lock': ['yarn', 'blue'], - 'webpack.config.js': ['webpack', 'blue'], - 'webpack.config.cjs': ['webpack', 'blue'], - 'webpack.config.ts': ['webpack', 'blue'], - 'webpack.config.build.js': ['webpack', 'blue'], - 'webpack.config.build.cjs': ['webpack', 'blue'], - 'webpack.config.build.ts': ['webpack', 'blue'], - 'webpack.common.js': ['webpack', 'blue'], - 'webpack.common.cjs': ['webpack', 'blue'], - 'webpack.common.ts': ['webpack', 'blue'], - 'webpack.dev.js': ['webpack', 'blue'], - 'webpack.dev.cjs': ['webpack', 'blue'], - 'webpack.dev.ts': ['webpack', 'blue'], - 'webpack.prod.js': ['webpack', 'blue'], - 'webpack.prod.cjs': ['webpack', 'blue'], - 'webpack.prod.ts': ['webpack', 'blue'], - 'npm-debug.log': ['npm_ignored', 'ignore'], - }, - extensions: { - '.astro': ['astro', 'red'], - '.bsl': ['bsl', 'red'], - '.mdo': ['mdo', 'red'], - '.cls': ['salesforce', 'blue'], - '.apex': ['salesforce', 'blue'], - '.asm': ['asm', 'red'], - '.s': ['asm', 'red'], - '.bicep': ['bicep', 'blue'], - '.bzl': ['bazel', 'green'], - '.bazel': ['bazel', 'green'], - '.BUILD': ['bazel', 'green'], - '.WORKSPACE': ['bazel', 'green'], - '.bazelignore': ['bazel', 'green'], - '.bazelversion': ['bazel', 'green'], - '.c': ['c', 'blue'], - '.h': ['c', 'purple'], - '.m': ['c', 'yellow'], - '.cs': ['c-sharp', 'blue'], - '.cshtml': ['html', 'blue'], - '.aspx': ['html', 'blue'], - '.ascx': ['html', 'green'], - '.asax': ['html', 'yellow'], - '.master': ['html', 'yellow'], - '.cc': ['cpp', 'blue'], - '.cpp': ['cpp', 'blue'], - '.cxx': ['cpp', 'blue'], - '.c++': ['cpp', 'blue'], - '.hh': ['cpp', 'purple'], - '.hpp': ['cpp', 'purple'], - '.hxx': ['cpp', 'purple'], - '.h++': ['cpp', 'purple'], - '.mm': ['cpp', 'yellow'], - '.clj': ['clojure', 'green'], - '.cljs': ['clojure', 'green'], - '.cljc': ['clojure', 'green'], - '.edn': ['clojure', 'blue'], - '.cfc': ['coldfusion', 'blue'], - '.cfm': ['coldfusion', 'blue'], - '.coffee': ['coffee', 'yellow'], - '.litcoffee': ['coffee', 'yellow'], - '.config': ['config', 'grey-light'], - '.cfg': ['config', 'grey-light'], - '.conf': ['config', 'grey-light'], - '.cr': ['crystal', 'white'], - '.ecr': ['crystal_embedded', 'white'], - '.slang': ['crystal_embedded', 'white'], - '.cson': ['json', 'yellow'], - '.css': ['css', 'blue'], - '.css.map': ['css', 'blue'], - '.sss': ['css', 'blue'], - '.csv': ['csv', 'green'], - '.xls': ['xls', 'green'], - '.xlsx': ['xls', 'green'], - '.cu': ['cu', 'green'], - '.cuh': ['cu', 'purple'], - '.hu': ['cu', 'purple'], - '.cake': ['cake', 'red'], - '.ctp': ['cake_php', 'red'], - '.d': ['d', 'red'], - '.doc': ['word', 'blue'], - '.docx': ['word', 'blue'], - '.ejs': ['ejs', 'yellow'], - '.ex': ['elixir', 'purple'], - '.exs': ['elixir_script', 'purple'], - '.elm': ['elm', 'blue'], - '.ico': ['favicon', 'yellow'], - '.fs': ['f-sharp', 'blue'], - '.fsx': ['f-sharp', 'blue'], - '.gitignore': ['git', 'ignore'], - '.gitconfig': ['git', 'ignore'], - '.gitkeep': ['git', 'ignore'], - '.gitattributes': ['git', 'ignore'], - '.gitmodules': ['git', 'ignore'], - '.go': ['go2', 'blue'], - '.slide': ['go', 'blue'], - '.article': ['go', 'blue'], - '.gd': ['godot', 'blue'], - '.godot': ['godot', 'red'], - '.tres': ['godot', 'yellow'], - '.tscn': ['godot', 'purple'], - '.gradle': ['gradle', 'blue'], - '.groovy': ['grails', 'green'], - '.gsp': ['grails', 'green'], - '.gql': ['graphql', 'pink'], - '.graphql': ['graphql', 'pink'], - '.graphqls': ['graphql', 'pink'], - '.hack': ['hacklang', 'orange'], - '.haml': ['haml', 'red'], - '.handlebars': ['mustache', 'orange'], - '.hbs': ['mustache', 'orange'], - '.hjs': ['mustache', 'orange'], - '.hs': ['haskell', 'purple'], - '.lhs': ['haskell', 'purple'], - '.hx': ['haxe', 'orange'], - '.hxs': ['haxe', 'yellow'], - '.hxp': ['haxe', 'blue'], - '.hxml': ['haxe', 'purple'], - '.html': ['html', 'orange'], - '.jade': ['jade', 'red'], - '.java': ['java', 'red'], - '.class': ['java', 'blue'], - '.classpath': ['java', 'red'], - '.properties': ['java', 'red'], - '.js': ['javascript', 'yellow'], - '.js.map': ['javascript', 'yellow'], - '.spec.js': ['javascript', 'orange'], - '.test.js': ['javascript', 'orange'], - '.es': ['javascript', 'yellow'], - '.es5': ['javascript', 'yellow'], - '.es6': ['javascript', 'yellow'], - '.es7': ['javascript', 'yellow'], - '.cjs': ['javascript', 'yellow'], - '.mjs': ['javascript', 'yellow'], - '.jinja': ['jinja', 'red'], - '.jinja2': ['jinja', 'red'], - '.json': ['json', 'yellow'], - '.jl': ['julia', 'purple'], - '.kt': ['kotlin', 'orange'], - '.kts': ['kotlin', 'orange'], - '.dart': ['dart', 'blue'], - '.less': ['less', 'blue'], - '.liquid': ['liquid', 'green'], - '.ls': ['livescript', 'blue'], - '.lua': ['lua', 'blue'], - '.markdown': ['markdown', 'blue'], - '.md': ['markdown', 'blue'], - '.mdx': ['markdown', 'blue'], - '.argdown': ['argdown', 'blue'], - '.ad': ['argdown', 'blue'], - '.mustache': ['mustache', 'orange'], - '.stache': ['mustache', 'orange'], - '.nim': ['nim', 'yellow'], - '.nims': ['nim', 'yellow'], - '.github-issues': ['github', 'white'], - '.ipynb': ['notebook', 'blue'], - '.njk': ['nunjucks', 'green'], - '.nunjucks': ['nunjucks', 'green'], - '.nunjs': ['nunjucks', 'green'], - '.nunj': ['nunjucks', 'green'], - '.njs': ['nunjucks', 'green'], - '.nj': ['nunjucks', 'green'], - '.npm-debug.log': ['npm', 'ignore'], - '.npmignore': ['npm', 'red'], - '.npmrc': ['npm', 'red'], - '.ml': ['ocaml', 'orange'], - '.mli': ['ocaml', 'orange'], - '.cmx': ['ocaml', 'orange'], - '.cmxa': ['ocaml', 'orange'], - '.odata': ['odata', 'orange'], - '.pl': ['perl', 'blue'], - '.php': ['php', 'purple'], - '.php.inc': ['php', 'purple'], - '.pipeline': ['pipeline', 'orange'], - '.pddl': ['pddl', 'purple'], - '.plan': ['plan', 'green'], - '.happenings': ['happenings', 'blue'], - '.ps1': ['powershell', 'blue'], - '.psd1': ['powershell', 'blue'], - '.psm1': ['powershell', 'blue'], - '.prisma': ['prisma', 'blue'], - '.pug': ['pug', 'red'], - '.pp': ['puppet', 'yellow'], - '.epp': ['puppet', 'yellow'], - '.purs': ['purescript', 'white'], - '.py': ['python', 'blue'], - '.jsx': ['react', 'blue'], - '.spec.jsx': ['react', 'orange'], - '.test.jsx': ['react', 'orange'], - '.cjsx': ['react', 'blue'], - '.spec.tsx': ['react', 'orange'], - '.test.tsx': ['react', 'orange'], - '.re': ['reasonml', 'red'], - '.res': ['rescript', 'red'], - '.resi': ['rescript', 'pink'], - '.R': ['R', 'blue'], - '.rmd': ['R', 'blue'], - '.rb': ['ruby', 'red'], - '.erb': ['html_erb', 'red'], - '.erb.html': ['html_erb', 'red'], - '.html.erb': ['html_erb', 'red'], - '.rs': ['rust', 'grey-light'], - '.sass': ['sass', 'pink'], - '.scss': ['sass', 'pink'], - '.springBeans': ['spring', 'green'], - '.slim': ['slim', 'orange'], - '.smarty.tpl': ['smarty', 'yellow'], - '.tpl': ['smarty', 'yellow'], - '.sbt': ['sbt', 'blue'], - '.scala': ['scala', 'red'], - '.sol': ['ethereum', 'blue'], - '.styl': ['stylus', 'green'], - '.svelte': ['svelte', 'red'], - '.swift': ['swift', 'orange'], - '.sql': ['db', 'pink'], - '.soql': ['db', 'blue'], - '.tf': ['terraform', 'purple'], - '.tf.json': ['terraform', 'purple'], - '.tfvars': ['terraform', 'purple'], - '.tfvars.json': ['terraform', 'purple'], - '.tex': ['tex', 'blue'], - '.sty': ['tex', 'yellow'], - '.dtx': ['tex', 'orange'], - '.ins': ['tex', 'white'], - '.txt': ['default', 'white'], - '.toml': ['config', 'grey-light'], - '.twig': ['twig', 'green'], - '.ts': ['typescript', 'blue'], - '.tsx': ['typescript', 'blue'], - '.spec.ts': ['typescript', 'orange'], - '.test.ts': ['typescript', 'orange'], - '.vala': ['vala', 'grey-light'], - '.vapi': ['vala', 'grey-light'], - '.component': ['html', 'orange'], - '.vue': ['vue', 'green'], - '.wasm': ['wasm', 'purple'], - '.wat': ['wat', 'purple'], - '.xml': ['xml', 'orange'], - '.yml': ['yml', 'purple'], - '.yaml': ['yml', 'purple'], - '.pro': ['prolog', 'orange'], - '.zig': ['zig', 'orange'], - '.jar': ['zip', 'red'], - '.zip': ['zip', 'grey-light'], - '.wgt': ['wgt', 'blue'], - '.ai': ['illustrator', 'yellow'], - '.psd': ['photoshop', 'blue'], - '.pdf': ['pdf', 'red'], - '.eot': ['font', 'red'], - '.ttf': ['font', 'red'], - '.woff': ['font', 'red'], - '.woff2': ['font', 'red'], - '.avif': ['image', 'purple'], - '.gif': ['image', 'purple'], - '.jpg': ['image', 'purple'], - '.jpeg': ['image', 'purple'], - '.png': ['image', 'purple'], - '.pxm': ['image', 'purple'], - '.svg': ['svg', 'purple'], - '.svgx': ['image', 'purple'], - '.tiff': ['image', 'purple'], - '.webp': ['image', 'purple'], - '.sublime-project': ['sublime', 'orange'], - '.sublime-workspace': ['sublime', 'orange'], - '.code-search': ['code-search', 'purple'], - '.sh': ['shell', 'green'], - '.zsh': ['shell', 'green'], - '.fish': ['shell', 'green'], - '.zshrc': ['shell', 'green'], - '.bashrc': ['shell', 'green'], - '.mov': ['video', 'pink'], - '.ogv': ['video', 'pink'], - '.webm': ['video', 'pink'], - '.avi': ['video', 'pink'], - '.mpg': ['video', 'pink'], - '.mp4': ['video', 'pink'], - '.mp3': ['audio', 'purple'], - '.ogg': ['audio', 'purple'], - '.wav': ['audio', 'purple'], - '.flac': ['audio', 'purple'], - '.3ds': ['svg', 'blue'], - '.3dm': ['svg', 'blue'], - '.stl': ['svg', 'blue'], - '.obj': ['svg', 'blue'], - '.dae': ['svg', 'blue'], - '.bat': ['windows', 'blue'], - '.cmd': ['windows', 'blue'], - '.babelrc': ['babel', 'yellow'], - '.babelrc.js': ['babel', 'yellow'], - '.babelrc.cjs': ['babel', 'yellow'], - '.bazelrc': ['bazel', 'grey'], - '.bowerrc': ['bower', 'orange'], - '.codeclimate.yml': ['code-climate', 'green'], - '.eslintrc': ['eslint', 'purple'], - '.eslintrc.js': ['eslint', 'purple'], - '.eslintrc.cjs': ['eslint', 'purple'], - '.eslintrc.yaml': ['eslint', 'purple'], - '.eslintrc.yml': ['eslint', 'purple'], - '.eslintrc.json': ['eslint', 'purple'], - '.eslintignore': ['eslint', 'grey'], - '.firebaserc': ['firebase', 'orange'], - '.gitlab-ci.yml': ['gitlab', 'orange'], - '.jshintrc': ['javascript', 'blue'], - '.jscsrc': ['javascript', 'blue'], - '.stylelintrc': ['stylelint', 'white'], - '.stylelintrc.json': ['stylelint', 'white'], - '.stylelintrc.yaml': ['stylelint', 'white'], - '.stylelintrc.yml': ['stylelint', 'white'], - '.stylelintrc.js': ['stylelint', 'white'], - '.stylelintignore': ['stylelint', 'grey'], - '.direnv': ['config', 'grey-light'], - '.env': ['config', 'grey-light'], - '.static': ['config', 'grey-light'], - '.editorconfig': ['config', 'grey-light'], - '.slugignore': ['config', 'grey-light'], - '.tmp': ['clock', 'grey-light'], - '.htaccess': ['config', 'grey-light'], - '.key': ['lock', 'green'], - '.cert': ['lock', 'green'], - '.cer': ['lock', 'green'], - '.crt': ['lock', 'green'], - '.pem': ['lock', 'green'], - '.DS_Store': ['ignored', 'ignore'], - }, - partials: [ - ['TODO.md', ['todo', 'blue']], - ['TODO.txt', ['todo', 'blue']], - ['TODO', ['todo', 'blue']], - ['Procfile', ['heroku', 'purple']], - ['cmakelists.txt', ['makefile', 'blue']], - ['CMakeLists.txt', ['makefile', 'blue']], - ['CMAKELISTS.txt', ['makefile', 'blue']], - ['CMAKELISTS.TXT', ['makefile', 'blue']], - ['omakefile', ['makefile', 'grey-light']], - ['OMakefile', ['makefile', 'grey-light']], - ['OMAKEFILE', ['makefile', 'grey-light']], - ['qmakefile', ['makefile', 'purple']], - ['QMakefile', ['makefile', 'purple']], - ['QMAKEFILE', ['makefile', 'purple']], - ['makefile', ['makefile', 'orange']], - ['Makefile', ['makefile', 'orange']], - ['MAKEFILE', ['makefile', 'orange']], - ['CONTRIBUTING.md', ['license', 'red']], - ['CONTRIBUTING.txt', ['license', 'red']], - ['CONTRIBUTING', ['license', 'red']], - ['COMPILING.md', ['license', 'orange']], - ['COMPILING.txt', ['license', 'orange']], - ['COMPILING', ['license', 'orange']], - ['COPYING.md', ['license', 'yellow']], - ['COPYING.txt', ['license', 'yellow']], - ['COPYING', ['license', 'yellow']], - ['LICENCE.md', ['license', 'yellow']], - ['LICENSE.md', ['license', 'yellow']], - ['LICENCE.txt', ['license', 'yellow']], - ['LICENSE.txt', ['license', 'yellow']], - ['LICENCE', ['license', 'yellow']], - ['LICENSE', ['license', 'yellow']], - ['gulpfile.js', ['gulp', 'red']], - ['gulpfile', ['gulp', 'red']], - ['Gulpfile', ['gulp', 'red']], - ['GULPFILE', ['gulp', 'red']], - ['docker-compose.override.yaml', ['docker', 'pink']], - ['docker-compose.override.yml', ['docker', 'pink']], - ['docker-compose.yaml', ['docker', 'pink']], - ['docker-compose.yml', ['docker', 'pink']], - ['docker-healthcheck', ['docker', 'green']], - ['.dockerignore', ['docker', 'grey']], - ['DOCKERFILE', ['docker', 'blue']], - ['Dockerfile', ['docker', 'blue']], - ['dockerfile', ['docker', 'blue']], - ['gemfile', ['ruby', 'red']], - ['Gemfile', ['ruby', 'red']], - ['mix', ['hex', 'red']], - ], - default: ['default', 'white'], -}; - -const rawIcons = { - astro: - '', - bsl: '', - mdo: '', - salesforce: - '', - asm: '', - bicep: - '', - bazel: - '', - c: '', - 'c-sharp': - '', - html: '', - cpp: '', - clojure: - '', - coldfusion: - '', - coffee: - '', - config: - '', - crystal: - '', - crystal_embedded: - '', - json: '', - css: '', - csv: '', - xls: '', - cu: '', - cake: '', - cake_php: - '', - d: '', - word: '', - ejs: '', - elixir: - '', - elixir_script: - '', - hex: '', - elm: '', - favicon: - '', - 'f-sharp': - '', - git: '', - go2: '', - go: '', - godot: - '', - gradle: - '', - grails: - '', - graphql: - '', - hacklang: - '', - haml: '', - mustache: - '', - haskell: - '', - haxe: '', - jade: '', - java: '', - javascript: - '', - jinja: - '', - julia: - '', - karma: - '', - kotlin: - '', - dart: '', - less: '', - liquid: - '', - livescript: - '', - lua: '', - markdown: - '', - argdown: - '', - info: '', - clock: - '', - maven: - '', - nim: '', - github: - '', - notebook: - '', - nunjucks: - '', - npm: '', - ocaml: - '', - odata: - '', - perl: '', - php: '', - pipeline: - '', - pddl: '', - plan: '', - happenings: - '', - powershell: - '', - prisma: - '', - pug: '', - puppet: - '', - purescript: - '', - python: - '', - react: - '', - reasonml: - '', - rescript: - '', - R: '', - ruby: '', - html_erb: - '', - rust: '', - sass: '', - spring: - '', - slim: '', - smarty: - '', - sbt: '', - scala: - '', - ethereum: - '', - stylus: - '', - svelte: - '', - swift: - '', - db: '', - terraform: - '', - tex: '', - default: - '', - twig: '', - typescript: - '', - tsconfig: - '', - vala: '', - vue: '', - wasm: '', - wat: '', - xml: '', - yml: '', - prolog: - '', - zig: '', - zip: '', - wgt: '', - illustrator: - '', - photoshop: - '', - pdf: '', - font: '', - image: - '', - svg: '', - sublime: - '', - 'code-search': - '', - shell: - '', - video: - '', - audio: - '', - windows: - '', - jenkins: - '', - babel: - '', - bower: - '', - docker: - '', - 'code-climate': - '', - eslint: - '', - firebase: - '', - firefox: - '', - gitlab: - '', - grunt: - '', - gulp: '', - ionic: - '', - platformio: - '', - rollup: - '', - stylelint: - '', - yarn: '', - webpack: - '', - lock: '', - license: - '', - makefile: - '', - heroku: - '', - todo: '', - npm_ignored: - '', - ignored: - '', -}; - -type IconDetails = [string, string]; - -interface SetiTheme { - blue: string; - grey: string; - 'grey-light': string; - green: string; - orange: string; - pink: string; - purple: string; - red: string; - white: string; - yellow: string; - ignore: string; -} - -type Color = keyof SetiTheme; - -interface Icon { - svg: string; - color: Color; -} - -const definitions = rawDefinitions as unknown as { - default: IconDetails; - extensions: { [extension: string]: IconDetails }; - files: { [file: string]: IconDetails }; - partials: [string, IconDetails][]; -}; -const icons = rawIcons as unknown as { - [icon: string]: string; -}; - -const getDetails = (fileName: string): IconDetails => { - if (definitions.files[fileName]) { - return definitions.files[fileName]; - } - let extension = fileName.slice(fileName.indexOf('.')); - while (extension !== '') { - if (definitions.extensions[extension]) { - return definitions.extensions[extension]; - } - // look for next "." - extension = extension.slice(1); - extension = extension.slice(extension.indexOf('.')); - } - for (const partial of definitions.partials) { - if (fileName.indexOf(partial[0]) > -1) { - return partial[1]; - } - } - return definitions.default; -}; - -export const getIcon = (fileName: string): Icon => { - const [icon, color] = getDetails(fileName); - return { svg: icons[icon], color } as Icon; -}; diff --git a/src/components/internal/rehype-file-tree.ts b/src/components/internal/rehype-file-tree.ts deleted file mode 100644 index b61dde3ca..000000000 --- a/src/components/internal/rehype-file-tree.ts +++ /dev/null @@ -1,116 +0,0 @@ -import { fromHtml } from 'hast-util-from-html'; -import { toString } from 'hast-util-to-string'; -import { h } from 'hastscript'; -import type { Element, HChild } from 'hastscript/lib/core'; -import { rehype } from 'rehype'; -import { CONTINUE, SKIP, visit } from 'unist-util-visit'; -import { getIcon } from './file-tree-icons'; - -/** Make a text node with the pass string as its contents. */ -const Text = (value = ''): { type: 'text'; value: string } => ({ - type: 'text', - value, -}); - -/** Convert an HTML string containing an SVG into a HAST element node. */ -const makeSVGIcon = (svgString: string) => { - const root = fromHtml(svgString, { fragment: true }); - const svg = root.children[0] as Element; - svg.properties = { - ...svg.properties, - width: 16, - height: 16, - class: 'tree-icon', - 'aria-hidden': 'true', - }; - return svg; -}; - -const FileIcon = (filename: string) => { - const { svg } = getIcon(filename); - return makeSVGIcon(svg); -}; - -const FolderIcon = makeSVGIcon( - '' -); - -export const fileTreeProcessor = rehype().use(() => (tree, file) => { - const { directoryLabel } = file.data as { directoryLabel: string }; - visit(tree, 'element', (node) => { - // Strip nodes that only contain newlines - node.children = node.children.filter( - (child) => child.type === 'comment' || child.type !== 'text' || !/^\n+$/.test(child.value) - ); - - if (node.tagName !== 'li') return CONTINUE; - - // Ensure node has properties so we can assign classes later. - if (!node.properties) node.properties = {}; - - const [firstChild, ...otherChildren] = node.children; - - const comment: HChild[] = []; - if (firstChild?.type === 'text') { - const [filename, ...fragments] = firstChild.value.split(' '); - firstChild.value = filename || ''; - comment.push(fragments.join(' ')); - } - const subTreeIndex = otherChildren.findIndex( - (child) => child.type === 'element' && child.tagName === 'ul' - ); - const commentNodes = - subTreeIndex > -1 ? otherChildren.slice(0, subTreeIndex) : [...otherChildren]; - otherChildren.splice(0, subTreeIndex > -1 ? subTreeIndex : otherChildren.length); - comment.push(...commentNodes); - - const firstChildTextContent = toString(firstChild); - - // Decide a node is a directory if it ends in a `/` or contains another list. - const isDirectory = - /\/\s*$/.test(firstChildTextContent) || - otherChildren.some((child) => child.type === 'element' && child.tagName === 'ul'); - const isPlaceholder = /^\s*(\.{3}|…)\s*$/.test(firstChildTextContent); - const isHighlighted = firstChild.type === 'element' && firstChild.tagName === 'strong'; - const hasContents = otherChildren.length > 0; - - const fileExtension = isDirectory ? 'dir' : firstChildTextContent.trim().split('.').pop() || ''; - - const icon = h('span', isDirectory ? FolderIcon : FileIcon(firstChildTextContent)); - if (!icon.properties) icon.properties = {}; - if (isDirectory) { - icon.children.unshift(h('span', { class: 'sr-only' }, directoryLabel)); - } - - node.properties.class = isDirectory ? 'directory' : 'file'; - if (isPlaceholder) node.properties.class += ' empty'; - node.properties['data-filetype'] = fileExtension; - - const treeEntry = h( - 'span', - { class: 'tree-entry' }, - h('span', { class: isHighlighted ? 'highlight' : '' }, [ - isPlaceholder ? null : icon, - firstChild, - ]), - Text(comment.length > 0 ? ' ' : ''), - comment.length > 0 ? h('span', { class: 'comment' }, ...comment) : Text() - ); - - if (isDirectory) { - node.children = [ - h('details', { open: hasContents }, [ - h('summary', treeEntry), - ...(hasContents ? otherChildren : [h('ul', h('li', '…'))]), - ]), - ]; - // Continue down the tree. - return CONTINUE; - } - - node.children = [treeEntry, ...otherChildren]; - - // Files can’t contain further files or directories, so skip iterating children. - return SKIP; - }); -}); diff --git a/src/components/starlight/MarkdownContent.astro b/src/components/starlight/MarkdownContent.astro deleted file mode 100644 index 8f3b7a4fa..000000000 --- a/src/components/starlight/MarkdownContent.astro +++ /dev/null @@ -1,145 +0,0 @@ ---- -import type { Props } from '@astrojs/starlight/props'; -import '@astrojs/starlight/style/markdown.css'; -// import BackendGuidesNav from '../BackendGuidesNav.astro'; -import CMSGuidesNav from '../CMSGuidesNav.astro'; -import AnalyticsGuidesNav from '../AnalyticsGuidesNav.astro'; -import ThemesGuidesNav from '../ThemesGuidesNav.astro'; -import DeployGuidesNav from '../DeployGuidesNav.astro'; -import IntegrationsNav from '../IntegrationsNav.astro'; -// import MigrationGuidesNav from '../MigrationGuidesNav.astro'; -import { getPageCategory } from '~/util/getPageCategory'; -import { useTranslations } from '~/i18n/util'; - -const t = useTranslations(Astro); - -const { entry } = Astro.props; ---- - -
    - - - - { - entry.data.type === 'cms' && ( - <> -

    {t('cms.navTitle')}

    - - - ) - } - { - entry.data.type === 'analytics' && ( - <> -

    {t('analytics.navTitle')}

    - - - ) - } - { - entry.data.type === 'themes' && ( - <> -

    {t('themes.navTitle')}

    - - - ) - } - { - entry.data.type === 'deploy' && ( - <> -

    {t('deploy.altSectionTitle')}

    - - - ) - } - { - entry.data.type === 'integration' && ( - <> -

    {t('integrations.navTitle')}

    - - - ) - } - - -
    - - diff --git a/src/content.ts b/src/content.ts deleted file mode 100644 index 80f6f2871..000000000 --- a/src/content.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { getCollection } from 'astro:content'; -import { isEnglishEntry, isKoreanEntry, isRecipeEntry, isTutorialEntry, isCmsEntry, isAnalyticsEntry, isDeployEntry, isThemeEntry, isIntegrationEntry } from './content/config'; - -export const allPages = await getCollection('docs', (entry) => { - if (import.meta.env.PUBLIC_TWO_LANG) { - // Build for two languages only to speed up Astro's smoke tests - return isEnglishEntry(entry) || isKoreanEntry(entry); - } else { - return true; - } -}); -export const tutorialPages = allPages.filter(isTutorialEntry); -export const recipePages = allPages.filter(isRecipeEntry); -export const englishPages = allPages.filter(isEnglishEntry); -export const cmsPages = allPages.filter(isCmsEntry); -export const analyticsPages = allPages.filter(isAnalyticsEntry); -export const deployPages = allPages.filter(isDeployEntry); -export const themesPages = allPages.filter(isThemeEntry); -export const integrationPages = allPages.filter(isIntegrationEntry); diff --git a/src/content/config.ts b/src/content/config.ts deleted file mode 100644 index a23309b74..000000000 --- a/src/content/config.ts +++ /dev/null @@ -1,154 +0,0 @@ -import { docsSchema } from '@astrojs/starlight/schema'; -import { defineCollection, z, type CollectionEntry } from 'astro:content'; - -export const baseSchema = z.object({ - type: z.literal('base').optional().default('base'), - i18nReady: z.boolean().default(false), - githubURL: z.string().url().optional(), - hasREADME: z.boolean().optional(), - // Extends Starlight’s default `hero` schema with custom fields. - /* - hero: z - .object({ - facepile: z.object({ - tagline: z.string(), - linkText: z.string(), - link: z.string(), - }), - }) - .optional(), - */ -}); - -export const deploySchema = baseSchema.extend({ - type: z.literal('deploy'), - stub: z.boolean().default(false), - service: z.string(), -}); - -export const backendSchema = baseSchema.extend({ - type: z.literal('backend'), - stub: z.boolean().default(false), - service: z.string(), -}); - -export const cmsSchema = baseSchema.extend({ - type: z.literal('cms'), - stub: z.boolean().default(false), - service: z.string(), -}); - -export const analyticsSchema = baseSchema.extend({ - type: z.literal('analytics'), - stub: z.boolean().default(false), - service: z.string(), -}); - -export const themeSchema = baseSchema.extend({ - type: z.literal('themes'), - stub: z.boolean().default(false), - service: z.string(), -}); - -export const integrationSchema = baseSchema.extend({ - type: z.literal('integration'), - title: z - .string() - .refine( - (title) => title.startsWith('@thulite/'), - '"title" must start with "@thulite/" for integration docs.' - ), - stub: z.boolean().default(false), - service: z.string(), - category: z.enum(['renderer', 'theme', 'other']), -}); - -export const migrationSchema = baseSchema.extend({ - type: z.literal('migration'), - framework: z.string(), - stub: z.boolean().default(false), -}); - -export const tutorialSchema = baseSchema.extend({ - type: z.literal('tutorial'), - unitTitle: z.string().optional(), -}); - -export const recipeSchema = baseSchema.extend({ - type: z.literal('recipe'), - description: z.string(), -}); - -export const docsCollectionSchema = z.union([ - baseSchema, - backendSchema, - cmsSchema, - analyticsSchema, - themeSchema, - integrationSchema, - migrationSchema, - tutorialSchema, - deploySchema, - recipeSchema, -]); - -export type DocsEntryData = z.infer; - -export type DocsEntryType = DocsEntryData['type']; - -export type DocsEntry = CollectionEntry<'docs'> & { - data: Extract; -}; - -export function createIsDocsEntry(type: T) { - return (entry: CollectionEntry<'docs'>): entry is DocsEntry => entry.data.type === type; -} - -export type DeployEntry = DocsEntry<'deploy'>; - -export type BackendEntry = DocsEntry<'backend'>; - -export type CmsEntry = DocsEntry<'cms'>; - -export type AnalyticsEntry = DocsEntry<'analytics'>; - -export type ThemeEntry = DocsEntry<'themes'>; - -export type IntegrationEntry = DocsEntry<'integration'>; - -export type MigrationEntry = DocsEntry<'migration'>; - -export type TutorialEntry = DocsEntry<'tutorial'>; - -export type RecipeEntry = DocsEntry<'recipe'>; - -export type IntegrationCategory = z.infer['category']; - -export const isBackendEntry = createIsDocsEntry('backend'); - -export const isCmsEntry = createIsDocsEntry('cms'); - -export const isAnalyticsEntry = createIsDocsEntry('analytics'); - -export const isThemeEntry = createIsDocsEntry('themes'); - -export const isDeployEntry = createIsDocsEntry('deploy'); - -export const isIntegrationEntry = createIsDocsEntry('integration'); - -export const isTutorialEntry = createIsDocsEntry('tutorial'); - -export const isMigrationEntry = createIsDocsEntry('migration'); - -export const isRecipeEntry = createIsDocsEntry('recipe'); - -export function createIsLangEntry(lang: string) { - return (entry: CollectionEntry<'docs'>): boolean => entry.slug.startsWith(lang + '/'); -} - -export const isEnglishEntry = createIsLangEntry('en'); -export const isKoreanEntry = createIsLangEntry('ko'); - -export const collections = { - docs: defineCollection({ schema: docsSchema({ extend: docsCollectionSchema }) }), -}; diff --git a/src/content/docs/404.md b/src/content/docs/404.md deleted file mode 100644 index 17ab03cce..000000000 --- a/src/content/docs/404.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Not found -template: splash -editUrl: false -hero: - title: '404' - tagline: Houston, we have a problem. We couldn’t find that page.
    Check the URL or try using the search bar. - actions: - - text: Go home - icon: right-arrow - link: / - variant: primary ---- \ No newline at end of file diff --git a/src/content/docs/basics/commands.mdx b/src/content/docs/basics/commands.mdx deleted file mode 100644 index 510189c5b..000000000 --- a/src/content/docs/basics/commands.mdx +++ /dev/null @@ -1,212 +0,0 @@ ---- -title: Commands -description: A reference page in my new Starlight docs site. -sidebar: - order: 5 ---- -import { Tabs, TabItem } from '@astrojs/starlight/components'; - -You can use the `scripts` in `package.json` to create new content and develop, format, build, and preview your project from a terminal window. - -## `package.json` scripts - -The following scripts for the most common commands (`create`, `dev`, `format`, `build`, and `preview`) are added for you automatically when you create a project using [the `create thulite` wizard](/install/auto/#1-run-the-setup-wizard). - -When you follow the instructions to [install Thulite manually](/install/manual/#2-install-thulite-prettier-and-vite), you are instructed to add these scripts yourself. You can also add more scripts to this list manually for any commands you use frequently. - -```json title="package.json" -{ - "scripts": { - "create": "hugo new", - "dev": "hugo server --disableFastRender --noHTTPCache", - "format": "prettier **/** -w -c", - "build": "hugo --minify --gc", - "preview": "vite preview --outDir public" - } -} -``` - -You will often use these commands, or the scripts that run them, without any flags. Add flags to the command when you want to customize the command’s behavior. For example, you may wish to start the development server on a different port, or build your site with verbose logs for debugging. - - - -```bash -# Run the dev server on port 3000 using the `dev` script in `package.json` -npm run dev -- --port 3000 - -# Build your site with verbose logs using the `build` script in `package.json` -npm run build -- --verbose -``` - - -```bash -# run the dev server on port 3000 using the `dev` script in `package.json` -pnpm dev --port 3000 - -# build your site with verbose logs using the `build` script in `package.json` -pnpm build --verbose -``` - - -```bash -# run the dev server on port 3000 using the `dev` script in `package.json` -yarn dev --port 3000 - -# build your site with verbose logs using the `build` script in `package.json` -yarn build --verbose -``` - - - -:::note -The extra `--` before any flag is necessary for `npm` to pass your flags to the script. -::: - -:::note -You can find the available flags for a command on the command's linked script page below. -::: - -### `create` - -Run the following command in your terminal to [create new content](https://gohugo.io/commands/hugo_new/): - - - -```bash -# npm run create [path] [flags] -npm run create -``` - - -```bash -# pnpm run create [path] [flags] -pnpm run create -``` - - -```bash -# yarn run create [path] [flags] -yarn run create -``` - - - -For example, create an about page in the `content` directory of your project: - - - -```bash -npm run create about.md -``` - - -```bash -pnpm run create about.md -``` - - -```bash -yarn run create about.md -``` - - - -### `dev` - -Run the following command in your terminal to start the [Hugo development server](https://gohugo.io/commands/hugo_server/): - - - -```bash -# npm run dev [flags] -npm run dev -``` - - -```bash -# pnpm dev [flags] -pnpm dev -``` - - -```bash -# yarn dev [flags] -yarn dev -``` - - - -### `format` - -Run the following command in your terminal to run the [Prettier code formatter](https://prettier.io/docs/en/cli): - - - -```bash -# npm run format [flags] -npm run format -``` - - -```bash -# pnpm format [flags] -pnpm format -``` - - -```bash -# yarn format [flags] -yarn format -``` - - - -### `build` - -Run the following command in your terminal to [create a production build](https://gohugo.io/commands/hugo/): - - - -```bash -# npm run build [flags] -npm run build -``` - - -```bash -# pnpm build [flags] -pnpm build -``` - - -```bash -# yarn build [flags] -yarn build -``` - - - -### `preview` - -Run the following command in your terminal to [locally preview the production build](https://vitejs.dev/guide/cli.html#vite-preview): - - - -```bash -# npm run preview [flags] -npm run preview -``` - - -```bash -# pnpm preview [flags] -pnpm preview -``` - - -```bash -# yarn preview [flags] -yarn preview -``` - - diff --git a/src/content/docs/basics/configuration.mdx b/src/content/docs/basics/configuration.mdx deleted file mode 100644 index b35874dc7..000000000 --- a/src/content/docs/basics/configuration.mdx +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: Configuration -description: A reference page in my new Starlight docs site. -sidebar: - order: 4 ---- -import FileTree from '~/components/FileTree.astro'; -import { LinkCard, CardGrid } from '@astrojs/starlight/components'; - -Here's how a Thulite project configuration is organized, and the configuration files you will find in your new project. - -## Example Project Configuration Tree - -A common Thulite project configuration directory might look like this: - - - -- config - - _default - - hugo.toml - - markup.toml - - menus.toml - - module.toml - - params.toml - - next - - hugo.toml - - params.toml - - production - - hugo.toml - - params.toml -- babel.config.js -- postcss.config.js - - - -### `config/_default/hugo.toml` - -The `hugo.toml` file includes [Hugo configuration](https://gohugo.io/getting-started/configuration/) options for your Thulite project. Here you can specify taxonomies to use, build options, server options, and more. - -### `config/_default/markup.toml` - -The `markup.toml` file is where you [configure rendering](https://gohugo.io/getting-started/configuration-markup/) of markup to HTML. - -### `config/_default/menus.toml` - -The `menus.toml` file is where you [define menu entries](https://gohugo.io/content-management/menus/). - -### `config/_default/module.toml` - -The `module.toml` file specifies the [Hugo mounts](https://gohugo.io/hugo-modules/configuration/#module-configuration-mounts), logically linking `node_modules` directories to component folders (ex: `assets`, `layouts`) — making Thulite Integrations available in your Thulite project. - -### `config/_default/params.toml` - -The `params.toml` file is where you set [Thulite configuration](/reference/configuration/) options like e.g. options for themes and integrations. - -### `config/next/` - -Overrides for your next environment. - -### `config/production/` - -Overrides for your production environment. - -:::tip -Set `baseurl` in `hugo.toml` to the absolute URL (protocol, host, path, and trailing slash) of your published site (e.g., https://www.example.org/docs/). -::: - -### `babel.config.js` - -The `babel.config.js` file is where you configure [Babel](https://babeljs.io/). Thulite supports processing JavaScript files with Babel. - -### `postcss.config.js` - -The `postcss.config.js` file is where you configure [PostCSS](https://postcss.org/). Thulite uses PostCSS to add vendor prefixes to CSS rules using [Autoprefixer](https://github.com/postcss/autoprefixer) and to remove unused CSS from your project using [PurgeCSS](https://purgecss.com/). - -## Hugo documentation - -Thulite leverages Hugo's [configuration](https://gohugo.io/getting-started/configuration/). Here are some relevant topics: - - - - - - - diff --git a/src/content/docs/basics/layouts.mdx b/src/content/docs/basics/layouts.mdx deleted file mode 100644 index 05cbb8e57..000000000 --- a/src/content/docs/basics/layouts.mdx +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Layouts -description: A reference page in my new Starlight docs site. -sidebar: - order: 2 ---- -import { LinkCard, CardGrid } from '@astrojs/starlight/components'; - -__Layouts__ are files that live in the `layouts` directory of your Thulite project. They are used to provide a reusable UI structure, such as a page template. - -## Examples - -For example, the default Thulite [base template](https://gohugo.io/templates/base/#define-the-base-template) looks like this: - -```html title="baseof.html" - - - {{ partial "head/head.html" . }} - {{ partial "head/body-class.html" . }} - - {{ block "main" . }}{{ end }} - {{ if templates.Exists "partials/footer/script-footer.html" -}} - {{ partial "footer/script-footer.html" . }} - {{ else -}} - {{ partial "footer/script-footer-core.html" . }} - {{ end -}} - - -``` - -## Hugo documentation - -Thulite leverages Hugo's [templates](https://gohugo.io/templates/). Here are some relevant topics: - - - - - - - - - diff --git a/src/content/docs/basics/menus.mdx b/src/content/docs/basics/menus.mdx deleted file mode 100644 index c4f26d3c9..000000000 --- a/src/content/docs/basics/menus.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: Menus -description: A reference page in my new Starlight docs site. -sidebar: - order: 3 ---- -import { LinkCard, CardGrid } from '@astrojs/starlight/components'; - -Create __menus__ by defining entries, localizing each entry, and rendering the resulting data structure. - - -## Examples - -For example, to define entries for the main menu: - -```toml title="config/_default/menus.toml" -[[main]] - name = 'Home' - pageRef = '/' - weight = 10 - -[[main]] - name = 'Products' - pageRef = '/products' - weight = 20 - -[[main]] - name = 'Services' - pageRef = '/services' - weight = 30 - -``` - -## Hugo documentation - -Thulite leverages Hugo's [menus](https://gohugo.io/content-management/menus/). Here are some relevant topics: - - - - - - diff --git a/src/content/docs/basics/pages.mdx b/src/content/docs/basics/pages.mdx deleted file mode 100644 index 702cc3b3f..000000000 --- a/src/content/docs/basics/pages.mdx +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: Pages -description: A reference page in my new Starlight docs site. -sidebar: - order: 1 ---- -import { Tabs, TabItem } from '@astrojs/starlight/components'; -import { LinkCard, CardGrid } from '@astrojs/starlight/components'; - -__Pages__ are files that live in the `content` directory of your Thulite project. They are responsible for handling routing, data loading, and overall page layout for every page in your website. - -## Create new content - -You can create new content by running the [`create` command](/basics/commands/#create) in your terminal. - -### Examples - -For example, create an about page using a [leaf bundle](https://gohugo.io/content-management/page-bundles/#leaf-bundles): - - - -```bash -npm run create about/index.md -``` - - -```bash -pnpm run create about/index.md -``` - - -```bash -yarn run create about/index.md -``` - - - -Or, create a home page using a [branch bundle](https://gohugo.io/content-management/page-bundles/#branch-bundles): - - - -```bash -npm run create _index.md -``` - - -```bash -pnpm run create _index.md -``` - - -```bash -yarn run create _index.md -``` - - - -## Hugo documentation - -Thulite leverages Hugo's [content management](https://gohugo.io/content-management/). Here are some relevant topics: - - - - - - - \ No newline at end of file diff --git a/src/content/docs/concepts/dependencies.md b/src/content/docs/concepts/dependencies.md deleted file mode 100644 index 9808aa8b9..000000000 --- a/src/content/docs/concepts/dependencies.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: Dependencies -description: A guide in my new Starlight docs site. -sidebar: - order: 1 ---- - -Thulite helps you [build scalable and maintainable websites](/concepts/why-thulite/#solid-architecture) and __leverages npm to [explicitly declare and isolate dependencies](https://12factor.net/dependencies)__. - -## Explicit declaration and isolation - -The ["Dependencies"](https://12factor.net/dependencies) section of the Twelve-Factor App methodology emphasizes the importance of explicitly declaring and isolating dependencies in an application. This involves using a dependency declaration manifest and an isolation tool to ensure that no implicit dependencies from the system environment affect the app. This practice ensures consistency across different environments and simplifies setup for new developers. Additionally, twelve-factor apps avoid relying on the implicit existence of system tools, instead bundling necessary tools within the app itself to ensure compatibility and reliability. - -## JavaScript - -For a JavaScript project following the Twelve-Factor App methodology, dependencies should be explicitly declared in a `package.json` file. This file acts as the dependency declaration manifest, listing all necessary packages. Isolation is achieved by using a tool like [npm](https://www.npmjs.com/), which installs dependencies in a `node_modules` directory within the project. This ensures that the app does not rely on system-wide packages, maintaining consistency across different environments. Additionally, any required scripts or tools should be included as npm scripts to avoid system tool dependencies. - -### Thulite - -Thulite' [integrations](/guides/integrations/) and [themes](/guides/themes/) are npm packages explicitly declared in your project's `package.json` and installed in the `node_modules` directory of your project. Thulite uses Hugo's [module configuration](https://gohugo.io/hugo-modules/configuration/#module-configuration-mounts) to mount the Thulite dependencies' `node_modules` directories to one of Hugo's corresponding [component folders](https://gohugo.io/getting-started/directory-structure/#directories), making them available to Hugo for processing. - -### Pros - -- Centralizes all dependencies (JavaScript and other assets) in one place (`package.json`). -- Common for JavaScript developers, leveraging npm's ecosystem and tools. - - -### Cons - -- Not following the preferred, familiar Hugo way. - -## Hugo - -To follow the Twelve-Factor App methodology with Hugo, use [Hugo Modules](https://gohugo.io/hugo-modules/use-modules/) to manage dependencies. Here's how it works: - -1. __Declare Dependencies__: Use a `go.mod` file to specify the modules your Hugo project requires. -2. __Isolation__: Use Hugo's module system to isolate dependencies, ensuring the same versions are used in all environments. - -Additionally, Hugo provides the [`hugo mod npm pack`](https://gohugo.io/commands/hugo_mod_npm_pack/) command, which creates a composite `package.json` file from `package.hugo.json` files found in your project and its dependencies. This helps manage JavaScript dependencies consistently. - -### Pros - -- Following the preferred, familiar Hugo way. - -### Cons - -- Using Hugo Modules requires you to have [Go](https://go.dev/dl/) installed. -- Using npm next to Hugo Modules introduces _two_ sets of dependencies. -- Hugo's integrated JavaScript support is _experimental_. -- Hugo's integrated JavaScript support is _limited_. For example, the `scripts` section of a `package.json` is not supported. - -:::note[Still want to use Hugo Modules?] - Thats okay! Thulite works in combination with [Hugo Modules](https://gohugo.io/hugo-modules/) (but without it's npm support). -::: diff --git a/src/content/docs/concepts/why-thulite.md b/src/content/docs/concepts/why-thulite.md deleted file mode 100644 index 94b10bee5..000000000 --- a/src/content/docs/concepts/why-thulite.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Why Thulite? -description: A guide in my new Starlight docs site. -sidebar: - order: 0 ---- - -__Thulite__ is a web framework designed for __speed__, __security__, and __SEO__ — all powered by Hugo and npm. With Thulite, it’s super easy to build content-driven websites — like blogs, marketing, and e-commerce — that are production-ready out of the box. If you need a website that loads fast, is max secure, and has great SEO, then Thulite is for you. - -## Features - -__Thulite is an all-in-one web framework__. It includes everything you need to create a website, built-in. There is also a growing number of different [integrations](https://thulite.io/integrations/) and [themes](https://thulite.io/themes/) available to customize a project to your exact use case and needs. - -Some highlights include: - -- [Site generator](https://gohugo.io/): Leverage the speed and flexibility of Hugo. -- [Dependencies](/concepts/dependencies/): Explicitly declare and isolate dependencies with npm. -- [Customizable](/guides/integrations/): Tailwind, Images, and a growing number of integrations to choose from. -- [Themable](/guides/themes/): Themes for blogs, portfolios, documentation, landing pages, and more. - -## Design Principles - -Here are five core design principles to help explain why we built Thulite, the problems that it exists to solve, and why Thulite may be the best choice for your project or team. - -Thulite is... - -- [Solid architecture](#solid-architecture): Thulite helps you build scalable and maintainable websites. -- [Fast by default](#fast-by-default): It should be impossible to build a slow website with Thulite. -- [Maximum secure](#max-secure): Your website should keep up with the latest in web security standards. -- [Easy to use](#easy-to-use): You don't need to be an expert to build something with Thulite. -- [Developer-focused](#developer-focused): You should have the resources you need to be successful. - -### Solid architecture - -__Thulite leverages [The Twelve-Factor App](https://12factor.net/) methodology to help you build scalable and maintainable websites__. The Twelve-Factor App describes many well-tested architectural patterns and best practices for software-as-a-service (SaaS) applications. When apps are deployed to the web, they can be created with portability and resilience thanks to these best practices. - -It was created by engineers at Heroku, a cloud platform-as-a-service company, around 2011. Adam Wiggins, a co-founder of Heroku, played a significant role in articulating and promoting these principles. This framework continues to be influential, aiding in designing and deploying scalable and maintainable software applications. - -### Fast by default - -Good performance is always important, but it is *especially* critical for content-focused websites. It has been well-proven that poor performance loses you engagement, conversions, and money. For example: - -- Every 100ms faster → 1% more conversions ([Mobify](https://web.dev/why-speed-matters/), earning +$380,000/yr) -- 50% faster → 12% more sales ([AutoAnything](https://www.digitalcommerce360.com/2010/08/19/web-accelerator-revs-conversion-and-sales-autoanything/)) -- 20% faster → 10% more conversions ([Furniture Village](https://www.thinkwithgoogle.com/intl/en-gb/marketing-strategies/app-and-mobile/furniture-village-and-greenlight-slash-page-load-times-boosting-user-experience/)) -- 40% faster → 15% more sign-ups ([Pinterest](https://medium.com/pinterest-engineering/driving-user-growth-with-performance-improvements-cfc50dafadd7)) -- 850ms faster → 7% more conversions ([COOK](https://web.dev/why-speed-matters/)) -- Every 1 second slower → 10% fewer users ([BBC](https://www.creativebloq.com/features/how-the-bbc-builds-websites-that-scale)) - -In many web frameworks, it is easy to build a website that looks great during development only to load painfully slow once deployed. JavaScript is often the culprit, since users' phones and lower-powered devices rarely match the speed of a developer's laptop. - -Thulite’ magic is in how it combines the solid architecture described above with optimizations for production builds and tools like [Quicklink](https://getquick.link/). The result is amazing web performance for every website, out of the box. Our goal: __It should be nearly impossible to build a slow website with Thulite__. - -### Maximum secure - -With great regularity, we hear about websites becoming unavailable due to denial of service attacks, or displaying modified (and often damaging) information on their homepages. In other high-profile cases, millions of passwords, email addresses, and credit card details have been leaked into the public domain, exposing website users to both personal embarrassment and financial risk. - -The purpose of website security is to prevent these (or any) sorts of attacks. The more formal definition of website security is *the act/practice of protecting websites from unauthorized access, use, modification, destruction, or disruption*. - -Effective website security requires design effort across the whole of the website: in your web application, the configuration of the web server, your policies for creating and renewing passwords, and the client-side code. - -Thulite helps you build a maximum secure website by combining [MDN's web security guidelines](https://infosec.mozilla.org/guidelines/web_security) with sensible defaults that you can use out of the box. Our goal: __Your website should keep up with the latest in web security standards.__. - -### Easy to use - -__Thulites goal is to be accessible to every web developer__. Thulite was designed to feel familiar and approachable regardless of skill level or past experience with web development. - -We designed Thulite to remove as much "required complexity" as possible from the developer experience, especially as you onboard for the first time. You can build a "Hello World" example website in Thulite with just HTML and CSS. Then, when you need to build something more powerful, you can incrementally reach for new features as you go. - -### Developer-focused - -We strongly believe that Thulite is only a successful project if people love using it. Thulite has everything you need to support you as you build with Thulite. - -Thulite invests in developer tools like a great CLI experience from the moment you open your terminal and documentation actively maintained by community contributors. - -Our welcoming, respectful, inclusive community on Discussions is ready to provide support, motivation, and encouragement. Open a [Support](https://github.com/orgs/thuliteio/discussions/categories/support) thread to get help with your project. Visit our dedicated [Showcase](https://github.com/orgs/thuliteio/discussions/categories/showcase) category for sharing your Thulite sites, blog posts, videos, and even work-in-progress for safe feedback and constructive criticism. - -As an open-source project, we welcome contributions of all types and sizes from community members of all experience levels. You are invited to join in roadmap discussions to shape the future of Thulite, and we hope you’ll contribute fixes and features to the core codebase, docs, and other projects. diff --git a/src/content/docs/contribute.mdx b/src/content/docs/contribute.mdx deleted file mode 100644 index 379d8be41..000000000 --- a/src/content/docs/contribute.mdx +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Contribute -description: A reference page in my new Starlight docs site. ---- diff --git a/src/content/docs/editor-setup.mdx b/src/content/docs/editor-setup.mdx deleted file mode 100644 index 31043de65..000000000 --- a/src/content/docs/editor-setup.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Editor Setup -description: A reference page in my new Starlight docs site. ---- -import { Tabs, TabItem } from '@astrojs/starlight/components'; - -Customize your code editor to improve the Thulite developer experience and unlock new features. - -## VS Code - -[VS Code](https://code.visualstudio.com/) is a popular code editor for web developers, built by Microsoft. The VS Code engine also powers popular in-browser code editors like [GitHub Codespaces](https://github.com/features/codespaces) and [Gitpod](https://gitpod.io/). - -Thulite works with any code editor. However, VS Code is our recommended editor for Thulite projects together with the following extensions: - -- [Hugo Language and Syntax Support](https://marketplace.visualstudio.com/items?itemName=budparr.language-hugo-vscode) -- [Markdown All in One](https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one) -- [Even Better TOML](https://marketplace.visualstudio.com/items?itemName=tamasfe.even-better-toml) -- [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) -- [markdownlint](https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint) -- [Stylelint](https://marketplace.visualstudio.com/items?itemName=stylelint.vscode-stylelint) - -## In-Browser Editors - -In addition to local editors, Thulite also runs well on in-browser hosted editors, including: - -- [GitHub.dev](https://github.dev/) — available to everyone for free on GitHub.com. -- [Gitpod](https://gitpod.io/) — isolated cloud development environments with your favorite editor. -- [CodeSandbox](https://codesandbox.io/) — 24/7 collaborative cloud development environments (CDEs) that resume in 2 seconds. - -### Not yet supported - -- [StackBlitz](https://stackblitz.com/) — write, run, and debug frontend code directly in your browser. - -## Other tools - -### Prettier - -[Prettier](https://prettier.io/) is a popular formatter for JavaScript, HTML, CSS, and more. Thulite includes Prettier and a `format` command that runs `prettier **/** -w -c`. You can customize the Thulite defaults for Prettier by updating the `.prettierrc.yaml` and `.prettierignore` files in your project root. - - - -```bash -npm run format -``` - - -```bash -pnpm run format -``` - - -```bash -yarn run format -``` - - diff --git a/src/content/docs/getting-started.mdx b/src/content/docs/getting-started.mdx deleted file mode 100644 index 84b8356e2..000000000 --- a/src/content/docs/getting-started.mdx +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: Getting Started -description: This guide will help you get started with a new Thulite project. -tableOfContents: true -prev: false ---- -import Button from '~/components/Button.astro' -import { Tabs, TabItem } from '@astrojs/starlight/components'; -import { Card, CardGrid } from '@astrojs/starlight/components'; - -[Thulite](https://thulite.io/) is a web framework designed for speed, security, and SEO — all powered by Hugo and npm. Here you'll find guides, resources, and references to help you build with Thulite. - -## Quick Start - -Get a new Thulite project up and running locally with our helpful `create-thulite` CLI wizard! - - - -```bash -npm create thulite@latest -``` - - -```bash -pnpm create thulite@latest -``` - - -```bash -yarn create thulite -``` - - - -Our [Installation Guide](/install/auto/) has step-by-step instructions for installing Thulite using our CLI wizard, creating a new project from an existing Thulite GitHub repository, and for installing Thulite manually. - -{/* -## Quick Try - -Visit [new.thulite.io](https://new.thulite.io/) and choose from a variety of templates to get started. Play around with a full, working version of Thulite right in your browser! - -
    - - -
    -*/} - -## Quick Links - - - - - [Main features](/concepts/why-thulite/) - - [Project structure](/basics/project-structure/) - - [Configuration](/basics/configuration/) - - [Commands](/basics/commands/) - - - - [Themes](/guides/themes/) - - [Integrations](/guides/integrations/) - - [Analytics](/guides/analytics/) - - [CMS](/guides/cms/) - - - - [Roadmap 2024](https://github.com/orgs/thuliteio/discussions/462) - - [Discussions](https://github.com/orgs/thuliteio/discussions) - - [Blog](https://thulite.io/blog/) - - - - [Doks](https://getdoks.org/) - - [Images](https://images.thulite.io/) - - [SEO](https://seo.thulite.io/) - - diff --git a/src/content/docs/guides/analytics.mdx b/src/content/docs/guides/analytics.mdx deleted file mode 100644 index 7f146cbe7..000000000 --- a/src/content/docs/guides/analytics.mdx +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Add Analytics to Thulite -description: A guide in my new Starlight docs site. ---- -import AnalyticsGuidesNav from '~/components/AnalyticsGuidesNav.astro'; - -**Ready to add Analytics to your Thulite project?** Follow one of our guides to different analytics services or scroll down for general guidance about adding analytics to a Thulite site. - -## Analytics Guides - - - -## General Setup - -Add a tracking script to `layouts/partials/head/script-header.html`. diff --git a/src/content/docs/guides/analytics/cabin-analytics.mdx b/src/content/docs/guides/analytics/cabin-analytics.mdx deleted file mode 100644 index 2306e4bdb..000000000 --- a/src/content/docs/guides/analytics/cabin-analytics.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "Add Cabin Analytics to your Thulite Site" -description: How to add ananlytics to your Thulite site using Cabin Analytics. -type: analytics -stub: false -service: Cabin ---- -import List from '~/components/List.astro'; - -[Cabin Analytics](https://withcabin.com/) is a privacy-first, carbon conscious web analytics service. - -## Set up Cabin - -To follow this guide, you'll need an existing [Thulite](https://thulite.io/) site and a [Cabin](https://withcabin.com/settings/domains) project. - -### Add script - -Add to `layouts/partials/head/script-header.html`: - -```html - -``` - -## Official Resources - - -- [Using Cabin](https://docs.withcabin.com/using.html) -- [Privacy law compliance](https://docs.withcabin.com/privacy.html) - diff --git a/src/content/docs/guides/archetypes.md b/src/content/docs/guides/archetypes.md deleted file mode 100644 index d9016e9e9..000000000 --- a/src/content/docs/guides/archetypes.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: "Archetypes" -description: A reference page in my new Starlight docs site. ---- diff --git a/src/content/docs/guides/cms.mdx b/src/content/docs/guides/cms.mdx deleted file mode 100644 index a0e29e89c..000000000 --- a/src/content/docs/guides/cms.mdx +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Use a CMS with Thulite -description: How to use a CMS to add content to Thulite ---- -import CMSGuidesNav from '~/components/CMSGuidesNav.astro'; -import List from '~/components/List.astro'; - -**Ready to connect a Headless CMS to your Thulite project?** Follow one of our guides to integrate a CMS. - -## CMS Guides - - - -## Why use a CMS? - -A Content Management System lets you write content and manage assets outside of your Thulite project. - -This unlocks new features for working with content. Most CMSes give you a visual content editor, the ability to specify standard types of content, and a way to collaborate with others. - -A CMS can be useful for content that follows a particular structure, often giving you a dashboard-like experience and WYSIWYG editing tools. You might use a CMS to write blog posts using a CMS's rich text editor instead of Markdown files. Or you might use a CMS to maintain product listings for an eCommerce shop, making certain fields required to avoid incomplete listings. - -Your Thulite project can then fetch your content from your CMS and display it, wherever and however you want on your site. - -## Which CMSes work well with Thulite? - -Because Thulite takes care of the *presentation* of your content, you'll want to choose a *headless* CMS, like those in the list above. This means that the CMS helps you write your content, but doesn't generate a site that displays it. Instead, you fetch the content data and use in your Thulite project. - - -- [Headless CMS](https://jamstack.org/headless-cms/) -- [Front-end interfaces](https://gohugo.io/tools/front-ends/) - - -## Can I use Thulite without a CMS? - -Yes! Thulite provides built-in ways to [author content](/basics/pages/), including support for Markdown pages. diff --git a/src/content/docs/guides/cms/cloudcannon.mdx b/src/content/docs/guides/cms/cloudcannon.mdx deleted file mode 100644 index a2b585148..000000000 --- a/src/content/docs/guides/cms/cloudcannon.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: CloudCannon & Thulite -description: Add content to your Thulite project using CloudCannon as a CMS -type: cms -stub: false -service: CloudCannon ---- -import List from '~/components/List.astro'; - -[CloudCannon](https://cloudcannon.com) is a Git-based content management system that provides a visual editor for your content. - -## Official Resources - - -- [The Hugo CMS for visual page building](https://cloudcannon.com/hugo-cms/) -- [Hugo Support in CloudCannon](https://cloudcannon.com/blog/hugo-support-in-cloudcannon/) - diff --git a/src/content/docs/guides/cms/tina-cms.mdx b/src/content/docs/guides/cms/tina-cms.mdx deleted file mode 100644 index 3fb210042..000000000 --- a/src/content/docs/guides/cms/tina-cms.mdx +++ /dev/null @@ -1,125 +0,0 @@ ---- -title: Tina CMS & Thulite -description: Add content to your Thulite project using Tina as a CMS -type: cms -stub: false -service: Tina CMS ---- -import { Tabs, TabItem } from '@astrojs/starlight/components'; -import List from '~/components/List.astro'; - -[Tina CMS](https://tina.io/) is a Git-backed headless content management system. - -## Integrating with Thulite - -To get started, you'll need an existing Thulite project. - -1. Run the following command to install Tina into your Thulite project. - - - - ```bash - npx @tinacms/cli@latest init - ``` - - - ```bash - pnpm dlx @tinacms/cli@latest init - ``` - - - ```bash - yarn dlx @tinacms/cli@latest init - ``` - - - - - When prompted for a Cloud ID, press Enter to skip. You'll generate one later if you want to use Tina Cloud. - - When prompted "What framework are you using", choose **Other**. - - When asked where public assets are stored, press Enter. - - After this has finished, you should now have a `.tina` folder in the root of your project and a generated `hello-world.md` file at `content/posts`. - -2. Change the `dev` script in `package.json`: - - ```json del={4} ins={5} - // package.json - { - "scripts": { - "dev": "hugo server --disableFastRender --noHTTPCache" - "dev": "tinacms dev -c \"hugo server --disableFastRender --noHTTPCache\"" - } - } - ``` - -3. TinaCMS is now set up in local mode. Test this by running the `dev` script, then navigating to `/admin/index.html#/collections/post`. - - Editing the “Hello, World!” post will update the `content/posts/hello-world.md` file in your project directory. - -4. Set up your Tina collections by editing the `schema.collections` property in `.tina/config.ts`. - - For example, you can add a required "date posted" frontmatter property to our posts: - - ```js title=".tina/config.ts" ins={35-40} - import { defineConfig } from "tinacms"; - - // Your hosting provider likely exposes this as an environment variable - const branch = process.env.HEAD || process.env.VERCEL_GIT_COMMIT_REF || "main"; - - export default defineConfig({ - branch, - clientId: null, // Get this from tina.io - token: null, // Get this from tina.io - build: { - outputFolder: "admin", - publicFolder: "public", - }, - media: { - tina: { - mediaRoot: "images", - publicFolder: "public", - }, - }, - schema: { - collections: [ - { - name: "posts", - label: "Posts", - path: "src/content/posts", - format: 'mdx', - fields: [ - { - type: "string", - name: "title", - label: "Title", - isTitle: true, - required: true, - }, - { - type: "datetime", - name: "posted", - label: "Date Posted", - required: true, - }, - { - type: "rich-text", - name: "body", - label: "Body", - isBody: true, - }, - ], - }, - ], - }, - }); - ``` - - Learn more about Tina collections [in the Tina docs](https://tina.io/docs/reference/collections/). - -5. In production, TinaCMS can commit changes directly to your GitHub repository. To set up TinaCMS for production, you can choose to use [Tina Cloud](https://tina.io/docs/tina-cloud/) or self-host the [Tina Data Layer](https://tina.io/docs/self-hosted/overview/). You can [read more about registering for Tina Cloud](https://app.tina.io/register) in the Tina Docs. - -## Official Resources - - -- [Hugo + TinaCMS Setup Guide](https://tina.io/docs/frameworks/hugo/). - diff --git a/src/content/docs/guides/data.md b/src/content/docs/guides/data.md deleted file mode 100644 index 8eb9faa64..000000000 --- a/src/content/docs/guides/data.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: "Data" -description: A reference page in my new Starlight docs site. ---- diff --git a/src/content/docs/guides/deploy.mdx b/src/content/docs/guides/deploy.mdx deleted file mode 100644 index eef0a97b9..000000000 --- a/src/content/docs/guides/deploy.mdx +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: Deploy your Thulite site -description: A guide in my new Starlight docs site. ---- -import DeployGuidesNav from '~/components/DeployGuidesNav.astro'; -import { Tabs, TabItem } from '@astrojs/starlight/components'; - -**Ready to build and deploy your Thulite site?** Follow one of our guides to different deployment services or scroll down for general guidance about deploying a Thulite site. - -## Deployment Guides - - - -## Quick Deploy Options - -You can build and deploy a Thulite site to a number of hosts quickly using either their website's dashboard UI or a CLI. - -### Website UI - -A quick way to deploy your website is to connect your Thulite project's online Git repository (e.g. GitHub, GitLab, Bitbucket) to a host provider and take advantage of continuous deployment using Git. - -These host platforms automatically detect pushes to your Thulite project's source repository, build your site and deploy it to the web at a custom URL or your personal domain. Often, setting up a deployment on these platforms will follow steps something like the following: - -1. Add your repository to an online Git provider (e.g. in GitHub, GitLab, Bitbucket) - -2. Choose a host that supports **continuous deployment** (e.g. [Netlify](/guides/deploy/netlify/) or [Vercel](/guides/deploy/vercel/)) and import your Git repository as a new site/project. - - Many common hosts will recognize your project as a Thulite site, and should choose the appropriate configuration settings to build and deploy your site as shown below. (If not, these settings can be changed.) - - :::note[Deploy settings] - - **Build Command:** `npm run build` - - **Publish directory:** `public` - ::: - -3. Click "Deploy" and your new website will be created at a unique URL for that host (e.g. `new-thulite-site.netlify.app`). - -The host will be automatically configured to watch your Git provider's main branch for changes, and to rebuild and republish your site at each new commit. These settings can typically be configured in your host provider's dashboard UI. - -### CLI Deployment - -Some hosts will have their own command line interface (CLI) you can install globally to your machine using npm. Often, using a CLI to deploy looks something like the following: - -1. Install your host's CLI globally, for example: - - - - ```bash - npm install --global netlify-cli - ``` - - - ```bash - pnpm add --global netlify-cli - ``` - - - ```bash - yarn global add netlify-cli - ``` - - - -2. Run the CLI and follow any instructions for authorization, setup etc. - -3. Build your site and deploy to your host - - Many common hosts will build and deploy your site for you. They will usually recognize your project as a Thulite site, and should choose the appropriate configuration settings to build and deploy as shown below. (If not, these settings can be changed.) - - :::note[Deploy settings] - - **Build Command:** `npm run build` - - **Publish directory:** `public` - ::: - - - Other hosts will require you to [build your site locally](#building-your-site-locally) and deploy using the command line. - -## Building Your Site Locally - -Many hosts like Netlify and Vercel will build your site for you and then publish that build output to the web. But, some sites will require you to build locally and then run a deploy command or upload your build output. - -You may also wish to build locally to [preview your site](#previewing-your-site-locally), or to catch any potential errors and warnings in your own environment. - -Run the command `npm run build` to build your Thulite site. - - - -```bash -npm run build -``` - - -```bash -pnpm run build -``` - - -```bash -yarn run build -``` - - - -By default, the build output will be placed at `public/`. This location can be changed using the [`publishDir` configuration option](https://gohugo.io/getting-started/configuration/#publishdir). - -## Previewing Your Site Locally - -Next to Hugo's built-in development server, Thulite ships with [http-server](https://github.com/http-party/http-server), a simple, zero-configuration command-line static HTTP server. - -Run the command `npm run preview` to preview your Thulite site. - - - -```bash -npm run preview -``` - - -```bash -pnpm run preview -``` - - -```bash -yarn run preview -``` - - - -The `http-server` script is configured to run with [gzip](https://developer.mozilla.org/en-US/docs/Glossary/GZip_compression), [brotli](https://developer.mozilla.org/en-US/docs/Glossary/Brotli_compression), and [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) enabled. These settings can be changed using the [available options](https://github.com/http-party/http-server#available-options). \ No newline at end of file diff --git a/src/content/docs/guides/deploy/cloudflare.mdx b/src/content/docs/guides/deploy/cloudflare.mdx deleted file mode 100644 index d14233703..000000000 --- a/src/content/docs/guides/deploy/cloudflare.mdx +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Deploy your Thulite Site to Cloudflare Pages -description: How to deploy your Thulite site to the web using Cloudflare Pages. -type: deploy -stub: false -service: Cloudflare Pages ---- -import { Tabs, TabItem } from '@astrojs/starlight/components'; - -You can deploy your Thulite project on [Cloudflare Pages](https://pages.cloudflare.com/), a JAMstack platform for frontend developers to collaborate and deploy websites. - -This guide includes: - -- [How to deploy through the Cloudflare Pages Dashboard](#how-to-deploy-a-site-with-git) -- [How to deploy using Wrangler, the Cloudflare CLI](#how-to-deploy-a-site-using-wrangler) - -## Prerequisites - -To get started, you will need: - -- A Cloudflare account. If you don't already have one, you can create a free Cloudflare account during the process. -- Your app code pushed to a [GitHub](https://github.com/) or a [GitLab](https://about.gitlab.com/) repository. - -## How to deploy a site with Git - -1. Set up a new project on Cloudflare Pages. -2. Push your code to your git repository (GitHub, GitLab). -3. Log in to the Cloudflare dashboard and select your account in **Account Home** > **Pages**. -4. Select **Create a new Project** and the **Connect Git** option. -5. Select the git project you want to deploy and click **Begin setup** -6. Use the following build settings: - - - **Framework preset**: `exit 0` - - **Build command:** `npm run build` - - **Build output directory:** `public` - -7. Click the **Save and Deploy** button. - -## How to deploy a site using Wrangler - -1. Install the [Wrangler CLI](https://developers.cloudflare.com/workers/wrangler/get-started/) in your project: - - - - ```bash - npm install wrangler --save-dev - ``` - - - ```bash - pnpm add wrangler --save-dev - ``` - - - ```bash - yarn add --dev wrangler - ``` - - - -2. Authorize Wrangler with your Cloudflare account using OAuth: - - ```bash - wrangler login - ``` - -3. Run your build command: - - - - ```bash - npm run build - ``` - - - ```bash - pnpm run build - ``` - - - ```bash - yarn run build - ``` - - - -4. Deploy the build output directory as a Pages deployment: - - ```bash - wrangler pages deploy public - ``` - -After your assets are uploaded, Wrangler will give you a preview URL to inspect your site. When you log into the Cloudflare Pages dashboard, you will see your new project. - -### Enabling Preview locally with Wrangler - -Update the preview script to run `wrangler` instead of Thulite' built-in preview command: - -```json title="package.json" -"preview": "wrangler pages dev ./public" -``` - -## Troubleshooting - -If you're encountering errors, check whether the `node` version you're using locally (`node -v`) matches the `NODE_VERSION` environment variable under **Settings**. diff --git a/src/content/docs/guides/deploy/github.mdx b/src/content/docs/guides/deploy/github.mdx deleted file mode 100644 index e7cb82491..000000000 --- a/src/content/docs/guides/deploy/github.mdx +++ /dev/null @@ -1,130 +0,0 @@ ---- -title: Deploy your Thulite Site to GitHub Pages -description: How to deploy your Thulite site to the web using GitHub Pages. -type: deploy -stub: false -service: GitHub Pages ---- - -You can use [GitHub Pages](https://pages.github.com/) to host a Thulite website directly from a repository on [GitHub.com](https://github.com/). - -:::tip[Looking for an example?] -Check out the [official GitHub Pages Doks example project](https://github.com/thuliteio/doks-gh-pages)! -::: - -## How to deploy - -You can deploy a Thulite site to GitHub Pages by using [GitHub Actions](https://github.com/features/actions) to automatically build and deploy your site. To do this, your source code must be hosted on GitHub. - -Follow the instructions below to deploy your Thulite site to GitHub pages. - -1. Create a new file in your project at `.github/workflows/deploy.yml` and paste in the YAML below. - - ```yaml title="deploy.yml" - # Sample workflow for building and deploying a Thulite site to GitHub Pages - name: Deploy Thulite site to Pages - - on: - # Runs on pushes targeting the default branch - push: - branches: - - main - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - - # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages - permissions: - contents: read - pages: write - id-token: write - - # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. - # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. - concurrency: - group: "pages" - cancel-in-progress: false - - # Default to bash - defaults: - run: - shell: bash - - jobs: - # Build job - build: - runs-on: ubuntu-latest - env: - HUGO_VERSION: 0.126.0 - steps: - - name: Install Hugo CLI - run: | - wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \ - && sudo dpkg -i ${{ runner.temp }}/hugo.deb - - name: Install Dart Sass - run: sudo snap install dart-sass - - name: Checkout - uses: actions/checkout@v4 - with: - submodules: recursive - fetch-depth: 0 - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '20' - cache: 'npm' - - name: Setup Pages - id: pages - uses: actions/configure-pages@v4 - - name: Install dependencies - run: "[[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true" - - name: Build production website - env: - # For maximum backward compatibility with Hugo modules - HUGO_ENVIRONMENT: production - HUGO_ENV: production - TZ: America/Los_Angeles - run: | - npm run build \ - -- \ - --baseURL "${{ steps.pages.outputs.base_url }}/" - - name: Upload artifact - uses: actions/upload-pages-artifact@v3 - with: - path: ./public - - # Deployment job - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - needs: build - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 - - ``` - -2. On GitHub, go to your repository's **Settings** tab and find the **Pages** section of the settings. - -3. Choose **GitHub Actions** as the **Source** of your site. - -4. Commit the new workflow file and push it to GitHub. - -5. Copy the **Your site is published at** URL and paste it as `baseurl` in `./config/production/hugo.toml`. - -7. Push the changes to GitHub and wait for the action to finish succesfully (after approximately 30 seconds). - -That's it. After a minute or so, you site is avaliable at the **Your site is published at** URL. When you push changes to your Thulite project's repository, the GitHub Action will automatically deploy them for you. - -:::tip[Set up a custom domain] -You can optionally set up a custom domain by adding the following `./public/CNAME` file to your project: - -```js title="public/CNAME" -sub.mydomain.com -``` - -This will deploy your site at your custom domain instead of `user.github.io`. Don't forget to also [configure DNS for your domain provider](https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site#configuring-a-subdomain). -::: diff --git a/src/content/docs/guides/deploy/gitlab.mdx b/src/content/docs/guides/deploy/gitlab.mdx deleted file mode 100644 index f01c4e002..000000000 --- a/src/content/docs/guides/deploy/gitlab.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Deploy your Thulite Site to GitLab Pages -description: How to deploy your Thulite site to the web using GitLab Pages. -type: deploy -stub: false -service: GitLab Pages ---- - -You can use [GitLab Pages](https://pages.gitlab.io/) to host a Thulite site for your [GitLab](https://about.gitlab.com/) projects, groups, or user account. - -:::tip[Looking for an example?] -Check out the [GitLab Pages Doks example project](https://gitlab.com/h-enk/doks-gitlab-pages)! -::: - -## How to deploy - -Follow the instructions below to deploy your Thulite site to GitLab pages. - -1. Create a file called `.gitlab-ci.yml` in the root of your project with the content below. This will build and deploy your site whenever you make changes to your content: - - ```yaml title=".gitlab-ci.yml" - # The Docker image that will be used to build your app - image: node:lts - # Functions that should be executed before the build script is run - before_script: - - npm ci - pages: - script: - - npm run build - artifacts: - paths: - # The folder that contains the files to be exposed at the Page URL - - public - rules: - # This ensures that only pushes to the default branch will trigger - # a pages deploy - - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH - ``` - -2. On GitLab, go to your repository's Deploy tab and find the Pages section. - -3. Copy the **Access pages** URL and paste it as `baseurl` in `./config/production/hugo.toml`. - -4. Set `canonifyURLs = true` in `./config/production/hugo.toml`. - -5. Push the changes to GitLab. - -That's it. After a minute or so, you site is avaliable at the **Access pages** URL. diff --git a/src/content/docs/guides/deploy/google-firebase.mdx b/src/content/docs/guides/deploy/google-firebase.mdx deleted file mode 100644 index dd55b7f98..000000000 --- a/src/content/docs/guides/deploy/google-firebase.mdx +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: Deploy your Thulite Site to Google's Firebase Hosting -description: How to deploy your Thulite site to the web using Google's Firebase Hosting. -type: deploy -stub: false -service: Firebase Hosting ---- -import { Tabs, TabItem } from '@astrojs/starlight/components'; - -[Firebase Hosting](https://firebase.google.com/products/hosting) is a service provided by Google's [Firebase](https://firebase.google.com/) app development platform, which can be used to deploy a Thulite site. - -## Prerequisites - -To follow this guide, you will need to have [firebase-tools](https://github.com/firebase/firebase-tools) installed. - -## How to deploy - -1. Create `firebase.json` at the root of your project with the following content: - - ```json title="firebase.json" - { - "hosting": { - "public": "public", - "ignore": [] - } - } - ``` - -2. Create `.firebaserc` at the root of your project with the following content: - - ```json title= ".firebaserc" - { - "projects": { - "default": "" - } - } - ``` - -3. Run your build command: - - - - ```bash - npm run build - ``` - - - ```bash - pnpm run build - ``` - - - ```bash - yarn run build - ``` - - - -4. Deploy using the command: - - ```bash - firebase deploy - ``` diff --git a/src/content/docs/guides/deploy/microsoft-azure.mdx b/src/content/docs/guides/deploy/microsoft-azure.mdx deleted file mode 100644 index 8d81c7753..000000000 --- a/src/content/docs/guides/deploy/microsoft-azure.mdx +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: Deploy your Thulite Site to Microsoft Azure -description: How to deploy your Thulite site to the web using Microsoft Azure. -type: deploy -stub: false -service: Microsoft Azure ---- - -[Azure](https://azure.microsoft.com/) is a cloud platform from Microsoft. You can deploy your Thulite site with Microsoft Azure's [Static Web Apps](https://aka.ms/staticwebapps) service. - -:::tip[Looking for an example?] -Check out the [official Microsoft Azure Doks example project](https://github.com/thuliteio/doks-microsoft-azure)! -::: - -This guide takes you through deploying your Thulite site stored in GitHub using Visual Studio Code. Please see Microsoft guides for using an [Azure Pipelines Task](https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/azure-static-web-app-v0?view=azure-pipelines) for other setups. - -## Prerequisites - -To follow this guide, you will need: - -- An Azure account and a subscription key. You can create a [free Azure account here](https://azure.microsoft.com/free). -- Your app code pushed to [GitHub](https://github.com/). -- The [SWA Extension](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurestaticwebapps) in [Visual Studio Code](https://code.visualstudio.com/). - -## How to deploy - -1. Open your project in VS Code. - -2. Open the Static Web Apps extension, sign in to Azure, and click the **+** button to create a new Static Web App. You will be prompted to designate which subscription key to use. - -3. Follow the wizard started by the extension to give your app a name, choose a framework preset, and designate the app root (usually `/`) and built file location (use `/public`). Thulite is not listed in the built-in templates in Azure so you will need to select `custom`. The wizard will run and will create a [GitHub Action](https://github.com/features/actions) in the `.github` folder of your repo. (This folder will be automatically created if it does not already exist.) - -The GitHub Action will deploy your app (you can see its progress in your repo's Actions tab on GitHub). When successfully completed, you can view your app at the address shown in the SWA Extension's progress window by clicking the **Browse Website** button (this will appear after the GitHub Action has run). - -## Known Issues - -The build fails because an old (no longer supported) Node version and/or Hugo version is used. - -### Node version - -To resolve this, update your projects `package.json` file with this snippet: - -```json - "engines": { - "node": ">=20.11.0" - }, -``` - -### Hugo version - -To resolve this, update your workflow file by providing a value for `HUGO_VERSION` in the `env` section: - -```yaml -jobs: - build_and_deploy_job: - if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed') - runs-on: ubuntu-latest - name: Build and Deploy Job - steps: - - uses: actions/checkout@v3 - with: - submodules: true - lfs: false - - name: Build And Deploy - id: builddeploy - uses: Azure/static-web-apps-deploy@v1 - with: - azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_NICE_BUSH_0D736421E }} - repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments) - action: "upload" - ###### Repository/Build Configurations - These values can be configured to match your app requirements. ###### - # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig - app_location: "/" # App source code path - api_location: "api" # Api source code path - optional - output_location: "public" # Built app content directory - optional - ###### End of Repository/Build Configurations ###### - env: - HUGO_VERSION: 0.131.0 - -``` - -## Official Resources - -- [Deploy a Hugo site to Azure Static Web Apps](https://learn.microsoft.com/en-us/azure/static-web-apps/publish-hugo) -- [Custom Hugo version](https://learn.microsoft.com/en-us/azure/static-web-apps/publish-hugo#custom-hugo-version) -- [Microsoft Azure Static Web Apps documentation](https://learn.microsoft.com/en-us/azure/static-web-apps/) diff --git a/src/content/docs/guides/email-obfuscation.mdx b/src/content/docs/guides/email-obfuscation.mdx deleted file mode 100644 index 69047d252..000000000 --- a/src/content/docs/guides/email-obfuscation.mdx +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Email obfuscation -description: This guide helps you to obfuscate email addresses with a simple, effective CSS technique. ---- -import { Steps } from '@astrojs/starlight/components'; - -This guide helps you to obfuscate email addresses with a simple, effective CSS technique. - -## Background - -The article [Email Obfuscation: What Works in 2024](https://spencermortensen.com/articles/email-obfuscation/) by Spencer Mortensen discusses various techniques to hide email addresses from spam bots while keeping them accessible to users. It evaluates methods like plain text, HTML entities, CSS display properties, JavaScript techniques, and others, testing their effectiveness in blocking spam. - -Some methods, such as CSS `display: none` and certain JavaScript techniques, are found to be highly effective, while others like HTML comments and symbol substitution offer little protection. - -## Setup - - - -1. Add a default (fallback) email address to `config/_default/params.toml`: - - ```toml title="params.toml" - # defaultEmail - defaultEmail = "email@example.com" - ``` - -2. Add the following CSS to `assets/scss/common/_custom.scss`: - - ```scss title="_custom.scss" - span.email b { - display: none; - } - ``` - -3. Create shortcode file `layouts/shortcodes/email.html` with the following content: - - ```html title="email.html" - {{- /* Set defaults and get args. */}} - {{- $address := index .Params 0 | default site.Params.defaultEmail }} - - {{- /* Get parts. */}} - {{- $addressParts := split $address "@" }} - {{- $userName := (index $addressParts 0) }} - {{- $rootDomain := (index $addressParts 1) }} - {{- $rootDomainParts := split $rootDomain "." }} - {{- $domainName := (index $rootDomainParts 0) }} - {{- $topLevelDomain := (index $rootDomainParts 1) }} - - {{- /* Render. */}} - - ``` - - The shortcode gets the email address you provided — using the default email address if you didn’t specify one. Next, it splits the email address in parts — `userName`, `domainName`, and `topLevelDomain` — and renders the HTML. - - - -## Usage - -Now, you can use the shortcode in Markdown — using `defaultEmail`: - -```md -{{< email >}} -``` - -Rendering: - -```html - -``` - -Or, by specifying an email address: - -```md -{{< email "team@example.com" >}} -``` -Rendering: - -```html - -``` diff --git a/src/content/docs/guides/integrations.mdx b/src/content/docs/guides/integrations.mdx deleted file mode 100644 index e49cbbae0..000000000 --- a/src/content/docs/guides/integrations.mdx +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: Add Integrations -description: A guide in my new Starlight docs site.s ---- -import IntegrationsNav from '~/components/IntegrationsNav.astro'; -import { Tabs, TabItem } from '@astrojs/starlight/components'; - -**Thulite integrations** add new functionality and behaviors for your project. You can write a custom integration yourself, use an official integration, or use integrations built by the community. - -Integrations can… - -- Unlock Tailwind CSS, Bootstrap, and other popular CSS frameworks. -- Add new features to your project, like Images and SEO. -- Integrate themes like Doks or Bolt. - -## Official Integrations - -The following integrations are maintained by Thulite. - - - -## Setting up an Integration - -### Adding an Integration - -Add an integration to your site by running the following command in your project's root directory: - - - -```bash - # Example: add Images - npm install @thulite/images@latest -``` - - -```bash - # Example: add Images - pnpm add @thulite/images@latest -``` - - -```bash - # Example: add Images - yarn add @thulite/images@latest -``` - - - -### Configuring an Integration - -You'll most likely have to update the mounts configuration, add parameters, add some CSS/JavaScript, and update the PostCSS settings. - -## Upgrading an Integration - -To upgrade an integration, use the appropriate command for your package manager. - - - -```bash - # Example: upgrade Images - npm install @thulite/images@latest -``` - - -```bash - # Example: upgrade Images - pnpm add @thulite/images@latest -``` - - -```bash - # Example: upgrade Images - yarn add @thulite/images@latest -``` - - - -## Removing an Integration - -To remove an integration, uninstall the integration from your project. - - - -```bash - # Example: remove Images - npm uninstall @thulite/images -``` - - -```bash - # Example: remove Images - pnpm uninstall @thulite/images -``` - - -```bash - # Example: remove Images - yarn remove @thulite/images -``` - - - -Optionally, remove the configuration settings. - -## Finding More Integrations - -You can find integrations developed by the community in the [Thulite Integrations Directory](https://thulite.io/integrations/). Follow links there for detailed usage and configuration instructions. - -## Building Your Own Integration - -Thulite' Integrations are inspired by npm and Hugo, and designed to feel familiar to anyone who has written an npm package or Hugo Module before. - -Check out the [Build a Thulite Integration](/guides/integrations/) guide to learn what integrations can do and how to write one yourself. diff --git a/src/content/docs/guides/integrations/bolt-core.mdx b/src/content/docs/guides/integrations/bolt-core.mdx deleted file mode 100644 index dfe793525..000000000 --- a/src/content/docs/guides/integrations/bolt-core.mdx +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "@thulite/bolt-core" -description: Core integration for the Bolt theme -type: integration -stub: false -service: "Bolt Core" -category: theme ---- - -Core integration for the Bolt theme. - -[..] diff --git a/src/content/docs/guides/integrations/bootstrap.mdx b/src/content/docs/guides/integrations/bootstrap.mdx deleted file mode 100644 index bb36ab272..000000000 --- a/src/content/docs/guides/integrations/bootstrap.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: "@thulite/bootstrap" -description: Bootstrap integration for Thulite -editUrl: https://github.com/thuliteio/bootstrap/blob/main/README.md -type: integration -stub: false -service: "Bootstrap" -category: renderer ---- -import { LinkCard } from '@astrojs/starlight/components'; - -Bootstrap integration for Thulite. - -## Status - -[![npm (scoped)](https://img.shields.io/npm/v/@thulite/bootstrap?style=flat-square)](https://www.npmjs.com/package/@thulite/bootstrap) - -## Installation - -```bash -npm i -D @thulite/bootstrap -``` - -## Setup - -Add mounts to `./config/_default/module.toml`: - -```toml -[[mounts]] - source = "node_modules/@thulite/bootstrap/assets" - target = "assets" - -[[mounts]] - source = "node_modules/@thulite/bootstrap/layouts" - target = "layouts" - -[[mounts]] - source = "assets" - target = "assets" - -[[mounts]] - source = "layouts" - target = "layouts" -``` - -## How to use - -[..] - -## Credits - -This npm package is based on the Bootstrap examples: - -- [Bootstrap Color Modes](https://github.com/twbs/examples/tree/main/color-modes) -- [Bootstrap w/ Vite](https://github.com/twbs/examples/tree/main/vite) - - diff --git a/src/content/docs/guides/integrations/core.mdx b/src/content/docs/guides/integrations/core.mdx deleted file mode 100644 index a79eaed84..000000000 --- a/src/content/docs/guides/integrations/core.mdx +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: "@thulite/core" -description: Core integration for Thulite -type: integration -stub: false -service: "Core" -category: other ---- - -# Thulite core - -Official core integration for Thulite. - -## Official Resources - -- [GitHub Repository](https://github.com/thuliteio/core) - -## Installation - -```bash -npm i @thulite/core -``` - -## Setup - -Add mounts to `./config/_default/module.toml`: - -```toml -[[mounts]] - source = "node_modules/@thulite/core/assets" - target = "assets" - -[[mounts]] - source = "node_modules/@thulite/core/layouts" - target = "layouts" - -[[mounts]] - source = "assets" - target = "assets" - -[[mounts]] - source = "layouts" - target = "layouts" -``` - -Add to `./config/_default/hugo.toml`: - -```toml -baseurl = "http://localhost/" -canonifyURLs = false -disableAliases = true -disableHugoGeneratorInject = true -disableKinds = ["taxonomy", "term"] -enableEmoji = true -enableGitInfo = false -enableRobotsTXT = true -languageCode = "en-US" -paginate = 7 -rssLimit = 10 - -[outputs] - home = ["HTML"] - -[caches] - [caches.getjson] - dir = ":cacheDir/:project" - maxAge = -1 - [caches.getcsv] - dir = ":cacheDir/:project" - maxAge = -1 - [caches.images] - dir = ":cacheDir/images" - maxAge = "1440h" - [caches.assets] - dir = ":cacheDir/:project" - maxAge = -1 - [caches.getresource] - dir = ":cacheDir/:project" - maxage = '1h' - -[sitemap] - changefreq = "monthly" - filename = "sitemap.xml" - priority = 0.5 - -[minify.tdewolff.html] - keepWhitespace = false -``` - -## Credits - -This npm package is based on: - -- [Really getting started with Hugo](https://www.brycewray.com/posts/2022/07/really-getting-started-hugo/) \ No newline at end of file diff --git a/src/content/docs/guides/integrations/doks-core.mdx b/src/content/docs/guides/integrations/doks-core.mdx deleted file mode 100644 index f9f56c1fd..000000000 --- a/src/content/docs/guides/integrations/doks-core.mdx +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "@thulite/doks-core" -description: Core integration for the Doks theme -type: integration -stub: false -service: "Doks Core" -category: theme ---- - -Core integration for the Doks theme. - -[..] diff --git a/src/content/docs/guides/integrations/images.mdx b/src/content/docs/guides/integrations/images.mdx deleted file mode 100644 index 34fd8d5df..000000000 --- a/src/content/docs/guides/integrations/images.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "@thulite/images" -description: Official Images integration for Thulite -type: integration -stub: false -service: "Images" -category: other ---- -import List from '~/components/List.astro'; - -[Images](https://images.thulite.io/) is the official Images integration for the Thulite framework. - -## Official Resources - - -- [Getting Started](https://images.thulite.io/docs/start-here/getting-started/) -- [GitHub repository](https://github.com/thuliteio/images) - diff --git a/src/content/docs/guides/integrations/inline-svg.mdx b/src/content/docs/guides/integrations/inline-svg.mdx deleted file mode 100644 index 7307d1a8e..000000000 --- a/src/content/docs/guides/integrations/inline-svg.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "@thulite/inline-svg" -description: Official Inline SVG integration for Thulite -type: integration -stub: false -service: "Inline SVG" -category: other ---- -import List from '~/components/List.astro'; - -[Inline SVG](https://svg.thulite.io/) is the official Inline SVG integration for the Thulite framework. - -## Official Resources - - -- [Getting Started](https://svg.thulite.io/docs/start-here/getting-started/) -- [GitHub repository](https://github.com/thuliteio/inline-svg) - diff --git a/src/content/docs/guides/integrations/seo.mdx b/src/content/docs/guides/integrations/seo.mdx deleted file mode 100644 index 3d77eb4e9..000000000 --- a/src/content/docs/guides/integrations/seo.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "@thulite/seo" -description: Official SEO integration for Thulite -type: integration -stub: false -service: "SEO" -category: other ---- -import List from '~/components/List.astro'; - -[SEO](https://seo.thulite.io/) is the official SEO integration for the Thulite framework. - -## Official Resources - - -- [Getting Started](https://seo.thulite.io/docs/start-here/getting-started/) -- [GitHub repository](https://github.com/thuliteio/seo) - diff --git a/src/content/docs/guides/integrations/tailwind.mdx b/src/content/docs/guides/integrations/tailwind.mdx deleted file mode 100644 index 0f5246fdb..000000000 --- a/src/content/docs/guides/integrations/tailwind.mdx +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "@thulite/tailwindcss" -description: Tailwind CSS integration for Thulite -type: integration -stub: false -service: "Tailwind CSS" -category: renderer ---- - -Tailwind CSS integration for Thulite. - -[..] diff --git a/src/content/docs/guides/internationalization.md b/src/content/docs/guides/internationalization.md deleted file mode 100644 index ae0ab1e16..000000000 --- a/src/content/docs/guides/internationalization.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: "Internationalization" -description: A reference page in my new Starlight docs site. ---- diff --git a/src/content/docs/guides/static.md b/src/content/docs/guides/static.md deleted file mode 100644 index 718748de7..000000000 --- a/src/content/docs/guides/static.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: "Static" -description: A reference page in my new Starlight docs site. ---- diff --git a/src/content/docs/guides/themes.mdx b/src/content/docs/guides/themes.mdx deleted file mode 100644 index 38cf55560..000000000 --- a/src/content/docs/guides/themes.mdx +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Add a theme to Thulite -description: A guide in my new Starlight docs site. ---- -import ThemesGuidesNav from '~/components/ThemesGuidesNav.astro'; - -Guides lead a user through a specific task they want to accomplish, often with a sequence of steps. -Writing a good guide requires thinking about what your users are trying to do. - -## Official Themes - - diff --git a/src/content/docs/guides/themes/bolt.mdx b/src/content/docs/guides/themes/bolt.mdx deleted file mode 100644 index 6ed73674a..000000000 --- a/src/content/docs/guides/themes/bolt.mdx +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Bolt" -description: Bolt theme guide for Thulite -type: themes -stub: false -service: Bolt ---- diff --git a/src/content/docs/guides/themes/doks.mdx b/src/content/docs/guides/themes/doks.mdx deleted file mode 100644 index 50edc2e11..000000000 --- a/src/content/docs/guides/themes/doks.mdx +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Doks" -description: Doks theme guide for Thulite -type: themes -stub: false -service: Doks ---- diff --git a/src/content/docs/guides/upgrade-to/v2.mdx b/src/content/docs/guides/upgrade-to/v2.mdx deleted file mode 100644 index 9f89ca8f9..000000000 --- a/src/content/docs/guides/upgrade-to/v2.mdx +++ /dev/null @@ -1,169 +0,0 @@ ---- -title: Upgrade to Thulite v2 -description: A guide in my new Starlight docs site. ---- -import { Tabs, TabItem } from '@astrojs/starlight/components'; - -This guide will help you migrate from Thulite v1 to Thulite v2. - -## Prerequisites - -- __Node.js__ - `v20.11.0` or higher — run `node -v` to check. -- __Hugo extended__ - `v0.125.0` or higher — run `hugo version` to check. -- __Text editor__ - We recommend [VS Code](https://code.visualstudio.com/) — see also [Editor Setup](/editor-setup/). -- __Terminal__ - Thulite is accessed through its command-line interface (CLI). - -## Upgrading - -You can upgrade your project by following the steps below. - -### 1. Clean dependencies - -Clean dependencies currently installed to avoid conflicts. - - - -```bash -npm run clean:install -``` - - -```bash -pnpm run clean:install -``` - - -```bash -yarn run clean:install -``` - - - -### 2. Update `package.json` - -Replace the contents of your project's `package.json` with the following: - -```json -// package.json -{ - "name": "thulite-project", - "version": "0.0.0", - "description": "Thulite", - "author": "Thulite", - "license": "MIT", - "scripts": { - "create": "hugo new", - "dev": "hugo server --disableFastRender --noHTTPCache", - "format": "prettier **/** -w -c", - "build": "hugo --minify --gc", - "preview": "vite preview --outDir public" - }, - "engines": { - "node": ">=20.11.0" - } -} -``` - -### 3. Install Thulite - -Install the latest Thulite project dependencies inside your project: - - - -```bash -npm install thulite@latest -``` - - -```bash -pnpm install thulite@latest -``` - - -```bash -yarn add thulite@latest -``` - - - -### 4. Install Prettier and Vite - -Install the latest version of Prettier and Vite — as `devDependencies`: - - - -```bash -npm install -D prettier@latest vite@latest -``` - - -```bash -pnpm install -D prettier@latest vite@latest -``` - - -```bash -yarn add -D prettier@latest vite@latest -``` - - - -### 5. Install integrations - -Optionally, install the the recommended integrations in your project: - - - -```bash -npm install @thulite/images@latest @thulite/seo@latest -``` - - -```bash -pnpm install @thulite/images@latest @thulite/seo@latest -``` - - -```bash -yarn add @thulite/images@latest @thulite/seo@latest -``` - - - -:::note[Need to continue?] -After upgrading Thulite to the latest version, you may not need to make any changes to your project at all! - -But, if you notice errors or unexpected behavior, please check below for what has changed that might need updating in your project. -::: - -## Configuration - -Check your project's configuration for Thulite and the recommended integrations: - -- [Create configuration files](/install/manual/#6-create-configuration-files) -- [Images](https://images.thulite.io/docs/start-here/manual-setup/) -- [SEO](https://seo.thulite.io/docs/start-here/manual-setup/) - -## Known Issues - -### ENOENT - -When you get an `ENOENT` error message, run the following command: - - - -```bash -npm run clean:install && npm install -``` - - -```bash -pnpm run clean:install && pnpm install -``` - - -```bash -yarn run clean:install && yarn install -``` - - diff --git a/src/content/docs/index.mdx b/src/content/docs/index.mdx deleted file mode 100644 index 8a9b0b523..000000000 --- a/src/content/docs/index.mdx +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Learn, troubleshoot, and explore Thulite -description: The all-in-one Hugo-npm framework. Fast, flexible, and easy-to-use. -template: splash -hero: - tagline: The all-in-one Hugo-npm framework. Fast, flexible, and easy-to-use. - image: - file: ~/assets/houston.webp - actions: - - text: Get Started - link: /getting-started/ - icon: right-arrow - variant: primary - - text: View on GitHub - link: https://github.com/thuliteio/thulite - icon: external ---- - -import { Card, CardGrid } from '@astrojs/starlight/components'; - -## Next steps - - - - Edit `src/content/docs/index.mdx` to see this page change. - - - Add Markdown or MDX files to `src/content/docs` to create new pages. - - - Edit your `sidebar` and other config in `astro.config.mjs`. - - - Learn more in [the Starlight Docs](https://starlight.astro.build/). - - diff --git a/src/content/docs/install/auto.mdx b/src/content/docs/install/auto.mdx deleted file mode 100644 index d4acb9154..000000000 --- a/src/content/docs/install/auto.mdx +++ /dev/null @@ -1,182 +0,0 @@ ---- -title: Install Thulite with the Automatic CLI -description: A reference page in my new Starlight docs site. ---- -import { Tabs, TabItem } from '@astrojs/starlight/components'; -import { LinkCard, CardGrid } from '@astrojs/starlight/components'; - -Ready to install Thulite? Follow this guide to using the `create thulite` CLI to get started. - -:::note[Prefer to install Thulite manually?] -Read our [step-by-step manual installation guide](/install/manual/) instead. -::: - -## Prerequisites - -- __Node.js__ - `v20.11.0` or higher — run `node -v` to check. -- __Hugo extended__ - `v0.125.0` or higher — run `hugo version` to check. -- __Text editor__ - We recommend [VS Code](https://code.visualstudio.com/) — see also [Editor Setup](/editor-setup/). -- __Terminal__ - Thulite is accessed through its command-line interface (CLI). - -## Installation - -`create-thulite` is the fastest way to start a new Thulite project from scratch. It will walk you through every step of setting up your new Thulite project. It allows you to choose from a few different official starter templates. Or, you can [use any existing project on GitHub with the `degit` command](/install/auto/#community). - -:::tip[Online previews] -Prefer to try Thulite in your browser? Visit [new.thulite.io](https://new.thulite.io/) to browse our starter templates and spin up a new Thulite project without ever leaving your browser. -::: - -### 1. Run the Setup Wizard - -Run the following command in your terminal to start our handy install wizard: - - - -```bash -npm create thulite@latest -``` - - -```bash -pnpm create thulite@latest -``` - - -```bash -yarn create thulite -``` - - - -You can run `create-thulite` anywhere on your machine, so there's no need to create a new empty directory for your project before you begin. If you don’t have an empty directory yet for your new project, the wizard will help create one for you automatically. - -If all goes well, you should see a "Done" message followed by the next steps. - -### 2. Install dependencies - -`cd` into your new project directory and install your projects' dependencies before continuing. - - - -```bash -npm install -``` - - -```bash -pnpm install -``` - - -```bash -yarn install -``` - - - -### 3. Start Thulite ✨ - -Thulite uses the Hugo development server that has everything you need for project development. The `dev` command will start the local development server so that you can see your new website in action for the very first time. - -Use your favorite package manager to run this command and start the Hugo development server. - - - -```bash -npm run dev -``` - - -```bash -pnpm run dev -``` - - -```bash -yarn run dev -``` - - - -If all goes well, Thulite should now be serving your project on [http://localhost:1313](http://localhost:1313/)! - -The Hugo server will listen for live file changes in your project directory, so you will not need to restart the server as you make changes during development. - -If you aren't able to open your project in the browser, go back to the terminal where you ran the `dev` command and look to see if an error occurred, or if your project is being served at a different URL than the one linked to above. - -## Starter Templates - -You can also start a new Thulite project based on an [official example](https://github.com/thuliteio/create-thulite#templates) by passing a `--template` argument to the `create thulite` command. Or, by using a tool like [degit](https://github.com/Rich-Harris/degit) to scaffold your project with the `main` branch of any GitHub repository. - -### Official - -Create a new project with an official example — for example with Doks: - - - -```bash -# Syntax: npm create thulite@latest -- --template -npm create thulite@latest -- --template doks -``` - - -```bash -# Syntax: pnpm create thulite@latest --template -pnpm create thulite@latest --template doks -``` - - -```bash -# Syntax: yarn create thulite --template -yarn create thulite@latest --template doks -``` - - - -### Community - -Create a new project based on a GitHub repository's main branch - - - -```bash -# Syntax: npx degit [project-directory] -npx degit h-enk/simply-cyan my-thulite-project -``` - - -```bash -# Syntax: pnpm dlx degit [project-directory] -pnpm dlx degit h-enk/simply-cyan my-thulite-project -``` - - -```bash -# Syntax: yarn dlx degit [project-directory] -yarn dlx degit h-enk/simply-cyan my-thulite-project -``` - - - -Explore our [themes and starters showcase](https://thulite.io/themes/) where you can browse themes for blogs, portfolios, documentation, landing pages, and more! Or, [search on GitHub](https://github.com/search?o=desc&q=thulite+starter&s=stars&type=repositories) for even more starter projects. - -## Next Steps - -Success! You are now ready to start building with Thulite! 🥳 - -Here are a few topics that we recommend exploring next. You can read them in any order. You can even leave our documentation for a bit and go play in your new Thulite project codebase, coming back here whenever you run into trouble or have a question. - - - - - - diff --git a/src/content/docs/install/manual.mdx b/src/content/docs/install/manual.mdx deleted file mode 100644 index ed3d58989..000000000 --- a/src/content/docs/install/manual.mdx +++ /dev/null @@ -1,478 +0,0 @@ ---- -title: Install Thulite manually -description: A reference page in my new Starlight docs site. ---- -import { Tabs, TabItem } from '@astrojs/starlight/components'; -import FileTree from '~/components/FileTree.astro'; - -This guide will walk you through the steps to manually install and configure a new Thulite project. - -:::tip[Prefer a quicker way to get started?] -Follow the [create thulite CLI wizard](/install/auto/) instead. -::: - -## Prerequisites - -- __Node.js__ - `v20.11.0` or higher — run `node -v` to check. -- __Hugo extended__ - `v0.125.0` or higher — run `hugo version` to check. -- __Text editor__ - We recommend [VS Code](https://code.visualstudio.com/) — see also [Editor Setup](/editor-setup/). -- __Terminal__ - Thulite is accessed through its command-line interface (CLI). - -## Installation - -If you prefer _not_ to use our automatic `create thulite` CLI tool, you can set up your project yourself by following the guide below. - -### 1. Create your directory - -Create an empty directory with the name of your project, and then navigate into it. - -```bash -mkdir my-thulite-project && cd my-thulite-project -``` - -Once you are in your new directory, create your project `package.json` file. This is how you will manage your project dependencies, including Thulite. If you aren’t familiar with this file format, run the following command to create one. - - - -```bash -npm init --yes -``` - - -```bash -pnpm init -``` - - -```bash -yarn init --yes -``` - - - -### 2. Install Thulite, Prettier and Vite - -First, install the Thulite project dependencies inside your project. - -:::note[Important] -Thulite must be installed locally, not globally. Make sure you are *not* running `npm install -g thulite`, `pnpm add -g thulite`, or `yarn add global thulite`. -::: - - - -```bash -npm install thulite -``` - - -```bash -pnpm install thulite -``` - - -```bash -yarn add thulite -``` - - - -Then, install Prettier and Vite — as `devDependencies`: - - - -```bash -npm install -D prettier vite -``` - - -```bash -pnpm install -D prettier vite -``` - - -```bash -yarn add -D prettier vite -``` - - - -Next, replace any placeholder “scripts” section of your `package.json` with the following: - -```json title="package.json" del={2} ins={3-7} - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "create": "hugo new", - "dev": "hugo server --disableFastRender --noHTTPCache", - "format": "prettier **/** -w -c", - "build": "hugo --minify --gc", - "preview": "vite preview --outDir public" - }, -``` - -You'll use these scripts later in the guide to start Thulite and run its different commands. - -### 3. Create your first page - -Thulite follows the Hugo content structure. In the root of your project, create an empty `content` directory, and then navigate into it. - -```bash -mkdir content && cd content -``` - -Next, create your new homepage: - - - -```bash -npm run create _index.md -``` - - -```bash -pnpm run create _index.md -``` - - -```bash -yarn run create _index.md -``` - - - -In the frontmatter set `draft: false` and add some content: - -```md ---- -title: "Hello, World" -date: 2024-05-13T11:22:40+02:00 -draft: false ---- - -This line is from `content/_index.md` 🚀 - -``` - -### 4. Create your first static asset - -You will also want to create a `static` directory to store your static assets. Hugo will always include these assets in your final build, so you can safely reference them from inside your layout templates. - -In the root of your project, create an empty `static` directory, and then navigate into it. - -```bash -mkdir static && cd static -``` - -In your text editor, create a new file in your directory at `static/robots.txt`. `robots.txt` is a simple file that most sites will include to tell search bots like Google how to treat your site. - -For this guide, copy-and-paste the following code snippet into your new file: - -```ini -# Example: Allow all bots to scan and index your site. -# Full syntax: https://developers.google.com/search/docs/advanced/robots/create-robots-txt -User-agent: * -Allow: / -``` - -### 5. Create `app.scss` - -In the root of your project, create an empty `assets/scss` directory, and then navigate into it. - -```bash -mkdir -p assets/scss && cd assets/scss -``` - -Add an `app.scss` file with the following: - -```scss -// app.scss -/** Import modern-css-reset */ -@import "modern-css-reset/src/reset"; - -:root { - --main-bg-color: yellowgreen; -} - -body { - background-color: var(--main-bg-color); - text-align: center; -} -``` - -### 6. Create configuration files - -Thulite follows Hugo's configuration setup. - -#### `config/_default` directory - -In the root of your project, create an empty `config/_default` directory, and then navigate into it. - -```bash -mkdir -p config/_default && cd config/_default -``` - -##### `hugo.toml` - -Add a `hugo.toml` file with the following: - -```toml -// hugo.toml -title = "Thulite" -baseurl = "http://localhost/" -canonifyURLs = false -disableAliases = true -disableHugoGeneratorInject = true -disableKinds = ["taxonomy", "term"] -enableEmoji = true -enableGitInfo = false -enableRobotsTXT = true -languageCode = "en-US" -paginate = 7 -rssLimit = 10 -summarylength = 20 # 70 (default) - -copyRight = "Copyright (c) 2020-2024 Thulite" - -[build.buildStats] - enable = true - -[outputs] - home = ["HTML"] - -[minify.tdewolff.html] - keepWhitespace = false - -``` - -##### `module.toml` - -Add a `module.toml` file with the following: - -```toml -//module.toml -# mounts -## archetypes -[[mounts]] - source = "archetypes" - target = "archetypes" - -## assets -[[mounts]] - source = "node_modules/@thulite/core/assets" - target = "assets" - -[[mounts]] - source = "assets" - target = "assets" - -## content -[[mounts]] - source = "content" - target = "content" - -## data -[[mounts]] - source = "data" - target = "data" - -## i18n -[[mounts]] - source = "i18n" - target = "i18n" - -## layouts -[[mounts]] - source = "node_modules/@thulite/core/layouts" - target = "layouts" - -[[mounts]] - source = "layouts" - target = "layouts" - -## static -[[mounts]] - source = "static" - target = "static" -``` - -##### `params.toml` - -Add a `params.toml` file with the following: - -```toml -// params.toml -# Hugo -title = "My Thulite site" -description = "Congrats on setting up a new Thulite project!" -images = ["cover.png"] - -[social] - twitter = "thulite" -``` - -#### `config` directory - -`cd` one level up. - -```bash -cd .. -``` - -##### `babel.config.js` - -Add a `babel.config.js` file with the following: - -```js -// babel.config.js -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - browsers: [ - // Best practice: https://github.com/babel/babel/issues/7789 - '>=1%', - 'not ie 11', - 'not op_mini all', - ], - }, - }, - ], - ], -}; -``` - -##### `postcss.config.js` - -Add a `postcss.config.js` file with the following: - -```js -// postcss.config.js -const autoprefixer = require('autoprefixer'); -const purgecss = require('@fullhuman/postcss-purgecss'); -const whitelister = require('purgecss-whitelister'); - -module.exports = { - plugins: [ - autoprefixer(), - purgecss({ - content: [ './hugo_stats.json' ], - extractors: [ - { - extractor: (content) => { - const els = JSON.parse(content).htmlElements; - return els.tags.concat(els.classes, els.ids); - }, - extensions: ['json'], - }, - ], - dynamicAttributes: [ - 'aria-expanded', - 'id', - 'size', - 'type', - ], - safelist: [ - 'active', - 'disabled', - 'hidden', - 'show', - 'img-fluid', - 'blur-up', - 'lazyloaded', - ...whitelister([ - './assets/scss/**/*.scss', - ]), - ], - }), - ], -} -``` - -#### Project directory - -`cd` one level up. - -```bash -cd .. -``` - -##### `.prettierignore` - -Add a `.prettierignore` file with the following: - -```txt -// .prettierignore -*.html -*.ico -*.png -*.jp*g -*.toml -*.*ignore -*.svg -*.xml -LICENSE -.npmrc -.gitkeep -*.woff* -*.txt -*.map -``` - -##### `.prettierrc.yaml` - -Add a `.prettierrc.yaml` file with the following: - -```yaml -// .prettierrc.yaml -# Default config -tabWidth: 4 -endOfLine: crlf -singleQuote: true -printWidth: 100000 -trailingComma: none -bracketSameLine: true -quoteProps: consistent -experimentalTernaries: true - -# Overrided config -overrides: - - files: ["*.md", "*.json", "*.yaml"] - options: - tabWidth: 2 - singleQuote: false - - files: ["*.scss"] - options: - singleQuote: false -``` - -## Next steps - -If you have followed the steps above, your project directory should now look like this: - - - -- assets/scss - - app.scss -- config - - _default - - hugo.toml - - module.toml - - params.toml - - babel.config.js - - postcss.config.js -- content - - _index.md -- node_modules/ -- static - - robots.txt -- .prettierignore -- .prettierrc.yaml -- package-lock.json # or yarn.lock, pnpm-lock.yaml, etc. -- package.json - - - -Congratulations, you're now set up to use Thulite! - -If you followed this guide completely, you can jump directly to [Step 3: Start Thulite](/install/auto/#3-start-thulite) to continue and learn how to run Thulite for the first time. diff --git a/src/content/docs/reference/configuration.md b/src/content/docs/reference/configuration.md deleted file mode 100644 index 56dc29bcf..000000000 --- a/src/content/docs/reference/configuration.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Configuration Reference -description: A reference page in my new Starlight docs site. -sidebar: - label: Configuration - order: 0 ---- - -Reference pages are ideal for outlining how things work in terse and clear terms. -Less concerned with telling a story or addressing a specific use case, they should give a comprehensive outline of what your documenting. - -## Further reading - -- Read [about reference](https://diataxis.fr/reference/) in the Diátaxis framework diff --git a/src/content/docs/reference/frontmatter.md b/src/content/docs/reference/frontmatter.md deleted file mode 100644 index b6a3f9651..000000000 --- a/src/content/docs/reference/frontmatter.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Frontmatter Reference -description: A reference page in my new Starlight docs site. -sidebar: - label: Frontmatter - order: 1 ---- - -Reference pages are ideal for outlining how things work in terse and clear terms. -Less concerned with telling a story or addressing a specific use case, they should give a comprehensive outline of what your documenting. - -## Further reading - -- Read [about reference](https://diataxis.fr/reference/) in the Diátaxis framework diff --git a/src/content/docs/reference/markdown.md b/src/content/docs/reference/markdown.md deleted file mode 100644 index 14cfd79b5..000000000 --- a/src/content/docs/reference/markdown.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Markdown Reference -description: A reference page in my new Starlight docs site. -sidebar: - label: Markdown - order: 3 -next: false ---- - -Reference pages are ideal for outlining how things work in terse and clear terms. -Less concerned with telling a story or addressing a specific use case, they should give a comprehensive outline of what your documenting. - -## Further reading - -- Read [about reference](https://diataxis.fr/reference/) in the Diátaxis framework diff --git a/src/content/docs/upgrade-thulite.mdx b/src/content/docs/upgrade-thulite.mdx deleted file mode 100644 index 8237e9034..000000000 --- a/src/content/docs/upgrade-thulite.mdx +++ /dev/null @@ -1,144 +0,0 @@ ---- -title: Upgrade Thulite -description: A guide in my new Starlight docs site. ---- -import { Tabs, TabItem } from '@astrojs/starlight/components'; - -This guide covers how to update your version of Thulite and related dependencies, how to learn what has changed from one version to the next, and how to understand Thulite' versioning system and corresponding documentation updates. - -## What has changed? - -See [all release notes](https://github.com/thuliteio/thulite/releases) or the [latest release notes](https://github.com/thuliteio/thulite/releases/latest). - -You can find an exhaustive list of all changes in [Thulite' changelog](https://github.com/thuliteio/thulite/blob/main/CHANGELOG.md), and important instructions for upgrading to each new [major version](#major-changes) in our [upgrade guides](#upgrade-guides). - -## Upgrade to the latest version - -To update Thulite and integrations to their current versions, use the appropriate command for your package manager. - - - -```bash -# Example: upgrade Thulite with Images and SEO integrations -npm install thulite@latest @thulite/images@latest @thulite/seo@latest -``` - - -```bash -# Example: upgrade Thulite with Images and SEO integrations -pnpm install thulite@latest @thulite/images@latest @thulite/seo@latest -``` - - -```bash -# Example: upgrade Thulite with Images and SEO integrations -yarn add thulite@latest @thulite/images@latest @thulite/seo@latest -``` - - - -### Install a specific version number - -To install a specific [version of Thulite](https://www.npmjs.com/package/thulite?activeTab=versions) or integrations, use the appropriate command for your package manager. - - - -```bash -npm install thulite@2.4.1 @thulite/images@3.1.0 -``` - - -```bash -pnpm install thulite@2.4.1 @thulite/images@3.1.0 -``` - - -```bash -yarn add thulite@2.4.1 @thulite/images@3.1.0 -``` - - - -## Documentation updates - -This documentation is updated for each [minor release](#minor-changes) and [major version](#major-changes) release. When new features are added, or existing usage changes, the docs will update to reflect the __current behavior of Thulite__. If your project is not updated, then you may notice some behaviors do not match the up-to-date documentation. - -New features are added to docs with the specific version number in which they were added. This means that if you have not updated to the latest release of Thulite, some documented features may be unavailable. Always check the `Added in:` version number and make sure your project is updated before attempting to use new features! - -If you have not upgraded to the latest major version of Thulite, you may encounter significant differences between the Thulite documentation and your project's behavior. We strongly recommend upgrading to the current major version of Thulite as soon as you are able. Both the code and the documentation for earlier versions is unsupported. - -### Upgrade Guides - -After every [major version release](#major-changes), you will find an __upgrade guide__ with information about important changes and instructions for upgrading your project code. - -The main Thulite documentation pages are always __accurate for the latest released version of Thulite__. They do not describe or compare to how things worked in previous versions, nor do they highlight updated or changed behavior. - -See the upgrade guides below for an explanation of changes, comparing the new version to the old. The upgrade guides include everything that could require you to change your own code: breaking changes, deprecations, feature removals and replacements as well as updated usage guidance. Each change to Thulite includes a "What should I do?" section to help you successfully update your project code. - -- [Upgrade to v2](/guides/upgrade-to/v2/) - -### Older docs (unmaintained) - -Documentation for older versions of Thulite is not maintained, but is available as a static snapshot. Use these versions of docs if you are unable to upgrade your project, but still wish to consult guides and reference: - -- [unmaintained v1.5.8 snapshot](https://deploy-preview-255--thulite.netlify.app/) - -## Semantic versioning - -Thulite attempts to adhere as much as possible to [semantic versioning](https://semver.org/), which is a set of rules developers use to determine how to assign a version number to a release. Semantic version follows a predictable pattern to inform users of the kind of changes they can expect from one version to the next. - -Semantic versioning enforces a pattern of `X.Y.Z` for software version numbers. These values represent __major (X)__, __minor (Y)__, and __patch (Z)__ updates. - -### Patch changes - -Patch changes are the least disruptive changes. They do not change the way you use Thulite, and no change to your own code is required when you update. - -When Thulite issues a "patch" version, the last number increases. (e.g. `thulite@2.4.1` -> `thulite@2.4.2`) - -Patches may be released for reasons such as: - -- Internal changes that do not change Thulite' functionality: - - refactors - - performance improvements - - increase or change in test coverage - - aligning with stated documentation and expected behavior -- Improvements to logging and error messages. -- Re-releases after a failed release. - -Patch changes also include __most bug fixes__, even in cases where users were taking advantage of existing unintended or undesirable behavior. - -### Minor changes - -Minor releases primarily introduce new features and improvements that you may wish to try, but require no changes to your code. Some existing features may also be `deprecated` (marked for deletion in a future version while continuing to function) in a minor release, giving you the opportunity to prepare for their eventual removal. - -Minor releases include changes such as: - -- __Deprecations__ of existing features/options with a warning that they will be removed in an upcoming major release. -- Introduction of new functionalities. -- Introduction of new options in the integration hooks. - -A minor release may also include smaller, patch changes at the same time. - -### Major changes - -Major releases will include breaking changes to at least some existing code. These breaking changes are always documented in an ["Upgrade to vX"](#upgrade-guides) guide in Thulite. - -Major releases allow Thulite to make significant changes not only to internal logic, but also to intended behavior and usage. Documentation will be updated to reflect the latest version only, and __static, unmaintained snapshots of older docs__ are available as a historical record for older projects that are not yet upgraded. - -Major releases include changes such as: - -- Removal of previously deprecated functionalities. -- Changes of existing functionalities. -- Changes of existing options in the integration hooks. - -A major release may also include some non-breaking changes and improvements that would normally be released separately in a minor or patch release. - -## Node.js support - -- Thulite supports the [latest Maintenance LTS version](https://nodejs.org/en/about/previous-releases#release-schedule) of Node.js. -- Thulite supports the [current Active LTS version](https://nodejs.org/en/about/previous-releases#release-schedule) of Node.js. -- Thulite can support odd versions of Node.js. - -## Hugo support - -- Thulite supports the [latest Hugo extended version](https://github.com/gohugoio/hugo/releases). diff --git a/src/data/logos.ts b/src/data/logos.ts deleted file mode 100644 index a14053b7f..000000000 --- a/src/data/logos.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { z } from 'astro:content'; - -/** Enforce logo types while preserving exact key type. */ -const LogoCheck = >(logos: T) => logos; - -export const logos = LogoCheck({ - alpinejs: { file: 'alpine-js.svg', padding: '.1875em' }, - aws: { file: 'aws.svg', padding: '.1875em' }, - buddy: { file: 'buddy.svg', padding: '.1625em' }, - cleavr: { file: 'cleavr.svg', padding: '0.125em 0.125em 0.1375em' }, - cloudflare: { file: 'cloudflare-pages.svg', padding: '.1875em' }, - crystallize: { file: 'crystallize.svg', padding: '.1875em' }, - 'create-react-app': { file: 'create-react-app.svg', padding: '.1875em' }, - datocms: { file: 'datocms.svg', padding: '0.25em 0.25em 0.25em 0.3em' }, - deno: { file: 'deno.svg', padding: '0' }, - edgio: { file: 'edgio.svg', padding: '.1625em' }, - github: { file: 'github.svg', padding: '0.125em 0.125em 0.1375em' }, - gitlab: { file: 'gitlab.svg', padding: '0' }, - core: { file: 'thulite.svg', padding: '.2125em' }, - images: { file: 'thulite.svg', padding: '.2125em' }, - 'inline-svg': { file: 'thulite.svg', padding: '.2125em' }, - seo: { file: 'thulite.svg', padding: '.2125em' }, - 'bolt-core': { file: 'thulite.svg', padding: '.2125em' }, - 'doks-core': { file: 'doks.svg', padding: '.2125em' }, - bootstrap: { file: 'bootstrap.svg', padding: '.1875em' }, - bolt: { file: 'thulite.svg', padding: '.2125em' }, - doks: { file: 'doks.svg', padding: '.2125em' }, - 'cabin-analytics': { file: 'cabin.svg', padding: '.25em' }, - 'fathom-analytics': { file: 'fathom-analytics.svg', padding: '.2125em' }, - 'google-analytics': { file: 'google-analytics.svg', padding: '.1875em' }, - 'plausible-analytics': { file: 'plausible.svg', padding: '.1875em' }, - 'google-cloud': { file: 'google-cloud.svg', padding: '.1875em' }, - 'google-firebase': { file: 'firebase.svg', padding: '.1875em' }, - heroku: { file: 'heroku.svg', padding: '.25em' }, - 'microsoft-azure': { file: 'microsoft-azure.svg', padding: '.1625em .1625em .2125em' }, - netlify: { file: 'netlify.svg', padding: '.1625em' }, - render: { file: 'render.svg', padding: '.1875em' }, - surge: { file: 'surge.svg', padding: '.125em' }, - vercel: { file: 'vercel.svg', padding: '.3em .3em .35em' }, - image: { file: 'astro-image.svg', padding: '.1875em' }, - lit: { file: 'lit.svg', padding: '.1875em' }, - mdx: { file: 'mdx.svg', padding: '.1em' }, - node: { file: 'node.svg', padding: '.1875em' }, - partytown: { file: 'partytown.svg', padding: '.2em .2em .25em .25em' }, - preact: { file: 'preact.svg', padding: '.1875em' }, - prefetch: { file: 'prefetch.svg', padding: '.25em' }, - react: { file: 'react.svg', padding: '.2em' }, - sitemap: { file: 'sitemap.svg', padding: '.1875em .25em .25em' }, - 'solid-js': { file: 'solid.svg', padding: '.1875em' }, - svelte: { file: 'svelte.svg', padding: '.1875em' }, - tailwind: { file: 'tailwind.svg', padding: '.1875em' }, - vue: { file: 'vue.svg', padding: '.3em .2em .2em' }, - flightcontrol: { file: 'flightcontrol.svg', padding: '0em 0em 0em' }, - sst: { file: 'sst.svg', padding: '0em 0.15em 0em' }, - buttercms: { file: 'buttercms.svg', padding: '.1875em' }, - builderio: { file: 'builderio.svg', padding: '.25em' }, - contentful: { file: 'contentful.svg', padding: '.05em' }, - cosmic: { file: 'cosmic.svg', padding: '.24em' }, - hygraph: { file: 'hygraph.svg', padding: '.1em .125em .1em .1em' }, - directus: { file: 'directus.svg', padding: '0 .1em' }, - ghost: { file: 'ghost.png', padding: '.125em' }, - 'decap-cms': { file: 'decap-cms.svg', padding: '0 .225em 0 .26em' }, - 'tina-cms': { file: 'tina-cms.svg', padding: '.15em' }, - payload: { file: 'payload.svg', padding: '.3em .25em .3em .3em' }, - prismic: { file: 'prismic.svg', padding: '.25em' }, - caisy: { file: 'caisy.svg', padding: '.05em' }, - sanity: { file: 'sanity.svg', padding: '.15em' }, - storyblok: { file: 'storyblok.svg', padding: '.3em .25em .25em' }, - spinal: { file: 'spinal.svg', padding: '.15em .15em' }, - space: { file: 'space.svg', padding: '.10em .10em' }, - wordpress: { file: 'wordpress.svg', padding: '.2em' }, - kinsta: { file: 'kinsta.svg', padding: '0' }, - gatsby: { file: 'gatsby.svg', padding: '0' }, - nextjs: { file: 'nextjs.svg', padding: '.125em' }, - jekyll: { file: 'jekyll.png', padding: '.1em .05em 0' }, - hugo: { file: 'hugo.svg', padding: '.125em' }, - eleventy: { file: 'eleventy.svg', padding: '.075em .05em .05em' }, - gridsome: { file: 'gridsome.svg', padding: '.15em' }, - pelican: { file: 'pelican.svg', padding: '.25em .225em .25em .25em' }, - sveltekit: { file: 'sveltekit.svg', padding: '.1875em' }, - vuepress: { file: 'vuepress.png', padding: '.2em .175em .175em' }, - docusaurus: { file: 'docusaurus.svg', padding: '.225em' }, - nuxtjs: { file: 'nuxtjs.svg', padding: '.25em' }, - keystonejs: { file: 'keystonejs.svg', padding: '.25em' }, - appwriteio: { file: 'appwriteio.svg', padding: '.05em' }, - supabase: { file: 'supabase.svg', padding: '.2em' }, - tigris: { file: 'tigris.svg', padding: '.3em .1em .15em' }, - cloudcannon: { file: 'cloudcannon.svg', padding: '.25em' }, - markdoc: { file: 'markdoc.svg', padding: '.35em 0 .35em .1em' }, - gitbook: { file: 'gitbook.svg', padding: '.25em' }, - 'frontmatter-cms': { file: 'frontmatter-cms.svg', padding: '.25em' }, - statamic: { file: 'statamic.svg', padding: '.2em' }, - xata: { file: 'xata.svg', padding: '0.234em 0.234em 0.1875em' }, - strapi: { file: 'strapi.svg', padding: '.25em' }, - microcms: { file: 'microcms.svg', padding: '.2em' }, - preprcms: { file: 'preprcms.svg', padding: '0' }, - 'kontent-ai': { file: 'kontent-ai.svg', padding: '.15em' }, - keystatic: { file: 'keystatic.svg', padding: '0' }, -}); - -export type LogoKey = keyof typeof logos; -const logoKeys = Object.keys(logos) as [LogoKey, ...LogoKey[]]; -export const isLogoKey = (val: string | undefined) => z.enum(logoKeys).parse(val); diff --git a/src/env.d.ts b/src/env.d.ts deleted file mode 100644 index acef35f17..000000000 --- a/src/env.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -/// diff --git a/src/i18n/ar/README.md b/src/i18n/ar/README.md deleted file mode 100644 index 478e46a9b..000000000 --- a/src/i18n/ar/README.md +++ /dev/null @@ -1,71 +0,0 @@ -# 📖 قائمة المصطلحات - -توجد هذه القائمة لتسهيل عملية الترجمة والتوحيد بين المترجمين. يمكنك استخدامها للتأكد من أنك تستخدم نفس المصطلحات التي تم استخدامها في الترجمات السابقة. - -## 📚 كلمات لا تحتاج إلى ترجمة - -هذه الكلمات لا تحتاج إلى ترجمة ويمكن استخدامها كما هي في اللغة العربية في النصوص المترجمة، لصعوبة ترجمتها بوضوح أو لأنها مصطلحات معروفة لدى المبرمجين والمترجمين. - -| English | Notes | -| --------------------- | ------------------------------------------------------------ | -| API | Application Programming Interface | -| Slot | The tag that astro offers | -| Programming Languages | JavaScript, TypeScript, JSX. No need to write them in Arabic | -| CLI | Please add `(CLI)` after the translated expression | - -## 📚 كلمات تحتاج إلى ترجمة - -تم الاعتماد على [قائمة مصطلحات المعلوماتية](https://archive.org/details/INFO2017ENAR/page/1/mode/2up) في اختيار الألفاظ والكلمات - -| English | Arabic | -| --------------- | --------------------------- | -| Framework | إطار عمل (إطار) | -| Component | مكوّن | -| Astro Islands | جزر أسترو | -| Layout | نسق | -| Template | قالب | -| Version | إصدار | -| Frontend | واجهة أمامية | -| Backend | قفوي | -| Editor | محرر | -| Upgrade | ترقية | -| Migrate | تحويل | -| Integration | تكامل | -| Deploy | نشر | -| Static | ثابت | -| Dynamic | ديناميكي | -| Routing | توجيه | -| Rendering | تصيير | -| Script | إخطاطة | -| Event Handling | تناول الأحداث | -| Import | إضافة / استيراد | -| Export | تصدير | -| Client | زبون | -| Endpoints | نقاط طرفية | -| Test | اختبار | -| Aliases | أسماء مستعارة / أسماء بديلة | -| Runtime | زمن التنفيذ | -| CLI | واجهة أسطر أوامر (CLI) | -| CMS | نظام إدارة المحتوى | -| Scope | مدى / نطاق | -| View Transition | انتقال المشهد | -| Adapter | موائمة | -| Server | خادم / مخدّم | -| Directive | موَجِّه | -| Variable | متغيّر | -| Syntax | تركيب نحوي | -| Fetch | جلب | -| Configuration | إعدادات | -| Reference | مرجع | -| Bundle | رزمة | -| Package | حزمة | -| Repository | خازنة / مستودعة | -| Privacy Policy | سياسة الخصوصية | -| Stub | مسودة | -| Recipe | مثال | - - - -> ⚠️ Recipe تترجم لـ **مثال** وليست ترجمة حرفية للكلمة، وذلك لأنها تعني مثال عملي لتطبيق ما، وليس مثالاً لطبخة ما. - -> ⚠️ هذه القائمة ليست شاملة ويمكنك إضافة المصطلحات التي تراها مناسبة لها. \ No newline at end of file diff --git a/src/i18n/ar/docsearch.ts b/src/i18n/ar/docsearch.ts deleted file mode 100644 index 9474e175b..000000000 --- a/src/i18n/ar/docsearch.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { DocSearchDictionary } from '../translation-checkers'; - -export default DocSearchDictionary({ - button: 'البحث', - placeholder: 'ابحث في الوثائق', - shortcutLabel: 'اضغط على / للبحث', - resultsFooterLede: 'هل تبحث عن إضافة أو ثيم لأسترو؟ هل تريد المزيد من المساعدة؟', - resultsFooterIntegrations: 'دليل إضافات أسترو', - resultsFooterThemes: 'معرض قوالب أسترو', - resultsFooterDiscord: 'انضم لنا على ديسكورد', - modal: { - searchBox: { - resetButtonTitle: 'إعادة تعيين البحث', - resetButtonAriaLabel: 'زر إعادة تعيين البحث', - cancelButtonText: 'إلغاء', - cancelButtonAriaLabel: 'زر الإلغاء', - }, - startScreen: { - recentSearchesTitle: 'عمليات البحث الأخيرة', - noRecentSearchesText: 'لا توجد عمليات بحث قديمة', - saveRecentSearchButtonTitle: 'تفضيل هذا البحث', - removeRecentSearchButtonTitle: 'إزالة هذا البحث من السجل', - favoriteSearchesTitle: 'المفضلة', - removeFavoriteSearchButtonTitle: 'إزالة هذا البحث من المفضلة', - }, - errorScreen: { - titleText: 'خطأ أثناء استرداد النتائج', - helpText: 'يرجى التحقق من حالة اتصالك بالإنترنت.', - }, - footer: { - selectText: 'للاختيار', - selectKeyAriaLabel: 'اضغط على المفتاح', - navigateText: 'للتنقل', - navigateUpKeyAriaLabel: 'اضغط سهم أعلى للتنقل للأعلى', - navigateDownKeyAriaLabel: 'اضغط سهم أسفل للتنقل للأسفل', - closeText: 'للإغلاق', - closeKeyAriaLabel: 'اضغط esc للإغلاق', - searchByText: 'بحث عبر', - }, - noResultsScreen: { - noResultsText: 'لم يتم العثور على أي نتائج لـ', - suggestedQueryText: 'جرب البحث عن', - reportMissingResultsText: 'هل تعتقد أنك وجدت خطأ؟', - reportMissingResultsLinkText: 'أخبرنا.', - }, - }, -}); diff --git a/src/i18n/ar/nav.ts b/src/i18n/ar/nav.ts deleted file mode 100644 index 75d50ce90..000000000 --- a/src/i18n/ar/nav.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { NavDictionary } from '../translation-checkers'; - -export default NavDictionary({ - // Start Here - startHere: 'ابدأ هنا', - 'getting-started': 'دليل البداية', - install: 'التثبيت', - 'editor-setup': 'إعداد المحرر', - 'guides/upgrade-to/v3': 'الترقية إلى الإصدار 3', - - // Core Concepts - coreConcepts: 'المفاهيم الأساسية', - 'concepts/why-astro': 'لماذا أسترو؟', - 'concepts/islands': 'جزر أسترو', - - // Tutorials - tutorials: 'الدروس', - 'blog-tutorial': 'إنشاء مدونة', - - // Basics - basics: 'الأساسيات', - 'core-concepts/project-structure': 'هيكل المشروع', - 'core-concepts/astro-components': 'المكوّنات', - 'core-concepts/astro-pages': 'الصفحات', - 'core-concepts/layouts': 'النسق', - - // Examples - examples: 'الأمثلة', - 'guides/migrate-to-astro': 'التحويل إلى أسترو', - 'guides/cms': 'ربط نظام إدارة المحتوى', - 'guides/backend': 'إضافة خدمات قفويّة', - 'guides/integrations-guide': 'إضافة التكاملات', - 'guides/deploy': 'نشر موقعك', - 'guides/recipes': 'المزيد من الأمثلة', - - // Guides - features: 'الدليل', - 'core-concepts/astro-syntax': 'التركيب النحوي لأسترو', - 'core-concepts/framework-components': 'مكوّنات أطر الويب الأخرى', - 'core-concepts/routing': 'التوجيه', - 'guides/markdown-content': 'ماركداون و MDX', - 'guides/content-collections': 'مجموعات المحتوى', - 'guides/client-side-scripts': 'الإخطاطات وتناول الأحداث', - 'guides/styling': 'الطُرُز و CSS', - 'guides/images': 'الصور', - 'guides/fonts': 'الخطوط', - 'guides/imports': 'الإضافات', - 'guides/server-side-rendering': 'التصيير على الخادم', - 'core-concepts/endpoints': 'النقاط الطرفية', - 'guides/data-fetching': 'جلب البيانات', - 'guides/middleware': 'الوسيط', - 'guides/testing': 'الاختبار', - 'guides/view-transitions': 'انتقال المشهد', - 'guides/troubleshooting': 'حل المشاكل', - - // Configuration - configuration: 'الإعدادات', - 'guides/configuring-astro': 'ملف إعدادات أسترو', - 'guides/typescript': 'TypeScript', - 'guides/aliases': 'الأسماء المستعارة للإضافات', - 'guides/environment-variables': 'متغيرات البيئة', - - // Reference - reference: 'المراجع', - 'reference/configuration-reference': 'الإعدادات', - 'reference/api-reference': 'API زمن التنفيذ', - 'reference/integrations-reference': 'API التكاملات', - 'reference/adapter-reference': 'API الموائِم', - 'reference/image-service-reference': 'API خدمة الصور', - 'reference/directives-reference': 'توجيهات القوالب', - 'reference/cli-reference': 'واجهة سطر الأوامر (CLI) لأسترو', - 'reference/error-reference': 'مرجع الأخطاء', - 'guides/publish-to-npm': 'تنسيق حزمة NPM', -}); diff --git a/src/i18n/ar/ui.ts b/src/i18n/ar/ui.ts deleted file mode 100644 index 012d4c00f..000000000 --- a/src/i18n/ar/ui.ts +++ /dev/null @@ -1,127 +0,0 @@ -import { UIDictionary } from '../translation-checkers'; - -export default UIDictionary({ - 'a11y.skipLink': 'اقفز إلى المحتوى', - 'a11y.sectionLink': 'قسم بعنوان', - 'navbar.a11yTitle': 'القمة', - // Site settings - 'site.title': 'مستندات أسترو', - 'site.description': 'انشئ مواقع ويب أسرع باستخدام ', - 'site.og.imageSrc': '/default-og-image.png?v=1', - 'site.og.imageAlt': - 'شعار أسترو على فضاء مليئ بالنجوم، مع كوكب أرجواني يشبه زحل يطفو في المقدمة اليمنى', - // Left Sidebar - 'leftSidebar.a11yTitle': 'أساسي', - 'leftSidebar.learnTab': 'تعلّم', - 'leftSidebar.referenceTab': 'مرجع', - 'leftSidebar.viewInEnglish': 'اعرض باللغة الإنجليزية', - 'leftSidebar.sponsoredBy': 'برعاية', - // Right Sidebar - 'rightSidebar.a11yTitle': 'ثانوي', - 'rightSidebar.onThisPage': 'في الصفحة الحالية', - 'rightSidebar.overview': 'نظرة عامة', - 'rightSidebar.community': 'المجتمع', - 'rightSidebar.joinDiscord': 'انضم إلينا على Discord', - 'rightSidebar.readBlog': 'اقرأ منشورات مدونتنا', - 'rightSidebar.openCollective': 'Open Collective', - 'rightSidebar.contribute': 'ساهم', - 'rightSidebar.contributorGuides': 'أدلة المساهمين', - 'rightSidebar.editPage': 'عدل هذه الصفحة', - 'rightSidebar.translatePage': 'ترجم هذه الصفحة', - 'rightSidebar.github': 'مستندات أسترو على GitHub', - // Footer - 'footer.privacyPolicy': 'سياسة الخصوصية', - // `` acessibility labels - 'themeToggle.useLight': 'استخدم الوضع النهاري', - 'themeToggle.useDark': 'استخدم الوضع الليلي', - // Used in previous/next page links at the bottom of pages - 'articleNav.nextPage': 'الصفحة التالية', - 'articleNav.prevPage': 'عودة', - // Used in ``: Added in: v0.24.0 [NEW] - 'since.addedIn': 'أُضيفت في:', - 'since.new': 'جديد', - 'since.beta': 'تجريبي', - // Installation Guide - 'install.autoTab': 'CLI أوتوماتيكي', - 'install.manualTab': 'التثبيت اليدوي', - // `` vocabulary - 'deploy.sectionTitle': 'دليل النشر', - 'deploy.altSectionTitle': 'المزيد من أدلة النشر', - 'deploy.filterLabel': 'تصفية حسب نوع النشر', - 'deploy.ssrTag': 'SSR التصيير على الخادم', - 'deploy.staticTag': 'ثابت', - // CMS Guides vocabulary - 'cms.navTitle': 'المزيد من أدلة أنظمة إدارة المحتوى', - // Migration Guides vocabulary - 'migration.navTitle': 'المزيد من أدلة التحويل', - // Recipes vocabulary - 'recipes.navTitle': 'المزيد من الأمثلة', - // `` vocabulary - 'recipesLink.singular': 'مثال ذو صلة:', - 'recipesLink.plural': 'أمثلة ذات صلة', - // `` fallback text - 'contributors.seeAll': 'اعرض كل المساهمين', - // Fallback content notice shown when a page is not yet translated - 'fallbackContent.notice': - 'هذه الصفحة غير متوفرة باللغة العربية، لذا سنعرضها بالإنجليزية. يمكنك المساهمة عن طريق ترجمتها بنفسك!', - 'fallbackContent.linkText': 'تعرف على المزيد حول كيفية المساهمة', - // 404 Page - '404.title': 'صفحة غير موجودة', - '404.content': 'الصفحة التي تبحث عنها غير موجودة في مجموعتنا الشمسية.', - '404.linkText': 'خذني إلى الصفحة الرئيسية', - // Aside component default labels - 'aside.note': 'ملحوظة', - 'aside.tip': 'نصيحة', - 'aside.caution': 'تنبيه', - 'aside.danger': 'تحذير', - // `` vocabulary - 'languageSelect.label': 'اختر لغة', - // Integrations vocabulary - 'integrations.changelog': 'سجل التغييرات', - 'integrations.footerTitle': 'المزيد من الإضافات', - 'integrations.renderers': 'أطر عمل الواجهات', - 'integrations.adapters': 'محولات تصيير على الخادم SSR', - 'integrations.others': 'أخرى', - // Checklist component - 'checklist.or': 'أو', - // Multiple Choice component - 'multipleChoice.defaultCorrect': 'صحيح!', - 'multipleChoice.defaultIncorrect': 'حاول مرة أخرى!', - 'multipleChoice.submitLabel': 'إرسال', - // Tutorial Progress - 'progress.todo': 'قيد الإنجاز', - 'progress.done': 'مكتمل', - // Tutorial Navigation - 'tutorial.trackerLabel': 'متتبع البرنامج التعليمي', - 'tutorial.unit': 'وحدة', - // Tutorial - 'tutorial.getReady': 'استعد لـ…', - // Feedback Fish widget - 'feedback.button': 'أرسل لنا ملاحظاتك', - 'feedback.a11yLabel': 'نموذج الملاحظات', - 'feedback.formTitle': 'بماذا تفكّر؟', - 'feedback.categoryGroupLabel': 'اختر فئة الملاحظة المناسبة', - 'feedback.issue': 'مشكلة', - 'feedback.createIssue': 'انشئ مشكلة على GitHub', - 'feedback.idea': 'فكرة', - 'feedback.other': 'أخرى', - 'feedback.messageA11yLabel': 'رسالتك', - 'feedback.placeholder': 'ما الي الذي تريد قوله؟', - 'feedback.submit': 'أرسل', - 'feedback.close': 'أغلق', - 'feedback.success': 'شكرًا! تم إرسال ملاحظاتك بنجاح.', - // `` component - 'fileTree.directoryLabel': 'دليل', - // Code snippet vocabulary - 'expressiveCode.terminalWindowFallbackTitle': 'نافذة طرفيّة', - 'expressiveCode.copyButtonTooltip': 'نسخ إلى الحافظة', - 'expressiveCode.copyButtonCopied': 'تم النسخ!', - // Backend Guides vocabulary - 'backend.navTitle': 'المزيد من أدلة الخدمات القفويّة', - 'stub.title': 'قم بتحرير هذه المسودة', - 'stub.subtitle': 'هذه المسودة تحتاج إلى مساعدتكم!', - 'stub.description.migration': - 'هل تريد المساهمة في هذا الدليل؟ هل لديك منشور في المدونة أو فيديو أو مصدر آخر لمشاركته حول التحويل من هذه التقنية إلى Astro؟', - 'stub.description.cms': 'هل تعلم المزيد عن كيفية استخدام نظام إدارة المحتوى هذا مع Astro؟', - 'stub.description.backend': 'هل تعلم المزيد عن كيفية استخدام هذه الخدمة القفويّة مع Astro؟', -}); diff --git a/src/i18n/bcp-normalize.ts b/src/i18n/bcp-normalize.ts deleted file mode 100644 index 4fc02852f..000000000 --- a/src/i18n/bcp-normalize.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Simplified method for normalizing language tags. - * We use `bcp-47-normalize` elsewhere, but this is a little presumptuous - * and strips region identifiers from `pt-BR` and `zh-CN`. - * @param tag Language tag to normalize, e.g. `pt-br` → `pt-BR` - */ - -export function normalizeLangTag(tag: string) { - if (!tag.includes('-')) return tag.toLowerCase(); - const [lang, region] = tag.split('-'); - return lang.toLowerCase() + '-' + region.toUpperCase(); -} diff --git a/src/i18n/de/README.md b/src/i18n/de/README.md deleted file mode 100644 index c37855724..000000000 --- a/src/i18n/de/README.md +++ /dev/null @@ -1,99 +0,0 @@ -# Anleitung für deutsche Übersetzungen - -Hallo und herzlich willkommen! Wir freuen uns sehr, dass du dich dafür interessierst, bei der deutschen Übersetzung der Astro-Dokumentation mitzuwirken. 😊🚀 - - -## Zielsetzung dieser Anleitung - -Wie bei Open Source-Projekten üblich wird unsere Dokumentation von vielen fleißigen Personen auf freiwilliger Basis übersetzt. Die aktuellen Übersetzungen stammen daher aus vielen unterschiedlichen Federn. Zudem ändert sich auch die Besetzung unseres Teams im Laufe der Zeit. - -Diese Anleitung soll dazu beitragen, dass sich das Ergebnis beim Lesen trotz aller verschiedenen Einflüsse wie ein Gesamtwerk mit gemeinsamem Schreibstil anfühlt. - -  - - -## Übersetzungs-Glossar - -| Originalbegriff | Übersetzung | Anmerkungen -|:----------------------------|:-------------------------------------|:------------ -| asset | Asset | Wird nicht übersetzt (gängiger Domänenbegriff). -| branch | der Branch | Wird nicht übersetzt (gängiger Domänenbegriff). -| build process | Erzeugungs- / Erstellungsvorgang | s.o. -| build time | Erzeugungs- / Erstellungszeitpunkt | s.o. -| to build | erzeugen | Da die Alternativen "bauen" oder gar "builden" merkwürdig klingen, wird diese Übersetzung vermutlich so bleiben. -| command line | die Kommandozeile | -| Commit | Commit | Siehe **Stilrichtlinien** -| CLI | die Kommandozeilen­schnittstelle | Beim ersten Vorkommen in einem Abschnitt kann `(CLI)` dahinter ergänzt werden. Aufgrund der Wortlänge wird die Aufnahme eines weichen Bindestrichs empfohlen: `Kommandozeilen­schnittstelle` -| CLI flag | die Kommandozeilen­option | Aufgrund der Wortlänge wird die Aufnahme eines weichen Bindestrichs empfohlen: `Kommandozeilen­option` -| configuration option | die Konfigurations­option | Wenn klar ist, dass es um die Konfiguration geht, kann auch nur "Option" verwendet werden. Bei der Langversion wird die Aufnahme eines weichen Bindestrichs empfohlen: `Konfigurations­option` -| deployment provider | der Hosting-Anbieter | -| to deploy | veröffentlichen | Wir vermeiden "ausliefern" aufgrund der Zweideutigkeit. -| directory | das Verzeichnis | -| domain | die Domäne | -| frontmatter | das Frontmatter | Wird nicht übersetzt (gängiger Domänenbegriff). -| frontmatter prop(erty) | die Frontmatter-Eigenschaft | -| frontmatter value | der Frontmatter-Wert | -| to hydrate (an element) | hydratisieren | Falsch hingegen wäre "hydrieren". -| island(s) | die Astro-Insel(n) | Der Präfix "Astro-" wird davorgesetzt, sofern wir über Astros Umsetzung der Inselarchitektur sprechen. -| media query | Media Query | Wird nicht übersetzt (gängiger Domänenbegriff). -| page | die Seite | Eine einzelne (HTML-)Seite. Wir vermeiden die längere Form "Webseite", um Verwechslungen mit "Website" zu vermeiden. -| partial hydration | die partielle Hydratation | Falsch hingegen wäre "Hydrierung". -| project root (directory) | das Projektstamm­verzeichnis | Aufgrund der Wortlänge wird die Aufnahme eines weichen Bindestrichs empfohlen: `Projektstamm­verzeichnis` -| repository | das Repository | Wird nicht übersetzt (gängiger Domänenbegriff). -| request | die Anfrage | -| script | das Skript | -| selective hydration | die selektive Hydratation | Falsch hingegen wäre "Hydrierung". -| site, website | die Website | Eine vollständige Webpräsenz unter einer gemeinsamen Domain, bestehend aus beliebig vielen (HTML-)Seiten. -| style, styles | Style, Styles | Wird nicht übersetzt (gängiger Domänenbegriff). -| scoped style | Scoped Style | Beim ersten Vorkommen sollte die deutsche Erklärung `(auf Komponenten begrenzte lokale CSS-Stile)` dahinter ergänzt werden. -| template | die Vorlage | -| ui | die Benutzeroberfläche | -| web | das Internet | - -  - - -## Stilrichtlinien (Style Guide) - -- Wir halten uns hinsichtlich Grammatik und Rechtschreibung an die Empfehlungen des Dudens und verwenden die neue deutsche Rechtschreibung. -- Wir verwenden eine informelle Ansprache mit kleingeschriebenem "du" (statt "Du" oder "Sie"). -- Wir bleiben möglichst nah am englischen Originaltext. - - Falls die Übersetzung sich aber nicht flüssig liest, weil z.B. im Deutschen übliche Überleitungen fehlen oder andere Formulierungen geläufiger sind, kann freier übersetzt werden, so lange die Bedeutung korrekt bleibt. -- Wir übersetzen alle Kommentare in Code-Beispielen. -- Wir übersetzen gerne auch Komponenten-, Klassen- und Variablennamen in Code-Beispielen. So signalisieren wir, dass diese Namen frei definierbar sind und keine "magischen Keywords" von Astro darstellen. -- Wir haben uns gegen das Gendern in unserer Übersetzung entschieden, weil es die Lesbarkeit der Texte verschlechtert und noch keine Duden-Vorgaben dafür existieren. Wir vermeiden lieber geschlechtsspezifische Formulierungen in unseren Übersetzungen und formulieren die Texte so, dass niemand sich ausgeschlossen fühlen muss. -- Wir vermeiden wertende Adjektive wie "einfach", "simpel" usw., da es immer Personen geben wird, denen das beschriebene Thema eben nicht "einfach" oder "simpel" vorkommt. Wir möchten niemandem den Eindruck vermitteln, fachlich "nicht gut genug" zu sein. -- Wir übersetzen nicht zwanghaft Begriffe, die aus einem Ökosystem-spezifischen Kontext stammen. Eine Wort für Wort Übersetzung ist meistens nicht möglich, sodass eine ausführliche Erklärung folgen müsste, was wiederum die Lesbarkeit verschlechtert. Ein gutes Beispiel hierfür wären Begriffe, wie `Commit`, `Pull Request` und `merge`, die teils einen ganzen Prozess im Git-Ökosystem beschreiben. - -  - - -## Häufige Fehler - -> **🚨 Wichtig:** Bitte sieh dir die nachfolgenden Fehler genau an und vermeide sie in deinen Übersetzungen. Insbesondere der erste Fehler (fehlende Bindestriche) tritt besonders häufig auf und verursacht so vermeidbare Arbeit bei Reviews. - -- Fehlende Bindestriche bei zusammengesetzten Wörtern - - Astro Projekt --> Astro-Projekt - - `` Feld --> ``-Feld - - Readme Datei --> Readme-Datei -- Falsche Übersetzung von Infoboxen ("Asides") - - Unsere Dokumentation enthält an manchen Stellen farblich hervorgehobene Boxen mit Hinweisen, Tipps und Warnungen. Diese sind im Markdown-Code mit drei Doppelpunkten abgegrenzt und beginnen mit dem Typnamen der Box (`:::note`, `:::tip`, `:::caution`). Dieser Typname ist **nicht** zu übersetzen, da ansonsten die Infobox nicht mehr funktioniert. - - Falls dem Typnamen eine vom Standard abweichende Überschrift in eckigen Klammern folgt (`:::caution[Here be dragons!]`), darf nur der Teil in eckigen Klammern übersetzt werden. -- Nichtverwendung der vom Duden empfohlenen Schreibweisen - - mit Hilfe --> mithilfe -- Falsch geschriebene Markennamen (wir halten uns an die offizielle Schreibweise auf der Hersteller-Website) - - Github --> GitHub - - Javascript --> JavaScript - - Typescript --> TypeScript - - VSCode --> VS Code - -  - - -## Hast du Ergänzungen oder Anregungen zu dieser Anleitung? - -Das ist super! Die Inhalte dieses Dokuments sind nämlich nicht als in Stein gemeißelte "Regeln von oben" zu verstehen, sondern bilden lediglich den aktuellen Konsens unseres deutschen Übersetzungsteams ab. - -Solltest du Verbesserungsideen oder Änderungswünsche zu diesem Dokument haben, besuch uns gerne auf Discord und sprich mit uns darüber. Wir sind stets offen für neue Anregungen! - -  diff --git a/src/i18n/de/docsearch.ts b/src/i18n/de/docsearch.ts deleted file mode 100644 index 1c8648d39..000000000 --- a/src/i18n/de/docsearch.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { DocSearchDictionary } from '../translation-checkers'; - -export default DocSearchDictionary({ - button: 'Suchen', - placeholder: 'Dokumentation durchsuchen', - shortcutLabel: 'Drücke / zum Suchen', - resultsFooterLede: - 'Auf der Suche nach einer Astro-Integration oder einer Vorlage? Brauchst du mehr Hilfe?', - resultsFooterIntegrations: 'Verzeichnis der Astro-Intergrationen', - resultsFooterThemes: 'Galerie mit Astro-Vorlagen', - resultsFooterDiscord: 'Tritt unserem Discord bei', - modal: { - searchBox: { - resetButtonTitle: 'Suchanfrage löschen', - resetButtonAriaLabel: 'Suchanfrage löschen', - cancelButtonText: 'Abbrechen', - cancelButtonAriaLabel: 'Abbrechen', - }, - startScreen: { - recentSearchesTitle: 'Neuliche Suchanfragen', - noRecentSearchesText: 'Keine neulichen Suchanfragen', - saveRecentSearchButtonTitle: 'Diese Suchanfrage speichern', - removeRecentSearchButtonTitle: 'Diese Suchanfrage aus dem Verlauf entfernen', - favoriteSearchesTitle: 'Favoriten', - removeFavoriteSearchButtonTitle: 'Diese Suchanfrage aus den Favoriten entfernen', - }, - errorScreen: { - titleText: 'Fehler beim Abrufen der Ergebnisse', - helpText: 'Du solltest den Status deiner Internetverbindung überprüfen', - }, - footer: { - selectText: 'zum Auswählen', - selectKeyAriaLabel: 'Eingabetaste', - navigateText: 'zum Navigieren', - navigateUpKeyAriaLabel: 'Pfeiltaste nach oben', - navigateDownKeyAriaLabel: 'Pfeiltaste nach unten', - closeText: 'zum Schließen', - closeKeyAriaLabel: 'Escapetaste', - searchByText: 'Suche von', - }, - noResultsScreen: { - noResultsText: 'Keine Ergebnisse gefunden für', - suggestedQueryText: 'Versuche es mit der Suche nach', - reportMissingResultsText: 'Glaubst du, einen Fehler gefunden zu haben?', - reportMissingResultsLinkText: 'Lass es uns wissen', - }, - }, -}); diff --git a/src/i18n/de/nav.ts b/src/i18n/de/nav.ts deleted file mode 100644 index 2815a7fd7..000000000 --- a/src/i18n/de/nav.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { NavDictionary } from '../translation-checkers'; - -export default NavDictionary({ - // Start Here - startHere: 'Beginne hier', - 'getting-started': 'Erste Schritte', - install: 'Installation', - 'editor-setup': 'Editor-Einrichtung', - 'guides/upgrade-to/v3': 'Upgrade auf Astro v3', - - // Core Concepts - coreConcepts: 'Kernkonzepte', - 'concepts/islands': 'Astro-Inseln', - 'concepts/why-astro': 'Warum Astro', - - // Tutorial - tutorials: 'Tutorials', - 'blog-tutorial': 'Baue einen Blog', - - // Basics - basics: 'Grundlagen', - 'core-concepts/project-structure': 'Projektstruktur', - 'core-concepts/astro-components': 'Komponenten', - 'core-concepts/astro-pages': 'Seiten', - 'core-concepts/layouts': 'Layouts', - - // Recipes - examples: 'Anleitungen', - 'guides/migrate-to-astro': 'Zu Astro migrieren', - 'guides/cms': 'Ein CMS verbinden', - 'guides/backend': 'Backend-Dienste hinzufügen', - 'guides/integrations-guide': 'Integrationen hinzufügen', - 'guides/deploy': 'Website veröffentlichen', - 'guides/recipes': 'Mehr Anleitungen', - - // Features - features: 'Themenbereiche', - 'core-concepts/astro-syntax': 'Astro-Syntax', - 'core-concepts/framework-components': 'UI-Frameworks', - 'core-concepts/routing': 'Routing', - 'guides/markdown-content': 'Markdown & MDX', - 'guides/content-collections': 'Content-Sammlungen', - 'guides/client-side-scripts': 'Skripte & Ereignisbehandlung', - 'guides/styling': 'CSS & Styling', - 'guides/images': 'Bilder', - 'guides/fonts': 'Schriftarten', - 'guides/imports': 'Importe', - 'guides/server-side-rendering': 'Serverseitiges Rendern (SSR)', - 'core-concepts/endpoints': 'Endpunkte', - 'guides/data-fetching': 'Abrufen von Daten', - 'guides/middleware': 'Middleware', - 'guides/testing': 'Testen', - 'guides/view-transitions': 'View Transitions', - 'guides/troubleshooting': 'Fehlerbehebung', - // 'guides/rss': 'RSS', - - configuration: 'Konfiguration', - 'guides/configuring-astro': 'Die Astro-Konfigurationsdatei', - 'guides/typescript': 'TypeScript', - 'guides/aliases': 'Import-Aliasnamen', - 'guides/environment-variables': 'Umgebungsvariablen', - - // Reference - reference: 'Referenz', - 'reference/configuration-reference': 'Konfiguration', - 'reference/api-reference': 'Laufzeit-API', - 'reference/integrations-reference': 'Integrations-API', - 'reference/adapter-reference': 'Adapter-API', - 'reference/image-service-reference': 'Bilderdienst-API', - 'reference/directives-reference': 'Vorlagen-Direktiven', - 'reference/cli-reference': 'Befehlszeilen­schnittstelle (CLI)', - 'reference/error-reference': 'Fehler-Referenz', - 'guides/publish-to-npm': 'NPM-Paketformat', -}); diff --git a/src/i18n/de/ui.ts b/src/i18n/de/ui.ts deleted file mode 100644 index 576c04b5b..000000000 --- a/src/i18n/de/ui.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { UIDictionary } from '../translation-checkers'; - -export default UIDictionary({ - 'a11y.skipLink': 'Zum Inhalt springen', - 'a11y.sectionLink': 'Abschnitt betitelt', - 'navbar.a11yTitle': 'Haupt', - // Site settings - 'site.title': 'Astro-Dokumentation', - 'site.description': 'Erstelle schnellere Websites mit weniger ausgeliefertem JavaScript.', - 'site.og.imageSrc': '/default-og-image.png?v=1', - 'site.og.imageAlt': - 'Astro-Logo im Weltraum mit Sternen und einem violetten, Saturn-ähnlichen Planeten rechts im Vordergrund', - // Left Sidebar - 'leftSidebar.a11yTitle': 'Primär', - 'leftSidebar.learnTab': 'Lernen', - 'leftSidebar.referenceTab': 'Referenz', - 'leftSidebar.viewInEnglish': 'Auf Englisch ansehen', - 'leftSidebar.sponsoredBy': 'Gesponsert von', - // Right Sidebar - 'rightSidebar.a11yTitle': 'Sekundär', - 'rightSidebar.onThisPage': 'Auf dieser Seite', - 'rightSidebar.overview': 'Überblick', - 'rightSidebar.community': 'Community', - 'rightSidebar.joinDiscord': 'Tritt unserem Discord bei', - 'rightSidebar.readBlog': 'Lies unsere Blog-Beiträge', - 'rightSidebar.openCollective': 'Unsere Open Collective-Seite', - 'rightSidebar.contribute': 'Wirke mit', - 'rightSidebar.contributorGuides': 'Leitfäden für Mitwirkende', - 'rightSidebar.editPage': 'Bearbeite diese Seite', - 'rightSidebar.translatePage': 'Übersetze diese Seite', - 'rightSidebar.github': 'Astro Docs auf GitHub', - // Footer - 'footer.privacyPolicy': 'Datenschutzerklärung', - // `` acessibility labels - 'themeToggle.useLight': 'Nutze das helle Theme', - 'themeToggle.useDark': 'Nutze das dunkle Theme', - // Used in previous/next page links at the bottom of pages - 'articleNav.nextPage': 'Nächste Seite', - 'articleNav.prevPage': 'Zurück', - // Used in ``: Added in: v0.24.0 [NEW] - 'since.addedIn': 'Hinzugefügt in:', - 'since.new': 'Neu', - 'since.beta': 'Beta', - // Installation Guide - 'install.autoTab': 'Automatische Installation', - 'install.manualTab': 'Manuelle Installation', - // `` vocabulary - 'deploy.sectionTitle': 'Veröffentlichungs-Anleitungen', - 'deploy.altSectionTitle': 'Weitere Veröffentlichungs-Anleitungen', - 'deploy.filterLabel': 'Nach Art filtern', - 'deploy.ssrTag': 'SSR', - 'deploy.staticTag': 'Statisch', - // CMS Guides vocabulary - 'cms.navTitle': 'Weitere CMS-Anleitungen', - // Migration Guides vocabulary - 'migration.navTitle': 'Weitere Migrations-Anleitungen', - // Recipes vocabulary - 'recipes.navTitle': 'Weitere Anleitungen', - // `` vocabulary - 'recipesLink.singular': 'Verwandte Anleitung:', - 'recipesLink.plural': 'Verwandte Anleitungen', - // `` fallback text - 'contributors.seeAll': 'Alle Mitwirkenden ansehen', - // Fallback content notice shown when a page is not yet translated - 'fallbackContent.notice': - 'Da diese Seite noch nicht auf Deutsch verfügbar ist, siehst du sie auf Englisch. Möchtest du uns helfen?', - 'fallbackContent.linkText': 'Übersetze diese Seite', - // 404 Page - '404.title': 'Nicht gefunden', - '404.content': 'Diese Seite befindet sich nicht in unserem Sonnensystem.', - '404.linkText': 'Bring mich nach Hause.', - // Aside component default labels - 'aside.note': 'Hinweis', - 'aside.tip': 'Tipp', - 'aside.caution': 'Achtung', - 'aside.danger': 'Gefahr', - // `` vocabulary - 'languageSelect.label': 'Sprache auswählen', - // Integrations vocabulary - 'integrations.changelog': 'Changelog', - 'integrations.footerTitle': 'Weitere Integrationen', - 'integrations.renderers': 'UI-Frameworks', - 'integrations.adapters': 'SSR-Adapter', - 'integrations.others': 'Sonstiges', - // Checklist component - 'checklist.or': 'oder', - // Multiple Choice component - 'multipleChoice.defaultCorrect': 'Korrekt!', - 'multipleChoice.defaultIncorrect': "Versuch's nochmal!", - 'multipleChoice.submitLabel': 'Absenden', - // Tutorial Progress - 'progress.todo': 'To-do', - 'progress.done': 'Erledigt', - // Tutorial Navigation - 'tutorial.trackerLabel': 'Tutorial Tracker', - 'tutorial.unit': 'Teil', - // Tutorial - 'tutorial.getReady': 'Mach dich bereit, …', - // Feedback Fish widget - 'feedback.button': 'Gib uns Feedback', - 'feedback.a11yLabel': 'Feedback-Formular', - 'feedback.formTitle': 'Worum geht es?', - 'feedback.categoryGroupLabel': 'Feedback-Typ wählen', - 'feedback.issue': 'Problem', - 'feedback.createIssue': 'Issue auf GitHub erstellen', - 'feedback.idea': 'Idee', - 'feedback.other': 'Sonstiges', - 'feedback.messageA11yLabel': 'Nachricht', - 'feedback.placeholder': 'Was sollen wir wissen?', - 'feedback.submit': 'Feedback abschicken', - 'feedback.close': 'Feedback-Formular schließen', - 'feedback.success': 'Danke! Wir haben dein Feedback bekommen.', - // `` component - 'fileTree.directoryLabel': 'Verzeichnis', - // Code snippet vocabulary - 'expressiveCode.terminalWindowFallbackTitle': 'Terminal-Fenster', - 'expressiveCode.copyButtonTooltip': 'In Zwischenablage kopieren', - 'expressiveCode.copyButtonCopied': 'Kopiert!', - // Backend Guides vocabulary - 'backend.navTitle': 'Weitere Backend-Anleitungen', - // Stubs vocabulary - 'stub.title': 'Erweitere diese Anleitung!', - 'stub.subtitle': 'Diese Anleitung ist ein Entwurf.', - 'stub.description.migration': - 'Möchtest du zu dieser Anleitung beitragen? Hast du einen Blogbeitrag, ein Video oder eine andere Informationsquelle über die Migration von dieser Technologie zu Astro, die du teilen möchtest?', - 'stub.description.cms': 'Weißt du mehr darüber, wie man dieses CMS mit Astro verwenden kann?', - 'stub.description.backend': - 'Weißt du mehr darüber, wie man diesen Backend-Dienst mit Astro verwenden kann?', -}); diff --git a/src/i18n/en/docsearch.ts b/src/i18n/en/docsearch.ts deleted file mode 100644 index 87fc299da..000000000 --- a/src/i18n/en/docsearch.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { DocSearchDictionary } from '../translation-checkers'; - -export default DocSearchDictionary({ - button: 'Search', - placeholder: 'Search docs', - shortcutLabel: 'Press / to search', - resultsFooterLede: 'Looking for an Astro integration or theme? Need more help?', - resultsFooterIntegrations: 'Astro integrations directory', - resultsFooterThemes: 'Astro themes showcase', - resultsFooterDiscord: 'Join us on Discord', - modal: {}, -}); diff --git a/src/i18n/en/nav.ts b/src/i18n/en/nav.ts deleted file mode 100644 index 3a534bf6a..000000000 --- a/src/i18n/en/nav.ts +++ /dev/null @@ -1,169 +0,0 @@ -/** - * This configures the navigation sidebar. - * All other languages follow this ordering/structure and will fall back to - * English for any entries they haven’t translated. - * - * - All entries MUST include `text` and `key` - * - Heading entries MUST include `header: true` and `type` - * - Link entries MUST include `slug` (which excludes the language code) - */ -export default [ - { text: 'Start Here', header: true, type: 'learn', key: 'startHere' }, - { text: 'Getting Started', slug: 'getting-started', key: 'getting-started' }, - { text: 'Installation', slug: 'install/auto', key: 'install' }, - { text: 'Editor Setup', slug: 'editor-setup', key: 'editor-setup' }, - { text: 'Upgrade to v3', slug: 'guides/upgrade-to/v3', key: 'guides/upgrade-to/v3' }, - - { text: 'Core Concepts', header: true, type: 'learn', key: 'coreConcepts' }, - { text: 'Why Astro', slug: 'concepts/why-astro', key: 'concepts/why-astro' }, - { text: 'Astro Islands', slug: 'concepts/islands', key: 'concepts/islands' }, - - { text: 'Tutorials', header: true, type: 'learn', key: 'tutorials' }, - { text: 'Build a Blog', slug: 'tutorial/0-introduction', key: 'blog-tutorial' }, - { - text: 'Extend with Content Collections', - slug: 'tutorials/add-content-collections', - key: 'add-collections-tutorial', - }, - { - text: 'Extend with View Transitions', - slug: 'tutorials/add-view-transitions', - key: 'add-transitions-tutorial', - }, - // { text: 'Thinking with Islands', slug: 'tutorial/0-introduction', key: 'island-tutorial' }, - - { text: 'Basics', header: true, type: 'learn', key: 'basics' }, - - { - text: 'Project Structure', - slug: 'core-concepts/project-structure', - key: 'core-concepts/project-structure', - }, - { - text: 'Components', - slug: 'core-concepts/astro-components', - key: 'core-concepts/astro-components', - }, - { text: 'Pages', slug: 'core-concepts/astro-pages', key: 'core-concepts/astro-pages' }, - { text: 'Layouts', slug: 'core-concepts/layouts', key: 'core-concepts/layouts' }, - { - text: 'Astro Template Syntax', - slug: 'core-concepts/astro-syntax', - key: 'core-concepts/astro-syntax', - }, - { - text: 'Rendering Modes', - slug: 'core-concepts/rendering-modes', - key: 'core-concepts/rendering-modes', - }, - - { text: 'Built-ins', header: true, type: 'learn', key: 'builtins' }, - { - text: 'Content Collections', - slug: 'guides/content-collections', - key: 'guides/content-collections', - }, - { - text: 'View Transitions', - slug: 'guides/view-transitions', - key: 'guides/view-transitions', - }, - { - text: 'Prefetch', - slug: 'guides/prefetch', - key: 'guides/prefetch', - }, - - { text: 'Add-ons', header: true, type: 'learn', key: 'addons' }, - { text: 'Add integrations', slug: 'guides/integrations-guide', key: 'guides/integrations-guide' }, - { - text: 'UI Frameworks', - slug: 'core-concepts/framework-components', - key: 'core-concepts/framework-components', - }, - { - text: 'SSR Adapters', - slug: 'guides/server-side-rendering', - key: 'guides/server-side-rendering', - }, - - { text: 'Recipes', header: true, type: 'learn', key: 'examples' }, - { text: 'Migrate to Astro', slug: 'guides/migrate-to-astro', key: 'guides/migrate-to-astro' }, - { text: 'Connect a CMS', slug: 'guides/cms', key: 'guides/cms' }, - { text: 'Add backend services', slug: 'guides/backend', key: 'guides/backend' }, - { text: 'Deploy your site', slug: 'guides/deploy', key: 'guides/deploy' }, - { text: 'More recipes', slug: 'recipes', key: 'guides/recipes' }, - - { text: 'Guides', header: true, type: 'learn', key: 'features' }, - { text: 'Routing', slug: 'core-concepts/routing', key: 'core-concepts/routing' }, - { text: 'Markdown', slug: 'guides/markdown-content', key: 'guides/markdown-content' }, - { - text: 'Scripts & Event Handling', - slug: 'guides/client-side-scripts', - key: 'guides/client-side-scripts', - }, - { text: 'CSS & Styling', slug: 'guides/styling', key: 'guides/styling' }, - { text: 'Images', slug: 'guides/images', key: 'guides/images' }, - { text: 'Fonts', slug: 'guides/fonts', key: 'guides/fonts' }, - { text: 'Imports', slug: 'guides/imports', key: 'guides/imports' }, - { text: 'Endpoints', slug: 'core-concepts/endpoints', key: 'core-concepts/endpoints' }, - { text: 'Data Fetching', slug: 'guides/data-fetching', key: 'guides/data-fetching' }, - { - text: 'Internationalization', - slug: 'guides/internationalization', - key: 'guides/internationalization', - }, - { text: 'Middleware', slug: 'guides/middleware', key: 'guides/middleware' }, - { text: 'Testing', slug: 'guides/testing', key: 'guides/testing' }, - { text: 'Troubleshooting', slug: 'guides/troubleshooting', key: 'guides/troubleshooting' }, - - { text: 'Configuration', header: true, type: 'learn', key: 'configuration' }, - { - text: 'The Astro Config File', - slug: 'guides/configuring-astro', - key: 'guides/configuring-astro', - }, - { text: 'TypeScript', slug: 'guides/typescript', key: 'guides/typescript' }, - { text: 'Import Aliases', slug: 'guides/aliases', key: 'guides/aliases' }, - { - text: 'Environment Variables', - slug: 'guides/environment-variables', - key: 'guides/environment-variables', - }, - - { text: 'Reference', header: true, type: 'api', key: 'reference' }, - { - text: 'Configuration', - slug: 'reference/configuration-reference', - key: 'reference/configuration-reference', - }, - { text: 'Runtime API', slug: 'reference/api-reference', key: 'reference/api-reference' }, - { - text: 'Integrations API', - slug: 'reference/integrations-reference', - key: 'reference/integrations-reference', - }, - { text: 'Adapter API', slug: 'reference/adapter-reference', key: 'reference/adapter-reference' }, - { - text: 'Image Service API', - slug: 'reference/image-service-reference', - key: 'reference/image-service-reference', - }, - { - text: 'Dev Overlay Plugin API', - slug: 'reference/dev-overlay-plugin-reference', - key: 'reference/dev-overlay-plugin-reference', - }, - { - text: 'Template Directives', - slug: 'reference/directives-reference', - key: 'reference/directives-reference', - }, - { text: 'The Astro CLI', slug: 'reference/cli-reference', key: 'reference/cli-reference' }, - { - text: 'Error Reference', - slug: 'reference/error-reference', - key: 'reference/error-reference', - }, - { text: 'NPM Package Format', slug: 'reference/publish-to-npm', key: 'guides/publish-to-npm' }, -] as const; diff --git a/src/i18n/en/ui.ts b/src/i18n/en/ui.ts deleted file mode 100644 index 0ea15eb7c..000000000 --- a/src/i18n/en/ui.ts +++ /dev/null @@ -1,138 +0,0 @@ -export default { - 'a11y.skipLink': 'Skip to Content', - 'a11y.sectionLink': 'Section titled', - 'navbar.a11yTitle': 'Top', - // Site settings - 'site.title': 'Astro Documentation', - 'site.description': 'Build faster websites with less client-side JavaScript.', - 'site.og.imageSrc': '/default-og-image.png?v=1', - 'site.og.imageAlt': - 'astro logo on a starry expanse of space, with a purple saturn-like planet floating in the right foreground', - // Left Sidebar - 'leftSidebar.a11yTitle': 'Primary', - 'leftSidebar.learnTab': 'Learn', - 'leftSidebar.referenceTab': 'Reference', - 'leftSidebar.viewInEnglish': 'View in English', - 'leftSidebar.sponsoredBy': 'Sponsored by', - // Right Sidebar - 'rightSidebar.a11yTitle': 'Secondary', - 'rightSidebar.onThisPage': 'On this page', - 'rightSidebar.overview': 'Overview', - 'rightSidebar.community': 'Community', - 'rightSidebar.joinDiscord': 'Join us on Discord', - 'rightSidebar.readBlog': 'Read our blog posts', - 'rightSidebar.openCollective': 'Our Open Collective', - 'rightSidebar.contribute': 'Contribute', - 'rightSidebar.contributorGuides': 'Contributor Guides', - 'rightSidebar.editPage': 'Edit this page', - 'rightSidebar.translatePage': 'Translate this page', - 'rightSidebar.github': 'Astro Docs on GitHub', - // Footer - 'footer.privacyPolicy': 'Privacy Policy', - // `` acessibility labels - 'themeToggle.useLight': 'Use light theme', - 'themeToggle.useDark': 'Use dark theme', - // Used in previous/next page links at the bottom of pages - 'articleNav.nextPage': 'Next Page', - 'articleNav.prevPage': 'Back', - // Used in ``: Added in: v0.24.0 [NEW] - 'since.addedIn': 'Added in:', - 'since.new': 'New', - 'since.beta': 'Beta', - // Installation Guide - 'install.autoTab': 'Automatic CLI', - 'install.manualTab': 'Manual Setup', - // `` vocabulary - 'deploy.sectionTitle': 'Deployment Guides', - 'deploy.altSectionTitle': 'More Deployment Guides', - 'deploy.filterLabel': 'Filter by deploy type', - 'deploy.ssrTag': 'SSR', - 'deploy.staticTag': 'Static', - // CMS Guides vocabulary - 'cms.navTitle': 'More CMS Guides', - // Analytics Guides vocabulary - 'analytics.navTitle': 'More Analytics Guides', - // Themes Guides vocabulary - 'themes.navTitle': 'More Official Themes', - // Migration Guides vocabulary - 'migration.navTitle': 'More Migration Guides', - // Recipes vocabulary - 'recipes.navTitle': 'More recipes', - // `` vocabulary - 'recipesLink.singular': 'Related recipe:', - 'recipesLink.plural': 'Related recipes', - // `` fallback text - 'contributors.seeAll': 'See all contributors', - // Fallback content notice shown when a page is not yet translated - 'fallbackContent.notice': - 'This page is not yet available in your language, so we’re showing you the English version. You can help by translating it!', - 'fallbackContent.linkText': 'Learn more about how you can contribute', - // 404 Page - '404.title': 'Not Found', - '404.content': 'This page isn’t in our solar system.', - '404.linkText': 'Take me home.', - // Aside component default labels - 'aside.note': 'Note', - 'aside.tip': 'Tip', - 'aside.caution': 'Caution', - 'aside.danger': 'Danger', - // `` vocabulary - 'languageSelect.label': 'Select language', - // Integrations vocabulary - 'integrations.changelog': 'Changelog', - 'integrations.footerTitle': 'More Integrations', - 'integrations.renderers': 'UI Frameworks', - 'integrations.themes': 'Themes', - 'integrations.adapters': 'SSR Adapters', - 'integrations.others': 'Other integrations', - 'integrations.navTitle': 'More integrations', - // Checklist component - 'checklist.or': 'or', - // Multiple Choice component - 'multipleChoice.defaultCorrect': 'Correct!', - 'multipleChoice.defaultIncorrect': 'Try again!', - 'multipleChoice.submitLabel': 'Submit', - // Tutorial Progress - 'progress.todo': 'To-do', - 'progress.done': 'Complete', - // Tutorial Navigation - 'tutorial.trackerLabel': 'Tutorial Tracker', - 'tutorial.unit': 'Unit', - // Tutorial - 'tutorial.getReady': 'Get ready to…', - // Feedback Fish widget - 'feedback.button': 'Give us feedback', - 'feedback.a11yLabel': 'Feedback form', - 'feedback.formTitle': 'What’s on your mind?', - 'feedback.categoryGroupLabel': 'Choose feedback category', - 'feedback.issue': 'Issue', - 'feedback.createIssue': 'Create GitHub Issue', - 'feedback.createIssue.description': 'Quickest way to alert our team of a problem.', - 'feedback.sendFeedback': 'Send us feedback', - 'feedback.sendFeedback.description': 'Send us a message directly.', - 'feedback.idea': 'Idea', - 'feedback.other': 'Other', - 'feedback.messageA11yLabel': 'Message', - 'feedback.placeholder': 'What do you want us to know?', - 'feedback.submit': 'Submit feedback', - 'feedback.close': 'Close feedback form', - 'feedback.success': 'Thanks! We received your feedback.', - // `` component - 'fileTree.directoryLabel': 'Directory', - // Code snippet vocabulary - 'expressiveCode.terminalWindowFallbackTitle': 'Terminal window', - 'expressiveCode.copyButtonTooltip': 'Copy to clipboard', - 'expressiveCode.copyButtonCopied': 'Copied!', - // Backend Guides vocabulary - 'backend.navTitle': 'More backend service guides', - // Stubs vocabulary - 'stub.title': 'Expand this stub!', - 'stub.subtitle': 'This guide is a stub.', - 'stub.description.migration': - 'Want to contribute to this guide? Have a blog post, video, or another resource to share about migrating from this technology to Astro?', - 'stub.description.cms': 'Know more about how to use this CMS with Astro?', - 'stub.description.backend': 'Know more about how to use this backend service with Astro?', - // Starlight banner - 'starlight.title': 'Want to build your own Docs?', - 'starlight.description': 'Grab this template to get started.', -}; diff --git a/src/i18n/es/docsearch.ts b/src/i18n/es/docsearch.ts deleted file mode 100644 index bbce84c45..000000000 --- a/src/i18n/es/docsearch.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { DocSearchDictionary } from '../translation-checkers'; - -export default DocSearchDictionary({ - button: 'Buscar', - placeholder: 'Buscar en la documentación', - shortcutLabel: 'Presiona / para buscar', - resultsFooterLede: '¿Buscas una integración o tema de Astro? ¿Necesitas más ayuda?', - resultsFooterIntegrations: 'Directorio de integraciones de Astro', - resultsFooterThemes: 'Galeria de temas de Astro', - resultsFooterDiscord: 'Únete a nosotros en Discord', - modal: {}, -}); diff --git a/src/i18n/es/nav.ts b/src/i18n/es/nav.ts deleted file mode 100644 index 7e2351168..000000000 --- a/src/i18n/es/nav.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { NavDictionary } from '../translation-checkers'; - -export default NavDictionary({ - startHere: 'Empezar Aquí', - 'getting-started': 'Cómo Empezar', - install: 'Instalación', - 'editor-setup': 'Configuración del Editor', - 'guides/upgrade-to/v3': 'Actualizar a v3', - - coreConcepts: 'Conceptos Principales', - 'concepts/why-astro': 'Por qué Astro', - 'concepts/islands': 'Islas de Astro', - - tutorials: 'Tutoriales', - 'blog-tutorial': 'Crear un blog', - 'add-collections-tutorial': 'Ampliar con Colecciones de Contenido', - 'add-transitions-tutorial': 'Ampliar con View Transitions', - - basics: 'Conceptos Básicos', - 'core-concepts/project-structure': 'Estructura del proyecto', - 'core-concepts/astro-components': 'Componentes', - 'core-concepts/astro-pages': 'Páginas', - 'core-concepts/layouts': 'Plantillas', - 'core-concepts/astro-syntax': 'Sintaxis de Astro', - 'core-concepts/rendering-modes': 'Modos de Renderizado', - - builtins: 'Funciones Integradas', - 'guides/content-collections': 'Colecciones de Contenido', - 'guides/view-transitions': 'View Transitions', - - addons: 'Complementos', - 'guides/integrations-guide': 'Agregar integraciones', - 'core-concepts/framework-components': 'Frameworks UI', - 'guides/server-side-rendering': 'Renderizado en el lado del servidor (SSR)', - - examples: 'Recetas', - 'guides/migrate-to-astro': 'Migrar a Astro', - 'guides/cms': 'Conectar un CMS', - 'guides/backend': 'Agregar servicios backend', - 'guides/deploy': 'Desplegar tu sitio', - 'guides/recipes': 'Más recetas', - - features: 'Guías', - 'core-concepts/routing': 'Enrutamiento', - 'guides/markdown-content': 'Markdown y MDX', - 'guides/client-side-scripts': 'Scripts y Manejo de Eventos', - 'guides/styling': 'Estilos y CSS', - 'guides/images': 'Imágenes', - 'guides/fonts': 'Fuentes', - 'guides/imports': 'Importaciones', - 'core-concepts/endpoints': 'Endpoints', - 'guides/data-fetching': 'Fetching de Datos', - 'guides/middleware': 'Middleware', - 'guides/testing': 'Testing', - 'guides/prefetch': 'Precargar', - 'guides/internationalization': 'Internacionalización', - 'guides/troubleshooting': 'Solución de Problemas', - - configuration: 'Configuración', - 'guides/configuring-astro': 'El archivo de configuración de Astro', - 'guides/typescript': 'TypeScript', - 'guides/aliases': 'Alias de importación', - 'guides/environment-variables': 'Variables de entorno', - - reference: 'Referencia', - 'reference/configuration-reference': 'Configuración', - 'reference/api-reference': 'API de Tiempo de Ejecución', - 'reference/integrations-reference': 'API de Integraciones', - 'reference/adapter-reference': 'API de Adaptador', - 'reference/image-service-reference': 'API de Servicio de Imágenes', - 'reference/dev-overlay-plugin-reference': 'API de Plugin de Superposición para Desarrolladores', - 'reference/directives-reference': 'Directivas de Plantilla', - 'reference/cli-reference': 'La CLI de Astro', - 'reference/error-reference': 'Referencia de Errores', - 'guides/publish-to-npm': 'Formato de Paquete NPM', -}); diff --git a/src/i18n/es/ui.ts b/src/i18n/es/ui.ts deleted file mode 100644 index d75916c98..000000000 --- a/src/i18n/es/ui.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { UIDictionary } from '../translation-checkers'; - -export default UIDictionary({ - 'a11y.skipLink': 'Ir al contenido', - 'a11y.sectionLink': 'Sección titulada', - 'navbar.a11yTitle': 'Inicio', - // Configuración del sitio - 'site.title': 'Documentación de Astro', - 'site.description': - 'Construye sitios web más rápidos con menos JavaScript en el lado del cliente.', - 'site.og.imageSrc': '/default-og-image.png?v=1', - 'site.og.imageAlt': - 'Logo de Astro en un espacio estrellado, con un planeta púrpura similar a Saturno flotando en el primer plano derecho', - // Barra lateral izquierda - 'leftSidebar.a11yTitle': 'Primario', - 'leftSidebar.learnTab': 'Aprender', - 'leftSidebar.referenceTab': 'Referencia', - 'leftSidebar.viewInEnglish': 'Ver en inglés', - 'leftSidebar.sponsoredBy': 'Patrocinado por', - // Barra lateral derecha - 'rightSidebar.a11yTitle': 'Secundario', - 'rightSidebar.onThisPage': 'En esta página', - 'rightSidebar.overview': 'Sinopsis', - 'rightSidebar.community': 'Comunidad', - 'rightSidebar.joinDiscord': 'Únete a nuestro Discord', - 'rightSidebar.readBlog': 'Lee nuestras publicaciones en el blog', - 'rightSidebar.openCollective': 'Nuestro Open Collective', - 'rightSidebar.contribute': 'Contribuir', - 'rightSidebar.contributorGuides': 'Guías para colaboradores', - 'rightSidebar.editPage': 'Editar esta página', - 'rightSidebar.translatePage': 'Traducir esta página', - 'rightSidebar.github': 'Documentación de Astro en GitHub', - // Pie de página - 'footer.privacyPolicy': 'Política de privacidad', - // Etiquetas de accesibilidad para - 'themeToggle.useLight': 'Usar tema claro', - 'themeToggle.useDark': 'Usar tema oscuro', - // Se utiliza en los enlaces de página anterior/siguiente en la parte inferior de las páginas - 'articleNav.nextPage': 'Siguiente página', - 'articleNav.prevPage': 'Atrás', - // Se utiliza en : Agregado en: v0.24.0 [NUEVO] - 'since.addedIn': 'Agregado en:', - 'since.new': 'Nuevo', - 'since.beta': 'Beta', - // Guía de instalación - 'install.autoTab': 'CLI automática', - 'install.manualTab': 'Configuración manual', - // Vocabulario de - 'deploy.sectionTitle': 'Guías de implementación', - 'deploy.altSectionTitle': 'Más guías de implementación', - 'deploy.filterLabel': 'Filtrar por tipo de implementación', - 'deploy.ssrTag': 'SSR', - 'deploy.staticTag': 'Estático', - // Vocabulario de guías de CMS - 'cms.navTitle': 'Más guías de CMS', - // Vocabulario de guías de migración - 'migration.navTitle': 'Más guías de migración', - // Vocabulario de recetas - 'recipes.navTitle': 'Más recetas', - // Vocabulario de - 'recipesLink.singular': 'Receta relacionada:', - 'recipesLink.plural': 'Recetas relacionadas', - // Texto de respaldo para - 'contributors.seeAll': 'Ver todos los colaboradores', - // Aviso de contenido de respaldo que se muestra cuando una página aún no está traducida - 'fallbackContent.notice': - 'Esta página aún no está disponible en tu idioma, así que te mostramos la versión en inglés. ¡Puedes ayudar traduciéndola!', - 'fallbackContent.linkText': 'Obtén más información sobre cómo contribuir', - // Página 404 - '404.title': 'No encontrado', - '404.content': 'Esta página no está en nuestro sistema solar.', - '404.linkText': 'Volver a la página principal.', - // Etiquetas predeterminadas del componente Aside - 'aside.note': 'Nota', - 'aside.tip': 'Consejo', - 'aside.caution': 'Precaución', - 'aside.danger': 'Peligro', - // Vocabulario de - 'languageSelect.label': 'Seleccionar idioma', - // Vocabulario de integraciones - 'integrations.changelog': 'Registro de cambios', - 'integrations.footerTitle': 'Más integraciones', - 'integrations.renderers': 'Frameworks UI', - 'integrations.adapters': 'Adaptadores SSR', - 'integrations.others': 'Otros', - // Componente Checklist - 'checklist.or': 'o', - // Componente Multiple Choice - 'multipleChoice.defaultCorrect': '¡Correcto!', - 'multipleChoice.defaultIncorrect': '¡Inténtalo de nuevo!', - 'multipleChoice.submitLabel': 'Enviar', - // Progreso del tutorial - 'progress.todo': 'Por hacer', - 'progress.done': 'Completado', - // Navegación del tutorial - 'tutorial.trackerLabel': 'Seguimiento del tutorial', - 'tutorial.unit': 'Unidad', - // Tutorial - 'tutorial.getReady': 'Prepárate para...', - // Widget Feedback Fish - 'feedback.button': 'Danos tu opinión', - 'feedback.a11yLabel': 'Formulario de opinión', - 'feedback.formTitle': '¿Qué tienes en mente?', - 'feedback.categoryGroupLabel': 'Elige una categoría de opinión', - 'feedback.issue': 'Problema', - 'feedback.createIssue': 'Crear un problema en GitHub', - 'feedback.idea': 'Idea', - 'feedback.other': 'Otro', - 'feedback.messageA11yLabel': 'Mensaje', - 'feedback.placeholder': '¿Qué nos quieres decir?', - 'feedback.submit': 'Enviar opinión', - 'feedback.close': 'Cerrar formulario de opinión', - 'feedback.success': '¡Gracias! Hemos recibido tu opinión.', - // Componente - 'fileTree.directoryLabel': 'Directorio', - // Code snippet vocabulary - 'expressiveCode.terminalWindowFallbackTitle': 'Ventana de terminal', - 'expressiveCode.copyButtonTooltip': 'Copiar al portapapeles', - 'expressiveCode.copyButtonCopied': '¡Copiado!', - // Vocabulario de guías de backend - 'backend.navTitle': 'Más guías de servicios backend', - // Vocabulario de borradores - 'stub.title': '¡Amplía este borrador!', - 'stub.subtitle': 'Esta guía es un borrador.', - 'stub.description.migration': - '¿Quieres contribuir a esta guía? ¿Tienes alguna publicación en un blog, un video u otro recurso para compartir sobre la migración desde esta tecnología a Astro?', - 'stub.description.cms': '¿Quieres saber más sobre cómo usar este CMS con Astro?', - 'stub.description.backend': '¿Quieres saber más sobre cómo usar este servicio backend con Astro?', -}); diff --git a/src/i18n/fr/README.md b/src/i18n/fr/README.md deleted file mode 100644 index 2e3b3e04d..000000000 --- a/src/i18n/fr/README.md +++ /dev/null @@ -1,63 +0,0 @@ -# 📖 Glossaire - -Le glossaire est là pour définir les mots, traductions et orientations concernant la traduction française de la documentation d'Astro. - -Certains mots jugés comme "inhérents" à Astro n'auront pas de traduction, car étant une part conséquente de son environnement. - -## 🔄️ Mots ne nécessitant pas de traductions - -> 💡 Ces mots sont considérés comme des noms propres dû à leurs origines anglaises, prenant toujours une majuscule : - -| Mot concerné | Définition | Utilisation | -|-------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Template | Mise en page / construction d'un composant Astro | Dans le contexte de “Templating” ou “Template” d'un composant | -| Composant Layout | Composant inhérent à la logique d'Astro, servant de modèle pour une page Astro, simplifiant sa syntaxe | Utilisé quand on parle d'un Composant Layout d'Astro, cela peut s'avérer utile de le mettre entre “crochets” | -| Composant Page | Composant Astro situé dans `src/pages` contenant une syntaxe `` complète, sert de fondation pour le routage de base d'Astro | Utilisé dans le contexte d'un "Composant Page Astro" à ne pas confondre avec une “page HTML” qui ne prendra pas de majuscule, car venant du français | -| Slot | `` ou emplacement, ce mot est souvent utilisé dans le code pour spécifier où doit se placer un contenu dans le contexte d'héritage ou dans des Frameworks / environnements orientés composants | Peut être spécifié sous cette forme ou sous sa version HTML ``. Utilisé pour son utilisation par tous les Frameworks supportés par Astro en plus de lui-même | -| Framework | Mot couramment dans le code pour spécifier un logiciel ou un “Package” utilisant une syntaxe spécifique à son utilisation (ex: `React`, `Vue`, `Svelte`, etc...) | Utilisé dans le cadre des intégrations fournies par Astro intégrant de nombreux environnements différents. | -| Node Built-in | Intégrations construites nativement dans le gestionnaire de paquets Node (ex: `node:fs`, `node:path`, etc...) | Les intégrations natives à Astro n'ont pas à utiliser cela, utilisé seulement pour node, étant une syntaxe courante pour cet environnement | -| Frontmatter | Aussi utilisé sous le nom de “Script du Composant”, c'est le code JavaScript placé entre les tirets `---` dans tous les composants Astro | Peut être utilisé sous le nom de “Script du Composant” si spécifié, utilisé seulement dans le contexte d'Astro (et les pages markdown d'Astro) | -| Fragment | Concept lié au code, le plus souvent dans le web ou dans les interfaces, c'est un élément éphémère utilisé pour regrouper plusieurs éléments ensembles | Est souvent écrit sous sa forme HTML (` ` ou `<> `) mais peut être spécifié comme tel dans le texte | -| Package | Peut être traduit par “Module” ou “Librairie” par certains, en parlant d'un packet NPM, n'a pas besoin de traduction, car couramment utilisé dans le code | Utilisé en parlant d'un paquet NPM ou d'une installation à effectuer pour une intégration Astro | -| Build | Dans le contexte d'un langage utilisant une étape de compilation, on parle de compilation / transpilation | Ce mot est à utiliser lorsqu'on parle de l'étape de compilation via la commande `astro build` servant à produire un résultat compatible pour les navigateurs et optimisé par Astro | -| Frontend | | | -| Backend | | | -| Middleware | | | -| Markdown, Astro, JavaScript, TypeScript, React, Vue, Svelte, Lit, Solid | Tous les noms de packages / langages prennent une majuscule, car considérés comme des noms propres à ces environnements | Utilisé partout sur la doc de façon universelle, doit toujours porter une majuscule | - -> Et non je ne parlerai pas du mot “Cadriciel”. - -## 📚 Traductions courantes - -Certains mots dans la traduction ont un équivalent français utilisé uniformément dans les différentes traductions : - -| Anglais | Français | -|------------------------------|-------------------------------------------| -| Server-side-rendering | Rendu Coté Serveur | -| Client-side | Sur le navigateur / Coté client | -| Runtime | Exécution / Code Exécuté | -| CLI / Command line interface | ILC / Interface de ligne de commande | -| Routing | Routage | -| UI components | Composants d'interface / Composants UI | -| Code fences (`---`) | Barres de code / Triples tirets | -| Imports | Imports / Importer / Inclure | -| Exports | Exports / Exporter | -| Render / Rendering | Rendu / Affichage / Sortie | -| Re-render | Rafraîchir / Effectuer à nouveau un rendu | -| Component Script | Script du composant | -| Component Template | Template du composant | -| Bundle / Bundled | Regroupé / Groupé / Compacté | -| Processed | Optimisé / Transpilé | -| Process | Optimise / Processus / Exécute | -| Wrap | Englober / Entourer | -| Slot (verbe *to slot*) | Inclure / Injecter / Insérer | -| Fetch | Importer / Récupérer / Chercher | -| Endpoint | Point de terminaison | -| Island architecture | Architecture Isolée | -| Partial Hydration | Hydratation Partielle | -| Scope / Scoped | Limité / Délimité | -| Astro Islands | Îles Astro | -| Recipes | Méthodes | -| Upgrade | Mise à niveau | - -> ⚠️ Ce glossaire est encore en travaux, merci de contribuer à la traduction française en lui apportant des suggestions ! diff --git a/src/i18n/fr/docsearch.ts b/src/i18n/fr/docsearch.ts deleted file mode 100644 index a63a327f0..000000000 --- a/src/i18n/fr/docsearch.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { DocSearchDictionary } from '../translation-checkers'; - -export default DocSearchDictionary({ - button: 'Rechercher', - placeholder: 'Rechercher dans la documentation', - shortcutLabel: 'Appuyez sur / pour rechercher', - resultsFooterLede: "Vous cherchez un thème ou une intégration Astro ? Besoin d'aide ?", - resultsFooterIntegrations: 'Répertoire des intégrations Astro', - resultsFooterThemes: 'Présentation des thèmes Astro', - resultsFooterDiscord: 'Rejoignez-nous sur Discord', - modal: { - searchBox: { - resetButtonTitle: 'Effacer la recherche', - resetButtonAriaLabel: 'Effacer la recherche', - cancelButtonText: 'Annuler', - cancelButtonAriaLabel: 'Annuler', - }, - startScreen: { - recentSearchesTitle: 'Recherches récentes', - noRecentSearchesText: 'Aucune recherche récente', - saveRecentSearchButtonTitle: 'Sauvegarder cette recherche', - removeRecentSearchButtonTitle: "Enlever cette recherche de l'historique", - favoriteSearchesTitle: 'Favoris', - removeFavoriteSearchButtonTitle: 'Enlever cette recherche des favoris', - }, - errorScreen: { - titleText: 'Erreur lors de la récupération des résultats', - helpText: "Vous devriez vérifier l'état de votre connection internet.", - }, - footer: { - selectText: 'pour sélectionner', - selectKeyAriaLabel: 'Appuyez sur la touche', - navigateText: 'pour naviguer', - navigateUpKeyAriaLabel: 'Flèche du haut', - navigateDownKeyAriaLabel: 'Flèche du bas', - closeText: 'pour fermer', - closeKeyAriaLabel: "Touche d'échappement", - searchByText: 'Recherche via', - }, - noResultsScreen: { - noResultsText: 'Aucun résultat trouvé pour', - suggestedQueryText: 'Essayez de rechercher pour', - reportMissingResultsText: 'Vous pensez avoir trouvé une erreur ?', - reportMissingResultsLinkText: 'Faites-le nous savoir.', - }, - }, -}); diff --git a/src/i18n/fr/nav.ts b/src/i18n/fr/nav.ts deleted file mode 100644 index 0e945c566..000000000 --- a/src/i18n/fr/nav.ts +++ /dev/null @@ -1,173 +0,0 @@ -/** - * This configures the navigation sidebar. - * All other languages follow this ordering/structure and will fall back to - * English for any entries they haven’t translated. - * - * - All entries MUST include `text` and `key` - * - Heading entries MUST include `header: true` and `type` - * - Link entries MUST include `slug` (which excludes the language code) - */ -export default [ - { text: 'Commencer ici', header: true, type: 'learn', key: 'startHere' }, - { text: 'Bien démarrer', slug: 'getting-started', key: 'getting-started' }, - { text: 'Installation', slug: 'install/auto', key: 'install' }, - { text: "Configuration de l'éditeur de code", slug: 'editor-setup', key: 'editor-setup' }, - { text: 'Mise à jour vers la v3', slug: 'guides/upgrade-to/v3', key: 'guides/upgrade-to/v3' }, - - { text: 'Concepts Fondamentaux', header: true, type: 'learn', key: 'coreConcepts' }, - { text: 'Pourquoi Astro ?', slug: 'concepts/why-astro', key: 'concepts/why-astro' }, - { text: 'Les îles Astro', slug: 'concepts/islands', key: 'concepts/islands' }, - - { text: 'Tutoriels', header: true, type: 'learn', key: 'tutorials' }, - { text: 'Construire un Blog', slug: 'tutorial/0-introduction', key: 'blog-tutorial' }, - { - text: 'Extension avec les collections de contenu', - slug: 'tutorials/add-content-collections', - key: 'add-collections-tutorial', - }, - { - text: 'Extension avec les transitions de vue', - slug: 'tutorials/add-view-transitions', - key: 'add-transitions-tutorial', - }, - // { text: 'Penser avec les îles', slug: 'tutorial/0-introduction', key: 'island-tutorial' }, - - { text: 'Les Bases', header: true, type: 'learn', key: 'basics' }, - - { - text: 'Structure du Projet', - slug: 'core-concepts/project-structure', - key: 'core-concepts/project-structure', - }, - { - text: 'Composants', - slug: 'core-concepts/astro-components', - key: 'core-concepts/astro-components', - }, - { text: 'Pages', slug: 'core-concepts/astro-pages', key: 'core-concepts/astro-pages' }, - { text: 'Layouts', slug: 'core-concepts/layouts', key: 'core-concepts/layouts' }, - { - text: 'Syntaxe de Template Astro', - slug: 'core-concepts/astro-syntax', - key: 'core-concepts/astro-syntax', - }, - { - text: 'Les modes de rendu', - slug: 'core-concepts/rendering-modes', - key: 'core-concepts/rendering-modes', - }, - - { text: 'Éléments encastrés', header: true, type: 'learn', key: 'builtins' }, - { - text: 'Collections de Contenu', - slug: 'guides/content-collections', - key: 'guides/content-collections', - }, - { - text: 'Voir les Transitions', - slug: 'guides/view-transitions', - key: 'guides/view-transitions', - }, - { - text: 'Prefetch', - slug: 'guides/prefetch', - key: 'guides/prefetch', - }, - - { text: 'Add-ons', header: true, type: 'learn', key: 'addons' }, - { text: 'Intégrations', slug: 'guides/integrations-guide', key: 'guides/integrations-guide' }, - { - text: "Framework d'interface", - slug: 'core-concepts/framework-components', - key: 'core-concepts/framework-components', - }, - { - text: 'Rendu Côté Serveur (SSR)', - slug: 'guides/server-side-rendering', - key: 'guides/server-side-rendering', - }, - - { text: 'Méthodes', header: true, type: 'learn', key: 'examples' }, - { text: 'Migrer vers Astro', slug: 'guides/migrate-to-astro', key: 'guides/migrate-to-astro' }, - { text: 'Connecter un CMS', slug: 'guides/cms', key: 'guides/cms' }, - { text: 'Ajouter des services Backend', slug: 'guides/backend', key: 'guides/backend' }, - { text: 'Déployez votre site', slug: 'guides/deploy', key: 'guides/deploy' }, - { text: 'Plus de méthodes', slug: 'recipes', key: 'guides/recipes' }, - - { text: 'Guides', header: true, type: 'learn', key: 'features' }, - { text: 'Routage', slug: 'core-concepts/routing', key: 'core-concepts/routing' }, - { text: 'Markdown', slug: 'guides/markdown-content', key: 'guides/markdown-content' }, - { - text: "Scripts & gestion d'évènements", - slug: 'guides/client-side-scripts', - key: 'guides/client-side-scripts', - }, - { text: 'Styles & CSS', slug: 'guides/styling', key: 'guides/styling' }, - { text: 'Images', slug: 'guides/images', key: 'guides/images' }, - { text: "Polices d'écritures", slug: 'guides/fonts', key: 'guides/fonts' }, - { text: 'Imports', slug: 'guides/imports', key: 'guides/imports' }, - { - text: 'Points de terminaison', - slug: 'core-concepts/endpoints', - key: 'core-concepts/endpoints', - }, - { text: 'Récupération de Données', slug: 'guides/data-fetching', key: 'guides/data-fetching' }, - { - text: 'Internationalisation', - slug: 'guides/internationalization', - key: 'guides/internationalization', - }, - { text: 'Middleware', slug: 'guides/middleware', key: 'guides/middleware' }, - { text: 'Test', slug: 'guides/testing', key: 'guides/testing' }, - { text: 'Dépannage', slug: 'guides/troubleshooting', key: 'guides/troubleshooting' }, - - { text: 'Configuration', header: true, type: 'learn', key: 'configuration' }, - { - text: 'Le Fichier de Configuration Astro', - slug: 'guides/configuring-astro', - key: 'guides/configuring-astro', - }, - { text: 'TypeScript', slug: 'guides/typescript', key: 'guides/typescript' }, - { text: "Alias d'Importation", slug: 'guides/aliases', key: 'guides/aliases' }, - { - text: "Variables d'Environnement", - slug: 'guides/environment-variables', - key: 'guides/environment-variables', - }, - - { text: 'Référence', header: true, type: 'api', key: 'reference' }, - { - text: 'Configuration', - slug: 'reference/configuration-reference', - key: 'reference/configuration-reference', - }, - { text: "API d'Exécution", slug: 'reference/api-reference', key: 'reference/api-reference' }, - { - text: "API d'Intégration", - slug: 'reference/integrations-reference', - key: 'reference/integrations-reference', - }, - { text: 'Adapteur API', slug: 'reference/adapter-reference', key: 'reference/adapter-reference' }, - { - text: "API du Service d'Images", - slug: 'reference/image-service-reference', - key: 'reference/image-service-reference', - }, - { - text: 'API du plugin Overlay Dev', - slug: 'reference/dev-overlay-plugin-reference', - key: 'reference/dev-overlay-plugin-reference', - }, - { - text: 'Utilisation des Directives', - slug: 'reference/directives-reference', - key: 'reference/directives-reference', - }, - { text: "CLI d'Astro", slug: 'reference/cli-reference', key: 'reference/cli-reference' }, - { - text: 'Référence des erreurs', - slug: 'reference/error-reference', - key: 'reference/error-reference', - }, - { text: 'Format de Packet NPM', slug: 'reference/publish-to-npm', key: 'guides/publish-to-npm' }, -] as const; diff --git a/src/i18n/fr/ui.ts b/src/i18n/fr/ui.ts deleted file mode 100644 index 7c9c661b3..000000000 --- a/src/i18n/fr/ui.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { UIDictionary } from '../translation-checkers'; - -export default UIDictionary({ - 'a11y.skipLink': 'Aller au contenu principal', - 'a11y.sectionLink': 'Titre de la section', - 'navbar.a11yTitle': 'Navigation principale', - // Site settings - 'site.title': 'Documentation Astro', - 'site.description': - 'Compilez des sites plus rapidement avec moins de JavaScript pour vos utilisateurs.', - 'site.og.imageSrc': '/default-og-image.png?v=1', - 'site.og.imageAlt': - "Logo d'Astro dans l'espace, avec une planète violette dans le style de saturne flottant à droite de l'image.", - // Left Sidebar - 'leftSidebar.a11yTitle': 'Navigation du site', - 'leftSidebar.learnTab': 'Apprendre', - 'leftSidebar.referenceTab': 'Référence', - 'leftSidebar.viewInEnglish': 'Voir en anglais', - 'leftSidebar.sponsoredBy': 'Sponsorisé par', - // Right Sidebar - 'rightSidebar.a11yTitle': 'Table des matières', - 'rightSidebar.onThisPage': 'Sur cette page', - 'rightSidebar.overview': 'Vue générale', - 'rightSidebar.community': 'Communauté', - 'rightSidebar.joinDiscord': 'Rejoindre notre Discord', - 'rightSidebar.readBlog': 'Lire nos articles', - 'rightSidebar.openCollective': 'Notre lien Open Collective', - 'rightSidebar.contribute': 'Contribuer', - 'rightSidebar.contributorGuides': 'Guides des contributeurs', - 'rightSidebar.editPage': 'Modifier cette page', - 'rightSidebar.translatePage': 'Traduire cette page', - 'rightSidebar.github': "La doc d'Astro sur GitHub", - // Footer - 'footer.privacyPolicy': 'Politique de Confidentialité', - // `` acessibility labels - 'themeToggle.useLight': 'Changer vers le thème clair', - 'themeToggle.useDark': 'Changer vers le thème sombre', - // Used in previous/next page links at the bottom of pages - 'articleNav.nextPage': 'Page suivante', - 'articleNav.prevPage': 'Page précédente', - // Used in ``: Added in: v0.24.0 [NEW] - 'since.addedIn': 'Ajouté à la version :', - 'since.new': 'Nouveau', - 'since.beta': 'Bêta', - // Installation Guide - 'install.autoTab': "Automatiquement via l'ILC", - 'install.manualTab': 'Configuration manuelle', - // `` vocabulary - 'deploy.sectionTitle': 'Guides de déploiement', - 'deploy.altSectionTitle': 'Plus de guides de déploiement', - 'deploy.filterLabel': 'Filtrer par type de déploiement', - 'deploy.ssrTag': 'SSR', - 'deploy.staticTag': 'Statique', - // CMS Guides vocabulary - 'cms.navTitle': 'Plus de guides sur les CMS', - // Migration Guides vocabulary - 'migration.navTitle': 'Plus de guides sur les migrations', - // Recipes vocabulary - 'recipes.navTitle': 'Plus de méthodes', - // `` vocabulary - 'recipesLink.singular': 'Méthode associée :', - 'recipesLink.plural': 'Méthodes associées', - // `` fallback text - 'contributors.seeAll': 'Voir tous les contributeurs', - // Fallback content notice shown when a page is not yet translated - 'fallbackContent.notice': - "Cette page est affichée en anglais car elle n'est pas encore disponible dans votre langue. Vous pouvez aider en la traduisant !", - 'fallbackContent.linkText': 'En savoir plus sur la façon de contribuer', - // 404 Page - '404.title': 'Page introuvable', - '404.content': 'Cette page ne fait pas partie de notre système solaire.', - '404.linkText': 'Ramenez moi à la maison', - // Aside component default labels - 'aside.note': 'Note', - 'aside.tip': 'Astuce', - 'aside.caution': 'Attention', - 'aside.danger': 'Danger', - // `` vocabulary - 'languageSelect.label': 'Sélectionner la langue', - // Integrations vocabulary - 'integrations.changelog': 'Journal des modifications', - 'integrations.footerTitle': "Plus d'intégrations", - 'integrations.renderers': "Framework d'interface utilisateur", - 'integrations.adapters': 'Adaptateurs SSR', - 'integrations.others': 'Autres', - // Checklist component - 'checklist.or': 'ou', - // Multiple Choice component - 'multipleChoice.defaultCorrect': 'Correct !', - 'multipleChoice.defaultIncorrect': 'Réessayer !', - 'multipleChoice.submitLabel': 'Envoyer', - // Tutorial Progress - 'progress.todo': 'À faire', - 'progress.done': 'Terminer', - // Tutorial Navigation - 'tutorial.trackerLabel': 'Suivi du tutoriel', - 'tutorial.unit': 'Unité', - // Tutorial - 'tutorial.getReady': 'Préparez-vous à…', - // Feedback Fish widget - 'feedback.button': 'Laissez un commentaire', - 'feedback.a11yLabel': 'Formulaire de commentaires', - 'feedback.formTitle': 'Comment pouvons-nous vous aider ?', - 'feedback.categoryGroupLabel': 'Choisissez le type de commentaire', - 'feedback.issue': 'Problème', - 'feedback.createIssue': 'Créer une issue GitHub', - 'feedback.idea': 'Idée', - 'feedback.other': 'Autres', - 'feedback.messageA11yLabel': 'Message', - 'feedback.placeholder': 'Que faut-il savoir ?', - 'feedback.submit': 'Envoyez des commentaires', - 'feedback.close': 'Fermer le formulaire de commentaires', - 'feedback.success': 'Merci ! Nous avons reçu vos commentaires.', - // `` component - 'fileTree.directoryLabel': 'Répertoire', - // Code snippet vocabulary - 'expressiveCode.terminalWindowFallbackTitle': 'Fenêtre du terminal', - 'expressiveCode.copyButtonTooltip': 'Copier dans le presse-papiers', - 'expressiveCode.copyButtonCopied': 'Copié!', - // Backend Guides vocabulary - 'backend.navTitle': 'Plus de guides sur les services backend', - // Stubs vocabulary - 'stub.title': 'Développez cette ébauche !', - 'stub.subtitle': 'Ce guide est une ébauche.', - 'stub.description.migration': - 'Vous souhaitez contribuer à ce guide ? Vous avez un article de blog, une vidéo ou une autre ressource à partager sur la migration de cette technologie vers Astro ?', - 'stub.description.cms': "En savoir plus sur l'utilisation de ce CMS avec Astro ?", - 'stub.description.backend': "En savoir plus sur l'utilisation de ce service backend avec Astro ?", -}); diff --git a/src/i18n/hi/docsearch.ts b/src/i18n/hi/docsearch.ts deleted file mode 100644 index 8385eaf8d..000000000 --- a/src/i18n/hi/docsearch.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { DocSearchDictionary } from '../translation-checkers'; - -export default DocSearchDictionary({ - button: 'खोजें', - placeholder: 'दस्तावेज़ खोजें', - shortcutLabel: 'खोजने के लिए / दबाएँ', - resultsFooterLede: 'एक Astro एकीकरण या विषय की तलाश में? अधिक मदद की आवश्यकता है?', - resultsFooterIntegrations: 'Astro एकीकरण निर्देशिका', - resultsFooterThemes: 'Astro थीम का प्रदर्शन', - resultsFooterDiscord: 'डिस्कोर्ड पर हमसे जुड़ें', - modal: { - searchBox: { - resetButtonTitle: 'खोज साफ़ करें', - resetButtonAriaLabel: 'खोज साफ़ करें', - cancelButtonText: 'रद्द करे', - cancelButtonAriaLabel: 'रद्द करे', - }, - startScreen: { - recentSearchesTitle: 'हाल की खोजें', - noRecentSearchesText: 'कोई हालिया खोज नहीं', - saveRecentSearchButtonTitle: 'इस खोज को सहेजें', - removeRecentSearchButtonTitle: 'इस खोज को इतिहास से हटाएँ', - favoriteSearchesTitle: 'पसंदीदा', - removeFavoriteSearchButtonTitle: 'इस खोज को पसंदीदा से निकालें', - }, - errorScreen: { - titleText: 'परिणाम पुनर्प्राप्त करने में त्रुटि', - helpText: 'आपको अपने इंटरनेट कनेक्शन की स्थिति की जांच करनी चाहिए।', - }, - footer: { - selectText: 'चयन के लिए', - selectKeyAriaLabel: 'कुंजी दबाएँ', - navigateText: 'नेविगेट के लिए', - navigateUpKeyAriaLabel: 'शीर्ष तीर', - navigateDownKeyAriaLabel: 'नीचे तीर', - closeText: 'बंद करना', - closeKeyAriaLabel: 'बंद करने की कुंजी', - searchByText: 'के माध्यम से खोजें', - }, - noResultsScreen: { - noResultsText: 'इसका कोई परिणाम नहीं मिला', - suggestedQueryText: 'खोजने का प्रयास करें', - reportMissingResultsText: 'क्या आपको लगता है कि आपको कोई त्रुटि मिली है?', - reportMissingResultsLinkText: 'हमें बताएं।', - }, - }, -}); diff --git a/src/i18n/hi/nav.ts b/src/i18n/hi/nav.ts deleted file mode 100644 index 6e85ff66e..000000000 --- a/src/i18n/hi/nav.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { NavDictionary } from '../translation-checkers'; - -export default NavDictionary({ - startHere: 'यहाँ से शुरू करे', - 'getting-started': 'पहले कदम', - - install: 'स्थापित करें', - 'editor-setup': 'एडिटर सेटअप', - 'guides/upgrade-to/v3': 'v3 में अपग्रेड करें', - - coreConcepts: 'मूल अवधारणाएँ', - 'concepts/why-astro': 'क्यों Astro', - 'concepts/islands': 'Astro द्वीप', - - tutorials: 'शिक्षण सत्र', - 'blog-tutorial': 'ब्लॉग बनाएं', - 'add-collections-tutorial': 'सामग्री संग्रह बढ़ाएं', - 'add-transitions-tutorial': 'व्यू-ट्रांज़िशन्स बढ़ाएं', - - basics: 'मौलिक अवधारणाएँ', - 'core-concepts/project-structure': 'परियोजना संरचना', - 'core-concepts/astro-components': 'अवयव', - 'core-concepts/astro-pages': 'पृष्ठ', - 'core-concepts/layouts': 'नक़्शे', - 'core-concepts/astro-syntax': 'Astro की सिंटैक्स', - 'core-concepts/rendering-modes': 'अनुवाद मध्यम', - - builtins: 'बिल्ट-इंस ', - 'guides/content-collections': 'सामग्री संग्रह', - 'guides/view-transitions': 'व्यू-ट्रांज़िशन्स ', - 'guides/prefetch': 'प्रीफ़ेच', - - addons: 'एड-ऑन्स', - 'guides/integrations-guide': 'एकीकरण जानकारी', - 'core-concepts/framework-components': 'UI फ़्रेमवर्क्स', - 'guides/server-side-rendering': 'सर्वर-साइड रेंडरिंग (SSR)', - - examples: 'उदाहरण', - 'guides/migrate-to-astro': 'Astro में माइग्रेट करें', - 'guides/cms': 'एक CMS से जुड़े', - 'guides/backend': 'बैकएंड सेवाओं को जोड़ें', - 'guides/deploy': 'अपनी साइट को डिप्लॉय करें', - 'guides/recipes': 'अधिक रेसिपी', - - features: 'गाइड्स', - 'core-concepts/routing': 'रूटिंग', - 'guides/markdown-content': 'Markdown और MDX', - 'guides/client-side-scripts': 'स्क्रिप्ट और घटना संचालन', - 'guides/styling': 'स्टाइल और CSS', - 'guides/images': 'छवियाँ', - 'guides/fonts': 'फ़ॉन्ट्स', - 'guides/imports': 'आयात', - 'core-concepts/endpoints': 'एंडपॉइंट्स', - 'guides/data-fetching': 'डेटा फ़ेचिंग', - 'guides/internationalization': 'अंतर्राष्ट्रीयकरण', - 'guides/middleware': 'मिडलवेयर', - 'guides/testing': 'परिक्षण', - 'guides/troubleshooting': 'समस्या समाधान', - - configuration: 'कॉन्फ़िगरेशन', - 'guides/configuring-astro': 'Astro कॉन्फ़िग फ़ाइल', - 'guides/typescript': 'Typescript', - 'guides/aliases': 'आयात उपनाम', - 'guides/environment-variables': 'पर्यावरण चर', - - reference: 'संदर्भ', - 'reference/configuration-reference': 'कॉन्फ़िगरेशन', - 'reference/api-reference': 'रनटाइम API', - 'reference/integrations-reference': 'एकीकरण API', - 'reference/adapter-reference': 'एडाप्टर API', - 'reference/image-service-reference': 'छवि सेवा API', - 'reference/dev-overlay-plugin-reference': 'डेवलपर ओवरले प्लगइन API', - 'reference/directives-reference': 'टेम्पलेट निर्देशिकाएँ', - 'reference/cli-reference': 'Astro CLI', - 'reference/error-reference': 'त्रुटि संदर्भ', - 'guides/publish-to-npm': 'NPM पैकेज प्रारूप', -}); diff --git a/src/i18n/hi/ui.ts b/src/i18n/hi/ui.ts deleted file mode 100644 index 45c91c324..000000000 --- a/src/i18n/hi/ui.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { UIDictionary } from '../translation-checkers'; - -export default UIDictionary({ - 'a11y.skipLink': 'इसे छोड़कर कंटेंट पर जाएं', // "Skip to Content" - 'a11y.sectionLink': 'शीर्षक', // "Section titled" - 'navbar.a11yTitle': 'शीर्ष', // "Top" - // Site settings - 'site.title': 'Astro दस्तावेज़ीकरण', // "Astro Documentation" - 'site.description': 'कम Client-side Javascript के साथ तेज़ वेबसाइटें बनाएं।', // "Build faster websites with less client-side JavaScript." - 'site.og.imageSrc': '/default-og-image.png?v=1', - 'site.og.imageAlt': - 'एक तारों भरे अंतरिक्ष में Astro लोगो, जिसमें दाएँ से एक जामुनी शनि ग्रह की तरह ग्रह तैरता है', // "astro logo on a starry expanse of space, with a purple saturn-like planet floating in the right foreground" - // Left Sidebar - 'leftSidebar.a11yTitle': 'प्रमुख', // "Primary" - 'leftSidebar.learnTab': 'सीखें', // "Learn" - 'leftSidebar.referenceTab': 'संदर्भ', // "Reference" - 'leftSidebar.viewInEnglish': 'अंग्रेज़ी में देखें', // "View in English" - 'leftSidebar.sponsoredBy': 'समर्थित करने वाला', // "Sponsored by" - // Right Sidebar - 'rightSidebar.a11yTitle': 'माध्यमिक', // "Secondary" - 'rightSidebar.onThisPage': 'इस पृष्ठ पर', // "On this page" - 'rightSidebar.overview': 'अवलोकन', // "Overview" - 'rightSidebar.community': 'समुदाय', // "Community" - 'rightSidebar.joinDiscord': 'हमसे Discord में शामिल हों', // "Join us on Discord" - 'rightSidebar.readBlog': 'हमारे ब्लॉग पोस्ट पढ़ें', // "Read our blog posts" - 'rightSidebar.openCollective': 'हमारा ओपन कलेक्टिव', // "Our Open Collective" - 'rightSidebar.contribute': 'योगदान करें', // "Contribute" - 'rightSidebar.contributorGuides': 'योगदानकर्ता मार्गदर्शिकाएँ', // "Contributor Guides" - 'rightSidebar.editPage': 'इस पृष्ठ को संपादित करें', // "Edit this page" - 'rightSidebar.translatePage': 'इस पृष्ठ को अनुवाद करें', // "Translate this page" - 'rightSidebar.github': 'Astro Docs देखे GitHub पर', // "Astro Docs on GitHub" - // Footer - 'footer.privacyPolicy': 'गोपनीयता नीति', // "Privacy Policy" - // `` accessibility labels - 'themeToggle.useLight': 'Light थीम उपयोग करें', // "Use light theme" - 'themeToggle.useDark': 'Dark थीम उपयोग करें', // "Use dark theme" - // Used in previous/next page links at the bottom of pages - 'articleNav.nextPage': 'अगला पृष्ठ', // "Next Page" - 'articleNav.prevPage': 'पिछला पृष्ठ', // "Back" - // Used in ``: Added in: v0.24.0 [NEW] - 'since.addedIn': 'जोड़ा गया:', // "Added in:" - 'since.new': 'नया', // "New" - 'since.beta': 'बीटा', // "Beta" - // Installation Guide - 'install.autoTab': 'स्वचालित CLI', // "Automatic CLI" - 'install.manualTab': 'मैन्युअल सेटअप', // "Manual Setup" - // `` vocabulary - 'deploy.sectionTitle': 'पृष्ठ संचालन मार्गदर्शिकाएँ', // "Deployment Guides" - 'deploy.altSectionTitle': 'अधिक पृष्ठ संचालन मार्गदर्शिकाएँ', // "More Deployment Guides" - 'deploy.filterLabel': 'डिप्लॉय प्रकार से छाँटें', // "Filter by deploy type" - 'deploy.ssrTag': 'SSR', // "SSR" - 'deploy.staticTag': 'Static', // "Static" - // CMS Guides vocabulary - 'cms.navTitle': 'और CMS मार्गदर्शिकाएँ', // "More CMS guides" - // Migration Guides vocabulary - 'migration.navTitle': 'और माइग्रेशन मार्गदर्शिकाएँ', // "More migration guides" - // Recipes -}); diff --git a/src/i18n/it/README.md b/src/i18n/it/README.md deleted file mode 100644 index d7a1ef638..000000000 --- a/src/i18n/it/README.md +++ /dev/null @@ -1,59 +0,0 @@ -# 📖 Glossario - -Il glossario è una raccolta di vocaboli, modi di dire e pratiche comuni per la traduzione italiana della documentazione di Astro. - -Alcune parole legate ad Astro e allo sviluppo web non vanno tradotte in quanto sono parte integrante del suo ambiente e non hanno una traduzione immediata nell'Italiano. - -## 🔄️ Vocaboli che non hanno bisogno di traduzione - -> 💡 Queste parole sono considerate nomi propri data la loro origine Inglese : - -| Vocabolo | Definizione | Uso | -|-------------------|-------------|-------------| -| Runtime | Ambiente d'esecuzione / Tempo di esecuzione | Usato come "runtime di JavaScript" o "runtime edge" | -| Framework | Un "Framework" è un insieme di strumenti, librerie, e convenzioni che forniscono un metodo strutturato per costruire applicazioni. I Framework sono progettati per semplificare e ottimizzare il processo di sviluppo offrendo una base che gli sviluppatori possono usare per costruire un'applicazione senza partire da zero. | Utilizzato in riferimento al framework Astro e ad altri framework che possono essere usati e integrati con esso. | -| Build | Nel contesto di un linguaggio di programmazione che richiede un passaggio di trasformazione (tra due diversi linguaggi) | Questa parola deve essere usata quando si parla della fase di compilazione tramite il comando `astro build` usato per produrre un risultato compatibile con i browser e ottimizzato da Astro -| Frontend | Tutto quell'insieme di librerie e programmi usati per costruire l'interfaccia utente direttamente visibile nel browser | Comunemente usato per distinguere il codice relativo alla logica dell'interfaccia utente dal codice che viene eseguito sul server e che non è visibile all'utente | -| Backend | L'insieme delle librerie e codice che viene usato per definire la struttura e il funzionamento del server | Il termine "Backend" si riferisce al lato server dell'applicazione/sito web. È la parte del codice responsabile della gestione delle richieste da parte del client/browser (Frontend), della manipolazione dei dati, e gestione del server e interazione con il database. | -| Markdown, Astro, JavaScript, TypeScript, React, Vue, Svelte, Lit, Solid | Nomi di pacchetti o linguaggi di programmazione sempre scritti con la maiuscola | Utilizzati ovunque nella documentazione e sempre scritti con la maiuscola | -| API (Application Programming Interface) | Un'insieme di metodi, regole e protocolli esposti allo sviluppatore che permettono a diversi software e applicazioni di comunicare tra di loro. Definisce i metodi e le strutture dati che le applicazioni possono usare per richiedere e scambiarsi informazioni. | Abbreviazione usata in riferimento all'architettura e interfaccia di programmazione di Astro e altri software che potrebbero essere integrati con il framework e che permette allo sviluppatore di controllare il comportamento di Astro e di eventuali software integrati ad esso. | -| Routing | La pratica dell'indirizzamento dell'utente alle varie pagine presenti all'interno di un sit/applicazione web. | Termine usato in riferimento ai processi tramite i quali la tua applicazione gestisce diversi URL e indirizza gli utenti al contenuto o alle pagine richieste. | -| Router | Controller che gestisce la navigazione all'interno del sito/applicazione web. | Termine usato per definire il controller che viene utilizzato per inizializzare e portare a termine le navigazioni che avvengono tra le varie pagine del sit/applicazione web sviluppata. | - -## 📚 Traduzioni comuni - -Alcuni vocaboli hanno una correlazione diretta o quasi con l'Italiano e vanno usate sempre allo stesso modo per mantenere una certa coerenza all'interno della documentazione: - -| Inglese | Italiano | -|------------------------------|----------------------------------------------------| -| SSR / Server-side rendering | SSR / Rendering lato server | -| Client-side | Lato browser / Lato client | -| Template | Template / Modello | -| CLI / Command line interface | CLI / Interfaccia da riga di comando | -| Route | Route / Rotta | -| UI components | Componenti dell'interfaccia utente / Componenti UI | -| Code fences (`---`) | Delimitatori di codice (`---`) / Tripli trattini | -| Imports | Import / Importare / Includere | -| Exports | Export / Esportare | -| Component Script | Script del Componente | -| Component Template | Modello del Componente | -| Bundle / Bundled | Pacchetto | -| Processed | Processato / Trasformato | -| Process | Processo | -| Wrap / To wrap | Racchiuso / Racchiudere | -| To slot | Inserire / Includere | -| To fetch | Richiedere (dati da un'Endpoint) | -| Endpoint | Endpoint / Punto d'accesso | -| Astro Islands | Isole Astro | -| Component Islands | Isole di Componenti | -| Island architecture | Architettura a Isole | -| Scope / Scoped | Scope / Ambito | -| Frontmatter | Avantesto. Blocco di testo iniziale in un file Markdown riservato alla definizione di codice e informazioni da rendere disponibili al client/browser (per es. data creazione, descrizione SEO, ecc.). Viene sempre delimitato da tre trattini (`---`) | - -## 📝 Note per la traduzione - -### Il brand Astro - -Astro deve essere trattato come un brand, pertanto alcune traduzioni devono essere adattate in quest'ottica. Per esempio quando si traduce una frase come "Create your new Astro project..." Astro non va prefissato con alcuna preposizione come ci verrebbe naturale fare ("...nuovo progetto **di** Astro..."), ma va mantenuto invariato e tradotto in questa maniera: "Crea il tuo nuovo progetto Astro...". Questa è una pratica comune anche in Italia e si può osservare in marchi come Barilla ("pasta ~~della~~ Barilla" vs. "pasta Barilla"), RayBan ("occhiali ~~della~~ RayBan" vs. "occhiali RayBan") e molti altri. - -> ⚠️ Il glossario è in continuo sviluppo e non è da considerarsi completo. Suggerimenti e contribuzioni sono ben accetti e incoraggiati! diff --git a/src/i18n/it/docsearch.ts b/src/i18n/it/docsearch.ts deleted file mode 100644 index ebfa57de5..000000000 --- a/src/i18n/it/docsearch.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { DocSearchDictionary } from '../translation-checkers'; - -export default DocSearchDictionary({ - button: 'Cerca', - placeholder: 'Cerca nella documentazione', - shortcutLabel: 'Premi / per cercare', - resultsFooterLede: 'Cerchi un tema o un’integrazione per Astro? Hai bisogno di aiuto?', - resultsFooterIntegrations: 'Cartella delle integrazioni per Astro', - resultsFooterThemes: 'Vetrina dei temi per Astro', - resultsFooterDiscord: 'Unisciti a noi su Discord', - modal: {}, -}); diff --git a/src/i18n/it/nav.ts b/src/i18n/it/nav.ts deleted file mode 100644 index 5c1c795b0..000000000 --- a/src/i18n/it/nav.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { NavDictionary } from '../translation-checkers'; - -export default NavDictionary({ - startHere: 'Comincia qua', - 'getting-started': 'Per Iniziare', - install: 'Installazione', - 'editor-setup': 'Setup dell’Editor', - 'guides/upgrade-to/v3': 'Aggiorna a v3', - - coreConcepts: 'Concetti Chiave', - 'concepts/why-astro': 'Perché Astro', - 'concepts/islands': 'Le Isole Astro', - - tutorials: 'Tutorial', - 'blog-tutorial': 'Costruisci un Blog', - - basics: 'Le basi', - - 'core-concepts/project-structure': 'Struttura del Progetto', - 'core-concepts/astro-components': 'Componenti', - 'core-concepts/astro-pages': 'Pagine', - 'core-concepts/layouts': 'Layout', - - examples: 'Soluzioni', - 'guides/migrate-to-astro': 'Passa ad Astro', - 'guides/cms': 'Connetti una CMS', - 'guides/backend': 'Aggiungi un servizio backend', - 'guides/integrations-guide': 'Aggiungi un’integrazione', - 'guides/deploy': 'Pubblica il tuo sito', - 'guides/recipes': 'Altre soluzioni', - - features: 'Guide', - 'core-concepts/astro-syntax': 'Sintassi dei Template di Astro', - 'core-concepts/framework-components': 'Framework UI', - 'core-concepts/routing': 'Navigazione', - 'guides/markdown-content': 'Markdown & MDX', - 'guides/content-collections': 'Collezioni di Contenuti', - 'guides/client-side-scripts': 'Script & Gestione degli Eventi', - 'guides/styling': 'CSS & Stili', - 'guides/images': 'Immagini', - 'guides/fonts': 'Font', - 'guides/imports': 'Import', - 'guides/server-side-rendering': 'Rendering lato server (SSR)', - 'core-concepts/endpoints': 'Punti d’accesso', - 'guides/data-fetching': 'Fetch dei Dati', - 'guides/middleware': 'Middleware', - 'guides/testing': 'Testing', - 'guides/view-transitions': 'Transizioni delle viste', - 'guides/troubleshooting': 'Risoluzione dei problemi', - - configuration: 'Configurazione', - 'guides/configuring-astro': 'Il File di Configurazione di Astro', - 'guides/typescript': 'TypeScript', - 'guides/aliases': 'Import Alias', - 'guides/environment-variables': 'Variabili d’Ambiente', - - reference: 'API Reference', - 'reference/configuration-reference': 'Configurazione', - 'reference/api-reference': 'API del Runtime', - 'reference/integrations-reference': 'API delle Integrazioni', - 'reference/adapter-reference': 'API degli Adattatori', - 'reference/image-service-reference': 'API del Servizio Immagini', - 'reference/directives-reference': 'Direttive dei Template', - 'reference/cli-reference': 'La CLI di Astro', - 'reference/error-reference': 'Reference degli Errori', - 'guides/publish-to-npm': 'Formato del Pacchetto NPM', -}); diff --git a/src/i18n/it/ui.ts b/src/i18n/it/ui.ts deleted file mode 100644 index 0ad6b49c0..000000000 --- a/src/i18n/it/ui.ts +++ /dev/null @@ -1,126 +0,0 @@ -export default { - 'a11y.skipLink': 'Vai al Contenuto', - 'a11y.sectionLink': 'Sezione intitolata', - 'navbar.a11yTitle': 'Barra di navigazione', - // Site settings - 'site.title': 'Documentazione di Astro', - 'site.description': 'Costruisci siti web veloci con meno JavaScript sul client.', - 'site.og.imageSrc': '/default-og-image.png?v=1', - 'site.og.imageAlt': - 'Logo di Astro su una distesa di stelle, con un pianeta viola simile a Saturno che fluttua in primo piano a destra', - // Left Sidebar - 'leftSidebar.a11yTitle': 'Principale', - 'leftSidebar.learnTab': 'Impara', - 'leftSidebar.referenceTab': 'Reference', - 'leftSidebar.viewInEnglish': 'Visualizza in Inglese', - 'leftSidebar.sponsoredBy': 'Sponsorizzato da', - // Right Sidebar - 'rightSidebar.a11yTitle': 'Secondaria', - 'rightSidebar.onThisPage': 'In questa Pagina', - 'rightSidebar.overview': 'Panoramica', - 'rightSidebar.community': 'Comunità', - 'rightSidebar.joinDiscord': 'Unisciti a noi su Discord', - 'rightSidebar.readBlog': 'Leggi i post sul nostro blog', - 'rightSidebar.openCollective': 'Il nostro Open Collective', - 'rightSidebar.contribute': 'Contribuisci', - 'rightSidebar.contributorGuides': 'Linee guida per i contributor', - 'rightSidebar.editPage': 'Modifica questa pagina', - 'rightSidebar.translatePage': 'Traduci questa pagina', - 'rightSidebar.github': 'Documentazione di Astro su GitHub', - // Footer - 'footer.privacyPolicy': 'Privacy Policy', - // `` acessibility labels - 'themeToggle.useLight': 'Usa il tema chiaro', - 'themeToggle.useDark': 'Usa il tema scuro', - // Used in previous/next page links at the bottom of pages - 'articleNav.nextPage': 'Avanti', - 'articleNav.prevPage': 'Indietro', - // Used in ``: Added in: v0.24.0 [NEW] - 'since.addedIn': 'Aggiunto in:', - 'since.new': 'Nuovo', - 'since.beta': 'Beta', - // Installation Guide - 'install.autoTab': 'CLI Automatica', - 'install.manualTab': 'Setup Manuale', - // `` vocabulary - 'deploy.sectionTitle': 'Guide di Pubblicazione', - 'deploy.altSectionTitle': 'Altre Guide di Pubblicazione', - 'deploy.filterLabel': 'Filtra per tipo', - 'deploy.ssrTag': 'SSR', - 'deploy.staticTag': 'Statica', - // CMS Guides vocabulary - 'cms.navTitle': 'Altre guide per le CMS', - // Migration Guides vocabulary - 'migration.navTitle': 'Altre guide per le migrazioni', - // Recipes vocabulary - 'recipes.navTitle': 'Altre soluzioni', - // `` vocabulary - 'recipesLink.singular': 'Soluzione simile:', - 'recipesLink.plural': 'Soluzioni simili', - // `` fallback text - 'contributors.seeAll': 'Vedi tutti i contributor', - // Fallback content notice shown when a page is not yet translated - 'fallbackContent.notice': - 'Questa pagina non è ancora disponibile nella tua lingua, quindi ti mostriamo la versione in Inglese. Puoi aiutarci a tradurla!', - 'fallbackContent.linkText': 'Scopri di più su come puoi contribuire', - // 404 Page - '404.title': 'Non trovata', - '404.content': 'Questa pagina non si trova nel nostro sistema solare.', - '404.linkText': 'Torna alla home.', - // Aside component default labels - 'aside.note': 'Nota', - 'aside.tip': 'Consiglio', - 'aside.caution': 'Attenzione', - 'aside.danger': 'Pericolo', - // `` vocabulary - 'languageSelect.label': 'Seleziona la lingua', - // Integrations vocabulary - 'integrations.changelog': 'Registro delle modifiche', - 'integrations.footerTitle': 'Altre Integrazioni', - 'integrations.renderers': 'Framework UI', - 'integrations.adapters': 'Adattatori SSR', - 'integrations.others': 'Altri', - // Checklist component - 'checklist.or': 'oppure', - // Multiple Choice component - 'multipleChoice.defaultCorrect': 'Corretto!', - 'multipleChoice.defaultIncorrect': 'Riprova!', - 'multipleChoice.submitLabel': 'Invia', - // Tutorial Progress - 'progress.todo': 'Da fare', - 'progress.done': 'Completato', - // Tutorial Navigation - 'tutorial.trackerLabel': 'Progresso del Tutorial', - 'tutorial.unit': 'Unità', - // Tutorial - 'tutorial.getReady': 'Preparati a…', - // Feedback Fish widget - 'feedback.button': 'Dicci che ne pensi', - 'feedback.a11yLabel': 'Modulo per il feedback', - 'feedback.formTitle': 'A cosa stai pensando?', - 'feedback.categoryGroupLabel': 'Scegli la categoria del feedback', - 'feedback.issue': 'Problema', - 'feedback.createIssue': 'Crea una Issue su GitHub', - 'feedback.idea': 'Idea', - 'feedback.other': 'Altro', - 'feedback.messageA11yLabel': 'Messaggio', - 'feedback.placeholder': 'Cosa vuoi farci sapere?', - 'feedback.submit': 'Invia il feedback', - 'feedback.close': 'Chiudi il modulo per il feedback', - 'feedback.success': 'Grazie! Abbiamo ricevuto il tuo feedback.', - // `` component - 'fileTree.directoryLabel': 'Cartella', - // Code snippet vocabulary - 'expressiveCode.terminalWindowFallbackTitle': 'Finestra del terminale', - 'expressiveCode.copyButtonTooltip': 'Copia', - 'expressiveCode.copyButtonCopied': 'Copiato!', - // Backend Guides vocabulary - 'backend.navTitle': 'Altre guide per servizi backend', - // Stubs vocabulary - 'stub.title': 'Espandi questo abbozzo!', - 'stub.subtitle': 'Questa guida è un abbozzo.', - 'stub.description.migration': - 'Vuoi contribuire a questa guida? Hai un articolo, video, o un’altra risorsa da condividere a proposito di questa tecnologia su Astro?', - 'stub.description.cms': 'Ne sai di più su come usare questo CMS con Astro?', - 'stub.description.backend': 'Ne sai di più su come usare questo servizio di back-end con Astro?', -}; diff --git a/src/i18n/ja/README.md b/src/i18n/ja/README.md deleted file mode 100644 index 0e6d18949..000000000 --- a/src/i18n/ja/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# 日本語翻訳ガイド - -Astroドキュメントの日本語翻訳に興味を持っていただき、ありがとうございます! -Astroの日本語翻訳にはAstroユーザーであり、ネイティブレベルの日本語能力があれば誰でも参加できます。 - -参加するには[🌐 i18n Guide](https://github.com/withastro/docs/blob/main/contributor-guides/translating-astro-docs.md)にも目を通しておいてください。 -また、[Discordの#docs-i18n内スレッドi18n-gang-ja](https://discord.com/channels/830184174198718474/972429103821111326)では日本語でチャットできます。翻訳が被ったりすることを避けるためにもぜひご参加ください。 - -## このガイドの目的 - -このガイドは、日本語特有のルールや用語集を定義することで、翻訳者が迷わずに翻訳しやすいように用意されました。 -また、翻訳のルールや用語を日本語ドキュメント全体で統一して、ドキュメントとしてのクオリティを担保するのも目的です。 - -## 日本語ルール - -- 基本的に「です・ます調」にします -- _イタリック_ は本文中でスペースを空ける必要があり、日本語として不自然になるので省略してもかまいません -- 英語単語と日本語の間にはスペースを空けません(Prettier 2系だとスペースが入るので気をつけてください) -- 冗長表現はさけてください - - することができます → できます - - 使うことができます → 使えます -- メニュー項目など表示領域が限られている箇所(たとえばsrc/i18n/ja/ui.tsのRight Sidebar)では、たとえば「このページを編集」などのように、可能であれば文末の「する」を省略します(「このページを編集する」とは訳さないでください) - - ただし、「貢献する」のように目的語などがなく「名詞+する」だけの場合は「する」を省略しません - -## 用語集 - -| 元の用語 | 翻訳 | 備考 -|:----|:----|:---- -| adapter | アダプター | -| build | ビルドする | Astroが生成する工程のことを指す場合は構築などにしません -| content collections | コンテンツコレクション | -| contributor | コントリビューター | ただし、動詞としてのcontributeは「貢献する」などの通常の日本語にします -| dependency | 依存関係 | -| frontmatter | フロントマター | フロントマターの概念を指す場合。プロパティを示す場合はfrontmatterのまま訳しません -| integration | インテグレーション | Astroの機能を指す場合はインテグレーションにします -| island(s) | アイランド | Astroアイランドを指す場合はアイランド。機能ではなく、島のことを言ってる場合は島と訳します -| page | ページ | -| partial hydration | パーシャルハイドレーション | -| render | レンダリング(する) | -| route | ルーティング | routeとrootを区別するため、訳文ではrouteを基本的に「ルーティング」と訳します -| Markdown | Markdown | Markdownはマークダウンとカタカナ表記にしません -| Issue | Issue | GitHubにおけるIssueについてはカタカナ表記にしません - -## このガイドへの追加や変更 - -このドキュメントは現時点での日本語翻訳チームの合意です。常に改善されるべきものです。 -ドキュメントの改善や変更すべき点があれば、Discordのi18n-gang-jaスレッドにて相談してください。 diff --git a/src/i18n/ja/docsearch.ts b/src/i18n/ja/docsearch.ts deleted file mode 100644 index 54b3b7ad1..000000000 --- a/src/i18n/ja/docsearch.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { DocSearchDictionary } from '../translation-checkers'; - -export default DocSearchDictionary({ - button: '検索', - placeholder: 'ドキュメントを検索する', - shortcutLabel: '/ キーを押して検索する', - resultsFooterLede: 'Astroインテグレーションやテーマをお探しですか?ヘルプが必要でしょうか?', - resultsFooterIntegrations: 'Astroインテグレーション一覧', - resultsFooterThemes: 'Astroテーマのショーケース', - resultsFooterDiscord: 'Discordに参加する', - modal: {}, -}); diff --git a/src/i18n/ja/nav.ts b/src/i18n/ja/nav.ts deleted file mode 100644 index 03eca91ed..000000000 --- a/src/i18n/ja/nav.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { NavDictionary } from '../translation-checkers'; - -export default NavDictionary({ - // Start Here - startHere: 'スタートガイド', - 'getting-started': 'はじめに', - install: 'インストール', - 'editor-setup': 'エディタのセットアップ', - 'guides/upgrade-to/v3': 'v3へのアップグレード', - - // Core Concepts - coreConcepts: 'コアコンセプト', - 'concepts/why-astro': 'Astroを選ぶ理由', - 'concepts/islands': 'Astroアイランド', - - // Tutorials - tutorials: 'チュートリアル', - 'blog-tutorial': 'ブログを作る', - 'add-collections-tutorial': 'コンテンツコレクションで拡張する', - 'add-transitions-tutorial': 'ビュートランジションで拡張する', - - // Basics - basics: '基本', - 'core-concepts/project-structure': 'ディレクトリ構成', - 'core-concepts/astro-components': 'コンポーネント', - 'core-concepts/astro-pages': 'ページ', - 'core-concepts/layouts': 'レイアウト', - - // Recipes - examples: 'レシピ', - 'guides/migrate-to-astro': 'Astroへの移行', - 'guides/cms': 'CMSとの接続', - 'guides/backend': 'バックエンドサービスの追加', - 'guides/integrations-guide': 'インテグレーションの追加', - 'guides/deploy': 'サイトのデプロイ', - 'guides/recipes': 'その他のレシピ', - - // Guides - features: 'ガイド', - 'core-concepts/astro-syntax': 'Astroテンプレートの構文', - 'core-concepts/framework-components': 'UIフレームワーク', - 'core-concepts/routing': 'ルーティング', - 'guides/markdown-content': 'MarkdownとMDX', - 'guides/content-collections': 'コンテンツコレクション', - 'guides/client-side-scripts': 'スクリプトとイベントハンドリング', - 'guides/styling': 'CSSとスタイル', - 'guides/images': '画像', - 'guides/fonts': 'フォント', - 'guides/imports': 'インポート', - 'guides/server-side-rendering': 'サーバーサイドレンダリング(SSR)', - 'core-concepts/endpoints': 'エンドポイント', - 'guides/data-fetching': 'データフェッチ', - 'guides/middleware': 'ミドルウェア', - 'guides/testing': 'テスト', - 'guides/view-transitions': 'ビュートランジション', - 'guides/troubleshooting': 'トラブルシューティング', - - // Configuration - configuration: '設定', - 'guides/configuring-astro': 'Astroの設定ファイル', - 'guides/typescript': 'TypeScript', - 'guides/aliases': 'importエイリアス', - 'guides/environment-variables': '環境変数', - - // Reference - reference: 'リファレンス', - 'reference/configuration-reference': '設定方法', - 'reference/api-reference': 'ランタイムAPI', - 'reference/integrations-reference': 'インテグレーションAPI', - 'reference/adapter-reference': 'アダプターAPI', - 'reference/image-service-reference': '画像サービスAPI', - 'reference/directives-reference': 'テンプレートディレクティブ', - 'reference/cli-reference': 'Astro CLI', - 'reference/error-reference': 'エラーリファレンス', - 'guides/publish-to-npm': 'NPMパッケージの形式', -}); diff --git a/src/i18n/ja/ui.ts b/src/i18n/ja/ui.ts deleted file mode 100644 index c061f2aef..000000000 --- a/src/i18n/ja/ui.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { UIDictionary } from '../translation-checkers'; - -export default UIDictionary({ - 'a11y.skipLink': 'コンテンツにスキップ', - 'a11y.sectionLink': 'セクションタイトル:', - 'navbar.a11yTitle': 'トップナビゲーション', - // Site settings - 'site.title': 'Astroドキュメント', - 'site.description': - 'より少ないクライアントサイドJavaScriptで、より高速なWebサイトを構築できます。', - 'site.og.imageSrc': '/default-og-image.png?v=1', - 'site.og.imageAlt': '星空にAstroロゴ、右手前には紫色の土星のような惑星が見える。', - // Left Sidebar - 'leftSidebar.a11yTitle': 'サイトナビゲーション', - 'leftSidebar.learnTab': '学習', - 'leftSidebar.referenceTab': 'リファレンス', - 'leftSidebar.viewInEnglish': '英語版で見る', - 'leftSidebar.sponsoredBy': 'スポンサー', - // Right Sidebar - 'rightSidebar.a11yTitle': '目次', - 'rightSidebar.onThisPage': '目次', - 'rightSidebar.overview': '概要', - 'rightSidebar.community': 'コミュニティ', - 'rightSidebar.joinDiscord': 'Discordに参加', - 'rightSidebar.readBlog': 'ブログを読む', - 'rightSidebar.openCollective': 'Open Collectiveで支援', - 'rightSidebar.contribute': '貢献する', - 'rightSidebar.contributorGuides': 'コントリビューターガイド', - 'rightSidebar.editPage': 'このページを編集', - 'rightSidebar.translatePage': 'このページを翻訳', - 'rightSidebar.github': 'GitHubリポジトリ', - // Footer - 'footer.privacyPolicy': 'プライバシーポリシー', - // `` acessibility labels - 'themeToggle.useLight': 'ライトモード', - 'themeToggle.useDark': 'ダークモード', - // Used in previous/next page links at the bottom of pages - 'articleNav.nextPage': '次のページ', - 'articleNav.prevPage': '戻る', - // Used in ``: Added in: v0.24.0 [NEW] - 'since.addedIn': '追加:', - 'since.new': 'New', - 'since.beta': 'ベータ', - // Installation Guide - 'install.autoTab': '自動CLI', - 'install.manualTab': '手動セットアップ', - // `` vocabulary - 'deploy.sectionTitle': 'デプロイガイド', - 'deploy.altSectionTitle': 'その他のデプロイガイド', - 'deploy.filterLabel': 'デプロイ種別でフィルタ', - 'deploy.ssrTag': 'SSR', - 'deploy.staticTag': 'Static', - // CMS Guides vocabulary - 'cms.navTitle': 'その他のCMSガイド', - // Migration Guides vocabulary - 'migration.navTitle': 'その他のマイグレーションガイド', - // Recipes vocabulary - 'recipes.navTitle': 'その他のレシピ', - // `` vocabulary - 'recipesLink.singular': '関連レシピ:', - 'recipesLink.plural': '関連レシピ', - // `` fallback texta - 'contributors.seeAll': 'すべてのコントリビューターを見る', - // Fallback content notice shown when a page is not yet translated - 'fallbackContent.notice': - 'このページはまだ日本語版が用意されていないため、英語版を表示しています。興味があればこのページの翻訳に協力できます!', - 'fallbackContent.linkText': '貢献の方法についてはこちらをご覧ください', - // 404 Page - '404.title': 'ページが見つかりません', - '404.content': 'このページは、太陽系にはありません。', - '404.linkText': '家へ帰る', - // Aside component default labels - 'aside.note': 'ノート', - 'aside.tip': 'ヒント', - 'aside.caution': '注意', - 'aside.danger': '危険', - // `` vocabulary - 'languageSelect.label': '言語の選択', - // Integrations vocabulary - 'integrations.changelog': 'チェンジログ', - 'integrations.footerTitle': '他のインテグレーション', - 'integrations.renderers': 'UIフレームワーク', - 'integrations.adapters': 'SSRアダプター', - 'integrations.others': 'その他', - // Checklist component - 'checklist.or': 'または', - // Multiple Choice component - 'multipleChoice.defaultCorrect': '正解!', - 'multipleChoice.defaultIncorrect': 'もう一度!', - 'multipleChoice.submitLabel': '確認する', - // Tutorial Progress - 'progress.todo': '未完了', - 'progress.done': '完了', - // Tutorial Navigation - 'tutorial.trackerLabel': 'チュートリアルの進捗', - 'tutorial.unit': 'ユニット', - // Tutorial - 'tutorial.getReady': 'ここで学ぶことは…', - // Feedback Fish widget - 'feedback.button': 'フィードバックする', - 'feedback.a11yLabel': 'フィードバックフォーム', - 'feedback.formTitle': 'どんなことを?', - 'feedback.categoryGroupLabel': 'フィードバックカテゴリを選択', - 'feedback.issue': '問題', - 'feedback.createIssue': 'GitHub Issueを作成', - 'feedback.idea': 'アイデア', - 'feedback.other': 'その他', - 'feedback.messageA11yLabel': 'メッセージ', - 'feedback.placeholder': 'なにをお知らせしますか?', - 'feedback.submit': 'フィードバックを送る', - 'feedback.close': 'フィードバックフォームを閉じる', - 'feedback.success': 'ありがとうございます!フィードバックを受け取りました。', - // `` component - 'fileTree.directoryLabel': 'ディレクトリ', - // Code snippet vocabulary - 'expressiveCode.terminalWindowFallbackTitle': 'ターミナルウィンドウ', - 'expressiveCode.copyButtonTooltip': 'クリップボードにコピー', - 'expressiveCode.copyButtonCopied': 'コピーしました!', - // Backend Guides vocabulary - 'backend.navTitle': 'その他のバックエンドサービスガイド', - // Stubs vocabulary - 'stub.title': 'このページに追記する!', - 'stub.subtitle': 'このガイドは未完成です。', - 'stub.description.migration': - 'このガイドに貢献したいですか?この技術からAstroへの移行に関するブログ記事や動画、その他のリソースを共有したいですか?', - 'stub.description.cms': 'このCMSをAstroで使う方法をご存知ですか?', - 'stub.description.backend': 'このバックエンドサービスをAstroで使う方法をご存知ですか?', -}); diff --git a/src/i18n/ko/README.md b/src/i18n/ko/README.md deleted file mode 100644 index 7c191ab52..000000000 --- a/src/i18n/ko/README.md +++ /dev/null @@ -1,96 +0,0 @@ -# Astro 문서 한국어 번역 안내서 - -이 안내서는 Astro 공식 문서의 한국어 번역에 기여하려는 분들을 위해 작성되었습니다. - -한국어 번역에 관심있는 분들은 [Astro 공식 Discord 서버](https://astro.build/chat)의 [한국어 번역 채널](https://discord.com/channels/830184174198718474/1073677243290767512)에 참여해주세요! - -## 기본 규칙 - -- **항상 원 저자의 의도를 유지하세요:** 가능한 한 문장의 어조와 방향이 영어 버전에 쓰여진 내용과 일치하도록 번역하세요. -- **쉬운 이해를 우선시하세요:** 간혹 정확한 번역과 쉽게 이해할 수 있는 번역 사이에서 선택해야 하는 경우가 있습니다. 예를 들어 용어를 사용하기보다 풀어서 설명해야 하는 경우가 존재합니다. 이런 경우 항상 최대한 단순하고 간결하며 이해하기 쉽게 번역해야 합니다. - -## 표준 - -간결하고 일관된 번역을 유지하기 위해 다음과 같은 몇 가지 표준이 권장됩니다. - -### 링크 - -- **외부 링크:** 외부 링크의 한국어 버전이 존재하는 경우 URL을 업데이트하여 한국어 버전의 링크로 이동할 수 있어야 합니다. 그렇지 않은 경우 영어 페이지의 기존 URL을 유지합니다. -- **내부 링크:** - - Astro 공식 문서 페이지에 대한 링크는 항상 `/en`을 `/ko`로 업데이트합니다. - - 링크로 이동할 페이지가 아직 번역되지 않은 경우에는 `/en`은 `/ko`로 수정하되, ID는 영어 버전을 그대로 유지합니다. - - 다른 페이지에서 링크된 페이지를 번역하는 경우, 해당 페이지를 링크하는 다른 페이지의 업데이트도 PR에 포함시킵니다. - -### 코드 - -Astro API, JavaScript 또는 기타 라이브러리의 일부가 아닌 경우에는 한국어를 사용하는 독자들의 이해를 돕기 위해 주석, 문자열 데이터를 번역합니다. - -예시: - -```astro ---- -// Example: src/pages/index.astro -import MySiteLayout from '../layouts/MySiteLayout.astro'; ---- - -

    My page content, wrapped in a layout!

    -
    -``` - -번역: - -```astro ---- -// 예시: src/pages/index.astro -import MySiteLayout from '../layouts/MySiteLayout.astro'; ---- - -

    레이아웃에 포함된 페이지 콘텐츠

    -
    -``` - -### 기타 - -- 독자를 지칭해야 하는 경우 `당신`, `귀하`라는 표현 대신 `여러분` 이라는 표현을 사용하는 것을 권장합니다. -- `인라인 코드`가 디렉터리 또는 파일의 경로를 나타내는 경우 디렉터리 또는 파일임을 명시하세요. 예: (`/src/pages` 디렉터리, `/src/pages/index.astro` 파일) - -## 용어집 - -잘못된 번역을 발견했거나 새로운 번역을 추가하고 싶다면 PR을 보내주세요! - -> `Markdown`, `Astro`, `TypeScript`, `React` 등 회사명, 제품명과 같은 고유한 이름은 한글로 번역하지 않습니다. - -| 원문 | 번역 | 출처 | 비고 | -| :------------------ | :------------ | :----------------------------------------------------------- | ---- | -| changelog | 변경 로그 | | | -| client-side | 클라이언트 측 | | | -| component | 컴포넌트 | 외래어 표기법 | | -| configuration | 구성 | [정보통신용어사전](https://terms.tta.or.kr/dictionary/dictionaryView.do?word_seq=039507-1) | | -| content collections | 콘텐츠 컬렉션 | 외래어 표기법 | | -| dependencies | 종속성 | | | -| directive | 지시어 | | 문장이 연상되는 지시문 대신 키워드 또는 예약어가 연상되는 지시어 사용 | -| directory | 디렉터리 | [우리말샘](https://opendict.korean.go.kr/dictionary/view?sense_no=136968) | | -| element | 요소 | [정보통신용어사전](https://terms.tta.or.kr/dictionary/dictionaryView.do?word_seq=095809-1) | | -| footer | 바닥글 | Microsoft | | -| fragment | 프래그먼트 | | | -| frontmatter | 프런트매터 | | | -| header | 머리글 | Microsoft | | -| integration | 통합 | | | -| island | 아일랜드 | 외래어 표기법 | | -| production | 프로덕션 | 외래어 표기법 | | -| release | 릴리스 | 마이크로소프트 | | -| rendering | 렌더링 | [정보통신용어사전](https://terms.tta.or.kr/dictionary/dictionaryView.do?word_seq=054262-2) | | -| script | 스크립트 | [정보통신용어사전](https://terms.tta.or.kr/dictionary/dictionaryView.do?word_seq=054948-1) | | -| server-side | 서버 측 | | | -| syntax | 구문 | [정보통신용어사전](https://terms.tta.or.kr/dictionary/dictionaryView.do?word_seq=057320-1) | | -| tag | 태그 | 외래어 표기법 | | -| template | 템플릿 | [정보통신용어사전](https://terms.tta.or.kr/dictionary/dictionaryView.do?word_seq=057749-1) | | -| troubleshooting | 문제 해결 | Microsoft | | -| variable | 변수 | [정보통신용어사전](https://terms.tta.or.kr/dictionary/dictionaryView.do?word_seq=059344-1) | | - -출처의 일부는 다음에서 찾을 수 있습니다. - -- 외래어 표기법: 국립국어원의 [외래어 표기법](https://kornorms.korean.go.kr/example/exampleList.do)에서 검색할 수 있습니다. - -- Microsoft: [Microsoft Terminology Search](https://msit.powerbi.com/view?r=eyJrIjoiODJmYjU4Y2YtM2M0ZC00YzYxLWE1YTktNzFjYmYxNTAxNjQ0IiwidCI6IjcyZjk4OGJmLTg2ZjEtNDFhZi05MWFiLTJkN2NkMDExZGI0NyIsImMiOjV9)에서 검색할 수 있습니다. - diff --git a/src/i18n/ko/docsearch.ts b/src/i18n/ko/docsearch.ts deleted file mode 100644 index 2d2b28c8a..000000000 --- a/src/i18n/ko/docsearch.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { DocSearchDictionary } from '../translation-checkers'; - -export default DocSearchDictionary({ - button: '검색', - placeholder: '검색어 입력', - shortcutLabel: '/ 키를 눌러 검색을 시작하세요.', - resultsFooterLede: 'Astro 통합 또는 테마를 찾고 있나요? 도움이 더 필요한가요?', - resultsFooterIntegrations: 'Astro 통합 디렉터리', - resultsFooterThemes: 'Astro 테마 쇼케이스', - resultsFooterDiscord: 'Discord에 참여하기', - modal: {}, -}); diff --git a/src/i18n/ko/nav.ts b/src/i18n/ko/nav.ts deleted file mode 100644 index e00750152..000000000 --- a/src/i18n/ko/nav.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { NavDictionary } from '../translation-checkers'; - -export default NavDictionary({ - startHere: '시작하기', - 'getting-started': '개요', - install: '설치', - 'editor-setup': '편집기 설정', - 'guides/upgrade-to/v3': 'v3로 업그레이드', - - coreConcepts: '핵심 개념', - 'concepts/why-astro': '왜 Astro인가?', - 'concepts/islands': 'Astro 아일랜드', - - tutorials: '튜토리얼', - 'blog-tutorial': '블로그 만들기', - 'add-collections-tutorial': '콘텐츠 컬렉션 사용하기', - 'add-transitions-tutorial': 'View Transitions 사용하기', - - basics: '기본', - 'core-concepts/project-structure': '프로젝트 구조', - 'core-concepts/astro-components': '컴포넌트', - 'core-concepts/astro-pages': '페이지', - 'core-concepts/layouts': '레이아웃', - 'core-concepts/astro-syntax': 'Astro 템플릿 구문', - 'core-concepts/rendering-modes': '렌더링 모드', - - builtins: '내장 기능', - 'guides/content-collections': '콘텐츠 컬렉션', - 'guides/view-transitions': 'View Transitions', - 'guides/prefetch': '프리페치', - - addons: '애드온', - 'guides/integrations-guide': '통합 추가', - 'core-concepts/framework-components': 'UI 프레임워크', - 'guides/server-side-rendering': '서버 측 렌더링 (SSR)', - - examples: '레시피', - 'guides/migrate-to-astro': 'Astro로 전환', - 'guides/cms': 'CMS 연결', - 'guides/backend': '백엔드 서비스 추가', - 'guides/deploy': '사이트 배포', - 'guides/recipes': '더 많은 레시피', - - features: '안내서', - 'core-concepts/routing': '라우팅', - 'guides/markdown-content': 'Markdown & MDX', - 'guides/client-side-scripts': '스크립트 & 이벤트 처리', - 'guides/styling': 'CSS & 스타일링', - 'guides/images': '이미지', - 'guides/fonts': '글꼴', - 'guides/imports': '가져오기', - 'core-concepts/endpoints': '엔드포인트', - 'guides/data-fetching': '데이터 페칭', - 'guides/internationalization': '국제화', - 'guides/middleware': '미들웨어', - 'guides/testing': '테스팅', - 'guides/troubleshooting': '문제 해결', - - configuration: '구성', - 'guides/configuring-astro': 'Astro 구성 파일', - 'guides/typescript': 'TypeScript', - 'guides/aliases': '가져오기 별칭', - 'guides/environment-variables': '환경 변수', - - reference: '참조', - 'reference/configuration-reference': '구성', - 'reference/api-reference': '런타임 API', - 'reference/integrations-reference': '통합 API', - 'reference/adapter-reference': '어댑터 API', - 'reference/image-service-reference': '이미지 서비스 API', - 'reference/dev-overlay-plugin-reference': '개발 오버레이 플러그인 API', - 'reference/directives-reference': '템플릿 지시어', - 'reference/cli-reference': 'Astro CLI', - 'reference/error-reference': '오류 참조', - 'guides/publish-to-npm': 'NPM 패키지 형식', -}); diff --git a/src/i18n/ko/ui.ts b/src/i18n/ko/ui.ts deleted file mode 100644 index d3e29ba95..000000000 --- a/src/i18n/ko/ui.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { UIDictionary } from '../translation-checkers'; - -export default UIDictionary({ - 'a11y.skipLink': '콘텐츠로 이동', - 'a11y.sectionLink': '섹션 제목: ', - 'navbar.a11yTitle': '탐색 메뉴', - // Site settings - 'site.title': 'Astro 문서', - 'site.description': '더 적은 클라이언트 측 JavaScript로 더 빠른 웹사이트를 구축하세요.', - 'site.og.imageSrc': '/default-og-image.png?v=1', - 'site.og.imageAlt': - '오른쪽 전경에 보라색 토성과 같은 행성이 떠 있는 별이 빛나는 넓은 우주에 있는 Astro 로고', - // Left Sidebar - 'leftSidebar.a11yTitle': '왼쪽 사이드바', - 'leftSidebar.learnTab': '배우기', - 'leftSidebar.referenceTab': '참조', - 'leftSidebar.viewInEnglish': '영어로 보기', - 'leftSidebar.sponsoredBy': '후원', - // Right Sidebar - 'rightSidebar.a11yTitle': '오른쪽 사이드바', - 'rightSidebar.onThisPage': '목차', - 'rightSidebar.overview': '개요', - 'rightSidebar.community': '커뮤니티', - 'rightSidebar.joinDiscord': 'Discord', - 'rightSidebar.readBlog': '블로그', - 'rightSidebar.openCollective': 'Open Collective', - 'rightSidebar.contribute': '기여하기', - 'rightSidebar.contributorGuides': '기여자를 위한 안내서', - 'rightSidebar.editPage': '페이지 수정', - 'rightSidebar.translatePage': '이 페이지 번역', - 'rightSidebar.github': 'GitHub에서 Astro 문서 보기', - // Footer - 'footer.privacyPolicy': '개인 정보 정책', - // `` acessibility labels - 'themeToggle.useLight': '밝은 테마', - 'themeToggle.useDark': '어두운 테마', - // Used in previous/next page links at the bottom of pages - 'articleNav.nextPage': '다음 페이지', - 'articleNav.prevPage': '뒤로', - // Used in ``: Added in: v0.24.0 [NEW] - 'since.addedIn': 'Added in:', - 'since.new': 'New', - 'since.beta': 'Beta', - // Installation Guide - 'install.autoTab': '자동 CLI', - 'install.manualTab': '수동 설치', - // `` vocabulary - 'deploy.sectionTitle': '배포 안내서', - 'deploy.altSectionTitle': '더 많은 배포 안내서', - 'deploy.filterLabel': '배포 타입에 따라 분류', - 'deploy.ssrTag': 'SSR', - 'deploy.staticTag': 'Static', - // CMS Guides vocabulary - 'cms.navTitle': '더 많은 CMS 안내서', - // Migration Guides vocabulary - 'migration.navTitle': '더 많은 전환 안내서', - // Recipes vocabulary - 'recipes.navTitle': '더 많은 레시피', - // `` vocabulary - 'recipesLink.singular': '관련 레시피:', - 'recipesLink.plural': '관련 레시피', - // `` fallback text - 'contributors.seeAll': '모든 기여자', - // Fallback content notice shown when a page is not yet translated - 'fallbackContent.notice': - '이 페이지는 아직 한글로 번역되지 않았으므로 영어 버전의 페이지를 보게 됩니다. 번역에 참여해주세요.', - 'fallbackContent.linkText': '번역에 참여하는 방법', - // 404 Page - '404.title': '찾을 수 없음', - '404.content': '이 페이지는 우리 태양계에 존재하지 않습니다.', - '404.linkText': '홈페이지로 이동', - // Aside component default labels - 'aside.note': '참고', - 'aside.tip': '팁', - 'aside.caution': '경고', - 'aside.danger': '주의', - // `` vocabulary - 'languageSelect.label': '언어 선택', - // Integrations vocabulary - 'integrations.changelog': '변경 로그', - 'integrations.footerTitle': '더 많은 통합', - 'integrations.renderers': 'UI 프레임워크', - 'integrations.adapters': 'SSR 어댑터', - 'integrations.others': '기타', - // Checklist component - 'checklist.or': '또는', - // Multiple Choice component - 'multipleChoice.defaultCorrect': '정확해요!', - 'multipleChoice.defaultIncorrect': '다시 선택하세요!', - 'multipleChoice.submitLabel': '제출', - // Tutorial Progress - 'progress.todo': '수행할 작업', - 'progress.done': '완료', - // Tutorial Navigation - 'tutorial.trackerLabel': '튜토리얼 진행도', - 'tutorial.unit': '학습 단위', - // Tutorial - 'tutorial.getReady': '요구 사항', - // Feedback Fish widget - 'feedback.button': '새로운 의견이 있으신가요?', - 'feedback.a11yLabel': '피드백 양식', - 'feedback.formTitle': '여러분의 생각을 들려주세요!', - 'feedback.categoryGroupLabel': '어떤 종류의 의견인가요?', - 'feedback.issue': '문제 보고', - 'feedback.createIssue': 'GitHub Issue 생성', - 'feedback.idea': '새로운 아이디어', - 'feedback.other': '기타', - 'feedback.messageA11yLabel': '전달할 생각', - 'feedback.placeholder': '어떤 생각을 우리에게 전달하고 싶나요?', - 'feedback.submit': '제출', - 'feedback.close': '피드백 양식 닫기', - 'feedback.success': '여러분의 생각을 들려주셔서 감사합니다!', - // `` component - 'fileTree.directoryLabel': '디렉터리', - // Code snippet vocabulary - 'expressiveCode.terminalWindowFallbackTitle': '터미널 창', - 'expressiveCode.copyButtonTooltip': '클립보드로 복사', - 'expressiveCode.copyButtonCopied': '복사 완료!', - // Backend Guides vocabulary - 'backend.navTitle': '더 많은 백엔드 서비스 안내서', - // Stubs vocabulary - 'stub.title': '이 게시물을 완성하는데 도움을 주세요!', - 'stub.subtitle': '이 게시물은 아직 작성 중입니다.', - 'stub.description.migration': - '해당 기술에서 Astro로 전환하는 데 도움이 되는 글, 비디오 등 다양한 자료를 공유하고 싶으신가요?', - 'stub.description.cms': 'Astro에서 이 CMS를 사용하는 방법에 대해 잘 알고 계신가요?', - 'stub.description.backend': - 'Astro에서 이 백엔드 서비스를 사용하는 방법에 대해 더 잘 알고 계신가요?', -}); diff --git a/src/i18n/languages.ts b/src/i18n/languages.ts deleted file mode 100644 index 9d9d3805a..000000000 --- a/src/i18n/languages.ts +++ /dev/null @@ -1,30 +0,0 @@ -export const allLanguages = { - en: 'English', - de: 'Deutsch', - 'pt-br': 'Português do Brasil', - es: 'Español', - 'zh-cn': '简体中文', - 'zh-tw': '正體中文', - fr: 'Français', - hi: 'हिन्दी', - ar: 'العربية', - ja: '日本語', - ko: '한국어', - pl: 'Polski', - ru: 'Русский', - it: 'Italiano', -} as const; - -// Build for two languages only to speed up Astro's smoke tests -const twoLanguages = { - en: 'English', - ko: '한국어', -} as const; - -/** - * Map of language codes to a written out language name. - * Used to populate the language switcher in the navbar. - */ -export default import.meta.env?.PUBLIC_TWO_LANG ? twoLanguages : allLanguages; - -export const rtlLanguages = new Set(['ar']); diff --git a/src/i18n/pl/docsearch.ts b/src/i18n/pl/docsearch.ts deleted file mode 100644 index a4d798999..000000000 --- a/src/i18n/pl/docsearch.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { DocSearchDictionary } from '../translation-checkers'; - -export default DocSearchDictionary({ - button: 'Szukaj', - placeholder: 'Wyszukaj w dokumentacji', - shortcutLabel: 'Naciśnij klawisz / aby wyszukać', - resultsFooterLede: 'Szukasz integracji lub motywu Astro? Potrzebujesz pomocy?', - resultsFooterIntegrations: 'Katalog integracji Astro', - resultsFooterThemes: 'Katalog motywów Astro', - resultsFooterDiscord: 'Dołącz do naszego Discorda', - modal: {}, -}); diff --git a/src/i18n/pl/nav.ts b/src/i18n/pl/nav.ts deleted file mode 100644 index c82675fe5..000000000 --- a/src/i18n/pl/nav.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { NavDictionary } from '../translation-checkers'; - -export default NavDictionary({ - startHere: 'Zacznij tutaj', - 'getting-started': 'Wprowadzenie', - install: 'Instalacja', - 'editor-setup': 'Konfiguracja edytora', - 'guides/migrate-to-astro': 'Migracja do Astro', - 'guides/upgrade-to/v3': 'Aktualizacja do Astro 3.0', - //migrate: 'Przewodnik migracji', - tutorials: 'Samouczki', - 'blog-tutorial': 'Zbuduj bloga', - coreConcepts: 'Podstawowe pojęcia', - 'concepts/why-astro': 'Dlaczego Astro?', - 'concepts/islands': 'Wyspy Astro', - basics: 'Podstawy', - 'core-concepts/project-structure': 'Struktura projektu', - 'core-concepts/astro-components': 'Komponenty Astro', - 'core-concepts/astro-pages': 'Strony', - 'core-concepts/layouts': 'Układy', - 'guides/markdown-content': 'Markdown i MDX', - 'core-concepts/routing': 'Routowanie', - 'core-concepts/endpoints': 'Endpointy', - 'guides/deploy': 'Wdrażanie', - features: 'Przewodniki', - 'guides/styling': 'Stylowanie i CSS', - 'core-concepts/framework-components': 'Frameworki UI', - 'guides/imports': 'Importowanie', - 'guides/integrations-guide': 'Integracje', - 'guides/server-side-rendering': 'Renderowanie po stronie serwera (SSR)', - 'guides/data-fetching': 'Pobieranie danych', - 'guides/publish-to-npm': 'Publikowanie na NPM', - // 'core-concepts/sharing-state': 'Dzielenie stanu', - // 'guides/rss': 'RSS', - 'guides/troubleshooting': 'Rozwiązywanie problemów', - 'guides/cms': 'Łączenie z CMS', - 'guides/images': 'Obrazy', - // 'guides/fonts': 'Czcionki', - 'guides/testing': 'Testowanie', - 'guides/client-side-scripts': 'Skrypty i zdarzenia', - configuration: 'Konfiguracja', - 'guides/configuring-astro': 'Plik konfiguracyjny Astro', - 'guides/typescript': 'TypeScript', - 'guides/aliases': 'Aliasy importowania', - 'guides/environment-variables': 'Zmienne środowiskowe', - reference: 'Referencja', - 'reference/directives-reference': 'Dyrektywy szablonów', - 'reference/adapter-reference': 'API adapterów', - 'reference/integrations-reference': 'API integracji', - 'reference/cli-reference': 'Interfejs linii poleceń', - 'reference/api-reference': 'API runtime', - 'reference/configuration-reference': 'Konfiguracja', - 'reference/error-reference': 'Referencja błędów', -}); diff --git a/src/i18n/pl/ui.ts b/src/i18n/pl/ui.ts deleted file mode 100644 index 58465cd23..000000000 --- a/src/i18n/pl/ui.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { UIDictionary } from '../translation-checkers'; - -export default UIDictionary({ - 'a11y.skipLink': 'Przejdź do treści', - 'a11y.sectionLink': 'Dział zatytułowany', - 'navbar.a11yTitle': 'Góra', - // Site settings - 'site.title': 'Dokumentacja Astro', - 'site.description': - 'Buduj szybsze strony internetowe z mniejszą ilością JavaScript po stronie klienta.', - 'site.og.imageSrc': '/default-og-image.png?v=1', - 'site.og.imageAlt': - 'logo Astro na rozgwieżdżonej przestrzeni kosmicznej, z purpurową, nasyconą planetą unoszącą się na prawym pierwszym planie', - // Left Sidebar - 'leftSidebar.a11yTitle': 'Główny', - 'leftSidebar.learnTab': 'Dowiedz się', - 'leftSidebar.referenceTab': 'Referencje', - 'leftSidebar.viewInEnglish': 'Zobacz w języku angielskim', - 'leftSidebar.sponsoredBy': 'Sponsorowane przez', - // Right Sidebar - 'rightSidebar.a11yTitle': 'Poboczny', - 'rightSidebar.onThisPage': 'Na tej stronie', - 'rightSidebar.overview': 'Przegląd', - 'rightSidebar.community': 'Społeczność', - 'rightSidebar.joinDiscord': 'Dołącz do naszego Discorda', - 'rightSidebar.readBlog': 'Przeczytaj nasze posty na blogu', - 'rightSidebar.openCollective': 'Wesprzyj nas na Open Collective', - 'rightSidebar.contribute': 'Pomóż nam', - 'rightSidebar.editPage': 'Edytuj tę stronę', - 'rightSidebar.translatePage': 'Przetłumacz tę stronę', - 'rightSidebar.github': 'Dokumentacja Astro na GitHubie', - // Footer - 'footer.privacyPolicy': 'Polityka prywatności', - // `` acessibility labels - 'themeToggle.useLight': 'Użyj jasnego motywu', - 'themeToggle.useDark': 'Użyj ciemnego motywu', - // Used in previous/next page links at the bottom of pages - 'articleNav.nextPage': 'Następna strona', - 'articleNav.prevPage': 'Poprzednia strona', - // Used in ``: Added in: v0.24.0 [NEW] - 'since.addedIn': 'Dodane w:', - 'since.new': 'Nowe', - 'since.beta': 'Beta', - // Installation Guide - 'install.autoTab': 'Automatyczne CLI', - 'install.manualTab': 'Ręczna instalacja', - // `` vocabulary - 'deploy.sectionTitle': 'Poradnik wdrażania', - 'deploy.altSectionTitle': 'Więcej poradników wdrażania', - 'deploy.filterLabel': 'Filtruj po typie wdrażania', - 'deploy.ssrTag': 'SSR', - 'deploy.staticTag': 'Statyczne', - // CMS Guides vocabulary - 'cms.navTitle': 'Więcej poradników CMS', - // Migration Guides vocabulary - 'migration.navTitle': 'Więcej poradników migracji', - // `` fallback text - 'contributors.seeAll': 'Zobacz wszystkich współtwórców', - // Fallback content notice shown when a page is not yet translated - 'fallbackContent.notice': - 'Ta strona nie jest jeszcze dostępna w Twoim języku, więc pokazujemy Ci wersję angielską. Możesz pomóc tłumacząc ją!', - 'fallbackContent.linkText': 'Zobacz instrukcje tłumaczenia', - // 404 Page - '404.title': 'Nie znaleziono strony', - '404.content': 'Ta strona nie znajduje się w naszym układzie słonecznym.', - '404.linkText': 'Zabierz mnie do domu', - // Aside component default labels - 'aside.note': 'Notatka', - 'aside.tip': 'Wskazówka', - 'aside.caution': 'Uwaga', - 'aside.danger': 'Zagrożenie', - // Integrations vocabulary - 'integrations.changelog': 'Lista zmian', - 'integrations.footerTitle': 'Więcej integracji', - 'integrations.renderers': 'Frameworki UI', - 'integrations.adapters': 'Adaptery SSR', - 'integrations.others': 'Inne', - // Checklist component - 'checklist.or': 'lub', - // Multiple Choice component - 'multipleChoice.defaultCorrect': 'Poprawnie!', - 'multipleChoice.defaultIncorrect': 'Spróbuj ponownie!', - 'multipleChoice.submitLabel': 'Wyślij', - // Tutorial Progress - 'progress.todo': 'Do zrobienia', - 'progress.done': 'Ukończone', - // Tutorial Navigation - 'tutorial.trackerLabel': 'Postęp w tutorialu', - 'tutorial.unit': 'Jednostka', - // Tutorial - 'tutorial.getReady': 'Przygotuj się na…', - // Feedback Fish widget - 'feedback.button': 'Przekaż nam opinię', - 'feedback.a11yLabel': 'Formularz opinii', - 'feedback.formTitle': 'Czym chcesz się podzielić?', - 'feedback.categoryGroupLabel': 'Wybierz kategorię opinii', - 'feedback.issue': 'Problem', - 'feedback.idea': 'Pomysł', - 'feedback.other': 'Inne', - 'feedback.messageA11yLabel': 'Wiadomość', - 'feedback.placeholder': 'Co chciałbyś żebyśmy wiedzieli?', - 'feedback.submit': 'Wyślij feedback', - 'feedback.close': 'Zamknij formularz opinii', - // `` component - 'fileTree.directoryLabel': 'Folder', -}); diff --git a/src/i18n/pt-br/README.md b/src/i18n/pt-br/README.md deleted file mode 100644 index 1aa8be875..000000000 --- a/src/i18n/pt-br/README.md +++ /dev/null @@ -1,146 +0,0 @@ -# Guia PT-BR de Tradução do Astro - -Este guia foi feito pelo core maintainer [@Yan-Thomas](https://github.com/Yan-Thomas) para auxiliar contribuidores dessa tradução. Sinta-se livre para se juntar a nós nosso [grupo do Discord](https://astro.build/chat) para fazer perguntas, sugestões, etc. - -## Princípios da tradução - -- **Manter a intenção do escritor original:** Ao máximo possível, adaptar frases de forma com que o seu tom e direcionamento se alinhem com o que foi escrito na versão inglesa. Na documentação do Astro temos vários exemplos de frases com uma tonalidade amigável e divertida para tornar a leitura um pouco mais “humana”, e trazer isso à versão brasileira é algo importante. - -- **Priorizar a fácil compreensão:** Em contrapartida ao primeiro princípio, adaptar um texto para outra língua não é fácil, e muitas vezes precisamos negociar entre uma tradução fiel e uma que seja facilmente compreensível. Portanto, às vezes se torna necessário omitir algum termo e substituí-lo por sua explicação, por exemplo. Também há uma preocupação no vocabulário utilizado, que deve manter-se o mais simples e conciso possível, mantendo distância de uma “verborragia não ortodoxa”. Tradução, assim como a produção de filmes baseados em livros, é um processo de adaptação e é nada mais do que esperado que mudanças ocorram ao texto original quando necessário. - -- **Inspirar-se em outras traduções relevantes:** É valioso manter-se atento em outras traduções e se basear nelas. Isso é especialmente importante quando estamos traduzindo termos, pois precisamos tomar uma decisão informada sobre o quão fácil é compreender um termo traduzido, e se ao menos, esse termo já foi traduzido da mesma forma anteriormente. Visitar a documentação técnica traduzida de algumas tecnologias como [TypeScript](https://www.typescriptlang.org/pt/docs/), [Vue.js](https://pt.vuejs.org/guide/introduction.html) e a [MDN](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript) em português são ótimas fontes para tomar esse tipo de decisão. Também é super válido conferir blogs brasileiros no assunto que está sendo traduzido e ver como o escritor lida com os jargões e outros termos. - - -## Padrões - -Para manter uma tradução concisa e consistente, alguns padrões são recomendados: - -### Links - -Links para páginas externas, caso possuam versão em português, como os diversos links da MDN, devem ter sua URL atualizada para ir diretamente na versão em português. Caso contrário, se mantém a URL para a página em inglês. Caso o link se referia a um título da página que não existe na tradução, opte pelo link original. - -Já links a páginas da própria documentação do Astro devem ter “/en” substituído por “/pt-BR” em todos os casos. Inclusive, links que se encaminham a um título específico também precisam ter seus IDs automáticos substituídos pela versão em português. Para obter o ID específico de um cabeçalho da página, clique no link de navegação na barra lateral direita para o título específico e então a URL da página terá o ID que você está procurando por. - -Caso a página que o link leva ainda não tenha sido traduzida, apenas não modifique o ID de cabeçalho (caso possua). Quando esta página for traduzida, o sistema de CI irá notificar que os links em questão estão quebrados, e caso você seja a pessoa traduzindo uma página que foi linkada anteriormente, adicione essas modificações as outras páginas como parte do seu PR. - -Exemplo: -```md -⚙️ Our [Installation Guide](/en/install/auto/) -``` - -Deve ser traduzido como: -```md -⚙️ Nosso [Guia de Instalação](/pt-BR/install/auto/) -``` - - -### Imagens - -Imagens devem ser mantidas em sua URL original com texto em inglês, porém entre os colchetes, que representam o texto alternativo da imagem, uma descrição deve ser adicionada para a imagem ser explicativa a usuários de leitores de tela. - -Exemplo: -```md -![diagram](https://res.cloudinary.com/wedding-website/image/upload/v1596766231/islands-architecture-1.png) -``` - -Deve ser traduzido como: -```md -![Diagrama da estrutura de uma arquitetura em ilha, com seções de conteúdo estático e seções em destaque representando os componentes que serão hidratados, sendo eles o cabeçalho, o carrossel de imagens e uma barra lateral](https://res.cloudinary.com/wedding-website/image/upload/v1596766231/islands-architecture-1.png) -``` - -### Código - -Comentários, componentes de exemplo, variáveis, caminhos de arquivos e outros devem ser traduzidos caso não sejam parte da API do Astro, JavaScript ou outras bibliotecas. Isso tem a intenção de tornar os códigos de exemplo o menos restritivo possível para leitores com menor proficiência em inglês, levando em conta que parte fundamental de entender algumas páginas é ver os códigos de exemplo e os comentários que vem junto. - -Exemplo: -```astro ---- -// Example: src/pages/index.astro -import MySiteLayout from '../layouts/MySiteLayout.astro'; ---- - -

    My page content, wrapped in a layout!

    -
    -``` - -Deve ser traduzido como: -```astro ---- -// Exemplo: src/pages/index.astro -import LayoutDoMeuSite from '../layouts/LayoutDoMeuSite.astro'; ---- - -

    Conteúdo da minha página, envolto em um layout!

    -
    -``` - -## Glossário - -Tabela com a versão original e tradução (se houver) para diversos termos encontrados na documentação: - -| Original | Tradução | -| ----------------------------------- | --------------------------------------- | -| build/build time/build process | build/processo de build/tempo de build | -| client side script | script no lado do cliente | -| server side rendering (SSR) | renderização no lado do servidor (SSR) | -| client side rendering | renderização no lado do cliente | -| template | \- | -| bundle/bundling | \- | -| CSS Modules | Módulos CSS | -| hoisting/hoisted | \- | -| playgrounds | \- | -| runtime | \- | -| run/running | executar/executando | -| Partial Hydration | Hidratação Parcial | -| frontend/backend | \- | -| Islands Architecture | Arquitetura em Ilhas | -| Intellisense | \- | -| UI frameworks | frameworks de UI | -| Integrations | Integrações | -| built-in | Integrado | -| assets | \- | -| static | estático | -| dynamic | dinâmico | -| reference | referência | -| hook | \- | -| deploy | \- | -| NPM packages | pacotes do NPM | -| project structure | estrutura de projetos | -| layout | \- | -| Data Fetching | Busca de Dados | -| third-party | de terceiros | -| directive | diretiva | -| adapter | adaptador | -| CLI | interface de linha de comando | -| helpers | \- | -| API endpoints | endpoints de API | -| RSS feeds | feeds RSS | -| package manager | gerenciador de pacotes | -| stylesheet | folha de estilos | -| deprecated | descontinuado | -| entrypoint | \- | -| demo | demonstração | -| namespace | \- | -| log | \- | -| serverless | \- | -| output | saída/resultado final | -| routing | roteamento | -| absolute url path | URL de caminho absoluto | -| top-level | \- | -| debugging | depuração | -| setup | configuração/instalação | -| sitemap | \- | -| syntax highlight/syntax highlighter | \- | -| query | \- | -| frontmatter | \- | -| string | ? | -| streaming | \- | -| tag/tags | \- | -| middleware | \- | -| flag | \- | -| opt-in | optar em/optar por | -| opt-out | optar em não/optar por sair | -| metadata | metadados | -| cheatsheet | \- | -| callback | \- | -| pipeline | \- | \ No newline at end of file diff --git a/src/i18n/pt-br/docsearch.ts b/src/i18n/pt-br/docsearch.ts deleted file mode 100644 index f52363ea0..000000000 --- a/src/i18n/pt-br/docsearch.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { DocSearchDictionary } from '../translation-checkers'; - -export default DocSearchDictionary({ - button: 'Pesquisar', - placeholder: 'Pesquisar pela documentação', - shortcutLabel: 'Pressione / para pesquisar', - resultsFooterLede: 'Procurando por uma integração ou tema Astro? Precisa de mais ajuda?', - resultsFooterIntegrations: 'Diretório de integrações Astro', - resultsFooterThemes: 'Vitrine de temas Astro', - resultsFooterDiscord: 'Junte-se a nós no Discord', - modal: {}, -}); diff --git a/src/i18n/pt-br/nav.ts b/src/i18n/pt-br/nav.ts deleted file mode 100644 index c3e51b35c..000000000 --- a/src/i18n/pt-br/nav.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { NavDictionary } from '../translation-checkers'; - -export default NavDictionary({ - startHere: 'Comece Aqui', - 'getting-started': 'Introdução', - install: 'Instalação', - 'editor-setup': 'Configuração do Editor', - 'guides/upgrade-to/v3': 'Atualize para a v3', - coreConcepts: 'Principais Conceitos', - 'concepts/why-astro': 'Por que Astro?', - 'concepts/islands': 'Ilhas Astro', - - tutorials: 'Tutoriais', - 'blog-tutorial': 'Construa um Blog', - - basics: 'Fundamentos', - - 'core-concepts/project-structure': 'Estrutura de Projetos', - 'core-concepts/astro-components': 'Componentes', - 'core-concepts/astro-pages': 'Páginas', - 'core-concepts/layouts': 'Layouts', - - examples: 'Receitas', - 'guides/migrate-to-astro': 'Migre para o Astro', - 'guides/cms': 'Conecte um CMS', - 'guides/backend': 'Adicione serviços de backend', - 'guides/integrations-guide': 'Adicione integrações', - 'guides/deploy': 'Faça deploy do seu site', - 'guides/recipes': 'Mais Receitas', - - features: 'Guias', - 'core-concepts/astro-syntax': 'Sintaxe do Astro', - 'core-concepts/framework-components': 'Frameworks de UI', - 'core-concepts/routing': 'Roteamento', - 'guides/markdown-content': 'Markdown e MDX', - 'guides/content-collections': 'Coleções de Conteúdo', - 'guides/client-side-scripts': 'Scripts & Manipulação de Eventos', - 'guides/styling': 'Estilização e CSS', - 'guides/images': 'Imagens', - 'guides/fonts': 'Fontes', - 'guides/imports': 'Importações', - 'guides/server-side-rendering': 'Renderização no lado do Servidor (SSR)', - 'core-concepts/endpoints': 'Endpoints', - 'guides/data-fetching': 'Busca de Dados', - 'guides/middleware': 'Middleware', - 'guides/testing': 'Testes', - 'guides/view-transitions': 'Transições de Visualização', - 'guides/troubleshooting': 'Solução de Problemas', - - configuration: 'Configuração', - 'guides/configuring-astro': 'O Arquivo de Configuração Astro', - 'guides/typescript': 'TypeScript', - 'guides/aliases': 'Atalhos de Importação', - 'guides/environment-variables': 'Variáveis de Ambiente', - - reference: 'Referência', - 'reference/configuration-reference': 'Configuração', - 'reference/api-reference': 'API de Runtime', - 'reference/integrations-reference': 'API de Integrações', - 'reference/adapter-reference': 'API de Adaptadores', - 'reference/image-service-reference': 'API de Serviço de Imagem', - 'reference/directives-reference': 'Diretivas de Template', - 'reference/cli-reference': 'A CLI do Astro', - 'reference/error-reference': 'Referência de Erros', - 'guides/publish-to-npm': 'Publique no NPM', -}); diff --git a/src/i18n/pt-br/ui.ts b/src/i18n/pt-br/ui.ts deleted file mode 100644 index 43b4c5edc..000000000 --- a/src/i18n/pt-br/ui.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { UIDictionary } from '../translation-checkers'; - -export default UIDictionary({ - 'a11y.skipLink': 'Pular para o Conteúdo', - 'a11y.sectionLink': 'Seção intitulada', - 'navbar.a11yTitle': 'Superior', - // Site settings - 'site.title': 'Documentação do Astro', - 'site.description': 'Construa websites mais rápidos com menos JavaScript no lado do cliente.', - 'site.og.imageSrc': '/default-og-image.png?v=1', - 'site.og.imageAlt': - 'a logo do astro em um estrelado pedaço do espaço, com um planeta roxo parecido com Saturno flutuando à direita', - // Left Sidebar - 'leftSidebar.a11yTitle': 'Primária', - 'leftSidebar.learnTab': 'Aprenda', - 'leftSidebar.referenceTab': 'Referência', - 'leftSidebar.viewInEnglish': 'Veja em Inglês', - 'leftSidebar.sponsoredBy': 'Patrocinado por', - // Right Sidebar - 'rightSidebar.onThisPage': 'Nesta página', - 'rightSidebar.overview': 'Visão geral', - 'rightSidebar.community': 'Comunidade', - 'rightSidebar.joinDiscord': 'Junte-se a nós no Discord', - 'rightSidebar.readBlog': 'Leia nossas postagens no blog', - 'rightSidebar.openCollective': 'Nossa Open Collective', - 'rightSidebar.contribute': 'Contribua', - 'rightSidebar.contributorGuides': 'Guias de Contribuidor', - 'rightSidebar.editPage': 'Edite esta página', - 'rightSidebar.translatePage': 'Traduza esta página', - 'rightSidebar.a11yTitle': 'Secundária', - 'rightSidebar.github': 'Documentação do Astro no GitHub', - // Footer - 'footer.privacyPolicy': 'Política de Privacidade', - // `` acessibility labels - 'themeToggle.useLight': 'Usar tema claro', - 'themeToggle.useDark': 'Usar tema escuro', - // Used in previous/next page links at the bottom of pages - 'articleNav.nextPage': 'Próxima página', - 'articleNav.prevPage': 'Página anterior', - // Used in ``: Added in: v0.24.0 [NEW] - 'since.addedIn': 'Adicionado em:', - 'since.new': 'Novo', - 'since.beta': 'Beta', - // Installation Guide - 'install.autoTab': 'Interface de Linha de Comando Automática', - 'install.manualTab': 'Instalação Manual', - // `` vocabulary - 'deploy.sectionTitle': 'Guias de Deploy', - 'deploy.altSectionTitle': 'Mais Guias de Deploy', - 'deploy.filterLabel': 'Filtrar por tipo de deploy', - 'deploy.ssrTag': 'SSR', - 'deploy.staticTag': 'Estático', - // CMS Guides vocabulary - 'cms.navTitle': 'Mais guias de CMS', - // Migration Guides vocabulary - 'migration.navTitle': 'Mais guias de migração', - // Recipes vocabulary - 'recipes.navTitle': 'Mais receitas', - // `` vocabulary - 'recipesLink.singular': 'Receita relacionada:', - 'recipesLink.plural': 'Receitas relacionadas', - // `` fallback text - 'contributors.seeAll': 'Veja todos os contribuidores', - // Fallback content notice shown when a page is not yet translated - 'fallbackContent.notice': - 'Esta página ainda não está disponível em sua língua, portanto estamos te mostrando a versão em Inglês. Você pode nos ajudar a traduzindo!', - 'fallbackContent.linkText': 'Aprenda mais sobre como você pode contribuir', - // 404 Page - '404.title': 'Não encontrado', - '404.content': 'Esta página não está no nosso sistema solar.', - '404.linkText': 'Me leve para casa.', - // Aside component default labels - 'aside.note': 'Nota', - 'aside.tip': 'Dica', - 'aside.caution': 'Cuidado', - 'aside.danger': 'Perigo', - // `` vocabulary - 'languageSelect.label': 'Selecione a língua', - // Integrations vocabulary - 'integrations.changelog': 'Registro de alterações', - 'integrations.footerTitle': 'Mais Integrações', - 'integrations.renderers': 'Frameworks de UI', - 'integrations.adapters': 'Adaptadores de SSR', - 'integrations.others': 'Outras', - // Checklist component - 'checklist.or': 'ou', - // Multiple Choice component - 'multipleChoice.defaultCorrect': 'Correto!', - 'multipleChoice.defaultIncorrect': 'Tente novamente!', - 'multipleChoice.submitLabel': 'Enviar', - // Tutorial Progress - 'progress.todo': 'A fazer', - 'progress.done': 'Completo', - // Tutorial Navigation - 'tutorial.trackerLabel': 'Progresso do Tutorial', - 'tutorial.unit': 'Unidade', - // Tutorial - 'tutorial.getReady': 'Se prepare para...', - // Feedback Fish widget - 'feedback.button': 'Nos dê feedback', - 'feedback.a11yLabel': 'Formulário de feedback', - 'feedback.formTitle': 'O que passa em sua cabeça?', - 'feedback.categoryGroupLabel': 'Escolha a categoria do feedback', - 'feedback.issue': 'Problema', - 'feedback.createIssue': 'Criar um problema no GitHub', - 'feedback.idea': 'Ideia', - 'feedback.other': 'Outro', - 'feedback.messageA11yLabel': 'Mensagem', - 'feedback.placeholder': 'O que você quer que saibamos?', - 'feedback.submit': 'Enviar feedback', - 'feedback.close': 'Fechar formulário de feedback', - 'feedback.success': 'Obrigado! Nós recebemos seu feedback.', - // `` component - 'fileTree.directoryLabel': 'Diretório', - // Code snippet vocabulary - 'expressiveCode.terminalWindowFallbackTitle': 'Janela do terminal', - 'expressiveCode.copyButtonTooltip': 'Copiar para área de transferência', - 'expressiveCode.copyButtonCopied': 'Copiado!', - // Backend Guides vocabulary - 'backend.navTitle': 'Mais guias de serviço de back-end', - // Stubs vocabulary - 'stub.title': 'Expanda este esboço!', - 'stub.subtitle': 'Este guia é um esboço.', - 'stub.description.migration': - 'Quer contribuir para este guia? Tem uma postagem de blog, vídeo ou outro recurso para compartilhar sobre a migração desta tecnologia para o Astro?', - 'stub.description.cms': 'Sabe mais sobre como usar este CMS com Astro?', - 'stub.description.backend': 'Sabe mais sobre como usar este serviço de back-end com o Astro?', -}); diff --git a/src/i18n/ru/docsearch.ts b/src/i18n/ru/docsearch.ts deleted file mode 100644 index 90d62dc81..000000000 --- a/src/i18n/ru/docsearch.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { DocSearchDictionary } from '../translation-checkers'; - -export default DocSearchDictionary({ - button: 'Найти', -}); diff --git a/src/i18n/ru/nav.ts b/src/i18n/ru/nav.ts deleted file mode 100644 index c9e306e8a..000000000 --- a/src/i18n/ru/nav.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { NavDictionary } from '../translation-checkers'; - -export default NavDictionary({ - 'concepts/islands': 'Острова', - 'concepts/why-astro': 'Почему Astro', - 'core-concepts/astro-components': 'Astro компоненты', - 'core-concepts/astro-pages': 'Astro страницы', - 'core-concepts/endpoints': 'API роуты', - 'core-concepts/framework-components': 'Компоненты фреймворков', - 'core-concepts/layouts': 'Макеты', - 'core-concepts/project-structure': 'Структура проекта', - 'core-concepts/routing': 'Роутинг', - // 'core-concepts/sharing-state': 'Совместное состояние данных', - 'editor-setup': 'Настройка редактора', - 'guides/aliases': 'Алиасы', - 'guides/configuring-astro': 'Настройка Astro', - 'guides/data-fetching': 'Получение данных', - 'guides/deploy': 'Деплой', - 'guides/environment-variables': 'Переменные окружения', - // 'guides/fonts': 'Шрифты', - 'guides/images': 'Картинки', - 'guides/imports': 'Импорт файлов', - 'guides/integrations-guide': 'Интеграции', - 'guides/markdown-content': 'Markdown & MDX', - 'guides/publish-to-npm': 'Формат npm пакета', - // 'guides/rss': 'RSS', - 'guides/server-side-rendering': 'Server-side Rendering (SSR)', - 'guides/styling': 'CSS & Стилизация', - 'guides/troubleshooting': 'Решение проблем', - 'guides/typescript': 'TypeScript', - 'reference/adapter-reference': 'Adapter API', - 'reference/api-reference': 'Runtime API', - 'reference/cli-reference': 'CLI', - 'reference/configuration-reference': 'Настройка', - 'reference/directives-reference': 'Директивы', - 'reference/integrations-reference': 'API интеграций', - basics: 'Основное', - configuration: 'Настройка', - coreConcepts: 'Ключевые концепции', - features: 'Возможности', - reference: 'Справочник', - startHere: 'Введение', - 'getting-started': 'Начало работы', - install: 'Установка', - 'blog-tutorial': 'Создать блог', - 'guides/backend': 'Услуги бэкенда', - 'guides/client-side-scripts': 'Скрипты и обработка событий', - 'guides/cms': 'Подключение CMS', - // 'guides/content': 'Авторский контент', - 'guides/content-collections': 'Коллекции контента', - 'guides/migrate-to-astro': 'Перейти на Astro', - 'guides/testing': 'Тестирование', - 'guides/upgrade-to/v3': 'Обновление до v3', - 'reference/error-reference': 'Справочник по ошибкам', - tutorials: 'Обучение', - examples: 'Рецепты', - 'guides/recipes': 'Больше рецептов', - 'guides/fonts': 'Шрифты', - 'core-concepts/astro-syntax': 'Синтаксис Astro', -}); diff --git a/src/i18n/ru/ui.ts b/src/i18n/ru/ui.ts deleted file mode 100644 index 20cce7a3b..000000000 --- a/src/i18n/ru/ui.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { UIDictionary } from '../translation-checkers'; - -export default UIDictionary({ - 'rightSidebar.onThisPage': 'На этой странице', - 'aside.note': 'Заметка', - 'aside.tip': 'Подсказка', - 'aside.caution': 'Осторожно', - 'aside.danger': 'Предупреждение', - 'rightSidebar.contribute': 'Помочь', - 'rightSidebar.editPage': 'Редактировать эту страницу', - 'rightSidebar.translatePage': 'Перевести эту страницу', - 'rightSidebar.community': 'Сообщество', - 'rightSidebar.joinDiscord': 'Присоединится к нам в Discord', - 'rightSidebar.readBlog': 'Наш блог', - 'rightSidebar.openCollective': 'Наш Open Collective', - 'articleNav.nextPage': 'Следующая страница', - 'articleNav.prevPage': 'Назад', - 'leftSidebar.learnTab': 'Изучить', - 'leftSidebar.referenceTab': 'Ссылки', - '404.content': 'Эта страница не в нашей солнечной системе.', - '404.linkText': 'Доставь меня домой.', - '404.title': 'Не найдено', - 'a11y.sectionLink': 'Раздел, озаглавленный', - 'a11y.skipLink': 'Перейти к контенту', - 'checklist.or': 'или', - 'cms.navTitle': 'Больше гайдов по CMS', - 'contributors.seeAll': 'Посмотреть всех контрибьюторов', - 'deploy.altSectionTitle': 'Больше гайдов по деплою', - 'deploy.filterLabel': 'Отфильтровать по типу деплоя', - 'deploy.sectionTitle': 'Гайды по деплою', - 'deploy.ssrTag': 'SSR', - 'deploy.staticTag': 'Static', - 'fallbackContent.linkText': 'Узнать больше о том, как вы можете помочь', - 'fallbackContent.notice': - 'Эта страница ещё не доступна на русском, поэтому вы видите английскую версию. Вы можете помочь перевести её!', - 'feedback.button': 'Оставьте отзыв', - 'feedback.a11yLabel': 'Форма обратной связи', - 'feedback.formTitle': 'Хотите поделиться?', - 'feedback.categoryGroupLabel': 'Выберите тип обратной связи', - 'feedback.issue': 'Проблема', - 'feedback.idea': 'Идея', - 'feedback.other': 'Другое', - 'feedback.messageA11yLabel': 'Сообщение', - 'feedback.placeholder': 'О чём ты хочешь нам рассказать?', - 'feedback.submit': 'Отправить отзыв', - 'feedback.close': 'Закрыть форму обратной связи', - 'fileTree.directoryLabel': 'Директория', - 'footer.privacyPolicy': 'Политика конфиденциальности', - 'install.autoTab': 'Автоматический CLI', - 'install.manualTab': 'Ручная настройка', - 'integrations.adapters': 'SSR адаптеры', - 'integrations.changelog': 'Список изменений', - 'integrations.footerTitle': 'Больше интеграций', - 'integrations.others': 'Другое', - 'integrations.renderers': 'UI фреймворки', - 'leftSidebar.a11yTitle': 'Главное', - 'leftSidebar.sponsoredBy': 'Спонсоры', - 'leftSidebar.viewInEnglish': 'Посмотреть на английском языке', - 'migration.navTitle': 'Больше инструкций по миграции', - 'multipleChoice.defaultCorrect': 'Верно!', - 'multipleChoice.defaultIncorrect': 'Попробуйте ещё раз!', - 'multipleChoice.submitLabel': 'Подтвердить', - 'navbar.a11yTitle': 'Верх', - 'progress.done': 'Готово', - 'progress.todo': 'Что нужно сделать', - 'rightSidebar.a11yTitle': 'Вторичное', - 'rightSidebar.github': 'Документация Astro на GitHub', - 'rightSidebar.overview': 'Обзор', - 'since.addedIn': 'Добавлено в:', - 'since.beta': 'Бета', - 'since.new': 'Новое', - 'site.description': 'Создавайте быстрые сайты с меньшим объёмом клиентского JavaScript.', - 'site.og.imageAlt': - 'логотип astro на звездном просторе космоса с фиолетовой планетой, похожей на Сатурн, плавающей на правом переднем плане', - 'site.og.imageSrc': '/default-og-image.png?v=1', - 'site.title': 'Документация Astro', - 'themeToggle.useDark': 'Использовать тёмную тему', - 'themeToggle.useLight': 'Использовать светлую тему', - 'tutorial.getReady': 'Приготовьтесь к...', - 'tutorial.trackerLabel': 'Трекер обучения', - 'tutorial.unit': 'Единица', -}); diff --git a/src/i18n/translation-checkers.ts b/src/i18n/translation-checkers.ts deleted file mode 100644 index 1a33531c7..000000000 --- a/src/i18n/translation-checkers.ts +++ /dev/null @@ -1,53 +0,0 @@ -import type { ModalTranslations } from '@docsearch/react'; -import enNav from './en/nav'; -import type enUI from './en/ui'; -import type { allLanguages } from './languages'; - -export type UIDictionaryKeys = keyof typeof enUI; -export type UIDict = Partial; -export type UILanguageKeys = keyof typeof allLanguages; - -/** Helper to type check a dictionary of UI string translations. */ -export const UIDictionary = (dict: Partial) => dict; - -type NavDictionaryKeys = (typeof enNav)[number]['key']; -export type NavDict = Array< - { - text: string; - key: NavDictionaryKeys; - labelIsTranslated: boolean; - isFallback?: boolean; - } & ({ slug: string } | { header: true; type: 'learn' | 'api' }) ->; - -/** - * Helper to type check and process a dictionary of navigation menu translations. - * Converts it to an array matching the English menu’s sorting with English items used as fallback entries. - */ -export const NavDictionary = (dict: Partial>) => { - const orderedDictionary: NavDict = []; - for (const enEntry of enNav) { - const text = dict[enEntry.key] || enEntry.text; - orderedDictionary.push({ ...enEntry, text, labelIsTranslated: !!dict[enEntry.key] }); - } - return orderedDictionary; -}; - -export interface DocSearchTranslation { - // These two keys are Astro-specific and apply to the search box in the header. - button?: string; - shortcutLabel?: string; - // Astro-specific labels for the custom `resultsFooterComponent`. - resultsFooterLede?: string; - resultsFooterIntegrations?: string; - resultsFooterThemes?: string; - resultsFooterDiscord?: string; - // Search box placeholder text within the DocSearch modal. - placeholder?: string; - // This object follows DocSearch's translation.modal format. - // See: https://docsearch.algolia.com/docs/api/#translations - modal?: ModalTranslations; -} - -/** Helper to type check a dictionary of DocSearch string translations. */ -export const DocSearchDictionary = (dict: DocSearchTranslation) => dict; diff --git a/src/i18n/util.ts b/src/i18n/util.ts deleted file mode 100644 index 07e253c5c..000000000 --- a/src/i18n/util.ts +++ /dev/null @@ -1,70 +0,0 @@ -import type { AstroGlobal } from 'astro'; -import { getLanguageFromURL } from '../util'; -import type { - DocSearchTranslation, - NavDict, - UIDict, - UIDictionaryKeys, - UILanguageKeys, -} from './translation-checkers'; - -/** - * Convert the map of modules returned by `import.meta.globEager` to an object - * mapping the language code from each module’s filepath to the module’s default export. - */ -function mapDefaultExports(modules: Record) { - const exportMap: Record = {}; - for (const [path, module] of Object.entries(modules)) { - const [_dot, lang] = path.split('/'); - exportMap[lang] = module.default; - } - return exportMap; -} - -export const translations = mapDefaultExports( - import.meta.glob('./*/ui.ts', { eager: true }) -); -const docsearchTranslations = mapDefaultExports( - import.meta.glob('./*/docsearch.ts', { eager: true }) -); -export const navTranslations = mapDefaultExports( - import.meta.glob('./*/nav.ts', { eager: true }) -); - -export const fallbackLang = 'en'; - -/** Returns a dictionary of strings for use with DocSearch. */ -export function getDocSearchStrings(Astro: AstroGlobal): DocSearchTranslation { - const lang = getLanguageFromURL(Astro.url.pathname) || fallbackLang; - // A shallow merge is sufficient here as most of the actual fallbacks are provided by DocSearch. - return { ...docsearchTranslations[fallbackLang], ...docsearchTranslations[lang] }; -} - -/** - * Create a helper function for getting translated strings. - * - * Within an Astro component, prefer the `UIString` component, - * which only needs the key as it has access to the global Astro object. - * - * However, you can’t pass an Astro component as a prop to a framework component, - * so this function creates a look-up method to get the string instead: - * - * @example - * --- - * import { useTranslations } from '~/i18n/util'; - * const t = useTranslations(Astro); - * --- - * - */ -export function useTranslations(Astro: Readonly): (key: UIDictionaryKeys) => string { - const lang = getLanguageFromURL(Astro.url.pathname) || 'en'; - return useTranslationsForLang(lang as UILanguageKeys); -} - -export function useTranslationsForLang(lang: UILanguageKeys): (key: UIDictionaryKeys) => string { - return function getTranslation(key: UIDictionaryKeys) { - const str = translations[lang]?.[key] || translations[fallbackLang][key]; - if (str === undefined) throw new Error(`Missing translation for “${key}” in “${lang}”.`); - return str; - }; -} diff --git a/src/i18n/zh-cn/README.md b/src/i18n/zh-cn/README.md deleted file mode 100644 index c48051081..000000000 --- a/src/i18n/zh-cn/README.md +++ /dev/null @@ -1,188 +0,0 @@ -# Astro Docs 中文翻译指南 - -感谢你为 Astro 中文文档做出贡献! -在提交改动之前,请阅读 [i18n 指南](~/../contributor-guides/translating-astro-docs.md),它含有翻译指南、提交流程、审查流程等很多有用的内容。同时也欢迎加入 Astro 的 [Discord 社区](https://astro.build/chat)! -本中文翻译指南是在上述 i18n 指南的基础上针对中文翻译的补充说明,上述指南中已经存在的内容不再赘述。 - -和其他开源项目一样,我们的文档是由很多人自愿参与翻译的,参与翻译的人也会随着时间而变化。这篇翻译指南的目的是保证文档的翻译风格和质量的一致性,使文档读起来更加流畅易懂。 - -本翻译指南部分参照了 [Vue 中文文档指南](https://github.com/vuejs-translations/docs-zh-cn/wiki/%E7%BF%BB%E8%AF%91%E9%A1%BB%E7%9F%A5)。 - -## 用词 - -对于可能不易于理解的翻译,可以在中文翻译后添加英文原文,例如:激活 (hydration)。 - -### 翻译术语表 - -在翻译和审查过程中如果发现了易错译、多处翻译不一致的词,可以讨论并添加到此表中。 - -| 英文原文 | 推荐译法 | 说明 | -| ----------------------- | --------------- | ------------------------------------------------- | -| [access](#access) | 使用 | | -| accessibility | 无障碍 | | -| adapter | 适配器 | | -| announce | 读出 | 描述屏幕阅读器时作为 read out、speak 的近义词翻译 | -| architecture | 架构 | | -| assistive technology | 辅助技术 | | -| component | 组件 | | -| endpoint | 端点 | | -| escape | 转义 | | -| feed | 摘要 | | -| framework | 框架 | | -| frontmatter | *不翻译* | | -| group | 分组 | | -| [hero](#hero) | 主视觉 | 特指页面通常在顶部或首屏的一个区域 | -| [hydration](#hydration) | 激活 | 第一次出现时可以写为 `激活 (hydration)` | -| integration | 集成 | | -| island | 岛屿 / 群岛 | 根据实际情况选择更合适的译法 | -| islands | 群岛 | | -| library | 库 | | -| locale | 区域 / 语言环境 | -| module | 模块 | | -| overrides | 重写 | | -| package | 包 | | -| props | 参数 | Component props | -| server-side rendering | 服务端渲染 | | -| slot | 插槽 | | -| slug | *不翻译* | | - -#### Access - -根据实际情况可以翻译成“使用”而不是“访问”,例: - -> This will give you autocomplete and types when accessing `Astro.props`. - -可以译为:“这样当使用 `Astro.props` 时就会有自动补全和类型提示。” - -#### Hero - -Hero:主视觉、主视觉区 -Hero image:主视觉图 -Hero section:主视觉区、主视觉区域 - -> (web design) An eye-catching, prominent image, used as an over-sized (almost background-like) header. - -—— - -> The term “hero image” in web design refers to a large, attention-grabbing picture with text typically shown in the above-the-fold area of the webpage, directly beneath the website header. - -—— - -> The term “hero” was first used in the world of theater, and it was the prop (it’s usually called the [hero prop](https://en.wikipedia.org/wiki/Theatrical_property)) that is more detailed than usual because it’s meant to be seen or viewed in close range. - -—— - -#### Hydration - -Hydration、hydrate:激活 - -可以根据实际情况酌情在每个页面或每个段落第一次出现的位置写作 `激活 (hydration)`,便于读者理解。 - -Vue 中文文档译为“激活”。 -React 中文文档没有翻译,保持了英文原文。 - -### 中文用词约定 - -| 中文用词 | 说明 | -| -------- | ---------------- | -| 你 | 不建议使用:您 | -| 其他 | 不建议使用:其它 | - -### 前端术语 - -- 原则上,前端专业术语的译法优先参考 MDN 中文译法。 -- 原文中出现的 MDN 文档链接,如果存在对应的中文翻译则转换为 MDN 的中文翻译链接,否则保持 MDN 英文原链接。 - -## 文本格式 - -中文排版格式可以参考[中文文案排版指北](https://github.com/sparanoid/chinese-copywriting-guidelines)、[中文排版需求](https://w3c.github.io/clreq/)等。下述文本格式仅作为参考和建议,并非强制要求。文本格式与此指南完全相符不是审查通过和合并的前提条件。 - -### 标点符号 - -- 逗号、句号、分号、冒号、叹号、问号、顿号,使用全角字符:`,。;:!?、` -- 引号使用全角字符:`“”` 和 `‘’` -- 括号全角字符:`()`。在与英文相邻时可以使用半角字符并在外侧添加空格:` () ` -- 破折号使用:`——` -- 省略号使用:`……` -- 间隔号使用:`·` -- 书名号使用:`《》` 和 `〈〉` - -### 空格的使用 - -- 中文和英文单词之间要有一个空格。如:`中文 English 中文` -- 全角标点符号两边没有空格。如:`中文,中文。“中文”中文。` -- 半角括号内侧没有空格,外侧如果是中文或英文则有一个空格,如果是其他标点符号则没有空格。如:`中文 (中文) 中文,(中文) 中文` -- 中文链接的左右不需要单独添加空格。如:`中文[链接](#foo)中文` -- 结合**加粗**、*斜体*、[链接](#空格的使用)等 Markdown 标记时,空格的用法和上述最终呈现的效果相同,紧挨着 Markdown 标记的空格应该出现在其外部。如: - - ```markdown - 遵守 **JavaScript 编码规范**非常重要 - 遵守 [JavaScript 编码规范](#foo)非常重要 - 更多信息详见*中文 MDN* 的介绍页面。 - 更多信息详见[中文 MDN](#bar) 的介绍页面。 - ``` - -### 加粗和斜体 - -加粗和斜体的左右不需要单独添加空格。如: - -```markdown -Astro 简单**好用**,值得*推荐*。 -``` - -在翻译带有**加粗**和*斜体*的内容时需要注意最终渲染结果是否正确,尤其是在整句加粗或斜体时容易出现渲染错误的情况。 - -出现渲染错误时,可以使用 `` 和 `` 来替代它们对应的 Markdown 标记,保持加粗、斜体的内容与英文原文对应。部分情况下也可以通过移动标点符号的位置来解决渲染错误的问题。添加空格会相对较明显地影响最终页面的显示效果,因此不推荐使用。 - -```markdown -渲染错误:**Astro 简单好用,值得推荐。**它的功能齐全且灵活。 -推荐方法:Astro 简单好用,值得推荐。它的功能齐全且灵活。 -酌情使用:**Astro 简单好用,值得推荐**。它的功能齐全且灵活。 -尽量不用:**Astro 简单好用,值得推荐。** 它的功能齐全且灵活。 - -渲染错误:*Astro 简单好用,值得推荐。*它的功能齐全且灵活。 -推荐方法:Astro 简单好用,值得推荐。它的功能齐全且灵活。 -酌情使用:*Astro 简单好用,值得推荐*。它的功能齐全且灵活。 -尽量不用:*Astro 简单好用,值得推荐。* 它的功能齐全且灵活。 -``` - -> 渲染错误:**Astro 简单好用,值得推荐。**它的功能齐全且灵活。 -> 推荐方法:Astro 简单好用,值得推荐。它的功能齐全且灵活。 -> 酌情使用:**Astro 简单好用,值得推荐**。它的功能齐全且灵活。 -> 尽量不用:**Astro 简单好用,值得推荐。** 它的功能齐全且灵活。 -> -> 渲染错误:*Astro 简单好用,值得推荐。*它的功能齐全且灵活。 -> 推荐方法:Astro 简单好用,值得推荐。它的功能齐全且灵活。 -> 酌情使用:*Astro 简单好用,值得推荐*。它的功能齐全且灵活。 -> 尽量不用:*Astro 简单好用,值得推荐。* 它的功能齐全且灵活。 - -## 代码片段 - -代码片段中的注释通常需要翻译成中文。 -代码片段中的其他部分保持与英文原文一致。 - -## 翻译建议 - -1. 调整语序为中文习惯,例如: - - > So far we've only been binding to simple property keys in our templates. But Vue.js actually supports the full power of JavaScript expressions inside all data bindings. - - 可以译为“目前我们都是只通过模板语法绑定简单的 property 键值,但实际上,Vue.js 完全支持在所有的数据绑定中使用 JavaScript 表达式”。 - -1. 省略部分在外语中仅用于完成句式的词语,例如: - - > When Vue is updating a list of elements rendered with v-for, by default it uses an "in-place patch" strategy. If the order of the data items has changed, instead of moving the DOM elements to match the order of the items, Vue will patch each element in-place and make sure it reflects what should be rendered at that particular index. - - 像 `to match the order of the items` 这样的短语可以在保证语义不变的条件下简化,译为“Vue 默认按照“就地更新”的策略来更新通过 v-for 渲染的元素列表。当数据项的顺序改变时,Vue 不会随之移动 DOM 元素的顺序,而是就地更新每个元素,确保它们在原本指定的索引位置上渲染”。 - -1. 在句子之间补充类似“然而”、“并且”、“即使…也…”这样的关联词,使句子更加连贯,例如: - - > The mustache tag will be replaced with the value of the msg property from the corresponding component instance. It will also be updated whenever the msg property changes. - - 后半句可以译为“只要绑定的组件实例上 msg property 发生改变,插值处的内容就会随之更新”。 - -1. 在尽可能地尊重原版内容的前提下,使读者理解起来更加容易。即,在修缮的同时,要保证译文所传达的内容(而非句式、语法等)是准确可靠的。 - -## 关于本指南 - -本指南并不是一份一成不变的规定,而是一份代表目前中文翻译团队的共识的建议。如果你对本文档中任何地方有意见和建议,可以提出 Discussion 或 Pull request,与其他翻译人员讨论、修改。 diff --git a/src/i18n/zh-cn/docsearch.ts b/src/i18n/zh-cn/docsearch.ts deleted file mode 100644 index f7d389236..000000000 --- a/src/i18n/zh-cn/docsearch.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { DocSearchDictionary } from '../translation-checkers'; - -export default DocSearchDictionary({ - button: '搜索', - placeholder: '搜索文档...', - shortcutLabel: '按下 / 来搜索文档', - resultsFooterLede: '正在寻找 Astro 集成或主题?需要更多帮助吗?', - resultsFooterIntegrations: 'Astro 集成目录', - resultsFooterThemes: 'Astro 主题展示', - resultsFooterDiscord: '在 Discord 上加入我们', - modal: { - searchBox: { - resetButtonTitle: '删除搜索', - resetButtonAriaLabel: '删除搜索', - cancelButtonText: '取消', - cancelButtonAriaLabel: '取消', - }, - startScreen: { - recentSearchesTitle: '最近搜索', - noRecentSearchesText: '无最近搜索内容', - saveRecentSearchButtonTitle: '保存此搜索', - removeRecentSearchButtonTitle: '移除此搜索', - favoriteSearchesTitle: '收藏夹', - removeFavoriteSearchButtonTitle: '从收藏夹移除', - }, - errorScreen: { - titleText: '出现未知错误!', - helpText: '请检查你的互联网连接是否有误', - }, - footer: { - selectText: '进入条目', - selectKeyAriaLabel: '回车键', - navigateText: '导航', - navigateUpKeyAriaLabel: '上方向键', - navigateDownKeyAriaLabel: '下方向键', - closeText: '关闭搜索', - closeKeyAriaLabel: 'Esc 键', - searchByText: '搜索来自', - }, - noResultsScreen: { - noResultsText: '没有合适的结果...', - suggestedQueryText: '请尝试搜索', - reportMissingResultsText: '仍然认为应该有搜索结果?', - reportMissingResultsLinkText: '请通知我们。', - }, - }, -}); diff --git a/src/i18n/zh-cn/nav.ts b/src/i18n/zh-cn/nav.ts deleted file mode 100644 index 439fa0dc7..000000000 --- a/src/i18n/zh-cn/nav.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { NavDictionary } from '../translation-checkers'; - -export default NavDictionary({ - startHere: '起步', - 'getting-started': '入门指南', - install: '安装', - 'editor-setup': '编辑器设置', - 'guides/upgrade-to/v3': '升级到 v3', - - coreConcepts: '核心理念', - 'concepts/why-astro': '为什么选择 Astro', - 'concepts/islands': 'Astro 群岛', - - tutorials: '教程', - 'blog-tutorial': '搭建博客', - 'add-collections-tutorial': '使用内容集合', - 'add-transitions-tutorial': '使用视图过渡动画', - - basics: '基础内容', - 'core-concepts/project-structure': '项目结构', - 'core-concepts/astro-components': '组件', - 'core-concepts/astro-pages': '页面', - 'core-concepts/layouts': '布局', - 'core-concepts/rendering-modes': '渲染模式', - - builtins: '内置功能', - 'guides/content-collections': '内容集合', - 'guides/view-transitions': '视图过渡动画', - 'guides/prefetch': '预获取', - - addons: '附加功能', - 'guides/integrations-guide': '添加集成', - 'core-concepts/framework-components': 'UI 框架', - 'guides/server-side-rendering': '服务端渲染 (SSR)', - - examples: '操作指南', - 'guides/migrate-to-astro': '迁移到 Astro', - 'guides/cms': '连接到 CMS', - 'guides/backend': '添加后端服务', - 'guides/deploy': '部署你的站点', - 'guides/recipes': '更多操作指南', - - features: '使用指南', - 'core-concepts/astro-syntax': 'Astro 模板语法', - 'core-concepts/routing': '路由', - 'guides/markdown-content': 'Markdown & MDX', - 'guides/client-side-scripts': '处理脚本和事件', - 'guides/styling': 'CSS 样式', - 'guides/fonts': '字体', - 'guides/images': '图像', - 'guides/imports': '导入', - 'core-concepts/endpoints': 'API 端点', - 'guides/data-fetching': '数据获取', - 'guides/middleware': '中间件', - 'guides/testing': '测试', - 'guides/troubleshooting': '故障排除', - 'guides/internationalization': '国际化', - - configuration: '配置', - 'guides/configuring-astro': 'Astro 配置文件', - 'guides/typescript': 'TypeScript', - 'guides/aliases': '路径别名', - 'guides/environment-variables': '环境变量', - - reference: '参考', - 'reference/configuration-reference': '配置', - 'reference/api-reference': '运行时 API', - 'reference/integrations-reference': '集成 API', - 'reference/adapter-reference': '适配器 API', - 'reference/image-service-reference': '图像服务 API', - 'reference/dev-overlay-plugin-reference': 'Dev Overlay 插件 API', - 'reference/directives-reference': '模板指令', - 'reference/cli-reference': '命令行', - 'reference/error-reference': '错误参考', - 'guides/publish-to-npm': 'NPM 包格式', -}); diff --git a/src/i18n/zh-cn/ui.ts b/src/i18n/zh-cn/ui.ts deleted file mode 100644 index 201a37159..000000000 --- a/src/i18n/zh-cn/ui.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { UIDictionary } from '../translation-checkers'; - -export default UIDictionary({ - 'a11y.skipLink': '跳转到内容', - 'a11y.sectionLink': '段落标题', - 'navbar.a11yTitle': '顶部导航', - // Site settings - 'site.title': 'Astro 文档', - 'site.description': '用更少的客户端 JavaScript 构建更快的站点。', - 'site.og.imageSrc': '/default-og-image.png?v=1', - 'site.og.imageAlt': '星辰浩瀚的太空中的 astro 标志,右侧前景中漂浮着一颗紫色的土星状行星。', - // Left Sidebar - 'leftSidebar.a11yTitle': '站点导航', - 'leftSidebar.learnTab': '学习', - 'leftSidebar.referenceTab': '参考', - 'leftSidebar.viewInEnglish': '查看英文版本', - 'leftSidebar.sponsoredBy': '赞助商', - // Right Sidebar - 'rightSidebar.a11yTitle': '目录', - 'rightSidebar.onThisPage': '本页内容', - 'rightSidebar.overview': '概述', - 'rightSidebar.editPage': '编辑本页内容', - 'rightSidebar.translatePage': '翻译本页内容', - 'rightSidebar.contribute': '贡献', - 'rightSidebar.contributorGuides': '贡献者指南', - 'rightSidebar.community': '社区', - 'rightSidebar.joinDiscord': '加入我们的 Discord', - 'rightSidebar.readBlog': '阅读我们的博客', - 'rightSidebar.openCollective': '我们的 Open Collective', - 'rightSidebar.github': 'GitHub 上的 Astro 文档', - // Footer - 'footer.privacyPolicy': '隐私协议', - // `` acessibility labels - 'themeToggle.useLight': '使用浅色主题', - 'themeToggle.useDark': '使用深色主题', - // Used in previous/next page links at the bottom of pages - 'articleNav.nextPage': '下一页', - 'articleNav.prevPage': '返回', - // Used in ``: Added in: v0.24.0 [NEW] - 'since.addedIn': '添加于:', - 'since.new': '新', - 'since.beta': 'Beta', - // Installation Guide - 'install.autoTab': '自动化命令行', - 'install.manualTab': '手动设置', - // `` 词汇 - 'deploy.sectionTitle': '部署指南', - 'deploy.altSectionTitle': '更多部署指南', - 'deploy.filterLabel': '根据部署类型筛选', - 'deploy.ssrTag': 'SSR', - 'deploy.staticTag': '静态', - // CMS Guides vocabulary - 'cms.navTitle': '更多 CMS 指南', - // Migration Guides vocabulary - 'migration.navTitle': '更多迁移指南', - // Recipes vocabulary - 'recipes.navTitle': '更多操作指南', - // `` vocabulary - 'recipesLink.singular': '相关操作指南:', - 'recipesLink.plural': '相关操作指南', - // `` fallback text - 'contributors.seeAll': '查看所有贡献者', - // Fallback content notice shown when a page is not yet translated - 'fallbackContent.notice': '此页暂不支持你的语言,我们将为你展示英文页面。你可以帮忙翻译它!', - 'fallbackContent.linkText': '了解更多关于贡献的内容', - // 404 Page - '404.title': '未能找到此页面', - '404.content': '该页面不在我们的星系中。', - '404.linkText': '返回主页', - // Aside component default labels - 'aside.note': '注意', - 'aside.tip': '提示', - 'aside.caution': '警告', - 'aside.danger': '危险', - // `` vocabulary - 'languageSelect.label': '选择语言', - // Integrations vocabulary - 'integrations.changelog': '更新日志', - 'integrations.footerTitle': '更多集成', - 'integrations.renderers': 'UI 框架', - 'integrations.adapters': 'SSR 适配器', - 'integrations.others': '其他', - // Checklist component - 'checklist.or': '或', - // Multiple Choice component - 'multipleChoice.defaultCorrect': '正确!', - 'multipleChoice.defaultIncorrect': '再试一次!', - 'multipleChoice.submitLabel': '提交', - // Tutorial Progress - 'progress.todo': '待办', - 'progress.done': '完成', - // Tutorial Navigation - 'tutorial.trackerLabel': '教程跟踪', - 'tutorial.unit': '单元', - // Tutorial - 'tutorial.getReady': '准备好…', - // Feedback Fish widget - 'feedback.button': '给予我们反馈', - 'feedback.a11yLabel': '反馈表单', - 'feedback.formTitle': '你有什么想法?', - 'feedback.categoryGroupLabel': '选择反馈类型', - 'feedback.issue': '问题', - 'feedback.createIssue': '创建 GitHub Issue', - 'feedback.idea': '想法', - 'feedback.other': '其它', - 'feedback.messageA11yLabel': '留言', - 'feedback.placeholder': '你想让我们知道什么?', - 'feedback.submit': '发送反馈', - 'feedback.close': '关闭反馈表单', - 'feedback.success': '感谢!我们收到了你的反馈。', - // `` component - 'fileTree.directoryLabel': '目录', - // Code snippet vocabulary - 'expressiveCode.terminalWindowFallbackTitle': '终端窗口', - 'expressiveCode.copyButtonTooltip': '复制到剪贴板', - 'expressiveCode.copyButtonCopied': '复制成功!', - // Backend Guides vocabulary - 'backend.navTitle': '更多后端服务指南', - // Stubs vocabulary - 'stub.title': '完善本指南!', - 'stub.subtitle': '此指南尚未完成。', - 'stub.description.migration': - '想为这个指南做贡献吗?有关于从这项技术迁移到 Astro 的文章、视频或其他资源?', - 'stub.description.cms': '知道更多在 Astro 使用此 CMS 的信息?', - 'stub.description.backend': '知道更多在 Astro 使用此后端服务的信息?', -}); diff --git a/src/i18n/zh-tw/README.md b/src/i18n/zh-tw/README.md deleted file mode 100644 index f98f31670..000000000 --- a/src/i18n/zh-tw/README.md +++ /dev/null @@ -1,154 +0,0 @@ -# Astro Docs 中文翻譯指南 - -感謝你有興趣對 Astro 文檔翻譯做出貢獻! -提交改動前,別忘了閱讀 [i18n 指南](~/../contributor-guides/translating-astro-docs.md),裡面包含了貢獻過程中需要知道的內容。 -也歡迎加入 Astro 的 [Discord 社群](https://astro.build/chat)與其他貢獻者們交流! - -本指南旨在整理一份統一的格式及風格指南,使文檔讀起來更流暢並易於理解。 - -編撰時參考了 [Vue 中文文档指南](https://github.com/vuejs-translations/docs-zh-cn/wiki/%E7%BF%BB%E8%AF%91%E9%A1%BB%E7%9F%A5)。 - - - -## 1. 術語和用詞 - -### 1.1 術語表 -> 部分參考[《重編國語辭典修訂本》](https://dict.revised.moe.edu.tw/index.jsp) - -|原文 |推薦翻譯 |備註 | -|----------------------|---------------------|-----------------------| -|library |庫 | | -|integration |整合 | | -|import |引入 | | -|package |套件 | | -|routing |路由 | | -|architecture |架構 | | -|framework |框架 | | -|reference |參考 | | -|deploy |部署 | | -|component |組件 | | -|migration |遷移 | | -|asset |資產 | | -|docs |文檔 | | -|project |專案 | | -|configuration |配置 | | -|community |社群 | | -|hydration |水合 | | -|islands |群島 |特指 Astro Islands | -|escape |跳脫 |特指 Escape Character | -|reactive |反應式 | | -|responsive |響應式 | | -|repository |儲存庫 | | -|experimental |實驗性 | | -|middleware |中介層 | | -|adapter |配接器 | | -|CLI |命令列 | | -|terminal |終端機 | | -|codebase |代碼庫 | | -|changelog |變更日誌 | | -|recipe |操作指南 | | -|Server-side Rendering |伺服器端渲染 | | - - -### 1.2 中文用詞 -> 部分參考[《重編國語辭典修訂本》](https://dict.revised.moe.edu.tw/index.jsp)及[《異體字字典》](https://dict.variants.moe.edu.tw/variants/rbt/home.do) - -|中文 |說明 | -|----------------|-------------------| -|你 |而不使用「您」 | -|構建 |而不使用「建構」 | -|開發者 |而不使用「開發人員」 | -|應用程式 |而不使用「應用」 | -|舉例來說 |而不使用「舉個例子」等 | -|甚麼 |「什麼」為異體字 | -|其他 |並無「其它」一詞 | -|注釋 |並無「註釋」一詞 | -|刪除、去除 |並無「移除」一詞 | -|優化 |並無「最佳化」一詞 | - - -### 1.3 特指名詞及品牌名稱 -- 「JavaScript」或「ECMAScript」等詞語應**保留風格化寫法**,而非「Javascript」或「Ecmascript」 -- 「npm」及「webpack」等產品 / 品牌名稱的應**保留風格化寫法**,而非「Npm」或「Webpack」 - - -### 1.4 關於 MDN 中可查詢的前端術語 -- 原則上,前端專業術語的翻譯優先**參考 MDN 中文譯文**,若無中文則**保留原文**。 -- 原文中的 MDN 文檔連結建議轉換為 MDN 的中文譯文連結,但是鑒於 MDN 的中文翻譯也並不完善,所以: - - 當條目有中文譯文時,將其手動**變更為 MDN 中文連結**,其餘則**保留原文連結** - - - -## 2. 譯文格式 - -### 2.1 標點符號 -> 參考[《重訂標點符號手冊》](https://language.moe.gov.tw/001/upload/files/site_content/m0001/hau/c2.htm)及[《W3C 中文排版需求》](https://w3c.github.io/clreq/#line_composition_rules_for_punctuation_marks) -- 除特殊情況外,所有中文標點符號應為**全形字元** -- 考慮到 `/` 在不同字體下渲染差異較大,分隔號應為前後包含空格的 `/`,如:`你好 / 世界` - - -### 2.2 代碼內聯與關鍵字 -請使用**反單引號**(`)標記,例: -```md -調用 `window` 的 `alert()` 函式 -``` - - -### 2.3 中西文混排 -> 部分參考[《W3C 中文排版需求》](https://w3c.github.io/clreq/#chinese_and_western_mixed_text_composition) -- 中文和英文之間**應**插入一個**半形空格**。如:`你好 Hello 世界` -- 全形標點與英文之間**不須**插入空格。如:`你好世界(Hello World)` -- 注意使用 Markdown 標記(如*斜體*、**粗體**或[超連結](#)等)時,應保證空格出現在欲分隔字詞的**外部**。如: -```md -遵守 **JavaScript 代碼規範**非常重要 -遵守 [JavaScript 代碼規範](#foo)非常重要 -詳見*中文 MDN* 的參考頁面 -詳見[中文 MDN](#bar) 的參考頁面 -``` - - -### 2.4 代碼片段 -- 代碼片段中的**注釋應翻譯為中文**,其餘部分應**保留原文** -- 日誌及執行結果等也應**保留原文**,以便和代碼邏輯保持一致 - - - -## 3. 翻譯建議 - -### 3.1 調整語序為中文習慣 -例如: -> So far we've only been binding to simple property keys in our templates. But Vue.js actually supports the full power of JavaScript expressions inside all data bindings. - -以上例句可譯為:「目前我們都只是在模板中綁定簡單的屬性鍵,但事實上 Vue.js 支援在任何資料綁定中使用 JavaScript 表達式」。 - - -### 3.2 省略部分在原文中僅作完成句式的詞語 -例如: -> When Vue is updating a list of elements rendered with v-for, by default it uses an "in-place patch" strategy. If the order of the data items has changed, instead of moving the DOM elements to match the order of the items, Vue will patch each element in-place and make sure it reflects what should be rendered at that particular index. - -像是「to match the order of the items」這樣的短語可以在**保證語意不變**的情況下簡化。 - -以上例句可譯為:「Vue 預設按照『就地更新』的策略來更新透過 `v-for` 渲染的元素列表。當資料的順序改變時,Vue 不會隨之移動 DOM 元素的順序,而是就地更新每個元素,確保它反映應在指定索引位置上渲染的內容」。 - - -### 3.3 補充連接詞使句子更加連貫 -例如: -> The mustache tag will be replaced with the value of the msg property from the corresponding component instance. It will also be updated whenever the msg property changes. - -可在句中加入如「然而」、「並且」或「即使……也……」等連接詞來使句子更加連貫。 - -以上例句的後半句可譯為:「每當 `msg` 屬性發生改變時,綁定處的內容便會隨之更新」。 - - -### 3.4 在尊重原文的前提下使讀者更容易理解 - -> TODO - -### 3.5 譯文及原文行號應相對應 -由於 Astro 文檔以 Markdown 撰寫,每一行形成一個自然段落,因此原則上應保持譯文及原文行號應相對應,以保證後續更新時不造成混淆。 - - - -## 4. 關於本指南 -本指南**並非**硬性規定,而是代表中文文檔翻譯團隊共識的建議。 -如果你對本指南有任何想法或勘誤建議,歡迎透過創建 Issue 或是加入 [Discord 社群](https://astro.build/chat)中的 `#i18n-crew-zh` 頻道參與討論! \ No newline at end of file diff --git a/src/i18n/zh-tw/docsearch.ts b/src/i18n/zh-tw/docsearch.ts deleted file mode 100644 index 717b33430..000000000 --- a/src/i18n/zh-tw/docsearch.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { DocSearchDictionary } from '../translation-checkers'; - -export default DocSearchDictionary({ - button: '搜尋', - placeholder: '搜尋文檔', - shortcutLabel: '按下 / 來搜尋文檔', - resultsFooterLede: '正在尋找 Astro 整合或主題?需要更多幫助嗎?', - resultsFooterIntegrations: 'Astro 整合目錄', - resultsFooterThemes: 'Astro 主題展示', - resultsFooterDiscord: '在 Discord 上加入我們', - modal: { - searchBox: { - resetButtonTitle: '刪除搜尋', - resetButtonAriaLabel: '刪除搜尋', - cancelButtonText: '取消', - cancelButtonAriaLabel: '取消', - }, - startScreen: { - recentSearchesTitle: '最近搜尋', - noRecentSearchesText: '無最近搜尋内容', - saveRecentSearchButtonTitle: '保存此搜尋', - removeRecentSearchButtonTitle: '刪除此搜尋', - favoriteSearchesTitle: '收藏夾', - removeFavoriteSearchButtonTitle: '從收藏夾中刪除', - }, - errorScreen: { - titleText: '出現未知錯誤!', - helpText: '請確認你的網路連線狀況', - }, - footer: { - selectText: '進入條目', - selectKeyAriaLabel: 'Enter 鍵', - navigateText: '導航', - navigateUpKeyAriaLabel: '上方向鍵', - navigateDownKeyAriaLabel: '下方向鍵', - closeText: '關閉搜尋', - closeKeyAriaLabel: 'Esc 鍵', - searchByText: '搜尋來自', - }, - noResultsScreen: { - noResultsText: '未找到相關結果', - suggestedQueryText: '請嘗試搜尋', - reportMissingResultsText: '仍然認為應該有搜尋結果?', - reportMissingResultsLinkText: '請聯絡我們。', - }, - }, -}); diff --git a/src/i18n/zh-tw/nav.ts b/src/i18n/zh-tw/nav.ts deleted file mode 100644 index 5a182cccd..000000000 --- a/src/i18n/zh-tw/nav.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { NavDictionary } from '../translation-checkers'; - -export default NavDictionary({ - startHere: '開始', - 'getting-started': '新手上路', - install: '安裝', - 'editor-setup': '編輯器設定', - 'guides/upgrade-to/v3': '升级到 v3', - - coreConcepts: '核心理念', - 'concepts/why-astro': '為何選擇 Astro', - 'concepts/islands': 'Astro 群島', - - tutorials: '教學', - 'blog-tutorial': '建立部落格', - - basics: '基礎', - 'core-concepts/project-structure': '專案結構', - 'core-concepts/astro-components': '組件', - 'core-concepts/astro-pages': '頁面', - 'core-concepts/layouts': '版面', - - examples: '操作指南', - 'guides/migrate-to-astro': '遷移到 Astro', - 'guides/cms': '連接 CMS', - 'guides/integrations-guide': '添加整合', - 'guides/backend': '添加後端服務', - 'guides/deploy': '部署你的網站', - 'guides/recipes': '更多操作指南', - - features: '學習指南', - 'core-concepts/astro-syntax': 'Astro 模板語法', - 'core-concepts/framework-components': 'UI 框架', - 'core-concepts/routing': '路由', - 'guides/markdown-content': 'Markdown & MDX', - 'guides/content-collections': '内容集', - 'guides/client-side-scripts': '腳本與事件處理', - 'guides/styling': 'CSS 與樣式', - 'guides/images': '圖片', - 'guides/fonts': '字體', - 'guides/imports': '引入', - 'guides/server-side-rendering': '伺服器端渲染(SSR)', - 'core-concepts/endpoints': '端點', - 'guides/data-fetching': '資料獲取', - 'guides/middleware': '中介層', - 'guides/testing': '測試', - 'guides/view-transitions': '轉場過渡動畫', - 'guides/troubleshooting': '疑難排解', - - configuration: '配置', - 'guides/configuring-astro': 'Astro 配置文件', - 'guides/typescript': 'TypeScript', - 'guides/aliases': '引入路徑別名', - 'guides/environment-variables': '環境變數', - - reference: '參考', - 'reference/configuration-reference': '配置', - 'reference/api-reference': '執行階段 API', - 'reference/integrations-reference': '整合 API', - 'reference/adapter-reference': '配接器 API', - 'reference/image-service-reference': '圖片服務 API', - 'reference/directives-reference': '模板指令', - 'reference/cli-reference': '終端機', - 'reference/error-reference': '錯誤參考', - 'guides/publish-to-npm': 'NPM 套件格式', -}); diff --git a/src/i18n/zh-tw/ui.ts b/src/i18n/zh-tw/ui.ts deleted file mode 100644 index 91cd932af..000000000 --- a/src/i18n/zh-tw/ui.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { UIDictionary } from '../translation-checkers'; - -export default UIDictionary({ - 'a11y.skipLink': '跳至內容', - 'a11y.sectionLink': '標題為', - 'navbar.a11yTitle': '頂部導覽', - // Site settings - 'site.title': 'Astro 文檔', - 'site.description': '用更少的用戶端 JavaScript 打造更快速的網站。', - 'site.og.imageSrc': '/default-og-image.png?v=1', - 'site.og.imageAlt': 'Astro 的標誌在充滿星辰的太空中,右邊前景飄浮著土星似的紫色星球', - // Left Sidebar - 'leftSidebar.a11yTitle': '網站導覽', - 'leftSidebar.learnTab': '學習', - 'leftSidebar.referenceTab': '參考', - 'leftSidebar.viewInEnglish': '閱讀英文版', - 'leftSidebar.sponsoredBy': '贊助者', - // Right Sidebar - 'rightSidebar.a11yTitle': '目錄', - 'rightSidebar.onThisPage': '本頁內容', - 'rightSidebar.overview': '概要', - 'rightSidebar.community': 'Community', - 'rightSidebar.joinDiscord': '加入我們的 Discord', - 'rightSidebar.readBlog': '瀏覽我們的部落格', - 'rightSidebar.openCollective': '我們的 Open Collective', - 'rightSidebar.contribute': 'Contribute', - 'rightSidebar.contributorGuides': '貢獻者指南', - 'rightSidebar.editPage': '編輯此頁', - 'rightSidebar.translatePage': '翻譯此頁', - 'rightSidebar.github': 'GitHub 上的 Astro 文檔', - // Footer - 'footer.privacyPolicy': '隱私權政策', - // `` acessibility labels - 'themeToggle.useLight': '使用淺色主題', - 'themeToggle.useDark': '使用深色主題', - // Used in previous/next page links at the bottom of pages - 'articleNav.nextPage': '下一頁', - 'articleNav.prevPage': '返回', - // Used in ``: Added in: v0.24.0 [NEW] - 'since.addedIn': '添加於:', - 'since.new': '新', - 'since.beta': 'Beta', - // Installation Guide - 'install.autoTab': '自動化命令列', - 'install.manualTab': '手動設定', - // `` vocabulary - 'deploy.sectionTitle': '部署指南', - 'deploy.altSectionTitle': '更多部署指南', - 'deploy.filterLabel': '根據部署類型篩選', - 'deploy.ssrTag': 'SSR', - 'deploy.staticTag': '靜態', - // CMS Guides vocabulary - 'cms.navTitle': '更多 CMS 指南', - // Migration Guides vocabulary - 'migration.navTitle': '更多遷移指南', - // Recipes vocabulary - 'recipes.navTitle': '更多操作指南', - // `` vocabulary - 'recipesLink.singular': '相關操作指南:', - 'recipesLink.plural': '相關操作指南', - // `` fallback text - 'contributors.seeAll': '查看所有貢獻者', - // Fallback content notice shown when a page is not yet translated - 'fallbackContent.notice': '此頁面尚未支援你使用的語言,所以會以英文版呈現。你可以幫忙翻譯它!', - 'fallbackContent.linkText': '進一步了解如何貢獻', - // 404 Page - '404.title': '找不到此頁面', - '404.content': '這一頁不在我們的太陽系中。', - '404.linkText': '返回主頁', - // Aside component default labels - 'aside.note': '注意', - 'aside.tip': '提示', - 'aside.caution': '警告', - 'aside.danger': '危險', - // `` vocabulary - 'languageSelect.label': '選擇語言', - // Integrations vocabulary - 'integrations.changelog': '變更日誌', - 'integrations.footerTitle': '更多整合', - 'integrations.renderers': 'UI 框架', - 'integrations.adapters': 'SSR 配接器', - 'integrations.others': '其他', - // Checklist component - 'checklist.or': '或', - // Multiple Choice component - 'multipleChoice.defaultCorrect': '正確!', - 'multipleChoice.defaultIncorrect': '再試一次!', - 'multipleChoice.submitLabel': '提交', - // Tutorial Progress - 'progress.todo': '待辦', - 'progress.done': '完成', - // Tutorial Navigation - 'tutorial.trackerLabel': '教學追蹤', - 'tutorial.unit': '單元', - // Tutorial - 'tutorial.getReady': '準備好……', - // Feedback Fish widget - 'feedback.button': '給予我們反饋', - 'feedback.a11yLabel': '反饋表單', - 'feedback.formTitle': '你有哪些想法?', - 'feedback.categoryGroupLabel': '選擇反饋類型', - 'feedback.issue': '問題', - 'feedback.createIssue': '建立 GitHub Issue', - 'feedback.idea': '想法', - 'feedback.other': '其它', - 'feedback.messageA11yLabel': '留言', - 'feedback.placeholder': '你想讓我們知道甚麼?', - 'feedback.submit': '提交反饋', - 'feedback.close': '關閉反饋表單', - 'feedback.success': '謝謝!我們收到了你的反饋。', - // `` component - 'fileTree.directoryLabel': '目錄', - // Code snippet vocabulary - 'expressiveCode.terminalWindowFallbackTitle': '終端機視窗', - 'expressiveCode.copyButtonTooltip': '複製到剪貼簿', - 'expressiveCode.copyButtonCopied': '複製成功!', - // Backend Guides vocabulary - 'backend.navTitle': '更多後端服務指南', - // Stubs vocabulary - 'stub.title': '完善本頁!', - 'stub.subtitle': '此指南尚未完成。', - 'stub.description.migration': - '想為這個指南貢獻嗎?是否有介紹從這種技術遷移至 Astro 的部落格文章、影片或其他資源可以分享?', - 'stub.description.cms': '知道更多在 Astro 使用此 CMS 的資訊?', - 'stub.description.backend': '知道更多在 Astro 使用此後端服務的資訊?', -}); diff --git a/src/styles/custom.css b/src/styles/custom.css deleted file mode 100644 index 6bf61267e..000000000 --- a/src/styles/custom.css +++ /dev/null @@ -1,27 +0,0 @@ -/** Custom Styles **/ -.site-title img { - width: auto; - height: 20px; - - @media (min-width: 50rem) { - height: 22px; - } -} - -.sidebar-pane { - --sl-z-index-pane: 7; - z-index: var(--sl-z-index-pane); -} - -.right-sidebar nav { - z-index: var(--sl-z-index-menu); -} - -.sl-markdown-content :is(img, picture, video, canvas, svg, iframe):not(:where(.not-content *)).svg-baseline { - display: inline-flex; - align-self: center; - max-width: 100%; - height: auto; - top: .125em; - position: relative; -} diff --git a/src/util.ts b/src/util.ts deleted file mode 100644 index 0b43ae526..000000000 --- a/src/util.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { CollectionEntry } from 'astro:content'; - -export function getLanguageFromURL(pathname: string) { - const langCodeMatch = pathname.match(/\/([a-z]{2}-?[a-z]{0,2})\//); - return langCodeMatch ? langCodeMatch[1] : 'en'; -} - -/** Remove \ and / from beginning of string */ -export function removeLeadingSlash(path: string) { - return path.replace(/^[/\\]+/, ''); -} - -/** Remove \ and / from end of string */ -export function removeTrailingSlash(path: string) { - return path.replace(/[/\\]+$/, ''); -} - -/** Get a page’s slug, without the language prefix (e.g. `'en/migrate'` => `'migrate'`). */ -export const stripLangFromSlug = (slug: CollectionEntry<'docs'>['slug']) => - slug.split('/').slice(1).join('/'); - -/** Get a page’s lang tag from its slug (e.g. `'en/migrate'` => `'en'`). */ -export const getLangFromSlug = (slug: CollectionEntry<'docs'>['slug']) => slug.split('/')[0]; diff --git a/src/util/getPageCategory.ts b/src/util/getPageCategory.ts deleted file mode 100644 index 9ff0e10c1..000000000 --- a/src/util/getPageCategory.ts +++ /dev/null @@ -1,29 +0,0 @@ -// TODO: Move this data to our i18n system to support localized category labels. -const defaultCategory = 'Learn'; - -// Order is important here. Pages are tested to see if they *start* with one of -// these paths and will return early when one matches. This means more specific -// paths need to be earlier in the array, e.g. `reference/errors/` before `reference/`. -const categories = [ - ['/guides/analytics/', 'Recipes'], - ['/guides/cms/', 'Recipes'], - ['/guides/deploy/', 'Recipes'], - ['/guides/integrations/', 'Add-ons'], - ['/guides/themes/', 'Add-ons'], - ['/guides/upgrade-to/', 'Upgrade Guides'], - ['/recipes/', 'Recipes'], - ['/reference/', 'Reference'], - ['/tutorial/', 'Tutorials'], -] as const; - -/** - * @param url URL for the current page. - * @returns The category for the current page as used by Algolia DocSearch to group search results. - */ -export function getPageCategory(url: { pathname: string }) { - const langAgnosticPath = url.pathname.replace(/\/\w\w(-\w\w)?\//, ''); - for (const [path, label] of categories) { - if (langAgnosticPath.startsWith(path)) return label; - } - return defaultCategory; -} diff --git a/src/util/groupPagesByLang.ts b/src/util/groupPagesByLang.ts deleted file mode 100644 index e31b356fb..000000000 --- a/src/util/groupPagesByLang.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { CollectionEntry } from 'astro:content'; - -export const groupPagesByLang = >(pages: T[]) => - pages.reduce( - (pages, page) => { - const lang = page.slug.split('/')[0]; - if (!pages[lang]) pages[lang] = []; - pages[lang].push(page); - return pages; - }, - {} as { [lang: string]: T[] } - ); diff --git a/src/util/isSubPage.ts b/src/util/isSubPage.ts deleted file mode 100644 index 2a980c49c..000000000 --- a/src/util/isSubPage.ts +++ /dev/null @@ -1,50 +0,0 @@ -import type { CollectionEntry } from 'astro:content'; -import { englishPages } from '~/content'; -import { getPageCategory } from './getPageCategory'; - -/** Remove the sub-page segment of a URL string */ -export function removeSubPageSegment(path: string) { - // Include new pages with sub-pages as part of this regex. - const regex = - /(?:install|deploy|integrations|tutorial|migrate-to-thulite|recipes|cms|analytics|themes|backend)\//; - const matches = regex.exec(path); - - if (matches) { - const matchIndex = matches.index; - // Get the first slash index after the main page path segment. - const slashIndex = path.slice(matchIndex).indexOf('/') + matchIndex; - return path.slice(0, slashIndex); - } - return path; -} - -const typeIndexes: Partial['data']['type'], string>> = { - recipe: 'recipes', -}; - -const categoryIndex: Partial, string>> = { - 'Error Reference': 'reference/error-reference', -}; - -/** - * Test if `currentPage` is considered a sub-page of `parentSlug`. - * @param currentPage The full slug for the current page, e.g. `'en/guides/rss'` - * @param parentSlug The language-less slug for the parent to test against e.g. `'guides/content-collections'` - */ -export function isSubPage(currentPage: string, parentSlug: string): boolean { - // Test 1: do the two pages share a base URL segment? - if (removeSubPageSegment(currentPage).endsWith(removeSubPageSegment(parentSlug))) { - return true; - } - // Test 2: is there a known parent page for this page category? - const category = getPageCategory({ pathname: '/' + currentPage + '/' }); - if (categoryIndex[category] === parentSlug) { - return true; - } - // Test 3: is there a known parent page for this page type? - const type = englishPages.find(({ slug }) => slug === currentPage)?.data.type; - if (type && typeIndexes[type] === parentSlug) { - return true; - } - return false; -} diff --git a/static/apple-touch-icon.png b/static/apple-touch-icon.png new file mode 100644 index 000000000..cee9f36fc Binary files /dev/null and b/static/apple-touch-icon.png differ diff --git a/static/cover.png b/static/cover.png new file mode 100644 index 000000000..881ed6f1e Binary files /dev/null and b/static/cover.png differ diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 000000000..ed827b6ed Binary files /dev/null and b/static/favicon.ico differ diff --git a/static/icon.svg b/static/icon.svg new file mode 100644 index 000000000..7df7427aa --- /dev/null +++ b/static/icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index c23a9211e..000000000 --- a/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "astro/tsconfigs/strict", - "exclude": ["dist"], - "compilerOptions": { - "allowJs": true, - "baseUrl": ".", - "paths": { - "~/*": ["src/*"] - }, - "jsx": "react-jsx", - "jsxImportSource": "preact" - } -}