Update spectrum tabs, add tooltip to icon, add size option to tabs

This commit is contained in:
Andrew Kingston 2022-04-12 15:34:34 +01:00
parent e91ca2af22
commit aad7b45441
6 changed files with 85 additions and 964 deletions

View File

@ -70,7 +70,7 @@
"@spectrum-css/stepper": "^3.0.3", "@spectrum-css/stepper": "^3.0.3",
"@spectrum-css/switch": "^1.0.2", "@spectrum-css/switch": "^1.0.2",
"@spectrum-css/table": "^3.0.1", "@spectrum-css/table": "^3.0.1",
"@spectrum-css/tabs": "^3.0.1", "@spectrum-css/tabs": "^3.2.12",
"@spectrum-css/tags": "^3.0.2", "@spectrum-css/tags": "^3.0.2",
"@spectrum-css/textfield": "^3.0.1", "@spectrum-css/textfield": "^3.0.1",
"@spectrum-css/toast": "^3.0.1", "@spectrum-css/toast": "^3.0.1",

View File

@ -3,6 +3,9 @@
</script> </script>
<script> <script>
import Tooltip from "../Tooltip/Tooltip.svelte"
import { fade } from "svelte/transition"
export let direction = "n" export let direction = "n"
export let name = "Add" export let name = "Add"
export let hidden = false export let hidden = false
@ -10,30 +13,50 @@
export let hoverable = false export let hoverable = false
export let disabled = false export let disabled = false
export let color export let color
export let tooltip
$: rotation = getRotation(direction) $: rotation = getRotation(direction)
let showTooltip = false
const getRotation = direction => { const getRotation = direction => {
return directions.indexOf(direction) * 45 return directions.indexOf(direction) * 45
} }
</script> </script>
<svg <div
on:click on:mouseover={() => (showTooltip = true)}
class:hoverable on:focus={() => (showTooltip = true)}
class:disabled on:mouseleave={() => (showTooltip = false)}
class="spectrum-Icon spectrum-Icon--size{size}"
focusable="false"
aria-hidden={hidden}
aria-label={name}
style={`transform: rotate(${rotation}deg); ${
color ? `color: ${color};` : ""
}`}
> >
<use xlink:href="#spectrum-icon-18-{name}" /> <svg
</svg> on:click
class:hoverable
class:disabled
class="spectrum-Icon spectrum-Icon--size{size}"
focusable="false"
aria-hidden={hidden}
aria-label={name}
style={`transform: rotate(${rotation}deg); ${
color ? `color: ${color};` : ""
}`}
>
<use style="pointer-events: none;" xlink:href="#spectrum-icon-18-{name}" />
</svg>
{#if tooltip && showTooltip}
<div class="tooltip" in:fade={{ duration: 130, delay: 250 }}>
<Tooltip textWrapping={true} direction={"bottom"} text={tooltip} />
</div>
{/if}
</div>
<style> <style>
div {
position: relative;
display: grid;
place-items: center;
}
svg.hoverable { svg.hoverable {
pointer-events: all; pointer-events: all;
transition: color var(--spectrum-global-animation-duration-100, 130ms); transition: color var(--spectrum-global-animation-duration-100, 130ms);
@ -47,4 +70,13 @@
color: var(--spectrum-global-color-gray-500) !important; color: var(--spectrum-global-color-gray-500) !important;
pointer-events: none !important; pointer-events: none !important;
} }
.tooltip {
position: absolute;
pointer-events: none;
left: 50%;
top: 100%;
white-space: nowrap;
transform: translateX(-50%);
}
</style> </style>

View File

@ -63,4 +63,10 @@
.emphasized { .emphasized {
color: var(--spectrum-global-color-blue-600); color: var(--spectrum-global-color-blue-600);
} }
.spectrum-Tabs-item {
color: var(--spectrum-global-color-gray-600);
}
.spectrum-Tabs-item.is-selected {
color: var(--spectrum-global-color-gray-900);
}
</style> </style>

View File

@ -10,8 +10,7 @@
export let noHorizPadding = false export let noHorizPadding = false
export let quiet = false export let quiet = false
export let emphasized = false export let emphasized = false
// overlay content from the tab bar onto tabs e.g. for a dropdown export let size = "M"
export let onTop = false
let thisSelected = undefined let thisSelected = undefined
@ -74,20 +73,18 @@
<div <div
bind:this={container} bind:this={container}
class:quiet class:spectrum-Tabs--quiet={quiet}
class:noHorizPadding class:noHorizPadding
class="selected-border spectrum-Tabs {quiet && class:spectrum-Tabs--vertical={vertical}
'spectrum-Tabs--quiet'} spectrum-Tabs--{vertical class:spectrum-Tabs--horizontal={!vertical}
? 'vertical' class="spectrum-Tabs spectrum-Tabs--size{size}"
: 'horizontal'}"
class:onTop
> >
<slot /> <slot />
{#if $tab.info} {#if $tab.info}
<div <div
class="spectrum-Tabs-selectionIndicator indicator-transition" class="spectrum-Tabs-selectionIndicator"
style="{emphasized && class:emphasized
'background-color: var(--spectrum-global-color-blue-400)'}; width: {width}; height: {height}; left: {left}; top: {top};" style="width: {width}; height: {height}; left: {left}; top: {top};"
/> />
{/if} {/if}
</div> </div>
@ -98,26 +95,29 @@
/> />
<style> <style>
.quiet { .spectrum-Tabs--quiet {
border-bottom: none !important; border-bottom: none !important;
} }
.onTop { .onTop {
z-index: 20;
} }
.spectrum-Tabs { .spectrum-Tabs {
padding-left: var(--spacing-xl); padding-left: var(--spacing-xl);
padding-right: var(--spacing-xl); padding-right: var(--spacing-xl);
position: relative; position: relative;
border-bottom: var(--border-light); z-index: 20;
border-bottom-color: var(--spectrum-global-color-gray-200);
} }
.spectrum-Tabs-content { .spectrum-Tabs-content {
margin-top: var(--spectrum-global-dimension-static-size-150); margin-top: var(--spectrum-global-dimension-static-size-150);
} }
.indicator-transition { .spectrum-Tabs-selectionIndicator {
transition: all 200ms; transition: all 200ms;
background-color: var(--spectrum-global-color-gray-900);
}
.spectrum-Tabs-selectionIndicator.emphasized {
background-color: var(--spectrum-global-color-blue-400);
} }
.spectrum-Tabs--horizontal .spectrum-Tabs-selectionIndicator { .spectrum-Tabs--horizontal .spectrum-Tabs-selectionIndicator {
bottom: 0 !important;
} }
.noHorizPadding { .noHorizPadding {
padding: 0; padding: 0;

View File

@ -8,7 +8,7 @@
<!-- Showing / Hiding a text wrapped tooltip should be handled outside the component --> <!-- Showing / Hiding a text wrapped tooltip should be handled outside the component -->
{#if textWrapping} {#if textWrapping}
<span class="spectrum-Tooltip spectrum-Tooltip--{direction} is-open"> <span class="spectrum-Tooltip spectrum-Tooltip--{direction} is-open tooltip">
<span class="spectrum-Tooltip-label">{text}</span> <span class="spectrum-Tooltip-label">{text}</span>
<span class="spectrum-Tooltip-tip" /> <span class="spectrum-Tooltip-tip" />
</span> </span>
@ -22,3 +22,9 @@
</div> </div>
</span> </span>
{/if} {/if}
<style>
.tooltip {
pointer-events: none;
}
</style>

File diff suppressed because it is too large Load Diff