{"version":3,"file":"hamo.mjs","sources":["../src/hooks/use-click-outside-event.js","../src/hooks/use-is-client.js","../src/hooks/use-debug.js","../src/hooks/use-document-ready-state.js","../src/hooks/use-frame/index.js","../src/hooks/use-intersection-observer.js","../src/hooks/use-interval.js","../src/hooks/use-is-touch-device.js","../src/hooks/use-media-query.js","../src/hooks/use-rect/utils.js","../src/hooks/use-rect/emitter.js","../src/hooks/use-rect/index.js","../src/hooks/use-resize-observer/index.js","../src/hooks/use-slots.js","../src/hooks/use-window-size/index.js"],"sourcesContent":["/**\r\n * useOutsideClickEvent - custom hook that listens for clicks outside of a component\r\n * @param {Object} ref - React ref for the element to listen for clicks outside of\r\n * @param {Function} callback - callback function to call when a click outside of the element is detected\r\n */\r\n\r\nimport { useCallback, useEffect } from 'react'\r\n\r\nexport function useOutsideClickEvent(ref, callback) {\r\n  const handleClickOutside = useCallback(\r\n    (event) => {\r\n      if (ref.current && !ref.current.contains(event.target)) {\r\n        callback()\r\n      }\r\n    },\r\n    [ref, callback]\r\n  )\r\n\r\n  useEffect(() => {\r\n    if (ref.current) {\r\n      document.addEventListener('mousedown', handleClickOutside)\r\n      return () => {\r\n        document.removeEventListener('mousedown', handleClickOutside)\r\n      }\r\n    }\r\n  }, [handleClickOutside, ref])\r\n}\r\n","// This component is used to check if the window object is present.\r\nimport { useEffect, useState } from 'react'\r\n\r\nexport function useIsClient() {\r\n  const [isClient, setClient] = useState(false)\r\n\r\n  useEffect(() => {\r\n    setClient(true)\r\n  }, [])\r\n\r\n  return isClient\r\n}\r\n","import { useMemo } from 'react'\r\nimport { useIsClient } from './use-is-client'\r\n\r\nexport function useDebug() {\r\n  const isClient = useIsClient()\r\n\r\n  const debug = useMemo(() => {\r\n    if (!isClient) return undefined\r\n\r\n    const location = window.location\r\n    const search = location.search\r\n    const href = location.href\r\n    const searchParams = new URLSearchParams(search)\r\n\r\n    const isDebug =\r\n      href.includes('#debug') || // localhost:3000/#debug\r\n      href.includes('/_debug') || // localhost:3000/_debug\r\n      searchParams.has('debug') || // localhost:3000/?debug\r\n      // eslint-disable-next-line no-undef\r\n      process.env.NODE_ENV === 'development' // localhost:3000\r\n\r\n    const isProduction =\r\n      href.includes('#production') || // localhost:3000/#production\r\n      searchParams.has('production') // localhost:3000/?production\r\n\r\n    return isDebug && !isProduction\r\n  }, [isClient])\r\n\r\n  return debug\r\n}\r\n","// useDocumentReadyState.js\r\n// This code is a custom hook that returns the current document.readyState\r\n// The useLayoutEffect hook is used to set the state of the document\r\n// The useEffect hook is used to set the state of the document to 'complete' when the document is ready\r\n\r\nimport { useEffect, useState } from 'react'\r\n\r\n/**\r\n * @name useDocumentReadyState\r\n * @description A React hook that listen to document.readyState.\r\n * @returns {string} document.readyState\r\n */\r\n\r\nexport function useDocumentReadyState() {\r\n  const [readyState, setReadyState] = useState()\r\n\r\n  useEffect(() => {\r\n    function onStateChange() {\r\n      setReadyState(document.readyState)\r\n    }\r\n\r\n    document.addEventListener('readystatechange', onStateChange, false)\r\n    onStateChange()\r\n\r\n    return () => document.removeEventListener('readystatechange', onStateChange, false)\r\n  }, [])\r\n\r\n  return readyState\r\n}\r\n","/**\r\n * Creates a requestAnimationFrame loop and manages the lifecycle of the callback.\r\n * @param {Function} callback - A function that is called every frame.\r\n * @param {Number} priority - A number that determines the order in which the callback is called.\r\n */\r\n\r\nimport Tempus from '@studio-freight/tempus'\r\nimport { useEffect } from 'react'\r\n\r\nexport function useFrame(callback, priority = 0) {\r\n  useEffect(() => {\r\n    if (callback) {\r\n      Tempus.add(callback, priority)\r\n\r\n      return () => Tempus.remove(callback)\r\n    }\r\n  }, [callback, priority])\r\n}\r\n","import { useCallback, useEffect, useRef, useState } from 'react'\r\n\r\n/**\r\n * @name useIntersectionObserver\r\n * @description A React hook that oberves element visibility using IntersectionObserver.\r\n * @param {HTMLElement} root\r\n * @param {string} rootMargin\r\n * @param {number} threshold\r\n * @param {boolean} once\r\n * @param {boolean} lazy\r\n * @param {function} callback\r\n * @param {array} deps\r\n * @returns {array} [setElement, entry]\r\n */\r\n\r\nexport function useIntersectionObserver(\r\n  { root = null, rootMargin = '0px', threshold = 0, once = false, lazy = false, callback = () => {} } = {},\r\n  deps = []\r\n) {\r\n  const entryRef = useRef({})\r\n  const [entry, setEntry] = useState({})\r\n  const [element, setElement] = useState()\r\n\r\n  useEffect(() => {\r\n    if (!element) return\r\n\r\n    const intersection = new IntersectionObserver(\r\n      ([entry]) => {\r\n        if (lazy) {\r\n          entryRef.current = entry\r\n        } else {\r\n          setEntry(entry)\r\n        }\r\n\r\n        callback(entry)\r\n\r\n        if (once && entry.isIntersecting) intersection.disconnect()\r\n      },\r\n      {\r\n        root,\r\n        rootMargin,\r\n        threshold,\r\n      }\r\n    )\r\n    intersection.observe(element)\r\n\r\n    return () => {\r\n      intersection.disconnect()\r\n    }\r\n  }, [element, root, rootMargin, threshold, lazy, once, ...deps])\r\n\r\n  const get = useCallback(() => entryRef.current, [])\r\n\r\n  return [setElement, lazy ? get : entry]\r\n}\r\n","/**\r\n * This function allows you to set an interval in a functional component\r\n * @param {function} callback - The callback function\r\n * @param {number} delay - The delay between each interval\r\n */\r\n\r\nimport { useEffect } from 'react'\r\n\r\nexport function useInterval(callback, delay = 1000, deps = []) {\r\n  useEffect(() => {\r\n    const interval = setInterval(callback, delay)\r\n    return () => clearInterval(interval)\r\n  }, [delay, ...deps])\r\n}\r\n","/*\r\n  This hook checks if the device has a touch screen. It checks for the touchstart event,\r\n  as well as the maxTouchPoints property on the navigator object. It also checks the\r\n  msMaxTouchPoints property, which is specific to Microsoft browsers.\r\n*/\r\n\r\nimport { useEffect, useState } from 'react'\r\n\r\n/**\r\n * @name useIsTouchDevice\r\n * @description A React hook that detects if the device supports touch.\r\n * @returns {boolean} Whether the device supports touch or not.\r\n */\r\n\r\nexport function useIsTouchDevice() {\r\n  const [isTouchDevice, setIsTouchDevice] = useState()\r\n\r\n  useEffect(() => {\r\n    function onResize() {\r\n      setIsTouchDevice('ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0)\r\n    }\r\n\r\n    window.addEventListener('resize', onResize, false)\r\n    onResize()\r\n\r\n    return () => {\r\n      window.removeEventListener('resize', onResize, false)\r\n    }\r\n  }, [])\r\n\r\n  return isTouchDevice\r\n}\r\n","import { useEffect, useState } from 'react'\r\n\r\n/**\r\n * @name useMediaQuery\r\n * @description A React hook that detects whether a media query is true or false.\r\n * @param {string} queryString The media query to test against.\r\n * @returns {boolean} Whether the media query is true or false.\r\n */\r\n\r\nexport function useMediaQuery(queryString) {\r\n  const [isMatch, setIsMatch] = useState()\r\n\r\n  useEffect(() => {\r\n    const mediaQuery = window.matchMedia(queryString)\r\n\r\n    function onChange() {\r\n      setIsMatch(mediaQuery.matches)\r\n    }\r\n\r\n    mediaQuery.addEventListener('change', onChange, false)\r\n    onChange()\r\n\r\n    return () => mediaQuery.removeEventListener('change', onChange, false)\r\n  }, [queryString])\r\n\r\n  return isMatch\r\n}\r\n","export function removeParentSticky(element) {\r\n  const position = getComputedStyle(element).position\r\n\r\n  const isSticky = position === 'sticky'\r\n\r\n  if (isSticky) {\r\n    element.style.setProperty('position', 'static')\r\n    element.dataset.sticky = 'true'\r\n  }\r\n\r\n  if (element.offsetParent) {\r\n    removeParentSticky(element.offsetParent)\r\n  }\r\n}\r\n\r\nexport function addParentSticky(element) {\r\n  if (element?.dataset?.sticky === 'true') {\r\n    element.style.removeProperty('position')\r\n    element.dataset.sticky = 'true'\r\n    delete element.dataset.sticky\r\n  }\r\n\r\n  if (element.parentNode) {\r\n    addParentSticky(element.parentNode)\r\n  }\r\n}\r\n\r\nexport function offsetTop(element, accumulator = 0) {\r\n  const top = accumulator + element.offsetTop\r\n  if (element.offsetParent) {\r\n    return offsetTop(element.offsetParent, top)\r\n  }\r\n  return top\r\n}\r\n\r\nexport function offsetLeft(element, accumulator = 0) {\r\n  const left = accumulator + element.offsetLeft\r\n  if (element.offsetParent) {\r\n    return offsetLeft(element.offsetParent, left)\r\n  }\r\n  return left\r\n}\r\n\r\nexport function scrollTop(element, accumulator = 0) {\r\n  const top = accumulator + element.scrollTop\r\n  if (element.offsetParent) {\r\n    return scrollTop(element.offsetParent, top)\r\n  }\r\n  return top + window.scrollY\r\n}\r\n\r\nexport function scrollLeft(element, accumulator = 0) {\r\n  const left = accumulator + element.scrollLeft\r\n  if (element.offsetParent) {\r\n    return scrollLeft(element.offsetParent, left)\r\n  }\r\n  return left + window.scrollX\r\n}\r\n","import { createNanoEvents } from 'nanoevents'\r\n\r\nexport const emitter = createNanoEvents()\r\n","import { useEffect, useCallback, useRef, useState } from 'react'\r\nimport { addParentSticky, offsetLeft, offsetTop, removeParentSticky, scrollLeft, scrollTop } from './utils'\r\nimport debounce from 'just-debounce-it'\r\nimport { emitter } from './emitter'\r\n\r\nexport function useRect({\r\n  ignoreTransform = false,\r\n  ignoreSticky = true,\r\n  debounce: debounceDelay = 500,\r\n  lazy = false,\r\n  callback,\r\n} = {}) {\r\n  const [element, setElement] = useState()\r\n  const rectRef = useRef({})\r\n  const [rect, setRectState] = useState({})\r\n\r\n  const setRect = useCallback(\r\n    ({ top, left, width, height, element }) => {\r\n      top = top ?? rectRef.current.top\r\n      left = left ?? rectRef.current.left\r\n      width = width ?? rectRef.current.width\r\n      height = height ?? rectRef.current.height\r\n      element = element ?? rectRef.current.element\r\n\r\n      if (\r\n        top === rectRef.current.top &&\r\n        left === rectRef.current.left &&\r\n        width === rectRef.current.width &&\r\n        height === rectRef.current.height &&\r\n        element === rectRef.current.element\r\n      )\r\n        return\r\n\r\n      rectRef.current.top = top\r\n      rectRef.current.y = top\r\n      rectRef.current.width = width\r\n      rectRef.current.height = height\r\n      rectRef.current.left = left\r\n      rectRef.current.x = left\r\n      rectRef.current.bottom = top + height\r\n      rectRef.current.right = left + width\r\n      rectRef.current.element = element\r\n\r\n      callback?.(rectRef.current)\r\n\r\n      if (!lazy) {\r\n        setRectState({ ...rectRef.current })\r\n      }\r\n    },\r\n    [lazy],\r\n  )\r\n\r\n  useEffect(() => {\r\n    if (!element) return\r\n\r\n    const rect = element.getBoundingClientRect()\r\n    const width = rect.width\r\n    const height = rect.height\r\n    setRect({ width, height })\r\n\r\n    const onResize = debounce(([entry]) => {\r\n      const width = entry.borderBoxSize[0].inlineSize\r\n      const height = entry.borderBoxSize[0].blockSize\r\n\r\n      setRect({ width, height })\r\n    }, debounceDelay)\r\n\r\n    const resizeObserver = new ResizeObserver(onResize)\r\n    resizeObserver.observe(element)\r\n\r\n    return () => {\r\n      resizeObserver.disconnect()\r\n      onResize.cancel()\r\n    }\r\n  }, [element, debounceDelay, setRect])\r\n\r\n  const [wrapperElement, setWrapperElementRef] = useState()\r\n\r\n  const onWrapperResize = useCallback(() => {\r\n    if (!element) return\r\n\r\n    let top, left\r\n\r\n    if (ignoreSticky) removeParentSticky(element)\r\n    if (ignoreTransform) {\r\n      top = offsetTop(element)\r\n      left = offsetLeft(element)\r\n    } else {\r\n      const rect = element.getBoundingClientRect()\r\n      top = rect.top + scrollTop(element)\r\n      left = rect.left + scrollLeft(element)\r\n    }\r\n    if (ignoreSticky) addParentSticky(element)\r\n\r\n    setRect({ top, left, element })\r\n  }, [ignoreTransform, ignoreSticky, element, setRect])\r\n\r\n  // resize if body height changes\r\n  useEffect(() => {\r\n    onWrapperResize()\r\n    const debouncedOnWrapperResize = debounce(onWrapperResize, debounceDelay)\r\n\r\n    const resizeObserver = new ResizeObserver(debouncedOnWrapperResize)\r\n    resizeObserver.observe(wrapperElement ?? document.body)\r\n\r\n    return () => {\r\n      resizeObserver.disconnect()\r\n      debouncedOnWrapperResize.cancel()\r\n    }\r\n  }, [wrapperElement, debounceDelay, onWrapperResize])\r\n\r\n  useEffect(() => {\r\n    function onResize() {\r\n      if (!element) return\r\n      const elementRect = element.getBoundingClientRect()\r\n\r\n      const width = elementRect.width\r\n      const height = elementRect.height\r\n\r\n      setRect({ width, height })\r\n\r\n      onWrapperResize()\r\n    }\r\n\r\n    const unbind = emitter.on('resize', onResize)\r\n\r\n    return unbind\r\n  }, [element, onWrapperResize, setRect])\r\n\r\n  const getRect = useCallback(() => rectRef.current, [])\r\n\r\n  return [setElement, lazy ? getRect : rect, setWrapperElementRef]\r\n}\r\n\r\nuseRect.resize = () => {\r\n  emitter.emit('resize')\r\n}\r\n","import { useCallback, useEffect, useRef, useState } from 'react'\r\nimport debounce from 'just-debounce-it'\r\n\r\n/**\r\n * useResizeObserver - observe elements dimensions using ResizeObserver\r\n * @param {Boolean} lazy - should return a state or not\r\n * @param {Number} debounce - minimum delay between two ResizeObserver computations\r\n * @param {String} box - ResizeObserver parameter\r\n * @param {Function} callback - called on value change\r\n */\r\n\r\nexport function useResizeObserver({\r\n  lazy = false,\r\n  debounce: debounceDelay = 500,\r\n  box = 'border-box',\r\n  callback = () => {},\r\n} = {}) {\r\n  const entryRef = useRef({})\r\n  const [entry, setEntry] = useState({})\r\n  const [element, setElement] = useState()\r\n\r\n  useEffect(() => {\r\n    if (!element) return\r\n\r\n    const onResize = debounce(\r\n      ([entry]) => {\r\n        entryRef.current = entry\r\n\r\n        callback(entry)\r\n\r\n        if (!lazy) {\r\n          setEntry(entry)\r\n        }\r\n      },\r\n      debounceDelay,\r\n      true,\r\n    )\r\n\r\n    const resizeObserver = new ResizeObserver(onResize)\r\n    resizeObserver.observe(element, { box })\r\n\r\n    return () => {\r\n      resizeObserver.disconnect()\r\n      onResize.cancel()\r\n    }\r\n  }, [element, lazy, debounceDelay, box])\r\n\r\n  const get = useCallback(() => entryRef.current, [])\r\n\r\n  return [setElement, lazy ? get : entry]\r\n}\r\n","// This code is used to extract the contents of a component's children and return them as an array.\r\n// The code accepts two arguments, the names of the components that it should extract, and the children to extract from.\r\n// The code returns an array of the children of the components passed in the types argument.\r\n// based on:\r\n// https://medium.com/swlh/bring-vue-named-slots-to-react-87684188f18e\r\n\r\nimport { useMemo } from 'react'\r\n\r\nexport function useSlots(types = [], children = []) {\r\n  const _children = useMemo(() => children && [children].flat(), [children])\r\n  const _types = useMemo(() => types && [types].flat(), [types])\r\n  const slots = useMemo(() => {\r\n    if (!_children || !_types) {\r\n      return\r\n    }\r\n\r\n    const slots = _types.map((type) => _children.find((el) => el.type === type)?.props.children)\r\n\r\n    return types[0] ? slots : slots[0]\r\n  }, [_children, _types])\r\n\r\n  return slots\r\n}\r\n","import { useEffect, useState } from 'react'\r\nimport debounce from 'just-debounce-it'\r\n\r\n/**\r\n * @name useWindowSize\r\n * @description A React hook that listens to window size.\r\n * @returns {object} { width, height }\r\n */\r\n\r\nexport function useWindowSize(debounceDelay = 500) {\r\n  const [width, setWidth] = useState()\r\n  const [height, setHeight] = useState()\r\n\r\n  useEffect(() => {\r\n    const onWindowRezise = debounce(() => {\r\n      setWidth(Math.min(window.innerWidth, document.documentElement.clientWidth))\r\n      setHeight(Math.min(window.innerHeight, document.documentElement.clientHeight))\r\n    }, debounceDelay)\r\n\r\n    window.addEventListener('resize', onWindowRezise, false)\r\n\r\n    onWindowRezise()\r\n\r\n    return () => window.removeEventListener('resize', onWindowRezise, false)\r\n  }, [debounceDelay])\r\n\r\n  return { width, height }\r\n}\r\n"],"names":["useOutsideClickEvent","ref","callback","handleClickOutside","useCallback","event","current","contains","target","useEffect","document","addEventListener","removeEventListener","useIsClient","_useState","useState","isClient","setClient","useDebug","useMemo","location","window","href","searchParams","URLSearchParams","search","isDebug","includes","has","process","env","NODE_ENV","isProduction","useDocumentReadyState","readyState","setReadyState","onStateChange","useFrame","priority","Tempus","add","remove","useIntersectionObserver","_temp","deps","_ref","_ref$root","root","_ref$rootMargin","rootMargin","_ref$threshold","threshold","_ref$once","once","_ref$lazy","lazy","_ref$callback","entryRef","useRef","entry","setEntry","_useState2","element","setElement","intersection","IntersectionObserver","_ref2","isIntersecting","disconnect","observe","concat","get","useInterval","delay","interval","setInterval","clearInterval","useIsTouchDevice","isTouchDevice","setIsTouchDevice","onResize","navigator","maxTouchPoints","msMaxTouchPoints","useMediaQuery","queryString","isMatch","setIsMatch","mediaQuery","matchMedia","onChange","matches","removeParentSticky","getComputedStyle","position","style","setProperty","dataset","sticky","offsetParent","addParentSticky","_element$dataset","removeProperty","parentNode","offsetTop","accumulator","top","offsetLeft","left","scrollTop","scrollY","scrollLeft","scrollX","emitter","createNanoEvents","useRect","_ref$ignoreTransform","ignoreTransform","_ref$ignoreSticky","ignoreSticky","_ref$debounce","debounce","debounceDelay","rectRef","rect","setRectState","setRect","_top","_left","_width","_height","_element","width","height","y","x","bottom","right","_extends","getBoundingClientRect","_ref3","borderBoxSize","inlineSize","blockSize","resizeObserver","ResizeObserver","cancel","_useState3","wrapperElement","setWrapperElementRef","onWrapperResize","debouncedOnWrapperResize","body","on","elementRect","getRect","useResizeObserver","_ref$box","box","useSlots","types","children","_children","flat","_types","slots","map","type","_children$find","find","el","props","useWindowSize","setWidth","setHeight","onWindowRezise","Math","min","innerWidth","documentElement","clientWidth","innerHeight","clientHeight","resize","emit"],"mappings":"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"}