diff --git a/src/actions/focusable/event.js b/src/actions/focusable/event.js new file mode 100644 index 0000000..a52ddaf --- /dev/null +++ b/src/actions/focusable/event.js @@ -0,0 +1,21 @@ +// focusin event +export function addFocusinEventListener(source, cb) { + source.addEventListener('mouseenter', cb) + source.addEventListener('touchstart', cb) +} +export function removeFocusinEventListener(source, cb) { + source.removeEventListener('mouseenter', cb) + source.removeEventListener('touchstart', cb) +} + +// focusout event +export function addFocusoutEventListener(source, cb) { + source.addEventListener('mouseleave', cb) + source.addEventListener('touchend', cb) + source.addEventListener('touchcancel', cb) +} +export function removeFocusoutEventListener(source, cb) { + source.removeEventListener('mouseleave', cb) + source.removeEventListener('touchend', cb) + source.removeEventListener('touchcancel', cb) +} diff --git a/src/actions/focusable/focusable.js b/src/actions/focusable/focusable.js new file mode 100644 index 0000000..3e13deb --- /dev/null +++ b/src/actions/focusable/focusable.js @@ -0,0 +1,29 @@ +import { createDispatcher } from '../../utils/event' +import { + addFocusinEventListener, + removeFocusinEventListener, + addFocusoutEventListener, + removeFocusoutEventListener, +} from './event' + +export function focusable(node) { + const dispatch = createDispatcher(node) + + function handleFocusin() { + dispatch('focused', { value: true }) + } + + function handleFocusout() { + dispatch('focused', { value: false }) + } + + addFocusinEventListener(node, handleFocusin) + addFocusoutEventListener(node, handleFocusout) + + return { + destroy() { + removeFocusinEventListener(node, handleFocusin) + removeFocusoutEventListener(node, handleFocusout) + }, + } +} diff --git a/src/actions/focusable/index.js b/src/actions/focusable/index.js new file mode 100644 index 0000000..16fa8dd --- /dev/null +++ b/src/actions/focusable/index.js @@ -0,0 +1 @@ +export * from './focusable' diff --git a/src/components/Carousel/Carousel.svelte b/src/components/Carousel/Carousel.svelte index 2f6db8d..c69239b 100644 --- a/src/components/Carousel/Carousel.svelte +++ b/src/components/Carousel/Carousel.svelte @@ -5,7 +5,7 @@ import Arrow from '../Arrow/Arrow.svelte' import { NEXT, PREV } from '../../direction' import { swipeable } from '../../actions/swipeable' - import { hoverable } from '../../utils/hoverable' + import { focusable } from '../../actions/focusable' import { addResizeEventListener, removeResizeEventListener @@ -239,8 +239,8 @@