36 lines
930 B
JavaScript
36 lines
930 B
JavaScript
import { createDispatcher } from '../../utils/event'
|
|
import { get } from '../../utils/object'
|
|
import {
|
|
addFocusinEventListener,
|
|
removeFocusinEventListener,
|
|
addFocusoutEventListener,
|
|
removeFocusoutEventListener
|
|
} from './event'
|
|
|
|
/**
|
|
* focusable events are for mouse events only
|
|
*/
|
|
export function focusable(node, options) {
|
|
// pass custom dispatch fn in order to re-translate dispatched event
|
|
const dispatch = get(options, 'dispatch', createDispatcher(node))
|
|
|
|
function handleFocusin() {
|
|
addFocusoutEventListener(node, handleFocusout)
|
|
dispatch('focused', { value: true })
|
|
}
|
|
|
|
function handleFocusout() {
|
|
dispatch('focused', { value: false })
|
|
removeFocusoutEventListener(node, handleFocusout)
|
|
}
|
|
|
|
addFocusinEventListener(node, handleFocusin)
|
|
|
|
return {
|
|
destroy() {
|
|
removeFocusinEventListener(node, handleFocusin)
|
|
removeFocusoutEventListener(node, handleFocusout)
|
|
},
|
|
}
|
|
}
|