Add tooltip prop to icon component

This commit is contained in:
Andrew Kingston 2022-04-25 12:46:45 +01:00
parent 9ece75082f
commit 47bdc9e60b
1 changed files with 49 additions and 15 deletions

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,18 +13,26 @@
export let hoverable = false export let hoverable = false
export let disabled = false export let disabled = false
export let color export let color
export let dataCy = null 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>
<div
class="icon"
on:mouseover={() => (showTooltip = true)}
on:focus={() => (showTooltip = true)}
on:mouseleave={() => (showTooltip = false)}
on:click={() => (showTooltip = false)}
>
<svg <svg
on:click on:click
data-cy={dataCy}
class:hoverable class:hoverable
class:disabled class:disabled
class="spectrum-Icon spectrum-Icon--size{size}" class="spectrum-Icon spectrum-Icon--size{size}"
@ -32,10 +43,22 @@
color ? `color: ${color};` : "" color ? `color: ${color};` : ""
}`} }`}
> >
<use xlink:href="#spectrum-icon-18-{name}" /> <use style="pointer-events: none;" xlink:href="#spectrum-icon-18-{name}" />
</svg> </svg>
{#if tooltip && showTooltip}
<div class="tooltip" in:fade={{ duration: 130, delay: 250 }}>
<Tooltip textWrapping direction={"bottom"} text={tooltip} />
</div>
{/if}
</div>
<style> <style>
.icon {
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);
@ -49,4 +72,15 @@
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: calc(100% + 4px);
width: 100vw;
max-width: 150px;
transform: translateX(-50%);
text-align: center;
}
</style> </style>