diff --git a/packages/builder/src/pages/builder/portal/apps/_layout.svelte b/packages/builder/src/pages/builder/portal/apps/_layout.svelte
index fe10d4b08a..b91f5f0c5a 100644
--- a/packages/builder/src/pages/builder/portal/apps/_layout.svelte
+++ b/packages/builder/src/pages/builder/portal/apps/_layout.svelte
@@ -2,7 +2,7 @@
import { notifications } from "@budibase/bbui"
import { apps, templates, licensing, groups } from "stores/portal"
import { onMount } from "svelte"
- import { goto } from "@roxi/routify"
+ import { redirect } from "@roxi/routify"
// Don't block loading if we've already hydrated state
let loaded = $apps.length > 0
@@ -24,7 +24,7 @@
// Go to new app page if no apps exists
if (!$apps.length) {
- $goto("./create")
+ $redirect("./onboarding")
}
} catch (error) {
notifications.error("Error loading apps and templates")
diff --git a/packages/builder/src/pages/builder/portal/apps/create.svelte b/packages/builder/src/pages/builder/portal/apps/create.svelte
index 72ed203880..1f273360ab 100644
--- a/packages/builder/src/pages/builder/portal/apps/create.svelte
+++ b/packages/builder/src/pages/builder/portal/apps/create.svelte
@@ -1,5 +1,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+{#if !$apps.length}
+
+{:else}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{/if}
diff --git a/packages/builder/src/pages/builder/portal/apps/onboarding/_components/DataPanel.svelte b/packages/builder/src/pages/builder/portal/apps/onboarding/_components/DataPanel.svelte
new file mode 100644
index 0000000000..9a7fffd893
--- /dev/null
+++ b/packages/builder/src/pages/builder/portal/apps/onboarding/_components/DataPanel.svelte
@@ -0,0 +1,13 @@
+
+
+
diff --git a/packages/builder/src/pages/builder/portal/apps/onboarding/_components/DatasourceConfigPanel.svelte b/packages/builder/src/pages/builder/portal/apps/onboarding/_components/DatasourceConfigPanel.svelte
new file mode 100644
index 0000000000..a5f0fc138d
--- /dev/null
+++ b/packages/builder/src/pages/builder/portal/apps/onboarding/_components/DatasourceConfigPanel.svelte
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+ {#each Object.entries(fields) as [name, { type, default: defaultValue, required }]}
+ {#if type !== "boolean"}
+ {}}
+ label={formatName(name)}
+ {type}
+ />
+ {/if}
+ {/each}
+ {#each Object.entries(fields) as [name, { type, default: defaultValue, required }]}
+ {#if type === "boolean"}
+
+ {/if}
+ {/each}
+
+
+
+
+
+
diff --git a/packages/builder/src/pages/builder/portal/apps/onboarding/_components/ExampleApp.svelte b/packages/builder/src/pages/builder/portal/apps/onboarding/_components/ExampleApp.svelte
new file mode 100644
index 0000000000..3e970ac360
--- /dev/null
+++ b/packages/builder/src/pages/builder/portal/apps/onboarding/_components/ExampleApp.svelte
@@ -0,0 +1,254 @@
+
+
+
+
+
+
Home
+
+
+
+ FIRST NAME |
+ LAST NAME |
+ EMAIL |
+ ADDRESS |
+ CITY |
+ POSTCODE |
+ PHONE |
+
+
+
+ {#each rows as row}
+
+ {#each Object.values(row) as value}
+ {value} |
+ {/each}
+
+ {/each}
+
+
+
+
+
+
+
diff --git a/packages/builder/src/pages/builder/portal/apps/onboarding/_components/NamePanel.svelte b/packages/builder/src/pages/builder/portal/apps/onboarding/_components/NamePanel.svelte
new file mode 100644
index 0000000000..740cfda8f2
--- /dev/null
+++ b/packages/builder/src/pages/builder/portal/apps/onboarding/_components/NamePanel.svelte
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+ {#if url}
+
{window.location.origin}/app/{url}
+ {:else}
+
+ {/if}
+
+
+
+
diff --git a/packages/builder/src/pages/builder/portal/apps/onboarding/_components/PanelHeader.svelte b/packages/builder/src/pages/builder/portal/apps/onboarding/_components/PanelHeader.svelte
new file mode 100644
index 0000000000..34d612dc9e
--- /dev/null
+++ b/packages/builder/src/pages/builder/portal/apps/onboarding/_components/PanelHeader.svelte
@@ -0,0 +1,49 @@
+
+
+
+
+
diff --git a/packages/builder/src/pages/builder/portal/apps/onboarding/index.svelte b/packages/builder/src/pages/builder/portal/apps/onboarding/index.svelte
new file mode 100644
index 0000000000..6df756f119
--- /dev/null
+++ b/packages/builder/src/pages/builder/portal/apps/onboarding/index.svelte
@@ -0,0 +1,202 @@
+
+
+
+ goToApp(appId)}
+ />
+
+
+
+ {#if stage === "name"}
+ (stage = "data")} />
+ {:else if integrationsLoading}
+ loading...
+ {:else if stage === "data"}
+ (stage = "name")}>
+
+
+ {#each Object.entries(plusIntegrations) as [integrationType, schema]}
+
+ {/each}
+
+ {:else if stage in plusIntegrations}
+ (stage = "data")}
+ onNext={data => handleCreateApp({ datasourceConfig: data })}
+ />
+ {:else}
+ There was an problem. Please refresh the page and try again.
+ {/if}
+
+
+
+
+
+
diff --git a/packages/builder/vite.config.js b/packages/builder/vite.config.js
index 95e2908995..c02f13e193 100644
--- a/packages/builder/vite.config.js
+++ b/packages/builder/vite.config.js
@@ -1,9 +1,16 @@
import { svelte } from "@sveltejs/vite-plugin-svelte"
import replace from "@rollup/plugin-replace"
import { defineConfig, loadEnv } from "vite"
-
import path from "path"
+const ignoredWarnings = [
+ "unused-export-let",
+ "css-unused-selector",
+ "module-script-reactive-declaration",
+ "a11y-no-onchange",
+ "a11y-click-events-have-key-events",
+]
+
export default defineConfig(({ mode }) => {
const isProduction = mode === "production"
const env = loadEnv(mode, process.cwd())
@@ -29,6 +36,12 @@ export default defineConfig(({ mode }) => {
svelte({
hot: !isProduction,
emitCss: true,
+ onwarn: (warning, handler) => {
+ // Ignore some warnings
+ if (!ignoredWarnings.includes(warning.code)) {
+ handler(warning)
+ }
+ },
}),
replace({
preventAssignment: true,
diff --git a/packages/client/rollup.config.js b/packages/client/rollup.config.js
index a69de38799..f56714b51a 100644
--- a/packages/client/rollup.config.js
+++ b/packages/client/rollup.config.js
@@ -17,6 +17,7 @@ const ignoredWarnings = [
"css-unused-selector",
"module-script-reactive-declaration",
"a11y-no-onchange",
+ "a11y-click-events-have-key-events",
]
export default {
@@ -88,7 +89,9 @@ export default {
dedupe: ["svelte", "svelte/internal"],
}),
svg(),
- image(),
+ image({
+ exclude: "**/*.svg",
+ }),
json(),
production && terser(),
!production && visualizer(),
diff --git a/packages/frontend-core/src/components/SplitPage.svelte b/packages/frontend-core/src/components/SplitPage.svelte
index 08ec519715..79886845de 100644
--- a/packages/frontend-core/src/components/SplitPage.svelte
+++ b/packages/frontend-core/src/components/SplitPage.svelte
@@ -9,7 +9,8 @@