mirror of https://github.com/Budibase/budibase.git
6 changed files with 92 additions and 11 deletions
@ -0,0 +1,71 @@ |
|||
<script> |
|||
import { onMount, beforeUpdate, afterUpdate } from "svelte" |
|||
|
|||
export let value = null |
|||
export let onChanged = () => {} |
|||
export let swatches = [] |
|||
|
|||
let picker |
|||
let cp = null |
|||
|
|||
function getRecentColors() { |
|||
let colorStore = localStorage.getItem("bb:recentColors") |
|||
if (!!colorStore) { |
|||
swatches = JSON.parse(colorStore) |
|||
} |
|||
} |
|||
|
|||
function setRecentColor(color) { |
|||
if (swatches.length >= 15) { |
|||
swatches.splice(0, 1) |
|||
picker.removeSwatch(0) |
|||
} |
|||
if (!swatches.includes(color)) { |
|||
swatches = [...swatches, color] |
|||
picker.addSwatch(color) |
|||
localStorage.setItem("bb:recentColors", JSON.stringify(swatches)) |
|||
} |
|||
} |
|||
|
|||
function createPicker() { |
|||
picker = Pickr.create({ |
|||
el: cp, |
|||
theme: "nano", |
|||
default: value || "#000000", |
|||
|
|||
swatches, |
|||
closeWithKey: "Escape", |
|||
|
|||
components: { |
|||
preview: true, |
|||
opacity: true, |
|||
hue: true, |
|||
|
|||
interaction: { |
|||
hex: true, |
|||
rgba: true, |
|||
input: true, |
|||
save: true, |
|||
}, |
|||
}, |
|||
}) |
|||
} |
|||
|
|||
afterUpdate(() => { |
|||
picker.setColor(value) |
|||
}) |
|||
|
|||
onMount(() => { |
|||
getRecentColors() |
|||
createPicker() |
|||
|
|||
picker.on("save", (colour, instance) => { |
|||
let color = colour.toHEXA().toString() |
|||
onChanged(color) |
|||
setRecentColor(color) |
|||
picker.hide() |
|||
}) |
|||
}) |
|||
</script> |
|||
|
|||
<div bind:this={cp} class="color-picker" /> |
|||
Loading…
Reference in new issue