@benev/slate
Version:
frontend web stuff
45 lines (34 loc) • 919 B
text/typescript
import {signal} from "../../nexus/state.js"
import {dragleave_has_exited_current_target} from "./utils/dragleave_has_exited_current_target.js"
export class ShockDrop {
#params: Params
#indicator = signal(false)
constructor(params: Params) {
this.#params = params
}
get indicator() {
return this.#indicator.value
}
reset_indicator = () => {
this.#indicator.value = false
}
dragover = (event: DragEvent) => {
event.preventDefault()
if (this.#params.predicate(event))
this.#indicator.value = true
}
dragleave = (event: DragEvent) => {
if (dragleave_has_exited_current_target(event))
this.#indicator.value = false
}
drop = (event: DragEvent) => {
event.preventDefault()
this.#indicator.value = false
if (this.#params.predicate(event))
this.#params.handle_drop(event)
}
}
type Params = {
predicate: (event: DragEvent) => boolean
handle_drop: (event: DragEvent) => void
}