mirror of
https://github.com/LukeHagar/website.git
synced 2025-12-10 04:22:18 +00:00
Merge branch 'main' of github.com:appwrite/website into feat-markdoc-blog
This commit is contained in:
@@ -6,7 +6,6 @@ type Args = Writable<DOMRect | null>;
|
||||
export const rect: Action<HTMLElement, Args> = (node, store) => {
|
||||
let observer: ResizeObserver | null = null;
|
||||
const update = (store: Args) => {
|
||||
console.log('rect update');
|
||||
observer?.disconnect();
|
||||
|
||||
store.set(node.getBoundingClientRect());
|
||||
|
||||
@@ -103,7 +103,6 @@
|
||||
on:aw-resize={({ detail }) => {
|
||||
scrollHandler.reset();
|
||||
const { percentage } = detail;
|
||||
console.log('resize', percentage);
|
||||
|
||||
scrollHandler(percentage);
|
||||
}}
|
||||
|
||||
@@ -14,8 +14,6 @@
|
||||
$: sectionIndex = Math.floor(
|
||||
clamp(0, toScale(scrollInfo.percentage, percentScale, animScale), sections.length - 1)
|
||||
);
|
||||
$: section = sections[sectionIndex];
|
||||
$: console.log(section);
|
||||
|
||||
let scrollInfo: ScrollInfo = {
|
||||
percentage: 0,
|
||||
|
||||
@@ -57,9 +57,9 @@
|
||||
<ul class="aw-footer-nav-secondary-list">
|
||||
<li class="aw-footer-nav-secondary-item"><a href="/docs/products/auth">Auth</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="/docs/products/databases">Databases</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Functions</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Storage</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Realtime</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="/docs/products/functions">Functions</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="/docs/products/storage">Storage</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="/docs/apis/realtime">Realtime</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="aw-footer-nav-main-item">
|
||||
@@ -86,8 +86,8 @@
|
||||
<li class="aw-footer-nav-secondary-item"><a href="/docs">Docs</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="/community">Community</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="/blog">Blog</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Roadmap</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Changelog</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="/roadmap">Roadmap</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="https://github.com/appwrite/appwrite/releases" target="_blank">Changelog</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="https://status.appwrite.io" target="_blank">Status</a></li>
|
||||
</ul>
|
||||
</li><li class="aw-footer-nav-main-item">
|
||||
@@ -112,16 +112,16 @@
|
||||
</button>
|
||||
<ul class="aw-footer-nav-secondary-list">
|
||||
<li class="aw-footer-nav-secondary-item"><a href="/pricing">Pricing</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Company</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Careers</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="/company">Company</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="/careers">Careers</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="/heroes">Heroes</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="https://store.appwrite.io" target="_blank">Store</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="/brand">Brand</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Contact us</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="/contact-us">Contact us</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="aw-footer-nav-main-item">
|
||||
<h5 class="aw-footer-nav-main-title aw-is-not-mobile"><a href="#">Legal</a></h5>
|
||||
<h5 class="aw-footer-nav-main-title aw-is-not-mobile">Legal</h5>
|
||||
<button class="aw-footer-nav-button aw-is-only-mobile">
|
||||
<span class="aw-caption-500">Legal</span>
|
||||
<svg
|
||||
@@ -143,8 +143,8 @@
|
||||
<ul class="aw-footer-nav-secondary-list">
|
||||
<li class="aw-footer-nav-secondary-item"><a href="/terms">Terms</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="/privacy">Privacy</a></li>
|
||||
<li class="aw-footer-nac-secondary-item" on:click={() => globalThis.OneTrust.ToggleInfoDisplay()}>Cookies</li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Security</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="/cookies">Cookies</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="/security">Security</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -24,12 +24,12 @@
|
||||
},
|
||||
{
|
||||
icon: 'aw-icon-linkedin',
|
||||
link: '#'
|
||||
link: 'https://www.linkedin.com/company/appwrite'
|
||||
},
|
||||
{
|
||||
icon: 'aw-icon-youtube',
|
||||
label: 'YouTube',
|
||||
link: '#'
|
||||
link: 'https://www.youtube.com/c/appwrite?sub_confirmation=1'
|
||||
}
|
||||
];
|
||||
|
||||
@@ -80,13 +80,13 @@
|
||||
</div>
|
||||
<ul class="aw-main-footer-grid-1-column-3 aw-main-footer-links">
|
||||
<li>
|
||||
<a href="#">Support</a>
|
||||
<a href="/support">Support</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">Status</a>
|
||||
<a href="https://status.appwrite.io" target="_blank">Status</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">Changelog</a>
|
||||
<a href="https://github.com/appwrite/appwrite/releases" target="_blank">Changelog</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="aw-main-footer-grid-1-column-4 aw-main-footer-copyright">
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
>
|
||||
<section class="aw-mobile-header is-transparent">
|
||||
<div class="aw-mobile-header-start">
|
||||
<a href="#">
|
||||
<a href="/">
|
||||
<img
|
||||
class="aw-logo u-only-dark"
|
||||
src="/images/logos/appwrite.svg"
|
||||
|
||||
@@ -11,9 +11,7 @@
|
||||
};
|
||||
|
||||
export type NavParent = {
|
||||
backlink: string;
|
||||
label: string;
|
||||
icon: string;
|
||||
href: string;
|
||||
};
|
||||
|
||||
@@ -48,19 +46,11 @@
|
||||
</button>
|
||||
<div class="aw-side-nav-scroll">
|
||||
{#if parent}
|
||||
<section style:padding-bottom="16px" style:border-bottom="1px solid #232325">
|
||||
<a class="aw-side-nav-button" href={parent.backlink}>
|
||||
<section class="aw-side-nav-wrapper-parent">
|
||||
<a href={parent.href}>
|
||||
<span class="icon-cheveron-left" aria-hidden="true" />
|
||||
<span class="aw-caption-400">Back</span>
|
||||
</a>
|
||||
<a
|
||||
class="aw-side-nav-button"
|
||||
href={parent.href}
|
||||
class:is-selected={$page.url?.pathname === parent.href}
|
||||
>
|
||||
<span class={parent.icon} aria-hidden="true" />
|
||||
<span class="aw-caption-500">{parent.label}</span>
|
||||
</a>
|
||||
<span class="aw-side-nav-wrapper-parent-title aw-eyebrow">{parent.label}</span>
|
||||
</section>
|
||||
{/if}
|
||||
{#each navigation as navGroup}
|
||||
|
||||
@@ -133,7 +133,7 @@ function getParameters(
|
||||
return parameters;
|
||||
}
|
||||
|
||||
function getSchema(id: string, api: OpenAPIV3.Document): OpenAPIV3.SchemaObject {
|
||||
export function getSchema(id: string, api: OpenAPIV3.Document): OpenAPIV3.SchemaObject {
|
||||
const schema = api.components?.schemas?.[id] as OpenAPIV3.SchemaObject;
|
||||
if (schema) {
|
||||
return schema;
|
||||
@@ -150,6 +150,14 @@ async function getSpec(version: string, platform: string) {
|
||||
return specs[target]();
|
||||
}
|
||||
|
||||
export async function getApi(version: string, platform: string): Promise<OpenAPIV3.Document> {
|
||||
const spec = await getSpec(version, platform);
|
||||
const parser = new SwaggerParser();
|
||||
const api = (await parser.bundle(spec as unknown as OpenAPIV3.Document)) as OpenAPIV3.Document;
|
||||
|
||||
return api;
|
||||
}
|
||||
|
||||
export async function getService(
|
||||
version: string,
|
||||
platform: string,
|
||||
@@ -167,9 +175,7 @@ export async function getService(
|
||||
const isAndroidJava = platform === Platform.ClientAndroidJava;
|
||||
const isAndroidKotlin = platform === Platform.ClientAndroidKotlin;
|
||||
const isAndroid = isAndroidJava || isAndroidKotlin;
|
||||
const spec = await getSpec(version, platform);
|
||||
const parser = new SwaggerParser();
|
||||
const api = (await parser.bundle(spec as unknown as OpenAPIV3.Document)) as OpenAPIV3.Document;
|
||||
const api = await getApi(version, platform);
|
||||
const tag = api.tags?.find((n) => n.name === service);
|
||||
|
||||
const data: Awaited<ReturnType<typeof getService>> = {
|
||||
|
||||
15
src/routes/careers/+page.svelte
Normal file
15
src/routes/careers/+page.svelte
Normal file
@@ -0,0 +1,15 @@
|
||||
<script lang="ts">
|
||||
import { Main } from '$lib/layouts';
|
||||
|
||||
import FooterNav from '../../lib/components/FooterNav.svelte';
|
||||
import MainFooter from '../../lib/components/MainFooter.svelte';
|
||||
</script>
|
||||
|
||||
<Main>
|
||||
<div class="aw-container">
|
||||
<div class="aw-grid-120-1fr-auto" />
|
||||
|
||||
<FooterNav />
|
||||
<MainFooter />
|
||||
</div>
|
||||
</Main>
|
||||
@@ -55,12 +55,12 @@
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="aw-icon-button" aria-label="Appwrite on aw-icon-linkedin" target="_blank">
|
||||
<a href="https://linkedin.com/company/appwrite" class="aw-icon-button" aria-label="Appwrite on aw-icon-linkedin" target="_blank">
|
||||
<span class="aw-icon-linkedin" aria-hidden="true"></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="aw-icon-button" aria-label="Appwrite on YouTube" target="_blank">
|
||||
<a href="https://youtube.com/c/appwrite?sub_confirmation=1" class="aw-icon-button" aria-label="Appwrite on YouTube" target="_blank">
|
||||
<span class="aw-icon-youtube" aria-hidden="true"></span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
<script lang="ts">
|
||||
import { page } from '$app/stores';
|
||||
import { Docs } from '$lib/layouts';
|
||||
import Sidebar from './Sidebar.svelte';
|
||||
</script>
|
||||
|
||||
<Docs variant="two-side-navs">
|
||||
<Sidebar />
|
||||
<main class="u-contents">
|
||||
<article class="aw-article u-contents">
|
||||
<header class="aw-article-header">
|
||||
@@ -10,8 +15,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<div class="aw-article-content">
|
||||
I am a placeholder for an error site.
|
||||
</div>
|
||||
<div class="aw-article-content">I am a placeholder for an error site.</div>
|
||||
</article>
|
||||
</main>
|
||||
</Docs>
|
||||
|
||||
@@ -19,11 +19,6 @@
|
||||
href: '/docs/sdks',
|
||||
icon: 'icon-cog'
|
||||
},
|
||||
{
|
||||
label: 'Command Line',
|
||||
href: '#',
|
||||
icon: 'icon-terminal'
|
||||
},
|
||||
{
|
||||
label: 'References',
|
||||
href: '/docs/references',
|
||||
@@ -76,17 +71,32 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: 'Tooling',
|
||||
items: [
|
||||
{
|
||||
label: 'Command Line',
|
||||
href: '/docs/tooling/command-line',
|
||||
icon: 'icon-terminal'
|
||||
},
|
||||
{
|
||||
label: 'Assistant',
|
||||
href: '/docs/tooling/assistant',
|
||||
icon: 'icon-sparkles'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: 'Advanced',
|
||||
items: [
|
||||
{
|
||||
label: 'Integration',
|
||||
href: '#',
|
||||
href: '/docs/advanced/integration',
|
||||
icon: 'icon-puzzle'
|
||||
},
|
||||
{
|
||||
label: 'Platform',
|
||||
href: '#',
|
||||
href: '/docs/advanced/platform',
|
||||
icon: 'icon-play'
|
||||
},
|
||||
{
|
||||
@@ -96,7 +106,7 @@
|
||||
},
|
||||
{
|
||||
label: 'Self-hosting',
|
||||
href: '#',
|
||||
href: '/docs/advanced/self-hosting',
|
||||
icon: 'icon-server'
|
||||
}
|
||||
]
|
||||
|
||||
30
src/routes/docs/advanced/integration/+layout.svelte
Normal file
30
src/routes/docs/advanced/integration/+layout.svelte
Normal file
@@ -0,0 +1,30 @@
|
||||
<script lang="ts">
|
||||
import Docs from '$lib/layouts/Docs.svelte';
|
||||
import Sidebar, { type NavParent, type NavTree } from '$lib/layouts/Sidebar.svelte';
|
||||
|
||||
const parent: NavParent = {
|
||||
href: '/docs',
|
||||
label: 'Integration'
|
||||
};
|
||||
|
||||
const navigation: NavTree = [
|
||||
{
|
||||
label: 'Getting started',
|
||||
items: [
|
||||
{
|
||||
label: 'Overview',
|
||||
href: '/docs/advanced/integration'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: 'Guides',
|
||||
items: []
|
||||
}
|
||||
];
|
||||
</script>
|
||||
|
||||
<Docs variant="two-side-navs">
|
||||
<Sidebar {navigation} {parent} />
|
||||
<slot />
|
||||
</Docs>
|
||||
8
src/routes/docs/advanced/integration/+page.markdoc
Normal file
8
src/routes/docs/advanced/integration/+page.markdoc
Normal file
@@ -0,0 +1,8 @@
|
||||
---
|
||||
layout: article
|
||||
title: Integration
|
||||
description: Learn how to migrate your projects from other vendors to Appwrite Cloud or how to move from self-hosting to Cloud and the other way around using Appwrite Migrations service.
|
||||
difficulty: beginner
|
||||
readtime: 5
|
||||
---
|
||||
Integration
|
||||
@@ -3,13 +3,20 @@
|
||||
import Sidebar, { type NavParent, type NavTree } from '$lib/layouts/Sidebar.svelte';
|
||||
|
||||
const parent: NavParent = {
|
||||
backlink: '/docs',
|
||||
href: '/docs/advanced/migrations',
|
||||
label: 'Migrations',
|
||||
icon: 'icon-refresh'
|
||||
href: '/docs',
|
||||
label: 'Migrations'
|
||||
};
|
||||
|
||||
const navigation: NavTree = [
|
||||
{
|
||||
label: 'Getting started',
|
||||
items: [
|
||||
{
|
||||
label: 'Overview',
|
||||
href: '/docs/advanced/migrations'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: 'Guides',
|
||||
items: [
|
||||
|
||||
@@ -53,7 +53,7 @@ To begin migrating to Appwrite, follow these steps.
|
||||
|
||||
1. Add the platforms for your [Web](#), [Flutter](#), [Android](#), and [iOS](#) apps. Appwrite will reject requests from unknown web, Flutter, and mobile apps to protect from malicious attacks. You app **must be added as a platform** for Appwrite to accept requests.
|
||||
|
||||
1. Remember to [add appropriate permissions](/docs/platform/permissions) to the migrated resources to protect user data and privacy.
|
||||
1. Remember to [add appropriate permissions](/docs/advanced/platform/permissions) to the migrated resources to protect user data and privacy.
|
||||
|
||||
1. Migrate functions manually, by [pick a runtime](#) and [learn to develop Appwrite Functions](#).
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ Before migrating to Appwrite make sure you've read the [migration overview](/doc
|
||||
|
||||
1. Add the platforms for your [Web](#), [Flutter](#), [Android](#), and [iOS](#) apps. Appwrite will reject requests from unknown web, Flutter, and mobile apps to protect from malicious attacks. You app **must be added as a platform** for Appwrite to accept requests.
|
||||
|
||||
1. Remember to [add appropriate permissions](/docs/platform/permissions) to the migrated resources to protect user data and privacy.
|
||||
1. Remember to [add appropriate permissions](/docs/advanced/platform/permissions) to the migrated resources to protect user data and privacy.
|
||||
|
||||
1. Migrate functions manually, by [pick a runtime](#) and [learn to develop Appwrite Functions](#).
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ Before migrating to Appwrite make sure you've read the [migration overview](/doc
|
||||
|
||||
1. Add the platforms for your [Web](#), [Flutter](#), [Android](#), and [iOS](#) apps. Appwrite will reject requests from unknown web, Flutter, and mobile apps to protect from malicious attacks. You app **must be added as a platform** for Appwrite to accept requests.
|
||||
|
||||
1. Remember to [add appropriate permissions](/docs/platform/permissions) to the migrated resources to protect user data and privacy.
|
||||
1. Remember to [add appropriate permissions](/docs/advanced/platform/permissions) to the migrated resources to protect user data and privacy.
|
||||
|
||||
1. Migrate functions manually, by [pick a runtime](#) and [learn to develop Appwrite Functions](#).
|
||||
|
||||
|
||||
59
src/routes/docs/advanced/platform/+layout.svelte
Normal file
59
src/routes/docs/advanced/platform/+layout.svelte
Normal file
@@ -0,0 +1,59 @@
|
||||
<script lang="ts">
|
||||
import Docs from '$lib/layouts/Docs.svelte';
|
||||
import Sidebar, { type NavParent, type NavTree } from '$lib/layouts/Sidebar.svelte';
|
||||
|
||||
const parent: NavParent = {
|
||||
href: '/docs',
|
||||
label: 'Platform'
|
||||
};
|
||||
|
||||
const navigation: NavTree = [
|
||||
{
|
||||
label: 'Getting started',
|
||||
items: [
|
||||
{
|
||||
label: 'Overview',
|
||||
href: '/docs/advanced/platform'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: 'Guides',
|
||||
items: [
|
||||
{
|
||||
label: 'API keys',
|
||||
href: '/docs/advanced/platform/api-keys'
|
||||
},
|
||||
{
|
||||
label: 'Custom domains',
|
||||
href: '/docs/advanced/platform/custom-domains'
|
||||
},
|
||||
{
|
||||
label: 'Events',
|
||||
href: '/docs/advanced/platform/events'
|
||||
},
|
||||
{
|
||||
label: 'Response codes',
|
||||
href: '/docs/advanced/platform/response-codes'
|
||||
},
|
||||
{
|
||||
label: 'Permissions',
|
||||
href: '/docs/advanced/platform/permissions'
|
||||
},
|
||||
{
|
||||
label: 'Rate limits',
|
||||
href: '/docs/advanced/platform/rate-limits'
|
||||
},
|
||||
{
|
||||
label: 'Webhooks',
|
||||
href: '/docs/advanced/platform/webhooks'
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
</script>
|
||||
|
||||
<Docs variant="two-side-navs">
|
||||
<Sidebar {navigation} {parent} />
|
||||
<slot />
|
||||
</Docs>
|
||||
@@ -6,7 +6,7 @@ description: Placeholder SEO.
|
||||
|
||||
Appwrite provides a variety of events that allows your application to react to changes as they happen.
|
||||
A event will fire when a change occurs in your Appwrite project, like when a new user registers or a new file is uploaded to Appwrite.
|
||||
You can subscribe to these events to with Appwrite [Functions](/docs/products/functions), [Realtime](/docs/products/apis), or [Webhooks](/docs/platform/webhooks).
|
||||
You can subscribe to these events to with Appwrite [Functions](/docs/products/functions), [Realtime](/docs/products/apis), or [Webhooks](/docs/advanced/platform/webhooks).
|
||||
|
||||
You can subscribe to events for specific resources using their ID or subscribe to changes of all resources of the same type by using a wildcard character * instead of an ID.
|
||||
You can also filter for events of specific actions like create, update, or delete.
|
||||
@@ -26,7 +26,7 @@ If you create a resource using a Server SDK or the Appwrite Console without expl
|
||||
|
||||
## Server Integration
|
||||
|
||||
Server integrations can be used for increased flexibility. When using a Server SDK in combination with the proper [API key scopes](/docs/platform/api-keys#scopes), you can have any type of access to any of your project resources regardless of their permissions.
|
||||
Server integrations can be used for increased flexibility. When using a Server SDK in combination with the proper [API key scopes](/docs/advanced/platform/api-keys#scopes), you can have any type of access to any of your project resources regardless of their permissions.
|
||||
|
||||
Using the server integration flexibility, you can change resource permissions, share resources between different users and teams, or edit and delete them without any limitations.
|
||||
|
||||
67
src/routes/docs/advanced/self-hosting/+layout.svelte
Normal file
67
src/routes/docs/advanced/self-hosting/+layout.svelte
Normal file
@@ -0,0 +1,67 @@
|
||||
<script lang="ts">
|
||||
import Docs from '$lib/layouts/Docs.svelte';
|
||||
import Sidebar, { type NavParent, type NavTree } from '$lib/layouts/Sidebar.svelte';
|
||||
|
||||
const parent: NavParent = {
|
||||
href: '/docs',
|
||||
label: 'Self-hosting'
|
||||
};
|
||||
|
||||
const navigation: NavTree = [
|
||||
{
|
||||
label: 'Getting started',
|
||||
items: [
|
||||
{
|
||||
label: 'Overview',
|
||||
href: '/docs/advanced/self-hosting'
|
||||
},
|
||||
{
|
||||
label: 'Installation',
|
||||
href: '/docs/advanced/self-hosting/installation'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: 'Guides',
|
||||
items: [
|
||||
{
|
||||
label: 'Update',
|
||||
href: '/docs/advanced/self-hosting/update'
|
||||
},
|
||||
{
|
||||
label: 'Debug',
|
||||
href: '/docs/advanced/self-hosting/debug'
|
||||
},
|
||||
{
|
||||
label: 'E-Mail',
|
||||
href: '/docs/advanced/self-hosting/email'
|
||||
},
|
||||
{
|
||||
label: 'Functions',
|
||||
href: '/docs/advanced/self-hosting/functions'
|
||||
},
|
||||
{
|
||||
label: 'Production',
|
||||
href: '/docs/advanced/self-hosting/production'
|
||||
},
|
||||
{
|
||||
label: 'SMS',
|
||||
href: '/docs/advanced/self-hosting/sms'
|
||||
},
|
||||
{
|
||||
label: 'Storage',
|
||||
href: '/docs/advanced/self-hosting/storage'
|
||||
},
|
||||
{
|
||||
label: 'TLS Certificates',
|
||||
href: '/docs/advanced/self-hosting/tls-certificates'
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
</script>
|
||||
|
||||
<Docs variant="two-side-navs">
|
||||
<Sidebar {navigation} {parent} />
|
||||
<slot />
|
||||
</Docs>
|
||||
@@ -34,7 +34,7 @@ docker logs [CONTAINER-ID]
|
||||
|
||||
Appwrite uses conventional HTTP response codes to indicate the success or failure of an API request. In general: Codes in the 2xx range indicate success. Codes in the 4xx range indicate an error that failed given the information provided (e.g., a required parameter was omitted, invalid input, etc.). Codes in the 5xx range indicate an error with the Appwrite server, but these are rare.
|
||||
|
||||
[Learn more about Appwrite status codes {% icon icon="cheveron-right" /%}](/docs/platform/response-codes)
|
||||
[Learn more about Appwrite status codes {% icon icon="cheveron-right" /%}](/docs/advanced/platform/response-codes)
|
||||
|
||||
## Development mode {% #development-mode%}
|
||||
|
||||
@@ -12,7 +12,7 @@ In this document, you will learn how to connect a 3rd party SMTP provider like M
|
||||
|
||||
## Environment variables {% #environment-variables %}
|
||||
|
||||
At this stage, we assume that you have already installed Appwrite. If not, you can follow our [Self Hosting Guide](/docs/self-hosting) for the installation. Appwrite offers multiple environment variables to customize your server setup to your needs. To configure Appwrite to use your own SMTP server, you need to set the following environment variables in the hidden .env file that comes with your Appwrite installation.
|
||||
At this stage, we assume that you have already installed Appwrite. If not, you can follow our [Self Hosting Guide](/docs/advanced/self-hosting) for the installation. Appwrite offers multiple environment variables to customize your server setup to your needs. To configure Appwrite to use your own SMTP server, you need to set the following environment variables in the hidden .env file that comes with your Appwrite installation.
|
||||
|
||||
| Environment cariable | Description | Default Value |
|
||||
| ----------------------------- | --------------------------------------------------------------------------------------------------------------------- | ------------------------ |
|
||||
@@ -13,7 +13,7 @@ Appwrite is designed to run well on both small and large deployments. The minimu
|
||||
Appwrite requires [Docker Compose Version 2](https://docs.docker.com/compose/install/). To install Appwrite, make sure your Docker installation is updated to support Composer V2.
|
||||
|
||||
{% info title="Upgrading From Older Versions" %}
|
||||
If you are migrating from an older version of Appwrite, you need to follow the [migration instructions](/docs/self-hosting/update)
|
||||
If you are migrating from an older version of Appwrite, you need to follow the [migration instructions](/docs/advanced/self-hosting/update)
|
||||
{% /info %}
|
||||
|
||||
## Install with Docker {% #install-with-docker %}
|
||||
@@ -53,7 +53,7 @@ Rate limits are an important mechanism to protect your app. Without rate limits,
|
||||
|
||||
Sending emails is hard. There are a lot of spam rules and configurations to master in order to set up a functional SMTP server. While it is okay to use a self-hosted SMTP server during development, you should use a third-party SMTP provider for production so your email doesn't get labeled as spam.
|
||||
|
||||
You can [change Appwrite's SMTP settings](/docs/self-hosting/email) and credentials to any 3rd party provider you like that supports SMTP integration using our Docker environment variables. Most SMTP providers offer a decent free tier to get started with.
|
||||
You can [change Appwrite's SMTP settings](/docs/advanced/self-hosting/email) and credentials to any 3rd party provider you like that supports SMTP integration using our Docker environment variables. Most SMTP providers offer a decent free tier to get started with.
|
||||
|
||||
## Backups {% #backups %}
|
||||
|
||||
@@ -97,7 +97,7 @@ If you subscribe to a channel, you will receive callbacks for a variety of event
|
||||
|
||||
|
||||
{% info title="Permissions" %}
|
||||
All subscriptions are secured by the [permissions system](/docs/platform/permissions) offered by Appwrite, meaning a user will only receive updates to resources they have permission to access.
|
||||
All subscriptions are secured by the [permissions system](/docs/advanced/platform/permissions) offered by Appwrite, meaning a user will only receive updates to resources they have permission to access.
|
||||
|
||||
Using `Role.any()` on read permissions will allow any client to receive updates.
|
||||
{% /info %}
|
||||
|
||||
@@ -84,7 +84,7 @@ X-Appwrite-Project: [PROJECT_ID]
|
||||
|
||||
Server integrations use API keys to authenticate and are typically used for backend applications.
|
||||
|
||||
Server APIs are authenticated with API keys instead of account sessions. Simply pass an [API key](/docs/platform/api-keys) in the `X-Appwrite-key: [API-KEY]` header with the appropriate scopes.
|
||||
Server APIs are authenticated with API keys instead of account sessions. Simply pass an [API key](/docs/advanced/platform/api-keys) in the `X-Appwrite-key: [API-KEY]` header with the appropriate scopes.
|
||||
|
||||
```json
|
||||
GET /v1/databases/{databaseId}/collections/{collectionId}/documents HTTP/1.1
|
||||
@@ -345,7 +345,7 @@ When using greater than, greater than or equal to, less than, or less than or eq
|
||||
|
||||
Appwrite's REST APIs are protected by the same rate limit policies, just like when using an SDK. Each API has a different rate limit, which is documented in the References section of each service in the Appwrite documentation.
|
||||
|
||||
[Learn more about Rate Limits](/docs/platform/rate-limits).
|
||||
[Learn more about Rate Limits](/docs/advanced/platform/rate-limits).
|
||||
|
||||
## Specifications {% #specifications %}
|
||||
|
||||
|
||||
@@ -3,13 +3,20 @@
|
||||
import Sidebar, { type NavParent, type NavTree } from '$lib/layouts/Sidebar.svelte';
|
||||
|
||||
const parent: NavParent = {
|
||||
backlink: '/docs',
|
||||
href: '/docs/products/auth',
|
||||
label: 'Auth',
|
||||
icon: 'icon-user-group'
|
||||
href: '/docs',
|
||||
label: 'Auth'
|
||||
};
|
||||
|
||||
const navigation: NavTree = [
|
||||
{
|
||||
label: 'Getting started',
|
||||
items: [
|
||||
{
|
||||
label: 'Overview',
|
||||
href: '/docs/products/auth'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: 'Guides',
|
||||
items: [
|
||||
|
||||
@@ -28,7 +28,7 @@ You can change the session limit in the **Security** tab of the Auth Service in
|
||||
## Permissions
|
||||
|
||||
Security is very important to protect users' data and privacy.
|
||||
Appwrite uses a [permissions model](/docs/platform/permissions) coupled with user sessions to ensure users need correct permissions to access resources.
|
||||
Appwrite uses a [permissions model](/docs/advanced/platform/permissions) coupled with user sessions to ensure users need correct permissions to access resources.
|
||||
With all Appwrite services, including databases and storage, access is granted at the collection, bucket, document, or file level.
|
||||
These permissions are enforced for client SDKs and server SDKs when using JWT, but are ignored when using a server SDK with an API key.
|
||||
|
||||
@@ -40,7 +40,7 @@ Password history can be enabled in the Auth service's **Security** tab on the Ap
|
||||
|
||||
## Password dictionary
|
||||
|
||||
Password dictionary protects users from using bad passwords. It compares the user's password to the [10,000 most common passwords](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/10k-most-common.txt) and throws an error if there's a match. Together with [rate limits](/docs/platform/rate-limits), password dictionary will significantly reduce the chance of a malicious actor from guessing user passwords.
|
||||
Password dictionary protects users from using bad passwords. It compares the user's password to the [10,000 most common passwords](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/10k-most-common.txt) and throws an error if there's a match. Together with [rate limits](/docs/advanced/platform/rate-limits), password dictionary will significantly reduce the chance of a malicious actor from guessing user passwords.
|
||||
|
||||
Password dictionary can be enabled in the Auth service's **Security** tab on the Appwrite Console.
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ If you are already authenticated on your client-side app and need your backend a
|
||||
|
||||
## Proof of Identity {% #proof-of-identity %}
|
||||
|
||||
Before making requests to your backend APIs, your client application needs to first create a session **directly with Appwrite** using the account service. This session will act like an ID card for the user and can be used to access resources in Appwrite. The client will **only receive information accessible to the user** based on the resources' [permissions](/docs/platform/permissions).
|
||||
Before making requests to your backend APIs, your client application needs to first create a session **directly with Appwrite** using the account service. This session will act like an ID card for the user and can be used to access resources in Appwrite. The client will **only receive information accessible to the user** based on the resources' [permissions](/docs/advanced/platform/permissions).
|
||||
|
||||
When you build backend APIs to extend Appwrite's functionality, these APIs should still **respect access permissions** to keep user data secure. Appwrite's backend SDKs allow you to securely act on behalf of a user with the same permissions by using JWT authentication.
|
||||
|
||||
@@ -172,7 +172,7 @@ var client = new Client()
|
||||
|
||||
JWT auth is useful when you need your backend app's Server SDK to be restricted by the same set of permissions.
|
||||
|
||||
If your backend app's Server SDK is using an [API key](/docs/platform/api-keys), it will fetch **all resources** regardless of permissions. This means the Server SDK might fetch files and documents your user should not be able to see, which is not helpful when you need to act on behalf of a user.
|
||||
If your backend app's Server SDK is using an [API key](/docs/advanced/platform/api-keys), it will fetch **all resources** regardless of permissions. This means the Server SDK might fetch files and documents your user should not be able to see, which is not helpful when you need to act on behalf of a user.
|
||||
|
||||
If your backend app's Server SDK is using a **JWT**, it will only fetch resources your user has permissions to access.
|
||||
|
||||
|
||||
@@ -348,7 +348,7 @@ This would correspond with the permissions below.
|
||||
| Delete | `Permissions.delete(Role.label('subscriber'))` |
|
||||
| Create | `Permissions.create(Role.label('subscriber'))` |
|
||||
|
||||
[Learn more about permissions](/docs/platform/permissions)
|
||||
[Learn more about permissions](/docs/advanced/platform/permissions)
|
||||
|
||||
## Teams {% #teams %}
|
||||
|
||||
|
||||
@@ -3,13 +3,20 @@
|
||||
import Sidebar, { type NavParent, type NavTree } from '$lib/layouts/Sidebar.svelte';
|
||||
|
||||
const parent: NavParent = {
|
||||
backlink: '/docs',
|
||||
href: '/docs/products/databases',
|
||||
label: 'Databases',
|
||||
icon: 'icon-database'
|
||||
href: '/docs',
|
||||
label: 'Databases'
|
||||
};
|
||||
|
||||
const navigation: NavTree = [
|
||||
{
|
||||
label: 'Getting started',
|
||||
items: [
|
||||
{
|
||||
label: 'Overview',
|
||||
href: '/docs/products/databases'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: 'Guides',
|
||||
items: [
|
||||
|
||||
@@ -3,13 +3,20 @@
|
||||
import Sidebar, { type NavParent, type NavTree } from '$lib/layouts/Sidebar.svelte';
|
||||
|
||||
const parent: NavParent = {
|
||||
backlink: '/docs',
|
||||
href: '/docs/products/functions',
|
||||
label: 'Functions',
|
||||
icon: 'icon-lightning-bolt'
|
||||
href: '/docs',
|
||||
label: 'Functions'
|
||||
};
|
||||
|
||||
const navigation: NavTree = [
|
||||
{
|
||||
label: 'Getting started',
|
||||
items: [
|
||||
{
|
||||
label: 'Overview',
|
||||
href: '/docs/products/functions'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: 'Guides',
|
||||
items: [
|
||||
|
||||
@@ -428,7 +428,7 @@ You'll find these properties in the context object.
|
||||
Some languages, namely JavaScript, support destructuring.
|
||||
You'll see us use destructuring in examples, which has the following syntax.
|
||||
|
||||
[Learn more about destructuring assignment](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment){:target="_blank"}.
|
||||
[Learn more about destructuring assignment](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment).
|
||||
{% multicode %}
|
||||
```js
|
||||
// before destructuring
|
||||
|
||||
@@ -485,7 +485,7 @@ Here are some cron expressions for common intervals:
|
||||
## Permissions {% #permission %}
|
||||
|
||||
|
||||
Appwrite Functions can be executed using Client or Server SDKs. Client SDKs must be authenticated with an account that has been granted execution [permissions](/docs/platform/permissions) on the function's settings page. Server SDKs require an API key with the correct scopes.
|
||||
Appwrite Functions can be executed using Client or Server SDKs. Client SDKs must be authenticated with an account that has been granted execution [permissions](/docs/advanced/platform/permissions) on the function's settings page. Server SDKs require an API key with the correct scopes.
|
||||
|
||||
If your function has a generated or custom domain, executions are not authenticated. Anyone visiting the configured domains will be considered a guest, so make sure to give `Any` execute permission in order for domain executions to work. If you need to enforce permissions for functions with a domain, use authentication methods like JWT.
|
||||
|
||||
|
||||
@@ -3,13 +3,20 @@
|
||||
import Sidebar, { type NavParent, type NavTree } from '$lib/layouts/Sidebar.svelte';
|
||||
|
||||
const parent: NavParent = {
|
||||
backlink: '/docs',
|
||||
href: '/docs/products/storage',
|
||||
label: 'Storage',
|
||||
icon: 'icon-folder'
|
||||
href: '/docs',
|
||||
label: 'Storage'
|
||||
};
|
||||
|
||||
const navigation: NavTree = [
|
||||
{
|
||||
label: 'Getting started',
|
||||
items: [
|
||||
{
|
||||
label: 'Overview',
|
||||
href: '/docs/products/storage'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: 'Guides',
|
||||
items: [
|
||||
|
||||
@@ -6,12 +6,20 @@
|
||||
$: expandable = $page.url.pathname.startsWith('/docs/references/');
|
||||
|
||||
const parent: NavParent = {
|
||||
backlink: '/docs',
|
||||
href: '/docs/references',
|
||||
label: 'References',
|
||||
icon: 'icon-document'
|
||||
href: '/docs',
|
||||
label: 'References'
|
||||
};
|
||||
const navigation: NavTree = [
|
||||
{
|
||||
label: 'Getting started',
|
||||
items: [
|
||||
{
|
||||
label: 'Overview',
|
||||
href: '/docs/references',
|
||||
icon: 'icon-view-grid'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: 'Services',
|
||||
items: [
|
||||
|
||||
9
src/routes/docs/tooling/assistant/+layout.svelte
Normal file
9
src/routes/docs/tooling/assistant/+layout.svelte
Normal file
@@ -0,0 +1,9 @@
|
||||
<script lang="ts">
|
||||
import Docs from '$lib/layouts/Docs.svelte';
|
||||
import Sidebar from '../../Sidebar.svelte';
|
||||
</script>
|
||||
|
||||
<Docs variant="two-side-navs">
|
||||
<Sidebar />
|
||||
<slot />
|
||||
</Docs>
|
||||
39
src/routes/docs/tooling/command-line/+layout.svelte
Normal file
39
src/routes/docs/tooling/command-line/+layout.svelte
Normal file
@@ -0,0 +1,39 @@
|
||||
<script lang="ts">
|
||||
import Docs from '$lib/layouts/Docs.svelte';
|
||||
import Sidebar, { type NavParent, type NavTree } from '$lib/layouts/Sidebar.svelte';
|
||||
|
||||
const parent: NavParent = {
|
||||
href: '/docs',
|
||||
label: 'Command Line'
|
||||
};
|
||||
|
||||
const navigation: NavTree = [
|
||||
{
|
||||
label: 'Getting started',
|
||||
items: [
|
||||
{
|
||||
label: 'Overview',
|
||||
href: '/docs/tooling/command-line'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: 'Guides',
|
||||
items: [
|
||||
{
|
||||
label: 'Installation',
|
||||
href: '/docs/tooling/command-line/installation'
|
||||
},
|
||||
{
|
||||
label: 'Deployment',
|
||||
href: '/docs/tooling/command-line/deployment'
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
</script>
|
||||
|
||||
<Docs variant="two-side-navs">
|
||||
<Sidebar {navigation} {parent} />
|
||||
<slot />
|
||||
</Docs>
|
||||
9
src/routes/docs/tooling/command-line/+page.markdoc
Normal file
9
src/routes/docs/tooling/command-line/+page.markdoc
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
layout: article
|
||||
title: CLI
|
||||
description: lorem ipsum
|
||||
difficulty: beginner
|
||||
readtime: 5
|
||||
---
|
||||
|
||||
If you're looking to migrate existing projects to Appwrite, Migrations can help you make the move more quickly. You can move your app from Firebase, Supabase, Nhost, and even move between self-hosted and Cloud projects using Migrations. You can also use Migrations to move between two self-hosted instances or even to duplicate projects on the same instance. Migrations will automatically move accounts, database documents, and storage files from one source to another.
|
||||
@@ -91,7 +91,7 @@ appwrite client --selfSigned true
|
||||
|
||||
You can use the CLI to create and deploy functions and collections. Deploy commands allow you to configure your Appwrite project programmatically and replicate functions and collection schemas across Appwrite projects.
|
||||
|
||||
[Learn more about deployment](/docs/tooling/cli/deployment)
|
||||
[Learn more about deployment](/docs/tooling/command-line/deployment)
|
||||
|
||||
Besides utility commands, the CLI can be used to execute commands like a Server SDK.
|
||||
|
||||
@@ -1,9 +1,14 @@
|
||||
<script lang="ts">
|
||||
import Docs from '$lib/layouts/Docs.svelte';
|
||||
import { page } from '$app/stores';
|
||||
import Docs, { type DocsLayoutVariant } from '$lib/layouts/Docs.svelte';
|
||||
import Sidebar from '../Sidebar.svelte';
|
||||
|
||||
$: variant = $page.url.pathname.endsWith('/tutorials')
|
||||
? 'default'
|
||||
: ('two-side-navs' as DocsLayoutVariant);
|
||||
</script>
|
||||
|
||||
<Docs variant="two-side-navs">
|
||||
<Docs {variant}>
|
||||
<Sidebar />
|
||||
<slot />
|
||||
</Docs>
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
export const prerender = true;
|
||||
@@ -1,7 +1,7 @@
|
||||
<script lang="ts">
|
||||
import { MainFooter } from '$lib/components';
|
||||
import { Docs } from '$lib/layouts';
|
||||
import Docs from '$lib/layouts/Docs.svelte';
|
||||
import Sidebar from '../Sidebar.svelte';
|
||||
import { MainFooter } from '$lib/components';
|
||||
</script>
|
||||
|
||||
<main class="aw-main-section">
|
||||
@@ -523,7 +523,6 @@
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
</article>
|
||||
|
||||
<MainFooter variant="docs" />
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<script lang="ts">
|
||||
import { MainFooter } from '$lib/components';
|
||||
import { FooterNav, MainFooter } from '$lib/components';
|
||||
import { Main } from '$lib/layouts';
|
||||
</script>
|
||||
|
||||
@@ -715,99 +715,7 @@
|
||||
</div>
|
||||
<div class="aw-big-padding-section-level-2 u-position-relative">
|
||||
<div class="aw-container u-position-relative">
|
||||
<nav class="aw-footer-nav">
|
||||
<img class="aw-logo" src="/images/logos/appwrite.svg" alt="appwrite" width="130" />
|
||||
<ul class="aw-footer-nav-main-list">
|
||||
<li class="aw-footer-nav-main-item">
|
||||
<h5 class="aw-footer-nav-main-title aw-is-not-mobile"><a href="#">Product</a></h5>
|
||||
<button class="aw-footer-nav-button aw-is-only-mobile">
|
||||
<span class="aw-caption-500">Product</span>
|
||||
<svg
|
||||
class="aw-footer-nav-button-arrow"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="20"
|
||||
height="20"
|
||||
viewBox="0 0 20 20"
|
||||
fill="none"
|
||||
>
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="M10.4243 13.0243C10.19 13.2586 9.81007 13.2586 9.57576 13.0243L5.07576 8.52426C4.84145 8.28995 4.84145 7.91005 5.07576 7.67574C5.31007 7.44142 5.68997 7.44142 5.92429 7.67574L10 11.7515L14.0758 7.67574C14.3101 7.44142 14.69 7.44142 14.9243 7.67574C15.1586 7.91005 15.1586 8.28995 14.9243 8.52426L10.4243 13.0243Z"
|
||||
fill="#ADADB0"
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
<ul class="aw-footer-nav-secondary-list">
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Docs</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Auth</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Databases</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Functions</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Storage</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Realtime</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Localization</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="aw-footer-nav-main-item">
|
||||
<h5 class="aw-footer-nav-main-title aw-is-not-mobile"><a href="#">About</a></h5>
|
||||
<button class="aw-footer-nav-button is-open aw-is-only-mobile">
|
||||
<span class="aw-caption-500">About</span>
|
||||
<svg
|
||||
class="aw-footer-nav-button-arrow"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="20"
|
||||
height="20"
|
||||
viewBox="0 0 20 20"
|
||||
fill="none"
|
||||
>
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="M10.4243 13.0243C10.19 13.2586 9.81007 13.2586 9.57576 13.0243L5.07576 8.52426C4.84145 8.28995 4.84145 7.91005 5.07576 7.67574C5.31007 7.44142 5.68997 7.44142 5.92429 7.67574L10 11.7515L14.0758 7.67574C14.3101 7.44142 14.69 7.44142 14.9243 7.67574C15.1586 7.91005 15.1586 8.28995 14.9243 8.52426L10.4243 13.0243Z"
|
||||
fill="#ADADB0"
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
<ul class="aw-footer-nav-secondary-list">
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Company</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Community</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Blog</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Careers</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Contact Us</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Roadmap</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Changelog</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="aw-footer-nav-main-item">
|
||||
<h5 class="aw-footer-nav-main-title aw-is-not-mobile"><a href="#">Legal</a></h5>
|
||||
<button class="aw-footer-nav-button aw-is-only-mobile">
|
||||
<span class="aw-caption-500">Legal</span>
|
||||
<svg
|
||||
class="aw-footer-nav-button-arrow"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="20"
|
||||
height="20"
|
||||
viewBox="0 0 20 20"
|
||||
fill="none"
|
||||
>
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="M10.4243 13.0243C10.19 13.2586 9.81007 13.2586 9.57576 13.0243L5.07576 8.52426C4.84145 8.28995 4.84145 7.91005 5.07576 7.67574C5.31007 7.44142 5.68997 7.44142 5.92429 7.67574L10 11.7515L14.0758 7.67574C14.3101 7.44142 14.69 7.44142 14.9243 7.67574C15.1586 7.91005 15.1586 8.28995 14.9243 8.52426L10.4243 13.0243Z"
|
||||
fill="#ADADB0"
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
<ul class="aw-footer-nav-secondary-list">
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Status</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Terms</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Privacy</a></li>
|
||||
<li class="aw-footer-nav-secondary-item"><a href="#">Security</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<FooterNav />
|
||||
<MainFooter />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
15
src/routes/support/+page.svelte
Normal file
15
src/routes/support/+page.svelte
Normal file
@@ -0,0 +1,15 @@
|
||||
<script lang="ts">
|
||||
import { Main } from '$lib/layouts';
|
||||
|
||||
import FooterNav from '../../lib/components/FooterNav.svelte';
|
||||
import MainFooter from '../../lib/components/MainFooter.svelte';
|
||||
</script>
|
||||
|
||||
<Main>
|
||||
<div class="aw-container">
|
||||
<div class="aw-grid-120-1fr-auto" />
|
||||
|
||||
<FooterNav />
|
||||
<MainFooter />
|
||||
</div>
|
||||
</Main>
|
||||
@@ -0,0 +1,15 @@
|
||||
<script lang="ts">
|
||||
import { Main } from '$lib/layouts';
|
||||
|
||||
import FooterNav from '../../lib/components/FooterNav.svelte';
|
||||
import MainFooter from '../../lib/components/MainFooter.svelte';
|
||||
</script>
|
||||
|
||||
<Main>
|
||||
<div class="aw-container">
|
||||
<div class="aw-grid-120-1fr-auto" />
|
||||
|
||||
<FooterNav />
|
||||
<MainFooter />
|
||||
</div>
|
||||
</Main>
|
||||
|
||||
@@ -27,7 +27,17 @@
|
||||
padding:pxToRem(16); padding-block-end:pxToRem(32);
|
||||
background-color:hsl(var(--p-side-nav-bg-color)); transition:var(--transition);
|
||||
|
||||
&-parent {
|
||||
padding-bottom: 16px;
|
||||
border-block-end: 1px solid hsl(var(--aw-color-smooth));
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
|
||||
&-title {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
&-scroll {
|
||||
flex:1; overflow-y:scroll; overflow-x:hidden;
|
||||
|
||||
@@ -41,7 +41,8 @@ const config = {
|
||||
$markdoc: './src/markdoc'
|
||||
},
|
||||
prerender: {
|
||||
handleHttpError: 'warn'
|
||||
handleHttpError: 'warn',
|
||||
handleMissingId: 'warn'
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user