mirror of https://github.com/sveltejs/svelte
parent
c9c4b9d50b
commit
2dc2085d0d
@ -0,0 +1,108 @@
|
|||||||
|
export async function load({ url }) {
|
||||||
|
if (url.pathname === '/docs') {
|
||||||
|
return {
|
||||||
|
sections: []
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const { get_docs_data, get_docs_list } = await import('../docs/render.js');
|
||||||
|
|
||||||
|
const sections = get_docs_list(await get_docs_data('./src/routes/docs-new/content', 'docs-new'));
|
||||||
|
sections.push(
|
||||||
|
{
|
||||||
|
title: 'Reference - Runes',
|
||||||
|
pages: [
|
||||||
|
{ title: '$state' },
|
||||||
|
{ title: '$derived' },
|
||||||
|
{ title: '$effect' },
|
||||||
|
{ title: '$props' },
|
||||||
|
{ title: '$inspect' },
|
||||||
|
{ title: '$host' }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Reference - Imports',
|
||||||
|
pages: [
|
||||||
|
{ title: 'svelte' },
|
||||||
|
{ title: 'svelte/reactivity' },
|
||||||
|
{ title: 'svelte/server' },
|
||||||
|
{ title: `svelte/elements` },
|
||||||
|
{ title: `svelte/store` },
|
||||||
|
{ title: `svelte/actions` },
|
||||||
|
{ title: `svelte/transition` },
|
||||||
|
{ title: `svelte/animate` },
|
||||||
|
{ title: `svelte/motion` },
|
||||||
|
{ title: `svelte/easing` },
|
||||||
|
{ title: `svelte/compiler` }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Reference - Other',
|
||||||
|
pages: [{ title: 'Warnings' }, { title: 'Errors' }]
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return {
|
||||||
|
sections
|
||||||
|
// sections: /** @type {Array<{title: string; pages: Array<{title: string }>}>} */ ([
|
||||||
|
// { title: 'Introduction', pages: [{ title: 'Overview' }, { title: 'Getting started' }] },
|
||||||
|
// {
|
||||||
|
// title: 'Template syntax',
|
||||||
|
// pages: [
|
||||||
|
// { title: 'Component fundamentals' },
|
||||||
|
// { title: 'Basic markup' },
|
||||||
|
// { title: 'Control flow' },
|
||||||
|
// { title: 'Snippets' },
|
||||||
|
// { title: 'Styles & Classes' },
|
||||||
|
// { title: 'Transitions & Animations' },
|
||||||
|
// { title: 'Bindings' },
|
||||||
|
// { title: 'Actions' },
|
||||||
|
// { title: 'Special elements' }
|
||||||
|
// ]
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// title: 'Runes',
|
||||||
|
// pages: [{ title: 'State' }, { title: 'Side effects' }]
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// title: 'Runtime',
|
||||||
|
// pages: [
|
||||||
|
// { title: 'Stores' },
|
||||||
|
// { title: 'Context' },
|
||||||
|
// { title: 'Lifecycle hooks' },
|
||||||
|
// { title: 'Imperative component API' }
|
||||||
|
// ]
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// title: 'Misc',
|
||||||
|
// pages: [
|
||||||
|
// { title: 'Debugging' },
|
||||||
|
// { title: 'Testing' },
|
||||||
|
// { title: 'TypeScript' },
|
||||||
|
// { title: 'Custom elements API' },
|
||||||
|
// { title: 'Legacy syntax' },
|
||||||
|
// { title: 'Reactivity indepth' },
|
||||||
|
// { title: 'Svelte 5 migration guide' }
|
||||||
|
// ]
|
||||||
|
// },
|
||||||
|
// // {
|
||||||
|
// // title: 'Reference',
|
||||||
|
// // pages: [
|
||||||
|
// // { title: 'Runes' },
|
||||||
|
// // { title: 'svelte' },
|
||||||
|
// // { title: 'svelte/reactivity' },
|
||||||
|
// // { title: 'svelte/server' },
|
||||||
|
// // { title: `svelte/elements` },
|
||||||
|
// // { title: `svelte/store` },
|
||||||
|
// // { title: `svelte/actions` },
|
||||||
|
// // { title: `svelte/transition` },
|
||||||
|
// // { title: `svelte/animate` },
|
||||||
|
// // { title: `svelte/motion` },
|
||||||
|
// // { title: `svelte/easing` },
|
||||||
|
// // { title: `svelte/compiler` },
|
||||||
|
// // { title: 'Warnings' }
|
||||||
|
// // ]
|
||||||
|
// // },
|
||||||
|
// ])
|
||||||
|
};
|
||||||
|
}
|
@ -0,0 +1,111 @@
|
|||||||
|
<script>
|
||||||
|
import { page } from '$app/stores';
|
||||||
|
import { DocsContents } from '@sveltejs/site-kit/docs';
|
||||||
|
|
||||||
|
export let data;
|
||||||
|
|
||||||
|
$: pageData = $page.data.page;
|
||||||
|
|
||||||
|
$: title = pageData?.title;
|
||||||
|
$: category = pageData?.category;
|
||||||
|
console.log(data.sections);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<div class="toc-container" style="order: 1">
|
||||||
|
<DocsContents contents={data.sections} />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="page content">
|
||||||
|
{#if category}
|
||||||
|
<p class="category">{category}</p>
|
||||||
|
{/if}
|
||||||
|
{#if title}
|
||||||
|
<h1>{title}</h1>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
<slot />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.container {
|
||||||
|
--sidebar-menu-width: 28rem;
|
||||||
|
--sidebar-width: var(--sidebar-menu-width);
|
||||||
|
--ts-toggle-height: 4.2rem;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page {
|
||||||
|
padding: var(--sk-page-padding-top) var(--sk-page-padding-side);
|
||||||
|
|
||||||
|
min-width: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page :global(:where(h2, h3) code) {
|
||||||
|
all: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.category {
|
||||||
|
font: 700 var(--sk-text-s) var(--sk-font);
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.12em;
|
||||||
|
margin: 0 0 0.5em;
|
||||||
|
color: var(--sk-text-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 832px) {
|
||||||
|
.content {
|
||||||
|
padding-left: calc(var(--sidebar-width) + var(--sk-page-padding-side));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc-container {
|
||||||
|
background: var(--sk-back-3);
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 832px) {
|
||||||
|
.toc-container {
|
||||||
|
display: block;
|
||||||
|
width: var(--sidebar-width);
|
||||||
|
height: calc(100vh - var(--sk-nav-height));
|
||||||
|
position: fixed;
|
||||||
|
left: 0;
|
||||||
|
top: var(--sk-nav-height);
|
||||||
|
overflow-x: hidden;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc-container::before {
|
||||||
|
content: '';
|
||||||
|
position: fixed;
|
||||||
|
width: 0;
|
||||||
|
height: 100%;
|
||||||
|
top: 0;
|
||||||
|
left: calc(var(--sidebar-width) - 1px);
|
||||||
|
border-right: 1px solid var(--sk-back-5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.page {
|
||||||
|
padding-left: calc(var(--sidebar-width) + var(--sk-page-padding-side));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1200px) {
|
||||||
|
.container {
|
||||||
|
--sidebar-width: max(28rem, 23vw);
|
||||||
|
flex-direction: row;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page {
|
||||||
|
--on-this-page-display: block;
|
||||||
|
padding: var(--sk-page-padding-top) calc(var(--sidebar-width) + var(--sk-page-padding-side));
|
||||||
|
margin: 0 auto;
|
||||||
|
max-width: var(--sk-line-max-width);
|
||||||
|
box-sizing: content-box;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,5 @@
|
|||||||
|
import { redirect } from '@sveltejs/kit';
|
||||||
|
|
||||||
|
export function load() {
|
||||||
|
redirect(307, '/docs-new/overview');
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
import { error } from '@sveltejs/kit';
|
||||||
|
|
||||||
|
export async function entries() {
|
||||||
|
const { get_docs_data } = await import('../../docs/render.js');
|
||||||
|
|
||||||
|
const data = await get_docs_data('./src/routes/docs-new/content', 'docs-new');
|
||||||
|
return data[0].pages.map((page) => ({ slug: page.slug }));
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function load({ params }) {
|
||||||
|
const { get_docs_data, get_parsed_docs } = await import('../../docs/render.js');
|
||||||
|
|
||||||
|
const data = await get_docs_data('./src/routes/docs-new/content', 'docs-new');
|
||||||
|
const processed_page = await get_parsed_docs(data, params.slug);
|
||||||
|
|
||||||
|
if (!processed_page) error(404);
|
||||||
|
|
||||||
|
return { page: processed_page };
|
||||||
|
}
|
@ -0,0 +1,76 @@
|
|||||||
|
<script>
|
||||||
|
import { page } from '$app/stores';
|
||||||
|
import { copy_code_descendants } from '@sveltejs/site-kit/actions';
|
||||||
|
import { DocsOnThisPage, setupDocsHovers } from '@sveltejs/site-kit/docs';
|
||||||
|
|
||||||
|
export let data;
|
||||||
|
|
||||||
|
$: pages = data.sections.flatMap((section) => section.pages);
|
||||||
|
$: index = pages.findIndex(({ path }) => path === $page.url.pathname);
|
||||||
|
$: prev = pages[index - 1];
|
||||||
|
$: next = pages[index + 1];
|
||||||
|
|
||||||
|
setupDocsHovers();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svelte:head>
|
||||||
|
<title>{data.page?.title} • Docs • Svelte 5 preview</title>
|
||||||
|
|
||||||
|
<meta name="twitter:title" content="{data.page.title} • Docs • Svelte 5 preview" />
|
||||||
|
<meta name="twitter:description" content="{data.page.title} • Svelte 5 preview documentation" />
|
||||||
|
<meta name="Description" content="{data.page.title} • Svelte 5 preview documentation" />
|
||||||
|
</svelte:head>
|
||||||
|
|
||||||
|
<div class="text" id="docs-content" use:copy_code_descendants>
|
||||||
|
<DocsOnThisPage details={data.page} />
|
||||||
|
|
||||||
|
{@html data.page.content}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="controls">
|
||||||
|
<div>
|
||||||
|
<span class:faded={!prev}>previous</span>
|
||||||
|
|
||||||
|
{#if prev}
|
||||||
|
<a href={prev.path}>{prev.title}</a>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<span class:faded={!next}>next</span>
|
||||||
|
{#if next}
|
||||||
|
<a href={next.path}>{next.title}</a>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.controls {
|
||||||
|
max-width: calc(var(--sk-line-max-width) + 1rem);
|
||||||
|
border-top: 1px solid var(--sk-back-4);
|
||||||
|
padding: 1rem 0 0 0;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr;
|
||||||
|
margin: 6rem 0 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls > :first-child {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls > :last-child {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls span {
|
||||||
|
display: block;
|
||||||
|
font-size: 1.2rem;
|
||||||
|
text-transform: uppercase;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--sk-text-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls span.faded {
|
||||||
|
opacity: 0.4;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: Overview
|
||||||
|
---
|
||||||
|
|
||||||
|
- Short intro to what Svelte is and why it's the best ever
|
||||||
|
- A few code examples to have a very rough understanding of how Svelte code looks like
|
||||||
|
- Jump off points to tutorial, SvelteKit etc
|
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
title: Getting started
|
||||||
|
---
|
||||||
|
|
||||||
|
- `npm create svelte@latest`, describe that it scaffolds SvelteKit project
|
||||||
|
- `npm create vite@latest`, describe that it scaffolds Svelte SPA powered by Vite
|
||||||
|
- mention `svelte-add`
|
||||||
|
- Jump off points to tutorial, SvelteKit etc
|
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"title": "Introduction"
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
title: Component fundamentals
|
||||||
|
---
|
||||||
|
|
||||||
|
- script (module) / template / style (rough overview)
|
||||||
|
- `$props` / `$state` (in the context of components)
|
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
title: Basic markup
|
||||||
|
---
|
||||||
|
|
||||||
|
- [basically what we have in the Svelte docs today](https://svelte.dev/docs/basic-markup)
|
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
title: Control flow
|
||||||
|
---
|
||||||
|
|
||||||
|
- if
|
||||||
|
- each
|
||||||
|
- await (or move that into some kind of data loading section?)
|
||||||
|
- NOT: key (move into transition section, because that's the common use case)
|
@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
title: Snippets
|
||||||
|
---
|
||||||
|
|
||||||
|
Better title needed?
|
||||||
|
|
||||||
|
- `#snippet`
|
||||||
|
- `@render`
|
||||||
|
- how they can be used to reuse markup
|
||||||
|
- how they can be used to pass UI content to components
|
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
title: Styles & Classes
|
||||||
|
---
|
||||||
|
|
||||||
|
- style scoping
|
||||||
|
- `:global`
|
||||||
|
- `style:`
|
||||||
|
- `class:`
|
||||||
|
- `--css` props
|
@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
title: Transitions & Animations
|
||||||
|
---
|
||||||
|
|
||||||
|
- how to use (template syntax)
|
||||||
|
- when to use
|
||||||
|
- global vs local
|
||||||
|
- easing & motion
|
||||||
|
- mention imports
|
||||||
|
- key block
|
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: Actions
|
||||||
|
---
|
||||||
|
|
||||||
|
- template syntax
|
||||||
|
- how to write
|
||||||
|
- typings
|
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: Bindings
|
||||||
|
---
|
||||||
|
|
||||||
|
- how for dom elements
|
||||||
|
- list of all bindings
|
||||||
|
- how for components
|
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
title: Special elements
|
||||||
|
---
|
||||||
|
|
||||||
|
- [basically what we have in the docs today](https://svelte.dev/docs/special-elements)
|
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"title": "Template syntax"
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
title: State
|
||||||
|
---
|
||||||
|
|
||||||
|
- `$state` (.frozen)
|
||||||
|
- `$derived` (.by)
|
||||||
|
- using classes
|
||||||
|
- getters/setters (what to do to keep reactivity "alive")
|
||||||
|
- universal reactivity
|
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
title: Side effects
|
||||||
|
---
|
||||||
|
|
||||||
|
- `$effect` (.pre)
|
||||||
|
- when not to use it, better patterns for what to do instead
|
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"title": "Runes"
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
title: Stores
|
||||||
|
---
|
||||||
|
|
||||||
|
- how to use
|
||||||
|
- how to write
|
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
title: Context
|
||||||
|
---
|
||||||
|
|
||||||
|
- get/set/hasContext
|
||||||
|
- how to use, best practises (like encapsulating them)
|
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
title: Lifecycle hooks
|
||||||
|
---
|
||||||
|
|
||||||
|
- onMount/onDestroy
|
||||||
|
- mention that `$effect` might be better for your use case
|
||||||
|
- beforeUpdate/afterUpdate with deprecation notice?
|
||||||
|
- or skip this entirely and only have it in the reference docs?
|
@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
title: Imperative component API
|
||||||
|
---
|
||||||
|
|
||||||
|
better title needed?
|
||||||
|
|
||||||
|
- mount
|
||||||
|
- unmount
|
||||||
|
- render
|
||||||
|
- hydrate
|
||||||
|
- how they interact with each other
|
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"title": "Runtime"
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
title: Debugging
|
||||||
|
---
|
||||||
|
|
||||||
|
- `@debug`
|
||||||
|
- `$inspect`
|
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
title: Testing
|
||||||
|
---
|
||||||
|
|
||||||
|
- component testing basics
|
||||||
|
- rune testing basics
|
||||||
|
- vitest setup
|
||||||
|
- e2e
|
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
title: TypeScript
|
||||||
|
---
|
||||||
|
|
||||||
|
- [basically what we have today](https://svelte.dev/docs/typescript)
|
||||||
|
- built-in support, but only for type-only features
|
||||||
|
- generics
|
||||||
|
- using `Component` and the other helper types
|
||||||
|
- using `svelte-check`
|
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
title: Custom elements API
|
||||||
|
---
|
||||||
|
|
||||||
|
- [basically what we have today](https://svelte.dev/docs/custom-elements-api)
|
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
title: Reactivity indepth
|
||||||
|
---
|
||||||
|
|
||||||
|
- how to think about Runes ("just JavaScript" with added reactivity, what this means for keeping reactivity alive across boundaries)
|
||||||
|
- signals
|
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
title: Svelte 5 migration guide
|
||||||
|
---
|
||||||
|
|
||||||
|
- the stuff from the preview docs and possibly more
|
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"title": "Misc"
|
||||||
|
}
|
Loading…
Reference in new issue