Create initial docs site (#389)
* create initial docs site * change copy for title and header to say Astro Docs * create initial docs site * remove text merge changes * change workspaceRoot and remove yarn.lock from docs-www * add docs-www to workspace Co-authored-by: Kitto Khrangtong <kitto@queensboro.com>
This commit is contained in:
parent
8d72862a98
commit
7d719ff75d
22 changed files with 1293 additions and 5 deletions
18
docs-www/.gitignore
vendored
Normal file
18
docs-www/.gitignore
vendored
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
# build output
|
||||||
|
dist
|
||||||
|
|
||||||
|
# dependencies
|
||||||
|
node_modules/
|
||||||
|
.snowpack/
|
||||||
|
|
||||||
|
# logs
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
|
||||||
|
# environment variables
|
||||||
|
.env
|
||||||
|
.env.production
|
||||||
|
|
||||||
|
# macOS-specific files
|
||||||
|
.DS_Store
|
5
docs-www/astro.config.mjs
Normal file
5
docs-www/astro.config.mjs
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
export default {
|
||||||
|
renderers: [
|
||||||
|
'@astrojs/renderer-preact'
|
||||||
|
]
|
||||||
|
};
|
15
docs-www/package.json
Normal file
15
docs-www/package.json
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"name": "docs-www",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"start": "astro dev",
|
||||||
|
"build": "astro build"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"astro": "^0.13.0"
|
||||||
|
},
|
||||||
|
"snowpack": {
|
||||||
|
"workspaceRoot": ".."
|
||||||
|
}
|
||||||
|
}
|
155
docs-www/public/code.css
Normal file
155
docs-www/public/code.css
Normal file
|
@ -0,0 +1,155 @@
|
||||||
|
.language-css > code,
|
||||||
|
.language-sass > code,
|
||||||
|
.language-scss > code {
|
||||||
|
color: #fd9170;
|
||||||
|
}
|
||||||
|
|
||||||
|
[class*="language-"] .namespace {
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.atrule {
|
||||||
|
color: #c792ea;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.attr-name {
|
||||||
|
color: #ffcb6b;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.attr-value {
|
||||||
|
color: #a5e844;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.attribute {
|
||||||
|
color: #a5e844;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.boolean {
|
||||||
|
color: #c792ea;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.builtin {
|
||||||
|
color: #ffcb6b;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.cdata {
|
||||||
|
color: #80cbc4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.char {
|
||||||
|
color: #80cbc4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.class {
|
||||||
|
color: #ffcb6b;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.class-name {
|
||||||
|
color: #f2ff00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.comment {
|
||||||
|
color: #616161;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.constant {
|
||||||
|
color: #c792ea;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.deleted {
|
||||||
|
color: #ff6666;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.doctype {
|
||||||
|
color: #616161;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.entity {
|
||||||
|
color: #ff6666;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.function {
|
||||||
|
color: #c792ea;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.hexcode {
|
||||||
|
color: #f2ff00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.id {
|
||||||
|
color: #c792ea;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.important {
|
||||||
|
color: #c792ea;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.inserted {
|
||||||
|
color: #80cbc4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.keyword {
|
||||||
|
color: #c792ea;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.number {
|
||||||
|
color: #fd9170;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.operator {
|
||||||
|
color: #89ddff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.prolog {
|
||||||
|
color: #616161;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.property {
|
||||||
|
color: #80cbc4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.pseudo-class {
|
||||||
|
color: #a5e844;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.pseudo-element {
|
||||||
|
color: #a5e844;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.punctuation {
|
||||||
|
color: #89ddff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.regex {
|
||||||
|
color: #f2ff00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.selector {
|
||||||
|
color: #ff6666;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.string {
|
||||||
|
color: #a5e844;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.symbol {
|
||||||
|
color: #c792ea;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.tag {
|
||||||
|
color: #ff6666;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.unit {
|
||||||
|
color: #fd9170;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.url {
|
||||||
|
color: #ff6666;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.variable {
|
||||||
|
color: #ff6666;
|
||||||
|
}
|
11
docs-www/public/favicon.svg
Normal file
11
docs-www/public/favicon.svg
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<svg width="256" height="256" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<style>
|
||||||
|
#flame { fill: #FF5D01; }
|
||||||
|
#a { fill: #000014; }
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
#a { fill: #fff; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<path id="a" fill-rule="evenodd" clip-rule="evenodd" d="M163.008 18.929c1.944 2.413 2.935 5.67 4.917 12.181l43.309 142.27a180.277 180.277 0 00-51.778-17.53l-28.198-95.29a3.67 3.67 0 00-7.042.01l-27.857 95.232a180.225 180.225 0 00-52.01 17.557l43.52-142.281c1.99-6.502 2.983-9.752 4.927-12.16a15.999 15.999 0 016.484-4.798c2.872-1.154 6.271-1.154 13.07-1.154h31.085c6.807 0 10.211 0 13.086 1.157a16.004 16.004 0 016.487 4.806z" />
|
||||||
|
<path id="flame" fill-rule="evenodd" clip-rule="evenodd" d="M168.19 180.151c-7.139 6.105-21.39 10.268-37.804 10.268-20.147 0-37.033-6.272-41.513-14.707-1.602 4.835-1.961 10.367-1.961 13.902 0 0-1.056 17.355 11.015 29.426 0-6.268 5.081-11.349 11.349-11.349 10.743 0 10.731 9.373 10.721 16.977v.679c0 11.542 7.054 21.436 17.086 25.606a23.27 23.27 0 01-2.339-10.2c0-11.008 6.463-15.107 13.974-19.87 5.976-3.79 12.616-8.001 17.192-16.449a31.024 31.024 0 003.743-14.82c0-3.299-.513-6.479-1.463-9.463z" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
350
docs-www/public/index.css
Normal file
350
docs-www/public/index.css
Normal file
|
@ -0,0 +1,350 @@
|
||||||
|
@import './theme';
|
||||||
|
@import './code';
|
||||||
|
|
||||||
|
* {
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--user-font-scale: 1rem - 16px;
|
||||||
|
--max-width: calc(100% - 2rem);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 50em) {
|
||||||
|
:root {
|
||||||
|
--max-width: 48em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
min-height: 100vh;
|
||||||
|
font-family: var(--font-body);
|
||||||
|
font-size: 1rem;
|
||||||
|
font-size: clamp(0.875rem, 0.4626rem + 1.0309vw + var(--user-font-scale), 1.125rem);
|
||||||
|
line-height: 1.625;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav ul {
|
||||||
|
list-style: none;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content main > * + * {
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Typography */
|
||||||
|
:is(h1, h2, h3, h4, h5, h6) {
|
||||||
|
margin-bottom: 1.38rem;
|
||||||
|
font-weight: 400;
|
||||||
|
line-height: 1.3;
|
||||||
|
}
|
||||||
|
|
||||||
|
:is(h1, h2) {
|
||||||
|
max-width: 40ch;
|
||||||
|
}
|
||||||
|
|
||||||
|
:is(h2, h3):not(:first-child) {
|
||||||
|
margin-top: 3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: clamp(2.488rem, 1.9240rem + 1.4100vw, 3.052rem);
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: clamp(2.074rem, 1.7070rem + 0.9175vw, 2.441rem);
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: clamp(1.728rem, 1.5030rem + 0.5625vw, 1.953rem);
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
font-size: clamp(1.44rem, 1.3170rem + 0.3075vw, 1.563rem);
|
||||||
|
}
|
||||||
|
|
||||||
|
h5 {
|
||||||
|
font-size: clamp(1.2rem, 1.1500rem + 0.1250vw, 1.25rem);
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
color: var(--theme-text-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
small, .text_small {
|
||||||
|
font-size: 0.833rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: var(--theme-accent);
|
||||||
|
font-weight: 400;
|
||||||
|
text-underline-offset: 0.08em;
|
||||||
|
text-decoration: none;
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
a > code:not([class*="language"]) {
|
||||||
|
position: relative;
|
||||||
|
color: var(--theme-accent);
|
||||||
|
background: transparent;
|
||||||
|
text-underline-offset: var(--padding-block);
|
||||||
|
}
|
||||||
|
|
||||||
|
a > code:not([class*="language"])::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
display: block;
|
||||||
|
background: var(--theme-accent);
|
||||||
|
opacity: var(--theme-accent-opacity);
|
||||||
|
border-radius: var(--border-radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover,
|
||||||
|
a:focus {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:focus {
|
||||||
|
outline: 2px solid currentColor;
|
||||||
|
outline-offset: 0.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
strong {
|
||||||
|
font-weight: 600;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Supporting Content */
|
||||||
|
|
||||||
|
code:not([class*="language"]) {
|
||||||
|
--border-radius: 3px;
|
||||||
|
--padding-block: 0.2rem;
|
||||||
|
--padding-inline: 0.33rem;
|
||||||
|
|
||||||
|
font-family: var(--font-mono);
|
||||||
|
font-size: .85em;
|
||||||
|
color: inherit;
|
||||||
|
background-color: var(--theme-code-inline-bg);
|
||||||
|
padding: var(--padding-block) var(--padding-inline);
|
||||||
|
margin: calc(var(--padding-block) * -1) -0.125em;
|
||||||
|
border-radius: var(--border-radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
pre > code:not([class*="language"]) {
|
||||||
|
background-color: transparent;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
border-radius: 0;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
position: relative;
|
||||||
|
background-color: var(--theme-code-bg);
|
||||||
|
color: var(--theme-code-text);
|
||||||
|
--padding-block: 1rem;
|
||||||
|
--padding-inline: 2rem;
|
||||||
|
padding: var(--padding-block) var(--padding-inline);
|
||||||
|
padding-right: calc(var(--padding-inline) * 2);
|
||||||
|
margin-left: calc(50vw - var(--padding-inline));
|
||||||
|
transform: translateX(-50vw);
|
||||||
|
|
||||||
|
line-height: 1.414;
|
||||||
|
width: calc(100vw + 4px);
|
||||||
|
max-width: calc(100% + (var(--padding-inline) * 2));
|
||||||
|
overflow-y: hidden;
|
||||||
|
overflow-x: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 37.75em) {
|
||||||
|
pre {
|
||||||
|
--padding-inline: 1.25rem;
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
margin: 2rem 0;
|
||||||
|
padding: 0.5em 1rem;
|
||||||
|
border-left: 3px solid rgba(0, 0, 0, 0.35);
|
||||||
|
background-color: rgba(0, 0, 0, 0.05);
|
||||||
|
border-radius: 0 0.25rem 0.25rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
header button {
|
||||||
|
background-color: var(--theme-bg);
|
||||||
|
}
|
||||||
|
header button:hover,
|
||||||
|
header button:focus {
|
||||||
|
background: var(--theme-text);
|
||||||
|
color: var(--theme-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-items: center;
|
||||||
|
gap: 0.25em;
|
||||||
|
padding: 0.33em 0.67em;
|
||||||
|
border: 0;
|
||||||
|
background: var(--theme-bg);
|
||||||
|
display: flex;
|
||||||
|
font-size: 1rem;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.25em;
|
||||||
|
border-radius: 99em;
|
||||||
|
background-color: var(--theme-bg);
|
||||||
|
}
|
||||||
|
button:hover {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#theme-toggle {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.25em;
|
||||||
|
padding: 0.33em 0.67em;
|
||||||
|
margin-left: -0.67em;
|
||||||
|
margin-right: -0.67em;
|
||||||
|
border-radius: 99em;
|
||||||
|
background-color: var(--theme-bg);
|
||||||
|
}
|
||||||
|
#theme-toggle:focus-within {
|
||||||
|
outline: 2px solid transparent;
|
||||||
|
box-shadow: 0 0 0 0.08em var(--theme-accent), 0 0 0 0.12em white;
|
||||||
|
}
|
||||||
|
|
||||||
|
#theme-toggle > label {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
width: 1.5rem;
|
||||||
|
height: 1.5rem;
|
||||||
|
opacity: 0.5;
|
||||||
|
transition: transform 120ms ease-out, opacity 120ms ease-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
#theme-toggle > label:hover,
|
||||||
|
#theme-toggle > label:focus {
|
||||||
|
transform: scale(1.125);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#theme-toggle .checked {
|
||||||
|
color: var(--theme-accent);
|
||||||
|
transform: scale(1.125);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[name="theme-toggle"] {
|
||||||
|
position: absolute;
|
||||||
|
opacity: 0;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav h4 {
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 1.25rem;
|
||||||
|
margin: 0;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.edit-on-github,
|
||||||
|
.header-link {
|
||||||
|
font-size: 1rem;
|
||||||
|
padding-left: 1rem;
|
||||||
|
border-left: 4px solid var(--theme-divider);
|
||||||
|
}
|
||||||
|
|
||||||
|
.edit-on-github:hover,
|
||||||
|
.edit-on-github:focus,
|
||||||
|
.header-link:hover,
|
||||||
|
.header-link:focus {
|
||||||
|
color: var(--theme-text-light);
|
||||||
|
border-left-color: var(--theme-text-lighter);
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-link:focus-within {
|
||||||
|
color: var(--theme-text-light);
|
||||||
|
border-left-color: var(--theme-text-lighter);
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-link.active {
|
||||||
|
border-left-color: var(--theme-accent);
|
||||||
|
color: var(--theme-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-link.depth-2 {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-link.depth-3 {
|
||||||
|
padding-left: 2rem;
|
||||||
|
}
|
||||||
|
.header-link.depth-4 {
|
||||||
|
padding-left: 3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.edit-on-github,
|
||||||
|
.header-link a {
|
||||||
|
font: inherit;
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.edit-on-github {
|
||||||
|
margin-top: 2rem;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.edit-on-github > * {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-link {
|
||||||
|
font-size: 1rem;
|
||||||
|
margin-bottom: 0;
|
||||||
|
transform: translateX(0);
|
||||||
|
transition: 120ms transform ease-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-link:hover,
|
||||||
|
.nav-link:focus {
|
||||||
|
color: var(--theme-text-lighter);
|
||||||
|
transform: translateX(0.25em);
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-link:focus-within {
|
||||||
|
color: var(--theme-text-lighter);
|
||||||
|
transform: translateX(0.25em);
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-link a {
|
||||||
|
font: inherit;
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-groups > li + li {
|
||||||
|
margin-top: 2rem;
|
||||||
|
}
|
73
docs-www/public/theme.css
Normal file
73
docs-www/public/theme.css
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
:root {
|
||||||
|
--font-fallback: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;
|
||||||
|
--font-body: system-ui, var(--font-fallback);
|
||||||
|
--font-mono: source-code-pro,Menlo,Monaco,Consolas,'Courier New',monospace;
|
||||||
|
|
||||||
|
--color-white: #FFF;
|
||||||
|
--color-black: #000014;
|
||||||
|
|
||||||
|
--color-gray-50: #F9FAFB;
|
||||||
|
--color-gray-100: #F3F4F6;
|
||||||
|
--color-gray-200: #E5E7EB;
|
||||||
|
--color-gray-300: #D1D5DB;
|
||||||
|
--color-gray-400: #9CA3AF;
|
||||||
|
--color-gray-500: #6B7280;
|
||||||
|
--color-gray-600: #4B5563;
|
||||||
|
--color-gray-700: #374151;
|
||||||
|
--color-gray-800: #1F2937;
|
||||||
|
--color-gray-900: #111827;
|
||||||
|
|
||||||
|
--color-blue: #3894FF;
|
||||||
|
--color-blue-rgb: 56,148,255;
|
||||||
|
--color-green: #17C083;
|
||||||
|
--color-green-rgb: 23,192,131;
|
||||||
|
--color-orange: #FF5D01;
|
||||||
|
--color-orange-rgb: 255,93,1;
|
||||||
|
--color-purple: #882DE7;
|
||||||
|
--color-purple-rgb: 136,45,231;
|
||||||
|
--color-red: #FF1639;
|
||||||
|
--color-red-rgb: 255,22,57;
|
||||||
|
--color-yellow: #FFBE2D;
|
||||||
|
--color-yellow-rgb: 255,190,45;
|
||||||
|
}
|
||||||
|
|
||||||
|
:root {
|
||||||
|
color-scheme: light;
|
||||||
|
--theme-accent: var(--color-blue);
|
||||||
|
--theme-accent-rgb: var(--color-blue-rgb);
|
||||||
|
--theme-accent-opacity: 0.1;
|
||||||
|
--theme-divider: var(--color-gray-100);
|
||||||
|
--theme-text: var(--color-gray-800);
|
||||||
|
--theme-text-light: var(--color-gray-600);
|
||||||
|
--theme-text-lighter: var(--color-gray-400);
|
||||||
|
--theme-bg: var(--color-white);
|
||||||
|
--theme-bg-offset: var(--color-gray-100);
|
||||||
|
--theme-bg-accent: rgba(var(--theme-accent-rgb), var(--theme-accent-opacity));
|
||||||
|
--theme-code-inline-bg: var(--color-gray-100);
|
||||||
|
--theme-code-text: var(--color-gray-100);
|
||||||
|
--theme-code-bg: var(--color-gray-700);
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background: var(--theme-bg);
|
||||||
|
color: var(--theme-text);
|
||||||
|
}
|
||||||
|
|
||||||
|
:root.theme-dark {
|
||||||
|
color-scheme: dark;
|
||||||
|
--theme-accent-opacity: 0.3;
|
||||||
|
--theme-divider: var(--color-gray-900);
|
||||||
|
--theme-text: var(--color-gray-200);
|
||||||
|
--theme-text-light: var(--color-gray-400);
|
||||||
|
--theme-text-lighter: var(--color-gray-600);
|
||||||
|
--theme-bg: var(--color-black);
|
||||||
|
--theme-bg-offset: var(--color-gray-900);
|
||||||
|
--theme-code-inline-bg: var(--color-gray-800);
|
||||||
|
--theme-code-text: var(--color-gray-200);
|
||||||
|
--theme-code-bg: var(--color-gray-900);
|
||||||
|
}
|
||||||
|
|
||||||
|
::selection {
|
||||||
|
color: var(--theme-accent);
|
||||||
|
background-color: rgba(var(--theme-accent-rgb), var(--theme-accent-opacity));
|
||||||
|
}
|
8
docs-www/public/theme.js
Normal file
8
docs-www/public/theme.js
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
(() => {
|
||||||
|
const root = document.documentElement;
|
||||||
|
if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
|
||||||
|
root.classList.add('theme-dark');
|
||||||
|
} else {
|
||||||
|
root.classList.remove('theme-dark');
|
||||||
|
}
|
||||||
|
})();
|
15
docs-www/src/components/ArticleFooter.astro
Normal file
15
docs-www/src/components/ArticleFooter.astro
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
import AvatarList from './AvatarList.astro';
|
||||||
|
---
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<AvatarList />
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
footer {
|
||||||
|
margin-top: auto;
|
||||||
|
padding: 2rem 0;
|
||||||
|
border-top: 3px solid var(--theme-divider);
|
||||||
|
}
|
||||||
|
</style>
|
74
docs-www/src/components/AvatarList.astro
Normal file
74
docs-www/src/components/AvatarList.astro
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
<!-- Thanks to @5t3ph for https://smolcss.dev/#smol-avatar-list! -->
|
||||||
|
|
||||||
|
<ul class="avatar-list">
|
||||||
|
<li><a href="https://smolcss.dev/#smol-avatar-list"><img alt="Avatar 1" width="64" height="64" src='https://avataaars.io/?avatarStyle=Transparent&topType=LongHairBun&accessoriesType=Blank&hairColor=Auburn&facialHairType=BeardMedium&facialHairColor=Auburn&clotheType=ShirtCrewNeck&clotheColor=Blue01&eyeType=Side&eyebrowType=RaisedExcitedNatural&mouthType=Serious&skinColor=Tanned' /></a></li>
|
||||||
|
<li><a href="https://smolcss.dev/#smol-avatar-list"><img alt="Avatar 2" width="64" height="64" src='https://avataaars.io/?avatarStyle=Transparent&topType=LongHairDreads&accessoriesType=Blank&hairColor=Brown&facialHairType=Blank&clotheType=ShirtScoopNeck&clotheColor=PastelGreen&eyeType=Default&eyebrowType=DefaultNatural&mouthType=Smile&skinColor=Tanned' /></a></li>
|
||||||
|
<li><a href="https://smolcss.dev/#smol-avatar-list"><img alt="Avatar 3" width="64" height="64" src='https://avataaars.io/?avatarStyle=Transparent&topType=LongHairCurly&hairColor=BrownDark&facialHairType=Blank&clotheType=GraphicShirt&clotheColor=Pink&graphicType=Diamond&eyeType=Side&eyebrowType=Default&mouthType=Default&skinColor=Brown'/></a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.avatar-list {
|
||||||
|
--avatar-size: 2.5rem;
|
||||||
|
--avatar-count: 3;
|
||||||
|
|
||||||
|
display: grid;
|
||||||
|
list-style: none;
|
||||||
|
/* Default to displaying most of the avatar to
|
||||||
|
enable easier access on touch devices, ensuring
|
||||||
|
the WCAG touch target size is met or exceeded */
|
||||||
|
grid-template-columns: repeat(
|
||||||
|
var(--avatar-count),
|
||||||
|
max(44px, calc(var(--avatar-size) / 1.15))
|
||||||
|
);
|
||||||
|
/* `padding` matches added visual dimensions of
|
||||||
|
the `box-shadow` to help create a more accurate
|
||||||
|
computed component size */
|
||||||
|
padding: 0.08em;
|
||||||
|
font-size: var(--avatar-size);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (any-hover: hover) and (any-pointer: fine) {
|
||||||
|
.avatar-list {
|
||||||
|
/* We create 1 extra cell to enable the computed
|
||||||
|
width to match the final visual width */
|
||||||
|
grid-template-columns: repeat(
|
||||||
|
calc(var(--avatar-count) + 1),
|
||||||
|
calc(var(--avatar-size) / 1.75)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.avatar-list li {
|
||||||
|
width: var(--avatar-size);
|
||||||
|
height: var(--avatar-size);
|
||||||
|
}
|
||||||
|
|
||||||
|
.avatar-list li:hover ~ li a,
|
||||||
|
.avatar-list li:focus-within ~ li a {
|
||||||
|
transform: translateX(33%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.avatar-list img,
|
||||||
|
.avatar-list a {
|
||||||
|
display: block;
|
||||||
|
border-radius: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.avatar-list a {
|
||||||
|
transition: transform 180ms ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.avatar-list img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: cover;
|
||||||
|
background-color: #fff;
|
||||||
|
box-shadow: 0 0 0 0.05em #fff, 0 0 0 0.08em rgba(0, 0, 0, 0.15);
|
||||||
|
}
|
||||||
|
|
||||||
|
.avatar-list a:focus {
|
||||||
|
outline: 2px solid transparent;
|
||||||
|
/* Double-layer trick to work for dark and light backgrounds */
|
||||||
|
box-shadow: 0 0 0 0.08em var(--theme-accent), 0 0 0 0.12em white;
|
||||||
|
}
|
||||||
|
</style>
|
61
docs-www/src/components/DocSidebar.tsx
Normal file
61
docs-www/src/components/DocSidebar.tsx
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
import type { FunctionalComponent } from 'preact';
|
||||||
|
import { h } from 'preact';
|
||||||
|
import { useState, useEffect, useRef } from 'preact/hooks';
|
||||||
|
import EditOnGithub from './EditOnGithub';
|
||||||
|
|
||||||
|
const DocSidebar: FunctionalComponent<{ headers: any[]; editHref: string }> = ({ headers = [], editHref }) => {
|
||||||
|
const itemOffsets = useRef([]);
|
||||||
|
const [activeId, setActiveId] = useState<string>(undefined);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const getItemOffsets = () => {
|
||||||
|
const titles = document.querySelectorAll('article :is(h2, h3, h4)');
|
||||||
|
itemOffsets.current = Array.from(titles).map((title) => ({
|
||||||
|
id: title.id,
|
||||||
|
topOffset: title.getBoundingClientRect().top + window.scrollY,
|
||||||
|
}));
|
||||||
|
};
|
||||||
|
|
||||||
|
const onScroll = () => {
|
||||||
|
const itemIndex = itemOffsets.current.findIndex((item) => item.topOffset > window.scrollY + window.innerHeight / 3);
|
||||||
|
if (itemIndex === 0) {
|
||||||
|
setActiveId(undefined);
|
||||||
|
} else if (itemIndex === -1) {
|
||||||
|
setActiveId(itemOffsets.current[itemOffsets.current.length - 1].id);
|
||||||
|
} else {
|
||||||
|
setActiveId(itemOffsets.current[itemIndex - 1].id);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
getItemOffsets();
|
||||||
|
window.addEventListener('resize', getItemOffsets);
|
||||||
|
window.addEventListener('scroll', onScroll);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
window.removeEventListener('resize', getItemOffsets);
|
||||||
|
window.removeEventListener('scroll', onScroll);
|
||||||
|
};
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<nav>
|
||||||
|
<div>
|
||||||
|
<h4>Contents</h4>
|
||||||
|
<ul>
|
||||||
|
{headers
|
||||||
|
.filter(({ depth }) => depth > 1 && depth < 5)
|
||||||
|
.map((header) => (
|
||||||
|
<li class={`header-link depth-${header.depth} ${activeId === header.slug ? 'active' : ''}`.trim()}>
|
||||||
|
<a href={`#${header.slug}`}>{header.text}</a>
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<EditOnGithub href={editHref} />
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default DocSidebar;
|
26
docs-www/src/components/EditOnGithub.tsx
Normal file
26
docs-www/src/components/EditOnGithub.tsx
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
import type { FunctionalComponent } from 'preact';
|
||||||
|
import { h } from 'preact';
|
||||||
|
|
||||||
|
const EditOnGithub: FunctionalComponent<{ href: string }> = ({ href }) => {
|
||||||
|
return (
|
||||||
|
<a class="edit-on-github" href={href}>
|
||||||
|
<svg
|
||||||
|
preserveAspectRatio="xMidYMid meet"
|
||||||
|
height="1em"
|
||||||
|
width="1em"
|
||||||
|
fill="currentColor"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
viewBox="0 0 438.549 438.549"
|
||||||
|
stroke="none"
|
||||||
|
class="icon-7f6730be--text-3f89f380"
|
||||||
|
>
|
||||||
|
<g>
|
||||||
|
<path d="M409.132 114.573c-19.608-33.596-46.205-60.194-79.798-79.8-33.598-19.607-70.277-29.408-110.063-29.408-39.781 0-76.472 9.804-110.063 29.408-33.596 19.605-60.192 46.204-79.8 79.8C9.803 148.168 0 184.854 0 224.63c0 47.78 13.94 90.745 41.827 128.906 27.884 38.164 63.906 64.572 108.063 79.227 5.14.954 8.945.283 11.419-1.996 2.475-2.282 3.711-5.14 3.711-8.562 0-.571-.049-5.708-.144-15.417a2549.81 2549.81 0 0 1-.144-25.406l-6.567 1.136c-4.187.767-9.469 1.092-15.846 1-6.374-.089-12.991-.757-19.842-1.999-6.854-1.231-13.229-4.086-19.13-8.559-5.898-4.473-10.085-10.328-12.56-17.556l-2.855-6.57c-1.903-4.374-4.899-9.233-8.992-14.559-4.093-5.331-8.232-8.945-12.419-10.848l-1.999-1.431c-1.332-.951-2.568-2.098-3.711-3.429-1.142-1.331-1.997-2.663-2.568-3.997-.572-1.335-.098-2.43 1.427-3.289 1.525-.859 4.281-1.276 8.28-1.276l5.708.853c3.807.763 8.516 3.042 14.133 6.851 5.614 3.806 10.229 8.754 13.846 14.842 4.38 7.806 9.657 13.754 15.846 17.847 6.184 4.093 12.419 6.136 18.699 6.136 6.28 0 11.704-.476 16.274-1.423 4.565-.952 8.848-2.383 12.847-4.285 1.713-12.758 6.377-22.559 13.988-29.41-10.848-1.14-20.601-2.857-29.264-5.14-8.658-2.286-17.605-5.996-26.835-11.14-9.235-5.137-16.896-11.516-22.985-19.126-6.09-7.614-11.088-17.61-14.987-29.979-3.901-12.374-5.852-26.648-5.852-42.826 0-23.035 7.52-42.637 22.557-58.817-7.044-17.318-6.379-36.732 1.997-58.24 5.52-1.715 13.706-.428 24.554 3.853 10.85 4.283 18.794 7.952 23.84 10.994 5.046 3.041 9.089 5.618 12.135 7.708 17.705-4.947 35.976-7.421 54.818-7.421s37.117 2.474 54.823 7.421l10.849-6.849c7.419-4.57 16.18-8.758 26.262-12.565 10.088-3.805 17.802-4.853 23.134-3.138 8.562 21.509 9.325 40.922 2.279 58.24 15.036 16.18 22.559 35.787 22.559 58.817 0 16.178-1.958 30.497-5.853 42.966-3.9 12.471-8.941 22.457-15.125 29.979-6.191 7.521-13.901 13.85-23.131 18.986-9.232 5.14-18.182 8.85-26.84 11.136-8.662 2.286-18.415 4.004-29.263 5.146 9.894 8.562 14.842 22.077 14.842 40.539v60.237c0 3.422 1.19 6.279 3.572 8.562 2.379 2.279 6.136 2.95 11.276 1.995 44.163-14.653 80.185-41.062 108.068-79.226 27.88-38.161 41.825-81.126 41.825-128.906-.01-39.771-9.818-76.454-29.414-110.049z"></path>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
<span>Edit on GitHub</span>
|
||||||
|
</a>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default EditOnGithub;
|
49
docs-www/src/components/Note.astro
Normal file
49
docs-www/src/components/Note.astro
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
---
|
||||||
|
export let type = "tip";
|
||||||
|
export let title;
|
||||||
|
---
|
||||||
|
|
||||||
|
<aside class={`note type-${type}`}>
|
||||||
|
{title && <label>{title}</label>}
|
||||||
|
<slot />
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.note {
|
||||||
|
--padding-block: 1rem;
|
||||||
|
--padding-inline: 1.25rem;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
padding: var(--padding-block) var(--padding-inline);
|
||||||
|
margin-left: calc(var(--padding-inline) * -1);
|
||||||
|
margin-right: calc(var(--padding-inline) * -1);
|
||||||
|
|
||||||
|
background: var(--theme-bg-offset);
|
||||||
|
border-left: calc(var(--padding-inline) / 2) solid var(--color);
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.note label {
|
||||||
|
font-weight: 500;
|
||||||
|
color: var(--color);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* .note :global(a) {
|
||||||
|
color: var(--color);
|
||||||
|
} */
|
||||||
|
|
||||||
|
.note.type-tip {
|
||||||
|
--color: var(--color-green);
|
||||||
|
--color-rgb: var(--color-green-rgb);
|
||||||
|
}
|
||||||
|
.note.type-warning {
|
||||||
|
--color: var(--color-yellow);
|
||||||
|
--color-rgb: var(--color-yellow-rgb);
|
||||||
|
}
|
||||||
|
.note.type-error {
|
||||||
|
--color: var(--color-red);
|
||||||
|
--color-rgb: var(--color-red-rgb);
|
||||||
|
}
|
||||||
|
</style>
|
20
docs-www/src/components/SiteSidebar.astro
Normal file
20
docs-www/src/components/SiteSidebar.astro
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
---
|
||||||
|
import { sidebar } from '../config.ts';
|
||||||
|
---
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<ul class="nav-groups">
|
||||||
|
{sidebar.map(category => (
|
||||||
|
<li>
|
||||||
|
<div class="nav-group">
|
||||||
|
<h4 class="nav-group-title">{category.text}</h4>
|
||||||
|
<ul>
|
||||||
|
{category.children.map(child => (
|
||||||
|
<li class="nav-link"><a href={child.link}>{child.text}</a></li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
</nav>
|
71
docs-www/src/components/ThemeToggle.tsx
Normal file
71
docs-www/src/components/ThemeToggle.tsx
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
import type { FunctionalComponent } from 'preact';
|
||||||
|
import { h, Fragment } from 'preact';
|
||||||
|
import { useState, useEffect } from 'preact/hooks';
|
||||||
|
|
||||||
|
const themes = ['system', 'light', 'dark'];
|
||||||
|
|
||||||
|
const icons = [
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="currentColor">
|
||||||
|
<path
|
||||||
|
fill-rule="evenodd"
|
||||||
|
d="M3 5a2 2 0 012-2h10a2 2 0 012 2v8a2 2 0 01-2 2h-2.22l.123.489.804.804A1 1 0 0113 18H7a1 1 0 01-.707-1.707l.804-.804L7.22 15H5a2 2 0 01-2-2V5zm5.771 7H5V5h10v7H8.771z"
|
||||||
|
clip-rule="evenodd"
|
||||||
|
/>
|
||||||
|
</svg>,
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="currentColor">
|
||||||
|
<path
|
||||||
|
fillRule="evenodd"
|
||||||
|
d="M10 2a1 1 0 011 1v1a1 1 0 11-2 0V3a1 1 0 011-1zm4 8a4 4 0 11-8 0 4 4 0 018 0zm-.464 4.95l.707.707a1 1 0 001.414-1.414l-.707-.707a1 1 0 00-1.414 1.414zm2.12-10.607a1 1 0 010 1.414l-.706.707a1 1 0 11-1.414-1.414l.707-.707a1 1 0 011.414 0zM17 11a1 1 0 100-2h-1a1 1 0 100 2h1zm-7 4a1 1 0 011 1v1a1 1 0 11-2 0v-1a1 1 0 011-1zM5.05 6.464A1 1 0 106.465 5.05l-.708-.707a1 1 0 00-1.414 1.414l.707.707zm1.414 8.486l-.707.707a1 1 0 01-1.414-1.414l.707-.707a1 1 0 011.414 1.414zM4 11a1 1 0 100-2H3a1 1 0 000 2h1z"
|
||||||
|
clipRule="evenodd"
|
||||||
|
/>
|
||||||
|
</svg>,
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="currentColor">
|
||||||
|
<path d="M17.293 13.293A8 8 0 016.707 2.707a8.001 8.001 0 1010.586 10.586z" />
|
||||||
|
</svg>,
|
||||||
|
];
|
||||||
|
|
||||||
|
const ThemeToggle: FunctionalComponent = () => {
|
||||||
|
const [theme, setTheme] = useState(themes[0]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const user = localStorage.getItem('theme');
|
||||||
|
if (!user) return;
|
||||||
|
setTheme(user);
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const root = document.documentElement;
|
||||||
|
if (theme === 'system') {
|
||||||
|
localStorage.removeItem('theme');
|
||||||
|
if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
||||||
|
root.classList.add('theme-dark');
|
||||||
|
} else {
|
||||||
|
root.classList.remove('theme-dark');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
localStorage.setItem('theme', theme);
|
||||||
|
if (theme === 'light') {
|
||||||
|
root.classList.remove('theme-dark');
|
||||||
|
} else {
|
||||||
|
root.classList.add('theme-dark');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, [theme]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div id="theme-toggle">
|
||||||
|
{themes.map((t, i) => {
|
||||||
|
const icon = icons[i];
|
||||||
|
const checked = t === theme;
|
||||||
|
return (
|
||||||
|
<label className={checked ? 'checked' : ''}>
|
||||||
|
{icon}
|
||||||
|
<input type="radio" name="theme-toggle" checked={checked} value={t} title={`Use ${t} theme`} aria-label={`Use ${t} theme`} onChange={() => setTheme(t)} />
|
||||||
|
</label>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default ThemeToggle;
|
12
docs-www/src/config.ts
Normal file
12
docs-www/src/config.ts
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
export const sidebar = [
|
||||||
|
{
|
||||||
|
text: 'Introduction',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
text: 'What is Astro?',
|
||||||
|
link: '/'
|
||||||
|
},
|
||||||
|
{ text: 'Example', link: '/example' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
];
|
228
docs-www/src/layouts/Main.astro
Normal file
228
docs-www/src/layouts/Main.astro
Normal file
|
@ -0,0 +1,228 @@
|
||||||
|
---
|
||||||
|
import ArticleFooter from '../components/ArticleFooter.astro';
|
||||||
|
import SiteSidebar from '../components/SiteSidebar.astro';
|
||||||
|
import ThemeToggle from '../components/ThemeToggle.tsx';
|
||||||
|
import DocSidebar from '../components/DocSidebar.tsx';
|
||||||
|
|
||||||
|
export let content;
|
||||||
|
const headers = content?.astro?.headers;
|
||||||
|
let editHref = Astro?.request?.url?.pathname?.slice(1) ?? '';
|
||||||
|
if (editHref === '') editHref = `index`;
|
||||||
|
editHref = `https://github.com/snowpackjs/astro/tree/main/examples/doc/src/pages/${editHref}.md`
|
||||||
|
---
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>{content.title}</title>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="/index.css" />
|
||||||
|
<script src="/theme.js" />
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
width: 100%;
|
||||||
|
display: grid;
|
||||||
|
grid-template-rows: 3.5rem 1fr;
|
||||||
|
--gutter: 0.5rem;
|
||||||
|
--doc-padding: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
header {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: var(--theme-bg-offset);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout {
|
||||||
|
display: grid;
|
||||||
|
grid-auto-flow: column;
|
||||||
|
grid-template-columns: minmax(var(--gutter), 1fr) minmax(0, var(--max-width)) minmax(var(--gutter), 1fr);
|
||||||
|
gap: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-and-logo {
|
||||||
|
gap: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav.layout {
|
||||||
|
justify-content: center;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav.layout :global(> :nth-child(1)) {
|
||||||
|
grid-column: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
#site-title {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.25em;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
font-weight: 700;
|
||||||
|
margin: 0;
|
||||||
|
line-height: 1;
|
||||||
|
color: var(--theme-text);
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#site-title:hover,
|
||||||
|
#site-title:focus {
|
||||||
|
color: var(--theme-text-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
#site-title h1 {
|
||||||
|
font: inherit;
|
||||||
|
color: inherit;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-wrapper {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 64ch;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout :global(> *) {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar {
|
||||||
|
max-height: 100vh;
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
padding: var(--doc-padding) 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar-nav {
|
||||||
|
display: none;
|
||||||
|
max-height: 100vh;
|
||||||
|
padding: var(--doc-padding) 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#article {
|
||||||
|
padding: var(--doc-padding) var(--gutter);
|
||||||
|
grid-column: 2;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
max-width: 64ch;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content > main {
|
||||||
|
margin-bottom: 4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar-content {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 64em) {
|
||||||
|
.menu-and-logo button {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.layout {
|
||||||
|
grid-template-columns: 20rem minmax(0, 1fr);
|
||||||
|
padding-left: 1rem;
|
||||||
|
padding-right: 1rem;
|
||||||
|
}
|
||||||
|
#article {
|
||||||
|
grid-column: 2;
|
||||||
|
}
|
||||||
|
#sidebar-nav {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
#sidebar-content {
|
||||||
|
/* display: flex; */
|
||||||
|
grid-column: 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-wrapper {
|
||||||
|
display: contents;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 88em) {
|
||||||
|
.layout {
|
||||||
|
grid-template-columns: minmax(var(--gutter), 1fr) 20rem minmax(0, var(--max-width)) 16rem minmax(var(--gutter), 1fr);
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar-nav,
|
||||||
|
.nav-wrapper :global(:nth-child(1)) {
|
||||||
|
grid-column: 2;
|
||||||
|
}
|
||||||
|
#article,
|
||||||
|
.nav-wrapper :global(:nth-child(2)) {
|
||||||
|
grid-column: 3;
|
||||||
|
}
|
||||||
|
#sidebar-content,
|
||||||
|
.nav-wrapper :global(:nth-child(3)) {
|
||||||
|
display: flex;
|
||||||
|
grid-column: 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<header>
|
||||||
|
<nav class="layout">
|
||||||
|
<div class="nav-wrapper">
|
||||||
|
<div class="menu-and-logo flex">
|
||||||
|
<button id="menu-toggle">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
<a id="site-title" href="/">
|
||||||
|
<svg width="1em" height="1em" viewBox="0 0 340 340" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M320 170C320 170 296.88 171.746 267.428 188.75C237.975 205.754 205.754 237.975 188.75 267.428C171.746 296.88 170 320 170 320C170 320 168.254 296.88 151.25 267.428C134.246 237.975 102.025 205.754 72.5721 188.75C43.1197 171.746 20 170 20 170C20 170 43.1197 168.254 72.5721 151.25C102.025 134.246 134.246 102.025 151.25 72.5721C168.254 43.1197 170 20 170 20C170 20 171.746 43.1197 188.75 72.5721C205.754 102.025 237.975 134.246 267.428 151.25C296.88 168.254 320 170 320 170Z" fill="currentColor"/>
|
||||||
|
</svg>
|
||||||
|
<h1>Astro Docs</h1>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div />
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<ThemeToggle:idle />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main class="layout">
|
||||||
|
<aside class="sidebar" id="sidebar-nav">
|
||||||
|
<SiteSidebar />
|
||||||
|
</aside>
|
||||||
|
<div id="article">
|
||||||
|
<article class="content">
|
||||||
|
<main>
|
||||||
|
<slot />
|
||||||
|
</main>
|
||||||
|
<ArticleFooter />
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<aside class="sidebar" id="sidebar-content">
|
||||||
|
<DocSidebar:idle headers={headers} editHref={editHref} />
|
||||||
|
</aside>
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
</html>
|
35
docs-www/src/pages/example.md
Normal file
35
docs-www/src/pages/example.md
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
---
|
||||||
|
layout: ../layouts/Main.astro
|
||||||
|
---
|
||||||
|
|
||||||
|
# Markdown example
|
||||||
|
|
||||||
|
This is a fully-featured page, written in Markdown!
|
||||||
|
|
||||||
|
## Section A
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, **consectetur adipiscing elit**. Sed ut tortor _suscipit_, posuere ante id, vulputate urna. Pellentesque molestie aliquam dui sagittis aliquet. Sed sed felis convallis, lacinia lorem sit amet, fermentum ex. Etiam hendrerit mauris at elementum egestas. Vivamus id gravida ante. Praesent consectetur fermentum turpis, quis blandit tortor feugiat in. Aliquam erat volutpat. In elementum purus et tristique ornare. Suspendisse sollicitudin dignissim est a ultrices. Pellentesque sed ipsum finibus, condimentum metus eget, sagittis elit. Sed id lorem justo. Vivamus in sem ac mi molestie ornare.
|
||||||
|
|
||||||
|
## Section B
|
||||||
|
|
||||||
|
Nam quam dolor, pellentesque sed odio euismod, feugiat tempus tellus. Quisque arcu velit, ultricies in faucibus sed, ultrices ac enim. Nunc eget dictum est. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam ex nisi, egestas mollis ultricies ut, laoreet suscipit libero. Nam condimentum molestie turpis. Sed vestibulum sagittis congue. Maecenas tristique enim et tincidunt tempor. Curabitur ac scelerisque nulla, in malesuada libero. Praesent eu tempus odio. Pellentesque aliquam ullamcorper quam at gravida. Sed non fringilla mauris. Aenean sit amet ultrices erat. Vestibulum congue venenatis tortor, nec suscipit tortor. Aenean pellentesque mauris eget tortor tincidunt pharetra.
|
||||||
|
|
||||||
|
## Section C
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
---
|
||||||
|
layout: ../layouts/Main.astro
|
||||||
|
---
|
||||||
|
|
||||||
|
# Markdown example
|
||||||
|
|
||||||
|
This is a fully-featured page, written in Markdown!
|
||||||
|
|
||||||
|
## Section A
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, **consectetur adipiscing elit**. Sed ut tortor _suscipit_, posuere ante id, vulputate urna. Pellentesque molestie aliquam dui sagittis aliquet. Sed sed felis convallis, lacinia lorem sit amet, fermentum ex. Etiam hendrerit mauris at elementum egestas. Vivamus id gravida ante. Praesent consectetur fermentum turpis, quis blandit tortor feugiat in. Aliquam erat volutpat. In elementum purus et tristique ornare. Suspendisse sollicitudin dignissim est a ultrices. Pellentesque sed ipsum finibus, condimentum metus eget, sagittis elit. Sed id lorem justo. Vivamus in sem ac mi molestie ornare.
|
||||||
|
|
||||||
|
## Section B
|
||||||
|
|
||||||
|
Nam quam dolor, pellentesque sed odio euismod, feugiat tempus tellus. Quisque arcu velit, ultricies in faucibus sed, ultrices ac enim. Nunc eget dictum est. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam ex nisi, egestas mollis ultricies ut, laoreet suscipit libero. Nam condimentum molestie turpis. Sed vestibulum sagittis congue. Maecenas tristique enim et tincidunt tempor. Curabitur ac scelerisque nulla, in malesuada libero. Praesent eu tempus odio. Pellentesque aliquam ullamcorper quam at gravida. Sed non fringilla mauris. Aenean sit amet ultrices erat. Vestibulum congue venenatis tortor, nec suscipit tortor. Aenean pellentesque mauris eget tortor tincidunt pharetra.
|
||||||
|
```
|
0
docs-www/src/pages/guides.md
Normal file
0
docs-www/src/pages/guides.md
Normal file
64
docs-www/src/pages/index.astro
Normal file
64
docs-www/src/pages/index.astro
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
---
|
||||||
|
import { Markdown } from 'astro/components';
|
||||||
|
import Layout from '../layouts/Main.astro';
|
||||||
|
---
|
||||||
|
|
||||||
|
<Layout content={{ title: 'Astro Docs' }}>
|
||||||
|
<Markdown>
|
||||||
|
<img src="https://github.com/snowpackjs/astro/blob/main/assets/social/banner.png?raw=true" alt="Astro" width="638" height="320" >
|
||||||
|
|
||||||
|
## What is Astro?
|
||||||
|
|
||||||
|
**Astro** is a _fresh but familiar_ approach to building websites. Astro combines decades of proven performance best practices with the DX improvements of the component-oriented era.
|
||||||
|
|
||||||
|
With Astro, you can use your favorite JavaScript framework and automatically ship the bare-minimum amount of JavaScript—by default, it's none at all!
|
||||||
|
|
||||||
|
## Project Status
|
||||||
|
|
||||||
|
⚠️ **Astro is still an early beta, missing features and bugs are to be expected!** If you can stomach it, then Astro-built sites are production ready and several production websites built with Astro already exist in the wild. We will update this note once we get closer to a stable, v1.0 release.
|
||||||
|
|
||||||
|
## 🔧 Quick Start
|
||||||
|
|
||||||
|
> __Important__: Astro is built with [ESM modules](https://nodejs.org/api/esm.html) which are not supported in older version of Node.js. The minimum supported version is __14.16.1__.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# create your project
|
||||||
|
mkdir new-project-directory
|
||||||
|
cd new-project-directory
|
||||||
|
npm init astro
|
||||||
|
|
||||||
|
# install your dependencies
|
||||||
|
npm install
|
||||||
|
|
||||||
|
# start the dev server and open your browser
|
||||||
|
npm start
|
||||||
|
```
|
||||||
|
|
||||||
|
### 🚀 Build & Deployment
|
||||||
|
|
||||||
|
The default Astro project has the following `scripts` in the `/package.json` file:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"scripts": {
|
||||||
|
"start": "astro dev",
|
||||||
|
"build": "astro build"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
For local development, run:
|
||||||
|
|
||||||
|
```
|
||||||
|
npm run start
|
||||||
|
```
|
||||||
|
|
||||||
|
To build for production, run the following command:
|
||||||
|
|
||||||
|
```
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
To deploy your Astro site to production, upload the contents of `/dist` to your favorite static site host.
|
||||||
|
</Markdown>
|
||||||
|
</Layout>
|
|
@ -22,7 +22,8 @@
|
||||||
"examples/*",
|
"examples/*",
|
||||||
"tools/*",
|
"tools/*",
|
||||||
"scripts",
|
"scripts",
|
||||||
"www"
|
"www",
|
||||||
|
"docs-www"
|
||||||
],
|
],
|
||||||
"volta": {
|
"volta": {
|
||||||
"node": "14.16.1",
|
"node": "14.16.1",
|
||||||
|
@ -53,4 +54,4 @@
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=14.15.1"
|
"node": ">=14.15.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -2051,9 +2051,6 @@ astring@^1.7.4:
|
||||||
resolved "https://registry.yarnpkg.com/astring/-/astring-1.7.4.tgz#06aa7f72ad30097210dee1ae8f7d9615cd3b57d4"
|
resolved "https://registry.yarnpkg.com/astring/-/astring-1.7.4.tgz#06aa7f72ad30097210dee1ae8f7d9615cd3b57d4"
|
||||||
integrity sha512-WiVqDJV0AayUUH65FfUrbnBO4KD10854cyU49lK30+2n/lEkJDRqBKj/2fYGhZSD3uIt1H1VfW/pQtO07kR2Xg==
|
integrity sha512-WiVqDJV0AayUUH65FfUrbnBO4KD10854cyU49lK30+2n/lEkJDRqBKj/2fYGhZSD3uIt1H1VfW/pQtO07kR2Xg==
|
||||||
|
|
||||||
"astro-languageserver@file:tools/astro-languageserver":
|
|
||||||
version "0.4.0"
|
|
||||||
|
|
||||||
"astro-scripts@file:scripts":
|
"astro-scripts@file:scripts":
|
||||||
version "0.0.1"
|
version "0.0.1"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
|
Loading…
Reference in a new issue