forked from tsai/budibase
6 changed files with 76 additions and 5 deletions
@ -0,0 +1,67 @@ |
|||||
|
<script> |
||||
|
import "@spectrum-css/actionbutton/dist/index-vars.css" |
||||
|
import { createEventDispatcher } from "svelte" |
||||
|
const dispatch = createEventDispatcher() |
||||
|
|
||||
|
export let disabled = false |
||||
|
|
||||
|
/** @type {('S', 'M', 'L', 'XL')} Size of button */ |
||||
|
export let size = "M"; |
||||
|
/** @type {('cta','primary','secondary','warning', 'overBackground')} Type of button */ |
||||
|
export let type = "primary" |
||||
|
|
||||
|
export let quiet = false; |
||||
|
|
||||
|
export let selected = false; |
||||
|
|
||||
|
export let longPressable = false; |
||||
|
|
||||
|
export let icon = ''; |
||||
|
|
||||
|
function longPress(element) { |
||||
|
if (!longPressable) return |
||||
|
let timer |
||||
|
|
||||
|
const listener = () => { |
||||
|
timer = setTimeout(() => { |
||||
|
dispatch('longpress') |
||||
|
}, 700) |
||||
|
} |
||||
|
|
||||
|
element.addEventListener('pointerdown', listener) |
||||
|
|
||||
|
return { |
||||
|
destroy() { |
||||
|
clearTimeout(timer) |
||||
|
element.removeEventListener('pointerdown', longPress) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
|
||||
|
<button |
||||
|
use:longPress |
||||
|
class="spectrum-ActionButton spectrum-ActionButton--size{size.toUpperCase()} spectrum-ActionButton--{type} {quiet && 'spectrum-ActionButton--quiet'}" |
||||
|
{disabled} |
||||
|
on:longPress |
||||
|
on:click|preventDefault> |
||||
|
{#if longPressable} |
||||
|
<svg class="spectrum-Icon spectrum-UIIcon-CornerTriangle100 spectrum-ActionButton-hold" focusable="false" aria-hidden="true"> |
||||
|
<use xlink:href="#spectrum-css-icon-CornerTriangle100" /> |
||||
|
</svg> |
||||
|
{/if} |
||||
|
{#if icon} |
||||
|
<svg class="spectrum-Icon spectrum-Icon--size{size.toUpperCase()}" focusable="false" aria-hidden="true" aria-label="{icon}"> |
||||
|
<use xlink:href="#spectrum-icon-18-{icon}" /> |
||||
|
</svg> |
||||
|
{/if} |
||||
|
{#if $$slots} |
||||
|
<span class="spectrum-ActionButton-label"><slot /></span> |
||||
|
{/if} |
||||
|
</button> |
||||
|
|
||||
|
<style> |
||||
|
|
||||
|
</style> |
||||
|
|
||||
Loading…
Reference in new issue