diff --git a/package.json b/package.json
index dc6a20723..b7076fd06 100644
--- a/package.json
+++ b/package.json
@@ -22,8 +22,8 @@
"@appwrite.io/console": "https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@9193",
"@appwrite.io/pink": "0.25.0",
"@appwrite.io/pink-icons": "0.25.0",
- "@appwrite.io/pink-icons-svelte": "1.0.0-next.7",
- "@appwrite.io/pink-svelte": "https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@28b6051",
+ "@appwrite.io/pink-icons-svelte": "https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@72b1958",
+ "@appwrite.io/pink-svelte": "https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@1fe7674",
"@popperjs/core": "^2.11.8",
"@sentry/sveltekit": "^8.38.0",
"@stripe/stripe-js": "^3.5.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index bafa67859..ad9f34fc3 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -18,11 +18,11 @@ importers:
specifier: 0.25.0
version: 0.25.0
'@appwrite.io/pink-icons-svelte':
- specifier: 1.0.0-next.7
- version: 1.0.0-next.7(svelte@4.2.19)
+ specifier: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@72b1958
+ version: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@72b1958(svelte@4.2.19)
'@appwrite.io/pink-svelte':
- specifier: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@28b6051
- version: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@28b6051(react-dom@18.3.1(react@18.3.1))(svelte@4.2.19)
+ specifier: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@1fe7674
+ version: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@1fe7674(react-dom@18.3.1(react@18.3.1))(svelte@4.2.19)
'@popperjs/core':
specifier: ^2.11.8
version: 2.11.8
@@ -218,13 +218,14 @@ packages:
resolution: {tarball: https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@9193}
version: 1.2.1
- '@appwrite.io/pink-icons-svelte@1.0.0-next.7':
- resolution: {integrity: sha512-Bmff3YGEliIetqc3UyjzJNLg88FIC6UXYwTzGqHm+0QLCRJxwAFpTkfTCLIqMe5PUqGshq6jM9SPyCCSVVS3aw==}
+ '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@1fe7674343bab0dc86d4cbc98c74055c9e87be0b':
+ resolution: {tarball: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@1fe7674343bab0dc86d4cbc98c74055c9e87be0b}
+ version: 1.0.0-next.7
peerDependencies:
svelte: ^4.0.0
- '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@28b6051f819c0d832e1edfa77d9e3cc8850f7428':
- resolution: {tarball: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@28b6051f819c0d832e1edfa77d9e3cc8850f7428}
+ '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@72b1958':
+ resolution: {tarball: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@72b1958}
version: 1.0.0-next.7
peerDependencies:
svelte: ^4.0.0
@@ -232,8 +233,8 @@ packages:
'@appwrite.io/pink-icons@0.25.0':
resolution: {integrity: sha512-0O3i2oEuh5mWvjO80i+X6rbzrWLJ1m5wmv2/M3a1p2PyBJsFxN8xQMTEmTn3Wl/D26SsM7SpzbdW6gmfgoVU9Q==}
- '@appwrite.io/pink-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@28b6051':
- resolution: {tarball: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@28b6051}
+ '@appwrite.io/pink-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@1fe7674':
+ resolution: {tarball: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@1fe7674}
version: 1.0.0-next.85
peerDependencies:
react-dom: ^18.0.0
@@ -4040,19 +4041,19 @@ snapshots:
'@appwrite.io/console@https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@9193': {}
- '@appwrite.io/pink-icons-svelte@1.0.0-next.7(svelte@4.2.19)':
+ '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@1fe7674343bab0dc86d4cbc98c74055c9e87be0b(svelte@4.2.19)':
dependencies:
svelte: 4.2.19
- '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@28b6051f819c0d832e1edfa77d9e3cc8850f7428(svelte@4.2.19)':
+ '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@72b1958(svelte@4.2.19)':
dependencies:
svelte: 4.2.19
'@appwrite.io/pink-icons@0.25.0': {}
- '@appwrite.io/pink-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@28b6051(react-dom@18.3.1(react@18.3.1))(svelte@4.2.19)':
+ '@appwrite.io/pink-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@1fe7674(react-dom@18.3.1(react@18.3.1))(svelte@4.2.19)':
dependencies:
- '@appwrite.io/pink-icons-svelte': https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@28b6051f819c0d832e1edfa77d9e3cc8850f7428(svelte@4.2.19)
+ '@appwrite.io/pink-icons-svelte': https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@1fe7674343bab0dc86d4cbc98c74055c9e87be0b(svelte@4.2.19)
'@floating-ui/dom': 1.6.12
'@melt-ui/pp': 0.3.2(@melt-ui/svelte@0.86.2(svelte@4.2.19))(svelte@4.2.19)
'@melt-ui/svelte': 0.86.2(svelte@4.2.19)
diff --git a/src/lib/components/breadcrumbsConsole.svelte b/src/lib/components/breadcrumbs.svelte
similarity index 92%
rename from src/lib/components/breadcrumbsConsole.svelte
rename to src/lib/components/breadcrumbs.svelte
index 140c6b79e..f5bf1cd89 100644
--- a/src/lib/components/breadcrumbsConsole.svelte
+++ b/src/lib/components/breadcrumbs.svelte
@@ -2,7 +2,6 @@
import { createMenubar, melt } from '@melt-ui/svelte';
import { Badge, Icon, BottomSheet, type SheetMenu } from '@appwrite.io/pink-svelte';
import { IconChevronDown, IconChevronRight, IconPlus } from '@appwrite.io/pink-icons-svelte';
- import { onMount } from 'svelte';
type Project = {
name: string;
@@ -132,25 +131,12 @@
}
};
- onMount(() => {
- if (window) {
- const mediaQuery = window.matchMedia('(max-width: 768px)');
- const updateViewport = () => (isSmallViewport = mediaQuery.matches);
-
- // Initial check
- updateViewport();
-
- // Listen for changes
- mediaQuery.addEventListener('change', updateViewport);
-
- return () => {
- // Cleanup listener
- mediaQuery.removeEventListener('change', updateViewport);
- };
- }
- });
+ function updateViewport() {
+ isSmallViewport = window.matchMedia('(max-width: 768px)').matches;
+ }
+
{#if !isSmallViewport}
/
@@ -159,7 +145,7 @@
class="trigger"
use:melt={$triggerOrganizations}
aria-label="Open organizations tab">
-
{selectedOrg?.name ?? 'Organization'}
+
{selectedOrg?.name ?? 'Organization'}
{#if selectedOrg?.tierName}
- {selectedOrg?.name ?? 'Organization'}
+ {selectedOrg?.name ?? 'Organization'}
@@ -239,7 +225,7 @@
class="trigger"
use:melt={$triggerProjects}
aria-label="Open projects tab">
- {selectedProject.name}
+ {selectedProject.name}
{:else}
@@ -250,7 +236,7 @@
projectsBottomSheetOpen = true;
}}
aria-label="Open projects tab">
- {selectedProject.name}
+ {selectedProject.name}
{/if}
@@ -295,7 +281,7 @@
flex-direction: column;
outline: none !important;
min-width: 220px;
- border-radius: 12px;
+ border-radius: var(--border-radius-m, 12px);
border: 1px solid var(--color-border-neutral, #ededf0);
background: var(--color-bgcolor-neutral-primary, #fff);
z-index: 20;
@@ -328,7 +314,7 @@
outline: none;
display: flex;
align-items: center;
- cursor: default;
+ cursor: pointer;
margin: 0 4px;
padding: var(--space-3, 6px) var(--space-4, 8px) var(--space-3, 6px) var(--space-5, 10px);
@@ -343,7 +329,8 @@
letter-spacing: -0.063px;
}
- .orgNameProject {
+ .orgName,
+ .projectName {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
@@ -353,7 +340,7 @@
max-width: 95px;
}
- @media (min-width: 390px) {
+ @media (min-width: 400px) {
max-width: 105px;
}
@@ -374,7 +361,7 @@
margin-bottom: 4px;
}
- .item[data-highlighted] {
+ :global(.item[data-highlighted]) {
border-radius: var(--border-radius-S, 8px);
background: var(--color-overlay-neutral-hover, rgba(25, 25, 28, 0.03));
}
@@ -404,12 +391,12 @@
background: var(--color-overlay-neutral-hover, rgba(25, 25, 28, 0.03));
}
- .trigger[data-highlighted] {
+ :global(.trigger[data-highlighted]) {
outline: none;
background: var(--color-bgcolor-neutral-secondary, #f4f4f7);
}
- .trigger[data-highlighted]:focus {
+ :global(.trigger[data-highlighted]:focus) {
outline: none;
box-shadow: 0 0 0 2px var(--color-bgcolor-neutral-secondary, #f4f4f7);
}
diff --git a/src/lib/components/index.ts b/src/lib/components/index.ts
index 991341e5f..c760d57ad 100644
--- a/src/lib/components/index.ts
+++ b/src/lib/components/index.ts
@@ -78,5 +78,5 @@ export { default as ImagePreview } from './imagePreview.svelte';
export { default as MfaChallengeFormList } from './mfaChallengeFormList.svelte';
export { default as BottomModalAlert } from './bottomModalAlert.svelte';
export { default as Navbar } from './navbar.svelte';
-export { default as BreadcrumbsConsole } from './breadcrumbsConsole.svelte';
+export { default as Breadcrumbs } from './breadcrumbs.svelte';
export { default as Sidebar } from './sidebar.svelte';
diff --git a/src/lib/components/navbar.svelte b/src/lib/components/navbar.svelte
index c9a885fbf..034e50dde 100644
--- a/src/lib/components/navbar.svelte
+++ b/src/lib/components/navbar.svelte
@@ -22,14 +22,13 @@
IconSun,
IconUser
} from '@appwrite.io/pink-icons-svelte';
- import { DropList, Support, BreadcrumbsConsole } from '$lib/components';
+ import { DropList, Support, Breadcrumbs } from '$lib/components';
import { Feedback } from '$lib/components/feedback';
import { feedback } from '$lib/stores/feedback';
import { isMac } from '$lib/helpers/platform';
import { base } from '$app/paths';
import { logout } from '$lib/helpers/logout';
import { app } from '$lib/stores/app';
- import { onMount } from 'svelte';
let showSupport = false;
let isSmallViewport = false;
@@ -38,32 +37,17 @@
links: Array<{ label: string; href: string }>;
organizations: Array<{
name: string;
- id: string;
- isSelected?: boolean;
- tier: string;
- projects: Array<{ name: string; id: string }>;
+ $id: string;
+ isSelected: boolean;
+ tierName: string;
+ projects: Array<{ name: string; $id: string; isSelected: boolean }>;
}>;
- showSideNavigation: boolean;
showAccountMenu: boolean;
};
- onMount(() => {
- if (window) {
- const mediaQuery = window.matchMedia('(max-width: 768px)');
- const updateViewport = () => (isSmallViewport = mediaQuery.matches);
-
- // Initial check
- updateViewport();
-
- // Listen for changes
- mediaQuery.addEventListener('change', updateViewport);
-
- return () => {
- // Cleanup listener
- mediaQuery.removeEventListener('change', updateViewport);
- };
- }
- });
+ function updateViewport() {
+ isSmallViewport = window.matchMedia('(max-width: 768px)').matches;
+ }
function updateTheme(theme: 'light' | 'dark' | 'system') {
const themeInUse =
@@ -91,10 +75,10 @@
export let organizations: $$Props['organizations'];
export let avatar: $$Props['avatar'];
export let sideBarIsOpen: $$Props['sideBarIsOpen'] = false;
- export let showSideNavigation: boolean;
export let showAccountMenu = false;
+
@@ -105,7 +89,7 @@
}}>

-
+
@@ -235,7 +219,8 @@
}
}
]
- }
+ },
+ bottom: undefined
}
}
]
@@ -292,10 +277,6 @@
display: none;
}
- .only-mobile-tablet {
- display: block;
- }
-
@media (min-width: 768px) {
.only-desktop {
display: block;
@@ -305,11 +286,6 @@
}
}
- @media (min-width: 1024px) {
- .only-mobile-tablet {
- display: none;
- }
- }
:global(.icons div:first-of-type:not(:has(.progress-card))) {
height: 20px;
}
diff --git a/src/lib/components/sidebar.svelte b/src/lib/components/sidebar.svelte
index 2c36140a4..772dd0465 100644
--- a/src/lib/components/sidebar.svelte
+++ b/src/lib/components/sidebar.svelte
@@ -43,7 +43,7 @@
export let state: $$Props['state'] = 'closed';
export let project: $$Props['project'];
export let avatar: $$Props['avatar'];
- export let progressCard: $$Props['progressCard'];
+ export let progressCard: $$Props['progressCard'] = undefined;
export let sideBarIsOpen: boolean;
export let showAccountMenu: boolean;
export let subNavigation = undefined;
@@ -91,7 +91,7 @@
{
sideBarIsOpen = false;
}}>
@@ -370,10 +370,10 @@
flex-direction: row;
justify-content: center;
align-items: center;
- gap: 10px;
- margin-bottom: 12px;
+ gap: var(--space-5, 10px);
+ margin-block-end: var(--space-6, 12px);
align-self: stretch;
- border-radius: 8px;
+ border-radius: var(--border-radius-s, 8px);
border: 1px solid var(--color-border-neutral, #ededf0);
background: var(--color-bgcolor-neutral-default, #fafafb);
transition: all 0.2s ease-in-out;
@@ -412,7 +412,7 @@
}
.icons .progress-card {
- width: 32px;
+ width: var(--base-32, 32px);
border-color: transparent;
background: transparent;
}
diff --git a/src/lib/layout/shell.svelte b/src/lib/layout/shell.svelte
index b79dbd090..31f79a5c2 100644
--- a/src/lib/layout/shell.svelte
+++ b/src/lib/layout/shell.svelte
@@ -5,7 +5,7 @@
import { log } from '$lib/stores/logs';
import { wizard } from '$lib/stores/wizard';
import { activeHeaderAlert } from '$routes/(console)/store';
- import { type ComponentType, onMount, setContext } from 'svelte';
+ import { type ComponentType, setContext } from 'svelte';
import { writable } from 'svelte/store';
import { showSubNavigation } from '$lib/stores/layout';
import { organization, organizationList } from '$lib/stores/organization';
@@ -74,54 +74,27 @@
$: state = sideBarIsOpen ? 'open' : 'closed';
$: state = subNavigation && !isSmallViewport ? 'icons' : sideBarIsOpen ? 'open' : 'closed';
- onMount(() => {
- if (window) {
- const mediaQuery = window.matchMedia('(max-width: 768px)');
- const updateViewport = () => (isSmallViewport = mediaQuery.matches);
- const handleResize = () => {
- sideBarIsOpen = false;
- showAccountMenu = false;
- };
-
- // Initial check
- updateViewport();
- handleResize();
-
- // Listen for changes
- mediaQuery.addEventListener('change', updateViewport);
- window.addEventListener('resize', handleResize);
-
- return () => {
- // Cleanup listener
- mediaQuery.removeEventListener('change', updateViewport);
- window.removeEventListener('resize', handleResize);
- };
- }
- });
+ function handleResize() {
+ isSmallViewport = window.matchMedia('(max-width: 768px)').matches;
+ sideBarIsOpen = false;
+ showAccountMenu = false;
+ }
$: progressCard = function getProgressCard() {
if (selectedProject) {
const currentProject = projects.find((project) => project.$id === selectedProject.$id);
- if (currentProject && currentProject.platforms.length === 0) {
- return {
- title: 'Get started',
- percentage: 33
- };
- } else {
- return {
- title: 'Get started',
- percentage: 100
- };
- }
+ return {
+ title: 'Get started',
+ percentage: currentProject && currentProject.platforms.length ? 33 : 100
+ };
}
return undefined;
};
-
-
+
{#if showHeader}
-
+
{/if}
{/if}
-
{#if showFooter && showSideNavigation}
@@ -178,7 +145,7 @@
.content {
width: 100%;
- margin-top: 30px;
+ margin-block-start: 30px;
@media (min-width: 1024px) {
width: 100%;
diff --git a/src/routes/(console)/+layout.ts b/src/routes/(console)/+layout.ts
index 012399c1e..8008c6c66 100644
--- a/src/routes/(console)/+layout.ts
+++ b/src/routes/(console)/+layout.ts
@@ -51,6 +51,7 @@ export const load: LayoutLoad = async ({ params, fetch, depends, parent }) => {
roles: [],
scopes: [],
projects: projects,
- currentProjectId: params.project ?? ''
+ currentProjectId: params.project ?? '',
+ organizations: await sdk.forConsole.teams.list()
};
};
diff --git a/src/routes/(console)/onboarding/+page.svelte b/src/routes/(console)/onboarding/+page.svelte
index 021226bc9..b4a9b4aba 100644
--- a/src/routes/(console)/onboarding/+page.svelte
+++ b/src/routes/(console)/onboarding/+page.svelte
@@ -103,7 +103,7 @@
- Create a new organization!
+ Create a new organization