From 3f1a279c005870ef578dd0294d2ac8d0309e02a4 Mon Sep 17 00:00:00 2001 From: ernstmul Date: Thu, 17 Apr 2025 10:25:16 +0200 Subject: [PATCH] Add artifact layer --- .../components/studio/sidebarProject.svelte | 11 +- src/lib/layout/shellStudio.svelte | 2 +- .../(console)/project-[project]/+layout.ts | 20 ++ .../(console)/project-[project]/store.ts | 7 + .../project-[project]/studio/+page.svelte | 201 ++++-------------- .../studio/artifact-[artifact]/+page.svelte | 168 +++++++++++++++ .../code/+page.svelte | 2 +- .../{ => artifact-[artifact]}/code/app.css | 0 .../{ => artifact-[artifact]}/code/app.js | 0 .../studio/assets/placeholder.svg | 10 + 10 files changed, 256 insertions(+), 165 deletions(-) create mode 100644 src/routes/(console)/project-[project]/studio/artifact-[artifact]/+page.svelte rename src/routes/(console)/project-[project]/studio/{ => artifact-[artifact]}/code/+page.svelte (95%) rename src/routes/(console)/project-[project]/studio/{ => artifact-[artifact]}/code/app.css (100%) rename src/routes/(console)/project-[project]/studio/{ => artifact-[artifact]}/code/app.js (100%) create mode 100644 src/routes/(console)/project-[project]/studio/assets/placeholder.svg diff --git a/src/lib/components/studio/sidebarProject.svelte b/src/lib/components/studio/sidebarProject.svelte index ba989bc7f..085312129 100644 --- a/src/lib/components/studio/sidebarProject.svelte +++ b/src/lib/components/studio/sidebarProject.svelte @@ -7,12 +7,14 @@ IconFolder, IconSparkles, IconTemplate, - IconUserGroup + IconUserGroup, + IconViewGrid } from '@appwrite.io/pink-icons-svelte'; import { base } from '$app/paths'; import { isSmallViewport, isTabletViewport } from '$lib/stores/viewport'; import type { ComponentType } from 'svelte'; import { showChat } from '$lib/stores/chat'; + import { page } from '$app/state'; export let project; export let isOpen; @@ -20,7 +22,7 @@ const menuItems: Array< { type: 'divider' } | { type: 'item'; label: string; path: string; icon: ComponentType } > = [ - { type: 'item', label: 'Studio', path: 'studio', icon: IconTemplate }, + { type: 'item', label: 'Studio', path: 'studio', icon: IconViewGrid }, { type: 'divider' }, { type: 'item', label: 'Auth', path: 'auth', icon: IconUserGroup }, { type: 'item', label: 'Databases', path: 'databases', icon: IconDatabase }, @@ -37,6 +39,11 @@ {#each menuItems as menuItem} {#if menuItem.type === 'item'} { diff --git a/src/lib/layout/shellStudio.svelte b/src/lib/layout/shellStudio.svelte index 64065455b..9bb629fe8 100644 --- a/src/lib/layout/shellStudio.svelte +++ b/src/lib/layout/shellStudio.svelte @@ -100,7 +100,7 @@ }); $effect(() => { - if ($isSmallViewport || page.url.pathname.endsWith('studio')) { + if ($isSmallViewport || page.url.pathname.includes('artifact-')) { showChat.set(true); } }); diff --git a/src/routes/(console)/project-[project]/+layout.ts b/src/routes/(console)/project-[project]/+layout.ts index 018462d75..5fa2c9319 100644 --- a/src/routes/(console)/project-[project]/+layout.ts +++ b/src/routes/(console)/project-[project]/+layout.ts @@ -8,6 +8,7 @@ import { isCloud } from '$lib/system'; import type { Organization } from '$lib/stores/organization'; import { defaultRoles, defaultScopes } from '$lib/constants'; import type { Plan } from '$lib/sdk/billing'; +import { artifacts } from '$routes/(console)/project-[project]/store'; export const load: LayoutLoad = async ({ params, depends }) => { depends(Dependencies.PROJECT); @@ -38,6 +39,25 @@ export const load: LayoutLoad = async ({ params, depends }) => { } } + // todo replace with actual artifacts from API + artifacts.set([ + { + $id: 'RE1xJXnaCX', + title: 'Dashboard', + url: null + }, + { + $id: 'jABosmZQhY', + title: 'Sign in screen', + url: 's-130328439.imagine.dev' + }, + { + $id: 'U1aolAia1m', + title: 'Mobile app', + url: null + } + ]); + return { project, organization, diff --git a/src/routes/(console)/project-[project]/store.ts b/src/routes/(console)/project-[project]/store.ts index 6af331f1c..261d34741 100644 --- a/src/routes/(console)/project-[project]/store.ts +++ b/src/routes/(console)/project-[project]/store.ts @@ -44,3 +44,10 @@ function createStats() { } export const stats = createStats(); +export const artifacts = writable< + Array<{ + $id: string; + title: string; + url?: string | null; + }> +>([]); diff --git a/src/routes/(console)/project-[project]/studio/+page.svelte b/src/routes/(console)/project-[project]/studio/+page.svelte index edf6d8246..4203ad8bc 100644 --- a/src/routes/(console)/project-[project]/studio/+page.svelte +++ b/src/routes/(console)/project-[project]/studio/+page.svelte @@ -1,168 +1,47 @@ - - - - - {#each tabs as tab} - - {tab.title} - - {/each} - - - - - - - - -
+ + + Artifacts + + -
- -
-
- + + {/each} +
- - diff --git a/src/routes/(console)/project-[project]/studio/artifact-[artifact]/+page.svelte b/src/routes/(console)/project-[project]/studio/artifact-[artifact]/+page.svelte new file mode 100644 index 000000000..86986e692 --- /dev/null +++ b/src/routes/(console)/project-[project]/studio/artifact-[artifact]/+page.svelte @@ -0,0 +1,168 @@ + + + + + + {#each tabs as tab} + + {tab.title} + + {/each} + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/src/routes/(console)/project-[project]/studio/code/+page.svelte b/src/routes/(console)/project-[project]/studio/artifact-[artifact]/code/+page.svelte similarity index 95% rename from src/routes/(console)/project-[project]/studio/code/+page.svelte rename to src/routes/(console)/project-[project]/studio/artifact-[artifact]/code/+page.svelte index 94aef1084..631cc4e89 100644 --- a/src/routes/(console)/project-[project]/studio/code/+page.svelte +++ b/src/routes/(console)/project-[project]/studio/artifact-[artifact]/code/+page.svelte @@ -4,7 +4,7 @@ import Filesystem from '$lib/components/editor/filesystem.svelte'; import { Layout } from '@appwrite.io/pink-svelte'; - import html from '../../../../../app.html?raw'; + import html from '../../../../../../app.html?raw'; import js from './app.js?raw'; import css from './app.css?raw'; diff --git a/src/routes/(console)/project-[project]/studio/code/app.css b/src/routes/(console)/project-[project]/studio/artifact-[artifact]/code/app.css similarity index 100% rename from src/routes/(console)/project-[project]/studio/code/app.css rename to src/routes/(console)/project-[project]/studio/artifact-[artifact]/code/app.css diff --git a/src/routes/(console)/project-[project]/studio/code/app.js b/src/routes/(console)/project-[project]/studio/artifact-[artifact]/code/app.js similarity index 100% rename from src/routes/(console)/project-[project]/studio/code/app.js rename to src/routes/(console)/project-[project]/studio/artifact-[artifact]/code/app.js diff --git a/src/routes/(console)/project-[project]/studio/assets/placeholder.svg b/src/routes/(console)/project-[project]/studio/assets/placeholder.svg new file mode 100644 index 000000000..2c36cebdb --- /dev/null +++ b/src/routes/(console)/project-[project]/studio/assets/placeholder.svg @@ -0,0 +1,10 @@ + + + + + + + + + +