@modern-kit/react
Version:
1 lines • 2.88 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../src/hooks/useHover/index.ts"],"sourcesContent":["import { useRef, useState } from 'react';\nimport { useEventListener } from '../../hooks/useEventListener';\n\ninterface UseHoverProps {\n onEnter?: (event: MouseEvent) => void;\n onLeave?: (event: MouseEvent) => void;\n}\n\ninterface UseHoverReturnType<T extends HTMLElement> {\n ref: React.RefObject<T>;\n isHovered: boolean;\n}\n\n/**\n * @description 대상 컴포넌트를 기준으로 마우스가 올라가거나 내려갔을 때의 상태를 반환하고, 마우스가 올라가거나 내려갔을 때의 액션을 정의할 수 있는 커스텀 훅입니다.\n *\n * @template T - HTML 엘리먼트 타입을 지정합니다.\n * @param {{\n * onEnter?: (event: MouseEvent) => void;\n * onLeave?: (event: MouseEvent) => void;\n * }} props - 콜백 함수를 포함한 선택적 속성입니다.\n * - `onEnter`: 요소에 마우스가 진입할 때 호출되는 함수입니다. 기본값은 `noop` 함수입니다.\n * - `onLeave`: 요소에서 마우스가 떠날 때 호출되는 함수입니다. 기본값은 `noop` 함수입니다.\n *\n * @returns {UseHoverReturnType<T>} `ref`와 `isHovered`를 포함한 객체를 반환합니다.\n * - `ref`: 추적할 대상 요소의 참조입니다.\n * - `isHovered`: 요소가 호버 상태인지 여부를 나타내는 불리언 값입니다.\n *\n * @example\n * const { ref, isHovered } = useHover<HTMLDivElement>({\n * onEnter: () => console.log('마우스 진입'),\n * onLeave: () => console.log('마우스 퇴장'),\n * });\n *\n * return <div ref={ref}> {isHovered ? 'Hovered' : 'Not Hovered'} </div>;\n */\nexport function useHover<T extends HTMLElement>({\n onEnter,\n onLeave,\n}: UseHoverProps = {}): UseHoverReturnType<T> {\n const [isHovered, setIsHovered] = useState(false);\n\n const targetRef = useRef<T>(null);\n\n const enterAction = (event: MouseEvent) => {\n setIsHovered(true);\n onEnter?.(event);\n };\n\n const leaveAction = (event: MouseEvent) => {\n setIsHovered(false);\n onLeave?.(event);\n };\n\n useEventListener(targetRef, 'mouseenter', enterAction);\n useEventListener(targetRef, 'mouseleave', leaveAction);\n\n return { ref: targetRef, isHovered };\n}\n"],"names":[],"mappings":";;;;;;AAoCO,SAAS,QAAA,CAAgC;AAAA,EAC9C,OAAA;AAAA,EACA;AACF,CAAA,GAAmB,EAAC,EAA0B;AAC5C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAEhD,EAAA,MAAM,SAAA,GAAY,OAAU,IAAI,CAAA;AAEhC,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAsB;AACzC,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,OAAA,GAAU,KAAK,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAsB;AACzC,IAAA,YAAA,CAAa,KAAK,CAAA;AAClB,IAAA,OAAA,GAAU,KAAK,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,gBAAA,CAAiB,SAAA,EAAW,cAAc,WAAW,CAAA;AACrD,EAAA,gBAAA,CAAiB,SAAA,EAAW,cAAc,WAAW,CAAA;AAErD,EAAA,OAAO,EAAE,GAAA,EAAK,SAAA,EAAW,SAAA,EAAU;AACrC;;;;"}