1
0
Fork 0
mirror of synced 2024-09-17 09:49:11 +12:00
budibase/packages/bbui/src/ActionButton/ActionButton.svelte

79 lines
1.8 KiB
Svelte
Raw Normal View History

2021-04-09 23:38:48 +12:00
<script>
2021-04-23 19:41:49 +12:00
import "@spectrum-css/actionbutton/dist/index-vars.css"
import { createEventDispatcher } from "svelte"
const dispatch = createEventDispatcher()
2021-04-09 23:38:48 +12:00
2021-04-23 19:41:49 +12:00
export let quiet = false
export let emphasized = false
export let selected = false
export let longPressable = false
export let disabled = false
export let icon = ""
export let dataCy = null
2021-04-28 02:18:52 +12:00
export let size = "M"
export let active = false
2021-04-24 01:45:10 +12:00
2021-04-23 19:41:49 +12:00
function longPress(element) {
if (!longPressable) return
let timer
2021-04-09 23:38:48 +12:00
2021-04-23 19:41:49 +12:00
const listener = () => {
timer = setTimeout(() => {
dispatch("longpress")
}, 700)
}
2021-04-09 23:38:48 +12:00
2021-04-23 19:41:49 +12:00
element.addEventListener("pointerdown", listener)
2021-04-09 23:38:48 +12:00
2021-04-23 19:41:49 +12:00
return {
destroy() {
clearTimeout(timer)
element.removeEventListener("pointerdown", longPress)
},
2021-04-09 23:38:48 +12:00
}
2021-04-23 19:41:49 +12:00
}
2021-04-09 23:38:48 +12:00
</script>
2021-04-23 19:41:49 +12:00
<button
data-cy={dataCy}
2021-04-23 19:41:49 +12:00
use:longPress
class:spectrum-ActionButton--quiet={quiet}
class:spectrum-ActionButton--emphasized={emphasized}
class:is-selected={selected}
2021-04-28 02:18:52 +12:00
class="spectrum-ActionButton spectrum-ActionButton--size{size}"
class:active
2021-04-23 19:41:49 +12:00
{disabled}
on:longPress
on:click|preventDefault
>
2021-04-23 19:41:49 +12:00
{#if longPressable}
<svg
class="spectrum-Icon spectrum-UIIcon-CornerTriangle100 spectrum-ActionButton-hold"
focusable="false"
aria-hidden="true"
>
2021-04-23 19:41:49 +12:00
<use xlink:href="#spectrum-css-icon-CornerTriangle100" />
</svg>
{/if}
{#if icon}
<svg
2021-04-28 02:18:52 +12:00
class="spectrum-Icon spectrum-Icon--size{size}"
2021-04-23 19:41:49 +12:00
focusable="false"
aria-hidden="true"
aria-label={icon}
>
2021-04-23 19:41:49 +12:00
<use xlink:href="#spectrum-icon-18-{icon}" />
</svg>
{/if}
{#if $$slots}
<span class="spectrum-ActionButton-label"><slot /></span>
{/if}
2021-04-09 23:38:48 +12:00
</button>
<style>
.active,
.active svg {
color: var(--spectrum-global-color-blue-600);
}
</style>