diff --git a/packages/builder/public/onboarding/grid.png b/packages/builder/public/onboarding/grid.png new file mode 100644 index 00000000000..70eab4cf38b Binary files /dev/null and b/packages/builder/public/onboarding/grid.png differ diff --git a/packages/builder/public/onboarding/sidebar.png b/packages/builder/public/onboarding/sidebar.png new file mode 100644 index 00000000000..91bef95e8e6 Binary files /dev/null and b/packages/builder/public/onboarding/sidebar.png differ diff --git a/packages/builder/src/components/common/TemplateCard.svelte b/packages/builder/src/components/common/TemplateCard.svelte index 5ab8c3d7748..9bc41284742 100644 --- a/packages/builder/src/components/common/TemplateCard.svelte +++ b/packages/builder/src/components/common/TemplateCard.svelte @@ -3,6 +3,7 @@ export let imageSrc export let name export let icon + export let description = "" export let overlayEnabled = true let imageError = false @@ -36,7 +37,10 @@
-
{name}
+
{name}
+ {#if description} +
{description}
+ {/if}
@@ -70,19 +74,40 @@ position: absolute; bottom: 0px; display: flex; - align-items: center; - height: 30%; + flex-direction: column; + height: 35%; width: 100%; + background-color: var(--spectrum-global-color-gray-50); + padding-bottom: 1rem; + } + + .template-thumbnail-text > div { + padding-left: 1.25rem; + padding-right: 1.25rem; + } + + .template-name { color: var( --spectrum-heading-xs-text-color, var(--spectrum-alias-heading-text-color) ); - background-color: var(--spectrum-global-color-gray-50); + font-size: 14px; + font-weight: 600; + margin-top: 0.75rem; } - .template-thumbnail-text > div { - padding-left: 1rem; - padding-right: 1rem; + .template-description { + color: var(--spectrum-global-color-gray-600); + font-size: 12px; + font-weight: 400; + margin-top: 0.5rem; + margin-bottom: 0; + display: -webkit-box; + line-clamp: 2; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + line-height: 1.5; } .template-card { @@ -91,7 +116,7 @@ border-radius: var(--border-radius-s); border: 1px solid var(--spectrum-global-color-gray-300); overflow: hidden; - min-height: 200px; + min-height: 220px; } .template-card > * { @@ -112,7 +137,7 @@ } .card-body { - padding-left: 1rem; - padding-top: 1rem; + padding-left: 1.25rem; + padding-top: 1.25rem; } diff --git a/packages/builder/src/components/common/TemplateDisplay.svelte b/packages/builder/src/components/common/TemplateDisplay.svelte deleted file mode 100644 index a72e8460111..00000000000 --- a/packages/builder/src/components/common/TemplateDisplay.svelte +++ /dev/null @@ -1,137 +0,0 @@ - - - -
- - (selectedCategory = null)} - text="All" - active={selectedCategory == null} - /> - {#each categories as category} - (selectedCategory = category.name)} - text={category.name} - active={selectedCategory === category.name} - /> - {/each} - -
-
- - {#each filteredCategories as category} -
- {category.name} -
- {#each category.templates as templateEntry} - - {#if !($licensing?.usageMetrics?.apps >= 100)} - - {/if} - - Details - - - {/each} -
-
- {/each} -
-
-
- - - - - - diff --git a/packages/builder/src/components/start/CreateAppModal.svelte b/packages/builder/src/components/start/CreateAppModal.svelte index 53548959d1f..00ba4e3489f 100644 --- a/packages/builder/src/components/start/CreateAppModal.svelte +++ b/packages/builder/src/components/start/CreateAppModal.svelte @@ -134,6 +134,8 @@ data.append("templateKey", template.key) } + data.append("isOnboarding", "false") + // Create App const createdApp = await API.createApp(data) diff --git a/packages/builder/src/components/start/TemplatesModal.svelte b/packages/builder/src/components/start/TemplatesModal.svelte new file mode 100644 index 00000000000..8d348ec0750 --- /dev/null +++ b/packages/builder/src/components/start/TemplatesModal.svelte @@ -0,0 +1,63 @@ + + + + +
+ {#each newTemplates as template} + + {/each} +
+
+
+ + diff --git a/packages/builder/src/pages/builder/portal/apps/create.svelte b/packages/builder/src/pages/builder/portal/apps/create.svelte deleted file mode 100644 index 1f3a0cb052e..00000000000 --- a/packages/builder/src/pages/builder/portal/apps/create.svelte +++ /dev/null @@ -1,69 +0,0 @@ - - -{#if !$appsStore.apps.length} - -{:else} - - - - - - -
-
- - -
-
- -
-
- - - - -{/if} diff --git a/packages/builder/src/pages/builder/portal/apps/index.svelte b/packages/builder/src/pages/builder/portal/apps/index.svelte index 91e84dd650e..d7fc8e1d018 100644 --- a/packages/builder/src/pages/builder/portal/apps/index.svelte +++ b/packages/builder/src/pages/builder/portal/apps/index.svelte @@ -26,15 +26,18 @@ licensing, enrichedApps, sortBy, + templates, } from "@/stores/portal" import { goto } from "@roxi/routify" import AppRow from "@/components/start/AppRow.svelte" import Logo from "assets/bb-space-man.svg" + import TemplatesModal from "@/components/start/TemplatesModal.svelte" let template let creationModal let appLimitModal let accountLockedModal + let templatesModal let searchTerm = "" let creatingFromTemplate = false let automationErrors @@ -91,8 +94,6 @@ const initiateAppCreation = async () => { if ($licensing?.usageMetrics?.apps >= 100) { appLimitModal.show() - } else if ($appsStore.apps?.length) { - $goto("/builder/portal/apps/create") } else { template = null creationModal.show() @@ -120,6 +121,7 @@ data.append("name", appName) data.append("useTemplate", true) data.append("templateKey", template.key) + data.append("isOnboarding", "false") // Create App const createdApp = await API.createApp(data) @@ -159,6 +161,12 @@ } } + const handleTemplateSelect = selectedTemplate => { + template = selectedTemplate + templatesModal.hide() + autoCreateApp() + } + onMount(async () => { try { // If the portal is loaded from an external URL with a template param @@ -170,6 +178,7 @@ if (usersLimitLockAction) { usersLimitLockAction() } + await templates.load() } catch (error) { notifications.error("Error getting init info") } @@ -224,21 +233,20 @@ > Create new app - {#if $appsStore.apps?.length > 0 && !$admin.offlineMode} + + {#if $appsStore.apps?.length > 0} + {#if !$admin.offlineMode} + + {/if} - {/if} - {#if !$appsStore.apps?.length} -