diff --git a/packages/builder/src/components/deploy/RevertModal.svelte b/packages/builder/src/components/deploy/RevertModal.svelte index 717c55f05e..a8f9d8f6e3 100644 --- a/packages/builder/src/components/deploy/RevertModal.svelte +++ b/packages/builder/src/components/deploy/RevertModal.svelte @@ -28,7 +28,12 @@ } </script> -<Icon name="Revert" hoverable on:click={revertModal.show} /> +<Icon + name="Revert" + hoverable + on:click={revertModal.show} + tooltip="Revert changes" +/> <Modal bind:this={revertModal}> <ModalContent title="Revert Changes" diff --git a/packages/builder/src/global.css b/packages/builder/src/global.css index eb80268a3d..e0ebecedf9 100644 --- a/packages/builder/src/global.css +++ b/packages/builder/src/global.css @@ -1,76 +1,77 @@ -html, body { - padding: 0; - margin: 0; - height: 100%; - width: 100%; - min-height: 100%; +html, +body { + padding: 0; + margin: 0; + height: 100%; + width: 100%; + min-height: 100%; } body { - --background: var(--spectrum-alias-background-color-primary); - --background-alt: var(--spectrum-alias-background-color-secondary); - --border-light: 1px solid var(--spectrum-global-color-gray-300); - --border-dark: 1px solid var(--spectrum-global-color-gray-400); - --ink: var(--spectrum-alias-text-color); - --grey-1: var(--spectrum-global-color-gray-100); - --grey-2: var(--spectrum-global-color-gray-200); - --grey-3: var(--spectrum-global-color-gray-300); - --grey-4: var(--spectrum-global-color-gray-400); - --grey-5: var(--spectrum-global-color-gray-500); - --grey-6: var(--spectrum-global-color-gray-600); - --grey-7: var(--spectrum-global-color-gray-700); - --grey-8: var(--spectrum-global-color-gray-800); - --grey-9: var(--spectrum-global-color-gray-900); + --background: var(--spectrum-alias-background-color-primary); + --background-alt: var(--spectrum-alias-background-color-secondary); + --border-light: 2px solid var(--spectrum-global-color-gray-200); + --border-dark: 1px solid var(--spectrum-global-color-gray-400); + --ink: var(--spectrum-alias-text-color); + --grey-1: var(--spectrum-global-color-gray-100); + --grey-2: var(--spectrum-global-color-gray-200); + --grey-3: var(--spectrum-global-color-gray-300); + --grey-4: var(--spectrum-global-color-gray-400); + --grey-5: var(--spectrum-global-color-gray-500); + --grey-6: var(--spectrum-global-color-gray-600); + --grey-7: var(--spectrum-global-color-gray-700); + --grey-8: var(--spectrum-global-color-gray-800); + --grey-9: var(--spectrum-global-color-gray-900); - font-family: var(--font-sans); - color: var(--ink); - background-color: var(--background-alt); + font-family: var(--font-sans); + color: var(--ink); + background-color: var(--background-alt); } #app { - height: 100%; - box-sizing: border-box; - overflow: hidden; + height: 100%; + box-sizing: border-box; + overflow: hidden; } .hoverable:hover { - cursor: pointer; + cursor: pointer; } a { - text-decoration: none; + text-decoration: none; } /* Top bottom spacing */ .bb-margin-m { - margin-bottom: var(--spacing-m); + margin-bottom: var(--spacing-m); } * + .bb-margin-m { - margin-top: var(--spacing-m); + margin-top: var(--spacing-m); } .bb-margin-xl { - margin-bottom: var(--spacing-xl); + margin-bottom: var(--spacing-xl); } * + .bb-margin-xl { - margin-top: var(--spacing-xl); + margin-top: var(--spacing-xl); } /* Custom scrollbars */ ::-webkit-scrollbar { - width: 8px; - height: 8px; + width: 8px; + height: 8px; } ::-webkit-scrollbar-track { - background: var(--spectrum-alias-background-color-default); + background: var(--spectrum-alias-background-color-default); } ::-webkit-scrollbar-thumb { - background-color: var(--spectrum-global-color-gray-400); - border-radius: 4px; + background-color: var(--spectrum-global-color-gray-400); + border-radius: 4px; } ::-webkit-scrollbar-corner { - background: var(--spectrum-alias-background-color-default); + background: var(--spectrum-alias-background-color-default); } html * { - scrollbar-width: thin; - scrollbar-color: var(--spectrum-global-color-gray-400) + scrollbar-width: thin; + scrollbar-color: var(--spectrum-global-color-gray-400) var(--spectrum-alias-background-color-default); -} \ No newline at end of file +} diff --git a/packages/builder/src/pages/builder/app/[application]/_layout.svelte b/packages/builder/src/pages/builder/app/[application]/_layout.svelte index 080ea1f616..42d5f61431 100644 --- a/packages/builder/src/pages/builder/app/[application]/_layout.svelte +++ b/packages/builder/src/pages/builder/app/[application]/_layout.svelte @@ -1,16 +1,13 @@ <script> import { store, automationStore } from "builderStore" import { roles, flags } from "stores/backend" - import { Icon, ActionGroup, Tabs, Tab, notifications } from "@budibase/bbui" + import { Icon, Tabs, Tab, notifications, Heading } from "@budibase/bbui" import DeployModal from "components/deploy/DeployModal.svelte" import RevertModal from "components/deploy/RevertModal.svelte" - import VersionModal from "components/deploy/VersionModal.svelte" import { API } from "api" - import { auth, admin } from "stores/portal" + import { apps } from "stores/portal" import { isActive, goto, layout, redirect } from "@roxi/routify" - import Logo from "assets/bb-emblem.svg" import { capitalise } from "helpers" - import UpgradeModal from "components/upgrade/UpgradeModal.svelte" import { onMount, onDestroy } from "svelte" export let application @@ -20,14 +17,21 @@ // Sync once when you load the app let hasSynced = false + $: selected = capitalise( $layout.children.find(layout => $isActive(layout.path))?.title ?? "data" ) + $: appInfo = $apps?.find(app => app.devId === application) + $: published = appInfo?.status === "published" - function previewApp() { + const viewPreviewApp = () => { window.open(`/${application}`) } + const viewPublishedApp = () => { + window.open(`/app${appInfo?.url}`) + } + async function getPackage() { try { const pkg = await API.fetchAppPackage(application) @@ -67,6 +71,9 @@ } hasSynced = true } + if (!$apps?.length) { + apps.load() + } }) onDestroy(() => { @@ -81,37 +88,43 @@ <div class="root"> <div class="top-nav"> <div class="topleftnav"> - <button class="home-logo"> - <img - src={Logo} - alt="budibase icon" - on:click={() => $goto(`../../portal/`)} - /> - </button> - - <div class="tabs"> - <Tabs {selected}> - {#each $layout.children as { path, title }} - <Tab - quiet - selected={$isActive(path)} - on:click={topItemNavigate(path)} - title={capitalise(title)} - /> - {/each} - </Tabs> - </div> - - <!-- This gets all indexable subroutes and sticks them in the top nav. --> - <ActionGroup /> + <Icon + size="M" + name="ArrowLeft" + hoverable + on:click={() => $goto("../")} + /> + <Heading size="S">{$store.name || "App"}</Heading> + </div> + <div class="topcenternav"> + <Tabs {selected} size="M"> + {#each $layout.children as { path, title }} + <Tab + quiet + selected={$isActive(path)} + on:click={topItemNavigate(path)} + title={capitalise(title)} + /> + {/each} + </Tabs> </div> <div class="toprightnav"> - {#if $admin.cloud && $auth.user.account} - <UpgradeModal /> - {/if} - <VersionModal /> <RevertModal /> - <Icon name="Play" hoverable on:click={previewApp} /> + <Icon + name="Visibility" + hoverable + on:click={viewPreviewApp} + tooltip="View app preview" + /> + <Icon + name={published ? "Globe" : "GlobeStrike"} + hoverable + disabled={!published} + on:click={viewPublishedApp} + tooltip={published + ? "View published app" + : "Your app is not published"} + /> <DeployModal /> </div> </div> @@ -138,16 +151,37 @@ } .top-nav { - flex: 0 0 auto; + flex: 0 0 60px; background: var(--background); padding: 0 var(--spacing-xl); display: flex; + flex-direction: row; box-sizing: border-box; justify-content: space-between; - align-items: center; + align-items: stretch; border-bottom: var(--border-light); } + .topleftnav { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + gap: var(--spacing-xl); + } + .topleftnav :global(.spectrum-Heading) { + font-weight: 600; + } + + .topcenternav { + display: flex; + position: relative; + margin-bottom: -2px; + } + .topcenternav :global(.spectrum-Tabs-itemLabel) { + font-weight: bold !important; + } + .toprightnav { display: flex; flex-direction: row; @@ -155,35 +189,4 @@ align-items: center; gap: var(--spacing-xl); } - - .topleftnav { - display: flex; - flex-direction: row; - justify-content: flex-start; - align-items: center; - } - - .tabs { - display: flex; - position: relative; - margin-bottom: -1px; - } - - .home-logo { - border-style: none; - background-color: rgba(0, 0, 0, 0); - cursor: pointer; - outline: none; - padding: 0 10px 0 0; - align-items: center; - height: 32px; - } - - .home-logo:active { - outline: none; - } - - .home-logo img { - height: 30px; - } </style> diff --git a/packages/builder/src/pages/builder/app/[application]/data/_layout.svelte b/packages/builder/src/pages/builder/app/[application]/data/_layout.svelte index 9664ebbd09..f5f5c9d977 100644 --- a/packages/builder/src/pages/builder/app/[application]/data/_layout.svelte +++ b/packages/builder/src/pages/builder/app/[application]/data/_layout.svelte @@ -18,7 +18,7 @@ } </script> -<!-- routify:options index=0 --> +<!-- routify:options index=2 --> <div class="root"> <div class="nav"> <Tabs {selected} on:select={selectFirstDatasource}> diff --git a/packages/builder/src/pages/builder/app/[application]/data/index.svelte b/packages/builder/src/pages/builder/app/[application]/data/index.svelte index de9a392f9c..70c3d4481a 100644 --- a/packages/builder/src/pages/builder/app/[application]/data/index.svelte +++ b/packages/builder/src/pages/builder/app/[application]/data/index.svelte @@ -20,4 +20,3 @@ </script> <CreateDatasourceModal bind:modal /> -<!-- routify:options index=false --> diff --git a/packages/builder/src/pages/builder/app/[application]/design/index.svelte b/packages/builder/src/pages/builder/app/[application]/design/index.svelte index 1a454df4db..4c72ebe7a2 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/index.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/index.svelte @@ -4,5 +4,3 @@ $goto(`./${FrontendTypes.SCREEN}`) </script> - -<!-- routify:options index=1 --> diff --git a/packages/builder/src/pages/builder/app/[application]/settings/_layout.svelte b/packages/builder/src/pages/builder/app/[application]/settings/_layout.svelte index eff7c155d3..597bf1518d 100644 --- a/packages/builder/src/pages/builder/app/[application]/settings/_layout.svelte +++ b/packages/builder/src/pages/builder/app/[application]/settings/_layout.svelte @@ -1,2 +1,2 @@ -<!-- routify:options index=false --> +<!-- routify:options index=4 --> <slot /> diff --git a/packages/builder/src/pages/builder/app/[application]/settings/index.svelte b/packages/builder/src/pages/builder/app/[application]/settings/index.svelte index 163d304af4..5008432fee 100644 --- a/packages/builder/src/pages/builder/app/[application]/settings/index.svelte +++ b/packages/builder/src/pages/builder/app/[application]/settings/index.svelte @@ -1 +1,6 @@ Settings + +<!-- {#if $admin.cloud && $auth.user.account} + <UpgradeModal /> +{/if} +<VersionModal /> -->