forked from tsai/budibase
11 changed files with 152 additions and 3 deletions
@ -0,0 +1,14 @@ |
|||||
|
<div class="icon-side-nav"> |
||||
|
<slot/> |
||||
|
</div> |
||||
|
|
||||
|
<style> |
||||
|
.icon-side-nav { |
||||
|
display: flex; |
||||
|
flex-direction: column; |
||||
|
justify-content: flex-start; |
||||
|
align-items: center; |
||||
|
padding: var(--spacing-s); |
||||
|
gap: var(--spacing-xs); |
||||
|
} |
||||
|
</style> |
||||
@ -0,0 +1,55 @@ |
|||||
|
<script> |
||||
|
import Icon from "../Icon/Icon.svelte" |
||||
|
import Tooltip from "../Tooltip/Tooltip.svelte" |
||||
|
import { fade } from "svelte/transition" |
||||
|
|
||||
|
export let icon |
||||
|
export let active = false |
||||
|
export let tooltip |
||||
|
|
||||
|
let showTooltip = false |
||||
|
</script> |
||||
|
|
||||
|
<div |
||||
|
class="icon-side-nav-item" |
||||
|
class:active |
||||
|
on:mouseover={() => (showTooltip = true)} |
||||
|
on:focus={() => (showTooltip = true)} |
||||
|
on:mouseleave={() => (showTooltip = false)} |
||||
|
on:click |
||||
|
> |
||||
|
<Icon name={icon} hoverable /> |
||||
|
{#if tooltip && showTooltip} |
||||
|
<div class="tooltip" in:fade={{ duration: 130, delay: 250 }}> |
||||
|
<Tooltip textWrapping direction="right" text={tooltip} /> |
||||
|
</div> |
||||
|
{/if} |
||||
|
</div> |
||||
|
|
||||
|
<style> |
||||
|
.icon-side-nav-item { |
||||
|
width: 36px; |
||||
|
height: 36px; |
||||
|
display: grid; |
||||
|
place-items: center; |
||||
|
border-radius: 4px; |
||||
|
position: relative; |
||||
|
cursor: pointer; |
||||
|
} |
||||
|
.icon-side-nav-item:hover :global(svg), |
||||
|
.active :global(svg) { |
||||
|
color: white; |
||||
|
} |
||||
|
.active { |
||||
|
background-color: var(--spectrum-global-color-gray-200); |
||||
|
} |
||||
|
.tooltip { |
||||
|
position: absolute; |
||||
|
pointer-events: none; |
||||
|
left: calc(100% - 4px); |
||||
|
top: 50%; |
||||
|
white-space: nowrap; |
||||
|
transform: translateY(-50%); |
||||
|
z-index: 1; |
||||
|
} |
||||
|
</style> |
||||
@ -0,0 +1,2 @@ |
|||||
|
<!-- routify:options index=1 --> |
||||
|
<slot /> |
||||
@ -0,0 +1,6 @@ |
|||||
|
<script> |
||||
|
import { goto } from "@roxi/routify" |
||||
|
import { FrontendTypes } from "constants" |
||||
|
|
||||
|
$goto(`./${FrontendTypes.SCREEN}`) |
||||
|
</script> |
||||
@ -1,2 +1,64 @@ |
|||||
|
<script> |
||||
|
import { IconSideNav, IconSideNavItem } from "@budibase/bbui" |
||||
|
import { params, goto } from "@roxi/routify" |
||||
|
import { DesignTabs } from "constants" |
||||
|
</script> |
||||
|
|
||||
<!-- routify:options index=1 --> |
<!-- routify:options index=1 --> |
||||
<slot /> |
<div class="design"> |
||||
|
<div class="side-nav"> |
||||
|
<IconSideNav> |
||||
|
<IconSideNavItem |
||||
|
icon="WebPage" |
||||
|
tooltip="Screens" |
||||
|
active={$params.tab === DesignTabs.SCREENS} |
||||
|
on:click={() => $goto(`./${DesignTabs.SCREENS}`)} |
||||
|
/> |
||||
|
<IconSideNavItem |
||||
|
icon="ViewList" |
||||
|
tooltip="Components" |
||||
|
active={$params.tab === DesignTabs.COMPONENTS} |
||||
|
on:click={() => $goto(`./${DesignTabs.COMPONENTS}`)} |
||||
|
/> |
||||
|
<IconSideNavItem |
||||
|
icon="Brush" |
||||
|
tooltip="Theme" |
||||
|
active={$params.tab === DesignTabs.THEME} |
||||
|
on:click={() => $goto(`./${DesignTabs.THEME}`)} |
||||
|
/> |
||||
|
<IconSideNavItem |
||||
|
icon="Link" |
||||
|
tooltip="Navigation" |
||||
|
active={$params.tab === DesignTabs.NAVIGATION} |
||||
|
on:click={() => $goto(`./${DesignTabs.NAVIGATION}`)} |
||||
|
/> |
||||
|
<IconSideNavItem |
||||
|
icon="Experience" |
||||
|
tooltip="Layouts" |
||||
|
active={$params.tab === DesignTabs.LAYOUTS} |
||||
|
on:click={() => $goto(`./${DesignTabs.LAYOUTS}`)} |
||||
|
/> |
||||
|
</IconSideNav> |
||||
|
</div> |
||||
|
|
||||
|
<div class="content"> |
||||
|
<slot /> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<style> |
||||
|
.design { |
||||
|
flex: 1 1 auto; |
||||
|
display: grid; |
||||
|
grid-template-columns: auto 1fr; |
||||
|
align-items: stretch; |
||||
|
} |
||||
|
.side-nav { |
||||
|
background: var(--background); |
||||
|
border-right: var(--border-light); |
||||
|
} |
||||
|
.content { |
||||
|
display: flex; |
||||
|
flex-direction: column; |
||||
|
} |
||||
|
</style> |
||||
|
|||||
@ -1,6 +1,6 @@ |
|||||
<script> |
<script> |
||||
import { goto } from "@roxi/routify" |
import { goto } from "@roxi/routify" |
||||
import { FrontendTypes } from "constants" |
import { DesignTabs } from "constants" |
||||
|
|
||||
$goto(`./${FrontendTypes.SCREEN}`) |
$goto(`./${DesignTabs.SCREENS}`) |
||||
</script> |
</script> |
||||
|
|||||
Loading…
Reference in new issue