1
0
Fork 0
mirror of synced 2024-09-18 10:20:11 +12:00
budibase/packages/bbui/src/Tabs/Tab.svelte

35 lines
1 KiB
Svelte
Raw Normal View History

2021-04-15 02:07:45 +12:00
<script>
2021-04-16 00:42:39 +12:00
import { getContext, onMount } from 'svelte'
2021-04-15 02:07:45 +12:00
import Portal from "svelte-portal"
export let title
export let icon = '';
const selected = getContext('tab')
2021-04-16 00:42:39 +12:00
let tab;
let tabInfo
const setTabInfo = () => {
tabInfo = tab.getBoundingClientRect()
if ($selected.title === title) {
$selected.info = tabInfo
}
}
onMount(() => {
setTabInfo()
})
2021-04-15 02:07:45 +12:00
</script>
2021-04-16 00:42:39 +12:00
<div bind:this={tab} on:click={() => $selected = {...$selected, title, info: tab.getBoundingClientRect()} } class:is-selected={$selected.title === title} class="spectrum-Tabs-item" tabindex="0">
2021-04-15 02:07:45 +12:00
{#if icon}
<svg class="spectrum-Icon spectrum-Icon--sizeM" focusable="false" aria-hidden="true" aria-label="Folder">
<use xlink:href="#spectrum-icon-18-{icon}" />
</svg>
{/if}
<span class="spectrum-Tabs-itemLabel">{title}</span>
</div>
2021-04-16 00:42:39 +12:00
{#if $selected.title === title}
<Portal target=".spectrum-Tabs-content-{$selected.id}">
2021-04-15 02:07:45 +12:00
<slot />
</Portal>
{/if}