Merge branch 'feat-profiles' into 'fix-ima-328'.

This commit is contained in:
Darshan
2025-11-06 17:05:11 +05:30
125 changed files with 1561 additions and 1465 deletions
+3 -1
View File
@@ -34,7 +34,9 @@ export default ts.config(
'svelte/no-reactive-reassign': 'off',
'svelte/no-reactive-literals': 'off',
// TODO: @itznotabug, this requires a big refactor!
'svelte/no-navigation-without-resolve': 'off'
'svelte/no-navigation-without-resolve': 'off',
'svelte/prefer-svelte-reactivity': 'off',
'svelte/prefer-writable-derived': 'off'
}
},
{
+1 -1
View File
@@ -22,7 +22,7 @@
},
"dependencies": {
"@ai-sdk/svelte": "^1.1.24",
"@appwrite.io/console": "https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@636ed39",
"@appwrite.io/console": "https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@2752",
"@appwrite.io/pink-icons": "0.25.0",
"@appwrite.io/pink-icons-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@8f82877",
"@appwrite.io/pink-legacy": "^1.0.3",
+1101 -1218
View File
File diff suppressed because it is too large Load Diff
+4 -3
View File
@@ -13,6 +13,7 @@
import { isLanguage, type Language } from '$lib/components/code.svelte';
import { preferences } from '$lib/stores/preferences';
import { getApiEndpoint } from '$lib/stores/sdk';
import { resolvedProfile } from '$lib/profiles/index.svelte';
const endpoint = getApiEndpoint();
const { input, handleSubmit, completion, isLoading, complete, error } = useCompletion({
@@ -26,9 +27,9 @@
const examples = [
'How to add platform in the console?',
'How can I manage users, permissions, and access control in Appwrite?',
'How can I set up database tables and rows in Appwrite?',
'How do I configure and manage server-side functions in Appwrite?',
`How can I manage users, permissions, and access control in ${resolvedProfile.platform}?`,
`How can I set up database tables and rows in ${resolvedProfile.platform}?`,
`How do I configure and manage server-side functions in ${resolvedProfile.platform}?`,
'How to add custom domain in the console?'
];
@@ -13,6 +13,7 @@
import { resolve } from '$app/paths';
import { browser } from '$app/environment';
import { slide } from 'svelte/transition';
import { resolvedProfile } from '$lib/profiles/index.svelte';
let {
show = $bindable(false),
@@ -139,8 +140,8 @@
<Card.Base variant="secondary" padding="s">
<Layout.Stack gap="xxs">
<Typography.Text gap="m">
To continue using Appwrite Cloud, please verify your email address. An email
will be sent to <Typography.Text
To continue using {resolvedProfile.platform} Cloud, please verify your email address.
An email will be sent to <Typography.Text
variant="m-600"
color="neutral-secondary"
style="display: inline;">{email || get(user)?.email}</Typography.Text>
@@ -9,6 +9,7 @@
import GradientBanner from '../gradientBanner.svelte';
import { isSmallViewport } from '$lib/stores/viewport';
import { Layout, Typography } from '@appwrite.io/pink-svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
let show = true;
@@ -30,7 +31,8 @@
alignItems="center"
alignContent="center"
direction={$isSmallViewport ? 'column' : 'row'}>
<Typography.Text>Get $50 Cloud credits for Appwrite Pro.</Typography.Text>
<Typography.Text
>Get $50 Cloud credits for {resolvedProfile.platform} Pro.</Typography.Text>
<Button
secondary
@@ -10,6 +10,7 @@
import InputSelect from '$lib/elements/forms/inputSelect.svelte';
import { invalidate } from '$app/navigation';
import { Dependencies } from '$lib/constants';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export let value: string;
export let taxId = '';
@@ -50,10 +51,10 @@
{#if selectedPaymentMethod?.country?.toLowerCase() === 'in'}
<Alert.Inline status="warning">
<svelte:fragment slot="title">Indian credit or debit card-holders</svelte:fragment>
To comply with RBI regulations in India, Appwrite will ask for verification to charge
up to $150 USD on your payment method. We will never charge more than the cost of your
plan and the resources you use, or your budget cap limit. For higher usage limits, please
contact us.
To comply with RBI regulations in India, {resolvedProfile.platform} will ask for verification
to charge up to $150 USD on your payment method. We will never charge more than the cost
of your plan and the resources you use, or your budget cap limit. For higher usage limits,
please contact us.
</Alert.Inline>
{/if}
<InputSelect
+7 -3
View File
@@ -271,7 +271,7 @@
{#key derivedKey}
<div use:melt={$menubar}>
{#if !$isSmallViewport}
{#if !$isSmallViewport && resolvedProfile.showOrgInBreadcrumbs}
<span class="breadcrumb-separator">/</span>
<button
type="button"
@@ -288,7 +288,7 @@
{/if}</span>
<Icon icon={IconChevronDown} size="s" color="--fgcolor-neutral-secondary" />
</button>
{:else}
{:else if resolvedProfile.showOrgInBreadcrumbs}
<button
type="button"
class="trigger"
@@ -461,7 +461,11 @@
{/if}
</div>
<BottomSheet.Menu bind:isOpen={organisationBottomSheetOpen} menu={organizationsBottomSheet} />
{#if resolvedProfile.showOrgInBreadcrumbs}
<BottomSheet.Menu
bind:isOpen={organisationBottomSheetOpen}
menu={organizationsBottomSheet} />
{/if}
{#await projectsBottomSheet then menu}
{#if menu}
+4 -3
View File
@@ -19,9 +19,10 @@
</script>
<script lang="ts">
import { createEventDispatcher, onMount } from 'svelte';
import { Modal } from '.';
import { Button } from '$lib/elements/forms';
import { createEventDispatcher, onMount } from 'svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
const key = new Date('2023-11-07');
const dispatch = createEventDispatcher();
@@ -92,7 +93,7 @@
<Modal bind:show={$settings} title="Cookie Preferences">
<p>
We use cookies to improve your site experience. The "strictly necessary" cookies are
required for Appwrite to function.
required for {resolvedProfile.platform} to function.
</p>
<div class="u-flex-vertical u-gap-24 u-width-full-line" style:margin-block-end="24px">
<div class="u-flex u-gap-8">
@@ -100,7 +101,7 @@
<div>
<span class="text u-bold">Strictly necessary cookies</span>
<p class="text u-margin-block-start-8">
These are the cookies required for Appwrite to function.
These are the cookies required for {resolvedProfile.platform} to function.
</p>
</div>
</div>
+3 -2
View File
@@ -5,6 +5,7 @@
import { IconGithub } from '@appwrite.io/pink-icons-svelte';
import { Alert, Card, Empty, Icon, Layout } from '@appwrite.io/pink-svelte';
import { regionalConsoleVariables } from '$routes/(console)/project-[region]-[project]/store';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export let callbackState: Record<string, string> = null;
@@ -16,8 +17,8 @@
<Alert.Inline status="info" title="Installing Git on a self-hosted instance ">
<Layout.Stack>
<p>
Before installing Git in a locally hosted Appwrite project, ensure your
environment variables are configured.
Before installing Git in a locally hosted {resolvedProfile.platform} project, ensure
your environment variables are configured.
</p>
<div>
<Button
+3 -2
View File
@@ -15,6 +15,7 @@
} from '@appwrite.io/pink-svelte';
import { onMount } from 'svelte';
import LoggingAlert from './loggingAlert.svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
let {
selectedLog,
@@ -142,8 +143,8 @@
{:else}
<Card padding="xs" radius="s">
<Typography.Text>
Body data is not captured by Appwrite for your user's security and privacy. To
display body data in the Logs tab, use <InlineCode
Body data is not captured by {resolvedProfile.platform} for your user's security
and privacy. To display body data in the Logs tab, use <InlineCode
code="context.log()"
size="s" />. <Link external {href} variant="muted">Learn more</Link>.
</Typography.Text>
-1
View File
@@ -32,7 +32,6 @@
import {
IconChevronRight,
IconCreditCard,
IconGlobe,
IconGlobeAlt,
IconLogoutRight,
IconMenuAlt4,
+2 -2
View File
@@ -58,7 +58,7 @@
link: 'https://appwrite.io/discord',
description: 'Get support from our community through Discord'
},
...(resolvedProfile.showGithubIssueSupport
...(!resolvedProfile.showGithubIssueSupport
? []
: [
{
@@ -153,7 +153,7 @@
{#key $app.themeInUse}
<iframe
style="color-scheme: none"
title="Appwrite Status"
title="{resolvedProfile.platform} Status"
src={`https://status.appwrite.online/badge?theme=${
$app.themeInUse === 'dark' ? 'dark' : 'light'
}`}
+7 -6
View File
@@ -2,6 +2,7 @@ import DevKind from '$lib/images/testimonials/hassan.png';
import LangX from '$lib/images/testimonials/xue.webp';
import KCollect from '$lib/images/testimonials/ryan-oconner-testimonial.png';
import Phil from '$lib/images/testimonials/phil.jpg';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export interface Testimonial {
id: string;
@@ -18,7 +19,7 @@ export const testimonials: Testimonial[] = [
id: 'hassan-devkind',
logo: DevKind,
headline: 'DevKind reduced development time by 60% and lowered server costs by 40%',
blurb: 'A special thanks to Appwrite for providing robust features and seamless functionality.',
blurb: `A special thanks to ${resolvedProfile.platform} for providing robust features and seamless functionality.`,
name: 'Hassan Ahmed',
title: 'Engineer at DevKind',
avatar: DevKind
@@ -26,8 +27,8 @@ export const testimonials: Testimonial[] = [
{
id: 'xue-langx',
logo: LangX,
headline: 'LangX handled millions of requests using Appwrite',
blurb: 'With its comprehensive suite of services, Appwrite emerged as an ideal choice for my needs.',
headline: `LangX handled millions of requests using ${resolvedProfile.platform}`,
blurb: `With its comprehensive suite of services, ${resolvedProfile.platform} emerged as an ideal choice for my needs.`,
name: 'Xue',
title: 'Founder at LangX',
avatar: LangX
@@ -36,7 +37,7 @@ export const testimonials: Testimonial[] = [
id: 'ryan-kcollect',
logo: KCollect,
headline: 'K-Collect reduced infrastructure costs by 700%',
blurb: 'A major impact that Appwrite made was the amount of time and stress saved.',
blurb: `A major impact that ${resolvedProfile.platform} made was the amount of time and stress saved.`,
name: "Ryan O'Connor",
title: 'Founder at K-Collect',
avatar: KCollect
@@ -44,8 +45,8 @@ export const testimonials: Testimonial[] = [
{
id: 'phil-majikkids',
logo: Phil,
headline: 'With Appwrite, Majik Kids built an entire app with one developer.',
blurb: 'Just like a Swiss Army Knife you can choose and use the tools that you need with Appwrite.',
headline: `With ${resolvedProfile.platform}, Majik Kids built an entire app with one developer.`,
blurb: `Just like a Swiss Army Knife you can choose and use the tools that you need with ${resolvedProfile.platform}.`,
name: 'Phil McCluskey',
title: 'App Manager, Majik Kids',
avatar: Phil
+2 -3
View File
@@ -65,11 +65,10 @@ export async function gzipUpload(files: FileList) {
data: f.buffer
}))
);
const blob = new Blob([tar], { type: 'application/gzip' });
const file = new File([blob], 'deployment.tar.gz', {
const blob = new Blob([new Uint8Array(tar)], { type: 'application/gzip' });
uploadFile = new File([blob], 'deployment.tar.gz', {
type: 'application/gzip'
});
uploadFile = file;
} catch (e) {
addNotification({
type: 'error',
+6 -5
View File
@@ -13,7 +13,7 @@
} from '@appwrite.io/pink-svelte';
import { isSmallViewport } from '$lib/stores/viewport';
import { page } from '$app/state';
import { resolvedProfile } from '$lib/profiles/index.svelte.ts';
import { resolvedProfile } from '$lib/profiles/index.svelte';
const currentYear = new Date().getFullYear();
@@ -39,6 +39,7 @@
<Divider vertical />
</span>
<Layout.Stack direction="row" gap="xxs" inline>
<!-- TODO: hide on studio mode. -->
<Button.Anchor
icon
size="xs"
@@ -46,7 +47,7 @@
href="https://github.com/appwrite/appwrite"
target="_blank"
rel="noreferrer"
aria-label="Appwrite on Github">
aria-label="{resolvedProfile.platform} on Github">
<Icon size="s" icon={IconGithub} />
</Button.Anchor>
<Button.Anchor
@@ -56,7 +57,7 @@
href="https://appwrite.io/discord"
target="_blank"
rel="noreferrer"
aria-label="Appwrite on Discord">
aria-label="{resolvedProfile.platform} on Discord">
<Icon size="s" icon={IconDiscord} />
</Button.Anchor>
</Layout.Stack>
@@ -83,7 +84,7 @@
size="s"
variant="quiet"
href="https://github.com/appwrite/appwrite/releases"
aria-label="Appwrite releases on Github"
aria-label="{resolvedProfile.platform} releases on Github"
target="_blank"
rel="noreferrer"
style="white-space: nowrap;">
@@ -148,7 +149,7 @@
size="s"
variant="quiet"
href="https://github.com/appwrite/appwrite/releases"
aria-label="Appwrite releases on Github"
aria-label="{resolvedProfile.platform} releases on Github"
target="_blank"
rel="noreferrer"
style="white-space: nowrap;">
+5 -4
View File
@@ -11,6 +11,7 @@
import { Typography, Layout, Avatar } from '@appwrite.io/pink-svelte';
import { getCampaignImageUrl } from '$routes/(public)/card/helpers';
import { isSmallViewport } from '$lib/stores/viewport';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export const imgLight = LoginLight;
export const imgDark = LoginDark;
@@ -62,13 +63,13 @@
src={AppwriteLogoDark}
width="160"
class="u-block u-only-dark"
alt="Appwrite Logo" />
alt="{resolvedProfile.platform} Logo" />
{:else}
<img
src={AppwriteLogoLight}
width="160"
class="u-block u-only-light"
alt="Appwrite Logo" />
alt="{resolvedProfile.platform} Logo" />
{/if}
</a>
</div>
@@ -174,13 +175,13 @@
src={AppwriteLogoDark}
width="120"
class="u-block u-only-dark"
alt="Appwrite Logo" />
alt="{resolvedProfile.platform} Logo" />
{:else}
<img
src={AppwriteLogoLight}
width="120"
class="u-block u-only-light"
alt="Appwrite Logo" />
alt="{resolvedProfile.platform} Logo" />
{/if}
</a>
</div>
+6
View File
@@ -34,6 +34,8 @@ export type Profile = {
sites: boolean;
settings: boolean;
};
showOrgInBreadcrumbs: boolean;
minimalOrgHeader: boolean;
getProjectRoute: (params: { region: string; project: string }) => ResolvedPathname;
};
@@ -64,6 +66,8 @@ export const base: Profile = {
sites: true,
settings: true
},
showOrgInBreadcrumbs: true,
minimalOrgHeader: false,
getProjectRoute({ region, project }) {
return resolve(`/(console)/project-[region]-[project]/overview`, {
region,
@@ -99,6 +103,8 @@ export const studio: Profile = {
sites: true,
settings: false
},
showOrgInBreadcrumbs: false,
minimalOrgHeader: true,
getProjectRoute({ region, project }) {
return resolve(`/(console)/project-[region]-[project]/(studio)/studio`, {
region,
+2
View File
@@ -17,6 +17,7 @@ const CDN_URL =
const DEV_OVERRIDE_WEB_COMPONENTS = env?.PUBLIC_AI_OVERRIDE_WEB_COMPONENTS === 'true';
let component: HTMLElement | null = null;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let webComponentsModule: Record<string, any> | null = null;
let configInitialized = false;
let routingInitialized = false;
@@ -119,6 +120,7 @@ export async function getWebComponents() {
/**
* Navigate to a route in the web components
*/
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export async function navigateToRoute(...args: any[]) {
try {
const { navigateToRoute: navigate } = await getWebComponents();
@@ -5,6 +5,7 @@
import { Vcs, Client } from '@appwrite.io/console';
import { onMount } from 'svelte';
import { getApiEndpoint } from '$lib/stores/sdk';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export let data;
@@ -86,13 +87,13 @@
src={AppwriteLogoDark}
width="120"
class="u-block u-only-dark"
alt="Appwrite Logo" />
alt="{resolvedProfile.platform} Logo" />
{:else}
<img
src={AppwriteLogoLight}
width="120"
class="u-block u-only-light"
alt="Appwrite Logo" />
alt="{resolvedProfile.platform} Logo" />
{/if}
</a>
</div>
+2 -1
View File
@@ -10,6 +10,7 @@
import { addNotification } from '$lib/stores/notifications.js';
import { Icon, Layout } from '@appwrite.io/pink-svelte';
import { IconChevronLeft } from '@appwrite.io/pink-icons-svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export let data;
@@ -50,7 +51,7 @@
</script>
<svelte:head>
<title>Verify - Appwrite</title>
<title>Verify - {resolvedProfile.platform}</title>
</svelte:head>
<Unauthenticated align="center">
@@ -15,6 +15,7 @@
import type { Models } from '@appwrite.io/console';
import type { sdk } from '$lib/stores/sdk';
import ImportReport from '$routes/(console)/project-[region]-[project]/settings/migrations/(import)/importReport.svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export let errorInResources: boolean | undefined = undefined;
export let formData: ReturnType<typeof createMigrationFormStore>;
@@ -128,8 +129,8 @@
{#if report && !isVersionAtLeast(version, '1.4.0') && $provider.provider === 'appwrite'}
<Alert.Inline status="warning">
<svelte:fragment slot="title">Functions not available for import</svelte:fragment>
To migrate your functions, update the version of the Appwrite instance you're importing from
to a version newer than 1.4
To migrate your functions, update the version of the {resolvedProfile.platform} instance
you're importing from to a version newer than 1.4
</Alert.Inline>
{/if}
@@ -3,13 +3,15 @@
import { sdk } from '$lib/stores/sdk';
import { formData, provider, selectedProject } from '.';
import ResourceForm from './resource-form.svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
</script>
<WizardStep>
<svelte:fragment slot="title">Resources</svelte:fragment>
<svelte:fragment slot="subtitle">
Select the resources you need to migrate to Appwrite. Some resources can be migrated, but
with limitations. <a
Select the resources you need to migrate to {resolvedProfile.platform}. Some resources can
be migrated, but with limitations.
<a
class="link"
href="https://appwrite.io/docs/advanced/migrations"
target="_blank"
@@ -35,6 +35,7 @@
} from '@appwrite.io/pink-icons-svelte';
import { Dependencies } from '$lib/constants';
import { filterRegions } from '$lib/helpers/regions';
import { resolvedProfile } from '$lib/profiles/index.svelte';
const onExit = () => {
formData.reset();
@@ -80,7 +81,9 @@
}
function getProjectName(): string {
return isExisting ? currentSelectedProject.name : newProjName || 'Appwrite project';
return isExisting
? currentSelectedProject.name
: newProjName || `${resolvedProfile.platform} project`;
}
async function createNewProject() {
@@ -361,10 +364,11 @@
</Typography.Text>
{#if isFirebase}
Appwrite does not impose charges for importing data, but please note
that Firebase may have its own pricing for this service
{resolvedProfile.platform} does not impose charges for importing data, but
please note that Firebase may have its own pricing for this service
{:else}
You won't be charged for Appwrite bandwidth usage for importing data
You won't be charged for {resolvedProfile.platform} bandwidth usage for importing
data
{/if}
</Layout.Stack>
</Layout.Stack>
+5 -1
View File
@@ -1,5 +1,9 @@
<script>
import { resolvedProfile } from '$lib/profiles/index.svelte';
</script>
<svelte:head>
<title>User - Appwrite</title>
<title>User - {resolvedProfile.platform}</title>
</svelte:head>
<slot />
@@ -24,6 +24,7 @@
import { Fieldset, Icon, Layout, Tooltip } from '@appwrite.io/pink-svelte';
import { IconInfo } from '@appwrite.io/pink-icons-svelte';
import EstimatedTotalBox from '$lib/components/billing/estimatedTotalBox.svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export let data;
@@ -265,7 +266,7 @@
</script>
<svelte:head>
<title>Apply credits - Appwrite</title>
<title>Apply credits - {resolvedProfile.platform}</title>
</svelte:head>
<Wizard bind:showExitModal href={previousPage} confirmExit title="Apply credits">
@@ -20,6 +20,7 @@
import { writable } from 'svelte/store';
import EstimatedTotalBox from '$lib/components/billing/estimatedTotalBox.svelte';
import { onMount } from 'svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export let data;
@@ -175,7 +176,7 @@
</script>
<svelte:head>
<title>Create organization - Appwrite</title>
<title>Create organization - {resolvedProfile.platform}</title>
</svelte:head>
<Wizard title="Create organization" href={previousPage} bind:showExitModal confirmExit>
@@ -11,6 +11,7 @@
import { isCloud } from '$lib/system';
import { base } from '$app/paths';
import { Alert } from '@appwrite.io/pink-svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export let show = false;
@@ -44,7 +45,7 @@
<Modal title="Create new organization" {error} onSubmit={create} bind:show>
{#if isCloud}
<Alert.Inline status="info" title="Get ready for Appwrite Pro">
<Alert.Inline status="info" title="Get ready for {resolvedProfile.platform} Pro">
We will soon introduce the much-anticipated Pro plan. Your account will continue to have
access to <b>one free organization</b>. If you manage more than one organization, you
will need to either upgrade to the Pro plan, transfer your projects to a Pro
@@ -11,6 +11,7 @@
import { Form } from '$lib/elements/forms/index.js';
import { goto, invalidate } from '$app/navigation';
import { base } from '$app/paths';
import { resolvedProfile } from '$lib/profiles/index.svelte';
let isLoading = false;
let organizationName = 'Personal Projects';
@@ -61,7 +62,7 @@
</script>
<svelte:head>
<title>Create organization - Appwrite</title>
<title>Create organization - {resolvedProfile.platform}</title>
</svelte:head>
<Form onSubmit={createOrganization}>
@@ -13,13 +13,14 @@
import { loadAvailableRegions } from '$routes/(console)/regions';
import { regions as regionsStore } from '$lib/stores/organization';
import { user } from '$lib/stores/user';
import { resolvedProfile } from '$lib/profiles/index.svelte';
let isLoading = false;
let startAnimation = false;
let projectId = ID.unique();
let projectRegion = Region.Fra;
let projectName = 'Appwrite Project';
let projectName = `${resolvedProfile.platform} Project`;
const projectIdForLog = projectId;
@@ -76,7 +77,7 @@
</script>
<svelte:head>
<title>Create project - Appwrite</title>
<title>Create project - {resolvedProfile.platform}</title>
</svelte:head>
<div
class="page-container u-flex-vertical u-cross-child-center u-cross-center"
@@ -89,13 +90,13 @@
width="120"
height="22"
class="u-only-light"
alt="Appwrite Logo" />
alt="{resolvedProfile.platform} Logo" />
<img
src="{base}/images/appwrite-logo-dark.svg"
width="120"
height="22"
class="u-only-dark"
alt="Appwrite Logo" />
alt="{resolvedProfile.platform} Logo" />
<Card.Base variant="primary" padding="l">
<CreateProject
showTitle
@@ -6,12 +6,28 @@ import { isOrganization, tierToPlan } from '$lib/stores/billing';
import { ID, Query, type Models } from '@appwrite.io/console';
import { BillingPlan } from '$lib/constants';
import { redirect } from '@sveltejs/kit';
import { base } from '$app/paths';
import { base, resolve } from '$app/paths';
import { resolvedProfile } from '$lib/profiles/index.svelte';
// TODO: this needs to be cleaned up!
export const load: PageLoad = async ({ parent }) => {
const { account, organizations } = await parent();
const firstOrganization = organizations?.teams[0]?.$id;
if (!resolvedProfile.showOnboarding) {
if (!organizations?.total) {
redirect(303, resolve('/(console)/create-organization'));
} else {
redirect(
303,
resolve('/(console)/organization-[organization]', {
organization: firstOrganization
})
);
}
}
const accountPrefs = account.prefs;
const hasCompletedOnboarding = accountPrefs['newOnboardingCompleted'] ?? false;
@@ -19,7 +35,7 @@ export const load: PageLoad = async ({ parent }) => {
if (hasCompletedOnboarding && !organizations?.total) {
redirect(303, `${base}/onboarding/create-organization`);
} else if (hasCompletedOnboarding && organizations?.total) {
redirect(303, `${base}/organization-${organizations.teams[0].$id}`);
redirect(303, `${base}/organization-${firstOrganization}`);
}
if (!organizations?.total) {
@@ -3,6 +3,7 @@
import { base } from '$app/paths';
import { onMount } from 'svelte';
import { fade } from 'svelte/transition';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export let startAnimation = false;
@@ -13,7 +14,7 @@
'All 37 OAuth providers are ready',
'Global CDN is ready',
'Advanced DDoS protection is ready',
'Appwrite network is ready'
`${resolvedProfile.platform} network is ready`
];
let currentSentenceIndex = 0;
let visible = true;
@@ -73,7 +74,7 @@
</Layout.Stack>
</div>
<div class="title-container">
<Typography.Title size="l">Welcome to Appwrite</Typography.Title>
<Typography.Title size="l">Welcome to {resolvedProfile.platform}</Typography.Title>
</div>
<div class="grid" class:remove-shadow={removeShadow}>
<div class="border-right" style="grid-row: 1 / 6; grid-column-start: 1; "></div>
@@ -10,6 +10,7 @@
import { base } from '$app/paths';
import { isOwner } from '$lib/stores/roles';
import type { LayoutProps } from './$types';
import { resolvedProfile } from '$lib/profiles/index.svelte';
let { data, children }: LayoutProps = $props();
@@ -44,7 +45,7 @@
</script>
<svelte:head>
<title>Organizations - Appwrite</title>
<title>Organizations - {resolvedProfile.platform}</title>
</svelte:head>
{@render children()}
@@ -14,7 +14,6 @@ import { defaultRoles, defaultScopes } from '$lib/constants';
import type { Plan } from '$lib/sdk/billing';
import { loadAvailableRegions } from '$routes/(console)/regions';
import type { Organization } from '$lib/stores/organization';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export const load: LayoutLoad = async ({ params, depends, parent }) => {
const { preferences: prefs } = await parent();
@@ -52,10 +51,8 @@ export const load: LayoutLoad = async ({ params, depends, parent }) => {
loadAvailableRegions(params.organization)
]);
const header = resolvedProfile.id === 'studio' ? undefined : Header;
return {
header,
header: Header,
breadcrumbs: Breadcrumbs,
organization,
currentPlan,
@@ -6,6 +6,7 @@
import { HeaderAlert } from '$lib/layout';
import { hideBillingHeaderRoutes, readOnly, showBudgetAlert } from '$lib/stores/billing';
import { base } from '$app/paths';
import { resolvedProfile } from '$lib/profiles/index.svelte';
$: redirectUrl = `${base}/organization-${$organization.$id}/billing#update-budget`;
</script>
@@ -14,7 +15,7 @@
<HeaderAlert type="error" title="Budget limit reached">
<svelte:fragment>
This organization has reached its budget limit and is now blocked. To continue using
Appwrite services, update the budget limit.
{resolvedProfile.platform} services, update the budget limit.
</svelte:fragment>
<svelte:fragment slot="buttons">
{#if !page.data.currentPlan?.usagePerProject}
@@ -37,6 +37,7 @@
import type { OrganizationUsage } from '$lib/sdk/billing';
import type { Models } from '@appwrite.io/console';
import { toLocaleDate } from '$lib/helpers/date';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export let data;
@@ -318,7 +319,7 @@
</script>
<svelte:head>
<title>Change plan - Appwrite</title>
<title>Change plan - {resolvedProfile.platform}</title>
</svelte:head>
<Wizard title="Change plan" href={previousPage} bind:showExitModal confirmExit>
@@ -26,6 +26,7 @@
import { sdk } from '$lib/stores/sdk';
import { addNotification } from '$lib/stores/notifications';
import RetryDomainModal from '$routes/(console)/organization-[organization]/domains/retryDomainModal.svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export let data;
@@ -113,7 +114,7 @@
src={$app.themeInUse === 'dark'
? `${base}/images/domains/empty-records-dark.svg`
: `${base}/images/domains/empty-records-light.svg`}
title="Get started with Appwrite DNS">
title="Get started with {resolvedProfile.platform} DNS">
<span slot="description">
Navigate to your domain provider and update the nameservers to <InlineCode
code="ns1.appwrite-dns.com"
@@ -33,6 +33,7 @@
import DualTimeView from '$lib/components/dualTimeView.svelte';
import type { PageData } from './$types';
import type { Models } from '@appwrite.io/console';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export let data: PageData;
@@ -89,7 +90,7 @@
<Badge
variant="secondary"
size="s"
content="Served by Appwrite" />
content="Served by {resolvedProfile.platform}" />
</div>
{:else if record.lock && isCAARecord}
<!-- to align with InteractiveText -->
@@ -97,7 +98,7 @@
<Badge
variant="secondary"
size="s"
content="Generated by Appwrite" />
content="Generated by {resolvedProfile.platform}" />
</div>
{:else}
<InteractiveText variant="copy" text={record.value} isVisible />
@@ -25,6 +25,7 @@
import { GRACE_PERIOD_OVERRIDE, isCloud } from '$lib/system';
import { IconGithub, IconPlus } from '@appwrite.io/pink-icons-svelte';
import { Badge, Icon, Layout, Tooltip, Typography } from '@appwrite.io/pink-svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
let areMembersLimited: boolean = $state(false);
@@ -88,33 +89,44 @@
);
const avatars = $derived($members.memberships?.map((m) => m.userName || m.userEmail) ?? []);
const titleName = $derived(resolvedProfile.minimalOrgHeader ? 'Billing' : organization?.name);
const blockSize = $derived(resolvedProfile.minimalOrgHeader ? 'unset' : '152px');
const shouldShowCover = $derived(resolvedProfile.minimalOrgHeader ? true : organization.$id);
</script>
{#if organization?.$id}
<Cover>
{#if shouldShowCover}
<Cover blocksize={blockSize}>
<svelte:fragment slot="header">
<span class="u-flex u-cross-center u-gap-8 u-min-width-0">
<Typography.Title color="--fgcolor-neutral-primary" size="xl" truncate>
{organization.name}
{titleName}
</Typography.Title>
{#if isCloud && organization?.billingPlan === BillingPlan.GITHUB_EDUCATION}
<Badge variant="secondary" content="Education">
<Icon icon={IconGithub} size="s" slot="start" />
</Badge>
{:else if isCloud && organization?.billingPlan === BillingPlan.FREE}
<Badge variant="secondary" content="Free"></Badge>
{/if}
{#if isCloud && organization?.billingTrialStartDate && $daysLeftInTrial > 0 && organization.billingPlan !== BillingPlan.FREE && $plansInfo.get(organization.billingPlan)?.trialDays}
<Tooltip>
<Badge variant="secondary" content="Trial" />
<svelte:fragment slot="tooltip">
{`Your trial ends on ${toLocaleDate(
organization.billingStartDate
)}. ${$daysLeftInTrial} days remaining.`}
</svelte:fragment>
</Tooltip>
{#if !resolvedProfile.minimalOrgHeader}
{#if isCloud && organization?.billingPlan === BillingPlan.GITHUB_EDUCATION}
<Badge variant="secondary" content="Education">
<Icon icon={IconGithub} size="s" slot="start" />
</Badge>
{:else if isCloud && organization?.billingPlan === BillingPlan.FREE}
<Badge variant="secondary" content="Free"></Badge>
{/if}
{#if isCloud && organization?.billingTrialStartDate && $daysLeftInTrial > 0 && organization.billingPlan !== BillingPlan.FREE && $plansInfo.get(organization.billingPlan)?.trialDays}
<Tooltip>
<Badge variant="secondary" content="Trial" />
<svelte:fragment slot="tooltip">
{`Your trial ends on ${toLocaleDate(
organization.billingStartDate
)}. ${$daysLeftInTrial} days remaining.`}
</svelte:fragment>
</Tooltip>
{/if}
{/if}
</span>
<div class="u-margin-inline-start-auto">
<Layout.Stack direction="row" alignItems="center" gap="xl">
{#if $members.total > 1}
@@ -123,7 +135,7 @@
</a>
{/if}
{#if $isOwner}
{#if $isOwner && !resolvedProfile.minimalOrgHeader}
<Tooltip disabled={!areMembersLimited} placement="bottom-end">
<div>
<Button
@@ -147,15 +159,18 @@
</Layout.Stack>
</div>
</svelte:fragment>
<Tabs>
{#each tabs as tab}
<Tab
href={tab.href}
selected={isTabSelected(tab, page.url.pathname, path, tabs)}
event={tab.event}>
{tab.title}
</Tab>
{/each}
</Tabs>
{#if !resolvedProfile.minimalOrgHeader}
<Tabs>
{#each tabs as tab}
<Tab
href={tab.href}
selected={isTabSelected(tab, page.url.pathname, path, tabs)}
event={tab.event}>
{tab.title}
</Tab>
{/each}
</Tabs>
{/if}
</Cover>
{/if}
@@ -4,6 +4,7 @@
import { base } from '$app/paths';
import { sdk } from '$lib/stores/sdk';
import { Submit, trackEvent } from '$lib/actions/analytics';
import { resolvedProfile } from '$lib/profiles/index.svelte';
async function downloadPdf() {
trackEvent(Submit.DownloadDPA);
@@ -26,7 +27,8 @@
</h6>
<p class="text u-margin-block-start-8">
The DPA is a legal document that describes the roles and responsibilities of
Appwrite and the organization when personal data is processed. <a
{resolvedProfile.platform} and the organization when personal data is processed.
<a
class="link"
target="_blank"
rel="noopener noreferrer"
@@ -319,8 +319,11 @@
organization={data.organization}
currentPlan={$currentPlan} />
</Container>
<CreateOrganization bind:show={addOrganization} />
<CreateProject bind:show={showCreate} teamId={page.params.organization} />
<CreateProjectCloud
projects={data.projects.total}
bind:showCreateProjectCloud
@@ -7,6 +7,7 @@
navigateToRoute
} from '$lib/studio/studio-widget';
import { page } from '$app/state';
import { resolvedProfile } from '$lib/profiles/index.svelte';
let anchor: HTMLElement = $state();
@@ -38,7 +39,7 @@
</script>
<svelte:head>
<title>Studio - Appwrite</title>
<title>Studio - {resolvedProfile.platform}</title>
</svelte:head>
<div class="studio-page" bind:this={anchor}></div>
@@ -9,10 +9,6 @@ export const load: PageLoad = async ({ params, parent }) => {
const { account } = await parent();
const baseRedirectUrl = `${base}/project-${params.region}-${params.project}`;
if (PUBLIC_CONSOLE_PROFILE === 'studio') {
redirect(302, `${baseRedirectUrl}/studio`);
}
if (!hasOnboardingDismissed(params.project, account)) {
redirect(302, `${baseRedirectUrl}/get-started`);
} else {
@@ -11,6 +11,7 @@
import { showCreateUser } from './+page.svelte';
import { showCreateTeam } from './teams/+page.svelte';
import { IconPlus } from '@appwrite.io/pink-icons-svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
$: $registerCommands([
{
@@ -105,7 +106,7 @@
</script>
<svelte:head>
<title>Auth - Appwrite</title>
<title>Auth - {resolvedProfile.platform}</title>
</svelte:head>
<slot />
@@ -19,6 +19,7 @@
import type { Models } from '@appwrite.io/console';
import { Icon, Input, Layout, Link, Tooltip } from '@appwrite.io/pink-svelte';
import { IconPlus, IconRefresh } from '@appwrite.io/pink-icons-svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
let numbers: Models.MockNumber[] = $project?.authMockNumbers ?? [];
let initialNumbers = [];
@@ -28,12 +29,15 @@
let isComponentDisabled: boolean =
isSelfHosted || (isCloud && !$currentPlan.supportsMockNumbers);
let emptyStateTitle: string = isSelfHosted
? 'Available on Appwrite Cloud'
? `Available on ${resolvedProfile.platform} Cloud`
: 'Upgrade to add mock phone numbers';
let emptyStateDescription: string = isSelfHosted
? 'Sign up for Cloud to add mock phone numbers to your projects.'
: 'Upgrade to a Pro plan to add mock phone numbers to your project.';
let cta: string = isSelfHosted ? 'Sign up' : 'Upgrade plan';
async function updateMockNumbers() {
@@ -9,6 +9,7 @@
import { Layout, Selector, Input, Badge } from '@appwrite.io/pink-svelte';
import { project } from '../../store';
import { tick } from 'svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
let value = $project?.authLimit !== 0 ? 'limited' : 'unlimited';
@@ -59,7 +60,7 @@
<CardGrid>
<svelte:fragment slot="title">Users limit</svelte:fragment>
Limit new users from signing up for your project, regardless of authentication method. You can still
create users and team memberships from your Appwrite console.
create users and team memberships from your {resolvedProfile.platform} console.
<svelte:fragment slot="aside">
<Layout.Stack>
<Layout.Stack direction="row" alignItems="center">
@@ -1,5 +1,9 @@
<script>
import { resolvedProfile } from '$lib/profiles/index.svelte';
</script>
<svelte:head>
<title>Team - Appwrite</title>
<title>Team - {resolvedProfile.platform}</title>
</svelte:head>
<slot />
@@ -8,11 +8,12 @@
import EmailLight from './email-footer-light.png';
import EmailMobileDark from './email-footer-mobile-dark.png';
import EmailMobileLight from './email-footer-mobile-light.png';
import { resolvedProfile } from '$lib/profiles/index.svelte';
</script>
<CardGrid>
<svelte:fragment slot="title">Email signature</svelte:fragment>
Enable or disable Appwrite branding in your email template signature.
Enable or disable {resolvedProfile.platform} branding in your email template signature.
<svelte:fragment slot="aside">
<EmptyCardImageCloud source="email_signature_card" let:nextTier>
@@ -46,8 +47,10 @@
{/if}
</div>
</svelte:fragment>
<svelte:fragment slot="title">Upgrade to remove Appwrite branding</svelte:fragment>
Upgrade to a {nextTier} plan to remove the Appwrite branding from your emails.
<svelte:fragment slot="title"
>Upgrade to remove {resolvedProfile.platform} branding</svelte:fragment>
Upgrade to a {nextTier} plan to remove the {resolvedProfile.platform} branding from your
emails.
<svelte:fragment let:source slot="cta">
<Button
@@ -1,5 +1,9 @@
<script>
import { resolvedProfile } from '$lib/profiles/index.svelte';
</script>
<svelte:head>
<title>User - Appwrite</title>
<title>User - {resolvedProfile.platform}</title>
</svelte:head>
<slot />
@@ -5,6 +5,7 @@
import { addSubPanel, registerCommands, updateCommandGroupRanks } from '$lib/commandCenter';
import { DatabasesPanel } from '$lib/commandCenter/panels';
import { project } from '../store';
import { resolvedProfile } from '$lib/profiles/index.svelte';
$: $registerCommands([
{
@@ -33,7 +34,7 @@
<svelte:head>
<!-- svelte bug, the table header just stays! -->
{#key page.url.pathname}
<title>Databases - Appwrite</title>
<title>Databases - {resolvedProfile.platform}</title>
{/key}
</svelte:head>
@@ -19,6 +19,7 @@
import { currentPlan } from '$lib/stores/organization';
import { isCloud } from '$lib/system';
import { noWidthTransition } from '$lib/stores/sidebar';
import { resolvedProfile } from '$lib/profiles/index.svelte';
const project = page.params.project;
const databaseId = page.params.database;
@@ -140,7 +141,7 @@
<svelte:head>
<!-- svelte bug, the table header just stays! -->
{#key page.url.pathname}
<title>Database - Appwrite</title>
<title>Database - {resolvedProfile.platform}</title>
{/key}
</svelte:head>
@@ -14,14 +14,15 @@
import { upgradeURL } from '$lib/stores/billing';
import { isCloud } from '$lib/system';
import { Card, Layout, Typography } from '@appwrite.io/pink-svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
const title = isCloud
? 'Backups are available on paid plans'
: 'Database Backups are available on Appwrite Cloud';
: `Database Backups are available on ${resolvedProfile.platform} Cloud`;
const message = isCloud
? "Upgrade now to unlock Appwrite's backups."
: "Sign up now to access Appwrite's backups.";
? `Upgrade now to unlock ${resolvedProfile.platform}'s backups.`
: `Sign up now to access ${resolvedProfile.platform}'s backups.`;
const isDark = $app.themeInUse === 'dark';
@@ -66,6 +66,7 @@
import IndexesSuggestions from '../(suggestions)/indexes.svelte';
import { showIndexesSuggestions, tableColumnSuggestions } from '../(suggestions)';
import { resolvedProfile } from '$lib/profiles/index.svelte';
let editRow: EditRow;
let editRelatedRow: EditRelatedRow;
@@ -344,7 +345,7 @@
</script>
<svelte:head>
<title>{$table?.name ?? 'Table'} - Appwrite</title>
<title>{$table?.name ?? 'Table'} - {resolvedProfile.platform}</title>
</svelte:head>
<slot />
@@ -13,6 +13,7 @@
import { Icon, Layout } from '@appwrite.io/pink-svelte';
import { IconPlus, IconX } from '@appwrite.io/pink-icons-svelte';
import { organization } from '$lib/stores/organization';
import { resolvedProfile } from '$lib/profiles/index.svelte';
const tableId = page.params.table;
@@ -76,8 +77,8 @@
<Form onSubmit={updateDisplayName}>
<CardGrid>
<svelte:fragment slot="title">Display name</svelte:fragment>
Select up to 5 string columns to display as row names in the Appwrite console. These help identify
rows in places like relationships.
Select up to 5 string columns to display as row names in the {resolvedProfile.platform} console.
These help identify rows in places like relationships.
<svelte:fragment slot="aside">
<Layout.Stack gap="s">
@@ -2,6 +2,7 @@
import { addSubPanel, registerCommands } from '$lib/commandCenter';
import { FunctionsPanel } from '$lib/commandCenter/panels';
import { canSeeFunctions } from '$lib/stores/roles';
import { resolvedProfile } from '$lib/profiles/index.svelte';
$registerCommands([
{
@@ -17,7 +18,7 @@
</script>
<svelte:head>
<title>Functions - Appwrite</title>
<title>Functions - {resolvedProfile.platform}</title>
</svelte:head>
<slot />
@@ -20,6 +20,7 @@
import { getLatestTag } from '$lib/helpers/github';
import { writable } from 'svelte/store';
import Link from '$lib/elements/link.svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
let {
data
@@ -160,7 +161,7 @@
</script>
<svelte:head>
<title>Deploy {data.repository.name} - Appwrite</title>
<title>Deploy {data.repository.name} - {resolvedProfile.platform}</title>
</svelte:head>
<Wizard
@@ -23,6 +23,7 @@
import { isCloud } from '$lib/system';
import { humanFileSize } from '$lib/helpers/sizeConvertion';
import { currentPlan } from '$lib/stores/organization';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export let data;
@@ -160,7 +161,7 @@
</script>
<svelte:head>
<title>Create function - Appwrite</title>
<title>Create function - {resolvedProfile.platform}</title>
</svelte:head>
<Wizard
@@ -22,6 +22,7 @@
import RepoCard from './repoCard.svelte';
import { getIconFromRuntime } from '$lib/stores/runtimes';
import { regionalConsoleVariables } from '$routes/(console)/project-[region]-[project]/store';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export let data;
@@ -158,7 +159,7 @@
</script>
<svelte:head>
<title>Create function - Appwrite</title>
<title>Create function - {resolvedProfile.platform}</title>
</svelte:head>
<Wizard
@@ -31,6 +31,7 @@
import { Dependencies } from '$lib/constants';
import { getIconFromRuntime } from '$lib/stores/runtimes';
import { regionalConsoleVariables } from '$routes/(console)/project-[region]-[project]/store';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export let data;
@@ -218,7 +219,7 @@
</script>
<svelte:head>
<title>Create function - Appwrite</title>
<title>Create function - {resolvedProfile.platform}</title>
</svelte:head>
<Wizard
@@ -5,6 +5,7 @@
import { page } from '$app/state';
import { Alert, Code, Layout, Tabs } from '@appwrite.io/pink-svelte';
import { Link } from '$lib/elements';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export let show = false;
@@ -84,8 +85,8 @@ appwrite functions createDeployment ,
<Modal title="Create CLI deployment" bind:show hideFooter>
<span slot="description">
Deploy your function using the Appwrite CLI by running the following command inside your
function's folder.
Deploy your function using the {resolvedProfile.platform} CLI by running the following command
inside your function's folder.
</span>
<Layout.Stack gap="l">
@@ -38,6 +38,7 @@
import { IconInfo, IconPlus, IconX } from '@appwrite.io/pink-icons-svelte';
import Wizard from '$lib/layout/wizard.svelte';
import Aside from './aside.svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
let previousPage: string = `${base}/project-${page.params.region}-${page.params.project}/functions/function-${page.params.function}/executions`;
@@ -145,7 +146,7 @@
</script>
<svelte:head>
<title>Create execution - Appwrite</title>
<title>Create execution - {resolvedProfile.platform}</title>
</svelte:head>
<Wizard title="Create execution" href={previousPage}>
@@ -17,6 +17,7 @@
import { Runtime } from '@appwrite.io/console';
import { IconPlus, IconX } from '@appwrite.io/pink-icons-svelte';
import { Icon, Layout, Link, Table, Typography } from '@appwrite.io/pink-svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
const functionId = page.params.function;
const eventSet: Writable<Set<string>> = writable(new Set($func.events));
@@ -135,11 +136,11 @@
<EventModal bind:show={showEvents} initialValue={eventValue} on:created={handleEvent}>
<Typography.Text
>Select events in your Appwrite project that will trigger your function.
>Select events in your {resolvedProfile.platform} project that will trigger your function.
<Link.Anchor
href="https://appwrite.io/docs/advanced/platform/events"
target="_blank"
rel="noopener noreferrer"
class="link">Learn more about Appwrite Events</Link.Anchor
class="link">Learn more about {resolvedProfile.platform} Events</Link.Anchor
>.</Typography.Text>
</EventModal>
@@ -24,6 +24,7 @@
import { page } from '$app/state';
import { capitalize } from '$lib/helpers/string';
import { IconExternalLink } from '@appwrite.io/pink-icons-svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
$: buttonDisabled =
isCloud && isServiceLimited('functions', $organization?.billingPlan, $functionsList?.total);
@@ -41,7 +42,7 @@
src={$app.themeInUse === 'dark' ? AppwriteLogoDark : AppwriteLogoLight}
width={120}
height={22}
alt="Appwrite" />
alt={resolvedProfile.platform} />
</Layout.Stack>
</PinkCard.Base>
</div>
@@ -1,8 +1,8 @@
import Breadcrumbs from '../overview/breadcrumbs.svelte';
import Header from '../overview/header.svelte';
import type { LayoutLoad } from './$types';
import Header from '../overview/header.svelte';
import Breadcrumbs from '../overview/breadcrumbs.svelte';
export const load: LayoutLoad = async () => {
export const load: LayoutLoad = () => {
return {
header: Header,
breadcrumbs: Breadcrumbs
@@ -1,10 +1,11 @@
<script lang="ts">
import { page } from '$app/state';
import Onboard from '../overview/onboard.svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
</script>
<svelte:head>
<title>Console - Appwrite</title>
<title>Console - {resolvedProfile.platform}</title>
</svelte:head>
<Onboard platforms={page.data.project.platforms} pingCount={page.data.project.pingCount} />
@@ -15,6 +15,7 @@
import { canWriteMessages } from '$lib/stores/roles';
import { project } from '../store';
import { IconPlus } from '@appwrite.io/pink-icons-svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
// TODO: finalize the commands
$: $registerCommands([
@@ -58,7 +59,7 @@
</script>
<svelte:head>
<title>Messaging - Appwrite</title>
<title>Messaging - {resolvedProfile.platform}</title>
</svelte:head>
<slot />
@@ -1,5 +1,9 @@
<script>
import { resolvedProfile } from '$lib/profiles/index.svelte';
</script>
<svelte:head>
<title>Message - Appwrite</title>
<title>Message - {resolvedProfile.platform}</title>
</svelte:head>
<slot />
@@ -1,5 +1,9 @@
<script>
import { resolvedProfile } from '$lib/profiles/index.svelte';
</script>
<svelte:head>
<title>Provider - Appwrite</title>
<title>Provider - {resolvedProfile.platform}</title>
</svelte:head>
<slot />
@@ -4,6 +4,7 @@
import { page } from '$app/state';
import { registerCommands } from '$lib/commandCenter';
import { project } from '$routes/(console)/project-[region]-[project]/store';
import { resolvedProfile } from '$lib/profiles/index.svelte';
const topicId = page.params.topic;
@@ -48,7 +49,7 @@
</script>
<svelte:head>
<title>Topic - Appwrite</title>
<title>Topic - {resolvedProfile.platform}</title>
</svelte:head>
<slot />
@@ -17,6 +17,7 @@
import Scopes from '../api-keys/scopes.svelte';
import { InteractiveText, Layout, Typography } from '@appwrite.io/pink-svelte';
import { getEffectiveScopes } from '../api-keys/scopes.svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export let key: Models.DevKey | Models.Key;
export let keyType: 'api' | 'dev' = 'api';
@@ -111,7 +112,7 @@
</script>
<svelte:head>
<title>{label} key - Appwrite</title>
<title>{label} key - {resolvedProfile.platform}</title>
</svelte:head>
<Container>
@@ -28,6 +28,7 @@
import { writable, type Writable } from 'svelte/store';
import { IconPlus } from '@appwrite.io/pink-icons-svelte';
import { isSmallViewport } from '$lib/stores/viewport';
import { resolvedProfile } from '$lib/profiles/index.svelte';
let period: UsagePeriods = '30d';
$: path = `${base}/project-${page.params.region}-${page.params.project}/overview`;
@@ -94,7 +95,7 @@
</script>
<svelte:head>
<title>Console - Appwrite</title>
<title>Console - {resolvedProfile.platform}</title>
</svelte:head>
<Container overlapCover>
@@ -12,6 +12,7 @@
import { addNotification } from '$lib/stores/notifications';
import { page } from '$app/state';
import { showDevKeysCreateModal } from '$routes/(console)/project-[region]-[project]/overview/store';
import { resolvedProfile } from '$lib/profiles/index.svelte';
let name = '';
let expire = null;
@@ -57,7 +58,7 @@
<Form onSubmit={create} isModal>
<Modal title="Create dev key" bind:open={$showDevKeysCreateModal}>
<span slot="description">
Bypass Appwrite rate limits and CORS errors in your development environment.
Bypass {resolvedProfile.platform} rate limits and CORS errors in your development environment.
</span>
<Layout.Stack>
@@ -45,12 +45,12 @@
<Layout.Stack direction="column" gap={$isSmallViewport ? 's' : 'xs'}>
<Typography.Title color="--fgcolor-neutral-primary" size="xl"
>{#if $user.name === $user.email}
Welcome to Appwrite
Welcome to {resolvedProfile.platform}
{:else}
Welcome, {$user.name}
{/if}</Typography.Title>
<Typography.Text size="m" color="--fgcolor-neutral-secondary"
>Follow a few quick steps to get started with Appwrite</Typography.Text>
>Follow a few quick steps to get started with {resolvedProfile.platform}</Typography.Text>
</Layout.Stack>
<div class="dashboard-header-button">
{#if !hasOnboardingDismissed($project.$id, $user)}
@@ -39,6 +39,7 @@
import { Click, trackEvent } from '$lib/actions/analytics';
import { goto } from '$app/navigation';
import { page } from '$app/state';
import { resolvedProfile } from '$lib/profiles/index.svelte';
function createKey() {
trackEvent(Click.KeyCreateClick, {
@@ -472,6 +473,7 @@
</Layout.Stack>
</div></Card.Base>
</Layout.Stack>
<Layout.Stack
gap="l"
direction={$isSmallViewport ? 'column' : 'row'}>
@@ -531,6 +533,7 @@
</div></Card.Base>
</div>
</Layout.Stack>
<Layout.Stack
gap="l"
direction={$isSmallViewport ? 'column' : 'row'}>
@@ -545,8 +548,8 @@
size="s">MCP server</Typography.Title>
<Typography.Text
color="--fgcolor-neutral-secondary">
Deploy the Appwrite MCP server with a single
click, or view the <Link.Anchor
Deploy the {resolvedProfile.platform} MCP server
with a single click, or view the <Link.Anchor
href="https://appwrite.io/docs"
target="_blank">docs</Link.Anchor> for instructions.
</Typography.Text>
@@ -7,6 +7,7 @@
import CreateWeb from './createWeb.svelte';
import { createPlatform } from './wizard/store';
import { Click, trackEvent } from '$lib/actions/analytics';
import { PlatformType } from '@appwrite.io/console';
export enum Platform {
Web,
@@ -29,7 +30,7 @@
platform: Platform,
name: string,
key: string,
type: string
type: PlatformType
) {
createPlatform.set({
name: name,
@@ -26,6 +26,7 @@
import OnboardingPlatformCard from './components/OnboardingPlatformCard.svelte';
import { PlatformType } from '@appwrite.io/console';
import { project } from '../../store';
import { resolvedProfile } from '$lib/profiles/index.svelte';
let showExitModal = false;
let isPlatformCreated = false;
@@ -94,8 +95,7 @@
[PlatformType.Flutterweb]: {
name: 'My Web app',
hostname: 'localhost',
tooltip:
'The hostname that your website will use to interact with the Appwrite APIs in production or development environments. No protocol or port number required.'
tooltip: `The hostname that your website will use to interact with the ${resolvedProfile.platform} APIs in production or development environments. No protocol or port number required.`
}
};
@@ -26,6 +26,7 @@
import OnboardingPlatformCard from './components/OnboardingPlatformCard.svelte';
import { PlatformType } from '@appwrite.io/console';
import { project } from '../../store';
import { resolvedProfile } from '$lib/profiles/index.svelte';
let showExitModal = false;
let isPlatformCreated = false;
@@ -228,7 +229,7 @@ EXPO_PUBLIC_APPWRITE_ENDPOINT=${sdk.forProject(page.params.region, page.params.p
</div>
<Typography.Text variant="m-500"
>2. Add your Appwrite credentials to <InlineCode
>2. Add your {resolvedProfile.platform} credentials to <InlineCode
size="s"
code=".env.example" /> then rename it to <InlineCode
size="s"
@@ -46,6 +46,7 @@
} from './components/index';
import { extendedHostnameRegex } from '$lib/helpers/string';
import { project } from '../../store';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export let key;
@@ -256,8 +257,8 @@ ${prefix}APPWRITE_ENDPOINT = "${sdk.forProject(page.params.region, page.params.p
<Icon icon={IconInfo} size="s" />
<span slot="tooltip">
The hostname that your website will use to interact with the
Appwrite APIs in production or development environments. No
protocol or port number required.
{resolvedProfile.platform} APIs in production or development
environments. No protocol or port number required.
</span>
</Tooltip>
</InputText></Fieldset>
@@ -5,6 +5,7 @@
import { registerCommands, updateCommandGroupRanks } from '$lib/commandCenter';
import { canWriteProjects } from '$lib/stores/roles';
import { IconPlus } from '@appwrite.io/pink-icons-svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
$: $registerCommands([
{
@@ -28,7 +29,7 @@
</script>
<svelte:head>
<title>Settings - Appwrite</title>
<title>Settings - {resolvedProfile.platform}</title>
</svelte:head>
<slot />
@@ -10,6 +10,7 @@
import { Click, trackEvent } from '$lib/actions/analytics';
import Table from './table.svelte';
import { ResponsiveContainerHeader } from '$lib/layout';
import { resolvedProfile } from '$lib/profiles/index.svelte';
let { data } = $props();
</script>
@@ -54,7 +55,7 @@
? `${base}/images/domains/empty-domain-dark.svg`
: `${base}/images/domains/empty-domain-light.svg`}
title="Use a custom domain for your API"
description="Connect your own domain to Appwrite, so your API is accessible from a custom URL instead of the default Appwrite endpoint.">
description={`Connect your own domain to ${resolvedProfile.platform}, so your API is accessible from a custom URL instead of the default ${resolvedProfile.platform} endpoint.`}>
<svelte:fragment slot="actions">
<Button
external
@@ -92,7 +92,7 @@
<svelte:fragment slot="tooltip" let:toggle>
<ActionMenu.Root>
{#if domain.status !== 'verified' && domain.status !== 'verifiying'}
{#if domain.status !== 'verified' && domain.status !== 'verifying'}
<ActionMenu.Item.Button
leadingIcon={IconRefresh}
on:click={(e) => {
@@ -31,6 +31,7 @@
} from '@appwrite.io/pink-icons-svelte';
import { capitalize } from '$lib/helpers/string';
import { page } from '$app/state';
import { resolvedProfile } from '$lib/profiles/index.svelte';
const onExit = () => {
resetImportStores();
@@ -113,7 +114,7 @@
onDestroy(onExit);
const providers: Record<Provider, string> = {
appwrite: 'Appwrite self-hosted',
appwrite: `${resolvedProfile.platform} self-hosted`,
firebase: 'Firebase',
supabase: 'Supabase',
nhost: 'NHost'
@@ -240,10 +241,11 @@
</Typography.Text>
{#if isFirebase}
Appwrite does not impose charges for importing data, but please note
that Firebase may have its own pricing for this service
{resolvedProfile.platform} does not impose charges for importing data, but
please note that Firebase may have its own pricing for this service
{:else}
You won't be charged for Appwrite bandwidth usage for importing data
You won't be charged for {resolvedProfile.platform} bandwidth usage for importing
data
{/if}
</Layout.Stack>
</Layout.Stack>
@@ -31,6 +31,7 @@
import DualTimeView from '$lib/components/dualTimeView.svelte';
import { Click, trackEvent } from '$lib/actions/analytics';
import { page } from '$app/state';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export let data;
let showExport = false;
@@ -149,7 +150,7 @@
<Container>
<CardGrid>
<svelte:fragment slot="title">Import project data</svelte:fragment>
Import data from another platform or from a different Appwrite instance.
Import data from another platform or from a different {resolvedProfile.platform} instance.
<Link.Anchor
href="https://appwrite.io/docs/advanced/migrations"
target="_blank"
@@ -218,7 +219,7 @@
{#if isSelfHosted}
<CardGrid>
<svelte:fragment slot="title">Deploy to Cloud</svelte:fragment>
Export data from your project to Appwrite Cloud.
Export data from your project to {resolvedProfile.platform} Cloud.
<Link.Anchor
href="https://appwrite.io/docs/advanced/migrations/self-hosted"
target="_blank"
@@ -1,6 +1,7 @@
import { Dependencies } from '$lib/constants.js';
import { sdk } from '$lib/stores/sdk';
import { Query } from '@appwrite.io/console';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export async function load({ depends, params }) {
depends(Dependencies.MIGRATIONS);
@@ -9,9 +10,19 @@ export async function load({ depends, params }) {
const { migrations } = await sdk.forProject(params.region, params.project).migrations.list({
queries: [
// hides backups/restorations from migrations page.
Query.equal('source', ['Appwrite', 'Firebase', 'NHost', 'Supabase']),
Query.equal('source', [
`${resolvedProfile.platform}`,
'Firebase',
'NHost',
'Supabase'
]),
Query.or([
Query.equal('destination', ['Appwrite', 'Firebase', 'NHost', 'Supabase']),
Query.equal('destination', [
`${resolvedProfile.platform}`,
'Firebase',
'NHost',
'Supabase'
]),
Query.isNull('destination')
])
]
@@ -30,6 +30,7 @@
import type { ComponentType } from 'svelte';
import { Link } from '$lib/elements';
import { regionalConsoleVariables, mcpTools } from '../store';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export let total: number;
export let limit: number;
@@ -170,8 +171,8 @@
</Layout.Stack>
{:else if isSelfHosted && !isVcsEnabled}
<Alert.Inline status="info" title="Installing Git on a self-hosted instance">
Before installing Git in a locally hosted Appwrite project, ensure your environment
variables are configured.
Before installing Git in a locally hosted {resolvedProfile.platform} project, ensure
your environment variables are configured.
<svelte:fragment slot="actions">
<FormButton
compact
@@ -209,7 +210,8 @@
<Card.Base padding="none" border="dashed">
<Empty type="secondary" title="MCP installation">
<svelte:fragment slot="description">
Deploy the Appwrite MCP server with a single click, or view the <PinkLink.Anchor
Deploy the {resolvedProfile.platform} MCP server with a single click, or view the
<PinkLink.Anchor
href="https://appwrite.io/docs"
target="_blank"
rel="noreferrer">docs</PinkLink.Anchor> for instructions.
@@ -12,6 +12,7 @@
import { project } from '../store';
import { canWriteProjects } from '$lib/stores/roles';
import { getProjectEndpoint } from '$lib/helpers/project';
import { resolvedProfile } from '$lib/profiles/index.svelte';
let name: string = null;
@@ -44,7 +45,7 @@
<CardGrid>
<svelte:fragment slot="title">API credentials</svelte:fragment>
Access Appwrite services using this project's API Endpoint and Project ID.
Access {resolvedProfile.platform} services using this project's API Endpoint and Project ID.
<svelte:fragment slot="aside">
<CopyInput label="Project ID" value={$project.$id} />
<CopyInput label="API Endpoint" value={getProjectEndpoint()} />
@@ -1,5 +1,9 @@
<script>
import { resolvedProfile } from '$lib/profiles/index.svelte';
</script>
<svelte:head>
<title>Webhook - Appwrite</title>
<title>Webhook - {resolvedProfile.platform}</title>
</svelte:head>
<slot />
@@ -13,6 +13,7 @@
import { webhook } from './store';
import { Icon, Layout, Link, Table, Typography } from '@appwrite.io/pink-svelte';
import { IconPlus, IconX } from '@appwrite.io/pink-icons-svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
const projectId = page.params.project;
const eventSet: Writable<Set<string>> = writable(new Set());
@@ -114,7 +115,7 @@
<EventModal bind:show={showCreateEvent} on:created={handleEvent}>
<Typography.Text>
Select events in your Appwrite project that will trigger your webhook. <Link.Anchor
Select events in your {resolvedProfile.platform} project that will trigger your webhook. <Link.Anchor
href="https://appwrite.io/docs/advanced/platform/events"
target="_blank"
rel="noopener noreferrer"
@@ -5,13 +5,15 @@
import Regenerate from './regenerate.svelte';
import { webhook } from './store';
import { Click, trackEvent } from '$lib/actions/analytics';
import { resolvedProfile } from '$lib/profiles/index.svelte';
let showRegenerate = false;
</script>
<CardGrid>
<svelte:fragment slot="title">Signature key</svelte:fragment>
Add the Signature Key to the X-Appwrite-Webhook-Signature header to validate your webhooks.
Add the Signature Key to the X-{resolvedProfile.platform}-Webhook-Signature header to validate
your webhooks.
<Link.Anchor
href="https://appwrite.io/docs/advanced/platform/webhooks#verification"
target="_blank"
@@ -4,6 +4,7 @@
import { EventModal } from '$lib/components';
import { Icon, Typography, Link, Table, Layout, Fieldset } from '@appwrite.io/pink-svelte';
import { IconPlus, IconX } from '@appwrite.io/pink-icons-svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
let showCreate = false;
@@ -58,7 +59,8 @@
{#if showCreate}
<EventModal bind:show={showCreate} on:created={handleCreated}>
<Typography.Text>
Select events in your Appwrite project that will trigger your webhook. <Link.Anchor
Select events in your {resolvedProfile.platform} project that will trigger your webhook.
<Link.Anchor
href="https://appwrite.io/docs/advanced/platform/events"
target="_blank"
rel="noopener noreferrer"
@@ -1,5 +1,9 @@
<script>
import { resolvedProfile } from '$lib/profiles/index.svelte';
</script>
<svelte:head>
<title>Sites - Appwrite</title>
<title>Sites - {resolvedProfile.platform}</title>
</svelte:head>
<slot />
@@ -21,6 +21,7 @@
import { writable } from 'svelte/store';
import { getLatestTag } from '$lib/helpers/github';
import Link from '$lib/elements/link.svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
let {
data
@@ -198,7 +199,7 @@
</script>
<svelte:head>
<title>Deploy {data.repository.name} - Appwrite</title>
<title>Deploy {data.repository.name} - {resolvedProfile.platform}</title>
</svelte:head>
<Wizard
@@ -21,6 +21,7 @@
import { isCloud } from '$lib/system';
import { currentPlan } from '$lib/stores/organization';
import Domain from '../domain.svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export let data;
let showExitModal = false;
@@ -152,7 +153,7 @@
</script>
<svelte:head>
<title>Create site - Appwrite</title>
<title>Create site - {resolvedProfile.platform}</title>
</svelte:head>
<Wizard
@@ -10,6 +10,7 @@
import { installation, repository } from '$lib/stores/vcs.js';
import type { Models } from '@appwrite.io/console';
import { Fieldset, Layout, Typography } from '@appwrite.io/pink-svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
let { data } = $props();
@@ -60,9 +61,9 @@
Missing a repository?
</Typography.Text>
<Typography.Text variation="m-400">
Make sure Appwrite has access to your GitHub repositories. If you chose
specific repos, you may need to update your permissions to include the
missing one.
Make sure {resolvedProfile.platform} has access to your GitHub repositories.
If you chose specific repos, you may need to update your permissions to include
the missing one.
</Typography.Text>
</Layout.Stack>
<Layout.Stack gap="s" direction="row">
@@ -27,6 +27,7 @@
import Configuration from '../../configuration.svelte';
import Domain from '../../domain.svelte';
import { regionalConsoleVariables } from '$routes/(console)/project-[region]-[project]/store';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export let data;
let showExitModal = false;
@@ -155,7 +156,7 @@
</script>
<svelte:head>
<title>Create site - Appwrite</title>
<title>Create site - {resolvedProfile.platform}</title>
</svelte:head>
<Wizard
@@ -10,6 +10,7 @@
import { capitalize } from '$lib/helpers/string';
import { app } from '$lib/stores/app.js';
import { getFrameworkIcon } from '$lib/stores/sites.js';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export let data;
@@ -77,7 +78,7 @@
</script>
<svelte:head>
<title>Create site - Appwrite</title>
<title>Create site - {resolvedProfile.platform}</title>
</svelte:head>
<Wizard
@@ -38,6 +38,7 @@
import { getFrameworkIcon } from '$lib/stores/sites';
import { regionalConsoleVariables } from '$routes/(console)/project-[region]-[project]/store';
import { getTemplateSourceUrl } from '$lib/helpers/templateSource';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export let data;
@@ -193,7 +194,7 @@
</script>
<svelte:head>
<title>Create site - Appwrite</title>
<title>Create site - {resolvedProfile.platform}</title>
</svelte:head>
<Wizard
@@ -1,8 +1,9 @@
<script lang="ts">
import { resolvedProfile } from '$lib/profiles/index.svelte';
</script>
<svelte:head>
<title>Site - Appwrite</title>
<title>Site - {resolvedProfile.platform}</title>
</svelte:head>
<slot />
@@ -6,6 +6,7 @@
import { Button } from '$lib/elements/forms';
import type { Models } from '@appwrite.io/console';
import { Alert, Code, Layout, Tabs } from '@appwrite.io/pink-svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
export let show = false;
export let site: Models.Site;
@@ -77,8 +78,8 @@ appwrite sites createDeployment ,
<Modal title="Create CLI deployment" bind:show hideFooter>
<span slot="description">
Deploy your site using the Appwrite CLI by running the following command inside your sites's
folder.
Deploy your site using the {resolvedProfile.platform} CLI by running the following command inside
your sites's folder.
</span>
<Layout.Stack gap="l">
@@ -8,6 +8,7 @@
import { project } from '../store';
import { showCreateBucket } from './+page.svelte';
import { IconPlus } from '@appwrite.io/pink-icons-svelte';
import { resolvedProfile } from '$lib/profiles/index.svelte';
$: $registerCommands([
{
@@ -47,7 +48,7 @@
</script>
<svelte:head>
<title>Storage - Appwrite</title>
<title>Storage - {resolvedProfile.platform}</title>
</svelte:head>
<slot />

Some files were not shown because too many files have changed in this diff Show More