40 lines
846 B
JavaScript
40 lines
846 B
JavaScript
import { get, writable } from "svelte/store"
|
|
import { eventStore } from "./events.js"
|
|
|
|
const createHoverStore = () => {
|
|
const store = writable({
|
|
hoveredComponentId: null,
|
|
})
|
|
let hoverTimeout
|
|
|
|
const hoverComponent = (id, notifyBuilder = true) => {
|
|
clearTimeout(hoverTimeout)
|
|
if (id) {
|
|
processHover(id, notifyBuilder)
|
|
} else {
|
|
hoverTimeout = setTimeout(() => {
|
|
processHover(id, notifyBuilder)
|
|
}, 10)
|
|
}
|
|
}
|
|
|
|
const processHover = (id, notifyBuilder = true) => {
|
|
if (id === get(store).hoveredComponentId) {
|
|
return
|
|
}
|
|
store.set({ hoveredComponentId: id })
|
|
if (notifyBuilder) {
|
|
eventStore.actions.dispatchEvent("hover-component", { id })
|
|
}
|
|
}
|
|
|
|
return {
|
|
...store,
|
|
actions: {
|
|
hoverComponent,
|
|
},
|
|
}
|
|
}
|
|
|
|
export const hoverStore = createHoverStore()
|