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 @@ }}>
{logo.alt} - +
@@ -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
region.$id !== 'default') + .sort((regionA, regionB) => { + if (regionA.disabled && !regionB.disabled) { + return 1; + } + return regionA.name > regionB.name ? 1 : -1; + }) + .map((region) => { + return { + label: region.name, + value: region.$id, + leadingHtml: `Region flag`, + disabled: region.disabled + }; + }); + }
region.$id !== 'default') - .sort((regionA, regionB) => { - if (regionA.disabled && !regionB.disabled) { - return 1; - } - return regionA.name > regionB.name ? 1 : -1; - }) - .map((region) => { - return { - label: region.name, - value: region.$id, - leadingHtml: `Region flag`, - disabled: region.disabled - }; - })} + options={getRegions()} label="Region" /> {/if}
diff --git a/src/routes/(console)/project-[project]/getstarted/+page.svelte b/src/routes/(console)/project-[project]/get-started/+page.svelte similarity index 100% rename from src/routes/(console)/project-[project]/getstarted/+page.svelte rename to src/routes/(console)/project-[project]/get-started/+page.svelte diff --git a/src/routes/(console)/project-[project]/overview/onboard.svelte b/src/routes/(console)/project-[project]/overview/onboard.svelte index 9354e4f3f..054941161 100644 --- a/src/routes/(console)/project-[project]/overview/onboard.svelte +++ b/src/routes/(console)/project-[project]/overview/onboard.svelte @@ -46,7 +46,7 @@ size="s" on:click={() => { setHasOnboardingDismissed(projectId); - if (location.href.endsWith('getstarted')) { + if (location.href.endsWith('get-started')) { goto(`${base}/project-${projectId}`); } else { location.reload();